diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ВнешнееДействиеВыполнить/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ВнешнееДействиеВыполнить/Module.bsl index 4ba6678a5..cf451b7ac 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ВнешнееДействиеВыполнить/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ВнешнееДействиеВыполнить/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -15,7 +15,7 @@ ИнициализацияФормы(); КонецЕсли; - ТекущийПользователь = ОбщегоНазначения.ТекущийПользователь(); + ТекущийПользователь = Пользователи.ТекущийПользователь(); Если (Объект.Автор.Пустая() ИЛИ Не ПользовательЕстьВБазе(Объект.Автор)) И Не ПустаяСтрока(Объект.АвторСтрокой) Тогда Элементы.Автор.Видимость = Ложь; @@ -45,7 +45,7 @@ КонецЕсли; Файлы.Параметры.УстановитьЗначениеПараметра("ВладелецФайла", Объект.БизнесПроцесс.Ссылка); - Файлы.Параметры.УстановитьЗначениеПараметра("ТекущийПользователь", ОбщегоНазначения.ТекущийПользователь()); + Файлы.Параметры.УстановитьЗначениеПараметра("ТекущийПользователь", Пользователи.ТекущийПользователь()); РаботаСФайламиВызовСервера.ЗаполнитьУсловноеОформлениеСпискаФайлов(Файлы); Если РаботаСФайламиВызовСервера.ПолучитьИспользоватьЭлектронныеЦифровыеПодписиИШифрование() = Ложь Тогда @@ -61,6 +61,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + КомандыРаботыСБизнесПроцессамиКлиент.ОбновитьДоступностьКомандПринятияКИсполнению(ЭтаФорма); + +КонецПроцедуры + &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) @@ -130,8 +137,18 @@ КонецПроцедуры +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + ЗначениеПараметра = Файлы.Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВладелецФайла")); + Если Не ЗначениеЗаполнено(ЗначениеПараметра.Значение) Тогда + Файлы.Параметры.УстановитьЗначениеПараметра("ВладелецФайла", Объект.Ссылка); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура СрокНачалаИсполненияПриИзменении(Элемент) @@ -151,82 +168,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ЗаписатьИЗакрытьВыполнить() - - БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполненоВыполнить() - - ЗаданиеВыполнено = Истина; - БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтаФорма, Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура Отменено(Команда) - - ЗаданиеВыполнено = Ложь; - БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтаФорма, Истина); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаСервере -Процедура ИнициализацияФормы() - - НачальныйПризнакВыполнения = Объект.Выполнена; - ПрочитатьРеквизитыБизнесПроцесса(); - УстановитьСостояниеЭлементов(); - - ИспользоватьДатуИВремяВСрокахЗадач = ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"); - Элементы.СрокНачалаИсполненияВремя.Видимость = ИспользоватьДатуИВремяВСрокахЗадач; - Элементы.ДатаИсполненияВремя.Видимость = ИспользоватьДатуИВремяВСрокахЗадач; - БизнесПроцессыИЗадачиСервер.УстановитьФорматДаты(Элементы.СрокИсполнения); - БизнесПроцессыИЗадачиСервер.УстановитьФорматДаты(Элементы.Дата); - - БизнесПроцессыИЗадачиСервер.ФормаЗадачиПриСозданииНаСервере(ЭтаФорма, Объект, - Элементы.ГруппаСостояние, Элементы.ДатаИсполнения); - Элементы.ОписаниеРезультата.ТолькоПросмотр = Объект.Выполнена; - -КонецПроцедуры - -&НаСервере -Процедура ПрочитатьРеквизитыБизнесПроцесса() - - ЗадачаОбъект = РеквизитФормыВЗначение("Объект"); - - УстановитьПривилегированныйРежим(Истина); - ЗаданиеОбъект = ЗадачаОбъект.БизнесПроцесс.ПолучитьОбъект(); - ЗаданиеВыполнено = ЗаданиеОбъект.Выполнено; - ЗаданиеРезультатВыполнения = ЗаданиеОбъект.РезультатВыполнения; - ЗаданиеСодержание = ЗаданиеОбъект.Содержание; - -КонецПроцедуры - -&НаСервере -Процедура ЗаписатьРеквизитыБизнесПроцесса(ЗадачаОбъект) - - УстановитьПривилегированныйРежим(Истина); - ЗаданиеОбъект = ЗадачаОбъект.БизнесПроцесс.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(ЗаданиеОбъект.Ссылка); - ЗаданиеОбъект.Выполнено = ЗаданиеВыполнено; - ЗаданиеОбъект.Записать(); - -КонецПроцедуры - -&НаСервере -Процедура УстановитьСостояниеЭлементов() - - БизнесПроцессы.Задание.УстановитьСостояниеЭлементовФормыЗадачи(ЭтаФорма); - -КонецПроцедуры - &НаКлиенте Процедура ПредметНажатие(Элемент, СтандартнаяОбработка) @@ -239,33 +180,8 @@ КонецПроцедуры -&НаКлиенте -Процедура Дополнительно(Команда) - - БизнесПроцессыИЗадачиКлиент.ОткрытьДопИнформациюОЗадаче(Объект.Ссылка); - -КонецПроцедуры - -&НаКлиенте -Процедура ПринятьКИсполнению(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.ПринятьЗадачуКИсполнению(ЭтаФорма, ТекущийПользователь); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтменитьПринятиеКИсполнению(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.ОтменитьПринятиеЗадачиКИсполнению(ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - КомандыРаботыСБизнесПроцессамиКлиент.ОбновитьДоступностьКомандПринятияКИсполнению(ЭтаФорма); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Файлы &НаКлиенте Процедура СписокФайловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -293,50 +209,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбновитьДоступностьКомандСпискаФайлов() - УстановитьДоступностьКомманд(Элементы.Файлы.ТекущиеДанные); -КонецПроцедуры - -// Выбрать режим открытия файла и начать редактирование -&НаКлиенте -Функция ВыбратьРежимИРедактироватьФайл(ДанныеФайла) - - // Если уже занят для редактирования, то не спрашивать - сразу открывать - Если ДанныеФайла.Редактирует.Пустая() Тогда - - СпрашиватьРежимРедактированияПриОткрытииФайла = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().СпрашиватьРежимРедактированияПриОткрытииФайла; - Если СпрашиватьРежимРедактированияПриОткрытииФайла = Истина Тогда - - КакОткрывать = Неопределено; - - Результат = ОткрытьФормуМодально("Справочник.Файлы.Форма.ФормаВыбораРежимаОткрытия"); - Если ТипЗнч(Результат) <> Тип("Структура") Тогда - Возврат "Отмена"; - КонецЕсли; - - БольшеНеСпрашивать = Результат.БольшеНеСпрашивать; - Если БольшеНеСпрашивать = Истина Тогда - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиОткрытияФайлов", "СпрашиватьРежимРедактированияПриОткрытииФайла", Ложь); - ОбновитьПовторноИспользуемыеЗначения(); - КонецЕсли; - - КакОткрывать = Результат.КакОткрывать; - - Если КакОткрывать = 1 Тогда - РаботаСФайламиКлиент.РедактироватьФайл(ДанныеФайла); - ОповеститьОбИзменении(ДанныеФайла.Ссылка); - Возврат "Редактировать"; - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - Возврат "Открыть"; - -КонецФункции - &НаКлиенте Процедура ФайлыПриАктивизацииСтроки(Элемент) ОбновитьДоступностьКомандСпискаФайлов(); @@ -412,6 +284,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики команд, связанных с таблицей формы Файлы + &НаКлиенте Процедура ОткрытьФайл(Команда) Если Элементы.Файлы.ТекущаяСтрока = Неопределено Тогда @@ -459,13 +334,6 @@ ОбновитьДоступностьКомандСпискаФайлов(); КонецПроцедуры -&НаСервере -Процедура ПодписатьЭЦПФайлСервер(ДанныеДляЗанесенияВРегистр) - - РаботаСФайламиВызовСервера.ЗанестиИнформациюОднойПодписи(ДанныеДляЗанесенияВРегистр); - -КонецПроцедуры - &НаКлиенте Процедура ДобавитьЭЦПИзФайла(Команда) Если Элементы.Файлы.ТекущаяСтрока = Неопределено Тогда @@ -518,176 +386,6 @@ ОбновитьДоступностьКомандСпискаФайлов(); КонецПроцедуры -&НаСервере -Процедура РасшифроватьСервер(МассивДанныхДляЗанесенияВБазу, - ИмяРабочегоКаталога, ОбъектСсылка) - - Зашифровать = Ложь; - МассивОтпечатков = Новый Массив; - МассивФайловВРабочемКаталогеДляУдаления = Новый Массив; - - РаботаСФайламиВызовСервера.ЗанестиИнформациюОШифровании(ОбъектСсылка, Зашифровать, МассивДанныхДляЗанесенияВБазу, - УникальныйИдентификатор, - ИмяРабочегоКаталога, МассивФайловВРабочемКаталогеДляУдаления, МассивОтпечатков); - -КонецПроцедуры - -&НаКлиенте -Процедура Зашифровать(Команда) - - Если Элементы.Файлы.ТекущаяСтрока = Неопределено Тогда - Возврат; - КонецЕсли; - - Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда - Предупреждение(НСтр("ru='Для выполнения команды ""Зашифровать"" вам нужно установить расширение работы с криптографией.'")); - Возврат; - КонецЕсли; - - ОбъектСсылка = Элементы.Файлы.ТекущаяСтрока; - ДанныеФайла = РаботаСФайламиВызовСервера.ПолучитьДанныеФайлаИКоличествоВерсий(ОбъектСсылка); - - МассивДанныхДляЗанесенияВБазу = Новый Массив; - МассивОтпечатков = Новый Массив; - - Если НЕ КомандыРаботыСФайламиКлиент.Зашифровать(ДанныеФайла, УникальныйИдентификатор, - МассивДанныхДляЗанесенияВБазу, МассивОтпечатков) Тогда - Возврат; - КонецЕсли; - - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяРабочегоКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; - - МассивФайловВРабочемКаталогеДляУдаления = Новый Массив; - - ЗашифроватьСервер(МассивДанныхДляЗанесенияВБазу, МассивОтпечатков, - МассивФайловВРабочемКаталогеДляУдаления, - ИмяРабочегоКаталога, ОбъектСсылка); - - РаботаСФайламиКлиент.ИнформироватьОШифровании(МассивФайловВРабочемКаталогеДляУдаления, - ДанныеФайла.Владелец, ОбъектСсылка); - - ОбновитьДоступностьКомандСпискаФайлов(); -КонецПроцедуры - -&НаСервере -Процедура ЗашифроватьСервер(МассивДанныхДляЗанесенияВБазу, МассивОтпечатков, - МассивФайловВРабочемКаталогеДляУдаления, - ИмяРабочегоКаталога, ОбъектСсылка) - - Зашифровать = Истина; - РаботаСФайламиВызовСервера.ЗанестиИнформациюОШифровании(ОбъектСсылка, Зашифровать, МассивДанныхДляЗанесенияВБазу, - УникальныйИдентификатор, - ИмяРабочегоКаталога, МассивФайловВРабочемКаталогеДляУдаления, МассивОтпечатков); - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьДоступностьКомманды(Команда, Доступность) - Команда.Доступность = Доступность; -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьДоступностьКомманд(ТекущиеДанные) - - Если ТекущиеДанные = Неопределено Тогда - - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюОткрытьФайл, Ложь); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюРедактировать, Ложь); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюЗакончитьРедактирование, Ложь); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюЗанять, Ложь); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюСохранитьИзменения, Ложь); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюСохранитьКак, Ложь); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюОсвободить, Ложь); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюОбновитьИзФайлаНаДиске, Ложь); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюПодписатьФайл, Ложь); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюДобавитьЭЦПИзФайла, Ложь); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюСохранитьВместеСЭЦП, Ложь); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюЗашифровать, Ложь); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюРасшифровать, Ложь); - - Иначе - - РедактируетТекущийПользователь = ТекущиеДанные.РедактируетТекущийПользователь; - Редактирует = ТекущиеДанные.Редактирует; - ПодписанЭЦП = ТекущиеДанные.ПодписанЭЦП; - Зашифрован = ТекущиеДанные.Зашифрован; - - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюОткрытьФайл, Истина); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюРедактировать, НЕ ТекущиеДанные.ПодписанЭЦП); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюЗакончитьРедактирование, РедактируетТекущийПользователь); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюЗанять, Редактирует.Пустая()); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюСохранитьИзменения, РедактируетТекущийПользователь); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюСохранитьКак, Истина); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюОсвободить, Не Редактирует.Пустая()); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюОбновитьИзФайлаНаДиске, Истина); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюПодписатьФайл, Редактирует.Пустая() И НЕ Зашифрован); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюДобавитьЭЦПИзФайла, Редактирует.Пустая() И НЕ Зашифрован); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюСохранитьВместеСЭЦП, ПодписанЭЦП); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюЗашифровать, Редактирует.Пустая() И НЕ Зашифрован); - УстановитьДоступностьКомманды(Элементы.ФайлыКонтекстноеМенюРасшифровать, Зашифрован); - - КонецЕсли; - -КонецПроцедуры - - -&НаКлиенте -Процедура ИмпортФайлов(Команда) - - ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); - РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); - - Если НЕ РасширениеПодключено Тогда - Предупреждение(НСтр("ru = 'Для импорта файлов необходимо установить расширение работы с файлами.'")); - Иначе - - Если Объект.Ссылка.Пустая() Тогда - Если Не Записать() Тогда - Возврат; - КонецЕсли; - - ПоказатьОповещениеПользователя( - "Создание:", - ПолучитьНавигационнуюСсылку(Объект.Ссылка), - Строка(Объект.Ссылка), - БиблиотекаКартинок.Информация32); - КонецЕсли; - - ВыполнитьИмпортФайлов(Объект.БизнесПроцесс); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -// Выполнить импорт файлов -Процедура ВыполнитьИмпортФайлов(ВладелецИмпортированныхФайлов) - - // заранее выбираем файлы (до открытия диалога импорта) - Режим = РежимДиалогаВыбораФайла.Открытие; - - ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); - ДиалогОткрытияФайла.ПолноеИмяФайла = ""; - Фильтр = НСтр("ru = 'Все файлы(*.*)|*.*'"); - ДиалогОткрытияФайла.Фильтр = Фильтр; - ДиалогОткрытияФайла.МножественныйВыбор = Истина; - ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите файлы'"); - Если ДиалогОткрытияФайла.Выбрать() Тогда - МассивИменФайлов = Новый Массив; - - МассивФайлов = ДиалогОткрытияФайла.ВыбранныеФайлы; - Для Каждого ИмяФайла Из МассивФайлов Цикл - МассивИменФайлов.Добавить(ИмяФайла); - КонецЦикла; - - ПараметрыИмпорта = Новый Структура("ПапкаДляДобавления, МассивИменФайлов", - ВладелецИмпортированныхФайлов, МассивИменФайлов); - ОткрытьФорму("Справочник.Файлы.Форма.ФормаИмпортаФайлов", ПараметрыИмпорта); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ОбновитьИзФайлаНаДиске(Команда) Если Элементы.Файлы.ТекущаяСтрока = Неопределено Тогда @@ -784,16 +482,326 @@ КонецПроцедуры -&НаСервере -Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) +&НаКлиенте +Процедура Зашифровать(Команда) - ЗначениеПараметра = Файлы.Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВладелецФайла")); - Если Не ЗначениеЗаполнено(ЗначениеПараметра.Значение) Тогда - Файлы.Параметры.УстановитьЗначениеПараметра("ВладелецФайла", Объект.Ссылка); + Если Элементы.Файлы.ТекущаяСтрока = Неопределено Тогда + Возврат; + КонецЕсли; + + Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда + Предупреждение(НСтр("ru='Для выполнения команды ""Зашифровать"" вам нужно установить расширение работы с криптографией.'")); + Возврат; + КонецЕсли; + + ОбъектСсылка = Элементы.Файлы.ТекущаяСтрока; + ДанныеФайла = РаботаСФайламиВызовСервера.ПолучитьДанныеФайлаИКоличествоВерсий(ОбъектСсылка); + + МассивДанныхДляЗанесенияВБазу = Новый Массив; + МассивОтпечатков = Новый Массив; + + Если НЕ КомандыРаботыСФайламиКлиент.Зашифровать(ДанныеФайла, УникальныйИдентификатор, + МассивДанныхДляЗанесенияВБазу, МассивОтпечатков) Тогда + Возврат; КонецЕсли; + + ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); + ИмяРабочегоКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + + МассивФайловВРабочемКаталогеДляУдаления = Новый Массив; + + ЗашифроватьСервер(МассивДанныхДляЗанесенияВБазу, МассивОтпечатков, + МассивФайловВРабочемКаталогеДляУдаления, + ИмяРабочегоКаталога, ОбъектСсылка); + + РаботаСФайламиКлиент.ИнформироватьОШифровании(МассивФайловВРабочемКаталогеДляУдаления, + ДанныеФайла.Владелец, ОбъектСсылка); + + ОбновитьДоступностьКомандСпискаФайлов(); +КонецПроцедуры + +&НаКлиенте +Процедура ИмпортФайлов(Команда) + + ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); + РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); + + Если НЕ РасширениеПодключено Тогда + Предупреждение(НСтр("ru = 'Для импорта файлов необходимо установить расширение работы с файлами.'")); + Иначе + + Если Объект.Ссылка.Пустая() Тогда + Если Не Записать() Тогда + Возврат; + КонецЕсли; + + ПоказатьОповещениеПользователя( + "Создание:", + ПолучитьНавигационнуюСсылку(Объект.Ссылка), + Строка(Объект.Ссылка), + БиблиотекаКартинок.Информация32); + КонецЕсли; + + ВыполнитьИмпортФайлов(Объект.БизнесПроцесс); + + КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ЗаписатьИЗакрытьВыполнить(Команда) + + БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполненоВыполнить(Команда) + + ЗаданиеВыполнено = Истина; + БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтаФорма, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура Отменено(Команда) + + ЗаданиеВыполнено = Ложь; + БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтаФорма, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура Дополнительно(Команда) + + БизнесПроцессыИЗадачиКлиент.ОткрытьДопИнформациюОЗадаче(Объект.Ссылка); + +КонецПроцедуры + +&НаКлиенте +Процедура ПринятьКИсполнению(Команда) + + КомандыРаботыСБизнесПроцессамиКлиент.ПринятьЗадачуКИсполнению(ЭтаФорма, ТекущийПользователь); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьПринятиеКИсполнению(Команда) + + КомандыРаботыСБизнесПроцессамиКлиент.ОтменитьПринятиеЗадачиКИсполнению(ЭтаФорма); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ИнициализацияФормы() + + НачальныйПризнакВыполнения = Объект.Выполнена; + ПрочитатьРеквизитыБизнесПроцесса(); + УстановитьСостояниеЭлементов(); + + ИспользоватьДатуИВремяВСрокахЗадач = ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"); + Элементы.СрокНачалаИсполненияВремя.Видимость = ИспользоватьДатуИВремяВСрокахЗадач; + Элементы.ДатаИсполненияВремя.Видимость = ИспользоватьДатуИВремяВСрокахЗадач; + БизнесПроцессыИЗадачиСервер.УстановитьФорматДаты(Элементы.СрокИсполнения); + БизнесПроцессыИЗадачиСервер.УстановитьФорматДаты(Элементы.Дата); + + БизнесПроцессыИЗадачиСервер.ФормаЗадачиПриСозданииНаСервере(ЭтаФорма, Объект, + Элементы.ГруппаСостояние, Элементы.ДатаИсполнения); + Элементы.ОписаниеРезультата.ТолькоПросмотр = Объект.Выполнена; + +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьРеквизитыБизнесПроцесса() + + ЗадачаОбъект = РеквизитФормыВЗначение("Объект"); + + УстановитьПривилегированныйРежим(Истина); + ЗаданиеОбъект = ЗадачаОбъект.БизнесПроцесс.ПолучитьОбъект(); + ЗаданиеВыполнено = ЗаданиеОбъект.Выполнено; + ЗаданиеРезультатВыполнения = ЗаданиеОбъект.РезультатВыполнения; + ЗаданиеСодержание = ЗаданиеОбъект.Содержание; + +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьРеквизитыБизнесПроцесса(ЗадачаОбъект) + + УстановитьПривилегированныйРежим(Истина); + ЗаданиеОбъект = ЗадачаОбъект.БизнесПроцесс.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(ЗаданиеОбъект.Ссылка); + ЗаданиеОбъект.Выполнено = ЗаданиеВыполнено; + ЗаданиеОбъект.Записать(); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьСостояниеЭлементов() + + БизнесПроцессы.Задание.УстановитьСостояниеЭлементовФормыЗадачи(ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьДоступностьКомандСпискаФайлов() + УстановитьДоступностьКоманд(Элементы.Файлы.ТекущиеДанные); +КонецПроцедуры + +// Выбрать режим открытия файла и начать редактирование +&НаКлиенте +Функция ВыбратьРежимИРедактироватьФайл(ДанныеФайла) + + // Если уже занят для редактирования, то не спрашивать - сразу открывать + Если ДанныеФайла.Редактирует.Пустая() Тогда + + СпрашиватьРежимРедактированияПриОткрытииФайла = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().СпрашиватьРежимРедактированияПриОткрытииФайла; + Если СпрашиватьРежимРедактированияПриОткрытииФайла = Истина Тогда + + КакОткрывать = Неопределено; + + Результат = ОткрытьФормуМодально("Справочник.Файлы.Форма.ФормаВыбораРежимаОткрытия"); + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Возврат "Отмена"; + КонецЕсли; + + БольшеНеСпрашивать = Результат.БольшеНеСпрашивать; + Если БольшеНеСпрашивать = Истина Тогда + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиОткрытияФайлов", "СпрашиватьРежимРедактированияПриОткрытииФайла", Ложь); + ОбновитьПовторноИспользуемыеЗначения(); + КонецЕсли; + + КакОткрывать = Результат.КакОткрывать; + + Если КакОткрывать = 1 Тогда + РаботаСФайламиКлиент.РедактироватьФайл(ДанныеФайла); + ОповеститьОбИзменении(ДанныеФайла.Ссылка); + Возврат "Редактировать"; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Возврат "Открыть"; + +КонецФункции + +&НаСервере +Процедура ПодписатьЭЦПФайлСервер(ДанныеДляЗанесенияВРегистр) + + РаботаСФайламиВызовСервера.ЗанестиИнформациюОднойПодписи(ДанныеДляЗанесенияВРегистр); + +КонецПроцедуры + +&НаСервере +Процедура РасшифроватьСервер(МассивДанныхДляЗанесенияВБазу, + ИмяРабочегоКаталога, ОбъектСсылка) + + Зашифровать = Ложь; + МассивОтпечатков = Новый Массив; + МассивФайловВРабочемКаталогеДляУдаления = Новый Массив; + + РаботаСФайламиВызовСервера.ЗанестиИнформациюОШифровании(ОбъектСсылка, Зашифровать, МассивДанныхДляЗанесенияВБазу, + УникальныйИдентификатор, + ИмяРабочегоКаталога, МассивФайловВРабочемКаталогеДляУдаления, МассивОтпечатков); + +КонецПроцедуры + +&НаСервере +Процедура ЗашифроватьСервер(МассивДанныхДляЗанесенияВБазу, МассивОтпечатков, + МассивФайловВРабочемКаталогеДляУдаления, + ИмяРабочегоКаталога, ОбъектСсылка) + + Зашифровать = Истина; + РаботаСФайламиВызовСервера.ЗанестиИнформациюОШифровании(ОбъектСсылка, Зашифровать, МассивДанныхДляЗанесенияВБазу, + УникальныйИдентификатор, + ИмяРабочегоКаталога, МассивФайловВРабочемКаталогеДляУдаления, МассивОтпечатков); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДоступностьКоманды(Команда, Доступность) + Команда.Доступность = Доступность; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДоступностьКоманд(ТекущиеДанные) + + Если ТекущиеДанные = Неопределено Тогда + + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюОткрытьФайл, Ложь); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюРедактировать, Ложь); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюЗакончитьРедактирование, Ложь); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюЗанять, Ложь); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюСохранитьИзменения, Ложь); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюСохранитьКак, Ложь); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюОсвободить, Ложь); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюОбновитьИзФайлаНаДиске, Ложь); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюПодписатьФайл, Ложь); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюДобавитьЭЦПИзФайла, Ложь); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюСохранитьВместеСЭЦП, Ложь); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюЗашифровать, Ложь); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюРасшифровать, Ложь); + + Иначе + + РедактируетТекущийПользователь = ТекущиеДанные.РедактируетТекущийПользователь; + Редактирует = ТекущиеДанные.Редактирует; + ПодписанЭЦП = ТекущиеДанные.ПодписанЭЦП; + Зашифрован = ТекущиеДанные.Зашифрован; + + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюОткрытьФайл, Истина); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюРедактировать, НЕ ТекущиеДанные.ПодписанЭЦП); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюЗакончитьРедактирование, РедактируетТекущийПользователь); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюЗанять, Редактирует.Пустая()); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюСохранитьИзменения, РедактируетТекущийПользователь); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюСохранитьКак, Истина); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюОсвободить, Не Редактирует.Пустая()); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюОбновитьИзФайлаНаДиске, Истина); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюПодписатьФайл, Редактирует.Пустая() И НЕ Зашифрован); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюДобавитьЭЦПИзФайла, Редактирует.Пустая() И НЕ Зашифрован); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюСохранитьВместеСЭЦП, ПодписанЭЦП); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюЗашифровать, Редактирует.Пустая() И НЕ Зашифрован); + УстановитьДоступностьКоманды(Элементы.ФайлыКонтекстноеМенюРасшифровать, Зашифрован); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +// Выполнить импорт файлов +Процедура ВыполнитьИмпортФайлов(ВладелецИмпортированныхФайлов) + + // заранее выбираем файлы (до открытия диалога импорта) + Режим = РежимДиалогаВыбораФайла.Открытие; + + ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); + ДиалогОткрытияФайла.ПолноеИмяФайла = ""; + Фильтр = НСтр("ru = 'Все файлы(*.*)|*.*'"); + ДиалогОткрытияФайла.Фильтр = Фильтр; + ДиалогОткрытияФайла.МножественныйВыбор = Истина; + ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите файлы'"); + Если ДиалогОткрытияФайла.Выбрать() Тогда + МассивИменФайлов = Новый Массив; + + МассивФайлов = ДиалогОткрытияФайла.ВыбранныеФайлы; + Для Каждого ИмяФайла Из МассивФайлов Цикл + МассивИменФайлов.Добавить(ИмяФайла); + КонецЦикла; + + ПараметрыИмпорта = Новый Структура("ПапкаДляДобавления, МассивИменФайлов", + ВладелецИмпортированныхФайлов, МассивИменФайлов); + ОткрытьФорму("Справочник.Файлы.Форма.ФормаИмпортаФайлов", ПараметрыИмпорта); + КонецЕсли; + +КонецПроцедуры + &НаСервере Функция ПользовательЕстьВБазе(Автор) diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl index 6eddae362..507270eb7 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -15,7 +15,14 @@ ИнициализацияФормы(); КонецЕсли; - ТекущийПользователь = ОбщегоНазначения.ТекущийПользователь(); + ТекущийПользователь = Пользователи.ТекущийПользователь(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + КомандыРаботыСБизнесПроцессамиКлиент.ОбновитьДоступностьКомандПринятияКИсполнению(ЭтаФорма); КонецПроцедуры @@ -53,7 +60,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура СрокНачалаИсполненияПриИзменении(Элемент) @@ -81,7 +88,22 @@ КонецПроцедуры &НаКлиенте -Процедура ВыполненоВыполнить() +Процедура ПредметНажатие(Элемент, СтандартнаяОбработка) + + Если ТипЗнч(Объект.Предмет) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда + БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Объект.Предмет); + Иначе + ОткрытьЗначение(Объект.Предмет); + КонецЕсли; + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ВыполненоВыполнить(Команда) ЗаданиеВыполнено = Истина; БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтаФорма, Истина); @@ -96,8 +118,29 @@ КонецПроцедуры +&НаКлиенте +Процедура Дополнительно(Команда) + + БизнесПроцессыИЗадачиКлиент.ОткрытьДопИнформациюОЗадаче(Объект.Ссылка); + +КонецПроцедуры + +&НаКлиенте +Процедура ПринятьКИсполнению(Команда) + + КомандыРаботыСБизнесПроцессамиКлиент.ПринятьЗадачуКИсполнению(ЭтаФорма, ТекущийПользователь); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьПринятиеКИсполнению(Команда) + + КомандыРаботыСБизнесПроцессамиКлиент.ОтменитьПринятиеЗадачиКИсполнению(ЭтаФорма); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ИнициализацияФормы() @@ -149,42 +192,3 @@ КонецПроцедуры -&НаКлиенте -Процедура ПредметНажатие(Элемент, СтандартнаяОбработка) - - Если ТипЗнч(Объект.Предмет) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Объект.Предмет); - Иначе - ОткрытьЗначение(Объект.Предмет); - КонецЕсли; - СтандартнаяОбработка = Ложь; - -КонецПроцедуры - -&НаКлиенте -Процедура Дополнительно(Команда) - - БизнесПроцессыИЗадачиКлиент.ОткрытьДопИнформациюОЗадаче(Объект.Ссылка); - -КонецПроцедуры - -&НаКлиенте -Процедура ПринятьКИсполнению(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.ПринятьЗадачуКИсполнению(ЭтаФорма, ТекущийПользователь); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтменитьПринятиеКИсполнению(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.ОтменитьПринятиеЗадачиКИсполнению(ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - КомандыРаботыСБизнесПроцессамиКлиент.ОбновитьДоступностьКомандПринятияКИсполнению(ЭтаФорма); - -КонецПроцедуры diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl index d9f994595..4b4215d96 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -15,10 +15,17 @@ ИнициализацияФормы(); КонецЕсли; - ТекущийПользователь = ОбщегоНазначения.ТекущийПользователь(); + ТекущийПользователь = Пользователи.ТекущийПользователь(); КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + КомандыРаботыСБизнесПроцессамиКлиент.ОбновитьДоступностьКомандПринятияКИсполнению(ЭтаФорма); + +КонецПроцедуры + &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) @@ -69,17 +76,39 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ &НаКлиенте -Процедура ЗаписатьИЗакрытьВыполнить() +Процедура СрокНачалаИсполненияПриИзменении(Элемент) + + Если Объект.ДатаНачала = НачалоДня(Объект.ДатаНачала) Тогда + Объект.ДатаНачала = КонецДня(Объект.ДатаНачала); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПредметНажатие(Элемент, СтандартнаяОбработка) + Если ТипЗнч(Объект.Предмет) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда + БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Объект.Предмет); + Иначе + ОткрытьЗначение(Объект.Предмет); + КонецЕсли; + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ЗаписатьИЗакрытьВыполнить(Команда) БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтаФорма); КонецПроцедуры &НаКлиенте -Процедура Выполнено() +Процедура Выполнено(Команда) ЗаданиеПодтверждено = Истина; ЗаданиеВыполнено = Истина; @@ -88,7 +117,7 @@ КонецПроцедуры &НаКлиенте -Процедура Возвращено() +Процедура Возвращено(Команда) ЗаданиеПодтверждено = Ложь; ЗаданиеВыполнено = Ложь; @@ -106,7 +135,7 @@ КонецПроцедуры &НаКлиенте -Процедура ИзменитьЗаданиеВыполнить() +Процедура ИзменитьЗаданиеВыполнить(Команда) Записать(); ОткрытьЗначение(ЗаданиеСсылка); @@ -121,13 +150,18 @@ КонецПроцедуры &НаКлиенте -Процедура СрокНачалаИсполненияПриИзменении(Элемент) +Процедура ПринятьКИсполнению(Команда) - Если Объект.ДатаНачала = НачалоДня(Объект.ДатаНачала) Тогда - Объект.ДатаНачала = КонецДня(Объект.ДатаНачала); - КонецЕсли; + КомандыРаботыСБизнесПроцессамиКлиент.ПринятьЗадачуКИсполнению(ЭтаФорма, ТекущийПользователь); КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьПринятиеКИсполнению(Команда) + + КомандыРаботыСБизнесПроцессамиКлиент.ОтменитьПринятиеЗадачиКИсполнению(ЭтаФорма); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -184,34 +218,3 @@ БизнесПроцессы.Задание.УстановитьСостояниеЭлементовФормыЗадачи(ЭтаФорма); КонецПроцедуры - -&НаКлиенте -Процедура ПредметНажатие(Элемент, СтандартнаяОбработка) - Если ТипЗнч(Объект.Предмет) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Объект.Предмет); - Иначе - ОткрытьЗначение(Объект.Предмет); - КонецЕсли; - СтандартнаяОбработка = Ложь; -КонецПроцедуры - -&НаКлиенте -Процедура ПринятьКИсполнению(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.ПринятьЗадачуКИсполнению(ЭтаФорма, ТекущийПользователь); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтменитьПринятиеКИсполнению(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.ОтменитьПринятиеЗадачиКИсполнению(ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - КомандыРаботыСБизнесПроцессамиКлиент.ОбновитьДоступностьКомандПринятияКИсполнению(ЭтаФорма); - -КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl index f3b1e5ec6..5bfa7f39c 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -67,8 +67,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура НаПроверкеПриИзменении(Элемент) @@ -87,57 +86,6 @@ СтандартнаяОбработка = Ложь; КонецПроцедуры -&НаКлиенте -Процедура СрокИсполненияПриИзменении(Элемент) - Если Объект.СрокИсполнения = НачалоДня(Объект.СрокИсполнения) Тогда - Объект.СрокИсполнения = КонецДня(Объект.СрокИсполнения); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СрокПроверкиПриИзменении(Элемент) - Если Объект.СрокПроверки = НачалоДня(Объект.СрокПроверки) Тогда - Объект.СрокПроверки = КонецДня(Объект.СрокПроверки); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура Остановить(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.ОстановитьБизнесПроцессИзФормыОбъекта(ЭтаФорма); - ОбновитьДоступностьКомандОстановки(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПродолжитьБизнесПроцесс(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.ПродолжитьБизнесПроцессИзФормыОбъекта(ЭтаФорма); - ОбновитьДоступностьКомандОстановки(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбновитьДоступностьКомандОстановки() - - Если Объект.Завершен Тогда - - Элементы.ФормаОстановить.Доступность = Ложь; - Элементы.ФормаПродолжить.Доступность = Ложь; - Возврат; - - КонецЕсли; - - Если Объект.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияБизнесПроцессов.Остановлен") Тогда - Элементы.ФормаОстановить.Доступность = Ложь; - Элементы.ФормаПродолжить.Доступность = Истина; - Иначе - Элементы.ФормаОстановить.Доступность = Истина; - Элементы.ФормаПродолжить.Доступность = Ложь; - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ГлавнаяЗадачаНажатие(Элемент, СтандартнаяОбработка) @@ -156,15 +104,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПроверяющийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - БизнесПроцессыИЗадачиКлиент.ВыбратьИсполнителя( - Элемент, Объект.Проверяющий, Истина, Ложь); - -КонецПроцедуры - &НаКлиенте Процедура ИсполнительПриИзменении(Элемент) @@ -192,6 +131,163 @@ КонецПроцедуры +&НаКлиенте +Процедура ИсполнительОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда + СтандартнаяОбработка = Ложь; + + Объект.Исполнитель = ВыбранноеЗначение.РольИсполнителя; + + Модифицированность = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИсполнительАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) + + Если ЗначениеЗаполнено(Текст) Тогда + СтандартнаяОбработка = Ложь; + ДанныеВыбора = БизнесПроцессыИЗадачиВызовСервера.СформироватьДанныеВыбораИсполнителя(Текст); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИсполнительОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) + + Если ЗначениеЗаполнено(Текст) Тогда + СтандартнаяОбработка = Ложь; + ДанныеВыбора = БизнесПроцессыИЗадачиВызовСервера.СформироватьДанныеВыбораИсполнителя(Текст); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверяющийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + БизнесПроцессыИЗадачиКлиент.ВыбратьИсполнителя( + Элемент, Объект.Проверяющий, Истина, Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверяющийПриИзменении(Элемент) + + ОсновнойОбъектАдресации = Неопределено; + ДополнительныйОбъектАдресации = Неопределено; + + Если ТипЗнч(Объект.Проверяющий) = Тип("СправочникСсылка.РолиИсполнителей") И ЗначениеЗаполнено(Объект.Проверяющий) Тогда + + Если ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Проверяющий, "ИспользуетсяСОбъектамиАдресации") Тогда + Результат = ОткрытьФормуМодально("ОбщаяФорма.ВыборРолиИсполнителя", + Новый Структура("РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации", + Объект.Проверяющий, + ОсновнойОбъектАдресации, + ДополнительныйОбъектАдресации), + ЭтаФорма); + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + Объект.Проверяющий = Результат.РольИсполнителя; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверяющийОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда + СтандартнаяОбработка = Ложь; + + Объект.Проверяющий = ВыбранноеЗначение.РольИсполнителя; + + Модифицированность = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверяющийАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) + + Если ЗначениеЗаполнено(Текст) Тогда + СтандартнаяОбработка = Ложь; + ДанныеВыбора = БизнесПроцессыИЗадачиВызовСервера.СформироватьДанныеВыбораИсполнителя(Текст); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверяющийОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) + + Если ЗначениеЗаполнено(Текст) Тогда + СтандартнаяОбработка = Ложь; + ДанныеВыбора = БизнесПроцессыИЗадачиВызовСервера.СформироватьДанныеВыбораИсполнителя(Текст); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СрокИсполненияПриИзменении(Элемент) + Если Объект.СрокИсполнения = НачалоДня(Объект.СрокИсполнения) Тогда + Объект.СрокИсполнения = КонецДня(Объект.СрокИсполнения); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СрокПроверкиПриИзменении(Элемент) + Если Объект.СрокПроверки = НачалоДня(Объект.СрокПроверки) Тогда + Объект.СрокПроверки = КонецДня(Объект.СрокПроверки); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Остановить(Команда) + + КомандыРаботыСБизнесПроцессамиКлиент.ОстановитьБизнесПроцессИзФормыОбъекта(ЭтаФорма); + ОбновитьДоступностьКомандОстановки(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьБизнесПроцесс(Команда) + + КомандыРаботыСБизнесПроцессамиКлиент.ПродолжитьБизнесПроцессИзФормыОбъекта(ЭтаФорма); + ОбновитьДоступностьКомандОстановки(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ОбновитьДоступностьКомандОстановки() + + Если Объект.Завершен Тогда + + Элементы.ФормаОстановить.Доступность = Ложь; + Элементы.ФормаПродолжить.Доступность = Ложь; + Возврат; + + КонецЕсли; + + Если Объект.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияБизнесПроцессов.Остановлен") Тогда + Элементы.ФормаОстановить.Доступность = Ложь; + Элементы.ФормаПродолжить.Доступность = Истина; + Иначе + Элементы.ФормаОстановить.Доступность = Истина; + Элементы.ФормаПродолжить.Доступность = Ложь; + КонецЕсли; + +КонецПроцедуры + &НаКлиентеНаСервереБезКонтекста Процедура УстановитьДоступностьПроверяющего(Форма) @@ -220,99 +316,3 @@ КонецПроцедуры -&НаКлиенте -Процедура ИсполнительОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда - СтандартнаяОбработка = Ложь; - - Объект.Исполнитель = ВыбранноеЗначение.РольИсполнителя; - - Модифицированность = Истина; - КонецЕсли; - -КонецПроцедуры - - -&НаКлиенте -Процедура ИсполнительАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) - - Если ЗначениеЗаполнено(Текст) Тогда - СтандартнаяОбработка = Ложь; - ДанныеВыбора = БизнесПроцессыИЗадачиВызовСервера.СформироватьДанныеВыбораИсполнителя(Текст); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ИсполнительОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) - - Если ЗначениеЗаполнено(Текст) Тогда - СтандартнаяОбработка = Ложь; - ДанныеВыбора = БизнесПроцессыИЗадачиВызовСервера.СформироватьДанныеВыбораИсполнителя(Текст); - КонецЕсли; - -КонецПроцедуры - - -&НаКлиенте -Процедура ПроверяющийПриИзменении(Элемент) - - ОсновнойОбъектАдресации = Неопределено; - ДополнительныйОбъектАдресации = Неопределено; - - Если ТипЗнч(Объект.Проверяющий) = Тип("СправочникСсылка.РолиИсполнителей") И ЗначениеЗаполнено(Объект.Проверяющий) Тогда - - Если ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Проверяющий, "ИспользуетсяСОбъектамиАдресации") Тогда - Результат = ОткрытьФормуМодально("ОбщаяФорма.ВыборРолиИсполнителя", - Новый Структура("РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации", - Объект.Проверяющий, - ОсновнойОбъектАдресации, - ДополнительныйОбъектАдресации), - ЭтаФорма); - - Если ТипЗнч(Результат) = Тип("Структура") Тогда - Объект.Проверяющий = Результат.РольИсполнителя; - КонецЕсли; - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - - -&НаКлиенте -Процедура ПроверяющийОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда - СтандартнаяОбработка = Ложь; - - Объект.Проверяющий = ВыбранноеЗначение.РольИсполнителя; - - Модифицированность = Истина; - КонецЕсли; - -КонецПроцедуры - - -&НаКлиенте -Процедура ПроверяющийАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) - - Если ЗначениеЗаполнено(Текст) Тогда - СтандартнаяОбработка = Ложь; - ДанныеВыбора = БизнесПроцессыИЗадачиВызовСервера.СформироватьДанныеВыбораИсполнителя(Текст); - КонецЕсли; - -КонецПроцедуры - - -&НаКлиенте -Процедура ПроверяющийОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) - - Если ЗначениеЗаполнено(Текст) Тогда - СтандартнаяОбработка = Ложь; - ДанныеВыбора = БизнесПроцессыИЗадачиВызовСервера.СформироватьДанныеВыбораИсполнителя(Текст); - КонецЕсли; - -КонецПроцедуры - diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form index d6283994e..8b2c65df8 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form @@ -23,7 +23,7 @@ ПоАвторуРасширеннаяПодсказка - 57 + 56 Label true true @@ -69,7 +69,7 @@ ПоИсполнителюРасширеннаяПодсказка - 59 + 58 Label true true @@ -115,7 +115,7 @@ ПоПроверяющемуРасширеннаяПодсказка - 61 + 60 Label true true @@ -155,7 +155,7 @@ ГруппаПоРеквизитамРасширеннаяПодсказка - 56 + 55 Label true true @@ -193,7 +193,7 @@ ПоказыватьЗавершенныеЗаданияРасширеннаяПодсказка - 64 + 63 Label true true @@ -231,7 +231,7 @@ ПоказыватьОстановленныеРасширеннаяПодсказка - 66 + 65 Label true true @@ -266,7 +266,7 @@ ФлажкиРасширеннаяПодсказка - 63 + 62 Label true true @@ -294,7 +294,7 @@ ГруппаОтборРасширеннаяПодсказка - 55 + 54 Label true true @@ -312,6 +312,90 @@ Auto + + КоманднаяПанель + 53 + + ФормаОстановить + 51 + true + true + + true + + + ФормаОстановитьРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + Form.Command.Остановить + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПродолжитьБизнесПроцесс + 52 + true + true + + true + + + ФормаПродолжитьБизнесПроцессРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + Form.Command.ПродолжитьБизнесПроцесс + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + CommandBar + + Left + Form + + Список 1 @@ -340,7 +424,7 @@ None ВажностьКартинкаРасширеннаяПодсказка - 78 + 80 Label true true @@ -390,7 +474,7 @@ ОстановленРасширеннаяПодсказка - 80 + 82 Label true true @@ -437,7 +521,7 @@ true НомерРасширеннаяПодсказка - 82 + 84 Label true true @@ -473,7 +557,7 @@ ДатаРасширеннаяПодсказка - 84 + 86 Label true true @@ -509,7 +593,7 @@ НаименованиеРасширеннаяПодсказка - 86 + 88 Label true true @@ -545,7 +629,7 @@ СодержаниеРасширеннаяПодсказка - 88 + 90 Label true true @@ -581,7 +665,7 @@ ПредметРасширеннаяПодсказка - 90 + 92 Label true true @@ -617,7 +701,7 @@ СрокИсполненияРасширеннаяПодсказка - 92 + 94 Label true true @@ -651,7 +735,7 @@ СрокПроверкиРасширеннаяПодсказка - 94 + 96 Label true true @@ -685,7 +769,7 @@ СтартованРасширеннаяПодсказка - 96 + 98 Label true true @@ -718,7 +802,7 @@ ДатаЗавершенияРасширеннаяПодсказка - 98 + 100 Label true true @@ -752,7 +836,7 @@ ВедущаяЗадачаРасширеннаяПодсказка - 100 + 102 Label true true @@ -788,7 +872,7 @@ НомерИтерацииРасширеннаяПодсказка - 102 + 104 Label true true @@ -822,7 +906,7 @@ АвторРасширеннаяПодсказка - 104 + 106 Label true true @@ -856,7 +940,7 @@ ИсполнительРасширеннаяПодсказка - 106 + 108 Label true true @@ -890,7 +974,7 @@ ПроверяющийРасширеннаяПодсказка - 108 + 110 Label true true @@ -921,10 +1005,10 @@ СписокСтрокаПоиска - 69 + 71 СписокСтрокаПоискаРасширеннаяПодсказка - 71 + 73 Label true true @@ -934,7 +1018,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 70 + 72 true Список @@ -944,10 +1028,10 @@ СписокСостояниеПросмотра - 72 + 74 СписокСостояниеПросмотраРасширеннаяПодсказка - 74 + 76 Label true true @@ -957,7 +1041,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 73 + 75 true ViewStatusAddition @@ -968,10 +1052,10 @@ СписокУправлениеПоиском - 75 + 77 СписокУправлениеПоискомРасширеннаяПодсказка - 77 + 79 Label true true @@ -981,7 +1065,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 76 + 78 true SearchControlAddition @@ -992,7 +1076,7 @@ СписокРасширеннаяПодсказка - 68 + 70 Label true true @@ -1042,61 +1126,11 @@ true + None + false ФормаКоманднаяПанель -1 - - ФормаОстановить - 51 - true - true - - true - - - ФормаОстановитьРасширеннаяПодсказка - 53 - Label - true - true - - Left - - - Form.Command.Остановить - Normal - Auto - true - true - UserCmds - Auto - - - ФормаПродолжитьБизнесПроцесс - 52 - true - true - - true - - - ФормаПродолжитьБизнесПроцессРасширеннаяПодсказка - 54 - Label - true - true - - Left - - - Form.Command.ПродолжитьБизнесПроцесс - Normal - Auto - true - true - UserCmds - Auto - Left true diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl index f969f0bec..9ab9e9689 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Module.bsl @@ -1,9 +1,9 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ПоАвтору = ОбщегоНазначения.ТекущийПользователь(); + ПоАвтору = Пользователи.ТекущийПользователь(); УстановитьОтбор(); КонецПроцедуры @@ -12,6 +12,9 @@ УстановитьОтборСписка(Настройки); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + &НаКлиенте Процедура ПоАвторуПриИзменении(Элемент) УстановитьОтбор(); @@ -32,8 +35,32 @@ УстановитьОтбор(); КонецПроцедуры +&НаКлиенте +Процедура ПоказыватьОстановленныеПриИзменении(Элемент) + + УстановитьОтбор(); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Остановить(Команда) + + КомандыРаботыСБизнесПроцессамиКлиент.Остановить(Элементы.Список.ВыделенныеСтроки); + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьБизнесПроцесс(Команда) + + КомандыРаботыСБизнесПроцессамиКлиент.СделатьАктивным(Элементы.Список.ВыделенныеСтроки); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура УстановитьОтбор() @@ -84,23 +111,3 @@ КонецПроцедуры -&НаКлиенте -Процедура ПоказыватьОстановленныеПриИзменении(Элемент) - - УстановитьОтбор(); - -КонецПроцедуры - -&НаКлиенте -Процедура Остановить(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.Остановить(Элементы.Список.ВыделенныеСтроки); - -КонецПроцедуры - -&НаКлиенте -Процедура ПродолжитьБизнесПроцесс(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.СделатьАктивным(Элементы.Список.ВыделенныеСтроки); - -КонецПроцедуры diff --git a/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl index a17d6deac..f10569432 100644 --- a/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + //////////////////////////////////////////////////////////////////////////////// // Программный интерфейс для подсистемы бизнес-процессов и задач @@ -6,7 +9,7 @@ // // Параметры // ЗадачаСсылка – ЗадачаСсылка.ЗадачаИсполнителя – задача -// ТочкаМаршрутаСсылка – точка маршрута +// ТочкаМаршрутаБизнесПроцесса – точка маршрута // // Возвращаемое значение: // Структура – структуру с описанием формы выполнения задачи. @@ -48,7 +51,8 @@ // // Параметры // ЗадачаСсылка – ЗадачаСсылка.ЗадачаИсполнителя – задача -// ТочкаМаршрутаСсылка – точка маршрута +// БизнесПроцессСсылка - БизнесПроцессСсылка - бизнес-процесс, по которому сформирована задача ЗадачаСсылка +// ТочкаМаршрутаБизнесПроцесса – точка маршрута // Процедура ОбработкаВыполненияПоУмолчанию(ЗадачаСсылка, БизнесПроцессСсылка, ТочкаМаршрутаБизнесПроцесса) Экспорт @@ -71,7 +75,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Устанавливает состояние элементов формы задачи Процедура УстановитьСостояниеЭлементовФормыЗадачи(Форма) Экспорт diff --git a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl index 2c88ce895..df55095d7 100644 --- a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl @@ -1,5 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС -// УправлениеДоступом +// СтандартныеПодсистемы.УправлениеДоступом // Процедура ЗаполнитьНаборыЗначенийДоступа по свойствам объекта заполняет наборы значений доступа // в таблице с полями: @@ -74,8 +76,64 @@ КонецПроцедуры -// Конец УправлениеДоступом +// Конец СтандартныеПодсистемы.УправлениеДоступом +// Актуализирует значения реквизит невыполненных задач +// согласно реквизитам бизнес-процесса Задание: +// Важность, СрокИсполнения, Наименование и Автор +// +Процедура ИзменитьРеквизитыНевыполненныхЗадач() Экспорт + + НачатьТранзакцию(); + Попытка + Запрос = Новый Запрос( + "ВЫБРАТЬ + | Задачи.Ссылка КАК Ссылка + |ИЗ + | Задача.ЗадачаИсполнителя КАК Задачи + |ГДЕ + | Задачи.БизнесПроцесс = &БизнесПроцесс + | И Задачи.ПометкаУдаления = ЛОЖЬ + | И Задачи.Выполнена = ЛОЖЬ"); + Запрос.УстановитьПараметр("БизнесПроцесс", Ссылка); + Результат = Запрос.Выполнить(); + + Блокировка = Новый БлокировкаДанных; + + ВыборкаДетальныеЗаписи = Результат.Выбрать(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + ЭлементБлокировки = Блокировка.Добавить("Задача.ЗадачаИсполнителя"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Ссылка", ВыборкаДетальныеЗаписи.Ссылка); + КонецЦикла; + Блокировка.Заблокировать(); + + ВыборкаДетальныеЗаписи.Сбросить(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + ЗадачаОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); + ЗадачаОбъект.Важность = Важность; + ЗадачаОбъект.СрокИсполнения = + ?(ЗадачаОбъект.ТочкаМаршрута = БизнесПроцессы.Задание.ТочкиМаршрута.Выполнить, + СрокИсполненияЗадачиДляВыполнения(), СрокИсполненияЗадачиДляПроверки()); + ЗадачаОбъект.Наименование = + ?(ЗадачаОбъект.ТочкаМаршрута = БизнесПроцессы.Задание.ТочкиМаршрута.Выполнить, + НаименованиеЗадачиДляВыполнения(), НаименованиеЗадачиДляПроверки()); + ЗадачаОбъект.Автор = Автор; + // Не выполняем предварительную блокировку данных для редактирования, т.к. + // это изменение имеет более высокий приоритет над открытыми формами задач. + ЗадачаОбъект.Записать(); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий бизнес-процесса @@ -137,7 +195,7 @@ Возврат; КонецЕсли; - Если НЕ ЭтоНовый() И Ссылка.Предмет <> Предмет Тогда + Если НЕ ЭтоНовый() И ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Предмет") <> Предмет Тогда ИзменитьПредметЗадач(); КонецЕсли; @@ -146,11 +204,12 @@ Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ЭтоНовый() Тогда - Автор = ОбщегоНазначения.ТекущийПользователь(); + Автор = Пользователи.ТекущийПользователь(); Важность = Перечисления.ВариантыВажностиЗадачи.Обычная; НаПроверке = Истина; - Проверяющий = ОбщегоНазначения.ТекущийПользователь(); + Проверяющий = Пользователи.ТекущийПользователь(); Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; + Исполнитель = Справочники.Пользователи.ПустаяСсылка(); // Для возможности автоподбора в незаполненном поле Исполнитель. КонецЕсли; Если ДанныеЗаполнения <> Неопределено И ТипЗнч(ДанныеЗаполнения) <> Тип("Структура") @@ -224,14 +283,14 @@ Если ТипЗнч(Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей") И ОбщегоНазначения.ПолучитьЗначениеРеквизита(Исполнитель, "ВнешняяРоль") = Истина Тогда - СтрокаHTML = БизнесПроцессыИЗадачиПереопределяемый.ПолучитьСодержание(Предмет); + СтрокаHTML = БизнесПроцессыИЗадачиПереопределяемый.ПолучитьПредставлениеПредметаВнешнейЗадачи(Предмет); СодержаниеПредмета = Новый ХранилищеЗначения(СтрокаHTML, Новый СжатиеДанных()); // Заполняем список файлов МассивФайлов = БизнесПроцессыИЗадачиПереопределяемый.ПолучитьСписокФайлов(Предмет); Если МассивФайлов <> Неопределено Тогда - Для каждого Эл Из МассивФайлов Цикл - НовыйФайл = РаботаСФайламиВызовСервера.СкопироватьФайл(Эл, Ссылка); + Для каждого Элемент Из МассивФайлов Цикл + НовыйФайл = РаботаСФайламиВызовСервера.СкопироватьФайл(Элемент, Ссылка); КонецЦикла; КонецЕсли; @@ -314,7 +373,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ Процедура ИзменитьПредметЗадач() @@ -431,58 +490,3 @@ Возврат Результат; КонецФункции - -// Актуализирует значения реквизит невыполненных задач -// согласно реквизитам бизнес-процесса Задание: -// Важность, СрокИсполнения, Наименование и Автор -// -Процедура ИзменитьРеквизитыНевыполненныхЗадач() Экспорт - - НачатьТранзакцию(); - Попытка - Запрос = Новый Запрос( - "ВЫБРАТЬ - | Задачи.Ссылка КАК Ссылка - |ИЗ - | Задача.ЗадачаИсполнителя КАК Задачи - |ГДЕ - | Задачи.БизнесПроцесс = &БизнесПроцесс - | И Задачи.ПометкаУдаления = ЛОЖЬ - | И Задачи.Выполнена = ЛОЖЬ"); - Запрос.УстановитьПараметр("БизнесПроцесс", Ссылка); - Результат = Запрос.Выполнить(); - - Блокировка = Новый БлокировкаДанных; - - ВыборкаДетальныеЗаписи = Результат.Выбрать(); - Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - ЭлементБлокировки = Блокировка.Добавить("Задача.ЗадачаИсполнителя"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - ЭлементБлокировки.УстановитьЗначение("Ссылка", ВыборкаДетальныеЗаписи.Ссылка); - КонецЦикла; - Блокировка.Заблокировать(); - - ВыборкаДетальныеЗаписи.Сбросить(); - Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - ЗадачаОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); - ЗадачаОбъект.Важность = Важность; - ЗадачаОбъект.СрокИсполнения = - ?(ЗадачаОбъект.ТочкаМаршрута = БизнесПроцессы.Задание.ТочкиМаршрута.Выполнить, - СрокИсполненияЗадачиДляВыполнения(), СрокИсполненияЗадачиДляПроверки()); - ЗадачаОбъект.Наименование = - ?(ЗадачаОбъект.ТочкаМаршрута = БизнесПроцессы.Задание.ТочкиМаршрута.Выполнить, - НаименованиеЗадачиДляВыполнения(), НаименованиеЗадачиДляПроверки()); - ЗадачаОбъект.Автор = Автор; - // Не выполняем предварительную блокировку данных для редактирования, т.к. - // это изменение имеет более высокий приоритет над открытыми формами задач. - ЗадачаОбъект.Записать(); - КонецЦикла; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - diff --git a/SSL/src/BusinessProcesses/Задание/Задание.mdo b/SSL/src/BusinessProcesses/Задание/Задание.mdo index 7bb09e239..a42bc6027 100644 --- a/SSL/src/BusinessProcesses/Задание/Задание.mdo +++ b/SSL/src/BusinessProcesses/Задание/Задание.mdo @@ -76,6 +76,10 @@ Use Number + + ru + Номер задания + @@ -514,6 +518,10 @@ 150 + + ru + Имя пользователя, выдавшего задание + @@ -529,6 +537,10 @@ Boolean + + ru + Признак того, что задание внешнее (направлено пользователю другой программы) + @@ -544,6 +556,10 @@ TaskRef.ЗадачаИсполнителя + + ru + Исходная задача, для которой в другой программе запущено внешнее задание + diff --git a/SSL/src/Enums/КлючевыеОперации/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss similarity index 100% rename from SSL/src/Enums/КлючевыеОперации/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss rename to SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Form.form new file mode 100644 index 000000000..61466b94e --- /dev/null +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Form.form @@ -0,0 +1,536 @@ + + + + Валюты + 1 + true + true + + true + + + Список + + true + None + + Код + 6 + true + true + + true + + + Список.Code + + + КодРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + КодКонтекстноеМеню + 7 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Наименование + 4 + true + true + + true + + + Список.Description + + true + + НаименованиеРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + true + + + + НаименованиеПолное + 21 + true + true + + true + + + Список.НаименованиеПолное + + + НаименованиеПолноеРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + НаименованиеПолноеКонтекстноеМеню + 22 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Курс + 19 + true + true + + true + + + Список.Курс + + + КурсРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + КурсКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + РубЗа + 23 + true + true + + true + + + Список.РубЗа + + None + + РубЗаРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + РубЗаКонтекстноеМеню + 24 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Кратность + 17 + true + true + + true + + + Список.Кратность + + None + + КратностьРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + КратностьКонтекстноеМеню + 18 + true + + LabelField + Enter + true + Left + true + + true + true + + + + КраткоеНаименование + 31 + true + true + + true + + + Список.КраткоеНаименование + + None + + КраткоеНаименованиеРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + КраткоеНаименованиеКонтекстноеМеню + 32 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + ВалютыКоманднаяПанель + 3 + Left + + + BeforeAddRow + ВалютыПередНачаломДобавления + + + ВалютыСтрокаПоиска + 35 + + ВалютыСтрокаПоискаРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ВалютыСтрокаПоискаКонтекстноеМеню + 36 + true + + Валюты + + true + + + + ВалютыСостояниеПросмотра + 38 + + ВалютыСостояниеПросмотраРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ВалютыСостояниеПросмотраКонтекстноеМеню + 39 + true + + ViewStatusAddition + Валюты + + true + + + + ВалютыУправлениеПоиском + 41 + + ВалютыУправлениеПоискомРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ВалютыУправлениеПоискомКонтекстноеМеню + 42 + true + + SearchControlAddition + Валюты + + true + + + + ВалютыРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ВалютыКонтекстноеМеню + 2 + true + + true + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
+ + ФормаКоманднаяПанель + -1 + + ПодобратьИзКлассификатора + 8 + true + true + + true + + + ПодобратьИзКлассификатораРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Form.Command.ПодобратьИзКлассификатора + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + NotificationProcessing + ОбработкаОповещения + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + + + Список.ЗагружаетсяИзИнтернета + +
true
+ + ВЫБРАТЬ + Валюты.ПометкаУдаления, + Валюты.Код, + Валюты.Наименование, + Валюты.НаименованиеПолное, + КурсыВалют.Курс, + ВЫБОР + КОГДА КурсыВалют.Кратность = 1 + ТОГДА " " + ИНАЧЕ "руб. за" + КОНЕЦ КАК РубЗа, + ВЫБОР + КОГДА КурсыВалют.Кратность = 1 + ТОГДА " " + ИНАЧЕ КурсыВалют.Кратность + КОНЕЦ КАК Кратность, + ВЫБОР + КОГДА КурсыВалют.Кратность = 1 + ТОГДА " " + ИНАЧЕ Валюты.Наименование + КОНЕЦ КАК КраткоеНаименование, + Валюты.ЗагружаетсяИзИнтернета +ИЗ + Справочник.Валюты КАК Валюты + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&КонецПериода, ) КАК КурсыВалют + ПО Валюты.Ссылка = КурсыВалют.Валюта + Catalog.Валюты + true + true + true + true + true + +
+ + ПодобратьИзКлассификатора + + <key>ru</key> + <value>Подобрать из классификатора</value> + + 1 + + ru + Подобрать из классификатора + + + true + + + + ПодобратьИзКлассификатора + + + FunctionalOption.СтандартныеПодсистемыВМоделиСервиса + Auto + Auto + + + + + + +
diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Module.bsl new file mode 100644 index 000000000..02695b659 --- /dev/null +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Module.bsl @@ -0,0 +1,60 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ДатаКурса = НачалоДня(ТекущаяДатаСеанса()); + Элементы.Курс.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Курс на %1'"), + Формат(ДатаКурса, "ДЛФ=DD") + ); + Элементы.Курс.Подсказка = Элементы.Курс.Заголовок; + Список.Параметры.УстановитьЗначениеПараметра("КонецПериода", ДатаКурса); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ИмяСобытия = "ОбновитьПослеДобавления" Тогда + Элементы.Валюты.Обновить(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Валюты + +&НаКлиенте +Процедура ВалютыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + + Текст = НСтр("ru = 'Есть возможность подобрать валюту из классификатора. + |Подобрать?'"); + Результат = Вопрос(Текст, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + Если Результат = КодВозвратаДиалога.Да Тогда + Отказ = Истина; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Ложь, Истина); + ОткрытьФорму(СтандартныеПодсистемыКлиентПереопределяемый.ИмяФормыВыбораКлассификатораВалют(), ПараметрыФормы, Этаформа); + Иначе + ОткрытьФорму("Справочник.Валюты.Форма.ФормаПодбораВалютИзОКВ", , ЭтаФорма); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ПодобратьИзКлассификатора(Команда) + + ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Ложь, Истина); + ОткрытьФорму(СтандартныеПодсистемыКлиентПереопределяемый.ИмяФормыВыбораКлассификатораВалют(), ПараметрыФормы, Этаформа); + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаПодбораВалютИзОКВ/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаПодбораВалютИзОКВ/Form.form index 96216449c..b7325bd51 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаПодбораВалютИзОКВ/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаПодбораВалютИзОКВ/Form.form @@ -561,6 +561,24 @@ true + + ПараметрыПрописиНаРусском + + <key>ru</key> + <value>Параметры прописи на русском</value> + + 6 + + String + + + + true + + + true + + Выбрать diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаПодбораВалютИзОКВ/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаПодбораВалютИзОКВ/Module.bsl index 89c581546..4765c3d1a 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаПодбораВалютИзОКВ/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаПодбораВалютИзОКВ/Module.bsl @@ -1,48 +1,29 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ -// Обработчик события "при создании на сервере" -// Вызывает функциональность заполнения списка валют из ОКВ -// &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // Заполнение списка валют из ОКВ ЗакрыватьПриВыборе = Ложь; ЗаполнитьТаблицуВалют(); КонецПроцедуры -// Обработчик события "выбор" элемента формы СписокВалют -// Оповещает о выборе вызывающую форму. Форма закрывается. -// +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокВалют + &НаКлиенте Процедура СписокВалютВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + // Оповещает о выборе вызывающую форму. Форма закрывается. ОбработатьВыборВСпискеВалют(Элемент.ТекущиеДанные); КонецПроцедуры -// Заполняет список валют из макета ОКВ -// -&НаСервере -Процедура ЗаполнитьТаблицуВалют() - - КлассификаторXML = Справочники.Валюты.ПолучитьМакет("ОбщероссийскийКлассификаторВалют").ПолучитьТекст(); - - КлассификаторТаблица = ОбщегоНазначения.ПрочитатьXMLВТаблицу(КлассификаторXML).Данные; - - Для Каждого ЗаписьОКВ Из КлассификаторТаблица Цикл - НоваяСтрока = Валюты.Добавить(); - НоваяСтрока.КодВалютыЦифровой = ЗаписьОКВ.Code; - НоваяСтрока.КодВалютыБуквенный = ЗаписьОКВ.CodeSymbol; - НоваяСтрока.Наименование = ЗаписьОКВ.Name; - НоваяСтрока.СтраныИТерритории = ЗаписьОКВ.Description; - НоваяСтрока.Загружается = ЗаписьОКВ.RBCLoading; - КонецЦикла; - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ -// Обработчик нажатия на кнопку "Выбрать" командной панели -// элемента формы СписокВалют. -// &НаКлиенте Процедура ВыбратьВыполнить() @@ -50,17 +31,41 @@ КонецПроцедуры -// Обработчик события "выбор" элемента формы СписокВалют -// Оповещает о выборе вызывающую форму. Форма закрывается. -// +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЗаполнитьТаблицуВалют() + + // Заполняет список валют из макета ОКВ + + КлассификаторXML = Справочники.Валюты.ПолучитьМакет("ОбщероссийскийКлассификаторВалют").ПолучитьТекст(); + + КлассификаторТаблица = ОбщегоНазначения.ПрочитатьXMLВТаблицу(КлассификаторXML).Данные; + + Для Каждого ЗаписьОКВ Из КлассификаторТаблица Цикл + НоваяСтрока = Валюты.Добавить(); + НоваяСтрока.КодВалютыЦифровой = ЗаписьОКВ.Code; + НоваяСтрока.КодВалютыБуквенный = ЗаписьОКВ.CodeSymbol; + НоваяСтрока.Наименование = ЗаписьОКВ.Name; + НоваяСтрока.СтраныИТерритории = ЗаписьОКВ.Description; + НоваяСтрока.Загружается = ЗаписьОКВ.RBCLoading; + НоваяСтрока.ПараметрыПрописиНаРусском = ЗаписьОКВ.NumerationItemOptions; + КонецЦикла; + +КонецПроцедуры + &НаКлиенте Процедура ОбработатьВыборВСпискеВалют(ТекущиеДанные) - ПараметрыВыбор = Новый Структура("КодВалюты, НаименованиеКраткое, НаименованиеПолное, Загружается"); - ПараметрыВыбор.КодВалюты = ТекущиеДанные.КодВалютыЦифровой; - ПараметрыВыбор.НаименованиеКраткое = ТекущиеДанные.КодВалютыБуквенный; - ПараметрыВыбор.НаименованиеПолное = ТекущиеДанные.Наименование; - ПараметрыВыбор.Загружается = ТекущиеДанные.Загружается; + // Оповещает о выборе вызывающую форму. Форма закрывается. + + ПараметрыВыбор = Новый Структура("КодВалюты, НаименованиеКраткое, НаименованиеПолное, Загружается, ПараметрыПрописиНаРусском"); + ПараметрыВыбор.КодВалюты = ТекущиеДанные.КодВалютыЦифровой; + ПараметрыВыбор.НаименованиеКраткое = ТекущиеДанные.КодВалютыБуквенный; + ПараметрыВыбор.НаименованиеПолное = ТекущиеДанные.Наименование; + ПараметрыВыбор.Загружается = ТекущиеДанные.Загружается; + ПараметрыВыбор.ПараметрыПрописиНаРусском = ТекущиеДанные.ПараметрыПрописиНаРусском; ОповеститьОВыборе(ПараметрыВыбор); diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form index f61fb6df3..d641416b3 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form @@ -26,7 +26,7 @@ КодРасширеннаяПодсказка - 61 + 63 Label true true @@ -67,7 +67,7 @@ НаименованиеРасширеннаяПодсказка - 63 + 65 Label true true @@ -108,7 +108,7 @@ НаименованиеПолноеРасширеннаяПодсказка - 65 + 67 Label true true @@ -149,7 +149,7 @@ КурсРасширеннаяПодсказка - 67 + 69 Label true true @@ -187,7 +187,7 @@ None РубЗаРасширеннаяПодсказка - 69 + 71 Label true true @@ -228,7 +228,7 @@ КратностьРасширеннаяПодсказка - 71 + 73 Label true true @@ -266,7 +266,7 @@ None КраткоеНаименованиеРасширеннаяПодсказка - 73 + 75 Label true true @@ -296,12 +296,16 @@ Left true + + BeforeAddRow + ВалютыПередНачаломДобавления + ВалютыСтрокаПоиска - 52 + 54 ВалютыСтрокаПоискаРасширеннаяПодсказка - 54 + 56 Label true true @@ -311,7 +315,7 @@ ВалютыСтрокаПоискаКонтекстноеМеню - 53 + 55 true Валюты @@ -321,10 +325,10 @@ ВалютыСостояниеПросмотра - 55 + 57 ВалютыСостояниеПросмотраРасширеннаяПодсказка - 57 + 59 Label true true @@ -334,7 +338,7 @@ ВалютыСостояниеПросмотраКонтекстноеМеню - 56 + 58 true ViewStatusAddition @@ -345,10 +349,10 @@ ВалютыУправлениеПоиском - 58 + 60 ВалютыУправлениеПоискомРасширеннаяПодсказка - 60 + 62 Label true true @@ -358,7 +362,7 @@ ВалютыУправлениеПоискомКонтекстноеМеню - 59 + 61 true SearchControlAddition @@ -369,7 +373,7 @@ ВалютыРасширеннаяПодсказка - 51 + 53 Label true true @@ -431,7 +435,7 @@ ФормаЗагрузитьКурсыВалютРасширеннаяПодсказка - 49 + 50 Label true true @@ -457,7 +461,7 @@ ФормаПодборИзОКВРасширеннаяПодсказка - 50 + 51 Label true true @@ -473,6 +477,32 @@ UserCmds Auto + + ПодобратьИзКлассификатора + 49 + true + true + + true + + + ПодобратьИзКлассификатораРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Form.Command.ПодобратьИзКлассификатора + Normal + Auto + true + true + UserCmds + Auto + Left true @@ -486,7 +516,7 @@ OnCreateAtServer - ПриСоздании + ПриСозданииНаСервере DontBlock true @@ -576,6 +606,7 @@ ПодборИзОКВ + FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме Auto Auto @@ -605,6 +636,37 @@ ЗагрузитьКурсыВалют + FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме + Auto + Auto + + + ПодобратьИзКлассификатора + + <key>ru</key> + <value>Подобрать из классификатора</value> + + 3 + + ru + Подобрать из классификатора + + + + true + Role.ДобавлениеИзменениеБазовойНСИ + + + true + Role.ПолныеПрава + + + + + ПодобратьИзКлассификатора + + + FunctionalOption.СтандартныеПодсистемыВМоделиСервиса Auto Auto diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl index 11f84c230..c8fb00f0e 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl @@ -1,9 +1,8 @@ //////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ ОБРАБОТЧИКОВ СОБЫТИЙ -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере -Процедура ПриСоздании(Отказ, СтандартнаяОбработка) +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ДатаКурса = НачалоДня(ТекущаяДатаСеанса()); Элементы.Курс.Заголовок = @@ -27,12 +26,43 @@ Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "Запись_КурсыВалют" - Или ИмяСобытия = "Запись_ЗагрузкаКурсовВалют" Тогда + Или ИмяСобытия = "Запись_ЗагрузкаКурсовВалют" Тогда Элементы.Валюты.Обновить(); КонецЕсли; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ИмяСобытия = "ОбновитьПослеДобавления" Тогда + Элементы.Валюты.Обновить(); + КонецЕсли; + КонецЕсли; + КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Валюты + +&НаКлиенте +Процедура ВалютыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + + Текст = НСтр("ru = 'Есть возможность подобрать валюту из классификатора. + |Подобрать?'"); + Результат = Вопрос(Текст, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + Если Результат = КодВозвратаДиалога.Да Тогда + Отказ = Истина; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Ложь, Истина); + ОткрытьФорму(СтандартныеПодсистемыКлиентПереопределяемый.ИмяФормыВыбораКлассификатораВалют(), ПараметрыФормы, Этаформа); + Иначе + ОткрытьФорму("Справочник.Валюты.Форма.ФормаПодбораВалютИзОКВ", , ЭтаФорма); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ПодборИзОКВ(Команда) @@ -46,3 +76,12 @@ ОткрытьФорму("Обработка.ЗагрузкаКурсовВалют.Форма"); КонецПроцедуры + +&НаКлиенте +Процедура ПодобратьИзКлассификатора(Команда) + + ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Ложь, Истина); + ОткрытьФорму(СтандартныеПодсистемыКлиентПереопределяемый.ИмяФормыВыбораКлассификатораВалют(), ПараметрыФормы, Этаформа); + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form index 2f1861559..479edb3de 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form @@ -19,7 +19,7 @@ НаименованиеПолноеРасширеннаяПодсказка - 66 + 74 Label true true @@ -64,7 +64,7 @@ КодРасширеннаяПодсказка - 68 + 76 Label true true @@ -109,7 +109,7 @@ НаименованиеРасширеннаяПодсказка - 70 + 78 Label true true @@ -158,7 +158,7 @@ ГруппаКодыВалютыРасширеннаяПодсказка - 72 + 80 Label true true @@ -196,7 +196,7 @@ ЗагружаетсяИзИнтернетаРасширеннаяПодсказка - 74 + 82 Label true true @@ -237,7 +237,7 @@ ЗависимыйКурсВалютРасширеннаяПодсказка - 77 + 85 Label true true @@ -270,7 +270,7 @@ ОсновнаяВалютаРасширеннаяПодсказка - 79 + 87 Label true true @@ -325,7 +325,7 @@ НаценкаРасширеннаяПодсказка - 81 + 89 Label true true @@ -379,7 +379,7 @@ ГруппаЗависимыйКурсВалютРасширеннаяПодсказка - 76 + 84 Label true true @@ -413,7 +413,7 @@ true ПрочееРасширеннаяПодсказка - 73 + 81 Label true true @@ -447,7 +447,7 @@ ОсновныеСведенияРасширеннаяПодсказка - 65 + 73 Label true true @@ -488,7 +488,7 @@ ПолеПрописи4наРусскомРасширеннаяПодсказка - 85 + 93 Label true true @@ -577,7 +577,7 @@ ПолеПрописи1наРусскомРасширеннаяПодсказка - 87 + 95 Label true true @@ -630,7 +630,7 @@ ПолеПрописи2наРусскомРасширеннаяПодсказка - 89 + 97 Label true true @@ -683,7 +683,7 @@ ПолеПрописи3наРусскомРасширеннаяПодсказка - 91 + 99 Label true true @@ -726,7 +726,7 @@ ГруппаПрописанийЦелойЧастиРасширеннаяПодсказка - 84 + 92 Label true true @@ -776,7 +776,7 @@ ПолеПрописи8наРусскомРасширеннаяПодсказка - 95 + 103 Label true true @@ -865,7 +865,7 @@ ПолеПрописи5наРусскомРасширеннаяПодсказка - 97 + 105 Label true true @@ -918,7 +918,7 @@ ПолеПрописи6наРусскомРасширеннаяПодсказка - 99 + 107 Label true true @@ -971,7 +971,7 @@ ПолеПрописи7наРусскомРасширеннаяПодсказка - 101 + 109 Label true true @@ -1014,7 +1014,7 @@ ГруппаПрописанийДробнойЧастиРасширеннаяПодсказка - 94 + 102 Label true true @@ -1055,7 +1055,7 @@ ДлинаДробнойЧастиРасширеннаяПодсказка - 104 + 112 Label true true @@ -1136,7 +1136,7 @@ ГруппаЧислоРазрядовДробнойЧастиРасширеннаяПодсказка - 103 + 111 Label true true @@ -1179,7 +1179,7 @@ СуммаЧислоРасширеннаяПодсказка - 107 + 115 Label true true @@ -1220,7 +1220,7 @@ СуммаПрописьюРасширеннаяПодсказка - 109 + 117 Label true true @@ -1263,7 +1263,7 @@ ГруппаПримерПрописиРасширеннаяПодсказка - 106 + 114 Label true true @@ -1297,7 +1297,7 @@ ГруппаПараметрыДробнойЧастиРасширеннаяПодсказка - 93 + 101 Label true true @@ -1332,7 +1332,7 @@ ГруппаСуммаПрописьюРасширеннаяПодсказка - 83 + 91 Label true true @@ -1357,7 +1357,7 @@ СтранницыРасширеннаяПодсказка - 64 + 72 Label true true @@ -1371,18 +1371,103 @@ Auto + + ТекстРучногоИзменения + 68 + true + true + + true + + + ТекстРучногоИзменения + + None + + ТекстРучногоИзмененияРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + + ТекстРучногоИзмененияКонтекстноеМеню + 69 + true + + LabelField + Enter + true + Left + true + + true + true + + Top true ФормаКоманднаяПанель -1 + + Изменить + 64 + true + true + + true + + + ИзменитьРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + Form.Command.Изменить + Normal + Auto + true + true + UserCmds + Auto + + + ОбновитьИзКлассификатора + 65 + true + true + + true + + + ОбновитьИзКлассификатораРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Form.Command.ОбновитьИзКлассификатора + Normal + Auto + true + true + UserCmds + Auto + Left true - - OnOpen - ПриОткрытии - OnCreateAtServer ПриСозданииНаСервере @@ -1627,7 +1712,7 @@ Number 10 - 3 + 2 true @@ -1656,11 +1741,95 @@ true + + ТекстРучногоИзменения + + <key>ru</key> + <value>Текст ручного изменения</value> + + 14 + + String + + + + true + + + true + + FunctionalOption.СтандартныеПодсистемыВМоделиСервиса + + + РучноеИзменение + + <key>ru</key> + <value>Ручное изменение</value> + + 15 + + + true + + + true + + + + Изменить + + <key>ru</key> + <value>Изменить</value> + + 1 + + ru + Изменить + + + true + + + + Изменить + + + FunctionalOption.СтандартныеПодсистемыВМоделиСервиса + Auto + Auto + + + ОбновитьИзКлассификатора + + <key>ru</key> + <value>Обновить из классификатора</value> + + 2 + + ru + Обновить из классификатора + + + true + + + + ОбновитьИзКлассификатора + + + FunctionalOption.СтандартныеПодсистемыВМоделиСервиса + Auto + Auto + + + OnReadAtServer + ПриЧтенииНаСервере + BeforeWrite ПередЗаписью diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl index 5ce5c40f2..7c3d2b1a9 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl @@ -1,72 +1,45 @@ //////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ ОБРАБОТЧИКОВ СОБЫТИЙ -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("КодВалюты") Тогда - Объект.Код = Параметры.КодВалюты; + Если Объект.Ссылка.Пустая() Тогда + + Если Параметры.Свойство("КодВалюты") Тогда + Объект.Код = Параметры.КодВалюты; + КонецЕсли; + + Если Параметры.Свойство("НаименованиеКраткое") Тогда + Объект.Наименование = Параметры.НаименованиеКраткое; + КонецЕсли; + + Если Параметры.Свойство("НаименованиеПолное") Тогда + Объект.НаименованиеПолное = Параметры.НаименованиеПолное; + КонецЕсли; + + Если Параметры.Свойство("Загружается") Тогда + Объект.ЗагружаетсяИзИнтернета = Параметры.Загружается; + КонецЕсли; + + Если Объект.ЗагружаетсяИзИнтернета Тогда + Объект.ОсновнаяВалюта = Справочники.Валюты.ПустаяСсылка(); + КонецЕсли; + + Если Параметры.Свойство("ПараметрыПрописиНаРусском") Тогда + Объект.ПараметрыПрописиНаРусском = Параметры.ПараметрыПрописиНаРусском; + КонецЕсли; + + ЗаполнитьФормуПоОбъекту(); + КонецЕсли; - Если Параметры.Свойство("НаименованиеКраткое") Тогда - Объект.Наименование = Параметры.НаименованиеКраткое; - КонецЕсли; - - Если Параметры.Свойство("НаименованиеПолное") Тогда - Объект.НаименованиеПолное = Параметры.НаименованиеПолное; - КонецЕсли; - - Если Параметры.Свойство("Загружается") Тогда - Объект.ЗагружаетсяИзИнтернета = Параметры.Загружается; - КонецЕсли; - - Если Объект.ЗагружаетсяИзИнтернета Тогда - Объект.ОсновнаяВалюта = Справочники.Валюты.ПустаяСсылка(); - КонецЕсли; - - Если ЗначениеЗаполнено(Объект.ОсновнаяВалюта) Тогда - ЗависимыйКурсВалют = Истина; - КонецЕсли; - - ПрочитатьПараметрыПрописи(); - КонецПроцедуры -&НаКлиенте -Процедура ПриОткрытии(Отказ) +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) - УстановитьСвойстваЭлементовГруппыЗависимойВалюты(); - УстановитьСклоненияПараметровПрописи(); - УстановитьСуммуПрописью(); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗагружаетсяИзИнтернетаПриИзменении(Элемент) - - Если Объект.ЗагружаетсяИзИнтернета Тогда - ЗависимыйКурсВалют = Ложь; - Объект.ОсновнаяВалюта = NULL; - Объект.Наценка = 0; - КонецЕсли; - - УстановитьСвойстваЭлементовГруппыЗависимойВалюты(); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗависимыйКурсВалютПриИзменении(Элемент) - - УстановитьСвойстваЭлементовГруппыЗависимойВалюты(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОсновнаяВалютаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - ПодготовитьДанныеВыбораПодчиненнойВалюты(ДанныеВыбора, Объект.Ссылка); + ЗаполнитьФормуПоОбъекту(); КонецПроцедуры @@ -92,7 +65,7 @@ // Устанавливаем реквизиты загрузки и зависимости валюты Если НЕ ЗависимыйКурсВалют Тогда - Объект.ОсновнаяВалюта = NULL; + Объект.ОсновнаяВалюта = Неопределено; Объект.Наценка = 0; КонецЕсли; @@ -103,80 +76,58 @@ ТекущийОбъект.ПараметрыПрописиНаРусском = ПараметрыПрописиНаРусском(ЭтаФорма); + СтандартныеПодсистемыПереопределяемый.ЗаписатьФлагРучногоИзменениеПоставляемыхДанных(ЭтаФорма); + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////// -// Обработчики события ПриИзменении элементов формы, связанных с прописью +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +//////////////////////////////////////////////////////////////////////////////// +// Страница "Основные сведения" + +&НаКлиенте +Процедура ЗагружаетсяИзИнтернетаПриИзменении(Элемент) + + Если Объект.ЗагружаетсяИзИнтернета Тогда + ЗависимыйКурсВалют = Ложь; + Объект.ОсновнаяВалюта = Неопределено; + Объект.Наценка = 0; + КонецЕсли; + + УстановитьСвойстваЭлементовГруппыЗависимойВалюты(ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗависимыйКурсВалютПриИзменении(Элемент) + + УстановитьСвойстваЭлементовГруппыЗависимойВалюты(ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ОсновнаяВалютаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ПодготовитьДанныеВыбораПодчиненнойВалюты(ДанныеВыбора, Объект.Ссылка); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница "Параметры прописи валюты" &НаКлиенте Процедура СуммаЧислоПриИзменении(Элемент) - УстановитьСуммуПрописью(); + УстановитьСуммуПрописью(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ПолеПрописи4наРусскомПриИзменении(Элемент) - УстановитьСклоненияПараметровПрописи(); - УстановитьСуммуПрописью(); -КонецПроцедуры - -&НаКлиенте -Процедура ПолеПрописи8наРусскомПриИзменении(Элемент) - УстановитьСклоненияПараметровПрописи(); - УстановитьСуммуПрописью(); -КонецПроцедуры - -&НаКлиенте -Процедура ПолеПрописи1наРусскомПриИзменении(Элемент) - УстановитьСуммуПрописью(); -КонецПроцедуры - -&НаКлиенте -Процедура ПолеПрописи2наРусскомПриИзменении(Элемент) - УстановитьСуммуПрописью(); -КонецПроцедуры - -&НаКлиенте -Процедура ПолеПрописи3наРусскомПриИзменении(Элемент) - УстановитьСуммуПрописью(); -КонецПроцедуры - -&НаКлиенте -Процедура ПолеПрописи5наРусскомПриИзменении(Элемент) - УстановитьСуммуПрописью(); -КонецПроцедуры - -&НаКлиенте -Процедура ПолеПрописи6наРусскомПриИзменении(Элемент) - УстановитьСуммуПрописью(); -КонецПроцедуры - -&НаКлиенте -Процедура ПолеПрописи7наРусскомПриИзменении(Элемент) - УстановитьСуммуПрописью(); -КонецПроцедуры - -&НаКлиенте -Процедура ДлинаДробнойЧастиПриИзменении(Элемент) - УстановитьСуммуПрописью(); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Другие обработчики событий элементов формы - -&НаКлиенте -Процедура ДлинаДробнойЧастиАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) - - ДанныеВыбора = АвтоПодборПоСпискуВыбора(Элемент, Текст, СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура ДлинаДробнойЧастиОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) - - ДанныеВыбора = ОкончаниеВводаТекстаПоСпискуВыбора(Элемент, Текст, СтандартнаяОбработка); - + УстановитьСклоненияПараметровПрописи(ЭтаФорма); + УстановитьСуммуПрописью(ЭтаФорма); КонецПроцедуры &НаКлиенте @@ -193,6 +144,12 @@ КонецПроцедуры +&НаКлиенте +Процедура ПолеПрописи8наРусскомПриИзменении(Элемент) + УстановитьСклоненияПараметровПрописи(ЭтаФорма); + УстановитьСуммуПрописью(ЭтаФорма); +КонецПроцедуры + &НаКлиенте Процедура ПолеПрописи8наРусскомАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) @@ -207,9 +164,99 @@ КонецПроцедуры +&НаКлиенте +Процедура ПолеПрописи1наРусскомПриИзменении(Элемент) + УстановитьСуммуПрописью(ЭтаФорма); +КонецПроцедуры + +&НаКлиенте +Процедура ПолеПрописи2наРусскомПриИзменении(Элемент) + УстановитьСуммуПрописью(ЭтаФорма); +КонецПроцедуры + +&НаКлиенте +Процедура ПолеПрописи3наРусскомПриИзменении(Элемент) + УстановитьСуммуПрописью(ЭтаФорма); +КонецПроцедуры + +&НаКлиенте +Процедура ПолеПрописи5наРусскомПриИзменении(Элемент) + УстановитьСуммуПрописью(ЭтаФорма); +КонецПроцедуры + +&НаКлиенте +Процедура ПолеПрописи6наРусскомПриИзменении(Элемент) + УстановитьСуммуПрописью(ЭтаФорма); +КонецПроцедуры + +&НаКлиенте +Процедура ПолеПрописи7наРусскомПриИзменении(Элемент) + УстановитьСуммуПрописью(ЭтаФорма); +КонецПроцедуры + +&НаКлиенте +Процедура ДлинаДробнойЧастиПриИзменении(Элемент) + УстановитьСуммуПрописью(ЭтаФорма); +КонецПроцедуры + +&НаКлиенте +Процедура ДлинаДробнойЧастиАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) + + ДанныеВыбора = АвтоПодборПоСпискуВыбора(Элемент, Текст, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ДлинаДробнойЧастиОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) + + ДанныеВыбора = ОкончаниеВводаТекстаПоСпискуВыбора(Элемент, Текст, СтандартнаяОбработка); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ СЛУЖЕБНЫХ ФУНКЦИЙ И ПРОЦЕДУР -// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Изменить(Команда) + + СтандартныеПодсистемыКлиентПереопределяемый.ИзменитьРазделенныйЭлемент(ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИзКлассификатора(Команда) + + Если СтандартныеПодсистемыКлиентПереопределяемый.ОбновитьЭлементИзОбщихДанных(ЭтаФорма) Тогда + ОбновитьНаСервере(); + ОповеститьОбИзменении(Объект.Ссылка); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЗаполнитьФормуПоОбъекту() + + ЗависимыйКурсВалют = ЗначениеЗаполнено(Объект.ОсновнаяВалюта); + + ПрочитатьПараметрыПрописи(); + + УстановитьСвойстваЭлементовГруппыЗависимойВалюты(ЭтаФорма); + УстановитьСклоненияПараметровПрописи(ЭтаФорма); + УстановитьСуммуПрописью(ЭтаФорма); + + СтандартныеПодсистемыПереопределяемый.СчитатьФлагРучногоИзмененияПоставляемыхДанных(ЭтаФорма); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьНаСервере() + + СтандартныеПодсистемыПереопределяемый.ВосстановитьЭлементИзОбщихДанных(ЭтаФорма); + +КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Функция ПараметрыПрописиНаРусском(Форма) @@ -226,18 +273,18 @@ КонецФункции -&НаКлиенте -Процедура УстановитьСуммуПрописью() +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьСуммуПрописью(Форма) - СуммаПрописью = ЧислоПрописью(СуммаЧисло, , ПараметрыПрописиНаРусском(ЭтаФорма)); + Форма.СуммаПрописью = ЧислоПрописью(Форма.СуммаЧисло, , ПараметрыПрописиНаРусском(Форма)); КонецПроцедуры -// Считывает параметры прописи и заполняет соответствующие поля диалога. -// &НаСервере Процедура ПрочитатьПараметрыПрописи() + // Считывает параметры прописи и заполняет соответствующие поля диалога. + СтрокаПараметров = СтрЗаменить(Объект.ПараметрыПрописиНаРусском, ",", Символы.ПС); ПолеПрописи1наРусском = СокрЛП(СтрПолучитьСтроку(СтрокаПараметров, 1)); @@ -272,68 +319,71 @@ КонецПроцедуры -// Устанавливает видимость элементов управления формы, ответственных -// за установление параметров завимисомти от базовой валюты (ссылка на базовую -// валюту и коэфициент). -// -&НаКлиенте -Процедура УстановитьСвойстваЭлементовГруппыЗависимойВалюты() +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьСвойстваЭлементовГруппыЗависимойВалюты(Форма) + + // Управляет видимостью реквизитов зависимости от базовой валюты: + // ссылки на базовую валюту и коэфициента + + Объект = Форма.Объект; + Элементы = Форма.Элементы; Если Объект.ЗагружаетсяИзИнтернета Тогда Элементы.ГруппаЗависимыйКурсВалют.Доступность = Ложь; ФлагПараметровЗависимогоКурса = Ложь; Иначе Элементы.ГруппаЗависимыйКурсВалют.Доступность = Истина; - ФлагПараметровЗависимогоКурса = ? (ЗависимыйКурсВалют, Истина, Ложь); + ФлагПараметровЗависимогоКурса = Форма.ЗависимыйКурсВалют; КонецЕсли; Элементы.ОсновнаяВалюта.АвтоОтметкаНезаполненного = ФлагПараметровЗависимогоКурса; Элементы.Наценка.АвтоОтметкаНезаполненного = ФлагПараметровЗависимогоКурса; Элементы.ОсновнаяВалюта.Доступность = ФлагПараметровЗависимогоКурса; Элементы.Наценка.Доступность = ФлагПараметровЗависимогоКурса; - Если Не ФлагПараметровЗависимогоКурса Тогда + Если НЕ ФлагПараметровЗависимогоКурса Тогда Элементы.ОсновнаяВалюта.ОтметкаНезаполненного = ФлагПараметровЗависимогоКурса; Элементы.Наценка.ОтметкаНезаполненного = ФлагПараметровЗависимогоКурса; КонецЕсли КонецПроцедуры -// Устанавливает склонение заголовков элементов формы -// хранящих за параметры прописи. -// -&НаКлиенте -Процедура УстановитьСклоненияПараметровПрописи() +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьСклоненияПараметровПрописи(Форма) - Если ПолеПрописи4наРусском = "Женский" Тогда - Элементы.ПолеПрописи1наРусском.Заголовок = "одна"; - Элементы.ПолеПрописи2наРусском.Заголовок = "две"; - ИначеЕсли ПолеПрописи4наРусском = "Мужской" Тогда - Элементы.ПолеПрописи1наРусском.Заголовок = "один"; - Элементы.ПолеПрописи2наРусском.Заголовок = "два"; + // Склонение заголовков параметров прописи + + Элементы = Форма.Элементы; + + Если Форма.ПолеПрописи4наРусском = "Женский" Тогда + Элементы.ПолеПрописи1наРусском.Заголовок = НСтр("ru = 'одна'"); + Элементы.ПолеПрописи2наРусском.Заголовок = НСтр("ru = 'две'"); + ИначеЕсли Форма.ПолеПрописи4наРусском = "Мужской" Тогда + Элементы.ПолеПрописи1наРусском.Заголовок = НСтр("ru = 'один'"); + Элементы.ПолеПрописи2наРусском.Заголовок = НСтр("ru = 'два'"); Иначе - Элементы.ПолеПрописи1наРусском.Заголовок = "одно"; - Элементы.ПолеПрописи2наРусском.Заголовок = "два"; + Элементы.ПолеПрописи1наРусском.Заголовок = НСтр("ru = 'одно'"); + Элементы.ПолеПрописи2наРусском.Заголовок = НСтр("ru = 'два'"); КонецЕсли; - Если ПолеПрописи8наРусском = "Женский" Тогда - Элементы.ПолеПрописи5наРусском.Заголовок = "одна"; - Элементы.ПолеПрописи6наРусском.Заголовок = "две"; - ИначеЕсли ПолеПрописи8наРусском = "Мужской" Тогда - Элементы.ПолеПрописи5наРусском.Заголовок = "один"; - Элементы.ПолеПрописи6наРусском.Заголовок = "два"; + Если Форма.ПолеПрописи8наРусском = "Женский" Тогда + Элементы.ПолеПрописи5наРусском.Заголовок = НСтр("ru = 'одна'"); + Элементы.ПолеПрописи6наРусском.Заголовок = НСтр("ru = 'две'"); + ИначеЕсли Форма.ПолеПрописи8наРусском = "Мужской" Тогда + Элементы.ПолеПрописи5наРусском.Заголовок = НСтр("ru = 'один'"); + Элементы.ПолеПрописи6наРусском.Заголовок = НСтр("ru = 'два'"); Иначе - Элементы.ПолеПрописи5наРусском.Заголовок = "одно"; - Элементы.ПолеПрописи6наРусском.Заголовок = "два"; + Элементы.ПолеПрописи5наРусском.Заголовок = НСтр("ru = 'одно'"); + Элементы.ПолеПрописи6наРусском.Заголовок = НСтр("ru = 'два'"); КонецЕсли; КонецПроцедуры -// Подготавливает список выбора для подчиненной валюты таким образом, -// что бы в список не попала сама подчиненная валюта -// &НаСервереБезКонтекста Процедура ПодготовитьДанныеВыбораПодчиненнойВалюты(ДанныеВыбора, Ссылка) + // Подготавливает список выбора для подчиненной валюты таким образом, + // что бы в список не попала сама подчиненная валюта + ДанныеВыбора = Новый СписокЗначений; Запрос = Новый Запрос; @@ -357,11 +407,11 @@ КонецПроцедуры -// Вспомогательные функции управлением вводом - &НаКлиенте Функция АвтоПодборПоСпискуВыбора(Элемент, Текст, СтандартнаяОбработка) + // Вспомогательная функция управлением вводом + Для Каждого ЭлементВыбора Из Элемент.СписокВыбора Цикл Если ВРег(Текст) = ВРег(Лев(ЭлементВыбора.Представление, СтрДлина(Текст))) Тогда Результат = Новый СписокЗначений; @@ -378,6 +428,8 @@ &НаКлиенте Функция ОкончаниеВводаТекстаПоСпискуВыбора(Элемент, Текст, СтандартнаяОбработка) + // Вспомогательная функция управлением вводом + СтандартнаяОбработка = Ложь; Для Каждого ЭлементВыбора Из Элемент.СписокВыбора Цикл @@ -394,3 +446,4 @@ Возврат Неопределено; КонецФункции + diff --git a/SSL/src/Catalogs/Валюты/ObjectModule.bsl b/SSL/src/Catalogs/Валюты/ObjectModule.bsl index 7749f9e18..f911a0613 100644 --- a/SSL/src/Catalogs/Валюты/ObjectModule.bsl +++ b/SSL/src/Catalogs/Валюты/ObjectModule.bsl @@ -1,23 +1,28 @@ //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий объекта +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если ЗагружаетсяИзИнтернета И ЗначениеЗаполнено(ОсновнаяВалюта) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Зависимая валюта не может быть загружена с сайта РБК'")); + НСтр("ru = 'Зависимая валюта не может быть загружена с сайта РБК'") + ); Отказ = Истина; КонецЕсли; Если ЗначениеЗаполнено(ОсновнаяВалюта.ОсновнаяВалюта) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Основная валюта не может быть зависимой.'"),,,,Отказ); + НСтр("ru = 'Основная валюта не может быть зависимой.'") + ); + Отказ = Истина; КонецЕсли; Если РаботаСКурсамиВалют.ПолучитьСписокЗависимыхВалют(Ссылка).Количество() > 0 И ЗначениеЗаполнено(ОсновнаяВалюта) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Валюта не может быть подчиненной, так как она является основной для других валют.'"),,,,Отказ); + НСтр("ru = 'Валюта не может быть подчиненной, так как она является основной для других валют.'") + ); + Отказ = Истина; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt b/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt index 9e4164337..ef4c05a92 100644 --- a/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt +++ b/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt @@ -1,7 +1,6 @@ - + - @@ -107,7 +106,7 @@ - + @@ -140,7 +139,7 @@ - + @@ -150,6 +149,7 @@ + @@ -167,7 +167,7 @@ - + diff --git a/SSL/src/Catalogs/Валюты/Валюты.mdo b/SSL/src/Catalogs/Валюты/Валюты.mdo index 46b6a6fbc..c5d6d6a9c 100644 --- a/SSL/src/Catalogs/Валюты/Валюты.mdo +++ b/SSL/src/Catalogs/Валюты/Валюты.mdo @@ -140,6 +140,7 @@ BothWays Catalog.Валюты.Form.ФормаЭлемента Catalog.Валюты.Form.ФормаСписка + Catalog.Валюты.Form.ФормаВыбора ЗагружаетсяИзИнтернета @@ -287,6 +288,15 @@ PersonalComputer MobileDevice + + ФормаВыбора + + ru + Форма выбора + + PersonalComputer + MobileDevice + ОбщероссийскийКлассификаторВалют diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl index eeddfdcfe..ac0732d42 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Module.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl index a32086d64..b7e5b6a6c 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl index f564cb0e0..3779a3236 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Module.bsl @@ -1,22 +1,24 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("Владелец") Тогда - Если ТипЗнч(Параметры.Владелец) = Тип("ПланВидовХарактеристикСсылка.ВопросыДляАнкетирования") Тогда - Если НЕ Параметры.Владелец.Пустая() Тогда - - Объект.Владелец = Параметры.Владелец; - - КонецЕсли; - КонецЕсли; + Если Параметры.Свойство("Владелец") Тогда + Если ТипЗнч(Параметры.Владелец) = Тип("ПланВидовХарактеристикСсылка.ВопросыДляАнкетирования") Тогда + Если НЕ Параметры.Владелец.Пустая() Тогда + + Объект.Владелец = Параметры.Владелец; + + КонецЕсли; + КонецЕсли; КонецЕсли; Если Параметры.Свойство("ТипОтвета") Тогда - Элементы.ТребуетОткрытогоОтвета.Видимость = (Параметры.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз); + Элементы.ТребуетОткрытогоОтвета.Видимость = (Параметры.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз); Иначе - Элементы.ТребуетОткрытогоОтвета.Видимость = (Объект.Владелец.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз); + Элементы.ТребуетОткрытогоОтвета.Видимость = (Объект.Владелец.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз); КонецЕсли; - + КонецПроцедуры - \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/ВариантыОтветовАнкет.mdo b/SSL/src/Catalogs/ВариантыОтветовАнкет/ВариантыОтветовАнкет.mdo index d85898e62..b8621ac19 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/ВариантыОтветовАнкет.mdo +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/ВариантыОтветовАнкет.mdo @@ -113,6 +113,10 @@ Use Managed Use + + ru + Вариант ответа анкеты + 2 true ChartOfCharacteristicTypes.ВопросыДляАнкетирования diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаБыстрогоДоступа/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаБыстрогоДоступа/Module.bsl index 131643c12..a294edd04 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаБыстрогоДоступа/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаБыстрогоДоступа/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -68,7 +68,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура Принять(Команда) diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/Form.form index a48f13427..389fdb565 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/Form.form @@ -161,7 +161,7 @@ DragCheck - ДеревоКомандныйИнтерфейсПроверкаПеретаскивания + ДеревоПодсистемПроверкаПеретаскивания OnActivateRow @@ -169,7 +169,7 @@ Drag - ДеревоКомандныйИнтерфейсПеретаскивание + ДеревоПодсистемПеретаскивание ДеревоПодсистемСтрокаПоиска diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/Module.bsl index 69481e54d..6288ec656 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/Module.bsl @@ -1,3 +1,153 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ЗагузитьСтруктураПодсистем(); + + // заполним вариантами группировки + + ТЗ = "ВЫБРАТЬ + | ВариантыОтчетовПодсистемы.Подсистема, + | ВариантыОтчетовПодсистемы.Ссылка, + | ВариантыОтчетовПодсистемы.Ссылка.Наименование КАК Представление, + | ВариантыОтчетовПодсистемы.Ссылка.КлючВарианта, + | ВариантыОтчетовПодсистемы.Ссылка.КлючОбъекта КАК Отчет, + | ВариантыОтчетовПодсистемы.Предопределенная + |ИЗ + | Справочник.ВариантыОтчетов.Подсистемы КАК ВариантыОтчетовПодсистемы + |ГДЕ + | (НЕ ВариантыОтчетовПодсистемы.Ссылка.ПометкаУдаления)"; + + Запрос = Новый Запрос(ТЗ); + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + МассивСтрок = СоответсвиеПодсистемИСтрок.НайтиСтроки(Новый Структура("Путь", Выборка.Подсистема)); + Если МассивСтрок.Количество() > 0 тогда + СтрокаПодсистемы = ДеревоПодсистем.НайтиПоИдентификатору(МассивСтрок[0].ИдентификаторСтроки); + Иначе + Продолжить;; + КонецЕсли; + + Если СтрокаПодсистемы = Неопределено тогда + Продолжить; + КонецЕсли; + СтрокаВарианта = СтрокаПодсистемы.ПолучитьЭлементы().Добавить(); + + СтрокаВарианта.Путь = СтрокаПодсистемы.Путь; + СтрокаВарианта.Представление = Выборка.Представление; + СтрокаВарианта.Вариант = Выборка.Ссылка; + СтрокаВарианта.Ключ = Выборка.КлючВарианта; + СтрокаВарианта.Отчет = Выборка.Отчет; + СтрокаВарианта.Предопредленная = Выборка.Предопределенная; + + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПодсистем + +&НаКлиенте +Процедура ДеревоПодсистемПриАктивизацииСтроки(Элемент) + + Если Элемент.ТекущиеДанные <> Неопределено тогда + Если Элемент.ТекущиеДанные.Предопредленная или Элемент.ТекущиеДанные.Отчет = "" тогда + Элементы.ДеревоПодсистемПереместитьВариант.Доступность = Ложь; + Элементы.Удалить.Доступность = Ложь; + Иначе + Элементы.ДеревоПодсистемПереместитьВариант.Доступность = истина; + Элементы.Удалить.Доступность = истина; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоПодсистемПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + + СтандартнаяОбработка = ложь; + + Если ТипЗнч(ПараметрыПеретаскивания.Значение) <> Тип("Массив") тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + + СтрокаВставки = ДеревоПодсистем.НайтиПоИдентификатору(Строка); + ПеретаскиваемыеДанные = Неопределено; + Если ПараметрыПеретаскивания.Значение.Количество() > 0 тогда + ИндексСтроки = ПараметрыПеретаскивания.Значение[0]; + ПеретаскиваемыеДанные = ДеревоПодсистем.НайтиПоИдентификатору(ИндексСтроки); + КонецЕсли; + + + Если НЕ ((СтрокаВставки <> Неопределено и СтрокаВставки.Отчет = "") + и (ПеретаскиваемыеДанные <> Неопределено и ПеретаскиваемыеДанные.Отчет <> "")) тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + КонецЕсли; + + Если ПеретаскиваемыеДанные <> Неопределено и ПеретаскиваемыеДанные.Предопредленная + и ПараметрыПеретаскивания.Действие <> ДействиеПеретаскивания.Копирование тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоПодсистемПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + + Если ТипЗнч(ПараметрыПеретаскивания.Значение) <> Тип("Массив") тогда + СтандартнаяОбработка = ложь; + Возврат; + КонецЕсли; + + ПеретаскиваемыеДанные = Неопределено; + Если ПараметрыПеретаскивания.Значение.Количество() > 0 тогда + ИндексСтроки = ПараметрыПеретаскивания.Значение[0]; + ПеретаскиваемыеДанные = ДеревоПодсистем.НайтиПоИдентификатору(ИндексСтроки); + КонецЕсли; + СтандартнаяОбработка = ложь; + СтрокаВставки = ДеревоПодсистем.НайтиПоИдентификатору(Строка); + ПутьПодсистемы = СтрокаВставки.Путь; + + // опредлим формирование отчетности + СтрокаВарианта = Неопределено; + Для каждого СтркаВарианта из СтрокаВставки.ПолучитьЭлементы() Цикл + Если СтркаВарианта.Ключ = ПеретаскиваемыеДанные.Ключ + И СтркаВарианта.Отчет = ПеретаскиваемыеДанные.Отчет + И ПутьПодсистемы = ПеретаскиваемыеДанные.ПолучитьРодителя().Путь тогда + СтрокаВарианта = СтркаВарианта; + Прервать; + КонецЕсли; + КонецЦикла; + + Если СтрокаВарианта <> Неопределено тогда + Возврат; + КонецЕсли; + + Если ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование тогда + НоваяСтрока = СтрокаВставки.ПолучитьЭлементы().Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеретаскиваемыеДанные); + НоваяСтрока.Путь = ПутьПодсистемы; + НоваяСтрока.Предопредленная = ложь; + ИначеЕсли ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение тогда + + НоваяСтрока = СтрокаВставки.ПолучитьЭлементы().Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеретаскиваемыеДанные); + НоваяСтрока.Путь = ПутьПодсистемы; + НоваяСтрока.Предопредленная = ложь; + РодительСтроки = ПеретаскиваемыеДанные.ПолучитьРодителя(); + РодительСтроки.ПолучитьЭлементы().Удалить(ПеретаскиваемыеДанные); + + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ПрименитьКомандыйИнтерфейс(Команда) @@ -7,6 +157,60 @@ КонецПроцедуры +&НаКлиенте +Процедура СкопироватьВариант(Команда) + + Результат = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.СкопироватьВариантВРаздел", , ЭтаФорма); + Если Результат <> Неопределено тогда + МассивСтрок = СоответсвиеПодсистемИСтрок.НайтиСтроки(Новый Структура("Путь", Результат.Путь)); + Если МассивСтрок.Количество() > 0 тогда + СтрокаПодсистемы = ДеревоПодсистем.НайтиПоИдентификатору(МассивСтрок[0].ИдентификаторСтроки); + Иначе + Возврат; + КонецЕсли; + НоваяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Добавить(); + НоваяСтрока.Путь = Результат.Путь; + НоваяСтрока.Отчет = Результат.Отчет; + НоваяСтрока.Ключ = Результат.Вариант; + НоваяСтрока.Вариант = Результат.Ссылка; + НоваяСтрока.Представление = Результат.ПредставлениеВарианта; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПреместитьВариант(Команда) + + Результат = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.ПереместитьВариантВРаздел", , ЭтаФорма); + Если Результат <> Неопределено тогда + МассивСтрок = СоответсвиеПодсистемИСтрок.НайтиСтроки(Новый Структура("Путь", Результат)); + Если МассивСтрок.Количество() > 0 тогда + СтрокаПодсистемы = ДеревоПодсистем.НайтиПоИдентификатору(МассивСтрок[0].ИдентификаторСтроки); + Иначе + Возврат; + КонецЕсли; + ПеретаскиваемыеДанные = Элементы.ДеревоПодсистем.ТекущиеДанные; + Если ПеретаскиваемыеДанные.Предопредленная тогда + Возврат; + КонецЕсли; + НоваяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеретаскиваемыеДанные); + НоваяСтрока.Путь = Результат; + + РодительСтроки = ПеретаскиваемыеДанные.ПолучитьРодителя(); + РодительСтроки.ПолучитьЭлементы().Удалить(ПеретаскиваемыеДанные); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + Закрыть(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервере Процедура ПрименитьНастройки() @@ -64,7 +268,13 @@ КонецЦикла; Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Варианты отчетов. Настройка группировки по разделам'"), + УровеньЖурналаРегистрации.Ошибка, + , + , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); КонецПопытки; ЗафиксироватьТранзакцию(); @@ -87,54 +297,6 @@ КонецПроцедуры -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - ЗагузитьСтруктураПодсистем(); - - // заполним вариантами группировки - - ТЗ = "ВЫБРАТЬ - | ВариантыОтчетовПодсистемы.Подсистема, - | ВариантыОтчетовПодсистемы.Ссылка, - | ВариантыОтчетовПодсистемы.Ссылка.Наименование КАК Представление, - | ВариантыОтчетовПодсистемы.Ссылка.КлючВарианта, - | ВариантыОтчетовПодсистемы.Ссылка.КлючОбъекта КАК Отчет, - | ВариантыОтчетовПодсистемы.Предопределенная - |ИЗ - | Справочник.ВариантыОтчетов.Подсистемы КАК ВариантыОтчетовПодсистемы - |ГДЕ - | (НЕ ВариантыОтчетовПодсистемы.Ссылка.ПометкаУдаления)"; - - Запрос = Новый Запрос(ТЗ); - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - - МассивСтрок = СоответсвиеПодсистемИСтрок.НайтиСтроки(Новый Структура("Путь", Выборка.Подсистема)); - Если МассивСтрок.Количество() > 0 тогда - СтрокаПодсистемы = ДеревоПодсистем.НайтиПоИдентификатору(МассивСтрок[0].ИдентификаторСтроки); - Иначе - Продолжить;; - КонецЕсли; - - Если СтрокаПодсистемы = Неопределено тогда - Продолжить; - КонецЕсли; - СтрокаВарианта = СтрокаПодсистемы.ПолучитьЭлементы().Добавить(); - - СтрокаВарианта.Путь = СтрокаПодсистемы.Путь; - СтрокаВарианта.Представление = Выборка.Представление; - СтрокаВарианта.Вариант = Выборка.Ссылка; - СтрокаВарианта.Ключ = Выборка.КлючВарианта; - СтрокаВарианта.Отчет = Выборка.Отчет; - СтрокаВарианта.Предопредленная = Выборка.Предопределенная; - - КонецЦикла; - -КонецПроцедуры - &НаСервере Процедура ЗагузитьСтруктураПодсистем() @@ -173,149 +335,3 @@ КонецПроцедуры -&НаКлиенте -Процедура ДеревоКомандныйИнтерфейсПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - - СтандартнаяОбработка = ложь; - - Если ТипЗнч(ПараметрыПеретаскивания.Значение) <> Тип("Массив") тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - Возврат; - КонецЕсли; - - СтрокаВставки = ДеревоПодсистем.НайтиПоИдентификатору(Строка); - ПеретаскиваемыеДанные = Неопределено; - Если ПараметрыПеретаскивания.Значение.Количество() > 0 тогда - ИндексСтроки = ПараметрыПеретаскивания.Значение[0]; - ПеретаскиваемыеДанные = ДеревоПодсистем.НайтиПоИдентификатору(ИндексСтроки); - КонецЕсли; - - - Если НЕ ((СтрокаВставки <> Неопределено и СтрокаВставки.Отчет = "") - и (ПеретаскиваемыеДанные <> Неопределено и ПеретаскиваемыеДанные.Отчет <> "")) тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - КонецЕсли; - - Если ПеретаскиваемыеДанные <> Неопределено и ПеретаскиваемыеДанные.Предопредленная - и ПараметрыПеретаскивания.Действие <> ДействиеПеретаскивания.Копирование тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ДеревоКомандныйИнтерфейсПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - - Если ТипЗнч(ПараметрыПеретаскивания.Значение) <> Тип("Массив") тогда - СтандартнаяОбработка = ложь; - Возврат; - КонецЕсли; - - ПеретаскиваемыеДанные = Неопределено; - Если ПараметрыПеретаскивания.Значение.Количество() > 0 тогда - ИндексСтроки = ПараметрыПеретаскивания.Значение[0]; - ПеретаскиваемыеДанные = ДеревоПодсистем.НайтиПоИдентификатору(ИндексСтроки); - КонецЕсли; - СтандартнаяОбработка = ложь; - СтрокаВставки = ДеревоПодсистем.НайтиПоИдентификатору(Строка); - ПутьПодсистемы = СтрокаВставки.Путь; - - // опредлим формирование отчетности - СтрокаВарианта = Неопределено; - Для каждого СтркаВарианта из СтрокаВставки.ПолучитьЭлементы() Цикл - Если СтркаВарианта.Ключ = ПеретаскиваемыеДанные.Ключ - И СтркаВарианта.Отчет = ПеретаскиваемыеДанные.Отчет - И ПутьПодсистемы = ПеретаскиваемыеДанные.ПолучитьРодителя().Путь тогда - СтрокаВарианта = СтркаВарианта; - Прервать; - КонецЕсли; - КонецЦикла; - - Если СтрокаВарианта <> Неопределено тогда - Возврат; - КонецЕсли; - - Если ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование тогда - НоваяСтрока = СтрокаВставки.ПолучитьЭлементы().Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеретаскиваемыеДанные); - НоваяСтрока.Путь = ПутьПодсистемы; - НоваяСтрока.Предопредленная = ложь; - ИначеЕсли ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение тогда - - НоваяСтрока = СтрокаВставки.ПолучитьЭлементы().Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеретаскиваемыеДанные); - НоваяСтрока.Путь = ПутьПодсистемы; - НоваяСтрока.Предопредленная = ложь; - РодительСтроки = ПеретаскиваемыеДанные.ПолучитьРодителя(); - РодительСтроки.ПолучитьЭлементы().Удалить(ПеретаскиваемыеДанные); - - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ПреместитьВариант(Команда) - - Результат = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.ПереместитьВариантВРаздел", , ЭтаФорма); - Если Результат <> Неопределено тогда - МассивСтрок = СоответсвиеПодсистемИСтрок.НайтиСтроки(Новый Структура("Путь", Результат)); - Если МассивСтрок.Количество() > 0 тогда - СтрокаПодсистемы = ДеревоПодсистем.НайтиПоИдентификатору(МассивСтрок[0].ИдентификаторСтроки); - Иначе - Возврат; - КонецЕсли; - ПеретаскиваемыеДанные = Элементы.ДеревоПодсистем.ТекущиеДанные; - Если ПеретаскиваемыеДанные.Предопредленная тогда - Возврат; - КонецЕсли; - НоваяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеретаскиваемыеДанные); - НоваяСтрока.Путь = Результат; - - РодительСтроки = ПеретаскиваемыеДанные.ПолучитьРодителя(); - РодительСтроки.ПолучитьЭлементы().Удалить(ПеретаскиваемыеДанные); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура Отмена(Команда) - Закрыть(); -КонецПроцедуры - -&НаКлиенте -Процедура СкопироватьВариант(Команда) - - Результат = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.СкопироватьВариантВРаздел", , ЭтаФорма); - Если Результат <> Неопределено тогда - МассивСтрок = СоответсвиеПодсистемИСтрок.НайтиСтроки(Новый Структура("Путь", Результат.Путь)); - Если МассивСтрок.Количество() > 0 тогда - СтрокаПодсистемы = ДеревоПодсистем.НайтиПоИдентификатору(МассивСтрок[0].ИдентификаторСтроки); - Иначе - Возврат; - КонецЕсли; - НоваяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Добавить(); - НоваяСтрока.Путь = Результат.Путь; - НоваяСтрока.Отчет = Результат.Отчет; - НоваяСтрока.Ключ = Результат.Вариант; - НоваяСтрока.Вариант = Результат.Ссылка; - НоваяСтрока.Представление = Результат.ПредставлениеВарианта; - КонецЕсли; - -КонецПроцедуры - - -&НаКлиенте -Процедура ДеревоПодсистемПриАктивизацииСтроки(Элемент) - - Если Элемент.ТекущиеДанные <> Неопределено тогда - Если Элемент.ТекущиеДанные.Предопредленная или Элемент.ТекущиеДанные.Отчет = "" тогда - Элементы.ДеревоПодсистемПереместитьВариант.Доступность = Ложь; - Элементы.Удалить.Доступность = Ложь; - Иначе - Элементы.ДеревоПодсистемПереместитьВариант.Доступность = истина; - Элементы.Удалить.Доступность = истина; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем/Module.bsl index 653f619d7..7766676ec 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем/Module.bsl @@ -42,7 +42,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура Принять(Команда) @@ -69,6 +69,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаКлиенте Процедура ДобавитьПодсистемы(СтрокаПодсистемы) diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ПереместитьВариантВРаздел/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ПереместитьВариантВРаздел/Module.bsl index b39e2df1e..fc4fac1c7 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ПереместитьВариантВРаздел/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ПереместитьВариантВРаздел/Module.bsl @@ -1,3 +1,31 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // Загрузка структуры подсистем + ДеревоПодсистемДляКопирования = Новый ДеревоЗначений; + ДеревоПодсистемДляКопирования.Колонки.Добавить("Подсистема"); + ДеревоПодсистемДляКопирования.Колонки.Добавить("Название"); + + СписокПодсистем = Новый СписокЗначений; + СписокПодсистем.Добавить(""); + + // Сделаем список отчетов + СписокПодсистем = ВариантыОтчетов.ПолучитьСписокПодсистем(СписокПодсистем, ДеревоПодсистемДляКопирования); + + СтрокаКонфигурации = ДеревоПодсистем.ПолучитьЭлементы().Добавить(); + СтрокаКонфигурации.Путь = ""; + СтрокаКонфигурации.Представление = "Конфигурация"; + СтрокаКонфигурации.Предопредленная = истина; + + СоответсвиеПодсистемИСтрок = Новый Соответствие; + + СкопироватьДеревоЗначений(СтрокаКонфигурации.ПолучитьЭлементы(), ДеревоПодсистемДляКопирования.Строки, СоответсвиеПодсистемИСтрок); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПодсистем &НаКлиенте Процедура ДеревоПодсистемВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -10,50 +38,8 @@ Закрыть(Путь); КонецПроцедуры -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - ЗагузитьСтруктураПодсистем(); - -КонецПроцедуры - -&НаСервере -Процедура ЗагузитьСтруктураПодсистем() - - ДеревоПодсистемДляКопирования = Новый ДеревоЗначений; - ДеревоПодсистемДляКопирования.Колонки.Добавить("Подсистема"); - ДеревоПодсистемДляКопирования.Колонки.Добавить("Название"); - - СписокПодсистем = Новый СписокЗначений; - СписокПодсистем.Добавить(""); - - // Сделаем список отчетов - СписокПодсистем = ВариантыОтчетов.ПолучитьСписокПодсистем(СписокПодсистем, ДеревоПодсистемДляКопирования); - - СтрокаКонфигурации = ДеревоПодсистем.ПолучитьЭлементы().Добавить(); - СтрокаКонфигурации.Путь = ""; - СтрокаКонфигурации.Представление = "Конфигурация"; - СтрокаКонфигурации.Предопредленная = истина; - - СоответсвиеПодсистемИСтрок = Новый Соответствие; - - СкопироватьДеревоЗначений(СтрокаКонфигурации.ПолучитьЭлементы(), ДеревоПодсистемДляКопирования.Строки, СоответсвиеПодсистемИСтрок); - -КонецПроцедуры - -&НаСервере -Процедура СкопироватьДеревоЗначений(КолекцияПриемник, КолекцияИсточник, СоответсвиеПодсистемИСтрок) - - Для каждого Элемент из КолекцияИсточник Цикл - СтрокаЗначение = КолекцияПриемник.Добавить(); - СтрокаЗначение.Путь = Элемент.Подсистема; - СтрокаЗначение.Представление = Элемент.Название; - СтрокаЗначение.Предопредленная = Метаданные.НайтиПоПолномуИмени("Подсистема." + СтрЗаменить(Элемент.Подсистема, "\", ".Подсистема.")) <> Неопределено; - СоответсвиеПодсистемИСтрок.Вставить(СтрокаЗначение.Путь, СтрокаЗначение); - СкопироватьДеревоЗначений(СтрокаЗначение.ПолучитьЭлементы(), Элемент.Строки, СоответсвиеПодсистемИСтрок); - КонецЦикла; - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ОК(Команда) @@ -75,4 +61,20 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура СкопироватьДеревоЗначений(КолекцияПриемник, КолекцияИсточник, СоответсвиеПодсистемИСтрок) + + Для каждого Элемент из КолекцияИсточник Цикл + СтрокаЗначение = КолекцияПриемник.Добавить(); + СтрокаЗначение.Путь = Элемент.Подсистема; + СтрокаЗначение.Представление = Элемент.Название; + СтрокаЗначение.Предопредленная = Метаданные.НайтиПоПолномуИмени("Подсистема." + СтрЗаменить(Элемент.Подсистема, "\", ".Подсистема.")) <> Неопределено; + СоответсвиеПодсистемИСтрок.Вставить(СтрокаЗначение.Путь, СтрокаЗначение); + СкопироватьДеревоЗначений(СтрокаЗначение.ПолучитьЭлементы(), Элемент.Строки, СоответсвиеПодсистемИСтрок); + КонецЦикла; + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СкопироватьВариантВРаздел/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СкопироватьВариантВРаздел/Module.bsl index c1f31f00f..735757684 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СкопироватьВариантВРаздел/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СкопироватьВариантВРаздел/Module.bsl @@ -1,37 +1,10 @@ - -&НаКлиенте -Процедура ДеревоПодсистемВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - Если Элементы.ДеревоПодсистем.ТекущиеДанные = Неопределено тогда - Предупреждение("Не выбран раздел отчета"); - Возврат; - КонецЕсли; - - Если Элементы.СписокОтчетовИВариантов.ТекущиеДанные = Неопределено тогда - Предупреждение("Не выбран вариант."); - Возврат; - КонецЕсли; - Структура = Новый Структура("Путь, Отчет, Вариант, ССылка, ПредставлениеВарианта"); - - Структура.Путь = Элементы.ДеревоПодсистем.ТекущиеДанные.Путь; - Структура.Вариант = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.Вариант; - Структура.Отчет = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.Отчет; - Структура.Ссылка = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.Ссылка; - Структура.ПредставлениеВарианта = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.ПредставлениеВарианта; - Закрыть(Структура); -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ЗагузитьСтруктураПодсистем(); - - ЗагрузитьСписокВариантовИОтчетов(); - -КонецПроцедуры - -&НаСервере -Процедура ЗагузитьСтруктураПодсистем() - + // Загрузка структуры подсистем ДеревоПодсистемДляКопирования = Новый ДеревоЗначений; ДеревоПодсистемДляКопирования.Колонки.Добавить("Подсистема"); ДеревоПодсистемДляКопирования.Колонки.Добавить("Название"); @@ -39,7 +12,6 @@ СписокПодсистем = Новый СписокЗначений; СписокПодсистем.Добавить(""); - // Сделаем список отчетов СписокПодсистем = ВариантыОтчетов.ПолучитьСписокПодсистем(СписокПодсистем, ДеревоПодсистемДляКопирования); СтрокаКонфигурации = ДеревоПодсистем.ПолучитьЭлементы().Добавить(); @@ -50,12 +22,8 @@ СоответсвиеПодсистемИСтрок = Новый Соответствие; СкопироватьДеревоЗначений(СтрокаКонфигурации.ПолучитьЭлементы(), ДеревоПодсистемДляКопирования.Строки, СоответсвиеПодсистемИСтрок); - -КонецПроцедуры - -&НаСервере -Процедура ЗагрузитьСписокВариантовИОтчетов() + // Загрузка списка вариантов и отчетов ТЗ = "ВЫБРАТЬ | ВариантыОтчетов.КлючОбъекта КАК Отчет, | ВариантыОтчетов.ПредставлениеОбъекта КАК ПредставлениеОтчета, @@ -83,20 +51,33 @@ КонецПроцедуры -&НаСервере -Процедура СкопироватьДеревоЗначений(КолекцияПриемник, КолекцияИсточник, СоответсвиеПодсистемИСтрок) +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПодсистем + +&НаКлиенте +Процедура ДеревоПодсистемВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + Если Элементы.ДеревоПодсистем.ТекущиеДанные = Неопределено тогда + Предупреждение("Не выбран раздел отчета"); + Возврат; + КонецЕсли; - Для каждого Элемент из КолекцияИсточник Цикл - СтрокаЗначение = КолекцияПриемник.Добавить(); - СтрокаЗначение.Путь = Элемент.Подсистема; - СтрокаЗначение.Представление = Элемент.Название; - СтрокаЗначение.Предопредленная = Метаданные.НайтиПоПолномуИмени("Подсистема." + СтрЗаменить(Элемент.Подсистема, "\", ".Подсистема.")) <> Неопределено; - СоответсвиеПодсистемИСтрок.Вставить(СтрокаЗначение.Путь, СтрокаЗначение); - СкопироватьДеревоЗначений(СтрокаЗначение.ПолучитьЭлементы(), Элемент.Строки, СоответсвиеПодсистемИСтрок); - КонецЦикла; + Если Элементы.СписокОтчетовИВариантов.ТекущиеДанные = Неопределено тогда + Предупреждение("Не выбран вариант."); + Возврат; + КонецЕсли; + Структура = Новый Структура("Путь, Отчет, Вариант, ССылка, ПредставлениеВарианта"); + Структура.Путь = Элементы.ДеревоПодсистем.ТекущиеДанные.Путь; + Структура.Вариант = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.Вариант; + Структура.Отчет = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.Отчет; + Структура.Ссылка = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.Ссылка; + Структура.ПредставлениеВарианта = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.ПредставлениеВарианта; + Закрыть(Структура); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ОК(Команда) @@ -127,4 +108,21 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура СкопироватьДеревоЗначений(КолекцияПриемник, КолекцияИсточник, СоответсвиеПодсистемИСтрок) + + Для каждого Элемент из КолекцияИсточник Цикл + СтрокаЗначение = КолекцияПриемник.Добавить(); + СтрокаЗначение.Путь = Элемент.Подсистема; + СтрокаЗначение.Представление = Элемент.Название; + СтрокаЗначение.Предопредленная = Метаданные.НайтиПоПолномуИмени("Подсистема." + СтрЗаменить(Элемент.Подсистема, "\", ".Подсистема.")) <> Неопределено; + СоответсвиеПодсистемИСтрок.Вставить(СтрокаЗначение.Путь, СтрокаЗначение); + СкопироватьДеревоЗначений(СтрокаЗначение.ПолучитьЭлементы(), Элемент.Строки, СоответсвиеПодсистемИСтрок); + КонецЦикла; + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..91027f589 --- /dev/null +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,15 @@ + + + + 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/ФормаВыбора/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Form.form new file mode 100644 index 000000000..7c7363239 --- /dev/null +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Form.form @@ -0,0 +1,838 @@ + + + + РазделыИВарианты + 31 + + Разделы + 32 + + ДеревоРазделов + 21 + true + true + + true + + + ДеревоРазделов + + true + None + Add + Change + Copy + CopyToClipboard + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SortListAsc + SortListDesc + Tree + + ДеревоРазделовПредставление + 28 + true + true + + true + + + ДеревоРазделов.Представление + + + ДеревоРазделовПредставлениеРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ДеревоРазделовПредставлениеКонтекстноеМеню + 29 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + None + + ДеревоРазделовКоманднаяПанель + 23 + Left + true + + + OnActivateRow + ДеревоРазделовПриАктивизацииСтроки + + + ДеревоРазделовСтрокаПоиска + 38 + + ДеревоРазделовСтрокаПоискаРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ДеревоРазделовСтрокаПоискаКонтекстноеМеню + 39 + true + + ДеревоРазделов + + true + + + + ДеревоРазделовСостояниеПросмотра + 41 + + ДеревоРазделовСостояниеПросмотраРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ДеревоРазделовСостояниеПросмотраКонтекстноеМеню + 42 + true + + ViewStatusAddition + ДеревоРазделов + + true + + + + ДеревоРазделовУправлениеПоиском + 44 + + ДеревоРазделовУправлениеПоискомРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ДеревоРазделовУправлениеПоискомКонтекстноеМеню + 45 + true + + SearchControlAddition + ДеревоРазделов + + true + + + + ДеревоРазделовРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ДеревоРазделовКонтекстноеМеню + 22 + true + + Tree + true + 10 + true + true + true +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + false + false + true + Auto + true + true + true + true + None + None + None + true +
+ true + true + + true + + + <key>ru</key> + <value>Разделы</value> + + + ru + Разделы + + true + true + + РазделыРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
+ + Варианты + 33 + + Список + 1 + true + true + + true + + + Список + + true + None + Change + Copy + CopyToClipboard + Create + Delete + Refresh + SetDeletionMark + + ПредставлениеОбъекта + 18 + + <key>ru</key> + <value>Отчет</value> + + true + true + + + Список.ПредставлениеОбъекта + + + ПредставлениеОбъектаРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + ПредставлениеОбъектаКонтекстноеМеню + 19 + true + + LabelField + Enter + true + Left + true + + 20 + true + true + true + + + + Наименование + 4 + true + true + + true + + + Список.Description + + true + + НаименованиеРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + 20 + true + true + true + + + + Администратор + 8 + + <key>ru</key> + <value>Автор</value> + + true + true + + true + + + Список.Администратор + + + АдминистраторРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + АдминистраторКонтекстноеМеню + 9 + true + + LabelField + Enter + true + Left + true + + 11 + true + true + false + + + + ТипВариантаОтчета + 12 + + <key>ru</key> + <value>Тип настройки</value> + + true + true + + + Список.ТипВариантаОтчета + + + ТипВариантаОтчетаРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + + ТипВариантаОтчетаКонтекстноеМеню + 13 + true + + LabelField + Enter + true + Left + true + + 10 + true + true + false + + + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска + 59 + + СписокСтрокаПоискаРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 60 + true + + Список + + true + + + + СписокСостояниеПросмотра + 62 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 63 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 65 + + СписокУправлениеПоискомРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 66 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + true + true + true + true + true + true + true + MultiRow +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
+ true + true + + true + + + <key>ru</key> + <value>Варианты</value> + + + ru + Варианты + + true + true + + ВариантыРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
+ true + true + + true + + + <key>ru</key> + <value>Разделы и варианты</value> + + + ru + Разделы и варианты + + true + true + + РазделыИВариантыРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + +
+ + ФормаКоманднаяПанель + -1 + + ДействияСписка + 30 + true + true + + true + + + <key>ru</key> + <value>Действия списка</value> + + + ru + Действия списка + + + ДействияСпискаРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + Item.Список + + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + CancelSearch + Change + Choose + Close + Copy + Create + CustomizeForm + Delete + Find + Help + Ignore + ListSettings + No + OK + OutputList + Refresh + RestoreValues + Retry + SaveValues + SetDeletionMark + Yes + 90 + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
true
+ + ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + ВариантыОтчетов.Ссылка, + ВариантыОтчетов.ВерсияДанных, + ВариантыОтчетов.ПометкаУдаления, + ВариантыОтчетов.Предопределенный, + ВариантыОтчетов.Наименование, + ВариантыОтчетов.КлючОбъекта, + ВариантыОтчетов.Администратор, + ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) КАК Описание, + ВариантыОтчетов.ТипВариантаОтчета, + ВариантыОтчетов.КлючВарианта, + ВариантыОтчетов.БыстрыйДоступ, + ВариантыОтчетов.ПредставлениеОбъекта +ИЗ + Справочник.ВариантыОтчетов КАК ВариантыОтчетов + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.ИсключенияБыстрогоДоступа КАК ВариантыОтчетовИсключенияБыстрогоДоступа + ПО ВариантыОтчетов.Ссылка = ВариантыОтчетовИсключенияБыстрогоДоступа.Ссылка + И (ВариантыОтчетовИсключенияБыстрогоДоступа.Пользователь = &ТекущийПользователь) +ГДЕ + (&Подсистема = "" + ИЛИ ВариантыОтчетов.Подсистемы.Подсистема ПОДОБНО &Подсистема + "%") + И ВариантыОтчетов.КлючОбъекта В(&СписокОтчетов) + И ВариантыОтчетов.ТипВариантаОтчета В(&СписокТипов) + И ВЫБОР + КОГДА ВариантыОтчетовИсключенияБыстрогоДоступа.Пользователь ЕСТЬ NULL + ТОГДА ВариантыОтчетов.БыстрыйДоступ = ИСТИНА + ИНАЧЕ ВариантыОтчетов.БыстрыйДоступ = ЛОЖЬ + КОНЕЦ + Catalog.ВариантыОтчетов + true + true + true + true + true + +
+ + ДеревоРазделов + + <key>ru</key> + <value>Дерево разделов</value> + + 4 + + ValueTree + + + true + + + true + + + ПолныйПутьКПодсистеме + + <key>ru</key> + <value>Полный путь к подсистеме</value> + + 2 + + String + + + + true + + + true + + + + Имя + + <key>ru</key> + <value>Имя</value> + + 3 + + String + + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Раздел</value> + + 5 + + String + + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 6 + + Picture + + + true + + + true + + + + + + + + +
diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Module.bsl new file mode 100644 index 000000000..ca7e7460f --- /dev/null +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Module.bsl @@ -0,0 +1,171 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ОтборПоОтчетам = ВариантыОтчетовВызовСервераПовтИсп.ОтчетыТекущегоПользователя(); + + // Инициализация параметров запроса динамического списка + Список.Параметры.УстановитьЗначениеПараметра("СписокОтчетов", ОтборПоОтчетам.ВыгрузитьЗначения()); + Список.Параметры.УстановитьЗначениеПараметра("ТекущийПользователь", Пользователи.ТекущийПользователь()); + Если Параметры.Свойство("ОтборПоТипу") Тогда + Список.Параметры.УстановитьЗначениеПараметра("СписокТипов", Параметры.ОтборПоТипу.ВыгрузитьЗначения()); + Иначе + Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "И ВариантыОтчетов.ТипВариантаОтчета В(&СписокТипов)", ""); + КонецЕсли; + + ДеревоРазделовЗаполнить(); + + ЭлементыДерева = ДеревоРазделов.ПолучитьЭлементы(); + Если ЭлементыДерева.Количество() > 0 Тогда + ТекущаяСтрокаДерева = ЭлементыДерева[0]; + Элементы.ДеревоРазделов.ТекущаяСтрока = ТекущаяСтрокаДерева.ПолучитьИдентификатор(); + Список.Параметры.УстановитьЗначениеПараметра("Подсистема", ТекущаяСтрокаДерева.ПолныйПутьКПодсистеме); + Иначе + Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "(&Подсистема = """"", "ИСТИНА"); + Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "ИЛИ ВариантыОтчетов.Подсистемы.Подсистема ПОДОБНО &Подсистема + ""%"")", ""); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоРазделов + +&НаКлиенте +Процедура ДеревоРазделовПриАктивизацииСтроки(Элемент) + ПодключитьОбработчикОжидания("ДеревоРазделовОбработчикАктивизацииСтроки", 0.2, Истина); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ДеревоРазделовЗаполнить() + УстановитьПривилегированныйРежим(Истина); + + ДеревоЗначений = Новый ДеревоЗначений; + ДеревоЗначений.Колонки.Добавить("ПолныйПутьКПодсистеме", Новый ОписаниеТипов("Строка")); + ДеревоЗначений.Колонки.Добавить("Подсистема"); + ДеревоЗначений.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); + ДеревоЗначений.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + ДеревоЗначений.Колонки.Добавить("Картинка", Новый ОписаниеТипов("Картинка")); + + ВиртуальныеПодсистемы = ВариантыОтчетовПереопределяемый.ОписаниеВиртуальныхПодсистем(); + + // Запрос по подсистемам доступных вариантов + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВЫРАЗИТЬ(Подсистемы.Подсистема КАК СТРОКА(1000)) КАК Подсистема + |ИЗ + | Справочник.ВариантыОтчетов.Подсистемы КАК Подсистемы + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.ИсключенияБыстрогоДоступа КАК Исключения + | ПО Подсистемы.Ссылка = Исключения.Ссылка + | И (Исключения.Пользователь = &ТекущийПользователь) + |ГДЕ + | Подсистемы.Ссылка.КлючОбъекта В(&СписокОтчетов) + | И Подсистемы.Ссылка.ТипВариантаОтчета В(&СписокТипов) + | И ВЫБОР + | КОГДА Исключения.Пользователь ЕСТЬ NULL + | ТОГДА Подсистемы.Ссылка.БыстрыйДоступ = ИСТИНА + | ИНАЧЕ Подсистемы.Ссылка.БыстрыйДоступ = ЛОЖЬ + | КОНЕЦ"; + + Для Каждого ПараметрКД Из Список.Параметры.Элементы Цикл + Запрос.УстановитьПараметр(Строка(ПараметрКД.Параметр), ПараметрКД.Значение); + КонецЦикла; + + Если НЕ Параметры.Свойство("ОтборПоТипу") Тогда + Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "И Подсистемы.Ссылка.ТипВариантаОтчета В(&СписокТипов)", ""); + КонецЕсли; + + Разделитель = "\"; + + // Доступные подсистемы + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Если Выборка.Подсистема = "" Тогда + Продолжить; + КонецЕсли; + + // Разбор полного пути к подсистеме в массив + ТекущийРодитель = 0; + ПолныйПутьКПодсистеме = ""; + + МассивПодсистем = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Выборка.Подсистема, Разделитель); + Для Каждого ИмяПодсистемы Из МассивПодсистем Цикл + Если ИмяПодсистемы = "" Тогда + Продолжить; + КонецЕсли; + + ПолныйПутьКПодсистеме = ?(ПолныйПутьКПодсистеме = "", "", ПолныйПутьКПодсистеме + Разделитель) + ИмяПодсистемы; + + НаборСтрокРодителя = ?(ТекущийРодитель = 0, ДеревоЗначений.Строки, ТекущийРодитель.Строки); + + СтрокаДерева = НаборСтрокРодителя.Найти(ПолныйПутьКПодсистеме, "ПолныйПутьКПодсистеме", Ложь); + Если СтрокаДерева = Неопределено Тогда + // Добавление строки дерева + СтрокаДерева = НаборСтрокРодителя.Добавить(); + СтрокаДерева.ПолныйПутьКПодсистеме = ПолныйПутьКПодсистеме; + СтрокаДерева.Имя = ИмяПодсистемы; + + // Получение представления + ПредставлениеУстановлено = Ложь; + + // Через метаданные + Если НЕ ПредставлениеУстановлено Тогда + ПодсистемаРодителя = ?(ТекущийРодитель = 0, Метаданные, ТекущийРодитель.Подсистема); + Если ПодсистемаРодителя <> Неопределено Тогда + МетаданныеПодсистемы = ПодсистемаРодителя.Подсистемы.Найти(ИмяПодсистемы); + Если МетаданныеПодсистемы <> Неопределено Тогда + СтрокаДерева.Подсистема = МетаданныеПодсистемы; + СтрокаДерева.Представление = МетаданныеПодсистемы.Представление(); + ПредставлениеУстановлено = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Через виртуальные подсистемы + Если НЕ ПредставлениеУстановлено Тогда + ВиртуальнаяПодсистема = ВиртуальныеПодсистемы.НайтиПоЗначению(ПолныйПутьКПодсистеме); + Если ВиртуальнаяПодсистема <> Неопределено Тогда + СтрокаДерева.Представление = ВиртуальнаяПодсистема.Представление; + ПредставлениеУстановлено = Истина; + КонецЕсли; + КонецЕсли; + + // Как есть + Если НЕ ПредставлениеУстановлено Тогда + СтрокаДерева.Представление = ИмяПодсистемы; + КонецЕсли; + КонецЕсли; + + ТекущийРодитель = СтрокаДерева; + КонецЦикла; + + КонецЦикла; + + КорневаяСтрокаДерева = ДеревоЗначений.Строки.Добавить(); + КорневаяСтрокаДерева.Представление = НСтр("ru = 'Все отчеты'"); + + ЗначениеВРеквизитФормы(ДеревоЗначений, "ДеревоРазделов"); +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоРазделовОбработчикАктивизацииСтроки() + ДанныеСтроки = Элементы.ДеревоРазделов.ТекущиеДанные; + Если ДанныеСтроки = Неопределено Тогда + Возврат; + КонецЕсли; + + Параметр = Список.Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Подсистема")); + Если Параметр.Значение <> ДанныеСтроки.ПолныйПутьКПодсистеме Тогда + Параметр.Значение = ДанныеСтроки.ПолныйПутьКПодсистеме; + КонецЕсли; +КонецПроцедуры + diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form index 16669d417..f43c43465 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form @@ -15,11 +15,7 @@ None ПредставлениеОбъекта - 17 - - <key>ru</key> - <value>Отчет</value> - + 32 true true @@ -30,7 +26,7 @@ ПредставлениеОбъектаРасширеннаяПодсказка - 50 + 58 Label true true @@ -40,7 +36,7 @@ ПредставлениеОбъектаКонтекстноеМеню - 18 + 33 true LabelField @@ -55,11 +51,7 @@ Наименование - 4 - - <key>ru</key> - <value>Наименование варианта</value> - + 34 true true @@ -68,10 +60,9 @@ Список.Description - true НаименованиеРасширеннаяПодсказка - 52 + 60 Label true true @@ -81,26 +72,22 @@ НаименованиеКонтекстноеМеню - 5 + 35 true - InputField + LabelField Enter true Left true - + true true - true - true - true - Normal - ТипНастройки - 8 + ТипВариантаОтчета + 38 <key>ru</key> <value>Тип настройки</value> @@ -112,8 +99,8 @@ <segments>Список.ТипВариантаОтчета</segments> </dataPath> <extendedTooltip> - <name>ТипНастройкиРасширеннаяПодсказка</name> - <id>54</id> + <name>ТипВариантаОтчетаРасширеннаяПодсказка</name> + <id>62</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -122,8 +109,8 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ТипНастройкиКонтекстноеМеню</name> - <id>9</id> + <name>ТипВариантаОтчетаКонтекстноеМеню</name> + <id>39</id> <autoFill>true</autoFill> </contextMenu> <type>LabelField</type> @@ -138,11 +125,7 @@ </items> <items xsi:type="form:FormField"> <name>Администратор</name> - <id>15</id> - <title> - <key>ru</key> - <value>Автор</value> - + 36 true true @@ -153,7 +136,7 @@ АдминистраторРасширеннаяПодсказка - 56 + 64 Label true true @@ -163,7 +146,7 @@ АдминистраторКонтекстноеМеню - 16 + 37 true LabelField @@ -183,10 +166,10 @@ СписокСтрокаПоиска - 41 + 49 СписокСтрокаПоискаРасширеннаяПодсказка - 43 + 51 Label true true @@ -196,7 +179,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 42 + 50 true Список @@ -206,10 +189,10 @@ СписокСостояниеПросмотра - 44 + 52 СписокСостояниеПросмотраРасширеннаяПодсказка - 46 + 54 Label true true @@ -219,7 +202,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 45 + 53 true ViewStatusAddition @@ -230,10 +213,10 @@ СписокУправлениеПоиском - 47 + 55 СписокУправлениеПоискомРасширеннаяПодсказка - 49 + 57 Label true true @@ -243,7 +226,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 48 + 56 true SearchControlAddition @@ -254,7 +237,7 @@ СписокРасширеннаяПодсказка - 40 + 48 Label true true @@ -318,7 +301,7 @@ КартинкаИнфоРасширеннаяПодсказка - 67 + 75 Label true true @@ -355,7 +338,7 @@ None ОписаниеРасширеннаяПодсказка - 68 + 76 Label true true @@ -394,7 +377,7 @@ ГруппаОписаниеРасширеннаяПодсказка - 66 + 74 Label true true @@ -430,7 +413,7 @@ СписокИзменитьРасширеннаяПодсказка - 32 + 40 Label true true @@ -456,7 +439,7 @@ СписокНайтиРасширеннаяПодсказка - 33 + 41 Label true true @@ -482,7 +465,7 @@ СписокОтменитьПоискРасширеннаяПодсказка - 34 + 42 Label true true @@ -508,7 +491,7 @@ СписокУстановитьПометкуУдаленияРасширеннаяПодсказка - 35 + 43 Label true true @@ -534,7 +517,7 @@ СписокОбновитьРасширеннаяПодсказка - 36 + 44 Label true true @@ -560,7 +543,7 @@ СписокИзменитьФормуРасширеннаяПодсказка - 37 + 45 Label true true @@ -586,7 +569,7 @@ СписокВключитьРазделыРасширеннаяПодсказка - 38 + 46 Label true true @@ -612,7 +595,7 @@ ФормаСправкаРасширеннаяПодсказка - 39 + 47 Label true true diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Help/ru.html deleted file mode 100644 index 8e665935b..000000000 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Help/ru.html +++ /dev/null @@ -1,4 +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 fc0010b63..87f7398c2 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура Раздел(Команда) diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form index 223e0699f..4004c26ce 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form @@ -13,7 +13,7 @@ НаименованиеРасширеннаяПодсказка - 64 + 68 Label true true @@ -43,10 +43,6 @@ Администратор 9 - - <key>ru</key> - <value>Автор</value> - true true @@ -57,7 +53,7 @@ АдминистраторРасширеннаяПодсказка - 66 + 70 Label true true @@ -99,7 +95,7 @@ КлючОбъектаРасширеннаяПодсказка - 68 + 72 Label true true @@ -138,7 +134,7 @@ КлючВариантаРасширеннаяПодсказка - 70 + 74 Label true true @@ -182,7 +178,7 @@ ТипВариантаОтчетаРасширеннаяПодсказка - 72 + 76 Label true true @@ -224,7 +220,7 @@ ОписаниеРасширеннаяПодсказка - 74 + 78 Label true true @@ -253,87 +249,20 @@ Normal
- - ГруппаИспользования - 56 - - НастроитьБыстрыйДоступ - 54 - - <key>ru</key> - <value>Быстрый доступ:</value> - - true - true - - true - - - НастроитьБыстрыйДоступРасширеннаяПодсказка - 77 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастроитьБыстрыйДоступ - Normal - Auto - true - true - UserCmds - Auto - - - Использование - 60 - true - true - - true - - - ИспользованиеРасширеннаяПодсказка - 78 - Label - true - true - - Left - - - - ИспользованиеКонтекстноеМеню - 61 - true - - Label - true - true - true - - Left - - + + БыстрыйДоступ + 64 true true true - - <key>ru</key> - <value>Группа использования</value> - - - ru - Группа использования - + + БыстрыйДоступ + - ГруппаИспользованияРасширеннаяПодсказка - 76 + БыстрыйДоступРасширеннаяПодсказка + 80 Label true true @@ -341,95 +270,40 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + + БыстрыйДоступКонтекстноеМеню + 65 + true + + LabelField + Enter + true + Left + true + + + Click + БыстрыйДоступНажатие + + true + true + true - - ГруппаПодсистемы - 59 - - НастроитьПодсистемы - 55 - - <key>ru</key> - <value>Разделы:</value> - - true - true - - true - - - НастроитьПодсистемыРасширеннаяПодсказка - 80 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастроитьПодсистемы - Normal - true - true - UserCmds - Auto - - - Подсистемы - 62 - true - true - - true - - - ПодсистемыРасширеннаяПодсказка - 81 - Label - true - true - - Left - - - - ПодсистемыКонтекстноеМеню - 63 - true - - Label - true - true - true - - Left - - + + Разделы + 66 true true true - - <key>ru</key> - <value>Группа использования подсистемы</value> - - - ru - Группа использования подсистемы - + + Разделы + - ГруппаПодсистемыРасширеннаяПодсказка - 79 + РазделыРасширеннаяПодсказка + 82 Label true true @@ -437,13 +311,24 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + + РазделыКонтекстноеМеню + 67 + true + + LabelField + Enter + true + Left + true + + + Click + РазделыНажатие + + true + true + true @@ -569,50 +454,42 @@ - - НастроитьБыстрыйДоступ + + БыстрыйДоступ - <key>ru</key> - <value>Настроить быстрый доступ</value> - - 1 - ru Быстрый доступ - - + + 3 + + String + + + true - - - - НастроитьБыстрыйДоступ - - - Auto - Auto - - - НастроитьПодсистемы + + + true + + + + Разделы - <key>ru</key> - <value>Настроить подсистемы</value> - - 2 - ru Разделы - - + + 4 + + String + + + true - - - - НастроитьПодсистемы - - - Auto - Auto - + + + true + + diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html deleted file mode 100644 index aca6230f9..000000000 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html +++ /dev/null @@ -1,9 +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 b0b119625..29cc5d0c3 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -49,9 +49,8 @@ КонецЦикла; - - Элементы.Использование.Заголовок = ОписаниеПользователей(); - Элементы.Подсистемы.Заголовок = ОписаниеПодсистем(); + БыстрыйДоступ = ПредставлениеНастроекБыстрогоДоступа(ЭтаФорма); + Разделы = ПредставлениеРазделов(ЭтаФорма); Если Объект.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Отчет ИЛИ Объект.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Предопределенный Тогда @@ -61,13 +60,15 @@ Элементы.Описание.ТолькоПросмотр = Истина; КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте -Процедура НастроитьБыстрыйДоступ(Команда) +Процедура БыстрыйДоступНажатие(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; ИсключенияБыстрогоДоступа = Новый СписокЗначений; Для каждого СтрокаПользователь из Объект.ИсключенияБыстрогоДоступа Цикл @@ -87,13 +88,13 @@ Объект.ИсключенияБыстрогоДоступа.Добавить().Пользователь = ЭлементСписка.Значение; КонецЦикла; - Элементы.Использование.Заголовок = ОписаниеПользователей(); + БыстрыйДоступ = ПредставлениеНастроекБыстрогоДоступа(ЭтаФорма); Модифицированность = Истина; - КонецПроцедуры &НаКлиенте -Процедура НастроитьПодсистемы(Команда) +Процедура РазделыНажатие(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; ПараметрыФормы = Новый Структура("АдресДереваПодсистем, Подсистемы, НовыйЭлементСправочника"); ПараметрыФормы.Подсистемы = Объект.Подсистемы; @@ -107,52 +108,70 @@ Объект.Подсистемы.Очистить(); Для каждого ОписаниеПодсистема из ВозвращаемыеПараметры.СписокПодсистем Цикл СтрокаПодсистемы = Объект.Подсистемы.Добавить(); - СтрокаПодсистемы.Подсистема = ОписаниеПодсистема.Подсистема; - СтрокаПодсистемы.Название = ОписаниеПодсистема.Название; + СтрокаПодсистемы.Подсистема = ОписаниеПодсистема.Подсистема; + СтрокаПодсистемы.Название = ОписаниеПодсистема.Название; СтрокаПодсистемы.Предопределенная = ОписаниеПодсистема.Предопределенная; КонецЦикла; ЗафиксироватьРезультатНастройкиПодсистем(ВозвращаемыеПараметры); - Элементы.Подсистемы.Заголовок = ОписаниеПодсистем(); + Разделы = ПредставлениеРазделов(ЭтаФорма); Модифицированность = Истина; КонецЕсли; - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция ОписаниеПользователей() +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеНастроекБыстрогоДоступа(ЭтаФорма) + ВариантБыстрыйДоступ = ЭтаФорма.Объект.БыстрыйДоступ; + ВариантИсключенияБыстрогоДоступа = ЭтаФорма.Объект.ИсключенияБыстрогоДоступа; Результат = ""; - Если Объект.БыстрыйДоступ тогда - Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'все %1 '"), - ?(Объект.ИсключенияБыстрогоДоступа.Количество() > 0, НСтр("ru = ', кроме:'"), "")); - Иначе - Результат = ""; - КонецЕсли; - Для каждого СтрокаПользователя из Объект.ИсключенияБыстрогоДоступа Цикл - Результат = Результат + СтрокаПользователя.Пользователь + ", "; + Для Каждого СтрокаТаблицы Из ВариантИсключенияБыстрогоДоступа Цикл + ПредставлениеСтроки = СокрЛП(Строка(СтрокаТаблицы.Пользователь)); + Если ПредставлениеСтроки <> "" Тогда + Если Результат = "" Тогда + Результат = ?(ВариантБыстрыйДоступ, НСтр("ru = 'Все кроме:'") +" ", ""); + Результат = Результат + ПредставлениеСтроки; + Иначе + Результат = Результат +", "+ ПредставлениеСтроки; + КонецЕсли; + КонецЕсли; КонецЦикла; - Результат = Лев(Результат, СтрДлина(Результат) - 2); + + Если Результат = "" Тогда + Результат = ?(ВариантБыстрыйДоступ, НСтр("ru = 'Все'"), НСтр("ru = 'Пользователи не выбраны'")); + КонецЕсли; Возврат Результат; - КонецФункции -Функция ОписаниеПодсистем() +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеРазделов(ЭтаФорма) + ВариантПодсистемы = ЭтаФорма.Объект.Подсистемы; Результат = ""; - Для каждого Подсистема из Объект.Подсистемы Цикл - Результат = Результат + Подсистема.Название + ", "; + Для Каждого СтрокаТаблицы Из ВариантПодсистемы Цикл + ПредставлениеСтроки = СокрЛП(СтрокаТаблицы.Название); + Если ПредставлениеСтроки <> "" Тогда + Результат = Результат + ПредставлениеСтроки + ", "; + КонецЕсли; КонецЦикла; - Возврат Лев(Результат, СтрДлина(Результат) - 2) + Если Результат = "" Тогда + Результат = НСтр("ru = 'Разделы не выбраны'"); + Иначе + Результат = Лев(Результат, СтрДлина(Результат)-2); + КонецЕсли; + + Возврат Результат; КонецФункции +&НаСервере Процедура ДобавитьДеревоПодсистем(Подсистема, СтрокаПодсистемы, СписокПодсистем) Для каждого ПодсистемаПодчиненная из Подсистема.Подсистемы Цикл @@ -194,6 +213,7 @@ КонецЦикла; КонецПроцедуры +&НаСервере Процедура ДобавитьДеревоВиртуальныхПодсистем(Подсистема, СтрокаПодсистемы, СписокПодсистем) ВиртуальныеПодсистемы = ВариантыОтчетов.ПолучитьВиртуальныеПодсистемы(Подсистема); diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html index d8f354963..da6586161 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html +++ b/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html @@ -1,18 +1,9 @@ -

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

-

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

-

Работа с вариантом отчета

-

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

-

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

-

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

-

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

-

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

-

Изменение варианта отчета

-

Изменить вариант можно из формы отчета. Подготовив нужные настройки выбрать пункт меню "Сохранить вариант".

-

Пользовательские настройки варианта отчета

-

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

-

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

-

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

+

 

+

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

+

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

+

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

+

Для получения информация по настройке вариантов отчета обратитесь к документации по конфигурированию и администрированию 1С:Предприятие 8.

См. также:

Загрузка вариантов отчета

Сохранить вариант отчета

diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl index 8b4355a99..25af3b43b 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) ИсключаемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo index c404939d2..5a3c55490 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -77,6 +77,10 @@ Use Description + + ru + Вариант отчета + ShowError Use @@ -106,14 +110,6 @@ ru Вариант отчета - - ru - Вариант настройки отчета - - - ru - Варианты настройки отчетов - 2 true 150 @@ -123,6 +119,7 @@ BothWays Catalog.ВариантыОтчетов.Form.ФормаЭлемента Catalog.ВариантыОтчетов.Form.ФормаСписка + Catalog.ВариантыОтчетов.Form.ФормаВыбора КлючОбъекта @@ -150,16 +147,11 @@ Администратор ru - Администратор + Автор - Автор варианта отчета CatalogRef.Пользователи - - ru - Ответственный за вариант отчета - ShowError @@ -180,10 +172,6 @@ String - - ru - Пояснение к варианту отчета - @@ -221,6 +209,7 @@ ShowError + Index Use Use @@ -243,6 +232,7 @@ + Index Use @@ -259,6 +249,7 @@ true + Index Use @@ -309,7 +300,9 @@ String - + + 500 + ru @@ -318,6 +311,7 @@ Use + Index Use @@ -404,11 +398,6 @@ ru Форма списка - - - ru - - PersonalComputer MobileDevice @@ -418,11 +407,6 @@ ru Форма элемента - - - ru - - PersonalComputer MobileDevice @@ -471,4 +455,13 @@ PersonalComputer MobileDevice + + ФормаВыбора + + ru + Форма выбора + + PersonalComputer + MobileDevice + diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl index 2ed1896f5..a3ee822d4 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl @@ -287,22 +287,6 @@ КонецПроцедуры - -// Функция преобразует Windows имя файла в URL OpenOffice -Функция ПреобразоватьВURL(ИмяФайла) - Возврат "file:///" + СтрЗаменить(ИмяФайла, "\", "/"); -КонецФункции - -// создание структуры для параметров OpenOffice -&НаКлиенте -Функция ПрисвоитьЗначениеСвойству(Объект, ИмяСвойства, ЗначениеСвойства) - Свойства = Объект.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); - Свойства.Name = ИмяСвойства; - Свойства.Value = ЗначениеСвойства; - - Возврат Свойства; -КонецФункции - // Сравнить 2 выбранные версии. &НаКлиенте Процедура Сравнить(Команда) @@ -396,58 +380,7 @@ ПутьКФайлу2 = ПолноеИмяФайла1; КонецЕсли; - Попытка - - Если СпособСравненияВерсийФайлов = "MicrosoftOfficeWord" Тогда - ОбъектWord = Новый COMОбъект("Word.Application"); - ОбъектWord.Visible = 0; - - Документ = ОбъектWord.Documents.Open(ПутьКФайлу1); - - Документ.Merge(ПутьКФайлу2, 0, 0, 0); // MergeTarget:=wdMergeTargetSelected, DetectFormatChanges:=False, UseFormattingFrom:=wdFormattingFromCurrent - - ОбъектWord.Visible = 1; - ОбъектWord.Activate(); - - Документ.Close(); - ИначеЕсли СпособСравненияВерсийФайлов = "OpenOfficeOrgWriter" Тогда - - // снимем readonly - иначе не сработает - Файл1 = Новый Файл(ПутьКФайлу1); - Файл1.УстановитьТолькоЧтение(Ложь); - - Файл2 = Новый Файл(ПутьКФайлу2); - Файл2.УстановитьТолькоЧтение(Ложь); - - // Открыть OpenOffice - ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); - Reflection = ServiceManager.createInstance("com.sun.star.reflection.CoreReflection"); - Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop"); - Dispatcher = ServiceManager.createInstance("com.sun.star.frame.DispatchHelper"); - - // Открыть документ OpenOffice - Args = Новый COMSafeArray("VT_DISPATCH", 1); - OOДокумент = Desktop.loadComponentFromURL(ПреобразоватьВURL(ПутьКФайлу2), "_blank", 0, Args); - - frame = Desktop.getCurrentFrame(); - - // установить показ изменений - ПараметрыСравнения = Новый COMSafeArray("VT_VARIANT", 1); - ПараметрыСравнения.SetValue(0, ПрисвоитьЗначениеСвойству(ServiceManager, "ShowTrackedChanges", Истина)); - dispatcher.executeDispatch(frame, ".uno:ShowTrackedChanges", "", 0, ПараметрыСравнения); - - // сравнить с документом - ПараметрыВызова = Новый COMSafeArray("VT_VARIANT", 1); - ПараметрыВызова.SetValue(0, ПрисвоитьЗначениеСвойству(ServiceManager, "URL", ПреобразоватьВURL(ПутьКФайлу1))); - dispatcher.executeDispatch(frame, ".uno:CompareDocuments", "", 0, ПараметрыВызова); - - OOДокумент = Неопределено; - КонецЕсли; - - Исключение - Информация = ИнформацияОбОшибке(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Информация.Описание); - КонецПопытки; + РаботаСФайламиКлиент.СравнитьФайлы(ПутьКФайлу1, ПутьКФайлу2, СпособСравненияВерсийФайлов); КонецЕсли; diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Form.form index a8066af3e..034990f6a 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Form.form @@ -14,7 +14,7 @@ false ОткрытьРасширеннаяПодсказка - 56 + 58 Label true true @@ -49,7 +49,7 @@ ФормаСохранитьКакРасширеннаяПодсказка - 57 + 59 Label true true @@ -72,7 +72,7 @@ ОсновнаяКоманднаяПанельРасширеннаяПодсказка - 55 + 57 Label true true @@ -99,7 +99,7 @@ ВладелецРасширеннаяПодсказка - 58 + 60 Label true true @@ -155,7 +155,7 @@
ПолноеНаименованиеРасширеннаяПодсказка - 61 + 63 Label true true @@ -198,7 +198,7 @@ КодРасширеннаяПодсказка - 63 + 65 Label true true @@ -240,7 +240,7 @@ НаименованиеКодРасширеннаяПодсказка - 60 + 62 Label true true @@ -270,7 +270,7 @@ РодительскаяВерсияРасширеннаяПодсказка - 65 + 67 Label true true @@ -320,7 +320,7 @@ РазмерРасширеннаяПодсказка - 68 + 70 Label true true @@ -365,7 +365,7 @@ РасширениеРасширеннаяПодсказка - 70 + 72 Label true true @@ -412,7 +412,7 @@ None КартинкаРасширеннаяПодсказка - 72 + 74 Label true true @@ -455,7 +455,7 @@ РасширениеКартинкаРасширеннаяПодсказка - 67 + 69 Label true true @@ -489,7 +489,7 @@ КомментарийРасширеннаяПодсказка - 74 + 76 Label true true @@ -539,7 +539,7 @@ АвторРасширеннаяПодсказка - 76 + 78 Label true true @@ -587,7 +587,7 @@ ДатаСозданияРасширеннаяПодсказка - 79 + 81 Label true true @@ -632,7 +632,7 @@ НомерВерсииРасширеннаяПодсказка - 81 + 83 Label true true @@ -672,7 +672,7 @@ ДатаИНомерРасширеннаяПодсказка - 78 + 80 Label true true @@ -706,7 +706,7 @@ ДатаМодификацииФайлаРасширеннаяПодсказка - 83 + 85 Label true true @@ -735,6 +735,43 @@ Normal + + Кодировка + 55 + true + true + + true + + + Кодировка + + + КодировкаРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + + КодировкаКонтекстноеМеню + 56 + true + + LabelField + Enter + true + Left + true + + true + true + false + + ГруппаХранение 38 @@ -751,7 +788,7 @@ ТипХраненияФайлаРасширеннаяПодсказка - 86 + 90 Label true true @@ -796,7 +833,7 @@ ТомРасширеннаяПодсказка - 89 + 93 Label true true @@ -838,7 +875,7 @@ ТомПолныйПутьРасширеннаяПодсказка - 91 + 95 Label true true @@ -882,7 +919,7 @@ ГруппаТомРасширеннаяПодсказка - 88 + 92 Label true true @@ -913,7 +950,7 @@ ПутьКФайлуРасширеннаяПодсказка - 93 + 97 Label true true @@ -955,7 +992,7 @@ ГруппаХранениеРасширеннаяПодсказка - 85 + 89 Label true true @@ -1036,6 +1073,24 @@ true + + Кодировка + + <key>ru</key> + <value>Кодировка</value> + + 3 + + String + + + + true + + + true + + Открыть diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl index 921917a18..d23add294 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl @@ -13,12 +13,12 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - + Если ТипЗнч(Объект.Владелец) = Тип("СправочникСсылка.Файлы") Тогда Элементы.ПолноеНаименование.ТолькоПросмотр = Истина; КонецЕсли; - Если Пользователи.ЭтоПолноправныйПользовательИБ() Тогда + Если Пользователи.ЭтоПолноправныйПользователь() Тогда Элементы.Автор.ТолькоПросмотр = Ложь; Элементы.ДатаСоздания.ТолькоПросмотр = Ложь; Элементы.РодительскаяВерсия.ТолькоПросмотр = Ложь; @@ -28,6 +28,31 @@ ТомПолныйПуть = ФайловыеФункции.ПолныйПутьТома(Объект.Том); + СписокРасширенийТекстовыхФайлов = ФайловыеФункции.ПолучитьСписокРасширенийТекстовыхФайлов(); + Если ФайловыеФункцииКлиентСервер.РасширениеФайлаВСписке(СписокРасширенийТекстовыхФайлов, Объект.Расширение) Тогда + + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + + КодировкаЗначение = РаботаСФайламиВызовСервера.ПолучитьКодировкуВерсииФайла(Объект.Ссылка); + + СписокКодировок = РаботаСФайламиКлиентСервер.ПолучитьСписокКодировок(); + ЭлементСписка = СписокКодировок.НайтиПоЗначению(КодировкаЗначение); + Если ЭлементСписка = Неопределено Тогда + Кодировка = КодировкаЗначение; + Иначе + Кодировка = ЭлементСписка.Представление; + КонецЕсли; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(Кодировка) Тогда + Кодировка = НСтр("ru='По умолчанию'"); + КонецЕсли; + + Иначе + Элементы.Кодировка.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры diff --git a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ManagerModule.bsl b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ManagerModule.bsl index 819a8e8ef..492488f7f 100644 --- a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ManagerModule.bsl @@ -1,4 +1,8 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) - Параметры.Отбор.Вставить("ПометкаУдаления",Ложь); + + Параметры.Отбор.Вставить("ПометкаУдаления",Ложь); + КонецПроцедуры diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl index 653eded49..5d2d0f9fa 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Module.bsl @@ -1,18 +1,5 @@ - -&НаКлиенте -Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) - - // Проверим, выполняется ли копирование группы - Если Копирование И Группа Тогда - Предупреждение(НСтр("ru = 'Добавление новых групп в справочнике запрещено.'")); - Отказ = Истина; - КонецЕсли; - -КонецПроцедуры - - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ПОДСИСТЕМЫ НАСТРОЙКИ ПОРЯДКА ЭЛЕМЕНТОВ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ПереместитьЭлементВверх() @@ -29,3 +16,21 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + + // Проверим, выполняется ли копирование группы + Если Копирование И Группа Тогда + Предупреждение(НСтр("ru = 'Добавление новых групп в справочнике запрещено.'")); + Отказ = Истина; + КонецЕсли; + +КонецПроцедуры + + + + + diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl index fcd445f7e..9556996cf 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,13 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + ТипКИАдрес = Перечисления.ТипыКонтактнойИнформации.Адрес; ТипКИТелефон = Перечисления.ТипыКонтактнойИнформации.Телефон; ТипКИФакс = Перечисления.ТипыКонтактнойИнформации.Факс; @@ -15,6 +22,10 @@ КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + &НаКлиенте Процедура ТипПриИзменении(Элемент) @@ -29,6 +40,10 @@ КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаКлиентеНаСервереБезКонтекста Процедура ПроверитьЭлементыФормы(Форма) diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form index 6b1d6c1cc..3e884a6fc 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form @@ -710,6 +710,37 @@ <items xsi:type="form:FormGroup"> <name>КоманднаяПанельВнешниеПользователи</name> <id>53</id> + <items xsi:type="form:Button"> + <name>ПоказыватьНедействительныхПользователей</name> + <id>74</id> + <title> + <key>ru</key> + <value>Показывать недействительных внешних пользователей</value> + + true + true + + true + + + ПоказыватьНедействительныхПользователейРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + Form.Command.ПоказыватьНедействительныхПользователей + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + ПользователиИБ 6 @@ -721,7 +752,7 @@ false ПользователиИБРасширеннаяПодсказка - 80 + 81 Label true true @@ -736,6 +767,7 @@ true UserCmds Auto + InAdditionalSubmenu true true @@ -774,7 +806,7 @@ ФормаСправкаРасширеннаяПодсказка - 81 + 82 Label true true @@ -790,33 +822,6 @@ UserCmds Auto - - ФормаПоказыватьНедействительныхПользователей - 74 - true - true - - true - - - ФормаПоказыватьНедействительныхПользователейРасширеннаяПодсказка - 82 - Label - true - true - - Left - - - Form.Command.ПоказыватьНедействительныхПользователей - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - Left diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl index cda72b445..d2814ce19 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl @@ -1,7 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -128,13 +126,12 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = "ИзмененаГруппаВнешнихПользователей" Тогда + Если ВРег(ИмяСобытия) = ВРег("Запись_ГруппыВнешнихПользователей") + И Источник = Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока Тогда - Если Параметр = Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока Тогда - Элементы.ГруппыВнешнихПользователей.Обновить(); - Элементы.ВнешниеПользователиСписок.Обновить(); - ОбновитьСодержимоеФормыПриИзмененииГруппы(Элементы.ГруппыВнешнихПользователей.ТекущиеДанные); - КонецЕсли; + Элементы.ГруппыВнешнихПользователей.Обновить(); + Элементы.ВнешниеПользователиСписок.Обновить(); + ОбновитьСодержимоеФормыПриИзмененииГруппы(Элементы.ГруппыВнешнихПользователей.ТекущиеДанные); КонецЕсли; КонецПроцедуры @@ -149,16 +146,17 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте -Процедура СоздатьГруппуВнешнихПользователей(Команда) +Процедура ВыбиратьИерархическиПриИзменении(Элемент) - Элементы.ГруппыВнешнихПользователей.ДобавитьСтроку(); + ОбновитьСодержимоеФормыПриИзмененииГруппы(); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ГруппыВнешнихПользователей &НаКлиенте Процедура ГруппыВнешнихПользователейПриАктивизацииСтроки(Элемент) @@ -193,6 +191,8 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ВнешниеПользователи &НаКлиенте Процедура ВнешниеПользователиСписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) @@ -222,17 +222,36 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте -Процедура ВыбиратьИерархическиПриИзменении(Элемент) +Процедура СоздатьГруппуВнешнихПользователей(Команда) - ОбновитьСодержимоеФормыПриИзмененииГруппы(); + Элементы.ГруппыВнешнихПользователей.ДобавитьСтроку(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказыватьНедействительныхПользователей(Команда) + + ПоказыватьНедействительныхПользователей = Не ПоказыватьНедействительныхПользователей; + + Элементы.ПоказыватьНедействительныхПользователей.Пометка = ПоказыватьНедействительныхПользователей; + + Если ПоказыватьНедействительныхПользователей Тогда + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(ВнешниеПользователиСписок.Отбор, "Недействителен"); + Иначе + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + ВнешниеПользователиСписок.Отбор, + "Недействителен", + Ложь); + КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура ОбновитьСодержимоеФормыПриИзмененииГруппы(Знач ТекущиеДанные = Неопределено) @@ -282,23 +301,3 @@ ВладелецПараметров.Параметры.УстановитьЗначениеПараметра(ИмяПараметра, ЗначениеПараметра); КонецПроцедуры - - -&НаКлиенте -Процедура ПоказыватьНедействительныхПользователей(Команда) - - ПоказыватьНедействительныхПользователей = Не ПоказыватьНедействительныхПользователей; - - Элементы.ФормаПоказыватьНедействительныхПользователей.Пометка = ПоказыватьНедействительныхПользователей; - - Если ПоказыватьНедействительныхПользователей Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(ВнешниеПользователиСписок.Отбор, "Недействителен"); - Иначе - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( - ВнешниеПользователиСписок.Отбор, - "Недействителен", - Ложь); - КонецЕсли; - -КонецПроцедуры - diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form index e8e0818ca..8a35b097a 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form @@ -17,7 +17,7 @@ СвязьКартинкаПредупрежденияРасширеннаяПодсказка - 193 + 194 Label true true @@ -47,9 +47,9 @@ 172 <key>ru</key> - <value>Пользователь связан с несуществующим пользователем информационной базы (ИБ). -Чтобы установить связь с новым пользователем ИБ, включите флажок "Доступ к информационной базе разрешен". -Чтобы очистить связь оставьте флажок выключенным.</value> + <value>Доступ пользователя к информационной базе (ИБ) запрещен. +Для того чтобы разрешить доступ к ИБ, включите флажок "Доступ к информационной базе разрешен". +Либо оставьте флажок выключенным, чтобы не выводить больше это предупреждение.</value> true true @@ -58,7 +58,7 @@ СвязьПояснениеНесоответствияРасширеннаяПодсказка - 194 + 195 Label true true @@ -72,10 +72,12 @@ true Label + 20 true - 3 + 4 true true + true false Left @@ -94,7 +96,7 @@ true СвязьОбработкаНесоответствияРасширеннаяПодсказка - 192 + 193 Label true true @@ -129,7 +131,7 @@ ОбъектАвторизацииРасширеннаяПодсказка - 195 + 196 Label true true @@ -148,8 +150,10 @@ Left true + 45 true true + false true true true @@ -158,11 +162,14 @@ - Действителен + Недействителен 190 true true + + Role.РаботаСПапкамиФайлов + Role.Администрирование @@ -315,11 +322,11 @@ Right OnChange - ДействителенПриИзменении + НедействителенПриИзменении - ДействителенРасширеннаяПодсказка - 197 + НедействителенРасширеннаяПодсказка + 198 Label true true @@ -328,7 +335,7 @@ - ДействителенКонтекстноеМеню + НедействителенКонтекстноеМеню 191 true @@ -357,7 +364,7 @@ ДоступКИнформационнойБазеРазрешенРасширеннаяПодсказка - 199 + 200 Label true true @@ -396,7 +403,7 @@ ПользовательИнфБазыИмяРасширеннаяПодсказка - 203 + 204 Label true true @@ -443,7 +450,7 @@ ПарольРасширеннаяПодсказка - 205 + 206 Label true true @@ -494,7 +501,7 @@ ПодтверждениеПароляРасширеннаяПодсказка - 207 + 208 Label true true @@ -542,7 +549,7 @@ Right ПользовательИнфБазыЗапрещеноИзменятьПарольРасширеннаяПодсказка - 209 + 210 Label true true @@ -562,20 +569,63 @@ true - - ПредставлениеЯзыка - 33 + + ГруппаПредставлениеЯзыка + 192 + + ПредставлениеЯзыка + 33 + true + true + + true + + + ПредставлениеЯзыка + + + ПредставлениеЯзыкаРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + + ПредставлениеЯзыкаКонтекстноеМеню + 34 + true + + InputField + Enter + true + Left + true + Left + + 14 + true + true + false + true + true + true + + Style.BorderColor + + Normal + + true true true - - ПредставлениеЯзыка - - ПредставлениеЯзыкаРасширеннаяПодсказка - 211 + ГруппаПредставлениеЯзыкаРасширеннаяПодсказка + 212 Label true true @@ -583,29 +633,15 @@ Left - - ПредставлениеЯзыкаКонтекстноеМеню - 34 - true - - InputField - Enter - true - Left - true - Left - - 14 - true - true - false - true - true - true - - Style.BorderColor - - Normal + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto true @@ -633,7 +669,7 @@ true ОсновныеСвойстваРасширеннаяПодсказка - 202 + 203 Label true true @@ -672,7 +708,7 @@ УстановитьРолиНепосредственноРасширеннаяПодсказка - 214 + 216 Label true true @@ -698,6 +734,10 @@ Роли 174 + + <key>ru</key> + <value>Разрешенные действия (роли)</value> + true true @@ -741,7 +781,7 @@ РолиПометкаРасширеннаяПодсказка - 232 + 234 Label true true @@ -772,7 +812,7 @@ РолиСинонимРасширеннаяПодсказка - 234 + 236 Label true true @@ -816,7 +856,7 @@ РолиКолонокРасширеннаяПодсказка - 231 + 233 Label true true @@ -845,7 +885,7 @@ false РолиУстановитьФлажкиРасширеннаяПодсказка - 217 + 219 Label true true @@ -872,7 +912,7 @@ false РолиСнятьФлажкиРасширеннаяПодсказка - 218 + 220 Label true true @@ -899,7 +939,7 @@ false РолиПоказатьТолькоВыбранныеРолиРасширеннаяПодсказка - 219 + 221 Label true true @@ -925,7 +965,7 @@ РолиПоказатьПодсистемыРолейРасширеннаяПодсказка - 220 + 222 Label true true @@ -933,7 +973,7 @@ Left - Form.Command.ПоказатьПодсистемыРолей + Form.Command.ГруппировкаПоПодсистемам Normal Auto true @@ -945,10 +985,10 @@ РолиСтрокаПоиска - 222 + 224 РолиСтрокаПоискаРасширеннаяПодсказка - 224 + 226 Label true true @@ -958,7 +998,7 @@ РолиСтрокаПоискаКонтекстноеМеню - 223 + 225 true Роли @@ -968,10 +1008,10 @@ РолиСостояниеПросмотра - 225 + 227 РолиСостояниеПросмотраРасширеннаяПодсказка - 227 + 229 Label true true @@ -981,7 +1021,7 @@ РолиСостояниеПросмотраКонтекстноеМеню - 226 + 228 true ViewStatusAddition @@ -992,10 +1032,10 @@ РолиУправлениеПоиском - 228 + 230 РолиУправлениеПоискомРасширеннаяПодсказка - 230 + 232 Label true true @@ -1005,7 +1045,7 @@ РолиУправлениеПоискомКонтекстноеМеню - 229 + 231 true SearchControlAddition @@ -1016,7 +1056,7 @@ РолиРасширеннаяПодсказка - 221 + 223 Label true true @@ -1032,14 +1072,12 @@ true true true -
true
1 1 AutoUse AutoUse true true - false true Auto Auto @@ -1066,12 +1104,11 @@ <key>ru</key> - <value>Отображение ролей</value> + <value>Список ролей</value> - 48 ОтображениеРолейРасширеннаяПодсказка - 216 + 218 Label true true @@ -1104,7 +1141,7 @@ РедактированиеИлиПросмотрРолейРасширеннаяПодсказка - 213 + 215 Label true true @@ -1131,9 +1168,10 @@ ru Свойства пользователя информационной базы + true СвойстваПользователяИБРасширеннаяПодсказка - 201 + 202 Label true true @@ -1144,6 +1182,7 @@ UsualGroup Auto + StrongSeparation true true Auto @@ -1238,7 +1277,7 @@ ПредставлениеЯзыка <key>ru</key> - <value>Язык</value> + <value>Язык интерфейса программы</value> 10 @@ -1275,7 +1314,7 @@ ПользовательИнфБазыИмя <key>ru</key> - <value>Имя</value> + <value>Имя (для входа)</value> 16 @@ -1773,10 +1812,10 @@ Auto - ПоказатьПодсистемыРолей + ГруппировкаПоПодсистемам <key>ru</key> - <value>Группировка по подсистемам</value> + <value>По подсистемам</value> 1 diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html index 589b36def..02a79a5f5 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html @@ -1,7 +1,10 @@ -

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

-

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

-

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

-

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

+

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

+

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

+

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

+

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

+

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

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

+

Хороший пароль должен быть малопонятным выражением.

Примеры хороших паролей:
“nj7{jhjibq*Gfhjkm,
F5”njnGhkmNj;t{HI.

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

Примеры неудачных паролей:
Иванов,
qwerty,
12345678,
123123123.

См. также

- \ 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 17f4ed9b5..7a9d8fc5a 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl @@ -1,7 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -21,7 +19,7 @@ //** Заполнение постоянных данных ЗапретРедактированияРолей = ПользователиПереопределяемый.ЗапретРедактированияРолей(); - АвторизованПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользовательИБ(); + АвторизованПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(); // Заполнение списка выбора языка Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл @@ -171,10 +169,6 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Если ТекущийОбъект.ДополнительныеСвойства.Свойство("ЕстьОшибки") Тогда - ПараметрыЗаписи.Вставить("ЕстьОшибки"); - КонецЕсли; - ПрочитатьПользователяИБ(); ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи); @@ -184,6 +178,8 @@ &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) + Оповестить("Запись_ВнешниеПользователи", Новый Структура, Объект.Ссылка); + Если ПараметрыЗаписи.Свойство("ДобавленПользовательИБ") Тогда Оповестить("ДобавленПользовательИБ", ПараметрыЗаписи.ДобавленПользовательИБ, ЭтаФорма); @@ -197,13 +193,9 @@ Оповестить("ОчищенаСвязьСНесуществущимПользователемИБ", ПараметрыЗаписи.ОчищенаСвязьСНесуществущимПользователемИБ, ЭтаФорма); КонецЕсли; - Если ПараметрыЗаписи.Свойство("ЕстьОшибки") Тогда - Предупреждение(НСтр("ru = 'При записи возникли ошибки (см. журнал регистрации)'")); - КонецЕсли; - Если ЗначениеЗаполнено(ГруппаНовогоВнешнегоПользователя) Тогда ОповеститьОбИзменении(ГруппаНовогоВнешнегоПользователя); - Оповестить("ИзмененСоставГруппыВнешнихПользователей", ГруппаНовогоВнешнегоПользователя, ЭтаФорма); + Оповестить("Запись_ГруппыВнешнихПользователей", Новый Структура, ГруппаНовогоВнешнегоПользователя); ГруппаНовогоВнешнегоПользователя = Неопределено; КонецЕсли; @@ -220,32 +212,34 @@ Если НЕ Отказ И ПустаяСтрока(ПользовательИнфБазыИмя) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Не заполнено имя пользователя информационной базы.'"), , - "ПользовательИнфБазыИмя", , - Отказ); + НСтр("ru = 'Не заполнено имя пользователя информационной базы.'"), + , + "ПользовательИнфБазыИмя", + , + Отказ); КонецЕсли; Если НЕ Отказ И ПользовательИнфБазыПароль <> Неопределено И Пароль <> ПодтверждениеПароля Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Пароль и подтверждение пароля не совпадают.'"), , - "Пароль", , - Отказ); + НСтр("ru = 'Пароль и подтверждение пароля не совпадают.'"), + , + "Пароль", + , + Отказ); КонецЕсли; Если ТребуетсяСоздатьПервогоАдминистратора() Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Первый пользователь информационной базы должен иметь полные права. - |Внешний пользователь не может быть полноправным. - |Сначала создайте обычного пользователя-администратора.'"), , - "ДоступКИнформационнойБазеРазрешен", , - Отказ); + НСтр("ru = 'Первый пользователь информационной базы должен иметь полные права. + |Внешний пользователь не может быть полноправным. + |Сначала создайте обычного пользователя-администратора.'"), + , + "ДоступКИнформационнойБазеРазрешен", + , + Отказ); КонецЕсли; КонецЕсли; - Если Отказ Тогда - ПроверяемыеРеквизиты.Очистить(); - КонецЕсли; - КонецПроцедуры &НаСервере @@ -265,8 +259,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ОбъектАвторизацииПриИзменении(Элемент) @@ -305,7 +298,26 @@ КонецПроцедуры -//** Для работы интерфейса ролей +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Роли + +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей + +&НаКлиенте +Процедура РолиПометкаПриИзменении(Элемент) + + Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда + ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей &НаКлиенте Процедура ПоказатьТолькоВыбранныеРоли(Команда) @@ -329,15 +341,6 @@ КонецПроцедуры -&НаКлиенте -Процедура РолиПометкаПриИзменении(Элемент) - - Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда - ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура УстановитьФлажки(Команда) @@ -355,10 +358,8 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Функция ТребуетсяСоздатьПервогоАдминистратора() @@ -377,7 +378,7 @@ ДействияВФорме.Вставить("СвойстваПользователяИБ", ""); // "", "ПросмотрВсех", "РедактированиеВсех", "РедактированиеСвоих" ДействияВФорме.Вставить("СвойстваЭлемента", ""); // "", "Просмотр", "Редактирование" - Если Пользователи.ЭтоПолноправныйПользовательИБ() ИЛИ + Если Пользователи.ЭтоПолноправныйПользователь() ИЛИ ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) Тогда // Администратор ДействияВФорме.Роли = "Редактирование"; @@ -443,7 +444,8 @@ КонецПроцедуры -//** Чтение, запись, удаление, расчет краткого имени пользователя ИБ, проверка несоответствия +//////////////////////////////////////////////////////////////////////////////// +// Чтение, запись, удаление, расчет краткого имени пользователя ИБ, проверка несоответствия &НаСервере Процедура ПрочитатьПользователяИБ(ПриКопированииЭлемента = Ложь, ТолькоРоли = Ложь) @@ -635,7 +637,8 @@ КонецПроцедуры -//** Начальное заполнение, проверка заполнения, доступность свойств +//////////////////////////////////////////////////////////////////////////////// +// Начальное заполнение, проверка заполнения, доступность свойств &НаСервере Процедура ЗаполнитьПредставлениеЯзыка(Язык) @@ -703,9 +706,12 @@ Элементы.РедактированиеИлиПросмотрРолей.Доступность = ДоступКИнформационнойБазеРазрешен; Элементы.ПользовательИнфБазыИмя.АвтоОтметкаНезаполненного = ДоступКИнформационнойБазеРазрешен; + Элементы.ДоступКИнформационнойБазеРазрешен.Доступность = Не Объект.Недействителен; + КонецПроцедуры -//** Для работы интерфейса ролей +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей &НаСервере Функция КоллекцияРолей(ТаблицаЗначенийДляЧтения = Ложь) @@ -774,7 +780,8 @@ КонецЕсли; КонецЕсли; - ДеревоРолей = ПользователиСерверПовтИсп.ДеревоРолей(ПоказатьПодсистемыРолей).Скопировать(); + ТипПользователя = Перечисления.ТипыПользователей.ВнешнийПользователь; + ДеревоРолей = ПользователиСерверПовтИсп.ДеревоРолей(ПоказатьПодсистемыРолей, ТипПользователя).Скопировать(); ДеревоРолей.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево")); ДеревоРолей.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число")); ПодготовитьДеревоРолей(ДеревоРолей.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли); @@ -823,8 +830,8 @@ ПодготовитьДеревоРолей(Строка.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли); Если Строка.ЭтоРоль Тогда - Если СкрытьРольПолныеПрава - И (ВРег(Строка.Имя) = ВРег("ПолныеПрава") ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы")) Тогда + Если СкрытьРольПолныеПрава И + (ВРег(Строка.Имя) = ВРег("ПолныеПрава") ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы")) Тогда Коллекция.Удалить(Индекс); Иначе Строка.НомерКартинки = 6; @@ -966,12 +973,12 @@ КонецПроцедуры &НаКлиенте -Процедура ДействителенПриИзменении(Элемент) +Процедура НедействителенПриИзменении(Элемент) Если Объект.Недействителен Тогда ДоступКИнформационнойБазеРазрешен = Ложь; КонецЕсли; + УстановитьДоступностьСвойств(); + КонецПроцедуры - - diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html b/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html index d2669795b..1940fef32 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html +++ b/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html @@ -1,9 +1,10 @@ -

В справочнике Внешние пользователи ведутся те пользователи, кому предоставлен вход в ИБ «извне». Их доступ, как правило, сильно ограничен, они не принимают активного участия в процессах учета, работают обособленно, не взаимодействуют между собой.

-

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

-

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

-

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

-

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

-

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

+

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

+

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

+

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

+

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

+

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

См. также

- \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl index d93406fda..325d44621 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl index 5b35b933a..6e0729be8 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl @@ -1,35 +1,34 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ПередЗаписью(Отказ) + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + Если ИдентификаторПользователяИБ <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") И Пользователи.ПользовательПоИдентификаторуСуществует(ИдентификаторПользователяИБ, Ссылка) Тогда - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Один пользователь информационной базы - |может быть связан только с одним пользователем или внешним пользователем.'"), , , , Отказ); - Возврат; + ВызватьИсключение НСтр("ru = 'Один пользователь информационной базы + |может быть связан только с одним пользователем или внешним пользователем.'"); КонецЕсли; Если НЕ ЗначениеЗаполнено(ОбъектАвторизации) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Для внешнего пользователя не установлен объект авторизации.'"), , , , Отказ); - Возврат; + ВызватьИсключение НСтр("ru = 'Для внешнего пользователя не установлен объект авторизации.'"); Иначе Если ВнешниеПользователи.ОбъектАвторизацииИспользуется(ОбъектАвторизации, Ссылка) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Объект авторизации уже используется для другого внешнего пользователя.'"), , , , Отказ); - Возврат; + ВызватьИсключение НСтр("ru = 'Объект авторизации уже используется для другого внешнего пользователя.'"); КонецЕсли; КонецЕсли; - // Проверка, что объект авторизации не изменен + // Проверка, что объект авторизации не изменен. Если НЕ ЭтоНовый() Тогда СтарыйОбъектАвторизации = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "ОбъектАвторизации"); Если ЗначениеЗаполнено(СтарыйОбъектАвторизации) И СтарыйОбъектАвторизации <> ОбъектАвторизации Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Объект информационной базы нельзя изменять.'"), , , , Отказ); - Возврат; + ВызватьИсключение НСтр("ru = 'Объект информационной базы нельзя изменять.'"); КонецЕсли; КонецЕсли; - // Проверка ОбменДанными.Загрузка должна выполняться после кода выше. - КонецПроцедуры Процедура ПриЗаписи(Отказ) @@ -38,14 +37,12 @@ Возврат; КонецЕсли; - ЕстьОшибки = Ложь; - // Обновление состава автоматической группы "Все внешние пользователи". ИзмененныеВнешниеПользователи = Неопределено; ВнешниеПользователи.ОбновитьСоставГруппВнешнихПользователей(Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи, ИзмененныеВнешниеПользователи); ИзмененныеВнешниеПользователи.Добавить(Ссылка); - ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи, ЕстьОшибки); - + ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи); + // Обновление состава автоматической группы <все объекты авторизации одного типа> (если есть). Если ЗначениеЗаполнено(ОбъектАвторизации) Тогда Запрос = Новый Запрос( @@ -61,10 +58,10 @@ Если Выборка.Следующий() Тогда ВнешниеПользователи.ОбновитьСоставГруппВнешнихПользователей(Выборка.Ссылка, ИзмененныеВнешниеПользователи); - ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи, ЕстьОшибки); + ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи); КонецЕсли; КонецЕсли; - + // Обновление состава группы нового внешнего пользователя (если задана). Если ДополнительныеСвойства.Свойство("ГруппаНовогоВнешнегоПользователя") И ЗначениеЗаполнено(ДополнительныеСвойства.ГруппаНовогоВнешнегоПользователя) Тогда @@ -73,21 +70,21 @@ ОбъектГруппы.Состав.Добавить().ВнешнийПользователь = Ссылка; ОбъектГруппы.Записать(); ВнешниеПользователи.ОбновитьСоставГруппВнешнихПользователей(ОбъектГруппы.Ссылка, ИзмененныеВнешниеПользователи); - ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи, ЕстьОшибки); - КонецЕсли; - - Если ЕстьОшибки Тогда - ДополнительныеСвойства.Вставить("ЕстьОшибки"); + ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи); КонецЕсли; КонецПроцедуры Процедура ПередУдалением(Отказ) + // Требуется удалить пользователя ИБ, иначе он попадет в список ошибок в форме ПользователиИБ, + // кроме того, вход под этим пользователем ИБ приведет к ошибке. Если Пользователи.ПользовательИБСуществует(ИдентификаторПользователяИБ) Тогда Отказ = НЕ Пользователи.УдалитьПользователяИБ(ИдентификаторПользователяИБ); КонецЕсли; + // Проверку ОбменДанными.Загрузка следует выполнять начиная с этой строки. + КонецПроцедуры diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo index d1b135549..c8de89fcb 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo +++ b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo @@ -132,23 +132,26 @@ Catalog.ВнешниеПользователи.Form.ФормаЭлемента Catalog.ВнешниеПользователи.Form.ФормаСписка Catalog.ВнешниеПользователи.Form.ФормаСписка - - ИдентификаторПользователяИБ + + УдалитьПароль ru - Идентификатор пользователя ИБ + Удалить Пароль - Требуется для сопоставления элемента справочника ВнешниеПользователи пользователю ИБ - UUID + String + + 30 + ru - Уникальный идентификатор пользователя информационной базы, через который установлена связь элемента справочника с пользователем информационной базы + Это реквизит, который использовался в старой версии подсистемы для хранения паролей (используется для установки паролей пользователям информационной базы при конвертации данных) - + + Use Use @@ -175,14 +178,14 @@ ОбъектАвторизации ru - Объект информационной базы + Объект CatalogRef.ФизическиеЛица ru - Объект информационной базы, которому соответствует внешний пользователь + Объект, которому соответствует внешний пользователь, например, контрагент @@ -191,26 +194,23 @@ Use Use - - УдалитьПароль + + ИдентификаторПользователяИБ ru - Удалить Пароль + Идентификатор пользователя ИБ + Требуется для сопоставления элемента справочника ВнешниеПользователи пользователю ИБ - String - - 30 - + UUID ru - Это реквизит, который использовался в старой версии подсистемы для хранения паролей (используется для установки паролей пользователям информационной базы при конвертации данных) + Уникальный идентификатор пользователя информационной базы, через который установлена связь элемента справочника с пользователем информационной базы - - Use + Use @@ -237,7 +237,7 @@ ФормаЭлемента ru - Форма элемента + Внешний пользователь diff --git a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ВопросыШаблонаАнкеты.mdo b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ВопросыШаблонаАнкеты.mdo index 8412546b4..2f8dcb46e 100644 --- a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ВопросыШаблонаАнкеты.mdo +++ b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ВопросыШаблонаАнкеты.mdo @@ -201,7 +201,7 @@ РодительВопрос ru - Родитель вопрос + Вопрос родитель CatalogRef.ВопросыШаблонаАнкеты diff --git a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl index 3bdea9203..d15418c53 100644 --- a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl index f492c551a..0eafaa1f4 100644 --- a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,7 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -5,6 +9,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ПерейтиКФормеФайла(Команда) diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl index 614308e32..e71a3e8fa 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form index 4fc10c113..36eb701fa 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form @@ -1280,10 +1280,6 @@ OnCreateAtServer ПриСозданииНаСервере - - FillCheckProcessingAtServer - ОбработкаПроверкиЗаполненияНаСервере - BeforeLoadDataFromSettingsAtServer ПриЗагрузкеДанныхИзНастроекНаСервере @@ -1676,10 +1672,6 @@ AfterWrite ПослеЗаписи - - AfterWriteAtServer - ПослеЗаписиНаСервере - OnReadAtServer ПриЧтенииНаСервере diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html index 770baccd3..2c06ffcf8 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html @@ -1,5 +1,7 @@ -

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

-

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

-

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

-

 

\ 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 6f47cedac..e7b23185f 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl @@ -1,7 +1,5 @@ - -////////////////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -73,62 +71,10 @@ КонецПроцедуры -&НаСервере -Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - - Если ТекущийОбъект.ДополнительныеСвойства.Свойство("ЕстьОшибки") Тогда - ПараметрыЗаписи.Вставить("ЕстьОшибки"); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - Оповестить("ИзмененаГруппаВнешнихПользователей", Объект.Ссылка, ЭтаФорма); - - Если ПараметрыЗаписи.Свойство("ЕстьОшибки") Тогда - Предупреждение(НСтр("ru = 'При записи возникли ошибки (см. журнал регистрации)'")); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) - - // Проверка незаполненных и повторяющихся внешних пользователей. - НомерСтроки = Объект.Состав.Количество()-1; - - Пока НЕ Отказ И НомерСтроки >= 0 Цикл - ТекущаяСтрока = Объект.Состав.Получить(НомерСтроки); - - // Проверка заполнения значения. - Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.ВнешнийПользователь) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не заполнен внешний пользователь.'"), - , - "Объект.Состав[" + Формат(НомерСтроки, "ЧГ=0") + "].ВнешнийПользователь", - , - Отказ); - Прервать; - КонецЕсли; - - // Проверка наличия повторяющихся значений. - НайденныеЗначения = Объект.Состав.НайтиСтроки(Новый Структура("ВнешнийПользователь", ТекущаяСтрока.ВнешнийПользователь)); - Если НайденныеЗначения.Количество() > 1 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Внешний пользователь повторяется.'"), - , - "Объект.Состав[" + Формат(НомерСтроки, "ЧГ=0") + "].ВнешнийПользователь", - , - Отказ); - Прервать; - КонецЕсли; - - НомерСтроки = НомерСтроки - 1; - КонецЦикла; - - Если Отказ Тогда - ПроверяемыеРеквизиты.Очистить(); - КонецЕсли; + Оповестить("Запись_ГруппыВнешнихПользователей", Новый Структура, Объект.Ссылка); КонецПроцедуры @@ -148,10 +94,8 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура РодительПриИзменении(Элемент) @@ -217,13 +161,21 @@ КонецПроцедуры -&НаКлиенте -Процедура ПодобратьВнешнихПользователей(Команда) +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей - ВыбратьПодобратьПользователей(Истина); +&НаКлиенте +Процедура РолиПометкаПриИзменении(Элемент) + + Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда + ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка); + КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Состав + &НаКлиенте Процедура СоставОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -246,7 +198,18 @@ КонецПроцедуры -//** Для работы интерфейса ролей +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ПодобратьВнешнихПользователей(Команда) + + ВыбратьПодобратьПользователей(Истина); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей &НаКлиенте Процедура ПоказатьТолькоВыбранныеРоли(Команда) @@ -270,15 +233,6 @@ КонецПроцедуры -&НаКлиенте -Процедура РолиПометкаПриИзменении(Элемент) - - Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда - ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура УстановитьФлажки(Команда) @@ -297,8 +251,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ИнициализацияФормы() @@ -320,7 +273,7 @@ ДействияВФорме.Вставить("СоставГруппы", ""); // "", "Просмотр", "Редактирование" ДействияВФорме.Вставить("СвойстваЭлемента", ""); // "", "Просмотр", "Редактирование" - Если Пользователи.ЭтоПолноправныйПользовательИБ() ИЛИ + Если Пользователи.ЭтоПолноправныйПользователь() ИЛИ ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) Тогда // Администратор ДействияВФорме.Роли = "Редактирование"; @@ -445,7 +398,8 @@ КонецПроцедуры -//** Для работы интерфейса ролей +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей &НаСервере Функция КоллекцияРолей(ТаблицаЗначенийДляЧтения = Ложь) @@ -566,6 +520,7 @@ Если Строка.ЭтоРоль Тогда Если СкрытьРольПолныеПрава И (ВРег(Строка.Имя) = ВРег("ПолныеПрава") ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы")) Тогда + Коллекция.Удалить(Индекс); Иначе Строка.НомерКартинки = 6; diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html index 37811aa88..d70ad23aa 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html @@ -1,5 +1,6 @@ -

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

+

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

+

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

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

Группы формируются по используемому функционалу прикладного решения:

  • @@ -8,8 +9,9 @@
    Доверенные партнеры
  • Основные покупатели
  • Основные поставщики -
  • Участники опроса
  • Физические лица
  • Существует предопределенная группа "Все пользователи", которая неявно включает всех внешних пользователей.

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

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

    -

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

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

    -

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

    -

     

    \ No newline at end of file +

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

    +

    См. также

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl index 18f9f245d..36e14991e 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl @@ -1,10 +1,14 @@ -Перем СтарыйРодитель; -Перем ИзменилсяСоставРолейГруппыВнешнихПользователей; +Перем СтарыйРодитель; // Значение родителя группы до изменения для использования +// в обработчике события ПриЗаписи. -// Обработчик ПередЗаписью блокирует недопустимые действия с предопределенной -// группой "Все внешние пользователи". -// +Перем ИзменилсяСоставРолейГруппыВнешнихПользователей; // Флажок изменения состава ролей для использования +// в обработчике события ПриЗаписи. + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +// Блокирует недопустимые действия с предопределенной группой "Все внешние пользователи". Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда @@ -17,16 +21,22 @@ ВсеОбъектыАвторизации = Ложь; Если НЕ Родитель.Пустая() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Предопределенная группа ""Все внешние пользователи"" может быть только в корне.'"), , , , Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Предопределенная группа ""Все внешние пользователи"" может быть только в корне.'"), + , , , Отказ); Возврат; КонецЕсли; Если Состав.Количество() > 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Добавление внешних пользователей в группу ""Все внешние пользователи"" не поддерживается.'"), , , , Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Добавление внешних пользователей в группу ""Все внешние пользователи"" не поддерживается.'"), + , , , Отказ); Возврат; КонецЕсли; Иначе Если Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Предопределенная группа ""Все внешние пользователи"" не может быть родителем.'"), , , , Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Предопределенная группа ""Все внешние пользователи"" не может быть родителем.'"), + , , , Отказ); Возврат; КонецЕсли; СтарыйРодитель = ?(Ссылка.Пустая(), Неопределено, ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Родитель")); @@ -34,7 +44,9 @@ Если ТипОбъектовАвторизации = Неопределено Тогда ВсеОбъектыАвторизации = Ложь; ИначеЕсли ВсеОбъектыАвторизации И ЗначениеЗаполнено(Родитель) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Родитель недопустим у группы для всех объектов информационной базы заданного типа.'"), , , , Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Родитель недопустим у группы для всех объектов информационной базы заданного типа.'"), + , , , Отказ); Возврат; КонецЕсли; @@ -53,7 +65,12 @@ Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипОбъектовАвторизации); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уже есть группа ""%1"" для всех объектов информационной базы типа ""%2"".'"), Выборка.СсылкаПредставление, Метаданные.НайтиПоТипу(ТипЗнч(ТипОбъектовАвторизации)).Синоним), , , , Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Уже есть группа ""%1"" для всех объектов информационной базы типа ""%2"".'"), + Выборка.СсылкаПредставление, + ТипОбъектовАвторизации.Метаданные().Синоним), + , , , Отказ); Возврат; КонецЕсли; КонецЕсли; @@ -64,7 +81,11 @@ Если ТипОбъектовАвторизацииРодителя <> Неопределено И ТипОбъектовАвторизацииРодителя <> ТипОбъектовАвторизации Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Тип объектов информационной базы должен быть ""%1"", как у родителя ""%2"".'"), Метаданные.НайтиПоТипу(ТипЗнч(ТипОбъектовАвторизацииРодителя)).Синоним, Родитель), , , , Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Тип объектов информационной базы должен быть ""%1"", как у родителя ""%2"".'"), + ТипОбъектовАвторизацииРодителя.Метаданные().Синоним, Родитель), + , , , Отказ); Возврат; КонецЕсли; КонецЕсли; @@ -87,9 +108,14 @@ Если Выборка.ТипОбъектовАвторизации = Неопределено Тогда ПредставлениеДругогоТипаОбъектаАвторизации = НСтр("ru = '<Любой тип>'"); Иначе - ПредставлениеДругогоТипаОбъектаАвторизации = Метаданные.НайтиПоТипу(ТипЗнч(Выборка.ТипОбъектовАвторизации)).Синоним; + ПредставлениеДругогоТипаОбъектаАвторизации = Выборка.ТипОбъектовАвторизации.Метаданные().Синоним; КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Есть дочерняя группа ""%1"" с другим типом объектов информационной базы ""%2"".'"), Выборка.СсылкаПредставление, ПредставлениеДругогоТипаОбъектаАвторизации), , , , Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Есть дочерняя группа ""%1"" с другим типом объектов информационной базы ""%2"".'"), + Выборка.СсылкаПредставление, + ПредставлениеДругогоТипаОбъектаАвторизации), + , , , Отказ); Возврат; КонецЕсли; КонецЕсли; @@ -183,26 +209,60 @@ ИзмененныеВнешниеПользователи = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); КонецЕсли; - ЕстьОшибки = Ложь; - ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи, ЕстьОшибки); + ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи); Если ЗначениеЗаполнено(СтарыйРодитель) И СтарыйРодитель <> Родитель Тогда ВнешниеПользователи.ОбновитьСоставГруппВнешнихПользователей(СтарыйРодитель, ИзмененныеВнешниеПользователи); - ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи, ЕстьОшибки); - КонецЕсли; - - Если ЕстьОшибки И НЕ ДополнительныеСвойства.Свойство("ЕстьОшибки") Тогда - ДополнительныеСвойства.Вставить("ЕстьОшибки"); + ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи); КонецЕсли; КонецПроцедуры Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + ПроверенныеРеквизитыОбъекта = Новый Массив; + Ошибки = Неопределено; + + // Проверка использования родителя. Если Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Предопределенная группа ""Все внешние пользователи"" не может быть родителем.'"), , "Объект.Родитель", , Отказ); + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.Родитель", + НСтр("ru = 'Предопределенная группа ""Все внешние пользователи"" не может быть родителем.'")); КонецЕсли; + // Проверка незаполненных и повторяющихся внешних пользователей. + ПроверенныеРеквизитыОбъекта.Добавить("Состав.ВнешнийПользователь"); + + Для каждого ТекущаяСтрока Из Состав Цикл + НомерСтроки = Состав.Индекс(ТекущаяСтрока); + + // Проверка заполнения значения. + Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.ВнешнийПользователь) Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.Состав[%1].ВнешнийПользователь", + НСтр("ru = 'Внешний пользователь не выбран.'"), + "Объект.Состав", + НомерСтроки, + НСтр("ru = 'Внешний пользователь в строке %1 не выбран.'")); + Продолжить; + КонецЕсли; + + // Проверка наличия повторяющихся значений. + НайденныеЗначения = Состав.НайтиСтроки(Новый Структура("ВнешнийПользователь", ТекущаяСтрока.ВнешнийПользователь)); + Если НайденныеЗначения.Количество() > 1 Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.Состав[%1].ВнешнийПользователь", + НСтр("ru = 'Внешний пользователь повторяется.'"), + "Объект.Состав", + НомерСтроки, + НСтр("ru = 'Внешний пользователь в строке %1 повторяется.'")); + КонецЕсли; + КонецЦикла; + + ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); + + ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, ПроверенныеРеквизитыОбъекта); + КонецПроцедуры diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Form.form index 054122e8c..df934dddf 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Form.form @@ -230,7 +230,6 @@
    LockOwner true - true true Vertical true diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Module.bsl index 64497d586..9651dcb08 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Module.bsl @@ -1,15 +1,16 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос; Запрос.УстановитьПараметр("Выбранные", Параметры.Выбранные); Запрос.УстановитьПараметр("ПользовательГрупп", Параметры.ПользовательГрупп); Запрос.УстановитьПараметр("Администратор", Пользователи.АвторизованныйПользователь()); - Запрос.УстановитьПараметр("ПолноправныйОтветственный", Пользователи.ЭтоПолноправныйПользовательИБ()); + Запрос.УстановитьПараметр("ПолноправныйОтветственный", Пользователи.ЭтоПолноправныйПользователь()); + УстановитьПривилегированныйРежим(Истина); Запрос.Текст = "ВЫБРАТЬ | ГруппыДоступа.Ссылка, @@ -31,7 +32,7 @@ |ИЗ | Справочник.ГруппыДоступа КАК ГруппыДоступа |ГДЕ - | ГруппыДоступа.Ссылка <> ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы) + | НЕ ГруппыДоступа.Ссылка В (ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы)) | И НЕ ГруппыДоступа.Ссылка В (&Выбранные) | И ВЫБОР | КОГДА &ПолноправныйОтветственный @@ -113,13 +114,8 @@ КонецПроцедуры - -&НаКлиенте -Процедура Выбрать(Команда) - - ПриВыборе(); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ГруппыДоступа &НаКлиенте Процедура ГруппыДоступаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -130,6 +126,19 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Выбрать(Команда) + + ПриВыборе(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаКлиенте Процедура ПриВыборе() @@ -146,4 +155,3 @@ КонецЕсли; КонецПроцедуры - diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Module.bsl index 7dedd2ef0..25e74d7fa 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Module.bsl @@ -1,8 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Отказ = НЕ УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей(); + ВыполнитьПроверкуПравДоступа("АдминистрированиеДанных", Метаданные); КонецПроцедуры @@ -13,6 +16,8 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура ВыполнитьОбновление() @@ -23,10 +28,11 @@ КонецПроцедуры - &НаСервере Функция ОбновлениеТребуется() + УстановитьПривилегированныйРежим(Истина); + КоличествоДанных = 0; УправлениеДоступом.ЗаполнениеДанныхДляОграниченияДоступа(КоличествоДанных); Если КоличествоДанных > 0 Тогда diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl index f5e3068fc..528d6d079 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl @@ -1,4 +1,5 @@ - +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index 879b73bd9..360d5fa46 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -2,10 +2,13 @@ - false Ссылка - NotEqual - Справочник.ГруппыДоступа.Администраторы + NotInList + + + -1 + + Inaccessible false diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form index 02e943735..6a54e3084 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form @@ -31,7 +31,7 @@ true НаименованиеРасширеннаяПодсказка - 38 + 40 Label true true @@ -71,7 +71,7 @@ ПрофильРасширеннаяПодсказка - 40 + 42 Label true true @@ -111,7 +111,7 @@ АдминистраторРасширеннаяПодсказка - 42 + 44 Label true true @@ -159,10 +159,10 @@ СписокСтрокаПоиска - 29 + 31 СписокСтрокаПоискаРасширеннаяПодсказка - 31 + 33 Label true true @@ -172,7 +172,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 30 + 32 true Список @@ -182,10 +182,10 @@ СписокСостояниеПросмотра - 32 + 34 СписокСостояниеПросмотраРасширеннаяПодсказка - 34 + 36 Label true true @@ -195,7 +195,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 33 + 35 true ViewStatusAddition @@ -206,10 +206,10 @@ СписокУправлениеПоиском - 35 + 37 СписокУправлениеПоискомРасширеннаяПодсказка - 37 + 39 Label true true @@ -219,7 +219,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 36 + 38 true SearchControlAddition @@ -230,7 +230,7 @@ СписокРасширеннаяПодсказка - 28 + 30 Label true true @@ -251,7 +251,7 @@ СписокКонтекстноеМенюСоздатьРасширеннаяПодсказка - 24 + 26 Label true true @@ -277,7 +277,7 @@ СписокКонтекстноеМенюСоздатьГруппуРасширеннаяПодсказка - 25 + 27 Label true true @@ -303,7 +303,7 @@ СписокКонтекстноеМенюСкопироватьРасширеннаяПодсказка - 26 + 28 Label true true @@ -337,7 +337,7 @@
    КонтекстноеМенюСпискаРасширеннаяПодсказка - 27 + 29 Label true true @@ -401,7 +401,7 @@ Left ОписаниеРасширеннаяПодсказка - 52 + 54 Label true true @@ -439,7 +439,7 @@ ФормаСоздатьРасширеннаяПодсказка - 20 + 21 Label true true @@ -465,7 +465,7 @@ ФормаСоздатьГруппуРасширеннаяПодсказка - 21 + 22 Label true true @@ -491,7 +491,7 @@ ФормаСкопироватьРасширеннаяПодсказка - 22 + 23 Label true true @@ -525,7 +525,7 @@ КоманднаяПанельФормыРасширеннаяПодсказка - 23 + 24 Label true true @@ -537,6 +537,32 @@ Form
    + + ФормаСправка + 20 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl index 09ba9e7e2..e487aa49f 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl @@ -1,7 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -34,7 +32,13 @@ Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "&ОшибкаОбъектНеНайден", ФрагментПолученияПредставленияВнешнегоПользователя); КонецЕсли; - Список.Отбор.Элементы[0].Использование = НЕ Пользователи.ЭтоПолноправныйПользовательИБ(); + СписокНедоступныхГрупп = Новый СписокЗначений; + + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда + СписокНедоступныхГрупп.Добавить(Справочники.ГруппыДоступа.Администраторы); + КонецЕсли; + + Список.Отбор.Элементы[0].ПравоеЗначение = СписокНедоступныхГрупп; Список.Параметры.УстановитьЗначениеПараметра("РежимВыбора", Параметры.РежимВыбора); Список.Параметры.УстановитьЗначениеПараметра("РежимВыбораТолькоГрупп", Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы); @@ -67,8 +71,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) @@ -135,5 +138,3 @@ КонецЕсли; КонецПроцедуры - - diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form index 3efc380d9..b4e410316 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form @@ -822,10 +822,6 @@ Объект.Администратор - - ru - Администратор участников группы доступа - АдминистраторРасширеннаяПодсказка 365 @@ -2258,7 +2254,7 @@ ru - Администратор использования персонального доступа + Пользователь, которой может изменять использование персональной группы доступа АдминистраторПерсональнойГруппыРасширеннаяПодсказка @@ -2526,40 +2522,6 @@ - - ПрофильАдминистратор - - <key>ru</key> - <value>Профиль администратор</value> - - 5 - - CatalogRef.ПрофилиГруппДоступа - - - true - - - true - - - - ГруппаДоступаАдминистраторы - - <key>ru</key> - <value>Группа доступа администраторы</value> - - 6 - - CatalogRef.ГруппыДоступа - - - true - - - true - - НадписьВидДоступа @@ -2579,57 +2541,6 @@ </edit> <functionalOptions>FunctionalOption.ОграничиватьДоступНаУровнеЗаписей</functionalOptions> </attributes> - <attributes> - <name>ПользовательПустаяСсылка</name> - <title> - <key>ru</key> - <value>Пользователь пустая ссылка</value> - - 9 - - CatalogRef.Пользователи - - - true - - - true - - - - ВидДоступаПользователи - - <key>ru</key> - <value>Вид доступа пользователи</value> - - 2 - - ChartOfCharacteristicTypesRef - - - true - - - true - - - - ГруппаПользователейПустаяСсылка - - <key>ru</key> - <value>Группа пользователей пустая ссылка</value> - - 12 - - CatalogRef.ГруппыПользователей - - - true - - - true - - ИспользоватьВнешнихПользователей @@ -2647,40 +2558,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>ВнешнийПользовательПустаяСсылка</name> - <title> - <key>ru</key> - <value>Внешний пользователь пустая ссылка</value> - - 15 - - CatalogRef.ВнешниеПользователи - - - true - - - true - - - - ВидДоступаВнешниеПользователи - - <key>ru</key> - <value>Вид доступа внешние пользователи</value> - - 16 - - ChartOfCharacteristicTypesRef - - - true - - - true - - СписокТиповПользователей @@ -2777,23 +2654,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>ГруппаВнешнихПользователейПустаяСсылка</name> - <title> - <key>ru</key> - <value>Группа внешних пользователей пустая ссылка</value> - - 13 - - CatalogRef.ГруппыВнешнихПользователей - - - true - - - true - - ТипыЗначенийДоступаВидовДоступа diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl index 3c8390ece..829d276e6 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl @@ -1,7 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -38,12 +36,6 @@ КонецЦикла; КонецЦикла; - ПрофильАдминистратор = Справочники.ПрофилиГруппДоступа.Администратор; - ГруппаДоступаАдминистраторы = Справочники.ГруппыДоступа.Администраторы; - - ВидДоступаПользователи = ПланыВидовХарактеристик.ВидыДоступа.Пользователи; - ВидДоступаВнешниеПользователи = ПланыВидовХарактеристик.ВидыДоступа.ВнешниеПользователи; - ИспользоватьВнешнихПользователей = ВнешниеПользователи.ИспользоватьВнешнихПользователей(); СправочникВнешниеПользователиДоступен = ПравоДоступа("Просмотр", Метаданные.Справочники.ВнешниеПользователи); @@ -72,14 +64,18 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если Объект.Ссылка = ГруппаДоступаАдминистраторы И - Объект.Профиль <> ПрофильАдминистратор Тогда + Если Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") + И Объект.Профиль <> ПредопределенноеЗначение("Справочник.ПрофилиГруппДоступа.Администратор") Тогда + Ответ = Вопрос(НСтр("ru = 'У группы доступа Администраторы должен быть профиль Администратор. - | - |Установить профиль в группе доступа (нет - открыть только для просмотра)?'"), - РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + | + |Установить профиль в группе доступа (нет - открыть только для просмотра)?'"), + РежимДиалогаВопрос.ДаНет, + , + КодВозвратаДиалога.Нет); + Если Ответ = КодВозвратаДиалога.Да Тогда - Объект.Профиль = ПрофильАдминистратор; + Объект.Профиль = ПредопределенноеЗначение("Справочник.ПрофилиГруппДоступа.Администратор"); Модифицированность = Истина; Иначе ТолькоПросмотр = Истина; @@ -87,10 +83,14 @@ КонецЕсли; Если НЕ ТолькоПросмотр И ИзменилсяСоставВидовДоступаПриЧтении Тогда + Ответ = Вопрос(НСтр("ru = 'Изменился состав видов доступа профиля этой группы доступа. - | - |Обновить виды доступа в группе доступа (нет - открыть только для просмотра)?'"), - РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + | + |Обновить виды доступа в группе доступа (нет - открыть только для просмотра)?'"), + РежимДиалогаВопрос.ДаНет, + , + КодВозвратаДиалога.Нет); + Если Ответ = КодВозвратаДиалога.Да Тогда ОбновитьСоставВидовДоступа(); Иначе @@ -120,7 +120,7 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - Если НЕ Пользователи.ЭтоПолноправныйПользовательИБ() Тогда + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда // Ответственный не может менять что-либо, кроме состава пользователей // В целях предотвращения изменения группы доступа на клиенте в запрещенных // частях, выполняется повторное чтение объекта @@ -138,7 +138,7 @@ КонецЦикла; КонецЕсли; - Если ТекущийОбъект.Ссылка = ГруппаДоступаАдминистраторы Тогда + Если ТекущийОбъект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда Объект.Администратор = Неопределено; КонецЕсли; @@ -147,10 +147,6 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Если ТекущийОбъект.ДополнительныеСвойства.Свойство("ЕстьОшибки") Тогда - ПараметрыЗаписи.Вставить("ЕстьОшибки"); - КонецЕсли; - ЗаполнитьСвойстваВидовДоступаВФорме(); КонецПроцедуры @@ -158,147 +154,189 @@ &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - Если ПараметрыЗаписи.Свойство("ЕстьОшибки") Тогда - Предупреждение(НСтр("ru = 'При записи возникли ошибки (см. журнал регистрации)'")); - КонецЕсли; - - Оповестить("ИзмененаГруппаДоступа", Объект.Ссылка); + Оповестить("Запись_ГруппыДоступа", Новый Структура, Объект.Ссылка); КонецПроцедуры &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) - // Проверка незаполненных и повторяющихся пользователей и групп пользователей. - ДеревоПользователейСтроки = РеквизитФормыВЗначение("ПользователиГруппы").Строки; - НомерСтроки = ДеревоПользователейСтроки.Количество()-1; + ПроверенныеРеквизитыОбъекта = Новый Массив; + Ошибки = Неопределено; - Пока НЕ Отказ И НомерСтроки >= 0 Цикл - ТекущаяСтрока = ДеревоПользователейСтроки.Получить(НомерСтроки); + // Проверка незаполненных и повторяющихся пользователей. + ПроверенныеРеквизитыОбъекта.Добавить("Пользователи.Пользователь"); + ДеревоПользователейСтроки = РеквизитФормыВЗначение("ПользователиГруппы").Строки; + КоличествоОшибок = ?(Ошибки = Неопределено, 0, Ошибки.Количество()); + + Для каждого ТекущаяСтрока Из ДеревоПользователейСтроки Цикл + НомерСтроки = ДеревоПользователейСтроки.Индекс(ТекущаяСтрока); // Проверка заполнения значения. Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.Пользователь) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не заполнен пользователь или группа пользователей.'"), - , - "ПользователиГруппы[" + Формат(НомерСтроки, "ЧГ=0") + "].Пользователь", - , - Отказ); + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "ПользователиГруппы[%1].Пользователь", + НСтр("ru = 'Пользователь не выбран.'"), + "ПользователиГруппы", + НомерСтроки, + НСтр("ru = 'Пользователь в строке %1 не выбран.'")); Продолжить; КонецЕсли; // Проверка наличия повторяющихся значений. - НайденныеЗначения = ДеревоПользователейСтроки.НайтиСтроки(Новый Структура("Пользователь", ТекущаяСтрока.Пользователь)); + НайденныеЗначения = ДеревоПользователейСтроки.НайтиСтроки( + Новый Структура("Пользователь", ТекущаяСтрока.Пользователь)); + Если НайденныеЗначения.Количество() > 1 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( ?(ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.Пользователи"), - НСтр("ru = 'Пользователь повторяется.'"), - НСтр("ru = 'Группа пользователей повторяется.'") ), - , - "ПользователиГруппы[" + Формат(НомерСтроки, "ЧГ=0") + "].Пользователь", - , - Отказ); - Продолжить; + + Если ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда + ТекстДляОднойОшибки = НСтр("ru = 'Пользователь повторяется.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Пользователь в строке %1 повторяется.'"); + + ИначеЕсли ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + ТекстДляОднойОшибки = НСтр("ru = 'Внешний пользователь повторяется.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Внешний пользователь в строке %1 повторяется.'"); + + ИначеЕсли ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") Тогда + ТекстДляОднойОшибки = НСтр("ru = 'Группа пользователей повторяется.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Группа пользователей в строке %1 повторяется.'"); + Иначе + ТекстДляОднойОшибки = НСтр("ru = 'Группа внешних пользователей повторяется.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Группа внешних пользователей в строке %1 повторяется.'"); + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "ПользователиГруппы[%1].Пользователь", + ТекстДляОднойОшибки, + "ПользователиГруппы", + НомерСтроки, + ТекстДляНесколькихОшибок); КонецЕсли; // Проверка наличия только элементов в предопределенной группе Администраторы. - Если Объект.Ссылка = ГруппаДоступаАдминистраторы И ТипЗнч(ТекущаяСтрока.Пользователь) <> Тип("СправочникСсылка.Пользователи") Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( ?(ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей"), - НСтр("ru = 'В предопределенной группе доступа Администраторы могут быть только пользователи. - |Группы пользователей недопустимы.'"), - НСтр("ru = 'В предопределенной группе доступа Администраторы могут быть только пользователи. - |Внешние пользователи и группы внешних пользователей недопустимы.'") ), - , - "ПользователиГруппы[" + Формат(НомерСтроки, "ЧГ=0") + "].Пользователь", - , - Отказ); - Продолжить; + Если Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы + И ТипЗнч(ТекущаяСтрока.Пользователь) <> Тип("СправочникСсылка.Пользователи") Тогда + + Если ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + ТекстДляОднойОшибки = НСтр("ru = 'Внешний пользователь недопустим в предопределенной группе доступа Администраторы.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Внешний пользователь в строке %1 недопустим в предопределенной группе доступа Администраторы.'"); + + ИначеЕсли ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") Тогда + ТекстДляОднойОшибки = НСтр("ru = 'Группа пользователей недопустима в предопределенной группе доступа Администраторы.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Группа пользователей в строке %1 недопустима в предопределенной группе доступа Администраторы.'"); + Иначе + ТекстДляОднойОшибки = НСтр("ru = 'Группа внешних пользователей недопустима в предопределенной группе доступа Администраторы.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Группа внешних пользователей в строке %1 недопустима в предопределенной группе доступа Администраторы.'"); + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "ПользователиГруппы[%1].Пользователь", + ТекстДляОднойОшибки, + "ПользователиГруппы", + НомерСтроки, + ТекстДляНесколькихОшибок); КонецЕсли; - - НомерСтроки = НомерСтроки - 1; КонецЦикла; - // Проверка незаполненных и повторяющихся значений доступа. - НомерСтрокиВидДоступа = Объект.ВидыДоступа.Количество()-1; - - Пока НЕ Отказ И НомерСтрокиВидДоступа >= 0 Цикл - ТекущаяСтрокаВидовДоступа = Объект.ВидыДоступа.Получить(НомерСтрокиВидДоступа); + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда - ЗначенияДоступаВидаДоступа = Объект.ЗначенияДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущаяСтрокаВидовДоступа.ВидДоступа)); - НомерСтроки = ЗначенияДоступаВидаДоступа.Количество()-1; + Пользователи.НайтиНеоднозначныхПользователейИБ(); - Пока НЕ Отказ И НомерСтроки >= 0 Цикл - - ТекущаяСтрока = ЗначенияДоступаВидаДоступа.Получить(НомерСтроки); - - // Проверка заполнения значения. - Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.ЗначениеДоступа) Тогда - Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидовДоступа.ПолучитьИдентификатор(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Значение не заполнено.'"), - , - "Объект.ЗначенияДоступа[" + Формат(ТекущаяСтрока.НомерСтроки-1, "ЧГ=0") + "].ЗначениеДоступа", - , - Отказ); - Продолжить; - КонецЕсли; - - // Проверка наличия повторяющихся значений. - НайденныеЗначения = Объект.ЗначенияДоступа.НайтиСтроки(Новый Структура("ВидДоступа, ЗначениеДоступа", ТекущаяСтрокаВидовДоступа.ВидДоступа, ТекущаяСтрока.ЗначениеДоступа)); - Если НайденныеЗначения.Количество() > 1 Тогда - Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидовДоступа.ПолучитьИдентификатор(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Значение повторяется.'"), - , - "Объект.ЗначенияДоступа[" + Формат(ТекущаяСтрока.НомерСтроки-1, "ЧГ=0") + "].ЗначениеДоступа", - , - Отказ); - Продолжить; - КонецЕсли; - - НомерСтроки = НомерСтроки - 1; - КонецЦикла; - - НомерСтрокиВидДоступа = НомерСтрокиВидДоступа - 1; - КонецЦикла; - - Если НЕ Отказ И Объект.Ссылка = ГруппаДоступаАдминистраторы Тогда // Проверка пустого списка пользователей ИБ в группе доступа Администраторы УстановитьПривилегированныйРежим(Истина); НайденПользовательИБ = Ложь; + Для каждого ОписаниеПользователя ИЗ ПользователиГруппы.ПолучитьЭлементы() Цикл + Если ЗначениеЗаполнено(ОписаниеПользователя.Пользователь) - И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ОписаниеПользователя.Пользователь.ИдентификаторПользователяИБ) <> Неопределено Тогда - // + И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ОписаниеПользователя.Пользователь.ИдентификаторПользователяИБ) <> Неопределено Тогда + НайденПользовательИБ = Истина; Прервать; КонецЕсли; КонецЦикла; + Если НЕ НайденПользовательИБ Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'В группе доступа Администраторы - |должен быть хотя бы один пользователь, - |которому разрешен доступ к информационной базе.'"), - , - "Объект.Пользователи", - , - Отказ); + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "ПользователиГруппы", + НСтр("ru = 'В группе доступа Администраторы + |должен быть хотя бы один пользователь, + |которому разрешен доступ к информационной базе.'")); КонецЕсли; КонецЕсли; - Если Отказ Тогда - ПроверяемыеРеквизиты.Очистить(); + // Проверка незаполненных и повторяющихся значений доступа. + ПроверенныеРеквизитыОбъекта.Добавить("ВидыДоступа.ВидДоступа"); + ПроверенныеРеквизитыОбъекта.Добавить("ЗначенияДоступа.ВидДоступа"); + ПроверенныеРеквизитыОбъекта.Добавить("ЗначенияДоступа.ЗначениеДоступа"); + + Если КоличествоОшибок <> ?(Ошибки = Неопределено, 0, Ошибки.Количество()) Тогда + Элементы.ПользователиИДоступ.ТекущаяСтраница = Элементы.ПользователиГруппы; + Иначе + НомерСтрокиВидаДоступа = Объект.ВидыДоступа.Количество()-1; + + Пока НЕ Отказ И НомерСтрокиВидаДоступа >= 0 Цикл + ТекущаяСтрокаВидаДоступа = Объект.ВидыДоступа.Получить(НомерСтрокиВидаДоступа); + + ЗначенияДоступаВидаДоступа = Объект.ЗначенияДоступа.НайтиСтроки( + Новый Структура("ВидДоступа", ТекущаяСтрокаВидаДоступа.ВидДоступа)); + НомерСтроки = ЗначенияДоступаВидаДоступа.Количество()-1; + + Пока НомерСтроки >= 0 Цикл + + ТекущаяСтрока = ЗначенияДоступаВидаДоступа.Получить(НомерСтроки); + + // Проверка заполнения значения. + Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.ЗначениеДоступа) Тогда + Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидаДоступа.ПолучитьИдентификатор(); + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.ЗначенияДоступа[%1].ЗначениеДоступа", + НСтр("ru = 'Значение не выбрано.'"), + "ЗначенияДоступа", + НомерСтроки, + НСтр("ru = 'Значение в строке %1 не выбрано.'")); + Отказ = Истина; + Прервать; + КонецЕсли; + + // Проверка наличия повторяющихся значений. + НайденныеЗначения = Объект.ЗначенияДоступа.НайтиСтроки( + Новый Структура("ВидДоступа, ЗначениеДоступа", ТекущаяСтрокаВидаДоступа.ВидДоступа, ТекущаяСтрока.ЗначениеДоступа)); + + Если НайденныеЗначения.Количество() > 1 Тогда + Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидаДоступа.ПолучитьИдентификатор(); + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.ЗначенияДоступа[%1].ЗначениеДоступа", + НСтр("ru = 'Значение повторяется.'"), + "ЗначенияДоступа", + НомерСтроки, + НСтр("ru = 'Значение в строке %1 повторяется.'")); + Отказ = Истина; + Прервать; + КонецЕсли; + + НомерСтроки = НомерСтроки - 1; + КонецЦикла; + + НомерСтрокиВидаДоступа = НомерСтрокиВидаДоступа - 1; + КонецЦикла; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); + + ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Объект")); + ТекущийОбъект = РеквизитФормыВЗначение("Объект"); + ТекущийОбъект.ДополнительныеСвойства.Вставить("ПроверенныеРеквизитыОбъекта", ПроверенныеРеквизитыОбъекта); + Если НЕ ТекущийОбъект.ПроверитьЗаполнение() Тогда + Отказ = Истина; КонецЕсли; КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// - -&НаКлиенте -Процедура Подобрать(Команда) - - ВыбратьПодобратьПользователей(Истина); - -КонецПроцедуры - +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ПрофильПриИзменении(Элемент) @@ -335,7 +373,6 @@ КонецПроцедуры - &НаКлиенте Процедура ПользовательВладелецНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -343,6 +380,8 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Пользователи &НаКлиенте Процедура ПользователиПриИзменении(Элемент) @@ -416,7 +455,7 @@ Если Элемент.ТекущиеДанные.Пользователь = Неопределено Тогда Элемент.ТекущиеДанные.НомерКартинки = -1; - Элемент.ТекущиеДанные.Пользователь = ПользовательПустаяСсылка; + Элемент.ТекущиеДанные.Пользователь = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка"); КонецЕсли; КонецПроцедуры @@ -426,7 +465,7 @@ Если НоваяСтрока И Элемент.ТекущиеДанные <> Неопределено И - Элемент.ТекущиеДанные.Пользователь = ПользовательПустаяСсылка Тогда + Элемент.ТекущиеДанные.Пользователь = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка") Тогда Элемент.ТекущиеДанные.Пользователь = Неопределено; КонецЕсли; @@ -511,7 +550,7 @@ СтандартнаяОбработка = Ложь; - Элементы.Пользователи.ТекущиеДанные.Пользователь = ПользовательПустаяСсылка; + Элементы.Пользователи.ТекущиеДанные.Пользователь = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка"); Элементы.Пользователи.ТекущиеДанные.НомерКартинки = -1; КонецПроцедуры @@ -536,6 +575,8 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ВидыДоступа &НаКлиенте Процедура ВидыДоступаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -606,6 +647,8 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ЗначенияДоступа &НаКлиенте Процедура ЗначенияДоступаПриИзменении(Элемент) @@ -652,8 +695,8 @@ Элементы.ЗначениеДоступа.КнопкаОчистки = ТекущийТипЗначенияДоступа <> Неопределено И ТекущиеТипыЗначенийДоступа.Количество() > 1; - Если ТекущийТипЗначенияДоступа = ПользовательПустаяСсылка ИЛИ - ТекущийТипЗначенияДоступа = ГруппаПользователейПустаяСсылка Тогда + Если ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка") ИЛИ + ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.ГруппыПользователей.ПустаяСсылка") Тогда СтандартнаяОбработка = Ложь; @@ -663,8 +706,8 @@ ПараметрыФормы.Вставить("ВыборГруппПользователей", Истина); ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент); - ИначеЕсли ТекущийТипЗначенияДоступа = ВнешнийПользовательПустаяСсылка ИЛИ - ТекущийТипЗначенияДоступа = ГруппаВнешнихПользователейПустаяСсылка Тогда + ИначеЕсли ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.ВнешниеПользователи.ПустаяСсылка") ИЛИ + ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.ГруппыВнешнихПользователей.ПустаяСсылка") Тогда СтандартнаяОбработка = Ложь; @@ -714,8 +757,14 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; - Если ТекущийВидДоступа = ВидДоступаВнешниеПользователи ИЛИ ТекущийВидДоступа = ВидДоступаПользователи Тогда - ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя(Текст, , ТекущийВидДоступа = ВидДоступаВнешниеПользователи, ТекущийВидДоступа <> ВидДоступаПользователи); + Если ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи") + ИЛИ ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи") Тогда + + ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя( + Текст, + , + ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи"), + ТекущийВидДоступа <> ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи")); Иначе ДанныеВыбора = УправлениеДоступом.СформироватьДанныеВыбораЗначенияДоступа(Текст, ТекущийВидДоступа, Ложь); КонецЕсли; @@ -729,8 +778,14 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; - Если ТекущийВидДоступа = ВидДоступаВнешниеПользователи ИЛИ ТекущийВидДоступа = ВидДоступаПользователи Тогда - ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя(Текст, , ТекущийВидДоступа = ВидДоступаВнешниеПользователи, ТекущийВидДоступа <> ВидДоступаПользователи); + Если ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи") + ИЛИ ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи") Тогда + + ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя( + Текст, + , + ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи"), + ТекущийВидДоступа <> ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи")); Иначе ДанныеВыбора = УправлениеДоступом.СформироватьДанныеВыбораЗначенияДоступа(Текст, ТекущийВидДоступа, Ложь); КонецЕсли; @@ -739,8 +794,17 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Подобрать(Команда) + + ВыбратьПодобратьПользователей(Истина); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура НачальнаяНастройкаПриЧтенииИСоздании(ТекущийОбъект) @@ -773,7 +837,7 @@ Элементы.ПользовательВладелец.ТолькоПросмотр = УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа(); // Подготовка к режиму редактирования пользователей администратором участников - Если НЕ Пользователи.ЭтоПолноправныйПользовательИБ() Тогда + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда Элементы.Наименование.ТолькоПросмотр = Истина; Элементы.Родитель.ТолькоПросмотр = Истина; Элементы.Профиль.Видимость = Ложь; @@ -1005,7 +1069,7 @@ Если ПриЧтенииНаСервере И НЕ Объект.Ссылка.Пустая() // ЭтоНовый И ИзменилсяСоставВидовДоступа - И Пользователи.ЭтоПолноправныйПользовательИБ() // Только администратор может обновлять виды доступа + И Пользователи.ЭтоПолноправныйПользователь() // Только администратор может обновлять виды доступа И ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Ссылка, "Профиль") = Объект.Профиль Тогда ИзменилсяСоставВидовДоступаПриЧтении = Истина; @@ -1064,11 +1128,11 @@ // Обновление поля НадписьВидДоступа Контекст.НадписьВидДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ?(ТекущиеДанные.ВидДоступа = Контекст.ВидДоступаПользователи, + ?(ТекущиеДанные.ВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи"), ?(ТекущиеДанные.ДоступРазрешен, НСтр("ru = 'Разрешенные значения (%1) - текущий пользователь всегда разрешен'"), НСтр("ru = 'Разрешенные значения (%1) - текущий пользователь всегда разрешен'") ), - ?(ТекущиеДанные.ВидДоступа = Контекст.ВидДоступаВнешниеПользователи, + ?(ТекущиеДанные.ВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи"), ?(ТекущиеДанные.ДоступРазрешен, НСтр("ru = 'Запрещенные значения (%1) - текущий внешний пользователь всегда разрешен'"), НСтр("ru = 'Запрещенные значения (%1) - текущий внешний пользователь всегда разрешен'") ), @@ -1159,10 +1223,8 @@ &НаСервере Функция СформироватьДанныеВыбораПользователя(Текст) - Если Объект.Ссылка = ГруппаДоступаАдминистраторы Тогда - + Если Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда Возврат Пользователи.СформироватьДанныеВыбораПользователя(Текст, Ложь, Ложь); - КонецЕсли; Возврат Пользователи.СформироватьДанныеВыбораПользователя(Текст); @@ -1174,7 +1236,7 @@ ВыборИПодборВнешнихПользователей = Ложь; - Если Объект.Ссылка = ГруппаДоступаАдминистраторы Тогда + Если Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда Возврат Истина; КонецЕсли; @@ -1214,17 +1276,17 @@ Если ТипыЗначенияДоступа.Количество() = 2 Тогда - Если ТипыЗначенияДоступа.НайтиПоЗначению(ПользовательПустаяСсылка) <> Неопределено - И ТипыЗначенияДоступа.НайтиПоЗначению(ГруппаПользователейПустаяСсылка) <> Неопределено Тогда + Если ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка")) <> Неопределено + И ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение("Справочник.ГруппыПользователей.ПустаяСсылка")) <> Неопределено Тогда - ТекущийТипЗначенияДоступа = ПользовательПустаяСсылка; + ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка"); Возврат Истина; КонецЕсли; - Если ТипыЗначенияДоступа.НайтиПоЗначению(ВнешнийПользовательПустаяСсылка) <> Неопределено - И ТипыЗначенияДоступа.НайтиПоЗначению(ГруппаВнешнихПользователейПустаяСсылка) <> Неопределено Тогда + Если ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение("Справочник.ВнешниеПользователи.ПустаяСсылка")) <> Неопределено + И ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение("Справочник.ГруппыВнешнихПользователей.ПустаяСсылка")) <> Неопределено Тогда - ТекущийТипЗначенияДоступа = ВнешнийПользовательПустаяСсылка; + ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.ВнешниеПользователи.ПустаяСсылка"); Возврат Истина; КонецЕсли; КонецЕсли; @@ -1268,7 +1330,7 @@ КонецЕсли; КонецЕсли; - Если Объект.Ссылка <> ГруппаДоступаАдминистраторы Тогда + Если Объект.Ссылка <> ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда Если ВыборИПодборВнешнихПользователей Тогда ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Истина); Иначе diff --git a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl index fb260df07..3f1e29c6f 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl @@ -1,8 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ - -// Обработчик события ПередЗаписью формирует временную таблицу старых пользователей -// для обработчика ПриЗаписи. -// +// Формирует временную таблицу старых пользователей для обработчика ПриЗаписи. Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда @@ -68,7 +67,7 @@ КонецПроцедуры -// Обработчик события ПриЗаписи обновляет +// Обновляет: // - роли добавленных, оставшихся и удаленных пользователей; // - РегистрСведений.ТаблицыГруппДоступа; // - РегистрСведений.ЗначенияГруппДоступа. @@ -82,12 +81,7 @@ Если НЕ ЭтоГруппа Тогда Если НЕ ДополнительныеСвойства.Свойство("НеОбновлятьРолиПользователей") Тогда - // - ЕстьОшибки = Ложь; - УправлениеДоступом.ОбновитьРолиПользователейПриИзмененииГруппыДоступа(Ссылка, ДополнительныеСвойства.СтарыеУчастникиГруппыДоступа, ЕстьОшибки); - Если ЕстьОшибки Тогда - ДополнительныеСвойства.Вставить("ЕстьОшибки"); - КонецЕсли; + УправлениеДоступом.ОбновитьРолиПользователейПриИзмененииГруппыДоступа(Ссылка, ДополнительныеСвойства.СтарыеУчастникиГруппыДоступа); КонецЕсли; УправлениеДоступом.ОбновитьТаблицыГруппДоступа(Ссылка); @@ -100,3 +94,11 @@ КонецПроцедуры +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + + Если ДополнительныеСвойства.Свойство("ПроверенныеРеквизитыОбъекта") Тогда + ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива( + ПроверяемыеРеквизиты, ДополнительныеСвойства.ПроверенныеРеквизитыОбъекта); + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo b/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo index ea62d7240..e53d02e0d 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo +++ b/SSL/src/Catalogs/ГруппыДоступа/ГруппыДоступа.mdo @@ -166,6 +166,7 @@ </synonym> <comment>В качестве типа используется пустая ссылка</comment> <type> + <types>CatalogRef.ФизическиеЛица</types> <types>CatalogRef.Пользователи</types> </type> <toolTip> @@ -223,7 +224,7 @@ <name>Администратор</name> <synonym> <key>ru</key> - <value>Администратор</value> + <value>Ответственный</value> </synonym> <type> <types>CatalogRef.Пользователи</types> @@ -274,6 +275,7 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> <dataHistory>Use</dataHistory> <indexing>Index</indexing> <fullTextSearch>Use</fullTextSearch> @@ -308,7 +310,7 @@ </type> <toolTip> <key>ru</key> - <value>Вид доступа по которому возможно ограничение доступа в группе доступа</value> + <value>Вид доступа, по которому возможно ограничение доступа в группе доступа</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> @@ -368,6 +370,7 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> <dataHistory>Use</dataHistory> <indexing>Index</indexing> <fullTextSearch>Use</fullTextSearch> @@ -387,6 +390,7 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> <linkByType> <field>Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа.Attribute.ВидДоступа</field> </linkByType> diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl index edca681a7..5ab08c97a 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form index 5cf354bda..8828a02bd 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form @@ -751,13 +751,5 @@ <event>AfterWrite</event> <name>ПослеЗаписи</name> </handlers> - <handlers> - <event>AfterWriteAtServer</event> - <name>ПослеЗаписиНаСервере</name> - </handlers> - <handlers> - <event>BeforeWrite</event> - <name>ПередЗаписью</name> - </handlers> </extInfo> </form:Form> diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html index 21b465ae7..f6117eb6f 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html @@ -1,5 +1,6 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16443"></meta></head><body> -<p>Для группы пользователей задается список входящих в нее пользователей.<br>При этом нужно учитывать, что пользователи группы неявно входят в состав групп-родителей.</p> -<p>Для заполнения в группу большого числа пользователей применяйте кнопку Подбор.</p> -<p>Подробнее см. <a href="Catalog.ГруппыПользователей/Help">справка по группам пользователей</a>.</p> -<p> </p></body></html> \ No newline at end of file +<p>Карточка группы пользователей позволяет просматривать и редактировать свойства группы.</p> +<p>При редактировании состава пользователей группы нужно учитывать, что они неявно входят в состав групп-родителей. Для добавления большого числа пользователей можно использовать команду <strong>Подобрать</strong>.</p> +<h3>См. также</h3> +<ul><li><a href="Catalog.ГруппыПользователей/Help">Общие сведения о группах пользователей</a> +</li><li><a href="Catalog.Пользователи/Help">Общие сведения о пользователях</a></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl index e7a88072d..59e6aa8a0 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,5 @@ - -////////////////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -22,36 +21,15 @@ КонецПроцедуры -&НаКлиенте -Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) - - ОбработкаПроверкиЗаполнения(Отказ); - -КонецПроцедуры - -&НаСервере -Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - - Если ТекущийОбъект.ДополнительныеСвойства.Свойство("ЕстьОшибки") Тогда - ПараметрыЗаписи.Вставить("ЕстьОшибки"); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - Оповестить("ИзмененСоставГруппыПользователей", Объект.Ссылка, ЭтаФорма); - - Если ПараметрыЗаписи.Свойство("ЕстьОшибки") Тогда - Предупреждение(НСтр("ru = 'При записи возникли ошибки (см. журнал регистрации)'")); - КонецЕсли; + Оповестить("Запись_ГруппыПользователей", Новый Структура, Объект.Ссылка); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура РодительНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -65,16 +43,8 @@ КонецПроцедуры -&НаКлиенте -Процедура ПодобратьПользователей(Команда) - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь); - - ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элементы.Состав); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Состав &НаКлиенте Процедура СоставОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -90,8 +60,21 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ПодобратьПользователей(Команда) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь); + + ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элементы.Состав); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура ОбработкаВыбораПользователя(ВыбранноеЗначение) @@ -103,38 +86,3 @@ КонецЕсли; КонецПроцедуры - -&НаКлиенте -Процедура ОбработкаПроверкиЗаполнения(Отказ) - - // Проверка незаполненных и повторяющихся пользователей. - НомерСтроки = Объект.Состав.Количество()-1; - - Пока НЕ Отказ И НомерСтроки >= 0 Цикл - ТекущаяСтрока = Объект.Состав.Получить(НомерСтроки); - - // Проверка заполнения значения. - Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.Пользователь) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не заполнен пользователь.'"), - , - "Объект.Состав[" + Формат(НомерСтроки, "ЧГ=0") + "].Пользователь", - , - Отказ); - Возврат; - КонецЕсли; - - // Проверка наличия повторяющихся значений. - НайденныеЗначения = Объект.Состав.НайтиСтроки(Новый Структура("Пользователь", ТекущаяСтрока.Пользователь)); - Если НайденныеЗначения.Количество() > 1 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Пользователь повторяется.'"), - , - "Объект.Состав[" + Формат(НомерСтроки, "ЧГ=0") + "].Пользователь", - , - Отказ); - Возврат; - КонецЕсли; - - НомерСтроки = НомерСтроки - 1; - КонецЦикла; - -КонецПроцедуры diff --git a/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html b/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html index 0f4213962..bee650a12 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html @@ -1,7 +1,8 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16443"></meta></head><body> -<p class="Usual">Справочник используется для настройки групп <a href="Catalog.Пользователи/Help">пользователей</a>.</p> +<p class="Usual">В этом списке ведется учет групп пользователей.</p> +<p class="Usual">Группы пользователей могут использоваться для группировки большого числа пользователей, а также когда нужно указывать не только пользователя, но и группу пользователей, например, при настройке доступа, в ролях исполнителей задач бизнес-процессов и др.<br></p> <p class="Usual">Группы создаются плоским списком или иерархическим. В иерархическом списке, пользователи вложенных групп неявно входят в группы-родители.</p> -<p class="Usual">Группы формируются по структуре предприятия, а также по должностям и проектным командам, например:</p> +<p class="Usual">Группы можно вести по структуре предприятия, должностям и проектным командам, например:</p> <ul><li> <div>Предприятие</div> <ul><li> @@ -40,13 +41,7 @@ <div>Руководители предприятия</div> </li><li> <div>Группа общей инвентаризации</div></li></ul></li></ul><p> </p> -<p>Существует предопределенная группа "Все пользователи", которая неявно включает всех пользователей.</p> -<p>Назначение групп пользователей - это возможность указать в некоторых прикладных целях, не только пользователя, но и группу пользователей.<br>Так как ведение групп пользователей предполагается с учетом административного объединения пользователей, а не произвольного, они могут использоваться, например:</p> -<ul><li> -<div>при управлении доступом для назначения прав и ограничений;</div> -</li><li> -<div>при использовании бизнес-процессов в ролях исполнителей;</div> -</li><li> -<div>в прочих целях конкретного прикладного решения.</div></li></ul><p> </p> -<p>Ведение списка групп пользователей рекомендуется определить регламентом предприятия на основе распоряжений.<br>Исполнителем распоряжений, изменяющим список и состав групп пользователей, является администратор пользователей.<br>Такой подход позволит осмысленно применять группы пользователей различными пользователями информационной базы.</p> -<p> </p></body></html> \ No newline at end of file +<p>Существует предопределенная группа <strong>Все пользователи</strong>, которая неявно включает всех пользователей.</p> +<h3>См. также</h3> +<ul><li><a href="Catalog.ГруппыПользователей.Form.ФормаЭлемента/Help">Свойства группы пользователей</a> +</li><li><a href="Catalog.Пользователи/Help">Общие сведения о пользователях</a></li></ul><p> </p></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl index 31eb0fed2..1e602b269 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl @@ -1,9 +1,11 @@ -Перем СтарыйРодитель; +Перем СтарыйРодитель; // Значение родителя группы до изменения для использования +// в обработчике события ПриЗаписи. -// Обработчик ПередЗаписью блокирует недопустимые действия с предопределенной -// группой "Все пользователи". -// +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +// Блокирует недопустимые действия с предопределенной группой "Все пользователи". Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда @@ -12,16 +14,22 @@ Если Ссылка = Справочники.ГруппыПользователей.ВсеПользователи Тогда Если НЕ Родитель.Пустая() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Предопределенная группа ""Все пользователи"" может быть только в корне.'"), , , , Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Предопределенная группа ""Все пользователи"" может быть только в корне.'"), + , , , Отказ); Возврат; КонецЕсли; Если Состав.Количество() > 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Добавление пользователей в группу ""Все пользователи"" не поддерживается.'"), , , , Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Добавление пользователей в группу ""Все пользователи"" не поддерживается.'"), + , , , Отказ); Возврат; КонецЕсли; Иначе Если Родитель = Справочники.ГруппыПользователей.ВсеПользователи Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Предопределенная группа ""Все пользователи"" не может быть родителем.'"), , , , Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Предопределенная группа ""Все пользователи"" не может быть родителем.'"), + , , , Отказ); Возврат; КонецЕсли; @@ -46,10 +54,47 @@ Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + ПроверенныеРеквизитыОбъекта = Новый Массив; + Ошибки = Неопределено; + + // Проверка использования родителя. Если Родитель = Справочники.ГруппыПользователей.ВсеПользователи Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Предопределенная группа ""Все пользователи"" не может быть родителем.'"),, "Объект.Родитель",, Отказ); + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.Родитель", + НСтр("ru = 'Предопределенная группа ""Все пользователи"" не может быть родителем.'")); КонецЕсли; + // Проверка незаполненных и повторяющихся пользователей. + ПроверенныеРеквизитыОбъекта.Добавить("Состав.Пользователь"); + + Для каждого ТекущаяСтрока Из Состав Цикл; + НомерСтроки = Состав.Индекс(ТекущаяСтрока); + + // Проверка заполнения значения. + Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.Пользователь) Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.Состав[%1].Пользователь", + НСтр("ru = 'Пользователь не выбран.'"), + "Объект.Состав", + НомерСтроки, + НСтр("ru = 'Пользователь в строке %1 не выбран.'")); + Продолжить; + КонецЕсли; + + // Проверка наличия повторяющихся значений. + НайденныеЗначения = Состав.НайтиСтроки(Новый Структура("Пользователь", ТекущаяСтрока.Пользователь)); + Если НайденныеЗначения.Количество() > 1 Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.Состав[%1].Пользователь", + НСтр("ru = 'Пользователь повторяется.'"), + "Объект.Состав", + НомерСтроки, + НСтр("ru = 'Пользователь в строке %1 повторяется.'")); + КонецЕсли; + КонецЦикла; + + ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); + + ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, ПроверенныеРеквизитыОбъекта); + КонецПроцедуры - diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl index 55e887879..00e1df012 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl @@ -1,14 +1,13 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Быстрый доступ к команде ""%1""'"), - Параметры.ПредставлениеКоманды); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Быстрый доступ к команде ""%1""'"), + Параметры.ПредставлениеКоманды + ); Для Каждого ПользовательСтрока Из Параметры.ПользователиСБыстрымДоступом Цикл НоваяСтрока = ПользователиКороткогоСписка.Добавить(); @@ -19,27 +18,30 @@ КонецПроцедуры -&НаСервере -Процедура ЗаполнитьТаблицуПользователейСКороткимСписком() +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ВсеПользователи + +&НаКлиенте +Процедура ВсеПользователиПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - МассивПользователей = ПользователиКороткогоСписка.Выгрузить().ВыгрузитьКолонку("Пользователь"); + Если ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Число") Тогда + Возврат; + КонецЕсли; - ТекстЗапроса = "ВЫБРАТЬ - | Истина КАК Используется, - | Ссылка КАК Пользователь - |ИЗ - | Справочник.Пользователи - |ГДЕ - | НЕ ПометкаУдаления - | И НЕ Ссылка В (&МассивПользователей)"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.Параметры.Вставить("МассивПользователей", МассивПользователей); - ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(), "ВсеПользователи"); + ПеренестиПользователей(ВсеПользователи, ПользователиКороткогоСписка, ПараметрыПеретаскивания.Значение); КонецПроцедуры +&НаКлиенте +Процедура ВсеПользователиПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ПользователиКороткогоСписка + &НаКлиенте Процедура ПользователиКороткогоСпискаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) @@ -58,23 +60,8 @@ КонецПроцедуры -&НаКлиенте -Процедура ВсеПользователиПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - - Если ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Число") Тогда - Возврат; - КонецЕсли; - - ПеренестиПользователей(ВсеПользователи, ПользователиКороткогоСписка, ПараметрыПеретаскивания.Значение); - -КонецПроцедуры - -&НаКлиенте -Процедура ВсеПользователиПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - - СтандартнаяОбработка = Ложь; - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура УбратьДоступККомандеУВсехПользователей(Команда) @@ -141,7 +128,29 @@ КонецПроцедуры -// Блок служебных функций +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЗаполнитьТаблицуПользователейСКороткимСписком() + + МассивПользователей = ПользователиКороткогоСписка.Выгрузить().ВыгрузитьКолонку("Пользователь"); + + ТекстЗапроса = "ВЫБРАТЬ + | Истина КАК Используется, + | Ссылка КАК Пользователь + |ИЗ + | Справочник.Пользователи + |ГДЕ + | НЕ ПометкаУдаления + | И НЕ Ссылка В (&МассивПользователей)"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.Параметры.Вставить("МассивПользователей", МассивПользователей); + ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(), "ВсеПользователи"); + +КонецПроцедуры &НаКлиенте Процедура ПеренестиПользователей(Приемник, Источник, МассивПеретаскиваемыхЭлементов) diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form index cc7a2057d..a6b62f2cb 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form @@ -344,15 +344,14 @@ <common>true</common> </edit> <columns> - <name>ИмяРаздела</name> + <name>Раздел</name> <title> <key>ru</key> - <value>Имя раздела</value> + <value>Раздел</value> 1 - String - + CatalogRef.ИдентификаторыОбъектовМетаданных true diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Module.bsl index 44b8e1519..312dabca7 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Module.bsl @@ -1,12 +1,36 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ЗаполнитьТаблицуДоступныхРазделов(Параметры.ВидОбработки); + // Заполнение таблицы доступных разделов - Для Каждого РазделЭлемент Из Параметры.Разделы Цикл - ИмяРаздела = РазделЭлемент.Значение; - НайденнаяСтрока = Разделы.НайтиСтроки(Новый Структура("ИмяРаздела", ИмяРаздела)); + ИспользуемыеРазделы = Новый Массив; + Если Параметры.ВидОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка Тогда + ДополнительныеОтчетыИОбработкиПереопределяемый.ОпределитьРазделыСДополнительнымиОбработками(ИспользуемыеРазделы); + Иначе + ДополнительныеОтчетыИОбработкиПереопределяемый.ОпределитьРазделыСДополнительнымиОтчетами(ИспользуемыеРазделы); + КонецЕсли; + + РабочийСтол = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола(); + + Для Каждого Раздел Из ИспользуемыеРазделы Цикл + НоваяСтрока = Разделы.Добавить(); + Если Раздел = РабочийСтол Тогда + НоваяСтрока.Раздел = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); + Иначе + НоваяСтрока.Раздел = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Раздел); + КонецЕсли; + НоваяСтрока.Представление = ДополнительныеОтчетыИОбработки.ПолучитьИмяРабочегоМеста(НоваяСтрока.Раздел); + КонецЦикла; + + Разделы.Сортировать("Представление Возр"); + + // Включение разделов + + Для Каждого ЭлементСписка Из Параметры.Разделы Цикл + НайденнаяСтрока = Разделы.НайтиСтроки(Новый Структура("Раздел", ЭлементСписка.Значение)); Если НайденнаяСтрока.Количество() = 1 Тогда НайденнаяСтрока[0].Используется = Истина; КонецЕсли; @@ -14,24 +38,8 @@ КонецПроцедуры -&НаСервере -Процедура ЗаполнитьТаблицуДоступныхРазделов(ВидОбработки) - - Если ВидОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка Тогда - ТаблицаКоманд = ДополнительныеОтчетыИОбработкиПереопределяемый.ПолучитьОбщиеКомандыДополнительныхОбработок(); - Иначе - ТаблицаКоманд = ДополнительныеОтчетыИОбработкиПереопределяемый.ПолучитьОбщиеКомандыДополнительныхОтчетов(); - КонецЕсли; - - Для Каждого ОписаниеКоманды Из ТаблицаКоманд Цикл - НоваяСтрока = Разделы.Добавить(); - НоваяСтрока.ИмяРаздела = ОписаниеКоманды.ИмяКоманды; - НоваяСтрока.Представление = ОписаниеКоманды.ИмяРабочегоМеста; - КонецЦикла; - - Разделы.Сортировать("Представление Возр"); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ОК(Команда) @@ -40,10 +48,11 @@ Для Каждого РазделЭлемент Из Разделы Цикл Если РазделЭлемент.Используется Тогда - Результат.Добавить(РазделЭлемент.ИмяРаздела); + Результат.Добавить(РазделЭлемент.Раздел); КонецЕсли; КонецЦикла; Закрыть(Результат); КонецПроцедуры + diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/ConditionalAppearance.dcssca b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/ConditionalAppearance.dcssca new file mode 100644 index 000000000..8aaf77690 --- /dev/null +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/ConditionalAppearance.dcssca @@ -0,0 +1,53 @@ + + + + + + Список + + + + + Список.Публикация + Equal + Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки + + + + + ЦветТекста + style:ПросроченныеДанныеЦвет + + + false + Шрифт + + + + + + + + Список + + + + + Список.Публикация + Equal + Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.НеИспользуется + + + + + ЦветТекста + style:НедоступныеДанныеЦвет + + + false + Шрифт + + + + + diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form index 7f258d66e..a9eccfd34 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form @@ -1,5 +1,171 @@ + + БыстрыеОтборы + 22 + + ВидОтбор + 20 + true + true + + true + + + ВидОтбор + + + OnChange + ВидОтборПриИзменении + + + ВидОтборРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ВидОтборКонтекстноеМеню + 21 + true + + InputField + Enter + true + Left + true + + true + true + false + true + false + true + true + true + OnActivate + true + Normal + + + + ПубликацияОтбор + 17 + true + true + + true + + + ПубликацияОтбор + + + OnChange + ПубликацияОтборПриИзменении + + + ПубликацияОтборРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ПубликацияОтборКонтекстноеМеню + 18 + true + + InputField + Enter + true + Left + true + + 26 + true + true + false + true + false + true + true + true + OnActivate + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Быстрые отборы</value> + + + ru + Быстрые отборы + + + БыстрыеОтборыРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + КоманднаяПанель + 19 + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + CommandBar + + Left + Form + + Список 1 @@ -28,7 +194,7 @@ true НаименованиеРасширеннаяПодсказка - 26 + 39 Label true true @@ -64,7 +230,7 @@ ВидРасширеннаяПодсказка - 28 + 41 Label true true @@ -100,7 +266,7 @@ ПубликацияРасширеннаяПодсказка - 30 + 43 Label true true @@ -136,7 +302,7 @@ ВерсияРасширеннаяПодсказка - 32 + 45 Label true true @@ -172,7 +338,7 @@ ОтветственныйРасширеннаяПодсказка - 34 + 47 Label true true @@ -195,6 +361,40 @@ true + + ИмяОбъекта + 15 + true + true + + + Список.ИмяОбъекта + + + ИмяОбъектаРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ИмяОбъектаКонтекстноеМеню + 16 + true + + LabelField + Enter + true + Left + true + + true + true + + СписокКоманднаяПанель 3 @@ -202,10 +402,10 @@ СписокСтрокаПоиска - 17 + 30 СписокСтрокаПоискаРасширеннаяПодсказка - 19 + 32 Label true true @@ -215,7 +415,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 18 + 31 true Список @@ -225,10 +425,10 @@ СписокСостояниеПросмотра - 20 + 33 СписокСостояниеПросмотраРасширеннаяПодсказка - 22 + 35 Label true true @@ -238,7 +438,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 21 + 34 true ViewStatusAddition @@ -249,10 +449,10 @@ СписокУправлениеПоиском - 23 + 36 СписокУправлениеПоискомРасширеннаяПодсказка - 25 + 38 Label true true @@ -262,7 +462,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 24 + 37 true SearchControlAddition @@ -273,7 +473,7 @@ СписокРасширеннаяПодсказка - 16 + 29 Label true true @@ -324,40 +524,24 @@ true
    + None + false ФормаКоманднаяПанель -1 - - СписокВыполнитьОбработку - 6 - true - true - - true - - false - - СписокВыполнитьОбработкуРасширеннаяПодсказка - 15 - Label - true - true - - Left - - - 0 - Normal - Auto - true - true - UserCmds - Auto - Left true + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + + + OnCreateAtServer + ПриСозданииНаСервере + DontBlock + Use true true true @@ -380,6 +564,9 @@ true + + Список.ИмяОбъекта +
    true
    ВЫБРАТЬ @@ -390,19 +577,26 @@ ДополнительныеОтчетыИОбработки.Ответственный, ДополнительныеОтчетыИОбработки.Публикация, ДополнительныеОтчетыИОбработки.Вид, - ВЫБОР - КОГДА ДополнительныеОтчетыИОбработки.ЭтоГруппа - ТОГДА 0 - КОГДА ДополнительныеОтчетыИОбработки.Публикация = Значение(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется) - ТОГДА 2 - КОГДА ДополнительныеОтчетыИОбработки.Публикация = Значение(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.НеИспользуется) - ТОГДА 1 - КОГДА ДополнительныеОтчетыИОбработки.Публикация = Значение(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки) - ТОГДА 3 - КОНЕЦ КАК ИндексКартинкиСтатусаПубликации - + ДополнительныеОтчетыИОбработки.ИмяОбъекта ИЗ - Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки + Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки +ГДЕ + ВЫБОР + КОГДА &ПубликацияОтбор = НЕОПРЕДЕЛЕНО + ТОГДА ИСТИНА + КОГДА &ПубликацияОтбор = 1 + ТОГДА ДополнительныеОтчетыИОбработки.Публикация В (&ВсеПубликацииКромеНеиспользуюшихся) + ИНАЧЕ ДополнительныеОтчетыИОбработки.Публикация = &ПубликацияОтбор + КОНЕЦ + И ВЫБОР + КОГДА &ВидОтбор = НЕОПРЕДЕЛЕНО + ТОГДА ИСТИНА + КОГДА &ВидОтбор = 1 + ТОГДА ДополнительныеОтчетыИОбработки.Вид В (&ВидыДопОтчетов) + КОГДА &ВидОтбор = 2 + ТОГДА НЕ ДополнительныеОтчетыИОбработки.Вид В (&ВидыДопОтчетов) + ИНАЧЕ ДополнительныеОтчетыИОбработки.Вид = &ВидОтбор + КОНЕЦ Catalog.ДополнительныеОтчетыИОбработки true true @@ -411,6 +605,42 @@ true + + ПубликацияОтбор + + <key>ru</key> + <value>Публикация</value> + + 2 + + + true + + + true + + + ПубликацияОтбор + + + + ВидОтбор + + <key>ru</key> + <value>Вид</value> + + 3 + + + true + + + true + + + ВидОтбор + + diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..1067ad0df --- /dev/null +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,75 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("Заголовок") Тогда + АвтоЗаголовок = Ложь; + Заголовок = Параметры.Заголовок; + КонецЕсли; + Если Параметры.Свойство("Отображение") Тогда + Элементы.Список.Отображение = ОтображениеТаблицы[Параметры.Отображение]; + КонецЕсли; + + ВсеПубликацииКромеНеиспользуюшихся = Новый Массив; + ВсеПубликацииКромеНеиспользуюшихся.Добавить(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется); + ВсеПубликацииКромеНеиспользуюшихся.Добавить(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки); + + ПредставлениеМассива = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 или %2'"), + Строка(ВсеПубликацииКромеНеиспользуюшихся[0]), + Строка(ВсеПубликацииКромеНеиспользуюшихся[1]) + ); + + СписокВыбора = Элементы.ПубликацияОтбор.СписокВыбора; + СписокВыбора.Добавить(Неопределено, НСтр("ru = 'Все'")); + СписокВыбора.Добавить(1, ПредставлениеМассива); + Для Каждого ЗначениеПеречисления Из Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок Цикл + СписокВыбора.Добавить(ЗначениеПеречисления, Строка(ЗначениеПеречисления)); + КонецЦикла; + + СписокВыбора = Элементы.ВидОтбор.СписокВыбора; + СписокВыбора.Добавить(Неопределено, НСтр("ru = 'Все отчеты и обработки'")); + СписокВыбора.Добавить(1, НСтр("ru = 'Только отчеты'")); + СписокВыбора.Добавить(2, НСтр("ru = 'Только обработки'")); + Для Каждого ЗначениеПеречисления Из Перечисления.ВидыДополнительныхОтчетовИОбработок Цикл + СписокВыбора.Добавить(ЗначениеПеречисления, Строка(ЗначениеПеречисления)); + КонецЦикла; + + ВидыДопОтчетов = Новый Массив; + ВидыДопОтчетов.Добавить(Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет); + ВидыДопОтчетов.Добавить(Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет); + + Список.Параметры.УстановитьЗначениеПараметра("ПубликацияОтбор", ПубликацияОтбор); + Список.Параметры.УстановитьЗначениеПараметра("ВидОтбор", ВидОтбор); + Список.Параметры.УстановитьЗначениеПараметра("ВидыДопОтчетов", ВидыДопОтчетов); + Список.Параметры.УстановитьЗначениеПараметра("ВсеПубликацииКромеНеиспользуюшихся", ВсеПубликацииКромеНеиспользуюшихся); +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + ПубликацияОтбор = Настройки.Получить("ПубликацияОтбор"); + ВидОтбор = Настройки.Получить("ВидОтбор"); + Список.Параметры.УстановитьЗначениеПараметра("ПубликацияОтбор", ПубликацияОтбор); + Список.Параметры.УстановитьЗначениеПараметра("ВидОтбор", ВидОтбор); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ПубликацияОтборПриИзменении(Элемент) + ЗначениеПараметраКД = Список.Параметры.Элементы.Найти("ПубликацияОтбор"); + Если ЗначениеПараметраКД.Значение <> ПубликацияОтбор Тогда + ЗначениеПараметраКД.Значение = ПубликацияОтбор; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВидОтборПриИзменении(Элемент) + ЗначениеПараметраКД = Список.Параметры.Элементы.Найти("ВидОтбор"); + Если ЗначениеПараметраКД.Значение <> ВидОтбор Тогда + ЗначениеПараметраКД.Значение = ВидОтбор; + КонецЕсли; +КонецПроцедуры + diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form index 58acd31a7..eec22d9ef 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form @@ -17,7 +17,7 @@ ГруппаРасширеннаяПодсказка - 80 + 82 Label true true @@ -58,7 +58,7 @@ НаименованиеРасширеннаяПодсказка - 82 + 84 Label true true @@ -104,7 +104,7 @@ ПубликацияРасширеннаяПодсказка - 85 + 87 Label true true @@ -145,7 +145,7 @@ ОтветственныйРасширеннаяПодсказка - 87 + 89 Label true true @@ -189,7 +189,7 @@ ГруппаПубликацияОтветственныйРасширеннаяПодсказка - 84 + 86 Label true true @@ -223,7 +223,7 @@ false УказатьНазначениеОбработкиРасширеннаяПодсказка - 91 + 93 Label true true @@ -254,7 +254,7 @@ Right ИспользоватьДляФормыСпискаРасширеннаяПодсказка - 92 + 94 Label true true @@ -288,7 +288,7 @@ Right ИспользоватьДляФормыОбъектаРасширеннаяПодсказка - 94 + 96 Label true true @@ -323,7 +323,7 @@ СтраницаНазначениеРасширеннаяПодсказка - 90 + 92 Label true true @@ -350,7 +350,7 @@ false УказатьРазделыКомандногоИнтерфейсаРасширеннаяПодсказка - 97 + 99 Label true true @@ -382,7 +382,7 @@ СтраницаРазделыРасширеннаяПодсказка - 96 + 98 Label true true @@ -412,7 +412,7 @@ true СтраницыРазделыНазначениеРасширеннаяПодсказка - 89 + 91 Label true true @@ -469,7 +469,7 @@ КомандыПредставлениеРасширеннаяПодсказка - 112 + 114 Label true true @@ -511,7 +511,7 @@ БыстрыйДоступПредставлениеРасширеннаяПодсказка - 114 + 116 Label true true @@ -553,7 +553,7 @@ None КомандыИспользованиеРасширеннаяПодсказка - 116 + 118 Label true true @@ -589,7 +589,7 @@ КомандыРасписаниеРасширеннаяПодсказка - 118 + 120 Label true true @@ -635,7 +635,7 @@ false КомандыОбработкиНастроитьБыстрыйДоступККомандеРасширеннаяПодсказка - 100 + 102 Label true true @@ -661,7 +661,7 @@ КомандыОбработкиНастроитьРасписаниеКомандыРасширеннаяПодсказка - 101 + 103 Label true true @@ -686,10 +686,10 @@ КомандыОбработкиСтрокаПоиска - 103 + 105 КомандыОбработкиСтрокаПоискаРасширеннаяПодсказка - 105 + 107 Label true true @@ -699,7 +699,7 @@ КомандыОбработкиСтрокаПоискаКонтекстноеМеню - 104 + 106 true КомандыОбработки @@ -709,10 +709,10 @@ КомандыОбработкиСостояниеПросмотра - 106 + 108 КомандыОбработкиСостояниеПросмотраРасширеннаяПодсказка - 108 + 110 Label true true @@ -722,7 +722,7 @@ КомандыОбработкиСостояниеПросмотраКонтекстноеМеню - 107 + 109 true ViewStatusAddition @@ -733,10 +733,10 @@ КомандыОбработкиУправлениеПоиском - 109 + 111 КомандыОбработкиУправлениеПоискомРасширеннаяПодсказка - 111 + 113 Label true true @@ -746,7 +746,7 @@ КомандыОбработкиУправлениеПоискомКонтекстноеМеню - 110 + 112 true SearchControlAddition @@ -757,7 +757,7 @@ КомандыОбработкиРасширеннаяПодсказка - 102 + 104 Label true true @@ -779,7 +779,7 @@ false КомандыОбработкиНастроитьБыстрыйДоступККоманде1РасширеннаяПодсказка - 98 + 100 Label true true @@ -805,7 +805,7 @@ КомандыОбработкиНастроитьРасписаниеКоманды1РасширеннаяПодсказка - 99 + 101 Label true true @@ -867,7 +867,7 @@ ВидРасширеннаяПодсказка - 129 + 131 Label true true @@ -915,7 +915,7 @@ ИмяФайлаРасширеннаяПодсказка - 131 + 133 Label true true @@ -964,7 +964,7 @@ ВерсияРасширеннаяПодсказка - 133 + 135 Label true true @@ -995,6 +995,48 @@ + + ИмяОбъекта + 78 + true + true + + + Объект.ИмяОбъекта + + + ИмяОбъектаРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + + ИмяОбъектаКонтекстноеМеню + 79 + true + + LabelField + Enter + true + Left + true + + 1 + true + true + + System.DefaultGUIFont + true + false + false + false + + + Информация 26 @@ -1012,7 +1054,7 @@ ИнформацияРасширеннаяПодсказка - 135 + 139 Label true true @@ -1059,7 +1101,7 @@ ПустаяДекорацияРасширеннаяПодсказка - 139 + 143 Label true true @@ -1095,7 +1137,7 @@ ГруппаБезТекстаРасширеннаяПодсказка - 138 + 142 Label true true @@ -1127,7 +1169,7 @@ ПредупреждениеОНебезопасномРежимеРасширеннаяПодсказка - 141 + 145 Label true true @@ -1166,7 +1208,7 @@ ГруппаПредупреждениеРасширеннаяПодсказка - 140 + 144 Label true true @@ -1197,7 +1239,7 @@ ИнформацияОБезопасномРежимеРасширеннаяПодсказка - 143 + 147 Label true true @@ -1238,7 +1280,7 @@ ГруппаИнформацияРасширеннаяПодсказка - 142 + 146 Label true true @@ -1268,7 +1310,7 @@ true ГруппаДополнительнаяИнформацияРасширеннаяПодсказка - 137 + 141 Label true true @@ -1296,7 +1338,7 @@ СведенияОбОбработкеРасширеннаяПодсказка - 128 + 130 Label true true @@ -1333,7 +1375,7 @@ КомментарийРасширеннаяПодсказка - 144 + 148 Label true true @@ -1376,7 +1418,7 @@ false ЗагрузитьФайлОбработкиОтчетаРасширеннаяПодсказка - 78 + 80 Label true true @@ -1403,7 +1445,7 @@ false СохранитьФайлОбработкиОтчетаРасширеннаяПодсказка - 79 + 81 Label true true @@ -1438,7 +1480,7 @@ FillCheckProcessingAtServer ОбработкаПроверкиЗаполненияНаСервере - LockOwner + DontBlock true true Vertical @@ -1534,21 +1576,6 @@ - - ДвоичныеДанныеОбработки - - <key>ru</key> - <value>Двоичные данные обработки</value> - - 4 - - - true - - - true - - РегистрацияОбработки @@ -1567,10 +1594,10 @@ </edit> </attributes> <attributes> - <name>ЭтоНовыйОбъект</name> + <name>ЭтоНовый</name> <title> <key>ru</key> - <value>Это новый объект</value> + <value>Это новый</value> 6 @@ -1774,6 +1801,41 @@ true + + АдресДанныхОбработки + + <key>ru</key> + <value>Адрес данных обработки</value> + + 8 + + String + + + + true + + + true + + + + ВидОтчет + + <key>ru</key> + <value>Вид отчет</value> + + 4 + + EnumRef.ВидыДополнительныхОтчетовИОбработок + + + true + + + true + + ЗагрузитьФайлОбработкиОтчета @@ -1913,6 +1975,14 @@ <commandBar/> </commandInterface> <extInfo xsi:type="form:CatalogFormExtInfo"> + <handlers> + <event>AfterWriteAtServer</event> + <name>ПослеЗаписиНаСервере</name> + </handlers> + <handlers> + <event>OnReadAtServer</event> + <name>ПриЧтенииНаСервере</name> + </handlers> <handlers> <event>BeforeWriteAtServer</event> <name>ПередЗаписьюНаСервере</name> diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html index c6440a3f3..0794222a3 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html @@ -9,4 +9,6 @@ </li><li> <div><strong>не используется</strong> — обработка не доступна для использования;</div> </li><li> -<div><strong>режим отладки</strong> — обработка доступна для использования только пользователю с ролью "Добавление и изменение дополнительных обработок" или ролью "Полные права".</div></li></ul><p>С помощью команд <strong>Загрузить файл</strong> и <strong>Выгрузить файл</strong> можно обновить обработку в информационной базе, а также выгрузить ее из базы а в файл.</p></body></html> \ No newline at end of file +<div><strong>режим отладки</strong> — обработка доступна для использования только пользователю с ролью "Добавление и изменение дополнительных обработок" или ролью "Полные права".</div></li></ul><p>С помощью команд <strong>Загрузить файл</strong> и <strong>Выгрузить файл</strong> можно обновить обработку в информационной базе, а также выгрузить ее из базы а в файл.</p> +<p>Как правило, большинство обработок должны выполняться в безопасном режиме. Это гарантрирует, что они не содержат «ненадежный» программный код, который выполняется на сервере. Однако некоторые обработки могут требовать выполнения в небезопасном режиме. Такие обработки следует загружать только из надежных источников (поставщиков) или перед загрузкой самостоятельно выполнять их аудит.</p> +<p>Подробнее о безопасном режиме работы см. документацию по платформе 1С:Предприятие.</p></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl index 65e71fe99..c71113e1d 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ -// &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -8,9 +7,9 @@ РегистрацияОбработки = Ложь; Если Объект.Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда - ЭтоНовыйОбъект = Истина; + ЭтоНовый = Истина; Иначе - ЭтоНовыйОбъект = Ложь; + ЭтоНовый = Ложь; Если ДополнительныеОтчетыИОбработки.ПроверитьНазначаемаяОбработка(Объект.Вид) Тогда ПолноеНазначениеЗначение = ДополнительныеОтчетыИОбработки.ПолучитьПолноеНазначениеПоВидуДополнительнойВнешнейОбработки(Объект.Вид); ЗначениеВРеквизитФормы(ПолноеНазначениеЗначение, "ПолноеНазначение"); @@ -21,14 +20,17 @@ УстановитьЭлементыФормы(); + ВидДополнительныйОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет; + ВидОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет; + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - Если ЭтоНовыйОбъект Тогда + Если ЭтоНовый Тогда - Если НЕ ОткрытьДиалогЗагрузкиФайлаОбработкиОтчета() Тогда + Если НЕ ОткрытьДиалогЗагрузкиФайлаОбработкиОтчета(Истина) Тогда Отказ = Истина; КонецЕсли; @@ -36,73 +38,6 @@ КонецПроцедуры -&НаСервере -Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - - Если РегистрацияОбработки Тогда - ТекущийОбъект.ХранилищеОбработки = Новый ХранилищеЗначения(ДвоичныеДанныеОбработки , Новый СжатиеДанных(9)); - РегистрацияОбработки = Ложь; - КонецЕсли; - - Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка - ИЛИ Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда - - ТекущийОбъект.ДополнительныеСвойства.Вставить("КомандыОбработки", РеквизитФормыВЗначение("КомандыОбработки")); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗагрузитьФайлОбработкиОтчета(Команда) - - ОткрытьДиалогЗагрузкиФайлаОбработкиОтчета(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыгрузитьФайлОбработкиОтчета(Команда) - - Если ПодключитьРасширениеРаботыСФайлами() Тогда - - ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - ДиалогСохраненияФайла.ПолноеИмяФайла = Объект.ИмяФайла; - ДиалогСохраненияФайла.Фильтр = "Внешние обработки|*.epf|Внешние отчеты|*.erf"; - ДиалогСохраненияФайла.МножественныйВыбор = Ложь; - ДиалогСохраненияФайла.Заголовок = НСтр("ru = 'Укажите файл'"); - - Если ДиалогСохраненияФайла.Выбрать() Тогда - - Адрес = ПоместитьФайлОбработкиВоВременноеХранилище(); - - Если Адрес = Неопределено Тогда - Предупреждение(НСтр("ru = 'Нет данных для обработки.'")); - Возврат; - КонецЕсли; - - ПолучаемыеФайлы = Новый Массив; - ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(, Адрес)); - - ПолученныеФайлы = Новый Массив; - - ПолучитьФайлы(ПолучаемыеФайлы, ПолученныеФайлы, ДиалогСохраненияФайла.ПолноеИмяФайла, Ложь); - КонецЕсли; - - Иначе - - Адрес = ПоместитьФайлОбработкиВоВременноеХранилище(); - - Если Адрес = Неопределено Тогда - Предупреждение(НСтр("ru = 'Нет данных для обработки.'")); - Возврат; - КонецЕсли; - - ПолучитьФайл(Адрес, Объект.ИмяФайла, Истина); - - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) @@ -128,74 +63,51 @@ КонецПроцедуры -&НаКлиенте -Процедура УказатьНазначениеОбработки(Команда) +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + АдресДанныхОбработки = ПоместитьВоВременноеХранилище(ТекущийОбъект.ХранилищеОбработки.Получить(), УникальныйИдентификатор); +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - ФильтрПоОбъектамМетаданных = ПолучитьФильтрПоОбъектамМетаданных(Объект.Вид); + Если РегистрацияОбработки Тогда + ДвоичныеДанныеОбработки = ПолучитьИзВременногоХранилища(АдресДанныхОбработки); + ТекущийОбъект.ХранилищеОбработки = Новый ХранилищеЗначения(ДвоичныеДанныеОбработки , Новый СжатиеДанных(9)); + РегистрацияОбработки = Ложь; + КонецЕсли; - ВыбранныеОбъектыМетаданных = Новый СписокЗначений; - - Для Каждого ЭлементНазначение ИЗ Объект.Назначение Цикл - ВыбранныеОбъектыМетаданных.Добавить(ЭлементНазначение.ПолноеИмяОбъектаМетаданных); - КонецЦикла; - - ПараметрыФормы = Новый Структура; - - ПараметрыФормы.Вставить("ФильтрПоОбъектамМетаданных", ФильтрПоОбъектамМетаданных); - ПараметрыФормы.Вставить("ВыбранныеОбъектыМетаданных", ВыбранныеОбъектыМетаданных); - - ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыФормы); + Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка + ИЛИ Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда + + ТекущийОбъект.ДополнительныеСвойства.Вставить("КомандыОбработки", РеквизитФормыВЗначение("КомандыОбработки")); + + КонецЕсли; КонецПроцедуры -&НаСервереБезКонтекста -Функция ПолучитьФильтрПоОбъектамМетаданных(ВидОбработки) - - ФильтрПоОбъектамМетаданных = Новый СписокЗначений; - - Если ВидОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта Тогда - ОбщаяКоманда = Метаданные.ОбщиеКоманды.ДополнительныеОтчетыИОбработкиЗаполнениеОбъекта; - - ИначеЕсли ВидОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Тогда - ОбщаяКоманда = Метаданные.ОбщиеКоманды.ДополнительныеОтчетыИОбработкиОтчеты; - - ИначеЕсли ВидОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма Тогда - ОбщаяКоманда = Метаданные.ОбщиеКоманды.ДополнительныеОтчетыИОбработкиПечатныеФормы; - - ИначеЕсли ВидОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов Тогда - ОбщаяКоманда = Метаданные.ОбщиеКоманды.ДополнительныеОтчетыИОбработкиСозданиеСвязанныхОбъектов; - КонецЕсли; - - Для Каждого ТипПараметраКоманды Из ОбщаяКоманда.ТипПараметраКоманды.Типы() Цикл - ФильтрПоОбъектамМетаданных.Добавить(Метаданные.НайтиПоТипу(ТипПараметраКоманды).ПолноеИмя()); - КонецЦикла; - - Возврат ФильтрПоОбъектамМетаданных; - -КонецФункции +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + ЭтоНовый = Ложь; +КонецПроцедуры -&НаКлиенте -Процедура НастроитьРасписаниеКоманды(Команда) +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) - ТекущиеДанные = Элементы.КомандыОбработки.ТекущиеДанные; - - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ТекущиеДанные.Разрешено Тогда - Отказ = Ложь; - УстановитьРасписание(ТекущиеДанные, Отказ); - Если НЕ Отказ Тогда - Модифицированность = Истина; + Если ДополнительныеОтчетыИОбработки.ПроверитьНазначаемаяОбработка(Объект.Вид) Тогда + + Если НЕ Объект.ИспользоватьДляФормыОбъекта И НЕ Объект.ИспользоватьДляФормыСписка Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Необходимо указать использование обработки, как минимум для одной формы'"),,,"Объект.ИспользоватьДляФормыОбъекта", Отказ); КонецЕсли; - Иначе - Предупреждение(НСтр("ru = 'Команда используется только на клиенте. - |Регламентное задание можно настраивать только для команд исполняемых в серверном контексте.'")); + КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ КомандыОбработки + &НаКлиенте Процедура КомандыОбработкиПередНачаломИзменения(Элемент, Отказ) @@ -204,8 +116,10 @@ Если НЕ Элемент.ТекущиеДанные.Разрешено Тогда Отказ = Истина; - Предупреждение(НСтр("ru = 'Команда используется только на клиенте. - |Регламентное задание можно настраивать только для команд исполняемых в серверном контексте.'")); + Предупреждение( + НСтр("ru = 'Команда используется только на клиенте. + |Регламентное задание можно настраивать только для команд исполняемых в серверном контексте.'") + ); ИначеЕсли Элемент.ТекущиеДанные.РасписаниеПредставление = стрРасписаниеНеЗадано()Тогда УстановитьРасписание(Элементы.КомандыОбработки.ТекущиеДанные, Отказ); @@ -242,101 +156,285 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ЗагрузитьФайлОбработкиОтчета(Команда) + + ОткрытьДиалогЗагрузкиФайлаОбработкиОтчета(Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузитьФайлОбработкиОтчета(Команда) + + Если НЕ ЭтоАдресВременногоХранилища(АдресДанныхОбработки) Тогда + Предупреждение(НСтр("ru = 'Нет данных для обработки.'")); + Возврат; + КонецЕсли; + + Если ПодключитьРасширениеРаботыСФайлами() Тогда + + ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + ДиалогСохраненияФайла.ПолноеИмяФайла = Объект.ИмяФайла; + ДиалогСохраненияФайла.Фильтр = ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения(); + ДиалогСохраненияФайла.ИндексФильтра = ?(Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет, 0, 1); + ДиалогСохраненияФайла.МножественныйВыбор = Ложь; + ДиалогСохраненияФайла.Заголовок = НСтр("ru = 'Укажите файл'"); + + Если ДиалогСохраненияФайла.Выбрать() Тогда + ПолучаемыеФайлы = Новый Массив; + ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(, АдресДанныхОбработки)); + ПолученныеФайлы = Новый Массив; + ПолучитьФайлы(ПолучаемыеФайлы, ПолученныеФайлы, ДиалогСохраненияФайла.ПолноеИмяФайла, Ложь); + КонецЕсли; + + Иначе + + ПолучитьФайл(АдресДанныхОбработки, Объект.ИмяФайла, Истина); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УказатьНазначениеОбработки(Команда) + + ФильтрПоОбъектамМетаданных = ПолучитьФильтрПоОбъектамМетаданных(Объект.Вид); + + ВыбранныеОбъектыМетаданных = Новый СписокЗначений; + + Для Каждого ЭлементНазначение ИЗ Объект.Назначение Цикл + ВыбранныеОбъектыМетаданных.Добавить(ЭлементНазначение.ПолноеИмяОбъектаМетаданных); + КонецЦикла; + + ПараметрыФормы = Новый Структура; + + ПараметрыФормы.Вставить("ФильтрПоОбъектамМетаданных", ФильтрПоОбъектамМетаданных); + ПараметрыФормы.Вставить("ВыбранныеОбъектыМетаданных", ВыбранныеОбъектыМетаданных); + + ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыФормы); + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьРасписаниеКоманды(Команда) + + ТекущиеДанные = Элементы.КомандыОбработки.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТекущиеДанные.Разрешено Тогда + Отказ = Ложь; + УстановитьРасписание(ТекущиеДанные, Отказ); + Если НЕ Отказ Тогда + Модифицированность = Истина; + КонецЕсли; + Иначе + Предупреждение(НСтр("ru = 'Команда используется только на клиенте. + |Регламентное задание можно настраивать только для команд исполняемых в серверном контексте.'")); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура УказатьРазделыКомандногоИнтерфейса(Команда) Разделы = Новый СписокЗначений; - - Для Каждого РазделЭлемент Из Объект.Разделы Цикл - Разделы.Добавить(РазделЭлемент.ИмяРаздела); + Для Каждого СтрокаТаблицы Из Объект.Разделы Цикл + Разделы.Добавить(СтрокаТаблицы.Раздел); КонецЦикла; - Результат = ОткрытьФормуМодально("Справочник.ДополнительныеОтчетыИОбработки.Форма.ПодборРазделов", - Новый Структура("Разделы,ВидОбработки", Разделы, Объект.Вид)); + СписокРазделов = ОткрытьФормуМодально( + "Справочник.ДополнительныеОтчетыИОбработки.Форма.ПодборРазделов", + Новый Структура("Разделы,ВидОбработки", Разделы, Объект.Вид) + ); - Если ТипЗнч(Результат) = Тип("СписокЗначений") Тогда + Если ТипЗнч(СписокРазделов) = Тип("СписокЗначений") Тогда Объект.Разделы.Очистить(); - Для Каждого РазделЗн Из Результат Цикл + Для Каждого ЭлементСписка Из СписокРазделов Цикл НоваяСтрока = Объект.Разделы.Добавить(); - НоваяСтрока.ИмяРаздела = РазделЗн.Значение; + НоваяСтрока.Раздел = ЭлементСписка.Значение; КонецЦикла; Модифицированность = Истина; КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура НастроитьБыстрыйДоступ(Команда) + + ТекущиеДанные = Элементы.КомандыОбработки.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + НастроитьБыстрыйДоступОбщийОбработчик(ТекущиеДанные); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервереБезКонтекста +Функция ПолучитьФильтрПоОбъектамМетаданных(ВидОбработки) + ФильтрПоОбъектамМетаданных = Новый СписокЗначений; + + Если ВидОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта Тогда + ОбщаяКоманда = Метаданные.ОбщиеКоманды.ДополнительныеОтчетыИОбработкиЗаполнениеОбъекта; + ИначеЕсли ВидОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Тогда + ОбщаяКоманда = Метаданные.ОбщиеКоманды.ДополнительныеОтчетыИОбработкиОтчеты; + ИначеЕсли ВидОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма Тогда + ОбщаяКоманда = Метаданные.ОбщиеКоманды.ДополнительныеОтчетыИОбработкиПечатныеФормы; + ИначеЕсли ВидОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов Тогда + ОбщаяКоманда = Метаданные.ОбщиеКоманды.ДополнительныеОтчетыИОбработкиСозданиеСвязанныхОбъектов; + КонецЕсли; + + Для Каждого ТипПараметраКоманды Из ОбщаяКоманда.ТипПараметраКоманды.Типы() Цикл + ФильтрПоОбъектамМетаданных.Добавить(Метаданные.НайтиПоТипу(ТипПараметраКоманды).ПолноеИмя()); + КонецЦикла; + + Возврат ФильтрПоОбъектамМетаданных; +КонецФункции &НаСервере -// Получает файл обработки из временного хранилища, пытается создать объект -// обработки (внешнего отчета) и получает информацию из объекта внешней обработки (отчета) -// -Функция ЗарегистрироватьОбработку(АдресВоВременномХранилище, - ИмяФайла, - РасширениеФайла) +Функция ЗарегистрироватьОбработку(ПараметрыРегистрации) + // Получает файл обработки из временного хранилища, пытается создать объект + // обработки (внешнего отчета) и получает информацию из объекта внешней обработки (отчета) - ДвоичныеДанныеОбработки = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище); - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РасширениеФайла); - ДвоичныеДанныеОбработки.Записать(ИмяВременногоФайла); + Если ПараметрыРегистрации.ОтключатьКонфликтующие = Истина Тогда + Для Каждого ЭлементСписка Из ПараметрыРегистрации.Конфликтующие Цикл + КонфликтующийОбъект = ЭлементСписка.Значение.ПолучитьОбъект(); + КонфликтующийОбъект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки; + КонфликтующийОбъект.Записать(); + КонецЦикла; + КонецЕсли; - Попытка - Если ВРег(РасширениеФайла) = "EPF" Тогда - ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяВременногоФайла, Истина); + Результат = Новый Структура("ИмяОбъекта, СтароеИмяОбъекта, Успешно, ИмяОбъектаЗанято, Конфликтующие, КраткоеПредставлениеОшибки"); + Результат.ИмяОбъектаЗанято = Ложь; + Результат.Успешно = Ложь; + Результат.СтароеИмяОбъекта = ?(ЭтоНовый, Объект.ИмяОбъекта, Объект.Ссылка.ИмяОбъекта); + + // Подключение и получение имени, под которым объект будет подключаться + Менеджер = ?(ПараметрыРегистрации.ЭтоОтчет, ВнешниеОтчеты, ВнешниеОбработки); + Результат.ИмяОбъекта = СокрЛП(Менеджер.Подключить(АдресДанныхОбработки, , Истина)); + + // Если отчет публикуется, то необходим контроль уникальности имени объекта, + // под которым дополнительный отчет регистрируется в системе + Если Объект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется Тогда + // Проверка имени + ТекстЗапроса = + "ВЫБРАТЬ + | ДОиО.Ссылка, + | ДОиО.Представление + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки КАК ДОиО + |ГДЕ + | ДОиО.ИмяОбъекта = &ИмяОбъекта + | И &УсловиеДопОтчет + | И ДОиО.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется) + | И ДОиО.ПометкаУдаления = ЛОЖЬ + | И ДОиО.Ссылка <> &Ссылка"; + + ВидыДопОтчетов = Новый Массив; + ВидыДопОтчетов.Добавить(ВидДополнительныйОтчет); + ВидыДопОтчетов.Добавить(ВидОтчет); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИмяОбъекта", Результат.ИмяОбъекта); + Запрос.УстановитьПараметр("ВидыДопОтчетов", ВидыДопОтчетов); + Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка); + + Если ПараметрыРегистрации.ЭтоОтчет Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеДопОтчет", "ДОиО.Вид В (&ВидыДопОтчетов)"); Иначе - ВнешняяОбработка = ВнешниеОтчеты.Создать(ИмяВременногоФайла, Истина); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеДопОтчет", "НЕ ДОиО.Вид В (&ВидыДопОтчетов)"); КонецЕсли; - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - Возврат Ложь; - КонецПопытки; + + Запрос.Текст = ТекстЗапроса; + + УстановитьПривилегированныйРежим(Истина); + Конфликтующие = Запрос.Выполнить().Выгрузить(); + УстановитьПривилегированныйРежим(Ложь); + + Если Конфликтующие.Количество() > 0 Тогда + Результат.ИмяОбъектаЗанято = Истина; + Результат.Конфликтующие = Новый СписокЗначений; + Для Каждого СтрокаТаблицы Из Конфликтующие Цикл + Результат.Конфликтующие.Добавить(СтрокаТаблицы.Ссылка, СтрокаТаблицы.Представление); + КонецЦикла; + Возврат Результат; + КонецЕсли; + КонецЕсли; + + // Получение сведений о внешней обработке + ВнешняяОбработка = Менеджер.Создать(Результат.ИмяОбъекта); Попытка РегистрационныеДанные = ВнешняяОбработка.СведенияОВнешнейОбработке(); Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Возможно, обработка (отчет) устарела или не является дополнительной:'") - + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - Возврат Ложь; + Префикс = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка получения сведений о внешней обработке ""%1"" при ее загрузке:'"), + ПараметрыРегистрации.ИмяФайла + ) + Символы.ПС; + Если Не ЭтоНовый Тогда + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Дополнительные отчеты и обработки'"), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники.ДополнительныеОтчетыИОбработки, + Объект.Ссылка, + Префикс + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецЕсли; + Результат.КраткоеПредставлениеОшибки = Префикс + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Результат; КонецПопытки; Если РегистрационныеДанные.БезопасныйРежим - ИЛИ Пользователи.ЭтоПолноправныйПользовательИБ() - ИЛИ ПравоДоступа("Администрирование", Метаданные) Тогда + ИЛИ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда // ничего не делаем Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Для добавления обработок запускаемых в небезопасном режиме требуется право ""Администрирование"".'")); - Возврат Ложь; + Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Для добавления обработок запускаемых в небезопасном режиме требуются полные права.'"); + Возврат Результат; КонецЕсли; - ОбъектЗначение = РеквизитФормыВЗначение("Объект"); - - Если Объект.ИмяФайла = ИмяФайла - И Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок[РегистрационныеДанные.Вид] Тогда - // если это перерегистрация той же обработи - не очищаем назначение - Иначе - ОбъектЗначение.Назначение.Очистить(); + Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок[РегистрационныеДанные.Вид]; + Если ПараметрыРегистрации.ЭтоОтчет <> (Вид = ВидДополнительныйОтчет ИЛИ Вид = ВидОтчет) Тогда + Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Вид обработки, указанный в сведениях о внешней обработке, не соответствует её расширению.'"); + Возврат Результат; КонецЕсли; // Инициализация сведений об обработке - ОбъектЗначение.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок[РегистрационныеДанные.Вид]; + ОбъектЗначение = РеквизитФормыВЗначение("Объект"); ОбъектЗначение.Наименование = РегистрационныеДанные.Наименование; ОбъектЗначение.Версия = РегистрационныеДанные.Версия; ОбъектЗначение.БезопасныйРежим = РегистрационныеДанные.БезопасныйРежим; ОбъектЗначение.Информация = РегистрационныеДанные.Информация; + ОбъектЗначение.ИмяФайла = ПараметрыРегистрации.ИмяФайла; + ОбъектЗначение.ИмяОбъекта = Результат.ИмяОбъекта; - // Устанавливаем имя файла обработки - ОбъектЗначение.ИмяФайла = ИмяФайла; + // Загружена другая обработка (изменилось имя объекта или вид обработки) + Если Объект.ИмяОбъекта <> Результат.ИмяОбъекта ИЛИ Объект.Вид <> Вид Тогда + ОбъектЗначение.Назначение.Очистить(); + ОбъектЗначение.Вид = Вид; + КонецЕсли; - // Если новая обработка или не заполнено назначение - устанавливаем назначение из обработки - Если (Объект.Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() - ИЛИ ОбъектЗначение.Назначение.Количество() = 0) - И (ОбъектЗначение.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта + // Если не заполнено назначение - устанавливаем назначение из обработки + Если + ( + ЭтоНовый + ИЛИ ОбъектЗначение.Назначение.Количество() = 0 + ) + И ( + ОбъектЗначение.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта ИЛИ ОбъектЗначение.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет ИЛИ ОбъектЗначение.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма - ИЛИ ОбъектЗначение.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов) - ТОГДА + ИЛИ ОбъектЗначение.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов + ) Тогда ОбъектЗначение.ИспользоватьДляФормыОбъекта = Истина; ОбъектЗначение.ИспользоватьДляФормыСписка = Истина; @@ -404,7 +502,7 @@ КонецЦикла; - ОбъектЗначение.Ответственный = ОбщегоНазначения.ТекущийПользователь(); + ОбъектЗначение.Ответственный = Пользователи.ТекущийПользователь(); ЗначениеВРеквизитФормы(ОбъектЗначение, "Объект"); @@ -412,8 +510,9 @@ ЗаполнитьКоманды(КомандыСохраненные); - Возврат Истина; + Результат.Успешно = Истина; + Возврат Результат; КонецФункции &НаСервере @@ -450,7 +549,7 @@ МассивПользователей = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); НоваяКоманда.БыстрыйСписокДоступа.ЗагрузитьЗначения(МассивПользователей); - НоваяКоманда.БыстрыйДоступПредставление = ПолучитьСтрокуПредставленияПользователейСБыстрымДоступом( + НоваяКоманда.БыстрыйДоступПредставление = ПредставлениеБыстрогоДоступаПользователей( НоваяКоманда.БыстрыйСписокДоступа.Количество() ); @@ -554,7 +653,7 @@ Элементы.ГруппаПредупреждение; КонецЕсли; - Если ЭтоНовыйОбъект Тогда + Если ЭтоНовый Тогда Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет ИЛИ Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Тогда Заголовок = НСтр("ru = 'Дополнительный отчет (создание)'"); @@ -594,92 +693,189 @@ Модифицированность = Истина; КонецЕсли; - ТекущиеДанныеЭлементКоллекции.БыстрыйДоступПредставление = - ПолучитьСтрокуПредставленияПользователейСБыстрымДоступом( - ТекущиеДанныеЭлементКоллекции.БыстрыйСписокДоступа.Количество()); + ТекущиеДанныеЭлементКоллекции.БыстрыйДоступПредставление = ПредставлениеБыстрогоДоступаПользователей( + ТекущиеДанныеЭлементКоллекции.БыстрыйСписокДоступа.Количество() + ); КонецПроцедуры -&НаСервере -Функция ПоместитьФайлОбработкиВоВременноеХранилище() - - Если РегистрацияОбработки Тогда - Возврат ПоместитьВоВременноеХранилище(ДвоичныеДанныеОбработки); - КонецЕсли; - - Если Объект.Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда - Возврат Неопределено; - КонецЕсли; - - Значение = РеквизитФормыВЗначение("Объект").ХранилищеОбработки.Получить(); - - Если ТипЗнч(Значение) <> Тип("ДвоичныеДанные") Тогда - Возврат Неопределено; - КонецЕсли; - - Возврат ПоместитьВоВременноеХранилище(Значение); - -КонецФункции - &НаКлиенте -Функция ОткрытьДиалогЗагрузкиФайлаОбработкиОтчета() +Функция ОткрытьДиалогЗагрузкиФайлаОбработкиОтчета(ФлагДобавить, ПараметрыРегистрации = Неопределено) - Если ПодключитьРасширениеРаботыСФайлами() Тогда + // Выбор файла + Если ПараметрыРегистрации = Неопределено Тогда + ПараметрыРегистрации = Новый Структура("ИмяФайла, ЭтоОтчет, ОтключатьКонфликтующие, Конфликтующие"); + ПараметрыРегистрации.ИмяФайла = ""; + ПараметрыРегистрации.ЭтоОтчет = Неопределено; + ПараметрыРегистрации.ОтключатьКонфликтующие = Ложь; + ПараметрыРегистрации.Конфликтующие = Новый СписокЗначений; - ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - ДиалогОткрытияФайла.ПолноеИмяФайла = Объект.ИмяФайла; - ДиалогОткрытияФайла.Фильтр = "Внешние обработки|*.epf|Внешние отчеты|*.erf"; - ДиалогОткрытияФайла.МножественныйВыбор = Ложь; - ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите файл'"); - - ПомещаемыеФайлы = Новый Массив; - ПомещенныеФайлы = Новый Массив; - - Если ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, ДиалогОткрытияФайла, Истина) Тогда - МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПомещенныеФайлы[0].Имя, "\"); - ИмяФайла = МассивПодстрок.Получить(МассивПодстрок.ВГраница()); - РасширениеФайла = Прав(ИмяФайла, 3); - - Если Не ЗарегистрироватьОбработку(ПомещенныеФайлы[0].Хранение, ИмяФайла, РасширениеФайла) Тогда - Возврат Ложь; - КонецЕсли; - Иначе - Возврат Ложь; - КонецЕсли; - Иначе - - АдресВоВременномХранилище = ""; + // Параметры результата выбора ВыбранноеИмяФайла = ""; - Если ПоместитьФайл(АдресВоВременномХранилище, , ВыбранноеИмяФайла, Истина) Тогда + // Параметры выбора + Если ПодключитьРасширениеРаботыСФайлами() Тогда - МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ВыбранноеИмяФайла, "\"); - ИмяФайла = МассивПодстрок.Получить(МассивПодстрок.ВГраница()); - РасширениеФайла = Прав(ИмяФайла, 3); + ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + ДиалогОткрытияФайла.ПолноеИмяФайла = Объект.ИмяФайла; + ДиалогОткрытияФайла.Фильтр = ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения(); + ДиалогОткрытияФайла.ИндексФильтра = ?(Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет, 0, 1); + ДиалогОткрытияФайла.МножественныйВыбор = Ложь; + ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите дополнительный отчет или обработку'"); - Если ВРег(РасширениеФайла) = "EPF" Тогда - // внешняя обработка - ИначеЕсли ВРег(РасширениеФайла) = "ERF" Тогда - // внешний отчет - Иначе - Предупреждение(НСтр("ru = 'Невозможно определить тип файла по расширению'")); + ПомещаемыеФайлы = Новый Массив; + ПомещенныеФайлы = Новый Массив; + + Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, ДиалогОткрытияФайла, Истина, УникальныйИдентификатор) Тогда Возврат Ложь; КонецЕсли; - Если НЕ ЗарегистрироватьОбработку(АдресВоВременномХранилище, ИмяФайла, РасширениеФайла) Тогда - Возврат Ложь; - КонецЕсли; + АдресДанныхОбработки = ПомещенныеФайлы[0].Хранение; + ВыбранноеИмяФайла = ПомещенныеФайлы[0].Имя; + Иначе + + Если НЕ ПоместитьФайл(АдресДанныхОбработки, , ВыбранноеИмяФайла, Истина, УникальныйИдентификатор) Тогда + Возврат Ложь; + КонецЕсли; + + КонецЕсли; + + МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ВыбранноеИмяФайла, "\"); + ПараметрыРегистрации.ИмяФайла = МассивПодстрок.Получить(МассивПодстрок.ВГраница()); + РасширениеФайла = ВРег(Прав(ПараметрыРегистрации.ИмяФайла, 3)); + + Если РасширениеФайла = "ERF" Тогда + ПараметрыРегистрации.ЭтоОтчет = Истина; + ИначеЕсли РасширениеФайла = "EPF" Тогда + ПараметрыРегистрации.ЭтоОтчет = Ложь; + Иначе + Предупреждение(НСтр("ru = 'Расширение файла не соответствует расширению внешнего отчета (ERF) или обработки (EPF).'")); Возврат Ложь; КонецЕсли; - КонецЕсли; - Модифицированность = Истина; - РегистрацияОбработки = Истина; + // Вызов сервера + РезультатРегистрации = ЗарегистрироватьОбработку(ПараметрыРегистрации); - Возврат Истина; + // Обработка результата работы сервера + Если РезультатРегистрации.Успешно = Истина Тогда + + РегистрацияОбработки = Истина; + Модифицированность = Истина; + ПоказатьОповещениеПользователя( + НСтр("ru = 'Файл обработки успешно загружен'"), + ?(ЭтоНовый, "", ПолучитьНавигационнуюСсылку(Объект.Ссылка)), + ПараметрыРегистрации.ИмяФайла + ); + Возврат Истина; + + КонецЕсли; + // Разбор причины отказа загрузки обработки и отображение информации пользователю + Если РезультатРегистрации.ИмяОбъектаЗанято = Ложь Тогда + + // Причина отказа в КраткоеПредставлениеОшибки + Предупреждение(РезультатРегистрации.КраткоеПредставлениеОшибки); + Возврат Ложь; + + Иначе + + // Причина отказа - имя объекта занято + ЗаголовокВопроса = НСтр("ru = 'Имя объекта занято'"); + + // Представление занявших объектов + КоличествоКонфликтующих = РезультатРегистрации.Конфликтующие.Количество(); + ПредставлениеЗанявших = ""; + Для Каждого ЭлементСписка Из РезультатРегистрации.Конфликтующие Цикл + ПредставлениеЗанявших = ПредставлениеЗанявших + + ?(ПредставлениеЗанявших = "", "", ", ") + + СокрЛП(ЭлементСписка.Представление); + Если СтрДлина(ПредставлениеЗанявших) > 80 Тогда + ПредставлениеЗанявших = Лев(ПредставлениеЗанявших, 70) + + "... (" + + Формат(КоличествоКонфликтующих, "ЧН=0; ЧГ=") + + " " + + НСтр("ru = 'шт'") + + ")"; + Прервать; + КонецЕсли; + КонецЦикла; + + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Имя ""%1"" уже занято другими дополнительными отчетами (обработками): + |%2. + | + |Доступные действия: + |1. ""Продолжить"" - продолжить загрузку, отключив Публикацию текущего отчета (обработки). + |2. ""Отключить конфликтующие"" - продолжить загрузку, отключив Публикацию отчетов (обработок), конфликтующих с загружамой по имени. + |3. ""Показать конфликтующие"" - отменить загрузку и показать список отчетов (обработок), конфликтующих с загружамой по имени. + |4. ""Отмена"" - отменить загрузку.'"), + РезультатРегистрации.ИмяОбъекта, + ПредставлениеЗанявших + ); + + КнопкиВопроса = Новый СписокЗначений; + КнопкиВопроса.Добавить(1, НСтр("ru = 'Продолжить'")); + КнопкиВопроса.Добавить(2, НСтр("ru = 'Отключить конфликтующие'")); + КнопкиВопроса.Добавить(3, НСтр("ru = 'Показать конфликтующие'")); + КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена); + + Ответ = Вопрос(ТекстВопроса, КнопкиВопроса, , 1, ЗаголовокВопроса); + Если Ответ = 1 Тогда + + // Продолжить + Объект.Публикация = ПредопределенноеЗначение("Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки"); + + // Повторный вызов сервера (публикация в режиме отладки) и обработка результата + Возврат ОткрытьДиалогЗагрузкиФайлаОбработкиОтчета(ФлагДобавить, ПараметрыРегистрации); + + ИначеЕсли Ответ = 2 Тогда + + // Отключить конфликтующие + ПараметрыРегистрации.ОтключатьКонфликтующие = Истина; + ПараметрыРегистрации.Конфликтующие = РезультатРегистрации.Конфликтующие; + + // Повторный вызов сервера (с переводом конфликтующих в режим отладки) и обработка результата + РезультатВторогоЗахода = ОткрытьДиалогЗагрузкиФайлаОбработкиОтчета(ФлагДобавить, ПараметрыРегистрации); + + // Отключается несколько объектов, потому динамические списки надо обновить + ОповеститьОбИзменении(Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки")); + + // Возврат результата вызывающему коду + Возврат РезультатВторогоЗахода; + + ИначеЕсли Ответ = 3 Тогда + + // Показать конфлиткующие (отмена далее) + Если КоличествоКонфликтующих = 1 + И ( + ЭтоНовый + ИЛИ РезультатРегистрации.СтароеИмяОбъекта <> РезультатРегистрации.ИмяОбъекта + ) Тогда + + // Форма элемента + ОткрытьЗначение(РезультатРегистрации.Конфликтующие[0].Значение); + + Иначе + + // Форма списка с отбором по конфликтующим + ПараметрыСписка = Новый Структура("Отбор, Заголовок, Отображение"); + ПараметрыСписка.Отбор = Новый Структура("ИмяОбъекта, ЭтоГруппа", РезультатРегистрации.ИмяОбъекта, Ложь); + ПараметрыСписка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Дополнительные отчеты и обработки с именем объекта ""%1""'"), + РезультатРегистрации.ИмяОбъекта + ); + ПараметрыСписка.Отображение = "Список"; + ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.ФормаСписка", ПараметрыСписка, , Истина); + + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + // Отменить загрузку + Возврат Ложь; КонецФункции &НаКлиенте @@ -744,57 +940,28 @@ КонецФункции -&НаКлиенте -Процедура НастроитьБыстрыйДоступ(Команда) - - ТекущиеДанные = Элементы.КомандыОбработки.ТекущиеДанные; - - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - НастроитьБыстрыйДоступОбщийОбработчик(ТекущиеДанные); - -КонецПроцедуры - -&НаСервере -Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) - - Если ДополнительныеОтчетыИОбработки.ПроверитьНазначаемаяОбработка(Объект.Вид) Тогда - - Если НЕ Объект.ИспользоватьДляФормыОбъекта И НЕ Объект.ИспользоватьДляФормыСписка Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Необходимо указать использование обработки, как минимум для одной формы'"),,,"Объект.ИспользоватьДляФормыОбъекта", Отказ); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - &НаКлиентеНаСервереБезКонтекста -Функция ПолучитьСтрокуПредставленияПользователейСБыстрымДоступом(ЧислоПользователейСБыстрымДоступом) - - Если ЧислоПользователейСБыстрымДоступом = 0 Тогда - - БыстрыйДоступПредставление = НСтр("ru = 'Команды нет в быстром доступе'"); - - Иначе - - ПоследняяЦифра = Число(Прав(Строка(ЧислоПользователейСБыстрымДоступом),1)); - - Если ПоследняяЦифра = 1 Тогда - БыстрыйДоступПредставление = НСтр("ru = '%1 пользователь'"); - ИначеЕсли ПоследняяЦифра = 2 Или ПоследняяЦифра = 3 Или ПоследняяЦифра = 4 Тогда - БыстрыйДоступПредставление = НСтр("ru = '%1 пользователя'"); - Иначе - БыстрыйДоступПредставление = НСтр("ru = '%1 пользователей'"); - КонецЕсли; - - БыстрыйДоступПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(БыстрыйДоступПредставление, Строка(ЧислоПользователейСБыстрымДоступом)) - +Функция ПредставлениеБыстрогоДоступаПользователей(КоличествоПользователей) + Если КоличествоПользователей = 0 Тогда + Возврат НСтр("ru = 'Команды нет в быстром доступе'"); КонецЕсли; + ПоследняяЦифра = КоличествоПользователей - 10 * Цел(КоличествоПользователей/10); + + Если ПоследняяЦифра = 1 Тогда + БыстрыйДоступПредставление = НСтр("ru = '%1 пользователь'"); + ИначеЕсли ПоследняяЦифра = 2 Или ПоследняяЦифра = 3 Или ПоследняяЦифра = 4 Тогда + БыстрыйДоступПредставление = НСтр("ru = '%1 пользователя'"); + Иначе + БыстрыйДоступПредставление = НСтр("ru = '%1 пользователей'"); + КонецЕсли; + + БыстрыйДоступПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + БыстрыйДоступПредставление, + Формат(КоличествоПользователей, "ЧГ=0") + ); + Возврат БыстрыйДоступПредставление; - КонецФункции + diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl index 254330072..aebf99e78 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl @@ -1,5 +1,63 @@ //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ОБЪЕКТА +// ОБРАБОТЧИКИ СОБЫТИЙ + +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + // Если отчет публикуется, то необходим контроль уникальности имени объекта, + // под которым дополнительный отчет регистрируется в системе + Если Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется Тогда + + // Проверка имени + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | 1 + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки КАК ДОиО + |ГДЕ + | ДОиО.ИмяОбъекта = &ИмяОбъекта + | И &УсловиеДопОтчет + | И ДОиО.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется) + | И ДОиО.ПометкаУдаления = ЛОЖЬ + | И ДОиО.Ссылка <> &Ссылка"; + + ВидыДопОтчетов = Новый Массив; + ВидыДопОтчетов.Добавить(Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет); + ВидыДопОтчетов.Добавить(Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет); + + Если ВидыДопОтчетов.Найти(Вид) <> Неопределено Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеДопОтчет", "ДОиО.Вид В (&ВидыДопОтчетов)"); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеДопОтчет", "НЕ ДОиО.Вид В (&ВидыДопОтчетов)"); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИмяОбъекта", ИмяОбъекта); + Запрос.УстановитьПараметр("ВидыДопОтчетов", ВидыДопОтчетов); + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.Текст = ТекстЗапроса; + + УстановитьПривилегированныйРежим(Истина); + Конфликтующие = Запрос.Выполнить().Выгрузить(); + УстановитьПривилегированныйРежим(Ложь); + + Если Конфликтующие.Количество() > 0 Тогда + Отказ = Истина; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Имя ""%1"", используемое данным отчетом (обработкой), уже занято другим опубликованным дополнительным отчетом (обработкой). + | + |Для продолжения необходимо изменить вид Публикации с ""%2"" на ""%3"" или ""%4"".'"), + ИмяОбъекта, + Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется), + Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки), + Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.НеИспользуется) + ), + , + "Объект.Публикация" + ); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры Процедура ПередЗаписью(Отказ) @@ -206,7 +264,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ Функция СверткаПоПолю(Таблица1, Таблица2, ИмяПоля, ИмяТипаПоля) @@ -313,3 +371,4 @@ Возврат Строка(Новый РасписаниеРегламентногоЗадания); КонецФункции + diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo index 992d2809e..d699a549b 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo @@ -185,6 +185,29 @@ <indexing>Index</indexing> <dataHistory>Use</dataHistory> </attributes> + <attributes uuid="ffd987e3-e8af-4d46-881e-1e312e74dbac"> + <name>ИмяОбъекта</name> + <synonym> + <key>ru</key> + <value>Имя объекта</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>260</length> + </stringQualifiers> + </type> + <toolTip> + <key>ru</key> + <value>Имя, под которым дополнительный отчет или обработка регистрируется в системе</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:StringValue"/> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> <attributes uuid="ad1142ed-183d-47a3-800c-997a3770e11e"> <name>ИмяФайла</name> <synonym> @@ -330,24 +353,6 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="bc6a47a1-a3f3-4d7e-9dad-099bd3dba751"> - <name>ХранилищеОбработки</name> - <synonym> - <key>ru</key> - <value>Хранилище обработки</value> - </synonym> - <type> - <types>ValueStorage</types> - </type> - <toolTip> - <key>ru</key> - <value>Двоичные данные дополнительного отчета или обработки</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:UndefinedValue"/> - <dataHistory>Use</dataHistory> - </attributes> <attributes uuid="e924058f-25c3-4744-a565-836b824991b7"> <name>ХранилищеНастроек</name> <synonym> @@ -366,6 +371,24 @@ <fillValue xsi:type="core:UndefinedValue"/> <dataHistory>Use</dataHistory> </attributes> + <attributes uuid="bc6a47a1-a3f3-4d7e-9dad-099bd3dba751"> + <name>ХранилищеОбработки</name> + <synonym> + <key>ru</key> + <value>Хранилище обработки</value> + </synonym> + <type> + <types>ValueStorage</types> + </type> + <toolTip> + <key>ru</key> + <value>Двоичные данные дополнительного отчета или обработки</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + </attributes> <tabularSections uuid="0481bc65-6a32-46b9-ae87-993ba52a29a5"> <producedTypes> <objectType typeId="bf58afbf-1c94-47e6-a5ba-c5d7d219ac91" valueTypeId="b911e797-06eb-405d-a5b3-0ef90c3cef79"/> @@ -558,11 +581,25 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </standardAttributes> - <attributes uuid="8d31ce6a-4d44-46c6-a11c-47fb33e88691"> - <name>ИмяРаздела</name> + <attributes uuid="da51de81-4d4f-46b5-a308-7b50db6c45a7"> + <name>Раздел</name> <synonym> <key>ru</key> - <value>Имя раздела</value> + <value>Раздел</value> + </synonym> + <type> + <types>CatalogRef.ИдентификаторыОбъектовМетаданных</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> + <attributes uuid="8d31ce6a-4d44-46c6-a11c-47fb33e88691"> + <name>УдалитьИмяРаздела</name> + <synonym> + <key>ru</key> + <value>Удалить имя раздела</value> </synonym> <type> <types>String</types> @@ -577,7 +614,6 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> <dataHistory>Use</dataHistory> - <fullTextSearch>Use</fullTextSearch> </attributes> </tabularSections> <forms uuid="df22b227-b2c3-4e65-9706-7582f99fe59c"> diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl index b7e2eddf9..7ed5fd31d 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаСписка/Module.bsl @@ -1,12 +1,6 @@ -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ //////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ - - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -19,5 +13,3 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ \ No newline at end of file diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl index 3e7c16176..a1085ae2c 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl @@ -1,30 +1,6 @@ - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ - -&НаСервере -Процедура ИнициализироватьКомпоновщикСервер(НастройкаКомпоновки) - - СхемаКомпоновки = ЖурналыДокументов.Взаимодействия.ПолучитьМакет("СхемаОтборВзаимодействия"); - АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновки, УникальныйИдентификатор); - КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); - - Если НастройкаКомпоновки = Неопределено Тогда - КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию); - Иначе - КомпоновщикНастроек.ЗагрузитьНастройки(НастройкаКомпоновки); - КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ - - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -62,4 +38,21 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ \ No newline at end of file +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ИнициализироватьКомпоновщикСервер(НастройкаКомпоновки) + + СхемаКомпоновки = ЖурналыДокументов.Взаимодействия.ПолучитьМакет("СхемаОтборВзаимодействия"); + АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновки, УникальныйИдентификатор); + КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); + + Если НастройкаКомпоновки = Неопределено Тогда + КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию); + Иначе + КомпоновщикНастроек.ЗагрузитьНастройки(НастройкаКомпоновки); + КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность); + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/ЗакладкиВзаимодействий.mdo b/SSL/src/Catalogs/ЗакладкиВзаимодействий/ЗакладкиВзаимодействий.mdo index 2f7e45920..471ab964f 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/ЗакладкиВзаимодействий.mdo +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/ЗакладкиВзаимодействий.mdo @@ -98,6 +98,10 @@ <createOnInput>Use</createOnInput> <dataLockControlMode>Managed</dataLockControlMode> <fullTextSearch>Use</fullTextSearch> + <objectPresentation> + <key>ru</key> + <value>Закладка взаимодействий</value> + </objectPresentation> <hierarchical>true</hierarchical> <levelCount>2</levelCount> <foldersOnTop>true</foldersOnTop> diff --git a/SSL/src/Catalogs/Заметки/Commands/ВсеЗаметки/CommandModule.bsl b/SSL/src/Catalogs/Заметки/Commands/ВсеЗаметки/CommandModule.bsl index b6c5881c2..07aa67b50 100644 --- a/SSL/src/Catalogs/Заметки/Commands/ВсеЗаметки/CommandModule.bsl +++ b/SSL/src/Catalogs/Заметки/Commands/ВсеЗаметки/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl index fe66179f2..8aab48b9c 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Module.bsl @@ -1,7 +1,9 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Список.Параметры.УстановитьЗначениеПараметра("Пользователь", ОбщегоНазначения.ТекущийПользователь()); + Список.Параметры.УстановитьЗначениеПараметра("Пользователь", Пользователи.ТекущийПользователь()); Список.Параметры.УстановитьЗначениеПараметра("Предмет", ""); Список.Параметры.УстановитьЗначениеПараметра("Пометка", Перечисления.ЦветаЗаметок.ПустаяСсылка()); Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьУдаленные", Ложь); @@ -9,6 +11,46 @@ ЗаполнитьСписокВыбораФильтраПоПредмету(); КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + #Если ВебКлиент Тогда + Элементы.ФильтрПоЦвету.СписокВыбора.Вставить(0, ПредопределенноеЗначение("Перечисление.ЦветаЗаметок.ПустаяСсылка")," "); + #КонецЕсли +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + Список.Параметры.УстановитьЗначениеПараметра("Предмет", "%" + ВыбранныйПредмет + "%"); + Список.Параметры.УстановитьЗначениеПараметра("Пометка", ВыбранныйЦвет); + Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьУдаленные", ПоказыватьУдаленные); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ФильтрПоПредметуПриИзменении(Элемент) + Список.Параметры.УстановитьЗначениеПараметра("Предмет", "%" + ВыбранныйПредмет + "%"); +КонецПроцедуры + +&НаКлиенте +Процедура ФильтрПоПредметуАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) + Список.Параметры.УстановитьЗначениеПараметра("Предмет", "%" + Текст + "%"); +КонецПроцедуры + +&НаКлиенте +Процедура ФильтрПоЦветуПриИзменении(Элемент) + Список.Параметры.УстановитьЗначениеПараметра("Пометка", ВыбранныйЦвет); +КонецПроцедуры + +&НаКлиенте +Процедура ПоказыватьУдаленныеПриИзменении(Элемент) + Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьУдаленные", ПоказыватьУдаленные); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервере Процедура ЗаполнитьСписокВыбораФильтраПоПредмету() @@ -30,7 +72,7 @@ |УПОРЯДОЧИТЬ ПО | ПредставлениеПредмета"; - Запрос.УстановитьПараметр("Пользователь", ОбщегоНазначения.ТекущийПользователь()); + Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); Запрос.Текст = ТекстЗапроса; Выборка = Запрос.Выполнить().Выбрать(); @@ -40,36 +82,3 @@ Конецпроцедуры -&НаКлиенте -Процедура ФильтрПоПредметуПриИзменении(Элемент) - Список.Параметры.УстановитьЗначениеПараметра("Предмет", "%" + ВыбранныйПредмет + "%"); -КонецПроцедуры - -&НаКлиенте -Процедура ФильтрПоПредметуАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) - Список.Параметры.УстановитьЗначениеПараметра("Предмет", "%" + Текст + "%"); -КонецПроцедуры - -&НаКлиенте -Процедура ФильтрПоЦветуПриИзменении(Элемент) - Список.Параметры.УстановитьЗначениеПараметра("Пометка", ВыбранныйЦвет); -КонецПроцедуры - -&НаКлиенте -Процедура ПоказыватьУдаленныеПриИзменении(Элемент) - Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьУдаленные", ПоказыватьУдаленные); -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - #Если ВебКлиент Тогда - Элементы.ФильтрПоЦвету.СписокВыбора.Вставить(0, ПредопределенноеЗначение("Перечисление.ЦветаЗаметок.ПустаяСсылка")," "); - #КонецЕсли -КонецПроцедуры - -&НаСервере -Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - Список.Параметры.УстановитьЗначениеПараметра("Предмет", "%" + ВыбранныйПредмет + "%"); - Список.Параметры.УстановитьЗначениеПараметра("Пометка", ВыбранныйЦвет); - Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьУдаленные", ПоказыватьУдаленные); -КонецПроцедуры diff --git a/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Module.bsl index 282aca588..46763e6d7 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -5,17 +7,20 @@ Предмет = Параметры.Предмет; Список.Параметры.УстановитьЗначениеПараметра("Предмет", Предмет); КонецЕсли; - Список.Параметры.УстановитьЗначениеПараметра("Пользователь", ОбщегоНазначения.ТекущийПользователь()); + Список.Параметры.УстановитьЗначениеПараметра("Пользователь", Пользователи.ТекущийПользователь()); Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьЗаметкиДругихПользователей", Ложь); Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьУдаленные", Ложь); КонецПроцедуры -&НаКлиенте -Процедура СоздатьЗаметку(Команда) - ПараметрыФормы = Новый Структура("Предмет", Предмет); - ОткрытьФорму("Справочник.Заметки.ФормаОбъекта", ПараметрыФормы); +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьЗаметкиДругихПользователей", ПоказыватьЗаметкиДругихПользователей); + Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьУдаленные", ПоказыватьУдаленные); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + &НаКлиенте Процедура ПоказыватьЗаметкиДругихПользователейПриИзменении(Элемент) Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьЗаметкиДругихПользователей", ПоказыватьЗаметкиДругихПользователей); @@ -26,8 +31,11 @@ Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьУдаленные", ПоказыватьУдаленные); КонецПроцедуры -&НаСервере -Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьЗаметкиДругихПользователей", ПоказыватьЗаметкиДругихПользователей); - Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьУдаленные", ПоказыватьУдаленные); +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура СоздатьЗаметку(Команда) + ПараметрыФормы = Новый Структура("Предмет", Предмет); + ОткрытьФорму("Справочник.Заметки.ФормаОбъекта", ПараметрыФормы); КонецПроцедуры diff --git a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl index 8599d52e3..9ecc6e9d3 100644 --- a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Module.bsl @@ -1,5 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Список.Параметры.УстановитьЗначениеПараметра("Пользователь", ОбщегоНазначения.ТекущийПользователь()); + Список.Параметры.УстановитьЗначениеПараметра("Пользователь", Пользователи.ТекущийПользователь()); КонецПроцедуры diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl index 6556f8f76..195329a1d 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Module.bsl @@ -1,7 +1,9 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Объект.Ссылка.Пустая() Тогда - Объект.Автор = ОбщегоНазначения.ТекущийПользователь(); + Объект.Автор = Пользователи.ТекущийПользователь(); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl index 3727ba88c..af2c90a0b 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -10,7 +13,7 @@ Элементы.Предмет.Гиперссылка = ЗначениеЗаполнено(Объект.Предмет); Если Объект.Ссылка.Пустая() Тогда - Объект.Автор = ОбщегоНазначения.ТекущийПользователь(); + Объект.Автор = Пользователи.ТекущийПользователь(); ФорматированныйТекст = Параметры.ЗначениеКопирования.Содержание.Получить(); Элементы.ДатаЗаметки.Заголовок = НСтр("ru = 'Не записано'") @@ -40,6 +43,14 @@ КонецПроцедуры +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + Элементы.ДатаЗаметки.Заголовок = НСтр("ru = 'Записано'") + ": " + Формат(Объект.ДатаИзменения, "ДЛФ=DDT"); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + &НаКлиенте Процедура ПредметНажатие(Элемент) ОткрытьЗначение(Объект.Предмет); @@ -50,10 +61,13 @@ ОткрытьЗначение(Объект.Автор); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервере Процедура УстановитьВидимость() Элементы.Автор.Заголовок = Объект.Автор; - ОткрытаАвтором = Объект.Автор = ОбщегоНазначения.ТекущийПользователь(); + ОткрытаАвтором = Объект.Автор = Пользователи.ТекущийПользователь(); Элементы.ПараметрыОтображения.Видимость = ОткрытаАвтором; Элементы.ИнформацияОбАвторе.Видимость = Не ОткрытаАвтором; @@ -62,8 +76,5 @@ Элементы.КоманднаяПанельРедактирования.Видимость = ОткрытаАвтором; КонецПроцедуры -&НаКлиенте -Процедура ПослеЗаписи(ПараметрыЗаписи) - Элементы.ДатаЗаметки.Заголовок = НСтр("ru = 'Записано'") + ": " + Формат(Объект.ДатаИзменения, "ДЛФ=DDT"); -КонецПроцедуры + diff --git a/SSL/src/Catalogs/Заметки/ObjectModule.bsl b/SSL/src/Catalogs/Заметки/ObjectModule.bsl index e10e0f439..6d9209893 100644 --- a/SSL/src/Catalogs/Заметки/ObjectModule.bsl +++ b/SSL/src/Catalogs/Заметки/ObjectModule.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; @@ -10,7 +13,7 @@ КонецЕсли; Если Не ЭтоГруппа Тогда - ДатаИзменения = ТекущаяДата(); + ДатаИзменения = ТекущаяДатаСеанса(); ПредставлениеПредмета = ОбщегоНазначения.ПредметСтрокой(Предмет); Позиция = Найти(ТекстСодержания, Символы.ПС); diff --git a/SSL/src/Catalogs/Заметки/Заметки.mdo b/SSL/src/Catalogs/Заметки/Заметки.mdo index 0bda04144..67a3a4e1d 100644 --- a/SSL/src/Catalogs/Заметки/Заметки.mdo +++ b/SSL/src/Catalogs/Заметки/Заметки.mdo @@ -185,21 +185,6 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="c6984be9-3752-4d10-ac9e-fa2c1a15f237"> - <name>ОбщаяЗаметка</name> - <synonym> - <key>ru</key> - <value>Общая заметка</value> - </synonym> - <type> - <types>Boolean</types> - </type> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:UndefinedValue"/> - <fullTextSearch>Use</fullTextSearch> - <dataHistory>Use</dataHistory> - </attributes> <attributes uuid="5e3ab0a3-c0a6-4f41-85d3-2eede4abb555"> <name>ДляРабочегоСтола</name> <synonym> diff --git a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl index 3bdea9203..d15418c53 100644 --- a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl index f492c551a..499c17a66 100644 --- a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -5,6 +8,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ПерейтиКФормеФайла(Команда) diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбора/Module.bsl index 43ac99629..6a49a2e3e 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбора/Module.bsl @@ -1,18 +1,25 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если ЭтаФорма.Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; Владелец = Неопределено; - Если Параметры.Отбор.Свойство("_Владелец", Владелец) И ЗначениеЗаполнено(Владелец) Тогда + Если Параметры.Отбор.Свойство("_Владелец", Владелец) + И ЗначениеЗаполнено(Владелец) Тогда + Параметры.Отбор.Удалить("_Владелец"); Параметры.Отбор.Вставить("Владелец", Владелец); - ИначеЕсли Параметры.Отбор.Свойство("Владелец") И ЗначениеЗаполнено(Параметры.Отбор.Владелец) Тогда + + ИначеЕсли Параметры.Отбор.Свойство("Владелец") + И ЗначениеЗаполнено(Параметры.Отбор.Владелец) Тогда + Владелец = Параметры.Отбор.Владелец; КонецЕсли; @@ -30,6 +37,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -44,12 +54,17 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаКлиенте Процедура ПроверитьВозможностьВыбора(Элемент, СтандартнаяОбработка) - Если Элемент.ТекущиеДанные <> Неопределено И Элемент.ТекущиеДанные.ЭтоГруппа Тогда + Если Элемент.ТекущиеДанные <> Неопределено + И Элемент.ТекущиеДанные.ЭтоГруппа Тогда + СтандартнаяОбработка = Ложь; - Предупреждение(НСтр("ru = 'Выбор групп значений не поддерживается'")); + Предупреждение(НСтр("ru = 'Выбор групп значений не поддерживается.'")); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl index 3c82d19bb..5336f2c4c 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..476e6d06b --- /dev/null +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16443"></meta></head><body>При формировании списка значений можно указать не только наименование в поле Значение, но и указать Вес значения (числовое поле). Это поле в дальнейшем можно использовать для анализа в отчетах. Логику использования этого поля пользователю необходимо продумывать  самостоятельно. Например, для значений свойства Надежность представленных на рисунке можно задать вес следующим образом: для значений от единицы до тройки поставить вес равным нулю, а для значений четыре и пять равным единице. При таких весах в отчет можно быстро вывести надежных клиентов (у которых вес значения больше нуля).</body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl index ddc0fb997..4a188c117 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl @@ -1,8 +1,10 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -25,7 +27,7 @@ ИмяСвойства = ВладелецЗначенияСвойства.Наименование; КонецЕсли; - Если Объект.Ссылка = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка() Тогда // создание нового + Если Объект.Ссылка = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка() Тогда // Создание нового. Заголовок = ИмяСвойства + " (" + НСтр("ru = 'создание'") + ")"; Иначе Заголовок = Объект.Наименование + " (" + ИмяСвойства + ")"; diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html index 2242e2e16..c48fc2997 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html @@ -1,4 +1,3 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16443"></meta></head><body> <p>Значения <a href="ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения/Help">дополнительных реквизитов и сведений</a> могут выбираться из специального справочника - "Значения свойств объектов".</p> -<p>При этом для каждого дополнительного реквизита или сведения список значений будет свой. Если список значений большой, то может быть удобно создать группы и разнести значения по ним.</p> -<p>При формировании списка значений можно указать не только наименование в поле <strong>Значение</strong>, но и указать <strong>Вес</strong> значения (числовое поле). Это поле в дальнейшем можно использовать для анализа в отчетах. Логику использования этого поля пользователю необходимо продумывать  самостоятельно. </p></body></html> \ No newline at end of file +<p>При этом для каждого дополнительного реквизита или сведения список значений будет свой. Если список значений большой, то может быть удобно создать группы и разнести значения по ним.</p></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo index 9e22ece49..27fd9e833 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo @@ -205,6 +205,11 @@ <key>ru</key> <value>Форма элемента</value> </synonym> + <help> + <pages> + <lang>ru</lang> + </pages> + </help> <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..585d2a536 --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> + <filter> + <item xsi:type="FilterItemComparison"> + <left xsi:type="dcscor:Field">ПометкаУдаления</left> + <comparisonType>Equal</comparisonType> + <right xsi:type="xs:boolean">false</right> + </item> + <item xsi:type="FilterItemComparison"> + <left xsi:type="dcscor:Field">Используется</left> + <comparisonType>Equal</comparisonType> + <right xsi:type="xs:boolean">true</right> + </item> + <viewMode>Normal</viewMode> + <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> + </filter> + <order> + <item xsi:type="OrderItemField"> + <field>ПорядокКоллекции</field> + <orderType>Asc</orderType> + </item> + <item xsi:type="OrderItemField"> + <field>Родитель</field> + <orderType>Asc</orderType> + </item> + <item xsi:type="OrderItemField"> + <field>Синоним</field> + <orderType>Asc</orderType> + </item> + <viewMode>Normal</viewMode> + <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> + </order> + <conditionalAppearance> + <viewMode>Normal</viewMode> + <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> + </conditionalAppearance> +</Settings> diff --git a/SSL/src/Enums/КлючевыеОперации/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Form.form similarity index 93% rename from SSL/src/Enums/КлючевыеОперации/Forms/ФормаВыбора/Form.form rename to SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Form.form index 239baaea6..08a73b7cb 100644 --- a/SSL/src/Enums/КлючевыеОперации/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Form.form @@ -14,7 +14,7 @@ <defaultItem>true</defaultItem> <titleLocation>None</titleLocation> <items xsi:type="form:FormField"> - <name>Ссылка</name> + <name>Синоним</name> <id>4</id> <visible>true</visible> <enabled>true</enabled> @@ -22,11 +22,15 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Список.Ref</segments> + <segments>Список.Синоним</segments> </dataPath> <defaultItem>true</defaultItem> + <toolTip> + <key>ru</key> + <value>Представление объекта метаданных</value> + </toolTip> <extendedTooltip> - <name>СсылкаРасширеннаяПодсказка</name> + <name>СинонимРасширеннаяПодсказка</name> <id>16</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -36,7 +40,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>СсылкаКонтекстноеМеню</name> + <name>СинонимКонтекстноеМеню</name> <id>5</id> <autoFill>true</autoFill> </contextMenu> @@ -142,6 +146,7 @@ <id>2</id> <autoFill>true</autoFill> </contextMenu> + <representation>HierarchicalList</representation> <changeRowSet>true</changeRowSet> <changeRowOrder>true</changeRowOrder> <autoMaxWidth>true</autoMaxWidth> @@ -149,6 +154,7 @@ <autoMaxRowsCount>true</autoMaxRowsCount> <choiceMode>true</choiceMode> <selectionMode>MultiRow</selectionMode> + <header>true</header> <headerHeight>1</headerHeight> <footerHeight>1</footerHeight> <horizontalScrollBar>AutoUse</horizontalScrollBar> @@ -175,7 +181,6 @@ <endDate>0001-01-01T00:00:00</endDate> </period> <topLevelParent xsi:type="core:UndefinedValue"/> - <showRoot>true</showRoot> <allowGettingCurrentRowURL>true</allowGettingCurrentRowURL> </extInfo> </items> @@ -185,10 +190,6 @@ <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> - <handlers> - <event>OnCreateAtServer</event> - <name>ПриСозданииНаСервере</name> - </handlers> <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoTitle>true</autoTitle> @@ -214,17 +215,13 @@ </edit> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> - <mainTable>Enum.КлючевыеОперации</mainTable> + <mainTable>Catalog.ИдентификаторыОбъектовМетаданных</mainTable> <dynamicDataRead>true</dynamicDataRead> <autoFillAvailableFields>true</autoFillAvailableFields> <autoSaveUserSettings>true</autoSaveUserSettings> <getInvisibleFieldPresentations>true</getInvisibleFieldPresentations> </extInfo> </attributes> - <parameters> - <name>Отбор</name> - <valueType/> - </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..c53358399 --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> + <filter> + <viewMode>Normal</viewMode> + <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> + </filter> + <order> + <item xsi:type="OrderItemField"> + <field>Используется</field> + <orderType>Asc</orderType> + </item> + <item xsi:type="OrderItemField"> + <field>ПорядокКоллекции</field> + <orderType>Asc</orderType> + </item> + <item xsi:type="OrderItemField"> + <field>Родитель</field> + <orderType>Asc</orderType> + </item> + <item xsi:type="OrderItemField"> + <field>Синоним</field> + <orderType>Asc</orderType> + </item> + <viewMode>Normal</viewMode> + <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> + </order> + <conditionalAppearance> + <item> + <selection/> + <filter> + <item xsi:type="FilterItemComparison"> + <left xsi:type="dcscor:Field">Родитель</left> + <comparisonType>Equal</comparisonType> + <right xsi:type="dcscor:DesignTimeValue">Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка</right> + </item> + <item xsi:type="FilterItemComparison"> + <left xsi:type="dcscor:Field">Предопределенный</left> + <comparisonType>Equal</comparisonType> + <right xsi:type="xs:boolean">true</right> + </item> + </filter> + <appearance> + <dcscor:item xsi:type="SettingsParameterValue"> + <dcscor:parameter>Шрифт</dcscor:parameter> + <dcscor:value xsi:type="v8ui:Font" ref="sys:DefaultGUIFont" bold="true" italic="false" underline="false" strikeout="false" kind="WindowsFont"/> + </dcscor:item> + </appearance> + </item> + <viewMode>Normal</viewMode> + <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> + </conditionalAppearance> +</Settings> diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..f8f09aa61 --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form @@ -0,0 +1,351 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:Table"> + <name>Список</name> + <id>1</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Список</segments> + </dataPath> + <defaultItem>true</defaultItem> + <titleLocation>None</titleLocation> + <items xsi:type="form:FormField"> + <name>Синоним</name> + <id>4</id> + <title> + <key>ru</key> + <value>Синоним</value> + + true + true + + true + + + Список.Синоним + + true + + СинонимРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + СинонимКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ПолноеИмя + 13 + true + true + + + Список.ПолноеИмя + + + ПолноеИмяРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ПолноеИмяКонтекстноеМеню + 14 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Используется + 15 + true + true + + + Список.Используется + + + ИспользуетсяРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ИспользуетсяКонтекстноеМеню + 16 + true + + CheckBoxField + Enter + true + Left + true + + + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска + 19 + + СписокСтрокаПоискаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 20 + true + + Список + + true + + + + СписокСостояниеПросмотра + 22 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 23 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 25 + + СписокУправлениеПоискомРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 26 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + HierarchicalList + 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 + + ОбновитьДанныеСправочника + 10 + true + true + + true + + + ОбновитьДанныеСправочникаРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + Form.Command.ОбновитьДанныеСправочника + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + + + Список.КоллекцияПорядок + + + Список.Description + + + Список.Используется + +
    true
    + + Catalog.ИдентификаторыОбъектовМетаданных + true + true + true + true + +
    + + ОбновитьДанныеСправочника + + <key>ru</key> + <value>Обновить данные справочника</value> + + 1 + + ru + Обновить данные справочника по метаданным конфигурации + + + true + + + + ОбновитьДанныеСправочника + + + Auto + Auto + + + + + + + diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..46d883bec --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,38 @@ + +&НаКлиенте +Процедура ОбновитьДанныеСправочника(Команда) + + ЕстьИзменения = Ложь; + ЕстьУдаленные = Ложь; + + ОбновитьДанныеСправочникаНаСервере(ЕстьИзменения, ЕстьУдаленные); + + Если ЕстьИзменения Тогда + Текст = НСтр("ru = 'Обновление выполнено успешно.'"); + Иначе + Текст = НСтр("ru = 'Обновление не требуется.'"); + КонецЕсли; + + Если ЕстьУдаленные Тогда + Текст = Текст + + Символы.ПС + + Символы.ПС + + НСтр("ru = 'Найдены удаленные объекты метаданных + |(см. элементы, начинающиеся с символа ""?"").'"); + КонецЕсли; + + Предупреждение(Текст); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьДанныеСправочникаНаСервере(ЕстьИзменения, ЕстьУдаленные) + + УстановитьПривилегированныйРежим(Истина); + + Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(ЕстьИзменения, ЕстьУдаленные); + + Элементы.Список.Обновить(); + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..922efb0d7 --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,572 @@ + + + + Наименование + 1 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 2 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИмяИСинонимОбъектаМетаданных + 24 + + Имя + 11 + true + true + + true + + + Объект.Имя + + + ИмяРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ИмяКонтекстноеМеню + 12 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Синоним + 13 + true + true + + true + + + Объект.Синоним + + + СинонимРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + СинонимКонтекстноеМеню + 14 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Имя и синоним объекта метаданных</value> + + + ru + Имя и синоним объекта метаданных + + + ИмяИСинонимОбъектаМетаданныхРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ПолноеИмяИПолныйСинонимОбъектаМетаданных + 25 + + ПолноеИмя + 15 + true + true + + true + + + Объект.ПолноеИмя + + + ПолноеИмяРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ПолноеИмяКонтекстноеМеню + 16 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПолныйСиноним + 3 + + <key>ru</key> + <value>Полный синоним</value> + + true + true + + true + + + Объект.ПолныйСиноним + + + ПолныйСинонимРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + ПолныйСинонимКонтекстноеМеню + 4 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Полное имя и полный синоним объекта метаданных</value> + + + ru + Полное имя и полный синоним объекта метаданных + + + ПолноеИмяИПолныйСинонимОбъектаМетаданныхРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ПрочиеСвойства + 26 + + ПорядокКоллекции + 9 + true + true + + + Объект.ПорядокКоллекции + + + ПорядокКоллекцииРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ПорядокКоллекцииКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + БезДанных + 19 + true + true + + true + + + Объект.БезДанных + + Right + + БезДанныхРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + БезДанныхКонтекстноеМеню + 20 + true + + CheckBoxField + Enter + true + Left + true + + + + ПустаяСсылкаПредставление + 21 + true + true + + + ПустаяСсылкаПредставление + + + ru + Для ссылочных типов объектов метаданных +содержит пустую ссылку своего типа, +для остальных - Неопределено +(в форме показано представление +типа значения пустой ссылки) + + + ПустаяСсылкаПредставлениеРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ПустаяСсылкаПредставлениеКонтекстноеМеню + 22 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + 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 + + + true + true + + true + + + <key>ru</key> + <value>Прочие свойства</value> + + + ru + Прочие свойства + + + ПрочиеСвойстваРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + Copy + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + CatalogObject.ИдентификаторыОбъектовМетаданных + + + true + + + true + +
    true
    + true +
    + + ПустаяСсылкаПредставление + + <key>ru</key> + <value>Значение пустой ссылки</value> + + 2 + + String + + + + true + + + true + + + + ИмяПредопределенного + + <key>ru</key> + <value>Имя предопределенного</value> + + 3 + + String + + + + true + + + true + + + + + + + +
    diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..a8385f3d3 --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,13 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТолькоПросмотр = Истина; + + ПустаяСсылкаПредставление = Строка(ТипЗнч(Объект.ЗначениеПустойСсылки)); + + Если Объект.Предопределенный Тогда + ИмяПредопределенного = Справочники.ИдентификаторыОбъектовМетаданных.ПолучитьИмяПредопределенного(Объект.Ссылка); + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl new file mode 100644 index 000000000..e6bab661f --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl @@ -0,0 +1,1439 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Процедура обновляет данные справочника по метаданным конфигурации. +// При работе процедуры может быть вызван обработчик события +// ОбщегоНазначенияПереопределяемый.ПриИзмененииИдентификатораОбъектаМетаданных(). +// +// Параметры: +// ЕстьИзменения - Булево, в этот параметр возвращается значение Истина, +// если производилась запись, иначе не изменяется. +// ЕстьУдаленные - Булево, в этот параметр возвращается значение Истина, +// если хотя бы один элемент справочника был помечен на удаление, +// иначе не изменяется. +// +Процедура ОбновитьДанныеСправочника(ЕстьИзменения = Истина, ЕстьУдаленные = Истина) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + СвойстваКоллекцийОбъектовМетаданных = СвойстваКоллекцийОбъектовМетаданных(); + СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(СвойстваКоллекцийОбъектовМетаданных); + СправочникМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник.ИдентификаторыОбъектовМетаданных"); + + СвойстваОбъектовМетаданных.Индексы.Добавить("ПолноеИмя"); + + // Обработана - состояние, когда идентификатор соотвествует объекту метаданных и + // был проверен и обновлен, если его свойства изменились + СвойстваОбъектовМетаданных.Колонки.Добавить("Обработана", Новый ОписаниеТипов("Булево")); + + // Изменение - состояние, когда Обработана = Истина и свойства идентификатора были изменены + СвойстваОбъектовМетаданных.Колонки.Добавить("Изменение", Новый ОписаниеТипов("Булево")); + + // ИзменениеСЗаменой - состояние, когда Изменение = Истина, причем был найден хотя бы один + // идентификатор с тем же ключом, и выполнялась процедура замены ссылки в информационной базе + // на новый идентификатор + СвойстваОбъектовМетаданных.Колонки.Добавить("ИзменениеСЗаменой", Новый ОписаниеТипов("Булево")); + + // ПараметрОбработчикаСобытияИзменение - структура свойств, заполняемая + // при изменении свойств идентификатора + СвойстваОбъектовМетаданных.Колонки.Добавить("ПараметрОбработчикаСобытияИзменение"); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(); + ЭлементБлокировки.Область = "Справочник.ИдентификаторыОбъектовМетаданных"; + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Идентификаторы.Ссылка, + | Идентификаторы.Родитель, + | Идентификаторы.ПометкаУдаления, + | Идентификаторы.Предопределенный КАК Предопределенный, + | Идентификаторы.Наименование, + | Идентификаторы.ПорядокКоллекции, + | Идентификаторы.Имя, + | Идентификаторы.Синоним, + | Идентификаторы.ПолноеИмя, + | Идентификаторы.ПолныйСиноним, + | Идентификаторы.БезДанных, + | Идентификаторы.ЗначениеПустойСсылки, + | Идентификаторы.КлючОбъектаМетаданных, + | Идентификаторы.Используется + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы + | + |УПОРЯДОЧИТЬ ПО + | Предопределенный УБЫВ"; + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + // Проверка и обновление свойств идентификаторов коллекций + СвойстваКоллекции = СвойстваКоллекцийОбъектовМетаданных.Найти(Выборка.Ссылка, "ИдентификаторКоллекции"); + Если СвойстваКоллекции <> Неопределено Тогда + ПроверитьОбновитьСвойстваКоллекции(Выборка, СвойстваКоллекции, ЕстьИзменения); + Продолжить; + КонецЕсли; + // Предопределенные элементы имеют приоритет, поэтому обрабатываются в первую очередь + КлючОбъектаМетаданных = Выборка.КлючОбъектаМетаданных.Получить(); + Если Выборка.Предопределенный Тогда + ПолноеИмя = ""; + ОбъектМетаданных = НайтиОбъектМетаданныхПредопределенного(Выборка.Ссылка, ПолноеИмя); + Если ОбъектМетаданных = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В справочнике Идентификаторы объектов метаданных + |для предопределенного элемента + |""%1"", + |не найден объект метаданных + |""%2"". + | + |Следует задать имя предопределенного элемента, + |соответствующее существующему объекту метаданных.'"), + ПолучитьИмяПредопределенного(Выборка.Ссылка), + ПолноеИмя); + КонецЕсли; + // Проверка, что предопределенный элемент относится к коллекции объектов метаданных, + // для которых существует КлючОбъектаМетаданных + ИмяКоллецииВЕдЧисле = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмя, ".")[0]; + ОписаниеКоллекции = СвойстваКоллекцийОбъектовМетаданных.Найти(ИмяКоллецииВЕдЧисле, "ИмяВЕдЧисле"); + Если ОписаниеКоллекции.БезКлючаОбъектаМетаданных Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В справочнике Идентификаторы объектов метаданных + |для предопределенного элемента + |""%1"", + |найден объект метаданных + |""%2"". + | + |Но предопределенные элементы не используются для + |объектов метаданных типа ""%3"". + | + |Следуется удалить предопределенный элемент.'"), + ПолучитьИмяПредопределенного(Выборка.Ссылка), + ПолноеИмя, + ИмяКоллецииВЕдЧисле); + КонецЕсли; + + Если КлючОбъектаМетаданных <> Неопределено + И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда + // Если ключ объекта метаданных задан, тогда нужно проверить, + // совпадают ли элементы, найденные по полному имени и по ключу + ОбъектМетаданныхПоКлючу = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных); + Если ОбъектМетаданных <> ОбъектМетаданныхПоКлючу Тогда + // Если для предопределеного элемента уже задан ключ объекта метаданных, + // но не совпадает с именем, заданным в предопределенном элементе, значит + // объект был переименован на другой существующий объект метаданных + Если ОбъектМетаданныхПоКлючу = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В справочнике Идентификаторы объектов метаданных + |для предопределенного элемента + |""%1"", + |задан ключ другого удаленного объекта метаданных. + | + |При переименовании предопределенного элемента допущена ошибка: + |элемент был переименован на существующий объект метаданных + |""%2"". + | + |Повторное использование предопределенного элемента + |для других объектов метаданных недопустимо. + | + |Следует удалить предопределенный элемент удаленного объекта + |метаданных и создать новый элемент для объекта метаданных + |""%2"".'"), + ПолучитьИмяПредопределенного(Выборка.Ссылка), + ПолноеИмя); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В справочнике Идентификаторы объектов метаданных + |для предопределенного элемента + |""%1"", + |задан ключ другого объекта метаданных + |""%2"". + | + |При переименовании предопределенного элемента допущена ошибка: + |элемент был переименован на существующий объект метаданных + |""%3"". + | + |Повторное использование предопределенного элемента + |для других объектов метаданных недопустимо. + | + |Требуется задать корректное имя + |""%4"" + |предопределенного элемента + |""%1"", + |соответствующее объекту метаданных + |""%2"".'"), + ПолучитьИмяПредопределенного(Выборка.Ссылка), + ОбъектМетаданныхПоКлючу.ПолноеИмя(), + ПолноеИмя, + СтрЗаменить(ОбъектМетаданныхПоКлючу.ПолноеИмя(), ".", "_")); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Ключ объекта метаданных может быть незаполнен для предопределенных элементов, + // а может быть равен Тип("Неопределено") для объектов метаданных без ключа, по которому + // можно найти ОбъектМетаданных + Если КлючОбъектаМетаданных = Неопределено + ИЛИ КлючОбъектаМетаданных = Тип("Неопределено") Тогда + // Если объект метаданных без ключа, то его можно найти + // через имя предопределенного или через предустановленный идентификатор + Если Выборка.Предопределенный Тогда + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя); + Иначе + СвойстваОбъектаМетаданных = СвойстваОбъектовМетаданных.Найти(Выборка.Ссылка, "Идентификатор"); + Если СвойстваОбъектаМетаданных = Неопределено Тогда + ОбъектМетаданных = Неопределено; + Иначе + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(СвойстваОбъектаМетаданных.ПолноеИмя); + КонецЕсли; + КонецЕсли; + Иначе + ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных); + КонецЕсли; + + // Если объект метаданных найден по ключу или имени предопределенного, + // тогда нужно подготовить строку свойств объекта метаданных + Если ОбъектМетаданных <> Неопределено Тогда + Строка = СвойстваОбъектовМетаданных.Найти(ОбъектМетаданных.ПолноеИмя(), "ПолноеИмя"); + Если ЗначениеЗаполнено(Строка.ПолноеИмяРодителя) Тогда + // Родитель может быть предустановленным или предопределенным элементом + СтрокаРодителя = СвойстваОбъектовМетаданных.Найти(Строка.ПолноеИмяРодителя, "ПолноеИмя"); + Если ЗначениеЗаполнено(СтрокаРодителя.Идентификатор) Тогда + Строка.Родитель = СтрокаРодителя.Идентификатор; + Иначе + ИмяПредопределенногоЭлементаРодителя = СтрЗаменить(Строка.ПолноеИмяРодителя, ".", "_"); + Попытка + Строка.Родитель = СправочникМенеджер[ИмяПредопределенногоЭлементаРодителя]; + Исключение + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В справочнике Идентификаторы объектов метаданных + |для предопределенного элемента: + |""%1"", + |не найден предопределенный элемент родителя: + |""%2"". + | + |Следует добавить предопределенный элемент родителя.'"), + ПолучитьИмяПредопределенного(Выборка.Ссылка), + СтрЗаменить(Строка.ПолноеИмяРодителя, ".", "_")); + КонецПопытки; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ОбъектМетаданных = Неопределено ИЛИ Строка.Обработана Тогда + // Если объект метаданных не найден или найден повторно + // тогда дубль идентификатора требуется пометить на удаление + Если Выборка.Предопределенный = Выборка.ПометкаУдаления + ИЛИ ЗначениеЗаполнено(Выборка.Родитель) + ИЛИ Лев(Выборка.Наименование, 1) <> "?" + ИЛИ Лев(Выборка.Имя, 1) <> "?" + ИЛИ Лев(Выборка.Синоним, 1) <> "?" + ИЛИ Лев(Выборка.ПолноеИмя, 1) <> "?" + ИЛИ Лев(Выборка.ПолныйСиноним, 1) <> "?" + ИЛИ Выборка.Используется + ИЛИ Выборка.ЗначениеПустойСсылки <> Неопределено Тогда + // Сохранения старых свойств для обработчика события ПриИзмененииИдентификатораОбъектаМетаданных + ТаблицаОбъект = Выборка.Ссылка.ПолучитьОбъект(); + Свойства = ПараметрыОбработчикаСобытия(); + ЗаполнитьЗначенияСвойств(Свойства.Старые, ТаблицаОбъект); + // Установка новых свойств идентификатора объекта метаданных + ТаблицаОбъект = Выборка.Ссылка.ПолучитьОбъект(); + Используется = ТаблицаОбъект.Используется; + ТаблицаОбъект.ПометкаУдаления = НЕ Выборка.Предопределенный; + ТаблицаОбъект.Родитель = Неопределено; + ТаблицаОбъект.Наименование = "? " + ТаблицаОбъект.Наименование; + ТаблицаОбъект.Имя = "? " + ТаблицаОбъект.Имя; + ТаблицаОбъект.Синоним = "? " + ТаблицаОбъект.Синоним; + ТаблицаОбъект.ПолноеИмя = "? " + ТаблицаОбъект.ПолноеИмя; + ТаблицаОбъект.ПолныйСиноним = "? " + ТаблицаОбъект.ПолныйСиноним; + ТаблицаОбъект.Используется = Ложь; + ТаблицаОбъект.ЗначениеПустойСсылки = Неопределено; + ТаблицаОбъект.ДополнительныеСвойства.Вставить("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника"); + ТаблицаОбъект.Записать(); + ЕстьИзменения = Истина; + // Обработка преобразования обычного элемента в предопределенный + // выполняется, если при существовании обычного элемента был добавлен + // предопределенный элемент + Если ОбъектМетаданных <> Неопределено И Используется Тогда + // Поиск предопределенного элемента + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПолноеИмя", ОбъектМетаданных.ПолноеИмя()); + Запрос.Текст = + "ВЫБРАТЬ + | Таблица.Ссылка, + | Таблица.ПолноеИмя + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК Таблица + |ГДЕ + | Таблица.ПолноеИмя = &ПолноеИмя + | И Таблица.Предопределенный"; + Выгрузка = Запрос.Выполнить().Выгрузить(); + // Если найдено более одного предопределенного элемента для одного + // объекта метаданных, значит произошла ошибка при разработке или + // при установке разным предопределенным элементам ключа одного и + // того же объекта метаданных + Если Выгрузка.Количество() > 1 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при обновлении справочника ""Идентификаторы объектов метаданных"". + |По внутреннему ключу поиска для объекта метаданных ""%1"" + |найдено более одного предопределенного элемента.'"), + Выгрузка[0].ПолноеИмя); + ИначеЕсли Выгрузка.Количество() = 1 Тогда + // Если старый идентификатор использован в базе данных его требуется + // заменить на новый идентификатор предопределенного элемента + Строка.ИзменениеСЗаменой = Истина; + Свойства.СтандартнаяЗаменаСсылок = Истина; + Свойства.Новые = Строка.ПараметрОбработчикаСобытияИзменение.Новые; + ОбщегоНазначенияПереопределяемый.ПриИзмененииИдентификатораОбъектаМетаданных("Изменение", Свойства); + Если Свойства.СтандартнаяЗаменаСсылок = Истина Тогда + ЗаменитьСсылкуВИнформационнойБазе(ТаблицаОбъект.Ссылка, Выгрузка[0].Ссылка); + КонецЕсли; + КонецЕсли; + Иначе + ЕстьУдаленные = Истина; + // Вызов обработчика события ПриИзмененииИдентификатораОбъектаМетаданных + ОбщегоНазначенияПереопределяемый.ПриИзмененииИдентификатораОбъектаМетаданных("Удаление", Свойства); + КонецЕсли; + КонецЕсли; + Иначе + // Обновление свойств существующих объектов метаданных, если изменились + Строка.Обработана = Истина; + Если Выборка.Родитель <> Строка.Родитель + ИЛИ Выборка.Наименование <> Строка.Наименование + ИЛИ Выборка.ПорядокКоллекции <> Строка.ПорядокКоллекции + ИЛИ Выборка.Имя <> Строка.Имя + ИЛИ Выборка.Синоним <> Строка.Синоним + ИЛИ Выборка.ПолноеИмя <> Строка.ПолноеИмя + ИЛИ Выборка.ПолныйСиноним <> Строка.ПолныйСиноним + ИЛИ Выборка.БезДанных <> Строка.БезДанных + ИЛИ Выборка.ЗначениеПустойСсылки <> Строка.ЗначениеПустойСсылки + ИЛИ Выборка.ПометкаУдаления + ИЛИ КлючОбъектаМетаданных = Неопределено + ИЛИ НЕ Выборка.Используется Тогда + // Сохранения старых свойств для обработчика события ПриИзмененииИдентификатораОбъектаМетаданных + ТаблицаОбъект = Выборка.Ссылка.ПолучитьОбъект(); + Свойства = ПараметрыОбработчикаСобытия(); + ЗаполнитьЗначенияСвойств(Свойства.Старые, ТаблицаОбъект); + // Установка новых свойств идентификатора объекта метаданных + ЗаполнитьЗначенияСвойств(ТаблицаОбъект, Строка); + Если КлючОбъектаМетаданных = Неопределено Тогда + ТаблицаОбъект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(КлючОбъектаМетаданных(Строка.ПолноеИмя)); + КонецЕсли; + ТаблицаОбъект.ПометкаУдаления = Ложь; + ТаблицаОбъект.Используется = Истина; + ТаблицаОбъект.ДополнительныеСвойства.Вставить("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника"); + ТаблицаОбъект.Записать(); + ЕстьИзменения = Истина; + // Сохранения новых свойств для обработчика события ПриИзмененииИдентификатораОбъектаМетаданных + ЗаполнитьЗначенияСвойств(Свойства.Новые, ТаблицаОбъект); + Строка.Изменение = Истина; + Строка.ПараметрОбработчикаСобытияИзменение = Свойства; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + // Добавление идентификаторов новых объектов метаданных + // Объекты метаданных без ключа объекта метаданных не добавляются, + // такие объекты метаданных добавляются только вручную в виде предопределенных элементов, + // например, подсистемы + Для каждого Строка Из СвойстваОбъектовМетаданных.НайтиСтроки(Новый Структура("Обработана", Ложь)) Цикл + ТаблицаОбъект = СоздатьЭлемент(); + Если ЗначениеЗаполнено(Строка.Идентификатор) Тогда + ТаблицаОбъект.УстановитьСсылкуНового(Строка.Идентификатор); + КонецЕсли; + Если ЗначениеЗаполнено(Строка.ПолноеИмяРодителя) Тогда + Строка.Родитель = СвойстваОбъектовМетаданных.Найти(Строка.ПолноеИмяРодителя, "ПолноеИмя").Идентификатор; + КонецЕсли; + ЗаполнитьЗначенияСвойств(ТаблицаОбъект, Строка); + ТаблицаОбъект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(КлючОбъектаМетаданных(Строка.ПолноеИмя)); + ТаблицаОбъект.Используется = Истина; + ТаблицаОбъект.ДополнительныеСвойства.Вставить("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника"); + ТаблицаОбъект.Записать(); + ЕстьИзменения = Истина; + // Вызов обработчика события ПриИзмененииИдентификатораОбъектаМетаданных + Свойства = ПараметрыОбработчикаСобытия(); + ЗаполнитьЗначенияСвойств(Свойства.Новые, ТаблицаОбъект); + ОбщегоНазначенияПереопределяемый.ПриИзмененииИдентификатораОбъектаМетаданных("Добавление", Свойства); + КонецЦикла; + + // Вызов обработчика события ПриИзмененииИдентификатораОбъектаМетаданных для вида события "Изменение" без замены + Для каждого Строка Из СвойстваОбъектовМетаданных.НайтиСтроки(Новый Структура("Изменение, ИзменениеСЗаменой", Истина, Ложь)) Цикл + ТребуетсяВызовОбработчикаСобытия = Ложь; + Свойства = Строка.ПараметрОбработчикаСобытияИзменение; + Для каждого КлючИЗначение ИЗ Свойства.Новые Цикл + Если Свойства.Новые[КлючИЗначение.Ключ] <> Свойства.Старые[КлючИЗначение.Ключ] Тогда + ТребуетсяВызовОбработчикаСобытия = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если ТребуетсяВызовОбработчикаСобытия Тогда + ОбщегоНазначенияПереопределяемый.ПриИзмененииИдентификатораОбъектаМетаданных("Изменение", Свойства); + КонецЕсли; + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Только для внутреннего использования +Функция КлючОбъектаМетаданныхСоответствуетПолномуИмени(СвойстваИдентификатора) Экспорт + + РезультатПроверки = Новый Структура; + РезультатПроверки.Вставить("НеСоответствует", Истина); + РезультатПроверки.Вставить("КлючОбъектаМетаданных", Неопределено); + + КлючОбъектаМетаданных = СвойстваИдентификатора.КлючОбъектаМетаданных.Получить(); + + Если КлючОбъектаМетаданных <> Неопределено + И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда + // Ключ задан, поиск объекта метаданных по ключу + РезультатПроверки.Вставить("КлючОбъектаМетаданных", КлючОбъектаМетаданных); + ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных); + Если ОбъектМетаданных <> Неопределено Тогда + РезультатПроверки.НеСоответствует = ОбъектМетаданных.ПолноеИмя() <> СвойстваИдентификатора.ПолноеИмя; + КонецЕсли; + Иначе + // Ключ не задан, поиск объекта метаданных по полному имени + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(СвойстваИдентификатора.ПолноеИмя); + Если ОбъектМетаданных = Неопределено Тогда + // Возможно задана коллекция + СвойстваКоллекций = СвойстваКоллекцийОбъектовМетаданных(); + Строка = СвойстваКоллекций.Найти(СвойстваИдентификатора.Ссылка, "ИдентификаторКоллекции"); + Если Строка <> Неопределено Тогда + ОбъектМетаданных = Метаданные[Строка.Имя]; + РезультатПроверки.НеСоответствует = Строка.Имя <> СвойстваИдентификатора.ПолноеИмя; + КонецЕсли; + Иначе + РезультатПроверки.НеСоответствует = Ложь; + КонецЕсли; + КонецЕсли; + + РезультатПроверки.Вставить("ОбъектМетаданных", ОбъектМетаданных); + + Возврат РезультатПроверки; + +КонецФункции + +// Только для внутреннего использования +Процедура ВыгрузитьДанныеСправочника(Знач КаталогВыгрузки) Экспорт + + Запись = Новый Запись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.Явное); + КонецЦикла; + + Запись.ЗаписатьКонецЭлемента(); + + Запись.Закрыть(); + +КонецПроцедуры + +// Только для внутреннего использования +Процедура ДополнитьСловарьЗаменСсылокИдентификаторовТекущихИЗагружаемыхДанных(Знач СловарьЗамен, Знач КаталогВыгрузки) Экспорт + + СоответствиеСсылок = Новый Соответствие; + + Чтение = Новый ЧтениеXML; + Чтение.ОткрытьФайл(КаталогВыгрузки + "MetadataObjectsIdentifiers.xml"); + Чтение.ПерейтиКСодержимому(); + Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента + ИЛИ Чтение.Имя <> "Data" Тогда + + ВызватьИсключение(НСтр("ru = 'Неверный формат файла MetadataObjectsIdentifiers.xml'")); + + КонецЕсли; + + Если НЕ Чтение.Прочитать() Тогда + ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Обнаружено завершение файла.'")); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Идентификаторы.Ссылка, + | Идентификаторы.ПолноеИмя, + | Идентификаторы.Используется + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы"; + + СвойстваИдентификаторов = Запрос.Выполнить().Выгрузить(); + СвойстваИдентификаторов.Индексы.Добавить("Ссылка"); + СвойстваИдентификаторов.Индексы.Добавить("ПолноеИмя"); + + Пока Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл + Данные = СериализаторXDTO.ПрочитатьXML(Чтение); + + СвойстваИдентификатора = СвойстваИдентификаторов.Найти(Данные.Ссылка, "Ссылка"); + Если СвойстваИдентификатора = Неопределено + ИЛИ НЕ СвойстваИдентификатора.Используется Тогда + + ОбъектМетаданных = ОбъектМетаданныхПоКлючу(Данные.КлючОбъектаМетаданных); + Если ОбъектМетаданных = Неопределено Тогда + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Данные.ПолноеИмя); + КонецЕсли; + + Если ОбъектМетаданных <> Неопределено Тогда + Идентификатор = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных); + Если Данные.Ссылка <> Идентификатор Тогда + // Ключ - Существующая ссылка. + // Значение - Загружаемая ссылка. + СоответствиеСсылок.Вставить(Идентификатор, Данные.Ссылка); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + СтрокаФрагмента = СловарьЗамен.Добавить(); + СтрокаФрагмента.Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных"); + СтрокаФрагмента.СоответствиеСсылок = СоответствиеСсылок; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура ПроверитьОбновитьСвойстваКоллекции(Знач ТекущиеСвойства, Знач НовыеСвойства, ЕстьИзменения) + + НаименованиеКоллекции = НовыеСвойства.Синоним + " (" + НСтр("ru = 'Коллекция'") + ")"; + + Если ТекущиеСвойства.Наименование <> НаименованиеКоллекции + ИЛИ ТекущиеСвойства.ПорядокКоллекции <> НовыеСвойства.ПорядокКоллекции + ИЛИ ТекущиеСвойства.Имя <> НовыеСвойства.Имя + ИЛИ ТекущиеСвойства.Синоним <> НовыеСвойства.Синоним + ИЛИ ТекущиеСвойства.ПолноеИмя <> НовыеСвойства.Имя + ИЛИ ТекущиеСвойства.ПолныйСиноним <> НовыеСвойства.Синоним + ИЛИ ТекущиеСвойства.БезДанных <> Ложь + ИЛИ ТекущиеСвойства.ЗначениеПустойСсылки <> Неопределено + ИЛИ ТекущиеСвойства.Используется <> Истина + ИЛИ ТекущиеСвойства.КлючОбъектаМетаданных.Получить() <> Неопределено Тогда + + // Установка новых свойств + Объект = ТекущиеСвойства.Ссылка.ПолучитьОбъект(); + Объект.Наименование = НаименованиеКоллекции; + Объект.ПорядокКоллекции = НовыеСвойства.ПорядокКоллекции; + Объект.Имя = НовыеСвойства.Имя; + Объект.Синоним = НовыеСвойства.Синоним; + Объект.ПолноеИмя = НовыеСвойства.Имя; + Объект.ПолныйСиноним = НовыеСвойства.Синоним; + Объект.БезДанных = Ложь; + Объект.ЗначениеПустойСсылки = Неопределено; + Объект.КлючОбъектаМетаданных = Неопределено; + Объект.Используется = Истина; + Объект.ДополнительныеСвойства.Вставить("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника"); + Объект.Записать(); + ЕстьИзменения = Истина; + КонецЕсли; + +КонецПроцедуры + +Функция НайтиОбъектМетаданныхПредопределенного(Знач Ссылка, ПолноеИмя) + + ИмяПредопределенного = ПолучитьИмяПредопределенного(Ссылка); + + Если ВРег(Лев(ИмяПредопределенного, 11)) = ВРег("Подсистема_") Тогда + Пока Истина Цикл + ПозицияСледующегоИмени = Найти(ВРег(ИмяПредопределенного), ВРег("_Подсистема")); + Если ПозицияСледующегоИмени > 0 Тогда + ПолноеИмя = ПолноеИмя + ".Подсистема." + Сред(ИмяПредопределенного, 12, ПозицияСледующегоИмени - 12); + ИмяПредопределенного = Сред(ИмяПредопределенного, ПозицияСледующегоИмени + 1); + Иначе + ПолноеИмя = ПолноеИмя + ".Подсистема." + Сред(ИмяПредопределенного, 12); + Прервать; + КонецЕсли; + КонецЦикла; + ПолноеИмя = Сред(ПолноеИмя, 2); + Иначе + ПозицияПодчеркивания = Найти(ИмяПредопределенного, "_"); + ПолноеИмя = Лев(ИмяПредопределенного, ПозицияПодчеркивания-1) + + "." + + Сред(ИмяПредопределенного, ПозицияПодчеркивания + 1); + КонецЕсли; + + Возврат Метаданные.НайтиПоПолномуИмени(ПолноеИмя); + +КонецФункции + +Функция КлючОбъектаМетаданных(ПолноеИмя) + + ПозицияТочки = Найти(ПолноеИмя, "."); + + КлассОМ = Лев( ПолноеИмя, ПозицияТочки-1); + ИмяОМ = Сред(ПолноеИмя, ПозицияТочки+1); + + Если ВРег(КлассОМ) = ВРег("Роль") Тогда + ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + ПользовательИБ.Роли.Добавить(Метаданные.Роли[ИмяОМ]); + Возврат ПользовательИБ.Роли; + + ИначеЕсли ВРег(КлассОМ) = ВРег("ПланОбмена") Тогда + Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ); + + ИначеЕсли ВРег(КлассОМ) = ВРег("Справочник") Тогда + Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ); + + ИначеЕсли ВРег(КлассОМ) = ВРег("Документ") Тогда + Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ); + + ИначеЕсли ВРег(КлассОМ) = ВРег("ЖурналДокументов") Тогда + Возврат ТипЗнч(ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя)); + + ИначеЕсли ВРег(КлассОМ) = ВРег("Отчет") Тогда + Возврат Тип(КлассОМ + "Объект." + ИмяОМ); + + ИначеЕсли ВРег(КлассОМ) = ВРег("Обработка") Тогда + Возврат Тип(КлассОМ + "Объект." + ИмяОМ); + + ИначеЕсли ВРег(КлассОМ) = ВРег("ПланВидовХарактеристик") Тогда + Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ); + + ИначеЕсли ВРег(КлассОМ) = ВРег("ПланСчетов") Тогда + Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ); + + ИначеЕсли ВРег(КлассОМ) = ВРег("ПланВидовРасчета") Тогда + Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ); + + ИначеЕсли ВРег(КлассОМ) = ВРег("РегистрСведений") Тогда + Возврат Тип(КлассОМ + "КлючЗаписи." + ИмяОМ); + + ИначеЕсли ВРег(КлассОМ) = ВРег("РегистрНакопления") Тогда + Возврат Тип(КлассОМ + "КлючЗаписи." + ИмяОМ); + + ИначеЕсли ВРег(КлассОМ) = ВРег("РегистрБухгалтерии") Тогда + Возврат Тип(КлассОМ + "КлючЗаписи." + ИмяОМ); + + ИначеЕсли ВРег(КлассОМ) = ВРег("РегистрРасчета") Тогда + Возврат Тип(КлассОМ + "КлючЗаписи." + ИмяОМ); + + ИначеЕсли ВРег(КлассОМ) = ВРег("БизнесПроцесс") Тогда + Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ); + + ИначеЕсли ВРег(КлассОМ) = ВРег("Задача") Тогда + Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ); + Иначе + // Без ключа объекта метаданных + Возврат Тип("Неопределено"); + КонецЕсли; + +КонецФункции + +Функция ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных) + + ОбъектМетаданных = Неопределено; + + Если ТипЗнч(КлючОбъектаМетаданных) = Тип("РолиПользователя") Тогда + Для каждого Роль Из Метаданные.Роли Цикл + Если КлючОбъектаМетаданных.Содержит(Роль) Тогда + Возврат Роль; + КонецЕсли; + КонецЦикла; + Иначе + ОбъектМетаданных = Метаданные.НайтиПоТипу(КлючОбъектаМетаданных); + КонецЕсли; + + Возврат ОбъектМетаданных; + +КонецФункции + +Функция СвойстваОбъектовМетаданных(СвойстваКоллекцийОбъектовМетаданных) + + СвойстваОбъектовМетаданных = Новый ТаблицаЗначений; + СвойстваОбъектовМетаданных.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150))); + СвойстваОбъектовМетаданных.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(510))); + СвойстваОбъектовМетаданных.Колонки.Добавить("ПолноеИмяРодителя", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(510))); + СвойстваОбъектовМетаданных.Колонки.Добавить("ПорядокКоллекции", Новый ОписаниеТипов("Число")); + СвойстваОбъектовМетаданных.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + СвойстваОбъектовМетаданных.Колонки.Добавить("Родитель", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + СвойстваОбъектовМетаданных.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150))); + СвойстваОбъектовМетаданных.Колонки.Добавить("Синоним", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(255))); + СвойстваОбъектовМетаданных.Колонки.Добавить("ПолныйСиноним", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(510))); + СвойстваОбъектовМетаданных.Колонки.Добавить("БезДанных", Новый ОписаниеТипов("Булево")); + СвойстваОбъектовМетаданных.Колонки.Добавить("БезКлючаОбъектаМетаданных", Новый ОписаниеТипов("Булево")); + СвойстваОбъектовМетаданных.Колонки.Добавить("ЗначениеПустойСсылки"); + + // Подготовка предустановленных идентификаторов + ПредустановленныеИдентификаторы = Новый ТаблицаЗначений; + ПредустановленныеИдентификаторы.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + ПредустановленныеИдентификаторы.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка")); + + ОбщегоНазначенияПереопределяемый.ЗаполнитьПредустановленныеИдентификаторыОбъектовМетаданных(ПредустановленныеИдентификаторы); + + Для каждого СвойстваКоллекции Из СвойстваКоллекцийОбъектовМетаданных Цикл + ДобавитьСвойстваОбъектовМетаданных(Метаданные[СвойстваКоллекции.Имя], СвойстваКоллекции, СвойстваОбъектовМетаданных, ПредустановленныеИдентификаторы); + КонецЦикла; + + Если ПредустановленныеИдентификаторы.Количество() > 0 Тогда + ВызватьИсключениеОшибкиЗаполненияПредустановленныхИдентификаторов(ПредустановленныеИдентификаторы, СвойстваКоллекцийОбъектовМетаданных); + КонецЕсли; + + Возврат СвойстваОбъектовМетаданных; + +КонецФункции + +Процедура ДобавитьСвойстваОбъектовМетаданных(Знач КолекцияОбъектовМетаданных, Знач СвойстваКоллекции, Знач СвойстваОбъектовМетаданных, Знач ПредустановленныеИдентификаторы, Знач ПолноеИмяРодителя = "", Знач ПолныйСинонимРодителя = "") + + Для каждого ОбъектМетаданных Из КолекцияОбъектовМетаданных Цикл + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + + Если НЕ СвойстваКоллекции.БезДанных + И Найти(СвойстваКоллекции.ИмяВЕдЧисле, "Регистр") = 0 Тогда + + ЗначениеПустойСсылки = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя).ПустаяСсылка(); + Иначе + ЗначениеПустойСсылки = Неопределено; + КонецЕсли; + + Если СвойстваКоллекции.БезКлючаОбъектаМетаданных Тогда + ОписаниеИдентификатора = ПредустановленныеИдентификаторы.Найти(ПолноеИмя, "ПолноеИмя"); + Если ОписаниеИдентификатора = Неопределено Тогда + Продолжить; + КонецЕсли; + Идентификатор = ОписаниеИдентификатора.Идентификатор; + ПредустановленныеИдентификаторы.Удалить(ОписаниеИдентификатора); + Иначе + Идентификатор = ПустаяСсылка(); + КонецЕсли; + + НоваяСтрока = СвойстваОбъектовМетаданных.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СвойстваКоллекции); + НоваяСтрока.Идентификатор = Идентификатор; + НоваяСтрока.Родитель = СвойстваКоллекции.ИдентификаторКоллекции; + НоваяСтрока.Наименование = ПредставлениеОбъектаМетаданных(ОбъектМетаданных, СвойстваКоллекции); + НоваяСтрока.ПолноеИмя = ПолноеИмя; + НоваяСтрока.ПолноеИмяРодителя = ПолноеИмяРодителя; + НоваяСтрока.Имя = ОбъектМетаданных.Имя; + НоваяСтрока.Синоним = ?(ЗначениеЗаполнено(ОбъектМетаданных.Синоним), ОбъектМетаданных.Синоним, ОбъектМетаданных.Имя); + НоваяСтрока.ПолныйСиноним = ПолныйСинонимРодителя + СвойстваКоллекции.СинонимВЕдЧисле + ". " + НоваяСтрока.Синоним; + НоваяСтрока.ЗначениеПустойСсылки = ЗначениеПустойСсылки; + + Если СвойстваКоллекции.Имя = "Подсистемы" Тогда + ДобавитьСвойстваОбъектовМетаданных(ОбъектМетаданных.Подсистемы, СвойстваКоллекции, СвойстваОбъектовМетаданных, ПредустановленныеИдентификаторы, ПолноеИмя, НоваяСтрока.ПолныйСиноним + ". "); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ПредставлениеОбъектаМетаданных(Знач ОбъектМетаданных, Знач СвойстваКоллекции); + + Постфикс = "(" + СвойстваКоллекции.СинонимВЕдЧисле + ")"; + + Синоним = ?(ЗначениеЗаполнено(ОбъектМетаданных.Синоним), ОбъектМетаданных.Синоним, ОбъектМетаданных.Имя); + + МаксимальнаяДлинаСинонима = 150 - СтрДлина(Постфикс); + Если СтрДлина(Синоним) > МаксимальнаяДлинаСинонима + 1 Тогда + Возврат Лев(Синоним, МаксимальнаяДлинаСинонима - 2) + "..." + Постфикс; + КонецЕсли; + + Возврат Синоним + " (" + СвойстваКоллекции.СинонимВЕдЧисле + ")"; + +КонецФункции + +Функция СвойстваКоллекцийОбъектовМетаданных() + + СвойстваКоллекцийОбъектовМетаданных = Новый ТаблицаЗначений; + СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(50))); + СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("ИмяВЕдЧисле", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(50))); + СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("Синоним", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(255))); + СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("СинонимВЕдЧисле", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(255))); + СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("ПорядокКоллекции", Новый ОписаниеТипов("Число")); + СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("БезДанных", Новый ОписаниеТипов("Булево")); + СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("БезКлючаОбъектаМетаданных", Новый ОписаниеТипов("Булево")); + СвойстваКоллекцийОбъектовМетаданных.Колонки.Добавить("ИдентификаторКоллекции", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + + // Подсистемы + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "Подсистемы"; + Строка.Синоним = НСтр("ru = 'Подсистемы'"); + Строка.ИмяВЕдЧисле = "Подсистема"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'Подсистема'"); + Строка.БезДанных = Истина; + Строка.БезКлючаОбъектаМетаданных = Истина; + + // Роли + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "Роли"; + Строка.Синоним = НСтр("ru = 'Роли'"); + Строка.ИмяВЕдЧисле = "Роль"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'Роль'"); + Строка.БезДанных = Истина; + + // ПланыОбмена + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "ПланыОбмена"; + Строка.Синоним = НСтр("ru = 'Планы обмена'"); + Строка.ИмяВЕдЧисле = "ПланОбмена"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'План обмена'"); + + // Справочники + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "Справочники"; + Строка.Синоним = НСтр("ru = 'Справочники'"); + Строка.ИмяВЕдЧисле = "Справочник"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'Справочник'"); + + // Документы + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "Документы"; + Строка.Синоним = НСтр("ru = 'Документы'"); + Строка.ИмяВЕдЧисле = "Документ"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'Документ'"); + + // ЖурналыДокументов + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "ЖурналыДокументов"; + Строка.Синоним = НСтр("ru = 'Журналы документов'"); + Строка.ИмяВЕдЧисле = "ЖурналДокументов"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'Журнал документов'"); + Строка.БезДанных = Истина; + + // Отчеты + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "Отчеты"; + Строка.Синоним = НСтр("ru = 'Отчеты'"); + Строка.ИмяВЕдЧисле = "Отчет"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'Отчет'"); + Строка.БезДанных = Истина; + + // Обработки + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "Обработки"; + Строка.Синоним = НСтр("ru = 'Обработки'"); + Строка.ИмяВЕдЧисле = "Обработка"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'Обработка'"); + Строка.БезДанных = Истина; + + // ПланыВидовХарактеристик + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "ПланыВидовХарактеристик"; + Строка.Синоним = НСтр("ru = 'Планы видов характеристик'"); + Строка.ИмяВЕдЧисле = "ПланВидовХарактеристик"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'План видов характеристик'"); + + // ПланыСчетов + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "ПланыСчетов"; + Строка.Синоним = НСтр("ru = 'Планы счетов'"); + Строка.ИмяВЕдЧисле = "ПланСчетов"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'План счетов'"); + + // ПланыВидовРасчета + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "ПланыВидовРасчета"; + Строка.Синоним = НСтр("ru = 'Планы видов расчета'"); + Строка.ИмяВЕдЧисле = "ПланВидовРасчета"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'План видов расчета'"); + + // РегистрыСведений + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "РегистрыСведений"; + Строка.Синоним = НСтр("ru = 'Регистры сведений'"); + Строка.ИмяВЕдЧисле = "РегистрСведений"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'Регистр сведений'"); + + // РегистрыНакопления + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "РегистрыНакопления"; + Строка.Синоним = НСтр("ru = 'Регистры накопления'"); + Строка.ИмяВЕдЧисле = "РегистрНакопления"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'Регистр накопления'"); + + // РегистрыБухгалтерии + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "РегистрыБухгалтерии"; + Строка.Синоним = НСтр("ru = 'Регистры бухгалтерии'"); + Строка.ИмяВЕдЧисле = "РегистрБухгалтерии"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'Регистр бухгалтерии'"); + + // РегистрыРасчета + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "РегистрыРасчета"; + Строка.Синоним = НСтр("ru = 'Регистры расчета'"); + Строка.ИмяВЕдЧисле = "РегистрРасчета"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'Регистр расчета'"); + + // БизнесПроцессы + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "БизнесПроцессы"; + Строка.Синоним = НСтр("ru = 'Бизнес-процессы'"); + Строка.ИмяВЕдЧисле = "БизнесПроцесс"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'Бизнес-процесс'"); + + // Задачи + Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); + Строка.Имя = "Задачи"; + Строка.Синоним = НСтр("ru = 'Задачи'"); + Строка.ИмяВЕдЧисле = "Задача"; + Строка.СинонимВЕдЧисле = НСтр("ru = 'Задача'"); + + // Заполнение дополнительных свойств + СправочникМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник.ИдентификаторыОбъектовМетаданных"); + Для каждого Строка Из СвойстваКоллекцийОбъектовМетаданных Цикл + Попытка + Строка.ИдентификаторКоллекции = СправочникМенеджер[Строка.Имя]; + Исключение + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найден идентификатор коллекции + |объектов метаданных ""%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 = 'Идентификаторы объектов метаданных. Замена идентификатора'"), + УровеньЖурналаРегистрации.Ошибка, + , + , + Описание, + РежимТранзакцииЗаписиЖурналаРегистрации.Независимая); + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl new file mode 100644 index 000000000..2a0150764 --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl @@ -0,0 +1,54 @@ + + +// Обработчик события ПередЗаписью предотвращает изменение идентификаторов +// объектов метаданных для которых допустимо только предусмотренное +// обновление на основе метаданных конфигурации с помощью +// процедуры: +// +// Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника() +// +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если НЕ ДополнительныеСвойства.Свойство("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника") Тогда + + ВызватьИсключение(НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"". + | + |Изменение идентификаторов объектов метаданных выполняется + |- либо автоматически с помощью процедуры + | Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(), + |- либо вручную через конфигуратор (добавление/удаление предопределенных элементов). + | + |Допустимо удаление неиспользуемых элементов, помеченных на удаление.'")); + КонецЕсли; + +КонецПроцедуры + + +// Обработчик события ПередУдалением предотвращает удаление идентификаторов +// объектов метаданных, у которых значение реквизита "Используются" установлено Истина +// или значение реквизита "ПометкаУдаления" установлено Ложь. +// +Процедура ПередУдалением(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Используется Тогда + ВызватьИсключение(НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"". + | + |Удаление идентификаторов объектов метаданных, у которых значение + |реквизита ""Используется"" установлено Истина недопустимо.'")); + ИначеЕсли НЕ ПометкаУдаления Тогда + ВызватьИсключение(НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"". + | + |Удаление идентификаторов объектов метаданных, у которых значение + |реквизита ""ПометкаУдаления"" установлено Ложь недопустимо.'")); + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo new file mode 100644 index 000000000..b8824e0b7 --- /dev/null +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo @@ -0,0 +1,466 @@ + + + + + + + + + + ИдентификаторыОбъектовМетаданных + + ru + Идентификаторы объектов метаданных + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Description + DontUse + + Use + PredefinedDataName + + Use + + + + + Use + Predefined + + Use + + + + + Use + Ref + + ru + Идентификатор + + + ru + Дополнительный внешний идентификатор таблицы объекта метаданных + + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + IsFolder + + Use + + + + + Use + Owner + true + + ShowError + Use + + + + + Use + Parent + true + + Use + + + + + Use + Description + + ru + Представление + + + ru + Представление объекта метаданных + + + ShowError + Use + + + + + Use + Code + + Use + + + + Use + Managed + + ru + Идентификатор объекта метаданых + + + ru + Идентификаторы объектов метаданных для использования в базе данных. + + true + HierarchyOfItems + 2 + true + 150 + String + Variable + AsDescription + + + Задачи + + + + + + БизнесПроцессы + + + + + + РегистрыРасчета + + + + + + РегистрыБухгалтерии + + + + + + ПланыВидовРасчета + + + + + + ПланыСчетов + + + + + + ПланыВидовХарактеристик + + + + + + Обработки + + + + + + Отчеты + + + + + + Справочники + + + + + + Роли + + + + + Роль_ПолныеПрава + + + + + + + РегистрыСведений + + + + + + РегистрыНакопления + + + + + + Подсистемы + + + + + + ПланыОбмена + + + + + + ЖурналыДокументов + + + + + + Документы + + + + + + InDialog + BothWays + Catalog.ИдентификаторыОбъектовМетаданных.Form.ФормаЭлемента + Catalog.ИдентификаторыОбъектовМетаданных.Form.ФормаСписка + Catalog.ИдентификаторыОбъектовМетаданных.Form.ФормаВыбора + + ПорядокКоллекции + + ru + Порядок коллекции + + + Number + + 2 + true + + + + ru + Порядок коллекции объекта метаданных, +используемый для сортировки в отчетах, +например, коллекция "Справочники" +перед коллекцией "Документы" + + + + + IndexWithAdditionalOrder + Use + + + Имя + + ru + Имя + + + String + + 255 + + + + ru + Имя объекта метаданных, +например, "ОбъектыАдресацииЗадач" + + + + + Use + Use + + + Синоним + + ru + Синоним + + + String + + 255 + + + + ru + Синоним объекта метаданных, +например, "Объекты адресации задач" + + + + + Use + Use + + + ПолноеИмя + + ru + Полное имя + + + String + + 430 + + + + ru + Полное имя объекта метаданных, +например, "ПланВидовХарактеристик.ОбъектыАдресацииЗадач" + + + + + Index + Use + Use + + + ПолныйСиноним + + ru + Полный синоним + + + String + + 430 + + + + ru + Полный синоним объекта метаданных, +например, "Планы видов характеристик. Объекты адресации задач" + + + + + Use + Use + + + БезДанных + + ru + Без данных + + + Boolean + + + ru + Объект метаданных не имеет таблиц данных + + + + + Use + + + ЗначениеПустойСсылки + + ru + Значение пустой ссылки + + + AnyRef + + + ru + Для ссылочных типов объектов метаданных +содержит пустую ссылку своего типа, +для остальных - Неопределено +(в форме показано представление +типа значения пустой ссылки) + + + + + Index + Use + + + КлючОбъектаМетаданных + + ru + Ключ объекта метаданных + + + ValueStorage + + + ru + Хранилище ключа по которому определяется объект метаданных без использования полного имени + + + + + Use + + + Используется + + ru + Используется + + + Boolean + + + ru + Идентификатору соответстует объект метаданных + + + + + Use + Use + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + + + ФормаВыбора + + ru + Форма выбора + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Form.form b/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Form.form new file mode 100644 index 000000000..6b52acaff --- /dev/null +++ b/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Form.form @@ -0,0 +1,658 @@ + + + + ГруппаСтраницыФормы + 1 + + ГруппаВыборПроизводственногоКалендаря + 2 + + СписокПроизводственныхКалендарей + 6 + true + true + + true + + + СписокПроизводственныхКалендарей + + None + + СписокПроизводственныхКалендарейПроизводственныйКалендарь + 11 + true + true + + true + + + СписокПроизводственныхКалендарей.ПроизводственныйКалендарь + + + СписокПроизводственныхКалендарейПроизводственныйКалендарьРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + СписокПроизводственныхКалендарейПроизводственныйКалендарьКонтекстноеМеню + 12 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СписокПроизводственныхКалендарейКоманднаяПанель + 8 + Left + + + OnActivateRow + СписокПроизводственныхКалендарейПриАктивизацииСтроки + + + СписокПроизводственныхКалендарейСтрокаПоиска + 26 + + СписокПроизводственныхКалендарейСтрокаПоискаРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + СписокПроизводственныхКалендарейСтрокаПоискаКонтекстноеМеню + 27 + true + + СписокПроизводственныхКалендарей + + true + + + + СписокПроизводственныхКалендарейСостояниеПросмотра + 29 + + СписокПроизводственныхКалендарейСостояниеПросмотраРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + СписокПроизводственныхКалендарейСостояниеПросмотраКонтекстноеМеню + 30 + true + + ViewStatusAddition + СписокПроизводственныхКалендарей + + true + + + + СписокПроизводственныхКалендарейУправлениеПоиском + 32 + + СписокПроизводственныхКалендарейУправлениеПоискомРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + СписокПроизводственныхКалендарейУправлениеПоискомКонтекстноеМеню + 33 + true + + SearchControlAddition + СписокПроизводственныхКалендарей + + true + + + + СписокПроизводственныхКалендарейРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + СписокПроизводственныхКалендарейКонтекстноеМеню + 7 + + true + true + true + true + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + true + true + None + None + None + true + + + + ВыборПроизводственногоКалендаряПоясняющийТекст + 16 + + <key>ru</key> + <value>Выберите производственный календарь, +данные которого будут использоваться для заполнения</value> + + true + true + + true + + + ВыборПроизводственногоКалендаряПоясняющийТекстРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + ВыборПроизводственногоКалендаряПоясняющийТекстКонтекстноеМеню + 17 + true + + Label + true + 2 + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Выбор производственного календаря</value> + + + ru + Выбор производственного календаря + + + ГруппаВыборПроизводственногоКалендаряРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ГруппаВыборВидаКалендаря + 3 + + ВидКалендаря + 4 + true + true + + true + + + ВидКалендаря + + + ВидКалендаряРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ВидКалендаряКонтекстноеМеню + 5 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + Enum.ВидыКалендарей.EnumValue.Пятидневка + + + + + Enum.ВидыКалендарей.EnumValue.Шестидневка + + + Vertical + + + + ВыборВидаКалендаряПоясняющийТекст + 18 + + <key>ru</key> + <value>Выберите шаблон, по которому будет заполнен календарь</value> + + true + true + + true + + + ВыборВидаКалендаряПоясняющийТекстРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ВыборВидаКалендаряПоясняющийТекстКонтекстноеМеню + 19 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Выбор вида календаря</value> + + + ru + Выбор вида календаря + + + ГруппаВыборВидаКалендаряРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы формы</value> + + + ru + Страницы формы + + + ГруппаСтраницыФормыРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Pages + + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаНазад + 14 + true + true + + true + + + ФормаНазадРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + Form.Command.Назад + Normal + Auto + true + true + UserCmds + Auto + + + ФормаДалее + 13 + true + true + + true + + + ФормаДалееРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Command.Далее + Auto + true + true + true + UserCmds + Auto + + + ФормаСправка + 15 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + ВидКалендаря + + <key>ru</key> + <value>Вид календаря</value> + + 1 + + EnumRef.ВидыКалендарей + + + true + + + true + + + + СписокПроизводственныхКалендарей + + <key>ru</key> + <value>Список производственных календарей</value> + + 2 + + ValueTable + + + true + + + true + + + ПроизводственныйКалендарь + + <key>ru</key> + <value>Производственный календарь</value> + + 2 + + CatalogRef.ПроизводственныеКалендари + + + true + + + true + + + + + ПроизводственныйКалендарь + + <key>ru</key> + <value>Производственный календарь</value> + + 3 + + CatalogRef.ПроизводственныеКалендари + + + true + + + true + + + + ВидимыеСтраницы + + <key>ru</key> + <value>Видимые страницы</value> + + 4 + + + true + + + true + + + + ЭтоПерваяСтраница + + <key>ru</key> + <value>Это первая страница</value> + + 5 + + Boolean + + + true + + + true + + + + ЭтоПоследняяСтраница + + <key>ru</key> + <value>Это последняя страница</value> + + 6 + + Boolean + + + true + + + true + + + + Далее + + <key>ru</key> + <value>Далее >></value> + + 1 + + ru + Далее + + + true + + + + Далее + + + Auto + Auto + + + Назад + + <key>ru</key> + <value><< Назад</value> + + 2 + + ru + Назад + + + true + + + + Назад + + + Auto + Auto + + + + + + diff --git a/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Module.bsl b/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Module.bsl new file mode 100644 index 000000000..437ee513a --- /dev/null +++ b/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Module.bsl @@ -0,0 +1,154 @@ +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ПропуститьВыборПроизводственногоКалендаря = Ложь; + + ЗаполнитьСписокПроизодственныхКалендарей(ПропуститьВыборПроизводственногоКалендаря); + + Если ПропуститьВыборПроизводственногоКалендаря Тогда + Элементы.ГруппаВыборПроизводственногоКалендаря.Видимость = Ложь; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Элементы.ГруппаВыборВидаКалендаря.Видимость = Ложь; + КонецЕсли; + + ЗаполнитьВидКалендаря(); + + ЗаполнитьВидимыеСтраницы(); + + Если ВидимыеСтраницы.Количество() = 0 Тогда + // Нет отображаемых страниц - форма не открывается + Отказ = Истина; + Возврат; + КонецЕсли; + + УстановитьТекущуюСтраницу(); + + УстановитьСвойстваЭлементовФормы(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ + +&НаКлиенте +Процедура СписокПроизводственныхКалендарейПриАктивизацииСтроки(Элемент) + + ПроизводственныйКалендарь = Элементы.СписокПроизводственныхКалендарей.ТекущиеДанные.ПроизводственныйКалендарь; + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Далее(Команда) + + Если ЭтоПоследняяСтраница Тогда + Готово(); + Иначе + СменитьСтраницу(1); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Назад(Команда) + + СменитьСтраницу(-1); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЗаполнитьВидимыеСтраницы() + + Страницы = Элементы.ГруппаСтраницыФормы.ПодчиненныеЭлементы; + + МассивСтраниц = Новый Массив; + Для ИндексСтраницы = 0 По Страницы.Количество() - 1 Цикл + Страница = Страницы[ИндексСтраницы]; + Если Страница.Видимость Тогда + МассивСтраниц.Добавить(ИндексСтраницы); + КонецЕсли; + КонецЦикла; + + ВидимыеСтраницы = Новый ФиксированныйМассив(МассивСтраниц); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьТекущуюСтраницу() + + Если ВидимыеСтраницы.Количество() > 0 Тогда + Элементы.ГруппаСтраницыФормы.ТекущаяСтраница = Элементы.ГруппаСтраницыФормы.ПодчиненныеЭлементы.Получить(ВидимыеСтраницы.Получить(0)); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСписокПроизодственныхКалендарей(ПропускатьВыборПроизводственногоКалендаря) + + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицуИзМассива( + СписокПроизводственныхКалендарей, + Справочники.ПроизводственныеКалендари.СписокПроизводственныхКалендарей(), + "ПроизводственныйКалендарь"); + + Если СписокПроизводственныхКалендарей.Количество() = 1 Тогда + ПропускатьВыборПроизводственногоКалендаря = Истина; + ПроизводственныйКалендарь = СписокПроизводственныхКалендарей[0].ПроизводственныйКалендарь; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьВидКалендаря() + + ВидКалендаря = Перечисления.ВидыКалендарей.Пятидневка; + +КонецПроцедуры + +&НаСервере +Процедура СменитьСтраницу(Направление) + + ИндексТекущейСтраницы = ВидимыеСтраницы.Найти(ИндексСтраницы(Элементы.ГруппаСтраницыФормы.ТекущаяСтраница)); + ИндексНовойСтраницы = ИндексТекущейСтраницы + Направление; + + Если ИндексНовойСтраницы >= 0 И ИндексНовойСтраницы < ВидимыеСтраницы.Количество() Тогда + Элементы.ГруппаСтраницыФормы.ТекущаяСтраница = Элементы.ГруппаСтраницыФормы.ПодчиненныеЭлементы.Получить(ВидимыеСтраницы.Получить(ИндексНовойСтраницы)); + КонецЕсли; + + УстановитьСвойстваЭлементовФормы(); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьСвойстваЭлементовФормы() + + ИндексТекущейСтраницы = ИндексСтраницы(Элементы.ГруппаСтраницыФормы.ТекущаяСтраница); + ЭтоПоследняяСтраница = ВидимыеСтраницы.Найти(ИндексТекущейСтраницы) = ВидимыеСтраницы.ВГраница(); + + Элементы.ФормаДалее.Заголовок = ?(ЭтоПоследняяСтраница, Нстр("ru = 'Готово'"), Нстр("ru = 'Далее >>'")); + Элементы.ФормаНазад.Видимость = НЕ ВидимыеСтраницы.Найти(ИндексТекущейСтраницы) = 0; + +КонецПроцедуры + +&НаКлиенте +Процедура Готово() + + ОповеститьОВыборе(Новый Структура("ПроизводственныйКалендарь, ВидКалендаря", ПроизводственныйКалендарь, ВидКалендаря)); + +КонецПроцедуры + +&НаСервере +Функция ИндексСтраницы(Страница) + + Возврат Элементы.ГруппаСтраницыФормы.ПодчиненныеЭлементы.Индекс(Страница); + +КонецФункции diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..91027f589 --- /dev/null +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,15 @@ + + + + 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/ФормаСписка/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..d4f8a1548 --- /dev/null +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form @@ -0,0 +1,323 @@ + + + + Список + 1 + true + true + + true + + + Список + + true + None + + Наименование + 4 + true + true + + true + + + Список.Description + + true + + НаименованиеРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ВидКалендаря + 6 + true + true + + true + + + Список.ВидКалендаря + + + ВидКалендаряРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ВидКалендаряКонтекстноеМеню + 7 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 3 + Left + + + BeforeAddRow + СписокПередНачаломДобавления + + + СписокСтрокаПоиска + 13 + + СписокСтрокаПоискаРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 14 + true + + Список + + true + + + + СписокСостояниеПросмотра + 16 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 17 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 19 + + СписокУправлениеПоискомРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 20 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + HierarchicalList + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
    + + ФормаКоманднаяПанель + -1 + + ФормаСоздатьСтандартныйКалендарь + 10 + true + true + + true + + + ФормаСоздатьСтандартныйКалендарьРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Form.Command.СоздатьПоШаблону + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + ChoiceProcessing + ОбработкаВыбора + + + NotificationProcessing + ОбработкаОповещения + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
    true
    + + Catalog.Календари + true + true + true + true + +
    + + СоздатьПоШаблону + + <key>ru</key> + <value>Создать по шаблону</value> + + 1 + + ru + Создать календарь на основе данных производственного календаря + + + true + + + + СоздатьПоШаблону + + + Auto + Auto + + + + + + +
    diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..ca084b1d5 --- /dev/null +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,101 @@ +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаКлиенте +Процедура ОбработкаВыбора(РезультатВыбора, ИсточникВыбора) + + Если ТипЗнч(РезультатВыбора) = Тип("Структура") Тогда + СоздатьКалендарьПоШаблону(РезультатВыбора); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ИмяСобытия = "ОбновитьПослеДобавления" Тогда + Элементы.Список.Обновить(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура СоздатьПоШаблону(Команда) + + СоздатьКалендарь(); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + + Если НастройкаНовогоКалендаряПоУмолчанию() <> Неопределено Тогда + // Календарь по единственному шаблону уже создан, + // не нужно предлагать сделать это повторно + Возврат; + КонецЕсли; + + Текст = НСтр("ru = 'Есть возможность создать календарь по шаблону, на основе данных производственного календаря. + |Создать по шаблону?'"); + Результат = Вопрос(Текст, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + Если Результат = КодВозвратаДиалога.Да Тогда + Отказ = Истина; + СоздатьКалендарь(); + КонецЕсли; + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура СоздатьКалендарь() + + НастройкаНовогоКалендаря = НастройкаНовогоКалендаряПоУмолчанию(); + + Если НастройкаНовогоКалендаря <> Неопределено Тогда + СоздатьКалендарьПоШаблону(НастройкаНовогоКалендаря); + Иначе + // Настройка неоднозначна, нужно уточнить ее у пользователя в форме мастера + ОткрытьФорму("Справочник.Календари.Форма.НастройкаНовогоКалендаря", , ЭтаФорма); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьКалендарьПоШаблону(ДанныеШаблона) + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + СтандартныеПодсистемыВызовСервераПереопределяемый.ПодобратьПоставляемыеДанныеИзКлассификатора(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ДанныеШаблона.ПроизводственныйКалендарь)); + Оповестить("ОбновитьПослеДобавления"); + Иначе + ОткрытьФорму("Справочник.Календари.ФормаОбъекта", ДанныеШаблона, ЭтаФорма); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция НастройкаНовогоКалендаряПоУмолчанию() + + // Если есть всего лишь один актуальный производственный календарь, + // и используется режим разделения данных, в котором временно не предусмотрено + // создание нескольких элементов на основании одного общего, + // то настройку можно определить однозначно + + СписокПроизводственныхКалендарей = Справочники.ПроизводственныеКалендари.СписокПроизводственныхКалендарей(); + + Если СписокПроизводственныхКалендарей.Количество() = 1 + И ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат Новый Структура("ПроизводственныйКалендарь, ВидКалендаря", + СписокПроизводственныхКалендарей[0], + Перечисления.ВидыКалендарей.Пятидневка); + КонецЕсли; + + Возврат Неопределено; + +КонецФункции diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form index ce8d012ee..90efef765 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form @@ -16,7 +16,7 @@ НаименованиеРасширеннаяПодсказка - 156 + 163 Label true true @@ -61,7 +61,7 @@ НомерТекущегоГодаРасширеннаяПодсказка - 158 + 165 Label true true @@ -83,6 +83,10 @@ true true true + + ru + ЧГ= + true true true @@ -96,7 +100,7 @@ ГруппаРасширеннаяПодсказка - 155 + 162 Label true true @@ -127,7 +131,7 @@ None КалендарьРасширеннаяПодсказка - 160 + 167 Label true true @@ -169,21 +173,21 @@ 3
    - - Декорация - 151 - - <key>ru</key> - <value>Для редактирования рабочих и выходных дней календаря используйте двойной щелчок левой кнопкой мыши</value> - + + ТекстРучногоИзменения + 153 true true true + + ТекстРучногоИзменения + + None - ДекорацияРасширеннаяПодсказка - 162 + ТекстРучногоИзмененияРасширеннаяПодсказка + 169 Label true true @@ -192,28 +196,68 @@ - ДекорацияКонтекстноеМеню - 152 + ТекстРучногоИзмененияКонтекстноеМеню + 154 true - Label - true - true - false - - 47 - 90 - 175 - - - Left + LabelField + Enter + true + Left + true + + true + true + + Style.ПоясняющийТекст + + + + + СпособРедактированияПоясняющийТекст + 156 + true + true + + true + + + СпособРедактированияПоясняющийТекст + + None + + СпособРедактированияПоясняющийТекстРасширеннаяПодсказка + 171 + Label + true + true + + Left + + + + СпособРедактированияПоясняющийТекстКонтекстноеМеню + 157 + true + + LabelField + Enter + true + Left + true + + true + true + + Style.ПоясняющийТекст + ФормаКоманднаяПанель -1 - ЗаполнитьКалендарь + ОбновитьИзКлассификатора 72 true true @@ -222,8 +266,8 @@ false - ЗаполнитьКалендарьРасширеннаяПодсказка - 153 + ОбновитьИзКлассификатораРасширеннаяПодсказка + 159 Label true true @@ -231,7 +275,33 @@ Left - Form.Command.ЗаполнитьКалендарь + Form.Command.ОбновитьИзШаблона + Normal + Auto + true + true + UserCmds + Auto + + + Изменить + 155 + true + true + + true + + + ИзменитьРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + Form.Command.Изменить Normal Auto true @@ -241,16 +311,15 @@ ЗаполнитьПоКалендарю - 150 + 158 true true true - false ЗаполнитьПоКалендарюРасширеннаяПодсказка - 154 + 161 Label true true @@ -270,8 +339,8 @@ true - ChoiceProcessing - ОбработкаВыбора + OnOpen + ПриОткрытии OnCreateAtServer @@ -386,48 +455,128 @@ true - - ЗаполнитьКалендарь + + РучноеИзменение <key>ru</key> - <value>Заполнить календарь</value> + <value>Ручное изменение</value> + + 6 + + + true + + + true + + + + ТекстРучногоИзменения + + <key>ru</key> + <value>Текст ручного изменения</value> + + 7 + + String + + + + true + + + true + + FunctionalOption.СтандартныеПодсистемыВМоделиСервиса + + + СпособРедактированияПоясняющийТекст + + <key>ru</key> + <value>Способ редактирования поясняющий текст</value> + + 8 + + String + + + + true + + + true + + + + ОбновитьИзШаблона + + <key>ru</key> + <value>Обновить из шаблона</value> 1 ru - Заполнить календарь за указанный на форме год по пятидневной рабочей неделе без учета праздников + Заполнить календарь по данным производственного календаря и установить режим автоматического обновления true - ЗаполнитьКалендарь + ОбновитьИзКлассификатора + FunctionalOption.СтандартныеПодсистемыВМоделиСервиса true Auto Auto + + Изменить + + <key>ru</key> + <value>Изменить</value> + + 2 + + ru + Изменить + + + true + + + + Изменить + + + FunctionalOption.СтандартныеПодсистемыВМоделиСервиса + Auto + Auto + ЗаполнитьПоКалендарю <key>ru</key> <value>Заполнить по календарю</value> - 2 + 3 ru - Заполнить календарь за указанный на форме год по выбранному календарю + Заполнить календарь по данным производственного календаря на год true + + CommonPicture.ЗаполнитьФорму + ЗаполнитьПоКалендарю + TextPicture true Auto Auto @@ -442,6 +591,14 @@
    + + OnReadAtServer + ПриЧтенииНаСервере + + + BeforeWriteAtServer + ПередЗаписьюНаСервере + OnWriteAtServer ПриЗаписиНаСервере diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl index 0fb6bb820..f2246daac 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl @@ -1,47 +1,43 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ - -// Читает данные календарного графика за указанный год -// -&НаСервереБезКонтекста -Функция ПрочитатьКалендарныйГрафик(Календарь, НомерГода) - - Возврат Справочники.Календари.ПрочитатьДанныеГрафикаИзРегистра(Календарь, НомерГода); - -КонецФункции - -// Записывает данные календарного графика за указанный год -// -&НаСервере -Процедура ЗаписатьКалендарныйГрафик(Знач НомерГода, Знач ТекущийОбъект = Неопределено) - - Если ТекущийОбъект = Неопределено Тогда - ТекущийОбъект = РеквизитФормыВЗначение("Объект"); - КонецЕсли; - - Справочники.Календари.ЗаписатьДанныеГрафикаВРегистр(ТекущийОбъект.Ссылка, НомерГода, ТаблицаРегистра); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - НомерТекущегоГода = Год(ТекущаяДатаСеанса()); - НомерПредыдущегоГода = НомерТекущегоГода; - - Элементы.Календарь.НачалоПериодаОтображения = Дата(НомерТекущегоГода, 1, 1); - Элементы.Календарь.КонецПериодаОтображения = Дата(НомерТекущегоГода, 12, 31); - - Если Не ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда - СсылкаНаКалендарь = Объект.Ссылка; - Иначе - СсылкаНаКалендарь = Параметры.ЗначениеКопирования; + Если Объект.Ссылка.Пустая() Тогда + + Если Параметры.Свойство("ПроизводственныйКалендарь") Тогда + Объект.ПроизводственныйКалендарь = Параметры.ПроизводственныйКалендарь; + КонецЕсли; + + Если Параметры.Свойство("ВидКалендаря") Тогда + Объект.ВидКалендаря = Параметры.ВидКалендаря; + КонецЕсли; + + ЗаполнитьФормуПоОбъекту(Параметры.Свойство("ПроизводственныйКалендарь"), Параметры.ЗначениеКопирования); + КонецЕсли; - ТаблицаРегистра.ЗагрузитьЗначения(Справочники.Календари.ПрочитатьДанныеГрафикаИзРегистра(СсылкаНаКалендарь, НомерТекущегоГода)); +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + ЗаполнитьФормуПоОбъекту(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + УстановитьСвойстваЭлементовФормы(); + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + ЗаписатьФлагРучногоИзменения(); КонецПроцедуры @@ -57,52 +53,8 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбработкаВыбора(РезультатВыбора, ИсточникВыбора) - - Если ТипЗнч(РезультатВыбора) = Тип("СправочникСсылка.Календари") Тогда - ТаблицаРегистра.ЗагрузитьЗначения(ПрочитатьКалендарныйГрафик(РезультатВыбора, НомерТекущегоГода)); - - Элементы.Календарь.Обновить(); - КонецЕсли; - - Возврат; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ДЕЙСТВИЯ КОМАНДНЫХ ПАНЕЛЕЙ ФОРМЫ - -&НаКлиенте -Процедура ЗаполнитьКалендарь() - - ТаблицаРегистра.Очистить(); - - Для Месяц = 1 По 12 Цикл - Для НомерДня = 1 По День(КонецМесяца(Дата(НомерТекущегоГода, Месяц, 1))) Цикл - ДатаКалендаря = Дата(НомерТекущегоГода, Месяц, НомерДня); - - Если ДеньНедели(ДатаКалендаря) = 6 Или ДеньНедели(ДатаКалендаря) = 7 Тогда - Продолжить; - КонецЕсли; - - ТаблицаРегистра.Добавить(ДатаКалендаря); - КонецЦикла; - КонецЦикла; - - Элементы.Календарь.Обновить(); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаполнитьПоКалендарю(Команда) - - ОткрытьФорму("Справочник.Календари.ФормаВыбора", , ЭтаФорма, КлючУникальности); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ &НаКлиенте Процедура НомерТекущегоГодаПриИзменении(Элемент) @@ -113,24 +65,23 @@ КонецЕсли; Если Модифицированность Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Записать измененные данные за %1 год?'"), Формат(НомерПредыдущегоГода, "ЧГ=0")); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Записать измененные данные за %1 год?'"), + Формат(НомерПредыдущегоГода, "ЧГ=0")); - Ответ =Вопрос(ТекстСообщения, РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Да Тогда + Если Вопрос(ТекстСообщения, РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда Если Объект.Ссылка.Пустая() Тогда Записать(Новый Структура("НомерГода", НомерПредыдущегоГода)); Иначе ЗаписатьКалендарныйГрафик(НомерПредыдущегоГода); КонецЕсли; КонецЕсли; + Если НЕ Объект.Ссылка.Пустая() Тогда + ЗаписатьФлагРучногоИзменения(); + КонецЕсли; КонецЕсли; - НомерПредыдущегоГода = НомерТекущегоГода; - - Элементы.Календарь.НачалоПериодаОтображения = Дата(НомерТекущегоГода, 1, 1); - Элементы.Календарь.КонецПериодаОтображения = Дата(НомерТекущегоГода, 12, 31); - - ТаблицаРегистра.ЗагрузитьЗначения(ПрочитатьКалендарныйГрафик(Объект.Ссылка, НомерТекущегоГода)); + ЗаполнитьФормуПоОбъекту(); Модифицированность = Ложь; @@ -175,3 +126,134 @@ Элемент.Обновить(); КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ЗаполнитьПоКалендарю(Команда) + + ЗаполнитьФормуПоОбъекту(Истина); + + Элементы.Календарь.Обновить(); + +КонецПроцедуры + +&НаКлиенте +Процедура Изменить(Команда) + + СтандартныеПодсистемыКлиентПереопределяемый.ИзменитьРазделенныйЭлемент(ЭтаФорма); + + УстановитьСвойстваЭлементовФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИзКлассификатора(Команда) + + Если СтандартныеПодсистемыКлиентПереопределяемый.ОбновитьЭлементИзОбщихДанных(ЭтаФорма) Тогда + + ОбновитьНаСервере(); + + ОповеститьОбИзменении(Объект.Ссылка); + + УстановитьСвойстваЭлементовФормы(); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЗаписатьКалендарныйГрафик(Знач НомерГода, Знач ТекущийОбъект = Неопределено) + + // Запись данных календарного графика за указанный год + + Если ТекущийОбъект = Неопределено Тогда + ТекущийОбъект = РеквизитФормыВЗначение("Объект"); + КонецЕсли; + + Справочники.Календари.ЗаписатьДанныеГрафикаВРегистр(ТекущийОбъект.Ссылка, НомерГода, ТаблицаРегистра); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьПоДаннымПроизводственногоКалендаря(Год) + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ДанныеПроизводственногоКалендаря.Дата + |ИЗ + | РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря + |ГДЕ + | ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь = &ПроизводственныйКалендарь + | И ДанныеПроизводственногоКалендаря.Год = &Год + | И ВЫБОР + | КОГДА &ВидКалендаря = ЗНАЧЕНИЕ(Перечисление.ВидыКалендарей.Пятидневка) + | ТОГДА ДанныеПроизводственногоКалендаря.ВидДня В (ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий), ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)) + | КОГДА &ВидКалендаря = ЗНАЧЕНИЕ(Перечисление.ВидыКалендарей.Шестидневка) + | ТОГДА ДанныеПроизводственногоКалендаря.ВидДня В (ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий), ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный), ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Суббота)) + | КОНЕЦ"); + + Запрос.УстановитьПараметр("ПроизводственныйКалендарь", Объект.ПроизводственныйКалендарь); + Запрос.УстановитьПараметр("ВидКалендаря", Объект.ВидКалендаря); + Запрос.УстановитьПараметр("Год", Год); + + ТаблицаРегистра.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Дата")); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСвойстваЭлементовФормы() + + Если РучноеИзменение <> Неопределено И НЕ РучноеИзменение Тогда + СпособРедактированияПоясняющийТекст = ""; + Элементы.ЗаполнитьПоКалендарю.Доступность = Ложь; + Иначе + СпособРедактированияПоясняющийТекст = НСтр("ru = 'Для редактирования рабочих и выходных дней календаря используйте двойной щелчок левой кнопкой мыши'"); + Элементы.ЗаполнитьПоКалендарю.Доступность = ЗначениеЗаполнено(Объект.ПроизводственныйКалендарь) И ЗначениеЗаполнено(Объект.ВидКалендаря); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьФормуПоОбъекту(ЗаполнятьПоДаннымПроизводственногоКалендаря = Ложь, ЗначениеКопирования = Неопределено) + + Если НомерТекущегоГода = 0 Тогда + НомерТекущегоГода = Год(ТекущаяДатаСеанса()); + КонецЕсли; + НомерПредыдущегоГода = НомерТекущегоГода; + + Элементы.Календарь.НачалоПериодаОтображения = Дата(НомерТекущегоГода, 1, 1); + Элементы.Календарь.КонецПериодаОтображения = Дата(НомерТекущегоГода, 12, 31); + + Если ЗаполнятьПоДаннымПроизводственногоКалендаря Тогда + ЗаполнитьПоДаннымПроизводственногоКалендаря(НомерТекущегоГода); + Иначе + Если ЗначениеЗаполнено(ЗначениеКопирования) Тогда + СсылкаНаКалендарь = ЗначениеКопирования; + Иначе + СсылкаНаКалендарь = Объект.Ссылка; + КонецЕсли; + ТаблицаРегистра.ЗагрузитьЗначения(Справочники.Календари.ПрочитатьДанныеГрафикаИзРегистра(СсылкаНаКалендарь, НомерТекущегоГода)); + КонецЕсли; + + СтандартныеПодсистемыПереопределяемый.СчитатьФлагРучногоИзмененияПоставляемыхДанных(ЭтаФорма); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьНаСервере() + + СтандартныеПодсистемыПереопределяемый.ВосстановитьЭлементИзОбщихДанных(ЭтаФорма); + +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьФлагРучногоИзменения() + + СтандартныеПодсистемыПереопределяемый.ЗаписатьФлагРучногоИзменениеПоставляемыхДанных(ЭтаФорма); + +КонецПроцедуры diff --git a/SSL/src/Catalogs/Календари/ManagerModule.bsl b/SSL/src/Catalogs/Календари/ManagerModule.bsl index bdd9afcb0..8ad8688b5 100644 --- a/SSL/src/Catalogs/Календари/ManagerModule.bsl +++ b/SSL/src/Catalogs/Календари/ManagerModule.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Функция читает данные календаря из регистра // diff --git a/SSL/src/Catalogs/Календари/Календари.mdo b/SSL/src/Catalogs/Календари/Календари.mdo index 02bd1c314..57480bd5f 100644 --- a/SSL/src/Catalogs/Календари/Календари.mdo +++ b/SSL/src/Catalogs/Календари/Календари.mdo @@ -125,6 +125,37 @@ InDialog BothWays Catalog.Календари.Form.ФормаЭлемента + Catalog.Календари.Form.ФормаСписка + + ПроизводственныйКалендарь + + ru + Производственный календарь + + + CatalogRef.ПроизводственныеКалендари + + + + + Use + Use + + + ВидКалендаря + + ru + Вид календаря + + + EnumRef.ВидыКалендарей + + + + + Use + Use + ФормаЭлемента @@ -139,4 +170,22 @@ PersonalComputer MobileDevice + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + НастройкаНовогоКалендаря + + ru + Настройка нового календаря + + PersonalComputer + MobileDevice + diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl index 7d6300759..85192454c 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl @@ -1,6 +1,44 @@ + //////////////////////////////////////////////////////////////////////////////// -// Внутренние процедуры и функции -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ВыполнитьПроверкуПравДоступа("Изменение", Метаданные.Справочники.КлассификаторБанковРФ); + КодВариантаЗагрузки = 1; +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Далее(Команда) + + Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника Тогда + ЗагрузитьКлассификатор(); + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат; + ИначеЕсли Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда + Закрыть(); + КонецЕсли; + + УстановитьИзмененияВИнтерфейсе(); + +КонецПроцедуры + +&НаКлиенте +Процедура Назад(Команда) + + Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника; + КонецЕсли; + + УстановитьИзмененияВИнтерфейсе(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Загружает в классификатор банков данные с диска ИТС. // @@ -19,6 +57,49 @@ РаботаСБанками.ЗагрузитьДанныеДискИТС(ПараметрыЗагрузкиФайловИТС); КонецПроцедуры +// Загружает классификатор банков с диска ИТС или с сайта РБК. +// +&НаКлиенте +Процедура ЗагрузитьКлассификатор() + + ПараметрыЗагрузкиКлассификатора = Новый Соответствие; + ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", 0); + ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", 0); + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ""); + + ВариантЗагрузки = ""; + + Состояние(НСтр("ru ='Загружается классификатор банков РФ.'")); + + Если КодВариантаЗагрузки = 1 Тогда + //с диска ИТС + ВариантЗагрузки = НСтр("ru ='Диск ИТС'"); + ПолучитьДанныеБИКРФДискИТС(ПараметрыЗагрузкиКлассификатора); + ИначеЕсли КодВариантаЗагрузки = 2 Тогда + //с сайта РБК + ВариантЗагрузки = НСтр("ru ='Сайт РБК'"); + РаботаСБанкамиВызовСервера.ПолучитьДанныеРБК(ПараметрыЗагрузкиКлассификатора); + КонецЕсли; + + ИмяСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru ='Загрузка классификатора банков. %1.'"), ВариантЗагрузки); + + Если ПустаяСтрока(ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]) Тогда + РаботаСБанкамиВызовСервера.ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора); + ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия,, + ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина); + Иначе + ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия, + "Ошибка", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина); + КонецЕсли; + Элементы.ПоясняющийТекст.Заголовок = ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]; + + Если (ПараметрыЗагрузкиКлассификатора["Обновлено"] > 0) или (ПараметрыЗагрузкиКлассификатора["Загружено"] > 0) Тогда + ОповеститьОбИзменении(Тип("СправочникСсылка.КлассификаторБанковРФ")); + КонецЕсли; + +КонецПроцедуры + // Получает, сортирует, записывает данные классификатора БИК РФ с диска ИТС // // Параметры @@ -58,7 +139,6 @@ КонецПроцедуры - // Получает обработку сортировки классификатора БИК РФ с диска ИТС // // Параметры @@ -141,83 +221,8 @@ КонецПроцедуры -// Загружает классификатор банков с диска ИТС или с сайта РБК. +// В зависимости от текущей страницы устанавливает доступность тех или иных полей для пользователя // -&НаКлиенте -Процедура ЗагрузитьКлассификатор() - - ПараметрыЗагрузкиКлассификатора = Новый Соответствие; - ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", 0); - ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", 0); - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ""); - - ВариантЗагрузки = ""; - - Состояние(НСтр("ru ='Загружается классификатор банков РФ.'")); - - Если КодВариантаЗагрузки = 1 Тогда - //с диска ИТС - ВариантЗагрузки = НСтр("ru ='Диск ИТС'"); - ПолучитьДанныеБИКРФДискИТС(ПараметрыЗагрузкиКлассификатора); - ИначеЕсли КодВариантаЗагрузки = 2 Тогда - //с сайта РБК - ВариантЗагрузки = НСтр("ru ='Сайт РБК'"); - РаботаСБанкамиВызовСервера.ПолучитьДанныеРБК(ПараметрыЗагрузкиКлассификатора); - КонецЕсли; - - ИмяСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru ='Загрузка классификатора банков. %1.'"), ВариантЗагрузки); - - Если ПустаяСтрока(ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]) Тогда - РаботаСБанкамиВызовСервера.ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора); - ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия,, - ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина); - Иначе - ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия, - "Ошибка", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина); - КонецЕсли; - Элементы.ПоясняющийТекст.Заголовок = ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]; - - Если (ПараметрыЗагрузкиКлассификатора["Обновлено"] > 0) или (ПараметрыЗагрузкиКлассификатора["Загружено"] > 0) Тогда - ОповеститьОбИзменении(Тип("СправочникСсылка.КлассификаторБанковРФ")); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Блок обработчиков событий формы и элементов формы -// - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - КодВариантаЗагрузки = 1; -КонецПроцедуры - -&НаКлиенте -Процедура Далее(Команда) - - Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника Тогда - ЗагрузитьКлассификатор(); - Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат; - ИначеЕсли Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда - Закрыть(); - КонецЕсли; - - УстановитьИзмененияВИнтерфейсе(); - -КонецПроцедуры - -&НаКлиенте -Процедура Назад(Команда) - - Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда - Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника; - КонецЕсли; - - УстановитьИзмененияВИнтерфейсе(); - -КонецПроцедуры - &НаКлиенте Процедура УстановитьИзмененияВИнтерфейсе() @@ -232,4 +237,3 @@ КонецЕсли; КонецПроцедуры - diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl index 5910e5e81..542019147 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl @@ -1,17 +1,22 @@ -&НаКлиенте -Процедура ЗагрузитьКлассификатор(Команда) - ОткрытьФорму("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора"); -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Не ПользователиИнформационнойБазы.ТекущийПользователь().Роли.Содержит(Метаданные.Роли.ПолныеПрава) - и Не ПользователиИнформационнойБазы.ТекущийПользователь().Роли.Содержит(Метаданные.Роли.Администрирование) Тогда + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда ТолькоПросмотр = Истина; КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ЗагрузитьКлассификатор(Команда) + ОткрытьФорму("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора"); +КонецПроцедуры + diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl index 802da07c7..5d02c6429 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl @@ -1,16 +1,20 @@ -&НаКлиенте -Процедура ЗагрузитьКлассификатор(Команда) - ОткрытьФорму("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора"); -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Не ПользователиИнформационнойБазы.ТекущийПользователь().Роли.Содержит(Метаданные.Роли.ПолныеПрава) - и Не ПользователиИнформационнойБазы.ТекущийПользователь().Роли.Содержит(Метаданные.Роли.Администрирование) Тогда + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда ТолькоПросмотр = Истина; КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ЗагрузитьКлассификатор(Команда) + ОткрытьФорму("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора"); +КонецПроцедуры diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html b/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html index a72c079ad..44b84ca25 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html @@ -1,6 +1,7 @@ -

    В справочнике "Классификатор банков РФ" хранятся сведения о банках, БИК, корреспондентский счет, данные о местонахождении, телефоны для связи с сотрудниками, почтовый адрес банка. Сведения о банках используются при заполнении информации в справочниках.

    -

    Информация в справочнике может быть заполнена автоматически с использованием "Общероссийского классификатора банков (ОКБ)".  В качестве источника ОКБ можно использовать сайт РБК или диск ИТС.  

    +

    В классификаторе банков РФ хранятся сведения о банках: БИК, корреспондентский счет, данные о местонахождении, телефоны для связи с сотрудниками, почтовый адрес банка. Эти сведения используются при заполнении реквизитов банковских счетов и в других объектах программы.

    +

    По команде Загрузить классификатор можно обновить сведения о банках с сайта РБК или из поставляемого на диске ИТС "Общероссийского классификатора банков" (ОКБ).

    +

    Также можно настроить обновление классификатора с сайта РБК автоматически по расписанию с помощью регламентного задания Загрузка классификатора банков РФ с сайта РБК.

    Реквизиты:

    diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo b/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo index a736a16ef..434a03294 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo @@ -285,6 +285,7 @@ ru Классификатор банков РФ + Открывает форму для редактирования ActionsPanelTools Auto diff --git a/SSL/src/Catalogs/КлассификаторВалют/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/КлассификаторВалют/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..70e621840 --- /dev/null +++ b/SSL/src/Catalogs/КлассификаторВалют/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,20 @@ + + + + + ЗаписьНеАктульна + Equal + false + + 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/ФормаВыбора/Form.form b/SSL/src/Catalogs/КлассификаторВалют/Forms/ФормаВыбора/Form.form new file mode 100644 index 000000000..a29173a39 --- /dev/null +++ b/SSL/src/Catalogs/КлассификаторВалют/Forms/ФормаВыбора/Form.form @@ -0,0 +1,271 @@ + + + + Список + 1 + true + true + + true + + + Список + + true + None + + Наименование + 4 + true + true + + true + + + Список.Description + + true + + НаименованиеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Код + 6 + true + true + + true + + + Список.Code + + + КодРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + КодКонтекстноеМеню + 7 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 3 + Left + + + ValueChoice + СписокВыборЗначения + + + Selection + СписокВыбор + + + СписокСтрокаПоиска + 9 + + СписокСтрокаПоискаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 10 + true + + Список + + true + + + + СписокСостояниеПросмотра + 12 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 13 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 15 + + СписокУправлениеПоискомРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 16 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + true + true + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
    + + ФормаКоманднаяПанель + -1 + Left + true + + 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/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/КлассификаторВалют/Forms/ФормаВыбора/Module.bsl new file mode 100644 index 000000000..30a7c1a26 --- /dev/null +++ b/SSL/src/Catalogs/КлассификаторВалют/Forms/ФормаВыбора/Module.bsl @@ -0,0 +1,31 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + +&НаКлиенте +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ОбработатьВыбор(ВыбраннаяСтрока, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) + + ОбработатьВыбор(Значение, СтандартнаяОбработка); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ОбработатьВыбор(ВыбранныеСтроки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + СтандартныеПодсистемыВызовСервераПереопределяемый.ПодобратьПоставляемыеДанныеИзКлассификатора(ВыбранныеСтроки); + Оповестить("ОбновитьПослеДобавления"); + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/КлассификаторВалют/Help/ru.html b/SSL/src/Catalogs/КлассификаторВалют/Help/ru.html new file mode 100644 index 000000000..f8641eb8d --- /dev/null +++ b/SSL/src/Catalogs/КлассификаторВалют/Help/ru.html @@ -0,0 +1,8 @@ + +

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

    +

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

    +

    Новую валюту можно добавить в справочник:

    +
    • +
      Из общероссийского классификатора валют по кнопке Подбор из классификатора.
      +
    • +
      Вручную по кнопке Создать.

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

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/ManagerModule.bsl b/SSL/src/Catalogs/КлассификаторВалют/ManagerModule.bsl similarity index 100% rename from SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/ManagerModule.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..8b1378917 --- /dev/null +++ b/SSL/src/Catalogs/КлассификаторВалют/ObjectModule.bsl @@ -0,0 +1 @@ + diff --git a/SSL/src/Catalogs/КлассификаторВалют/КлассификаторВалют.mdo b/SSL/src/Catalogs/КлассификаторВалют/КлассификаторВалют.mdo new file mode 100644 index 000000000..2799d1404 --- /dev/null +++ b/SSL/src/Catalogs/КлассификаторВалют/КлассификаторВалют.mdo @@ -0,0 +1,192 @@ + + + + + + + + + + КлассификаторВалют + + 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 + + ru + Код символьный + + + ru + Символьный код валюты по общероссийскому классификатору валют + + + ShowError + Use + + + + + Use + Code + + ru + Код числовой + + + ru + Числовой код валюты по общероссийскому классификатору валют + + + + + ShowError + Use + + + + DontUse + + + ru + + + Managed + Use + + ru + Валюта + + 2 + true + 3 + 10 + String + Variable + true + AsDescription + InDialog + true + BothWays + Catalog.КлассификаторВалют.Form.ФормаВыбора + + НаименованиеПолное + + ru + Наименование валюты + + + String + + 50 + + + + ru + Полное наименование валюты + + + + ShowError + + Use + Use + + + ПараметрыПрописиНаРусском + + ru + Параметры прописи на русском + + + String + + 200 + + + + ru + Параметры прописи валюты на русском языке + + + + + Use + Use + + + ФормаВыбора + + ru + Форма выбора + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..91027f589 --- /dev/null +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,15 @@ + + + + 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/ФормаВыбора/Form.form b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Form.form new file mode 100644 index 000000000..f3bfeeee4 --- /dev/null +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Form.form @@ -0,0 +1,243 @@ + + + + Список + 1 + true + true + + true + + + Список + + true + None + + Ссылка + 6 + true + true + + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 7 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 3 + Left + + + Selection + СписокВыбор + + + СписокСтрокаПоиска + 9 + + СписокСтрокаПоискаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 10 + true + + Список + + true + + + + СписокСостояниеПросмотра + 12 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 13 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 15 + + СписокУправлениеПоискомРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 16 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + + true + true + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + + + Список.Ref + + + Список.Приоритет + + + Список.ЦелевоеВремя + +
    true
    + + Catalog.КлючевыеОперации + true + true + true + true + +
    + + Отбор + + + + + + + +
    diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl new file mode 100644 index 000000000..2087f07f4 --- /dev/null +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl @@ -0,0 +1,33 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Список.Отбор.Элементы.Очистить(); + ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке; + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); + ЭлементОтбора.ПравоеЗначение = Параметры.Отбор; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + +&НаКлиенте +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + РезультатВыбора = Неопределено; + ТД = Элементы.Список.ТекущиеДанные; + Если ТД <> Неопределено Тогда + РезультатВыбора = Новый Структура("КлючеваяОперация, Приоритет, ЦелевоеВремя"); + РезультатВыбора.КлючеваяОперация = ТД.Ссылка; + РезультатВыбора.Приоритет = ТД.Приоритет; + РезультатВыбора.ЦелевоеВремя = ТД.ЦелевоеВремя; + КонецЕсли; + + ЭтаФорма.Закрыть(РезультатВыбора); + +КонецПроцедуры diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..c135eb38a --- /dev/null +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,19 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + + Приоритет + Asc + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..728fb6359 --- /dev/null +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаСписка/Form.form @@ -0,0 +1,336 @@ + + + + Список + 1 + true + true + + true + + + Список + + true + None + + Наименование + 4 + true + true + + true + + + Список.Description + + true + + НаименованиеРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Приоритет + 6 + true + true + + true + + + Список.Приоритет + + + ПриоритетРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ПриоритетКонтекстноеМеню + 7 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ЦелевоеВремя + 8 + true + true + + true + + + Список.ЦелевоеВремя + + + ЦелевоеВремяРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ЦелевоеВремяКонтекстноеМеню + 9 + true + + LabelField + Enter + true + Left + true + + true + true + + + + МинимальноДопустимыйУровень + 10 + true + true + + true + + + Список.МинимальноДопустимыйУровень + + + МинимальноДопустимыйУровеньРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + МинимальноДопустимыйУровеньКонтекстноеМеню + 11 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска + 13 + + СписокСтрокаПоискаРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 14 + true + + Список + + true + + + + СписокСостояниеПросмотра + 16 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 17 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 19 + + СписокУправлениеПоискомРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 20 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
    + + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + + + Список.Ref + +
    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..807b16289 --- /dev/null +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,209 @@ + + + + Наименование + 3 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 4 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Приоритет + 7 + true + true + + true + + + Объект.Приоритет + + + ПриоритетРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ПриоритетКонтекстноеМеню + 8 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ЦелевоеВремя + 9 + true + true + + true + + + Объект.ЦелевоеВремя + + + ЦелевоеВремяРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ЦелевоеВремяКонтекстноеМеню + 10 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + МинимальноДопустимыйУровень + 5 + true + true + + true + + + Объект.МинимальноДопустимыйУровень + + + МинимальноДопустимыйУровеньРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + МинимальноДопустимыйУровеньКонтекстноеМеню + 6 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + CatalogObject.КлючевыеОперации + + + true + + + true + +
    true
    + true +
    + + + + + +
    diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..7e8beadf6 --- /dev/null +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,15 @@ + +/////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Объект.Ссылка = ОценкаПроизводительностиВызовСервераПолныеПрава.ПолучитьПредопределенный() Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + +КонецПроцедуры + + diff --git a/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl b/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl new file mode 100644 index 000000000..654fa5244 --- /dev/null +++ b/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl @@ -0,0 +1,47 @@ + +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ПроверитьПриоритет(Отказ); + Если Отказ Тогда + Возврат; + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьПриоритет(Отказ) + + Если ДополнительныеСвойства.Свойство(ОценкаПроизводительностиВызовСервераПолныеПрава.НеПроверятьПриоритет()) Или Приоритет = 0 Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Приоритет", Приоритет); + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | КлючевыеОперации.Ссылка КАК Ссылка, + | КлючевыеОперации.Наименование КАК Наименование + |ИЗ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ГДЕ + | КлючевыеОперации.Приоритет = &Приоритет + | И КлючевыеОперации.Ссылка <> &Ссылка"; + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ТекстСообщения = НСтр("ru = 'Ключевая операция с приоритетом ""%1"" уже существует (%2).'"); + ТекстСообщения = СтрЗаменить(ТекстСообщения, "%1", Строка(Приоритет)); + ТекстСообщения = СтрЗаменить(ТекстСообщения, "%2", Выборка.Наименование); + ОценкаПроизводительностиВызовСервераПолныеПрава.ЗаписатьВЖурналРегистрации( + "Справочник.КлючевыеОперации.МодульОбъекта.ПередЗаписью", + УровеньЖурналаРегистрации.Ошибка, + ТекстСообщения); + Сообщить(ТекстСообщения); + Отказ = Истина; + КонецЕсли; + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/Catalogs/КлючевыеОперации/КлючевыеОперации.mdo b/SSL/src/Catalogs/КлючевыеОперации/КлючевыеОперации.mdo new file mode 100644 index 000000000..1dcfded84 --- /dev/null +++ b/SSL/src/Catalogs/КлючевыеОперации/КлючевыеОперации.mdo @@ -0,0 +1,205 @@ + + + + + + + + + + КлючевыеОперации + + 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 + + + ОбщаяПроизводительностьСистемы + Общая производительность системы + + 000000001 + + + + InDialog + BothWays + Catalog.КлючевыеОперации.Form.ФормаЭлемента + Catalog.КлючевыеОперации.Form.ФормаСписка + Catalog.КлючевыеОперации.Form.ФормаВыбора + + МинимальноДопустимыйУровень + + ru + Минимально допустимый уровень + + + EnumRef.УровниПроизводительности + + + + + Use + Use + + + Приоритет + + ru + Приоритет + + + Number + + 15 + true + + + + + ShowError + + Index + Use + Use + + + ЦелевоеВремя + + ru + Целевое время + + + Number + + 15 + 2 + true + + + + + ShowError + + Use + Use + + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаВыбора + + ru + Форма выбора + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Form.form index 1a218b09f..cfc982ecc 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Form.form @@ -458,7 +458,7 @@ ВЫБРАТЬ Основная.Ссылка, ВЫБОР - КОГДА Основная.Ссылка В (&масВыбранных) + КОГДА Основная.Ссылка В (&ВыбранныеСвойства) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК Выбран, @@ -523,10 +523,10 @@ - СписокВыбранных + ВыбранныеСвойства <key>ru</key> - <value>Список выбранных</value> + <value>Выбранные свойства</value> 4 @@ -566,7 +566,7 @@ Auto - МассивВыбранных + ВыбранныеСвойства diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Module.bsl index 40983931d..5f99beb81 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Module.bsl @@ -1,15 +1,15 @@ //////////////////////////////////////////////////////////////////////////////// -// Процедуры - обработчики событий формы +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - СписокВыбранных.ЗагрузитьЗначения(Параметры.МасВыбранных); + ВыбранныеСвойства.ЗагрузитьЗначения(Параметры.ВыбранныеСвойства); ЭтоДополнительноеСведение = Параметры.ЭтоДополнительноеСведение; @@ -19,7 +19,7 @@ Заголовок = НСтр("ru = 'Подбор дополнительных реквизитов'"); КонецЕсли; - ДеревоСвойств.Параметры.УстановитьЗначениеПараметра("масВыбранных", Параметры.МасВыбранных); + ДеревоСвойств.Параметры.УстановитьЗначениеПараметра("ВыбранныеСвойства", Параметры.ВыбранныеСвойства); ЭлементОтбора = ДеревоСвойств.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЭтоДополнительноеСведение"); @@ -47,35 +47,39 @@ Элементы.ДеревоСвойств.Обновить(); ТекущиеДанные = Элементы.ДеревоСвойств.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено И ТекущиеДанные.Ссылка = Источник Тогда Комментарий = Параметр.Комментарий; КонецЕсли; - ДеревоСвойств.Параметры.УстановитьЗначениеПараметра("масВыбранных", СписокВыбранных.ВыгрузитьЗначения()); + ДеревоСвойств.Параметры.УстановитьЗначениеПараметра("ВыбранныеСвойства", ВыбранныеСвойства.ВыгрузитьЗначения()); ИначеЕсли ИмяСобытия = "ИзменилсяНаборВыбранных" И Источник = ЭтаФорма.ВладелецФормы Тогда + Для Каждого Элемент Из Параметр.МассивСвойств Цикл - Найденное = СписокВыбранных.НайтиПоЗначению(Элемент); + Найденное = ВыбранныеСвойства.НайтиПоЗначению(Элемент); + Если Параметр.Операция = "Добавление" И Найденное = Неопределено Тогда - СписокВыбранных.Добавить(Элемент); + ВыбранныеСвойства.Добавить(Элемент); + ИначеЕсли Параметр.Операция = "Удаление" И Найденное <> Неопределено Тогда - СписокВыбранных.Удалить(Найденное); + ВыбранныеСвойства.Удалить(Найденное); КонецЕсли; КонецЦикла; - ДеревоСвойств.Параметры.УстановитьЗначениеПараметра("масВыбранных", СписокВыбранных.ВыгрузитьЗначения()); + ДеревоСвойств.Параметры.УстановитьЗначениеПараметра("ВыбранныеСвойства", ВыбранныеСвойства.ВыгрузитьЗначения()); КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Процедуры - обработчики событий табличной части формы +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоСвойств &НаКлиенте Процедура ДеревоСвойствПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) - // Для групп оставим стандартную обработку + // Для групп используется стандартная обработка. Если Группа = Истина Тогда Возврат; ИначеЕсли Копирование И (Элементы.ДеревоСвойств.ТекущиеДанные.НомерКартинкиСведения % 3 = 0) Тогда @@ -83,18 +87,18 @@ КонецЕсли; Отказ = Истина; - ПараметрыОткрытия = Новый Структура; + ПараметрыФормы = Новый Структура; - ПараметрыОткрытия.Вставить("ОткрываетсяИзНабораСвойств", Истина); - ПараметрыОткрытия.Вставить("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение); + ПараметрыФормы.Вставить("ОткрываетсяИзНабораСвойств", Истина); + ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение); Если Копирование Тогда - ПараметрыОткрытия.Вставить("Копируемый", Элементы.ДеревоСвойств.ТекущаяСтрока); + ПараметрыФормы.Вставить("Копируемый", Элементы.ДеревоСвойств.ТекущаяСтрока); Иначе - ПараметрыОткрытия.Вставить("Родитель", Родитель); + ПараметрыФормы.Вставить("Родитель", Родитель); КонецЕсли; - ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаЭлемента", ПараметрыОткрытия); + ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаЭлемента", ПараметрыФормы); КонецПроцедуры @@ -112,10 +116,11 @@ ИмяФормыПВХ = "ФормаЭлемента"; КонецЕсли; - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("Ключ", Элементы.ДеревоСвойств.ТекущаяСтрока); - ПараметрыОткрытия.Вставить("ОткрываетсяИзНабораСвойств", Истина); - ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма." + ИмяФормыПВХ, ПараметрыОткрытия); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Ключ", Элементы.ДеревоСвойств.ТекущаяСтрока); + ПараметрыФормы.Вставить("ОткрываетсяИзНабораСвойств", Истина); + + ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма." + ИмяФормыПВХ, ПараметрыФормы); КонецПроцедуры @@ -130,10 +135,14 @@ Процедура ДеревоСвойствВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; + ВыполнитьПодборСвойств(); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ДобавитьСвойствоВНабор(Команда) @@ -141,30 +150,8 @@ КонецПроцедуры -&НаКлиенте -Процедура ВыполнитьПодборСвойств() - - Если Элементы.ДеревоСвойств.ВыделенныеСтроки.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - МасДобавляемыеСвойства = Новый Массив; - - Для Каждого ВыделенаяСтрока ИЗ Элементы.ДеревоСвойств.ВыделенныеСтроки Цикл - Свойство = Элементы.ДеревоСвойств.ДанныеСтроки(ВыделенаяСтрока).Ссылка; - МасДобавляемыеСвойства.Добавить(Свойство); - КонецЦикла; - - Результат = Новый Структура("ЭтоДополнительноеСведение, МассивДобавляемых", - ЭтоДополнительноеСведение, - МасДобавляемыеСвойства); - - Оповестить("ПодборСвойствВНабор", Результат); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// Служебные процедуры и функции +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура УстановитьКомментарий() @@ -176,3 +163,26 @@ Комментарий = Элементы.ДеревоСвойств.ТекущиеДанные.Комментарий; КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьПодборСвойств() + + Если Элементы.ДеревоСвойств.ВыделенныеСтроки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ДобавляемыеСвойства = Новый Массив; + + Для Каждого ВыделенаяСтрока ИЗ Элементы.ДеревоСвойств.ВыделенныеСтроки Цикл + Свойство = Элементы.ДеревоСвойств.ДанныеСтроки(ВыделенаяСтрока).Ссылка; + ДобавляемыеСвойства.Добавить(Свойство); + КонецЦикла; + + Результат = Новый Структура; + Результат.Вставить("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение); + Результат.Вставить("ДобавляемыеСвойства", ДобавляемыеСвойства); + + Оповестить("ПодборСвойствВНабор", Результат); + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Module.bsl index b45e7ee4d..a20ffb3b9 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Module.bsl @@ -1,19 +1,19 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Перем ПерваяЧастьИмени, ВтораяЧастьИмени; - - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; ТолькоПросмотр = Истина; - Справочники.НаборыДополнительныхРеквизитовИСведений.ПолучитьЧастиИмени(Объект.Ссылка, ПерваяЧастьИмени, ВтораяЧастьИмени); - - ИспользоватьДопРеквизиты = Справочники.НаборыДополнительныхРеквизитовИСведений.ИспользуютсяДопРеквизиты(ПерваяЧастьИмени, ВтораяЧастьИмени); - ИспользоватьДопСведения = Справочники.НаборыДополнительныхРеквизитовИСведений.ИспользуютсяДопСведения(ПерваяЧастьИмени, ВтораяЧастьИмени); + ВидыСвойствНабора = УправлениеСвойствами.ВидыСвойствНабора(Объект.Ссылка); + ИспользоватьДопРеквизиты = ВидыСвойствНабора.ДополнительныеРеквизиты; + ИспользоватьДопСведения = ВидыСвойствНабора.ДополнительныеСведения; Если НЕ ИспользоватьДопРеквизиты Тогда Элементы.ДополнительныеРеквизиты.Видимость = Ложь; @@ -25,8 +25,10 @@ Если ИспользоватьДопРеквизиты И ИспользоватьДопСведения Тогда Заголовок = Объект.Наименование + " " + НСтр("ru = '(Наборы дополнительных реквизитов и сведений)'") + ИначеЕсли ИспользоватьДопРеквизиты Тогда Заголовок = Объект.Наименование + " " + НСтр("ru = '(Наборы дополнительных реквизитов)'") + ИначеЕсли ИспользоватьДопСведения Тогда Заголовок = Объект.Наименование + " " + НСтр("ru = '(Наборы дополнительных сведений)'") КонецЕсли; diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form index 8ea452236..0e5e432ba 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form @@ -44,12 +44,8 @@ ТаблицыСвойств 71 - ТабРеквизиты + ДополнительныеРеквизиты 22 - - <key>ru</key> - <value>Дополнительные реквизиты</value> - true true @@ -57,7 +53,7 @@ true - ТабРеквизиты + ДополнительныеРеквизиты false Top @@ -77,7 +73,7 @@ true - ТабРеквизиты.Свойство + ДополнительныеРеквизиты.Свойство Свойство1РасширеннаяПодсказка @@ -110,7 +106,7 @@ - ТабРеквизитыКоманднаяПанель + ДополнительныеРеквизитыКоманднаяПанель 24 ТабРеквизитыПодборДопРеквизитов @@ -157,7 +153,7 @@ Left - Form.Item.ТабРеквизиты.StandardCommand.Delete + Form.Item.ДополнительныеРеквизиты.StandardCommand.Delete Normal PictureAndText true @@ -184,7 +180,7 @@ Left - Form.Item.ТабРеквизиты.StandardCommand.MoveUp + Form.Item.ДополнительныеРеквизиты.StandardCommand.MoveUp Normal Auto true @@ -211,7 +207,7 @@ Left - Form.Item.ТабРеквизиты.StandardCommand.MoveDown + Form.Item.ДополнительныеРеквизиты.StandardCommand.MoveDown Normal Auto true @@ -223,21 +219,21 @@ Selection - ТабРеквизитыВыбор + ДополнительныеРеквизитыВыбор BeforeAddRow - ТабРеквизитыПередНачаломДобавления + ДополнительныеРеквизитыПередНачаломДобавления BeforeDeleteRow - ТабРеквизитыПередУдалением + ДополнительныеРеквизитыПередУдалением - ТабРеквизитыСтрокаПоиска + ДополнительныеРеквизитыСтрокаПоиска 80 - ТабРеквизитыСтрокаПоискаРасширеннаяПодсказка + ДополнительныеРеквизитыСтрокаПоискаРасширеннаяПодсказка 82 Label true @@ -247,20 +243,20 @@ - ТабРеквизитыСтрокаПоискаКонтекстноеМеню + ДополнительныеРеквизитыСтрокаПоискаКонтекстноеМеню 81 true - ТабРеквизиты + ДополнительныеРеквизиты true - ТабРеквизитыСостояниеПросмотра + ДополнительныеРеквизитыСостояниеПросмотра 83 - ТабРеквизитыСостояниеПросмотраРасширеннаяПодсказка + ДополнительныеРеквизитыСостояниеПросмотраРасширеннаяПодсказка 85 Label true @@ -270,21 +266,21 @@ - ТабРеквизитыСостояниеПросмотраКонтекстноеМеню + ДополнительныеРеквизитыСостояниеПросмотраКонтекстноеМеню 84 true ViewStatusAddition - ТабРеквизиты + ДополнительныеРеквизиты true - ТабРеквизитыУправлениеПоиском + ДополнительныеРеквизитыУправлениеПоиском 86 - ТабРеквизитыУправлениеПоискомРасширеннаяПодсказка + ДополнительныеРеквизитыУправлениеПоискомРасширеннаяПодсказка 88 Label true @@ -294,18 +290,18 @@ - ТабРеквизитыУправлениеПоискомКонтекстноеМеню + ДополнительныеРеквизитыУправлениеПоискомКонтекстноеМеню 87 true SearchControlAddition - ТабРеквизиты + ДополнительныеРеквизиты true - ТабРеквизитыРасширеннаяПодсказка + ДополнительныеРеквизитыРасширеннаяПодсказка 79 Label true @@ -315,7 +311,7 @@ - ТабРеквизитыКонтекстноеМеню + ДополнительныеРеквизитыКонтекстноеМеню 23 true @@ -344,12 +340,8 @@ - ТабСведения + ДополнительныеСведения 27 - - <key>ru</key> - <value>Дополнительные сведения</value> - true true @@ -357,7 +349,7 @@ true - ТабСведения + ДополнительныеСведения false Top @@ -376,7 +368,7 @@ true - ТабСведения.Свойство + ДополнительныеСведения.Свойство Свойство2РасширеннаяПодсказка @@ -409,7 +401,7 @@ - ТабСведенияКоманднаяПанель + ДополнительныеСведенияКоманднаяПанель 29 ТабСведенияПодборДопСведений @@ -456,7 +448,7 @@ Left - Form.Item.ТабСведения.StandardCommand.Delete + Form.Item.ДополнительныеСведения.StandardCommand.Delete Normal PictureAndText true @@ -483,7 +475,7 @@ Left - Form.Item.ТабСведения.StandardCommand.MoveUp + Form.Item.ДополнительныеСведения.StandardCommand.MoveUp Normal Auto true @@ -510,7 +502,7 @@ Left - Form.Item.ТабСведения.StandardCommand.MoveDown + Form.Item.ДополнительныеСведения.StandardCommand.MoveDown Normal Auto true @@ -522,21 +514,21 @@ Selection - ТабСведенияВыбор + ДополнительныеСведенияВыбор BeforeAddRow - ТабСведенияПередНачаломДобавления + ДополнительныеСведенияПередНачаломДобавления BeforeDeleteRow - ТабСведенияПередУдалением + ДополнительныеСведенияПередУдалением - ТабСведенияСтрокаПоиска + ДополнительныеСведенияСтрокаПоиска 104 - ТабСведенияСтрокаПоискаРасширеннаяПодсказка + ДополнительныеСведенияСтрокаПоискаРасширеннаяПодсказка 106 Label true @@ -546,20 +538,20 @@ - ТабСведенияСтрокаПоискаКонтекстноеМеню + ДополнительныеСведенияСтрокаПоискаКонтекстноеМеню 105 true - ТабСведения + ДополнительныеСведения true - ТабСведенияСостояниеПросмотра + ДополнительныеСведенияСостояниеПросмотра 107 - ТабСведенияСостояниеПросмотраРасширеннаяПодсказка + ДополнительныеСведенияСостояниеПросмотраРасширеннаяПодсказка 109 Label true @@ -569,21 +561,21 @@ - ТабСведенияСостояниеПросмотраКонтекстноеМеню + ДополнительныеСведенияСостояниеПросмотраКонтекстноеМеню 108 true ViewStatusAddition - ТабСведения + ДополнительныеСведения true - ТабСведенияУправлениеПоиском + ДополнительныеСведенияУправлениеПоиском 110 - ТабСведенияУправлениеПоискомРасширеннаяПодсказка + ДополнительныеСведенияУправлениеПоискомРасширеннаяПодсказка 112 Label true @@ -593,18 +585,18 @@ - ТабСведенияУправлениеПоискомКонтекстноеМеню + ДополнительныеСведенияУправлениеПоискомКонтекстноеМеню 111 true SearchControlAddition - ТабСведения + ДополнительныеСведения true - ТабСведенияРасширеннаяПодсказка + ДополнительныеСведенияРасширеннаяПодсказка 103 Label true @@ -614,7 +606,7 @@ - ТабСведенияКонтекстноеМеню + ДополнительныеСведенияКонтекстноеМеню 28 true @@ -714,10 +706,10 @@ true - ТабРеквизиты + ДополнительныеРеквизиты <key>ru</key> - <value>Таб реквизиты</value> + <value>Дополнительные реквизиты</value> 3 @@ -749,10 +741,10 @@ - ТабСведения + ДополнительныеСведения <key>ru</key> - <value>Таб сведения</value> + <value>Дополнительные сведения</value> 4 diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl index 53fae4d7e..c9f75f1c0 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl @@ -1,23 +1,21 @@ //////////////////////////////////////////////////////////////////////////////// -// Процедуры - обработчики событий формы +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если ЭтаФорма.Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - ////////////////////////////////////////////////////////////////////////////// - // Поддержка раздельной настройки доп. реквизитов и доп. сведений - // + // Раздельная настройка дополнительных реквизитов и дополнительных сведений. Если Объект.Предопределенный Тогда Элементы.Наименование.ТолькоПросмотр = Истина; КонецЕсли; - УправлениеСвойствами.ПолучитьИспользованиеДополнительныхСвойств(Объект.Ссылка, ИспользоватьДопРеквизиты, ИспользоватьДопСведения); + ЗаполнитьИспользованиеДополнительныхСвойств(); Если НЕ ИспользоватьДопРеквизиты И НЕ ИспользоватьДопСведения Тогда Отказ = Истина; @@ -25,25 +23,26 @@ КонецЕсли; Если НЕ ИспользоватьДопРеквизиты Тогда - Элементы.ТабРеквизиты.Видимость = Ложь; - Элементы.ТабСведения.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + Элементы.ДополнительныеРеквизиты.Видимость = Ложь; + Элементы.ДополнительныеСведения.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + ИначеЕсли НЕ ИспользоватьДопСведения Тогда - Элементы.ТабСведения.Видимость = Ложь; - Элементы.ТабРеквизиты.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + Элементы.ДополнительныеСведения.Видимость = Ложь; + Элементы.ДополнительныеРеквизиты.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; КонецЕсли; Если ИспользоватьДопРеквизиты Тогда - Для Каждого ДополнительныйРеквизит Из Объект.ДополнительныеРеквизиты Цикл - Если НЕ ДополнительныйРеквизит.Свойство.ЭтоДополнительноеСведение Тогда - ТабРеквизиты.Добавить().Свойство = ДополнительныйРеквизит.Свойство; + Для Каждого Строка Из Объект.ДополнительныеРеквизиты Цикл + Если НЕ Строка.Свойство.ЭтоДополнительноеСведение Тогда + ДополнительныеРеквизиты.Добавить().Свойство = Строка.Свойство; КонецЕсли; КонецЦикла; КонецЕсли; Если ИспользоватьДопСведения Тогда - Для Каждого ДополнительноеСведение Из Объект.ДополнительныеСведения Цикл - Если ДополнительноеСведение.Свойство.ЭтоДополнительноеСведение Тогда - ТабСведения.Добавить().Свойство = ДополнительноеСведение.Свойство; + Для Каждого Строка Из Объект.ДополнительныеСведения Цикл + Если Строка.Свойство.ЭтоДополнительноеСведение Тогда + ДополнительныеСведения.Добавить().Свойство = Строка.Свойство; КонецЕсли; КонецЦикла; КонецЕсли; @@ -56,9 +55,6 @@ Заголовок = Объект.Наименование + " " + НСтр("ru = '(Набор дополнительных сведений)'") КонецЕсли; - // - ////////////////////////////////////////////////////////////////////////////// - КонецПроцедуры &НаСервере @@ -68,14 +64,14 @@ ТекущийОбъект.ДополнительныеСведения.Очистить(); Если ИспользоватьДопРеквизиты Тогда - Для Каждого ДополнительныйРеквизит Из ТабРеквизиты Цикл - ТекущийОбъект.ДополнительныеРеквизиты.Добавить().Свойство = ДополнительныйРеквизит.Свойство; + Для Каждого Строка Из ДополнительныеРеквизиты Цикл + ТекущийОбъект.ДополнительныеРеквизиты.Добавить().Свойство = Строка.Свойство; КонецЦикла; КонецЕсли; Если ИспользоватьДопСведения Тогда - Для каждого ДополнительноеСведение Из ТабСведения Цикл - ТекущийОбъект.ДополнительныеСведения.Добавить().Свойство = ДополнительноеСведение.Свойство; + Для каждого Строка Из ДополнительныеСведения Цикл + ТекущийОбъект.ДополнительныеСведения.Добавить().Свойство = Строка.Свойство; КонецЦикла; КонецЕсли; @@ -91,33 +87,33 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - ///////////////////////////////////////////////////////// - // При записи свойства необходимо перенести свойство в - // соответствующую группу и обновить поле комментария, - // при необходимости + // При записи свойства необходимо перенести свойство в соответствующую группу и + // обновить поле Комментарий (если требуется). Если ИмяСобытия = "Запись_ДополнительныеРеквизитыИСведения" Тогда ПроверитьСоставыТаблицПослеЗаписиСвойства(Параметр.ЭтоДополнительноеСведение, Источник); ИначеЕсли ИмяСобытия = "ПодборСвойствВНабор" Тогда - МассивДобавляемых = Новый Массив; + ДобавляемыеСвойства = Новый Массив; Если Параметр.ЭтоДополнительноеСведение Тогда - Таблица = ТабСведения; + Таблица = ДополнительныеСведения; Иначе - Таблица = ТабРеквизиты + Таблица = ДополнительныеРеквизиты КонецЕсли; - Для Каждого Добавляемый Из Параметр.МассивДобавляемых Цикл + Для каждого Добавляемый Из Параметр.ДобавляемыеСвойства Цикл + Отбор = Новый Структура("Свойство", Добавляемый); + Если Таблица.НайтиСтроки(Отбор).Количество() = 0 Тогда - МассивДобавляемых.Добавить(Добавляемый); + ДобавляемыеСвойства.Добавить(Добавляемый); КонецЕсли; КонецЦикла; - Если МассивДобавляемых.Количество() > 0 Тогда - ДобавитьСвойства(МассивДобавляемых); + Если ДобавляемыеСвойства.Количество() > 0 Тогда + ДобавитьСвойства(ДобавляемыеСвойства); КонецЕсли; КонецЕсли; @@ -125,34 +121,160 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Процедуры - обработчики команд табличных частей формы +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДополнительныеРеквизиты &НаКлиенте -Процедура ТабРеквизитыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) +Процедура ДополнительныеРеквизитыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + Отказ = Истина; + КонецПроцедуры &НаКлиенте -Процедура ТабСведенияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) +Процедура ДополнительныеРеквизитыПередУдалением(Элемент, Отказ) + + ДополнительныеСвойстваПередУдалением(Элемент, ДополнительныеРеквизиты); + +КонецПроцедуры + +&НаКлиенте +Процедура ДополнительныеРеквизитыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ТаблицаВыбор(Элемент, ВыбраннаяСтрока, СтандартнаяОбработка); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДополнительныеСведения + +&НаКлиенте +Процедура ДополнительныеСведенияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + Отказ = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура ТабРеквизитыПередУдалением(Элемент, Отказ) - - ТабСвойстваПередУдалением(Элемент, ТабРеквизиты); КонецПроцедуры &НаКлиенте -Процедура ТабСведенияПередУдалением(Элемент, Отказ) +Процедура ДополнительныеСведенияПередУдалением(Элемент, Отказ) - ТабСвойстваПередУдалением(Элемент, ТабСведения); + ДополнительныеСвойстваПередУдалением(Элемент, ДополнительныеСведения); КонецПроцедуры &НаКлиенте -Процедура ТабСвойстваПередУдалением(Элемент, ТаблицаСвойств) +Процедура ДополнительныеСведенияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ТаблицаВыбор(Элемент, ВыбраннаяСтрока, СтандартнаяОбработка); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ПодборДопРеквизитов(Команда) + + ВызватьФормуПодбора(Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ПодборДопСведений(Команда) + + ВызватьФормуПодбора(Истина); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура ЗаполнитьИспользованиеДополнительныхСвойств() + + Если Объект.Ссылка = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка() Тогда + ИспользоватьДопРеквизиты = Ложь; + ИспользоватьДопСведения = Ложь; + Возврат; + КонецЕсли; + + Если Объект.Ссылка.Предопределенный + И Объект.Ссылка.Родитель = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка() Тогда + + СсылкаПредопределенного = Объект.Ссылка; + Иначе + СсылкаПредопределенного = Объект.Ссылка.Родитель; + КонецЕсли; + + Если СсылкаПредопределенного = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка() Тогда + ВызватьИсключение НСтр("ru = 'Не найден владелец свойств.'"); + КонецЕсли; + + ВидыСвойствНабора = УправлениеСвойствами.ВидыСвойствНабора(СсылкаПредопределенного); + ИспользоватьДопРеквизиты = ВидыСвойствНабора.ДополнительныеРеквизиты; + ИспользоватьДопСведения = ВидыСвойствНабора.ДополнительныеСведения; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ДобавитьВыделенныеСвойства(Знач ДобавляемыеСвойства, ДопРеквизиты, ДопСведения) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДополнительныеРеквизитыИСведения.Ссылка КАК Свойство + |ПОМЕСТИТЬ Временная + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения + |ГДЕ + | (ДополнительныеРеквизитыИСведения.Ссылка В (&ДопРеквизиты) + | ИЛИ ДополнительныеРеквизитыИСведения.Ссылка В (&ДопСведения)) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДополнительныеРеквизитыИСведения.Ссылка, + | ДополнительныеРеквизитыИСведения.ЭтоДополнительноеСведение + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения + | ЛЕВОЕ СОЕДИНЕНИЕ Временная КАК Временная + | ПО ДополнительныеРеквизитыИСведения.Ссылка = Временная.Свойство + |ГДЕ + | ДополнительныеРеквизитыИСведения.Ссылка В ИЕРАРХИИ(&ДобавляемыеСвойства) + | И НЕ ДополнительныеРеквизитыИСведения.ЭтоГруппа + | И Временная.Свойство ЕСТЬ NULL + | И НЕ ДополнительныеРеквизитыИСведения.ПометкаУдаления + | + |УПОРЯДОЧИТЬ ПО + | ДополнительныеРеквизитыИСведения.Наименование"; + + Запрос.УстановитьПараметр("ДобавляемыеСвойства", ДобавляемыеСвойства); + Запрос.УстановитьПараметр("ДопРеквизиты", ДопРеквизиты); + Запрос.УстановитьПараметр("ДопСведения", ДопСведения); + + Выборка = Запрос.Выполнить().Выбрать(); + + ДопРеквизиты.Очистить(); + ДопСведения.Очистить(); + + Если Выборка.Количество() = 0 Тогда + Возврат Ложь; + КонецЕсли; + + Пока Выборка.Следующий() Цикл + + Если Выборка.ЭтоДополнительноеСведение Тогда + ДопСведения.Добавить(Выборка.Ссылка); + Иначе + ДопРеквизиты.Добавить(Выборка.Ссылка); + КонецЕсли; + + КонецЦикла; + + Возврат Истина; + +КонецФункции + +&НаКлиенте +Процедура ДополнительныеСвойстваПередУдалением(Элемент, ТаблицаСвойств) МассивУдаляемыхСвойств = Новый Массив; @@ -169,120 +291,101 @@ КонецПроцедуры -&НаКлиенте -Процедура ТабСведенияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ТаблицаВыбор(Элемент, ВыбраннаяСтрока, СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура ТабРеквизитыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ТаблицаВыбор(Элемент, ВыбраннаяСтрока, СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура ПодборДопРеквизитов(Команда) - ВызватьФормуПодбора(Ложь); -КонецПроцедуры - -&НаКлиенте -Процедура ПодборДопСведений(Команда) - ВызватьФормуПодбора(Истина); -КонецПроцедуры - &НаКлиенте Процедура ВызватьФормуПодбора(ЭтоДополнительноеСведение) - СтруктрураПараметров = Новый Структура; - СтруктрураПараметров.Вставить("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение); - МасВыбранных = Новый Массив; + ВыбранныеСвойства = Новый Массив; Если ЭтоДополнительноеСведение Тогда - Для Каждого ЭлементСтр Из ТабСведения Цикл - МасВыбранных.Добавить(ЭлементСтр.Свойство); + Для Каждого Строка Из ДополнительныеСведения Цикл + ВыбранныеСвойства.Добавить(Строка.Свойство); КонецЦикла; Иначе - Для Каждого ЭлементСтр Из ТабРеквизиты Цикл - МасВыбранных.Добавить(ЭлементСтр.Свойство); + Для Каждого Строка Из ДополнительныеРеквизиты Цикл + ВыбранныеСвойства.Добавить(Строка.Свойство); КонецЦикла; КонецЕсли; - СтруктрураПараметров.Вставить("МасВыбранных", МасВыбранных); - ОткрытьФорму("Справочник.НаборыДополнительныхРеквизитовИСведений.Форма.ПодборСвойств", СтруктрураПараметров, ЭтаФорма, УникальныйИдентификатор); + ПараметрыФормы.Вставить("ВыбранныеСвойства", ВыбранныеСвойства); + + ОткрытьФорму("Справочник.НаборыДополнительныхРеквизитовИСведений.Форма.ПодборСвойств", + ПараметрыФормы, + ЭтаФорма, + УникальныйИдентификатор); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Служебные процедуры и функции - &НаКлиенте Процедура ОповеститьОбИзмененииНабора(Операция, МассивСвойств) - Оповестить("ИзменилсяНаборВыбранных", Новый Структура("Операция,МассивСвойств", Операция, МассивСвойств), ЭтаФорма); + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("Операция", Операция); + ПараметрыОповещения.Вставить("МассивСвойств", МассивСвойств); + + Оповестить("ИзменилсяНаборВыбранных", ПараметрыОповещения, ЭтаФорма); КонецПроцедуры &НаКлиенте -Процедура ПроверитьСоставыТаблицПослеЗаписиСвойства(ЭтоДополнительноеСведение, ДопСвойствоСсылка) +Процедура ПроверитьСоставыТаблицПослеЗаписиСвойства(Знач ЭтоДополнительноеСведение, Знач Свойство) - // Определим, из какой таблицы в какую возможно может потребоваться переносить доп. свойство + // Определение из какой таблицы в какую может потребоваться переносить свойство. Если ЭтоДополнительноеСведение Тогда - Таблица1 = ТабСведения; - Таблица2 = ТабРеквизиты; + ТаблицаПриемник = ДополнительныеСведения; + ТаблицаИсточник = ДополнительныеРеквизиты; Иначе - Таблица1 = ТабРеквизиты; - Таблица2 = ТабСведения; + ТаблицаПриемник = ДополнительныеРеквизиты; + ТаблицаИсточник = ДополнительныеСведения; КонецЕсли; - // Проверим, входит ли свойство в таблицу, из которой нужно переносить - Свойство = ДопСвойствоСсылка; - Строки = Таблица2.НайтиСтроки(Новый Структура("Свойство", Свойство)); + // Проверка входит ли свойство в таблицу, из которой нужно переносить. + Строки = ТаблицаИсточник.НайтиСтроки(Новый Структура("Свойство", Свойство)); Если Строки.Количество() = 0 Тогда Возврат; КонецЕсли; - // Удалим из одной таблицы - Индекс = Таблица2.Индекс(Строки[0]); - Таблица2.Удалить(Индекс); + // Удаление из одной таблицы. + Индекс = ТаблицаИсточник.Индекс(Строки[0]); + ТаблицаИсточник.Удалить(Индекс); - // Добавим в другую - новСтр = Таблица1.Добавить(); - новСтр.Свойство = Свойство; + // Добавление в другую таблицу. + НоваяСтрока = ТаблицаПриемник.Добавить(); + НоваяСтрока.Свойство = Свойство; КонецПроцедуры &НаКлиенте -Процедура ДобавитьСвойства(масДобавлять) +Процедура ДобавитьСвойства(ДобавляемыеСвойства) - масР = Новый Массив; - Для Каждого Стр Из ТабРеквизиты Цикл - масР.Добавить(Стр.Свойство); + ДопРеквизиты = Новый Массив; + Для каждого Строка Из ДополнительныеРеквизиты Цикл + ДопРеквизиты.Добавить(Строка.Свойство); КонецЦикла; - масС = Новый Массив; - Для Каждого Стр Из ТабСведения Цикл - масС.Добавить(Стр.Свойство); + ДопСведения = Новый Массив; + Для каждого Строка Из ДополнительныеСведения Цикл + ДопСведения.Добавить(Строка.Свойство); КонецЦикла; ОбщийМассивСвойств = Новый Массив; - Если ПроизвестиДобавлениеВыделенныхСвойств(масДобавлять, масР, масС) Тогда + Если ДобавитьВыделенныеСвойства(ДобавляемыеСвойства, ДопРеквизиты, ДопСведения) Тогда + Модифицированность = Истина; - Для Каждого Свойство Из масР Цикл - новСтр = ТабРеквизиты.Добавить(); - новСтр.Свойство = Свойство; - ОбщийМассивСвойств.Добавить(Свойство); + Для каждого ДобавляемыйРеквизит Из ДопРеквизиты Цикл + НоваяСтрока = ДополнительныеРеквизиты.Добавить(); + НоваяСтрока.Свойство = ДобавляемыйРеквизит; + ОбщийМассивСвойств.Добавить(ДобавляемыйРеквизит); КонецЦикла; - Для Каждого Свойство Из масС Цикл - новСтр = ТабСведения.Добавить(); - новСтр.Свойство = Свойство; - ОбщийМассивСвойств.Добавить(Свойство); + Для каждого ДобавляемоеСведение Из ДопСведения Цикл + НоваяСтрока = ДополнительныеСведения.Добавить(); + НоваяСтрока.Свойство = ДобавляемоеСведение; + ОбщийМассивСвойств.Добавить(ДобавляемоеСведение); КонецЦикла; ОповеститьОбИзмененииНабора("Добавление", ОбщийМассивСвойств); @@ -291,74 +394,15 @@ КонецПроцедуры -&НаСервереБезКонтекста -Функция ПроизвестиДобавлениеВыделенныхСвойств(масСсылок, масР, масС) - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ДополнительныеРеквизитыИСведения.Ссылка КАК Свойство - |ПОМЕСТИТЬ Временная - |ИЗ - | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения - |ГДЕ - | (ДополнительныеРеквизитыИСведения.Ссылка В (&масР) - | ИЛИ ДополнительныеРеквизитыИСведения.Ссылка В (&масС)) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ДополнительныеРеквизитыИСведения.Ссылка, - | ДополнительныеРеквизитыИСведения.ЭтоДополнительноеСведение - |ИЗ - | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения - | ЛЕВОЕ СОЕДИНЕНИЕ Временная КАК Временная - | ПО ДополнительныеРеквизитыИСведения.Ссылка = Временная.Свойство - |ГДЕ - | ДополнительныеРеквизитыИСведения.Ссылка В ИЕРАРХИИ(&масСсылок) - | И (НЕ ДополнительныеРеквизитыИСведения.ЭтоГруппа) - | И Временная.Свойство ЕСТЬ NULL - | И (НЕ ДополнительныеРеквизитыИСведения.ПометкаУдаления) - | - |УПОРЯДОЧИТЬ ПО - | ДополнительныеРеквизитыИСведения.Наименование"; - - Запрос.УстановитьПараметр("масСсылок", масСсылок); - Запрос.УстановитьПараметр("масР", масР); - Запрос.УстановитьПараметр("масС", масС); - - Выборка = Запрос.Выполнить().Выбрать(); - - масР.Очистить(); - масС.Очистить(); - - Если Выборка.Количество() = 0 Тогда - Возврат Ложь; - КонецЕсли; - - Пока Выборка.Следующий() Цикл - - Если Выборка.ЭтоДополнительноеСведение Тогда - масС.Добавить(Выборка.Ссылка); - Иначе - масР.Добавить(Выборка.Ссылка); - КонецЕсли; - - КонецЦикла; - - Возврат Истина; - -КонецФункции - &НаКлиенте Процедура ТаблицаВыбор(Элемент, ВыбраннаяСтрока, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("ОткрываетсяИзНабораСвойств", Истина); - ПараметрыОткрытия.Вставить("Ключ", Элемент.ДанныеСтроки(ВыбраннаяСтрока).Свойство); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ОткрываетсяИзНабораСвойств", Истина); + ПараметрыФормы.Вставить("Ключ", Элемент.ДанныеСтроки(ВыбраннаяСтрока).Свойство); - ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаЭлемента", ПараметрыОткрытия); + ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаЭлемента", ПараметрыФормы); КонецПроцедуры diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl index 52cfd041d..e69de29bb 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl @@ -1,35 +0,0 @@ -Функция ИспользуютсяДопРеквизиты(ПерваяЧастьИмени, ВтораяЧастьИмени) Экспорт - - МетаданныеВладельцаСвойств = Метаданные.НайтиПоПолномуИмени(ПерваяЧастьИмени+"."+ВтораяЧастьИмени); - - Если МетаданныеВладельцаСвойств = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - - Если МетаданныеВладельцаСвойств.ТабличныеЧасти.Найти("ДополнительныеРеквизиты") = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -Функция ИспользуютсяДопСведения(ПерваяЧастьИмени, ВтораяЧастьИмени) Экспорт - - Если Метаданные.ОбщиеКоманды.Найти("ДополнительныеСведения") = Неопределено - ИЛИ НЕ Метаданные.ОбщиеКоманды.ДополнительныеСведения.ТипПараметраКоманды.СодержитТип(Тип(ПерваяЧастьИмени+"Ссылка."+ВтораяЧастьИмени)) Тогда - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -Процедура ПолучитьЧастиИмени(Ссылка, ПерваяЧастьИмени, ВтораяЧастьИмени) Экспорт - - ИмяПредопределенного = Справочники.НаборыДополнительныхРеквизитовИСведений.ПолучитьИмяПредопределенного(Ссылка); - Позиция = Найти(ИмяПредопределенного, "_"); - ПерваяЧастьИмени = Лев(ИмяПредопределенного, Позиция - 1); - ВтораяЧастьИмени = Прав(ИмяПредопределенного, СтрДлина(ИмяПредопределенного) - Позиция); - -КонецПроцедуры diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl index fc3ee4666..77fbbb493 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда @@ -5,60 +8,46 @@ КонецЕсли; Если ЭтоГруппа Тогда - УправлениеСвойствами.ПередЗаписьюГруппыНаборовСвойств(ЭтотОбъект); - Иначе - - // Удалим дубли и пустые строки + // Удаление дублей и пустых строк. ВыбранныеСвойства = Новый Соответствие; УдаляемыеСвойства = Новый Массив; - // Дополнительные реквизиты + // Дополнительные реквизиты. Для каждого ДополнительныйРеквизит Из ДополнительныеРеквизиты Цикл - Если ДополнительныйРеквизит.Свойство.Пустая() ИЛИ ВыбранныеСвойства.Получить(ДополнительныйРеквизит.Свойство) <> Неопределено Тогда + Если ДополнительныйРеквизит.Свойство.Пустая() + ИЛИ ВыбранныеСвойства.Получить(ДополнительныйРеквизит.Свойство) <> Неопределено Тогда УдаляемыеСвойства.Добавить(ДополнительныйРеквизит); - Иначе - ВыбранныеСвойства.Вставить(ДополнительныйРеквизит.Свойство, Истина); - КонецЕсли; - КонецЦикла; Для каждого УдаляемоеСвойство Из УдаляемыеСвойства Цикл - ДополнительныеРеквизиты.Удалить(УдаляемоеСвойство); - КонецЦикла; ВыбранныеСвойства.Очистить(); УдаляемыеСвойства.Очистить(); - // Дополнительные сведения + // Дополнительные сведения. Для каждого ДополнительноеСведение Из ДополнительныеСведения Цикл - Если ДополнительноеСведение.Свойство.Пустая() ИЛИ ВыбранныеСвойства.Получить(ДополнительноеСведение.Свойство) <> Неопределено Тогда + Если ДополнительноеСведение.Свойство.Пустая() + ИЛИ ВыбранныеСвойства.Получить(ДополнительноеСведение.Свойство) <> Неопределено Тогда УдаляемыеСвойства.Добавить(ДополнительноеСведение); - Иначе - ВыбранныеСвойства.Вставить(ДополнительноеСведение.Свойство, Истина); - КонецЕсли; - КонецЦикла; Для каждого УдаляемоеСвойство Из УдаляемыеСвойства Цикл - ДополнительныеСведения.Удалить(УдаляемоеСвойство); - КонецЦикла; - КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo index 7578d8a55..e7f1cf956 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo @@ -123,6 +123,7 @@ Наборы дополнительных реквизитов и сведений true + true 2 true 100 diff --git a/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Module.bsl index bf70473b4..368698db1 100644 --- a/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Module.bsl @@ -1,29 +1,29 @@ - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // КонтактнаяИнформация + // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтаФорма, Объект, "ГруппаКонтактнаяИнформация"); - // Конец КонтактнаяИнформация + // Конец СтандартныеПодсистемы.КонтактнаяИнформация КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект) - // КонтактнаяИнформация + // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект, Отказ); - // Конец КонтактнаяИнформация + // Конец СтандартныеПодсистемы.КонтактнаяИнформация КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ ПОДСИСТЕМЫ "КОНТАКТНАЯ ИНФОРМАЦИЯ" +// СтандартныеПодсистемы.КонтактнаяИнформация + &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент) @@ -37,3 +37,5 @@ УправлениеКонтактнойИнформациейКлиент.ПредставлениеНачалоВыбора(ЭтаФорма, Элемент, Модифицированность, СтандартнаяОбработка); КонецПроцедуры + +// Конец СтандартныеПодсистемы.КонтактнаяИнформация \ No newline at end of file diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl index c6de06685..9d941649a 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl @@ -11,9 +11,9 @@ РабочийКаталог = РаботаСФайламиВызовСервера.ПолучитьРабочийКаталог(Объект.Ссылка); - // Свойства + // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект, ""); - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства ОбновитьПолныйПуть(); @@ -50,20 +50,20 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - // Свойства + // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); КонецЕсли; - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект) - // Свойства + // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект); - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры @@ -93,7 +93,7 @@ Если ДиалогОткрытияФайла.Выбрать() Тогда ИмяКаталога = ДиалогОткрытияФайла.Каталог; - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ИмяКаталога, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ИмяКаталога = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталога, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); // Создать каталог для файлов Попытка diff --git a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl index 7b62b66ee..62fdc013e 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl @@ -1,4 +1,38 @@ +// Подсистема "Управление доступом" +// Процедура ЗаполнитьНаборыЗначенийДоступа по свойствам объекта заполняет наборы значений доступа +// в таблице с полями: +// НомерНабора - Число (необязательно, если набор один), +// ВидДоступа - ПланВидовХарактеристикСсылка.ВидыДоступа, (обязательно), +// ЗначениеДоступа - Неопределено, СправочникСсылка или др. (обязательно), +// Чтение - Булево (необязательно, если набор для всех прав) устанавливается для одной строки набора, +// Добавление - Булево (необязательно, если набор для всех прав) устанавливается для одной строки набора, +// Изменение - Булево (необязательно, если набор для всех прав) устанавливается для одной строки набора, +// Удаление - Булево (необязательно, если набор для всех прав) устанавливается для одной строки набора, +// +// Вызывается из процедуры УправлениеДоступом.ЗаписатьНаборыЗначенийДоступа(), +// если объект зарегистрирован в "ПодпискаНаСобытие.ЗаписатьНаборыЗначенийДоступа" и +// из таких же процедур объектов, у которых наборы значений доступа зависят от наборов этого +// объекта (в этом случае объект зарегистрирован в "ПодпискаНаСобытие.ЗаписатьЗависимыеНаборыЗначенийДоступа"). +// +// Параметры: +// Таблица - ТабличнаяЧасть, +// РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа, +// ТаблицаЗначений, возвращаемая УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(). +// +Процедура ЗаполнитьНаборыЗначенийДоступа(Таблица) Экспорт + + // Логика ограничения: + // Чтения, Добавления, Изменения: Ссылка + + // Доступ по папке файлов. + Строка = Таблица.Добавить(); + Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПапкиФайлов; + Строка.ЗначениеДоступа = Ссылка; + +КонецПроцедуры + +// Подсистема "Управление доступом" Процедура ПередЗаписью(Отказ) @@ -55,7 +89,7 @@ Если РабочийКаталог <> "" Тогда // Добавляем слэш в конце, если его нет - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(РабочийКаталог, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + РабочийКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РабочийКаталог, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); РабочийКаталогУнаследованныйПрежний = РабочийКаталог + Ссылка.Наименование + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); Если РабочийКаталогУнаследованныйПрежний = РабочийКаталогЭтойПапки Тогда @@ -102,7 +136,7 @@ Если РабочийКаталогВладельца <> "" Тогда // Добавляем слэш в конце, если его нет - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(РабочийКаталогВладельца, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + РабочийКаталогВладельца = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РабочийКаталогВладельца, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); РабочийКаталогВладельца = РабочийКаталогВладельца + Наименование + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); РаботаСФайламиВызовСервера.СохранитьРабочийКаталог(Ссылка, РабочийКаталогВладельца); @@ -113,8 +147,8 @@ КонецПроцедуры Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) - ДатаСоздания = ТекущаяДата(); - Ответственный = ОбщегоНазначения.ТекущийПользователь(); + ДатаСоздания = ТекущаяДатаСеанса(); + Ответственный = Пользователи.ТекущийПользователь(); КонецПроцедуры // Возвращает текущее значение пометки удаления в информационной базе diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Module.bsl index 152c0e0c5..8b1378917 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Module.bsl @@ -1,3 +1 @@ -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl index 49b60d2fd..fbdd14871 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаСписка/Module.bsl @@ -1,6 +1,6 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Module.bsl index 56d7de1e8..dd2d8c5e6 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Module.bsl @@ -1,12 +1,7 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ -//////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -25,20 +20,9 @@ Возврат; КонецЕсли; - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | НастройкиУчетныхЗаписейЭлектроннойПочты.ОтветственныйЗаВедениеПапок - |ИЗ - | РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты - |ГДЕ - | НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = &УчетнаяЗаписьЭлектроннойПочты - | И НастройкиУчетныхЗаписейЭлектроннойПочты.ОтветственныйЗаВедениеПапок = &ОтветственныйЗаВедениеПапок"; - - Запрос.УстановитьПараметр("УчетнаяЗаписьЭлектроннойПочты",Объект.Владелец); - Запрос.УстановитьПараметр("ОтветственныйЗаВедениеПапок", Пользователи.АвторизованныйПользователь()); - - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда + ЕстьПравоНаВедениеПапок = Взаимодействия.ПользовательЯвляетсяОтветственнымЗаВедениеПапок(Объект.Владелец); + + Если НЕ ЕстьПравоНаВедениеПапок Тогда Если Объект.Ссылка.Пустая() Тогда Отказ = Истина; Иначе @@ -55,5 +39,3 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl index 3398adf4a..49f12dd32 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl @@ -1,4 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ПередЗаписью(Отказ) @@ -36,6 +38,10 @@ Процедура ПриЗаписи(Отказ) + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + Если ДополнительныеСвойства.Свойство("Родитель") И Родитель <> ДополнительныеСвойства.Родитель Тогда Если НЕ ДополнительныеСвойства.Свойство("ОбработаноИзменениеРодителя") Тогда Взаимодействия.УстановитьРодителяУПапки(Ссылка,Родитель,Истина) diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ПапкиЭлектронныхПисем.mdo b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ПапкиЭлектронныхПисем.mdo index 8ae8f412a..5311c9fc8 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ПапкиЭлектронныхПисем.mdo +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ПапкиЭлектронныхПисем.mdo @@ -103,6 +103,10 @@ Use Managed Use + + ru + Папка электронных писем + true HierarchyOfItems 2 diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Form.form index c22acc533..2a5e32b19 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Form.form @@ -17,7 +17,7 @@ КартинкаПредупреждениеРасширеннаяПодсказка - 57 + 51 Label true true @@ -56,7 +56,7 @@ ТекстПредупрежденияРасширеннаяПодсказка - 58 + 52 Label true true @@ -91,7 +91,7 @@ false ПредупреждениеРасширеннаяПодсказка - 56 + 50 Label true true @@ -125,7 +125,7 @@ ПредставлениеОтбораРасширеннаяПодсказка - 59 + 53 Label true true @@ -204,6 +204,229 @@ Normal + + КоманднаяПанель + 49 + + ПользователиИнфБазыИзменить + 18 + true + true + + true + + false + + ПользователиИнфБазыИзменитьРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + Form.Command.Изменить + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиИнфБазыУдалить + 40 + true + false + + true + + false + + ПользователиИнфБазыУдалитьРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + Form.Item.ПользователиИнфБазы.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиИнфБазыОбновить + 31 + true + true + + true + + false + + ПользователиИнфБазыОбновитьРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиИнфБазыНайти + 20 + true + true + + true + + false + + ПользователиИнфБазыНайтиРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + Form.Item.ПользователиИнфБазы.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиИнфБазыОтменитьПоиск + 21 + true + true + + true + + false + + ПользователиИнфБазыОтменитьПоискРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + Form.Item.ПользователиИнфБазы.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + + ПользователиИнфБазыСортироватьПоВозрастанию + 33 + true + true + + true + + false + + ПользователиИнфБазыСортироватьПоВозрастаниюРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + Form.Item.ПользователиИнфБазы.StandardCommand.SortListAsc + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ПользователиИнфБазыСортироватьПоУбыванию + 34 + true + true + + true + + false + + ПользователиИнфБазыСортироватьПоУбываниюРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + Form.Item.ПользователиИнфБазы.StandardCommand.SortListDesc + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + CommandBar + + Left + Form + + ПользователиИнфБазы 1 @@ -242,7 +465,7 @@ ПолноеИмяРасширеннаяПодсказка - 74 + 76 Label true true @@ -287,7 +510,7 @@ ИмяРасширеннаяПодсказка - 76 + 78 Label true true @@ -332,7 +555,7 @@ АутентификацияСтандартнаяРасширеннаяПодсказка - 78 + 80 Label true true @@ -371,7 +594,7 @@ АутентификацияОСРасширеннаяПодсказка - 80 + 82 Label true true @@ -410,7 +633,7 @@ ПользовательОСРасширеннаяПодсказка - 82 + 84 Label true true @@ -449,7 +672,7 @@ ЭтоПользовательРасширеннаяПодсказка - 84 + 86 Label true true @@ -480,7 +703,7 @@ ЭтоВнешнийПользовательРасширеннаяПодсказка - 86 + 88 Label true true @@ -511,7 +734,7 @@ СсылкаРасширеннаяПодсказка - 88 + 90 Label true true @@ -550,7 +773,7 @@ ПометкаУдаленияРасширеннаяПодсказка - 90 + 92 Label true true @@ -591,10 +814,10 @@ ПользователиИнфБазыСтрокаПоиска - 65 + 67 ПользователиИнфБазыСтрокаПоискаРасширеннаяПодсказка - 67 + 69 Label true true @@ -604,7 +827,7 @@ ПользователиИнфБазыСтрокаПоискаКонтекстноеМеню - 66 + 68 true ПользователиИнфБазы @@ -614,10 +837,10 @@ ПользователиИнфБазыСостояниеПросмотра - 68 + 70 ПользователиИнфБазыСостояниеПросмотраРасширеннаяПодсказка - 70 + 72 Label true true @@ -627,7 +850,7 @@ ПользователиИнфБазыСостояниеПросмотраКонтекстноеМеню - 69 + 71 true ViewStatusAddition @@ -638,10 +861,10 @@ ПользователиИнфБазыУправлениеПоиском - 71 + 73 ПользователиИнфБазыУправлениеПоискомРасширеннаяПодсказка - 73 + 75 Label true true @@ -651,7 +874,7 @@ ПользователиИнфБазыУправлениеПоискомКонтекстноеМеню - 72 + 74 true SearchControlAddition @@ -662,7 +885,7 @@ ПользователиИнфБазыРасширеннаяПодсказка - 64 + 66 Label true true @@ -684,7 +907,7 @@ false КонтекстноеМенюПользователиИнфБазыИзменитьРасширеннаяПодсказка - 61 + 63 Label true true @@ -711,7 +934,7 @@ false КонтекстноеМенюПользователиИнфБазыОбновитьРасширеннаяПодсказка - 62 + 64 Label true true @@ -738,7 +961,7 @@ false КонтекстноеМенюПользователиИнфБазыУдалитьРасширеннаяПодсказка - 63 + 65 Label true true @@ -788,200 +1011,11 @@ true + None + false ФормаКоманднаяПанель -1 - - ПользователиИнфБазыИзменить - 18 - true - true - - true - - false - - ПользователиИнфБазыИзменитьРасширеннаяПодсказка - 49 - Label - true - true - - Left - - - Form.Command.Изменить - Normal - Auto - true - true - UserCmds - Auto - - - ПользователиИнфБазыУдалить - 40 - true - false - - true - - false - - ПользователиИнфБазыУдалитьРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - Form.Item.ПользователиИнфБазы.StandardCommand.Delete - Normal - Auto - true - true - UserCmds - Auto - - - ПользователиИнфБазыОбновить - 31 - true - true - - true - - false - - ПользователиИнфБазыОбновитьРасширеннаяПодсказка - 51 - Label - true - true - - Left - - - Form.Command.Обновить - Normal - Auto - true - true - UserCmds - Auto - - - ПользователиИнфБазыНайти - 20 - true - true - - true - - false - - ПользователиИнфБазыНайтиРасширеннаяПодсказка - 52 - Label - true - true - - Left - - - Form.Item.ПользователиИнфБазы.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ПользователиИнфБазыОтменитьПоиск - 21 - true - true - - true - - false - - ПользователиИнфБазыОтменитьПоискРасширеннаяПодсказка - 53 - Label - true - true - - Left - - - Form.Item.ПользователиИнфБазы.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - - ПользователиИнфБазыСортироватьПоВозрастанию - 33 - true - true - - true - - false - - ПользователиИнфБазыСортироватьПоВозрастаниюРасширеннаяПодсказка - 54 - Label - true - true - - Left - - - Form.Item.ПользователиИнфБазы.StandardCommand.SortListAsc - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ПользователиИнфБазыСортироватьПоУбыванию - 34 - true - true - - true - - false - - ПользователиИнфБазыСортироватьПоУбываниюРасширеннаяПодсказка - 55 - Label - true - true - - Left - - - Form.Item.ПользователиИнфБазы.StandardCommand.SortListDesc - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - Left true @@ -1241,7 +1275,7 @@ ПредставлениеОтбора <key>ru</key> - <value>Отбор</value> + <value>Показывать</value> 3 diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html index 7cd89589c..c679c3fae 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html @@ -1,10 +1,8 @@ -

    Назначение формы "Пользователи информационной базы".

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

     

    -

     

    \ 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 f8eae4c72..82a66df1f 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl @@ -1,26 +1,15 @@ -// Поле ПользователиИБ.КодПроблемы -// 0 - пользовательИБ не записан в справочник -// 1 - ПолноеИмя отличается от Наименования -// 2 - пользовательИБ не найден -// 3 - пользовательИБ пустой УИД -// 4 - все в порядке -// для кодов 0,1 красная подсветка -// для кодов 2,3 серая подсветка -// - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - УстановитьПривилегированныйРежим(Истина); - - Если НЕ Пользователи.ЭтоПолноправныйПользовательИБ() Тогда - ВызватьИсключение(НСтр("ru = 'Нет полных прав доступа.'")); + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав для открытия списка пользователей информационной базы.'"); КонецЕсли; + Пользователи.НайтиНеоднозначныхПользователейИБ(); + Отбор = "Все"; ПредставлениеОтбора = Элементы.ПредставлениеОтбора.СписокВыбора[0].Представление; @@ -54,25 +43,8 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// - -&НаКлиенте -Процедура Изменить(Команда) - - ОткрытьПользователяПоСсылке(); - -КонецПроцедуры - -&НаКлиенте -Процедура Обновить(Команда) - - ЗаполнитьПользователейИБ(); - -КонецПроцедуры - +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ПредставлениеОтбораПриИзменении(Элемент) @@ -103,6 +75,19 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ПользователиИнфБазы + +// Описание значений поля КодПроблемы: +// 0 - пользовательИБ не записан в справочник, +// 1 - ПолноеИмя отличается от Наименования, +// 2 - пользовательИБ не найден, +// 3 - пользовательИБ пустой УИД, +// 4 - все в порядке. +// +// Описание отображения значений поля КодПроблемы: +// для кодов 0,1 красная подсветка, +// для кодов 2,3 серая подсветка. &НаКлиенте Процедура ПользователиИнфБазыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -139,8 +124,24 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Изменить(Команда) + + ОткрытьПользователяПоСсылке(); + +КонецПроцедуры + +&НаКлиенте +Процедура Обновить(Команда) + + ЗаполнитьПользователейИБ(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ЗаполнитьПользователейИБ(ПриСозданииФормы = Ложь) @@ -171,6 +172,7 @@ |ИЗ | Справочник.ВнешниеПользователи КАК ВнешниеПользователи"); + УстановитьПривилегированныйРежим(Истина); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл @@ -289,7 +291,6 @@ КонецФункции - &НаСервере Процедура УдалитьПользователяИБ(ИдентификаторПользователяИБ, Отказ) diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl index cc7cc7aa4..0bd156ad0 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаКлиенте Процедура ПриОткрытии(Отказ) @@ -12,19 +14,11 @@ КонецПроцедуры -&НаКлиенте -Процедура ЗаполнитьСписокДоменов() - - СписокДоменов.Очистить(); - - Для Каждого Запись Из ТаблицаДоменовИПользователей Цикл - Домен = СписокДоменов.Добавить(); - Домен.ИмяДомена = Запись.ИмяДомена; - КонецЦикла; - - СписокДоменов.Сортировать("ИмяДомена"); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаДоменов &НаКлиенте Процедура ТаблицаДоменовПриАктивизацииСтроки(Элемент) @@ -47,6 +41,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаПользователей + &НаКлиенте Процедура ТаблицаПользователейДоменаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -54,6 +51,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура Выбрать(Команда) @@ -73,6 +73,23 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ЗаполнитьСписокДоменов() + + СписокДоменов.Очистить(); + + Для Каждого Запись Из ТаблицаДоменовИПользователей Цикл + Домен = СписокДоменов.Добавить(); + Домен.ИмяДомена = Запись.ИмяДомена; + КонецЦикла; + + СписокДоменов.Сортировать("ИмяДомена"); + +КонецПроцедуры + &НаКлиенте Процедура СкомпоноватьРезультатИЗакрытьФорму() @@ -82,4 +99,3 @@ Закрыть(СтрокаПользователяWindows); КонецПроцедуры - diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form index 7df7f2fce..45d54954c 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form @@ -175,7 +175,6 @@ true Auto Auto - ExpandTopLevel true true true @@ -720,6 +719,33 @@ КоманднаяПанельПользователи 53 + + ПоказыватьНедействительныхПользователей + 71 + true + true + + true + + + ПоказыватьНедействительныхПользователейРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + Form.Command.ПоказыватьНедействительныхПользователей + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + ПользователиИБ 6 @@ -731,7 +757,7 @@ false ПользователиИБРасширеннаяПодсказка - 77 + 78 Label true true @@ -746,6 +772,7 @@ true UserCmds Auto + InAdditionalSubmenu true true @@ -774,33 +801,6 @@ Form - - ФормаПоказыватьНедействительныхПользователей - 71 - true - true - - true - - - ФормаПоказыватьНедействительныхПользователейРасширеннаяПодсказка - 78 - Label - true - true - - Left - - - Form.Command.ПоказыватьНедействительныхПользователей - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - ФормаСправка 70 @@ -833,10 +833,6 @@ NotificationProcessing ОбработкаОповещения - - OnOpen - ПриОткрытии - OnCreateAtServer ПриСозданииНаСервере @@ -892,7 +888,8 @@ ИЗ Справочник.Пользователи КАК Пользователи ГДЕ - (&ВыбиратьИерархически + Пользователи.Ссылка <> &НеуказанныйПользователь + И (&ВыбиратьИерархически И ИСТИНА В (ВЫБРАТЬ ИСТИНА @@ -901,7 +898,7 @@ ГДЕ СоставыГруппПользователей.Пользователь = Пользователи.Ссылка И СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей) - ИЛИ (НЕ &ВыбиратьИерархически) + ИЛИ НЕ &ВыбиратьИерархически И ИСТИНА В (ВЫБРАТЬ ИСТИНА @@ -909,7 +906,15 @@ Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав ГДЕ ГруппыПользователейСостав.Пользователь = Пользователи.Ссылка - И ГруппыПользователейСостав.Ссылка = &ГруппаПользователей))
    + И ГруппыПользователейСостав.Ссылка = &ГруппаПользователей)) + И (&РазделениеВыключено + ИЛИ (НЕ ИСТИНА В + (ВЫБРАТЬ + ИСТИНА + ИЗ + РегистрСведений.НеразделенныеПользователи КАК НеразделенныеПользователи + ГДЕ + НеразделенныеПользователи.ИдентификаторПользователяИБ = Пользователи.ИдентификаторПользователяИБ))) Catalog.Пользователи true true diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl index 40ef3afe7..7e1a32f20 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl @@ -1,14 +1,20 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "НеуказанныйПользователь", Пользователи.СвойстваНеуказанногоПользователя().СтандартнаяСсылка); + + ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "РазделениеВыключено", НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено()); + ПоказыватьНедействительныхПользователей = Ложь; - Если Не Параметры.РежимВыбора Тогда + Если Параметры.РежимВыбора Тогда + + РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + Иначе // только если не режим выбора, делаем фильтрацию @@ -34,8 +40,6 @@ Иначе ТекущийЭлемент = Элементы.ПользователиСписок; Элементы.ГруппыПользователей.ТекущаяСтрока = Справочники.ГруппыПользователей.ВсеПользователи; - ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "ГруппаПользователей", Справочники.ГруппыПользователей.ВсеПользователи); - ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "ВыбиратьИерархически", Истина); КонецЕсли; Если НЕ ИспользоватьГруппы Тогда @@ -97,22 +101,17 @@ Элементы.ВыбратьГруппуПользователей.Видимость = Ложь; КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - ОбновитьСодержимоеФормыПриИзмененииГруппы(); + ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = "ИзмененСоставГруппыПользователей" Тогда - Если Параметр = Элементы.ГруппыПользователей.ТекущаяСтрока Тогда - Элементы.ПользователиСписок.Обновить(); - КонецЕсли; + Если ВРег(ИмяСобытия) = ВРег("Запись_ГруппыПользователей") + И Источник = Элементы.ГруппыПользователей.ТекущаяСтрока Тогда + + Элементы.ПользователиСписок.Обновить(); КонецЕсли; КонецПроцедуры @@ -126,23 +125,23 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте -Процедура СоздатьГруппуПользователей(Команда) +Процедура ВыбиратьИерархическиПриИзменении(Элемент) - Элементы.ГруппыПользователей.ДобавитьСтроку(); + ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ГруппыПользователей &НаКлиенте Процедура ГруппыПользователейПриАктивизацииСтроки(Элемент) - ОбновитьСодержимоеФормыПриИзмененииГруппы(); + ПодключитьОбработчикОжидания("ГруппыПользователейПослеАктивизацииСтроки", 0.1, Истина); КонецПроцедуры @@ -172,6 +171,8 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ПользователиСписок &НаКлиенте Процедура ПользователиСписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) @@ -198,31 +199,57 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте -Процедура ВыбиратьИерархическиПриИзменении(Элемент) +Процедура СоздатьГруппуПользователей(Команда) - ОбновитьСодержимоеФормыПриИзмененииГруппы(); + Элементы.ГруппыПользователей.ДобавитьСтроку(); КонецПроцедуры +&НаКлиенте +Процедура ПоказыватьНедействительныхПользователей(Команда) + + ПоказыватьНедействительныхПользователей = Не ПоказыватьНедействительныхПользователей; + + Элементы.ПоказыватьНедействительныхПользователей.Пометка = ПоказыватьНедействительныхПользователей; + + Если ПоказыватьНедействительныхПользователей Тогда + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(ПользователиСписок.Отбор, "Недействителен"); + Иначе + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + ПользователиСписок.Отбор, + "Недействителен", + Ложь); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте -Процедура ОбновитьСодержимоеФормыПриИзмененииГруппы() +Процедура ГруппыПользователейПослеАктивизацииСтроки() - Если НЕ ИспользоватьГруппы - ИЛИ Элементы.ГруппыПользователей.ТекущаяСтрока = ГруппаПользователейВсеПользователи Тогда - // + ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма) + + Элементы = ЭтаФорма.Элементы; + Если НЕ ЭтаФорма.ИспользоватьГруппы + ИЛИ Элементы.ГруппыПользователей.ТекущаяСтрока = ЭтаФорма.ГруппаПользователейВсеПользователи Тогда Элементы.ГруппаПоказыватьПользователейДочернихГрупп.ТекущаяСтраница = Элементы.ГруппаНельзяУстановитьСвойство; - ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "ВыбиратьИерархически", Истина); - ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "ГруппаПользователей", ГруппаПользователейВсеПользователи); + ОбновитьЗначениеПараметраКомпоновкиДанных(ЭтаФорма.ПользователиСписок, "ВыбиратьИерархически", Истина); + ОбновитьЗначениеПараметраКомпоновкиДанных(ЭтаФорма.ПользователиСписок, "ГруппаПользователей", ЭтаФорма.ГруппаПользователейВсеПользователи); Иначе Элементы.ГруппаПоказыватьПользователейДочернихГрупп.ТекущаяСтраница = Элементы.ГруппаУстановитьСвойство; - ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "ВыбиратьИерархически", ВыбиратьИерархически); - ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "ГруппаПользователей", Элементы.ГруппыПользователей.ТекущаяСтрока); + ОбновитьЗначениеПараметраКомпоновкиДанных(ЭтаФорма.ПользователиСписок, "ВыбиратьИерархически", ЭтаФорма.ВыбиратьИерархически); + ОбновитьЗначениеПараметраКомпоновкиДанных(ЭтаФорма.ПользователиСписок, "ГруппаПользователей", Элементы.ГруппыПользователей.ТекущаяСтрока); КонецЕсли; КонецПроцедуры @@ -242,23 +269,3 @@ ВладелецПараметров.Параметры.УстановитьЗначениеПараметра(ИмяПараметра, ЗначениеПараметра); КонецПроцедуры - - -&НаКлиенте -Процедура ПоказыватьНедействительныхПользователей(Команда) - - ПоказыватьНедействительныхПользователей = Не ПоказыватьНедействительныхПользователей; - - Элементы.ФормаПоказыватьНедействительныхПользователей.Пометка = ПоказыватьНедействительныхПользователей; - - Если ПоказыватьНедействительныхПользователей Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(ПользователиСписок.Отбор, "Недействителен"); - Иначе - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( - ПользователиСписок.Отбор, - "Недействителен", - Ложь); - КонецЕсли; - -КонецПроцедуры - diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form index c3d52e408..2ab88f256 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form @@ -1,5 +1,38 @@ + + КоманднаяПанель + 200 + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + 50 + + КоманднаяПанельРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + CommandBar + + Left + Form + + ПолноеИмяОбработкаНесоответствия 164 @@ -17,7 +50,7 @@ ПолноеИмяКартинкаПредупрежденияРасширеннаяПодсказка - 197 + 207 Label true true @@ -50,21 +83,18 @@ 168 <key>ru</key> - <value>Полное имя пользователя информационной базы "%1" -не соответствует заданному в поле <Полное имя:></value> + <value>Полное имя пользователя информационной базы +%1 +отличается от значения в поле Полное имя.</value> true true true - - ru - Предупреждение: при записи полное имя пользователя информационной базы будет обновлено заданным - ПолноеИмяПояснениеНесоответствияРасширеннаяПодсказка - 199 + 209 Label true true @@ -80,7 +110,6 @@ Label true true - true false Left @@ -98,7 +127,7 @@ false ПолноеИмяВыполнитьСинхронизациюРасширеннаяПодсказка - 200 + 210 Label true true @@ -107,7 +136,7 @@ UsualButton - Form.Command.ПолноеИмяВыполнитьСинхронизацию + Form.Command.ЗаполнитьПолноеИмяПоПользователюИБ Normal Auto true @@ -126,7 +155,7 @@ ПолноеИмяПояснениеИКомандаРасширеннаяПодсказка - 198 + 208 Label true true @@ -156,7 +185,7 @@ true ПолноеИмяОбработкаНесоответствияРасширеннаяПодсказка - 196 + 206 Label true true @@ -191,7 +220,7 @@ СвязьКартинкаПредупрежденияРасширеннаяПодсказка - 202 + 212 Label true true @@ -206,7 +235,7 @@ 5 true - 3 + 2 true false false @@ -221,9 +250,9 @@ 175 <key>ru</key> - <value>Пользователь связан с несуществующим пользователем информационной базы (ИБ). -Чтобы установить связь с новым пользователем ИБ, включите флажок "Доступ к информационной базе разрешен". -Чтобы очистить связь оставьте флажок выключенным.</value> + <value>Доступ пользователя к информационной базе (ИБ) запрещен. +Для того чтобы разрешить доступ к ИБ, включите флажок "Доступ к информационной базе разрешен". +Либо оставьте флажок выключенным, чтобы не выводить больше это предупреждение.</value> true true @@ -232,7 +261,7 @@ СвязьПояснениеНесоответствияРасширеннаяПодсказка - 203 + 213 Label true true @@ -246,14 +275,16 @@ true Label + 20 true - 3 + 4 true true + true false Left - Center + Top true @@ -268,7 +299,7 @@ true СвязьОбработкаНесоответствияРасширеннаяПодсказка - 201 + 211 Label true true @@ -303,7 +334,7 @@ НаименованиеРасширеннаяПодсказка - 204 + 214 Label true true @@ -322,6 +353,7 @@ Left true + 22 true true true @@ -351,7 +383,7 @@ НедействителенРасширеннаяПодсказка - 206 + 216 Label true true @@ -389,7 +421,7 @@ ДоступКИнформационнойБазеРазрешенРасширеннаяПодсказка - 208 + 218 Label true true @@ -431,7 +463,7 @@ ПользовательИнфБазыИмяРасширеннаяПодсказка - 213 + 223 Label true true @@ -453,7 +485,7 @@ 26 true true - false + true true true true @@ -482,7 +514,7 @@ ПользовательИнфБазыАутентификацияСтандартнаяРасширеннаяПодсказка - 216 + 226 Label true true @@ -503,24 +535,193 @@ Left - - Пароль - 21 + + СвойстваПараметрыАутентификации1СПредприятия + 201 + + ПодтверждениеПароля + 23 + true + true + + true + + + ПодтверждениеПароля + + + OnChange + ПарольПриИзменении + + + ПодтверждениеПароляРасширеннаяПодсказка + 229 + Label + true + true + + Left + + + + ПодтверждениеПароляКонтекстноеМеню + 24 + true + + InputField + Enter + true + Left + true + Left + + 14 + true + true + false + true + true + true + true + + Style.BorderColor + + Normal + + + + Пароль + 21 + true + true + + true + + + Пароль + + + OnChange + ПарольПриИзменении + + + ПарольРасширеннаяПодсказка + 231 + Label + true + true + + Left + + + + ПарольКонтекстноеМеню + 22 + true + + InputField + Enter + true + Left + true + Left + + 14 + true + true + false + true + true + true + true + + Style.BorderColor + + Normal + + + + ПользовательИнфБазыПоказыватьВСпискеВыбора + 25 + true + true + + true + + + ПользовательИнфБазыПоказыватьВСпискеВыбора + + Right + + ПользовательИнфБазыПоказыватьВСпискеВыбораРасширеннаяПодсказка + 233 + Label + true + true + + Left + + + + ПользовательИнфБазыПоказыватьВСпискеВыбораКонтекстноеМеню + 26 + true + + CheckBoxField + Enter + true + Left + true + Left + + + + ПользовательИнфБазыЗапрещеноИзменятьПароль + 51 + true + true + + true + + + ПользовательИнфБазыЗапрещеноИзменятьПароль + + Right + + ПользовательИнфБазыЗапрещеноИзменятьПарольРасширеннаяПодсказка + 235 + Label + true + true + + Left + + + + ПользовательИнфБазыЗапрещеноИзменятьПарольКонтекстноеМеню + 52 + true + + CheckBoxField + Enter + true + Left + true + + true true true - - Пароль - - - OnChange - ПарольПриИзменении - + + <key>ru</key> + <value>Аутентификация 1С:Предприятия</value> + + true - ПарольРасширеннаяПодсказка - 218 + СвойстваПараметрыАутентификации1СПредприятияРасширеннаяПодсказка + 228 Label true true @@ -528,166 +729,25 @@ Left - - ПарольКонтекстноеМеню - 22 - true - - InputField - Enter - true - Left - true - Left - - 10 - true - true - false - true - true - true - true - - Style.BorderColor - - Normal + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + Auto + Auto - - ПодтверждениеПароля - 23 - true - true - - true - - - ПодтверждениеПароля - - - OnChange - ПарольПриИзменении - - - ПодтверждениеПароляРасширеннаяПодсказка - 220 - Label - true - true - - Left - - - - ПодтверждениеПароляКонтекстноеМеню - 24 - true - - InputField - Enter - true - Left - true - Left - - 10 - true - true - false - true - true - true - true - - Style.BorderColor - - Normal - - - - ПользовательИнфБазыЗапрещеноИзменятьПароль - 51 - true - true - - true - - - ПользовательИнфБазыЗапрещеноИзменятьПароль - - Right - - ПользовательИнфБазыЗапрещеноИзменятьПарольРасширеннаяПодсказка - 222 - Label - true - true - - Left - - - - ПользовательИнфБазыЗапрещеноИзменятьПарольКонтекстноеМеню - 52 - true - - CheckBoxField - Enter - true - Left - true - - - - ПользовательИнфБазыПоказыватьВСпискеВыбора - 25 - true - true - - true - - - ПользовательИнфБазыПоказыватьВСпискеВыбора - - Right - - ПользовательИнфБазыПоказыватьВСпискеВыбораРасширеннаяПодсказка - 224 - Label - true - true - - Left - - - - ПользовательИнфБазыПоказыватьВСпискеВыбораКонтекстноеМеню - 26 - true - - CheckBoxField - Enter - true - Left - true - Left - - true true true - - <key>ru</key> - <value>Аутентификация 1С:Предприятия</value> - - 32 - false СвойстваАутентификации1СПредприятияРасширеннаяПодсказка - 215 + 225 Label true true @@ -699,7 +759,6 @@ Vertical Auto - NormalSeparation true true Auto @@ -727,7 +786,7 @@ ПользовательИнфБазыАутентификацияОСРасширеннаяПодсказка - 227 + 238 Label true true @@ -748,21 +807,106 @@ Left - - ПользовательИнфБазыПользовательОС - 29 + + СвойстваПараметрыАутентификацииОС + 202 + + ДекорацияОтступ + 203 + + <key>ru</key> + <value> </value> + + true + true + + true + + + ДекорацияОтступРасширеннаяПодсказка + 241 + Label + true + true + + Left + + + + ДекорацияОтступКонтекстноеМеню + 204 + true + + Label + 1 + true + true + + Left + + + + ПользовательИнфБазыПользовательОС + 29 + true + true + + true + + + ПользовательИнфБазыПользовательОС + + Left + + ПользовательИнфБазыПользовательОСРасширеннаяПодсказка + 242 + Label + true + true + + Left + + + + ПользовательИнфБазыПользовательОСКонтекстноеМеню + 30 + true + + InputField + Enter + true + Left + true + Left + + + StartChoice + ПользовательИнфБазыПользовательОСНачалоВыбора + + true + true + true + true + true + true + + Style.BorderColor + + Normal + + true true true - - ПользовательИнфБазыПользовательОС - - Left + + <key>ru</key> + <value>Свойства параметры аутентификации ОС</value> + - ПользовательИнфБазыПользовательОСРасширеннаяПодсказка - 229 + СвойстваПараметрыАутентификацииОСРасширеннаяПодсказка + 240 Label true true @@ -770,34 +914,13 @@ Left - - ПользовательИнфБазыПользовательОСКонтекстноеМеню - 30 - true - - InputField - Enter - true - Left - true - Left - - - StartChoice - ПользовательИнфБазыПользовательОСНачалоВыбора - - 20 - true - true - false - true - true - true - true - - Style.BorderColor - - Normal + UsualGroup + + Auto + true + true + Auto + Auto true @@ -809,11 +932,9 @@ ru Аутентификация операционной системы - 32 - false СвойстваАутентификацииОСРасширеннаяПодсказка - 226 + 237 Label true true @@ -836,19 +957,19 @@ СвойстваДополнительные 91 - ПредставлениеЯзыка - 33 + ПользовательИнфБазыЯзык + 196 true true true - ПредставлениеЯзыка + ПользовательИнфБазыЯзык - ПредставлениеЯзыкаРасширеннаяПодсказка - 232 + ПользовательИнфБазыЯзыкРасширеннаяПодсказка + 245 Label true true @@ -857,8 +978,8 @@ - ПредставлениеЯзыкаКонтекстноеМеню - 34 + ПользовательИнфБазыЯзыкКонтекстноеМеню + 197 true InputField @@ -868,13 +989,14 @@ true Left - 19 + 20 true true - false - true + true + true true true + true Style.BorderColor @@ -882,19 +1004,19 @@ - ПредставлениеРежимаЗапуска - 89 + ПользовательИнфБазыРежимЗапуска + 198 true true true - ПредставлениеРежимаЗапуска + ПользовательИнфБазыРежимЗапуска - ПредставлениеРежимаЗапускаРасширеннаяПодсказка - 234 + ПользовательИнфБазыРежимЗапускаРасширеннаяПодсказка + 247 Label true true @@ -903,8 +1025,8 @@ - ПредставлениеРежимаЗапускаКонтекстноеМеню - 90 + ПользовательИнфБазыРежимЗапускаКонтекстноеМеню + 199 true InputField @@ -913,41 +1035,18 @@ Left true - 19 + + Clearing + ПользовательИнфБазыРежимЗапускаОчистка + + 20 true true - false true - true + true true true - - - ru - Авто - - - Авто - - - - - ru - Обычное приложение - - - Обычное приложение - - - - - ru - Управляемое приложение - - - Управляемое приложение - - + true Normal @@ -960,11 +1059,10 @@ ru Свойства дополнительные - 32 false СвойстваДополнительныеРасширеннаяПодсказка - 231 + 244 Label true true @@ -976,6 +1074,7 @@ Vertical Auto + NormalSeparation true true Equal @@ -1000,10 +1099,9 @@ ru Основные свойства - true ОсновныеСвойстваРасширеннаяПодсказка - 212 + 222 Label true true @@ -1027,6 +1125,10 @@ Роли 177 + + <key>ru</key> + <value>Разрешенные действия (роли)</value> + true true @@ -1036,7 +1138,7 @@ Роли false - None + Top Add Copy CopyToClipboard @@ -1070,7 +1172,7 @@ РолиПометкаРасширеннаяПодсказка - 252 + 265 Label true true @@ -1101,7 +1203,7 @@ РолиСинонимРасширеннаяПодсказка - 254 + 267 Label true true @@ -1145,7 +1247,7 @@ РолиКолонокРасширеннаяПодсказка - 251 + 264 Label true true @@ -1174,7 +1276,7 @@ false РолиУстановитьФлажкиРасширеннаяПодсказка - 237 + 250 Label true true @@ -1182,7 +1284,7 @@ Left - Form.Command.УстановитьФлажки + Form.Command.ВключитьРоли Normal Auto true @@ -1201,7 +1303,7 @@ false РолиСнятьФлажкиРасширеннаяПодсказка - 238 + 251 Label true true @@ -1209,7 +1311,7 @@ Left - Form.Command.СнятьФлажки + Form.Command.ИсключитьРоли Normal Auto true @@ -1228,7 +1330,7 @@ false РолиПоказатьТолькоВыбранныеРолиРасширеннаяПодсказка - 239 + 252 Label true true @@ -1236,7 +1338,7 @@ Left - Form.Command.ПоказатьТолькоВыбранныеРоли + Form.Command.ТолькоВыбранныеРоли Normal Auto true @@ -1254,7 +1356,7 @@ РолиПоказатьПодсистемыРолейРасширеннаяПодсказка - 240 + 253 Label true true @@ -1262,7 +1364,7 @@ Left - Form.Command.ПоказатьПодсистемыРолей + Form.Command.ГруппировкаПоПодсистемам Normal Auto true @@ -1274,10 +1376,10 @@ РолиСтрокаПоиска - 242 + 255 РолиСтрокаПоискаРасширеннаяПодсказка - 244 + 257 Label true true @@ -1287,7 +1389,7 @@ РолиСтрокаПоискаКонтекстноеМеню - 243 + 256 true Роли @@ -1297,10 +1399,10 @@ РолиСостояниеПросмотра - 245 + 258 РолиСостояниеПросмотраРасширеннаяПодсказка - 247 + 260 Label true true @@ -1310,7 +1412,7 @@ РолиСостояниеПросмотраКонтекстноеМеню - 246 + 259 true ViewStatusAddition @@ -1321,10 +1423,10 @@ РолиУправлениеПоиском - 248 + 261 РолиУправлениеПоискомРасширеннаяПодсказка - 250 + 263 Label true true @@ -1334,7 +1436,7 @@ РолиУправлениеПоискомКонтекстноеМеню - 249 + 262 true SearchControlAddition @@ -1345,7 +1447,7 @@ РолиРасширеннаяПодсказка - 241 + 254 Label true true @@ -1361,14 +1463,12 @@ true true true -
    true
    1 1 AutoUse AutoUse true true - false true Auto Auto @@ -1395,12 +1495,11 @@ <key>ru</key> - <value>Отображение ролей</value> + <value>Разрешенные действия (роли)</value> - 48 ОтображениеРолейРасширеннаяПодсказка - 236 + 249 Label true true @@ -1425,11 +1524,11 @@ <key>ru</key> - <value>Свойства пользователя информационной базы</value> + <value>Основные свойства</value> СвойстваПользователяИБРасширеннаяПодсказка - 211 + 221 Label true true @@ -1456,7 +1555,7 @@ КонтактнаяИнформацияРасширеннаяПодсказка - 264 + 277 Label true true @@ -1479,9 +1578,11 @@ ru Страницы + true + true СтраницыРасширеннаяПодсказка - 210 + 220 Label true true @@ -1499,7 +1600,6 @@ ФормаКоманднаяПанель -1 Left - true OnOpen @@ -1671,25 +1771,6 @@ true - - ПредставлениеЯзыка - - <key>ru</key> - <value>Язык</value> - - 10 - - String - - - - true - - - true - - true - ПользовательИнфБазыЗапрещеноИзменятьПароль @@ -1708,30 +1789,11 @@ </edit> <savedData>true</savedData> </attributes> - <attributes> - <name>ПредставлениеРежимаЗапуска</name> - <title> - <key>ru</key> - <value>Режима запуска</value> - - 15 - - String - - - - true - - - true - - true - ПользовательИнфБазыИмя <key>ru</key> - <value>Имя</value> + <value>Имя (для входа)</value> 16 @@ -2082,10 +2144,48 @@ - СкрытьРольПолныеПрава + ПользовательИнфБазыРежимЗапуска <key>ru</key> - <value>Скрыть роль полные права</value> + <value>Режим запуска</value> + + 10 + + String + + + + true + + + true + + true + + + ПользовательИнфБазыЯзык + + <key>ru</key> + <value>Язык интерфейса программы</value> + + 15 + + String + + + + true + + + true + + true + + + СоздатьПользователяСервиса + + <key>ru</key> + <value>Создать пользователя сервиса</value> 25 @@ -2099,7 +2199,7 @@ - ПоказатьТолькоВыбранныеРоли + ТолькоВыбранныеРоли <key>ru</key> <value>Только выбранные роли</value> @@ -2125,15 +2225,15 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>СнятьФлажки</name> + <name>ИсключитьРоли</name> <title> <key>ru</key> - <value>Снять флажки</value> + <value>Исключить роли</value> 5 ru - Снять флажки + Исключить роли true @@ -2143,7 +2243,7 @@ - СнятьФлажки + ИсключитьРоли true @@ -2151,15 +2251,15 @@ Auto - УстановитьФлажки + ВключитьРоли <key>ru</key> - <value>Установить флажки</value> + <value>Включить роли</value> 6 ru - Установить флажки + Включить роли true @@ -2169,7 +2269,7 @@ - УстановитьФлажки + ВключитьРоли true @@ -2177,25 +2277,25 @@ Auto - ПолноеИмяВыполнитьСинхронизацию + ЗаполнитьПолноеИмяПоПользователюИБ <key>ru</key> - <value>Задать полное имя, как у пользователя информационной базы</value> + <value>Заполнить полное имя по пользователю ИБ</value> 1 ru - Предупреждение: при записи полное имя пользователя информационной базы будет обновлено заданным + Заполнить полное имя по имени пользователя информационной базы true - CommonPicture.ПользователиВыполнитьСинхронизацию + CommonPicture.ЗаполнитьФорму - ПолноеИмяВыполнитьСинхронизацию + ЗаполнитьПолноеИмяПоПользователюИБ TextPicture @@ -2204,15 +2304,15 @@ Auto - ПоказатьПодсистемыРолей + ГруппировкаПоПодсистемам <key>ru</key> - <value>Группировка по подсистемам</value> + <value>По подсистемам</value> 2 ru - Показать группировку по подсистемам + Группировать список ролей по подсистемам true @@ -2222,7 +2322,7 @@ - ПоказатьПодсистемыРолей + ГруппировкаПоПодсистемам TextPicture diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html index da3d8e6dd..7d8156851 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html @@ -1,7 +1,9 @@ -

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

    -

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

    -

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

    -

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

    -

    См. также

    - \ No newline at end of file +

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

    +

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

    +

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

    +

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

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

    +

    Хороший пароль должен быть малопонятным выражением.

    Примеры хороших паролей:
    “nj7{jhjibq*Gfhjkm,
    F5”njnGhkmNj;t{HI.

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

    Примеры неудачных паролей:
    Иванов,
    qwerty,
    12345678,
    123123123.

    +

    См. также

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl index 8eaa6cf7e..c220218c9 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl @@ -1,30 +1,60 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если НЕ СтандартныеПодсистемыПереопределяемый.ДоступноИзменениеПользователей() Тогда + Если Объект.Ссылка.Пустая() Тогда + ВызватьИсключение(НСтр("ru = 'В демонстрационном режиме не поддерживается создание новых пользователей'")); + КонецЕсли; + + ТолькоПросмотр = Истина; + КонецЕсли; + + Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.Видимость = Ложь; + Элементы.ПользовательИнфБазыАутентификацияСтандартная.Видимость = Ложь; + Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.Видимость = Ложь; + Элементы.СвойстваАутентификацииОС.Видимость = Ложь; + Элементы.ПользовательИнфБазыРежимЗапуска.Видимость = Ложь; + Если Метаданные.Языки.Количество() = 1 Тогда + Элементы.ПользовательИнфБазыЯзык.Видимость = Ложь; + КонецЕсли; + КонецЕсли; + + Если Объект.Ссылка = Пользователи.СвойстваНеуказанногоПользователя().СтандартнаяСсылка Тогда + ТолькоПросмотр = Истина; + КонецЕсли; + //** Установка начальных значений // перед загрузкой данных из настроек на сервере // для случая, когда данные ещё не были записаны и не загружаются ПоказатьПодсистемыРолей = Истина; Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина; // Для нового элемента показать все роли, иначе только выбранные - ПоказатьТолькоВыбранныеРоли = ЗначениеЗаполнено(Объект.Ссылка); - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ЗначениеЗаполнено(Объект.Ссылка); + ПоказатьТолькоВыбранныеРоли = ЗначениеЗаполнено(Объект.Ссылка); + Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ПоказатьТолькоВыбранныеРоли; // ОбновитьДеревоРолей(); //** Заполнение постоянных данных - АвторизованПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользовательИБ(); + АвторизованПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(); // Заполнение списка выбора языка Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл - Элементы.ПредставлениеЯзыка.СписокВыбора.Добавить(МетаданныеЯзыка.Синоним); + Элементы.ПользовательИнфБазыЯзык.СписокВыбора.Добавить(МетаданныеЯзыка.Имя, МетаданныеЯзыка.Синоним); КонецЦикла; + // Заполнение списка выбора режимов запуска + Для каждого РежимЗапуска Из РежимЗапускаКлиентскогоПриложения Цикл + ПолноеИмяЗначения = ПолучитьПолноеИмяПредопределенногоЗначения(РежимЗапуска); + ИмяЗначения = Сред(ПолноеИмяЗначения, Найти(ПолноеИмяЗначения, ".") + 1); + Элементы.ПользовательИнфБазыРежимЗапуска.СписокВыбора.Добавить(ИмяЗначения, Строка(РежимЗапуска)); + КонецЦикла; + Элементы.ПользовательИнфБазыРежимЗапуска.СписокВыбора.СортироватьПоПредставлению(); + //** Подготовка к интерактивным действиям с учетом сценариев открытия формы УстановитьПривилегированныйРежим(Истина); @@ -43,6 +73,12 @@ Объект.ИдентификаторПользователяИБ = Параметры.ИдентификаторПользователяИБ; // Чтение начальных значений свойств пользователя ИБ ПрочитатьПользователяИБ(); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПользовательИнфБазыПоказыватьВСпискеВыбора = Ложь; + ПользовательИнфБазыАутентификацияСтандартная = Истина; + ДоступКИнформационнойБазеРазрешен = Истина; + КонецЕсли; КонецЕсли; Иначе // Открытие существующего элемента @@ -55,11 +91,6 @@ ОпределитьНесоответствияПользователяСПользователемИБ(); - //** Установка постоянной доступности свойств - Элементы.КонтактнаяИнформация.Видимость = ЗначениеЗаполнено(ДействияВФорме.КонтактнаяИнформация); - Элементы.СвойстваПользователяИБ.Видимость = ЗначениеЗаполнено(ДействияВФорме.СвойстваПользователяИБ); - Элементы.ОтображениеРолей.Видимость = ЗначениеЗаполнено(ДействияВФорме.Роли); - ТолькоПросмотр = ТолькоПросмотр ИЛИ ДействияВФорме.Роли <> "Редактирование" И ДействияВФорме.КонтактнаяИнформация <> "Редактирование" И @@ -69,15 +100,16 @@ УстановитьТолькоПросмотрРолей(ПользователиПереопределяемый.ЗапретРедактированияРолей() ИЛИ ДействияВФорме.Роли <> "Редактирование"); - // КонтактнаяИнформация + // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтаФорма, Объект, "КонтактнаяИнформация"); - // Конец КонтактнаяИнформация + // Конец СтандартныеПодсистемы.КонтактнаяИнформация - Если Не Пользователи.ЭтоПолноправныйПользовательИБ() Тогда + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда Элементы.Недействителен.ТолькоПросмотр = Истина; - КонецЕсли; + КонецЕсли; - Элементы.ДоступКИнформационнойБазеРазрешен.Доступность = Не Объект.Недействителен; + УстановитьПостояннуюДоступностьСвойств(); + УстановитьДоступностьСвойств(ЭтаФорма); КонецПроцедуры @@ -88,8 +120,6 @@ Элементы.ПользовательИнфБазыПользовательОС.КнопкаВыбора = Ложь; #КонецЕсли - УстановитьДоступностьСвойств(); - КонецПроцедуры &НаКлиенте @@ -97,35 +127,67 @@ ОчиститьСообщения(); + ЗаголовокВопросов = НСтр("ru = 'Запись пользователя информационной базы'"); + Если ДоступКИнформационнойБазеРазрешен Тогда - Если ДействияВФорме.Роли = "Редактирование" И ПользовательИнфБазыРоли.Количество() = 0 Тогда Ответ = Вопрос(НСтр("ru = 'Пользователю информационной базы не установлено ни одной роли. Продолжить?'"), - РежимДиалогаВопрос.ДаНет, , , НСтр("ru = 'Запись пользователя информационной базы'")); + РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопросов); Если Ответ = КодВозвратаДиалога.Нет Тогда Отказ = Истина; КонецЕсли; КонецЕсли; - + // Обработка записи первого администратора ТекстВопроса = ""; - Если ТребуетсяСоздатьПервогоАдминистратора(ТекстВопроса) Тогда - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , НСтр("ru = 'Запись пользователя информационной базы'")); + Если Пользователи.ТребуетсяСоздатьПервогоАдминистратора(ПолучитьСтруктуруОписанияПользователяИБ(), + ТекстВопроса) Тогда + + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопросов); Если Ответ = КодВозвратаДиалога.Нет Тогда Отказ = Истина; КонецЕсли; КонецЕсли; - КонецЕсли; - КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - Если ТребуетсяСоздатьПервогоАдминистратора() Тогда - ПараметрыЗаписи.Вставить("ЗаписьПервогоАдминистратора"); + Если СоздатьПользователяСервиса Тогда + // предыдущая попытка создания закончилась неудачно + + СоздатьПользователяСервиса = Ложь; + Объект.ИдентификаторПользователяСервиса = Неопределено; + ТекущийОбъект.ИдентификаторПользователяСервиса = Неопределено; + КонецЕсли; + + Если ДоступКИнформационнойБазеРазрешен + И ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если НЕ ЗначениеЗаполнено(ТекущийОбъект.ИдентификаторПользователяСервиса) Тогда + + СоздатьПользователяСервиса = Истина; + + ИдентификаторПользователяСервиса = Новый УникальныйИдентификатор; + + Объект.ИдентификаторПользователяСервиса = ИдентификаторПользователяСервиса; + ТекущийОбъект.ИдентификаторПользователяСервиса = ИдентификаторПользователяСервиса; + + КонецЕсли; + КонецЕсли; + + Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" + ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" Тогда + + ТекущийОбъект.ДополнительныеСвойства.Вставить("ДоступКИнформационнойБазеРазрешен", ДоступКИнформационнойБазеРазрешен); + + Если ДоступКИнформационнойБазеРазрешен Тогда + + ТекущийОбъект.ДополнительныеСвойства.Вставить("СтруктураОписанияПользователяИБ", ПолучитьСтруктуруОписанияПользователяИБ()); + + КонецЕсли; КонецЕсли; Если ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда @@ -134,69 +196,55 @@ ТекущийОбъект.ДополнительныеСвойства.Вставить("ГруппаНовогоПользователя", ГруппаНовогоПользователя); - Если ДоступКИнформационнойБазеРазрешен Тогда - - Если Элементы.ПолноеИмяПояснениеНесоответствия.Видимость Тогда - ПользовательИнфБазыПолноеИмя = Объект.Наименование; - КонецЕсли; - - ЗаписатьПользователяИБ(ТекущийОбъект, Отказ); - Если НЕ Отказ Тогда - Если ТекущийОбъект.ИдентификаторПользователяИБ <> СтарыйИдентификаторПользователяИБ Тогда - ПараметрыЗаписи.Вставить("ДобавленПользовательИБ", ТекущийОбъект.ИдентификаторПользователяИБ); - Иначе - ПараметрыЗаписи.Вставить("ИзмененПользовательИБ", ТекущийОбъект.ИдентификаторПользователяИБ); - КонецЕсли - КонецЕсли; - - ИначеЕсли НЕ ЕстьСвязьСНесуществующимПользователемИБ ИЛИ - ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" Тогда - - ТекущийОбъект.ИдентификаторПользователяИБ = Неопределено; - КонецЕсли; - - // КонтактнаяИнформация + // СтандартныеПодсистемы.КонтактнаяИнформация Если НЕ Отказ И ДействияВФорме.КонтактнаяИнформация = "Редактирование" Тогда УправлениеКонтактнойИнформацией.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект, Отказ); КонецЕсли; - // Конец КонтактнаяИнформация + // Конец СтандартныеПодсистемы.КонтактнаяИнформация КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - Если НЕ ДоступКИнформационнойБазеРазрешен И ПользовательИБСуществует Тогда - УдалитьПользователяИБ(Отказ); - Если НЕ Отказ Тогда - ПараметрыЗаписи.Вставить("УдаленПользовательИБ", СтарыйИдентификаторПользователяИБ); - КонецЕсли; - КонецЕсли; + ОписаниеПользователя = Новый Структура; + ОписаниеПользователя.Вставить("Имя", ПользовательИнфБазыИмя); + ОписаниеПользователя.Вставить("ПолноеИмя", ПользовательИнфБазыПолноеИмя); + ОписаниеПользователя.Вставить("Язык", ПользовательИнфБазыЯзык); - Если ПараметрыЗаписи.Свойство("ЗаписьПервогоАдминистратора") Тогда - УстановитьПривилегированныйРежим(Истина); - ПользователиПереопределяемый.ПриЗаписиПервогоАдминистратора(ТекущийОбъект.Ссылка); - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; + СтандартныеПодсистемыПереопределяемый.ПриЗаписиПользователя(ТекущийОбъект, ОписаниеПользователя, + ПользовательИБСуществует, ДоступКИнформационнойБазеРазрешен, СоздатьПользователяСервиса); КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Если ТекущийОбъект.ДополнительныеСвойства.Свойство("ЕстьОшибки") Тогда - ПараметрыЗаписи.Вставить("ЕстьОшибки"); - КонецЕсли; + СобытияЗаписиПользователяИБ = Новый Массив; + СобытияЗаписиПользователяИБ.Добавить("ДобавленПользовательИБ"); + СобытияЗаписиПользователяИБ.Добавить("ИзмененПользовательИБ"); + СобытияЗаписиПользователяИБ.Добавить("УдаленПользовательИБ"); + Для каждого СобытиеЗаписи Из СобытияЗаписиПользователяИБ Цикл + Если ТекущийОбъект.ДополнительныеСвойства.Свойство(СобытиеЗаписи) Тогда + ПараметрыЗаписи.Вставить(СобытиеЗаписи, ТекущийОбъект.ДополнительныеСвойства[СобытиеЗаписи]); + КонецЕсли; + КонецЦикла; ПрочитатьПользователяИБ(); ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи); + Если СоздатьПользователяСервиса Тогда + СоздатьПользователяСервиса = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) + Оповестить("Запись_Пользователи", Новый Структура, Объект.Ссылка); + Если ПараметрыЗаписи.Свойство("ДобавленПользовательИБ") Тогда Оповестить("ДобавленПользовательИБ", ПараметрыЗаписи.ДобавленПользовательИБ, ЭтаФорма); @@ -210,13 +258,9 @@ Оповестить("ОчищенаСвязьСНесуществущимПользователемИБ", ПараметрыЗаписи.ОчищенаСвязьСНесуществущимПользователемИБ, ЭтаФорма); КонецЕсли; - Если ПараметрыЗаписи.Свойство("ЕстьОшибки") Тогда - Предупреждение(НСтр("ru = 'При записи возникли ошибки (см. журнал регистрации)'")); - КонецЕсли; - Если ЗначениеЗаполнено(ГруппаНовогоПользователя) Тогда ОповеститьОбИзменении(ГруппаНовогоПользователя); - Оповестить("ИзмененСоставГруппыПользователей", ГруппаНовогоПользователя, ЭтаФорма); + Оповестить("Запись_ГруппыПользователей", Новый Структура, ГруппаНовогоПользователя); ГруппаНовогоПользователя = Неопределено; КонецЕсли; @@ -227,39 +271,8 @@ Если ДоступКИнформационнойБазеРазрешен Тогда - Если НЕ Отказ И ПустаяСтрока(ПользовательИнфБазыИмя) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Не заполнено имя пользователя информационной базы.'"), , - "ПользовательИнфБазыИмя", , - Отказ); - КонецЕсли; + Пользователи.ПроверитьЗаполнениеСтруктурыОписанияПользователяИБ(ПолучитьСтруктуруОписанияПользователяИБ(), Отказ); - Если НЕ Отказ И ПользовательИнфБазыПароль <> Неопределено И Пароль <> ПодтверждениеПароля Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Пароль и подтверждение пароля не совпадают.'"), , - "Пароль", , - Отказ); - Возврат; - КонецЕсли; - - Если НЕ Отказ И НЕ ПустаяСтрока(ПользовательИнфБазыПользовательОС) Тогда - УстановитьПривилегированныйРежим(Истина); - Попытка - ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); - ПользовательИБ.ПользовательОС = ПользовательИнфБазыПользовательОС; - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Пользователь ОС должен быть в формате - |\\ИмяДомена\ИмяПользователя'"), , - "ПользовательИнфБазыПользовательОС", , - Отказ); - КонецПопытки; - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; - КонецЕсли; - - Если Отказ Тогда - ПроверяемыеРеквизиты.Очистить(); КонецЕсли; КонецПроцедуры @@ -280,11 +293,10 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте -Процедура ПолноеИмяВыполнитьСинхронизацию(Команда) +Процедура ЗаполнитьПолноеИмяПоПользователюИБ(Команда) Объект.Наименование = ПользовательИнфБазыПолноеИмя; Элементы.ПолноеИмяОбработкаНесоответствия.Видимость = Ложь; @@ -317,14 +329,14 @@ ПользовательИнфБазыПолноеИмя = Объект.Наименование; КонецЕсли; - УстановитьДоступностьСвойств(); + УстановитьДоступностьСвойств(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ПользовательИнфБазыАутентификацияСтандартнаяПриИзменении(Элемент) - УстановитьДоступностьСвойств(); + УстановитьДоступностьСвойств(ЭтаФорма); КонецПроцедуры @@ -338,7 +350,7 @@ &НаКлиенте Процедура ПользовательИнфБазыАутентификацияОСПриИзменении(Элемент) - УстановитьДоступностьСвойств(); + УстановитьДоступностьСвойств(ЭтаФорма); КонецПроцедуры @@ -355,7 +367,55 @@ КонецПроцедуры -//** Для работы интерфейса ролей +&НаКлиенте +Процедура ДействителенПриИзменении(Элемент) + + Если Объект.Недействителен Тогда + ДоступКИнформационнойБазеРазрешен = Ложь; + КонецЕсли; + + УстановитьДоступностьСвойств(ЭтаФорма); + +КонецПроцедуры + +// СтандартныеПодсистемы.КонтактнаяИнформация + +&НаКлиенте +Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент) + + УправлениеКонтактнойИнформациейКлиент.ПредставлениеПриИзменении(ЭтаФорма, Элемент); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_КонтактнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + УправлениеКонтактнойИнформациейКлиент.ПредставлениеНачалоВыбора(ЭтаФорма, Элемент, Модифицированность, СтандартнаяОбработка); + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.КонтактнаяИнформация + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Роли + +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей + +&НаКлиенте +Процедура РолиПометкаПриИзменении(Элемент) + + Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда + ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей &НаКлиенте Процедура ПоказатьТолькоВыбранныеРоли(Команда) @@ -369,7 +429,7 @@ КонецПроцедуры &НаКлиенте -Процедура ПоказатьПодсистемыРолей(Команда) +Процедура ГруппировкаПоПодсистемам(Команда) ПоказатьПодсистемыРолей = НЕ ПоказатьПодсистемыРолей; Элементы.РолиПоказатьПодсистемыРолей.Пометка = ПоказатьПодсистемыРолей; @@ -380,16 +440,7 @@ КонецПроцедуры &НаКлиенте -Процедура РолиПометкаПриИзменении(Элемент) - - Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда - ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьФлажки(Команда) +Процедура ВключитьРоли(Команда) ОбновитьСоставРолей(Неопределено, Истина); Если ПоказатьТолькоВыбранныеРоли Тогда @@ -399,44 +450,14 @@ КонецПроцедуры &НаКлиенте -Процедура СнятьФлажки(Команда) +Процедура ИсключитьРоли(Команда) ОбновитьСоставРолей(Неопределено, Ложь); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// - -&НаСервере -Функция ТребуетсяСоздатьПервогоАдминистратора(ТекстВопроса = Неопределено) - - УстановитьПривилегированныйРежим(Истина); - - Если ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() = 0 Тогда - // - ДеревоРолей = РеквизитФормыВЗначение("Роли"); - Отбор = Новый Структура("Пометка, Имя, ЭтоРоль", Истина, "ПолныеПрава", Истина); - - ИмяРолиАдминистратораСистемы = ПользователиПереопределяемый.РольАдминистратораСистемы().Имя; - ОтборАдминистраторСистемы = Новый Структура("Пометка, Имя, ЭтоРоль", Истина, ИмяРолиАдминистратораСистемы, Истина); - - - Если ПользователиПереопределяемый.ЗапретРедактированияРолей() - ИЛИ (ДеревоРолей.Строки.НайтиСтроки(Отбор).Количество() = 0 - И ДеревоРолей.Строки.НайтиСтроки(ОтборАдминистраторСистемы).Количество() = 0) Тогда - // Подготовка текста вопроса при записи первого администратора - ТекстВопроса = НСтр("ru = 'Первый пользователь информационной базы должен иметь полные права. - |Роль будет добавлена автоматически. Продолжить?'"); - ПользователиПереопределяемый.ТекстВопросаПередЗаписьюПервогоАдминистратора(ТекстВопроса); - Возврат Истина; - КонецЕсли; - КонецЕсли; - - Возврат Ложь; - -КонецФункции +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ОпределитьДействияВФорме() @@ -447,7 +468,7 @@ ДействияВФорме.Вставить("СвойстваПользователяИБ", ""); // "", "ПросмотрВсех", "РедактированиеВсех", "РедактированиеСвоих" ДействияВФорме.Вставить("СвойстваЭлемента", ""); // "", "Просмотр", "Редактирование" - Если Пользователи.ЭтоПолноправныйПользовательИБ() Тогда + Если Пользователи.ЭтоПолноправныйПользователь() Тогда // Администратор ДействияВФорме.Роли = "Редактирование"; ДействияВФорме.КонтактнаяИнформация = "Редактирование"; @@ -455,7 +476,7 @@ ДействияВФорме.СвойстваЭлемента = "Редактирование"; ИначеЕсли РольДоступна("ДобавлениеИзменениеПользователей") - И НЕ Пользователи.ЭтоПолноправныйПользовательИБ(Объект.Ссылка) Тогда + И НЕ Пользователи.ЭтоПолноправныйПользователь(Объект.Ссылка) Тогда // Ответственный за список пользователей и групп пользователей // (Исполнитель распоряжений о приеме на работу и переводу, // переназначению, созданию отделов, подразделений и рабочих групп) @@ -464,8 +485,8 @@ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех"; ДействияВФорме.СвойстваЭлемента = "Редактирование"; - ИначеЕсли ЗначениеЗаполнено(ОбщегоНазначения.ТекущийПользователь()) И - Объект.Ссылка = ОбщегоНазначения.ТекущийПользователь() Тогда + ИначеЕсли ЗначениеЗаполнено(Пользователи.ТекущийПользователь()) И + Объект.Ссылка = Пользователи.ТекущийПользователь() Тогда // Свои свойства ДействияВФорме.Роли = ""; ДействияВФорме.КонтактнаяИнформация = "Редактирование"; @@ -500,31 +521,67 @@ КонецПроцедуры -//** Чтение, запись, удаление, расчет краткого имени пользователя ИБ, проверка несоответствия +&НаСервере +Функция ПолучитьСтруктуруОписанияПользователяИБ() + + // Восстановление действий в форме, если они изменены на клиенте + ОпределитьДействияВФорме(); + + Если ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех" + И ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеСвоих" Тогда + + // Ничего изменять нельзя + Возврат Новый Структура; + КонецЕсли; + + Если Элементы.ПолноеИмяПояснениеНесоответствия.Видимость Тогда + ПользовательИнфБазыПолноеИмя = Объект.Наименование; + КонецЕсли; + + Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" Тогда + Результат = Пользователи.НовоеОписаниеПользователяИБ(); + ЗаполнитьЗначенияСвойств(Результат, ЭтаФорма); + Иначе + Результат = Новый Структура; + Результат.Вставить("ПользовательИнфБазыИмя", ПользовательИнфБазыИмя); + Результат.Вставить("ПользовательИнфБазыПароль", ПользовательИнфБазыПароль); + Результат.Вставить("ПользовательИнфБазыЯзык", ПользовательИнфБазыЯзык); + КонецЕсли; + Результат.Вставить("ПодтверждениеПароля", ПодтверждениеПароля); + + Если ДействияВФорме.Роли = "Редактирование" Тогда + ТекущиеРоли = ПользовательИнфБазыРоли.Выгрузить(, "Роль").ВыгрузитьКолонку("Роль"); + Результат.Вставить("ПользовательИнфБазыРоли", ТекущиеРоли); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Чтение, запись, удаление, расчет краткого имени пользователя ИБ, проверка несоответствия &НаСервере -Процедура ПрочитатьПользователяИБ(ПриКопированииЭлемента = Ложь, ТолькоРоли = Ложь) +Процедура ПрочитатьПользователяИБ(ПриКопированииЭлемента = Ложь) УстановитьПривилегированныйРежим(Истина); - ПрочитанныеРоли = Неопределено; - - Если ТолькоРоли Тогда - Пользователи.ПрочитатьПользователяИБ(Объект.ИдентификаторПользователяИБ, , ПрочитанныеРоли); - ЗаполнитьРоли(ПрочитанныеРоли); - Возврат; - КонецЕсли; + ПрочитанныеРоли = Новый Массив; Пароль = ""; ПодтверждениеПароля = ""; - ПрочитанныеСвойства = Неопределено; + ПрочитанныеСвойства = Пользователи.НовоеОписаниеПользователяИБ(); СтарыйИдентификаторПользователяИБ = Неопределено; ПользовательИБСуществует = Ложь; ДоступКИнформационнойБазеРазрешен = Ложь; // Заполнение начальных значений свойств пользователяИБ у пользователя. - Пользователи.ПрочитатьПользователяИБ(Неопределено, ПрочитанныеСвойства, ПрочитанныеРоли); - ПрочитанныеСвойства.ПользовательИнфБазыПоказыватьВСпискеВыбора = НЕ ВнешниеПользователи.ИспользоватьВнешнихПользователей(); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПрочитанныеСвойства.ПользовательИнфБазыПоказыватьВСпискеВыбора = Ложь; + Иначе + ПрочитанныеСвойства.ПользовательИнфБазыПоказыватьВСпискеВыбора = НЕ Константы.ИспользоватьВнешнихПользователей.Получить(); + КонецЕсли; + ЗаполнитьЗначенияСвойств(ЭтаФорма, ПрочитанныеСвойства); ПользовательИнфБазыАутентификацияСтандартная = Истина; @@ -541,7 +598,9 @@ "ПользовательИнфБазыАутентификацияСтандартная, |ПользовательИнфБазыЗапрещеноИзменятьПароль, |ПользовательИнфБазыПоказыватьВСпискеВыбора, - |ПользовательИнфБазыАутентификацияОС"); + |ПользовательИнфБазыАутентификацияОС, + |ПользовательИнфБазыРежимЗапуска, + |ПользовательИнфБазыЯзык"); КонецЕсли; Объект.ИдентификаторПользователяИБ = Неопределено; Иначе @@ -559,7 +618,9 @@ |ПользовательИнфБазыПоказыватьВСпискеВыбора, |ПользовательИнфБазыЗапрещеноИзменятьПароль, |ПользовательИнфБазыАутентификацияОС, - |ПользовательИнфБазыПользовательОС"); + |ПользовательИнфБазыПользовательОС, + |ПользовательИнфБазыРежимЗапуска, + |ПользовательИнфБазыЯзык"); Если ПрочитанныеСвойства.ПользовательИнфБазыПарольУстановлен Тогда Пароль = "**********"; @@ -568,72 +629,10 @@ КонецЕсли; КонецЕсли; - ЗаполнитьПредставлениеРежимаЗапуска(ПрочитанныеСвойства.ПользовательИнфБазыРежимЗапуска); - ЗаполнитьПредставлениеЯзыка(ПрочитанныеСвойства.ПользовательИнфБазыЯзык); ЗаполнитьРоли(ПрочитанныеРоли); КонецПроцедуры -&НаСервере -Процедура ЗаписатьПользователяИБ(ТекущийОбъект, Отказ) - - // Восстановление действий в форме, если они изменены на клиенте - ОпределитьДействияВФорме(); - - Если НЕ (ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" ИЛИ - ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" )Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - НовыеСвойства = Неопределено; - НовыеРоли = Неопределено; - - // Чтение старых свойств/заполнение начальных свойств пользователяИБ у пользователя. - Пользователи.ПрочитатьПользователяИБ(ТекущийОбъект.ИдентификаторПользователяИБ, НовыеСвойства); - - Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" Тогда - ЗаполнитьЗначенияСвойств(НовыеСвойства, ЭтаФорма); - НовыеСвойства.ПользовательИнфБазыРежимЗапуска = ПолучитьВыбранныйРежимЗапуска(); - Иначе - ЗаполнитьЗначенияСвойств(НовыеСвойства, - ЭтаФорма, - "ПользовательИнфБазыИмя, - |ПользовательИнфБазыПароль"); - КонецЕсли; - НовыеСвойства.ПользовательИнфБазыЯзык = ПолучитьВыбранныйЯзык(); - - Если ДействияВФорме.Роли = "Редактирование" Тогда - НовыеРоли = ПользовательИнфБазыРоли.Выгрузить(, "Роль").ВыгрузитьКолонку("Роль"); - КонецЕсли; - - // Попытка записи пользователя ИБ - ОписаниеОшибки = ""; - Если Пользователи.ЗаписатьПользователяИБ(ТекущийОбъект.ИдентификаторПользователяИБ, НовыеСвойства, НовыеРоли, НЕ ПользовательИБСуществует, ОписаниеОшибки) Тогда - Если НЕ ПользовательИБСуществует Тогда - ТекущийОбъект.ИдентификаторПользователяИБ = НовыеСвойства.ПользовательИнфБазыУникальныйИдентификатор; - ПользовательИБСуществует = Истина; - КонецЕсли; - Иначе - Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Функция УдалитьПользователяИБ(Отказ) - - УстановитьПривилегированныйРежим(Истина); - - ОписаниеОшибки = ""; - Если НЕ Пользователи.УдалитьПользователяИБ(СтарыйИдентификаторПользователяИБ, ОписаниеОшибки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки, , , , Отказ); - КонецЕсли; - -КонецФункции - &НаКлиенте Функция ПолучитьКраткоеИмяПользователяИБ(Знач ПолноеИмя) @@ -725,71 +724,8 @@ КонецПроцедуры -//** Начальное заполнение, проверка заполнения, доступность свойств - -&НаСервере -Процедура ЗаполнитьПредставлениеРежимаЗапуска(РежимЗапуска) - - Если РежимЗапуска = "Авто" Тогда - ПредставлениеРежимаЗапуска = НСтр("ru = 'Авто'"); - - ИначеЕсли РежимЗапуска = "ОбычноеПриложение" Тогда - ПредставлениеРежимаЗапуска = НСтр("ru = 'Обычное приложение'"); - - ИначеЕсли РежимЗапуска = "УправляемоеПриложение" Тогда - ПредставлениеРежимаЗапуска = НСтр("ru = 'Управляемое приложение'"); - Иначе - ПредставлениеРежимаЗапуска = ""; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Функция ПолучитьВыбранныйРежимЗапуска() - - Если ПредставлениеРежимаЗапуска = НСтр("ru = 'Авто'") Тогда - Возврат "Авто"; - - ИначеЕсли ПредставлениеРежимаЗапуска = НСтр("ru = 'Обычное приложение'") Тогда - Возврат "ОбычноеПриложение"; - - ИначеЕсли ПредставлениеРежимаЗапуска = НСтр("ru = 'Управляемое приложение'") Тогда - Возврат "УправляемоеПриложение"; - - КонецЕсли; - - Возврат ""; - -КонецФункции - -&НаСервере -Процедура ЗаполнитьПредставлениеЯзыка(Язык) - - ПредставлениеЯзыка = ""; - - Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл - - Если МетаданныеЯзыка.Имя = Язык Тогда - ПредставлениеЯзыка = МетаданныеЯзыка.Синоним; - Прервать; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Функция ПолучитьВыбранныйЯзык() - - Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл - - Если МетаданныеЯзыка.Синоним = ПредставлениеЯзыка Тогда - Возврат МетаданныеЯзыка.Имя; - КонецЕсли; - КонецЦикла; - - Возврат ""; - -КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Начальное заполнение, проверка заполнения, доступность свойств &НаСервере Процедура ЗаполнитьРоли(ПрочитанныеРоли) @@ -804,36 +740,62 @@ КонецПроцедуры -&НаКлиенте -Процедура УстановитьДоступностьСвойств() +&НаСервере +Процедура УстановитьПостояннуюДоступностьСвойств() + + Элементы.КонтактнаяИнформация.Видимость = ЗначениеЗаполнено(ДействияВФорме.КонтактнаяИнформация); + Элементы.СвойстваПользователяИБ.Видимость = ЗначениеЗаполнено(ДействияВФорме.СвойстваПользователяИБ); + + ВыводитьСписокРолей = ЗначениеЗаполнено(ДействияВФорме.Роли); + Элементы.ОтображениеРолей.Видимость = ВыводитьСписокРолей; + Элементы.СвойстваАутентификации1СПредприятия.Отображение = + ?(ВыводитьСписокРолей, ОтображениеОбычнойГруппы.Нет, ОтображениеОбычнойГруппы.Отступ); Элементы.Наименование.ТолькоПросмотр = ДействияВФорме.СвойстваЭлемента <> "Редактирование"; Элементы.ДоступКИнформационнойБазеРазрешен.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; Элементы.СвойстваПользователяИБ.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех"; - Элементы.ПользовательИнфБазыАутентификацияСтандартная.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - Элементы.Пароль.ТолькоПросмотр = ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ АвторизованПолноправныйПользователь; - Элементы.ПодтверждениеПароля.ТолькоПросмотр = ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ АвторизованПолноправныйПользователь; Элементы.ПользовательИнфБазыИмя.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + Элементы.ПользовательИнфБазыАутентификацияСтандартная.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; Элементы.ПользовательИнфБазыАутентификацияОС.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; Элементы.ПользовательИнфБазыПользовательОС.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - Элементы.ПредставлениеРежимаЗапуска.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - - Элементы.ОсновныеСвойства.Доступность = ДоступКИнформационнойБазеРазрешен; - Элементы.ОтображениеРолей.Доступность = ДоступКИнформационнойБазеРазрешен; - Элементы.ПользовательИнфБазыИмя.АвтоОтметкаНезаполненного = ДоступКИнформационнойБазеРазрешен; - - Элементы.Пароль.Доступность = ПользовательИнфБазыАутентификацияСтандартная; - Элементы.ПодтверждениеПароля.Доступность = ПользовательИнфБазыАутентификацияСтандартная; - Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.Доступность = ПользовательИнфБазыАутентификацияСтандартная; - Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.Доступность = ПользовательИнфБазыАутентификацияСтандартная; - - Элементы.ПользовательИнфБазыПользовательОС.Доступность = ПользовательИнфБазыАутентификацияОС; + Элементы.ПользовательИнфБазыРежимЗапуска.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; КонецПроцедуры -//** Для работы интерфейса ролей +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьДоступностьСвойств(Форма) + + Элементы = Форма.Элементы; + + Элементы.Пароль.ТолькоПросмотр = Форма.ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ Форма.АвторизованПолноправныйПользователь; + Элементы.ПодтверждениеПароля.ТолькоПросмотр = Форма.ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ Форма.АвторизованПолноправныйПользователь; + + Элементы.ОсновныеСвойства.Доступность = Форма.ДоступКИнформационнойБазеРазрешен; + Элементы.ОтображениеРолей.Доступность = Форма.ДоступКИнформационнойБазеРазрешен; + Элементы.ПользовательИнфБазыИмя.АвтоОтметкаНезаполненного = Форма.ДоступКИнформационнойБазеРазрешен; + + Элементы.Пароль.Доступность = Форма.ПользовательИнфБазыАутентификацияСтандартная; + Элементы.ПодтверждениеПароля.Доступность = Форма.ПользовательИнфБазыАутентификацияСтандартная; + Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.Доступность = Форма.ПользовательИнфБазыАутентификацияСтандартная; + Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.Доступность = Форма.ПользовательИнфБазыАутентификацияСтандартная; + + Элементы.ПользовательИнфБазыПользовательОС.Доступность = Форма.ПользовательИнфБазыАутентификацияОС; + + Элементы.ДоступКИнформационнойБазеРазрешен.Доступность = Не Форма.Объект.Недействителен; + +КонецПроцедуры + +&НаКлиенте +Процедура ПользовательИнфБазыРежимЗапускаОчистка(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей &НаСервере Функция КоллекцияРолей(ТаблицаЗначенийДляЧтения = Ложь) @@ -847,7 +809,7 @@ КонецФункции &НаСервере -Процедура УстановитьТолькоПросмотрРолей(Знач ТолькоПросмотрРолей = Неопределено, Знач РазрешитьПросмотрТолькоВыбранных = Ложь) +Процедура УстановитьТолькоПросмотрРолей(Знач ТолькоПросмотрРолей = Неопределено) Если ТолькоПросмотрРолей <> Неопределено Тогда Элементы.Роли.ТолькоПросмотр = ТолькоПросмотрРолей; @@ -855,26 +817,14 @@ Элементы.РолиСнятьФлажки.Доступность = НЕ ТолькоПросмотрРолей; КонецЕсли; - Если РазрешитьПросмотрТолькоВыбранных Тогда - Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность = Ложь; - КонецЕсли; - КонецПроцедуры - &НаКлиенте -Процедура РазвернутьПодсистемыРолей(Коллекция = Неопределено); - - Если Коллекция = Неопределено Тогда - Коллекция = Роли.ПолучитьЭлементы(); - КонецЕсли; +Процедура РазвернутьПодсистемыРолей(); // Развернуть все - Для каждого Строка ИЗ Коллекция Цикл - Элементы.Роли.Развернуть(Строка.ПолучитьИдентификатор()); - Если НЕ Строка.ЭтоРоль Тогда - РазвернутьПодсистемыРолей(Строка.ПолучитьЭлементы()); - КонецЕсли; + Для каждого Строка Из Роли.ПолучитьЭлементы() Цикл + Элементы.Роли.Развернуть(Строка.ПолучитьИдентификатор(), Истина); КонецЦикла; КонецПроцедуры @@ -882,11 +832,6 @@ &НаСервере Процедура ОбновитьДеревоРолей() - Если НЕ Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность Тогда - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = Истина; - ПоказатьТолькоВыбранныеРоли = Истина; - КонецЕсли; - // Запоминание текущей строки ТекущаяПодсистема = ""; ТекущаяРоль = ""; @@ -902,10 +847,16 @@ КонецЕсли; КонецЕсли; - ДеревоРолей = ПользователиСерверПовтИсп.ДеревоРолей(ПоказатьПодсистемыРолей).Скопировать(); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ТипПользователя = Перечисления.ТипыПользователей.ПользовательОбластиДанных; + Иначе + ТипПользователя = Перечисления.ТипыПользователей.ПользовательЛокальногоРешения; + КонецЕсли; + + ДеревоРолей = ПользователиСерверПовтИсп.ДеревоРолей(ПоказатьПодсистемыРолей, ТипПользователя).Скопировать(); ДеревоРолей.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево")); ДеревоРолей.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число")); - ПодготовитьДеревоРолей(ДеревоРолей.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли); + ПодготовитьДеревоРолей(ДеревоРолей.Строки, ПоказатьТолькоВыбранныеРоли); ЗначениеВРеквизитФормы(ДеревоРолей, "Роли"); @@ -941,25 +892,20 @@ КонецПроцедуры &НаСервере -Процедура ПодготовитьДеревоРолей(Знач Коллекция, Знач СкрытьРольПолныеПрава, Знач ПоказатьТолькоВыбранныеРоли) +Процедура ПодготовитьДеревоРолей(Знач Коллекция, Знач ПоказатьТолькоВыбранныеРоли) Индекс = Коллекция.Количество()-1; Пока Индекс >= 0 Цикл Строка = Коллекция[Индекс]; - ПодготовитьДеревоРолей(Строка.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли); + ПодготовитьДеревоРолей(Строка.Строки, ПоказатьТолькоВыбранныеРоли); Если Строка.ЭтоРоль Тогда - Если СкрытьРольПолныеПрава - И (ВРег(Строка.Имя) = ВРег("ПолныеПрава") ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы")) Тогда + Строка.НомерКартинки = 6; + Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0; + Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда Коллекция.Удалить(Индекс); - Иначе - Строка.НомерКартинки = 6; - Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0; - Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда - Коллекция.Удалить(Индекс); - КонецЕсли; КонецЕсли; Иначе Если Строка.Строки.Количество() = 0 Тогда @@ -1092,31 +1038,3 @@ КонецЦикла; КонецПроцедуры - - -//** Для работы подсистемы КонтактнаяИнформация - -&НаКлиенте -Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент) - - УправлениеКонтактнойИнформациейКлиент.ПредставлениеПриИзменении(ЭтаФорма, Элемент); - -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_КонтактнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - УправлениеКонтактнойИнформациейКлиент.ПредставлениеНачалоВыбора(ЭтаФорма, Элемент, Модифицированность, СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура ДействителенПриИзменении(Элемент) - - Если Объект.Недействителен Тогда - ДоступКИнформационнойБазеРазрешен = Ложь; - КонецЕсли; - - УстановитьДоступностьСвойств(); - -КонецПроцедуры diff --git a/SSL/src/Catalogs/Пользователи/Help/ru.html b/SSL/src/Catalogs/Пользователи/Help/ru.html index d336d6fc6..eef55e815 100644 --- a/SSL/src/Catalogs/Пользователи/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Help/ru.html @@ -1,9 +1,9 @@ -

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

    -

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

    -

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

    -

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

    -

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

    -

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

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

    Примеры хороших паролей:
    “nj7{jhjibq*Gfhjkm,
    F5”njnGhkmNj;t{HI.

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

    Примеры неудачных паролей:
    Иванов,
    qwerty,
    12345678,
    123123123.

    +

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

    +

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

    +

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

    +

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

    См. также

    - \ No newline at end of file +

     

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl index d93406fda..d778e55d8 100644 --- a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) @@ -28,4 +30,7 @@ КонецЕсли; + СтандартныеПодсистемыПереопределяемый.ОбработкаПолученияФормыПользователя(ВидФормы, Параметры, ВыбраннаяФорма, + ДополнительнаяИнформация, СтандартнаяОбработка); + КонецПроцедуры diff --git a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl index e160fcbdb..acdb41c57 100644 --- a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl @@ -1,14 +1,52 @@ +Перем ЗаписьПервогоАдминистратора; // Флажок факта записи первого администратора, +// который может быть установлен при обработке +// пользователя ИБ. +// Используется в обработчике события ПриЗаписи. + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Программный интерфейс объекта реализован через ДополнительныеСвойства: +// +// ДоступКИнформационнойБазеРазрешен - есть пользователь ИБ, связанный +// с данным элементом. +// +// СтруктураОписанияПользователяИБ - свойства пользователя ИБ, используются только +// если ДоступКИнформационнойБазеРазрешен = Истина. +// Состав свойств см. Пользователи.НовоеОписаниеПользователяИБ. + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + Процедура ПередЗаписью(Отказ) - Если ИдентификаторПользователяИБ <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") И - Пользователи.ПользовательПоИдентификаторуСуществует(ИдентификаторПользователяИБ, Ссылка) Тогда - - ВызватьИсключение(НСтр("ru = 'Один пользователь информационной базы - |может быть связан только с одним пользователем или внешним пользователем.'")); + Если ОбменДанными.Загрузка Тогда + Возврат; КонецЕсли; - // Проверка ОбменДанными.Загрузка должна выполняться после кода выше. + Если СтандартныеПодсистемыПереопределяемый.ЭтоНеразделенныйПользовательИБ(ИдентификаторПользователяИБ) Тогда + Возврат; + КонецЕсли; + + ЗаписьПервогоАдминистратора = Ложь; + + СтандартныеПодсистемыПереопределяемый.ПередЗаписьюПользователя(ЭтотОбъект); + + Если ДополнительныеСвойства.Свойство("ДоступКИнформационнойБазеРазрешен") Тогда + ОбработатьПользователяИБ(Отказ); + КонецЕсли; + + Если Отказ Тогда + Возврат; + КонецЕсли; + + Если ИдентификаторПользователяИБ <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") + И Пользователи.ПользовательПоИдентификаторуСуществует(ИдентификаторПользователяИБ, Ссылка) Тогда + + ВызватьИсключение(НСтр("ru = 'Один пользователь информационной базы + |может быть связан только с одним пользователем или внешним пользователем!'")); + КонецЕсли; КонецПроцедуры @@ -18,8 +56,12 @@ Возврат; КонецЕсли; - Если ДополнительныеСвойства.Свойство("ГруппаНовогоПользователя") И - ЗначениеЗаполнено(ДополнительныеСвойства.ГруппаНовогоПользователя) Тогда + Если СтандартныеПодсистемыПереопределяемый.ЭтоНеразделенныйПользовательИБ(ИдентификаторПользователяИБ) Тогда + Возврат; + КонецЕсли; + + Если ДополнительныеСвойства.Свойство("ГруппаНовогоПользователя") + И ЗначениеЗаполнено(ДополнительныеСвойства.ГруппаНовогоПользователя) Тогда ОбъектГруппы = ДополнительныеСвойства.ГруппаНовогоПользователя.ПолучитьОбъект(); ОбъектГруппы.Состав.Добавить().Пользователь = Ссылка; @@ -29,10 +71,24 @@ Пользователи.ОбновитьСоставыГруппПользователей(Справочники.ГруппыПользователей.ВсеПользователи); + Если ЗаписьПервогоАдминистратора Тогда + УстановитьПривилегированныйРежим(Истина); + + ПользователиПереопределяемый.ПриЗаписиПервогоАдминистратора(Ссылка); + + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + КонецПроцедуры Процедура ПередУдалением(Отказ) + Если СтандартныеПодсистемыПереопределяемый.ЭтоНеразделенныйПользовательИБ(ИдентификаторПользователяИБ) Тогда + Возврат; + КонецЕсли; + + // Требуется удалить пользователя ИБ, иначе он попадет в список ошибок в форме ПользователиИБ, + // кроме того, вход под этим пользователем ИБ приведет к ошибке. Если Пользователи.ПользовательИБСуществует(ИдентификаторПользователяИБ) Тогда ОписаниеОшибки = ""; Если НЕ Пользователи.УдалитьПользователяИБ(ИдентификаторПользователяИБ, ОписаниеОшибки) Тогда @@ -40,4 +96,138 @@ КонецЕсли; КонецЕсли; + // Проверку ОбменДанными.Загрузка следует выполнять начиная с этой строки. + КонецПроцедуры + +Процедура ПриКопировании(ОбъектКопирования) + + ИдентификаторПользователяИБ = Неопределено; + ИдентификаторПользователяСервиса = Неопределено; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура ОбработатьПользователяИБ(Отказ) + + УровеньДоступа = Пользователи.ПолучитьУровеньДоступаНаИзменениеСвойствПользователяИБ(); + + Если УровеньДоступа = "НетДоступа" Тогда + ТекстСообщения = НСтр("ru = 'Не достаточно прав для изменения пользователя информационной базы'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ); + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + ДополнительныеСвойства.Вставить("ПользовательИБСуществует", + ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ) <> Неопределено); + + Если УровеньДоступа <> "ПолныйДоступ" И УровеньДоступа <> "УправлениеСписком" + И ДополнительныеСвойства.ПользовательИБСуществует <> ДополнительныеСвойства.ДоступКИнформационнойБазеРазрешен Тогда + + ТекстСообщения = НСтр("ru = 'Не достаточно прав для изменения пользователя информационной базы'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ); + Возврат; + КонецЕсли; + + Если ДополнительныеСвойства.ДоступКИнформационнойБазеРазрешен Тогда + // Проверка попытки изменения недоступных свойств. + СтруктураОписанияПользователяИБ = ДополнительныеСвойства.СтруктураОписанияПользователяИБ; + + Если УровеньДоступа = "УправлениеСписком" Тогда + Если СтруктураОписанияПользователяИБ.Свойство("ПользовательИнфБазыРоли") Тогда + ТекстСообщения = НСтр("ru = 'Не достаточно прав для изменения ролей пользователя информационной базы'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ); + Возврат; + КонецЕсли; + ИначеЕсли УровеньДоступа = "ИзменениеТекущего" Тогда + ДопустимыеСвойства = Новый Массив; + ДопустимыеСвойства.Добавить("ПользовательИнфБазыИмя"); + ДопустимыеСвойства.Добавить("ПользовательИнфБазыПароль"); + ДопустимыеСвойства.Добавить("ПользовательИнфБазыЯзык"); + ДопустимыеСвойства.Добавить("ПодтверждениеПароля"); + Для каждого КлючИЗначение Из СтруктураОписанияПользователяИБ Цикл + Если ДопустимыеСвойства.Найти(КлючИЗначение.Ключ) = Неопределено Тогда + ТекстСообщения = НСтр("ru = 'Не достаточно прав для изменения пользователя информационной базы'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ); + Возврат; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ЗаписатьПользователяИБ(Отказ); + Иначе + Если ДополнительныеСвойства.ПользовательИБСуществует Тогда + УдалитьПользователяИБ(Отказ); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаписатьПользователяИБ(Отказ) + + СтруктураОписанияПользователяИБ = ДополнительныеСвойства.СтруктураОписанияПользователяИБ; + Если СтруктураОписанияПользователяИБ.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если СтруктураОписанияПользователяИБ.Свойство("ПользовательИнфБазыРоли") Тогда + Роли = СтруктураОписанияПользователяИБ.ПользовательИнфБазыРоли; + Иначе + Роли = Неопределено; + КонецЕсли; + + Если Пользователи.ТребуетсяСоздатьПервогоАдминистратора(СтруктураОписанияПользователяИБ) Тогда + ЗаписьПервогоАдминистратора = Истина; + Роли = Новый Массив; + Роли.Добавить("ПолныеПрава"); + + ИмяРолиАдминистратораСистемы = Пользователи.РольАдминистратораСистемы().Имя; + Если Роли.Найти(ИмяРолиАдминистратораСистемы) = Неопределено Тогда + Роли.Добавить(ИмяРолиАдминистратораСистемы); + КонецЕсли; + КонецЕсли; + + // Попытка записи пользователя ИБ. + СозданНовыйПользовательИБ = Ложь; + ОписаниеОшибки = ""; + Если Пользователи.ЗаписатьПользователяИБ(ИдентификаторПользователяИБ, + СтруктураОписанияПользователяИБ, Роли, НЕ ДополнительныеСвойства.ПользовательИБСуществует, ОписаниеОшибки) Тогда + + Если НЕ ДополнительныеСвойства.ПользовательИБСуществует Тогда + СозданНовыйПользовательИБ = Истина; + ИдентификаторПользователяИБ = СтруктураОписанияПользователяИБ.ПользовательИнфБазыУникальныйИдентификатор; + ДополнительныеСвойства.ПользовательИБСуществует = Истина; + КонецЕсли; + Иначе + Отказ = Истина; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки); + КонецЕсли; + + Если НЕ Отказ Тогда + Если СозданНовыйПользовательИБ Тогда + ДополнительныеСвойства.Вставить("ДобавленПользовательИБ", ИдентификаторПользователяИБ); + Иначе + ДополнительныеСвойства.Вставить("ИзмененПользовательИБ", ИдентификаторПользователяИБ); + КонецЕсли + КонецЕсли; + +КонецПроцедуры + +Функция УдалитьПользователяИБ(Отказ) + + УстановитьПривилегированныйРежим(Истина); + + ОписаниеОшибки = ""; + Если Пользователи.УдалитьПользователяИБ(ИдентификаторПользователяИБ, ОписаниеОшибки) Тогда + ДополнительныеСвойства.Вставить("УдаленПользовательИБ", ИдентификаторПользователяИБ); + ДополнительныеСвойства.ПользовательИБСуществует = Ложь; + ИдентификаторПользователяИБ = Неопределено; + Иначе + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки, , , , Отказ); + КонецЕсли; + +КонецФункции + diff --git a/SSL/src/Catalogs/Пользователи/Пользователи.mdo b/SSL/src/Catalogs/Пользователи/Пользователи.mdo index e42441eeb..ad5ea8f17 100644 --- a/SSL/src/Catalogs/Пользователи/Пользователи.mdo +++ b/SSL/src/Catalogs/Пользователи/Пользователи.mdo @@ -160,6 +160,7 @@ + Index Use @@ -182,6 +183,21 @@ Use Use + + ИдентификаторПользователяСервиса + + ru + Идентификатор пользователя сервиса + + + UUID + + + + + Index + Use + @@ -439,7 +455,7 @@ ФормаЭлемента ru - Форма элемента + Пользователь @@ -492,7 +508,7 @@ ru Пользователи информационной базы - NavigationPanelOrdinary + FormCommandBarImportant Auto ru diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Form.form b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Form.form index dbef6af52..c1a08b97c 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Form.form +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Form.form @@ -1,9 +1,5 @@ - - <key>ru</key> - <value>Применение правил</value> - ГруппаДляПапки 10 @@ -20,7 +16,7 @@ ДляПисемВПапкеРасширеннаяПодсказка - 22 + 24 Label true true @@ -70,7 +66,7 @@ Right ВключаяПодчиненныеРасширеннаяПодсказка - 24 + 26 Label true true @@ -105,7 +101,7 @@ ГруппаДляПапкиРасширеннаяПодсказка - 21 + 23 Label true true @@ -138,12 +134,9 @@ CancelSearch Change Copy - CopyToClipboard Delete EndEdit Find - OutputList - SelectAll SortListAsc SortListDesc @@ -164,7 +157,7 @@ ПрименяемыеПравилаПрименятьРасширеннаяПодсказка - 40 + 43 Label true true @@ -201,7 +194,7 @@ ПрименяемыеПравилаПравилоРасширеннаяПодсказка - 42 + 45 Label true true @@ -243,7 +236,7 @@ ПрименяемыеПравилаПеремещатьВПапкуРасширеннаяПодсказка - 44 + 47 Label true true @@ -287,7 +280,7 @@ ПрименяемыеПравилаПрименитьРасширеннаяПодсказка - 26 + 28 Label true true @@ -303,36 +296,6 @@ UserCmds Auto - - ГруппаСтандартныеКоманды - 14 - true - true - - true - - - <key>ru</key> - <value>Группа стандартные команды</value> - - - ru - Группа стандартные команды - - - ГруппаСтандартныеКомандыРасширеннаяПодсказка - 27 - Label - true - true - - Left - - - - Item.ПрименяемыеПравила - - ПрименяемыеПравилаУстановитьВсеПрименить 16 @@ -343,7 +306,7 @@ ПрименяемыеПравилаУстановитьВсеПрименитьРасширеннаяПодсказка - 28 + 29 Label true true @@ -369,7 +332,7 @@ ПрименяемыеПравилаСнятьВсеПрименитьРасширеннаяПодсказка - 29 + 30 Label true true @@ -385,36 +348,73 @@ UserCmds Auto + + ПрименяемыеПравилаСправочникПравилаОбработкиЭлектроннойПочтыОткрытьПоЗначению1 + 22 + true + true + + true + + + УчетнаяЗапись + + + ПрименяемыеПравилаСправочникПравилаОбработкиЭлектроннойПочтыОткрытьПоЗначению1РасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardCommand.OpenByValue + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ГруппаСтандартныеКоманды + 14 + true + true + + true + + + <key>ru</key> + <value>Группа стандартные команды</value> + + + ru + Группа стандартные команды + + + ГруппаСтандартныеКомандыРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + Item.ПрименяемыеПравила + + Left ПрименяемыеПравилаСтрокаПоиска - 31 - - ПрименяемыеПравилаСтрокаПоискаРасширеннаяПодсказка - 33 - Label - true - true - - Left - - - - ПрименяемыеПравилаСтрокаПоискаКонтекстноеМеню - 32 - true - - ПрименяемыеПравила - - true - - - - ПрименяемыеПравилаСостояниеПросмотра 34 - ПрименяемыеПравилаСостояниеПросмотраРасширеннаяПодсказка + ПрименяемыеПравилаСтрокаПоискаРасширеннаяПодсказка 36 Label true @@ -424,10 +424,33 @@ - ПрименяемыеПравилаСостояниеПросмотраКонтекстноеМеню + ПрименяемыеПравилаСтрокаПоискаКонтекстноеМеню 35 true + ПрименяемыеПравила + + true + + + + ПрименяемыеПравилаСостояниеПросмотра + 37 + + ПрименяемыеПравилаСостояниеПросмотраРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + ПрименяемыеПравилаСостояниеПросмотраКонтекстноеМеню + 38 + true + ViewStatusAddition ПрименяемыеПравила @@ -436,10 +459,10 @@ ПрименяемыеПравилаУправлениеПоиском - 37 + 40 ПрименяемыеПравилаУправлениеПоискомРасширеннаяПодсказка - 39 + 42 Label true true @@ -449,7 +472,7 @@ ПрименяемыеПравилаУправлениеПоискомКонтекстноеМеню - 38 + 41 true SearchControlAddition @@ -460,7 +483,7 @@ ПрименяемыеПравилаРасширеннаяПодсказка - 30 + 33 Label true true @@ -514,7 +537,7 @@ None ПредставлениеОтбораРасширеннаяПодсказка - 54 + 57 Label true true @@ -527,15 +550,24 @@ 18 true - LabelField + InputField + true Enter true Left true - + true 2 true + false + true + true + false + true + true + true + Normal @@ -550,6 +582,7 @@ LockOwner Use true + true true Vertical true @@ -698,6 +731,41 @@ ВключаяПодчиненные + + АдресХранилища + + <key>ru</key> + <value>Адрес хранилища</value> + + 5 + + String + + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 6 + + UUID + + + true + + + true + + Применить @@ -772,6 +840,13 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <parameters> + <name>УчетнаяЗапись</name> + <valueType> + <types>CatalogRef.УчетныеЗаписиЭлектроннойПочты</types> + </valueType> + <keyParameter>true</keyParameter> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl index fa53a3317..5fd913e6d 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl @@ -1,127 +1,78 @@ +&НаКлиенте +Перем ПараметрыОбработчикаОжидания; + +&НаКлиенте +Перем ФормаДлительнойОперации; + //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере -Функция ПрименитьСервер() +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ТаблицаСоответствий = Новый ТаблицаЗначений; - ТаблицаСоответствий.Колонки.Добавить("Папка"); - ТаблицаСоответствий.Колонки.Добавить("Письмо"); + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; - ТекстУсловияПоПапке = ?(ВключаяПодчиненные," В ИЕРАРХИИ(&ПапкаЭлектронногоПисьма) "," = &ПапкаЭлектронногоПисьма "); + Если Не ЗначениеЗаполнено(Параметры.УчетнаяЗапись) Или Параметры.УчетнаяЗапись.Пустая() Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + УчетнаяЗапись = Параметры.УчетнаяЗапись; Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ВыбранныеПравила.Правило, - | ВыбранныеПравила.Применять - |ПОМЕСТИТЬ ВыбранныеПравила - |ИЗ - | &ВыбранныеПравила КАК ВыбранныеПравила - |; - | - |//////////////////////////////////////////////////////////////////////////////// + Запрос.Текст = " |ВЫБРАТЬ - | ВыбранныеПравила.Правило, - | ПравилаОбработкиЭлектроннойПочты.КомпоновщикНастроек, + | ПравилаОбработкиЭлектроннойПочты.Ссылка КАК Правило, + | ЛОЖЬ КАК Применять, + | ПравилаОбработкиЭлектроннойПочты.ПредставлениеОтбора, | ПравилаОбработкиЭлектроннойПочты.ПомещатьВПапку |ИЗ - | ВыбранныеПравила КАК ВыбранныеПравила - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПравилаОбработкиЭлектроннойПочты КАК ПравилаОбработкиЭлектроннойПочты - | ПО ВыбранныеПравила.Правило = ПравилаОбработкиЭлектроннойПочты.Ссылка + | Справочник.ПравилаОбработкиЭлектроннойПочты КАК ПравилаОбработкиЭлектроннойПочты |ГДЕ - | ВыбранныеПравила.Применять - |; + | ПравилаОбработкиЭлектроннойПочты.Владелец = &Владелец + | И (НЕ ПравилаОбработкиЭлектроннойПочты.ПометкаУдаления) | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ЭлектронноеПисьмоВходящее.Ссылка - |ИЗ - | Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - | ПО ПредметыПапкиВзаимодействий.Взаимодействие = ЭлектронноеПисьмоВходящее.Ссылка - |ГДЕ - | ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма " + ТекстУсловияПоПапке +" - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ЭлектронноеПисьмоИсходящее.Ссылка - |ИЗ - | Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - | ПО ПредметыПапкиВзаимодействий.Взаимодействие = ЭлектронноеПисьмоИсходящее.Ссылка - |ГДЕ - | ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма " + ТекстУсловияПоПапке ; + |УПОРЯДОЧИТЬ ПО + | ПравилаОбработкиЭлектроннойПочты.РеквизитДопУпорядочивания"; - Запрос.УстановитьПараметр("ВыбранныеПравила",ПрименяемыеПравила.Выгрузить()); - Запрос.УстановитьПараметр("ПапкаЭлектронногоПисьма",ДляПисемВПапке); + Запрос.УстановитьПараметр("Владелец", Параметры.УчетнаяЗапись); + Запрос.УстановитьПараметр("Входящие", НСтр("ru = 'Входящие'")); - Результат = Запрос.ВыполнитьПакет(); - Если Результат[2].Пустой() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'В выбранной папке нет писем'"),,"ДляПисемВПапке"); - Возврат Ложь; + Результат = Запрос.Выполнить(); + Если НЕ Результат.Пустой() Тогда + ПрименяемыеПравила.Загрузить(Результат.Выгрузить()); КонецЕсли; - МассивПисем = Результат[2].Выгрузить().ВыгрузитьКолонку("Ссылка"); - Выборка = Результат[1].Выбрать(); - Пока Выборка.Следующий() Цикл + Если Параметры.Свойство("ДляПисемВПапке") И ЗначениеЗаполнено(Параметры.ДляПисемВПапке) Тогда + ДляПисемВПапке = Параметры.ДляПисемВПапке; + Иначе - СхемаПравилаОбработки = - Справочники.ПравилаОбработкиЭлектроннойПочты.ПолучитьМакет("СхемаПравилаОбработкиЭлектроннойПочты"); + Запрос.Текст = " + |ВЫБРАТЬ + | ПапкиЭлектронныхПисем.Ссылка + |ИЗ + | Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем + |ГДЕ + | ПапкиЭлектронныхПисем.ПредопределеннаяПапка + | И ПапкиЭлектронныхПисем.Владелец = &Владелец + | И ПапкиЭлектронныхПисем.Наименование = &Входящие"; - КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных(); - КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; - КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаПравилаОбработки)); - КомпоновщикНастроек.ЗагрузитьНастройки(Выборка.КомпоновщикНастроек.Получить()); - КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность); - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(КомпоновщикНастроек.Настройки.Отбор, - "Ссылка",МассивПисем,ВидСравненияКомпоновкиДанных.ВСписке); - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(КомпоновщикНастроек.Настройки.Отбор, - "Ссылка.УчетнаяЗапись",УчетнаяЗапись,ВидСравненияКомпоновкиДанных.Равно); - - МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаПравилаОбработки, - КомпоновщикНастроек.ПолучитьНастройки(),,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); - - ТекстЗапроса = МакетКомпоновкиДанных.НаборыДанных.ОсновнойНаборДанных.Запрос; - ЗапросПравило = Новый Запрос(ТекстЗапроса); - Для каждого Параметр Из МакетКомпоновкиДанных.ЗначенияПараметров Цикл - ЗапросПравило.Параметры.Вставить(Параметр.Имя, Параметр.Значение); - КонецЦикла; - - РезультатПисьма = ЗапросПравило.Выполнить(); - Если Не РезультатПисьма.Пустой() Тогда - ВыборкаПисьма = РезультатПисьма.Выбрать(); - Пока ВыборкаПисьма.Следующий() Цикл - - НоваяСтрокаТаблицы = ТаблицаСоответствий.Добавить(); - НоваяСтрокаТаблицы.Папка = Выборка.ПомещатьВПапку; - НоваяСтрокаТаблицы.Письмо = ВыборкаПисьма.Ссылка; - - ИндексЭлементаМассиваКУдалению = МассивПисем.Найти(ВыборкаПисьма.Ссылка); - Если ИндексЭлементаМассиваКУдалению <> Неопределено Тогда - МассивПисем.Удалить(ИндексЭлементаМассиваКУдалению); - КонецЕсли; - КонецЦикла; + Результат = Запрос.Выполнить(); + Если НЕ Результат.Пустой() Тогда + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + ДляПисемВПапке = Выборка.Ссылка; КонецЕсли; - - КонецЦикла; - - Для каждого СтрокаТаблицы Из ТаблицаСоответствий Цикл - ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма( - СтрокаТаблицы.Письмо,СтрокаТаблицы.Папка); - КонецЦикла; - - Если ТаблицаСоответствий.Количество() > 0 Тогда - Возврат Истина; - Иначе - Возврат Ложь; КонецЕсли; -КонецФункции +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура Применить(Команда) @@ -152,82 +103,26 @@ Отказ = Истина; КонецЕсли; - Если Не Отказ И ПрименитьСервер() Тогда + Если Отказ Тогда + Возврат; + КонецЕсли; + + Результат = ПрименитьПравилаНаСервере(); + + Если НЕ Результат.ЗаданиеВыполнено Тогда + ИдентификаторЗадания = Результат.ИдентификаторЗадания; + АдресХранилища = Результат.АдресХранилища; + + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); + ФормаДлительнойОперации = ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(ЭтаФорма, ИдентификаторЗадания); + + Иначе Оповестить("ПримененыПравилаОбработкиПисем"); КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - Если Параметры.Свойство("УчетнаяЗапись") И ЗначениеЗаполнено(Параметры.УчетнаяЗапись) Тогда - - УчетнаяЗапись = Параметры.УчетнаяЗапись; - - Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ - | ПравилаОбработкиЭлектроннойПочты.Ссылка КАК Правило, - | ЛОЖЬ КАК Применять, - | ПравилаОбработкиЭлектроннойПочты.ПредставлениеОтбора, - | ПравилаОбработкиЭлектроннойПочты.ПомещатьВПапку - |ИЗ - | Справочник.ПравилаОбработкиЭлектроннойПочты КАК ПравилаОбработкиЭлектроннойПочты - |ГДЕ - | ПравилаОбработкиЭлектроннойПочты.Владелец = &Владелец - | И (НЕ ПравилаОбработкиЭлектроннойПочты.ПометкаУдаления) - | - |УПОРЯДОЧИТЬ ПО - | ПравилаОбработкиЭлектроннойПочты.РеквизитДопУпорядочивания"; - - Запрос.УстановитьПараметр("Владелец",Параметры.УчетнаяЗапись); - Запрос.УстановитьПараметр("Входящие",НСтр("ru = 'Входящие'")); - - Результат = Запрос.Выполнить(); - Если НЕ Результат.Пустой() Тогда - ПрименяемыеПравила.Загрузить(Результат.Выгрузить()); - КонецЕсли; - - Если Параметры.Свойство("ДляПисемВПапке") И ЗначениеЗаполнено(Параметры.ДляПисемВПапке) Тогда - ДляПисемВПапке = Параметры.ДляПисемВПапке; - Иначе - - Запрос.Текст = " - |ВЫБРАТЬ - | ПапкиЭлектронныхПисем.Ссылка - |ИЗ - | Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем - |ГДЕ - | ПапкиЭлектронныхПисем.ПредопределеннаяПапка - | И ПапкиЭлектронныхПисем.Владелец = &Владелец - | И ПапкиЭлектронныхПисем.Наименование = &Входящие"; - - Результат = Запрос.Выполнить(); - Если НЕ Результат.Пустой() Тогда - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - ДляПисемВПапке = Выборка.Ссылка; - КонецЕсли; - КонецЕсли; - - Иначе - - Отказ = Истина; - - КонецЕсли; - -КонецПроцедуры - - &НаКлиенте Процедура ПрименитьВсеПравила(Команда) @@ -237,7 +132,6 @@ КонецПроцедуры - &НаКлиенте Процедура НеПрименятьВсеПравила(Команда) @@ -247,3 +141,74 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Функция ПрименитьПравилаНаСервере() + + ПараметрыВыгрузки = Новый Структура( + "ТаблицаПравил,ДляПисемВПапке,ВключаяПодчиненные, УчетнаяЗапись", + ПрименяемыеПравила.Выгрузить(),ДляПисемВПапке, ВключаяПодчиненные, УчетнаяЗапись); + ЗаполнитьЗначенияСвойств(ПараметрыВыгрузки, ЭтаФорма); + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + Справочники.ПравилаОбработкиЭлектроннойПочты.ПрименитьПравила(ПараметрыВыгрузки, АдресХранилища); + Результат = Новый Структура("ЗаданиеВыполнено", Истина); + Иначе + НаименованиеЗадания = НСтр("ru = 'Применение правил '"); + + Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "Справочники.ПравилаОбработкиЭлектроннойПочты.ПрименитьПравила", + ПараметрыВыгрузки, + НаименованиеЗадания); + + АдресХранилища = Результат.АдресХранилища; + + КонецЕсли; + + Если Результат.ЗаданиеВыполнено Тогда + ЗагрузитьРезультат(); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаСервере +Процедура ЗагрузитьРезультат() + + Результат = ПолучитьИзВременногоХранилища(АдресХранилища); + Если ТипЗнч(Результат) = Тип("Строка") + И ЗначениеЗаполнено(Результат) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеЗадания() + + Попытка + Если ФормаДлительнойОперации.Открыта() + И ФормаДлительнойОперации.ИдентификаторЗадания = ИдентификаторЗадания Тогда + Если ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + ЗагрузитьРезультат(); + ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации); + Оповестить("ПримененыПравилаОбработкиПисем"); + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания( + "Подключаемый_ПроверитьВыполнениеЗадания", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); + КонецЕсли; + КонецЕсли; + Исключение + ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl index 6a4a2cdbe..328b5a5e7 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаСписка/Module.bsl @@ -1,51 +1,6 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ПОДСИСТЕМЫ НАСТРОЙКИ ПОРЯДКА ЭЛЕМЕНТОВ ДЛЯ ПОДЧИНЕННОГО СПРАВОЧНИКА -// - -&НаКлиенте -Процедура ПереместитьЭлементВверх(Команда) - - НастройкаПорядкаЭлементовКлиент.ПереместитьЭлементВверхВыполнить(Список, Элементы.Список); - -КонецПроцедуры - -&НаКлиенте -Процедура ПереместитьЭлементВниз(Команда) - - НастройкаПорядкаЭлементовКлиент.ПереместитьЭлементВнизВыполнить(Список, Элементы.Список); - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ - -&НаКлиенте -Процедура ПрименитьПравила(Команда) - - ОчиститьСообщения(); - - СтруктураПараметры = Новый Структура; - МассивЭлементовОтбора = ОбщегоНазначенияКлиентСервер.НайтиЭлементыИГруппыОтбора(Список.Отбор,"Владелец"); - Если МассивЭлементовОтбора.Количество() > 0 И МассивЭлементовОтбора[0].Использование И - ЗначениеЗаполнено(МассивЭлементовОтбора[0].ПравоеЗначение) Тогда - - СтруктураПараметры.Вставить("УчетнаяЗапись",МассивЭлементовОтбора[0].ПравоеЗначение); - - Иначе - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Не установлен отбор по владельцу(учетной записи) правил.'")); - Возврат; - - КонецЕсли; - - Результат = ОткрытьФормуМодально("Справочник.ПравилаОбработкиЭлектроннойПочты.Форма.ПрименениеПравил",СтруктураПараметры, ЭтаФорма); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -74,3 +29,48 @@ КонецЕсли; КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ПрименитьПравила(Команда) + + ОчиститьСообщения(); + + СтруктураПараметры = Новый Структура; + МассивЭлементовОтбора = ОбщегоНазначенияКлиентСервер.НайтиЭлементыИГруппыОтбора(Список.Отбор,"Владелец"); + Если МассивЭлементовОтбора.Количество() > 0 И МассивЭлементовОтбора[0].Использование И + ЗначениеЗаполнено(МассивЭлементовОтбора[0].ПравоеЗначение) Тогда + + СтруктураПараметры.Вставить("УчетнаяЗапись",МассивЭлементовОтбора[0].ПравоеЗначение); + + Иначе + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не установлен отбор по владельцу(учетной записи) правил.'")); + Возврат; + + КонецЕсли; + + Результат = ОткрытьФормуМодально("Справочник.ПравилаОбработкиЭлектроннойПочты.Форма.ПрименениеПравил",СтруктураПараметры, ЭтаФорма); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Команды подсистемы настройка порядка элементнов для подчиненного справочника +// + +&НаКлиенте +Процедура ПереместитьЭлементВверх(Команда) + + НастройкаПорядкаЭлементовКлиент.ПереместитьЭлементВверхВыполнить(Список, Элементы.Список); + +КонецПроцедуры + +&НаКлиенте +Процедура ПереместитьЭлементВниз(Команда) + + НастройкаПорядкаЭлементовКлиент.ПереместитьЭлементВнизВыполнить(Список, Элементы.Список); + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index 315fe96af..75a842abf 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -1,31 +1,5 @@ - - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ - -&НаСервере -Процедура ИнициализироватьКомпоновщикСервер(НастройкаКомпоновки) - - СхемаКомпоновки = Справочники.ПравилаОбработкиЭлектроннойПочты.ПолучитьМакет("СхемаПравилаОбработкиЭлектроннойПочты"); - АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновки,УникальныйИдентификатор); - КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); - - Если НастройкаКомпоновки = Неопределено Тогда - КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию); - Иначе - КомпоновщикНастроек.ЗагрузитьНастройки(НастройкаКомпоновки); - КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ - - - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -71,9 +45,8 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура НаименованиеНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) @@ -87,3 +60,24 @@ Элементы.Наименование.СписокВыбора.Добавить(ПредставлениеОтбора); КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ИнициализироватьКомпоновщикСервер(НастройкаКомпоновки) + + СхемаКомпоновки = Справочники.ПравилаОбработкиЭлектроннойПочты.ПолучитьМакет("СхемаПравилаОбработкиЭлектроннойПочты"); + АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновки,УникальныйИдентификатор); + КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); + + Если НастройкаКомпоновки = Неопределено Тогда + КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию); + Иначе + КомпоновщикНастроек.ЗагрузитьНастройки(НастройкаКомпоновки); + КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность); + КонецЕсли; + +КонецПроцедуры + + diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl new file mode 100644 index 000000000..80cffc8c4 --- /dev/null +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl @@ -0,0 +1,122 @@ + + +&НаСервере +Процедура ПрименитьПравила(ПараметрыВыгрузки, АдресХранилища) Экспорт + + ТаблицаСоответствий = Новый ТаблицаЗначений; + ТаблицаСоответствий.Колонки.Добавить("Папка"); + ТаблицаСоответствий.Колонки.Добавить("Письмо"); + + ТекстУсловияПоПапке = ?(ПараметрыВыгрузки.ВключаяПодчиненные," В ИЕРАРХИИ(&ПапкаЭлектронногоПисьма) "," = &ПапкаЭлектронногоПисьма "); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ВыбранныеПравила.Правило, + | ВыбранныеПравила.Применять + |ПОМЕСТИТЬ ВыбранныеПравила + |ИЗ + | &ВыбранныеПравила КАК ВыбранныеПравила + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВыбранныеПравила.Правило, + | ПравилаОбработкиЭлектроннойПочты.КомпоновщикНастроек, + | ПравилаОбработкиЭлектроннойПочты.ПомещатьВПапку + |ИЗ + | ВыбранныеПравила КАК ВыбранныеПравила + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПравилаОбработкиЭлектроннойПочты КАК ПравилаОбработкиЭлектроннойПочты + | ПО ВыбранныеПравила.Правило = ПравилаОбработкиЭлектроннойПочты.Ссылка + |ГДЕ + | ВыбранныеПравила.Применять + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ЭлектронноеПисьмоВходящее.Ссылка + |ИЗ + | Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + | ПО ПредметыПапкиВзаимодействий.Взаимодействие = ЭлектронноеПисьмоВходящее.Ссылка + |ГДЕ + | ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма " + ТекстУсловияПоПапке +" + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЭлектронноеПисьмоИсходящее.Ссылка + |ИЗ + | Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + | ПО ПредметыПапкиВзаимодействий.Взаимодействие = ЭлектронноеПисьмоИсходящее.Ссылка + |ГДЕ + | ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма " + ТекстУсловияПоПапке ; + + Запрос.УстановитьПараметр("ВыбранныеПравила",ПараметрыВыгрузки.ТаблицаПравил); + Запрос.УстановитьПараметр("ПапкаЭлектронногоПисьма",ПараметрыВыгрузки.ДляПисемВПапке); + + Результат = Запрос.ВыполнитьПакет(); + Если Результат[2].Пустой() Тогда + ТекстСообщения = НСтр("ru = 'В выбранной папке нет писем.'"); + ПоместитьВоВременноеХранилище(ТекстСообщения, АдресХранилища); + Возврат; + КонецЕсли; + МассивПисем = Результат[2].Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Выборка = Результат[1].Выбрать(); + Пока Выборка.Следующий() Цикл + + СхемаПравилаОбработки = + Справочники.ПравилаОбработкиЭлектроннойПочты.ПолучитьМакет("СхемаПравилаОбработкиЭлектроннойПочты"); + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных(); + КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; + КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаПравилаОбработки)); + КомпоновщикНастроек.ЗагрузитьНастройки(Выборка.КомпоновщикНастроек.Получить()); + КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(КомпоновщикНастроек.Настройки.Отбор, + "Ссылка",МассивПисем,ВидСравненияКомпоновкиДанных.ВСписке); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(КомпоновщикНастроек.Настройки.Отбор, + "Ссылка.УчетнаяЗапись",ПараметрыВыгрузки.УчетнаяЗапись,ВидСравненияКомпоновкиДанных.Равно); + + МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаПравилаОбработки, + КомпоновщикНастроек.ПолучитьНастройки(),,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + + ТекстЗапроса = МакетКомпоновкиДанных.НаборыДанных.ОсновнойНаборДанных.Запрос; + ЗапросПравило = Новый Запрос(ТекстЗапроса); + Для каждого Параметр Из МакетКомпоновкиДанных.ЗначенияПараметров Цикл + ЗапросПравило.Параметры.Вставить(Параметр.Имя, Параметр.Значение); + КонецЦикла; + + РезультатПисьма = ЗапросПравило.Выполнить(); + Если Не РезультатПисьма.Пустой() Тогда + ВыборкаПисьма = РезультатПисьма.Выбрать(); + Пока ВыборкаПисьма.Следующий() Цикл + + НоваяСтрокаТаблицы = ТаблицаСоответствий.Добавить(); + НоваяСтрокаТаблицы.Папка = Выборка.ПомещатьВПапку; + НоваяСтрокаТаблицы.Письмо = ВыборкаПисьма.Ссылка; + + ИндексЭлементаМассиваКУдалению = МассивПисем.Найти(ВыборкаПисьма.Ссылка); + Если ИндексЭлементаМассиваКУдалению <> Неопределено Тогда + МассивПисем.Удалить(ИндексЭлементаМассиваКУдалению); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + Для каждого СтрокаТаблицы Из ТаблицаСоответствий Цикл + ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма( + СтрокаТаблицы.Письмо,СтрокаТаблицы.Папка); + КонецЦикла; + + Если ТаблицаСоответствий.Количество() > 0 Тогда + ТекстСообщения = НСтр("ru = 'Перенос писем в папки выполнен.'"); + Иначе + ТекстСообщения = НСтр("ru = 'Ни одно письмо не было перенесено'"); + КонецЕсли; + + ПоместитьВоВременноеХранилище(ТекстСообщения, АдресХранилища); + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl index 78085d425..9a7e2532a 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl @@ -1,6 +1,12 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ПриЗаписи(Отказ) + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + Если НЕ Взаимодействия.ПользовательЯвляетсяОтветственнымЗаВедениеПапок(Владелец) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Данная операция досупна только ответственному за ведение папок для данной учетной записи'"), Ссылка,,,Отказ); diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Templates/СхемаПравилаОбработкиЭлектроннойПочты/Template.dcs b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Templates/СхемаПравилаОбработкиЭлектроннойПочты/Template.dcs index f55e3dd64..a8f017b4b 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Templates/СхемаПравилаОбработкиЭлектроннойПочты/Template.dcs +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Templates/СхемаПравилаОбработкиЭлектроннойПочты/Template.dcs @@ -37,33 +37,41 @@ <field>ТипПисьма</field> </field> <dataSource>ИсточникДанных1</dataSource> - <query>ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - ЭлектронноеПисьмоВходящее.Ссылка, - ВЫРАЗИТЬ(ЭлектронноеПисьмоВходящее.Тема КАК СТРОКА(1024)) КАК Тема, - ЭлектронноеПисьмоВходящее.ОтправительКонтакт, - ЭлектронноеПисьмоВходящее.ОтправительАдрес КАК АдресЭлектроннойПочтыОтправителя, - ПредметыПапкиВзаимодействий.Предмет, - ТИПЗНАЧЕНИЯ(ЭлектронноеПисьмоВходящее.Ссылка) КАК ТипПисьма + <query>ВЫБРАТЬ РАЗРЕШЕННЫЕ + ВложенныйЗапрос.Ссылка, + ВложенныйЗапрос.Тема, + ВложенныйЗапрос.ОтправительКонтакт, + ВложенныйЗапрос.АдресЭлектроннойПочтыОтправителя, + ВложенныйЗапрос.Предмет, + ВложенныйЗапрос.ТипПисьма ИЗ - РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее - ПО ПредметыПапкиВзаимодействий.Взаимодействие = ЭлектронноеПисьмоВходящее.Ссылка - -ОБЪЕДИНИТЬ ВСЕ - -ВЫБРАТЬ - ЭлектронноеПисьмоИсходящее.Ссылка, - ВЫРАЗИТЬ(ЭлектронноеПисьмоИсходящее.Тема КАК СТРОКА(1024)), - NULL, - УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты, - ПредметыПапкиВзаимодействий.Предмет, - ТИПЗНАЧЕНИЯ(ЭлектронноеПисьмоИсходящее.Ссылка) -ИЗ - Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее - ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты - ПО ЭлектронноеПисьмоИсходящее.УчетнаяЗапись = УчетныеЗаписиЭлектроннойПочты.Ссылка - ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - ПО ПредметыПапкиВзаимодействий.Взаимодействие = ЭлектронноеПисьмоИсходящее.Ссылка</query> + (ВЫБРАТЬ РАЗЛИЧНЫЕ + ЭлектронноеПисьмоВходящее.Ссылка КАК Ссылка, + ВЫРАЗИТЬ(ЭлектронноеПисьмоВходящее.Тема КАК СТРОКА(1024)) КАК Тема, + ЭлектронноеПисьмоВходящее.ОтправительКонтакт КАК ОтправительКонтакт, + ЭлектронноеПисьмоВходящее.ОтправительАдрес КАК АдресЭлектроннойПочтыОтправителя, + ПредметыПапкиВзаимодействий.Предмет КАК Предмет, + ТИПЗНАЧЕНИЯ(ЭлектронноеПисьмоВходящее.Ссылка) КАК ТипПисьма + ИЗ + Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее + {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + ПО (ПредметыПапкиВзаимодействий.Взаимодействие = ЭлектронноеПисьмоВходящее.Ссылка)} + + ОБЪЕДИНИТЬ ВСЕ + + ВЫБРАТЬ + ЭлектронноеПисьмоИсходящее.Ссылка, + ВЫРАЗИТЬ(ЭлектронноеПисьмоИсходящее.Тема КАК СТРОКА(1024)), + ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка), + УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты, + ПредметыПапкиВзаимодействий.Предмет, + ТИПЗНАЧЕНИЯ(ЭлектронноеПисьмоИсходящее.Ссылка) + ИЗ + Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее + {ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + ПО ЭлектронноеПисьмоИсходящее.УчетнаяЗапись = УчетныеЗаписиЭлектроннойПочты.Ссылка + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + ПО (ПредметыПапкиВзаимодействий.Взаимодействие = ЭлектронноеПисьмоИсходящее.Ссылка)}) КАК ВложенныйЗапрос</query> </dataSet> <settingsVariant> <dcsset:name>Основной</dcsset:name> diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ПравилаОбработкиЭлектроннойПочты.mdo b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ПравилаОбработкиЭлектроннойПочты.mdo index 67c04992a..654e39ad6 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ПравилаОбработкиЭлектроннойПочты.mdo +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ПравилаОбработкиЭлектроннойПочты.mdo @@ -118,7 +118,6 @@ <choiceMode>BothWays</choiceMode> <defaultObjectForm>Catalog.ПравилаОбработкиЭлектроннойПочты.Form.ФормаЭлемента</defaultObjectForm> <defaultListForm>Catalog.ПравилаОбработкиЭлектроннойПочты.Form.ФормаСписка</defaultListForm> - <defaultChoiceForm>Catalog.ПравилаОбработкиЭлектроннойПочты.Form.ПрименениеПравил</defaultChoiceForm> <attributes uuid="bbaad46d-f60d-49e6-a077-075366bca47e"> <name>КомпоновщикНастроек</name> <synonym> @@ -212,7 +211,7 @@ <name>ПрименениеПравил</name> <synonym> <key>ru</key> - <value>Применение правил</value> + <value>Применение правил обработки электронной почты</value> </synonym> <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..c0783da53 --- /dev/null +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,612 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>ГруппаОсновныеРеквизиты</name> + <id>7</id> + <items xsi:type="form:FormField"> + <name>Наименование</name> + <id>3</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.Description</segments> + </dataPath> + <extendedTooltip> + <name>НаименованиеРасширеннаяПодсказка</name> + <id>19</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>НаименованиеКонтекстноеМеню</name> + <id>4</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>Код</name> + <id>14</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.Code</segments> + </dataPath> + <extendedTooltip> + <name>КодРасширеннаяПодсказка</name> + <id>21</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>КодКонтекстноеМеню</name> + <id>15</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>НомерТекущегоГода</name> + <id>8</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>НомерТекущегоГода</segments> + </dataPath> + <handlers> + <event>OnChange</event> + <name>НомерТекущегоГодаПриИзменении</name> + </handlers> + <extendedTooltip> + <name>НомерТекущегоГодаРасширеннаяПодсказка</name> + <id>23</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>НомерТекущегоГодаКонтекстноеМеню</name> + <id>9</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <spinButton>true</spinButton> + <editFormat> + <key>ru</key> + <value>ЧГ=</value> + </editFormat> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <minValue xsi:type="core:NumberValue"> + <value>1900</value> + </minValue> + <textSize>Normal</textSize> + </extInfo> + </items> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Основные реквизиты</value> + + + ru + Основные реквизиты + + + ГруппаОсновныеРеквизитыРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Календарь + 5 + true + true + + true + + + Календарь + + None + + КалендарьРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + КалендарьКонтекстноеМеню + 6 + + КалендарьКонтекстноеМенюИзменитьДень + 10 + true + true + + true + + + КалендарьКонтекстноеМенюИзменитьДеньРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + Form.Command.ИзменитьДень + Normal + Auto + true + true + UserCmds + Auto + + + КалендарьКонтекстноеМенюПеренестиДень + 13 + true + true + + true + + + КалендарьКонтекстноеМенюПеренестиДеньРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.Command.ПеренестиДень + Normal + Auto + true + true + UserCmds + Auto + + true + + CalendarField + Enter + true + Left + true + + + OnPeriodOutput + КалендарьПриВыводеПериода + + 70 + true + 21 + true + true + true + true + + + 1 + + 4 + 3 + + + + ФормаКоманднаяПанель + -1 + + ФормаИзменитьДень + 11 + true + true + + true + + + ФормаИзменитьДеньРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + Form.Command.ИзменитьДень + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПеренестиВыходнойДень + 12 + true + true + + true + + + ФормаПеренестиВыходнойДеньРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + Form.Command.ПеренестиДень + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + CatalogObject.ПроизводственныеКалендари + + + true + + + true + +
    true
    + true +
    + + Календарь + + <key>ru</key> + <value>Календарь</value> + + 2 + + Date + + Date + + + + true + + + true + + + + НомерТекущегоГода + + <key>ru</key> + <value>Год</value> + + 3 + + Number + + 4 + true + + + + true + + + true + + ShowError + + + НомерПредыдущегоГода + + <key>ru</key> + <value>Номер предыдущего года</value> + + 4 + + Number + + 4 + true + + + + true + + + true + + + + ДанныеПроизводственногоКалендаря + + <key>ru</key> + <value>Данные производственного календаря</value> + + 5 + + ValueTable + + + true + + + true + + + Дата + + <key>ru</key> + <value>Дата</value> + + 1 + + Date + + Date + + + + true + + + true + + + + ВидДня + + <key>ru</key> + <value>Вид дня</value> + + 2 + + EnumRef.ВидыДнейПроизводственногоКалендаря + + + true + + + true + + + + + ЦветаВидовДней + + <key>ru</key> + <value>Цвета видов дней</value> + + 6 + + + true + + + true + + + + СписокВидовДня + + <key>ru</key> + <value>Список видов дня</value> + + 8 + + ValueList + + + true + + + true + + + + + + + ЦветОформленияДняПоУмолчанию + + <key>ru</key> + <value>Цвет оформления дня по умолчанию</value> + + 7 + + + true + + + true + + + + ВидыДней + + <key>ru</key> + <value>Виды дней</value> + + 9 + + + true + + + true + + + + ИзменитьДень + + <key>ru</key> + <value>Изменить день</value> + + 1 + + ru + Изменить день + + + true + + + + ИзменитьДень + + + true + Auto + Auto + + + ПеренестиДень + + <key>ru</key> + <value>Перенести день</value> + + 2 + + ru + Перенести день + + + true + + + + ПеренестиДень + + + true + Auto + Auto + + + + + InformationRegister.СвязиПоставляемыхДанных.StandardCommand.OpenByValue.ЭлементОбщихДанных + + + + + + + + OnReadAtServer + ПриЧтенииНаСервере + + + OnWriteAtServer + ПриЗаписиНаСервере + + +
    diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..c1f78beb0 --- /dev/null +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,219 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Объект.Ссылка.Пустая() Тогда + ЗаполнитьФормуПоОбъекту(Параметры.ЗначениеКопирования); + КонецЕсли; + + ЦветаВидовДней = Новый ФиксированноеСоответствие(Справочники.ПроизводственныеКалендари.ЦветаОформленияВидовДнейПроизводственногоКалендаря()); + + ЦветОформленияДняПоУмолчанию = ЦветаВидовДней.Получить(Перечисления.ВидыДнейПроизводственногоКалендаря.ПустаяСсылка()); + + СписокВидовДня = Справочники.ПроизводственныеКалендари.СписокВидовДня(); + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + ЗаполнитьФормуПоОбъекту(); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Перем НомерГода; + + Если Не ПараметрыЗаписи.Свойство("НомерГода", НомерГода) Тогда + НомерГода = НомерТекущегоГода; + КонецЕсли; + + ЗаписатьДанныеПроизводственногоКалендаря(НомерГода, ТекущийОбъект); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ + +&НаКлиенте +Процедура НомерТекущегоГодаПриИзменении(Элемент) + + Если Модифицированность Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Записать измененные данные за %1 год?'"), + Формат(НомерПредыдущегоГода, "ЧГ=0")); + + Если Вопрос(ТекстСообщения, РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда + Если Объект.Ссылка.Пустая() Тогда + Записать(Новый Структура("НомерГода", НомерПредыдущегоГода)); + Иначе + ЗаписатьДанныеПроизводственногоКалендаря(НомерПредыдущегоГода); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ЗаполнитьФормуПоОбъекту(); + + Модифицированность = Ложь; + + Элементы.Календарь.Обновить(); + +КонецПроцедуры + +&НаКлиенте +Процедура КалендарьПриВыводеПериода(Элемент, ОформлениеПериода) + + Для Каждого СтрокаОформленияПериода Из ОформлениеПериода.Даты Цикл + ЦветОформленияДня = ЦветаВидовДней.Получить(ВидыДней.Получить(СтрокаОформленияПериода.Дата)); + СтрокаОформленияПериода.ЦветТекста = ?(ЦветОформленияДня = Неопределено, ЦветОформленияДняПоУмолчанию, ЦветОформленияДня); + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ИзменитьДень(Команда) + + ВыделенныеДаты = Элементы.Календарь.ВыделенныеДаты; + + Если ВыделенныеДаты.Количество() > 0 И Год(ВыделенныеДаты[0]) = НомерТекущегоГода Тогда + ВыбранныйЭлемент = ВыбратьИзСписка(СписокВидовДня, , СписокВидовДня.НайтиПоЗначению(ВидыДней.Получить(ВыделенныеДаты[0]))); + Если ВыбранныйЭлемент <> Неопределено Тогда + ИзменитьВидыДней(ВыделенныеДаты, ВыбранныйЭлемент.Значение); + Элементы.Календарь.Обновить(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПеренестиДень(Команда) + + ВыделенныеДаты = Элементы.Календарь.ВыделенныеДаты; + + Если ВыделенныеДаты.Количество() = 0 Или Год(ВыделенныеДаты[0]) <> НомерТекущегоГода Тогда + Возврат; + КонецЕсли; + + ПереносимыйДень = ВыделенныеДаты[0]; + ВидДня = ВидыДней.Получить(ПереносимыйДень); + + ПараметрыВыбораДаты = Новый Структура; + ПараметрыВыбораДаты.Вставить("НачальноеЗначение", ПереносимыйДень); + ПараметрыВыбораДаты.Вставить("НачалоПериодаОтображения", НачалоГода(Календарь)); + ПараметрыВыбораДаты.Вставить("КонецПериодаОтображения", КонецГода(Календарь)); + ПараметрыВыбораДаты.Вставить("Заголовок", НСтр("ru = 'Выбор даты переноса'")); + ПараметрыВыбораДаты.Вставить("ПоясняющийТекст", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выберите дату, на которую будет осуществлен перенос дня %1 (%2)'"), + Формат(ПереносимыйДень, "ДФ='д ММММ'"), + ВидДня)); + + ВыбраннаяДата = ОткрытьФормуМодально("ОбщаяФорма.ВыборДаты", ПараметрыВыбораДаты); + + Если ВыбраннаяДата <> Неопределено Тогда + ПеренестиВидДня(ПереносимыйДень, ВыбраннаяДата, ВидДня); + Элементы.Календарь.Обновить(); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Функция ВидыДнейПроизводственногоКалендаря() + + ВидыДнейПроизводственногоКалендаря = Новый Соответствие; + + Для Каждого СтрокаТаблицы Из ДанныеПроизводственногоКалендаря Цикл + ВидыДнейПроизводственногоКалендаря.Вставить(СтрокаТаблицы.Дата, СтрокаТаблицы.ВидДня); + КонецЦикла; + + Возврат ВидыДнейПроизводственногоКалендаря; + +КонецФункции + +&НаСервере +Процедура ПрочитатьДанныеПроизводственногоКалендаря(ПроизводственныйКалендарь, НомерГода) + + // Загрузка данных производственного календаря за указанный год + + ДанныеПроизводственногоКалендаря.Загрузить(Справочники.ПроизводственныеКалендари.ДанныеПроизводственногоКалендаря(ПроизводственныйКалендарь, НомерГода)); + + ВидыДней = Новый ФиксированноеСоответствие(ВидыДнейПроизводственногоКалендаря()); + +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьДанныеПроизводственногоКалендаря(Знач НомерГода, Знач ТекущийОбъект = Неопределено) + + // Запись данных производственного календаря за указанный год + + Если ТекущийОбъект = Неопределено Тогда + ТекущийОбъект = РеквизитФормыВЗначение("Объект"); + КонецЕсли; + + Справочники.ПроизводственныеКалендари.ЗаписатьДанныеПроизводственногоКалендаря(ТекущийОбъект.Ссылка, НомерГода, ДанныеПроизводственногоКалендаря); + +КонецПроцедуры + +&НаСервере +Процедура ИзменитьВидыДней(ДатыДней, ВидДня) + + ВидыДнейПроизводственногоКалендаря = Новый Соответствие; + Для Каждого КлючИЗначение Из ВидыДней Цикл + ВидыДнейПроизводственногоКалендаря.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + + Для Каждого ВыбраннаяДата Из ДатыДней Цикл + НайденныеСтроки = ДанныеПроизводственногоКалендаря.НайтиСтроки(Новый Структура("Дата", ВыбраннаяДата)); + Если НайденныеСтроки.Количество() = 0 Тогда + СтрокаДанных = ДанныеПроизводственногоКалендаря.Добавить(); + СтрокаДанных.Дата = ВыбраннаяДата; + Иначе + СтрокаДанных = НайденныеСтроки[0]; + КонецЕсли; + СтрокаДанных.ВидДня = ВидДня; + ВидыДнейПроизводственногоКалендаря.Вставить(ВыбраннаяДата, ВидДня); + КонецЦикла; + + ВидыДней = Новый ФиксированноеСоответствие(ВидыДнейПроизводственногоКалендаря); + +КонецПроцедуры + +&НаСервере +Процедура ПеренестиВидДня(ПереносимыйДень, ДатаПереноса, ВидДня) + + ВидДняДатыПереноса = ВидыДней.Получить(ДатаПереноса); + + ИзменитьВидыДней(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ДатаПереноса), ВидДня); + ИзменитьВидыДней(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ПереносимыйДень), ВидДняДатыПереноса); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьФормуПоОбъекту(ЗначениеКопирования = Неопределено) + + Если НомерТекущегоГода = 0 Тогда + НомерТекущегоГода = Год(ТекущаяДатаСеанса()); + КонецЕсли; + НомерПредыдущегоГода = НомерТекущегоГода; + + Элементы.Календарь.НачалоПериодаОтображения = Дата(НомерТекущегоГода, 1, 1); + Элементы.Календарь.КонецПериодаОтображения = Дата(НомерТекущегоГода, 12, 31); + + Если ЗначениеЗаполнено(ЗначениеКопирования) Тогда + СсылкаНаКалендарь = ЗначениеКопирования; + Иначе + СсылкаНаКалендарь = Объект.Ссылка; + КонецЕсли; + + ПрочитатьДанныеПроизводственногоКалендаря(СсылкаНаКалендарь, НомерТекущегоГода); + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl new file mode 100644 index 000000000..76846d91f --- /dev/null +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl @@ -0,0 +1,133 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Функция читает данные производственного календаря из регистра +// +// Параметры +// ПроизводственныйКалендарь - Ссылка на текущий элемент справочника +// НомерГода - Номер года, за который необходимо прочитать производственный календарь +// +// Возвращаемое значение +// ДанныеПроизводственногоКалендаря - таблица значений, в которой хранятся сведения о виде дня на каждую дату календаря +// +Функция ДанныеПроизводственногоКалендаря(ПроизводственныйКалендарь, НомерГода) Экспорт + + Запрос = Новый Запрос; + + Запрос.УстановитьПараметр("ПроизводственныйКалендарь", ПроизводственныйКалендарь); + Запрос.УстановитьПараметр("ТекущийГод", НомерГода); + Запрос.Текст = + "ВЫБРАТЬ + | ДанныеПроизводственногоКалендаря.Дата, + | ДанныеПроизводственногоКалендаря.ВидДня + |ИЗ + | РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря + |ГДЕ + | ДанныеПроизводственногоКалендаря.Год = &ТекущийГод + | И ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь = &ПроизводственныйКалендарь"; + + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + +// Процедура записывает данные производственного календаря в регистр +// +// Параметры +// ПроизводственныйКалендарь - Ссылка на текущий элемент справочника +// НомерГода - Номер года, за который необходимо записать производственный календарь +// ДанныеПроизводственногоКалендаря - таблица значений, в которой хранятся сведения о виде дня на каждую дату календаря +// +// Возвращаемое значение +// Нет +// +Процедура ЗаписатьДанныеПроизводственногоКалендаря(ПроизводственныйКалендарь, НомерГода, ДанныеПроизводственногоКалендаря) Экспорт + + НаборЗаписей = РегистрыСведений.ДанныеПроизводственногоКалендаря.СоздатьНаборЗаписей(); + + Для Каждого КлючИЗначение Из ДанныеПроизводственногоКалендаря Цикл + ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), КлючИЗначение); + КонецЦикла; + + ЗначенияОтбора = Новый Структура("ПроизводственныйКалендарь, Год", ПроизводственныйКалендарь, НомерГода); + + Для Каждого КлючИЗначение Из ЗначенияОтбора Цикл + НаборЗаписей.Отбор[КлючИЗначение.Ключ].Установить(КлючИЗначение.Значение); + КонецЦикла; + + Для Каждого СтрокаНабора Из НаборЗаписей Цикл + ЗаполнитьЗначенияСвойств(СтрокаНабора, ЗначенияОтбора); + КонецЦикла; + + НаборЗаписей.Записать(Истина); + +КонецПроцедуры + +// Функция определяет соответствие видов дня производственного календаря и цвета оформления +// этого дня в поле календаря +// +// Возвращаемое значение +// ЦветаОформления - соответствие видов дня и цветов оформления +// +Функция ЦветаОформленияВидовДнейПроизводственногоКалендаря() Экспорт + + ЦветаОформления = Новый Соответствие; + + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.ПустаяСсылка(), WebЦвета.Красный); + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий, WebЦвета.Черный); + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота, WebЦвета.ТемноКрасный); + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье, WebЦвета.Красный); + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный, WebЦвета.ТемноСиний); + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник, WebЦвета.Фиолетовый); + + Возврат ЦветаОформления; + +КонецФункции + +// Функция составляет список всевозможных видов дней производственного календаря +// по метаданным перечисления ВидыДнейПроизводственногоКалендаря +// +// Возвращаемое значение +// СписокВидовДня - список значений, содержащий значение перечисления +// и его синоним в качестве представления +// +Функция СписокВидовДня() Экспорт + + СписокВидовДня = Новый СписокЗначений; + + Для Каждого МетаданныеВидаДней Из Метаданные.Перечисления.ВидыДнейПроизводственногоКалендаря.ЗначенияПеречисления Цикл + СписокВидовДня.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря[МетаданныеВидаДней.Имя], МетаданныеВидаДней.Синоним); + КонецЦикла; + + Возврат СписокВидовДня; + +КонецФункции + +// Функция составляет массив доступных производственных календарей +// для использования, например, в качестве шаблона +// +Функция СписокПроизводственныхКалендарей() Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПроизводственныеКалендари.Ссылка + |ИЗ + | Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари + |ГДЕ + | (НЕ ПроизводственныеКалендари.ПометкаУдаления)"); + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + ВызватьИсключение НСтр("ru = 'Шаблоны календарей (Производственные календари) не обнаружены.'"); + КонецЕсли; + + СписокПроизводственныхКалендарей = Новый Массив; + + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + СписокПроизводственныхКалендарей.Добавить(Выборка.Ссылка); + КонецЦикла; + + Возврат СписокПроизводственныхКалендарей; + +КонецФункции \ No newline at end of file diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Templates/ПроизводственныеКалендари/Template.txt b/SSL/src/Catalogs/ПроизводственныеКалендари/Templates/ПроизводственныеКалендари/Template.txt new file mode 100644 index 000000000..372bd1eb1 --- /dev/null +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Templates/ПроизводственныеКалендари/Template.txt @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ПроизводственныеКалендари.mdo b/SSL/src/Catalogs/ПроизводственныеКалендари/ПроизводственныеКалендари.mdo new file mode 100644 index 000000000..094dc5763 --- /dev/null +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ПроизводственныеКалендари.mdo @@ -0,0 +1,131 @@ + + + + + + + + + + ПроизводственныеКалендари + + 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 + + + + DontUse + Managed + Use + + ru + Производственный календарь + + 2 + true + 3 + 100 + String + Variable + true + AsDescription + InDialog + true + BothWays + Catalog.ПроизводственныеКалендари.Form.ФормаЭлемента + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + + + ПроизводственныеКалендари + + ru + Производственные календари + + TextDocument + + diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index 3eb961fec..360d5fa46 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -2,10 +2,13 @@ - false Ссылка - NotEqual - Справочник.ПрофилиГруппДоступа.Администратор + NotInList + + + -1 + + Inaccessible false diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl index 1dacbc759..e5dde8a4a 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -1,17 +1,17 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Список.Параметры.УстановитьЗначениеПараметра("РежимВыбораТолькоГрупп", Параметры.РежимВыбора И Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы); + СписокНедоступныхПрофилей = Новый СписокЗначений; + Если Параметры.РежимВыбора Тогда + СписокНедоступныхПрофилей.Добавить(Справочники.ПрофилиГруппДоступа.Администратор); // Отбор не помеченных на удаление - Список.Отбор.Элементы[0].Использование = Истина; Список.Отбор.Элементы[1].Использование = Истина; Элементы.Список.РежимВыбора = Истина; @@ -33,5 +33,6 @@ КонецЕсли; КонецЕсли; + Список.Отбор.Элементы[0].ПравоеЗначение = СписокНедоступныхПрофилей; + КонецПроцедуры - diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form index f2301279e..5b399d596 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form @@ -2042,6 +2042,10 @@ OnCreateAtServer ПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + BeforeLoadDataFromSettingsAtServer ПриЗагрузкеДанныхИзНастроекНаСервере @@ -2625,6 +2629,23 @@ true + + ТребуетсяПроверитьЗаполнение + + <key>ru</key> + <value>Требуется проверить заполнение</value> + + 8 + + Boolean + + + true + + + true + + ВосстановитьПоНачальномуЗаполнению diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl index 217567434..d5076102c 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl @@ -1,7 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -114,18 +112,23 @@ &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) - ПроверкаЗаполненияВидовИЗначенийДоступа(Отказ); + ТребуетсяПроверитьЗаполнение = Истина; - Если НЕ Отказ - И ЗначениеЗаполнено(Объект.Ссылка) + Если ЗначениеЗаполнено(Объект.Ссылка) И ТребуетсяОбновитьГруппыДоступаПрофиля Тогда - // - КодОтвета = Вопрос(ТекстВопросаОбновитьГруппыДоступаПрофиля(), РежимДиалогаВопрос.ДаНетОтмена, , КодВозвратаДиалога.Нет); - Если КодОтвета = КодВозвратаДиалога.Отмена Тогда + + Если ПроверитьЗаполнение() Тогда + ТребуетсяПроверитьЗаполнение = Ложь; + + КодОтвета = Вопрос(ТекстВопросаОбновитьГруппыДоступаПрофиля(), РежимДиалогаВопрос.ДаНетОтмена, , КодВозвратаДиалога.Нет); + Если КодОтвета = КодВозвратаДиалога.Отмена Тогда + Отказ = Истина; + Возврат; + ИначеЕсли КодОтвета = КодВозвратаДиалога.Да Тогда + ПараметрыЗаписи.Вставить("ОбновитьГруппыДоступаПрофиля"); + КонецЕсли; + Иначе Отказ = Истина; - Возврат; - ИначеЕсли КодОтвета = КодВозвратаДиалога.Да Тогда - ПараметрыЗаписи.Вставить("ОбновитьГруппыДоступаПрофиля"); КонецЕсли; КонецЕсли; @@ -143,10 +146,6 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Если ТекущийОбъект.ДополнительныеСвойства.Свойство("ЕстьОшибки") Тогда - ПараметрыЗаписи.Вставить("ЕстьОшибки"); - КонецЕсли; - Если ТекущийОбъект.ДополнительныеСвойства.Свойство("ПерсональныеГруппыДоступаСОбновленнымНаименованием") Тогда ПараметрыЗаписи.Вставить("ПерсональныеГруппыДоступаСОбновленнымНаименованием", ТекущийОбъект.ДополнительныеСвойства.ПерсональныеГруппыДоступаСОбновленнымНаименованием); КонецЕсли; @@ -158,22 +157,122 @@ &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - Если ПараметрыЗаписи.Свойство("ЕстьОшибки") Тогда - Предупреждение(НСтр("ru = 'При записи возникли ошибки (см. журнал регистрации)'")); - КонецЕсли; - ОбъектЗаписывался = Истина; ТребуетсяОбновитьГруппыДоступаПрофиля = Ложь; + Элементы.ОписаниеПоставляемогоПрофиля.Доступность = НЕ Объект.ПоставляемыйПрофильИзменен; + + Оповестить("Запись_ПрофилиГруппДоступа", Новый Структура, Объект.Ссылка); + Если ПараметрыЗаписи.Свойство("ПерсональныеГруппыДоступаСОбновленнымНаименованием") Тогда + ОповеститьОбИзменении(Тип("СправочникСсылка.ГруппыДоступа")); Для каждого ПерсональнаяГруппаДоступа Из ПараметрыЗаписи.ПерсональныеГруппыДоступаСОбновленнымНаименованием Цикл - ОповеститьОбИзменении(ПерсональнаяГруппаДоступа); + Оповестить("Запись_ГруппыДоступа", Новый Структура, ПерсональнаяГруппаДоступа); КонецЦикла; КонецЕсли; - Оповестить("ИзмененПрофильГруппДоступа", Объект.Ссылка); +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) - Элементы.ОписаниеПоставляемогоПрофиля.Доступность = НЕ Объект.ПоставляемыйПрофильИзменен; + Если НЕ ТребуетсяПроверитьЗаполнение Тогда + ПроверяемыеРеквизиты.Очистить(); + Возврат; + КонецЕсли; + + ПроверенныеРеквизитыОбъекта = Новый Массив; + Ошибки = Неопределено; + + // Проверка незаполненных и повторяющихся видов доступа. + ПроверенныеРеквизитыОбъекта.Добавить("ВидыДоступа.ВидДоступа"); + + Для каждого Строка Из Объект.ВидыДоступа Цикл + + // Проверка заполнения вида доступа. + Если НЕ ЗначениеЗаполнено(Строка.ВидДоступа) Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.ВидыДоступа[%1].ВидДоступа", + НСтр("ru = 'Вид доступа не выбран.'"), + "ЗначенияДоступа", + Объект.ВидыДоступа.Индекс(Строка), + НСтр("ru = 'Вид доступа в строке %1 не выбран.'")); + КонецЕсли; + + // Проверка наличия повторяющихся видов доступа. + НайденныеВидыДоступа = Объект.ВидыДоступа.НайтиСтроки( + Новый Структура("ВидДоступа", Строка.ВидДоступа)); + + Если НайденныеВидыДоступа.Количество() > 1 Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.ВидыДоступа[%1].ВидДоступа", + НСтр("ru = 'Вид доступа повторяется.'"), + "ЗначенияДоступа", + Объект.ВидыДоступа.Индекс(Строка), + НСтр("ru = 'Вид доступа в строке %1 повторяется.'")); + КонецЕсли; + КонецЦикла; + + // Проверка незаполненных и повторяющихся значений доступа. + ПроверенныеРеквизитыОбъекта.Добавить("ЗначенияДоступа.ВидДоступа"); + ПроверенныеРеквизитыОбъекта.Добавить("ЗначенияДоступа.ЗначениеДоступа"); + + НомерСтрокиВидаДоступа = Объект.ВидыДоступа.Количество()-1; + + Пока НЕ Отказ И НомерСтрокиВидаДоступа >= 0 Цикл + ТекущаяСтрокаВидаДоступа = Объект.ВидыДоступа.Получить(НомерСтрокиВидаДоступа); + + ЗначенияДоступаВидаДоступа = Объект.ЗначенияДоступа.НайтиСтроки( + Новый Структура("ВидДоступа", ТекущаяСтрокаВидаДоступа.ВидДоступа)); + НомерСтроки = ЗначенияДоступаВидаДоступа.Количество()-1; + + Пока НомерСтроки >= 0 Цикл + + ТекущаяСтрока = ЗначенияДоступаВидаДоступа.Получить(НомерСтроки); + + // Проверка заполнения значения. + Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.ЗначениеДоступа) Тогда + Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидаДоступа.ПолучитьИдентификатор(); + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.ЗначенияДоступа[%1].ЗначениеДоступа", + НСтр("ru = 'Значение не выбрано.'"), + "ЗначенияДоступа", + НомерСтроки, + НСтр("ru = 'Значение в строке %1 не выбрано.'")); + Отказ = Истина; + Прервать; + КонецЕсли; + + // Проверка наличия повторяющихся значений. + НайденныеЗначения = Объект.ЗначенияДоступа.НайтиСтроки( + Новый Структура("ВидДоступа, ЗначениеДоступа", ТекущаяСтрокаВидаДоступа.ВидДоступа, ТекущаяСтрока.ЗначениеДоступа)); + + Если НайденныеЗначения.Количество() > 1 Тогда + Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидаДоступа.ПолучитьИдентификатор(); + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.ЗначенияДоступа[%1].ЗначениеДоступа", + НСтр("ru = 'Значение повторяется.'"), + "ЗначенияДоступа", + НомерСтроки, + НСтр("ru = 'Значение в строке %1 повторяется.'")); + Отказ = Истина; + Прервать; + КонецЕсли; + + НомерСтроки = НомерСтроки - 1; + КонецЦикла; + + НомерСтрокиВидаДоступа = НомерСтрокиВидаДоступа - 1; + КонецЦикла; + + ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); + + ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Объект")); + ТекущийОбъект = РеквизитФормыВЗначение("Объект"); + ТекущийОбъект.ДополнительныеСвойства.Вставить("ПроверенныеРеквизитыОбъекта", ПроверенныеРеквизитыОбъекта); + Если НЕ ТекущийОбъект.ПроверитьЗаполнение() Тогда + Отказ = Истина; + КонецЕсли; КонецПроцедуры @@ -194,48 +293,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// - -&НаКлиенте -Процедура ВосстановитьПоНачальномуЗаполнению(Команда) - - Если Модифицированность ИЛИ ОбъектЗаписывался Тогда - Предупреждение(НСтр("ru = 'Для выполнения команды требуется переоткрыть форму.'")); - - Иначе - Ответ = Вопрос(НСтр("ru = 'Восстановить профиль по содержимому начального заполнения?'"), РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Да Тогда - // - КодОтвета = Вопрос(ТекстВопросаОбновитьГруппыДоступаПрофиля(), РежимДиалогаВопрос.ДаНетОтмена, , КодВозвратаДиалога.Нет); - // - Если КодОтвета <> КодВозвратаДиалога.Отмена Тогда - ОбновитьГруппыДоступа = (КодОтвета = КодВозвратаДиалога.Да); - УправлениеДоступом.НачальноеЗаполнениеПрофилейГруппДоступа(Объект.Ссылка, ОбновитьГруппыДоступа, Ложь); - Прочитать(); - РазвернутьПодсистемыРолей(); - Если ОбновитьГруппыДоступа Тогда - Текст = НСтр("ru = 'Профиль ""%1"" восстановлен по содержимому начального заполнения, группы доступа профиля обновлены.'"); - Иначе - Текст = НСтр("ru = 'Профиль ""%1"" восстановлен по содержимому начального заполнения, группы доступа профиля не обновлены.'"); - КонецЕсли; - ПоказатьОповещениеПользователя(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, Объект.Наименование)); - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОписаниеПоставляемогоПрофиля(Команда) - - ТекстовыйДокумент = Новый ТекстовыйДокумент; - ТекстовыйДокумент.УстановитьТекст(УправлениеДоступом.ОписаниеПоставляемогоПрофиля(Объект.Ссылка)); - ТекстовыйДокумент.ТолькоПросмотр = Истина; - ТекстовыйДокумент.Показать(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Описание поставляемого профиля ""%1""'"), Объект.Наименование)); - -КонецПроцедуры - +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ВидыДоступа &НаКлиенте Процедура ВидыДоступаПриИзменении(Элемент) @@ -276,6 +334,7 @@ КонецПроцедуры + &НаКлиенте Процедура ВидыДоступаВидДоступаПриИзменении(Элемент) @@ -342,6 +401,8 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ЗначенияДоступа &НаКлиенте Процедура ЗначенияДоступаПриИзменении(Элемент) @@ -474,7 +535,65 @@ КонецПроцедуры -//** Для работы интерфейса ролей +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Роли + +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей + +&НаКлиенте +Процедура РолиПометкаПриИзменении(Элемент) + + Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда + ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ВосстановитьПоНачальномуЗаполнению(Команда) + + Если Модифицированность ИЛИ ОбъектЗаписывался Тогда + Предупреждение(НСтр("ru = 'Для выполнения команды требуется переоткрыть форму.'")); + + Иначе + Ответ = Вопрос(НСтр("ru = 'Восстановить профиль по содержимому начального заполнения?'"), РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Да Тогда + // + КодОтвета = Вопрос(ТекстВопросаОбновитьГруппыДоступаПрофиля(), РежимДиалогаВопрос.ДаНетОтмена, , КодВозвратаДиалога.Нет); + // + Если КодОтвета <> КодВозвратаДиалога.Отмена Тогда + ОбновитьГруппыДоступа = (КодОтвета = КодВозвратаДиалога.Да); + УправлениеДоступом.НачальноеЗаполнениеПрофилейГруппДоступа(Объект.Ссылка, ОбновитьГруппыДоступа, Ложь); + Прочитать(); + РазвернутьПодсистемыРолей(); + Если ОбновитьГруппыДоступа Тогда + Текст = НСтр("ru = 'Профиль ""%1"" восстановлен по содержимому начального заполнения, группы доступа профиля обновлены.'"); + Иначе + Текст = НСтр("ru = 'Профиль ""%1"" восстановлен по содержимому начального заполнения, группы доступа профиля не обновлены.'"); + КонецЕсли; + ПоказатьОповещениеПользователя(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, Объект.Наименование)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОписаниеПоставляемогоПрофиля(Команда) + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(УправлениеДоступом.ОписаниеПоставляемогоПрофиля(Объект.Ссылка)); + ТекстовыйДокумент.ТолькоПросмотр = Истина; + ТекстовыйДокумент.Показать(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Описание поставляемого профиля ""%1""'"), Объект.Наименование)); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей &НаКлиенте Процедура ПоказатьТолькоВыбранныеРоли(Команда) @@ -498,15 +617,6 @@ КонецПроцедуры -&НаКлиенте -Процедура РолиПометкаПриИзменении(Элемент) - - Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда - ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура УстановитьФлажки(Команда) @@ -525,8 +635,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ИнициализацияФормы() @@ -550,75 +659,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПроверкаЗаполненияВидовИЗначенийДоступа(Отказ) - - // Проверка незаполненных и повторяющихся видов доступа. - НомерСтрокиВидовДоступа = Объект.ВидыДоступа.Количество()-1; - Пока НЕ Отказ И НомерСтрокиВидовДоступа >= 0 Цикл - - ТекущаяСтрокаВидовДоступа = Объект.ВидыДоступа.Получить(НомерСтрокиВидовДоступа); - - // Проверка заполнения значения. - Если НЕ ЗначениеЗаполнено(ТекущаяСтрокаВидовДоступа.ВидДоступа) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Вид доступа не заполнен.'"), - , - "Объект.ВидыДоступа[" + Формат(НомерСтрокиВидовДоступа, "ЧГ=0") + "].ВидДоступа", - , - Отказ); - Возврат; - КонецЕсли; - - // Проверка наличия повторяющихся значений. - НайденныеЗначения = Объект.ВидыДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущаяСтрокаВидовДоступа.ВидДоступа)); - Если НайденныеЗначения.Количество() > 1 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Вид доступа повторяется.'"), - , - "Объект.ВидыДоступа[" + Формат(НомерСтрокиВидовДоступа, "ЧГ=0") + "].ВидДоступа", - , - Отказ); - Возврат; - КонецЕсли; - - // Проверка незаполненных и повторяющихся видов доступа. - ЗначенияДоступаВидаДоступа = Объект.ЗначенияДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущаяСтрокаВидовДоступа.ВидДоступа)); - НомерСтроки = ЗначенияДоступаВидаДоступа.Количество()-1; - - Пока НЕ Отказ И НомерСтроки >= 0 Цикл - - ТекущаяСтрока = ЗначенияДоступаВидаДоступа.Получить(НомерСтроки); - - // Проверка заполнения значения. - Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.ЗначениеДоступа) Тогда - Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидовДоступа.ПолучитьИдентификатор(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Значение не заполнено.'"), - , - "Объект.ЗначенияДоступа[" + Формат(ТекущаяСтрока.НомерСтроки-1, "ЧГ=0") + "].ЗначениеДоступа", - , - Отказ); - Возврат; - КонецЕсли; - - // Проверка наличия повторяющихся значений. - НайденныеЗначения = Объект.ЗначенияДоступа.НайтиСтроки(Новый Структура("ВидДоступа, ЗначениеДоступа", ТекущаяСтрокаВидовДоступа.ВидДоступа, ТекущаяСтрока.ЗначениеДоступа)); - Если НайденныеЗначения.Количество() > 1 Тогда - Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидовДоступа.ПолучитьИдентификатор(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Значение повторяется.'"), - , - "Объект.ЗначенияДоступа[" + Формат(ТекущаяСтрока.НомерСтроки-1, "ЧГ=0") + "].ЗначениеДоступа", - , - Отказ); - Возврат; - КонецЕсли; - - НомерСтроки = НомерСтроки - 1; - КонецЦикла; - - НомерСтрокиВидовДоступа = НомерСтрокиВидовДоступа - 1; - КонецЦикла; - -КонецПроцедуры - &НаКлиентеНаСервереБезКонтекста Процедура ПриИзмененииТекущегоВидаДоступа(Знач Контекст) @@ -786,7 +826,6 @@ КонецФункции - &НаКлиенте Функция ТекстВопросаОбновитьГруппыДоступаПрофиля() @@ -797,7 +836,8 @@ |2. Добавить недостающие виды доступа.'"); КонецФункции -//** Для работы интерфейса ролей +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей &НаСервере Функция КоллекцияРолей(ТаблицаЗначенийДляЧтения = Ложь) @@ -916,8 +956,9 @@ ПодготовитьДеревоРолей(Строка.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли); Если Строка.ЭтоРоль Тогда - Если СкрытьРольПолныеПрава + Если СкрытьРольПолныеПрава И (ВРег(Строка.Имя) = ВРег("ПолныеПрава") ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы"))Тогда + Коллекция.Удалить(Индекс); Иначе Строка.НомерКартинки = 6; @@ -1072,3 +1113,4 @@ КонецЦикла; КонецПроцедуры + diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl index e828bf606..7530723f8 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl @@ -1,10 +1,16 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ -// Обработчик ПередЗаписью обновляет табличную часть ТаблицыРолей в соответствии с составом ролей. +// Обновляет табличную часть ТаблицыРолей в соответствии с составом ролей. // Перед обновлением, обработчик проверяет наличие ролей в конфигурации и // исключает из списка роль "Полные права". // Процедура ПередЗаписью(Отказ) + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + // Заполнение множества возможных пустых ссылок, используемых как типы ссылок. Если Ссылка = Справочники.ПрофилиГруппДоступа.Администратор Тогда ТипыСсылок.Загрузить(УправлениеДоступомСерверПовтИсп.ТипыСсылок()); @@ -12,10 +18,6 @@ ТипыСсылок.Очистить(); КонецЕсли; - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - Если НЕ ЭтоГруппа Тогда // Проверка наличия ролей в конфигурации. @@ -29,11 +31,9 @@ Ссылка, Роли[НомерСтроки].Роль), РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - Если НЕ ДополнительныеСвойства.Свойство("ЕстьОшибки") Тогда - ДополнительныеСвойства.Вставить("ЕстьОшибки"); - КонецЕсли; ИначеЕсли ВРег(Роли[НомерСтроки].Роль) = ВРег("ПолныеПрава") И - Ссылка <> Справочники.ПрофилиГруппДоступа.Администратор Тогда + Ссылка <> Справочники.ПрофилиГруппДоступа.Администратор Тогда + Роли.Удалить(НомерСтроки); ИначеЕсли ВРег(Роли[НомерСтроки].Роль) = ВРег("АдминистраторСистемы") И Ссылка <> Справочники.ПрофилиГруппДоступа.Администратор Тогда @@ -118,9 +118,8 @@ КонецПроцедуры -// Обработчик ПриЗаписи обновляет -// - РегистрСведений.ТаблицыГруппДоступа; -// - роли пользователей групп доступа с текущим профилем. +// Обновляет РегистрСведений.ТаблицыГруппДоступа и +// роли пользователей групп доступа с текущим профилем. // Процедура ПриЗаписи(Отказ) @@ -167,20 +166,23 @@ Запрос.УстановитьПараметр("Профиль", Ссылка); ПользователиПрофиля = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); - ЕстьОшибки = Ложь; - УправлениеДоступом.ОбновитьРолиПользователей(ПользователиПрофиля, ЕстьОшибки); - Если ЕстьОшибки И НЕ ДополнительныеСвойства.Свойство("ЕстьОшибки") Тогда - ДополнительныеСвойства.Вставить("ЕстьОшибки"); - КонецЕсли; + УправлениеДоступом.ОбновитьРолиПользователей(ПользователиПрофиля); КонецЕсли; КонецЕсли; КонецПроцедуры +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + + Если ДополнительныеСвойства.Свойство("ПроверенныеРеквизитыОбъекта") Тогда + ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива( + ПроверяемыеРеквизиты, ДополнительныеСвойства.ПроверенныеРеквизитыОбъекта); + КонецЕсли; + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Процедура ЗаполнитьТаблицыРолейПрофиляГруппДоступа // заполняет табличную часть ТаблицыРолей профиля групп доступа. @@ -225,3 +227,4 @@ КонецПроцедуры + diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo b/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo index 8ee740ab1..c710bc8e7 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo @@ -330,6 +330,7 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> <dataHistory>Use</dataHistory> <indexing>Index</indexing> <fullTextSearch>Use</fullTextSearch> @@ -349,6 +350,7 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> <linkByType> <field>Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа.Attribute.ВидДоступа</field> </linkByType> diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl new file mode 100644 index 000000000..df06f6198 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl @@ -0,0 +1,102 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(МассивРассылок, Параметры) + Если ТипЗнч(МассивРассылок) <> Тип("Массив") ИЛИ МассивРассылок.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ЭтаФорма = Параметры.Источник; + + ПредварительныеНастройки = Неопределено; + Если ЭтаФорма.ИмяФормы = "Справочник.РассылкиОтчетов.Форма.ФормаЭлемента" Тогда + ТекстСообщения = НСтр("ru = 'Выполняется рассылка отчетов'"); + + Объект = ЭтаФорма.Объект; + Если НЕ Объект.Подготовлена Тогда + Предупреждение(НСтр("ru = 'Рассылка не подготовлена'")); + Возврат; + КонецЕсли; + + Если Объект.ИспользоватьЭлектроннуюПочту Тогда + Получатели = РассылкаОтчетовКлиент.ВыбратьПолучателя(Объект, Истина, Истина); + Если Получатели = Неопределено Тогда + Возврат; + КонецЕсли; + ПредварительныеНастройки = Новый Структура("Получатели", Получатели); + КонецЕсли; + Иначе + ТекстСообщения = НСтр("ru = 'Выполняются рассылки отчетов'"); + КонецЕсли; + + Состояние(ТекстСообщения, , , ); + + ПараметрыВызоваСервера = Новый Структура("МассивРассылок, ПредварительныеНастройки", + МассивРассылок, + ПредварительныеНастройки + ); + + Результат = ВыполнитьРассылкиВФоновомЗадании(ПараметрыВызоваСервера, ЭтаФорма.УникальныйИдентификатор); + + Если Результат.Статус = "ВыполненоУспешно" Тогда + РассылкаОтчетовКлиент.ПоказатьРезультат(Результат.Детали); + ИначеЕсли Результат.Статус = "Исключение" Тогда + Предупреждение( + НСтр("ru = 'Рассылки не выполнены из-за ошибки, + |Подробности см. в журнале регистрации.'") + ); + ИначеЕсли Результат.Статус = "Выполняется" Тогда + ФормаДлительнойОперации = ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(ЭтаФорма, Результат.Детали.ИдентификаторЗадания); + + ПараметрыОбработчика = Неопределено; + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчика); + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчика); + + ЭтаФорма.ПараметрыФоновогоЗадания.Очистить(); + ЭтаФорма.ПараметрыФоновогоЗадания.Добавить(Результат.Детали.ИдентификаторЗадания); + ЭтаФорма.ПараметрыФоновогоЗадания.Добавить(Результат.Детали.АдресХранилища); + ЭтаФорма.ПараметрыФоновогоЗадания.Добавить(ПараметрыОбработчика); + ЭтаФорма.ПараметрыФоновогоЗадания.Добавить(ФормаДлительнойОперации); + + ЭтаФорма.ПодключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания", ПараметрыОбработчика.ТекущийИнтервал, Истина); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Функция ВыполнитьРассылкиВФоновомЗадании(ПараметрыВызоваСервера, Знач УникальныйИдентификатор) + Результат = Новый Структура("Статус, Детали"); + + Попытка + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + РезультатФоновогоЗадания = Новый Структура("ЗаданиеВыполнено, АдресХранилища"); + РезультатФоновогоЗадания.ЗаданиеВыполнено = Истина; + РезультатФоновогоЗадания.АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + + РассылкаОтчетов.ВыполнитьРассылкиВФоновомЗадании(ПараметрыВызоваСервера, РезультатФоновогоЗадания.АдресХранилища); + Иначе + РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "РассылкаОтчетов.ВыполнитьРассылкиВФоновомЗадании", + ПараметрыВызоваСервера, + НСтр("ru = 'Рассылки отчетов: Выполнение рассылок в фоне'") + ); + КонецЕсли; + + Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда + Результат.Статус = "ВыполненоУспешно"; // Не локализуется + Результат.Детали = ПолучитьИзВременногоХранилища(РезультатФоновогоЗадания.АдресХранилища); + Иначе + Результат.Статус = "Выполняется"; // Не локализуется + Результат.Детали = Новый Структура("ИдентификаторЗадания, АдресХранилища"); + ЗаполнитьЗначенияСвойств(Результат.Детали, РезультатФоновогоЗадания); + КонецЕсли; + Исключение + Результат.Статус = "Исключение"; // Не локализуется + КонецПопытки; + + Возврат Результат; +КонецФункции diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Commands/СобытияРассылки/CommandModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Commands/СобытияРассылки/CommandModule.bsl new file mode 100644 index 000000000..7343d34ce --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Commands/СобытияРассылки/CommandModule.bsl @@ -0,0 +1,49 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(Рассылка, Параметры) + // Получение даты последнего запуска + ПоследнийЗапуск = Неопределено; + Если Параметры.Источник.ИмяФормы = "Справочник.РассылкиОтчетов.Форма.ФормаСписка" Тогда + ДанныеСписка = Параметры.Источник.Элементы.Список.ТекущиеДанные; + Если ДанныеСписка <> Неопределено Тогда + ПоследнийЗапуск = ДанныеСписка.ПоследнийЗапуск; + КонецЕсли; + КонецЕсли; + Если ПоследнийЗапуск = Неопределено Тогда + ПоследнийЗапуск = ПоследнийЗапускРассылки(Рассылка); + КонецЕсли; + + // Параметры формы + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Данные", Рассылка); + Если ПоследнийЗапуск <> Неопределено Тогда + ПараметрыФормы.Вставить("ДатаНачала", ПоследнийЗапуск); + КонецЕсли; + + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ПараметрыФормы, Параметры.Источник, Параметры.Уникальность, Параметры.Окно); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Функция ПоследнийЗапускРассылки(Рассылка) + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Состояния.ПоследнийЗапуск + |ИЗ + | РегистрСведений.СостоянияРассылокОтчетов КАК Состояния + |ГДЕ + | Состояния.Рассылка = &Рассылка"; + Запрос.УстановитьПараметр("Рассылка", Рассылка); + + УстановитьПривилегированныйРежим(Истина); + Выборка = Запрос.Выполнить().Выбрать(); + УстановитьПривилегированныйРежим(Истина); + Результат = ?(Выборка.Следующий(), Выборка.ПоследнийЗапуск, Неопределено); + Возврат Результат; +КонецФункции + diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form new file mode 100644 index 000000000..5ac96c538 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form @@ -0,0 +1,547 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>ОсновныеПараметры</name> + <id>11</id> + <items xsi:type="form:FormField"> + <name>СерверИКаталог</name> + <id>9</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>СерверИКаталог</segments> + </dataPath> + <handlers> + <event>OnChange</event> + <name>СерверИКаталогПриИзменении</name> + </handlers> + <extendedTooltip> + <name>СерверИКаталогРасширеннаяПодсказка</name> + <id>22</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>СерверИКаталогКонтекстноеМеню</name> + <id>10</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>Порт</name> + <id>3</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Порт</segments> + </dataPath> + <extendedTooltip> + <name>ПортРасширеннаяПодсказка</name> + <id>24</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ПортКонтекстноеМеню</name> + <id>4</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <editFormat> + <key>ru</key> + <value>ЧН=0; ЧГ=0</value> + </editFormat> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Основные параметры</value> + + + ru + Основные параметры + + + ОсновныеПараметрыРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ДополнительныеПараметры + 12 + + Логин + 5 + true + true + + true + + + Логин + + + ЛогинРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ЛогинКонтекстноеМеню + 6 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Пароль + 7 + true + true + + true + + + Пароль + + + ПарольРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ПарольКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ПассивноеСоединение + 17 + true + true + + true + + + ПассивноеСоединение + + Right + + ПассивноеСоединениеРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ПассивноеСоединениеКонтекстноеМеню + 18 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Дополнительные параметры</value> + + + ru + Дополнительные параметры + + + ДополнительныеПараметрыРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаОК + 15 + true + true + + true + + + ФормаОКРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + ФормаЗаполнить + 14 + true + true + + true + + + ФормаЗаполнитьРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + Form.Command.Заполнить + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + 80 + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Сервер + + <key>ru</key> + <value>Сервер</value> + + 1 + + String + + 100 + + + + true + + + true + + + + Порт + + <key>ru</key> + <value>Порт</value> + + 2 + + Number + + 5 + + + + true + + + true + + + + Логин + + <key>ru</key> + <value>Логин</value> + + 3 + + String + + 50 + + + + true + + + true + + + + Пароль + + <key>ru</key> + <value>Пароль</value> + + 4 + + String + + 50 + + + + true + + + true + + + + ПассивноеСоединение + + <key>ru</key> + <value>Пассивное соединение</value> + + 5 + + Boolean + + + true + + + true + + + + Каталог + + <key>ru</key> + <value>Каталог</value> + + 6 + + String + + 200 + + + + true + + + true + + + + СерверИКаталог + + <key>ru</key> + <value>Сервер и каталог</value> + + 7 + + String + + 300 + + + + true + + + true + + + + Заполнить + + <key>ru</key> + <value>Заполнить</value> + + 1 + + ru + Заполнить + + + true + + + CommonPicture.ЗаполнитьФорму + + + + Заполнить + + + TextPicture + Auto + Auto + + + ОК + + <key>ru</key> + <value>ОК</value> + + 2 + + ru + ОК + + + true + + + StdPicture.ChooseValue + + + + ОК + + + TextPicture + Auto + Auto + + + + + + diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html new file mode 100644 index 000000000..c95cf5d96 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html @@ -0,0 +1,19 @@ + +

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

    +

    Реквизиты:

    +

    + + + + + +
    +
  • Сервер и каталог
  • Путь к FTP ресурсу в формате "ftp://сервер/каталог/".
    +
  • Порт
  • Порт FTP ресурса на сервере (по умолчанию 21).
    +
  • Логин
  • Имя пользователя для доступа к FTP.
    +
  • Пароль
  • Пароль пользователя для доступа к FTP.
    +
  • Пассивное соединение
  • Флажок использования пассивного соединения при подключении к серверу.

    Команды:

    +

    + +
    +
  • Заполнить
  • Позволят ввести все параметры одной строкой.
    \ No newline at end of file diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl new file mode 100644 index 000000000..249c846a4 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl @@ -0,0 +1,69 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ЭтаФорма, Параметры, "Сервер, Каталог, Порт, Логин, Пароль, ПассивноеСоединение"); + Если ЭтаФорма.Сервер = "" Тогда + ЭтаФорма.Сервер = "сервер"; + КонецЕсли; + Если ЭтаФорма.Каталог = "" Тогда + ЭтаФорма.Каталог = "/каталог/"; + КонецЕсли; + ВидимостьДоступность(ЭтаФорма); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура СерверИКаталогПриИзменении(Элемент) + ЗаполнитьЗначенияСвойств(ЭтаФорма, РассылкаОтчетовКлиентСервер.РазобратьFTPАдрес(СерверИКаталог), "Сервер, Каталог"); + ВидимостьДоступность(ЭтаФорма); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Заполнить(Команда) + Если Сервер = "" Тогда + ПолныйАдрес = НСтр("ru = 'ftp://логин:пароль@сервер:порт/каталог/'"); + Иначе + Если Логин = "" Тогда + ПолныйАдрес = "ftp://"+ Сервер +":"+ Формат(Порт, "ЧН=21; ЧГ=0") + Каталог; + Иначе + ПолныйАдрес = "ftp://"+ Логин +":"+ Пароль +"@"+ Сервер +":"+ Формат(Порт, "ЧН=0; ЧГ=0") + Каталог; + КонецЕсли; + КонецЕсли; + + Если ВвестиСтроку(ПолныйАдрес, НСтр("ru = 'Введите полный ftp адрес'")) Тогда + ЗаполнитьЗначенияСвойств(ЭтаФорма, РассылкаОтчетовКлиентСервер.РазобратьFTPАдрес(ПолныйАдрес)); + ВидимостьДоступность(ЭтаФорма); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОК(Команда) + ЗначениеВыбора = Новый Структура("Сервер, Каталог, Порт, Логин, Пароль, ПассивноеСоединение"); + ЗаполнитьЗначенияСвойств(ЗначениеВыбора, ЭтаФорма); + ОповеститьОВыборе(ЗначениеВыбора); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиентеНаСервереБезКонтекста +Процедура ВидимостьДоступность(ЭтаФорма, Изменения = "") + Если Прав(ЭтаФорма.Каталог, 1) <> "/" Тогда + ЭтаФорма.Каталог = ЭтаФорма.Каталог + "/"; + КонецЕсли; + ЭтаФорма.СерверИКаталог = "ftp://"+ ЭтаФорма.Сервер + ЭтаФорма.Каталог; +КонецПроцедуры + diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..784796455 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,20 @@ + + + + + ЭтоГруппа + Equal + true + + 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/ФормаВыбораГруппы/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Form.form new file mode 100644 index 000000000..b9f2838c1 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Form.form @@ -0,0 +1,292 @@ + + + + Список + 1 + true + true + + true + + + Список + + true + None + Create + + Наименование + 4 + true + true + + true + + + Список.Description + + true + + НаименованиеРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска + 11 + + СписокСтрокаПоискаРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 12 + true + + Список + + true + + + + СписокСостояниеПросмотра + 14 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 15 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 17 + + СписокУправлениеПоискомРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 18 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 10 + 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 + + ВыполнитьСейчас + 6 + true + + true + + + Items.Список.CurrentData.Ref + + + ВыполнитьСейчасРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + Catalog.РассылкиОтчетов.Command.ВыполнитьСейчас + Normal + Auto + true + true + UserCmds + Auto + + + СобытияРассылки + 7 + true + + true + + + Items.Список.CurrentData.Ref + + + СобытияРассылкиРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + Catalog.РассылкиОтчетов.Command.СобытияРассылки + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + Create + 50 + 10 + 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/ФормаВыбораГруппы/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Help/ru.html new file mode 100644 index 000000000..4333882a4 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Help/ru.html @@ -0,0 +1,2 @@ + +

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

    \ No newline at end of file diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Form.form new file mode 100644 index 000000000..b5c413780 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Form.form @@ -0,0 +1,128 @@ + + + + Наименование + 1 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 2 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Родитель + 3 + true + true + + true + + + Объект.Parent + + + РодительРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + РодительКонтекстноеМеню + 4 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + CatalogObject.РассылкиОтчетов + + + true + + + true + +
    true
    + true +
    + + + + + + Folders + +
    diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Help/ru.html new file mode 100644 index 000000000..33c24cc26 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Help/ru.html @@ -0,0 +1 @@ +Позволяет задать Наименование и Группу для группы рассылок отчетов. \ No newline at end of file diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Module.bsl new file mode 100644 index 000000000..b272437a0 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Module.bsl @@ -0,0 +1,17 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если Объект.Ссылка.Пустая() Тогда + Если Объект.Родитель = Справочники.РассылкиОтчетов.ЛичныеРассылки Тогда + Объект.Родитель = Справочники.РассылкиОтчетов.ПустаяСсылка(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..d93c4f1c2 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,37 @@ + + + + + false + ВыполнятьПоРасписанию + Equal + false + + + false + ПериодичностьРасписания + Equal + + + false + Подготовлена + Equal + false + + + false + Автор + Equal + + 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/ФормаСписка/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..a000a43f4 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form @@ -0,0 +1,910 @@ + + + + Список + 1 + true + true + + true + + + Список + + None + + Наименование + 6 + true + true + + true + + + Список.Description + + + НаименованиеРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 7 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ПоследнийЗапускСКартинкой + 31 + + Картинка + 32 + true + true + + true + + + Список.ИндексКартинкиПоследнегоЗапуска + + + КартинкаРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + КартинкаКонтекстноеМеню + 33 + true + + PictureField + Enter + Left + + 6 + true + true + true + + CommonPicture.СостояниеРассылкиОтчетов + + + + 1 + + + + + ПоследнийЗапуск + 24 + + <key>ru</key> + <value>Выполнена</value> + + true + true + + true + + + Список.ПоследнийЗапуск + + + ПоследнийЗапускРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + + ПоследнийЗапускКонтекстноеМеню + 25 + true + + LabelField + Enter + true + Left + true + + 10 + true + true + + + true + true + + true + + + <key>ru</key> + <value>Последний запуск с картинкой</value> + + + ru + Последний запуск с картинкой + + + ПоследнийЗапускСКартинкойРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + РасписаниеСКартинкой + 50 + + Расписание + 18 + + <key>ru</key> + <value>Расписание</value> + + true + true + + true + + + Список.ИндексКартинкиРасписания + + + РасписаниеРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + + РасписаниеКонтекстноеМеню + 19 + true + + PictureField + Enter + true + Left + true + + true + true + true + true + + StdPicture.SetTime + + + + 1 + + + + + ПериодичностьРасписания + 51 + true + true + + true + + + Список.ПериодичностьРасписания + + + ПериодичностьРасписанияРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + + ПериодичностьРасписанияКонтекстноеМеню + 52 + true + + LabelField + Enter + Left + + 10 + true + true + + + true + true + + true + + + <key>ru</key> + <value>Расписание с картинкой</value> + + + ru + Расписание с картинкой + + + РасписаниеСКартинкойРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + Автор + 12 + true + true + + true + + + Список.Автор + + + АвторРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 13 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Подготовлена + 14 + true + true + + true + + + Список.Подготовлена + + + ПодготовленаРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + ПодготовленаКонтекстноеМеню + 15 + true + + CheckBoxField + Enter + true + Left + true + + + + Состояние + 26 + true + true + + + Список.Состояние + + + СостояниеРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + + СостояниеКонтекстноеМеню + 27 + true + + LabelField + Enter + true + Left + true + + 15 + true + true + + + + Архивировать + 39 + true + true + + + Список.Архивировать + + + АрхивироватьРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + + АрхивироватьКонтекстноеМеню + 40 + true + + CheckBoxField + Enter + true + Left + true + + + + ТипПолучателейРассылки + 43 + true + true + + + Список.ТипПолучателейРассылки + + + ТипПолучателейРассылкиРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + + ТипПолучателейРассылкиКонтекстноеМеню + 44 + true + + LabelField + Enter + true + Left + true + + 5 + true + true + + + + ВидПочтовогоАдресаПолучателей + 41 + true + true + + + Список.ВидПочтовогоАдресаПолучателей + + + ВидПочтовогоАдресаПолучателейРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + ВидПочтовогоАдресаПолучателейКонтекстноеМеню + 42 + true + + LabelField + Enter + true + Left + true + + 5 + true + true + + + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска + 59 + + СписокСтрокаПоискаРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 60 + true + + Список + + true + + + + СписокСостояниеПросмотра + 62 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 63 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 65 + + СписокУправлениеПоискомРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 66 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + HierarchicalList + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandAllLevels + true + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
    + + ФормаКоманднаяПанель + -1 + + ГруппаКнопок + 22 + + ФормаИзменитьФорму + 49 + true + true + + true + + + ФормаИзменитьФормуРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа кнопок</value> + + + ru + Группа кнопок + + + ГруппаКнопокРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + Item.Список + + + + ВыполнитьСейчас + 23 + true + true + + true + + + Items.Список.CurrentData.Ref + + + ВыполнитьСейчасРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Catalog.РассылкиОтчетов.Command.ВыполнитьСейчас + Normal + Auto + true + true + UserCmds + Auto + + + СобытияРассылки + 30 + true + true + + true + + + Items.Список.CurrentData.Ref + + + СобытияРассылкиРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + Catalog.РассылкиОтчетов.Command.СобытияРассылки + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСправка + 37 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
    true
    + + ВЫБРАТЬ + Рассылки.Ссылка, + Рассылки.ВерсияДанных, + Рассылки.ПометкаУдаления, + Рассылки.Предопределенный, + Рассылки.Родитель, + Рассылки.ЭтоГруппа, + Рассылки.Наименование, + Рассылки.Автор, + Рассылки.Подготовлена, + Рассылки.Личная, + Рассылки.Персонализирована, + Рассылки.ВыполнятьПоРасписанию, + ВЫБОР + КОГДА Рассылки.ВыполнятьПоРасписанию = ИСТИНА + И Рассылки.Подготовлена = ИСТИНА + ТОГДА Рассылки.ПериодичностьРасписания + ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ПериодичностиРасписанийРассылокОтчетов.ПустаяСсылка) + КОНЕЦ КАК ПериодичностьРасписания, + Рассылки.РегламентноеЗадание, + ВЫБОР + КОГДА Рассылки.ВыполнятьПоРасписанию = ИСТИНА + И Рассылки.Подготовлена = ИСТИНА + ТОГДА 0 + ИНАЧЕ 1 + КОНЕЦ КАК ИндексКартинкиРасписания, + Рассылки.ИспользоватьПапку, + Рассылки.Папка, + Рассылки.ИспользоватьСетевойКаталог, + Рассылки.СетевойКаталогWindows, + Рассылки.СетевойКаталогLinux, + Рассылки.ИспользоватьFTPРесурс, + Рассылки.FTPСервер, + Рассылки.FTPКаталог, + Рассылки.FTPПорт, + Рассылки.FTPПассивноеСоединение, + Рассылки.ИспользоватьЭлектроннуюПочту, + Рассылки.ТолькоУведомить, + Рассылки.УчетнаяЗапись, + Рассылки.ПисьмоВФорматеHTML, + Рассылки.ТекстПисьмаВФорматеHTML, + Рассылки.КартинкиПисьмаВФорматеHTML, + Рассылки.ТекстПисьма, + Рассылки.ТемаПисьма, + Рассылки.ТипПолучателейРассылки, + Рассылки.ВидПочтовогоАдресаПолучателей, + Рассылки.СкрытыеКопии, + Рассылки.АдресОтвета, + Рассылки.Архивировать, + Рассылки.ИмяАрхива, + ВЫБОР + КОГДА Рассылки.Подготовлена = ЛОЖЬ + ТОГДА ДАТАВРЕМЯ(1, 1, 1) + ИНАЧЕ Состояние.ПоследнийЗапуск + КОНЕЦ КАК ПоследнийЗапуск, + ВЫБОР + КОГДА Состояние.ПоследнийЗапуск ЕСТЬ NULL + ИЛИ Рассылки.Подготовлена = ЛОЖЬ + ТОГДА -1 + КОГДА Состояние.ПоследнийЗапуск = &ПустаяДата + ТОГДА 0 + КОГДА НЕ Состояние.Выполнена + ТОГДА 1 + КОГДА Состояние.СОшибками + ТОГДА 1 + ИНАЧЕ 2 + КОНЕЦ КАК ИндексКартинкиПоследнегоЗапуска, + ВЫБОР + КОГДА Состояние.ПоследнийЗапуск ЕСТЬ NULL + ИЛИ Рассылки.Подготовлена = ЛОЖЬ + ТОГДА "" + КОГДА Состояние.ПоследнийЗапуск = &ПустаяДата + ТОГДА "Новая" + КОГДА НЕ Состояние.Выполнена + ТОГДА "Не выполнена" + КОГДА Состояние.СОшибками + ТОГДА "Выполнена с ошибками" + ИНАЧЕ "Выполнена" + КОНЕЦ КАК Состояние +ИЗ + Справочник.РассылкиОтчетов КАК Рассылки + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияРассылокОтчетов КАК Состояние + ПО (Состояние.Рассылка = Рассылки.Ссылка) + Catalog.РассылкиОтчетов + true + true + true + true + true + +
    + + ПараметрыФоновогоЗадания + + <key>ru</key> + <value>Параметры фонового задания</value> + + 2 + + ValueList + + + true + + + true + + + + + + + + + + +
    diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..f214b5fef --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,48 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ЗаполнитьПараметрСписка("РежимВыбора"); + ЗаполнитьПараметрСписка("ВыборГруппИЭлементов"); + ЗаполнитьПараметрСписка("МножественныйВыбор"); + ЗаполнитьПараметрСписка("ТекущаяСтрока"); + + Если Пользователи.РолиДоступны("ДобавлениеИзменениеРассылокОтчетов") Тогда + //Элементы.Список.Отображение = ОтображениеТаблицы.ИерархическийСписок; + Иначе // Роль для личных рассылок + // Скрыть лишние колонки + Элементы.Список.Отображение = ОтображениеТаблицы.Список; + // Скрыть группы + ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЭтоГруппа"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = Ложь; + ЭлементОтбора.Использование = Истина; + ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + КонецЕсли; + + Список.Параметры.УстановитьЗначениеПараметра("ПустаяДата", '00010101'); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики ожидания + +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеФоновогоЗадания() + РассылкаОтчетовКлиент.ПроверитьВыполнениеФоновогоЗадания(ЭтаФорма); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЗаполнитьПараметрСписка(Ключ) + Если Параметры.Свойство(Ключ) И ЗначениеЗаполнено(Параметры[Ключ]) Тогда + Элементы.Список[Ключ] = Параметры[Ключ]; + КонецЕсли; +КонецПроцедуры diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/ConditionalAppearance.dcssca b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/ConditionalAppearance.dcssca new file mode 100644 index 000000000..133353321 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/ConditionalAppearance.dcssca @@ -0,0 +1,65 @@ + + + + + + НастройкиТекущегоОтчета + + + + + НастройкиТекущегоОтчета.Обнаружен + Equal + false + + + + + ЦветТекста + style:НедоступныеДанныеЦвет + + + false + Шрифт + + + + false + Видимость + false + + + Доступность + false + + + false + Отображать + false + + + + + + + ПолучателиПолучатель + + + ПолучателиИсключен + + + + + Объект.Получатели.Исключен + Equal + true + + + + + ЦветТекста + style:ПросроченныеДанныеЦвет + + + + diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..72a15a52e --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,10910 @@ + + + + ГруппаРассылкаПодготовлена + 339 + + Наименование + 1 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 695 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 2 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Подготовлена + 337 + true + true + + true + + + Объект.Подготовлена + + Right + + ПодготовленаРасширеннаяПодсказка + 697 + Label + true + true + + Left + + + + ПодготовленаКонтекстноеМеню + 338 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа рассылка подготовлена</value> + + + ru + Группа рассылка подготовлена + + + ГруппаРассылкаПодготовленаРасширеннаяПодсказка + 694 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаВидРассылки + 538 + + ВидРассылки + 536 + + <key>ru</key> + <value>Отправлять</value> + + true + true + + true + + + ВидРассылки + + + OnChange + ВидРассылкиПриИзменении + + + ВидРассылкиРасширеннаяПодсказка + 700 + Label + true + true + + Left + + + + ВидРассылкиКонтекстноеМеню + 537 + true + + InputField + Enter + true + Left + true + + 5 + true + true + true + false + false + false + true + OnActivate + true + true + + + ru + Отчеты указанным получателям + + + Общая + + + + + ru + Свой отчет для каждого получателя + + + Персонализирована + + + + + ru + Только мне (личная рассылка автора) + + + Личная + + + + Style.ФонВыделенияЦвет + + Normal + + + + ВидыРассылки + 597 + + ВидыРассылкиЛичная + 600 + + ВидПочтовогоАдресаАвтора + 574 + true + true + + true + + + Объект.ВидПочтовогоАдресаПолучателей + + + ВидПочтовогоАдресаАвтораРасширеннаяПодсказка + 704 + Label + true + true + + Left + + + + ВидПочтовогоАдресаАвтораКонтекстноеМеню + 575 + true + + InputField + true + Enter + true + Left + true + + + Opening + ВидПочтовогоАдресаАвтораОткрытие + + true + true + true + false + true + false + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Виды рассылки личная</value> + + + ru + Виды рассылки личная + + + ВидыРассылкиЛичнаяРасширеннаяПодсказка + 703 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ВидыРассылкиДляПолучателей + 598 + + ТипПолучателейРассылки + 132 + true + true + + true + + + ТипПолучателейРассылки + + + OnChange + ТипПолучателейРассылкиПриИзменении + + + ТипПолучателейРассылкиРасширеннаяПодсказка + 707 + Label + true + true + + Left + + + + ТипПолучателейРассылкиКонтекстноеМеню + 133 + true + + InputField + true + Enter + true + Left + true + + + Clearing + ТипПолучателейРассылкиОчистка + + + ChoiceProcessing + ТипПолучателейРассылкиОбработкаВыбора + + true + true + true + false + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Виды рассылки для получателей</value> + + + ru + Виды рассылки для получателей + + + ВидыРассылкиДляПолучателейРасширеннаяПодсказка + 706 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Виды рассылки</value> + + + ru + Виды рассылки + + 25 + false + + ВидыРассылкиРасширеннаяПодсказка + 702 + Label + true + true + + Left + + + Pages + + Auto + + + + Декорация10 + 682 + true + true + + true + + + Декорация10РасширеннаяПодсказка + 709 + Label + true + true + + Left + + + + Декорация10КонтекстноеМеню + 683 + true + + Label + true + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа вид рассылки</value> + + + ru + Группа вид рассылки + + + ГруппаВидРассылкиРасширеннаяПодсказка + 699 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Страницы + 37 + + СтраницаОтчеты + 56 + + Отчеты + 218 + true + true + + true + + + Объект.Отчеты + + None + Add + Change + Copy + + Представление + 223 + true + true + + true + + + Объект.Отчеты.Представление + + + ПредставлениеРасширеннаяПодсказка + 727 + Label + true + true + + Left + + + + ПредставлениеКонтекстноеМеню + 224 + true + + InputField + true + Auto + true + Left + true + + 20 + true + true + true + true + true + Normal + + + + ОтчетыКоманднаяПанель + 220 + + ОтчетыВключитьВРассылку + 225 + + ОтчетыДобавитьОтчет + 226 + true + true + + true + + + ОтчетыДобавитьОтчетРасширеннаяПодсказка + 713 + Label + true + true + + Left + + + Form.Command.ДобавитьОтчет + Normal + Auto + true + true + UserCmds + Auto + + + ОтчетыДобавитьДополнительныйОтчет + 227 + true + true + + true + + + ОтчетыДобавитьДополнительныйОтчетРасширеннаяПодсказка + 714 + Label + true + true + + Left + + + Form.Command.ДобавитьДополнительныйОтчет + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Включить в рассылку</value> + + + ru + Включить отчет в рассылку + + + ОтчетыВключитьВРассылкуРасширеннаяПодсказка + 712 + Label + true + true + + Left + + + Popup + + + StdPicture.CreateListItem + + Auto + Normal + + + + ОтчетыГруппаСтандартныхДействий + 354 + true + true + + true + + + <key>ru</key> + <value>Отчеты группа стандартных действий</value> + + + ru + Отчеты группа стандартных действий + + + ОтчетыГруппаСтандартныхДействийРасширеннаяПодсказка + 715 + Label + true + true + + Left + + + + Item.Отчеты + + + + ОтчетыСформироватьОтчет + 356 + true + true + + true + + + ОтчетыСформироватьОтчетРасширеннаяПодсказка + 716 + Label + true + true + + Left + + + Form.Command.ПредварительныйПросмотрОтчета + Normal + Auto + true + true + UserCmds + Auto + + Left + + + BeforeAddRow + ОтчетыПередНачаломДобавления + + + OnActivateRow + ОтчетыПриАктивизацииСтроки + + + ChoiceProcessing + ОтчетыОбработкаВыбора + + + BeforeRowChange + ОтчетыПередНачаломИзменения + + + AfterDeleteRow + ОтчетыПослеУдаления + + + ОтчетыСтрокаПоиска + 718 + + ОтчетыСтрокаПоискаРасширеннаяПодсказка + 720 + Label + true + true + + Left + + + + ОтчетыСтрокаПоискаКонтекстноеМеню + 719 + true + + Отчеты + + true + + + + ОтчетыСостояниеПросмотра + 721 + + ОтчетыСостояниеПросмотраРасширеннаяПодсказка + 723 + Label + true + true + + Left + + + + ОтчетыСостояниеПросмотраКонтекстноеМеню + 722 + true + + ViewStatusAddition + Отчеты + + true + + + + ОтчетыУправлениеПоиском + 724 + + ОтчетыУправлениеПоискомРасширеннаяПодсказка + 726 + Label + true + true + + Left + + + + ОтчетыУправлениеПоискомКонтекстноеМеню + 725 + true + + SearchControlAddition + Отчеты + + true + + + + ОтчетыРасширеннаяПодсказка + 717 + Label + true + true + + Left + + + + ОтчетыКонтекстноеМеню + 219 + true + + HierarchicalList + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + None + None + None + true + +
    + + Декорация4 + 655 + + <key>ru</key> + <value>Настройки отчета:</value> + + true + true + + true + + + Декорация4РасширеннаяПодсказка + 737 + Label + true + true + + Left + + + + Декорация4КонтекстноеМеню + 656 + true + + Label + true + true + + Left + + + + СтраницыНастроекОтчета + 249 + + ПустаяСтраница + 252 + + ПустыеНастройки + 657 + true + true + + true + + + НастройкиТекущегоОтчета + + None + Add + CancelSearch + Change + Copy + CopyToClipboard + Delete + EndEdit + Find + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + + НастройкиТекущегоОтчетаИспользование1 + 660 + + <key>ru</key> + <value> </value> + + true + true + + true + + + НастройкиТекущегоОтчета.Использование + + + НастройкиТекущегоОтчетаИспользование1РасширеннаяПодсказка + 750 + Label + true + true + + Left + + + + НастройкиТекущегоОтчетаИспользование1КонтекстноеМеню + 661 + true + + CheckBoxField + Auto + true + Left + true + + + + НастройкиТекущегоОтчетаПредставление1 + 662 + + <key>ru</key> + <value>Настройка</value> + + true + true + + true + + + НастройкиТекущегоОтчета.Представление + + true + + НастройкиТекущегоОтчетаПредставление1РасширеннаяПодсказка + 752 + Label + true + true + + Left + + + + НастройкиТекущегоОтчетаПредставление1КонтекстноеМеню + 663 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + НастройкиТекущегоОтчетаЗначение1 + 664 + true + true + + true + + + НастройкиТекущегоОтчета.Значение + + + НастройкиТекущегоОтчетаЗначение1РасширеннаяПодсказка + 754 + Label + true + true + + Left + + + + НастройкиТекущегоОтчетаЗначение1КонтекстноеМеню + 665 + true + + InputField + true + Left + true + + true + true + true + true + true + true + Normal + + + Items.НастройкиТекущегоОтчета.CurrentData.Тип + + + + + + ПустыеНастройкиКоманднаяПанель + 659 + Left + + + ПустыеНастройкиСтрокаПоиска + 741 + + ПустыеНастройкиСтрокаПоискаРасширеннаяПодсказка + 743 + Label + true + true + + Left + + + + ПустыеНастройкиСтрокаПоискаКонтекстноеМеню + 742 + true + + ПустыеНастройки + + true + + + + ПустыеНастройкиСостояниеПросмотра + 744 + + ПустыеНастройкиСостояниеПросмотраРасширеннаяПодсказка + 746 + Label + true + true + + Left + + + + ПустыеНастройкиСостояниеПросмотраКонтекстноеМеню + 745 + true + + ViewStatusAddition + ПустыеНастройки + + true + + + + ПустыеНастройкиУправлениеПоиском + 747 + + ПустыеНастройкиУправлениеПоискомРасширеннаяПодсказка + 749 + Label + true + true + + Left + + + + ПустыеНастройкиУправлениеПоискомКонтекстноеМеню + 748 + true + + SearchControlAddition + ПустыеНастройки + + true + + + + ПустыеНастройкиРасширеннаяПодсказка + 740 + Label + true + true + + Left + + + + ПустыеНастройкиКонтекстноеМеню + 658 + + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + + НастройкиТекущегоОтчета.ИндексКартинки + + + CommonPicture.КоллекцияПиктограммЭлементов + + None + None + None + true + +
    + true + true + + true + + + <key>ru</key> + <value>Пустая страница</value> + + + ru + Пустая страница + + + ПустаяСтраницаРасширеннаяПодсказка + 739 + Label + true + true + + Left + + + Page + + Vertical + auto + +
    + + СтраницаКомпоновщик + 250 + + КомпоновщикНастроекПользовательскиеНастройки + 187 + true + true + + true + + + КомпоновщикНастроекКД.UserSettings + + None + HierarchicalList + List + Tree + + КомпоновщикНастроекПользовательскиеНастройкиИспользование + 581 + true + true + + true + + + КомпоновщикНастроекКД.UserSettings.Use + + None + + КомпоновщикНастроекПользовательскиеНастройкиИспользованиеРасширеннаяПодсказка + 775 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиИспользованиеКонтекстноеМеню + 582 + true + + CheckBoxField + true + Left + true + + + + КомпоновщикНастроекПользовательскиеНастройкиГруппаКолонок + 583 + + КомпоновщикНастроекПользовательскиеНастройкиКартинкаНастройки + 584 + true + true + + true + + + КомпоновщикНастроекКД.UserSettings.SettingPicture + + + КомпоновщикНастроекПользовательскиеНастройкиКартинкаНастройкиРасширеннаяПодсказка + 778 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиКартинкаНастройкиКонтекстноеМеню + 585 + true + + PictureField + Enter + Left + + true + true + true + true + + + 1 + + + + + КомпоновщикНастроекПользовательскиеНастройкиНастройка + 586 + true + true + + true + + + КомпоновщикНастроекКД.UserSettings.Setting + + + КомпоновщикНастроекПользовательскиеНастройкиНастройкаРасширеннаяПодсказка + 780 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиНастройкаКонтекстноеМеню + 587 + true + + InputField + Enter + true + Left + true + + 15 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + КомпоновщикНастроекПользовательскиеНастройкиГруппаКолонокРасширеннаяПодсказка + 777 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + КомпоновщикНастроекПользовательскиеНастройкиВидСравнения + 588 + true + true + + true + + + КомпоновщикНастроекКД.UserSettings.ComparisonType + + + КомпоновщикНастроекПользовательскиеНастройкиВидСравненияРасширеннаяПодсказка + 782 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиВидСравненияКонтекстноеМеню + 589 + true + + InputField + true + Left + true + + true + true + true + true + true + true + Normal + + + + КомпоновщикНастроекПользовательскиеНастройкиГруппаКолонок1 + 590 + + КомпоновщикНастроекПользовательскиеНастройкиКартинкаЗначения + 591 + true + true + + true + + + КомпоновщикНастроекКД.UserSettings.ValuePicture + + + КомпоновщикНастроекПользовательскиеНастройкиКартинкаЗначенияРасширеннаяПодсказка + 785 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиКартинкаЗначенияКонтекстноеМеню + 592 + true + + PictureField + Enter + Left + + true + true + true + true + + + 1 + + + + + КомпоновщикНастроекПользовательскиеНастройкиЗначение + 593 + true + true + + true + + + КомпоновщикНастроекКД.UserSettings.Value + + true + + КомпоновщикНастроекПользовательскиеНастройкиЗначениеРасширеннаяПодсказка + 787 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиЗначениеКонтекстноеМеню + 594 + true + + InputField + Enter + true + Left + true + + + StartChoice + КомпоновщикНастроекПользовательскиеНастройкиЗначениеНачалоВыбора + + 15 + true + true + true + true + true + OnActivate + true + true + Normal + + + true + true + + true + + + КомпоновщикНастроекПользовательскиеНастройкиГруппаКолонок1РасширеннаяПодсказка + 784 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + КомпоновщикНастроекПользовательскиеНастройкиРедактированиеВФормеОтчета + 595 + true + true + + + КомпоновщикНастроекКД.UserSettings.EditInReportForm + + + КомпоновщикНастроекПользовательскиеНастройкиРедактированиеВФормеОтчетаРасширеннаяПодсказка + 789 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиРедактированиеВФормеОтчетаКонтекстноеМеню + 596 + true + + CheckBoxField + true + Left + true + + + + КомпоновщикНастроекПользовательскиеНастройкиКоманднаяПанель + 189 + Left + + + OnChange + КомпоновщикНастроекПользовательскиеНастройкиПриИзменении + + + КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоиска + 766 + + КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоискаРасширеннаяПодсказка + 768 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоискаКонтекстноеМеню + 767 + true + + КомпоновщикНастроекПользовательскиеНастройки + + true + + + + КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотра + 769 + + КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотраРасширеннаяПодсказка + 771 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотраКонтекстноеМеню + 770 + true + + ViewStatusAddition + КомпоновщикНастроекПользовательскиеНастройки + + true + + + + КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоиском + 772 + + КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоискомРасширеннаяПодсказка + 774 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоискомКонтекстноеМеню + 773 + true + + SearchControlAddition + КомпоновщикНастроекПользовательскиеНастройки + + true + + + + КомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 765 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиКонтекстноеМеню + 188 + + HierarchicalList + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + true + true + None + None + None + true + All + Show +
    + true + true + + true + + + <key>ru</key> + <value>Страница компоновщик</value> + + + ru + Страница компоновщик + + + СтраницаКомпоновщикРасширеннаяПодсказка + 764 + Label + true + true + + Left + + + Page + + Vertical + auto + +
    + + СтраницаНастройкиТекущегоОтчета + 251 + + НастройкиТекущегоОтчета + 234 + true + true + + true + + + НастройкиТекущегоОтчета + + None + Add + CancelSearch + Change + Copy + CopyToClipboard + Delete + EndEdit + Find + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + + НастройкиТекущегоОтчетаИспользование + 245 + + <key>ru</key> + <value> </value> + + true + true + + true + + + НастройкиТекущегоОтчета.Использование + + + НастройкиТекущегоОтчетаИспользованиеРасширеннаяПодсказка + 810 + Label + true + true + + Left + + + + НастройкиТекущегоОтчетаИспользованиеКонтекстноеМеню + 246 + true + + CheckBoxField + Auto + true + Left + true + + + + НастройкиТекущегоОтчетаПредставление + 239 + + <key>ru</key> + <value>Настройка</value> + + true + true + + true + + + НастройкиТекущегоОтчета.Представление + + true + + НастройкиТекущегоОтчетаПредставлениеРасширеннаяПодсказка + 812 + Label + true + true + + Left + + + + НастройкиТекущегоОтчетаПредставлениеКонтекстноеМеню + 240 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + НастройкиТекущегоОтчетаЗначение + 243 + true + true + + true + + + НастройкиТекущегоОтчета.Значение + + + OnChange + НастройкиТекущегоОтчетаЗначениеПриИзменении + + + НастройкиТекущегоОтчетаЗначениеРасширеннаяПодсказка + 814 + Label + true + true + + Left + + + + НастройкиТекущегоОтчетаЗначениеКонтекстноеМеню + 244 + true + + InputField + true + Left + true + + + StartChoice + НастройкиТекущегоОтчетаЗначениеНачалоВыбора + + true + true + true + true + true + true + Normal + + + Items.НастройкиТекущегоОтчета.CurrentData.Тип + + + + + + НастройкиТекущегоОтчетаКоманднаяПанель + 236 + Left + + + OnChange + НастройкиТекущегоОтчетаПриИзменении + + + НастройкиТекущегоОтчетаСтрокаПоиска + 801 + + НастройкиТекущегоОтчетаСтрокаПоискаРасширеннаяПодсказка + 803 + Label + true + true + + Left + + + + НастройкиТекущегоОтчетаСтрокаПоискаКонтекстноеМеню + 802 + true + + НастройкиТекущегоОтчета + + true + + + + НастройкиТекущегоОтчетаСостояниеПросмотра + 804 + + НастройкиТекущегоОтчетаСостояниеПросмотраРасширеннаяПодсказка + 806 + Label + true + true + + Left + + + + НастройкиТекущегоОтчетаСостояниеПросмотраКонтекстноеМеню + 805 + true + + ViewStatusAddition + НастройкиТекущегоОтчета + + true + + + + НастройкиТекущегоОтчетаУправлениеПоиском + 807 + + НастройкиТекущегоОтчетаУправлениеПоискомРасширеннаяПодсказка + 809 + Label + true + true + + Left + + + + НастройкиТекущегоОтчетаУправлениеПоискомКонтекстноеМеню + 808 + true + + SearchControlAddition + НастройкиТекущегоОтчета + + true + + + + НастройкиТекущегоОтчетаРасширеннаяПодсказка + 800 + Label + true + true + + Left + + + + НастройкиТекущегоОтчетаКонтекстноеМеню + 235 + + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + + НастройкиТекущегоОтчета.ИндексКартинки + + + CommonPicture.КоллекцияПиктограммЭлементов + + None + None + None + true + +
    + true + true + + true + + + <key>ru</key> + <value>Страница настройки текущего отчета</value> + + + ru + Страница настройки текущего отчета + + + СтраницаНастройкиТекущегоОтчетаРасширеннаяПодсказка + 799 + Label + true + true + + Left + + + Page + + Vertical + auto + +
    + true + true + + true + + + <key>ru</key> + <value>Страницы настроек отчета</value> + + + ru + Страницы настроек отчета + + + СтраницыНастроекОтчетаРасширеннаяПодсказка + 738 + Label + true + true + + Left + + + Pages + + Auto + +
    + true + true + + true + + + <key>ru</key> + <value>Отчеты</value> + + + ru + Отчеты + + + СтраницаОтчетыРасширеннаяПодсказка + 711 + Label + true + true + + Left + + + Page + + Vertical + auto + +
    + + СтраницаРасписание + 423 + + ГруппаПериодичность + 424 + + ВыполнятьПоРасписанию + 676 + + <key>ru</key> + <value>Выполнять по расписанию:</value> + + true + true + + true + + + Объект.ВыполнятьПоРасписанию + + Right + + OnChange + ВыполнятьПоРасписаниюПриИзменении + + + ВыполнятьПоРасписаниюРасширеннаяПодсказка + 826 + Label + true + true + + Left + + + + ВыполнятьПоРасписаниюКонтекстноеМеню + 677 + true + + CheckBoxField + Enter + true + Left + true + + + + ПараметрыВыполненияПоРасписанию + 678 + + ПериодичностьРасписания + 425 + true + true + + true + + + Объект.ПериодичностьРасписания + + None + + OnChange + ПериодичностьРасписанияПриИзменении + + + ПериодичностьРасписанияРасширеннаяПодсказка + 829 + Label + true + true + + Left + + + + ПериодичностьРасписанияКонтекстноеМеню + 426 + true + + InputField + Enter + true + Left + true + + true + true + true + false + true + false + false + false + true + Normal + + + + СтраницыВремяИлиИзменить + 427 + + СтраницаВремяНачала + 428 + + ВремяНачала + 429 + true + true + + true + + + ВремяНачала + + + OnChange + ВремяНачалаПриИзменении + + + ВремяНачалаРасширеннаяПодсказка + 833 + Label + true + true + + Left + + + + ВремяНачалаКонтекстноеМеню + 430 + true + + InputField + Enter + true + Left + true + + 4 + true + true + true + + ru + ДФ=HH:mm + + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница время начала</value> + + + ru + Страница время начала + + + СтраницаВремяНачалаРасширеннаяПодсказка + 832 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаИзменитьРасписание + 431 + + ИзменитьРасписание + 432 + true + true + + true + + + ИзменитьРасписаниеРасширеннаяПодсказка + 836 + Label + true + true + + Left + + + UsualButton + Form.Command.ИзменитьРасписание + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Страница изменить расписание</value> + + + ru + Страница изменить расписание + + + СтраницаИзменитьРасписаниеРасширеннаяПодсказка + 835 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы время или изменить</value> + + + ru + Страницы время или изменить + + + СтраницыВремяИлиИзменитьРасширеннаяПодсказка + 831 + Label + true + true + + Left + + + Pages + + Auto + + + + Декорация9 + 527 + true + true + + true + + + Декорация9РасширеннаяПодсказка + 837 + Label + true + true + + Left + + + + Декорация9КонтекстноеМеню + 528 + true + + Label + true + true + true + + Left + + + + ЗаполнитьРасписаниеПоШаблону + 526 + true + true + + true + + + ЗаполнитьРасписаниеПоШаблонуРасширеннаяПодсказка + 838 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗаполнитьРасписаниеПоШаблону + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Параметры выполнения по расписанию</value> + + + ru + Параметры выполнения по расписанию + + + ПараметрыВыполненияПоРасписаниюРасширеннаяПодсказка + 828 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа периодичность</value> + + + ru + Группа периодичность + + + ГруппаПериодичностьРасширеннаяПодсказка + 825 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + СтраницыПериодичности + 433 + + СтраницаНеВыбрано + 434 + + Декорация5 + 435 + + <key>ru</key> + <value> </value> + + true + true + + true + + + Декорация5РасширеннаяПодсказка + 841 + Label + true + true + + Left + + + + Декорация5КонтекстноеМеню + 436 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница не выбрано</value> + + + ru + Страница не выбрано + + + СтраницаНеВыбраноРасширеннаяПодсказка + 840 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаЕжедневно + 437 + + ГруппаСтрокаПериодПовтораДней + 438 + + ПериодПовтораДней + 439 + true + true + + true + + + ПериодПовтораДней + + + OnChange + ПериодПовтораДнейПриИзменении + + + ПериодПовтораДнейРасширеннаяПодсказка + 844 + Label + true + true + + Left + + + + ПериодПовтораДнейКонтекстноеМеню + 440 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Декорация6 + 441 + + <key>ru</key> + <value>дней</value> + + true + true + + true + + + Декорация6РасширеннаяПодсказка + 846 + Label + true + true + + Left + + + + Декорация6КонтекстноеМеню + 442 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа строка период повтора дней</value> + + + ru + Группа строка период повтора дней + + + ГруппаСтрокаПериодПовтораДнейРасширеннаяПодсказка + 843 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ПредставлениеРасписания1 + 443 + true + true + + true + + + ПредставлениеРасписания + + None + + ПредставлениеРасписания1РасширеннаяПодсказка + 847 + Label + true + true + + Left + + + + ПредставлениеРасписания1КонтекстноеМеню + 444 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница ежедневно</value> + + + ru + Страница ежедневно + + + СтраницаЕжедневноРасширеннаяПодсказка + 842 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаЕженедельно + 445 + + ГруппаДниНедели + 446 + + Понедельник + 447 + true + true + + true + + + Понедельник + + Right + + OnChange + ДниНеделиПриИзменении + + + ПонедельникРасширеннаяПодсказка + 851 + Label + true + true + + Left + + + + ПонедельникКонтекстноеМеню + 448 + true + + CheckBoxField + Enter + true + Left + true + + + + Вторник + 449 + true + true + + true + + + Вторник + + Right + + OnChange + ДниНеделиПриИзменении + + + ВторникРасширеннаяПодсказка + 853 + Label + true + true + + Left + + + + ВторникКонтекстноеМеню + 450 + true + + CheckBoxField + Enter + true + Left + true + + + + Среда + 451 + true + true + + true + + + Среда + + Right + + OnChange + ДниНеделиПриИзменении + + + СредаРасширеннаяПодсказка + 855 + Label + true + true + + Left + + + + СредаКонтекстноеМеню + 452 + true + + CheckBoxField + Enter + true + Left + true + + + + Четверг + 453 + true + true + + true + + + Четверг + + Right + + OnChange + ДниНеделиПриИзменении + + + ЧетвергРасширеннаяПодсказка + 857 + Label + true + true + + Left + + + + ЧетвергКонтекстноеМеню + 454 + true + + CheckBoxField + Enter + true + Left + true + + + + Пятница + 455 + true + true + + true + + + Пятница + + Right + + OnChange + ДниНеделиПриИзменении + + + ПятницаРасширеннаяПодсказка + 859 + Label + true + true + + Left + + + + ПятницаКонтекстноеМеню + 456 + true + + CheckBoxField + Enter + true + Left + true + + + + Суббота + 457 + true + true + + true + + + Суббота + + Right + + OnChange + ДниНеделиПриИзменении + + + СубботаРасширеннаяПодсказка + 861 + Label + true + true + + Left + + + + СубботаКонтекстноеМеню + 458 + true + + CheckBoxField + Enter + true + Left + true + + + + Воскресенье + 459 + true + true + + true + + + Воскресенье + + Right + + OnChange + ДниНеделиПриИзменении + + + ВоскресеньеРасширеннаяПодсказка + 863 + Label + true + true + + Left + + + + ВоскресеньеКонтекстноеМеню + 460 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Дни недели</value> + + + ru + Группа дни недели + + + ГруппаДниНеделиРасширеннаяПодсказка + 850 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ПредставлениеРасписания2 + 520 + true + true + + true + + + ПредставлениеРасписания + + None + + ПредставлениеРасписания2РасширеннаяПодсказка + 865 + Label + true + true + + Left + + + + ПредставлениеРасписания2КонтекстноеМеню + 521 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница еженедельно</value> + + + ru + Страница еженедельно + + + СтраницаЕженедельноРасширеннаяПодсказка + 849 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаЕжемесячно + 463 + + ГруппаСтрокаЕжемесячныхПараметров + 464 + + Декорация1 + 465 + + <key>ru</key> + <value>Каждый: </value> + + true + true + + true + + + Декорация1РасширеннаяПодсказка + 869 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 466 + true + + Label + true + true + + Left + + + + ДеньВМесяце + 467 + true + true + + true + + + ДеньВМесяце + + None + + OnChange + ДеньМесяцаПриИзменении + + + ДеньВМесяцеРасширеннаяПодсказка + 870 + Label + true + true + + Left + + + + ДеньВМесяцеКонтекстноеМеню + 468 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Декорация7 + 469 + + <key>ru</key> + <value>день месяца с</value> + + true + true + + true + + + Декорация7РасширеннаяПодсказка + 872 + Label + true + true + + Left + + + + Декорация7КонтекстноеМеню + 470 + true + + Label + true + true + + Left + + + + ГиперссылкаНачалоКонецМесяца + 471 + + <key>ru</key> + <value>начала</value> + + true + true + + true + + + ГиперссылкаНачалоКонецМесяцаРасширеннаяПодсказка + 873 + Label + true + true + + Left + + + + ГиперссылкаНачалоКонецМесяцаКонтекстноеМеню + 472 + true + + Label + true + true + + + Click + ГиперссылкаНачалоКонецМесяцаНажатие + + true + Left + + + + Декорация8 + 473 + + <key>ru</key> + <value>месяца.</value> + + true + true + + true + + + Декорация8РасширеннаяПодсказка + 874 + Label + true + true + + Left + + + + Декорация8КонтекстноеМеню + 474 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа строка ежемесячных параметров</value> + + + ru + Группа строка ежемесячных параметров + + + ГруппаСтрокаЕжемесячныхПараметровРасширеннаяПодсказка + 868 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаМесяцы1 + 475 + + ГруппаКвартал1 + 476 + + Январь + 477 + true + true + + true + + + Январь + + Right + + OnChange + МесяцыПриИзменении + + + ЯнварьРасширеннаяПодсказка + 877 + Label + true + true + + Left + + + + ЯнварьКонтекстноеМеню + 478 + true + + CheckBoxField + Enter + true + Left + true + + + + Февраль + 479 + true + true + + true + + + Февраль + + Right + + OnChange + МесяцыПриИзменении + + + ФевральРасширеннаяПодсказка + 879 + Label + true + true + + Left + + + + ФевральКонтекстноеМеню + 480 + true + + CheckBoxField + Enter + true + Left + true + + + + Март + 481 + true + true + + true + + + Март + + Right + + OnChange + МесяцыПриИзменении + + + МартРасширеннаяПодсказка + 881 + Label + true + true + + Left + + + + МартКонтекстноеМеню + 482 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Квартал I</value> + + + ru + Группа квартал1 + + + ГруппаКвартал1РасширеннаяПодсказка + 876 + Label + true + true + + Left + + + UsualGroup + + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + + ГруппаКвартал2 + 483 + + Апрель + 484 + true + true + + true + + + Апрель + + Right + + OnChange + МесяцыПриИзменении + + + АпрельРасширеннаяПодсказка + 884 + Label + true + true + + Left + + + + АпрельКонтекстноеМеню + 485 + true + + CheckBoxField + Enter + true + Left + true + + + + Май + 486 + true + true + + true + + + Май + + Right + + OnChange + МесяцыПриИзменении + + + МайРасширеннаяПодсказка + 886 + Label + true + true + + Left + + + + МайКонтекстноеМеню + 487 + true + + CheckBoxField + Enter + true + Left + true + + + + Июнь + 488 + true + true + + true + + + Июнь + + Right + + OnChange + МесяцыПриИзменении + + + ИюньРасширеннаяПодсказка + 888 + Label + true + true + + Left + + + + ИюньКонтекстноеМеню + 489 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Квартал II</value> + + + ru + Группа квартал1 + + + ГруппаКвартал2РасширеннаяПодсказка + 883 + Label + true + true + + Left + + + UsualGroup + + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + + ГруппаУстановитьПометки + 490 + + УстановитьПометки + 491 + true + true + + true + + + УстановитьПометкиРасширеннаяПодсказка + 891 + Label + true + true + + Left + + + Hyperlink + Form.Command.УстановитьПометки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + Установить пометки + + + ГруппаУстановитьПометкиРасширеннаяПодсказка + 890 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа месяцы1</value> + + + ru + Группа месяцы1 + + + ГруппаМесяцы1РасширеннаяПодсказка + 875 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаМесяцы2 + 492 + + ГруппаКвартал3 + 493 + + Июль + 494 + true + true + + true + + + Июль + + Right + + OnChange + МесяцыПриИзменении + + + ИюльРасширеннаяПодсказка + 894 + Label + true + true + + Left + + + + ИюльКонтекстноеМеню + 495 + true + + CheckBoxField + Enter + true + Left + true + + + + Август + 496 + true + true + + true + + + Август + + Right + + OnChange + МесяцыПриИзменении + + + АвгустРасширеннаяПодсказка + 896 + Label + true + true + + Left + + + + АвгустКонтекстноеМеню + 497 + true + + CheckBoxField + Enter + true + Left + true + + + + Сентябрь + 498 + true + true + + true + + + Сентябрь + + Right + + OnChange + МесяцыПриИзменении + + + СентябрьРасширеннаяПодсказка + 898 + Label + true + true + + Left + + + + СентябрьКонтекстноеМеню + 499 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Квартал III</value> + + + ru + Группа квартал1 + + + ГруппаКвартал3РасширеннаяПодсказка + 893 + Label + true + true + + Left + + + UsualGroup + + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + + ГруппаКвартал4 + 500 + + Октябрь + 501 + true + true + + true + + + Октябрь + + Right + + OnChange + МесяцыПриИзменении + + + ОктябрьРасширеннаяПодсказка + 901 + Label + true + true + + Left + + + + ОктябрьКонтекстноеМеню + 502 + true + + CheckBoxField + Enter + true + Left + true + + + + Ноябрь + 503 + true + true + + true + + + Ноябрь + + Right + + OnChange + МесяцыПриИзменении + + + НоябрьРасширеннаяПодсказка + 903 + Label + true + true + + Left + + + + НоябрьКонтекстноеМеню + 504 + true + + CheckBoxField + Enter + true + Left + true + + + + Декабрь + 505 + true + true + + true + + + Декабрь + + Right + + OnChange + МесяцыПриИзменении + + + ДекабрьРасширеннаяПодсказка + 905 + Label + true + true + + Left + + + + ДекабрьКонтекстноеМеню + 506 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Квартал IV</value> + + + ru + Группа квартал1 + + + ГруппаКвартал4РасширеннаяПодсказка + 900 + Label + true + true + + Left + + + UsualGroup + + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + + ГруппаСнятьПометки + 507 + + СнятьПометки + 508 + true + true + + true + + + СнятьПометкиРасширеннаяПодсказка + 908 + Label + true + true + + Left + + + Hyperlink + Form.Command.СнятьПометки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value> </value> + + + ru + Снять пометки + + + ГруппаСнятьПометкиРасширеннаяПодсказка + 907 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа месяцы1</value> + + + ru + Группа месяцы1 + + + ГруппаМесяцы2РасширеннаяПодсказка + 892 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ПредставлениеРасписания4 + 524 + true + true + + true + + + ПредставлениеРасписания + + None + + ПредставлениеРасписания4РасширеннаяПодсказка + 909 + Label + true + true + + Left + + + + ПредставлениеРасписания4КонтекстноеМеню + 525 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница ежемесячно</value> + + + ru + Страница ежемесячно + + + СтраницаЕжемесячноРасширеннаяПодсказка + 867 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаПроизвольное + 511 + + ПредставлениеРасписания3 + 522 + true + true + + true + + + ПредставлениеРасписания + + None + + ПредставлениеРасписания3РасширеннаяПодсказка + 912 + Label + true + true + + Left + + + + ПредставлениеРасписания3КонтекстноеМеню + 523 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница произвольное</value> + + + ru + Страница произвольное + + + СтраницаПроизвольноеРасширеннаяПодсказка + 911 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы периодичности</value> + + + ru + Страницы периодичности + + + СтраницыПериодичностиРасширеннаяПодсказка + 839 + Label + true + true + + Left + + + Pages + + Auto + + + + ГруппаАвтор + 679 + + Автор + 3 + true + false + + true + + + Объект.Автор + + + OnChange + АвторПриИзменении + + + АвторРасширеннаяПодсказка + 915 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 4 + true + + InputField + Auto + true + Left + true + + 10 + true + true + true + true + true + true + true + Normal + + + + РасшифровкаАвтора + 680 + + <key>ru</key> + <value>При выполнении по расписанию отчеты формируются с правами этого пользователя.</value> + + true + true + + true + + + РасшифровкаАвтораРасширеннаяПодсказка + 917 + Label + true + true + + Left + + + + РасшифровкаАвтораКонтекстноеМеню + 681 + true + + Label + true + 1 + true + true + false + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа автор</value> + + + ru + Группа автор + + + ГруппаАвторРасширеннаяПодсказка + 914 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Расписание</value> + + + ru + Страница расписание + + + СтраницаРасписаниеРасширеннаяПодсказка + 824 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаДоставка + 79 + + ДругиеСпособыДоставки + 630 + + Публиковать + 631 + true + true + + true + + + Публиковать + + Right + + OnChange + ПубликоватьПриИзменении + + + ПубликоватьРасширеннаяПодсказка + 920 + Label + true + true + + Left + + + + ПубликоватьКонтекстноеМеню + 632 + true + + CheckBoxField + Enter + true + Left + true + + + + ДругойСпособДоставки + 615 + true + true + + true + + + ДругойСпособДоставки + + None + + OnChange + ДругойСпособДоставкиПриИзменении + + + ДругойСпособДоставкиРасширеннаяПодсказка + 922 + Label + true + true + + Left + + + + ДругойСпособДоставкиКонтекстноеМеню + 616 + true + + InputField + Enter + true + Left + true + + 20 + true + true + false + true + false + false + false + true + true + true + true + + + ru + В папку + + + ИспользоватьПапку + + + + + ru + В сетевой каталог + + + ИспользоватьСетевойКаталог + + + + + ru + На FTP ресурс + + + ИспользоватьFTPРесурс + + + Normal + + + + ПараметрыДоставки + 617 + + ИспользоватьПапку + 288 + + Папка + 214 + true + true + + true + + + Объект.Папка + + None + + ПапкаРасширеннаяПодсказка + 926 + Label + true + true + + Left + + + + ПапкаКонтекстноеМеню + 215 + true + + InputField + true + Enter + true + Left + true + + + Opening + ПапкаОткрытие + + + ChoiceProcessing + ПапкаОбработкаВыбора + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Использовать папку</value> + + + ru + Использовать папку + + + ИспользоватьПапкуРасширеннаяПодсказка + 925 + Label + true + true + + Left + + + Page + + auto + + + + ИспользоватьСетевойКаталог + 289 + + СетевойКаталогWindows + 216 + + <key>ru</key> + <value>Windows</value> + + true + true + + true + + + Объект.СетевойКаталогWindows + + + OnChange + СетевойКаталогWindowsПриИзменении + + + СетевойКаталогWindowsРасширеннаяПодсказка + 929 + Label + true + true + + Left + + + + СетевойКаталогWindowsКонтекстноеМеню + 217 + true + + InputField + true + Enter + true + Left + true + + true + true + true + false + false + false + false + false + true + true + true + true + Normal + + + + СетевойКаталогLinux + 692 + + <key>ru</key> + <value>Linux</value> + + true + true + + true + + + Объект.СетевойКаталогLinux + + + OnChange + СетевойКаталогLinuxПриИзменении + + + СетевойКаталогLinuxРасширеннаяПодсказка + 931 + Label + true + true + + Left + + + + СетевойКаталогLinuxКонтекстноеМеню + 693 + true + + InputField + true + Enter + true + Left + true + + true + true + true + false + false + false + false + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Использовать сетевой каталог</value> + + + ru + Использовать сетевой каталог + + + ИспользоватьСетевойКаталогРасширеннаяПодсказка + 928 + Label + true + true + + Left + + + Page + + auto + + + + ИспользоватьFTPРесурс + 291 + + FTPСерверИКаталог + 388 + true + true + + true + + + FTPСерверИКаталог + + None + + FTPСерверИКаталогРасширеннаяПодсказка + 934 + Label + true + true + + Left + + + + FTPСерверИКаталогКонтекстноеМеню + 389 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + FTPСерверИКаталогНачалоВыбора + + + Opening + FTPСерверИКаталогОткрытие + + + Clearing + FTPСерверИКаталогОчистка + + + ChoiceProcessing + FTPСерверИКаталогОбработкаВыбора + + true + true + false + true + false + false + true + false + false + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Использовать FTPРесурс</value> + + + ru + Использовать FTPРесурс + + + ИспользоватьFTPРесурсРасширеннаяПодсказка + 933 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + <key>ru</key> + <value>Параметры доставки</value> + + + ru + Параметры доставки + + + ПараметрыДоставкиРасширеннаяПодсказка + 924 + Label + true + true + + Left + + + Pages + + Auto + + + + ПроверитьПубликацию + 640 + true + true + + true + + + ПроверитьПубликациюРасширеннаяПодсказка + 936 + Label + true + true + + Left + + + UsualButton + Form.Command.ПроверитьПубликацию + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Другие способы доставки</value> + + + ru + Другие способы доставки + + + ДругиеСпособыДоставкиРасширеннаяПодсказка + 919 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ДоставкаПоЭлектроннойПочте + 668 + + ГруппаИспользоватьЭлектроннуюПочту + 641 + + ИспользоватьЭлектроннуюПочту + 559 + true + true + + true + + + Объект.ИспользоватьЭлектроннуюПочту + + Right + + OnChange + ИспользоватьЭлектроннуюПочтуПриИзменении + + + ИспользоватьЭлектроннуюПочтуРасширеннаяПодсказка + 939 + Label + true + true + + Left + + + + ИспользоватьЭлектроннуюПочтуКонтекстноеМеню + 560 + true + + CheckBoxField + Enter + true + Left + true + + + + ТолькоУведомления + 646 + + ТолькоУведомленияПоказать + 647 + + ТолькоУведомить + 413 + true + true + + true + + + Объект.ТолькоУведомить + + Right + + OnChange + ТолькоУведомитьПриИзменении + + + ТолькоУведомитьРасширеннаяПодсказка + 943 + Label + true + true + + Left + + + + ТолькоУведомитьКонтекстноеМеню + 414 + true + + CheckBoxField + Center + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Только уведомления показать</value> + + + ru + Только уведомления показать + + + ТолькоУведомленияПоказатьРасширеннаяПодсказка + 942 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ТолькоУведомленияСкрыть + 648 + + Декорация3 + 649 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 946 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 650 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Только уведомления скрыть</value> + + + ru + Только уведомления скрыть + + + ТолькоУведомленияСкрытьРасширеннаяПодсказка + 945 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Только уведомления</value> + + + ru + Только уведомления + + + ТолькоУведомленияРасширеннаяПодсказка + 941 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа использовать электронную почту</value> + + + ru + Группа использовать электронную почту + + + ГруппаИспользоватьЭлектроннуюПочтуРасширеннаяПодсказка + 938 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаУчетнаяЗапись + 645 + + УчетнаяЗапись + 31 + true + true + + true + + + Объект.УчетнаяЗапись + + + УчетнаяЗаписьРасширеннаяПодсказка + 948 + Label + true + true + + Left + + + + УчетнаяЗаписьКонтекстноеМеню + 32 + true + + InputField + true + Auto + true + Left + true + + 21 + true + true + false + false + true + true + true + true + true + true + Normal + + + + ПроверитьЭлектроннуюПочту + 642 + true + true + + true + + + ПроверитьЭлектроннуюПочтуРасширеннаяПодсказка + 950 + Label + true + true + + Left + + + UsualButton + Form.Command.ПроверитьЭлектроннуюПочту + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа учетная запись</value> + + + ru + Группа учетная запись + + + ГруппаУчетнаяЗаписьРасширеннаяПодсказка + 947 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ПараметрыПисьма + 330 + + ТемаИТекстПисьма + 609 + + ТемаПисьма + 27 + true + true + + true + + + Объект.ТемаПисьма + + + ТемаПисьмаРасширеннаяПодсказка + 960 + Label + true + true + + Left + + + + ТемаПисьмаКонтекстноеМеню + 28 + + ТемаПисьмаКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылки + 172 + true + true + + true + + + ТемаПисьмаКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка + 953 + Label + true + true + + Left + + + Form.Command.ДобавитьИзменитьШаблонДатыРассылки + Normal + Auto + true + true + UserCmds + Auto + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонАвтора + 267 + true + true + + true + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонАвтораРасширеннаяПодсказка + 954 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонАвтора + Normal + Auto + true + true + UserCmds + Auto + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонПолучателя + 173 + true + true + + true + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонПолучателяРасширеннаяПодсказка + 955 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПолучателя + Normal + Auto + true + true + UserCmds + Auto + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонРассылки + 268 + true + true + + true + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонРассылкиРасширеннаяПодсказка + 956 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонНаименованияРассылки + Normal + Auto + true + true + UserCmds + Auto + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонСистемы + 402 + true + true + + true + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонСистемыРасширеннаяПодсказка + 957 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСистемы + Normal + Auto + true + true + UserCmds + Auto + + + ТемаПисьмаКонтекстноеМенюВосстановитьШаблонПоУмолчанию + 671 + true + true + + true + + + ТемаПисьмаКонтекстноеМенюВосстановитьШаблонПоУмолчаниюРасширеннаяПодсказка + 958 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + + + ТемаПисьмаКонтекстноеМенюПредпросмотрШаблона + 277 + true + true + + true + + + ТемаПисьмаКонтекстноеМенюПредпросмотрШаблонаРасширеннаяПодсказка + 959 + Label + true + true + + Left + + + Form.Command.ПредпросмотрШаблона + Normal + Auto + true + true + UserCmds + Auto + + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СтраницыТекстПисьма + 127 + + СтраницыТекстПисьмаHTML + 128 + + КоманднаяПанельТекстПисьмаФорматированныйДокумент + 131 + + ТекстПисьмаФорматированныйДокументДобавитьПараметрШаблона + 301 + + ТекстПисьмаФорматированныйДокументДобавитьИлиИзменитьШаблонДатыРассылки + 303 + true + true + + true + + + ТекстПисьмаФорматированныйДокументДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка + 966 + Label + true + true + + Left + + + Form.Command.ДобавитьИзменитьШаблонДатыРассылки + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументДобавитьШаблонАвтора + 304 + true + true + + true + + + ТекстПисьмаФорматированныйДокументДобавитьШаблонАвтораРасширеннаяПодсказка + 967 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонАвтора + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументДобавитьШаблонПолучателя + 305 + true + true + + true + + + ТекстПисьмаФорматированныйДокументДобавитьШаблонПолучателяРасширеннаяПодсказка + 968 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПолучателя + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументДобавитьШаблонРассылки + 306 + true + true + + true + + + ТекстПисьмаФорматированныйДокументДобавитьШаблонРассылкиРасширеннаяПодсказка + 969 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонНаименованияРассылки + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументДобавитьШаблонСформированныхОтчетов + 307 + true + true + + true + + + ТекстПисьмаФорматированныйДокументДобавитьШаблонСформированныхОтчетовРасширеннаяПодсказка + 970 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСформированныхОтчетов + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументДобавитьШаблонСистемы + 406 + true + true + + true + + + ТекстПисьмаФорматированныйДокументДобавитьШаблонСистемыРасширеннаяПодсказка + 971 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСистемы + Normal + Auto + true + true + UserCmds + Auto + + + ДобавитьШаблонСпособаДоставки + 419 + true + true + + true + + + ДобавитьШаблонСпособаДоставкиРасширеннаяПодсказка + 972 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСпособаДоставки + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументПредпросмотрШаблона + 395 + true + true + + true + + + ТекстПисьмаФорматированныйДокументПредпросмотрШаблонаРасширеннаяПодсказка + 973 + Label + true + true + + Left + + + Form.Command.ПредпросмотрШаблона + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Параметр</value> + + + ru + Текст письма форматированный документ добавить параметр шаблона + + + ТекстПисьмаФорматированныйДокументДобавитьПараметрШаблонаРасширеннаяПодсказка + 965 + Label + true + true + + Left + + + Popup + + + StdPicture.DataCompositionConditionalAppearance + + Auto + Normal + + + + ТекстПисьмаФорматированныйДокументКартинка + 174 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКартинкаРасширеннаяПодсказка + 974 + Label + true + true + + Left + + + Form.Item.ТекстПисьмаФорматированныйДокумент.StandardCommand.Picture + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СтандартныеДействия + 363 + + ТекстПисьмаФорматированныйДокументВыровнятьВлево + 633 + true + true + + true + + + ТекстПисьмаФорматированныйДокументВыровнятьВлевоРасширеннаяПодсказка + 976 + Label + true + true + + Left + + + Form.Item.ТекстПисьмаФорматированныйДокумент.StandardCommand.AlignLeft + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ТекстПисьмаФорматированныйДокументВыровнятьПоЦентру + 634 + true + true + + true + + + ТекстПисьмаФорматированныйДокументВыровнятьПоЦентруРасширеннаяПодсказка + 977 + Label + true + true + + Left + + + Form.Item.ТекстПисьмаФорматированныйДокумент.StandardCommand.AlignCenter + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ТекстПисьмаФорматированныйДокументВыровнятьВправо + 636 + true + true + + true + + + ТекстПисьмаФорматированныйДокументВыровнятьВправоРасширеннаяПодсказка + 978 + Label + true + true + + Left + + + Form.Item.ТекстПисьмаФорматированныйДокумент.StandardCommand.AlignRight + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ТекстПисьмаФорматированныйДокументВыровнятьПоШирине + 637 + true + true + + true + + + ТекстПисьмаФорматированныйДокументВыровнятьПоШиринеРасширеннаяПодсказка + 979 + Label + true + true + + Left + + + Form.Item.ТекстПисьмаФорматированныйДокумент.StandardCommand.AlignJustify + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ТекстПисьмаФорматированныйДокументУвеличитьОтступ + 638 + true + true + + true + + + ТекстПисьмаФорматированныйДокументУвеличитьОтступРасширеннаяПодсказка + 980 + Label + true + true + + Left + + + Form.Item.ТекстПисьмаФорматированныйДокумент.StandardCommand.IncreaseIndent + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ТекстПисьмаФорматированныйДокументУменьшитьОтступ + 639 + true + true + + true + + + ТекстПисьмаФорматированныйДокументУменьшитьОтступРасширеннаяПодсказка + 981 + Label + true + true + + Left + + + Form.Item.ТекстПисьмаФорматированныйДокумент.StandardCommand.DecreaseIndent + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Стандартные действия</value> + + + ru + Стандартные действия + + + СтандартныеДействияРасширеннаяПодсказка + 975 + Label + true + true + + Left + + + + Item.ТекстПисьмаФорматированныйДокумент + + + + HTML + 605 + + ИзменитьТипТекстаНаHTMLПометка + 628 + true + true + + true + + + ИзменитьТипТекстаНаHTMLПометкаРасширеннаяПодсказка + 983 + Label + true + true + + Left + + + Form.Command.ИзменитьТипТекстаНаHTML + Normal + Auto + true + true + UserCmds + true + Auto + + + ИзменитьТипТекстаНаОбычный + 606 + true + true + + true + + + ИзменитьТипТекстаНаОбычныйРасширеннаяПодсказка + 984 + Label + true + true + + Left + + + Form.Command.ИзменитьТипТекстаНаОбычный + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>HTML</value> + + + ru + HTML + + + HTMLРасширеннаяПодсказка + 982 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + ДобавитьШаблонПоУмолчанию + 674 + true + true + + true + + + ДобавитьШаблонПоУмолчаниюРасширеннаяПодсказка + 985 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель текст письма форматированный документ</value> + + + ru + Командная панель текст письма форматированный документ + + + КоманднаяПанельТекстПисьмаФорматированныйДокументРасширеннаяПодсказка + 964 + Label + true + true + + Left + + + CommandBar + + Left + + + + ТекстПисьмаФорматированныйДокумент + 129 + true + true + + true + + + ТекстПисьмаФорматированныйДокумент + + None + + ТекстПисьмаФорматированныйДокументРасширеннаяПодсказка + 995 + Label + true + true + + Left + + + + ТекстПисьмаФорматированныйДокументКонтекстноеМеню + 130 + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылки + 312 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка + 986 + Label + true + true + + Left + + + Form.Command.ДобавитьИзменитьШаблонДатыРассылки + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонАвтора + 308 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонАвтораРасширеннаяПодсказка + 987 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонАвтора + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонПолучателя + 309 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонПолучателяРасширеннаяПодсказка + 988 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПолучателя + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонРассылки + 310 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонРассылкиРасширеннаяПодсказка + 989 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонНаименованияРассылки + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСформированныхОтчетов + 311 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСформированныхОтчетовРасширеннаяПодсказка + 990 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСформированныхОтчетов + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСистемы + 403 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСистемыРасширеннаяПодсказка + 991 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСистемы + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСпособаДоставки + 420 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСпособаДоставкиРасширеннаяПодсказка + 992 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСпособаДоставки + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонПоУмолчанию + 673 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонПоУмолчаниюРасширеннаяПодсказка + 993 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюПредпросмотрШаблона + 394 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюПредпросмотрШаблонаРасширеннаяПодсказка + 994 + Label + true + true + + Left + + + Form.Command.ПредпросмотрШаблона + Normal + Auto + true + true + UserCmds + Auto + + true + + FormattedDocumentField + Enter + true + Left + true + + 1 + true + 1 + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Страницы текст письма HTML</value> + + + ru + Страницы текст письма HTML + + + СтраницыТекстПисьмаHTMLРасширеннаяПодсказка + 963 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницыТекстПисьмаОбычныйТекст + 125 + + КоманднаяПанельТекстПисьма + 157 + + ТекстПисьмаДобавитьПараметрШаблона + 323 + + ДобавитьИлиИзменитьШаблонДатыРассылки + 328 + true + true + + true + + + ДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка + 1000 + Label + true + true + + Left + + + Form.Command.ДобавитьИзменитьШаблонДатыРассылки + Normal + Auto + true + true + UserCmds + Auto + + + ДобавитьШаблонАвтора + 324 + true + true + + true + + + ДобавитьШаблонАвтораРасширеннаяПодсказка + 1001 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонАвтора + Normal + Auto + true + true + UserCmds + Auto + + + ДобавитьШаблонПолучателя + 325 + true + true + + true + + + ДобавитьШаблонПолучателяРасширеннаяПодсказка + 1002 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПолучателя + Normal + Auto + true + true + UserCmds + Auto + + + ДобавитьШаблонРассылки + 326 + true + true + + true + + + ДобавитьШаблонРассылкиРасширеннаяПодсказка + 1003 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонНаименованияРассылки + Normal + Auto + true + true + UserCmds + Auto + + + ДобавитьШаблонСформированныхОтчетов + 327 + true + true + + true + + + ДобавитьШаблонСформированныхОтчетовРасширеннаяПодсказка + 1004 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСформированныхОтчетов + Normal + Auto + true + true + UserCmds + Auto + + + ДобавитьШаблонСистемы + 404 + true + true + + true + + + ДобавитьШаблонСистемыРасширеннаяПодсказка + 1005 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСистемы + Normal + Auto + true + true + UserCmds + Auto + + + ДобавитьШаблонСпособаДоставки1 + 421 + true + true + + true + + + ДобавитьШаблонСпособаДоставки1РасширеннаяПодсказка + 1006 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСпособаДоставки + Normal + Auto + true + true + UserCmds + Auto + + + ПредпросмотрШаблона + 393 + true + true + + true + + + ПредпросмотрШаблонаРасширеннаяПодсказка + 1007 + Label + true + true + + Left + + + Form.Command.ПредпросмотрШаблона + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Параметр</value> + + + ru + Добавить параметр шаблона + + + ТекстПисьмаДобавитьПараметрШаблонаРасширеннаяПодсказка + 999 + Label + true + true + + Left + + + Popup + + + StdPicture.DataCompositionConditionalAppearance + + Auto + Normal + + + + ОбычныйТекст + 607 + + ИзменитьТипТекстаНаHTML + 608 + true + true + + true + + + ИзменитьТипТекстаНаHTMLРасширеннаяПодсказка + 1009 + Label + true + true + + Left + + + Form.Command.ИзменитьТипТекстаНаHTML + Normal + Auto + true + true + UserCmds + Auto + + + ИзменитьТипТекстаНаОбычныйПометка + 629 + true + true + + true + + + ИзменитьТипТекстаНаОбычныйПометкаРасширеннаяПодсказка + 1010 + Label + true + true + + Left + + + Form.Command.ИзменитьТипТекстаНаОбычный + Normal + Auto + true + true + UserCmds + true + Auto + + true + true + + true + + + <key>ru</key> + <value>Обычный текст</value> + + + ru + Обычный текст + + + ОбычныйТекстРасширеннаяПодсказка + 1008 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + ДобавитьШаблонПоУмолчанию1 + 675 + true + true + + true + + + ДобавитьШаблонПоУмолчанию1РасширеннаяПодсказка + 1011 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель текст письма</value> + + + ru + Командная панель текст письма + + + КоманднаяПанельТекстПисьмаРасширеннаяПодсказка + 998 + Label + true + true + + Left + + + CommandBar + + Left + + + + ТекстПисьма + 21 + true + true + + true + + + Объект.ТекстПисьма + + None + + ТекстПисьмаРасширеннаяПодсказка + 1021 + Label + true + true + + Left + + + + ТекстПисьмаКонтекстноеМеню + 22 + + ТекстПисьмаКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылки + 322 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка + 1012 + Label + true + true + + Left + + + Form.Command.ДобавитьИзменитьШаблонДатыРассылки + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонАвтора + 318 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонАвтораРасширеннаяПодсказка + 1013 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонАвтора + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонПолучателя + 319 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонПолучателяРасширеннаяПодсказка + 1014 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПолучателя + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонРассылки + 320 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонРассылкиРасширеннаяПодсказка + 1015 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонНаименованияРассылки + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонСформированныхОтчетов + 321 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонСформированныхОтчетовРасширеннаяПодсказка + 1016 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСформированныхОтчетов + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонСистемы + 405 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонСистемыРасширеннаяПодсказка + 1017 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСистемы + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонСпособаДоставки + 422 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонСпособаДоставкиРасширеннаяПодсказка + 1018 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСпособаДоставки + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонПоУмолчанию + 672 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонПоУмолчаниюРасширеннаяПодсказка + 1019 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюПредпросмотрШаблона + 392 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюПредпросмотрШаблонаРасширеннаяПодсказка + 1020 + Label + true + true + + Left + + + Form.Command.ПредпросмотрШаблона + Normal + Auto + true + true + UserCmds + Auto + + true + + TextDocumentField + Auto + true + Left + true + + 1 + true + 1 + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Страницы текст письма обычный текст</value> + + + ru + Страницы текст письма обычный текст + + + СтраницыТекстПисьмаОбычныйТекстРасширеннаяПодсказка + 997 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы текст письма</value> + + + ru + Страницы текст письма + + + СтраницыТекстПисьмаРасширеннаяПодсказка + 962 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Тема и текст письма</value> + + + ru + Тема и текст письма + + + ТемаИТекстПисьмаРасширеннаяПодсказка + 952 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + НастройкаПолучателей + 385 + + ВидПочтовогоАдресаПолучателей + 571 + true + true + + true + + + Объект.ВидПочтовогоАдресаПолучателей + + + ВидПочтовогоАдресаПолучателейРасширеннаяПодсказка + 1024 + Label + true + true + + Left + + + + ВидПочтовогоАдресаПолучателейКонтекстноеМеню + 572 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + ВидПочтовогоАдресаПолучателейНачалоВыбора + + true + true + true + false + true + Items + true + true + OnActivate + true + true + + Отбор.Родитель + + ГруппаКонтакнойИнформацииТипаПолучателей + + + + Отбор.Тип + + + Enum.ТипыКонтактнойИнформации.EnumValue.АдресЭлектроннойПочты + + + + Normal + + + + Получатели + 39 + true + true + + true + + + Объект.Получатели + + None + CancelSearch + Copy + CopyToClipboard + EndEdit + Find + + ПолучателиПолучатель + 44 + true + true + + true + + + Объект.Получатели.Получатель + + + ПолучателиПолучательРасширеннаяПодсказка + 1042 + Label + true + true + + Left + + + + ПолучателиПолучательКонтекстноеМеню + 45 + true + + InputField + true + Left + true + + true + true + true + true + true + true + Normal + + + ТипПолучателейРассылки + + + + + + ПолучателиИсключен + 666 + true + true + + true + + + Объект.Получатели.Исключен + + + ПолучателиИсключенРасширеннаяПодсказка + 1044 + Label + true + true + + Left + + + + ПолучателиИсключенКонтекстноеМеню + 667 + true + + CheckBoxField + true + Left + true + + + + ПолучателиКоманднаяПанель + 41 + + ПолучателиПодобрать + 136 + true + true + + true + + + ПолучателиПодобратьРасширеннаяПодсказка + 1026 + Label + true + true + + Left + + + Form.Command.ПолучателиПодобрать + Normal + Auto + true + true + UserCmds + Auto + + + ПолучателиУдалить + 134 + true + true + + true + + + ПолучателиУдалитьРасширеннаяПодсказка + 1027 + Label + true + true + + Left + + + Form.Item.Получатели.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + + + ПолучателиПереместитьВверх + 669 + true + true + + true + + + ПолучателиПереместитьВверхРасширеннаяПодсказка + 1028 + Label + true + true + + Left + + + Form.Item.Получатели.StandardCommand.MoveUp + Normal + Auto + true + true + UserCmds + Auto + + + ПолучателиПереместитьВниз + 670 + true + true + + true + + + ПолучателиПереместитьВнизРасширеннаяПодсказка + 1029 + Label + true + true + + Left + + + Form.Item.Получатели.StandardCommand.MoveDown + Normal + Auto + true + true + UserCmds + Auto + + + ПолучателиСортироватьСписокПоВозрастанию + 146 + true + true + + true + + + ПолучателиСортироватьСписокПоВозрастаниюРасширеннаяПодсказка + 1030 + Label + true + true + + Left + + + Form.Item.Получатели.StandardCommand.SortListAsc + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ПолучателиСортироватьСписокПоУбыванию + 147 + true + true + + true + + + ПолучателиСортироватьСписокПоУбываниюРасширеннаяПодсказка + 1031 + Label + true + true + + Left + + + Form.Item.Получатели.StandardCommand.SortListDesc + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + Left + + + BeforeEditEnd + ПолучателиПередОкончаниемРедактирования + + + Drag + ПолучателиПеретаскивание + + + ChoiceProcessing + ПолучателиОбработкаВыбора + + + ПолучателиСтрокаПоиска + 1033 + + ПолучателиСтрокаПоискаРасширеннаяПодсказка + 1035 + Label + true + true + + Left + + + + ПолучателиСтрокаПоискаКонтекстноеМеню + 1034 + true + + Получатели + + true + + + + ПолучателиСостояниеПросмотра + 1036 + + ПолучателиСостояниеПросмотраРасширеннаяПодсказка + 1038 + Label + true + true + + Left + + + + ПолучателиСостояниеПросмотраКонтекстноеМеню + 1037 + true + + ViewStatusAddition + Получатели + + true + + + + ПолучателиУправлениеПоиском + 1039 + + ПолучателиУправлениеПоискомРасширеннаяПодсказка + 1041 + Label + true + true + + Left + + + + ПолучателиУправлениеПоискомКонтекстноеМеню + 1040 + true + + SearchControlAddition + Получатели + + true + + + + ПолучателиРасширеннаяПодсказка + 1032 + Label + true + true + + Left + + + + ПолучателиКонтекстноеМеню + 40 + true + + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + true + true + false + true + Auto + Auto + true + true + true + None + None + None + true + +
    + true + true + + true + + + <key>ru</key> + <value>Настройка получателей</value> + + + ru + Настройка получателей + + 20 + + НастройкаПолучателейРасширеннаяПодсказка + 1023 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
    + true + true + + true + + + <key>ru</key> + <value>Параметры письма</value> + + + ru + Параметры письма + + + ПараметрыПисьмаРасширеннаяПодсказка + 951 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + +
    + true + true + + true + + + <key>ru</key> + <value>Доставка по электронной почте</value> + + + ru + Доставка по электронной почте + + + ДоставкаПоЭлектроннойПочтеРасширеннаяПодсказка + 937 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + +
    + true + true + + true + + + <key>ru</key> + <value>Доставка</value> + + + ru + Страница доставка + + + СтраницаДоставкаРасширеннаяПодсказка + 918 + Label + true + true + + Left + + + Page + + Vertical + auto + +
    + + СтраницаДополнительно + 199 + + ФорматыПоУмолчанию + 335 + true + true + + true + + + ФорматыПоУмолчанию + + + ФорматыПоУмолчаниюРасширеннаяПодсказка + 1055 + Label + true + true + + Left + + + + ФорматыПоУмолчаниюКонтекстноеМеню + 336 + true + + InputField + Enter + true + Left + true + + + StartChoice + ФорматыПоУмолчаниюНачалоВыбора + + + Clearing + ФорматыПоУмолчаниюОчистка + + true + true + true + false + true + true + false + false + true + Normal + + + + ФорматыОтчетовИКнопки + 686 + + ФорматыОтчетов + 100 + true + true + + true + + + Объект.Отчеты + + None + Add + CancelSearch + Change + Copy + CopyToClipboard + Delete + EndEdit + Find + MoveDown + MoveUp + OutputList + SortListAsc + SortListDesc + + ФорматыОтчетовОтчет + 230 + true + true + + true + + + Объект.Отчеты.Представление + + + ФорматыОтчетовОтчетРасширеннаяПодсказка + 1072 + Label + true + true + + Left + + + + ФорматыОтчетовОтчетКонтекстноеМеню + 231 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФорматыОтчетовФорматы + 232 + true + true + + true + + + Объект.Отчеты.Форматы + + + ФорматыОтчетовФорматыРасширеннаяПодсказка + 1074 + Label + true + true + + Left + + + + ФорматыОтчетовФорматыКонтекстноеМеню + 233 + true + + InputField + true + Left + true + + + StartChoice + ФорматыОтчетовФорматыНачалоВыбора + + + Clearing + ФорматыОтчетовФорматыОчистка + + true + true + true + false + true + true + false + false + true + Normal + + + + ФорматыОтчетовОтправлятьЕслиПустой + 534 + true + true + + true + + + Объект.Отчеты.ОтправлятьЕслиПустой + + + ФорматыОтчетовОтправлятьЕслиПустойРасширеннаяПодсказка + 1076 + Label + true + true + + Left + + + + ФорматыОтчетовОтправлятьЕслиПустойКонтекстноеМеню + 535 + true + + CheckBoxField + Auto + true + Left + true + + + + ФорматыОтчетовКоманднаяПанель + 102 + + ФорматыОтчетовУстановитьПометкиОтправлятьЕслиПустой + 690 + true + + true + + + ФорматыОтчетовУстановитьПометкиОтправлятьЕслиПустойРасширеннаяПодсказка + 1060 + Label + true + true + + Left + + + Form.Command.УстановитьПометкиОтправлятьЕслиПустой + Normal + PictureAndText + true + true + UserCmds + Auto + + + ФорматыОтчетовСнятьПометкиОтправлятьЕслиПустой + 691 + true + + true + + + ФорматыОтчетовСнятьПометкиОтправлятьЕслиПустойРасширеннаяПодсказка + 1061 + Label + true + true + + Left + + + Form.Command.СнятьПометкиОтправлятьЕслиПустой + Normal + PictureAndText + true + true + UserCmds + Auto + + Right + true + + + ФорматыОтчетовСтрокаПоиска + 1063 + + ФорматыОтчетовСтрокаПоискаРасширеннаяПодсказка + 1065 + Label + true + true + + Left + + + + ФорматыОтчетовСтрокаПоискаКонтекстноеМеню + 1064 + true + + ФорматыОтчетов + + true + + + + ФорматыОтчетовСостояниеПросмотра + 1066 + + ФорматыОтчетовСостояниеПросмотраРасширеннаяПодсказка + 1068 + Label + true + true + + Left + + + + ФорматыОтчетовСостояниеПросмотраКонтекстноеМеню + 1067 + true + + ViewStatusAddition + ФорматыОтчетов + + true + + + + ФорматыОтчетовУправлениеПоиском + 1069 + + ФорматыОтчетовУправлениеПоискомРасширеннаяПодсказка + 1071 + Label + true + true + + Left + + + + ФорматыОтчетовУправлениеПоискомКонтекстноеМеню + 1070 + true + + SearchControlAddition + ФорматыОтчетов + + true + + + + ФорматыОтчетовРасширеннаяПодсказка + 1062 + Label + true + true + + Left + + + + ФорматыОтчетовКонтекстноеМеню + 101 + + ФорматыОтчетовКонтекстноеМенюУстановитьПометкиОтправлятьЕслиПустой + 684 + true + true + + true + + + ФорматыОтчетовКонтекстноеМенюУстановитьПометкиОтправлятьЕслиПустойРасширеннаяПодсказка + 1058 + Label + true + true + + Left + + + Form.Command.УстановитьПометкиОтправлятьЕслиПустой + Normal + Auto + true + true + UserCmds + Auto + + + ФорматыОтчетовКонтекстноеМенюСнятьПометкиОтправлятьЕслиПустой + 685 + true + true + + true + + + ФорматыОтчетовКонтекстноеМенюСнятьПометкиОтправлятьЕслиПустойРасширеннаяПодсказка + 1059 + Label + true + true + + Left + + + Form.Command.СнятьПометкиОтправлятьЕслиПустой + Normal + Auto + true + true + UserCmds + Auto + + true + + true + true + true + true + true +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + None + None + None + true + +
    + + КнопкиФорматовОтчетов + 687 + + УстановитьПометкиОтправлятьЕслиПустой + 688 + true + true + + true + + + УстановитьПометкиОтправлятьЕслиПустойРасширеннаяПодсказка + 1087 + Label + true + true + + Left + + + UsualButton + Form.Command.УстановитьПометкиОтправлятьЕслиПустой + Normal + Picture + true + true + UserCmds + Auto + + + СнятьПометкиОтправлятьЕслиПустой + 689 + true + true + + true + + + СнятьПометкиОтправлятьЕслиПустойРасширеннаяПодсказка + 1088 + Label + true + true + + Left + + + UsualButton + Form.Command.СнятьПометкиОтправлятьЕслиПустой + Normal + Picture + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Кнопки форматов отчетов</value> + + + ru + Кнопки форматов отчетов + + + КнопкиФорматовОтчетовРасширеннаяПодсказка + 1086 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Форматы отчетов и кнопки</value> + + + ru + Форматы отчетов и кнопки + + + ФорматыОтчетовИКнопкиРасширеннаяПодсказка + 1057 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + +
    + + ГруппаПараметрыАрхивированияВZIP + 98 + + Архивировать + 13 + + <key>ru</key> + <value>Архивировать в ZIP:</value> + + true + true + + true + + + Объект.Архивировать + + Right + + OnChange + АрхивироватьПриИзменении + + + АрхивироватьРасширеннаяПодсказка + 1090 + Label + true + true + + Left + + + + АрхивироватьКонтекстноеМеню + 14 + true + + CheckBoxField + Auto + true + Left + true + + + + ИмяАрхива + 15 + true + true + + true + + + Объект.ИмяАрхива + + None + + ИмяАрхиваРасширеннаяПодсказка + 1094 + Label + true + true + + Left + + + + ИмяАрхиваКонтекстноеМеню + 16 + + ИмяАрхиваКонтекстноеМенюДобавитьШаблонРассылки + 351 + true + true + + true + + + ИмяАрхиваКонтекстноеМенюДобавитьШаблонРассылкиРасширеннаяПодсказка + 1092 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонНаименованияРассылки + Normal + Auto + true + true + UserCmds + Auto + + + ИмяАрхиваКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылки + 352 + true + true + + true + + + ИмяАрхиваКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка + 1093 + Label + true + true + + Left + + + Form.Command.ДобавитьИзменитьШаблонДатыРассылки + Normal + Auto + true + true + UserCmds + Auto + + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПарольАрхива + 17 + true + true + + true + + + Объект.ПарольАрхива + + + ПарольАрхиваРасширеннаяПодсказка + 1096 + Label + true + true + + Left + + + + ПарольАрхиваКонтекстноеМеню + 18 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Параметры архивирования в ZIP</value> + + + ru + Группа параметры архивирования ВZIP + + true + + ГруппаПараметрыАрхивированияВZIPРасширеннаяПодсказка + 1089 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ДополнительныеПараметрыРассылкиПоЭлектроннойПочте + 200 + + АдресОтвета + 33 + true + true + + true + + + Объект.АдресОтвета + + + АдресОтветаРасширеннаяПодсказка + 1099 + Label + true + true + + Left + + + + АдресОтветаКонтекстноеМеню + 34 + true + + InputField + Auto + true + Left + true + + 30 + true + true + false + true + true + true + true + Normal + + + + ИспользоватьСкрытыеКопии + 35 + true + true + + true + + + Объект.СкрытыеКопии + + Right + + ИспользоватьСкрытыеКопииРасширеннаяПодсказка + 1101 + Label + true + true + + Left + + + + ИспользоватьСкрытыеКопииКонтекстноеМеню + 36 + true + + CheckBoxField + Auto + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Параметры доставки по электронной почте</value> + + + ru + Дополнительные параметры рассылки по электронной почте + + true + + ДополнительныеПараметрыРассылкиПоЭлектроннойПочтеРасширеннаяПодсказка + 1098 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ДополнительныеПараметры + 355 + + Родитель + 382 + true + false + + true + + + Объект.Parent + + + РодительРасширеннаяПодсказка + 1104 + Label + true + true + + Left + + + + РодительКонтекстноеМеню + 383 + true + + InputField + Enter + true + Left + true + + + ChoiceProcessing + РодительОбработкаВыбора + + true + true + false + true + false + true + true + false + true + true + true + true + Normal + + + + ДобавлятьДатуРассылкиВИменаФайлов + 653 + true + true + + true + + Right + + ДобавлятьДатуРассылкиВИменаФайловРасширеннаяПодсказка + 1106 + Label + true + true + + Left + + + + ДобавлятьДатуРассылкиВИменаФайловКонтекстноеМеню + 654 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаАвторРодитель + 396 + true + true + + true + + + <key>ru</key> + <value>Автор родитель</value> + + + ru + Группа автор родитель + + + ГруппаАвторРодительРасширеннаяПодсказка + 1108 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Equal + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Дополнительные параметры</value> + + + ru + Дополнительные параметры + + true + + ДополнительныеПараметрыРасширеннаяПодсказка + 1103 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Дополнительно</value> + + + ru + Страница дополнительно + + + СтраницаДополнительноРасширеннаяПодсказка + 1054 + Label + true + true + + Left + + + Page + + Vertical + auto + +
    + true + true + + true + + + <key>ru</key> + <value>Страницы</value> + + + СтраницыРасширеннаяПодсказка + 710 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + +
    + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + CustomizeForm + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + CatalogObject.РассылкиОтчетов + + + true + + + true + +
    true
    + true + + + Объект.Получатели + + + + + Объект.Отчеты + + + Форматы + + <key>ru</key> + <value>Форматы</value> + + 1 + + String + + + + true + + + true + + + + ВнесеныИзменения + + <key>ru</key> + <value>Внесены изменения</value> + + 9 + + Boolean + + + true + + + true + + + + СКД + + <key>ru</key> + <value>СКД</value> + + 2 + + Boolean + + + true + + + true + + + + АдресНастроек + + <key>ru</key> + <value>Адрес настроек</value> + + 3 + + String + + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Отчет</value> + + 4 + + String + + + + true + + + true + + + + Инициализирован + + <key>ru</key> + <value>Инициализирован</value> + + 5 + + Boolean + + + true + + + true + + + +
    + + НастройкиТекущегоОтчета + + <key>ru</key> + <value>Настройки текущего отчета</value> + + 2 + + ValueTable + + + true + + + true + + true + + Реквизит + + <key>ru</key> + <value>Реквизит</value> + + 1 + + String + + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 2 + + String + + + + true + + + true + + + + Тип + + <key>ru</key> + <value>Тип</value> + + 4 + + TypeDescription + + + true + + + true + + + + Значение + + <key>ru</key> + <value>Значение</value> + + 3 + + Boolean + String + Date + Number + AnyRef + + 20 + 8 + + + + + + true + + + true + + + + Использование + + <key>ru</key> + <value>Использование</value> + + 5 + + Boolean + + + true + + + true + + + + Обнаружен + + <key>ru</key> + <value>Обнаружен</value> + + 6 + + Boolean + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 7 + + Number + + 2 + + + + true + + + true + + + + + СписокФорматов + + <key>ru</key> + <value>Список форматов</value> + + 3 + + ValueList + + + true + + + true + + true + + + + + + ТекстПисьмаФорматированныйДокумент + + <key>ru</key> + <value>Текст письма форматированный документ</value> + + 9 + + FormattedDocument + + + true + + + true + + true + + + СтруктураВложенийПисьмаВФорматеHTML + + <key>ru</key> + <value>Структура вложений письма в формате HTML</value> + + 10 + + + true + + + true + + true + + + ТипПолучателейРассылки + + <key>ru</key> + <value>Получатели</value> + + 8 + + TypeDescription + + + true + + + true + + true + + + КомпоновщикНастроекКД + + <key>ru</key> + <value>Компоновщик настроек КД</value> + + 16 + + DataCompositionSettingsComposer + + + true + + + true + + true + + + ИдентификаторТекущейСтрокиТаблицыОтчетов + + <key>ru</key> + <value>Идентификатор текущей строки таблицы отчетов</value> + + 17 + + Number + + + + true + + + true + + + + ТаблицаНастроекОтчетов + + <key>ru</key> + <value>Таблица настроек отчетов</value> + + 19 + + ValueTable + + + true + + + true + + + Отчет + + <key>ru</key> + <value>Отчет</value> + + 2 + + CatalogRef.ДополнительныеОтчетыИОбработки + CatalogRef.ВариантыОтчетов + + + true + + + true + + + + ИмяОтчета + + <key>ru</key> + <value>Имя отчета</value> + + 1 + + String + + + + true + + + true + + + + ЭтоОтчетСКД + + <key>ru</key> + <value>Это отчет СКД</value> + + 3 + + Boolean + + + true + + + true + + + + АдресНастройки + + <key>ru</key> + <value>Адрес настройки</value> + + 4 + + String + + + + true + + + true + + + + + ФорматыПоУмолчанию + + <key>ru</key> + <value>Форматы сохранения отчетов (по умолчанию)</value> + + 20 + + String + + + + true + + + true + + true + + + ТаблицаТиповПолучателей + + <key>ru</key> + <value>Таблица типов получателей</value> + + 11 + + ValueTable + + + true + + + true + + + ИОМД + + <key>ru</key> + <value>ИОМД</value> + + 1 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + + + ТипПолучателей + + <key>ru</key> + <value>Тип получателей</value> + + 3 + + TypeDescription + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 6 + + String + + + + true + + + true + + + + ОсновнойВидКИ + + <key>ru</key> + <value>Основной вид КИ</value> + + 2 + + CatalogRef.ВидыКонтактнойИнформации + + + true + + + true + + + + ГруппаКИ + + <key>ru</key> + <value>Группа КИ</value> + + 4 + + CatalogRef.ВидыКонтактнойИнформации + + + true + + + true + + + + ПутьФормыВыбора + + <key>ru</key> + <value>Путь формы выбора</value> + + 5 + + String + + + + true + + + true + + + + ОсновнойТип + + <key>ru</key> + <value>Основной тип</value> + + 7 + + TypeDescription + + + true + + + true + + + + + ГруппаКонтакнойИнформацииТипаПолучателей + + <key>ru</key> + <value>Группа контакной информации типа получателей</value> + + 4 + + CatalogRef.ВидыКонтактнойИнформации + + + true + + + true + + + + РассылкуРедактируетАвтор + + <key>ru</key> + <value>Рассылку редактирует автор</value> + + 6 + + Boolean + + + true + + + true + + + + СписокФорматовПоУмолчанию + + <key>ru</key> + <value>Список форматов по умолчанию</value> + + 7 + + ValueList + + + true + + + true + + + + + + + СписокФорматовПоУмолчаниюПредставление + + <key>ru</key> + <value>Список форматов по умолчанию представление</value> + + 12 + + String + + + + true + + + true + + + + FTPСерверИКаталог + + <key>ru</key> + <value>Сервер и каталог</value> + + 18 + + String + + 300 + + + + true + + + true + + + + Кэш + + <key>ru</key> + <value>Кэшируемые значения</value> + + 23 + + + true + + + true + + + + Август + + <key>ru</key> + <value>Август </value> + + 5 + + Boolean + + + true + + + true + + true + + + Апрель + + <key>ru</key> + <value>Апрель </value> + + 13 + + Boolean + + + true + + + true + + true + + + Воскресенье + + <key>ru</key> + <value>Воскресенье</value> + + 21 + + Boolean + + + true + + + true + + true + + + ВремяНачала + + <key>ru</key> + <value>Время начала</value> + + 22 + + Date + + Time + + + + true + + + true + + true + + + Вторник + + <key>ru</key> + <value>Вторник</value> + + 24 + + Boolean + + + true + + + true + + true + + + Декабрь + + <key>ru</key> + <value>Декабрь</value> + + 25 + + Boolean + + + true + + + true + + true + + + ДеньВМесяце + + <key>ru</key> + <value>День в месяце</value> + + 26 + + Number + + 2 + true + + + + true + + + true + + true + + + ИндексыДнейНедели + + <key>ru</key> + <value>Индексы дней недели</value> + + 27 + + + true + + + true + + + + ИндексыМесяцев + + <key>ru</key> + <value>Индексы месяцев</value> + + 28 + + + true + + + true + + + + Июль + + <key>ru</key> + <value>Июль </value> + + 29 + + Boolean + + + true + + + true + + true + + + Июнь + + <key>ru</key> + <value>Июнь </value> + + 30 + + Boolean + + + true + + + true + + true + + + Май + + <key>ru</key> + <value>Май </value> + + 32 + + Boolean + + + true + + + true + + true + + + Март + + <key>ru</key> + <value>Март </value> + + 33 + + Boolean + + + true + + + true + + true + + + Ноябрь + + <key>ru</key> + <value>Ноябрь</value> + + 34 + + Boolean + + + true + + + true + + true + + + Октябрь + + <key>ru</key> + <value>Октябрь</value> + + 35 + + Boolean + + + true + + + true + + true + + + ПериодПовтораДней + + <key>ru</key> + <value>Период повтора</value> + + 36 + + Number + + 3 + true + + + + true + + + true + + true + + + Понедельник + + <key>ru</key> + <value>Понедельник</value> + + 37 + + Boolean + + + true + + + true + + true + + + Пятница + + <key>ru</key> + <value>Пятница</value> + + 38 + + Boolean + + + true + + + true + + true + + + Расписание + + <key>ru</key> + <value>Расписание</value> + + 39 + + + true + + + true + + true + + + Сентябрь + + <key>ru</key> + <value>Сентябрь</value> + + 40 + + Boolean + + + true + + + true + + true + + + Среда + + <key>ru</key> + <value>Среда</value> + + 41 + + Boolean + + + true + + + true + + true + + + Суббота + + <key>ru</key> + <value>Суббота</value> + + 42 + + Boolean + + + true + + + true + + true + + + ТекстРасписания + + <key>ru</key> + <value>Текст расписания</value> + + 43 + + String + + + + true + + + true + + + + Февраль + + <key>ru</key> + <value>Февраль</value> + + 44 + + Boolean + + + true + + + true + + true + + + Четверг + + <key>ru</key> + <value>Четверг</value> + + 45 + + Boolean + + + true + + + true + + true + + + Январь + + <key>ru</key> + <value>Январь</value> + + 46 + + Boolean + + + true + + + true + + true + + + ВидРассылки + + <key>ru</key> + <value>Вид рассылки</value> + + 15 + + String + + 40 + + + + true + + + true + + true + + + ДругойСпособДоставки + + <key>ru</key> + <value>Другой способ доставки</value> + + 47 + + String + + 50 + + + + true + + + true + + true + + + Публиковать + + <key>ru</key> + <value>Публиковать</value> + + 31 + + Boolean + + + true + + + true + + true + + + РассылкаБылаПерсонализирована + + <key>ru</key> + <value>Рассылка была персонализирована</value> + + 48 + + Boolean + + + true + + + true + + + + ПравоВывода + + <key>ru</key> + <value>Право вывода</value> + + 49 + + Boolean + + + true + + + true + + + + ЗначениеКопирования + + <key>ru</key> + <value>Значение копирования</value> + + 50 + + CatalogRef.РассылкиОтчетов + + + true + + + true + + + + СозданКопированием + + <key>ru</key> + <value>Создан копированием</value> + + 14 + + Boolean + + + true + + + true + + + + ЗначенияРеквизитовДоИзменения + + <key>ru</key> + <value>Значения реквизитов до изменения</value> + + 51 + + + true + + + true + + + + ЭлементСвязиПоТипу + + <key>ru</key> + <value>Элемент связи по типу</value> + + 52 + + + true + + + true + + + + ФормаБылаМодифицированаНаСервере + + <key>ru</key> + <value>Форма была модифицирована на сервере</value> + + 53 + + Boolean + + + true + + + true + + + + ПредставлениеРасписания + + <key>ru</key> + <value>Представление расписания</value> + + 54 + + String + + + + true + + + true + + + + ПараметрыФоновогоЗадания + + <key>ru</key> + <value>Параметры фонового задания</value> + + 55 + + ValueList + + + true + + + true + + + + + + + ПолучателиПодобрать + + <key>ru</key> + <value>Подобрать</value> + + 1 + + ru + Подобрать получателей рассылки + + + true + + + StdPicture.Properties + + + + ПолучателиПодобрать + + + TextPicture + Auto + Auto + + + ДобавитьИзменитьШаблонДатыРассылки + + <key>ru</key> + <value>Дата рассылки</value> + + 6 + + ru + Добавить или изменить шаблон даты рассылки + + + true + + + + ДобавитьИзменитьШаблонДатыРассылки + + + TextPicture + true + Auto + Auto + + + ДобавитьШаблонПолучателя + + <key>ru</key> + <value>Получатель</value> + + 7 + + ru + Добавить представление получателя + + + true + + + + ДобавитьШаблонПолучателя + + + TextPicture + true + Auto + Auto + + + ДобавитьШаблонСформированныхОтчетов + + <key>ru</key> + <value>Сформированные отчеты</value> + + 8 + + ru + Добавить шаблон сформированных отчетов + + + true + + + + ДобавитьШаблонСформированныхОтчетов + + + TextPicture + true + Auto + Auto + + + ДобавитьОтчет + + <key>ru</key> + <value>Отчет</value> + + 9 + + ru + Добавить отчет + + + true + + + StdPicture.Report + + + + ДобавитьОтчет + + + Auto + Auto + + + ДобавитьДополнительныйОтчет + + <key>ru</key> + <value>Дополнительный отчет</value> + + 10 + + ru + Добавить дополнительный отчет + + + true + + + StdPicture.ExternalDataSourceTable + + + + ДобавитьДополнительныйОтчет + + + Auto + Auto + + + ПроверитьПубликацию + + <key>ru</key> + <value>Проверить</value> + + 12 + + ru + Проверить публикацию + + + true + + + StdPicture.ExecuteTask + + + + ПроверитьПубликацию + + + TextPicture + Auto + Auto + + + ДобавитьШаблонАвтора + + <key>ru</key> + <value>Автор</value> + + 14 + + ru + Добавить представление автора + + + true + + + + ДобавитьШаблонАвтора + + + TextPicture + true + Auto + Auto + + + ДобавитьШаблонНаименованияРассылки + + <key>ru</key> + <value>Наименование рассылки</value> + + 15 + + ru + Добавить шаблон наименования рассылки + + + true + + + + ДобавитьШаблонНаименованияРассылки + + + TextPicture + true + Auto + Auto + + + ПредпросмотрШаблона + + <key>ru</key> + <value>Предварительный просмотр</value> + + 16 + + ru + Предпросмотр шаблона + + + true + + + StdPicture.Find + + + + ПредпросмотрШаблона + + + TextPicture + Auto + Auto + + + ПредварительныйПросмотрОтчета + + <key>ru</key> + <value>Просмотр</value> + + 3 + + ru + Предварительный просмотр отчета + + + true + + + StdPicture.ShowData + + + + ПредварительныйПросмотрОтчета + + + TextPicture + Auto + Auto + + + ДобавитьШаблонСистемы + + <key>ru</key> + <value>Заголовок системы</value> + + 4 + + ru + Добавить представление рассылки + + + true + + + + ДобавитьШаблонСистемы + + + TextPicture + true + Auto + Auto + + + ДобавитьШаблонСпособаДоставки + + <key>ru</key> + <value>Способ доставки</value> + + 5 + + ru + Добавить представление способа доставки + + + true + + + + ДобавитьШаблонСпособаДоставки + + + TextPicture + true + Auto + Auto + + + ЗаполнитьРасписаниеПоШаблону + + <key>ru</key> + <value>Заполнить расписание по шаблону</value> + + 19 + + ru + Заполнить расписание по шаблону + + + true + + + StdPicture.RestoreValues + + + + ЗаполнитьПоШаблону + + + TextPicture + Auto + Auto + + + ИзменитьРасписание + + <key>ru</key> + <value>Изменить расписание</value> + + 20 + + ru + Изменить расписание + + + true + + + StdPicture.Change + + + + ИзменитьРасписание + + + true + Auto + Auto + + + СнятьПометки + + <key>ru</key> + <value>Снять пометки</value> + + 21 + + ru + Снять пометки + + + true + + + StdPicture.UncheckAll + + + + СнятьПометки + + + Picture + Auto + Auto + + + УстановитьПометки + + <key>ru</key> + <value>Установить пометки</value> + + 22 + + ru + Установить пометки + + + true + + + StdPicture.CheckAll + + + + УстановитьПометки + + + Picture + Auto + Auto + + + ИзменитьТипТекстаНаHTML + + <key>ru</key> + <value>HTML</value> + + 11 + + ru + Изменить тип текста на HTML + + + true + + + + ИзменитьТипТекстаНаHTML + + + Auto + Auto + + + ИзменитьТипТекстаНаОбычный + + <key>ru</key> + <value>Обычный текст</value> + + 13 + + ru + Изменить тип текста на HTML + + + true + + + + ИзменитьТипТекстаНаОбычный + + + Auto + Auto + + + ПроверитьЭлектроннуюПочту + + <key>ru</key> + <value>Проверить</value> + + 18 + + ru + Проверить электронную почту + + + true + + + StdPicture.ExecuteTask + + + + ПроверитьЭлектроннуюПочту + + + TextPicture + Auto + Auto + + + ДобавитьШаблонПоУмолчанию + + <key>ru</key> + <value>Добавить шаблон по умолчанию</value> + + 17 + + ru + Добавить шаблон по умолчанию + + + true + + + StdPicture.DataCompositionSettingsWizard + + + + ДобавитьШаблонПоУмолчанию + + + TextPicture + true + Auto + Auto + + + СнятьПометкиОтправлятьЕслиПустой + + <key>ru</key> + <value>Снять пометки</value> + + 23 + + ru + Снять пометки флажка "Отправлять, если пустой" для всех отчетов + + + true + + + StdPicture.UncheckAll + + + + СнятьПометкиОтправлятьЕслиПустой + + + Auto + Auto + + + УстановитьПометкиОтправлятьЕслиПустой + + <key>ru</key> + <value>Установить пометки</value> + + 24 + + ru + Установить пометки флажка "Отправлять, если пустой" для всех отчетов + + + true + + + StdPicture.CheckAll + + + + УстановитьПометкиОтправлятьЕслиПустой + + + Auto + Auto + + + + + + + + AfterWriteAtServer + ПослеЗаписиНаСервере + + + OnReadAtServer + ПриЧтенииНаСервере + + + BeforeWrite + ПередЗаписью + + + BeforeWriteAtServer + ПередЗаписьюНаСервере + + +
    diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..ed60b5fd6 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1,75 @@ + +

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

    +

    Реквизиты:

    +

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

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

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

    Страница "Расписание":

    +

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

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

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

    Страница "Доставка":

    +

    Содержимое страницы может меняться, в зависимости от вида рассылки.

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

    В папку - отчеты будут сохранены в указанную папку подсистемы "Работа с файлами".
    В сетевой каталог - отчеты будут сохранены в каталог файловой системы. Запись производится с сервера, поэтому рекомендуется указывать сетевой путь в формате UNC, например: \\server\folder\.
    На FTP ресурс - отчеты будут сохранены на ftp сервере.

    +

    Подробнее - см. работа в клиент-серверном режиме.

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

    Страница "Дополнительно":

    +

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

    Команды:

    +

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

    Работа в клиент-серверном режиме:

    +

    +
    +

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

    +

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

    +

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

    +

    Поле сетевой каталог Linux предназначено для серверов 1С:Предприятия 8.2 работающих под управлением ОС Linux. В этом поле можно указать только локальный путь, например /home/path. Чтобы использовать UNC путь, нужно сделать на него ссылку. Для этого под правами администратора (root) сделайте следующее:

    +

    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

    +

    Подробнее об администрировании сервера 1С:Предприятия см. документацию к платформе 1С:Предприятие.

    \ No newline at end of file diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..f84218be4 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,2758 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + // Чтение хранилища значений + Если ТекущийОбъект.ПисьмоВФорматеHTML Тогда + СтруктураВложенийПисьмаВФорматеHTML = ТекущийОбъект.КартинкиПисьмаВФорматеHTML.Получить(); + Если СтруктураВложенийПисьмаВФорматеHTML = Неопределено Тогда + СтруктураВложенийПисьмаВФорматеHTML = Новый Структура; + КонецЕсли; + ТекстПисьмаФорматированныйДокумент.УстановитьHTML(ТекущийОбъект.ТекстПисьмаВФорматеHTML, СтруктураВложенийПисьмаВФорматеHTML); + КонецЕсли; + + // Перезаполнение очищаемых данных формы при повторном чтении объекта из БД + Если Кэш <> Неопределено Тогда + ПрочитатьПользовательскоеПредставлениеФорматов(); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если Объект.ПометкаУдаления Тогда + ЭтаФорма.ТолькоПросмотр = Истина; + КонецЕсли; + + ЗначениеКопирования = Параметры.ЗначениеКопирования; + + // Кэш проверки + ЭтоНовый = Объект.Ссылка.Пустая(); + СозданКопированием = НЕ ЗначениеКопирования.Пустая(); + + Кэш = ПолучитьКэш(); + + Расписание = Новый РасписаниеРегламентногоЗадания; + + РассылкаБылаПерсонализирована = Объект.Персонализирована; + + // Чтение + Если НЕ ЭтоНовый ИЛИ СозданКопированием Тогда + ПрочитатьПользовательскоеПредставлениеФорматов(); + КонецЕсли; + ЗаполнитьПустыеШаблоныСтандартными(Объект); + + Если ЭтоНовый И НЕ СозданКопированием Тогда + ВариантРасписания = Неопределено; + Параметры.Свойство("ВариантРасписания", ВариантРасписания); + ЗаполнитьРасписаниеПоВарианту(ВариантРасписания); + Иначе + ПрочитатьРасписаниеРегламентногоЗадания(); + КонецЕсли; + + // Заполнение автора рассылки + Если ЭтоНовый Тогда + // Автор рассылки + ТекущийПользователь = Пользователи.ТекущийПользователь(); + Объект.Автор = ТекущийПользователь; + Если НЕ ЗначениеЗаполнено(Объект.Автор) Тогда + Отказ = Истина; + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка заполнения автора рассылки + |Автор (%1): %2'"), + Строка(ТипЗнч(ТекущийПользователь)), + Строка(ТекущийПользователь) + ); + ЗаписьЖурналаРегистрации( + "Рассылка отчетов. Открытие формы элемента", + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники.РассылкиОтчетов, + , + Текст + ); + Возврат; + КонецЕсли; + + // Имя архива + Объект.ИмяАрхива = Кэш.Шаблоны.ИмяАрхива; + КонецЕсли; + + // Позволяет видеть и управлять некоторыми защищенными параметры рассылки + РассылкуРедактируетАвтор = (Объект.Автор = Пользователи.ТекущийПользователь()); + + // Доступность кнопки добавления дополнительного отчета + Элементы.ОтчетыДобавитьДополнительныйОтчет.Доступность = ?(Кэш.ПустоеЗначениеОтчета = Неопределено, Истина, Ложь); + // "Кэш.ПустоеЗначениеОтчета = Неопределено" когда тип реквизита "отчет" составной, + // соответственно используется интеграция с подсистемой Дополнительные отчеты и обработки + + // Доступность автора рассылки + Элементы.Автор.Доступность = Пользователи.ЭтоПолноправныйПользователь(); + + // Список форматов с пометками для форматов по умолчанию + СписокФорматовПоУмолчанию = РассылкаОтчетовПовтИсп.СписокФорматов(); + + // Представление списка форматов по умолчанию + СписокФорматовПоУмолчаниюПредставление = ""; + Для Каждого ЭлементСписка Из СписокФорматовПоУмолчанию Цикл + Если ЭлементСписка.Пометка Тогда + СписокФорматовПоУмолчаниюПредставление = СписокФорматовПоУмолчаниюПредставление + ?(СписокФорматовПоУмолчаниюПредставление = "", "", ", ") + Строка(ЭлементСписка.Значение); + КонецЕсли; + КонецЦикла; + + // Список редактирования форматов + СписокФорматов = СписокФорматовПоУмолчанию.Скопировать(); + + // Представление форматов по умолчанию в пределах рассылки + ФорматыПоУмолчанию = ""; + Найденные = Объект.ФорматыОтчетов.НайтиСтроки(Новый Структура("Отчет", Кэш.ПустоеЗначениеОтчета)); + Если Найденные.Количество() = 0 Тогда + ФорматыПоУмолчанию = СписокФорматовПоУмолчаниюПредставление; + Иначе + Для Каждого СтрокаФормат Из Найденные Цикл + ФорматыПоУмолчанию = ФорматыПоУмолчанию + ?(ФорматыПоУмолчанию = "", "", ", ") + Строка(СтрокаФормат.Формат); + КонецЦикла; + КонецЕсли; + + // Используется при загрузке и записи настроек выбранного отчета + ИдентификаторТекущейСтрокиТаблицыОтчетов = -1; + + // + Если СтруктураВложенийПисьмаВФорматеHTML = Неопределено Тогда + СтруктураВложенийПисьмаВФорматеHTML = Новый Структура; + КонецЕсли; + + // Для списков получателей и исключенных используется одна табличная часть + Элементы.ПустыеНастройки.ОтборСтрок = Новый ФиксированнаяСтруктура("ИндексКартинки", 200); + + // Список выбора почтовых адресов автора + ПолучитьСписокПочтовыхАдресов(Объект.Автор, Элементы.ВидПочтовогоАдресаАвтора.СписокВыбора); + + // Список выбора почтовых адресов автора + ПодключитьКэшНастроекЭлектроннойПочты(); + + // Чтение настроек отчетов из объекта копирования + Если СозданКопированием Тогда + ПрочитатьНастройкиОтчетовОбъектаКопирования(); + КонецЕсли; + + // Активизация первой строки + Если Объект.Отчеты.Количество() > 0 Тогда + СтрокаОтчеты = Объект.Отчеты[0]; + ИдентификаторСтроки = СтрокаОтчеты.ПолучитьИдентификатор(); + СтрокаПредупреждения = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки); + Если СтрокаПредупреждения <> "" Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаПредупреждения, , "Объект.Отчеты[0].Представление"); + КонецЕсли; + КонецЕсли; + + // + ВидимостьДоступностьКорректность(ЭтаФорма); + + // + ЗафиксироватьЗначенияРеквизитовДоИзменения(); + + // + ПравоВывода = ПравоДоступа("Вывод", Метаданные); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Если ФормаБылаМодифицированаНаСервере Тогда + Модифицированность = Истина; + КонецЕсли; + Если НЕ ПравоВывода Тогда + Предупреждение(НСтр("ru = 'Недостаточно прав на вывод информации. Рассылки отчетов не будут выполнены.'")); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) + // Очистка окна сообщений + ОчиститьСообщения(); + + // Рекомендации по отключению архивации при доставке только в папку + ЗначенияИзменились = Ложь; + Для Каждого КлючИЗначение Из ЗначенияРеквизитовДоИзменения Цикл + Если Объект[КлючИЗначение.Ключ] <> ЗначенияРеквизитовДоИзменения[КлючИЗначение.Ключ] Тогда + ЗначенияИзменились = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ЗначенияИзменились + И Объект.ИспользоватьПапку + И Объект.Архивировать + И (Объект.ТолькоУведомить ИЛИ НЕ Объект.ИспользоватьЭлектроннуюПочту) Тогда + + Заголовок = НСтр("ru = 'Отключить архивацию'"); + + ТекстВопроса = НСтр("ru = 'При публикации отчетов в папку рекомендуется отключать архивацию в ZIP.'"); + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(1, НСтр("ru = 'Отключить архивацию в ZIP'")); + Кнопки.Добавить(2, НСтр("ru = 'Продолжить'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + + Ответ = Вопрос(ТекстВопроса, Кнопки, 60, 1, Заголовок, 2); + + Если Ответ = КодВозвратаДиалога.Отмена Тогда + Отказ = Истина; + ИначеЕсли Ответ = 1 Тогда + Объект.Архивировать = Ложь; + КонецЕсли; + + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + // Запись настроек текущей строки + Если ИдентификаторТекущейСтрокиТаблицыОтчетов <> -1 Тогда + ЗаписатьНастройкиСтрокиОтчеты(ИдентификаторТекущейСтрокиТаблицыОтчетов); + КонецЕсли; + + // Помещение измененных настроек строк в настройки записываемого объекта (хранилище значения) + ПроверитьПерсонализированныеОтборы = (НЕ Объект.Персонализирована И РассылкаБылаПерсонализирована); + Для Каждого СтрокаОтчеты Из Объект.Отчеты Цикл + ОбъектСтрокаОтчеты = ТекущийОбъект.Отчеты.Получить(СтрокаОтчеты.НомерСтроки-1); + Если СтрокаОтчеты.ВнесеныИзменения Тогда + НастройкиОтчета = ПолучитьИзВременногоХранилища(СтрокаОтчеты.АдресНастроек); + Если ТипЗнч(НастройкиОтчета) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда //СтрокаОтчеты.СКД Тогда + + СохраняемоеЗначение = НастройкиОтчета.ПользовательскиеНастройки; + + ИначеЕсли ТипЗнч(НастройкиОтчета) = Тип("ТаблицаЗначений") Тогда + + ОтборТаблицы = Новый Структура("Обнаружен", Истина); + КолонкиТаблицы = "Реквизит, Представление, Значение, Использование"; + СохраняемоеЗначение = НастройкиОтчета.Скопировать(ОтборТаблицы, КолонкиТаблицы); + + Иначе + + СохраняемоеЗначение = Неопределено; + + КонецЕсли; + ОбъектСтрокаОтчеты.Настройки = Новый ХранилищеЗначения(СохраняемоеЗначение, Новый СжатиеДанных(9)); + КонецЕсли; + + // Поиск и отключение персонализированных полей + Если ПроверитьПерсонализированныеОтборы Тогда + НастройкиОтчета = ОбъектСтрокаОтчеты.Настройки.Получить(); + ОтчетПерсонализирован = Ложь; + Если ТипЗнч(НастройкиОтчета) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда + Для Каждого СтрокаНастроек Из НастройкиОтчета.Элементы Цикл + Если ТипЗнч(СтрокаНастроек) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЗначениеНастройки = СтрокаНастроек.ПравоеЗначение; + ИначеЕсли ТипЗнч(СтрокаНастроек) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ЗначениеНастройки = СтрокаНастроек.Значение; + Иначе + Продолжить; + КонецЕсли; + Если ЗначениеНастройки = "[Получатель]" И СтрокаНастроек.Использование Тогда + ОтчетПерсонализирован = Истина; + Прервать; + КонецЕсли; + КонецЦикла; // Для Каждого СтрокаНастроек Из Настройки.Элементы Цикл + ИначеЕсли ТипЗнч(НастройкиОтчета) = Тип("ТаблицаЗначений") Тогда + Найденные = НастройкиОтчета.НайтиСтроки(Новый Структура("Значение, Использование", "[Получатель]", Истина)); + Если Найденные.Количество() > 0 Тогда + ОтчетПерсонализирован = Истина; + КонецЕсли; + КонецЕсли; + Если ОтчетПерсонализирован Тогда + Отказ = Истина; + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В параметрах отчета %1 задан отбор по получателям рассылки, необходимо отключить отбор по получателям или изменить вид рассылки на ''Свой отчет для каждого получателя''.'"), + "'"+ Строка(СтрокаОтчеты.Отчет) +"'" + ); + Поле = "Отчеты["+ Формат(ТекущийОбъект.Отчеты.Индекс(ОбъектСтрокаОтчеты), "ЧН=0; ЧГ=0") +"].Представление"; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ТекущийОбъект, Поле); + КонецЕсли; + КонецЕсли; // ПроверитьПерсонализированныеОтборы + КонецЦикла; // Для Каждого СтрокаОтчеты Из Объект.Отчеты Цикл + + ТекущийОбъект.КартинкиПисьмаВФорматеHTML = Неопределено; + Если ТекущийОбъект.ПисьмоВФорматеHTML Тогда + ТекущийОбъект.ТекстПисьма = СокрЛП(ТекстПисьмаФорматированныйДокумент.ПолучитьТекст()); + Если ТекущийОбъект.ТекстПисьма = "" Тогда + ТекущийОбъект.ТекстПисьмаВФорматеHTML = ""; + Иначе + ТекстПисьмаФорматированныйДокумент.ПолучитьHTML(ТекущийОбъект.ТекстПисьмаВФорматеHTML, СтруктураВложенийПисьмаВФорматеHTML); + Если ТипЗнч(СтруктураВложенийПисьмаВФорматеHTML) = Тип("Структура") + И СтруктураВложенийПисьмаВФорматеHTML.Количество() > 0 Тогда + ТекущийОбъект.КартинкиПисьмаВФорматеHTML = Новый ХранилищеЗначения(СтруктураВложенийПисьмаВФорматеHTML, Новый СжатиеДанных(9)); + КонецЕсли; + ТекущийОбъект.ТекстПисьма = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст(); + КонецЕсли; + КонецЕсли; + + // Записываем значения + Если ЗначениеЗаполнено(ТипПолучателейРассылки) Тогда + Найденные = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ТипПолучателейРассылки)); + Если Найденные.Количество() = 1 Тогда + ТекущийОбъект.ТипПолучателейРассылки = Найденные[0].ИОМД; + Иначе + ТекущийОбъект.ТипПолучателейРассылки = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); + КонецЕсли; + Иначе + ТекущийОбъект.ТипПолучателейРассылки = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); + КонецЕсли; + + // Все операции с регламентными заданиями размещены в модуле объекта + ТекущийОбъект.ДополнительныеСвойства.Вставить("Расписание", Расписание); +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + // После записи значения реквизитов табличной части, добавленные в форме, сбрасываются + ПрочитатьПользовательскоеПредставлениеФорматов(); + ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторТекущейСтрокиТаблицыОтчетов); + + // + ЗафиксироватьЗначенияРеквизитовДоИзменения(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики ожидания + +&НаКлиенте +Процедура ОбработчикАктивизацииСтрокиТаблицыОтчеты() + СтрокаОтчеты = Элементы.Отчеты.ТекущиеДанные; + Если СтрокаОтчеты = Неопределено Тогда + Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.ПустаяСтраница; + Возврат; + КонецЕсли; + + ИдентификаторСтроки = СтрокаОтчеты.ПолучитьИдентификатор(); + Если ИдентификаторСтроки = ИдентификаторТекущейСтрокиТаблицыОтчетов Тогда + Возврат; + КонецЕсли; + + СтрокаПредупреждения = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки); + Если СтрокаПредупреждения <> "" Тогда + Предупреждение(СтрокаПредупреждения); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеФоновогоЗадания() + РассылкаОтчетовКлиент.ПроверитьВыполнениеФоновогоЗадания(ЭтаФорма); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +//////////////////////////////////////////////////////////////////////////////// +// Страница "Расписание" + +&НаКлиенте +Процедура ВыполнятьПоРасписаниюПриИзменении(Элемент) + ВидимостьДоступностьКорректность(ЭтаФорма, "ВыполнятьПоРасписанию"); +КонецПроцедуры + +&НаКлиенте +Процедура МесяцыПриИзменении(Элемент) + Если Элемент <> Неопределено Тогда + Расписание.Месяцы = ИзменитьИРазадресоватьМассив(ЭтаФорма[Элемент.Имя], Кэш.Соответствия.Месяцы[Элемент.Имя], Расписание.Месяцы); + КонецЕсли; + ВидимостьДоступностьКорректность(ЭтаФорма, "Месяцы"); +КонецПроцедуры + +&НаКлиенте +Процедура ДниНеделиПриИзменении(Элемент) + Если Элемент <> Неопределено Тогда + Расписание.ДниНедели = ИзменитьИРазадресоватьМассив(ЭтаФорма[Элемент.Имя], Кэш.Соответствия.ДниНедели[Элемент.Имя], Расписание.ДниНедели); + КонецЕсли; + ВидимостьДоступностьКорректность(ЭтаФорма, "ДниНедели"); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьРасписание(Команда) + ИзменитьРасписаниеВДиалоге(); +КонецПроцедуры + +&НаКлиенте +Процедура ПериодичностьРасписанияПриИзменении(Элемент) + ВидимостьДоступностьКорректность(ЭтаФорма, "ПериодичностьРасписания"); + Если Кэш.Перечисления.Периодичности[Объект.ПериодичностьРасписания] = "Произвольное" Тогда + ИзменитьРасписаниеВДиалоге(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ГиперссылкаНачалоКонецМесяцаНажатие(Элемент) + Если Расписание.ДеньВМесяце = 0 Тогда + ДеньВМесяце = 1; + Расписание.ДеньВМесяце = -1; + Иначе + Расписание.ДеньВМесяце = -Расписание.ДеньВМесяце; + КонецЕсли; + Модифицированность = Истина; + ВидимостьДоступностьКорректность(ЭтаФорма, "НачалоКонецМесяца"); +КонецПроцедуры + +&НаКлиенте +Процедура ВремяНачалаПриИзменении(Элемент) + Расписание.ВремяНачала = ВремяНачала; + ВидимостьДоступностьКорректность(ЭтаФорма, "ВремяНачала"); +КонецПроцедуры + +&НаКлиенте +Процедура ПериодПовтораДнейПриИзменении(Элемент) + Расписание.ПериодПовтораДней = ПериодПовтораДней; + ВидимостьДоступностьКорректность(ЭтаФорма, "ПериодПовтораДней"); +КонецПроцедуры + +&НаКлиенте +Процедура ДеньМесяцаПриИзменении(Элемент) + Расписание.ДеньВМесяце = ?(Расписание.ДеньВМесяце >= 0, ДеньВМесяце, -ДеньВМесяце); + ВидимостьДоступностьКорректность(ЭтаФорма, "ДеньВМесяце"); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница "Доставка" + +&НаКлиенте +Процедура ТипПолучателейРассылкиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + Если ВыбранноеЗначение = ТипПолучателейРассылки Тогда + СтандартнаяОбработка = Ложь; + Возврат; + КонецЕсли; + + Найденные = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ВыбранноеЗначение)); + Если Найденные.Количество() <> 1 Тогда + СтандартнаяОбработка = Ложь; + Возврат; + КонецЕсли; + + // Очистка получателей (если нужно) + Если Объект.Получатели.Количество() > 0 Тогда + + СтрокаВопроса = НСтр("ru = 'Для продолжения необходимо очистить список получателей.'"); + + НаборКнопок = Новый СписокЗначений; + НаборКнопок.Добавить("Очистить", НСтр("ru = 'Очистить'")); + НаборКнопок.Добавить(КодВозвратаДиалога.Отмена); + + Ответ = Вопрос(СтрокаВопроса, НаборКнопок, 60, "Очистить"); + Если Ответ <> "Очистить" Тогда + СтандартнаяОбработка = Ложь; + Возврат; + КонецЕсли; + Объект.Получатели.Очистить(); + + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТипПолучателейРассылкиПриИзменении(Элемент) + Найденные = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ТипПолучателейРассылки)); + Если Найденные.Количество() = 1 Тогда + СтрокаПолучатель = Найденные[0]; + Объект.ТипПолучателейРассылки = СтрокаПолучатель.ИОМД; + Объект.ВидПочтовогоАдресаПолучателей = СтрокаПолучатель.ОсновнойВидКИ; + ГруппаКонтакнойИнформацииТипаПолучателей = СтрокаПолучатель.ГруппаКИ; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТипПолучателейРассылкиОчистка(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +&НаКлиенте +Процедура ВидПочтовогоАдресаАвтораОткрытие(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ОткрытьЗначение(Объект.Автор); +КонецПроцедуры + +&НаКлиенте +Процедура FTPСерверИКаталогНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ПараметрыПроизвольнойФормы = Новый Структура("Сервер, Каталог, Порт, Логин, Пароль, ПассивноеСоединение"); + Для Каждого КлючИЗначение Из ПараметрыПроизвольнойФормы Цикл + ПараметрыПроизвольнойФормы[КлючИЗначение.Ключ] = Объект["FTP" + КлючИЗначение.Ключ]; + КонецЦикла; + ПараметрыПроизвольнойФормы.Вставить("Заголовок", НСтр("ru = 'Укажите получателя'")); + + ОткрытьФорму("Справочник.РассылкиОтчетов.Форма.ПараметрыFTP", ПараметрыПроизвольнойФормы, Элемент); +КонецПроцедуры + +&НаКлиенте +Процедура FTPСерверИКаталогОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Если ВыбранноеЗначение = Неопределено ИЛИ ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + Для Каждого КлючИЗначение Из ВыбранноеЗначение Цикл + Объект["FTP" + КлючИЗначение.Ключ] = КлючИЗначение.Значение; + КонецЦикла; + ВидимостьДоступностьКорректность(ЭтаФорма, "FTPСерверИКаталог"); + Модифицированность = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура FTPСерверИКаталогОчистка(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +&НаКлиенте +Процедура FTPСерверИКаталогОткрытие(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ПолныйАдрес = Объект.FTPСервер +":"+ Формат(Объект.FTPПорт, "ЧН=21; ЧГ=0") + Объект.FTPКаталог; + Если Объект.FTPЛогин = "" Тогда + ПолныйАдрес = "ftp://"+ ПолныйАдрес; + Иначе + ПолныйАдрес = "ftp://"+ Объект.FTPЛогин +":"+ Объект.FTPПароль +"@"+ ПолныйАдрес; + КонецЕсли; + ЗапуститьПриложение(ПолныйАдрес, , Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура ВидРассылкиПриИзменении(Элемент) + Объект.Личная = (ВидРассылки = "Личная"); + Объект.Персонализирована = (ВидРассылки = "Персонализирована"); + + ВидимостьДоступностьКорректность(ЭтаФорма, "ВидРассылки"); +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьЭлектроннуюПочтуПриИзменении(Элемент) + ВидимостьДоступностьКорректность(ЭтаФорма, "ИспользоватьЭлектроннуюПочту"); + + Если НЕ Публиковать И НЕ Объект.ИспользоватьЭлектроннуюПочту Тогда + Публиковать = Истина; + ВычислитьФлажкиДополнительныхСпособовДоставки(); + ВидимостьДоступностьКорректность(ЭтаФорма, "Публиковать"); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТолькоУведомитьПриИзменении(Элемент) + ВидимостьДоступностьКорректность(ЭтаФорма, "ТолькоУведомить"); +КонецПроцедуры + +&НаКлиенте +Процедура ДругойСпособДоставкиПриИзменении(Элемент) + ВычислитьФлажкиДополнительныхСпособовДоставки(); + ВидимостьДоступностьКорректность(ЭтаФорма, "ДругойСпособДоставки"); +КонецПроцедуры + +&НаКлиенте +Процедура ПубликоватьПриИзменении(Элемент) + ВычислитьФлажкиДополнительныхСпособовДоставки(); + ВидимостьДоступностьКорректность(ЭтаФорма, "Публиковать"); + + Если НЕ Публиковать И НЕ Объект.ИспользоватьЭлектроннуюПочту Тогда + Объект.ИспользоватьЭлектроннуюПочту = Истина; + ВидимостьДоступностьКорректность(ЭтаФорма, "ИспользоватьЭлектроннуюПочту"); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПапкаОткрытие(Элемент, СтандартнаяОбработка) + РассылкаОтчетовКлиентПереопределяемый.ОткрытьФормуПапки(СтандартнаяОбработка, Объект.Папка); +КонецПроцедуры + +&НаКлиенте +Процедура ПапкаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + Если НЕ ПравоИзмененияПапкиИФайлов(ВыбранноеЗначение) Тогда + СтандартнаяОбработка = Ложь; + Предупреждение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав на изменение файлов папки %1'"), + "'"+ Строка(ВыбранноеЗначение) +"'" + ) + ); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СетевойКаталогWindowsПриИзменении(Элемент) + Объект.СетевойКаталогWindows = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Объект.СетевойКаталогWindows); + Если ПустаяСтрока(Объект.СетевойКаталогLinux) Тогда + Объект.СетевойКаталогLinux = СтрЗаменить(Объект.СетевойКаталогWindows, "\", "/"); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СетевойКаталогLinuxПриИзменении(Элемент) + Объект.СетевойКаталогLinux = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Объект.СетевойКаталогLinux); + Если ПустаяСтрока(Объект.СетевойКаталогWindows) Тогда + Объект.СетевойКаталогWindows = СтрЗаменить(Объект.СетевойКаталогLinux, "/", "\"); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница "Дополнительно" + +&НаКлиенте +Процедура ФорматыПоУмолчаниюНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + СтрокаФорматов = ВыбратьФормат(Кэш.ПустоеЗначениеОтчета); + Если СтрокаФорматов <> Неопределено Тогда + ФорматыПоУмолчанию = СтрокаФорматов; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ФорматыПоУмолчаниюОчистка(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ОчиститьФормат(Кэш.ПустоеЗначениеОтчета); + ФорматыПоУмолчанию = СписокФорматовПоУмолчаниюПредставление; +КонецПроцедуры + +&НаКлиенте +Процедура АрхивироватьПриИзменении(Элемент) + ВидимостьДоступностьКорректность(ЭтаФорма, "Архивировать"); +КонецПроцедуры + +&НаКлиенте +Процедура АвторПриИзменении(Элемент) + ТекущийСписок = Элементы.ВидПочтовогоАдресаАвтора.СписокВыбора; + ТекущийСписок.Очистить(); + НовыйСписок = ПолучитьСписокПочтовыхАдресов(Объект.Автор); + Для Каждого ЭлементСписка Из НовыйСписок Цикл + ЗаполнитьЗначенияСвойств(ТекущийСписок.Добавить(), ЭлементСписка); + КонецЦикла; + Если НовыйСписок.НайтиПоЗначению(Объект.ВидПочтовогоАдресаПолучателей) = Неопределено Тогда + Объект.ВидПочтовогоАдресаПолучателей = Неопределено; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура РодительОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + Если ВыбранноеЗначение = Кэш.ГруппаЛичныхРассылок Тогда + СтандартнаяОбработка = Ложь; + Предупреждение(НСтр("ru = 'Выбранная группа используется только для личных рассылок по электронной почте'")); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Отчеты + +&НаКлиенте +Процедура ОтчетыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Шаблон = Новый Структура("Количество, МассивСтрок, ПредставлениеОтчетов, Текст", 0, Новый Массив, ""); + СтруктураВыбора = Новый Структура("Выбрано, Успешно, СОшибками", Шаблон, Шаблон, Шаблон); + + СтруктураВыбора.Выбрано.МассивСтрок = ВыборПодборПеретаскиваниеВТабличнуюЧасть( + ВыбранноеЗначение, + Объект.Отчеты, + "Отчет", + Новый Структура("Форматы, ОтправлятьЕслиПустой", ПредставлениеФорматовПоУмолчанию(), Истина), + Истина + ); + + // Инициализация добавленных строк отчетов и заполнение структуры выбора + ПроверитьДобавленныеСтрокиОтчетов(СтруктураВыбора); + + // Вывод результатов выбора + Результат = Новый Структура("Оповестить, Заголовок, Текст, ТекстОшибок"); + + Если СтруктураВыбора.СОшибками.Количество > 0 Тогда + + Результат.Оповестить = Ложь; + Результат.ТекстОшибок = СтруктураВыбора.СОшибками.Текст; + Результат.Заголовок = НСтр("ru = 'Ошибки добавления отчетов в рассылку'"); + + Если СтруктураВыбора.Выбрано.Количество = 1 Тогда + Результат.Текст = НСтр("ru = 'Не удалось добавить отчет из-за ошибок'"); + ИначеЕсли СтруктураВыбора.Успешно.Количество = 0 Тогда + Результат.Текст = НСтр("ru = 'Не удалось добавить отчеты из-за ошибок'"); + ИначеЕсли СтруктураВыбора.Выбрано.Количество >= 6 Тогда + Результат.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Добавлено отчетов: %1 из %2, + |Не добавлено из-за ошибок: %3'"), + Формат(СтруктураВыбора.Успешно.Количество, "ЧН=0; ЧГ="), + Формат(СтруктураВыбора.Выбрано.Количество, "ЧН=0; ЧГ="), + Формат(СтруктураВыбора.СОшибками.Количество, "ЧН=0; ЧГ=") + ); + Иначе + Разделитель = ", "; + ПредставлениеОтчетовУспешно = СтрЗаменить(Разделитель + СтруктураВыбора.Успешно.ПредставлениеОтчетов , Разделитель, Символы.ПС + " - "); + ПредставлениеОтчетовСОшибками = СтрЗаменить(Разделитель + СтруктураВыбора.СОшибками.ПредставлениеОтчетов, Разделитель, Символы.ПС + " - "); + Результат.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Успешно добавлены отчеты: + |%1 + | + |Следующие отчеты не удалось добавить из-за ошибок: + |%2'"), + ПредставлениеОтчетовУспешно, + ПредставлениеОтчетовСОшибками + ); + КонецЕсли; + + ИначеЕсли СтруктураВыбора.Успешно.Количество = 0 Тогда + + Результат.Оповестить = Истина; + Результат.Текст = НСтр("ru = 'Все выбранные отчеты уже включены в рассылку'"); + + Иначе + + Результат.Оповестить = Истина; + Если СтруктураВыбора.Выбрано.Количество = 1 Тогда + Результат.Заголовок = НСтр("ru = 'Отчет включен в рассылку'"); + Иначе + Результат.Заголовок = НСтр("ru = 'Отчеты включены в рассылку'"); + КонецЕсли; + Результат.Текст = СтруктураВыбора.Успешно.ПредставлениеОтчетов; + + КонецЕсли; + + РассылкаОтчетовКлиент.ПоказатьРезультат(Результат); + + ВидимостьДоступностьКорректность(ЭтаФорма, "Отчеты"); +КонецПроцедуры + +&НаКлиенте +Процедура ОтчетыПриАктивизацииСтроки(Элемент) + ПодключитьОбработчикОжидания("ОбработчикАктивизацииСтрокиТаблицыОтчеты", 0.1, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ОтчетыПередНачаломИзменения(Элемент, Отказ) + Отказ = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ОтчетыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + Отказ = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ОтчетыПослеУдаления(Элемент) + ВидимостьДоступностьКорректность(ЭтаФорма, "Отчеты"); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ КомпоновщикНастроекПользовательскиеНастройки + +&НаКлиенте +Процедура КомпоновщикНастроекПользовательскиеНастройкиПриИзменении(Элемент) + СтрокаОтчеты = Элементы.Отчеты.ТекущиеДанные; + Если СтрокаОтчеты = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаОтчеты.ВнесеныИзменения = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура КомпоновщикНастроекПользовательскиеНастройкиЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + НачалоВыбораНастройкиОтчета(Элемент, ДанныеВыбора, СтандартнаяОбработка, Истина); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ НастройкиТекущегоОтчета + +&НаКлиенте +Процедура НастройкиТекущегоОтчетаЗначениеПриИзменении(Элемент) + СтрокаНастроек = Элементы.НастройкиТекущегоОтчета.ТекущиеДанные; + Если СтрокаНастроек = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаНастроек.Использование = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиТекущегоОтчетаПриИзменении(Элемент) + СтрокаОтчеты = Элементы.Отчеты.ТекущиеДанные; + Если СтрокаОтчеты = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаОтчеты.ВнесеныИзменения = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиТекущегоОтчетаЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + НачалоВыбораНастройкиОтчета(Элемент, ДанныеВыбора, СтандартнаяОбработка, Ложь); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Получатели + +&НаКлиенте +Процедура ПолучателиПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + СтандартнаяОбработка = Ложь; + ДобавитьПеретащитьПолучателя(ПараметрыПеретаскивания.Значение); +КонецПроцедуры + +&НаКлиенте +Процедура ПолучателиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ДобавитьПеретащитьПолучателя(ВыбранноеЗначение); +КонецПроцедуры + +&НаКлиенте +Процедура ПолучателиПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ) + // Контроль уникальности выбранных получателей + Если НЕ Отказ И НЕ ОтменаРедактирования Тогда + СтрокаПолучатели = Элемент.ТекущиеДанные; + Если СтрокаПолучатели = Неопределено ИЛИ НЕ ЗначениеЗаполнено(СтрокаПолучатели.Получатель) Тогда + Возврат; + КонецЕсли; + Найденные = Объект.Получатели.НайтиСтроки(Новый Структура("Получатель", СтрокаПолучатели.Получатель)); + Если Найденные.Количество() > 1 Тогда + // Позиционирование на дубликате + НомерСуществующейСтроки = ?(Найденные[0] = СтрокаПолучатели, Найденные[1].НомерСтроки, Найденные[0].НомерСтроки); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Дублирование получателя %1. Ввод дубликата отменен.'"), + "'"+ Строка(СтрокаПолучатели.Получатель) +"'" + ); + Поле = "Объект.Получатели["+ Формат(НомерСуществующейСтроки, "ЧН=0; ЧГ=") +"]"; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение, , Поле); + + // Отмена редактирования + Элементы.Получатели.ЗакончитьРедактированиеСтроки(Истина); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ФорматыОтчетов + +&НаКлиенте +Процедура ФорматыОтчетовФорматыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + СтрокаОтчеты = Элементы.ФорматыОтчетов.ТекущиеДанные; + Если СтрокаОтчеты = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаФорматов = ВыбратьФормат(СтрокаОтчеты.Отчет); + Если СтрокаФорматов <> Неопределено Тогда + СтрокаОтчеты.Форматы = СтрокаФорматов; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ФорматыОтчетовФорматыОчистка(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + СтрокаОтчеты = Элементы.ФорматыОтчетов.ТекущиеДанные; + Если СтрокаОтчеты = Неопределено Тогда + Возврат; + КонецЕсли; + + ОчиститьФормат(СтрокаОтчеты.Отчет); + СтрокаОтчеты.Форматы = ПредставлениеФорматовПоУмолчанию(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +//////////////////////////////////////////////////////////////////////////////// +// Страница "Отчеты" + +&НаКлиенте +Процедура ДобавитьОтчет(Команда) + Пользовательский = ПредопределенноеЗначение("Перечисление.ТипыВариантовОтчетов.Пользовательский"); + Предопределенный = ПредопределенноеЗначение("Перечисление.ТипыВариантовОтчетов.Предопределенный"); + Отчет = ПредопределенноеЗначение("Перечисление.ТипыВариантовОтчетов.Отчет"); + + ОтборПоТипу = Новый СписокЗначений; + ОтборПоТипу.Добавить(Пользовательский, Пользовательский); + ОтборПоТипу.Добавить(Предопределенный, Предопределенный); + ОтборПоТипу.Добавить(Отчет, Отчет); + + ВыбранныеЗначения = Новый СписокЗначений; + Для Каждого СтрокаОтчеты Из Объект.Отчеты Цикл + Если ТипЗнч(СтрокаОтчеты.Отчет) = Тип("СправочникСсылка.ВариантыОтчетов") Тогда + ВыбранныеЗначения.Добавить(СтрокаОтчеты.Отчет); + КонецЕсли; + КонецЦикла; + + ПараметрыФормыВыбора = Новый Структура; + ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.Независимый); + ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь); + ПараметрыФормыВыбора.Вставить("ОтборПоТипу", ОтборПоТипу); + ПараметрыФормыВыбора.Вставить("ВыбранныеЗначения", ВыбранныеЗначения); + + ОткрытьФорму("Справочник.ВариантыОтчетов.ФормаВыбора", ПараметрыФормыВыбора, Элементы.Отчеты); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьДополнительныйОтчет(Команда) + РассылкаОтчетовКлиентПереопределяемый.ПодборДопОтчетов(Элементы.Отчеты); +КонецПроцедуры + +&НаКлиенте +Процедура ПредварительныйПросмотрОтчета(Команда) + // Очистка окна сообщений + ОчиститьСообщения(); + + // + СтрокаОтчеты = Элементы.Отчеты.ТекущиеДанные; + Если СтрокаОтчеты = Неопределено Тогда + Предупреждение(НСтр("ru = 'Выберите отчет'")); + Возврат; + КонецЕсли; + + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("Отчет", СтрокаОтчеты.Отчет); + ПараметрыОтчета.Вставить("Настройки", Неопределено); + ПараметрыОтчета.Вставить("ОтправлятьЕслиПустой", СтрокаОтчеты.ОтправлятьЕслиПустой); + ПараметрыОтчета.Вставить("Форматы", Новый Массив); + ПараметрыОтчета.Вставить("Представление", СтрокаОтчеты.Представление); + + Если СтрокаОтчеты.СКД Тогда + ПараметрыОтчета.Настройки = КомпоновщикНастроекКД.ПользовательскиеНастройки; + Иначе + ПараметрыОтчета.Настройки = Новый Структура; + Найденные = НастройкиТекущегоОтчета.НайтиСтроки(Новый Структура("Использование", Истина)); + Для Каждого СтрокаНастройка Из Найденные Цикл + ПараметрыОтчета.Настройки.Вставить(СтрокаНастройка.Реквизит, СтрокаНастройка.Значение);; + КонецЦикла; + КонецЕсли; + + Получатель = Неопределено; + Если Объект.Персонализирована Тогда + Отказ = Ложь; + ПроверитьТипПолучателей(Отказ); + ПроверитьКоличествоПолучателей(Отказ); + Если Отказ Тогда + Возврат; + КонецЕсли; + РезультатВыбора = РассылкаОтчетовКлиент.ВыбратьПолучателя(Объект, Ложь, Ложь); + Если РезультатВыбора = Неопределено Тогда + Возврат; + КонецЕсли; + Получатель = РезультатВыбора.Получатель; + КонецЕсли; + + ТребуемыеРеквизиты = Новый Структура; + ТребуемыеРеквизиты.Вставить("Ссылка", Объект.Ссылка); + ТребуемыеРеквизиты.Вставить("Персонализирована", Объект.Персонализирована); + ТребуемыеРеквизиты.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); + + Результат = СформироватьОтчетНаСервере(ПараметрыОтчета, Получатель, ТребуемыеРеквизиты); + + // Вывод табличного документа + Если ТипЗнч(Результат.ТабДок) = Тип("ТабличныйДокумент") Тогда + Результат.ТабДок.ТолькоПросмотр = Истина; + Результат.ТабДок.ОтображатьСетку = Ложь; + Результат.ТабДок.Показать(СтрокаОтчеты.Представление); + КонецЕсли; + + // Вывод результата пользователю + РассылкаОтчетовКлиент.ПоказатьРезультат(Результат); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница "Расписание" + +&НаКлиенте +Процедура УстановитьПометки(Команда) + ВсеМесяцы = Новый Массив; + Для Каждого КлючИЗначение Из Кэш.Соответствия.Месяцы Цикл + ЭтаФорма[КлючИЗначение.Ключ] = Истина; + ВсеМесяцы.Добавить(КлючИЗначение.Значение); + КонецЦикла; + Расписание.Месяцы = ВсеМесяцы; + ВидимостьДоступностьКорректность(ЭтаФорма, "Месяцы"); +КонецПроцедуры + +&НаКлиенте +Процедура СнятьПометки(Команда) + ВсеМесяцы = Новый Массив; + Для Каждого КлючИЗначение Из Кэш.Соответствия.Месяцы Цикл + ЭтаФорма[КлючИЗначение.Ключ] = Ложь; + КонецЦикла; + Расписание.Месяцы = ВсеМесяцы; + ВидимостьДоступностьКорректность(ЭтаФорма, "Месяцы"); +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьПоШаблону(Команда) + СписокВариантов = РассылкаОтчетовКлиентСервер.СписокВариантовЗаполненияРасписаний(); + + Вариант = СписокВариантов.ВыбратьЭлемент(НСтр("ru = 'Выберите шаблон расписания'")); + Если Вариант <> Неопределено Тогда + ЗаполнитьРасписаниеПоВарианту(Вариант.Значение, Истина); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница "Доставка" + +&НаКлиенте +Процедура ПолучателиПодобрать(Команда) + ОткрытьФормуВыбораДляПодбораПолучателей(Элементы.Получатели); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьИзменитьШаблонДатыРассылки(Команда) + ДобавитьШаблон(); + + Конструктор = Новый КонструкторФорматнойСтроки; + Конструктор.ДоступныеТипы = Новый ОписаниеТипов("Дата"); + + СтарыйТекст = СокрЛП(ТекущийЭлемент.ВыделенныйТекст); + Префикс = "[ДатаВыполнения("; + Постфикс = ")]"; + ДлинаПрефикса = СтрДлина(Префикс); + ДлинаПостфикса = СтрДлина(Постфикс); + ПозицияПрефикса = Найти(СтарыйТекст, Префикс); + ПозицияПостфикса = Найти(СтарыйТекст, Постфикс); + Если ПозицияПрефикса > 0 И ПозицияПостфикса > ПозицияПрефикса Тогда + ТекстФормата = Сред(СтарыйТекст, ПозицияПрефикса + ДлинаПрефикса, ПозицияПостфикса - ПозицияПрефикса - ДлинаПрефикса); + Иначе + ТекстФормата = ""; + КонецЕсли; + + Конструктор.Текст = ТекстФормата; + Если НЕ Конструктор.ОткрытьМодально() Тогда + Возврат; + КонецЕсли; + + Если ПозицияПрефикса > 0 И ПозицияПостфикса > ПозицияПрефикса Тогда + Если Конструктор.Текст = ТекстФормата Тогда + Возврат; + КонецЕсли; + ТекущийЭлемент.ВыделенныйТекст = СтрЗаменить(ТекущийЭлемент.ВыделенныйТекст, Префикс + ТекстФормата + Постфикс, Префикс + Конструктор.Текст + Постфикс); + ИначеЕсли ТекущийЭлемент.ВыделенныйТекст = "" Тогда + // Форматированный документ некорректно отрабатывает изменения свойства + // ВыделенныйТекст, в случае, если ничего не выделено, + // поэтому используется альтернативный метод добавления текста. + Если ТекущийЭлемент = Элементы.ТекстПисьмаФорматированныйДокумент Тогда + ТекстПисьмаФорматированныйДокумент.Добавить(Префикс + Конструктор.Текст + Постфикс, ТипЭлементаФорматированногоДокумента.Текст); + Иначе + ТекущийЭлемент.ВыделенныйТекст = Префикс + Конструктор.Текст + Постфикс; + КонецЕсли; + Иначе + ТекущийЭлемент.ВыделенныйТекст = ТекущийЭлемент.ВыделенныйТекст + Префикс + Конструктор.Текст + Постфикс; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьШаблонПолучателя(Команда) + // Очистка окна сообщений + ОчиститьСообщения(); + + // + Если НЕ Объект.Персонализирована Тогда + Сообщение = Новый СообщениеПользователю; + Сообщение.Поле = "ВидРассылки"; + Сообщение.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Использование получателя в тексте шаблона возможно только для вида рассылки %1'"), + "'"+ Элементы.ВидРассылки.СписокВыбора.НайтиПоЗначению("Персонализирована").Представление +"'"); + Сообщение.Сообщить(); + Возврат; + КонецЕсли; + + ДобавитьШаблон("[Получатель]"); + РассылкаБылаПерсонализирована = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьШаблонСформированныхОтчетов(Команда) + ДобавитьШаблон("[СформированныеОтчеты]", Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьШаблонАвтора(Команда) + ДобавитьШаблон("[Автор]"); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьШаблонНаименованияРассылки(Команда) + ДобавитьШаблон("[НаименованиеРассылки]"); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьШаблонСистемы(Команда) + ДобавитьШаблон("[ЗаголовокСистемы]"); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьШаблонСпособаДоставки(Команда) + ДобавитьШаблон("[СпособДоставки]"); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьШаблонПоУмолчанию(Команда) + ОчищаетсяТема = (ТекущийЭлемент = Элементы.ТемаПисьма); + + ЗначениеПредмета = ""; + ШаблонПоУмолчанию = ""; + + Если ОчищаетсяТема Тогда + ЗначениеПредмета = Объект.ТемаПисьма; + ШаблонПоУмолчанию = Кэш.Шаблоны.Тема; + Иначе + ШаблонПоУмолчанию = Кэш.Шаблоны.Текст; + ЗначениеПредмета = СокрЛП( + ?(Объект.ПисьмоВФорматеHTML, + ТекстПисьмаФорматированныйДокумент.ПолучитьТекст(), + Объект.ТекстПисьма + ) + ); + КонецЕсли; + + Ответ = 1; + Если ЗначениеПредмета = "" Тогда + // Предмет пуст - надо заполнить без вопросов + + ИначеЕсли ЗначениеПредмета = ШаблонПоУмолчанию Тогда + // Предмет соответствует шаблону - заполнять не требуется + + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 уже соответствует шаблону по умолчанию.'"), + ?(ОчищаетсяТема, НСтр("ru = 'Тема письма'"), НСтр("ru = 'Текст письма'")) + ); + Предупреждение(ТекстПредупреждения); + Возврат; + + Иначе + // Предмет не пуст - надо запросить замену на стандартный шаблон + + Предмет = ?(ОчищаетсяТема, НСтр("ru = 'тему письма'"), НСтр("ru = 'текст письма'")); + + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Заменить %1 на шаблон по умолчанию?'"), + Предмет + ); + + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Добавить в %1 шаблон по умолчанию'"), + Предмет + ); + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(1, НСтр("ru = 'Заменить'")); + Кнопки.Добавить(2, НСтр("ru = 'Добавить'")); // без замены + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + + Ответ = Вопрос(ТекстВопроса, Кнопки, 60, 1); + КонецЕсли; + + Если Ответ = 1 Тогда + Если ОчищаетсяТема Тогда + Объект.ТемаПисьма = ШаблонПоУмолчанию; + Иначе + Если Объект.ПисьмоВФорматеHTML Тогда + ТекстПисьмаФорматированныйДокумент.Удалить(); + ТекстПисьмаФорматированныйДокумент.Добавить(ШаблонПоУмолчанию, ТипЭлементаФорматированногоДокумента.Текст); + Иначе + Объект.ТекстПисьма = ШаблонПоУмолчанию; + КонецЕсли; + КонецЕсли; + ИначеЕсли Ответ = 2 Тогда + ДобавитьШаблон(ШаблонПоУмолчанию); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПредпросмотрШаблона(Команда) + ДобавитьШаблон(); + + Если ТекущийЭлемент = Элементы.ТекстПисьмаФорматированныйДокумент Тогда + Шаблон = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст(); + ИначеЕсли ТекущийЭлемент = Элементы.ТекстПисьма Тогда + Шаблон = Объект.ТекстПисьма; + ИначеЕсли ТекущийЭлемент = Элементы.ТемаПисьма Тогда + Шаблон = Объект.ТемаПисьма; + КонецЕсли; + + СписокОтчетов = ""; + Для Каждого СтрокаОтчет Из Объект.Отчеты Цикл + СписокОтчетов = СписокОтчетов + + Символы.ПС + + СтрокаОтчет.Представление + + " (" + + ?(СтрокаОтчет.Форматы = ПредставлениеФорматовПоУмолчанию(), ФорматыПоУмолчанию, СтрокаОтчет.Форматы) + + ")"; + КонецЦикла; + СписокОтчетов = СокрЛ(СписокОтчетов); + + Настройки = Новый Структура("НаименованиеРассылки, Автор, ЗаголовокСистемы, ДатаВыполнения, СформированныеОтчеты, СпособДоставки", + Объект.Наименование, + Объект.Автор, + Кэш.ЗаголовокСистемы, + ОбщегоНазначенияКлиент.ДатаСеанса(), + СписокОтчетов, + "" + ); + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(РассылкаОтчетовКлиентСервер.ЗаполнитьШаблон(Шаблон, Настройки)); + ТекстовыйДокумент.Показать(); +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПубликацию(Команда) + // Параметры доставки + ПараметрыДоставки = Новый Структура; + // + ПараметрыДоставки.Вставить("ИспользоватьПапку", Объект.ИспользоватьПапку); + ПараметрыДоставки.Вставить("ИспользоватьСетевойКаталог", Объект.ИспользоватьСетевойКаталог); + ПараметрыДоставки.Вставить("ИспользоватьFTPРесурс", Объект.ИспользоватьFTPРесурс); + ПараметрыДоставки.Вставить("ИспользоватьЭлектроннуюПочту", Ложь); + // + ПроверитьРассылку(ПараметрыДоставки); +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьЭлектроннуюПочту(Команда) + // Параметры доставки + ПараметрыДоставки = Новый Структура; + // + ПараметрыДоставки.Вставить("ИспользоватьПапку", Ложь); + ПараметрыДоставки.Вставить("ИспользоватьСетевойКаталог", Ложь); + ПараметрыДоставки.Вставить("ИспользоватьFTPРесурс", Ложь); + ПараметрыДоставки.Вставить("ИспользоватьЭлектроннуюПочту", Истина); + // + ПроверитьРассылку(ПараметрыДоставки); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьТипТекстаНаHTML(Команда) + Модифицированность = Истина; + Объект.ПисьмоВФорматеHTML = Истина; + ТекстПисьмаИзHTML = СокрЛП(ТекстПисьмаФорматированныйДокумент.ПолучитьТекст()); + Если ТекстПисьмаИзHTML <> Объект.ТекстПисьма Тогда + ТекстПисьмаФорматированныйДокумент.Удалить(); + ТекстПисьмаФорматированныйДокумент.Добавить(Объект.ТекстПисьма, ТипЭлементаФорматированногоДокумента.Текст); + КонецЕсли; + ТекущийЭлемент = Элементы.ТекстПисьмаФорматированныйДокумент; + ВидимостьДоступностьКорректность(ЭтаФорма, "ПисьмоВФорматеHTML"); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьТипТекстаНаОбычный(Команда) + Модифицированность = Истина; + Объект.ПисьмоВФорматеHTML = Ложь; + ТекстПисьмаИзHTML = СокрЛП(ТекстПисьмаФорматированныйДокумент.ПолучитьТекст()); + Если Объект.ТекстПисьма <> ТекстПисьмаИзHTML Тогда + Объект.ТекстПисьма = ТекстПисьмаИзHTML; + КонецЕсли; + ТекущийЭлемент = Элементы.ТекстПисьма; + ВидимостьДоступностьКорректность(ЭтаФорма, "ПисьмоВФорматеHTML"); +КонецПроцедуры + +&НаКлиенте +Процедура ВидПочтовогоАдресаПолучателейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + Если НЕ ЗначениеЗаполнено(ТипПолучателейРассылки) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Перед выбором почтового адреса необходимо выбрать получателей'"), + , + "ТипПолучателейРассылки" + ); + СтандартнаяОбработка = Ложь; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница "Дополнительно" + +&НаКлиенте +Процедура СнятьПометкиОтправлятьЕслиПустой(Команда) + Если Объект.Отчеты.Количество() > 0 Тогда + Модифицированность = Истина; + Для Каждого СтрОтчет Из Объект.Отчеты Цикл + СтрОтчет.ОтправлятьЕслиПустой = Ложь; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПометкиОтправлятьЕслиПустой(Команда) + Если Объект.Отчеты.Количество() > 0 Тогда + Модифицированность = Истина; + Для Каждого СтрОтчет Из Объект.Отчеты Цикл + СтрОтчет.ОтправлятьЕслиПустой = Истина; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Контекстные вызовы сервера + +&НаСервере +Процедура ПрочитатьПользовательскоеПредставлениеФорматов() + УстановитьПривилегированныйРежим(Истина); + Для Каждого СтрокаОтчеты Из Объект.Отчеты Цикл + СтрокаОтчеты.Представление = Строка(СтрокаОтчеты.Отчет); + СтрокаОтчеты.Форматы = ""; + Найденные = Объект.ФорматыОтчетов.НайтиСтроки(Новый Структура("Отчет", СтрокаОтчеты.Отчет)); + Для Каждого СтрокаФормат Из Найденные Цикл + СтрокаОтчеты.Форматы = СтрокаОтчеты.Форматы + ?(СтрокаОтчеты.Форматы = "", "", ", ") + Строка(СтрокаФормат.Формат); + КонецЦикла; + Если СтрокаОтчеты.Форматы = "" Тогда + СтрокаОтчеты.Форматы = ПредставлениеФорматовПоУмолчанию(); + КонецЕсли; + КонецЦикла; + УстановитьПривилегированныйРежим(Ложь); +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьРасписаниеРегламентногоЗадания() + УстановитьПривилегированныйРежим(Истина); + ИдентификаторЗадания = ?(СозданКопированием, ЗначениеКопирования.РегламентноеЗадание, Объект.РегламентноеЗадание); + Если ТипЗнч(ИдентификаторЗадания) = Тип("УникальныйИдентификатор") Тогда + Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); + Если Задание <> Неопределено Тогда + Расписание = Задание.Расписание; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьНастройкиОтчетовОбъектаКопирования() + МассивУдаляемыхСтрок = Новый Массив; + ПричинаУдаленияСтрок = ""; + + Для Индекс = 1 По Объект.Отчеты.Количество() Цикл + СтрокаОтчеты = Объект.Отчеты[Индекс - 1]; + СтрокаОтчетыОбъектаКопирования = ЗначениеКопирования.Отчеты[Индекс - 1]; + + НастройкиОтчета = СтрокаОтчетыОбъектаКопирования.Настройки.Получить(); + + ПараметрыОтчета = ИнициалиазироватьОтчет(СтрокаОтчеты.Отчет, НастройкиОтчета); + + // Проверка результата инциализации + Если НЕ ПараметрыОтчета.Инициализирован Тогда + МассивУдаляемыхСтрок.Добавить(СтрокаОтчеты); + ПричинаУдаленияСтрок = ПричинаУдаленияСтрок + ?(ПричинаУдаленияСтрок = "", "", Символы.ПС) + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отчет %1 был удален из-за ошибки инициализации (см. выше).'"), + "'"+ Строка(СтрокаОтчеты.Представление) +"'" + ); + Продолжить; + КонецЕсли; + + // + СтрокаОтчеты.СКД = ПараметрыОтчета.СКД; + + // Восстановление настроек + Если СтрокаОтчеты.СКД Тогда + + КомпоновщикНастроекКД = ПараметрыОтчета.КомпоновщикНастроекКД; + + Иначе + + // Очищаем & Восстанавливаем + Если ТипЗнч(НастройкиОтчета) = Тип("ТаблицаЗначений") Тогда + НастройкиТекущегоОтчета.Загрузить(НастройкиОтчета); + Иначе + НастройкиТекущегоОтчета.Очистить(); + КонецЕсли; + + Для Каждого КлючИЗначение Из ПараметрыОтчета.ДоступныеРеквизиты Цикл + // Обновляем вычисляемые реквизиты + Найденные = НастройкиТекущегоОтчета.НайтиСтроки(Новый Структура("Реквизит", КлючИЗначение.Ключ)); + Если Найденные.Количество() = 0 Тогда + СтрокаНастройка = НастройкиТекущегоОтчета.Добавить(); + СтрокаНастройка.Реквизит = КлючИЗначение.Ключ; + Иначе + СтрокаНастройка = Найденные[0]; + КонецЕсли; + СтрокаНастройка.Представление = КлючИЗначение.Значение.Представление; + СтрокаНастройка.Тип = КлючИЗначение.Значение.Тип; + СтрокаНастройка.Обнаружен = Истина; + СтрокаНастройка.ИндексКартинки = 2; + КонецЦикла; + + // Отключаем необнаруженные строки + Найденные = НастройкиТекущегоОтчета.НайтиСтроки(Новый Структура("Обнаружен", Ложь)); + Для Каждого СтрокаНастройка Из Найденные Цикл + СтрокаНастройка.Использование = Ложь; + СтрокаНастройка.ИндексКартинки = 3; + КонецЦикла; + + Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.СтраницаНастройкиТекущегоОтчета; + + КонецЕсли; + + СтрокаОтчеты.АдресНастроек = ПоместитьВоВременноеХранилище( + ?(СтрокаОтчеты.СКД, + КомпоновщикНастроекКД, + НастройкиТекущегоОтчета.Выгрузить() + ), + ?(ЭтоАдресВременногоХранилища(СтрокаОтчеты.АдресНастроек), + СтрокаОтчеты.АдресНастроек, + ЭтаФорма.УникальныйИдентификатор + ) + ); + КонецЦикла; + + Если МассивУдаляемыхСтрок.Количество() > 0 Тогда + Для Каждого СтрокаОтчеты Из МассивУдаляемыхСтрок Цикл + Объект.Отчеты.Удалить(СтрокаОтчеты); + КонецЦикла; + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ПричинаУдаленияСтрок; + Сообщение.Сообщить(); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПодключитьКэшНастроекЭлектроннойПочты() + // Подключение кеша типов получателей + ТаблицаТиповПолучателей.Загрузить(РассылкаОтчетовПовтИсп.ТаблицаТиповПолучателей()); + + // Заполнение списка выбора типов получателей + Для Каждого СтрокаПолучатель Из ТаблицаТиповПолучателей Цикл + Элементы.ТипПолучателейРассылки.СписокВыбора.Добавить(СтрокаПолучатель.ТипПолучателей, СтрокаПолучатель.Представление); + Если СтрокаПолучатель.ИОМД = Объект.ТипПолучателейРассылки Тогда + ТипПолучателейРассылки = СтрокаПолучатель.ТипПолучателей; + ГруппаКонтакнойИнформацииТипаПолучателей = СтрокаПолучатель.ГруппаКИ; + Если Объект.ВидПочтовогоАдресаПолучателей.Пустая() И ЗначениеЗаполнено(СтрокаПолучатель.ОсновнойВидКИ) Тогда + Объект.ВидПочтовогоАдресаПолучателей = СтрокаПолучатель.ОсновнойВидКИ; + КонецЕсли; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьПустыеШаблоныСтандартными(ТекущийОбъект) + // Данные объекта + Если ПустаяСтрока(ТекущийОбъект.ТемаПисьма) Тогда + ТекущийОбъект.ТемаПисьма = Кэш.Шаблоны.Тема; + КонецЕсли; + Если ПустаяСтрока(ТекущийОбъект.ТекстПисьма) Тогда + ТекущийОбъект.ТекстПисьма = Кэш.Шаблоны.Текст; + КонецЕсли; + Если ПустаяСтрока(ТекущийОбъект.ИмяАрхива) Тогда + ТекущийОбъект.ИмяАрхива = Кэш.Шаблоны.ИмяАрхива; + КонецЕсли; + // Данные формы + Если ПустаяСтрока(ТекстПисьмаФорматированныйДокумент.ПолучитьТекст()) Тогда + ТекстПисьмаФорматированныйДокумент.Добавить(Кэш.Шаблоны.Текст, ТипЭлементаФорматированногоДокумента.Текст); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьНастройкиСтрокиОтчеты(ИдентификаторСтроки) + СтрокаОтчеты = Объект.Отчеты.НайтиПоИдентификатору(ИдентификаторСтроки); + Если СтрокаОтчеты = Неопределено Тогда + Возврат; + КонецЕсли; + СтрокаОтчеты.АдресНастроек = ПоместитьВоВременноеХранилище( + ?(СтрокаОтчеты.Инициализирован, + ?(СтрокаОтчеты.СКД, + КомпоновщикНастроекКД, + НастройкиТекущегоОтчета.Выгрузить() + ), + Неопределено + ), + ?(ЭтоАдресВременногоХранилища(СтрокаОтчеты.АдресНастроек), + СтрокаОтчеты.АдресНастроек, + ЭтаФорма.УникальныйИдентификатор + ) + ); +КонецПроцедуры + +&НаСервере +Функция ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки, ДобавитьДежурнуюФразу = Истина) + Если ИдентификаторСтроки <> ИдентификаторТекущейСтрокиТаблицыОтчетов И ИдентификаторТекущейСтрокиТаблицыОтчетов <> -1 Тогда + ЗаписатьНастройкиСтрокиОтчеты(ИдентификаторТекущейСтрокиТаблицыОтчетов); + КонецЕсли; + ИдентификаторТекущейСтрокиТаблицыОтчетов = ИдентификаторСтроки; + + СтрокаОтчеты = Объект.Отчеты.НайтиПоИдентификатору(ИдентификаторСтроки); + Если СтрокаОтчеты = Неопределено Тогда + ИдентификаторТекущейСтрокиТаблицыОтчетов = -1; + Возврат НСтр("ru = 'Не выбрана строка отчета'"); + КонецЕсли; + + // Чтение настроек текущей строки из временного хранилища + переключение страницы + Если ЭтоАдресВременногоХранилища(СтрокаОтчеты.АдресНастроек) Тогда + Настройки = ПолучитьИзВременногоХранилища(СтрокаОтчеты.АдресНастроек); + Если ТипЗнч(Настройки) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда //СтрокаОтчеты.СКД Тогда + КомпоновщикНастроекКД = Настройки; + Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.СтраницаКомпоновщик; + ИначеЕсли ТипЗнч(Настройки) = Тип("ТаблицаЗначений") Тогда + НастройкиТекущегоОтчета.Загрузить(Настройки); + Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.СтраницаНастройкиТекущегоОтчета; + Иначе + Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.ПустаяСтраница; + КонецЕсли; + + Возврат ""; + КонецЕсли; + + // Чтение настроек отчета по ссылке + СтрокаОтчетыПоСсылке = Объект.Ссылка.Отчеты.Найти(СтрокаОтчеты.Отчет, "Отчет"); + НастройкиОтчета = ?(СтрокаОтчетыПоСсылке = Неопределено, Неопределено, СтрокаОтчетыПоСсылке.Настройки.Получить()); + + // Инициализация + ПараметрыОтчета = ИнициалиазироватьОтчет(СтрокаОтчеты.Отчет, НастройкиОтчета); + + // Очистка сообщений окна + Ошибки = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыОтчета.МассивОшибок, ДобавитьДежурнуюФразу); + ПараметрыОтчета.Ошибки = ПараметрыОтчета.Ошибки + + ?(ПараметрыОтчета.Ошибки = "" ИЛИ Ошибки = "", "", Символы.ПС + Символы.ПС) + + Ошибки; + + // + СтрокаОтчеты.СКД = ПараметрыОтчета.СКД; + СтрокаОтчеты.Инициализирован = ПараметрыОтчета.Инициализирован; + + // Проверка результата инциализации + Если НЕ СтрокаОтчеты.Инициализирован Тогда + // Удаление строки, если она не была записана в БД + Если СтрокаОтчетыПоСсылке = Неопределено Тогда + Объект.Отчеты.Удалить(СтрокаОтчеты); + КонецЕсли; + + Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.ПустаяСтраница; + + Возврат ПараметрыОтчета.Ошибки; + КонецЕсли; + + // Восстановление настроек + Если СтрокаОтчеты.СКД Тогда + + КомпоновщикНастроекКД = ПараметрыОтчета.КомпоновщикНастроекКД; + Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.СтраницаКомпоновщик; + + Иначе + + // Очищаем & Восстанавливаем + Если ТипЗнч(НастройкиОтчета) = Тип("ТаблицаЗначений") Тогда + НастройкиТекущегоОтчета.Загрузить(НастройкиОтчета); + Иначе + НастройкиТекущегоОтчета.Очистить(); + КонецЕсли; + + Для Каждого КлючИЗначение Из ПараметрыОтчета.ДоступныеРеквизиты Цикл + // Обновляем вычисляемые реквизиты + Найденные = НастройкиТекущегоОтчета.НайтиСтроки(Новый Структура("Реквизит", КлючИЗначение.Ключ)); + Если Найденные.Количество() = 0 Тогда + СтрокаНастройка = НастройкиТекущегоОтчета.Добавить(); + СтрокаНастройка.Реквизит = КлючИЗначение.Ключ; + Иначе + СтрокаНастройка = Найденные[0]; + КонецЕсли; + СтрокаНастройка.Представление = КлючИЗначение.Значение.Представление; + СтрокаНастройка.Тип = КлючИЗначение.Значение.Тип; + СтрокаНастройка.Обнаружен = Истина; + СтрокаНастройка.ИндексКартинки = 2; + КонецЦикла; + + // Отключаем необнаруженные строки + Найденные = НастройкиТекущегоОтчета.НайтиСтроки(Новый Структура("Обнаружен", Ложь)); + Для Каждого СтрокаНастройка Из Найденные Цикл + СтрокаНастройка.Использование = Ложь; + СтрокаНастройка.ИндексКартинки = 3; + КонецЦикла; + + Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.СтраницаНастройкиТекущегоОтчета; + + КонецЕсли; + + Возврат ПараметрыОтчета.Ошибки; +КонецФункции + +&НаСервере +Функция ИнициалиазироватьОтчет(Отчет, НастройкиОтчета) + // Параметры журнала + ПараметрыЖурнала = Новый Структура; + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Инициализация отчета'")); + ПараметрыЖурнала.Вставить("Данные", Объект.Ссылка); + ПараметрыЖурнала.Вставить("Метаданные", Метаданные.Справочники.РассылкиОтчетов); + ПараметрыЖурнала.Вставить("МассивОшибок", Новый Массив); + + // Инициализация отчета + ПараметрыОтчета = Новый Структура("Отчет, Настройки", Отчет, НастройкиОтчета); + РассылкаОтчетов.ИнициализироватьОтчет( + ПараметрыЖурнала, + ПараметрыОтчета, + Объект.Персонализирована, + ЭтаФорма.УникальныйИдентификатор + ); + + ПараметрыОтчета.Вставить("МассивОшибок", ПараметрыЖурнала.МассивОшибок); + + Возврат ПараметрыОтчета; +КонецФункции + +&НаСервере +Процедура ЗаполнитьРасписаниеПоВарианту(Вариант, ОбновитьВидимость = Ложь) + // Список вариантов - см. РассылкаОтчетовКлиентСервер.СписокВариантовЗаполненияРасписаний() + + Расписание = Новый РасписаниеРегламентногоЗадания; + + // в 7:30 утра + Расписание.ВремяНачала = '00010101073000'; + + // каждый день + Расписание.ПериодПовтораДней = 1; + + // по дням недели + ДеньНеделиМин = 1; + ДеньНеделиМакс = 7; + + // по всем месяцам + ВсеМесяцы = Новый Массив; + Для н = 1 По 12 Цикл + ВсеМесяцы.Добавить(н); + КонецЦикла; + Расписание.Месяцы = ВсеМесяцы; + + Если Вариант = 1 Тогда // "Каждый день" + Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежедневно; + + ИначеЕсли Вариант = 2 Тогда // "Каждый второй день" + Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежедневно; + Расписание.ПериодПовтораДней = 2; + + ИначеЕсли Вариант = 3 Тогда // "Каждый четвертый день" + Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежедневно; + Расписание.ПериодПовтораДней = 4; + + ИначеЕсли Вариант = 4 Тогда // "По будням" + Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Еженедельно; + ДеньНеделиМин = 1; + ДеньНеделиМакс = 5; + + ИначеЕсли Вариант = 5 Тогда // "По выходным" + Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Еженедельно; + Расписание.ВремяНачала = '00010101220000'; // в 10:00 вечера + ДеньНеделиМин = 6; + ДеньНеделиМакс = 7; + + ИначеЕсли Вариант = 6 Тогда // "По понедельникам" + Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Еженедельно; + ДеньНеделиМин = 1; + ДеньНеделиМакс = 1; + + ИначеЕсли Вариант = 7 Тогда // "По пятницам" + Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Еженедельно; + ДеньНеделиМин = 5; + ДеньНеделиМакс = 5; + + ИначеЕсли Вариант = 8 Тогда // "По воскресеньям" + Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Еженедельно; + Расписание.ВремяНачала = '00010101220000'; // в 10:00 вечера + ДеньНеделиМин = 7; + ДеньНеделиМакс = 7; + + ИначеЕсли Вариант = 9 Тогда // "В первый день месяца" + Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежемесячно; + Расписание.ДеньВМесяце = 1; + + ИначеЕсли Вариант = 10 Тогда // "В последний день месяца" + Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежемесячно; + Расписание.ДеньВМесяце = -1; + + ИначеЕсли Вариант = 11 Тогда // "Каждый квартал десятого числа" + ВсеМесяцы = Новый Массив; + ВсеМесяцы.Добавить(1); + ВсеМесяцы.Добавить(4); + ВсеМесяцы.Добавить(7); + ВсеМесяцы.Добавить(10); + Расписание.Месяцы = ВсеМесяцы; + Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежемесячно; + Расписание.ДеньВМесяце = 10; + + ИначеЕсли Вариант = 12 Тогда // "Другое..." + Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Произвольное; + + Иначе + Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежедневно; + + КонецЕсли; + + // по дням недели + ВыбранныеДниНедели = Новый Массив; + Для н = ДеньНеделиМин По ДеньНеделиМакс Цикл + ВыбранныеДниНедели.Добавить(н); + КонецЦикла; + Расписание.ДниНедели = ВыбранныеДниНедели; + + Если ОбновитьВидимость Тогда + ВидимостьДоступностьКорректность(ЭтаФорма); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция ЗафиксироватьЗначенияРеквизитовДоИзменения() + ЗначенияРеквизитовДоИзменения = Новый Структура("ИспользоватьПапку, ИспользоватьЭлектроннуюПочту, ТолькоУведомить, Архивировать"); + ЗаполнитьЗначенияСвойств(ЗначенияРеквизитовДоИзменения, Объект); + ЗначенияРеквизитовДоИзменения = Новый ФиксированнаяСтруктура(ЗначенияРеквизитовДоИзменения); +КонецФункции + +&НаСервере +Процедура ПроверитьДобавленныеСтрокиОтчетов(СтруктураВыбора) + // СтруктураВыбора: + // Выбрано - (Структура) строки, выбранные пользователем + // Успешно - (Структура) строки, инициализированные и добавленные в список + // СОшибками - (Структура) строки, не добавленные в список из-за ошибок + // |- Количество - (Число) + // |- МассивСтрок - (Массив) + // |- ПредставлениеОтчетов - (Строка) + // |- Текст - (Строка) + + МассивОшибок = Новый Массив; + + СтруктураВыбора.Выбрано.Количество = СтруктураВыбора.Выбрано.МассивСтрок.Количество(); + Для ОбратныйИндекс = 1 По СтруктураВыбора.Выбрано.Количество Цикл + Индекс = СтруктураВыбора.Выбрано.Количество - ОбратныйИндекс; + ИдентификаторСтрокиОтчеты = СтруктураВыбора.Выбрано.МассивСтрок[Индекс]; + + СтрокаОтчеты = Объект.Отчеты.НайтиПоИдентификатору(ИдентификаторСтрокиОтчеты); + Если СтрокаОтчеты.Представление = "" Тогда + СтрокаОтчеты.Представление = Строка(СтрокаОтчеты.Отчет); + КонецЕсли; + + СтрокаПредупреждения = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтрокиОтчеты, Ложь); + Если СтрокаПредупреждения = "" Тогда + Ключ = "Успешно"; + Иначе + Ключ = "СОшибками"; + МассивОшибок.Добавить(СтрокаПредупреждения); + КонецЕсли; + + СтруктураВыбора[Ключ].Количество = СтруктураВыбора[Ключ].Количество + 1; + СтруктураВыбора[Ключ].МассивСтрок.Добавить(ИдентификаторСтрокиОтчеты); + СтруктураВыбора[Ключ].ПредставлениеОтчетов = СтруктураВыбора[Ключ].ПредставлениеОтчетов + + ?(СтруктураВыбора[Ключ].ПредставлениеОтчетов = "", "", ", ") + + СтрокаОтчеты.Представление; + КонецЦикла; + + // Установка курсора на первый из добавленных элементов + Если СтруктураВыбора.Успешно.Количество > 0 Тогда + Элементы.Отчеты.ТекущаяСтрока = СтруктураВыбора.Успешно.МассивСтрок[0]; + ИдентификаторТекущейСтрокиТаблицыОтчетов = Элементы.Отчеты.ТекущаяСтрока; + ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтрокиОтчеты, Ложь); + КонецЕсли; + + // Сборка текста ошибок + Если СтруктураВыбора.СОшибками.Количество > 0 Тогда + СтруктураВыбора.СОшибками.Текст = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(МассивОшибок); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция ПроверитьСпособДоставки(Рассылка, Знач ПараметрыДоставки) + Если Модифицированность И НЕ Записать() Тогда + Возврат Неопределено; + КонецЕсли; + + ПараметрыДоставки.Вставить("ДатаВыполнения", ТекущаяДатаСеанса()); + + // Инициализация параметров записи в журнал регистрации + УстановитьПривилегированныйРежим(Истина); + + ПараметрыЖурнала = Новый Структура; + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Проверка способа доставки'")); + ПараметрыЖурнала.Вставить("Данные", Рассылка); + ПараметрыЖурнала.Вставить("Метаданные", Метаданные.Справочники.РассылкиОтчетов); + ПараметрыЖурнала.Вставить("МассивОшибок", Новый Массив); + + УстановитьПривилегированныйРежим(Ложь); + + // Добавление параметров доставки для записи результатов выполнения + ПараметрыДоставки.Вставить("БылиОшибки", Ложь); + ПараметрыДоставки.Вставить("БылиПредупреждения", Ложь); + ПараметрыДоставки.Вставить("ВыполненаВПапку", Ложь); + ПараметрыДоставки.Вставить("ВыполненаВСетевойКаталог", Ложь); + ПараметрыДоставки.Вставить("ВыполненаНаFTP", Ложь); + ПараметрыДоставки.Вставить("ВыполненаПоЭлектроннойПочте", Ложь); + + // Запись пустого табличного документа в html 4 + ПолноеИмяФайла = ПолучитьИмяВременногоФайла(".html"); + + ТабДок = Новый ТабличныйДокумент; + ТабДок.Записать(ПолноеИмяФайла, ТипФайлаТабличногоДокумента.HTML4); + + // Формирование вложений + Файл = Новый Файл(ПолноеИмяФайла); + + Вложения = Новый Соответствие; + Вложения.Вставить(Файл.Имя, Файл.ПолноеИмя); + + // Доставка + Если ПараметрыДоставки.ИспользоватьПапку Тогда + НачатьТранзакцию(); + КонецЕсли; + + Выполнена = РассылкаОтчетов.ВыполнитьДоставку(ПараметрыЖурнала, ПараметрыДоставки, Вложения); + + Если ПараметрыДоставки.ИспользоватьПапку Тогда + ОтменитьТранзакцию(); + КонецЕсли; + + // Очистка вложений + Для Каждого Вложение Из Вложения Цикл + УдалитьФайлы(Вложение.Значение); + КонецЦикла; + + Результат = Новый Структура("Оповестить, Заголовок, Текст, ТекстОшибок"); + Результат.Оповестить = Ложь; + Результат.ТекстОшибок = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок); + Если Выполнена Тогда + Результат.Текст = НСтр("ru = 'Тест способа доставки успешно пройден.'"); + Иначе + Результат.Текст = НСтр("ru = 'Тест способа доставки не пройден.'"); + КонецЕсли; + + Возврат Результат; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Неконтекстные вызовы сервера + +&НаСервереБезКонтекста +Функция ПолучитьКэш() + // Преобразование наименований в значения + ДниНедели = Новый Соответствие; + ДниНедели.Вставить("Понедельник", 1); + ДниНедели.Вставить("Вторник", 2); + ДниНедели.Вставить("Среда", 3); + ДниНедели.Вставить("Четверг", 4); + ДниНедели.Вставить("Пятница", 5); + ДниНедели.Вставить("Суббота", 6); + ДниНедели.Вставить("Воскресенье", 7); + ДниНедели = Новый ФиксированноеСоответствие(ДниНедели); + + Месяцы = Новый Соответствие; + Месяцы.Вставить("Январь", 1); + Месяцы.Вставить("Февраль", 2); + Месяцы.Вставить("Март", 3); + Месяцы.Вставить("Апрель", 4); + Месяцы.Вставить("Май", 5); + Месяцы.Вставить("Июнь", 6); + Месяцы.Вставить("Июль", 7); + Месяцы.Вставить("Август", 8); + Месяцы.Вставить("Сентябрь", 9); + Месяцы.Вставить("Октябрь", 10); + Месяцы.Вставить("Ноябрь", 11); + Месяцы.Вставить("Декабрь", 12); + Месяцы = Новый ФиксированноеСоответствие(Месяцы); + + // + Периодичности = Новый Соответствие; + Периодичности.Вставить(Перечисления.ПериодичностиРасписанийРассылокОтчетов.ПустаяСсылка(), "НеВыбрано"); + Для Каждого ОбъектМД Из Метаданные.Перечисления.ПериодичностиРасписанийРассылокОтчетов.ЗначенияПеречисления Цикл + Периодичности.Вставить(Перечисления.ПериодичностиРасписанийРассылокОтчетов[ОбъектМД.Имя], ОбъектМД.Имя); + КонецЦикла; + Периодичности = Новый ФиксированноеСоответствие(Периодичности); + + // + Шаблоны = Новый ФиксированнаяСтруктура("Тема, Текст, ИмяАрхива", + РассылкаОтчетовКлиентСервер.ШаблонТемы(), + РассылкаОтчетовКлиентСервер.ШаблонТекста(), + РассылкаОтчетовКлиентСервер.ШаблонИмениАрхива() + ); + + // + Кэш = Новый Структура; + Кэш.Вставить("ПустоеЗначениеОтчета", РассылкаОтчетовПовтИсп.ПустоеЗначениеОтчета()); + Кэш.Вставить("ГруппаЛичныхРассылок", Справочники.РассылкиОтчетов.ЛичныеРассылки); + Кэш.Вставить("ЗаголовокСистемы", РассылкаОтчетовПовтИсп.ИмяЭтойИнформационнойБазы()); + Кэш.Вставить("Соответствия", Новый ФиксированнаяСтруктура("ДниНедели, Месяцы", ДниНедели, Месяцы)); + Кэш.Вставить("Перечисления", Новый ФиксированнаяСтруктура("Периодичности", Периодичности)); + Кэш.Вставить("Шаблоны", Шаблоны); + Кэш = Новый ФиксированнаяСтруктура(Кэш); + + // + Возврат Кэш; +КонецФункции + +&НаСервереБезКонтекста +Функция ПолучитьСписокПочтовыхАдресов(Получатель, СписокЗначений = Неопределено) + ТекстЗапроса = + "ВЫБРАТЬ + | тчКонтактнаяИнформация.Представление КАК Представление, + | тчКонтактнаяИнформация.Вид КАК Значение + |ИЗ + | Справочник.Пользователи.КонтактнаяИнформация КАК тчКонтактнаяИнформация + |ГДЕ + | тчКонтактнаяИнформация.Ссылка = &Получатель + | И тчКонтактнаяИнформация.Тип = &ТипКИ"; + Попытка + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Пользователи", Получатель.Метаданные().Имя); + Исключение + Возврат СписокЗначений; + КонецПопытки; + + Если СписокЗначений = Неопределено Тогда + СписокЗначений = Новый СписокЗначений; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Получатель", Получатель); + Запрос.УстановитьПараметр("ТипКИ", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); + Запрос.Текст = ТекстЗапроса; + + ТЗИтог = Запрос.Выполнить().Выгрузить(); + Для Каждого СтрИтог Из ТЗИтог Цикл + Если ЗначениеЗаполнено(СтрИтог.Представление) Тогда + СписокЗначений.Добавить(СтрИтог.Значение, СтрИтог.Представление +" ("+ Строка(СтрИтог.Значение) +")"); + КонецЕсли; + КонецЦикла; + + Возврат СписокЗначений; +КонецФункции + +&НаСервереБезКонтекста +Функция СформироватьОтчетНаСервере(Знач ПараметрыОтчета, Получатель, ТребуемыеРеквизиты) + ПараметрыЖурнала = Новый Структура; + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Формирование отчета'")); + ПараметрыЖурнала.Вставить("Данные", ТребуемыеРеквизиты.Ссылка); + ПараметрыЖурнала.Вставить("Метаданные", ПараметрыЖурнала.Данные.Метаданные()); + ПараметрыЖурнала.Вставить("МассивОшибок", Новый Массив); + + ОтчетИнициализирован = РассылкаОтчетов.ИнициализироватьОтчет( + ПараметрыЖурнала, + ПараметрыОтчета, + ТребуемыеРеквизиты.Персонализирована + ); + + Результат = Новый Структура("Оповестить, Заголовок, Текст, ТекстОшибок, ТабДок"); + + ОтчетСформирован = Ложь; + Если ОтчетИнициализирован Тогда + Попытка + РезультатФормирования = РассылкаОтчетов.СформироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, Получатель); + ОтчетСформирован = РезультатФормирования.Сформирован; + Если РезультатФормирования.Пустой И НЕ ПараметрыОтчета.ОтправлятьЕслиПустой Тогда + Результат.Оповестить = Ложь; + Результат.Текст = НСтр("ru = 'Отчет пустой'"); + Иначе + Результат.ТабДок = РезультатФормирования.ТабДок; + Результат.Оповестить = Истина; + Результат.Заголовок = НСтр("ru = 'Отчет сформирован'"); + Результат.Текст = Строка(ПараметрыОтчета.Отчет); + КонецЕсли; + Исключение + РассылкаОтчетов.ЗаписьЖурнала(ПараметрыЖурнала, , + НСтр("ru = 'Ошибка формирования отчета %1:'"), ИнформацияОбОшибке(), + "'"+ Строка(ПараметрыОтчета.Отчет) +"'" + ); + КонецПопытки; + КонецЕсли; + + Если НЕ ОтчетИнициализирован ИЛИ НЕ ОтчетСформирован Тогда + Результат.Оповестить = Ложь; + Результат.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось сформировать отчет %1.'"), + ?(ПараметрыОтчета.Представление = "", "", "'"+ ПараметрыОтчета.Представление +"'") + ); + КонецЕсли; + + Результат.ТекстОшибок = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок); + + Возврат Результат; +КонецФункции + +&НаСервереБезКонтекста +Функция ПравоИзмененияПапкиИФайлов(Папка) + + Результат = Истина; + РассылкаОтчетовПереопределяемый.ПравоИзмененияПапкиИФайлов(Папка, Результат); + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вызовы клиента и сервера + +&НаКлиентеНаСервереБезКонтекста +Процедура ПереключитьСтраницу(Элементы, ИмяНабораСтраниц, ПрефиксСтраниц = "", СуффиксСтраниц) + ИмяТекущейСтраницы = ?(ПрефиксСтраниц = "", ИмяНабораСтраниц, ПрефиксСтраниц) + СуффиксСтраниц; + Элементы[ИмяНабораСтраниц].ТекущаяСтраница = Элементы[ИмяТекущейСтраницы]; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ВидимостьДоступностьКорректность(ЭтаФорма, Изменения = "") + Объект = ЭтаФорма.Объект; + Элементы = ЭтаФорма.Элементы; + + Если Изменения = "" ИЛИ Изменения = "FTPСерверИКаталог" Тогда + ЭтаФорма.FTPСерверИКаталог = "ftp://"+ Объект.FTPСервер + Объект.FTPКаталог; + КонецЕсли; + + Если Изменения = "" ИЛИ Изменения = "ВидРассылки" Тогда + // Корректность + Если Объект.Личная И Объект.Персонализирована Тогда + Объект.Личная = Ложь; + КонецЕсли; + + ИспользуетсяГруппаЛичныхРассылок = (Объект.Родитель = ЭтаФорма.Кэш.ГруппаЛичныхРассылок); + Если Объект.Личная <> ИспользуетсяГруппаЛичныхРассылок Тогда + УстановитьМодифицированностьФормы(ЭтаФорма, "Родитель", , + НСтр("ru = 'Группа установлена в соответствии с видом рассылки'") + ); + Объект.Родитель = ?(Объект.Личная, ЭтаФорма.Кэш.ГруппаЛичныхРассылок, Неопределено); + КонецЕсли; + + Если Объект.Личная Тогда + РассылкаОбщая = Ложь; + ЭтаФорма.ВидРассылки = "Личная"; + ИначеЕсли Объект.Персонализирована Тогда + РассылкаОбщая = Ложь; + ЭтаФорма.ВидРассылки = "Персонализирована"; + Иначе + РассылкаОбщая = Истина; + ЭтаФорма.ВидРассылки = "Общая"; + КонецЕсли; + + Если НЕ РассылкаОбщая Тогда + Объект.ИспользоватьПапку = Ложь; + Объект.ИспользоватьСетевойКаталог = Ложь; + Объект.ИспользоватьFTPРесурс = Ложь; + Объект.ИспользоватьЭлектроннуюПочту = Истина; + КонецЕсли; + + // Видимость & Доступность + Элементы.Родитель.Доступность = НЕ Объект.Личная; + Элементы.НастройкаПолучателей.Видимость = НЕ Объект.Личная; + ПереключитьСтраницу(Элементы, "ВидыРассылки", , ?(Объект.Личная, "Личная", "ДляПолучателей")); + Элементы.ДругиеСпособыДоставки.Видимость = РассылкаОбщая; + Элементы.ГруппаИспользоватьЭлектроннуюПочту.Видимость = РассылкаОбщая; + + // Восстановление параметров + Если Объект.ИспользоватьПапку Тогда + ЭтаФорма.ДругойСпособДоставки = "ИспользоватьПапку"; + ЭтаФорма.Публиковать = Истина; + ИначеЕсли Объект.ИспользоватьСетевойКаталог Тогда + ЭтаФорма.ДругойСпособДоставки = "ИспользоватьСетевойКаталог"; + ЭтаФорма.Публиковать = Истина; + ИначеЕсли Объект.ИспользоватьFTPРесурс Тогда + ЭтаФорма.ДругойСпособДоставки = "ИспользоватьFTPРесурс"; + ЭтаФорма.Публиковать = Истина; + Иначе + ЭтаФорма.ДругойСпособДоставки = "ИспользоватьПапку"; + ЭтаФорма.Публиковать = Ложь; + КонецЕсли; + КонецЕсли; + + Если Изменения = "" ИЛИ Изменения = "Отчеты" Тогда + КоличествоОтчетов = ЭтаФорма.Объект.Отчеты.Количество(); + Если КоличествоОтчетов > 0 Тогда + Элементы.СтраницаОтчеты.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отчеты (%1)'"), + Формат(КоличествоОтчетов, "ЧН=0; ЧГ=") + ); + Иначе + Элементы.СтраницаОтчеты.Заголовок = НСтр("ru = 'Отчеты'") ; + КонецЕсли; + КонецЕсли; + + Если Изменения = "" ИЛИ Изменения = "ДругойСпособДоставки" ИЛИ Изменения = "Публиковать" ИЛИ Изменения = "ВидРассылки" Тогда + Элементы.ДругойСпособДоставки.Доступность = ЭтаФорма.Публиковать; + Элементы.ПараметрыДоставки.Доступность = ЭтаФорма.Публиковать; + Элементы.ПараметрыДоставки.ТекущаяСтраница = Элементы[ЭтаФорма.ДругойСпособДоставки]; + Элементы.ПроверитьПубликацию.Доступность = ЭтаФорма.Публиковать; + КонецЕсли; + + Если Изменения = "" ИЛИ Изменения = "ИспользоватьЭлектроннуюПочту" ИЛИ Изменения = "ВидРассылки" Тогда + Элементы.ГруппаУчетнаяЗапись.Доступность = Объект.ИспользоватьЭлектроннуюПочту; + Элементы.ПараметрыПисьма.Доступность = Объект.ИспользоватьЭлектроннуюПочту; + Элементы.ДополнительныеПараметрыРассылкиПоЭлектроннойПочте.Доступность = Объект.ИспользоватьЭлектроннуюПочту; + КонецЕсли; + + Если Изменения = "" + ИЛИ Изменения = "ТолькоУведомить" + ИЛИ Изменения = "ИспользоватьЭлектроннуюПочту" + ИЛИ Изменения = "ДругойСпособДоставки" + ИЛИ Изменения = "Публиковать" + ИЛИ Изменения = "ВидРассылки" + Тогда + + ВидимостьОпции = (Объект.ИспользоватьЭлектроннуюПочту И ЭтаФорма.Публиковать); + ПереключитьСтраницу(Элементы, "ТолькоУведомления", , ?(ВидимостьОпции, "Показать", "Скрыть")); + Если НЕ ВидимостьОпции Тогда + Объект.ТолькоУведомить = Ложь; + КонецЕсли; + + СпособыДоставки = ""; + Если Объект.ИспользоватьПапку Тогда + СпособыДоставки = НСтр("ru = 'папка'"); + КонецЕсли; + Если Объект.ИспользоватьСетевойКаталог Тогда + СпособыДоставки = НСтр("ru = 'сетевой каталог'"); + КонецЕсли; + Если Объект.ИспользоватьFTPРесурс Тогда + СпособыДоставки = НСтр("ru = 'FTP'"); + КонецЕсли; + Если Объект.ИспользоватьЭлектроннуюПочту И НЕ Объект.ТолькоУведомить Тогда + СпособыДоставки = СпособыДоставки + ?(СпособыДоставки = "", НСтр("ru = 'эл. почта'"), " "+ НСтр("ru = 'и эл. почта'")); + КонецЕсли; + + Элементы.СтраницаДоставка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Доставка (%1)'"), + СпособыДоставки + ); + КонецЕсли; + + Если Изменения = "" ИЛИ Изменения = "ПисьмоВФорматеHTML" Тогда + ПереключитьСтраницу(Элементы, "СтраницыТекстПисьма", , ?(Объект.ПисьмоВФорматеHTML, "HTML", "ОбычныйТекст")); + КонецЕсли; + + Если Изменения = "" ИЛИ Изменения = "Архивировать" Тогда + Элементы.ИмяАрхива.Доступность = Объект.Архивировать; + Элементы.ПарольАрхива.Доступность = Объект.Архивировать; + КонецЕсли; + + Если Изменения = "" ИЛИ Изменения = "ВыполнятьПоРасписанию" Тогда + Если Объект.ВыполнятьПоРасписанию Тогда + Элементы.СтраницаРасписание.Заголовок = НСтр("ru = 'Расписание (активно)'"); + Иначе + Элементы.СтраницаРасписание.Заголовок = НСтр("ru = 'Расписание (не активно)'"); + КонецЕсли; + Элементы.ПараметрыВыполненияПоРасписанию.Доступность = Объект.ВыполнятьПоРасписанию; + Элементы.СтраницыПериодичности.Доступность = Объект.ВыполнятьПоРасписанию; + КонецЕсли; + + Если Изменения = "" ИЛИ Изменения = "ПериодичностьРасписания" Тогда + ИмяПеречисления = ЭтаФорма.Кэш.Перечисления.Периодичности[Объект.ПериодичностьРасписания]; + + Элементы.СтраницыПериодичности.ТекущаяСтраница = Элементы["Страница"+ИмяПеречисления]; + Если ИмяПеречисления = "Произвольное" Тогда + Элементы.СтраницыВремяИлиИзменить.ТекущаяСтраница = Элементы.СтраницаИзменитьРасписание; + Иначе + Элементы.СтраницыВремяИлиИзменить.ТекущаяСтраница = Элементы.СтраницаВремяНачала; + КонецЕсли; + + // Сброс параметров, которые не соответствуют закладкам упрощенного редактирования + Если Изменения = "ПериодичностьРасписания" + И (ИмяПеречисления = "Ежедневно" + ИЛИ ИмяПеречисления = "Еженедельно" + ИЛИ ИмяПеречисления = "Ежемесячно") Тогда + + // Общие параметры + ЭтаФорма.Расписание.ДатаНачала = '00010101'; + ЭтаФорма.Расписание.ДатаКонца = '00010101'; + ЭтаФорма.Расписание.ВремяКонца = '00010101'; + ЭтаФорма.Расписание.ВремяЗавершения = '00010101'; + ЭтаФорма.Расписание.ДеньНеделиВМесяце = 0; + ЭтаФорма.Расписание.ДетальныеРасписанияДня = Новый Массив; + ЭтаФорма.Расписание.ИнтервалЗавершения = 0; + ЭтаФорма.Расписание.ПаузаПовтора = 0; + ЭтаФорма.Расписание.ПериодНедель = 0; + ЭтаФорма.Расписание.ПериодПовтораВТечениеДня = 0; + + Если ИмяПеречисления <> "Ежедневно" Тогда + ЭтаФорма.Расписание.ПериодПовтораДней = 1; + КонецЕсли; + + Если ИмяПеречисления <> "Еженедельно" Тогда + ВыбранныеДниНедели = Новый Массив; + Для н = 1 По 7 Цикл + ВыбранныеДниНедели.Добавить(н); + КонецЦикла; + ЭтаФорма.Расписание.ДниНедели = ВыбранныеДниНедели; + КонецЕсли; + + Если ИмяПеречисления <> "Ежемесячно" Тогда + ВсеМесяцы = Новый Массив; + Для н = 1 По 12 Цикл + ВсеМесяцы.Добавить(н); + КонецЦикла; + ЭтаФорма.Расписание.Месяцы = ВсеМесяцы; + ЭтаФорма.Расписание.ДеньВМесяце = 0; + КонецЕсли; + КонецЕсли; + + // Восстанавливаем параметры на текущей закладке в соответствии с параметрами расписания + Если ИмяПеречисления = "Ежедневно" Тогда + ЭтаФорма.ВремяНачала = ЭтаФорма.Расписание.ВремяНачала; + ЭтаФорма.ПериодПовтораДней = ЭтаФорма.Расписание.ПериодПовтораДней; + ИначеЕсли ИмяПеречисления = "Еженедельно" Тогда + ЭтаФорма.ВремяНачала = ЭтаФорма.Расписание.ВремяНачала; + Для Каждого КлючИЗначение Из ЭтаФорма.Кэш.Соответствия.ДниНедели Цикл + ЭтаФорма[КлючИЗначение.Ключ] = (ЭтаФорма.Расписание.ДниНедели.Найти(КлючИЗначение.Значение) <> Неопределено); + КонецЦикла; + ИначеЕсли ИмяПеречисления = "Ежемесячно" Тогда + ЭтаФорма.ВремяНачала = ЭтаФорма.Расписание.ВремяНачала; + Если ЭтаФорма.Расписание.ДеньВМесяце >= 0 Тогда + ЭтаФорма.ДеньВМесяце = ЭтаФорма.Расписание.ДеньВМесяце; + Элементы.ГиперссылкаНачалоКонецМесяца.Заголовок = НСтр("ru = 'начала'"); + Иначе + ЭтаФорма.ДеньВМесяце = -ЭтаФорма.Расписание.ДеньВМесяце; + Элементы.ГиперссылкаНачалоКонецМесяца.Заголовок = НСтр("ru = 'конца'"); + КонецЕсли; + Для Каждого КлючИЗначение Из ЭтаФорма.Кэш.Соответствия.Месяцы Цикл + ЭтаФорма[КлючИЗначение.Ключ] = (ЭтаФорма.Расписание.Месяцы.Найти(КлючИЗначение.Значение) <> Неопределено); + КонецЦикла; + КонецЕсли; + + КонецЕсли; // Изменения = "" ИЛИ Изменения = "ПериодичностьРасписания" + + Если Изменения = "" ИЛИ Изменения = "НачалоКонецМесяца" Тогда + Элементы.ГиперссылкаНачалоКонецМесяца.Заголовок = ?(ЭтаФорма.Расписание.ДеньВМесяце >= 0, "начала", "конца"); + КонецЕсли; + + Если Изменения = "" ИЛИ Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаРасписание Тогда + ЭтаФорма.ПредставлениеРасписания = Строка(ЭтаФорма.Расписание); + КонецЕсли; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьМодифицированностьФормы(ЭтаФорма, Поле = "", ПутьКДанным = "", Текст) + Если НЕ ЭтаФорма.Модифицированность Тогда + ЭтаФорма.ФормаБылаМодифицированаНаСервере = Истина; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст, , Поле, ПутьКДанным); + КонецЕсли; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеФорматовПоУмолчанию() + Возврат НСтр("ru = 'по умолчанию'"); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вызовы клиента + +&НаКлиенте +Процедура ДобавитьПеретащитьПолучателя(ПолучательИлиНаборПолучателей) + МассивНовыхСтрок = ВыборПодборПеретаскиваниеВТабличнуюЧасть( + ПолучательИлиНаборПолучателей, + Объект.Получатели, + "Получатель", + Новый Структура("Исключен", Ложь) + ); + Если МассивНовыхСтрок.Количество() > 0 Тогда + Если МассивНовыхСтрок.Количество() = 1 Тогда + ЗаголовокОповещения = НСтр("ru = 'Получатель добавлен в рассылку'"); + Иначе + ЗаголовокОповещения = НСтр("ru = 'Получатели добавлены в рассылку'"); + КонецЕсли; + + ТекстОповещения = ""; + Для Каждого СтрокаПолучатель Из МассивНовыхСтрок Цикл + ТекстОповещения = ТекстОповещения + ?(ТекстОповещения = "", "", ", ") + Строка(СтрокаПолучатель.Получатель); + КонецЦикла; + + РассылкаОтчетовКлиент.ПоказатьРезультат( + Новый Структура("Оповестить, Заголовок, Текст", Истина, ЗаголовокОповещения, ТекстОповещения) + ); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ВыборПодборПеретаскиваниеЭлементаВТабличнуюЧасть(ЭлементПодбора, ТабличнаяЧасть, ИмяРеквизита, СтруктураЗаполнения, Уникальность = Истина) + ПереданаСтруктура = (ТипЗнч(ЭлементПодбора) = Тип("Структура")); + Если ПереданаСтруктура ИЛИ ТипЗнч(ЭлементПодбора) = Тип("ДанныеФормыЭлементКоллекции") Тогда + Если ЭлементПодбора.Свойство(ИмяРеквизита) Тогда + ЗначениеРеквизита = ЭлементПодбора[ИмяРеквизита]; + Иначе + Возврат Неопределено; + КонецЕсли; + Иначе // (СправочникСсылка.*) перетаскивание из формы выбора или подбора + ЗначениеРеквизита = ЭлементПодбора; + КонецЕсли; + + // Требуется уникальность реквизита в рамках таблицы + Найденные = ТабличнаяЧасть.НайтиСтроки(Новый Структура(ИмяРеквизита, ЗначениеРеквизита)); + + Если Уникальность И Найденные.Количество() > 0 Тогда + Возврат Неопределено; + КонецЕсли; + + СтрокаТаблицы = ТабличнаяЧасть.Добавить(); + СтрокаТаблицы[ИмяРеквизита] = ЗначениеРеквизита; + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, СтруктураЗаполнения); + Если ПереданаСтруктура Тогда + Для Каждого КлючИЗначение Из ЭлементПодбора Цикл + Если СтруктураЗаполнения.Свойство(КлючИЗначение.Ключ) Тогда + ЭлементПодбора.Удалить(ЭлементПодбора.Ключ); + КонецЕсли; + КонецЦикла; + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ЭлементПодбора); + КонецЕсли; + + Возврат СтрокаТаблицы; +КонецФункции + +&НаКлиенте +Функция ВыборПодборПеретаскиваниеВТабличнуюЧасть(ВыбранноеЗначение, ТабличнаяЧасть, ИмяРеквизита, СтруктураЗаполнения, Идентификаторы = Ложь) + Модифицированность = Истина; + МассивНовыхСтрок = Новый Массив; + Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда + Для Каждого ЭлементПодбора Из ВыбранноеЗначение Цикл + Результат = ВыборПодборПеретаскиваниеЭлементаВТабличнуюЧасть(ЭлементПодбора, ТабличнаяЧасть, ИмяРеквизита, СтруктураЗаполнения); + Если Результат <> Неопределено Тогда + МассивНовыхСтрок.Добавить(?(Идентификаторы, Результат.ПолучитьИдентификатор(), Результат)); + КонецЕсли; + КонецЦикла; + Иначе + Результат = ВыборПодборПеретаскиваниеЭлементаВТабличнуюЧасть(ВыбранноеЗначение, ТабличнаяЧасть, ИмяРеквизита, СтруктураЗаполнения); + Если Результат <> Неопределено Тогда + МассивНовыхСтрок.Добавить(?(Идентификаторы, Результат.ПолучитьИдентификатор(), Результат)); + КонецЕсли; + КонецЕсли; + Возврат МассивНовыхСтрок; +КонецФункции + +&НаКлиенте +Процедура ОткрытьФормуВыбораДляПодбораПолучателей(ФормаИлиЭлементФормы) + Отказ = Ложь; + ПроверитьТипПолучателей(Отказ); + Если Отказ Тогда + Возврат; + КонецЕсли; + + Найденные = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ТипПолучателейРассылки)); + + Если Найденные.Количество() = 1 Тогда + ПараметрыФормыВыбора = Новый Структура; + // Стандартные реквизиты формы выбора (см. Расширение управляемой формы для динамического списка) + ПараметрыФормыВыбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы); + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь); + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); + ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина); + ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); + // Предполагаемые реквизиты + ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.Независимый); + ПараметрыФормыВыбора.Вставить("ВыборГрупп", Истина); + ПараметрыФормыВыбора.Вставить("ВыборГруппПользователей", Истина); + ПараметрыФормыВыбора.Вставить("РазрешитьНачалоПеретаскивания", Истина); + + ОткрытьФорму(Найденные[0].ПутьФормыВыбора, ПараметрыФормыВыбора, ФормаИлиЭлементФормы); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ВыбратьФормат(СсылкаНаОтчет) + ЗаполняетсяФорматПоУмолчанию = НЕ ЗначениеЗаполнено(СсылкаНаОтчет); + + Найденные = Объект.ФорматыОтчетов.НайтиСтроки(Новый Структура("Отчет", СсылкаНаОтчет)); + Если Найденные.Количество() > 0 Тогда + СписокФорматов.ЗаполнитьПометки(Ложь); + Для Каждого СтрокаФормат Из Найденные Цикл + СписокФорматов.НайтиПоЗначению(СтрокаФормат.Формат).Пометка = Истина; + КонецЦикла; + Иначе + СписокФорматов = СписокФорматовПоУмолчанию.Скопировать(); + Если НЕ ЗаполняетсяФорматПоУмолчанию Тогда + Найденные = Объект.ФорматыОтчетов.НайтиСтроки(Новый Структура("Отчет", Кэш.ПустоеЗначениеОтчета)); + Если Найденные.Количество() > 0 Тогда + СписокФорматов.ЗаполнитьПометки(Ложь); + Для Каждого СтрокаФормат Из Найденные Цикл + СписокФорматов.НайтиПоЗначению(СтрокаФормат.Формат).Пометка = Истина; + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ЗаполняетсяФорматПоУмолчанию Тогда + ЗаголовокФормыВыбора = НСтр("ru = 'Выберите форматы по умолчанию'"); + Иначе + ЗаголовокФормыВыбора = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выберите форматы для отчета %1'"), + "'"+ Строка(СсылкаНаОтчет) +"'" + ); + КонецЕсли; + + ДублирующийСписокФорматов = СписокФорматов.Скопировать(); + Если НЕ СписокФорматов.ОтметитьЭлементы(ЗаголовокФормыВыбора) Тогда + Возврат Неопределено; + КонецЕсли; + + // Проверка изменений + ФорматыСовпадают = Истина; + Для н = 1 По СписокФорматов.Количество() Цикл + Если СписокФорматов[н-1].Пометка <> ДублирующийСписокФорматов[н-1].Пометка Тогда + ФорматыСовпадают = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + Если ФорматыСовпадают Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = ""; + + // Очистка существующих записей + ОчиститьФормат(СсылкаНаОтчет); + + // Добавление отмеченных форматов + Для Каждого ЭлементСписка Из СписокФорматов Цикл + Если ЭлементСписка.Пометка Тогда + СтрокаФормат = Объект.ФорматыОтчетов.Добавить(); + СтрокаФормат.Отчет = СсылкаНаОтчет; + СтрокаФормат.Формат = ЭлементСписка.Значение; + Результат = Результат + ?(Результат = "", "", ", ") + Строка(ЭлементСписка.Значение); + КонецЕсли; + КонецЦикла; + + Если ЗаполняетсяФорматПоУмолчанию И Результат = "" Тогда + Результат = СписокФорматовПоУмолчаниюПредставление; + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура ОчиститьФормат(СсылкаНаОтчет) + Модифицированность = Истина; + Найденные = Объект.ФорматыОтчетов.НайтиСтроки(Новый Структура("Отчет", СсылкаНаОтчет)); + Для Каждого СтрокаФормат Из Найденные Цикл + Объект.ФорматыОтчетов.Удалить(СтрокаФормат); + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьШаблон(ТекстовыйШаблон = Неопределено, ИсключитьТемуПисьма = Ложь) + // Проверяем и устаналиваем фокус в нужный элемент + Если ИсключитьТемуПисьма ИЛИ НЕ (ТекущийЭлемент = Элементы.ТемаПисьма ИЛИ ТекущийЭлемент = Элементы.ИмяАрхива) Тогда + Если Объект.ПисьмоВФорматеHTML Тогда + Если ТекущийЭлемент <> Элементы.ТекстПисьмаФорматированныйДокумент Тогда + ТекущийЭлемент = Элементы.ТекстПисьмаФорматированныйДокумент; + КонецЕсли; + Иначе + Если ТекущийЭлемент <> Элементы.ТекстПисьма Тогда + ТекущийЭлемент = Элементы.ТекстПисьма; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ТекстовыйШаблон = Неопределено Тогда + // Ограничимся подготовкой к добавлению шаблона (переключением текущего элемента) + Возврат; + КонецЕсли; + + Если ТекущийЭлемент.ВыделенныйТекст = "" Тогда + // Форматированный документ некорректно отрабатывает изменения свойства + // ВыделенныйТекст, в случае, если ничего не выделено, + // поэтому используется альтернативный метод добавления текста. + Если ТекущийЭлемент = Элементы.ТекстПисьмаФорматированныйДокумент Тогда + ТекстПисьмаФорматированныйДокумент.Добавить(ТекстовыйШаблон, ТипЭлементаФорматированногоДокумента.Текст); + Иначе + ТекущийЭлемент.ВыделенныйТекст = ТекстовыйШаблон; + КонецЕсли; + Иначе + ТекущийЭлемент.ВыделенныйТекст = ТекущийЭлемент.ВыделенныйТекст + ТекстовыйШаблон; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ИзменитьИРазадресоватьМассив(Добавить, Элемент, Знач Массив) + Индекс = Массив.Найти(Элемент); + Если Добавить И Индекс = Неопределено Тогда + ВГраницаПлюс1 = ?(Массив.Количество() >= Элемент, Элемент, Массив.Количество()); + Для н = 1 По ВГраницаПлюс1 Цикл + Если Массив[ВГраницаПлюс1-н] < Элемент Тогда + Массив.Вставить(ВГраницаПлюс1-н+1, Элемент); + Возврат Массив; + КонецЕсли; + КонецЦикла; + Массив.Вставить(0, Элемент); + ИначеЕсли НЕ Добавить И Индекс <> Неопределено Тогда + Массив.Удалить(Индекс); + КонецЕсли; + Возврат Массив; +КонецФункции + +&НаКлиенте +Процедура ИзменитьРасписаниеВДиалоге() + ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Расписание); + Если ДиалогРасписания.ОткрытьМодально() Тогда + Модифицированность = Истина; + Расписание = ДиалогРасписания.Расписание; + ВидимостьДоступностьКорректность(ЭтаФорма, "Расписание"); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура НачалоВыбораНастройкиОтчета(Элемент, ДанныеВыбора, СтандартнаяОбработка, СКД = Неопределено) + // Сброс ограничителя + Элемент.ОграничениеТипа = Новый ОписаниеТипов; + + // + ЭлементСвязиПоТипу = Неопределено; + + // Возможность персонализации рассылки + Если НЕ Объект.Персонализирована Тогда + Возврат; + КонецЕсли; + + // Основной тип получателей + КоличествоТипов = ТипПолучателейРассылки.Типы().Количество(); + Если КоличествоТипов <> 1 И КоличествоТипов <> 2 Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Поле ""Получатели"" не заполнено'"), + , + "ТипПолучателейРассылки" + ); + СтандартнаяОбработка = Ложь; + Возврат; + КонецЕсли; + + // + Если СКД Тогда + Инициатор = Элементы.КомпоновщикНастроекПользовательскиеНастройки; + Иначе + Инициатор = Элементы.НастройкиТекущегоОтчета; + КонецЕсли; + + НайденныеИОМД = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ТипПолучателейРассылки)); + Если НайденныеИОМД.Количество() <> 1 Тогда + Возврат; + КонецЕсли; + + МассивТипов = НайденныеИОМД[0].ОсновнойТип.Типы(); + Если МассивТипов.Количество() <> 1 Тогда + Возврат; + КонецЕсли; + + ОсновнойТипПолучателей = МассивТипов[0]; + + // - Получения описания типов, доступных для выбора + Если СКД Тогда + + // - Идентификатор пользовательской настройки КД + ИдентификаторНастройки = Инициатор.ТекущаяСтрока; + Если ИдентификаторНастройки = Неопределено Тогда + Возврат; + КонецЕсли; + + // - Строка в составе настроек компоновки данных + СтрокаНастроек = КомпоновщикНастроекКД.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторНастройки); + Если СтрокаНастроек = Неопределено Тогда + Возврат; + КонецЕсли; + + // - Тип настройки + Если ТипЗнч(СтрокаНастроек) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЭтоЭлементОтбора = Истина; + ИначеЕсли ТипЗнч(СтрокаНастроек) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ЭтоЭлементОтбора = Ложь; + Иначе + Возврат; + КонецЕсли; + + // - Поле компоновки данных + Если ЭтоЭлементОтбора Тогда + + Если ЗначениеЗаполнено(СтрокаНастроек.ЛевоеЗначение) Тогда + + ПолеКД = СтрокаНастроек.ЛевоеЗначение; + + Иначе + + // - Нахождение поля в составе элементов отбора КД по идентификатору + ТекущийЭлементОтбораКД = Неопределено; + Идентификатор = Строка(ИдентификаторНастройки); + + ГруппыЭлементовОтбора = Новый Массив; + ГруппыЭлементовОтбора.Добавить(КомпоновщикНастроекКД.Настройки.Отбор.Элементы); + Пока ГруппыЭлементовОтбора.Количество() > 0 И ТекущийЭлементОтбораКД = Неопределено Цикл + ГруппаЭлементовОтбора = ГруппыЭлементовОтбора[0]; + ГруппыЭлементовОтбора.Удалить(0); + + Для Каждого ЭлементОтбораКД Из ГруппаЭлементовОтбора Цикл + Если ТипЗнч(ЭлементОтбораКД) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + ГруппыЭлементовОтбора.Добавить(ЭлементОтбораКД.Элементы); + ИначеЕсли ЭлементОтбораКД.ИдентификаторПользовательскойНастройки = Идентификатор Тогда + ТекущийЭлементОтбораКД = ЭлементОтбораКД; + Прервать; + КонецЕсли; + КонецЦикла; + + КонецЦикла; + + Если ТекущийЭлементОтбораКД = Неопределено Тогда + Возврат; + КонецЕсли; + + ПолеКД = ТекущийЭлементОтбораКД.ЛевоеЗначение; + + КонецЕсли; + + // - Нахождение поля в составе доступных полей выбора + ДоступноеПолеКД = КомпоновщикНастроекКД.Настройки.Выбор.ДоступныеПоляВыбора.НайтиПоле(ПолеКД); + Если ДоступноеПолеКД = Неопределено Тогда + Возврат; + КонецЕсли; + + ОписаниеДоступныхТипов = ДоступноеПолеКД.Тип; + + Иначе + + ДоступныйПараметрКД = КомпоновщикНастроекКД.Настройки.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(СтрокаНастроек.Параметр); + ОписаниеДоступныхТипов = ДоступныйПараметрКД.Тип; + + КонецЕсли; + + Иначе + + // Массив типов для произвольных отчетов + СтрокаНастроек = Инициатор.ТекущиеДанные; + Если СтрокаНастроек = Неопределено Тогда + Возврат; + КонецЕсли; + + ОписаниеДоступныхТипов = СтрокаНастроек.Тип; + + КонецЕсли; + + // - Проверка на содержание типа получателей + Если НЕ ОписаниеДоступныхТипов.СодержитТип(ОсновнойТипПолучателей) Тогда + Возврат; + КонецЕсли; + + // - Подмена списка выбора типов на список, содержащий получателя + СписокТипов = Новый СписокЗначений; + СписокТипов.Добавить("[Получатель]", НСтр("ru = 'Получатель отчета'")); + МассивТипов = ОписаниеДоступныхТипов.Типы(); + Для Каждого Тип Из МассивТипов Цикл + МассивДляОписанияТипов = Новый Массив; + МассивДляОписанияТипов.Добавить(Тип); + ОписаниеТипов = Новый ОписаниеТипов(МассивДляОписанияТипов); + ОписаниеТипов.ПривестиЗначение(); + СписокТипов.Добавить(ОписаниеТипов, Строка(Тип)); + КонецЦикла; + + // - Выбор + РезультатВыбора = ВыбратьИзСписка(СписокТипов); + Если РезультатВыбора = Неопределено Тогда + СтандартнаяОбработка = Ложь; + Инициатор.ЗакончитьРедактированиеСтроки(Истина); + Возврат; + КонецЕсли; + + // - Обработка результатов выбора + Если ТипЗнч(РезультатВыбора.Значение) = Тип("ОписаниеТипов") Тогда + + // - Выбран тип получателей + Элемент.ОграничениеТипа = РезультатВыбора.Значение; + + Иначе + + // - Выбран шаблон получателя + СтандартнаяОбработка = Ложь; + СтрокаНастроек.Использование = Истина; + Инициатор.ЗакончитьРедактированиеСтроки(Ложь); + РассылкаБылаПерсонализирована = Истина; + Элементы.Отчеты.ТекущиеДанные.ВнесеныИзменения = Истина; + + Если СКД Тогда + Если ЭтоЭлементОтбора Тогда + СтрокаНастроек.ПравоеЗначение = РезультатВыбора.Значение; + Иначе + СтрокаНастроек.Значение = РезультатВыбора.Значение; + КонецЕсли; + Иначе + СтрокаНастроек.Значение = РезультатВыбора.Значение; + КонецЕсли; + + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВычислитьФлажкиДополнительныхСпособовДоставки() + Объект.ИспользоватьПапку = Публиковать И (ДругойСпособДоставки = "ИспользоватьПапку"); + Объект.ИспользоватьСетевойКаталог = Публиковать И (ДругойСпособДоставки = "ИспользоватьСетевойКаталог"); + Объект.ИспользоватьFTPРесурс = Публиковать И (ДругойСпособДоставки = "ИспользоватьFTPРесурс"); +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьРассылку(ПараметрыДоставки) + // Очистка окна сообщений + ОчиститьСообщения(); + + // + Если НЕ Объект.Подготовлена ИЛИ Объект.Ссылка.Пустая() Тогда + Если НЕ Объект.Подготовлена Тогда + ТекстВопроса = НСтр("ru = 'Перед проверкой рассылка должна быть подготовлена. + |Нажмите ""Продолжить"", чтобы установить флажок ""Подготовлена"" и записать рассылку.'"); + Иначе + ТекстВопроса = НСтр("ru = 'Перед проверкой рассылка должна быть записана. + |Нажмите ""Продолжить"", чтобы записать рассылку.'"); + КонецЕсли; + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(1, НСтр("ru = 'Продолжить'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + + Ответ = Вопрос(ТекстВопроса, Кнопки, 60, 1, НСтр("ru = 'Проверка способа доставки'")); + Если Ответ = 1 Тогда + Объект.Подготовлена = Истина; + Если НЕ Записать() Тогда + Возврат; + КонецЕсли; + Иначе + Возврат; + КонецЕсли; + КонецЕсли; + + // + ПараметрыДоставки.Вставить("Рассылка", Объект.Наименование); + + // + Если ПараметрыДоставки.ИспользоватьПапку Тогда + ПараметрыДоставки.Вставить("Папка", Объект.Папка); + КонецЕсли; + // + Если ПараметрыДоставки.ИспользоватьСетевойКаталог Тогда + ПараметрыДоставки.Вставить("СетевойКаталогWindows", Объект.СетевойКаталогWindows); + ПараметрыДоставки.Вставить("СетевойКаталогLinux", Объект.СетевойКаталогLinux); + КонецЕсли; + // + Если ПараметрыДоставки.ИспользоватьFTPРесурс Тогда + ПараметрыДоставки.Вставить("Сервер", Объект.FTPСервер); + ПараметрыДоставки.Вставить("Порт", Объект.FTPПорт); + ПараметрыДоставки.Вставить("Логин", Объект.FTPЛогин); + ПараметрыДоставки.Вставить("Пароль", Объект.FTPПароль); + ПараметрыДоставки.Вставить("Каталог", Объект.FTPКаталог); + ПараметрыДоставки.Вставить("ПассивноеСоединение", Объект.FTPПассивноеСоединение); + КонецЕсли; + // + Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда + ПараметрыДоставки.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); + ПараметрыДоставки.Вставить("СкрытыеКопии", Объект.СкрытыеКопии); + ПараметрыДоставки.Вставить("ШаблонТемы", НСтр("ru = 'Тестовое сообщение 1С:Предприятие'")); + ПараметрыДоставки.Вставить("ШаблонТекста", НСтр("ru = 'Это сообщение отправлено системой рассылок 1С:Предприятие.'") + + Символы.ПС + Кэш.ЗаголовокСистемы + ); + + РезультатВыбора = РассылкаОтчетовКлиент.ВыбратьПолучателя(Объект, Ложь, Истина); // Получатель и E-Mail + Если РезультатВыбора = Неопределено Тогда + Возврат; + КонецЕсли; + ПараметрыДоставки.Вставить("Получатели", РезультатВыбора); + + ПараметрыДоставки.Вставить("ТолькоУведомить", Ложь); + ПараметрыДоставки.Вставить("ЗаполнитьСпособДоставкиВШаблонеСообщения", Ложь); + ПараметрыДоставки.Вставить("ЗаполнитьСформированныеОтчетыВШаблонеСообщения", Ложь); + ПараметрыДоставки.Вставить("ЗаполнитьПолучателяВШаблонеТемы", Ложь); + ПараметрыДоставки.Вставить("ЗаполнитьПолучателяВШаблонеСообщения", Ложь); + ПараметрыДоставки.Вставить("ПараметрыПисьма", Новый Структура); + ПараметрыДоставки.Вставить("Соединение", Неопределено); + КонецЕсли; // ПараметрыДоставки.ИспользоватьЭлектроннуюПочту + + ПараметрыДоставки.Вставить("ДобавлятьСсылки", ""); + + Результат = ПроверитьСпособДоставки(Объект.Ссылка, ПараметрыДоставки); + + РассылкаОтчетовКлиент.ПоказатьРезультат(Результат); +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьТипПолучателей(Отказ) + Если НЕ ЗначениеЗаполнено(ТипПолучателейРассылки) Тогда + ТекстСообщения = НСтр("ru = 'Поле ""Получатели"" не заполнено'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "ТипПолучателейРассылки"); + Отказ = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьКоличествоПолучателей(Отказ) + Если Объект.Получатели.Количество() = 0 Тогда + ТекстСообщения = НСтр("ru = 'Не введено ни одной строки в список ""Получатели"".'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.Получатели"); + Отказ = Истина; + КонецЕсли; +КонецПроцедуры + diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html new file mode 100644 index 000000000..5f2b9f679 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html @@ -0,0 +1,23 @@ + +

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

    +

    Реквизиты:

    +

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

    Команды:

    +

    + + +
    +
  • Выполнить сейчас
  • Позволят выполнить выбранные рассылки или группы рассылок от имени текущего пользователя. Выполняться будут только те рассылки, у которых установлен флажок подготовленности.
    +
  • События рассылки
  • Позволяет открыть журнал регистрации, предварительно отфильтровав его по событиям рассылки со времени последнего запуска.
    \ No newline at end of file diff --git a/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/ManagerModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl similarity index 100% rename from SSL/src/Reports/СправкаОбИсполнительскойДисциплине/ManagerModule.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..4ab443406 --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl @@ -0,0 +1,237 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + Если ЭтоГруппа Тогда + Возврат; + КонецЕсли; + + // Заполнение непроверяемых реквизитов + МассивНепроверяемыхРеквизитов = Новый Массив; + + // Проверка условий + ТекстЗапроса = + "ВЫБРАТЬ + | ВЫБОР + | КОГДА &Подготовлена = ИСТИНА + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК ПериодичностьРасписания, + | ВЫБОР + | КОГДА &Подготовлена = ИСТИНА + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК Отчеты, + | ВЫБОР + | КОГДА &Подготовлена = ИСТИНА + | И &ИспользоватьПапку = ИСТИНА + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК Папка, + | ВЫБОР + | КОГДА &Подготовлена = ИСТИНА + | И &ИспользоватьСетевойКаталог = ИСТИНА + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК СетевойКаталогWindows, + | ВЫБОР + | КОГДА &Подготовлена = ИСТИНА + | И &ИспользоватьСетевойКаталог = ИСТИНА + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК СетевойКаталогLinux, + | ВЫБОР + | КОГДА &Подготовлена = ИСТИНА + | И &ИспользоватьFTPРесурс = ИСТИНА + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК FTPСервер, + | ВЫБОР + | КОГДА &Подготовлена = ИСТИНА + | И &ИспользоватьFTPРесурс = ИСТИНА + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК FTPПорт, + | ВЫБОР + | КОГДА &Подготовлена = ИСТИНА + | И &ИспользоватьFTPРесурс = ИСТИНА + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК FTPКаталог, + | ВЫБОР + | КОГДА &Подготовлена = ИСТИНА + | И &ИспользоватьЭлектроннуюПочту = ИСТИНА + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК УчетнаяЗапись, + | ВЫБОР + | КОГДА &Подготовлена = ИСТИНА + | И &ИспользоватьЭлектроннуюПочту = ИСТИНА + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК ВидПочтовогоАдресаПолучателей, + | ВЫБОР + | КОГДА &Подготовлена = ИСТИНА + | И &ИспользоватьЭлектроннуюПочту = ИСТИНА + | И &Личная = ЛОЖЬ + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК Получатели"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Подготовлена", Подготовлена); + Запрос.УстановитьПараметр("ИспользоватьПапку", ИспользоватьПапку); + Запрос.УстановитьПараметр("ИспользоватьСетевойКаталог", ИспользоватьСетевойКаталог); + Запрос.УстановитьПараметр("ИспользоватьFTPРесурс", ИспользоватьFTPРесурс); + Запрос.УстановитьПараметр("ИспользоватьЭлектроннуюПочту", ИспользоватьЭлектроннуюПочту); + Запрос.УстановитьПараметр("Личная", Личная); + Запрос.Текст = ТекстЗапроса; + + Таблица = Запрос.Выполнить().Выгрузить(); + Если Таблица.Количество() > 0 Тогда + + Для Каждого Реквизит Из Таблица.Колонки Цикл + + Если Таблица[0][Реквизит.Имя] = Истина Тогда + МассивНепроверяемыхРеквизитов.Добавить(Реквизит.Имя); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + // Удаление непроверяемых реквизитов + ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов); + + // Дополнительный анализ + Если НЕ Подготовлена И ИспользоватьЭлектроннуюПочту И НЕ Личная Тогда + Если НЕ ЗначениеЗаполнено(ТипПолучателейРассылки) Тогда + Отказ = Истина; + ТекстСообщения = НСтр("ru = 'Поле ""Получатели"" не заполнено'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, , "ТипПолучателейРассылки"); + КонецЕсли; + Если Получатели.Количество() > 0 Тогда + ВключенныеПолучатели = Получатели.НайтиСтроки(Новый Структура("Исключен", Ложь)); + Если ВключенныеПолучатели.Количество() = 0 Тогда + Отказ = Истина; + ТекстСообщения = НСтр("ru = 'Необходимо включить хотя бы одного получателя.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, "Получатели[0].Исключен"); + КонецЕсли; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +Процедура ПередЗаписью(Отказ) + // Вызывается непосредственно до записи объекта в базу данных + Если Отказ ИЛИ ОбменДанными.Загрузка ИЛИ ЭтоГруппа Тогда + Возврат; + КонецЕсли; + + // Создание регламентное задание (получение уникального идентификатора) + УстановитьПривилегированныйРежим(Истина); + Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗадание); + Если Задание = Неопределено Тогда + Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(Метаданные.РегламентныеЗадания.РассылкаОтчетов); + Задание.ИмяПользователя = РассылкаОтчетов.ПолучитьИмяПользователяИБ(Автор); + Задание.Использование = ВыполнятьПоРасписанию; + Задание.Наименование = ПредставлениеЗаданияПоРассылке(Наименование); + Задание.Расписание = ДополнительныеСвойства.Расписание; + Задание.Записать(); + + РегламентноеЗадание = Задание.УникальныйИдентификатор; + КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + + // Соответствие флага подготовленности рассылки и задания пометке удаления рассылки + Если ПометкаУдаления И Подготовлена Тогда + Подготовлена = Ложь; + КонецЕсли; + + // Соответствие группы признаку личной рассылки по электронной почте + // Пользовательские проверки расположены в форме элемента + // Эти проверки обеспечивают жесткие привязки + ВыбранаГруппаЛичныхРассылок = (Родитель = Справочники.РассылкиОтчетов.ЛичныеРассылки); + Если Личная <> ВыбранаГруппаЛичныхРассылок Тогда + Родитель = ?(Личная, Справочники.РассылкиОтчетов.ЛичныеРассылки, Справочники.РассылкиОтчетов.ПустаяСсылка()); + КонецЕсли; +КонецПроцедуры + +Процедура ПередУдалением(Отказ) + Если Отказ ИЛИ ЭтоГруппа Тогда + Возврат; + КонецЕсли; + Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗадание); + Если Задание <> Неопределено Тогда + Задание.Удалить(); + КонецЕсли; +КонецПроцедуры + +Процедура ПриКопировании(ОбъектКопирования) + Если ЭтоГруппа Тогда + Возврат; + КонецЕсли; + + РегламентноеЗадание = Неопределено; +КонецПроцедуры + +Процедура ПриЗаписи(Отказ) + // Вызывается непосредственно после записи объекта в базу данных + Если Отказ ИЛИ ОбменДанными.Загрузка ИЛИ ЭтоГруппа Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗадание); + Если Задание <> Неопределено Тогда + ЗаданиеИзменено = Ложь; + + Если Задание.Использование <> ВыполнятьПоРасписанию Тогда + Задание.Использование = ВыполнятьПоРасписанию; + ЗаданиеИзменено = Истина; + КонецЕсли; + + // Расписание устанавливается в форме элемента + Если ДополнительныеСвойства.Свойство("Расписание") + И ТипЗнч(ДополнительныеСвойства.Расписание) = Тип("РасписаниеРегламентногоЗадания") + И Строка(ДополнительныеСвойства.Расписание) <> Строка(Задание.Расписание) + Тогда + Задание.Расписание = ДополнительныеСвойства.Расписание; + ЗаданиеИзменено = Истина; + КонецЕсли; + + ИмяПользователя = РассылкаОтчетов.ПолучитьИмяПользователяИБ(Автор); + Если Задание.ИмяПользователя <> ИмяПользователя Тогда + Задание.ИмяПользователя = ИмяПользователя; + ЗаданиеИзменено = Истина; + КонецЕсли; + + НаименованиеЗадания = ПредставлениеЗаданияПоРассылке(Наименование); + Если Задание.Наименование <> НаименованиеЗадания Тогда + Задание.Наименование = НаименованиеЗадания; + ЗаданиеИзменено = Истина; + КонецЕсли; + + Если Задание.Параметры.Количество() <> 1 ИЛИ Задание.Параметры[0] <> Ссылка Тогда + ПараметрыЗадания = Новый Массив; + ПараметрыЗадания.Добавить(Ссылка); + Задание.Параметры = ПараметрыЗадания; + ЗаданиеИзменено = Истина; + КонецЕсли; + + Если ЗаданиеИзменено Тогда + Задание.Записать(); + КонецЕсли; + КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция ПредставлениеЗаданияПоРассылке(НаименованиеРассылки) + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Рассылка отчетов: %1'"), + СокрЛП(НаименованиеРассылки) + ); +КонецФункции \ No newline at end of file diff --git a/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo b/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo new file mode 100644 index 000000000..e084af6cc --- /dev/null +++ b/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo @@ -0,0 +1,1005 @@ + + + + + + + + + + РассылкиОтчетов + + ru + Рассылки отчетов + + true + Catalog.РассылкиОтчетов.StandardAttribute.Description + DontUse + + Use + PredefinedDataName + + Use + + + + + Use + Predefined + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + IsFolder + + Use + + + + + Use + Owner + true + + ShowError + Use + + + + + Use + Parent + + ru + Группа + + + Catalog.РассылкиОтчетов.EmptyRef + + Use + + + + + Use + Description + + ru + Наименование + + + ShowError + Use + + + + + Use + Code + + Use + + + + Use + + + ru + + + Managed + Use + + ru + Рассылка отчетов + + true + 2 + true + 100 + String + Variable + AsDescription + + + ЛичныеРассылки + Личные рассылки + + + + true + + + InDialog + BothWays + Catalog.РассылкиОтчетов.Form.ФормаЭлемента + Catalog.РассылкиОтчетов.Form.ФормаГруппы + Catalog.РассылкиОтчетов.Form.ФормаСписка + Catalog.РассылкиОтчетов.Form.ФормаСписка + Catalog.РассылкиОтчетов.Form.ФормаВыбораГруппы + + Автор + + ru + Автор + + + CatalogRef.Пользователи + + + ru + При выполнении по расписанию отчеты формируются с правами автора рассылки + + + + ShowError + + Index + Use + Use + + + Подготовлена + + ru + Подготовлена + + + Boolean + + + ru + Готовность рассылки к выполнению + + + + true + + true + + Index + Use + + + Личная + + ru + Личная + + + Boolean + + + + + Index + Use + + + Персонализирована + + ru + Персонализирована + + + Boolean + + + + + Use + Use + + + ВыполнятьПоРасписанию + + ru + Выполнять по расписанию + + + Boolean + + + ru + Рассылка будет выполняться автоматически по заданному расписанию + + + + + Index + Use + + + ПериодичностьРасписания + + ru + Периодичность расписания + + + EnumRef.ПериодичностиРасписанийРассылокОтчетов + + + ru + Периодичность, с которой требуется выполнять рассылку по расписанию + + + + ShowError + + Enum.ПериодичностиРасписанийРассылокОтчетов.EmptyRef + + Use + Use + + + РегламентноеЗадание + + ru + Регламентное задание + + + UUID + + + + + Use + + + ИспользоватьПапку + + ru + Использовать папку + + + Boolean + + + + + Use + Use + + + Папка + + ru + Папка + + + CatalogRef.ПапкиФайлов + + + ru + Папка информационной базы для доставки отчетов + + + + ShowError + + Use + + + ИспользоватьСетевойКаталог + + ru + Использовать сетевой каталог + + + Boolean + + + + + Use + Use + + + СетевойКаталогWindows + + ru + Сетевой каталог windows + + + String + + 200 + + + + + ShowError + + Use + + + СетевойКаталогLinux + + ru + Сетевой каталог linux + + + String + + 200 + + + + + ShowError + + Use + + + ИспользоватьFTPРесурс + + ru + Использовать FTP ресурс + + + Boolean + + + + + Use + Use + + + FTPСервер + + ru + Сервер + + + String + + 100 + + + + + ShowError + + Use + Use + + + FTPКаталог + + ru + Каталог + + + String + + 200 + + + + + ShowError + + Use + Use + + + FTPПорт + + ru + Порт + + + Number + + 5 + true + + + + 0 + + + 65535 + + ShowError + true + + 21 + + Use + + + FTPЛогин + + ru + Логин + + + String + + 50 + + + + + + Use + + + FTPПароль + + ru + Пароль + + + String + + 50 + + + true + + + + Use + + + FTPПассивноеСоединение + + ru + Пассивное соединение + + + Boolean + + + + + Use + Use + + + ИспользоватьЭлектроннуюПочту + + ru + Отправлять по электронной почте + + + Boolean + + + + true + + true + + Use + Use + + + ТолькоУведомить + + ru + Отправлять только уведомления (не присоединять сформированные отчеты) + + + Boolean + + + + + Use + Use + + + УчетнаяЗапись + + ru + От + + + CatalogRef.УчетныеЗаписиЭлектроннойПочты + + + + ShowError + Use + DontUse + + Use + + + ПисьмоВФорматеHTML + + ru + HTML + + + Boolean + + + + true + + true + + Use + + + ТекстПисьмаВФорматеHTML + + ru + Текст письма в формате HTML + + + String + + + + + + Use + + + КартинкиПисьмаВФорматеHTML + + ru + Картинки письма в формате HTML + + + ValueStorage + + + + + Use + + + ТекстПисьма + + ru + Текст письма + + + String + + + + + + Use + Use + + + ТемаПисьма + + ru + Тема + + + String + + + + + + Use + Use + + + ТипПолучателейРассылки + + ru + Кому + + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + + + Use + + + ВидПочтовогоАдресаПолучателей + + ru + Почтовый адрес + + + CatalogRef.ВидыКонтактнойИнформации + + + + ShowError + Use + DontUse + + Use + Use + + + СкрытыеКопии + + ru + Отправлять письма получателям через скрытые копии + + + Boolean + + + + + Use + + + АдресОтвета + + ru + Адрес ответа + + E-Mail, на который будут приходить ответы на рассылку + + String + + 100 + + + + + + Use + Use + + + Архивировать + + ru + Архивировать + + + Boolean + + + + true + + true + + Use + + + ИмяАрхива + + ru + Имя архива + + + String + + 75 + + + + ru + Имя архива + + + + + Use + Use + + + ПарольАрхива + + ru + Пароль архива + + + String + + 75 + + + true + + + + Use + + + + + + + Отчеты + + ru + Отчеты + + ShowError + + Use + LineNumber + + Use + + + + + Отчет + + ru + Отчет + + + CatalogRef.ДополнительныеОтчетыИОбработки + CatalogRef.ВариантыОтчетов + + + + ShowError + Use + Index + Use + + + ОтправлятьЕслиПустой + + ru + Отправлять, если пустой + + + Boolean + + + + Use + Index + Use + + + Настройки + + ru + Настройки + + + ValueStorage + + + + Use + Use + + + + + + + + ФорматыОтчетов + + ru + Форматы отчетов + + + Use + LineNumber + + Use + + + + + Отчет + + ru + Отчет + + + CatalogRef.ДополнительныеОтчетыИОбработки + CatalogRef.ВариантыОтчетов + + + + Use + Index + Use + + + Формат + + ru + Формат + + + EnumRef.ФорматыСохраненияОтчетов + + + + ShowError + Use + Index + Use + + + + + + + + Получатели + + ru + Получатели + + ShowError + + Use + LineNumber + + Use + + + + + Получатель + + ru + Получатель + + + CatalogRef.ГруппыПользователей + CatalogRef.Пользователи + + + + ShowError + FoldersAndItems + Use + Index + Use + + + Исключен + + ru + Исключен + + + Boolean + + + ru + Исключенные получатели не участвуют в рассылке. + + + + Use + Index + Use + + + + ПараметрыFTP + + ru + Параметры FTP + + + + ru + + + PersonalComputer + MobileDevice + + + ФормаВыбораГруппы + + ru + Форма выбора группы + + + + ru + + + PersonalComputer + MobileDevice + + + ФормаГруппы + + ru + Форма группы + + + + ru + + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЭлемента + + ru + Форма элемента + + + + ru + + + PersonalComputer + MobileDevice + + + ВыполнитьСейчас + + ru + Выполнить сейчас + + FormCommandBarImportant + + CatalogRef.РассылкиОтчетов + + Multiple + PictureAndText + + StdPicture.BusinessProcessStart + + + + СобытияРассылки + + ru + События рассылки + + FormCommandBarImportant + + CatalogRef.РассылкиОтчетов + + PictureAndText + + ru + Перейти в журнал регистрации с отбором по рассылке + + + StdPicture.EventLog + + + diff --git a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl index 4a481140e..c1151e856 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl @@ -22,7 +22,7 @@ КонецПроцедуры -Процедура ПриЗаписи(Отказ) +Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; diff --git a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..a8566cdce --- /dev/null +++ b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,79 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + + Код + Desc + + + Получатель.Наименование + Asc + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + + + + + Заблокировано + Equal + true + + + + + ЦветТекста + style:SpecialTextColor + + + + + + + + ЭтоБыстроеСообщение + Equal + true + + + Заблокировано + Equal + false + + + + + ЦветТекста + web:DarkGreen + + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + + + + Получатель + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + false + Отправитель + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + diff --git a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..702657b9a --- /dev/null +++ b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Form.form @@ -0,0 +1,937 @@ + + + + <key>ru</key> + <value>Обмен сообщениями</value> + + + ВариантГруппировки + 14 + true + true + + true + + + ВариантГруппировки + + + OnChange + ВариантГруппировкиПриИзменении + + + ВариантГруппировкиРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ВариантГруппировкиКонтекстноеМеню + 15 + true + + InputField + Enter + true + Left + true + + 30 + true + true + false + true + true + true + true + + + ru + не группировать + + + БезГруппировки + + + + + ru + группировать по отправителю + + + ПоОтправителю + + + + + ru + группировать по получателю + + + ПоПолучателю + + + Normal + + + + Список + 1 + true + true + + true + + + Список + + None + Copy + Create + Delete + SetDeletionMark + + Наименование + 4 + true + true + + true + + + Список.Description + + + НаименованиеРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Отправитель + 10 + true + true + + true + + + Список.Отправитель + + + ОтправительРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + + ОтправительКонтекстноеМеню + 11 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Получатель + 12 + true + true + + true + + + Список.Получатель + + + ПолучательРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + + ПолучательКонтекстноеМеню + 13 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 3 + Left + true + + + СписокСтрокаПоиска + 56 + + СписокСтрокаПоискаРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 57 + true + + Список + + true + + + + СписокСостояниеПросмотра + 59 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 60 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 62 + + СписокУправлениеПоискомРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 63 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + + СписокГруппа1 + 34 + + СписокИзменить + 32 + true + true + + true + + + СписокИзменитьРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + СписокУдалить + 31 + true + true + + true + + + СписокУдалитьРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + Form.Command.Удалить + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокГруппа1РасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + + + СписокКопироватьВБуферОбмена + 33 + true + true + + true + + + СписокКопироватьВБуферОбменаРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + HierarchicalList + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + true + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
    + + ФормаКоманднаяПанель + -1 + + ФормаГруппа2 + 28 + + ФормаИзменить + 20 + true + true + + true + + + ФормаИзменитьРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаУдалить + 19 + true + true + + true + + + ФормаУдалитьРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Form.Command.Удалить + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + ФормаГруппа2РасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + + + ФормаГруппа1 + 27 + + ФормаОтправитьИПолучитьСообщения + 17 + true + true + + true + + + ФормаОтправитьИПолучитьСообщенияРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.Command.ОтправитьИПолучитьСообщения + Normal + Auto + true + true + UserCmds + Auto + + + ФормаНастройка + 18 + true + true + + true + + + ФормаНастройкаРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Form.Command.Настройка + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ФормаГруппа1РасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + + + ФормаГруппа3 + 29 + + ФормаНайти + 21 + true + true + + true + + + ФормаНайтиРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ФормаОтменитьПоиск + 22 + true + true + + true + + + ФормаОтменитьПоискРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + ФормаГруппа3РасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + + + ФормаОбновить + 25 + true + true + + true + + + ФормаОбновитьРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Refresh + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаГруппа4 + 30 + + ФормаНастройкаСписка + 23 + true + true + + true + + + ФормаНастройкаСпискаРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.ListSettings + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаВывестиСписок + 24 + true + true + + true + + + ФормаВывестиСписокРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаКопироватьВБуферОбмена + 26 + true + true + + true + + + ФормаКопироватьВБуферОбменаРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + ФормаГруппа4РасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + + + Список.Ref + +
    true
    + + ВЫБРАТЬ + СообщенияСистемы.Получатель КАК Получатель, + СообщенияСистемы.Ссылка, + СообщенияСистемы.Заблокировано, + СообщенияСистемы.Наименование, + СообщенияСистемы.Отправитель, + СообщенияСистемы.ЭтоБыстроеСообщение, + СообщенияСистемы.Код +ИЗ + Справочник.СообщенияСистемы КАК СообщенияСистемы + Catalog.СообщенияСистемы + true + true + true + true + true + +
    + + ВариантГруппировки + + <key>ru</key> + <value>Группировка</value> + + 2 + + String + + 20 + + + + true + + + true + + + + ОтправитьИПолучитьСообщения + + <key>ru</key> + <value>Отправить и получить сообщения</value> + + 1 + + ru + Отправить и получить сообщения сейчас + + + true + + + CommonPicture.ВыполнитьЗапускОбменаДанными + + + + ОтправитьИПолучитьСообщения + + + TextPicture + Auto + Auto + + + Настройка + + <key>ru</key> + <value>Настройка...</value> + + 2 + + ru + Настройка подсистемы обмена сообщениями + + + true + + + CommonPicture.ПараметрыОбменаДанными + + + + Настройка + + + TextPicture + Auto + Auto + + + Удалить + + <key>ru</key> + <value>Удалить</value> + + 3 + + ru + Удалить + + + true + + F8 + + StdPicture.DeleteDirectly + + + + Удалить + + + Auto + Auto + + + + + + +
    diff --git a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..d4fefc343 --- /dev/null +++ b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,136 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ВариантГруппировки = "ПоПолучателю"; + + УстановитьГруппировкуСписка(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ВариантГруппировкиПриИзменении(Элемент) + + УстановитьГруппировкуСписка(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ОтправитьИПолучитьСообщения(Команда) + + ОбменСообщениямиКлиент.ОтправитьИПолучитьСообщения(); + + Элементы.Список.Обновить(); + +КонецПроцедуры + +&НаКлиенте +Процедура Настройка(Команда) + + ОткрытьФорму("ОбщаяФорма.НастройкаОбменаСообщениями",, ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура Удалить(Команда) + + Если Элементы.Список.ТекущиеДанные <> Неопределено Тогда + + Если Элементы.Список.ТекущиеДанные.Свойство("ГруппировкаСтроки") + И ТипЗнч(Элементы.Список.ТекущиеДанные.ГруппировкаСтроки) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда + + Предупреждение(НСтр("ru = 'Действие недоступно для строки группировки списка.'")); + + Иначе + + Если Элементы.Список.ВыделенныеСтроки.Количество() > 1 Тогда + + СтрокаВопроса = НСтр("ru = 'Удалить выделенные сообщения?'"); + + Иначе + + СтрокаВопроса = НСтр("ru = 'Удалить сообщение ""[Сообщение]""?'"); + СтрокаВопроса = СтрЗаменить(СтрокаВопроса, "[Сообщение]", Элементы.Список.ТекущиеДанные.Наименование); + + КонецЕсли; + + Ответ = Вопрос(СтрокаВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); + + Если Ответ = КодВозвратаДиалога.Да Тогда + + УдалитьСообщениеНепосредственно(Элементы.Список.ВыделенныеСтроки); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура УстановитьГруппировкуСписка() + + Если ВариантГруппировки = "БезГруппировки" Тогда + + Список.Группировка.Элементы[0].Использование = Ложь; + Список.Группировка.Элементы[1].Использование = Ложь; + + Элементы.Отправитель.Видимость = Истина; + Элементы.Получатель.Видимость = Истина; + + Иначе + + Использование = (ВариантГруппировки = "ПоПолучателю"); + + Список.Группировка.Элементы[0].Использование = Использование; + Список.Группировка.Элементы[1].Использование = Не Использование; + + Элементы.Отправитель.Видимость = Использование; + Элементы.Получатель.Видимость = Не Использование; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УдалитьСообщениеНепосредственно(Знач Сообщения) + + Для Каждого Сообщение Из Сообщения Цикл + + ОбъектСообщения = Сообщение.ПолучитьОбъект(); + + Если ОбъектСообщения <> Неопределено Тогда + + ОбъектСообщения.Заблокировать(); + + Если ЗначениеЗаполнено(ОбъектСообщения.Отправитель) + И ОбъектСообщения.Отправитель <> ОбменСообщениямиВнутренний.ЭтотУзел() Тогда + + ОбъектСообщения.ОбменДанными.Получатели.Добавить(ОбъектСообщения.Отправитель); + ОбъектСообщения.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + + КонецЕсли; + + ОбъектСообщения.ОбменДанными.Загрузка = Истина; // Наличие ссылок на справочник не должно препятствовать или замедлять удаление элементов справочника. + ОбъектСообщения.Удалить(); + + КонецЕсли; + + КонецЦикла; + + Элементы.Список.Обновить(); + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..d0cb49118 --- /dev/null +++ b/SSL/src/Catalogs/СообщенияСистемы/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,245 @@ + + + + Наименование + 1 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 2 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Отправитель + 3 + true + true + + true + + + Объект.Отправитель + + + ОтправительРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ОтправительКонтекстноеМеню + 4 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Получатель + 5 + true + true + + true + + + Объект.Получатель + + + ПолучательРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ПолучательКонтекстноеМеню + 6 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Заблокировано + 9 + true + true + + true + + + Объект.Заблокировано + + + ЗаблокированоРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + ЗаблокированоКонтекстноеМеню + 10 + true + + CheckBoxField + Enter + true + Left + true + + + + ПодробноеПредставлениеОшибки + 7 + true + true + + true + + + Объект.ПодробноеПредставлениеОшибки + + Top + + ПодробноеПредставлениеОшибкиРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ПодробноеПредставлениеОшибкиКонтекстноеМеню + 8 + true + + InputField + true + Enter + true + Left + true + + true + 4 + true + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + Left + true + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + CatalogObject.СообщенияСистемы + + + true + + + true + +
    true
    + true +
    + + + + + +
    diff --git a/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/ObjectModule.bsl b/SSL/src/Catalogs/СообщенияСистемы/ObjectModule.bsl similarity index 100% rename from SSL/src/Reports/СправкаОбИсполнительскойДисциплине/ObjectModule.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..fae23f465 --- /dev/null +++ b/SSL/src/Catalogs/СообщенияСистемы/СообщенияСистемы.mdo @@ -0,0 +1,244 @@ + + + + + + + + + + СообщенияСистемы + + ru + Сообщения системы + + Catalog.СообщенияСистемы.StandardAttribute.Description + DontUse + + Use + PredefinedDataName + + Use + + + + + Use + Predefined + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + IsFolder + + Use + + + + + Use + Owner + true + + ShowError + Use + + + + + Use + Parent + true + + Use + + + + + Use + Description + + ru + Канал сообщений + + + ShowError + Use + + + + + Use + Code + + ru + Входящий номер + + Входящий номер сообщения в очереди сообщений. Назначается системой в момент помещения сообщения в очередь сообщений. Сообщение может быть помещено в очередь при отправке или при приеме (загрузке). + + ShowError + Use + + + + Use + Managed + 2 + true + 30 + 150 + Variable + true + true + AsDescription + InDialog + BothWays + Catalog.СообщенияСистемы.Form.ФормаЭлемента + Catalog.СообщенияСистемы.Form.ФормаСписка + + ТелоСообщения + + ru + Тело сообщения + + + ValueStorage + + + + + Use + + + Отправитель + + ru + Отправитель + + + ExchangePlanRef.ОбменСообщениями + + + + + Use + + + Получатель + + ru + Получатель + + + ExchangePlanRef.ОбменСообщениями + + + + + Index + Use + + + Заблокировано + + ru + Заблокировано + + + Boolean + + + + + Index + Use + + + КоличествоПопытокОбработкиСообщения + + ru + Количество попыток обработки сообщения + + + Number + + 2 + true + + + + + + Use + Use + + + ПодробноеПредставлениеОшибки + + ru + Подробное представление ошибки + + + String + + + + + + Use + Use + + + ЭтоБыстроеСообщение + + ru + Это быстрое сообщение + + Признак того, что сообщение требуется доставить и обработать быстро, вне порядка общей очереди сообщений. + + Boolean + + + + + Index + Use + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl index 4c0ad4134..82bb1c69f 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl @@ -24,7 +24,35 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ КОМАНД ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + +&НаКлиенте +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ТекущиеДанные = Элементы.Список.ДанныеСтроки(ВыбраннаяСтрока); + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Поле = Элементы.ФлагИспользованияЗагрузки Тогда + + ВключитьОтключитьЗагрузкуНаСервере(ТекущиеДанные.ФлагИспользованияЗагрузки, ТекущиеДанные.Ссылка); + + ИначеЕсли Поле = Элементы.ФлагИспользованияВыгрузки Тогда + + ВключитьОтключитьВыгрузкуНаСервере(ТекущиеДанные.ФлагИспользованияВыгрузки, ТекущиеДанные.Ссылка); + + ИначеЕсли Поле = Элементы.Наименование Тогда + + ИзменитьСценарийОбменаДанными(Неопределено); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура Создать(Команда) @@ -135,35 +163,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ТекущиеДанные = Элементы.Список.ДанныеСтроки(ВыбраннаяСтрока); - - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Если Поле = Элементы.ФлагИспользованияЗагрузки Тогда - - ВключитьОтключитьЗагрузкуНаСервере(ТекущиеДанные.ФлагИспользованияЗагрузки, ТекущиеДанные.Ссылка); - - ИначеЕсли Поле = Элементы.ФлагИспользованияВыгрузки Тогда - - ВключитьОтключитьВыгрузкуНаСервере(ТекущиеДанные.ФлагИспользованияВыгрузки, ТекущиеДанные.Ссылка); - - ИначеЕсли Поле = Элементы.Наименование Тогда - - ИзменитьСценарийОбменаДанными(Неопределено); - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ВключитьОтключитьРегламентноеЗаданиеНаСервере(Ссылка) diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Form.form index 8a1fca338..46d1d30fa 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Form.form @@ -335,6 +335,9 @@ Включить / отключить выполнение обмена по расписанию + + Role.РаботаСПапкамиФайлов + Role.Администрирование diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl index 55e675849..e767b8a2b 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ВключитьОтключитьРегламентноеЗадание(Команда) @@ -14,6 +16,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервере Процедура ВключитьОтключитьРегламентноеЗаданиеНаСервере(ВыделенныеСтроки, ИспользоватьРегламентноеЗадание) diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form index 9886d7e46..31c777a4a 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form @@ -928,7 +928,7 @@ - НастроитьРасписаниеРегламентногоЗаданияВыполнить + НастроитьРасписаниеРегламентногоЗадания Auto @@ -953,7 +953,7 @@ - НастройкиТранспортаВыполнить + НастройкиТранспорта TextPicture diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl index 5bb42a083..c5d2c0f25 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl @@ -4,7 +4,7 @@ &НаКлиенте Перем КоличествоСтрок; -////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере @@ -67,53 +67,8 @@ КонецПроцедуры -////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура ВыполнитьОбмен(Команда) - - ЭтоНовый = (Объект.Ссылка.Пустая()); - - Если Модифицированность ИЛИ ЭтоНовый Тогда - - Записать(); - - КонецЕсли; - - НомерОбрабатываемойСтроки = 1; - КоличествоСтрок = Объект.НастройкиОбмена.Количество(); - - ПодключитьОбработчикОжидания("ВыполнитьОбменДаннымиНаКлиенте", 0.1, Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура НастроитьРасписаниеРегламентногоЗаданияВыполнить() - - РедактированиеРасписанияРегламентногоЗадания(); - - ОбновитьПредставлениеРасписания(); - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкиТранспортаВыполнить() - - ТекущиеДанные = Элементы.СоставРасписания.ТекущиеДанные; - - Если ТекущиеДанные = Неопределено Тогда - Возврат; - ИначеЕсли Не ЗначениеЗаполнено(ТекущиеДанные.УзелИнформационнойБазы) Тогда - Возврат; - КонецЕсли; - - Отбор = Новый Структура("Узел", ТекущиеДанные.УзелИнформационнойБазы); - ЗначенияЗаполнения = Новый Структура("Узел", ТекущиеДанные.УзелИнформационнойБазы); - - ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, ЗначенияЗаполнения, "НастройкиТранспортаОбмена", ЭтаФорма); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ИспользоватьРегламентноеЗаданиеПриИзменении(Элемент) @@ -122,36 +77,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПерейтиВЖурналРегистрации(Команда) - - ТекущиеДанные = Элементы.СоставРасписания.ТекущиеДанные; - - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - ОбменДаннымиКлиент.ПерейтиВЖурналРегистрацииСобытийДанныхМодально(ТекущиеДанные.УзелИнформационнойБазы, - ЭтаФорма, - ТекущиеДанные.ВыполняемоеДействие); - -КонецПроцедуры - -// - -&НаКлиенте -Процедура НастройкиОбменаВидТранспортаОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ТекущиеДанные = Элементы.СоставРасписания.ТекущиеДанные; - - Если ТекущиеДанные <> Неопределено Тогда - - ЗаполнитьСписокВыбораВидаТранспортаОбмена(Элемент.СписокВыбора, ТекущиеДанные.УзелИнформационнойБазы); - - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура СоставРасписанияПриАктивизацииСтроки(Элемент) @@ -170,8 +95,87 @@ КонецПроцедуры -////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ НастройкиОбмена + +&НаКлиенте +Процедура НастройкиОбменаВидТранспортаОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ТекущиеДанные = Элементы.СоставРасписания.ТекущиеДанные; + + Если ТекущиеДанные <> Неопределено Тогда + + ЗаполнитьСписокВыбораВидаТранспортаОбмена(Элемент.СписокВыбора, ТекущиеДанные.УзелИнформационнойБазы); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ВыполнитьОбмен(Команда) + + ЭтоНовый = (Объект.Ссылка.Пустая()); + + Если Модифицированность ИЛИ ЭтоНовый Тогда + + Записать(); + + КонецЕсли; + + НомерОбрабатываемойСтроки = 1; + КоличествоСтрок = Объект.НастройкиОбмена.Количество(); + + ПодключитьОбработчикОжидания("ВыполнитьОбменДаннымиНаКлиенте", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьРасписаниеРегламентногоЗадания(Команда) + + РедактированиеРасписанияРегламентногоЗадания(); + + ОбновитьПредставлениеРасписания(); + +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиТранспорта(Команда) + + ТекущиеДанные = Элементы.СоставРасписания.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + ИначеЕсли Не ЗначениеЗаполнено(ТекущиеДанные.УзелИнформационнойБазы) Тогда + Возврат; + КонецЕсли; + + Отбор = Новый Структура("Узел", ТекущиеДанные.УзелИнформационнойБазы); + ЗначенияЗаполнения = Новый Структура("Узел", ТекущиеДанные.УзелИнформационнойБазы); + + ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, ЗначенияЗаполнения, "НастройкиТранспортаОбмена", ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиВЖурналРегистрации(Команда) + + ТекущиеДанные = Элементы.СоставРасписания.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ОбменДаннымиКлиент.ПерейтиВЖурналРегистрацииСобытийДанныхМодально(ТекущиеДанные.УзелИнформационнойБазы, + ЭтаФорма, + ТекущиеДанные.ВыполняемоеДействие); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура РедактированиеРасписанияРегламентногоЗадания() @@ -320,3 +324,4 @@ КонецЕсли; КонецПроцедуры + diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl index 3462932f6..402f62658 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl @@ -1,3 +1,42 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура СоздатьСценарий(УзелИнформационнойБазы, Расписание = Неопределено) Экспорт + + Отказ = Ложь; + + Наименование = НСтр("ru = 'Автоматический обмен данными с %1'"); + Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Наименование, + ОбщегоНазначения.ПолучитьЗначениеРеквизита(УзелИнформационнойБазы, "Наименование") + ); + + ВидТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + + СценарийОбменаДанными = Справочники.СценарииОбменовДанными.СоздатьЭлемент(); + + // Заполняем реквизиты шапки + СценарийОбменаДанными.Наименование = Наименование; + СценарийОбменаДанными.ИспользоватьРегламентноеЗадание = Истина; + + // Создаем регламентное задание + ОбновитьДанныеРегламентногоЗадания(Отказ, Расписание, СценарийОбменаДанными); + + // Табличная часть + СтрокаТаблицы = СценарийОбменаДанными.НастройкиОбмена.Добавить(); + СтрокаТаблицы.ВидТранспортаОбмена = ВидТранспортаОбмена; + СтрокаТаблицы.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; + СтрокаТаблицы.КоличествоЭлементовВТранзакции = 200; + СтрокаТаблицы.УзелИнформационнойБазы = УзелИнформационнойБазы; + + СтрокаТаблицы = СценарийОбменаДанными.НастройкиОбмена.Добавить(); + СтрокаТаблицы.ВидТранспортаОбмена = ВидТранспортаОбмена; + СтрокаТаблицы.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; + СтрокаТаблицы.КоличествоЭлементовВТранзакции = 200; + СтрокаТаблицы.УзелИнформационнойБазы = УзелИнформационнойБазы; + + СценарийОбменаДанными.Записать(); + +КонецПроцедуры Функция РасписаниеРегламентногоЗаданияПоУмолчанию() Экспорт @@ -184,8 +223,6 @@ КонецПроцедуры -// - Процедура УдалитьВыгрузкуВСценарииОбменаДанными(СценарийОбменаДанными, УзелИнформационнойБазы) Экспорт УдалитьСтрокуВСценарииОбменаДанными(СценарийОбменаДанными, УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); @@ -314,8 +351,6 @@ КонецПроцедуры -// - Процедура УдалитьСтрокуВСценарииОбменаДанными(СценарийОбменаДанными, УзелИнформационнойБазы, ДействиеПриОбмене) НадоЗаписатьОбъект = Ложь; diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl index b3d225b67..dcb8b513c 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl @@ -1,6 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ОБЪЕКТА +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ПередЗаписью(Отказ) @@ -34,7 +33,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Выполняет удаление регламентного задания // diff --git a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl index 3bdea9203..d15418c53 100644 --- a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl index f492c551a..499c17a66 100644 --- a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -5,6 +8,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ПерейтиКФормеФайла(Команда) diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl index ceedcc82b..b194f45ed 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl @@ -30,7 +30,8 @@ Элементы.ПолныйПутьLinux.ОтображениеПредупрежденияПриРедактировании = ОтображениеПредупрежденияПриРедактировании.Отображать; Элементы.ПолныйПутьWindows.ОтображениеПредупрежденияПриРедактировании = ОтображениеПредупрежденияПриРедактировании.Отображать; - ТекущийРазмерВБайтах = ФайловыеФункции.ПодсчитатьРазмерФайловНаТоме(Объект.Ссылка); + ТекущийРазмерВБайтах = 0; + ФайловыеФункцииПереопределяемый.ПодсчитатьРазмерФайловНаТоме(Объект.Ссылка, ТекущийРазмерВБайтах); ТекущийРазмер = ТекущийРазмерВБайтах / (1024 * 1024); Если ТекущийРазмер = 0 И ТекущийРазмерВБайтах <> 0 Тогда ТекущийРазмер = 1; diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl index 0eca73d61..3d9dcddeb 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl @@ -2,25 +2,33 @@ Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если Не НомерПорядкаУникален(ПорядокЗаполнения, Ссылка) Тогда - Отказ = Истина; - ТекстОшибки = НСтр("ru = 'Порядок заполнения не уникален - в системе уже есть том с таким порядком'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПорядокЗаполнения", "Объект"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПорядокЗаполнения", "Объект", Отказ); + КонецЕсли; + + Если МаксимальныйРазмер <> 0 Тогда + ТекущийРазмерВБайтах = 0; + Если Не Ссылка.Пустая() Тогда + ФайловыеФункцииПереопределяемый.ПодсчитатьРазмерФайловНаТоме(Ссылка, ТекущийРазмерВБайтах); + КонецЕсли; + ТекущийРазмер = ТекущийРазмерВБайтах / (1024 * 1024); + + Если МаксимальныйРазмер < ТекущийРазмер Тогда + ТекстОшибки = НСтр("ru = 'Максимальный размер тома меньше, чем текущий размер'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "МаксимальныйРазмер", "Объект", Отказ); + КонецЕсли; КонецЕсли; Если ПустаяСтрока(ПолныйПутьWindows) И ПустаяСтрока(ПолныйПутьLinux) Тогда ТекстОшибки = НСтр("ru = 'Не заполнен полный путь'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьWindows", "Объект"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьLinux", "Объект"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьWindows", "Объект", Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьLinux", "Объект", Отказ); Возврат; КонецЕсли; Если Не ПустаяСтрока(ПолныйПутьWindows) И (Лев(ПолныйПутьWindows, 2) <> "\\" ИЛИ Найти(ПолныйПутьWindows, ":") <> 0) Тогда - Отказ = Истина; - ТекстОшибки = НСтр("ru = 'Путь к тому должен быть в формате UNC (\\servername\resource) '"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьWindows", "Объект"); - + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолныйПутьWindows", "Объект", Отказ); Возврат; КонецЕсли; @@ -43,7 +51,6 @@ СоздатьКаталог(ИмяКаталогаТестовое); УдалитьФайлы(ИмяКаталогаТестовое); Исключение - Отказ = Истина; ТекстОшибки = НСтр("ru = 'Путь к тому некорректен. Возможно учетная запись, от лица которой работает сервер 1С:Предприятия, не имеет прав доступа к каталогу тома: '"); Информация = ИнформацияОбОшибке(); @@ -57,25 +64,10 @@ ТекстОшибки = ТекстОшибки + Информация.Описание; КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , ИмяПоляСПолнымПутем, "Объект"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , ИмяПоляСПолнымПутем, "Объект", Отказ); КонецПопытки; - Если МаксимальныйРазмер <> 0 Тогда - ТекущийРазмерВБайтах = 0; - Если Не Ссылка.Пустая() Тогда - ТекущийРазмерВБайтах = ФайловыеФункции.ПодсчитатьРазмерФайловНаТоме(Ссылка); - КонецЕсли; - ТекущийРазмер = ТекущийРазмерВБайтах / (1024 * 1024); - - Если МаксимальныйРазмер < ТекущийРазмер Тогда - Отказ = Истина; - - ТекстОшибки = НСтр("ru = 'Максимальный размер тома меньше, чем текущий размер'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "МаксимальныйРазмер", "Объект"); - КонецЕсли; - КонецЕсли; - КонецПроцедуры // Возвращает Ложь, если есть том с таким порядком diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Form.form index 4087e9a92..c5b698986 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Form.form @@ -269,28 +269,16 @@ true true - - ru - APOP - Enum.СпособыPOP3Аутентификации.EnumValue.APOP - - ru - Cram MD5 - Enum.СпособыPOP3Аутентификации.EnumValue.CramMD5 - - ru - Обычная - Enum.СпособыPOP3Аутентификации.EnumValue.Обычная @@ -953,41 +941,26 @@ true true true + false true true true - - ru - CramMD5 - Enum.СпособыSMTPАутентификации.EnumValue.CramMD5 - - ru - Login - Enum.СпособыSMTPАутентификации.EnumValue.Login - - ru - Plain - Enum.СпособыSMTPАутентификации.EnumValue.Plain - - ru - По умолчанию - Enum.СпособыSMTPАутентификации.EnumValue.ПоУмолчанию diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Module.bsl index 94e8ebbe3..d1966bcb8 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Module.bsl @@ -1,10 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// МОДУЛЬ ФОРМЫ ЭЛЕМЕНТА СПРАВОЧНИКА УЧЕТНЫЕ ЗАПИСИ ЭЛЕКТРОННОЙ ПОЧТЫ // -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ ОБРАБОТЧИКОВ СОБЫТИЙ ФОРМЫ И ЭЛЕМЕНТОВ ФОРМЫ -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -53,6 +48,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + // Обработчик события "при изменении" элемента формы "SMTPАутентификация". // Вызывает процедуру обновления группы дополнительных параметров // аутентификации. @@ -87,19 +85,6 @@ КонецПроцедуры - -// Обработчик события нажатия на кнопку "УстановитьПортыПоУмолчанию". -// Устанавливает порты POP3 и SMTP серверов по умолчанию: -// для SMTP - 25, для POP3 - 110. -// -&НаКлиенте -Процедура УстановитьПортыПоУмолчаниюВыполнить() - - ПортSMTP = 25; - ПортPOP3 = 110; - -КонецПроцедуры - &НаКлиенте Процедура ОставлятьКопииСообщенийНаСервереПриИзменении(Элемент) @@ -118,6 +103,43 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура УстановитьПортыПоУмолчаниюВыполнить() + + ПортSMTP = 25; + ПортPOP3 = 110; + +КонецПроцедуры + +// Выполняет проверку корректности значений реквизитов формы и возвращает +// управление в вызывающую среду с дополнительными заполненными параметрами +// учетной записи. +// +&НаКлиенте +Процедура ЗаполнитьДопПараметрыИВернутьсяВыполнить() + + Если SMTPАутентификацияУстановлена + И SMTPАутентификация <> SMTPАутентификация_АналогичноPOP3() + И SMTPАутентификация <> SMTPАутентификация_ЗадаетсяПараметрами() + И SMTPАутентификация <> SMTPАутентификация_POP3ПередSMTP() Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Необходимо выбрать способ SMTP аутентификации'"), , + "SMTPАутентификация"); + Возврат; + КонецЕсли; + + Оповестить("УстановкаДополнительныхПараметровУчетнойЗаписи", ЗаполнитьДополнительныеПараметры(), Ссылка); + + Закрыть(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Единая процедура для установки доступности элементов формы в зависимости от условий // &НаКлиенте @@ -143,34 +165,6 @@ КонецПроцедуры -// Обработчик события нажатия на кнопку "ЗаполнитьДопПараметрыИВернуться". -// Выполняет проверку корректности значений реквизитов формы и возвращает -// управление в вызывающую среду с дополнительными заполненными параметрами -// учетной записи. -// -&НаКлиенте -Процедура ЗаполнитьДопПараметрыИВернутьсяВыполнить() - - Если SMTPАутентификацияУстановлена - И SMTPАутентификация <> SMTPАутентификация_АналогичноPOP3() - И SMTPАутентификация <> SMTPАутентификация_ЗадаетсяПараметрами() - И SMTPАутентификация <> SMTPАутентификация_POP3ПередSMTP() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Необходимо выбрать способ SMTP аутентификации'"), , - "SMTPАутентификация"); - Возврат; - КонецЕсли; - - Оповестить("УстановкаДополнительныхПараметровУчетнойЗаписи", ЗаполнитьДополнительныеПараметры(), Ссылка); - - Закрыть(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ СЕРВИСНЫХ ФУНКЦИЙ -// - // Функция, формирующая параметры настроек перед передачей их в вызывающую среду. // // Возвращаемое значение: @@ -250,14 +244,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// БЛОК СЛУЖЕБНЫХ ФУНКЦИЙ ДЛЯ ОПТИМИЗАЦИИ ОБРАЩЕНИЯ К ПЕРЕЧИСЛЕНИЯМ -// - SMTPАутентификация -// - СпособPOP3Аутентификации -// - СпособSMTPАутентификации -// ИЗ КЛИЕНТСКИХ ПРОЦЕДУР -// - &НаСервере Функция Заполнить_СписокSMTPАутентификация_СП() diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index e79d1ea2f..d7305487e 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ ОБРАБОТЧИКОВ СОБЫТИЙ ФОРМЫ И ЭЛЕМЕНТОВ ФОРМЫ -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -36,29 +35,6 @@ КонецПроцедуры -// Обработчик события нажатия на кнопку "Дополнительно" формы -// -&НаКлиенте -Процедура ДополнительныеНастройкиВыполнить() - - УчетнаяЗаписьСтруктура = Новый Структура; - УчетнаяЗаписьСтруктура.Вставить("ВремяОжидания", Объект.ВремяОжидания); - УчетнаяЗаписьСтруктура.Вставить("ОставлятьКопииСообщенийНаСервере", Объект.ОставлятьКопииСообщенийНаСервере); - УчетнаяЗаписьСтруктура.Вставить("ПериодХраненияСообщенийНаСервере", Объект.ПериодХраненияСообщенийНаСервере); - УчетнаяЗаписьСтруктура.Вставить("ПользовательSMTP", Объект.ПользовательSMTP); - УчетнаяЗаписьСтруктура.Вставить("ПарольSMTP", Объект.ПарольSMTP); - УчетнаяЗаписьСтруктура.Вставить("ПортPOP3", Объект.ПортPOP3); - УчетнаяЗаписьСтруктура.Вставить("ПортSMTP", Объект.ПортSMTP); - УчетнаяЗаписьСтруктура.Вставить("SMTPАутентификация", Объект.SMTPАутентификация); - УчетнаяЗаписьСтруктура.Вставить("СпособSMTPАутентификации", Объект.СпособSMTPАутентификации); - УчетнаяЗаписьСтруктура.Вставить("СпособPOP3Аутентификации", Объект.СпособPOP3Аутентификации); - - ПараметрыВызова = Новый Структура("Ссылка, УчетнаяЗаписьСтруктура, ТолькоПросмотр", Объект.Ссылка, УчетнаяЗаписьСтруктура, ТолькоПросмотр); - - ОткрытьФорму("Справочник.УчетныеЗаписиЭлектроннойПочты.Форма.ДополнительныеСвойстваУчетнойЗаписи", ПараметрыВызова); - -КонецПроцедуры - // Обрабатывает оповещение, от формы настройки дополнительных свойств учетной записи, // содержащее некоторые настройки учетной записи. // @@ -80,3 +56,28 @@ КонецЕсли; КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ДополнительныеНастройкиВыполнить() + + УчетнаяЗаписьСтруктура = Новый Структура; + УчетнаяЗаписьСтруктура.Вставить("ВремяОжидания", Объект.ВремяОжидания); + УчетнаяЗаписьСтруктура.Вставить("ОставлятьКопииСообщенийНаСервере", Объект.ОставлятьКопииСообщенийНаСервере); + УчетнаяЗаписьСтруктура.Вставить("ПериодХраненияСообщенийНаСервере", Объект.ПериодХраненияСообщенийНаСервере); + УчетнаяЗаписьСтруктура.Вставить("ПользовательSMTP", Объект.ПользовательSMTP); + УчетнаяЗаписьСтруктура.Вставить("ПарольSMTP", Объект.ПарольSMTP); + УчетнаяЗаписьСтруктура.Вставить("ПортPOP3", Объект.ПортPOP3); + УчетнаяЗаписьСтруктура.Вставить("ПортSMTP", Объект.ПортSMTP); + УчетнаяЗаписьСтруктура.Вставить("SMTPАутентификация", Объект.SMTPАутентификация); + УчетнаяЗаписьСтруктура.Вставить("СпособSMTPАутентификации", Объект.СпособSMTPАутентификации); + УчетнаяЗаписьСтруктура.Вставить("СпособPOP3Аутентификации", Объект.СпособPOP3Аутентификации); + + ПараметрыВызова = Новый Структура("Ссылка, УчетнаяЗаписьСтруктура, ТолькоПросмотр", Объект.Ссылка, УчетнаяЗаписьСтруктура, ТолькоПросмотр); + + ОткрытьФорму("Справочник.УчетныеЗаписиЭлектроннойПочты.Форма.ДополнительныеСвойстваУчетнойЗаписи", ПараметрыВызова); + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl index 4cdb9cbed..48ea9b42e 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl @@ -1,15 +1,11 @@ - -Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) - - ЗаполнитьОбъектЗначениямиПоУмолчанию(); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Инициализирует новую учетную запись значениями по умолчанию // Процедура ЗаполнитьОбъектЗначениямиПоУмолчанию() Экспорт - ИмяПользователя = "1С:Предприятие"; + ИмяПользователя = НСтр("ru = '1С:Предприятие'"); SMTPАутентификация = Перечисления.ВариантыSMTPАутентификации.НеЗадано; ИспользоватьДляПолучения = Ложь; ОставлятьКопииСообщенийНаСервере = Ложь; @@ -25,3 +21,11 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) + + ЗаполнитьОбъектЗначениямиПоУмолчанию(); + +КонецПроцедуры diff --git a/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Form.form b/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Form.form new file mode 100644 index 000000000..5c546adf1 --- /dev/null +++ b/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Form.form @@ -0,0 +1,473 @@ + + + + <key>ru</key> + <value>Внимание</value> + + + ГруппаТекст + 2 + + Декорация1 + 3 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 4 + true + + 5 + true + 2 + true + + + CommonPicture.Информация32 + + + + + ТекстВопроса + 6 + true + true + + true + + + ТекстВопроса + + None + + ТекстВопросаРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ТекстВопросаКонтекстноеМеню + 7 + true + + LabelField + Enter + true + Left + true + + true + 2 + true + + + true + true + + true + + + <key>ru</key> + <value>Группа текст</value> + + + ru + Группа текст + + + ГруппаТекстРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + + ГруппаКнопок + 1 + + СохранитьИЗакончитьРедактирование + 8 + true + true + + true + + false + + СохранитьИЗакончитьРедактированиеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + UsualButton + Form.Command.СохранитьИЗакончитьРедактирование + Normal + Auto + 40 + true + 1 + true + UserCmds + + Web.Green + + + System.DefaultGUIFont + 10.0 + true + false + false + false + + Auto + + + СохранитьИзменения + 9 + true + true + + true + + false + + СохранитьИзмененияРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + UsualButton + Form.Command.СохранитьИзменения + Normal + Auto + 40 + true + 1 + true + UserCmds + + Web.Green + + + System.DefaultGUIFont + 10.0 + true + false + false + false + + Auto + + + НеСохранять + 5 + true + true + + true + + false + + НеСохранятьРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + UsualButton + Form.Command.НеСохранять + Normal + Auto + 40 + true + 1 + true + UserCmds + + Web.FireBrick + + + System.DefaultGUIFont + 10.0 + true + false + false + false + + Auto + + + ДекорацияПустая + 11 + true + true + + true + + + ДекорацияПустаяРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ДекорацияПустаяКонтекстноеМеню + 12 + true + + Label + true + true + + Left + + + + Вернуться + 10 + true + true + + true + + false + + ВернутьсяРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + UsualButton + Form.Command.Вернуться + Normal + Auto + 40 + true + 1 + true + UserCmds + + System.DefaultGUIFont + 10.0 + true + false + false + false + + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа кнопок</value> + + + ru + Группа кнопок + + + ГруппаКнопокРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + ТекстВопроса + + <key>ru</key> + <value>Текст вопроса</value> + + 1 + + String + + + + true + + + true + + + + СохранитьИЗакончитьРедактирование + + <key>ru</key> + <value>Сохранить и закончить редактирование</value> + + 1 + + ru + Сохранить и закончить редактирование + + + true + + + + СохранитьИЗакончитьРедактирование + + + Auto + Auto + + + СохранитьИзменения + + <key>ru</key> + <value>Сохранить, оставить занятым</value> + + 2 + + ru + Сохранить изменения + + + true + + + + СохранитьИзменения + + + Auto + Auto + + + НеСохранять + + <key>ru</key> + <value>Не сохранять</value> + + 3 + + ru + Не сохранять + + + true + + + + НеСохранять + + + Auto + Auto + + + Вернуться + + <key>ru</key> + <value>Отменить</value> + + 4 + + ru + Вернуться в редактор + + + true + + + + Вернуться + + + Auto + Auto + + + + + + diff --git a/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Module.bsl new file mode 100644 index 000000000..8340adf35 --- /dev/null +++ b/SSL/src/Catalogs/Файлы/Forms/ВопросПриВыходеИзТекстовогоРедактора/Module.bsl @@ -0,0 +1,32 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ТекстВопроса = Параметры.ТекстВопроса; + +КонецПроцедуры + +&НаКлиенте +Процедура Вернуться(Команда) + Закрыть("Вернуться"); +КонецПроцедуры + +&НаКлиенте +Процедура НеСохранять(Команда) + Закрыть("НеСохранять"); +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьИЗакончитьРедактирование(Команда) + Закрыть("СохранитьИЗакончитьРедактирование"); +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьИзменения(Команда) + Закрыть("СохранитьИзменения"); +КонецПроцедуры diff --git a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl index b8b95f7ff..bc7878986 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/ВыборКодировки/Form.form b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Form.form new file mode 100644 index 000000000..38dfebd49 --- /dev/null +++ b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Form.form @@ -0,0 +1,349 @@ + + + + СписокКодировок + 1 + true + true + + true + + + СписокКодировок + + None + + СписокКодировокЗначение + 4 + true + true + + true + + + СписокКодировок.Value + + + СписокКодировокЗначениеРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + СписокКодировокЗначениеКонтекстноеМеню + 5 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СписокКодировокКоманднаяПанель + 3 + Left + + + Selection + СписокКодировокВыбор + + + СписокКодировокСтрокаПоиска + 12 + + СписокКодировокСтрокаПоискаРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + СписокКодировокСтрокаПоискаКонтекстноеМеню + 13 + true + + СписокКодировок + + true + + + + СписокКодировокСостояниеПросмотра + 15 + + СписокКодировокСостояниеПросмотраРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + СписокКодировокСостояниеПросмотраКонтекстноеМеню + 16 + true + + ViewStatusAddition + СписокКодировок + + true + + + + СписокКодировокУправлениеПоиском + 18 + + СписокКодировокУправлениеПоискомРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + СписокКодировокУправлениеПоискомКонтекстноеМеню + 19 + true + + SearchControlAddition + СписокКодировок + + true + + + + СписокКодировокРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + СписокКодировокКонтекстноеМеню + 2 + true + + true + true + true + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + + СписокКодировок.Picture + + None + None + None + true + + + ПоказыватьТолькоОсновныеКодировки + 8 + true + true + + true + + + ПоказыватьТолькоОсновныеКодировки + + Right + + OnChange + ПоказыватьТолькоОсновныеКодировкиПриИзменении + + + ПоказыватьТолькоОсновныеКодировкиРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ПоказыватьТолькоОсновныеКодировкиКонтекстноеМеню + 9 + true + + CheckBoxField + Enter + true + Left + true + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаОК + 6 + true + true + + true + + + ФормаОКРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + Right + true + + + OnCreateAtServer + ПриСозданииНаСервере + + 25 + DontBlock + true + true + true + Vertical + true + true + UseIfNecessary + auto + true + + СписокКодировок + + <key>ru</key> + <value>Список кодировок</value> + + 1 + + ValueList + + + true + + + true + + + + + + + ТекущаяКодировка + + <key>ru</key> + <value>Текущая кодировка</value> + + 2 + + String + + + + true + + + true + + + + ПоказыватьТолькоОсновныеКодировки + + <key>ru</key> + <value>Показывать только основные кодировки</value> + + 3 + + Boolean + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + Auto + Auto + + + + + + diff --git a/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html new file mode 100644 index 000000000..00a0d7dd4 --- /dev/null +++ b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html @@ -0,0 +1,52 @@ + +

    +

    +

    +

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

    +

    В этом разделе:

    +

    Как изменить кодировку текстового файла

    +

    Общие сведения

    +

    +

    Как изменить кодировку текстового файла

    +

    Чтобы изменить кодировку текстового файла:

    +
    1. Выполните команду Изменить кодировку меню Все действия +
    2. Выберите кодировку из списка +
    3. Если нужная кодировка отсутствует, снимите флаг с поля Показывать только основные кодировки +
    4. Будет сформирован список всех известных кодировок +
    5. Выберите нужную кодировку из списка +
    6. Нажмите ОК, чтобы сохранить настройку

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

    +
    • IBM866 (Кириллица Dos) +
    • KOI8-R (Кириллица KOI8-R) +
    • Windows-1251 (Кириллица Windows
    +
    +

    +

    В начало

    +

    +

    Общие сведения

    +

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

    +

    См. также: Файлы, Хранилище файлов

    + +
    +

    +

    В начало

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Module.bsl new file mode 100644 index 000000000..d49865b3f --- /dev/null +++ b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Module.bsl @@ -0,0 +1,306 @@ +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ПоказыватьТолькоОсновныеКодировки = Истина; + ТекущаяКодировка = Параметры.ТекущаяКодировка; + ЗаполнитьСписокКодировок(Не ПоказыватьТолькоОсновныеКодировки); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокКодировокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ЗакрытьФормуСВозвратомКодировки(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьФормуСВозвратомКодировки() + + Представление = Элементы.СписокКодировок.ТекущиеДанные.Представление; + Если Не ЗначениеЗаполнено(Представление) Тогда + Представление = Элементы.СписокКодировок.ТекущиеДанные.Значение; + КонецЕсли; + + СтруктураВозврата = Новый Структура("Значение, Представление", + Элементы.СписокКодировок.ТекущиеДанные.Значение, Представление); + Закрыть(СтруктураВозврата); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСписокКодировок(ПолныйСписок) + + ИдЭлемента = Неопределено; + СписокКодировокЛокальный = Неопределено; + СписокКодировок.Очистить(); + + Если Не ПолныйСписок Тогда + СписокКодировокЛокальный = РаботаСФайламиКлиентСервер.ПолучитьСписокКодировок(); + Иначе + СписокКодировокЛокальный = ПолучитьПолныйСписокКодировок(); + КонецЕсли; + + Для Каждого Кодировка Из СписокКодировокЛокальный Цикл + + ЭлементСписка = СписокКодировок.Добавить(Кодировка.Значение, Кодировка.Представление); + + Если НРег(Кодировка.Значение) = НРег(ТекущаяКодировка) Тогда + ИдЭлемента = ЭлементСписка.ПолучитьИдентификатор(); + КонецЕсли; + + КонецЦикла; + + Если ИдЭлемента <> Неопределено Тогда + Элементы.СписокКодировок.ТекущаяСтрока = ИдЭлемента; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОК(Команда) + + ЗакрытьФормуСВозвратомКодировки(); + +КонецПроцедуры + +&НаСервереБезКонтекста +//Функция возвращает таблицу имен кодировок +// +//Параметры +// НЕТ +// +//Возвращаемое значение: +// Таблица значений +// +Функция ПолучитьПолныйСписокКодировок() + + СписокКодировок = Новый СписокЗначений; + + СписокКодировок.Добавить("Adobe-Standard-Encoding"); + СписокКодировок.Добавить("Big5"); + СписокКодировок.Добавить("Big5-HKSCS"); + СписокКодировок.Добавить("BOCU-1"); + СписокКодировок.Добавить("CESU-8"); + СписокКодировок.Добавить("cp1006"); + СписокКодировок.Добавить("cp1025"); + СписокКодировок.Добавить("cp1097"); + СписокКодировок.Добавить("cp1098"); + СписокКодировок.Добавить("cp1112"); + СписокКодировок.Добавить("cp1122"); + СписокКодировок.Добавить("cp1123"); + СписокКодировок.Добавить("cp1124"); + СписокКодировок.Добавить("cp1125"); + СписокКодировок.Добавить("cp1131"); + СписокКодировок.Добавить("cp1386"); + СписокКодировок.Добавить("cp33722"); + СписокКодировок.Добавить("cp437"); + СписокКодировок.Добавить("cp737"); + СписокКодировок.Добавить("cp775"); + СписокКодировок.Добавить("cp850"); + СписокКодировок.Добавить("cp851"); + СписокКодировок.Добавить("cp852"); + СписокКодировок.Добавить("cp855"); + СписокКодировок.Добавить("cp856"); + СписокКодировок.Добавить("cp857"); + СписокКодировок.Добавить("cp858"); + СписокКодировок.Добавить("cp860"); + СписокКодировок.Добавить("cp861"); + СписокКодировок.Добавить("cp862"); + СписокКодировок.Добавить("cp863"); + СписокКодировок.Добавить("cp864"); + СписокКодировок.Добавить("cp865"); + СписокКодировок.Добавить("cp866", "CP866 (Кириллица DOS)"); + СписокКодировок.Добавить("cp868"); + СписокКодировок.Добавить("cp869"); + СписокКодировок.Добавить("cp874"); + СписокКодировок.Добавить("cp875"); + СписокКодировок.Добавить("cp922"); + СписокКодировок.Добавить("cp930"); + СписокКодировок.Добавить("cp932"); + СписокКодировок.Добавить("cp933"); + СписокКодировок.Добавить("cp935"); + СписокКодировок.Добавить("cp937"); + СписокКодировок.Добавить("cp939"); + СписокКодировок.Добавить("cp949"); + СписокКодировок.Добавить("cp949c"); + СписокКодировок.Добавить("cp950"); + СписокКодировок.Добавить("cp964"); + СписокКодировок.Добавить("ebcdic-ar"); + СписокКодировок.Добавить("ebcdic-de"); + СписокКодировок.Добавить("ebcdic-dk"); + СписокКодировок.Добавить("ebcdic-he"); + СписокКодировок.Добавить("ebcdic-xml-us"); + СписокКодировок.Добавить("EUC-JP"); + СписокКодировок.Добавить("EUC-KR"); + СписокКодировок.Добавить("GB_2312-80"); + СписокКодировок.Добавить("gb18030"); + СписокКодировок.Добавить("GB2312"); + СписокКодировок.Добавить("GBK"); + СписокКодировок.Добавить("hp-roman8"); + СписокКодировок.Добавить("HZ-GB-2312"); + СписокКодировок.Добавить("IBM01140"); + СписокКодировок.Добавить("IBM01141"); + СписокКодировок.Добавить("IBM01142"); + СписокКодировок.Добавить("IBM01143"); + СписокКодировок.Добавить("IBM01144"); + СписокКодировок.Добавить("IBM01145"); + СписокКодировок.Добавить("IBM01146"); + СписокКодировок.Добавить("IBM01147"); + СписокКодировок.Добавить("IBM01148"); + СписокКодировок.Добавить("IBM01149"); + СписокКодировок.Добавить("IBM037"); + СписокКодировок.Добавить("IBM1026"); + СписокКодировок.Добавить("IBM1047"); + СписокКодировок.Добавить("ibm-1047_P100-1995,swaplfnl"); + СписокКодировок.Добавить("ibm-1129"); + СписокКодировок.Добавить("ibm-1130"); + СписокКодировок.Добавить("ibm-1132"); + СписокКодировок.Добавить("ibm-1133"); + СписокКодировок.Добавить("ibm-1137"); + СписокКодировок.Добавить("ibm-1140_P100-1997,swaplfnl"); + СписокКодировок.Добавить("ibm-1142_P100-1997,swaplfnl"); + СписокКодировок.Добавить("ibm-1143_P100-1997,swaplfnl"); + СписокКодировок.Добавить("ibm-1144_P100-1997,swaplfnl"); + СписокКодировок.Добавить("ibm-1145_P100-1997,swaplfnl"); + СписокКодировок.Добавить("ibm-1146_P100-1997,swaplfnl"); + СписокКодировок.Добавить("ibm-1147_P100-1997,swaplfnl "); + СписокКодировок.Добавить("ibm-1148_P100-1997,swaplfnl"); + СписокКодировок.Добавить("ibm-1149_P100-1997,swaplfnl"); + СписокКодировок.Добавить("ibm-1153"); + СписокКодировок.Добавить("ibm-1153_P100-1999,swaplfnl"); + СписокКодировок.Добавить("ibm-1154"); + СписокКодировок.Добавить("ibm-1155"); + СписокКодировок.Добавить("ibm-1156"); + СписокКодировок.Добавить("ibm-1157"); + СписокКодировок.Добавить("ibm-1158"); + СписокКодировок.Добавить("ibm-1160"); + СписокКодировок.Добавить("ibm-1162"); + СписокКодировок.Добавить("ibm-1164"); + СписокКодировок.Добавить("ibm-12712_P100-1998,swaplfnl"); + СписокКодировок.Добавить("ibm-1363"); + СписокКодировок.Добавить("ibm-1364"); + СписокКодировок.Добавить("ibm-1371"); + СписокКодировок.Добавить("ibm-1388"); + СписокКодировок.Добавить("ibm-1390"); + СписокКодировок.Добавить("ibm-1399"); + СписокКодировок.Добавить("ibm-16684"); + СписокКодировок.Добавить("ibm-16804_X110-1999,swaplfnl"); + СписокКодировок.Добавить("IBM278"); + СписокКодировок.Добавить("IBM280"); + СписокКодировок.Добавить("IBM284"); + СписокКодировок.Добавить("IBM285"); + СписокКодировок.Добавить("IBM290"); + СписокКодировок.Добавить("IBM297"); + СписокКодировок.Добавить("IBM367"); + СписокКодировок.Добавить("ibm-37_P100-1995,swaplfnl"); + СписокКодировок.Добавить("IBM420"); + СписокКодировок.Добавить("IBM424"); + СписокКодировок.Добавить("ibm-4899"); + СписокКодировок.Добавить("ibm-4909"); + СписокКодировок.Добавить("ibm-4971"); + СписокКодировок.Добавить("IBM500"); + СписокКодировок.Добавить("ibm-5123"); + СписокКодировок.Добавить("ibm-803"); + СписокКодировок.Добавить("ibm-8482"); + СписокКодировок.Добавить("ibm-867"); + СписокКодировок.Добавить("IBM870"); + СписокКодировок.Добавить("IBM871"); + СписокКодировок.Добавить("ibm-901"); + СписокКодировок.Добавить("ibm-902"); + СписокКодировок.Добавить("IBM918"); + СписокКодировок.Добавить("ibm-971"); + СписокКодировок.Добавить("IBM-Thai"); + СписокКодировок.Добавить("IMAP-mailbox-name"); + СписокКодировок.Добавить("ISO_2022,locale=ja,version=3"); + СписокКодировок.Добавить("ISO_2022,locale=ja,version=4"); + СписокКодировок.Добавить("ISO_2022,locale=ko,version=1"); + СписокКодировок.Добавить("ISO-2022-CN"); + СписокКодировок.Добавить("ISO-2022-CN-EXT"); + СписокКодировок.Добавить("ISO-2022-JP"); + СписокКодировок.Добавить("ISO-2022-JP-2"); + СписокКодировок.Добавить("ISO-2022-KR"); + СписокКодировок.Добавить("iso-8859-1", "ISO-8859-1 (Западноевропейская ISO)"); + СписокКодировок.Добавить("iso-8859-13"); + СписокКодировок.Добавить("iso-8859-15"); + СписокКодировок.Добавить("iso-8859-2", "ISO-8859-2 (Центральноевропейская ISO)"); + СписокКодировок.Добавить("iso-8859-3", "ISO-8859-3 (Латиница 3 ISO)"); + СписокКодировок.Добавить("iso-8859-4", "ISO-8859-4 (Балтийская ISO)"); + СписокКодировок.Добавить("iso-8859-5", "ISO-8859-5 (Кириллица ISO)"); + СписокКодировок.Добавить("iso-8859-6"); + СписокКодировок.Добавить("iso-8859-7", "ISO-8859-7 (Греческая ISO)"); + СписокКодировок.Добавить("iso-8859-8"); + СписокКодировок.Добавить("iso-8859-9", "ISO-8859-9 (Турецкая ISO)"); + СписокКодировок.Добавить("JIS_Encoding"); + СписокКодировок.Добавить("koi8-r", "KOI8-R (Кириллица KOI8-R)"); + СписокКодировок.Добавить("koi8-u", "KOI8-U (Кириллица KOI8-U)"); + СписокКодировок.Добавить("KSC_5601"); + СписокКодировок.Добавить("LMBCS-1"); + СписокКодировок.Добавить("LMBCS-11"); + СписокКодировок.Добавить("LMBCS-16"); + СписокКодировок.Добавить("LMBCS-17"); + СписокКодировок.Добавить("LMBCS-18"); + СписокКодировок.Добавить("LMBCS-19"); + СписокКодировок.Добавить("LMBCS-2"); + СписокКодировок.Добавить("LMBCS-3"); + СписокКодировок.Добавить("LMBCS-4"); + СписокКодировок.Добавить("LMBCS-5"); + СписокКодировок.Добавить("LMBCS-6"); + СписокКодировок.Добавить("LMBCS-8"); + СписокКодировок.Добавить("macintosh"); + СписокКодировок.Добавить("SCSU"); + СписокКодировок.Добавить("Shift_JIS"); + СписокКодировок.Добавить("us-ascii", "US-ASCII США"); + СписокКодировок.Добавить("UTF-16"); + СписокКодировок.Добавить("UTF16_OppositeEndian"); + СписокКодировок.Добавить("UTF16_PlatformEndian"); + СписокКодировок.Добавить("UTF-16BE"); + СписокКодировок.Добавить("UTF-16LE"); + СписокКодировок.Добавить("UTF-32"); + СписокКодировок.Добавить("UTF32_OppositeEndian"); + СписокКодировок.Добавить("UTF32_PlatformEndian"); + СписокКодировок.Добавить("UTF-32BE"); + СписокКодировок.Добавить("UTF-32LE"); + СписокКодировок.Добавить("UTF-7"); + СписокКодировок.Добавить("UTF-8", "UTF-8 (Юникод UTF-8)"); + СписокКодировок.Добавить("windows-1250", "Windows-1250 (Центральноевропейская Windows)"); + СписокКодировок.Добавить("windows-1251", "Windows-1251 (Кириллица Windows)"); + СписокКодировок.Добавить("windows-1252", "Windows-1252 (Западноевропейская Windows)"); + СписокКодировок.Добавить("windows-1253", "Windows-1253 (Греческая Windows)"); + СписокКодировок.Добавить("windows-1254", "Windows-1254 (Турецкая Windows)"); + СписокКодировок.Добавить("windows-1255"); + СписокКодировок.Добавить("windows-1256"); + СписокКодировок.Добавить("windows-1257", "Windows-1257 (Балтийская Windows)"); + СписокКодировок.Добавить("windows-1258"); + СписокКодировок.Добавить("windows-57002"); + СписокКодировок.Добавить("windows-57003"); + СписокКодировок.Добавить("windows-57004"); + СписокКодировок.Добавить("windows-57005"); + СписокКодировок.Добавить("windows-57007"); + СписокКодировок.Добавить("windows-57008"); + СписокКодировок.Добавить("windows-57009"); + СписокКодировок.Добавить("windows-57010"); + СписокКодировок.Добавить("windows-57011"); + СписокКодировок.Добавить("windows-874"); + СписокКодировок.Добавить("windows-949"); + СписокКодировок.Добавить("windows-950"); + СписокКодировок.Добавить("x-mac-centraleurroman"); + СписокКодировок.Добавить("x-mac-cyrillic"); + СписокКодировок.Добавить("x-mac-greek"); + СписокКодировок.Добавить("x-mac-turkish"); + + Возврат СписокКодировок; + +КонецФункции + +&НаКлиенте +Процедура ПоказыватьТолькоОсновныеКодировкиПриИзменении(Элемент) + + ЗаполнитьСписокКодировок(Не ПоказыватьТолькоОсновныеКодировки); + +КонецПроцедуры diff --git a/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Form.form b/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Form.form new file mode 100644 index 000000000..af63532c0 --- /dev/null +++ b/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Form.form @@ -0,0 +1,779 @@ + + + + ГруппаТекстИКоманды + 4 + + Текст + 1 + true + true + + true + + + Текст + + None + + ТекстРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + ТекстКонтекстноеМеню + 2 + true + + TextDocumentField + Enter + true + Left + true + + 50 + true + 10 + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа текст и команды</value> + + + ru + Группа текст и команды + + + ГруппаТекстИКомандыРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + Top + true + + ФормаКоманднаяПанель + -1 + + ЗаписатьИЗакрыть + 58 + true + true + + true + + + ЗаписатьИЗакрытьРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + Form.Command.ЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + Записать + 24 + true + true + + true + + + ЗаписатьРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + Form.Command.Записать + Normal + PictureAndText + 35 + true + true + UserCmds + + StdPicture.Write + + Auto + + + Редактировать + 32 + true + true + + true + + + РедактироватьРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + Form.Command.Редактировать + Normal + Auto + 35 + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ЗакончитьРедактирование + 6 + true + true + + true + + + ЗакончитьРедактированиеРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + Form.Command.ЗакончитьРедактирование + Normal + Auto + 35 + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаОбщаяКомандаЗадачиПоПредмету + 62 + true + true + + true + + + Файл + + + ФормаОбщаяКомандаЗадачиПоПредметуРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + CommonCommand.ЗадачиПоПредмету + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ОткрытьКарточку + 33 + true + true + + true + + + ОткрытьКарточкуРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + Form.Command.ОткрытьКарточку + Normal + Auto + 35 + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПоказатьОтличия + 8 + true + true + + true + + + ПоказатьОтличияРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + Form.Command.ПоказатьОтличия + Normal + Auto + 35 + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СохранитьКак + 7 + true + true + + true + + + СохранитьКакРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + Form.Command.СохранитьКак + Normal + Auto + 35 + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВнешнийРедактор + 9 + true + true + + true + + + ВнешнийРедакторРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Form.Command.ВнешнийРедактор + Normal + Auto + 35 + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаВыбратьКодировку + 61 + true + true + + true + + + ФормаВыбратьКодировкуРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + Form.Command.ВыбратьКодировку + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаСправка + 49 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + Left + + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + 80 + 25 + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Текст + + <key>ru</key> + <value>Текст</value> + + 1 + + TextDocument + + + true + + + true + + true + + + Файл + + <key>ru</key> + <value>Файл</value> + + 2 + + CatalogRef.Файлы + + + true + + + true + + + + ИмяОткрываемогоФайла + + <key>ru</key> + <value>Имя открываемого файла</value> + + 4 + + String + + + + true + + + true + + + + ДанныеФайла + + <key>ru</key> + <value>Данные файла</value> + + 5 + + + true + + + true + + + + РежимРедактирования + + <key>ru</key> + <value>Режим редактирования</value> + + 6 + + Boolean + + + true + + + true + + + + КодФайла + + <key>ru</key> + <value>Код файла</value> + + 7 + + String + + + + true + + + true + + + + КодировкаТекстаФайла + + <key>ru</key> + <value>Кодировка текста файла</value> + + 8 + + String + + + + true + + + true + + + + КодировкаПредставление + + <key>ru</key> + <value>Кодировка представление</value> + + 3 + + String + + + + true + + + true + + + + ЗакончитьРедактирование + + <key>ru</key> + <value>Закончить редактирование</value> + + 1 + + ru + Сохранить и освободить файл в информационной базе + + + true + + + CommonPicture.ЗакончитьРедактированиеФайла + + + + ЗакончитьРедактирование + + + TextPicture + Auto + Auto + + + СохранитьКак + + <key>ru</key> + <value>Сохранить как...</value> + + 2 + + ru + Сохранить файл на диск или другое устройство + + + true + + + CommonPicture.СохранитьФайлКак + + + + СохранитьКак + + + TextPicture + Auto + Auto + + + ПоказатьОтличия + + <key>ru</key> + <value>Показать отличия</value> + + 3 + + ru + Показать отличия + + + true + + + + ПоказатьОтличия + + + Auto + Auto + + + ВнешнийРедактор + + <key>ru</key> + <value>Открыть стандартным приложением</value> + + 4 + + ru + Внешний редактор + + + true + + + + ВнешнийРедактор + + + Auto + Auto + + + Записать + + <key>ru</key> + <value>Записать</value> + + 7 + + ru + Записать + + + true + + Ctrl+S + + + Записать + + + Auto + Auto + + + Редактировать + + <key>ru</key> + <value>Редактировать</value> + + 9 + + ru + Редактировать + + + true + + + CommonPicture.РедактироватьФайл + + + + Редактировать + + + TextPicture + Auto + Auto + + + ОткрытьКарточку + + <key>ru</key> + <value>Открыть карточку</value> + + 10 + + ru + Открыть карточку + + + true + + + StdPicture.Change + + + + ОткрытьКарточку + + + TextPicture + Auto + Auto + + + ЗаписатьИЗакрыть + + <key>ru</key> + <value>Записать и закрыть</value> + + 16 + + ru + Записать, закончить редактирование и закрыть + + + true + + + + ЗаписатьИЗакрыть + + + Auto + Auto + + + ВыбратьКодировку + + <key>ru</key> + <value>Изменить кодировку...</value> + + 6 + + ru + Выбрать кодировку + + + true + + + + ВыбратьКодировку + + + Auto + Auto + + + + + + diff --git a/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Help/ru.html new file mode 100644 index 000000000..0f6ac5ab6 --- /dev/null +++ b/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Help/ru.html @@ -0,0 +1,77 @@ + +

    +

    +

    +

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

    +

    Содержание:

    +

    Как открыть файл во встроенном редакторе текстовых файлов

    +

    Как открыть файл в стандартной программе

    +

    Как изменить кодировку текста

    +

    Общие сведения

    +

    +

    Как открыть файл во встроенном редакторе текстовых файлов

    +

    По умолчанию во встроенном редакторе открываются текстовые файлы с расширением txt, ini, xml. Вы можете дополнить список расширений файлов в персональных настройках программы. Для этого:

    +
    1. Перейдите в раздел Настройка и администрирование. +
    2. Выполните команду Персональные настройки командной панели. +
    3. В персональных настройках программы перейдите на закладку Работа с файлами. +
    4. Введите расширения файлов в колонке Расширение. +
    5. Нажмите ОК, чтобы сохранить настройку.
    +
    +

    +

    В начало

    +

    +

    Как открыть файл в стандартной программе

    +

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

    +
    1. Перейдите в раздел Настройка и администрирование. +
    2. Выполните команду Персональные настройки панели действий. +
    3. В персональных настройках программы перейдите на закладку Работа с файлами. +
    4. В колонке Способ открытия выберите пункт Во внешнем приложении. +
    5. Нажмите ОК, чтобы сохранить настройку.
    +
    +

    +

    В начало

    +

    +

    Изменение кодировки текстового файла

    +

    Текстовые файлы могут быть сохранены в разных кодировках. Основными кодировками для работы с текстовыми файлами на русском языке являются:

    +
    • IBM866 (Кириллица DOS), +
    • KOI8-R (Кириллица KOI8-R), +
    • Windows-1251 (Кириллица Windows.

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

    +

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

    +
    1. Откройте файл во встроенном редакторе текстовых файлов. +
    2. Выполните команду Изменить кодировку в меню Все действия. +
    3. Выберите кодировку из списка. +
    4. Если нужная кодировка отсутствует, снимите флажок Показывать только основные кодировки. +
    5. Выберите нужную кодировку из списка. +
    6. Нажмите ОК, чтобы сохранить настройку
    +
    +

    +

    В начало

    +

    +

    Общие сведения

    +

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

    +

    См. также: Файлы, Хранилище файлов, Персональные настройки

    + +
    +

    +

    В начало

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Module.bsl new file mode 100644 index 000000000..f5c6a7f15 --- /dev/null +++ b/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Module.bsl @@ -0,0 +1,332 @@ +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Файл = Параметры.Файл; + ДанныеФайла = Параметры.ДанныеФайла; + ИмяОткрываемогоФайла = Параметры.ИмяОткрываемогоФайла; + + КодФайла = Файл.Код; + + Если ДанныеФайла.РедактируетТекущийПользователь Тогда + РежимРедактирования = Истина; + КонецЕсли; + + Если ДанныеФайла.Версия <> ДанныеФайла.ТекущаяВерсия Тогда + РежимРедактирования = Ложь; + КонецЕсли; + + Элементы.Текст.ТолькоПросмотр = Не РежимРедактирования; + Элементы.ПоказатьОтличия.Доступность = РежимРедактирования; + Элементы.Редактировать.Доступность = Не РежимРедактирования; + Элементы.ЗакончитьРедактирование.Доступность = РежимРедактирования; + Элементы.ЗаписатьИЗакрыть.Доступность = РежимРедактирования; + Элементы.Записать.Доступность = РежимРедактирования; + + Если ДанныеФайла.Версия <> ДанныеФайла.ТекущаяВерсия Тогда + Элементы.Редактировать.Доступность = Ложь; + КонецЕсли; + + ЗаголовокСтрока = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, + ДанныеФайла.Расширение); + Если Не РежимРедактирования Тогда + ЗаголовокСтрока = ЗаголовокСтрока + НСтр("ru=' (только просмотр)'"); + КонецЕсли; + Заголовок = ЗаголовокСтрока; + + Если ЗначениеЗаполнено(ДанныеФайла.Версия) Тогда + КодировкаТекстаФайла = РаботаСФайламиВызовСервера.ПолучитьКодировкуВерсииФайла(ДанныеФайла.Версия); + + Если ЗначениеЗаполнено(КодировкаТекстаФайла) Тогда + СписокКодировок = РаботаСФайламиКлиентСервер.ПолучитьСписокКодировок(); + ЭлементСписка = СписокКодировок.НайтиПоЗначению(КодировкаТекстаФайла); + Если ЭлементСписка = Неопределено Тогда + КодировкаПредставление = КодировкаТекстаФайла; + Иначе + КодировкаПредставление = ЭлементСписка.Представление; + КонецЕсли; + Иначе + КодировкаПредставление = НСтр("ru='По умолчанию'"); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + КлючУникальности = КодФайла; + + КодировкаТекстаДляЧтения = КодировкаТекстаФайла; + Если Не ЗначениеЗаполнено(КодировкаТекстаДляЧтения) Тогда + КодировкаТекстаДляЧтения = Неопределено; + КонецЕсли; + + Текст.Прочитать(ИмяОткрываемогоФайла, КодировкаТекстаДляЧтения); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьКак(Команда) + + // выбираем путь к файлу на диске + ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + ВыборФайла.МножественныйВыбор = Ложь; + ИмяСРасширением = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, + ДанныеФайла.Расширение); + ВыборФайла.ПолноеИмяФайла = ИмяСРасширением; + Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Все файлы (*.%1)|*.%1'"), ДанныеФайла.Расширение, ДанныеФайла.Расширение); + ВыборФайла.Фильтр = Фильтр; + + Если ВыборФайла.Выбрать() Тогда + + ВыбранноеПолноеИмяФайла = ВыборФайла.ПолноеИмяФайла; + + КодировкаТекстаДляЗаписи = КодировкаТекстаФайла; + Если Не ЗначениеЗаполнено(КодировкаТекстаДляЗаписи) Тогда + КодировкаТекстаДляЗаписи = Неопределено; + КонецЕсли; + + Текст.Записать(ВыбранноеПолноеИмяФайла, КодировкаТекстаДляЗаписи); + + Состояние(НСтр("ru = 'Файл успешно сохранен'"), , ВыбранноеПолноеИмяФайла); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьКарточку(Команда) + + ОткрытьЗначение(Файл); + +КонецПроцедуры + +&НаКлиенте +Процедура ВнешнийРедактор(Команда) + + ЗаписатьТекст(); + РаботаСФайламиКлиент.ВыполнитьЗапускПриложения(ИмяОткрываемогоФайла); + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура Редактировать(Команда) + + КомандыРаботыСФайламиКлиент.Редактировать(Файл, УникальныйИдентификатор); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "Запись_Файл" И Параметр.Событие = "ФайлРедактировался" И Источник = Файл Тогда + РежимРедактирования = Истина; + УстановитьДоступностьКоманд(); + КонецЕсли; + + Если ИмяСобытия = "Запись_Файл" И Параметр.Событие = "ДанныеФайлаИзменены" И Источник = Файл Тогда + + ДанныеФайла = РаботаСФайламиВызовСервера.ПолучитьДанныеФайла(Файл); + + РежимРедактирования = Ложь; + + Если ДанныеФайла.РедактируетТекущийПользователь Тогда + РежимРедактирования = Истина; + КонецЕсли; + + Если ДанныеФайла.Версия <> ДанныеФайла.ТекущаяВерсия Тогда + РежимРедактирования = Ложь; + КонецЕсли; + + УстановитьДоступностьКоманд(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Записать(Команда) + + ЗаписатьТекст(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьТекст() + + Если Модифицированность Тогда + + КодировкаТекстаДляЗаписи = КодировкаТекстаФайла; + Если Не ЗначениеЗаполнено(КодировкаТекстаДляЗаписи) Тогда + КодировкаТекстаДляЗаписи = Неопределено; + КонецЕсли; + + Текст.Записать(ИмяОткрываемогоФайла, КодировкаТекстаДляЗаписи); + Модифицированность = Ложь; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакончитьРедактирование(Команда) + + ЗаписатьТекст(); + КомандыРаботыСФайламиКлиент.ЗакончитьРедактирование(Файл, УникальныйИдентификатор, + Неопределено, Неопределено, Неопределено, Неопределено, + КодировкаТекстаФайла); + РежимРедактирования = Ложь; + УстановитьДоступностьКоманд(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Если Модифицированность Тогда + + ИмяИРасширение = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, + ДанныеФайла.Расширение); + + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru ='Файл ""%1"" был изменен.'"), ИмяИРасширение); + + ПараметрыФормы = Новый Структура("ТекстВопроса", ТекстВопроса); + КодВозврата = ОткрытьФормуМодально("Справочник.Файлы.Форма.ВопросПриВыходеИзТекстовогоРедактора", ПараметрыФормы); + + Если КодВозврата = "СохранитьИЗакончитьРедактирование" Тогда + ЗаписатьТекст(); + КомандыРаботыСФайламиКлиент.ЗакончитьРедактирование(Файл, УникальныйИдентификатор, + Неопределено, Неопределено, Неопределено, Неопределено, + КодировкаТекстаФайла); + Закрыть(); + ИначеЕсли КодВозврата = "СохранитьИзменения" Тогда + ЗаписатьТекст(); + Закрыть(); + ИначеЕсли КодВозврата = "НеСохранять" Тогда + Модифицированность = Ложь; + Закрыть(); + ИначеЕсли КодВозврата = "Вернуться" Тогда + Отказ = Истина; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьОтличия(Команда) + +#Если Не ВебКлиент Тогда + + СпособСравненияВерсийФайлов = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().СпособСравненияВерсийФайлов; + + Если СпособСравненияВерсийФайлов = Неопределено Тогда // первый вызов - еще не инициализирована настройка + Результат = ОткрытьФормуМодально("Справочник.ВерсииФайлов.Форма.ФормаВыбораСпособаСравненияВерсий"); + + Если Результат <> КодВозвратаДиалога.ОК Тогда + Возврат; + КонецЕсли; + + СпособСравненияВерсийФайлов = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().СпособСравненияВерсийФайлов; + КонецЕсли; + + Если СпособСравненияВерсийФайлов = Неопределено Тогда + Возврат; + КонецЕсли; + + ЗаписатьТекст(); + + ДанныеФайлаДляСохранения = РаботаСФайламиВызовСервера.ПолучитьДанныеФайлаДляСохранения(Файл, Неопределено, УникальныйИдентификатор); + АдресФайла = ДанныеФайлаДляСохранения.НавигационнаяСсылкаТекущейВерсии; + Если ДанныеФайла.ТекущаяВерсия <> ДанныеФайла.Версия Тогда + АдресФайла = РаботаСФайламиВызовСервера.ПолучитьНавигационнуюСсылкуДляОткрытия(ДанныеФайла.Версия, УникальныйИдентификатор); + КонецЕсли; + + ПутьКФайлу = ПолучитьИмяВременногоФайла(ДанныеФайла.Расширение); + + ПередаваемыеФайлы = Новый Массив; + Описание = Новый ОписаниеПередаваемогоФайла(ПутьКФайлу, АдресФайла); + ПередаваемыеФайлы.Добавить(Описание); + + // Сохраним Файл из БД на диск + Если Не ПолучитьФайлы(ПередаваемыеФайлы,, ПутьКФайлу, Ложь) Тогда + Возврат; + КонецЕсли; + + РаботаСФайламиКлиент.СравнитьФайлы(ПутьКФайлу, ИмяОткрываемогоФайла, СпособСравненияВерсийФайлов); + +#КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДоступностьКоманд() + + Элементы.Текст.ТолькоПросмотр = Не РежимРедактирования; + Элементы.ПоказатьОтличия.Доступность = РежимРедактирования; + Элементы.Редактировать.Доступность = Не РежимРедактирования; + Элементы.ЗакончитьРедактирование.Доступность = РежимРедактирования; + Элементы.ЗаписатьИЗакрыть.Доступность = РежимРедактирования; + Элементы.Записать.Доступность = РежимРедактирования; + + ЗаголовокСтрока = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, + ДанныеФайла.Расширение); + Если Не РежимРедактирования Тогда + ЗаголовокСтрока = ЗаголовокСтрока + НСтр("ru=' (только просмотр)'"); + КонецЕсли; + Заголовок = ЗаголовокСтрока; + +КонецПроцедуры + +&НаКлиенте +Процедура ПрочитатьТекст() + + Текст.Прочитать(ИмяОткрываемогоФайла, КодировкаТекстаФайла); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + + Если Модифицированность Тогда + ЗаписатьТекст(); + КомандыРаботыСФайламиКлиент.ЗакончитьРедактирование(Файл, УникальныйИдентификатор, + Неопределено, Неопределено, Неопределено, Неопределено, + КодировкаТекстаФайла); + РежимРедактирования = Ложь; + УстановитьДоступностьКоманд(); + КонецЕсли; + + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьКодировку(Команда) + + ПараметрыФормы = Новый Структура("ТекущаяКодировка", КодировкаТекстаФайла); + КодВозврата = ОткрытьФормуМодально("Справочник.Файлы.Форма.ВыборКодировки", ПараметрыФормы); + + Если ТипЗнч(КодВозврата) = Тип("Структура") Тогда + + КодировкаТекстаФайла = КодВозврата.Значение; + КодировкаПредставление = КодВозврата.Представление; + + ПрочитатьТекст(); + + РаботаСФайламиВызовСервера.ЗаписатьКодировкуВерсииФайлаИИзвлеченныйТекст(ДанныеФайла.Версия, + КодировкаТекстаФайла, Текст.ПолучитьТекст()); + + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Module.bsl index 543e7bf68..4ac4b0acb 100644 --- a/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Module.bsl @@ -13,7 +13,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Пользователь = ОбщегоНазначения.ТекущийПользователь(); + Пользователь = Пользователи.ТекущийПользователь(); СписокФайлов.Параметры.УстановитьЗначениеПараметра("Редактирует", Пользователь); ПоказыватьКолонкуРазмер = РаботаСФайламиВызовСервера.ПолучитьПоказыватьКолонкуРазмер(); diff --git a/SSL/src/Catalogs/Файлы/Forms/РезультатСканирования/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/РезультатСканирования/Module.bsl index 8278821d2..caed38c62 100644 --- a/SSL/src/Catalogs/Файлы/Forms/РезультатСканирования/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/РезультатСканирования/Module.bsl @@ -162,12 +162,8 @@ НеОткрыватьКарточкуПослеСозданияИзФайла = Параметры.НеОткрыватьКарточкуПослеСозданияИзФайла; КонецЕсли; - Если ПрефиксацияОбъектовПовтИсп.ЕстьФункциональнаяОпцияПрефиксИнформационнойБазы() Тогда - ПрефиксИнформационнойБазы = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); - КонецЕсли; - НомерФайла = РаботаСФайламиВызовСервера.ПолучитьНовыйНомерДляСканирования(ВладелецФайла); - ИмяФайла = РаботаСФайламиКлиентСервер.ПолучитьИмяСканированногоФайла(НомерФайла, ПрефиксИнформационнойБазы); + ИмяФайла = РаботаСФайламиКлиентСервер.ПолучитьИмяСканированногоФайла(НомерФайла, ""); ФорматСканированногоИзображения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "НастройкиСканирования/ФорматСканированногоИзображения", @@ -423,8 +419,14 @@ КонецЕсли; ИначеЕсли Источник = "TWAIN" И Событие = "EndBatch" Тогда - ИдентификаторСтроки = ТаблицаФайлов[ТаблицаФайлов.Количество() - 1].ПолучитьИдентификатор(); - Элементы.ТаблицаФайлов.ТекущаяСтрока = ИдентификаторСтроки; + + Если ТаблицаФайлов.Количество() <> 0 Тогда + ИдентификаторСтроки = ТаблицаФайлов[ТаблицаФайлов.Количество() - 1].ПолучитьИдентификатор(); + Элементы.ТаблицаФайлов.ТекущаяСтрока = ИдентификаторСтроки; + КонецЕсли; + + ИначеЕсли Источник = "TWAIN" И Событие = "UserPressedCancel" Тогда + Закрыть(); КонецЕсли; #КонецЕсли @@ -532,7 +534,7 @@ КонецЕсли; НомерФайла = НомерФайла + 1; - ИмяФайла = РаботаСФайламиКлиентСервер.ПолучитьИмяСканированногоФайла(НомерФайла, ПрефиксИнформационнойБазы); + ИмяФайла = РаботаСФайламиКлиентСервер.ПолучитьИмяСканированногоФайла(НомерФайла, ""); КонецЦикла; diff --git a/SSL/src/Catalogs/Файлы/Forms/СписокФайловВЛокальномКэшеФайлов/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/СписокФайловВЛокальномКэшеФайлов/Module.bsl index 57d8df70e..d8c811da3 100644 --- a/SSL/src/Catalogs/Файлы/Forms/СписокФайловВЛокальномКэшеФайлов/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/СписокФайловВЛокальномКэшеФайлов/Module.bsl @@ -13,7 +13,7 @@ НоваяСтрока = СписокФайлов.Добавить(); ДатаФайлаВКеше = Строка.Значение.ДатаМодификацииУниверсальная; - ОбщегоНазначенияКлиент.ПреобразоватьЗимнееВремяКТекущему(ДатаФайлаВКеше); + ДатаФайлаВКеше = МестноеВремя(ДатаФайлаВКеше); НоваяСтрока.ДатаИзмененияФайла = ДатаФайлаВКеше; НоваяСтрока.ИмяФайла = Строка.Значение.ПолноеНаименование; diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаПапки/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаПапки/Form.form index ec8dba621..5fa2b24d9 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаПапки/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаПапки/Form.form @@ -21,7 +21,7 @@ ВыбранныйКаталогРасширеннаяПодсказка - 27 + 31 Label true true @@ -77,7 +77,7 @@ ПапкаРасширеннаяПодсказка - 29 + 33 Label true true @@ -126,7 +126,7 @@ Right УдалятьПослеДобавленияРасширеннаяПодсказка - 31 + 35 Label true true @@ -167,7 +167,7 @@ ОписаниеРасширеннаяПодсказка - 34 + 38 Label true true @@ -215,7 +215,7 @@ Right ХранитьВерсииРасширеннаяПодсказка - 36 + 40 Label true true @@ -251,7 +251,7 @@ ГруппаСвойствФайловРасширеннаяПодсказка - 33 + 37 Label true true @@ -270,6 +270,102 @@ Auto + + ГруппаКодировка + 27 + + ДекорацияКодировка + 28 + + <key>ru</key> + <value>Кодировка текстовых файлов:</value> + + true + true + + true + + + ДекорацияКодировкаРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ДекорацияКодировкаКонтекстноеМеню + 29 + true + + Label + true + true + + Left + + + + ВыбратьКодировку + 30 + true + true + + true + + + ВыбратьКодировкуРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВыбратьКодировку + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа кодировка</value> + + + ru + Группа кодировка + + + ГруппаКодировкаРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + ОсновнаяКоманднаяПанель 1 @@ -284,7 +380,7 @@ false ИмпортРасширеннаяПодсказка - 39 + 46 Label true true @@ -323,7 +419,7 @@ false ЗакрытьРасширеннаяПодсказка - 40 + 47 Label true true @@ -354,7 +450,7 @@ ОсновнаяКоманднаяПанельРасширеннаяПодсказка - 38 + 45 Label true true @@ -515,6 +611,42 @@ true + + КодировкаПредставление + + <key>ru</key> + <value>Кодировка текстовых файлов</value> + + 7 + + String + + + + true + + + true + + + + КодировкаТекстаФайла + + <key>ru</key> + <value>Кодировка текста файла</value> + + 9 + + String + + + + true + + + true + + Импорт @@ -537,6 +669,28 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ВыбратьКодировку</name> + <title> + <key>ru</key> + <value>Выбрать кодировку</value> + + 2 + + ru + Выбрать кодировку + + + true + + + + ВыбратьКодировку + + + Auto + Auto + diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаПапки/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаПапки/Module.bsl index 29dc451a9..b4dcacfdf 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаПапки/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаПапки/Module.bsl @@ -40,7 +40,9 @@ Истина, УникальныйИдентификатор, ПсевдоФайловаяСистема, - ДобавленныеФайлы); + ДобавленныеФайлы, + Ложь, + КодировкаТекстаФайла); Закрыть(); @@ -101,3 +103,26 @@ КонецЕсли; КонецПроцедуры +&НаСервере +Процедура УстановитьПредставлениеКомандыКодировки(Представление) + + Команды.ВыбратьКодировку.Заголовок = Представление; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьКодировку(Команда) + + ПараметрыФормы = Новый Структура("ТекущаяКодировка", КодировкаТекстаФайла); + КодВозврата = ОткрытьФормуМодально("Справочник.Файлы.Форма.ВыборКодировки", ПараметрыФормы); + + Если ТипЗнч(КодВозврата) = Тип("Структура") Тогда + + КодировкаТекстаФайла = КодВозврата.Значение; + КодировкаПредставление = КодВозврата.Представление; + УстановитьПредставлениеКомандыКодировки(КодировкаПредставление); + + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Form.form index a0f2f8a34..2e4d70e14 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Form.form @@ -27,7 +27,7 @@ НадписьФайлыРасширеннаяПодсказка - 36 + 40 Label true true @@ -65,7 +65,7 @@ false ВыбратьФайлыРасширеннаяПодсказка - 38 + 42 Label true true @@ -103,7 +103,7 @@ ЗаголовокРасширеннаяПодсказка - 35 + 39 Label true true @@ -157,7 +157,7 @@ ВыбранныеФайлыИндексКартинкиРасширеннаяПодсказка - 50 + 54 Label true true @@ -202,7 +202,7 @@ ВыбранныеФайлыПутьРасширеннаяПодсказка - 52 + 56 Label true true @@ -245,7 +245,7 @@ КартинкаИНаименованиеРасширеннаяПодсказка - 49 + 53 Label true true @@ -273,10 +273,10 @@
    ВыбранныеФайлыСтрокаПоиска - 40 + 44 ВыбранныеФайлыСтрокаПоискаРасширеннаяПодсказка - 42 + 46 Label true true @@ -286,7 +286,7 @@ ВыбранныеФайлыСтрокаПоискаКонтекстноеМеню - 41 + 45 true ВыбранныеФайлы @@ -296,10 +296,10 @@ ВыбранныеФайлыСостояниеПросмотра - 43 + 47 ВыбранныеФайлыСостояниеПросмотраРасширеннаяПодсказка - 45 + 49 Label true true @@ -309,7 +309,7 @@ ВыбранныеФайлыСостояниеПросмотраКонтекстноеМеню - 44 + 48 true ViewStatusAddition @@ -320,10 +320,10 @@ ВыбранныеФайлыУправлениеПоиском - 46 + 50 ВыбранныеФайлыУправлениеПоискомРасширеннаяПодсказка - 48 + 52 Label true true @@ -333,7 +333,7 @@ ВыбранныеФайлыУправлениеПоискомКонтекстноеМеню - 47 + 51 true SearchControlAddition @@ -344,7 +344,7 @@ ВыбранныеФайлыРасширеннаяПодсказка - 39 + 43 Label true true @@ -394,7 +394,7 @@ ГруппаРасширеннаяПодсказка - 34 + 38 Label true true @@ -429,7 +429,7 @@ ПапкаДляДобавленияРасширеннаяПодсказка - 62 + 66 Label true true @@ -476,7 +476,7 @@ Right УдалятьПослеДобавленияРасширеннаяПодсказка - 64 + 68 Label true true @@ -514,7 +514,7 @@ ОписаниеРасширеннаяПодсказка - 66 + 70 Label true true @@ -562,7 +562,7 @@ Right ХранитьВерсииРасширеннаяПодсказка - 68 + 72 Label true true @@ -583,6 +583,102 @@ Left + + ГруппаКодировка + 34 + + ДекорацияКодировка + 35 + + <key>ru</key> + <value>Кодировка текстовых файлов:</value> + + true + true + + true + + + ДекорацияКодировкаРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + ДекорацияКодировкаКонтекстноеМеню + 36 + true + + Label + true + true + + Left + + + + ВыбратьКодировку + 37 + true + true + + true + + + ВыбратьКодировкуРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВыбратьКодировку + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа кодировка</value> + + + ru + Группа кодировка + + + ГруппаКодировкаРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + ОсновнаяКоманднаяПанель 1 @@ -597,7 +693,7 @@ false ДобавитьРасширеннаяПодсказка - 71 + 78 Label true true @@ -633,7 +729,7 @@ false ОтменаРасширеннаяПодсказка - 72 + 79 Label true true @@ -665,7 +761,7 @@ ОсновнаяКоманднаяПанельРасширеннаяПодсказка - 70 + 77 Label true true @@ -895,6 +991,42 @@ true + + КодировкаПредставление + + <key>ru</key> + <value>Кодировка текстовых файлов</value> + + 10 + + String + + + + true + + + true + + + + КодировкаТекстаФайла + + <key>ru</key> + <value>Кодировка текста файла</value> + + 11 + + String + + + + true + + + true + + Добавить @@ -939,6 +1071,28 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ВыбратьКодировку</name> + <title> + <key>ru</key> + <value>Выбрать кодировку</value> + + 3 + + ru + Выбрать кодировку + + + true + + + + ВыбратьКодировку + + + Auto + Auto + diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Module.bsl index cce288ee9..1c4b5df06 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Module.bsl @@ -75,7 +75,9 @@ Ложь, // Ложь - нерекурсивно УникальныйИдентификатор, ПсевдоФайловаяСистема, - ДобавленныеФайлы); + ДобавленныеФайлы, + Ложь, + КодировкаТекстаФайла); Закрыть(); @@ -158,3 +160,27 @@ КонецЦикла; КонецЕсли; КонецПроцедуры + +&НаСервере +Процедура УстановитьПредставлениеКомандыКодировки(Представление) + + Команды.ВыбратьКодировку.Заголовок = Представление; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьКодировку(Команда) + + ПараметрыФормы = Новый Структура("ТекущаяКодировка", КодировкаТекстаФайла); + КодВозврата = ОткрытьФормуМодально("Справочник.Файлы.Форма.ВыборКодировки", ПараметрыФормы); + + Если ТипЗнч(КодВозврата) = Тип("Структура") Тогда + + КодировкаТекстаФайла = КодВозврата.Значение; + КодировкаПредставление = КодВозврата.Представление; + УстановитьПредставлениеКомандыКодировки(КодировкаПредставление); + + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Form.form index 30abd2025..594f36542 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Form.form @@ -27,7 +27,7 @@ НадписьФайлыРасширеннаяПодсказка - 45 + 49 Label true true @@ -61,7 +61,7 @@ ЗаголовокРасширеннаяПодсказка - 44 + 48 Label true true @@ -111,7 +111,7 @@ ДеревоФайловПометкаРасширеннаяПодсказка - 58 + 62 Label true true @@ -144,7 +144,7 @@ ДеревоФайловИндексКартинкиРасширеннаяПодсказка - 60 + 64 Label true true @@ -189,7 +189,7 @@ ДеревоФайловИмяФайлаРасширеннаяПодсказка - 62 + 66 Label true true @@ -224,7 +224,7 @@ КартинкаИНаименованиеРасширеннаяПодсказка - 57 + 61 Label true true @@ -248,10 +248,10 @@ ДеревоФайловСтрокаПоиска - 48 + 52 ДеревоФайловСтрокаПоискаРасширеннаяПодсказка - 50 + 54 Label true true @@ -261,7 +261,7 @@ ДеревоФайловСтрокаПоискаКонтекстноеМеню - 49 + 53 true ДеревоФайлов @@ -271,10 +271,10 @@ ДеревоФайловСостояниеПросмотра - 51 + 55 ДеревоФайловСостояниеПросмотраРасширеннаяПодсказка - 53 + 57 Label true true @@ -284,7 +284,7 @@ ДеревоФайловСостояниеПросмотраКонтекстноеМеню - 52 + 56 true ViewStatusAddition @@ -295,10 +295,10 @@ ДеревоФайловУправлениеПоиском - 54 + 58 ДеревоФайловУправлениеПоискомРасширеннаяПодсказка - 56 + 60 Label true true @@ -308,7 +308,7 @@ ДеревоФайловУправлениеПоискомКонтекстноеМеню - 55 + 59 true SearchControlAddition @@ -319,7 +319,7 @@ ДеревоФайловРасширеннаяПодсказка - 47 + 51 Label true true @@ -365,7 +365,7 @@ ГруппаРасширеннаяПодсказка - 43 + 47 Label true true @@ -400,7 +400,7 @@ ПапкаДляДобавленияРасширеннаяПодсказка - 72 + 76 Label true true @@ -445,7 +445,7 @@ Right УдалятьПослеДобавленияРасширеннаяПодсказка - 74 + 78 Label true true @@ -486,7 +486,7 @@ ОписаниеРасширеннаяПодсказка - 77 + 81 Label true true @@ -533,7 +533,7 @@ Right ХранитьВерсииРасширеннаяПодсказка - 79 + 83 Label true true @@ -569,7 +569,7 @@ РеквизитыФайловРасширеннаяПодсказка - 76 + 80 Label true true @@ -588,6 +588,102 @@ Auto + + ГруппаКодировка + 43 + + ДекорацияКодировка + 44 + + <key>ru</key> + <value>Кодировка текстовых файлов:</value> + + true + true + + true + + + ДекорацияКодировкаРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + + ДекорацияКодировкаКонтекстноеМеню + 45 + true + + Label + true + true + + Left + + + + ВыбратьКодировку + 46 + true + true + + true + + + ВыбратьКодировкуРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВыбратьКодировку + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа кодировка</value> + + + ru + Группа кодировка + + + ГруппаКодировкаРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + ОсновнаяКоманднаяПанель 1 @@ -602,7 +698,7 @@ false ДобавитьРасширеннаяПодсказка - 82 + 89 Label true true @@ -638,7 +734,7 @@ false ОтменаРасширеннаяПодсказка - 83 + 90 Label true true @@ -670,7 +766,7 @@ ОсновнаяКоманднаяПанельРасширеннаяПодсказка - 81 + 88 Label true true @@ -936,6 +1032,42 @@ true + + КодировкаПредставление + + <key>ru</key> + <value>Кодировка текстовых файлов</value> + + 10 + + String + + + + true + + + true + + + + КодировкаТекстаФайла + + <key>ru</key> + <value>Кодировка текста файла</value> + + 11 + + String + + + + true + + + true + + Добавить @@ -958,6 +1090,28 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ВыбратьКодировку</name> + <title> + <key>ru</key> + <value>Выбрать кодировку</value> + + 2 + + ru + Выбрать кодировку + + + true + + + + ВыбратьКодировку + + + Auto + Auto + diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl index 6a614a5ec..5083f7498 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl @@ -145,7 +145,9 @@ Истина, // Истина - рекурсивно УникальныйИдентификатор, ПсевдоФайловаяСистема, - ДобавленныеФайлы); + ДобавленныеФайлы, + Ложь, + КодировкаТекстаФайла); Закрыть(); @@ -185,3 +187,27 @@ ЭлементДанных = ДеревоФайлов.НайтиПоИдентификатору(Элементы.ДеревоФайлов.ТекущаяСтрока); УстановитьПометку(ЭлементДанных, ЭлементДанных.Пометка); КонецПроцедуры + +&НаСервере +Процедура УстановитьПредставлениеКомандыКодировки(Представление) + + Команды.ВыбратьКодировку.Заголовок = Представление; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьКодировку(Команда) + + ПараметрыФормы = Новый Структура("ТекущаяКодировка", КодировкаТекстаФайла); + КодВозврата = ОткрытьФормуМодально("Справочник.Файлы.Форма.ВыборКодировки", ПараметрыФормы); + + Если ТипЗнч(КодВозврата) = Тип("Структура") Тогда + + КодировкаТекстаФайла = КодВозврата.Значение; + КодировкаПредставление = КодВозврата.Представление; + УстановитьПредставлениеКомандыКодировки(КодировкаПредставление); + + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Module.bsl index 8c7fee452..544faa4d9 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 11c10dc4e..78d6b2b6f 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Module.bsl @@ -139,7 +139,7 @@ КонецЕсли; Список.Параметры.УстановитьЗначениеПараметра( - "ТекущийПользователь", ОбщегоНазначения.ТекущийПользователь()); + "ТекущийПользователь", Пользователи.ТекущийПользователь()); РаботаСФайламиВызовСервера.ЗаполнитьУсловноеОформлениеСпискаФайлов(Список); diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Module.bsl index 6810e4a1f..58798efac 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Module.bsl @@ -355,7 +355,7 @@ ФайлНаДиске.УстановитьТолькоЧтение(Истина); ДатаСоздаваемогоФайлаНаДиске = ЗаписьФайла.ДатаМодификацииУниверсальная; - ОбщегоНазначенияКлиент.ПреобразоватьЗимнееВремяКТекущему(ДатаСоздаваемогоФайлаНаДиске); + ДатаСоздаваемогоФайлаНаДиске = МестноеВремя(ДатаСоздаваемогоФайлаНаДиске); // Поставим время модифицикации - как в информационной базе ФайлНаДиске.УстановитьВремяИзменения(ДатаСоздаваемогоФайлаНаДиске); diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/ConditionalAppearance.dcssca b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/ConditionalAppearance.dcssca index 8b531023e..f4f22440e 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/ConditionalAppearance.dcssca +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/ConditionalAppearance.dcssca @@ -29,4 +29,44 @@
    + + + + Редактирует + + + + + Объект.Редактирует + NotEqual + Справочник.Пользователи.ПустаяСсылка + + + + + ЦветТекста + style:ФайлЗанятыйДругимПользователем + + + + + + + Редактирует + + + + + Объект.Редактирует + Equal + ТекущийПользователь + + + + + ЦветТекста + style:ФайлЗанятыйТекущимПользователем + + + diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form index 2515c6db9..bd57bc3a0 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form @@ -28,7 +28,7 @@ ПолноеНаименованиеРасширеннаяПодсказка - 235 + 243 Label true true @@ -76,7 +76,7 @@ ОписаниеРасширеннаяПодсказка - 237 + 245 Label true true @@ -124,7 +124,7 @@ ГруппаОсновныеДанныеРасширеннаяПодсказка - 234 + 242 Label true true @@ -156,7 +156,7 @@ false ОткрытьФайлРасширеннаяПодсказка - 240 + 248 Label true true @@ -184,7 +184,7 @@ false РедактироватьРасширеннаяПодсказка - 241 + 249 Label true true @@ -212,7 +212,7 @@ false ЗакончитьРедактированиеРасширеннаяПодсказка - 242 + 250 Label true true @@ -240,7 +240,7 @@ false СохранитьИзмененияРасширеннаяПодсказка - 243 + 251 Label true true @@ -268,7 +268,7 @@ false ОткрытьКаталогФайлаРасширеннаяПодсказка - 244 + 252 Label true true @@ -296,7 +296,7 @@ false СохранитьКакРасширеннаяПодсказка - 245 + 253 Label true true @@ -328,7 +328,7 @@ ГруппаКомандыРасширеннаяПодсказка - 239 + 247 Label true true @@ -361,7 +361,7 @@ ГруппаОсновнаяРасширеннаяПодсказка - 233 + 241 Label true true @@ -404,7 +404,7 @@ ДатаСозданияРасширеннаяПодсказка - 249 + 257 Label true true @@ -449,7 +449,7 @@ АвторРасширеннаяПодсказка - 251 + 259 Label true true @@ -494,7 +494,7 @@ РедактируетРасширеннаяПодсказка - 254 + 262 Label true true @@ -540,7 +540,7 @@ ДатаЗаемаРасширеннаяПодсказка - 256 + 264 Label true true @@ -584,7 +584,7 @@ ГруппаРедактируетРасширеннаяПодсказка - 253 + 261 Label true true @@ -618,7 +618,7 @@ ВладелецРасширеннаяПодсказка - 258 + 266 Label true true @@ -660,7 +660,7 @@ true КодРасширеннаяПодсказка - 260 + 268 Label true true @@ -690,24 +690,117 @@ Normal - - ТекущаяВерсияРасширение - 123 - - <key>ru</key> - <value>Расширение</value> - + + ГруппаРасширение + 225 + + ТекущаяВерсияРасширение + 123 + + <key>ru</key> + <value>Расширение</value> + + true + true + + true + + + Объект.ТекущаяВерсияРасширение + + + ТекущаяВерсияРасширениеРасширеннаяПодсказка + 271 + Label + true + true + + Left + + + + ТекущаяВерсияРасширениеКонтекстноеМеню + 124 + true + + InputField + true + Enter + true + Left + true + + 4 + true + true + true + true + true + true + Normal + + + + ИндексКартинки + 226 + true + true + + true + + + Объект.ИндексКартинки + + None + + ИндексКартинкиРасширеннаяПодсказка + 273 + Label + true + true + + Left + + + + ИндексКартинкиКонтекстноеМеню + 227 + true + + PictureField + Enter + true + Left + true + + 2 + true + 1 + true + + CommonPicture.КоллекцияПиктограммФайлов + + + 1 + + + true true true - - Объект.ТекущаяВерсияРасширение - + + <key>ru</key> + <value>Группа расширение</value> + + + ru + Группа расширение + - ТекущаяВерсияРасширениеРасширеннаяПодсказка - 262 + ГруппаРасширениеРасширеннаяПодсказка + 270 Label true true @@ -715,25 +808,13 @@ Left - - ТекущаяВерсияРасширениеКонтекстноеМеню - 124 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal + UsualGroup + + Auto + true + true + Auto + Auto true @@ -751,7 +832,7 @@ ГруппаСведенияРасширеннаяПодсказка - 248 + 256 Label true true @@ -791,7 +872,7 @@ ТекущаяВерсияНомерРасширеннаяПодсказка - 265 + 276 Label true true @@ -837,7 +918,7 @@ ТекущаяВерсияАвторРасширеннаяПодсказка - 267 + 278 Label true true @@ -887,7 +968,7 @@ ТекущаяВерсияДатаСозданияРасширеннаяПодсказка - 270 + 281 Label true true @@ -939,7 +1020,7 @@ ТекущаяВерсияДатаМодификацииФайлаРасширеннаяПодсказка - 272 + 283 Label true true @@ -984,7 +1065,7 @@ ГруппаДатРасширеннаяПодсказка - 269 + 280 Label true true @@ -1002,24 +1083,105 @@ Auto - - ТекущаяВерсияРазмер - 132 - - <key>ru</key> - <value>Размер</value> - + + ГруппаРазмер + 222 + + ТекущаяВерсияРазмер + 132 + + <key>ru</key> + <value>Размер</value> + + true + true + + true + + + Объект.ТекущаяВерсияРазмер + + + ТекущаяВерсияРазмерРасширеннаяПодсказка + 286 + Label + true + true + + Left + + + + ТекущаяВерсияРазмерКонтекстноеМеню + 133 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДекорацияРазмер + 223 + + <key>ru</key> + <value>байт</value> + + true + true + + true + + + ДекорацияРазмерРасширеннаяПодсказка + 288 + Label + true + true + + Left + + + + ДекорацияРазмерКонтекстноеМеню + 224 + true + + Label + true + true + + Left + + true true true - - Объект.ТекущаяВерсияРазмер - + + <key>ru</key> + <value>Группа размер</value> + + + ru + Группа размер + - ТекущаяВерсияРазмерРасширеннаяПодсказка - 274 + ГруппаРазмерРасширеннаяПодсказка + 285 Label true true @@ -1027,25 +1189,13 @@ Left - - ТекущаяВерсияРазмерКонтекстноеМеню - 133 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal + UsualGroup + + Auto + true + true + Auto + Auto @@ -1062,7 +1212,7 @@ Right ХранитьВерсииРасширеннаяПодсказка - 276 + 289 Label true true @@ -1083,6 +1233,42 @@ Left + + Кодировка + 228 + true + true + + true + + + Кодировка + + + КодировкаРасширеннаяПодсказка + 291 + Label + true + true + + Left + + + + КодировкаКонтекстноеМеню + 229 + true + + LabelField + Enter + true + Left + true + + true + true + + true true @@ -1098,7 +1284,7 @@ ГруппаВерсияРасширеннаяПодсказка - 264 + 275 Label true true @@ -1133,7 +1319,7 @@ ГруппаСведенияОФайлеРасширеннаяПодсказка - 247 + 255 Label true true @@ -1175,7 +1361,7 @@ ТаблицаПодписейКомуВыданСертификатРасширеннаяПодсказка - 295 + 310 Label true true @@ -1216,7 +1402,7 @@ ТаблицаПодписейДатаПодписиРасширеннаяПодсказка - 297 + 312 Label true true @@ -1257,7 +1443,7 @@ ТаблицаПодписейКомментарийРасширеннаяПодсказка - 299 + 314 Label true true @@ -1298,7 +1484,7 @@ ТаблицаПодписейСтатусРасширеннаяПодсказка - 301 + 316 Label true true @@ -1339,7 +1525,7 @@ ТаблицаПодписейПодписатьРасширеннаяПодсказка - 279 + 294 Label true true @@ -1364,7 +1550,7 @@ ТаблицаПодписейОткрытьСертификатРасширеннаяПодсказка - 280 + 295 Label true true @@ -1390,7 +1576,7 @@ ТаблицаПодписейПроверитьРасширеннаяПодсказка - 281 + 296 Label true true @@ -1416,7 +1602,7 @@ ТаблицаПодписейПроверитьВсеРасширеннаяПодсказка - 282 + 297 Label true true @@ -1442,7 +1628,7 @@ ТаблицаПодписейСохранитьРасширеннаяПодсказка - 283 + 298 Label true true @@ -1468,7 +1654,7 @@ ТаблицаПодписейУдалитьРасширеннаяПодсказка - 284 + 299 Label true true @@ -1492,10 +1678,10 @@ ТаблицаПодписейСтрокаПоиска - 286 + 301 ТаблицаПодписейСтрокаПоискаРасширеннаяПодсказка - 288 + 303 Label true true @@ -1505,7 +1691,7 @@ ТаблицаПодписейСтрокаПоискаКонтекстноеМеню - 287 + 302 true ТаблицаПодписей @@ -1515,10 +1701,10 @@ ТаблицаПодписейСостояниеПросмотра - 289 + 304 ТаблицаПодписейСостояниеПросмотраРасширеннаяПодсказка - 291 + 306 Label true true @@ -1528,7 +1714,7 @@ ТаблицаПодписейСостояниеПросмотраКонтекстноеМеню - 290 + 305 true ViewStatusAddition @@ -1539,10 +1725,10 @@ ТаблицаПодписейУправлениеПоиском - 292 + 307 ТаблицаПодписейУправлениеПоискомРасширеннаяПодсказка - 294 + 309 Label true true @@ -1552,7 +1738,7 @@ ТаблицаПодписейУправлениеПоискомКонтекстноеМеню - 293 + 308 true SearchControlAddition @@ -1563,7 +1749,7 @@ ТаблицаПодписейРасширеннаяПодсказка - 285 + 300 Label true true @@ -1618,7 +1804,7 @@ ГруппаЭЦПРасширеннаяПодсказка - 278 + 293 Label true true @@ -1662,7 +1848,7 @@ None СертификатыШифрованияПредставлениеРасширеннаяПодсказка - 323 + 338 Label true true @@ -1703,7 +1889,7 @@ СертификатыШифрованияОткрытьСертификатШифрованияРасширеннаяПодсказка - 312 + 327 Label true true @@ -1727,10 +1913,10 @@ СертификатыШифрованияСтрокаПоиска - 314 + 329 СертификатыШифрованияСтрокаПоискаРасширеннаяПодсказка - 316 + 331 Label true true @@ -1740,7 +1926,7 @@ СертификатыШифрованияСтрокаПоискаКонтекстноеМеню - 315 + 330 true СертификатыШифрования @@ -1750,10 +1936,10 @@ СертификатыШифрованияСостояниеПросмотра - 317 + 332 СертификатыШифрованияСостояниеПросмотраРасширеннаяПодсказка - 319 + 334 Label true true @@ -1763,7 +1949,7 @@ СертификатыШифрованияСостояниеПросмотраКонтекстноеМеню - 318 + 333 true ViewStatusAddition @@ -1774,10 +1960,10 @@ СертификатыШифрованияУправлениеПоиском - 320 + 335 СертификатыШифрованияУправлениеПоискомРасширеннаяПодсказка - 322 + 337 Label true true @@ -1787,7 +1973,7 @@ СертификатыШифрованияУправлениеПоискомКонтекстноеМеню - 321 + 336 true SearchControlAddition @@ -1798,7 +1984,7 @@ СертификатыШифрованияРасширеннаяПодсказка - 313 + 328 Label true true @@ -1852,7 +2038,7 @@ ГруппаШифрованиеРасширеннаяПодсказка - 311 + 326 Label true true @@ -1881,7 +2067,7 @@ ГруппаДополнительныеДанныеСтраницыРасширеннаяПодсказка - 246 + 254 Label true true @@ -1909,7 +2095,7 @@ false ОтменитьРедактированиеРасширеннаяПодсказка - 222 + 230 Label true true @@ -1937,7 +2123,7 @@ false ЗанятьРасширеннаяПодсказка - 223 + 231 Label true true @@ -1965,7 +2151,7 @@ false ОбновитьИзФайлаНаДискеРасширеннаяПодсказка - 224 + 232 Label true true @@ -1998,7 +2184,7 @@ ФормаПодписатьРасширеннаяПодсказка - 227 + 235 Label true true @@ -2024,7 +2210,7 @@ ФормаДобавитьЭЦПИзФайлаРасширеннаяПодсказка - 228 + 236 Label true true @@ -2050,7 +2236,7 @@ ФормаСохранитьВместеСЭЦПРасширеннаяПодсказка - 229 + 237 Label true true @@ -2081,7 +2267,7 @@ ФормаГруппаЭЦПРасширеннаяПодсказка - 226 + 234 Label true true @@ -2104,7 +2290,7 @@ ФормаЗашифроватьРасширеннаяПодсказка - 231 + 239 Label true true @@ -2130,7 +2316,7 @@ ФормаРасшифроватьРасширеннаяПодсказка - 232 + 240 Label true true @@ -2161,7 +2347,7 @@ ФормаГруппаШифрованиеРасширеннаяПодсказка - 230 + 238 Label true true @@ -2186,7 +2372,7 @@ ФормаЭЦПИШифрованиеРасширеннаяПодсказка - 225 + 233 Label true true @@ -2219,6 +2405,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + 70 DontBlock true @@ -2741,6 +2931,41 @@ true + + ТекущийПользователь + + <key>ru</key> + <value>Текущий пользователь</value> + + 15 + + CatalogRef.Пользователи + + + true + + + true + + + + Кодировка + + <key>ru</key> + <value>Кодировка</value> + + 16 + + String + + + + true + + + true + + Записать diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl index 405e2b8c2..ce94f2ecf 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl @@ -43,8 +43,8 @@ КонецЕсли; Версия = РаботаСФайламиВызовСервера.СоздатьВерсию( - ТекущаяДата(), - УниверсальноеВремя(ТекущаяДата()), + ТекущаяДатаСеанса(), + УниверсальноеВремя(ТекущаяДатаСеанса()), Приемник, Объект.Наименование, Источник.ТекущаяВерсия.Размер, @@ -167,6 +167,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ТекущийПользователь = Пользователи.ТекущийПользователь(); + КолонкиМассив = Новый Массив; Для Каждого ОписаниеКолонки Из РеквизитФормыВЗначение("ТаблицаПодписей").Колонки Цикл КолонкиМассив.Добавить(ОписаниеКолонки.Имя); @@ -211,9 +213,9 @@ НовыйФайлЗаписан = Ложь; - // Свойства + // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект, ""); - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства Если Параметры.Свойство("КарточкаОткрытаПослеСозданияФайла") Тогда Если Параметры.КарточкаОткрытаПослеСозданияФайла Тогда @@ -246,6 +248,31 @@ Элементы.Владелец.ОграничениеТипа = Новый ОписаниеТипов(ТипыВладельцев); КонецЕсли; + СписокРасширенийТекстовыхФайлов = ФайловыеФункции.ПолучитьСписокРасширенийТекстовыхФайлов(); + Если ФайловыеФункцииКлиентСервер.РасширениеФайлаВСписке(СписокРасширенийТекстовыхФайлов, Объект.ТекущаяВерсияРасширение) Тогда + + Если ЗначениеЗаполнено(Объект.ТекущаяВерсия) Тогда + + КодировкаЗначение = РаботаСФайламиВызовСервера.ПолучитьКодировкуВерсииФайла(Объект.ТекущаяВерсия); + + СписокКодировок = РаботаСФайламиКлиентСервер.ПолучитьСписокКодировок(); + ЭлементСписка = СписокКодировок.НайтиПоЗначению(КодировкаЗначение); + Если ЭлементСписка = Неопределено Тогда + Кодировка = КодировкаЗначение; + Иначе + Кодировка = ЭлементСписка.Представление; + КонецЕсли; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(Кодировка) Тогда + Кодировка = НСтр("ru='По умолчанию'"); + КонецЕсли; + + Иначе + Элементы.Кодировка.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаСервере @@ -368,16 +395,8 @@ КонецПроцедуры &НаКлиенте -Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) +Процедура ПриЗакрытии() - Если ФайлРедактировался И СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ТекущийПользователь = Объект.Редактирует Тогда - Ответ = Вопрос(НСтр("ru = 'Файл занят вами для редактирования. Закрыть карточку?'"), РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); - Если Ответ = КодВозвратаДиалога.Нет Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - КонецЕсли; - Если РежимСоздания = "ИзШаблона" И НЕ Объект.ПодписанЭЦП Тогда СтрокаВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Открыть файл ""%1"" для редактирования?'"), @@ -396,6 +415,19 @@ КонецПроцедуры +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Если ФайлРедактировался И СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ТекущийПользователь = Объект.Редактирует Тогда + Ответ = Вопрос(НСтр("ru = 'Файл занят вами для редактирования. Закрыть карточку?'"), РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); + Если Ответ = КодВозвратаДиалога.Нет Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) @@ -415,11 +447,11 @@ Прочитать(); КонецЕсли; - // Свойства + // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); КонецЕсли; - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры @@ -431,20 +463,22 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект) - // Свойства + // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект); - // Конец Свойства - - Если НаименованиеДоЗаписи <> ТекущийОбъект.Наименование Тогда - Если ТекущийОбъект.ТекущаяВерсия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - РаботаСФайламиВызовСервера.ПереименоватьФайлВерсииНаДиске(ТекущийОбъект.ТекущаяВерсия, НаименованиеДоЗаписи, ТекущийОбъект.Наименование); - КонецЕсли; - КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект) + + Если НаименованиеДоЗаписи <> ТекущийОбъект.Наименование Тогда + Если ТекущийОбъект.ТекущаяВерсия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + РаботаСФайламиВызовСервера.ПереименоватьФайлВерсииНаДиске(ТекущийОбъект.ТекущаяВерсия, НаименованиеДоЗаписи, + ТекущийОбъект.Наименование, УникальныйИдентификатор); + КонецЕсли; + КонецЕсли; + Если НовыйФайл Тогда ДанныеФайла = РаботаСФайламиВызовСервера.ПолучитьДанныеФайла(Объект.Ссылка); ДанныеФайлаКорректны = Истина; @@ -1060,7 +1094,12 @@ &НаКлиенте Процедура ВладелецПриИзменении(Элемент) - ОбновитьПолныйПуть(); + Если ТипЗнч(Объект.ВладелецФайла) = Тип("СправочникСсылка.ПапкиФайлов") Тогда + ОбновитьПолныйПуть(); + КонецЕсли; + + ТипВладельца = ТипЗнч(Объект.ВладелецФайла); + Элементы.Владелец.Заголовок = ТипВладельца; КонецПроцедуры @@ -1126,3 +1165,4 @@ КонецЕсли; КонецПроцедуры + diff --git a/SSL/src/Catalogs/Файлы/Forms/ХранилищеФайлов/Form.form b/SSL/src/Catalogs/Файлы/Forms/ХранилищеФайлов/Form.form index 47c80ba90..cda486e97 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ХранилищеФайлов/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ХранилищеФайлов/Form.form @@ -45,7 +45,7 @@ </dataPath> <extendedTooltip> <name>ПапкаРасширеннаяПодсказка</name> - <id>191</id> + <id>193</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -97,10 +97,10 @@ </handlers> <searchStringAddition> <name>ПапкиСтрокаПоиска</name> - <id>182</id> + <id>184</id> <extendedTooltip> <name>ПапкиСтрокаПоискаРасширеннаяПодсказка</name> - <id>184</id> + <id>186</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -110,7 +110,7 @@ </extendedTooltip> <contextMenu> <name>ПапкиСтрокаПоискаКонтекстноеМеню</name> - <id>183</id> + <id>185</id> <autoFill>true</autoFill> </contextMenu> <source>Папки</source> @@ -120,10 +120,10 @@ </searchStringAddition> <viewStatusAddition> <name>ПапкиСостояниеПросмотра</name> - <id>185</id> + <id>187</id> <extendedTooltip> <name>ПапкиСостояниеПросмотраРасширеннаяПодсказка</name> - <id>187</id> + <id>189</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -133,7 +133,7 @@ </extendedTooltip> <contextMenu> <name>ПапкиСостояниеПросмотраКонтекстноеМеню</name> - <id>186</id> + <id>188</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -144,10 +144,10 @@ </viewStatusAddition> <searchControlAddition> <name>ПапкиУправлениеПоиском</name> - <id>188</id> + <id>190</id> <extendedTooltip> <name>ПапкиУправлениеПоискомРасширеннаяПодсказка</name> - <id>190</id> + <id>192</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -157,7 +157,7 @@ </extendedTooltip> <contextMenu> <name>ПапкиУправлениеПоискомКонтекстноеМеню</name> - <id>189</id> + <id>191</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -168,7 +168,7 @@ </searchControlAddition> <extendedTooltip> <name>ПапкиРасширеннаяПодсказка</name> - <id>181</id> + <id>183</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -193,7 +193,7 @@ </userVisible> <extendedTooltip> <name>ПапкиКонтекстноеМенюСоздатьРасширеннаяПодсказка</name> - <id>174</id> + <id>176</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -230,7 +230,7 @@ </toolTip> <extendedTooltip> <name>ПапкиКонтекстноеМенюСтандартныеРасширеннаяПодсказка</name> - <id>175</id> + <id>177</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -252,7 +252,7 @@ </userVisible> <extendedTooltip> <name>ПапкиКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка</name> - <id>176</id> + <id>178</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -282,7 +282,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюПапкиИмпортФайловРасширеннаяПодсказка</name> - <id>178</id> + <id>180</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -309,7 +309,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюПапкиИмпортПапкиРасширеннаяПодсказка</name> - <id>179</id> + <id>181</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -336,7 +336,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюПапкиЭкспортПапкиРасширеннаяПодсказка</name> - <id>180</id> + <id>182</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -367,7 +367,7 @@ </toolTip> <extendedTooltip> <name>ГруппаИмпортРасширеннаяПодсказка</name> - <id>177</id> + <id>179</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -467,7 +467,7 @@ </toolTip> <extendedTooltip> <name>ПодписанЭЦПРасширеннаяПодсказка</name> - <id>234</id> + <id>236</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -524,7 +524,7 @@ </toolTip> <extendedTooltip> <name>ЗашифрованРасширеннаяПодсказка</name> - <id>236</id> + <id>238</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -575,7 +575,7 @@ </dataPath> <extendedTooltip> <name>КартинкаРасширеннаяПодсказка</name> - <id>239</id> + <id>241</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -626,7 +626,7 @@ <defaultItem>true</defaultItem> <extendedTooltip> <name>НаименованиеРасширеннаяПодсказка</name> - <id>241</id> + <id>243</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -664,7 +664,7 @@ </userVisible> <extendedTooltip> <name>КартинкаИНаименованиеРасширеннаяПодсказка</name> - <id>238</id> + <id>240</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -692,7 +692,7 @@ </dataPath> <extendedTooltip> <name>ОписаниеРасширеннаяПодсказка</name> - <id>243</id> + <id>245</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -737,7 +737,7 @@ </dataPath> <extendedTooltip> <name>РедактируетРасширеннаяПодсказка</name> - <id>245</id> + <id>247</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -789,7 +789,7 @@ </toolTip> <extendedTooltip> <name>ТекущаяВерсияКодРасширеннаяПодсказка</name> - <id>247</id> + <id>249</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -841,7 +841,7 @@ </toolTip> <extendedTooltip> <name>ТекущаяВерсияДатаСозданияРасширеннаяПодсказка</name> - <id>249</id> + <id>251</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -898,7 +898,7 @@ </dataPath> <extendedTooltip> <name>ТекущаяВерсияАвторРасширеннаяПодсказка</name> - <id>251</id> + <id>253</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -946,7 +946,7 @@ </toolTip> <extendedTooltip> <name>ТекущаяВерсияРазмерРасширеннаяПодсказка</name> - <id>253</id> + <id>255</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -990,7 +990,7 @@ </dataPath> <extendedTooltip> <name>АвторРасширеннаяПодсказка</name> - <id>255</id> + <id>257</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1032,7 +1032,7 @@ </dataPath> <extendedTooltip> <name>ХранитьВерсииРасширеннаяПодсказка</name> - <id>257</id> + <id>259</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1063,7 +1063,7 @@ </dataPath> <extendedTooltip> <name>РедактируетТекущийПользовательРасширеннаяПодсказка</name> - <id>259</id> + <id>261</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1094,7 +1094,7 @@ </dataPath> <extendedTooltip> <name>СсылкаРасширеннаяПодсказка</name> - <id>261</id> + <id>263</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1132,7 +1132,7 @@ </dataPath> <extendedTooltip> <name>ТекущаяВерсияДатаМодификацииФайлаРасширеннаяПодсказка</name> - <id>263</id> + <id>265</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1188,10 +1188,10 @@ </handlers> <searchStringAddition> <name>СписокСтрокаПоиска</name> - <id>225</id> + <id>227</id> <extendedTooltip> <name>СписокСтрокаПоискаРасширеннаяПодсказка</name> - <id>227</id> + <id>229</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1201,7 +1201,7 @@ </extendedTooltip> <contextMenu> <name>СписокСтрокаПоискаКонтекстноеМеню</name> - <id>226</id> + <id>228</id> <autoFill>true</autoFill> </contextMenu> <source>Список</source> @@ -1211,10 +1211,10 @@ </searchStringAddition> <viewStatusAddition> <name>СписокСостояниеПросмотра</name> - <id>228</id> + <id>230</id> <extendedTooltip> <name>СписокСостояниеПросмотраРасширеннаяПодсказка</name> - <id>230</id> + <id>232</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1224,7 +1224,7 @@ </extendedTooltip> <contextMenu> <name>СписокСостояниеПросмотраКонтекстноеМеню</name> - <id>229</id> + <id>231</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -1235,10 +1235,10 @@ </viewStatusAddition> <searchControlAddition> <name>СписокУправлениеПоиском</name> - <id>231</id> + <id>233</id> <extendedTooltip> <name>СписокУправлениеПоискомРасширеннаяПодсказка</name> - <id>233</id> + <id>235</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1248,7 +1248,7 @@ </extendedTooltip> <contextMenu> <name>СписокУправлениеПоискомКонтекстноеМеню</name> - <id>232</id> + <id>234</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -1259,7 +1259,7 @@ </searchControlAddition> <extendedTooltip> <name>СписокРасширеннаяПодсказка</name> - <id>224</id> + <id>226</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1281,7 +1281,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюСписокСоздатьРасширеннаяПодсказка</name> - <id>201</id> + <id>203</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1315,7 +1315,7 @@ </toolTip> <extendedTooltip> <name>ГруппаСтандартныхКомандРасширеннаяПодсказка</name> - <id>202</id> + <id>204</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1338,7 +1338,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюСписокОткрытьФайлРасширеннаяПодсказка</name> - <id>203</id> + <id>205</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1365,7 +1365,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюСписокРедактироватьРасширеннаяПодсказка</name> - <id>204</id> + <id>206</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1392,7 +1392,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюСписокЗакончитьРедактированиеРасширеннаяПодсказка</name> - <id>205</id> + <id>207</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1419,7 +1419,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюСписокЗанятьРасширеннаяПодсказка</name> - <id>206</id> + <id>208</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1446,7 +1446,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюСписокСохранитьИзмененияРасширеннаяПодсказка</name> - <id>207</id> + <id>209</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1473,7 +1473,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюСписокОткрытьКаталогФайлаРасширеннаяПодсказка</name> - <id>208</id> + <id>210</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1500,7 +1500,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюСписокСохранитьКакРасширеннаяПодсказка</name> - <id>209</id> + <id>211</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1531,7 +1531,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюСписокОсвободитьРасширеннаяПодсказка</name> - <id>210</id> + <id>212</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1558,7 +1558,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюСписокПеренестиВРазделРасширеннаяПодсказка</name> - <id>211</id> + <id>213</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1585,7 +1585,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюСписокОбновитьИзФайлаНаДискеРасширеннаяПодсказка</name> - <id>212</id> + <id>214</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1615,7 +1615,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюСписокИмпортФайловРасширеннаяПодсказка</name> - <id>214</id> + <id>216</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1642,7 +1642,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>КонтекстноеМенюСписокИмпортПапкиРасширеннаяПодсказка</name> - <id>215</id> + <id>217</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1673,7 +1673,7 @@ </toolTip> <extendedTooltip> <name>ГруппаКомандИмпортаРасширеннаяПодсказка</name> - <id>213</id> + <id>215</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1699,7 +1699,7 @@ </userVisible> <extendedTooltip> <name>ФормаПодписатьКонтекстРасширеннаяПодсказка</name> - <id>218</id> + <id>220</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1725,7 +1725,7 @@ </userVisible> <extendedTooltip> <name>ФормаДобавитьЭЦПИзФайлаКонтекстРасширеннаяПодсказка</name> - <id>219</id> + <id>221</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1751,7 +1751,7 @@ </userVisible> <extendedTooltip> <name>ФормаСохранитьВместеСЭЦПКонтекстРасширеннаяПодсказка</name> - <id>220</id> + <id>222</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1782,7 +1782,7 @@ </toolTip> <extendedTooltip> <name>ФормаГруппаЭЦПКонтекстРасширеннаяПодсказка</name> - <id>217</id> + <id>219</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1805,7 +1805,7 @@ </userVisible> <extendedTooltip> <name>ФормаЗашифроватьКонтекстРасширеннаяПодсказка</name> - <id>222</id> + <id>224</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1831,7 +1831,7 @@ </userVisible> <extendedTooltip> <name>ФормаРасшифроватьКонтекстРасширеннаяПодсказка</name> - <id>223</id> + <id>225</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1862,7 +1862,7 @@ </toolTip> <extendedTooltip> <name>ФормаГруппаШифрованиеКонтекстРасширеннаяПодсказка</name> - <id>221</id> + <id>223</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1887,7 +1887,7 @@ </toolTip> <extendedTooltip> <name>ФормаЭЦПИШифрованиеКонтекстноеРасширеннаяПодсказка</name> - <id>216</id> + <id>218</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1948,7 +1948,7 @@ </userVisible> <extendedTooltip> <name>ГруппаРасширеннаяПодсказка</name> - <id>173</id> + <id>175</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1989,7 +1989,7 @@ </handlers> <extendedTooltip> <name>ПоискРасширеннаяПодсказка</name> - <id>274</id> + <id>276</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2028,7 +2028,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>НайтиРасширеннаяПодсказка</name> - <id>276</id> + <id>278</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2055,7 +2055,7 @@ <horizontalStretch>false</horizontalStretch> <extendedTooltip> <name>ГруппаПоискРасширеннаяПодсказка</name> - <id>273</id> + <id>275</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2079,7 +2079,7 @@ </userVisible> <extendedTooltip> <name>Группа2РасширеннаяПодсказка</name> - <id>172</id> + <id>174</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2100,7 +2100,7 @@ </userVisible> <extendedTooltip> <name>Группа1РасширеннаяПодсказка</name> - <id>171</id> + <id>173</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2127,7 +2127,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>СоздатьФайлРасширеннаяПодсказка</name> - <id>147</id> + <id>148</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2154,7 +2154,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>СоздатьРасширеннаяПодсказка</name> - <id>148</id> + <id>149</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2187,7 +2187,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>ОткрытьФайлРасширеннаяПодсказка</name> - <id>150</id> + <id>151</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2214,7 +2214,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>РедактироватьРасширеннаяПодсказка</name> - <id>151</id> + <id>152</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2241,7 +2241,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>ЗакончитьРедактированиеРасширеннаяПодсказка</name> - <id>152</id> + <id>153</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2268,7 +2268,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>ЗанятьРасширеннаяПодсказка</name> - <id>153</id> + <id>154</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2296,7 +2296,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>ОткрытьКаталогФайлаРасширеннаяПодсказка</name> - <id>154</id> + <id>155</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2328,7 +2328,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>ОсвободитьРасширеннаяПодсказка</name> - <id>155</id> + <id>156</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2356,7 +2356,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>СохранитьИзмененияРасширеннаяПодсказка</name> - <id>156</id> + <id>157</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2384,7 +2384,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>СохранитьКакРасширеннаяПодсказка</name> - <id>157</id> + <id>158</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2412,7 +2412,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>ПеренестиВРазделРасширеннаяПодсказка</name> - <id>158</id> + <id>159</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2440,7 +2440,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>ОбновитьИзФайлаНаДискеРасширеннаяПодсказка</name> - <id>159</id> + <id>160</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2472,7 +2472,7 @@ </toolTip> <extendedTooltip> <name>ГруппаКомандФайловРасширеннаяПодсказка</name> - <id>149</id> + <id>150</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2498,7 +2498,7 @@ </userVisible> <extendedTooltip> <name>ФормаПодписатьРасширеннаяПодсказка</name> - <id>162</id> + <id>163</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2524,7 +2524,7 @@ </userVisible> <extendedTooltip> <name>ФормаДобавитьЭЦПИзФайлаРасширеннаяПодсказка</name> - <id>163</id> + <id>164</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2550,7 +2550,7 @@ </userVisible> <extendedTooltip> <name>ФормаСохранитьВместеСЭЦПРасширеннаяПодсказка</name> - <id>164</id> + <id>165</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2581,7 +2581,7 @@ </toolTip> <extendedTooltip> <name>ФормаГруппаЭЦПРасширеннаяПодсказка</name> - <id>161</id> + <id>162</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2604,7 +2604,7 @@ </userVisible> <extendedTooltip> <name>ФормаЗашифроватьРасширеннаяПодсказка</name> - <id>166</id> + <id>167</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2630,7 +2630,7 @@ </userVisible> <extendedTooltip> <name>ФормаРасшифроватьРасширеннаяПодсказка</name> - <id>167</id> + <id>168</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2661,7 +2661,7 @@ </toolTip> <extendedTooltip> <name>ФормаГруппаШифрованиеРасширеннаяПодсказка</name> - <id>165</id> + <id>166</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2686,7 +2686,7 @@ </toolTip> <extendedTooltip> <name>ФормаЭЦПИШифрованиеРасширеннаяПодсказка</name> - <id>160</id> + <id>161</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2714,7 +2714,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>ИспользоватьИерархиюРасширеннаяПодсказка</name> - <id>169</id> + <id>170</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2744,7 +2744,7 @@ </userVisible> <extendedTooltip> <name>ФормаОбновитьСписокРасширеннаяПодсказка</name> - <id>170</id> + <id>171</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2776,7 +2776,7 @@ </toolTip> <extendedTooltip> <name>ГруппаКомандФормыРасширеннаяПодсказка</name> - <id>168</id> + <id>169</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2788,6 +2788,32 @@ <commandSource>Form</commandSource> </extInfo> </items> + <items xsi:type="form:Button"> + <name>ФормаСправка</name> + <id>147</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаСправкаРасширеннаяПодсказка</name> + <id>172</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.StandardCommand.Help</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> <horizontalAlign>Left</horizontalAlign> </autoCommandBar> <handlers> @@ -2850,6 +2876,9 @@ <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Список.Зашифрован</segments> </notDefaultUseAlwaysAttributes> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Кодировка</segments> + </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Список.ПодписанЭЦП</segments> </notDefaultUseAlwaysAttributes> @@ -2869,7 +2898,7 @@ Файлы.Редактирует, Файлы.ДатаСоздания, Файлы.ТекущаяВерсияНомерВерсии, - ВЫРАЗИТЬ(Файлы.ТекущаяВерсияРазмер / 1024 КАК Число(10,0)) КАК Размер, + ВЫРАЗИТЬ(Файлы.ТекущаяВерсияРазмер / 1024 КАК ЧИСЛО(10, 0)) КАК Размер, Файлы.Автор, Файлы.ТекущаяВерсияДатаСоздания, ВЫБОР @@ -2891,12 +2920,15 @@ КОНЕЦ КАК РедактируетТекущийПользователь, Файлы.ПодписанЭЦП, Файлы.Зашифрован, - Файлы.ТекущаяВерсияДатаМодификацииФайла + Файлы.ТекущаяВерсияДатаМодификацииФайла, + КодировкиВерсийФайлов.Кодировка ИЗ Справочник.Файлы КАК Файлы + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КодировкиВерсийФайлов КАК КодировкиВерсийФайлов + ПО Файлы.ТекущаяВерсия = КодировкиВерсийФайлов.ВерсияФайла ГДЕ (Файлы.ВладелецФайла = &Владелец - ИЛИ (НЕ &ИспользоватьИерархию) + ИЛИ НЕ &ИспользоватьИерархию И Файлы.ВладелецФайла ССЫЛКА Справочник.ПапкиФайлов)</queryText> <mainTable>Catalog.Файлы</mainTable> <dynamicDataRead>true</dynamicDataRead> diff --git a/SSL/src/Catalogs/Файлы/Forms/ХранилищеФайлов/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ХранилищеФайлов/Module.bsl index e2c082e70..80b136d78 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ХранилищеФайлов/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ХранилищеФайлов/Module.bsl @@ -83,31 +83,13 @@ ДанныеФайла = РаботаСФайламиВызовСервера.ПолучитьДанныеФайлаДляОткрытия(ВыбраннаяСтрока, Неопределено, УникальныйИдентификатор, Неопределено, ПредыдущийАдресФайла); - // Если уже занят для редактирования, то не спрашивать - сразу открывать - Если ДанныеФайла.Редактирует.Пустая() Тогда - СпрашиватьРежимРедактированияПриОткрытииФайла = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().СпрашиватьРежимРедактированияПриОткрытииФайла; - Если СпрашиватьРежимРедактированияПриОткрытииФайла = Истина Тогда - - Результат = ОткрытьФормуМодально("Справочник.Файлы.Форма.ФормаВыбораРежимаОткрытия"); - Если ТипЗнч(Результат) <> Тип("Структура") Тогда - Возврат; - КонецЕсли; - - БольшеНеСпрашивать = Результат.БольшеНеСпрашивать; - Если БольшеНеСпрашивать = Истина Тогда - ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения("НастройкиОткрытияФайлов", "СпрашиватьРежимРедактированияПриОткрытииФайла", Ложь); - КонецЕсли; - - КакОткрывать = Результат.КакОткрывать; - Если КакОткрывать = 1 Тогда - РаботаСФайламиКлиент.РедактироватьФайл(ДанныеФайла, УникальныйИдентификатор); - ОповеститьОбИзменении(ДанныеФайла.Ссылка); - УстановитьДоступностьФайловыхКомманд(); - Возврат; - КонецЕсли; - - КонецЕсли; - КонецЕсли; + ВыбранныйРежим = РаботаСФайламиКлиент.ВыбратьРежимИРедактироватьФайл(ДанныеФайла, Истина); + Если ВыбранныйРежим = "Редактировать" Тогда + УстановитьДоступностьФайловыхКомманд(); + Возврат; + ИначеЕсли ВыбранныйРежим = "Отмена" Тогда + Возврат; + КонецЕсли; РаботаСФайламиКлиент.ОткрытьФайл(ДанныеФайла, УникальныйИдентификатор); @@ -375,7 +357,7 @@ Если Параметры.Свойство("Папка") = Истина И Параметры.Папка <> Неопределено Тогда ПапкаПриОткрытии = Параметры.Папка; Иначе - ПапкаПриОткрытии = ХранилищеНастроекДанныхФорм.Загрузить("ХранилищеФайлов", "ТекущаяПапка"); + ПапкаПриОткрытии = ОбщегоНазначения.ХранилищеНастроекДанныхФормЗагрузить("ХранилищеФайлов", "ТекущаяПапка"); КонецЕсли; Если ПапкаПриОткрытии = Справочники.ПапкиФайлов.ПустаяСсылка() Тогда @@ -397,7 +379,7 @@ Список.Параметры.УстановитьЗначениеПараметра( "Владелец", ПапкаПриОткрытии); Список.Параметры.УстановитьЗначениеПараметра( - "ТекущийПользователь", ОбщегоНазначения.ТекущийПользователь()); + "ТекущийПользователь", Пользователи.ТекущийПользователь()); РаботаСФайламиВызовСервера.ЗаполнитьУсловноеОформлениеСпискаФайлов(Список); @@ -425,7 +407,7 @@ &НаСервере Процедура ПриЗакрытииНаСервере() - ХранилищеНастроекДанныхФорм.Сохранить( + ОбщегоНазначения.ХранилищеНастроекДанныхФормСохранить( "ХранилищеФайлов", "ТекущаяПапка", Элементы.Папки.ТекущаяСтрока); @@ -887,7 +869,8 @@ Элементы.Список.ТекущиеДанные.ХранитьВерсии, Элементы.Список.ТекущиеДанные.РедактируетТекущийПользователь, Элементы.Список.ТекущиеДанные.Редактирует, - Элементы.Список.ТекущиеДанные.Автор); + Элементы.Список.ТекущиеДанные.Автор, + Элементы.Список.ТекущиеДанные.Кодировка); УстановитьДоступностьФайловыхКомманд(); diff --git a/SSL/src/Catalogs/Файлы/ObjectModule.bsl b/SSL/src/Catalogs/Файлы/ObjectModule.bsl index 6d7bedbec..123d97033 100644 --- a/SSL/src/Catalogs/Файлы/ObjectModule.bsl +++ b/SSL/src/Catalogs/Файлы/ObjectModule.bsl @@ -76,6 +76,7 @@ ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка); УстановитьПривилегированныйРежим(Истина); Объект.ПолноеНаименование = ПолноеНаименование; + Объект.ДополнительныеСвойства.Вставить("ПереименованиеФайла", Истина); // чтобы не сработала подписка СкопироватьРеквизитыВерсииФайловВФайл Объект.Записать(); УстановитьПривилегированныйРежим(Ложь); КонецЕсли; @@ -168,13 +169,14 @@ КонецФункции Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) + Если ЭтоНовый() Тогда - ДатаСоздания = ТекущаяДата(); + ДатаСоздания = ТекущаяДатаСеанса(); ХранитьВерсии = Истина; ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Неопределено); - Автор = ОбщегоНазначения.ТекущийПользователь(); - ДатаСоздания = ТекущаяДата(); + Автор = Пользователи.ТекущийПользователь(); КонецЕсли; + КонецПроцедуры diff --git a/SSL/src/Catalogs/Файлы/Файлы.mdo b/SSL/src/Catalogs/Файлы/Файлы.mdo index 7370f7597..2779b767a 100644 --- a/SSL/src/Catalogs/Файлы/Файлы.mdo +++ b/SSL/src/Catalogs/Файлы/Файлы.mdo @@ -837,6 +837,15 @@ <fullTextSearch>Use</fullTextSearch> </attributes> </tabularSections> + <forms uuid="8f088f33-92d7-4e35-915d-6cda1129dd80"> + <name>ВопросПриВыходеИзТекстовогоРедактора</name> + <synonym> + <key>ru</key> + <value>Вопрос при выходе из текстового редактора</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> <forms uuid="9a8578a2-8a92-4ab3-a480-173340f8b34a"> <name>ВопросПриИмпортеФайлов</name> <synonym> @@ -851,6 +860,20 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> + <forms uuid="4889d27b-435b-4059-a34d-6afdf3c77fa3"> + <name>ВыборКодировки</name> + <synonym> + <key>ru</key> + <value>Выбор кодировки</value> + </synonym> + <help> + <pages> + <lang>ru</lang> + </pages> + </help> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> <forms uuid="4ebf0988-ccc3-440c-bd0f-2d01636bd730"> <name>ВыборСохраненияШифрованногоФайла</name> <synonym> @@ -911,6 +934,20 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> + <forms uuid="4b54d626-dc59-4e49-a708-0a7f98833b9a"> + <name>РедактированиеТекстовогоФайла</name> + <synonym> + <key>ru</key> + <value>Редактор текстовых файлов</value> + </synonym> + <help> + <pages> + <lang>ru</lang> + </pages> + </help> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> <forms uuid="1c90a423-ef1b-42dc-a43b-1fda89672481"> <name>РедактируемыеФайлы</name> <synonym> diff --git a/SSL/src/Catalogs/ФизическиеЛица/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ФизическиеЛица/Forms/ФормаГруппы/Module.bsl index af35d8bfa..437dc6ad1 100644 --- a/SSL/src/Catalogs/ФизическиеЛица/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/ФизическиеЛица/Forms/ФормаГруппы/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form index 50ad3bc1a..87e8a13ec 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form @@ -685,9 +685,6 @@ <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> - <picture xsi:type="core:PictureRef"> - <picture>StdPicture.Next</picture> - </picture> <representationInContextMenu>Auto</representationInContextMenu> <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> </items> @@ -986,9 +983,6 @@ <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> - <picture xsi:type="core:PictureRef"> - <picture>StdPicture.Next</picture> - </picture> <representationInContextMenu>Auto</representationInContextMenu> <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> </items> @@ -1599,9 +1593,6 @@ <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> - <picture xsi:type="core:PictureRef"> - <picture>StdPicture.Next</picture> - </picture> <representationInContextMenu>Auto</representationInContextMenu> <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> </items> @@ -1967,9 +1958,6 @@ <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> - <picture xsi:type="core:PictureRef"> - <picture>StdPicture.Next</picture> - </picture> <representationInContextMenu>Auto</representationInContextMenu> <locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar> </items> @@ -3017,6 +3005,9 @@ <use> <common>true</common> </use> + <picture xsi:type="core:PictureRef"> + <picture>CommonPicture.ЗаполнитьФорму</picture> + </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>ЗаполнитьВариантыОтветовОтветыВСтроках</name> @@ -3039,6 +3030,9 @@ <use> <common>true</common> </use> + <picture xsi:type="core:PictureRef"> + <picture>CommonPicture.ЗаполнитьФорму</picture> + </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>ЗаполнитьВариантыОтветовОтветыВКолонках</name> diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl index d66e4dfd6..78dec455f 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Module.bsl @@ -1,470 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ - -&НаКлиенте -Процедура УстановитьИнформационныеНадписи() - - ТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница; - - Если ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица Тогда - ИнформацияШапка = НСтр("ru='Результирующая таблица:'"); - ИнформацияПодвал = НСтр("ru='Нажмите Готово для окончания редактирования.'"); - Элементы.КнопкаВперед.Заголовок = НСтр("ru='Готово'"); - Иначе - Элементы.КнопкаВперед.Заголовок = НСтр("ru='Далее>>'"); - Если ТекущаяСтраница = Элементы.СтраницаВопросы Тогда - Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда - ИнформацияШапка = НСтр("ru='Подбор вопросов. Укажите хотя бы один вопрос:'"); - ИнформацияПодвал = НСтр("ru='Нажмите Далее для просмотра получившейся таблицы.'"); - ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда - ИнформацияШапка =НСтр("ru='Подбор вопросов. Укажите три вопроса:'"); - ИнформацияПодвал =НСтр("ru='Нажмите Далее для подбора предопределенных ответов.'"); - Иначе - ИнформацияШапка =НСтр("ru='Подбор вопросов. Укажите как минимум два вопроса:'"); - ИнформацияПодвал =НСтр("ru='Нажмите Далее для подбора предопределенных ответов.'"); - КонецЕсли; - ИначеЕсли ТекущаяСтраница = Элементы.СтраницаТипТабличногоВопроса Тогда - ИнформацияШапка = НСтр("ru='Выбор типа табличного вопроса:'"); - ИнформацияПодвал = НСтр("ru='Нажмите Далее для подбора вопросов:'"); - Иначе - ИнформацияШапка = НСтр("ru='Подбор предопределенных ответов:'"); - ИнформацияПодвал = НСтр("ru='Нажмите Далее для просмотра получившейся таблицы:'"); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры -// Управляет доступностью реквизитов формы -&НаКлиенте -Процедура УправлениеДоступностью() - - ТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница; - - Элементы.КнопкаНазад.Доступность = (НЕ ТекущаяСтраница = Элементы.СтраницаТипТабличногоВопроса); - - Если ТекущаяСтраница = Элементы.СтраницаПредопределенныеОтветыВСтрокахИКолонках Тогда - - Если НЕ ВсеОтветыЗаполнены() Тогда - Элементы.КнопкаВперед.Доступность = Ложь; - Возврат; - КонецЕсли; - - Элементы.ЗаполнитьКолонкиВариантыОтветовОтветыСтрокахИКолонках.Доступность = (Вопросы[1].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") - Или Вопросы[1].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз")); - - Элементы.ЗаполнитьСтрокиВариантыОтветовОтветыСтрокиИКолонки.Доступность = (Вопросы[0].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") - Или Вопросы[0].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз")); - - Если Ответы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",ВопросДляКолонок)).Количество() > 0 - И Ответы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",ВопросДляСтрок)).Количество() > 0 Тогда - - Элементы.КнопкаВперед.Доступность = Истина; - - Иначе - - Элементы.КнопкаВперед.Доступность = Ложь; - - КонецЕсли; - - ИначеЕсли ТекущаяСтраница = Элементы.СтраницаПредопределенныеОтветыВСтроках Тогда - - Элементы.ЗаполнитьВариантыОтветовОтветыСтроки.Доступность = (Вопросы[0].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") - Или Вопросы[0].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз")); - - Если НЕ ВсеОтветыЗаполнены() Тогда - Элементы.КнопкаВперед.Доступность = Ложь; - Возврат; - КонецЕсли; - - Элементы.КнопкаВперед.Доступность = (Ответы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",ВопросДляСтрок)).Количество() > 0); - - ИначеЕсли ТекущаяСтраница = Элементы.СтраницаПредопределенныеОтветыВКолонках Тогда - - Элементы.ЗаполнитьВариантыОтветовОтветыКолонки.Доступность = (Вопросы[0].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") - Или Вопросы[0].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз")); - - Если НЕ ВсеОтветыЗаполнены() Тогда - Элементы.КнопкаВперед.Доступность = Ложь; - Возврат; - КонецЕсли; - - Элементы.КнопкаВперед.Доступность = (Ответы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",ВопросДляКолонок)).Количество() > 0); - - ИначеЕсли ТекущаяСтраница = Элементы.СтраницаТипТабличногоВопроса Тогда - - Элементы.КнопкаВперед.Доступность = ТипТабличногоВопроса <> ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПустаяСсылка"); - - Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда - - Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаСоставной; - - ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках") Тогда - - Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаОтветыВСтроках; - - ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках") Тогда - - Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаОтветыВКолонках; - - ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда - - Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаОтветыВСтрокахИКолонках; - - Иначе - - Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаПустая; - - КонецЕсли; - - ИначеЕсли ТекущаяСтраница = Элементы.СтраницаВопросы Тогда - - Если Вопросы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",ПредопределенноеЗначение("ПланВидовХарактеристик.ВопросыДляАнкетирования.ПустаяСсылка"))).Количество() <> 0 Тогда - Элементы.КнопкаВперед.Доступность = Ложь; - Возврат; - КонецЕсли; - - Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда - - Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() > 0); - - ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках") Тогда - - Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() > 1); - - ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках") Тогда - - Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() > 1); - - ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда - - Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() = 3); - - КонецЕсли; - - ИначеЕсли ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица Тогда - - Элементы.КнопкаВперед.Доступность = ЗначениеЗаполнено(Формулировка); - - КонецЕсли; - -КонецПроцедуры // УправлениеДоступностью() - -// Проверяет, все ли ответы заполнены -// -// Возвращаемое значение: -// Булево - Истина если все ответы заполнены -// -&НаКлиенте -Функция ВсеОтветыЗаполнены() - - Для каждого Ответ Из Ответы Цикл - - Если НЕ ЗначениеЗаполнено(Ответ.Ответ) Тогда - Возврат Ложь; - КонецЕсли; - - КонецЦикла; - - Возврат Истина; - -КонецФункции // () - - -// Процедура обрабатывает начало выбора из списков, и устанавливает отборы в формах выбора -&НаКлиенте -Процедура НачалоВыбораСписков(Элемент,СтандартнаяОбработка,ОписаниеДоступныхТипов) - - Если ТипЗнч(ЭтаФорма[Элемент.СвязьПоТипу.ПутьКДанным]) = Тип("ПланВидовХарактеристикСсылка.ВопросыДляАнкетирования") Тогда - - Если ОписаниеДоступныхТипов.СодержитТип(Тип("СправочникСсылка.ВариантыОтветовАнкет")) И (ОписаниеДоступныхТипов.Типы().Количество() = 1 ) Тогда - - СтандартнаяОбработка = ЛОЖЬ; - - МассивОтбора = Новый Массив; - МассивОтбора.Добавить(АнкетированиеКлиент.СоздатьСтруктуруПараметраОтбора(Тип("ЭлементОтбораКомпоновкиДанных"),"Владелец",ВидСравненияКомпоновкиДанных.Равно,ЭтаФорма[Элемент.СвязьПоТипу.ПутьКДанным])); - МассивОтбора.Добавить(АнкетированиеКлиент.СоздатьСтруктуруПараметраОтбора(Тип("ЭлементОтбораКомпоновкиДанных"),"ПометкаУдаления",ВидСравненияКомпоновкиДанных.Равно,ЛОЖЬ)); - - ОткрытьФорму("Справочник.ВариантыОтветовАнкет.Форма.ФормаВыбора",Новый Структура("МассивОтбора",МассивОтбора),Элемент); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры // () - -// Процедура очищает таблицу ответов, от ответов, родительский вопрос которых -// не входит в МассивВопросов, выступающий в качестве параметра -&НаКлиенте -Процедура ОчиститьСписокОтветовЕслиНеобходимо(МассивВопросов) - - УдаляемыеОтветы = Новый Массив; - - Для каждого Ответ Из Ответы Цикл - - Если МассивВопросов.Найти(Ответ.ЭлементарныйВопрос) = Неопределено Тогда - УдаляемыеОтветы.Добавить(Ответ); - КонецЕсли; - - КонецЦикла; - - Для каждого УдаляемыйОтвет Из УдаляемыеОтветы Цикл - Ответы.Удалить(УдаляемыйОтвет); - КонецЦикла; - -КонецПроцедуры // ОчиститьПодчиненныйСписокЕслиНеобходимо() - - // Устанавливает нужную страницу формирвания структуры табличного вопроса в зависимости от - // выбранного типа табличного вопроса -&НаКлиенте -Процедура УстановитьСтраницуОтветы() - - - МассивВопросовДляКоторыйДолжныБытьОтветы = Новый Массив; - - Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда - - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПредопределенныеОтветыВСтрокахИКолонках; - ПредставлениеВопросаДляСтрок = Вопросы[0].Формулировка; - ВопросДляСтрок = Вопросы[0].ЭлементарныйВопрос; - ПредставлениеВопросаДляКолонок = Вопросы[1].Формулировка; - ВопросДляКолонок = Вопросы[1].ЭлементарныйВопрос; - - МассивВопросовДляКоторыйДолжныБытьОтветы.Добавить(ВопросДляСтрок); - МассивВопросовДляКоторыйДолжныБытьОтветы.Добавить(ВопросДляКолонок); - - ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках") Тогда - - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПредопределенныеОтветыВСтроках; - ПредставлениеВопросаДляСтрок = Вопросы[0].Формулировка; - ВопросДляСтрок = Вопросы[0].ЭлементарныйВопрос; - - МассивВопросовДляКоторыйДолжныБытьОтветы.Добавить(ВопросДляСтрок); - - ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках") Тогда - - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПредопределенныеОтветыВКолонках; - ПредставлениеВопросаДляКолонок = Вопросы[0].Формулировка; - ВопросДляКолонок = Вопросы[0].ЭлементарныйВопрос; - - МассивВопросовДляКоторыйДолжныБытьОтветы.Добавить(ВопросДляКолонок); - - КонецЕсли; - - ОчиститьСписокОтветовЕслиНеобходимо(МассивВопросовДляКоторыйДолжныБытьОтветы); - УстановитьОтборы(); - -КонецПроцедуры // () - -// Формирует результирующую таблицу вопроса -&НаСервере -Процедура СформироватьРезультирующуюТаблицу() - - Анкетирование.ОбновитьПревьюТабличныйВопрос(РеквизитФормыВЗначение("Вопросы"),Ответы,ТипТабличногоВопроса,ЭтаФорма,"РезультирующаяТаблица",""); - -КонецПроцедуры // () - -// Формирует структуру возврата для передачи в форму владельца -&НаКлиенте -Функция СформироватьСтруктуруПараметровДляПередачиВладельцу() - - СтруктураПараметров = Новый Структура; - СтруктураПараметров.Вставить("ТипТабличногоВопроса",ТипТабличногоВопроса); - - ВопросыКВозврату = Новый Массив; - Для каждого СтрокаТаблицы Из Вопросы Цикл - ВопросыКВозврату.Добавить(СтрокаТаблицы.ЭлементарныйВопрос); - КонецЦикла; - СтруктураПараметров.Вставить("Вопросы",ВопросыКВозврату); - СтруктураПараметров.Вставить("Ответы" ,Ответы); - СтруктураПараметров.Вставить("Формулировка",Формулировка); - - Возврат СтруктураПараметров; - -КонецФункции // () - -// Обрабатывает параметры формы владельца -// -&НаСервере -Процедура ОбработатьПараметрыФормыВладельца() - - Формулировка = Параметры.Формулировка; - - Если НЕ Параметры.ТипТабличногоВопроса.Пустая() Тогда - ТипТабличногоВопроса = Параметры.ТипТабличногоВопроса; - Иначе - ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.Составной; - Возврат; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ - | Вопросы.ЭлементарныйВопрос, - | Вопросы.НомерСтроки - |ПОМЕСТИТЬ ЭлементарныеВопросы - |ИЗ - | &Вопросы КАК Вопросы - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ЭлементарныеВопросы.ЭлементарныйВопрос КАК ЭлементарныйВопрос, - | ЕСТЬNULL(ВопросыДляАнкетирования.Представление, """""""") КАК Представление, - | ЕСТЬNULL(ВопросыДляАнкетирования.Формулировка, """""""") КАК Формулировка, - | ЕСТЬNULL(ВопросыДляАнкетирования.ТипОтвета, """") КАК ТипОтвета - |ИЗ - | ЭлементарныеВопросы КАК ЭлементарныеВопросы - | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования - | ПО ЭлементарныеВопросы.ЭлементарныйВопрос = ВопросыДляАнкетирования.Ссылка - | - |УПОРЯДОЧИТЬ ПО - | ЭлементарныеВопросы.НомерСтроки"; - - Запрос.УстановитьПараметр("Вопросы",Параметры.СоставТабличногоВопроса.Выгрузить()); - - Результат = Запрос.Выполнить(); - Если НЕ Результат.Пустой() Тогда; - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - - НоваяСтрока = Вопросы.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока,Выборка); - - КонецЦикла; - КонецЕсли; - - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Параметры.ПредопределенныеОтветы,Ответы); - -КонецПроцедуры // ОбработатьПараметрыФормыВладельца() - -// Устанавливает отборы в элементы форм, предназначенные для -// составления списка предопределенных ответов -&НаКлиенте -Процедура УстановитьОтборы() - - Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда - - Элементы.ОтветыКолонкиОтветыВСтрокахИКолонках.ОтборСтрок = Новый ФиксированнаяСтруктура("ЭлементарныйВопрос",ВопросДляКолонок); - Элементы.ОтветыСтрокиОтветыВСтрокахИКолонках.ОтборСтрок = Новый ФиксированнаяСтруктура("ЭлементарныйВопрос",ВопросДляСтрок); - - ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках") Тогда - - Элементы.ОтветыСтрокиОтветыВСтроках.ОтборСтрок = Новый ФиксированнаяСтруктура("ЭлементарныйВопрос",ВопросДляСтрок); - - ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках") Тогда - - Элементы.ОтветыКолонкиОтветыВКолонках.ОтборСтрок = Новый ФиксированнаяСтруктура("ЭлементарныйВопрос",ВопросДляКолонок); - - КонецЕсли; - -КонецПроцедуры // УстановитьОтборы() - -// Вызывается при изменении элементов форма, связанных с таблицей ответов -// Параметры -// Элемент - ТаблицаФормы - ЭлементКоторыйВызвал изменение -&НаКлиенте -Процедура ПриИзмененииОтветов(Элемент) - - УправлениеДоступностью(); - УстановитьОтборы(); - Элемент.Обновить(); - -КонецПроцедуры // () - -&НаКлиенте -Процедура ОбработатьЭлементПодбораОтветовПослеДобавления(Элемент,ДобавленнаяСтрока) - - УстановитьОтборы(); - Элемент.Обновить(); - УправлениеДоступностью(); - Элемент.ТекущаяСтрока = ДобавленнаяСтрока.ПолучитьИдентификатор(); - Элемент.ИзменитьСтроку(); - -КонецПроцедуры // - -&НаКлиенте -Функция ДобавлениеОтветаИнтерактивно(Элемент,Копирование,НомерОпорногоВопроса) - - Если Копирование Тогда - - НоваяСтрока = Ответы.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока,Элемент.ТекущиеДанные); - - Иначе - - Если Вопросы.Количество() >= НомерОпорногоВопроса+1 Тогда - - НоваяСтрока = Ответы.Добавить(); - НоваяСтрока.ЭлементарныйВопрос = Вопросы[НомерОпорногоВопроса].ЭлементарныйВопрос; - - Иначе - Возврат Неопределено; - КонецЕсли; - - КонецЕсли; - - - Возврат НоваяСтрока; - -КонецФункции - -&НаКлиенте -Процедура ЗакончитьРедактированиеИЗакрыть() - - Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда - Ответы.Очистить(); - КонецЕсли; - - Оповестить("ОкончаниеРедактированияПараметровТабличногоВопроса",СформироватьСтруктуруПараметровДляПередачиВладельцу()); - Закрыть(); - -КонецПроцедуры - -// Очищает ответы и заполняет их вариантами ответов -// -// Параметры -// ЭлементарныйВопрос - ПланВидовХарактеристик.ВопросыДляАнкетирования - вопрос для которого будут заполнены его варианты ответов -// -&НаСервере -Процедура ОчиститьЗаполнитьВариантыОтветов(ЭлементарныйВопрос) - - Если Не ЗначениеЗаполнено(ЭлементарныйВопрос) Тогда - Возврат; - КонецЕсли; - - НайденныеСтроки = Ответы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",ЭлементарныйВопрос)); - Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл - Ответы.Удалить(Ответы.Индекс(НайденнаяСтрока)); - КонецЦикла; - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ВариантыОтветовАнкет.Ссылка КАК Ответ - |ИЗ - | Справочник.ВариантыОтветовАнкет КАК ВариантыОтветовАнкет - |ГДЕ - | ВариантыОтветовАнкет.Владелец = &ЭлементарныйВопрос - | И (НЕ ВариантыОтветовАнкет.ПометкаУдаления) - | - |УПОРЯДОЧИТЬ ПО - | ВариантыОтветовАнкет.РеквизитДопУпорядочивания"; - - Запрос.УстановитьПараметр("ЭлементарныйВопрос",ЭлементарныйВопрос); - - Результат = Запрос.Выполнить(); - Если Не Результат.Пустой() Тогда - - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - НоваяСтрока = Ответы.Добавить(); - НоваяСтрока.ЭлементарныйВопрос = ЭлементарныйВопрос; - НоваяСтрока.Ответ = Выборка.Ответ; - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры // () - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаКлиенте Процедура ПриОткрытии(Отказ) @@ -496,118 +31,40 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте -Процедура СледующаяСтраница(Команда) - - ТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница; - - Если ТекущаяСтраница = Элементы.СтраницаТипТабличногоВопроса Тогда - - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВопросы; - - ИначеЕсли (ТекущаяСтраница = Элементы.СтраницаВопросы) И (ТипТабличногоВопроса <> ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной")) Тогда - - УстановитьСтраницуОтветы(); - - ИначеЕсли ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица Тогда - - ЗакончитьРедактированиеИЗакрыть(); - - Иначе - - СформироватьРезультирующуюТаблицу(); - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица; - - КонецЕсли; - - УправлениеДоступностью(); - УстановитьИнформационныеНадписи(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПредыдущаяСтраница(Команда) - - Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица Тогда - - Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВопросы; - Иначе - УстановитьСтраницуОтветы(); - КонецЕсли; - - ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВопросы Тогда - - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаТипТабличногоВопроса; - - Иначе - - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВопросы; - - КонецЕсли; - - УправлениеДоступностью(); - УстановитьИнформационныеНадписи(); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаполнитьВариантыОтветовОтветыВСтроках(Команда) - - ОчиститьЗаполнитьВариантыОтветов(ВопросДляСтрок); - УстановитьОтборы(); - УправлениеДоступностью(); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаполнитьВариантыОтветовОтветыВКолонках(Команда) - - ОчиститьЗаполнитьВариантыОтветов(ВопросДляКолонок); - УстановитьОтборы(); - УправлениеДоступностью(); - -КонецПроцедуры - -////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте Процедура ТипТабличногоВопросаПриИзменении(Элемент) УправлениеДоступностью(); КонецПроцедуры -////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ &НаКлиенте Процедура ВопросыВопросОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Если ВыбранноеЗначение = Неопределено Тогда - Возврат; + Возврат; КонецЕсли; РеквизитыВопрос = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ВыбранноеЗначение,"Представление,Формулировка,ЭтоГруппа,ТипОтвета"); - Если РеквизитыВопрос.ЭтоГруппа Тогда - Возврат; + Если РеквизитыВопрос.ЭтоГруппа Тогда + Возврат; КонецЕсли; - + ТекЭлемент = Вопросы.НайтиПоИдентификатору(Элементы.Вопросы.ТекущаяСтрока); ТекЭлемент.ЭлементарныйВопрос = ВыбранноеЗначение; - ТекЭлемент.Представление = РеквизитыВопрос.Представление; - ТекЭлемент.Формулировка = РеквизитыВопрос.Формулировка; - ТекЭлемент.ТипОтвета = РеквизитыВопрос.ТипОтвета; + ТекЭлемент.Представление = РеквизитыВопрос.Представление; + ТекЭлемент.Формулировка = РеквизитыВопрос.Формулировка; + ТекЭлемент.ТипОтвета = РеквизитыВопрос.ТипОтвета; УправлениеДоступностью(); КонецПроцедуры - + &НаКлиенте Процедура ОтветыСтрокиОтветыВСтрокахПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) @@ -645,7 +102,7 @@ &НаКлиенте Процедура ОтветыСтрокиОтветыВСтрокахИКолонкахОтветНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - НачалоВыбораСписков(Элемент,СтандартнаяОбработка,ОбщегоНазначения.ПолучитьЗначениеРеквизита(ВопросДляСтрок,"ТипЗначения")); + НачалоВыбораСписков(Элемент,СтандартнаяОбработка,ОбщегоНазначения.ПолучитьЗначениеРеквизита(ВопросДляСтрок,"ТипЗначения")); КонецПроцедуры @@ -675,7 +132,7 @@ ОбработатьЭлементПодбораОтветовПослеДобавления(Элемент,НоваяСтрока); КонецПроцедуры - + &НаКлиенте Процедура ВопросыПриИзменении(Элемент) @@ -710,16 +167,558 @@ ПриИзмененииОтветов(Элемент); КонецПроцедуры - + &НаКлиенте Процедура ФормулировкаПриИзменении(Элемент) - Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица Тогда + Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица Тогда - Элементы.КнопкаВперед.Доступность = ЗначениеЗаполнено(Формулировка); + Элементы.КнопкаВперед.Доступность = ЗначениеЗаполнено(Формулировка); КонецЕсли; КонецПроцедуры - \ No newline at end of file +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ <ИМЯ ТАБЛИЦЫ ФОРМЫ> + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура СледующаяСтраница(Команда) + + ТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница; + + Если ТекущаяСтраница = Элементы.СтраницаТипТабличногоВопроса Тогда + + Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВопросы; + + ИначеЕсли (ТекущаяСтраница = Элементы.СтраницаВопросы) И (ТипТабличногоВопроса <> ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной")) Тогда + + УстановитьСтраницуОтветы(); + + ИначеЕсли ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица Тогда + + ЗакончитьРедактированиеИЗакрыть(); + + Иначе + + СформироватьРезультирующуюТаблицу(); + Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица; + + КонецЕсли; + + УправлениеДоступностью(); + УстановитьИнформационныеНадписи(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПредыдущаяСтраница(Команда) + + Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица Тогда + + Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда + Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВопросы; + Иначе + УстановитьСтраницуОтветы(); + КонецЕсли; + + ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВопросы Тогда + + Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаТипТабличногоВопроса; + + Иначе + + Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВопросы; + + КонецЕсли; + + УправлениеДоступностью(); + УстановитьИнформационныеНадписи(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьВариантыОтветовОтветыВСтроках(Команда) + + ОчиститьЗаполнитьВариантыОтветов(ВопросДляСтрок); + УстановитьОтборы(); + УправлениеДоступностью(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьВариантыОтветовОтветыВКолонках(Команда) + + ОчиститьЗаполнитьВариантыОтветов(ВопросДляКолонок); + УстановитьОтборы(); + УправлениеДоступностью(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура УстановитьИнформационныеНадписи() + + ТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница; + + Если ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица Тогда + ИнформацияШапка = НСтр("ru='Результирующая таблица:'"); + ИнформацияПодвал = НСтр("ru='Нажмите Готово для окончания редактирования.'"); + Элементы.КнопкаВперед.Заголовок = НСтр("ru='Готово'"); + Иначе + Элементы.КнопкаВперед.Заголовок = НСтр("ru='Далее>>'"); + Если ТекущаяСтраница = Элементы.СтраницаВопросы Тогда + Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда + ИнформацияШапка = НСтр("ru='Подбор вопросов. Укажите хотя бы один вопрос:'"); + ИнформацияПодвал = НСтр("ru='Нажмите Далее для просмотра получившейся таблицы.'"); + ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда + ИнформацияШапка =НСтр("ru='Подбор вопросов. Укажите три вопроса:'"); + ИнформацияПодвал =НСтр("ru='Нажмите Далее для подбора предопределенных ответов.'"); + Иначе + ИнформацияШапка =НСтр("ru='Подбор вопросов. Укажите как минимум два вопроса:'"); + ИнформацияПодвал =НСтр("ru='Нажмите Далее для подбора предопределенных ответов.'"); + КонецЕсли; + ИначеЕсли ТекущаяСтраница = Элементы.СтраницаТипТабличногоВопроса Тогда + ИнформацияШапка = НСтр("ru='Выбор типа табличного вопроса:'"); + ИнформацияПодвал = НСтр("ru='Нажмите Далее для подбора вопросов:'"); + Иначе + ИнформацияШапка = НСтр("ru='Подбор предопределенных ответов:'"); + ИнформацияПодвал = НСтр("ru='Нажмите Далее для просмотра получившейся таблицы:'"); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Управляет доступностью реквизитов формы +&НаКлиенте +Процедура УправлениеДоступностью() + + ТекущаяСтраница = Элементы.Страницы.ТекущаяСтраница; + + Элементы.КнопкаНазад.Доступность = (НЕ ТекущаяСтраница = Элементы.СтраницаТипТабличногоВопроса); + + Если ТекущаяСтраница = Элементы.СтраницаПредопределенныеОтветыВСтрокахИКолонках Тогда + + Если НЕ ВсеОтветыЗаполнены() Тогда + Элементы.КнопкаВперед.Доступность = Ложь; + Возврат; + КонецЕсли; + + Элементы.ЗаполнитьКолонкиВариантыОтветовОтветыСтрокахИКолонках.Доступность = (Вопросы[1].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") + Или Вопросы[1].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз")); + + Элементы.ЗаполнитьСтрокиВариантыОтветовОтветыСтрокиИКолонки.Доступность = (Вопросы[0].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") + Или Вопросы[0].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз")); + + Если Ответы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",ВопросДляКолонок)).Количество() > 0 + И Ответы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",ВопросДляСтрок)).Количество() > 0 Тогда + + Элементы.КнопкаВперед.Доступность = Истина; + + Иначе + + Элементы.КнопкаВперед.Доступность = Ложь; + + КонецЕсли; + + ИначеЕсли ТекущаяСтраница = Элементы.СтраницаПредопределенныеОтветыВСтроках Тогда + + Элементы.ЗаполнитьВариантыОтветовОтветыСтроки.Доступность = (Вопросы[0].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") + Или Вопросы[0].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз")); + + Если НЕ ВсеОтветыЗаполнены() Тогда + Элементы.КнопкаВперед.Доступность = Ложь; + Возврат; + КонецЕсли; + + Элементы.КнопкаВперед.Доступность = (Ответы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",ВопросДляСтрок)).Количество() > 0); + + ИначеЕсли ТекущаяСтраница = Элементы.СтраницаПредопределенныеОтветыВКолонках Тогда + + Элементы.ЗаполнитьВариантыОтветовОтветыКолонки.Доступность = (Вопросы[0].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") + Или Вопросы[0].ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз")); + + Если НЕ ВсеОтветыЗаполнены() Тогда + Элементы.КнопкаВперед.Доступность = Ложь; + Возврат; + КонецЕсли; + + Элементы.КнопкаВперед.Доступность = (Ответы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",ВопросДляКолонок)).Количество() > 0); + + ИначеЕсли ТекущаяСтраница = Элементы.СтраницаТипТабличногоВопроса Тогда + + Элементы.КнопкаВперед.Доступность = ТипТабличногоВопроса <> ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПустаяСсылка"); + + Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда + + Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаСоставной; + + ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках") Тогда + + Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаОтветыВСтроках; + + ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках") Тогда + + Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаОтветыВКолонках; + + ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда + + Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаОтветыВСтрокахИКолонках; + + Иначе + + Элементы.СтраницыТипТабличногоВопросаКартинки.ТекущаяСтраница = Элементы.СтраницаКартинкаПустая; + + КонецЕсли; + + ИначеЕсли ТекущаяСтраница = Элементы.СтраницаВопросы Тогда + + Если Вопросы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",ПредопределенноеЗначение("ПланВидовХарактеристик.ВопросыДляАнкетирования.ПустаяСсылка"))).Количество() <> 0 Тогда + Элементы.КнопкаВперед.Доступность = Ложь; + Возврат; + КонецЕсли; + + Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда + + Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() > 0); + + ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках") Тогда + + Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() > 1); + + ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках") Тогда + + Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() > 1); + + ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда + + Элементы.КнопкаВперед.Доступность = (Вопросы.Количество() = 3); + + КонецЕсли; + + ИначеЕсли ТекущаяСтраница = Элементы.СтраницаРезультирующаяТаблица Тогда + + Элементы.КнопкаВперед.Доступность = ЗначениеЗаполнено(Формулировка); + + КонецЕсли; + +КонецПроцедуры + +// Проверяет, все ли ответы заполнены +// +// Возвращаемое значение: +// Булево - Истина если все ответы заполнены +// +&НаКлиенте +Функция ВсеОтветыЗаполнены() + + Для каждого Ответ Из Ответы Цикл + + Если НЕ ЗначениеЗаполнено(Ответ.Ответ) Тогда + Возврат Ложь; + КонецЕсли; + + КонецЦикла; + + Возврат Истина; + +КонецФункции + +// Процедура обрабатывает начало выбора из списков, и устанавливает отборы в формах выбора +&НаКлиенте +Процедура НачалоВыбораСписков(Элемент,СтандартнаяОбработка,ОписаниеДоступныхТипов) + + Если ТипЗнч(ЭтаФорма[Элемент.СвязьПоТипу.ПутьКДанным]) = Тип("ПланВидовХарактеристикСсылка.ВопросыДляАнкетирования") Тогда + + Если ОписаниеДоступныхТипов.СодержитТип(Тип("СправочникСсылка.ВариантыОтветовАнкет")) И (ОписаниеДоступныхТипов.Типы().Количество() = 1 ) Тогда + + СтандартнаяОбработка = ЛОЖЬ; + + МассивОтбора = Новый Массив; + МассивОтбора.Добавить(АнкетированиеКлиент.СоздатьСтруктуруПараметраОтбора(Тип("ЭлементОтбораКомпоновкиДанных"),"Владелец",ВидСравненияКомпоновкиДанных.Равно,ЭтаФорма[Элемент.СвязьПоТипу.ПутьКДанным])); + МассивОтбора.Добавить(АнкетированиеКлиент.СоздатьСтруктуруПараметраОтбора(Тип("ЭлементОтбораКомпоновкиДанных"),"ПометкаУдаления",ВидСравненияКомпоновкиДанных.Равно,ЛОЖЬ)); + + ОткрытьФорму("Справочник.ВариантыОтветовАнкет.Форма.ФормаВыбора",Новый Структура("МассивОтбора",МассивОтбора),Элемент); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Процедура очищает таблицу ответов, от ответов, родительский вопрос которых +// не входит в МассивВопросов, выступающий в качестве параметра +&НаКлиенте +Процедура ОчиститьСписокОтветовЕслиНеобходимо(МассивВопросов) + + УдаляемыеОтветы = Новый Массив; + + Для каждого Ответ Из Ответы Цикл + + Если МассивВопросов.Найти(Ответ.ЭлементарныйВопрос) = Неопределено Тогда + УдаляемыеОтветы.Добавить(Ответ); + КонецЕсли; + + КонецЦикла; + + Для каждого УдаляемыйОтвет Из УдаляемыеОтветы Цикл + Ответы.Удалить(УдаляемыйОтвет); + КонецЦикла; + +КонецПроцедуры + +// Устанавливает нужную страницу формирвания структуры табличного вопроса в зависимости от +// выбранного типа табличного вопроса +&НаКлиенте +Процедура УстановитьСтраницуОтветы() + + + МассивВопросовДляКоторыйДолжныБытьОтветы = Новый Массив; + + Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда + + Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПредопределенныеОтветыВСтрокахИКолонках; + ПредставлениеВопросаДляСтрок = Вопросы[0].Формулировка; + ВопросДляСтрок = Вопросы[0].ЭлементарныйВопрос; + ПредставлениеВопросаДляКолонок = Вопросы[1].Формулировка; + ВопросДляКолонок = Вопросы[1].ЭлементарныйВопрос; + + МассивВопросовДляКоторыйДолжныБытьОтветы.Добавить(ВопросДляСтрок); + МассивВопросовДляКоторыйДолжныБытьОтветы.Добавить(ВопросДляКолонок); + + ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках") Тогда + + Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПредопределенныеОтветыВСтроках; + ПредставлениеВопросаДляСтрок = Вопросы[0].Формулировка; + ВопросДляСтрок = Вопросы[0].ЭлементарныйВопрос; + + МассивВопросовДляКоторыйДолжныБытьОтветы.Добавить(ВопросДляСтрок); + + ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках") Тогда + + Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПредопределенныеОтветыВКолонках; + ПредставлениеВопросаДляКолонок = Вопросы[0].Формулировка; + ВопросДляКолонок = Вопросы[0].ЭлементарныйВопрос; + + МассивВопросовДляКоторыйДолжныБытьОтветы.Добавить(ВопросДляКолонок); + + КонецЕсли; + + ОчиститьСписокОтветовЕслиНеобходимо(МассивВопросовДляКоторыйДолжныБытьОтветы); + УстановитьОтборы(); + +КонецПроцедуры + +// Формирует результирующую таблицу вопроса +&НаСервере +Процедура СформироватьРезультирующуюТаблицу() + + Анкетирование.ОбновитьПревьюТабличныйВопрос(РеквизитФормыВЗначение("Вопросы"),Ответы,ТипТабличногоВопроса,ЭтаФорма,"РезультирующаяТаблица",""); + +КонецПроцедуры + +// Формирует структуру возврата для передачи в форму владельца +&НаКлиенте +Функция СформироватьСтруктуруПараметровДляПередачиВладельцу() + + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("ТипТабличногоВопроса",ТипТабличногоВопроса); + + ВопросыКВозврату = Новый Массив; + Для каждого СтрокаТаблицы Из Вопросы Цикл + ВопросыКВозврату.Добавить(СтрокаТаблицы.ЭлементарныйВопрос); + КонецЦикла; + СтруктураПараметров.Вставить("Вопросы",ВопросыКВозврату); + СтруктураПараметров.Вставить("Ответы" ,Ответы); + СтруктураПараметров.Вставить("Формулировка",Формулировка); + + Возврат СтруктураПараметров; + +КонецФункции + +// Обрабатывает параметры формы владельца +// +&НаСервере +Процедура ОбработатьПараметрыФормыВладельца() + + Формулировка = Параметры.Формулировка; + + Если НЕ Параметры.ТипТабличногоВопроса.Пустая() Тогда + ТипТабличногоВопроса = Параметры.ТипТабличногоВопроса; + Иначе + ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.Составной; + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ + | Вопросы.ЭлементарныйВопрос, + | Вопросы.НомерСтроки + |ПОМЕСТИТЬ ЭлементарныеВопросы + |ИЗ + | &Вопросы КАК Вопросы + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ЭлементарныеВопросы.ЭлементарныйВопрос КАК ЭлементарныйВопрос, + | ЕСТЬNULL(ВопросыДляАнкетирования.Представление, """""""") КАК Представление, + | ЕСТЬNULL(ВопросыДляАнкетирования.Формулировка, """""""") КАК Формулировка, + | ЕСТЬNULL(ВопросыДляАнкетирования.ТипОтвета, """") КАК ТипОтвета + |ИЗ + | ЭлементарныеВопросы КАК ЭлементарныеВопросы + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования + | ПО ЭлементарныеВопросы.ЭлементарныйВопрос = ВопросыДляАнкетирования.Ссылка + | + |УПОРЯДОЧИТЬ ПО + | ЭлементарныеВопросы.НомерСтроки"; + + Запрос.УстановитьПараметр("Вопросы",Параметры.СоставТабличногоВопроса.Выгрузить()); + + Результат = Запрос.Выполнить(); + Если НЕ Результат.Пустой() Тогда; + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + + НоваяСтрока = Вопросы.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока,Выборка); + + КонецЦикла; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Параметры.ПредопределенныеОтветы,Ответы); + +КонецПроцедуры + +// Устанавливает отборы в элементы форм, предназначенные для +// составления списка предопределенных ответов +&НаКлиенте +Процедура УстановитьОтборы() + + Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках") Тогда + + Элементы.ОтветыКолонкиОтветыВСтрокахИКолонках.ОтборСтрок = Новый ФиксированнаяСтруктура("ЭлементарныйВопрос",ВопросДляКолонок); + Элементы.ОтветыСтрокиОтветыВСтрокахИКолонках.ОтборСтрок = Новый ФиксированнаяСтруктура("ЭлементарныйВопрос",ВопросДляСтрок); + + ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках") Тогда + + Элементы.ОтветыСтрокиОтветыВСтроках.ОтборСтрок = Новый ФиксированнаяСтруктура("ЭлементарныйВопрос",ВопросДляСтрок); + + ИначеЕсли ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках") Тогда + + Элементы.ОтветыКолонкиОтветыВКолонках.ОтборСтрок = Новый ФиксированнаяСтруктура("ЭлементарныйВопрос",ВопросДляКолонок); + + КонецЕсли; + +КонецПроцедуры + +// Вызывается при изменении элементов форма, связанных с таблицей ответов +// Параметры +// Элемент - ТаблицаФормы - ЭлементКоторыйВызвал изменение +&НаКлиенте +Процедура ПриИзмененииОтветов(Элемент) + + УправлениеДоступностью(); + УстановитьОтборы(); + Элемент.Обновить(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьЭлементПодбораОтветовПослеДобавления(Элемент,ДобавленнаяСтрока) + + УстановитьОтборы(); + Элемент.Обновить(); + УправлениеДоступностью(); + Элемент.ТекущаяСтрока = ДобавленнаяСтрока.ПолучитьИдентификатор(); + Элемент.ИзменитьСтроку(); + +КонецПроцедуры + +&НаКлиенте +Функция ДобавлениеОтветаИнтерактивно(Элемент,Копирование,НомерОпорногоВопроса) + + Если Копирование Тогда + + НоваяСтрока = Ответы.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока,Элемент.ТекущиеДанные); + + Иначе + + Если Вопросы.Количество() >= НомерОпорногоВопроса+1 Тогда + + НоваяСтрока = Ответы.Добавить(); + НоваяСтрока.ЭлементарныйВопрос = Вопросы[НомерОпорногоВопроса].ЭлементарныйВопрос; + + Иначе + Возврат Неопределено; + КонецЕсли; + + КонецЕсли; + + Возврат НоваяСтрока; + +КонецФункции + +&НаКлиенте +Процедура ЗакончитьРедактированиеИЗакрыть() + + Если ТипТабличногоВопроса = ПредопределенноеЗначение("Перечисление.ТипыТабличныхВопросов.Составной") Тогда + Ответы.Очистить(); + КонецЕсли; + + Оповестить("ОкончаниеРедактированияПараметровТабличногоВопроса",СформироватьСтруктуруПараметровДляПередачиВладельцу()); + Закрыть(); + +КонецПроцедуры + +// Очищает ответы и заполняет их вариантами ответов +// +// Параметры +// ЭлементарныйВопрос - ПланВидовХарактеристик.ВопросыДляАнкетирования - вопрос для которого будут заполнены его варианты ответов +// +&НаСервере +Процедура ОчиститьЗаполнитьВариантыОтветов(ЭлементарныйВопрос) + + Если Не ЗначениеЗаполнено(ЭлементарныйВопрос) Тогда + Возврат; + КонецЕсли; + + НайденныеСтроки = Ответы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",ЭлементарныйВопрос)); + Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл + Ответы.Удалить(Ответы.Индекс(НайденнаяСтрока)); + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ВариантыОтветовАнкет.Ссылка КАК Ответ + |ИЗ + | Справочник.ВариантыОтветовАнкет КАК ВариантыОтветовАнкет + |ГДЕ + | ВариантыОтветовАнкет.Владелец = &ЭлементарныйВопрос + | И (НЕ ВариантыОтветовАнкет.ПометкаУдаления) + | + |УПОРЯДОЧИТЬ ПО + | ВариантыОтветовАнкет.РеквизитДопУпорядочивания"; + + Запрос.УстановитьПараметр("ЭлементарныйВопрос",ЭлементарныйВопрос); + + Результат = Запрос.Выполнить(); + Если Не Результат.Пустой() Тогда + + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + НоваяСтрока = Ответы.Добавить(); + НоваяСтрока.ЭлементарныйВопрос = ЭлементарныйВопрос; + НоваяСтрока.Ответ = Выборка.Ответ; + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Module.bsl index 251265c0a..10922cb4e 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Module.bsl @@ -1,39 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ - -// Формирует структуру параметров для передачи в форму владельца -&НаКлиенте -Функция СформироватьСтруктуруПараметровДляПередачиВладельцу() - - СтруктураВозврата = Новый Структура; - СтруктураВозврата.Вставить("Обязательный",Обязательный); - СтруктураВозврата.Вставить("Формулировка",Формулировка); - СтруктураВозврата.Вставить("ЭлементарныйВопрос",ЭлементарныйВопрос); - СтруктураВозврата.Вставить("ВысотаЭлементаФормулировкиВопроса",ВысотаЭлементаФормулировкиВопроса); - - Возврат СтруктураВозврата; - -КонецФункции // - -// Получает значение формулировки элементарного вопроса и заполняет список выбора поля Формулировка -&НаКлиенте -Функция СформироватьАвтоФормулировку(ФормулировкаЭлементарногоВопроса) - - Элементы.Формулировка.СписокВыбора.Очистить(); - - Если ПустаяСтрока(Формулировка) Тогда - Формулировка = ФормулировкаЭлементарногоВопроса; - КонецЕсли; - - Элементы.Формулировка.СписокВыбора.Добавить(ФормулировкаЭлементарногоВопроса); - - Возврат ФормулировкаЭлементарногоВопроса; - -КонецФункции // СформироватьАвтонаименование() - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -47,48 +13,24 @@ Если ТипСтрокиДерева = "Раздел" Тогда Элементы.ГруппаВысотаОбязательный.Видимость = Ложь; - Элементы.ЭлементарныйВопрос.Видимость = Ложь; - Элементы.Формулировка.Заголовок = "Имя раздела"; - Заголовок = "Раздел шаблона анкеты"; + Элементы.ЭлементарныйВопрос.Видимость = Ложь; + Элементы.Формулировка.Заголовок = НСтр("ru = 'Имя раздела'"); + Заголовок = НСтр("ru = 'Раздел шаблона анкеты'"); КонецЕсли; - + Если НЕ ЭлементарныйВопрос.Пустая() Тогда Элементы.Формулировка.СписокВыбора.Добавить(ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭлементарныйВопрос,"Формулировка")); КонецЕсли; КонецПроцедуры -////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ -&НаКлиенте -Процедура ПеренестиВШаблон(Команда) - - Отказ = Ложь; - - Если Не ЗначениеЗаполнено(Формулировка) Тогда - Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = ' Не заполнена формулировка'"),,"Формулировка"); - КонецЕсли; - - Если ТипСтрокиДерева = "Вопрос" И (Не ЗначениеЗаполнено(ЭлементарныйВопрос)) Тогда - Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = ' Не указан элементарный вопрос'"),,"ЭлементарныйВопрос"); - КонецЕсли; - - Если Отказ Тогда - Возврат; - КонецЕсли; - - Оповестить("ОкочаниеРедактированияПараметровСтрокиШаблонаАнкеты",СформироватьСтруктуруПараметровДляПередачиВладельцу()); - Закрыть(); - -КонецПроцедуры - &НаКлиенте Процедура ЭлементарныйВопросНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - + Если ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.ВопросСУсловием") Тогда СтандартнаяОбработка = ЛОЖЬ; @@ -96,13 +38,13 @@ МассивОтбора = Новый Массив; МассивОтбора.Добавить(АнкетированиеКлиент.СоздатьСтруктуруПараметраОтбора(Тип("ЭлементОтбораКомпоновкиДанных"),"ТипОтвета",ВидСравненияКомпоновкиДанных.Равно,ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Булево"))); МассивОтбора.Добавить(АнкетированиеКлиент.СоздатьСтруктуруПараметраОтбора(Тип("ЭлементОтбораКомпоновкиДанных"),"ПометкаУдаления",ВидСравненияКомпоновкиДанных.Равно,ЛОЖЬ)); - + ОткрытьФорму("ПланВидовХарактеристик.ВопросыДляАнкетирования.Форма.ФормаВыбора",Новый Структура("МассивОтбора",МассивОтбора),Элемент); - - КонецЕсли; + + КонецЕсли; КонецПроцедуры - + &НаКлиенте Процедура ЭлементарныйВопросОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -111,7 +53,7 @@ Если РеквизитыВопрос.ЭтоГруппа Тогда СтандартнаяОбработка = Ложь; Возврат; - КонецЕсли; + КонецЕсли; Если ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.ВопросСУсловием") И РеквизитыВопрос.ТипОтвета <> ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Булево") Тогда @@ -123,3 +65,63 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ПеренестиВШаблон(Команда) + + Отказ = Ложь; + + Если Не ЗначениеЗаполнено(Формулировка) Тогда + Отказ = Истина; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = ' Не заполнена формулировка'"),,"Формулировка"); + КонецЕсли; + + Если ТипСтрокиДерева = "Вопрос" И (Не ЗначениеЗаполнено(ЭлементарныйВопрос)) Тогда + Отказ = Истина; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = ' Не указан элементарный вопрос'"),,"ЭлементарныйВопрос"); + КонецЕсли; + + Если Отказ Тогда + Возврат; + КонецЕсли; + + Оповестить("ОкочаниеРедактированияПараметровСтрокиШаблонаАнкеты",СформироватьСтруктуруПараметровДляПередачиВладельцу()); + Закрыть(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Формирует структуру параметров для передачи в форму владельца +&НаКлиенте +Функция СформироватьСтруктуруПараметровДляПередачиВладельцу() + + СтруктураВозврата = Новый Структура; + СтруктураВозврата.Вставить("Обязательный",Обязательный); + СтруктураВозврата.Вставить("Формулировка",Формулировка); + СтруктураВозврата.Вставить("ЭлементарныйВопрос",ЭлементарныйВопрос); + СтруктураВозврата.Вставить("ВысотаЭлементаФормулировкиВопроса",ВысотаЭлементаФормулировкиВопроса); + + Возврат СтруктураВозврата; + +КонецФункции + +// Получает значение формулировки элементарного вопроса и заполняет список выбора поля Формулировка +&НаКлиенте +Функция СформироватьАвтоФормулировку(ФормулировкаЭлементарногоВопроса) + + Элементы.Формулировка.СписокВыбора.Очистить(); + + Если ПустаяСтрока(Формулировка) Тогда + Формулировка = ФормулировкаЭлементарногоВопроса; + КонецЕсли; + + Элементы.Формулировка.СписокВыбора.Добавить(ФормулировкаЭлементарногоВопроса); + + Возврат ФормулировкаЭлементарногоВопроса; + +КонецФункции + diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl index 8225c1a8b..509f24eca 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) @@ -9,72 +12,76 @@ Если ТекущиеДанные <> Неопределено Тогда НовыйЭлементСсылка = ВыполнитьКопированиеЭлемента(ТекущиеДанные.Ссылка); Если НовыйЭлементСсылка <> Неопределено Тогда - ОткрытьФорму("Справочник.ШаблоныАнкет.Форма.ФормаЭлемента",Новый Структура("Ключ",НовыйЭлементСсылка)); - Элементы.Список.Обновить(); + ОткрытьФорму("Справочник.ШаблоныАнкет.Форма.ФормаЭлемента",Новый Структура("Ключ",НовыйЭлементСсылка)); + Элементы.Список.Обновить(); КонецЕсли; - КонецЕсли; + КонецЕсли; КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервере Функция ВыполнитьКопированиеЭлемента(ЭлементКопирования) - - Попытка + + Попытка НачатьТранзакцию(); ШаблонАнкетыОбъект = Справочники.ШаблоныАнкет.СоздатьЭлемент(); ЗаполнитьЗначенияСвойств(ШаблонАнкетыОбъект,ЭлементКопирования,"ПометкаУдаления,Наименование,Заголовок,Вступление,Заключение"); - ШаблонАнкетыОбъект.УстановитьСсылкуНового(Справочники.ШаблоныАнкет.ПолучитьСсылку()); + ШаблонАнкетыОбъект.УстановитьСсылкуНового(Справочники.ШаблоныАнкет.ПолучитьСсылку()); ШаблонАнкетыОбъект.РедактированиеШаблонаЗавершено = Ложь; ШаблонАнкетыОбъект.Записать(); Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ВопросыШаблонаАнкеты.Ссылка КАК Ссылка, - | ВопросыШаблонаАнкеты.ПометкаУдаления, - | ВопросыШаблонаАнкеты.Предопределенный, - | ВопросыШаблонаАнкеты.Владелец, - | ВопросыШаблонаАнкеты.Родитель, - | ВопросыШаблонаАнкеты.ЭтоГруппа, - | ВопросыШаблонаАнкеты.Код КАК Код, - | ВопросыШаблонаАнкеты.Наименование, - | ВопросыШаблонаАнкеты.Обязательный, - | ВопросыШаблонаАнкеты.ТипВопроса, - | ВопросыШаблонаАнкеты.ТипТабличногоВопроса, - | ВопросыШаблонаАнкеты.ЭлементарныйВопрос, - | ВопросыШаблонаАнкеты.РодительВопрос, - | ВопросыШаблонаАнкеты.СоставТабличногоВопроса.( - | ЭлементарныйВопрос КАК ЭлементарныйВопрос, - | НомерСтроки - | ), - | ВопросыШаблонаАнкеты.ПредопределенныеОтветы.( - | ЭлементарныйВопрос КАК ЭлементарныйВопрос, - | Ответ, - | НомерСтроки - | ), - | ВопросыШаблонаАнкеты.Формулировка, - | ВопросыШаблонаАнкеты.ВысотаЭлементаФормулировкиВопроса - |ИЗ - | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты - |ГДЕ - | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты - | - |УПОРЯДОЧИТЬ ПО - | Ссылка ИЕРАРХИЯ, - | Код"; + Запрос.Текст = " + |ВЫБРАТЬ + | ВопросыШаблонаАнкеты.Ссылка КАК Ссылка, + | ВопросыШаблонаАнкеты.ПометкаУдаления, + | ВопросыШаблонаАнкеты.Предопределенный, + | ВопросыШаблонаАнкеты.Владелец, + | ВопросыШаблонаАнкеты.Родитель, + | ВопросыШаблонаАнкеты.ЭтоГруппа, + | ВопросыШаблонаАнкеты.Код КАК Код, + | ВопросыШаблонаАнкеты.Наименование, + | ВопросыШаблонаАнкеты.Обязательный, + | ВопросыШаблонаАнкеты.ТипВопроса, + | ВопросыШаблонаАнкеты.ТипТабличногоВопроса, + | ВопросыШаблонаАнкеты.ЭлементарныйВопрос, + | ВопросыШаблонаАнкеты.РодительВопрос, + | ВопросыШаблонаАнкеты.СоставТабличногоВопроса.( + | ЭлементарныйВопрос КАК ЭлементарныйВопрос, + | НомерСтроки + | ), + | ВопросыШаблонаАнкеты.ПредопределенныеОтветы.( + | ЭлементарныйВопрос КАК ЭлементарныйВопрос, + | Ответ, + | НомерСтроки + | ), + | ВопросыШаблонаАнкеты.Формулировка, + | ВопросыШаблонаАнкеты.ВысотаЭлементаФормулировкиВопроса + |ИЗ + | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты + |ГДЕ + | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты + | + |УПОРЯДОЧИТЬ ПО + | Ссылка ИЕРАРХИЯ, + | Код"; Запрос.УстановитьПараметр("ШаблонАнкеты",ЭлементКопирования); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда - Возврат Неопределено; - КонецЕсли; + Возврат Неопределено; + КонецЕсли; Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); - + ДобавитьЭлементыСправочникаВопросыШаблонаАнкеты(ШаблонАнкетыОбъект.Ссылка,Выборка); Исключение @@ -82,14 +89,14 @@ ОтменитьТранзакцию(); Возврат Неопределено; - КонецПопытки; + КонецПопытки; ЗафиксироватьТранзакцию(); Возврат ШаблонАнкетыОбъект.Ссылка; + +КонецФункции - -КонецФункции // () - +&НаСервере Процедура ДобавитьЭлементыСправочникаВопросыШаблонаАнкеты(Ссылка,Выборка,Родитель = Неопределено) ВопросыСУсловием = Новый Соответствие; @@ -97,7 +104,7 @@ Пока Выборка.Следующий() Цикл Если Выборка.ЭтоГруппа Тогда - + НовыйЭлемент = Справочники.ВопросыШаблонаАнкеты.СоздатьГруппу(); ЗаполнитьЗначенияСвойств(НовыйЭлемент,Выборка,"Наименование,Код,Формулировка"); @@ -117,26 +124,25 @@ НовыйЭлемент.ПредопределенныеОтветы.Загрузить(ПредопределенныеОтветы); Если Выборка.ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.ВопросСУсловием Тогда - ВопросыСУсловием.Вставить(Выборка.Ссылка,СсылкаНового); + ВопросыСУсловием.Вставить(Выборка.Ссылка,СсылкаНового); КонецЕсли; - - Если НЕ Выборка.РодительВопрос.Пустая() Тогда - НовыйЭлемент.РодительВопрос = ВопросыСУсловием.Получить(Выборка.РодительВопрос); - КонецЕсли; - КонецЕсли; + Если НЕ Выборка.РодительВопрос.Пустая() Тогда + НовыйЭлемент.РодительВопрос = ВопросыСУсловием.Получить(Выборка.РодительВопрос); + КонецЕсли; + + КонецЕсли; НовыйЭлемент.Владелец = Ссылка; НовыйЭлемент.Родитель = ?(Родитель = Неопределено,Справочники.ВопросыШаблонаАнкеты.ПустаяСсылка(),Родитель); НовыйЭлемент.Записать(); - ПодчиненнаяВыборка = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Если ПодчиненнаяВыборка.Количество() > 0 Тогда - ДобавитьЭлементыСправочникаВопросыШаблонаАнкеты(Ссылка,ПодчиненнаяВыборка,НовыйЭлемент.Ссылка); + ДобавитьЭлементыСправочникаВопросыШаблонаАнкеты(Ссылка,ПодчиненнаяВыборка,НовыйЭлемент.Ссылка); КонецЕсли; - КонецЦикла; + КонецЦикла; КонецПроцедуры diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl index 1d267e861..26452b609 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl @@ -1,511 +1,17 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ - -// Добавляет новую строку в дерево формы -// Родитель - СтрокаДереваАнкеты - элемент дерева значений формы, от которого отращивается новая ветка -// ТипСтроки - Строка - Тип строки дерева -// Возвращаемое значение: -// Строка - новая строка дерева -// -&НаКлиенте -Функция ДобавитьСтрокуДеревоАнкеты(Родитель,ТипСтроки,ТипВопроса = Неопределено) - - ЭлементыДерева = Родитель.ПолучитьЭлементы(); - НоваяСтрока = ЭлементыДерева.Добавить(); - - НоваяСтрока.ТипСтроки = ТипСтроки; - НоваяСтрока.Обязательный = ЛОЖЬ; - НоваяСтрока.КлючСтроки = Новый УникальныйИдентификатор; - - Если ТипСтроки = "Вопрос" Тогда - - НоваяСтрока.ТипВопроса = ТипВопроса; - НоваяСтрока.КодКартинки = Анкетирование.ПолучитьКодКартинкиШаблонаАнкеты(ЛОЖЬ,ТипВопроса); - НоваяСтрока.ЭлементарныйВопрос = ?(ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный"),"",ПредопределенноеЗначение("ПланВидовХарактеристик.ВопросыДляАнкетирования.ПустаяСсылка")); - НоваяСтрока.Обязательный = ?(ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный"),"",Ложь); - - Иначе - - НоваяСтрока.ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.ПустаяСсылка"); - НоваяСтрока.КодКартинки = Анкетирование.ПолучитьКодКартинкиШаблонаАнкеты(ИСТИНА); - НоваяСтрока.ЭлементарныйВопрос = ""; - НоваяСтрока.Обязательный = ""; - - КонецЕсли; - - АнкетированиеКлиентСервер.СформироватьНумерациюДерева(ДеревоАнкеты); - Элементы.ФормаДереваАнкеты.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор(); - - Модифицированность = Истина; - Элементы.ФормаДереваАнкеты.ИзменитьСтроку(); - - Возврат НоваяСтрока; - -КонецФункции // ДобавитьСтрокуДеревоАнкеты() - -&НаСервере -Процедура ЗаписатьДеревоШаблонаАнкеты(СтрокаДереваРодитель,УровеньРекурсии,СправочникРодитель = Неопределено) - - Счётчик = 0; - - //запишем новые - Для каждого СтрокаДерева Из СтрокаДереваРодитель.Строки Цикл - - Счётчик = Счётчик + 1; - СпрСсылка = ДобавитьЭлементСправочникаВопросШаблонаАнкеты(СтрокаДерева,?(УровеньРекурсии = 1,Счётчик,Неопределено),СправочникРодитель); - - Если СтрокаДерева.Строки.Количество() > 0 Тогда - Если СтрокаДерева.ТипСтроки = "Раздел" Тогда - ЗаписатьДеревоШаблонаАнкеты(СтрокаДерева,УровеньРекурсии+1,СпрСсылка); - Иначе - Для каждого СтрокаПодчиненныйВопрос Из СтрокаДерева.Строки Цикл - ДобавитьЭлементСправочникаВопросШаблонаАнкеты(СтрокаПодчиненныйВопрос,Неопределено,СправочникРодитель,СпрСсылка); - КонецЦикла; - КонецЕсли; - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры // ЗаписатьДеревоШаблонаАнкеты() +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере -Функция ДобавитьЭлементСправочникаВопросШаблонаАнкеты(СтрокаДерева,Код = Неопределено,СправочникРодитель = Неопределено,ВопросРодитель = Неопределено) - - Если СтрокаДерева.ТипСтроки = "Раздел" Тогда - - СпрОбъект = Справочники.ВопросыШаблонаАнкеты.СоздатьГруппу(); - - Иначе - - СпрОбъект = Справочники.ВопросыШаблонаАнкеты.СоздатьЭлемент(); - СпрОбъект.ТипВопроса = СтрокаДерева.ТипВопроса; - СпрОбъект.ЭлементарныйВопрос = СтрокаДерева.ЭлементарныйВопрос; - СпрОбъект.ТипТабличногоВопроса = СтрокаДерева.ТипТабличногоВопроса; - СпрОбъект.Обязательный = СтрокаДерева.Обязательный; - СпрОбъект.РодительВопрос = ?(ВопросРодитель = Неопределено, Справочники.ВопросыШаблонаАнкеты.ПустаяСсылка(),ВопросРодитель); - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(СтрокаДерева.СоставТабличногоВопроса,СпрОбъект.СоставТабличногоВопроса); - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(СтрокаДерева.ПредопределенныеОтветы,СпрОбъект.ПредопределенныеОтветы); - СпрОбъект.ВысотаЭлементаФормулировкиВопроса = СтрокаДерева.ВысотаЭлементаФормулировкиВопроса; - - КонецЕсли; - - Если Код <> Неопределено Тогда - СпрОбъект.Код = Код; - КонецЕсли; - СпрОбъект.Наименование = СтрокаДерева.Формулировка; - СпрОбъект.Заметки = СтрокаДерева.Заметки; - СпрОбъект.Формулировка = СтрокаДерева.Формулировка; - СпрОбъект.Родитель = ?(СправочникРодитель = Неопределено,Справочники.ВопросыШаблонаАнкеты.ПустаяСсылка(),СправочникРодитель); - СпрОбъект.Владелец = Объект.Ссылка; - - СпрОбъект.Записать(); - - Возврат СпрОбъект.Ссылка; - -КонецФункции // () - -// Обрабатывает результат работы мастера табличных вопросов -// -// Параметры -// ТекущиеДанные -ДанныеФормыЭлементДерева - текущая данные дерева шаблона -// Параметр - Структура - результаты работы формы мастера табличного вопроса -// -&НаКлиенте -Процедура ОбработатьРезультатРаботыМастераТабличныхВопросов(ТекущиеДанные,Параметр,ТекущаяСтрока) - - ТекущиеДанные.СоставТабличногоВопроса.Очистить(); - ТекущиеДанные.ПредопределенныеОтветы.Очистить(); - - ТекущиеДанные.ТипТабличногоВопроса = Параметр.ТипТабличногоВопроса; - ТекущиеДанные.Наименование = Параметр.Формулировка; - ТекущиеДанные.Формулировка = Параметр.Формулировка; - ТекущиеДанные.ЭлементарныйВопрос = Параметр.Формулировка; - ТекущиеДанные.Обязательный = ""; - - НомерСтроки = 1; - Для каждого Вопрос Из Параметр.Вопросы Цикл - - НоваяСтрока = ТекущиеДанные.СоставТабличногоВопроса.Добавить(); - НоваяСтрока.ЭлементарныйВопрос = Вопрос; - НоваяСтрока.НомерСтроки = НомерСтроки; - - НомерСтроки = НомерСтроки + 1; - - КонецЦикла; - - Для каждого Ответ Из Параметр.Ответы Цикл - ЗаполнитьЗначенияСвойств(ТекущиеДанные.ПредопределенныеОтветы.Добавить(),Ответ); - КонецЦикла; - - ОбработатьПревьюТабличногоВопроса(ТекущаяСтрока); - УстановитьУсловноеОформлениеФормы(); - -КонецПроцедуры - -&НаСервере -Процедура ОбработатьПревьюТабличногоВопроса(ТекущаяСтрока) - - ДанныеДереваАнкеты = ДеревоАнкеты.НайтиПоИдентификатору(ТекущаяСтрока); - Если ДанныеДереваАнкеты = Неопределено Тогда - Возврат; - КонецЕсли; - - ДобавитьСтраницуПревьюТабличногоВопроса(ДанныеДереваАнкеты.ТипТабличногоВопроса, - ДанныеДереваАнкеты.СоставТабличногоВопроса.Выгрузить(), - ДанныеДереваАнкеты.ПредопределенныеОтветы.Выгрузить(), - ДанныеДереваАнкеты.КлючСтроки); - -КонецПроцедуры // () - -&НаСервере -Процедура ДобавитьСтраницуПревьюТабличногоВопроса(ТипТабличногоВопроса,СоставТабличногоВопроса,ПредопределенныеОтветы,КлючСтроки) - - ДобавляемыеРеквизиты = Новый Массив; - ИмяТаблицы = "ПревьюТабличногоВопроса_" + СтрЗаменить(Строка(КлючСтроки),"-","_"); - - Если Элементы.Найти("Страница_" + ИмяТаблицы) = Неопределено Тогда - - ЭлементСтраница = Элементы.Добавить("Страница_" + ИмяТаблицы,Тип("ГруппаФормы"),Элементы.СтраницыИнформация); - ЭлементСтраница.Вид = ВидГруппыФормы.Страница; - - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяТаблицы,Новый ОписаниеТипов("ТаблицаЗначений"))); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Формулировка_" + ИмяТаблицы,Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150)))); - - ИзменитьРеквизиты(ДобавляемыеРеквизиты); - - Элемент = Элементы.Добавить("Формулировка_" + ИмяТаблицы,Тип("ПолеФормы"),ЭлементСтраница); - Элемент.ПутьКДанным = "Формулировка_" + ИмяТаблицы; - Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; - Элемент.Шрифт = Новый Шрифт("MS Shell Dlg",10,Истина); - - Элемент = Элементы.Добавить(ИмяТаблицы,Тип("ТаблицаФормы"),ЭлементСтраница); - Элемент.ТолькоПросмотр = Истина; - Элемент.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; - Элемент.ПутьКДанным = ИмяТаблицы; - - КонецЕсли; - - Анкетирование.ОбновитьПревьюТабличныйВопрос(СоставТабличногоВопроса,ПредопределенныеОтветы,ТипТабличногоВопроса,ЭтаФорма,ИмяТаблицы,КлючСтроки); - -КонецПроцедуры // ДобавитьСтраницуПревьюТабличногоВопроса() - -//Устанавливает условное оформеление формы -&НаСервере -Процедура УстановитьУсловноеОформлениеФормы(); - - ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); - - ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоАнкеты.ТипСтроки"); - ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; - ЭлементОтбораДанных.Использование = Истина; - ЭлементОтбораДанных.ПравоеЗначение = "Вопрос"; - - ПолеОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); - ПолеОформления.Использование = Истина; - ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ДеревоАнкетыОбязательный"); - - ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона",WebЦвета.СеребристоСерый); - -КонецПроцедуры // () - -&НаСервере -Процедура ОпределитьЕстьЛиДанномуШаблонуАнкеты() - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | Анкета.Ссылка - |ИЗ - | Документ.Анкета КАК Анкета - |ГДЕ - | (НЕ Анкета.ПометкаУдаления) - | И Анкета.Опрос В - | (ВЫБРАТЬ - | НазначениеОпросов.Ссылка - | ИЗ - | Документ.НазначениеОпросов КАК НазначениеОпросов - | ГДЕ - | НазначениеОпросов.ШаблонАнкеты = &ШаблонАнкеты)"; - - Запрос.УстановитьПараметр("ШаблонАнкеты",Объект.Ссылка); - - Если НЕ Запрос.Выполнить().Пустой() Тогда - - ПоДанномуШаблонуЕстьАнкеты = Истина; - - Иначе - - ПоДанномуШаблонуЕстьАнкеты = Ложь; - - КонецЕсли; - - УстановитьПривилегированныйРежим(Ложь); - -КонецПроцедуры - -&НаКлиенте -Функция ПолучитьРодителяДеревоАнкеты(ТекущийРодитель,МожетБытьКорнем,ТипВопроса = Неопределено) - - Если МожетБытьКорнем Тогда - - Пока (ТекущийРодитель.ТипСтроки <> "Корень") И (ТекущийРодитель.ТипСтроки <> "Раздел") Цикл - ТекущийРодитель = ТекущийРодитель.ПолучитьРодителя(); - Если ТекущийРодитель = Неопределено Тогда - Возврат ДеревоАнкеты.ПолучитьЭлементы()[0]; - КонецЕсли; - КонецЦикла; - - Иначе - - Пока (ТекущийРодитель.ТипСтроки <> "Раздел") - И ((ТекущийРодитель.ТипСтроки = "Вопрос") И (НЕ ТекущийРодитель.ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.ВопросСУсловием")) - ИЛИ (ТекущийРодитель.ТипСтроки = "Вопрос" И ТекущийРодитель.ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.ВопросСУсловием") И ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.ВопросСУсловием"))) Цикл - - ТекущийРодитель = ТекущийРодитель.ПолучитьРодителя(); - - КонецЦикла - - КонецЕсли; - - Возврат ТекущийРодитель; - -КонецФункции // () - -// Добавляет вопрос в шаблон анкеты -// -// Параметры -// ТекущиеДанные - ДанныеФормыЭлементДерева - данные текущей строки дерева -// ТипВопроса - Перечисления.ТипыВопросовШаблонаАнкет - тип добавляемого вопроса -// -&НаКлиенте -Процедура ДобавитьВопрос(ТекущиеДанные,ТипВопроса) - - Родитель = ПолучитьРодителяДеревоАнкеты(ТекущиеДанные,Ложь,ТипВопроса); - Если Родитель.ТипСтроки = "Корень" Тогда - Предупреждение("Вопросы нельзя добавлять в корень анкеты.",15,"Ошибка добавления"); - Возврат; - КонецЕсли; - ДобавитьСтрокуДеревоАнкеты(Родитель,"Вопрос",ТипВопроса); - -КонецПроцедуры // ДобавитьВопрос()() - -&НаКлиенте -Процедура ОбновитьИнформациюТабличныйВопрос(ТекущиеДанные) - - СтрокаКлюч = СтрЗаменить(Строка(ТекущиеДанные.КлючСтроки),"-","_"); - ИмяТаблицы = "ПревьюТабличногоВопроса_" + СтрокаКлюч; - ИмяРеквизита = "Формулировка_" + ИмяТаблицы; - Попытка - ЭтаФорма[ИмяРеквизита] = СформироватьСтрокуФормулировкиДляПревью(ТекущиеДанные); - Исключение - КонецПопытки; - -КонецПроцедуры // () - -// Формирует строку с представлением вопроса для отображения в страницах превью -// -// Параметры -// ТекущиеДанные - ДанныеФормыЭлементДерева - данные строки дерева -// -// Возвращаемое значение: -// Строка - возвращаемая строка -// -&НаКлиенте -Функция СформироватьСтрокуФормулировкиДляПревью(ТекущиеДанные) - - Возврат ТекущиеДанные.ПолныйКод + " " + ТекущиеДанные.Формулировка; - -КонецФункции // СформироватьСтрокуФормулировкиДляПревью()() - -&НаКлиенте -Процедура ОпределитьДоступностьДереваШаблона() - - НовыйЭлемент = Объект.Ссылка.Пустая(); - НедоступностьРедактирования = (НовыйЭлемент Или Объект.РедактированиеШаблонаЗавершено ИЛИ ПоДанномуШаблонуЕстьАнкеты); - - Элементы.ДеревоАнкеты.ТолькоПросмотр = НедоступностьРедактирования; - Элементы.ФормаДереваАнкеты.ТолькоПросмотр = НедоступностьРедактирования; - Элементы.ЗакончитьРедактирование.Доступность = НЕ НедоступностьРедактирования; - Элементы.ФормаДереваАнкеты.КоманднаяПанель.Доступность = НЕ НедоступностьРедактирования; - Элементы.ФормаДереваАнкеты.КонтекстноеМеню.Доступность = НЕ НедоступностьРедактирования; - Элементы.КонтекстноеМенюФормаДереваАнкетыДобавить.Доступность = НЕ НедоступностьРедактирования; - Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьРаздел.Доступность = НЕ НедоступностьРедактирования; - Элементы.ДеревоАнкетыКонтекстноеМенюПереместитьВверх.Доступность = НЕ НедоступностьРедактирования; - Элементы.ДеревоАнкетыКонтекстноеМенюПереместитьВниз.Доступность = НЕ НедоступностьРедактирования; - Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьВопрос.Доступность = НЕ НедоступностьРедактирования; - Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьВопросСУсловием.Доступность = НЕ НедоступностьРедактирования; - Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьТабличныйВопрос.Доступность = НЕ НедоступностьРедактирования; - - Если НовыйЭлемент Тогда - ИнформацияДерево = НСтр("ru = 'Для редактирования вопросов необходимо записать шаблон анкеты'"); - Иначе - ИнформацияДерево = НСтр("ru = 'Дерево редактирования вопросов шаблона анкеты'"); - КонецЕсли; - -КонецПроцедуры // () - -&НаКлиенте -Процедура УстановитьНедоступностьРедактирования() - - Если Объект.РедактированиеШаблонаЗавершено ИЛИ ПоДанномуШаблонуЕстьАнкеты Тогда - - ЭтаФорма.ТолькоПросмотр = Истина; - Элементы.ДеревоАнкеты.ТолькоПросмотр = Истина; - Элементы.ФормаДереваАнкеты.ТолькоПросмотр = Истина; - Элементы.ФормаДереваАнкеты.КоманднаяПанель.Доступность = Ложь; - Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьРаздел.Доступность = Ложь; - Элементы.ДеревоАнкетыКонтекстноеМенюПереместитьВверх.Доступность = Ложь; - Элементы.ДеревоАнкетыКонтекстноеМенюПереместитьВниз.Доступность = Ложь; - Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьВопрос.Доступность = Ложь; - Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьВопросСУсловием.Доступность = Ложь; - Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьТабличныйВопрос.Доступность = Ложь; - Элементы.ЗакончитьРедактирование.Доступность = Ложь; - - КонецЕсли; - -КонецПроцедуры // - -&НаКлиенте -Процедура ОткрытьФормуПростыхВопросов(ТекущиеДанные) - - СтруктураПараметры = Новый Структура; - СтруктураПараметры.Вставить("ТипСтрокиДерева",ТекущиеДанные.ТипСтроки); - СтруктураПараметры.Вставить("ЭлементарныйВопрос",ТекущиеДанные.ЭлементарныйВопрос); - СтруктураПараметры.Вставить("Обязательный",ТекущиеДанные.Обязательный); - СтруктураПараметры.Вставить("ТипВопроса",ТекущиеДанные.ТипВопроса); - СтруктураПараметры.Вставить("Формулировка",ТекущиеДанные.Формулировка); - СтруктураПараметры.Вставить("ЗакрыватьПриВыборе",Истина); - СтруктураПараметры.Вставить("ЗакрыватьПриЗакрытииВладельца",Истина); - СтруктураПараметры.Вставить("ТолькоПросмотр",Ложь); - СтруктураПараметры.Вставить("ВысотаЭлементаФормулировкиВопроса",ТекущиеДанные.ВысотаЭлементаФормулировкиВопроса); - - ОткрытьФорму("Справочник.ШаблоныАнкет.Форма.ФормаПростыхВопросов",СтруктураПараметры,ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьФормуМастераТабличныхВопросов(ТекущиеДанные) - - СтруктураПараметры = Новый Структура; - СтруктураПараметры.Вставить("ТипТабличногоВопроса",ТекущиеДанные.ТипТабличногоВопроса); - СтруктураПараметры.Вставить("СоставТабличногоВопроса",ТекущиеДанные.СоставТабличногоВопроса); - СтруктураПараметры.Вставить("ПредопределенныеОтветы",ТекущиеДанные.ПредопределенныеОтветы); - СтруктураПараметры.Вставить("Формулировка",ТекущиеДанные.Формулировка); - - ОткрытьФорму("Справочник.ШаблоныАнкет.Форма.ФормаМастераТабличныхВопросов",СтруктураПараметры,ЭтаФорма); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -//КОМАНДЫ ФОРМЫ - -//Устанавливает флаг окончания редактирования шаблона анкеты -//и записывет анкету -&НаКлиенте -Процедура ЗакончитьРедактирование(Команда) - - Объект.РедактированиеШаблонаЗавершено = Истина; - Записать(); - - Если Модифицированность Тогда - Объект.РедактированиеШаблонаЗавершено = Ложь; - Иначе - УстановитьНедоступностьРедактирования(); - КонецЕсли; - -КонецПроцедуры - -//Добавляет раздел в дерево шаблона анкеты -&НаКлиенте -Процедура ДобавитьРаздел(Команда) - - ТекущиеДанные = Элементы.ФормаДереваАнкеты.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Родитель = ПолучитьРодителяДеревоАнкеты(ТекущиеДанные,Истина); - ДобавитьСтрокуДеревоАнкеты(Родитель,"Раздел"); - -КонецПроцедуры - -//Добавляет простой вопрос в дерево шаблона анкеты -&НаКлиенте -Процедура ДобавитьПростойВопрос(Команда) - - ТекущиеДанные = Элементы.ФормаДереваАнкеты.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - ДобавитьВопрос(ТекущиеДанные,ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Простой")); - -КонецПроцедуры - -//Добавляет вопрос с условием в шаблон анкеты -&НаКлиенте -Процедура ДобавитьВопросСУсловием(Команда) - - ТекущиеДанные = Элементы.ФормаДереваАнкеты.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - ДобавитьВопрос(ТекущиеДанные,ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.ВопросСУсловием")); - -КонецПроцедуры - -//Добавляетм табличный вопрос в шаблон анкеты -&НаКлиенте -Процедура ДобавитьТабличныйВопрос(Команда) - - ТекущиеДанные = Элементы.ФормаДереваАнкеты.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - ДобавитьВопрос(ТекущиеДанные,ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный")); - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьФормуЗаполненияАнкеты(Команда) - - Если Объект.Ссылка.Пустая() Тогда - Возврат; - КонецЕсли; - - Если Модифицированность Тогда - Ответ = Вопрос(Нстр("ru = 'Шаблон анкеты был модифицирован. - |Для корректного отображения изменений шаблон необходимо записать. - |Записать?'"),РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Да,Нстр("ru = 'Записать?'")); - Если Ответ = КодВозвратаДиалога.Да Тогда - Записать(); - КонецЕсли; - КонецЕсли; - - СтруктураПараметры = Новый Структура; - СтруктураПараметры.Вставить("ШаблонАнкеты",Объект.Ссылка); - ОткрытьФорму("ОбщаяФорма.МастерАнкетыПоРазделам",СтруктураПараметры,ЭтаФорма); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере Процедура ПриСозданииНаСервере(Отказ,СтандартнаяОбработка) Анкетирование.УстановитьКорневойЭлементДереваАнкеты(ДеревоАнкеты); Анкетирование.ЗаполнитьДеревоШаблонаАнкеты(ЭтаФорма,"ДеревоАнкеты",Объект.Ссылка); АнкетированиеКлиентСервер.СформироватьНумерациюДерева(ДеревоАнкеты); УстановитьУсловноеОформлениеФормы(); - ОпределитьЕстьЛиДанномуШаблонуАнкеты(); - -КонецПроцедуры + ОпределитьЕстьЛиДанномуШаблонуАнкеты(); + +КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) @@ -515,7 +21,7 @@ Если Объект.РедактированиеШаблонаЗавершено ИЛИ ПоДанномуШаблонуЕстьАнкеты Тогда УстановитьНедоступностьРедактирования(); Иначе - ОпределитьДоступностьДереваШаблона(); + ОпределитьДоступностьДереваШаблона(); КонецЕсли; КонецПроцедуры @@ -526,7 +32,7 @@ Анкетирование.УдалитьВопросыШаблонаАнкеты(Объект.Ссылка); ДеревоШаблонаАнкеты = РеквизитФормыВЗначение("ДеревоАнкеты"); - ЗаписатьДеревоШаблонаАнкеты(ДеревоШаблонаАнкеты.Строки[0],1); + ЗаписатьДеревоШаблонаАнкеты(ДеревоШаблонаАнкеты.Строки[0],1); КонецПроцедуры @@ -534,14 +40,14 @@ Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) ТекущиеДанные = Элементы.ФормаДереваАнкеты.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; + Если ТекущиеДанные = Неопределено Тогда + Возврат; КонецЕсли; Если ИмяСобытия = "ОкончаниеРедактированияПараметровТабличногоВопроса" Тогда - ОбработатьРезультатРаботыМастераТабличныхВопросов(ТекущиеДанные,Параметр,Элементы.ФормаДереваАнкеты.ТекущаяСтрока); - ОбновитьИнформациюТабличныйВопрос(ТекущиеДанные); + ОбработатьРезультатРаботыМастераТабличныхВопросов(ТекущиеДанные,Параметр,Элементы.ФормаДереваАнкеты.ТекущаяСтрока); + ОбновитьИнформациюТабличныйВопрос(ТекущиеДанные); Модифицированность = Истина; ИначеЕсли ИмяСобытия = "ОкочаниеРедактированияПараметровСтрокиШаблонаАнкеты" Тогда @@ -549,11 +55,12 @@ ЗаполнитьЗначенияСвойств(ТекущиеДанные,Параметр); Модифицированность = Истина; Информация = СформироватьСтрокуФормулировкиДляПревью(ТекущиеДанные); + Если ТекущиеДанные.ТипСтроки <> "Вопрос" Тогда - ТекущиеДанные.Обязательный = Неопределено; + ТекущиеДанные.Обязательный = Неопределено; КонецЕсли; - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -577,48 +84,58 @@ Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл Если НайденнаяСтрока.ТипВопроса <> ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный") Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не все вопросы заполнены.'"),,"ДеревоАнкеты"); - Отказ = Истина; - Прервать; - - КонецЕсли; - КонецЦикла; - КонецЕсли; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не все вопросы заполнены.'"),,"ДеревоАнкеты"); + Отказ = Истина; + Прервать; + + КонецЕсли; + КонецЦикла; + КонецЕсли; КонецПроцедуры -////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + + ОпределитьДоступностьДереваШаблона(); + Если Объект.РедактированиеШаблонаЗавершено Тогда + ЭтаФорма.ТолькоПросмотр = Истина; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Дерево анкеты &НаКлиенте Процедура ФормаДереваАнкетыПередУдалением(Элемент, Отказ) - ТекущиеДанные = Элементы.ФормаДереваАнкеты.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; + ТекущиеДанные = Элементы.ФормаДереваАнкеты.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; КонецЕсли; Если ТекущиеДанные.ТипСтроки = "Корень" Тогда - Отказ = Истина; + Отказ = Истина; КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ФормаДереваАнкетыПриАктивизацииСтроки(Элемент) +Процедура ФормаДереваАнкетыПриАктивизацииСтроки(Элемент) - ТекущиеДанные = Элементы.ФормаДереваАнкеты.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; + ТекущиеДанные = Элементы.ФормаДереваАнкеты.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; - СтраницаПревьюТабличногоВопроса = Элементы.Найти("Страница_ПревьюТабличногоВопроса_" + СтрЗаменить(Строка(ТекущиеДанные.КлючСтроки),"-","_")); + СтраницаПревьюТабличногоВопроса = Элементы.Найти("Страница_ПревьюТабличногоВопроса_" + СтрЗаменить(Строка(ТекущиеДанные.КлючСтроки),"-","_")); Если СтраницаПревьюТабличногоВопроса <> Неопределено Тогда - Элементы.СтраницыИнформация.ТекущаяСтраница = СтраницаПревьюТабличногоВопроса; + Элементы.СтраницыИнформация.ТекущаяСтраница = СтраницаПревьюТабличногоВопроса; Иначе Информация = СформироватьСтрокуФормулировкиДляПревью(ТекущиеДанные); - Элементы.СтраницыИнформация.ТекущаяСтраница = Элементы.СтраницаИнформация; - КонецЕсли; + Элементы.СтраницыИнформация.ТекущаяСтраница = Элементы.СтраницаИнформация; + КонецЕсли; КонецПроцедуры @@ -626,38 +143,38 @@ Процедура ФормаДереваАнкетыПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) Если (Строка = Неопределено) ИЛИ (ПараметрыПеретаскивания.Значение = Неопределено) Тогда - Возврат; + Возврат; КонецЕсли; СтандартнаяОбработка = Ложь; Если ТипЗнч(ПараметрыПеретаскивания.Значение) <> Тип("Число") Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - Возврат; - КонецЕсли; + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; - СтрокаНазначение = ДеревоАнкеты.НайтиПоИдентификатору(Строка); - СтрокаПеретаскивание = ДеревоАнкеты.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + СтрокаНазначение = ДеревоАнкеты.НайтиПоИдентификатору(Строка); + СтрокаПеретаскивание = ДеревоАнкеты.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); Если (СтрокаПеретаскивание.ТипСтроки = "Раздел") И (СтрокаНазначение.ТипСтроки = "Вопрос") Тогда ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; ИначеЕсли (СтрокаПеретаскивание.ТипСтроки = "Вопрос") И (СтрокаНазначение.ТипСтроки = "Корень") Тогда ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; ИначеЕсли (СтрокаПеретаскивание.ТипСтроки = "Раздел") И (СтрокаНазначение.ТипСтроки = "Раздел") Тогда - Если СтрокаПеретаскивание.ВопросШаблона = СтрокаНазначение.ВопросШаблона Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - Возврат; - КонецЕсли; - Родитель = СтрокаНазначение.ПолучитьРодителя(); - Пока Родитель.ТипСтроки <> "Корень" Цикл - Если Родитель = СтрокаПеретаскивание Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Если СтрокаПеретаскивание.ВопросШаблона = СтрокаНазначение.ВопросШаблона Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + Родитель = СтрокаНазначение.ПолучитьРодителя(); + Пока Родитель.ТипСтроки <> "Корень" Цикл + Если Родитель = СтрокаПеретаскивание Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; Возврат; Иначе Родитель = Родитель.ПолучитьРодителя(); - КонецЕсли; - КонецЦикла; - КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; КонецПроцедуры @@ -665,11 +182,11 @@ Процедура ФормаДереваАнкетыНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) Если Элементы.ФормаДереваАнкеты.ТолькоПросмотр Тогда - СтандартнаяОбработка = Ложь; - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + СтандартнаяОбработка = Ложь; + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; КонецЕсли; - СтрокаПеретаскивание = ДеревоАнкеты.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + СтрокаПеретаскивание = ДеревоАнкеты.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); Если ТипЗнч(СтрокаПеретаскивание) = Тип("Неопределено") Тогда СтандартнаяОбработка = Ложь; ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; @@ -684,9 +201,9 @@ &НаКлиенте Процедура ФормаДереваАнкетыПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - - СтрокаНазначение = ДеревоАнкеты.НайтиПоИдентификатору(Строка); - СтрокаПеретаскивание = ДеревоАнкеты.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + + СтрокаНазначение = ДеревоАнкеты.НайтиПоИдентификатору(Строка); + СтрокаПеретаскивание = ДеревоАнкеты.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); Если (СтрокаПеретаскивание.ТипСтроки = "Вопрос") И (СтрокаНазначение.ТипСтроки = "Вопрос") Тогда @@ -728,7 +245,7 @@ Модифицированность = Истина; - ИначеЕсли СтрокаПеретаскивание.ПолучитьРодителя() <> СтрокаНазначение.ПолучитьРодителя() Тогда + ИначеЕсли СтрокаПеретаскивание.ПолучитьРодителя() <> СтрокаНазначение.ПолучитьРодителя() Тогда СтандартнаяОбработка = Ложь; ПеретащитьЭлементДерева(СтрокаНазначение,СтрокаПеретаскивание,Истина); @@ -755,47 +272,6 @@ Модифицированность = Истина; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПеретащитьЭлементДерева(СтрокаНазначение,СтрокаПеретаскивание,ИспользоватьРодителяСтрокиНазначения = ЛОЖЬ,УдалятьПослеДобавления = Истина); - - Если ИспользоватьРодителяСтрокиНазначения Тогда - НоваяСтрока = СтрокаНазначение.ПолучитьРодителя().ПолучитьЭлементы().Добавить(); - Иначе - НоваяСтрока = СтрокаНазначение.ПолучитьЭлементы().Добавить(); - КонецЕсли; - - ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаПеретаскивание,,"СоставТабличногоВопроса,ПредопределенныеОтветы"); - Если СтрокаПеретаскивание.ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный") Тогда - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(СтрокаПеретаскивание.СоставТабличногоВопроса,НоваяСтрока.СоставТабличногоВопроса); - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(СтрокаПеретаскивание.ПредопределенныеОтветы,НоваяСтрока.ПредопределенныеОтветы); - КонецЕсли; - - Для каждого Элемент Из СтрокаПеретаскивание.ПолучитьЭлементы() Цикл - ПеретащитьЭлементДерева(НоваяСтрока,Элемент,Ложь,Ложь); - КонецЦикла; - - Если УдалятьПослеДобавления Тогда - СтрокаПеретаскивание.ПолучитьРодителя().ПолучитьЭлементы().Удалить(СтрокаПеретаскивание); - КонецЕсли; - - Если ИспользоватьРодителяСтрокиНазначения Тогда - Элементы.ФормаДереваАнкеты.Развернуть(СтрокаНазначение.ПолучитьРодителя().ПолучитьИдентификатор(),Ложь); - Иначе - Элементы.ФормаДереваАнкеты.Развернуть(СтрокаНазначение.ПолучитьИдентификатор(),Ложь); - КонецЕсли; - -КонецПроцедуры //) - -&НаКлиенте -Процедура ПослеЗаписи(ПараметрыЗаписи) - - ОпределитьДоступностьДереваШаблона(); - Если Объект.РедактированиеШаблонаЗавершено Тогда - ЭтаФорма.ТолькоПросмотр = Истина; КонецЕсли; КонецПроцедуры @@ -827,10 +303,10 @@ ОткрытьФормуПростыхВопросов(ТекущиеДанные); ИначеЕсли ТекущиеДанные.ТипСтроки = "Вопрос" И ТекущиеДанные.ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный") Тогда - + ОткрытьФормуМастераТабличныхВопросов(ТекущиеДанные); - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -848,25 +324,25 @@ ВыбранноеЗначение = СписокВыбора.ВыбратьЭлемент("Выберите тип добавляемого элемента.",СписокВыбора[0]); Если НЕ ВыбранноеЗначение = Неопределено Тогда - Если ВыбранноеЗначение.Значение = "Раздел" Тогда + Если ВыбранноеЗначение.Значение = "Раздел" Тогда ДобавитьРаздел(Команды.ДобавитьРаздел); - ИначеЕсли ВыбранноеЗначение.Значение = "Простой вопрос" Тогда + ИначеЕсли ВыбранноеЗначение.Значение = "Простой вопрос" Тогда ДобавитьПростойВопрос(Команды.ДобавитьПростойВопрос) - ИначеЕсли ВыбранноеЗначение.Значение = "Условный вопрос" Тогда + ИначеЕсли ВыбранноеЗначение.Значение = "Условный вопрос" Тогда ДобавитьВопросСУсловием(Команды.ДобавитьВопросСУсловием) - ИначеЕсли ВыбранноеЗначение.Значение = "Табличный вопрос" Тогда + ИначеЕсли ВыбранноеЗначение.Значение = "Табличный вопрос" Тогда ДобавитьТабличныйВопрос(Команды.ДобавитьТабличныйВопрос); КонецЕсли; - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -892,10 +368,10 @@ КонецЕсли; Если (Поле.Имя = "ДеревоАнкетыЗаметки") И (ТекущиеДанные.ТипСтроки <> "Корень") Тогда - ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияМногострочногоТекста( Элемент.ДанныеСтроки(ВыбраннаяСтрока).Заметки, - Элемент.ДанныеСтроки(ВыбраннаяСтрока).Заметки, - Модифицированность, - Нстр("ru='Заметки'")); + ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияМногострочногоТекста(Элемент.ДанныеСтроки(ВыбраннаяСтрока).Заметки, + Элемент.ДанныеСтроки(ВыбраннаяСтрока).Заметки, + Модифицированность, + Нстр("ru='Заметки'")); Иначе Если ТекущиеДанные.ТипСтроки = "Корень" Тогда Отказ = Истина; @@ -913,5 +389,530 @@ КонецЕсли; КонецПроцедуры - - \ No newline at end of file + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +//Устанавливает флаг окончания редактирования шаблона анкеты +//и записывет анкету +&НаКлиенте +Процедура ЗакончитьРедактирование(Команда) + + Объект.РедактированиеШаблонаЗавершено = Истина; + Записать(); + + Если Модифицированность Тогда + Объект.РедактированиеШаблонаЗавершено = Ложь; + Иначе + УстановитьНедоступностьРедактирования(); + КонецЕсли; + +КонецПроцедуры + +//Добавляет раздел в дерево шаблона анкеты +&НаКлиенте +Процедура ДобавитьРаздел(Команда) + + ТекущиеДанные = Элементы.ФормаДереваАнкеты.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Родитель = ПолучитьРодителяДеревоАнкеты(ТекущиеДанные,Истина); + ДобавитьСтрокуДеревоАнкеты(Родитель,"Раздел"); + +КонецПроцедуры + +//Добавляет простой вопрос в дерево шаблона анкеты +&НаКлиенте +Процедура ДобавитьПростойВопрос(Команда) + + ТекущиеДанные = Элементы.ФормаДереваАнкеты.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ДобавитьВопрос(ТекущиеДанные,ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Простой")); + +КонецПроцедуры + +//Добавляет вопрос с условием в шаблон анкеты +&НаКлиенте +Процедура ДобавитьВопросСУсловием(Команда) + + ТекущиеДанные = Элементы.ФормаДереваАнкеты.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ДобавитьВопрос(ТекущиеДанные,ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.ВопросСУсловием")); + +КонецПроцедуры + +//Добавляетм табличный вопрос в шаблон анкеты +&НаКлиенте +Процедура ДобавитьТабличныйВопрос(Команда) + + ТекущиеДанные = Элементы.ФормаДереваАнкеты.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ДобавитьВопрос(ТекущиеДанные,ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный")); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуЗаполненияАнкеты(Команда) + + Если Объект.Ссылка.Пустая() Тогда + Возврат; + КонецЕсли; + + Если Модифицированность Тогда + Ответ = Вопрос(Нстр("ru = 'Шаблон анкеты был модифицирован. + |Для корректного отображения изменений шаблон необходимо записать. + |Записать?'"),РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Да,Нстр("ru = 'Записать?'")); + Если Ответ = КодВозвратаДиалога.Да Тогда + Записать(); + КонецЕсли; + КонецЕсли; + + СтруктураПараметры = Новый Структура; + СтруктураПараметры.Вставить("ШаблонАнкеты",Объект.Ссылка); + ОткрытьФорму("ОбщаяФорма.МастерАнкетыПоРазделам",СтруктураПараметры,ЭтаФорма); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Добавляет новую строку в дерево формы +// Родитель - СтрокаДереваАнкеты - элемент дерева значений формы, от которого отращивается новая ветка +// ТипСтроки - Строка - Тип строки дерева +// Возвращаемое значение: +// Строка - новая строка дерева +// +&НаКлиенте +Функция ДобавитьСтрокуДеревоАнкеты(Родитель,ТипСтроки,ТипВопроса = Неопределено) + + ЭлементыДерева = Родитель.ПолучитьЭлементы(); + НоваяСтрока = ЭлементыДерева.Добавить(); + + НоваяСтрока.ТипСтроки = ТипСтроки; + НоваяСтрока.Обязательный = ЛОЖЬ; + НоваяСтрока.КлючСтроки = Новый УникальныйИдентификатор; + + Если ТипСтроки = "Вопрос" Тогда + + НоваяСтрока.ТипВопроса = ТипВопроса; + НоваяСтрока.КодКартинки = Анкетирование.ПолучитьКодКартинкиШаблонаАнкеты(ЛОЖЬ,ТипВопроса); + НоваяСтрока.ЭлементарныйВопрос = ?(ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный"),"",ПредопределенноеЗначение("ПланВидовХарактеристик.ВопросыДляАнкетирования.ПустаяСсылка")); + НоваяСтрока.Обязательный = ?(ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный"),"",Ложь); + + Иначе + + НоваяСтрока.ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.ПустаяСсылка"); + НоваяСтрока.КодКартинки = Анкетирование.ПолучитьКодКартинкиШаблонаАнкеты(ИСТИНА); + НоваяСтрока.ЭлементарныйВопрос = ""; + НоваяСтрока.Обязательный = ""; + + КонецЕсли; + + АнкетированиеКлиентСервер.СформироватьНумерациюДерева(ДеревоАнкеты); + Элементы.ФормаДереваАнкеты.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор(); + + Модифицированность = Истина; + Элементы.ФормаДереваАнкеты.ИзменитьСтроку(); + + Возврат НоваяСтрока; + +КонецФункции + +&НаСервере +Процедура ЗаписатьДеревоШаблонаАнкеты(СтрокаДереваРодитель,УровеньРекурсии,СправочникРодитель = Неопределено) + + Счётчик = 0; + + //запишем новые + Для каждого СтрокаДерева Из СтрокаДереваРодитель.Строки Цикл + + Счётчик = Счётчик + 1; + СпрСсылка = ДобавитьЭлементСправочникаВопросШаблонаАнкеты(СтрокаДерева,?(УровеньРекурсии = 1,Счётчик,Неопределено),СправочникРодитель); + + Если СтрокаДерева.Строки.Количество() > 0 Тогда + Если СтрокаДерева.ТипСтроки = "Раздел" Тогда + ЗаписатьДеревоШаблонаАнкеты(СтрокаДерева,УровеньРекурсии+1,СпрСсылка); + Иначе + Для каждого СтрокаПодчиненныйВопрос Из СтрокаДерева.Строки Цикл + ДобавитьЭлементСправочникаВопросШаблонаАнкеты(СтрокаПодчиненныйВопрос,Неопределено,СправочникРодитель,СпрСсылка); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ДобавитьЭлементСправочникаВопросШаблонаАнкеты(СтрокаДерева,Код = Неопределено,СправочникРодитель = Неопределено,ВопросРодитель = Неопределено) + + Если СтрокаДерева.ТипСтроки = "Раздел" Тогда + + СпрОбъект = Справочники.ВопросыШаблонаАнкеты.СоздатьГруппу(); + + Иначе + + СпрОбъект = Справочники.ВопросыШаблонаАнкеты.СоздатьЭлемент(); + СпрОбъект.ТипВопроса = СтрокаДерева.ТипВопроса; + СпрОбъект.ЭлементарныйВопрос = СтрокаДерева.ЭлементарныйВопрос; + СпрОбъект.ТипТабличногоВопроса = СтрокаДерева.ТипТабличногоВопроса; + СпрОбъект.Обязательный = СтрокаДерева.Обязательный; + СпрОбъект.РодительВопрос = ?(ВопросРодитель = Неопределено, Справочники.ВопросыШаблонаАнкеты.ПустаяСсылка(),ВопросРодитель); + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(СтрокаДерева.СоставТабличногоВопроса,СпрОбъект.СоставТабличногоВопроса); + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(СтрокаДерева.ПредопределенныеОтветы,СпрОбъект.ПредопределенныеОтветы); + СпрОбъект.ВысотаЭлементаФормулировкиВопроса = СтрокаДерева.ВысотаЭлементаФормулировкиВопроса; + + КонецЕсли; + + Если Код <> Неопределено Тогда + СпрОбъект.Код = Код; + КонецЕсли; + СпрОбъект.Наименование = СтрокаДерева.Формулировка; + СпрОбъект.Заметки = СтрокаДерева.Заметки; + СпрОбъект.Формулировка = СтрокаДерева.Формулировка; + СпрОбъект.Родитель = ?(СправочникРодитель = Неопределено,Справочники.ВопросыШаблонаАнкеты.ПустаяСсылка(),СправочникРодитель); + СпрОбъект.Владелец = Объект.Ссылка; + + СпрОбъект.Записать(); + + Возврат СпрОбъект.Ссылка; + +КонецФункции + +// Обрабатывает результат работы мастера табличных вопросов +// +// Параметры +// ТекущиеДанные -ДанныеФормыЭлементДерева - текущая данные дерева шаблона +// Параметр - Структура - результаты работы формы мастера табличного вопроса +// +&НаКлиенте +Процедура ОбработатьРезультатРаботыМастераТабличныхВопросов(ТекущиеДанные,Параметр,ТекущаяСтрока) + + ТекущиеДанные.СоставТабличногоВопроса.Очистить(); + ТекущиеДанные.ПредопределенныеОтветы.Очистить(); + + ТекущиеДанные.ТипТабличногоВопроса = Параметр.ТипТабличногоВопроса; + ТекущиеДанные.Наименование = Параметр.Формулировка; + ТекущиеДанные.Формулировка = Параметр.Формулировка; + ТекущиеДанные.ЭлементарныйВопрос = Параметр.Формулировка; + ТекущиеДанные.Обязательный = ""; + + НомерСтроки = 1; + Для каждого Вопрос Из Параметр.Вопросы Цикл + + НоваяСтрока = ТекущиеДанные.СоставТабличногоВопроса.Добавить(); + НоваяСтрока.ЭлементарныйВопрос = Вопрос; + НоваяСтрока.НомерСтроки = НомерСтроки; + + НомерСтроки = НомерСтроки + 1; + + КонецЦикла; + + Для каждого Ответ Из Параметр.Ответы Цикл + ЗаполнитьЗначенияСвойств(ТекущиеДанные.ПредопределенныеОтветы.Добавить(),Ответ); + КонецЦикла; + + ОбработатьПревьюТабличногоВопроса(ТекущаяСтрока); + УстановитьУсловноеОформлениеФормы(); + +КонецПроцедуры + +&НаСервере +Процедура ОбработатьПревьюТабличногоВопроса(ТекущаяСтрока) + + ДанныеДереваАнкеты = ДеревоАнкеты.НайтиПоИдентификатору(ТекущаяСтрока); + Если ДанныеДереваАнкеты = Неопределено Тогда + Возврат; + КонецЕсли; + + ДобавитьСтраницуПревьюТабличногоВопроса(ДанныеДереваАнкеты.ТипТабличногоВопроса, + ДанныеДереваАнкеты.СоставТабличногоВопроса.Выгрузить(), + ДанныеДереваАнкеты.ПредопределенныеОтветы.Выгрузить(), + ДанныеДереваАнкеты.КлючСтроки); + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьСтраницуПревьюТабличногоВопроса(ТипТабличногоВопроса,СоставТабличногоВопроса,ПредопределенныеОтветы,КлючСтроки) + + ДобавляемыеРеквизиты = Новый Массив; + ИмяТаблицы = "ПревьюТабличногоВопроса_" + СтрЗаменить(Строка(КлючСтроки),"-","_"); + + Если Элементы.Найти("Страница_" + ИмяТаблицы) = Неопределено Тогда + + ЭлементСтраница = Элементы.Добавить("Страница_" + ИмяТаблицы,Тип("ГруппаФормы"),Элементы.СтраницыИнформация); + ЭлементСтраница.Вид = ВидГруппыФормы.Страница; + + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяТаблицы,Новый ОписаниеТипов("ТаблицаЗначений"))); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Формулировка_" + ИмяТаблицы,Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150)))); + + ИзменитьРеквизиты(ДобавляемыеРеквизиты); + + Элемент = Элементы.Добавить("Формулировка_" + ИмяТаблицы,Тип("ПолеФормы"),ЭлементСтраница); + Элемент.ПутьКДанным = "Формулировка_" + ИмяТаблицы; + Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + Элемент.Шрифт = Новый Шрифт("MS Shell Dlg",10,Истина); + + Элемент = Элементы.Добавить(ИмяТаблицы,Тип("ТаблицаФормы"),ЭлементСтраница); + Элемент.ТолькоПросмотр = Истина; + Элемент.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; + Элемент.ПутьКДанным = ИмяТаблицы; + + КонецЕсли; + + Анкетирование.ОбновитьПревьюТабличныйВопрос(СоставТабличногоВопроса,ПредопределенныеОтветы,ТипТабличногоВопроса,ЭтаФорма,ИмяТаблицы,КлючСтроки); + +КонецПроцедуры + +//Устанавливает условное оформеление формы +&НаСервере +Процедура УстановитьУсловноеОформлениеФормы(); + + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоАнкеты.ТипСтроки"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; + ЭлементОтбораДанных.Использование = Истина; + ЭлементОтбораДанных.ПравоеЗначение = "Вопрос"; + + ПолеОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ПолеОформления.Использование = Истина; + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ДеревоАнкетыОбязательный"); + + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона",WebЦвета.СеребристоСерый); + +КонецПроцедуры + +&НаСервере +Процедура ОпределитьЕстьЛиДанномуШаблонуАнкеты() + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ ПЕРВЫЕ 1 + | Анкета.Ссылка + |ИЗ + | Документ.Анкета КАК Анкета + |ГДЕ + | (НЕ Анкета.ПометкаУдаления) + | И Анкета.Опрос В + | (ВЫБРАТЬ + | НазначениеОпросов.Ссылка + | ИЗ + | Документ.НазначениеОпросов КАК НазначениеОпросов + | ГДЕ + | НазначениеОпросов.ШаблонАнкеты = &ШаблонАнкеты)"; + + Запрос.УстановитьПараметр("ШаблонАнкеты",Объект.Ссылка); + + Если НЕ Запрос.Выполнить().Пустой() Тогда + + ПоДанномуШаблонуЕстьАнкеты = Истина; + + Иначе + + ПоДанномуШаблонуЕстьАнкеты = Ложь; + + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьРодителяДеревоАнкеты(ТекущийРодитель,МожетБытьКорнем,ТипВопроса = Неопределено) + + Если МожетБытьКорнем Тогда + + Пока (ТекущийРодитель.ТипСтроки <> "Корень") И (ТекущийРодитель.ТипСтроки <> "Раздел") Цикл + ТекущийРодитель = ТекущийРодитель.ПолучитьРодителя(); + Если ТекущийРодитель = Неопределено Тогда + Возврат ДеревоАнкеты.ПолучитьЭлементы()[0]; + КонецЕсли; + КонецЦикла; + + Иначе + + Пока (ТекущийРодитель.ТипСтроки <> "Раздел") + И ((ТекущийРодитель.ТипСтроки = "Вопрос") И (НЕ ТекущийРодитель.ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.ВопросСУсловием")) + ИЛИ (ТекущийРодитель.ТипСтроки = "Вопрос" И ТекущийРодитель.ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.ВопросСУсловием") И ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.ВопросСУсловием"))) Цикл + + ТекущийРодитель = ТекущийРодитель.ПолучитьРодителя(); + + КонецЦикла + + КонецЕсли; + + Возврат ТекущийРодитель; + +КонецФункции + +// Добавляет вопрос в шаблон анкеты +// +// Параметры +// ТекущиеДанные - ДанныеФормыЭлементДерева - данные текущей строки дерева +// ТипВопроса - Перечисления.ТипыВопросовШаблонаАнкет - тип добавляемого вопроса +// +&НаКлиенте +Процедура ДобавитьВопрос(ТекущиеДанные,ТипВопроса) + + Родитель = ПолучитьРодителяДеревоАнкеты(ТекущиеДанные,Ложь,ТипВопроса); + Если Родитель.ТипСтроки = "Корень" Тогда + Предупреждение(НСтр("ru = 'Вопросы нельзя добавлять в корень анкеты.'"),15,НСтр("ru = 'Ошибка добавления'")); + Возврат; + КонецЕсли; + ДобавитьСтрокуДеревоАнкеты(Родитель,"Вопрос",ТипВопроса); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИнформациюТабличныйВопрос(ТекущиеДанные) + + СтрокаКлюч = СтрЗаменить(Строка(ТекущиеДанные.КлючСтроки),"-","_"); + ИмяТаблицы = "ПревьюТабличногоВопроса_" + СтрокаКлюч; + ИмяРеквизита = "Формулировка_" + ИмяТаблицы; + Попытка + ЭтаФорма[ИмяРеквизита] = СформироватьСтрокуФормулировкиДляПревью(ТекущиеДанные); + Исключение + КонецПопытки; + +КонецПроцедуры + +// Формирует строку с представлением вопроса для отображения в страницах превью +// +// Параметры +// ТекущиеДанные - ДанныеФормыЭлементДерева - данные строки дерева +// +// Возвращаемое значение: +// Строка - возвращаемая строка +// +&НаКлиенте +Функция СформироватьСтрокуФормулировкиДляПревью(ТекущиеДанные) + + Возврат ТекущиеДанные.ПолныйКод + " " + ТекущиеДанные.Формулировка; + +КонецФункции + +&НаКлиенте +Процедура ОпределитьДоступностьДереваШаблона() + + НовыйЭлемент = Объект.Ссылка.Пустая(); + НедоступностьРедактирования = (НовыйЭлемент Или Объект.РедактированиеШаблонаЗавершено ИЛИ ПоДанномуШаблонуЕстьАнкеты); + + Элементы.ДеревоАнкеты.ТолькоПросмотр = НедоступностьРедактирования; + Элементы.ФормаДереваАнкеты.ТолькоПросмотр = НедоступностьРедактирования; + Элементы.ЗакончитьРедактирование.Доступность = НЕ НедоступностьРедактирования; + Элементы.ФормаДереваАнкеты.КоманднаяПанель.Доступность = НЕ НедоступностьРедактирования; + Элементы.ФормаДереваАнкеты.КонтекстноеМеню.Доступность = НЕ НедоступностьРедактирования; + Элементы.КонтекстноеМенюФормаДереваАнкетыДобавить.Доступность = НЕ НедоступностьРедактирования; + Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьРаздел.Доступность = НЕ НедоступностьРедактирования; + Элементы.ДеревоАнкетыКонтекстноеМенюПереместитьВверх.Доступность = НЕ НедоступностьРедактирования; + Элементы.ДеревоАнкетыКонтекстноеМенюПереместитьВниз.Доступность = НЕ НедоступностьРедактирования; + Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьВопрос.Доступность = НЕ НедоступностьРедактирования; + Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьВопросСУсловием.Доступность = НЕ НедоступностьРедактирования; + Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьТабличныйВопрос.Доступность = НЕ НедоступностьРедактирования; + + Если НовыйЭлемент Тогда + ИнформацияДерево = НСтр("ru = 'Для редактирования вопросов необходимо записать шаблон анкеты'"); + Иначе + ИнформацияДерево = НСтр("ru = 'Дерево редактирования вопросов шаблона анкеты'"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьНедоступностьРедактирования() + + Если Объект.РедактированиеШаблонаЗавершено ИЛИ ПоДанномуШаблонуЕстьАнкеты Тогда + + ЭтаФорма.ТолькоПросмотр = Истина; + Элементы.ДеревоАнкеты.ТолькоПросмотр = Истина; + Элементы.ФормаДереваАнкеты.ТолькоПросмотр = Истина; + Элементы.ФормаДереваАнкеты.КоманднаяПанель.Доступность = Ложь; + Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьРаздел.Доступность = Ложь; + Элементы.ДеревоАнкетыКонтекстноеМенюПереместитьВверх.Доступность = Ложь; + Элементы.ДеревоАнкетыКонтекстноеМенюПереместитьВниз.Доступность = Ложь; + Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьВопрос.Доступность = Ложь; + Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьВопросСУсловием.Доступность = Ложь; + Элементы.ДеревоАнкетыКонтекстноеМенюДобавитьТабличныйВопрос.Доступность = Ложь; + Элементы.ЗакончитьРедактирование.Доступность = Ложь; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуПростыхВопросов(ТекущиеДанные) + + СтруктураПараметры = Новый Структура; + СтруктураПараметры.Вставить("ТипСтрокиДерева",ТекущиеДанные.ТипСтроки); + СтруктураПараметры.Вставить("ЭлементарныйВопрос",ТекущиеДанные.ЭлементарныйВопрос); + СтруктураПараметры.Вставить("Обязательный",ТекущиеДанные.Обязательный); + СтруктураПараметры.Вставить("ТипВопроса",ТекущиеДанные.ТипВопроса); + СтруктураПараметры.Вставить("Формулировка",ТекущиеДанные.Формулировка); + СтруктураПараметры.Вставить("ЗакрыватьПриВыборе",Истина); + СтруктураПараметры.Вставить("ЗакрыватьПриЗакрытииВладельца",Истина); + СтруктураПараметры.Вставить("ТолькоПросмотр",Ложь); + СтруктураПараметры.Вставить("ВысотаЭлементаФормулировкиВопроса",ТекущиеДанные.ВысотаЭлементаФормулировкиВопроса); + + ОткрытьФорму("Справочник.ШаблоныАнкет.Форма.ФормаПростыхВопросов",СтруктураПараметры,ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуМастераТабличныхВопросов(ТекущиеДанные) + + СтруктураПараметры = Новый Структура; + СтруктураПараметры.Вставить("ТипТабличногоВопроса",ТекущиеДанные.ТипТабличногоВопроса); + СтруктураПараметры.Вставить("СоставТабличногоВопроса",ТекущиеДанные.СоставТабличногоВопроса); + СтруктураПараметры.Вставить("ПредопределенныеОтветы",ТекущиеДанные.ПредопределенныеОтветы); + СтруктураПараметры.Вставить("Формулировка",ТекущиеДанные.Формулировка); + + ОткрытьФорму("Справочник.ШаблоныАнкет.Форма.ФормаМастераТабличныхВопросов",СтруктураПараметры,ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ПеретащитьЭлементДерева(СтрокаНазначение,СтрокаПеретаскивание,ИспользоватьРодителяСтрокиНазначения = ЛОЖЬ,УдалятьПослеДобавления = Истина); + + Если ИспользоватьРодителяСтрокиНазначения Тогда + НоваяСтрока = СтрокаНазначение.ПолучитьРодителя().ПолучитьЭлементы().Добавить(); + Иначе + НоваяСтрока = СтрокаНазначение.ПолучитьЭлементы().Добавить(); + КонецЕсли; + + ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаПеретаскивание,,"СоставТабличногоВопроса,ПредопределенныеОтветы"); + Если СтрокаПеретаскивание.ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(СтрокаПеретаскивание.СоставТабличногоВопроса,НоваяСтрока.СоставТабличногоВопроса); + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(СтрокаПеретаскивание.ПредопределенныеОтветы,НоваяСтрока.ПредопределенныеОтветы); + КонецЕсли; + + Для каждого Элемент Из СтрокаПеретаскивание.ПолучитьЭлементы() Цикл + ПеретащитьЭлементДерева(НоваяСтрока,Элемент,Ложь,Ложь); + КонецЦикла; + + Если УдалятьПослеДобавления Тогда + СтрокаПеретаскивание.ПолучитьРодителя().ПолучитьЭлементы().Удалить(СтрокаПеретаскивание); + КонецЕсли; + + Если ИспользоватьРодителяСтрокиНазначения Тогда + Элементы.ФормаДереваАнкеты.Развернуть(СтрокаНазначение.ПолучитьРодителя().ПолучитьИдентификатор(),Ложь); + Иначе + Элементы.ФормаДереваАнкеты.Развернуть(СтрокаНазначение.ПолучитьИдентификатор(),Ложь); + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl index 3bdea9203..d15418c53 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl index f492c551a..0eafaa1f4 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,7 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -5,6 +9,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ПерейтиКФормеФайла(Команда) diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl index 3bdea9203..d15418c53 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/Forms/ФормаСписка/Module.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl index f492c551a..602827c5d 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,6 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -5,6 +8,8 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ПерейтиКФормеФайла(Команда) diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/Forms/ФормаВыбора/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/Forms/ФормаВыбора/Module.bsl index bb93b7c9d..d0f8f28c9 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/Forms/ФормаВыбора/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/Forms/ФормаСписка/Module.bsl index baf5d24fe..812c4dfb5 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/Forms/ФормаСписка/Module.bsl @@ -1,4 +1,5 @@ - +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/Forms/ФормаЭлемента/Form.form index 0637be9c2..f54006636 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/Forms/ФормаЭлемента/Form.form @@ -131,5 +131,10 @@ <navigationPanel/> <commandBar/> </commandInterface> - <extInfo xsi:type="form:ChartOfCharacteristicTypesFormExtInfo"/> + <extInfo xsi:type="form:ChartOfCharacteristicTypesFormExtInfo"> + <handlers> + <event>AfterWrite</event> + <name>ПослеЗаписи</name> + </handlers> + </extInfo> </form:Form> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..2d99d65b1 --- /dev/null +++ b/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,9 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + + Оповестить("Запись_ВидыДоступа", Новый Структура, Объект.Ссылка); + +КонецПроцедуры diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/ВидыДоступа.mdo b/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/ВидыДоступа.mdo index ec0ec01b3..45b462895 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/ВидыДоступа.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/ВидыДоступа/ВидыДоступа.mdo @@ -140,6 +140,13 @@ <types>CatalogRef.Организации</types> </type> </items> + <items id="cd687fc6-0a9e-4977-9fd1-70bbea344344"> + <name>ПапкиФайлов</name> + <description>Папки файлов</description> + <type> + <types>CatalogRef.ПапкиФайлов</types> + </type> + </items> <items id="8673dcce-00d9-401b-9cbf-988c4672dc2e"> <name>Пользователи</name> <description>Пользователи</description> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Module.bsl index 6f871f604..200a85746 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Module.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl index 21ed70955..70f825b09 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Module.bsl @@ -1,187 +1,27 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ - -// Управляет видимостью страниц и элементов формы -&НаКлиенте -Процедура УправлениеВидимостью() - - ВозможенКомментарий = НЕ (Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") ИЛИ Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Текст")); - Элементы.ТребуетсяКомментарий.Доступность = ВозможенКомментарий; - Элементы.Комментарий.Доступность = ВозможенКомментарий; - Если НЕ ВозможенКомментарий Тогда - Объект.ТребуетсяКомментарий = Ложь; - Объект.ПояснениеКомментария = ""; - КонецЕсли; - ДоступностьНеобходимостьПояснениеКомментария(); - Элементы.ЗаполнятьАвтоматически.Видимость = Объект.Предопределенный; - - - Если Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Строка") Тогда - - Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.СтраницаСтрока; - - ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Число") Тогда - - Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.СтраницаЧисло; - - ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы") Тогда - - Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.Пустая; - - ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ВидКонтактнойИнформации") Тогда - - Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.КонтактнаяИнформация; - - ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз") - ИЛИ Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") Тогда - - Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.ВариантыОтветов; - - ДоступностьТаблицыВариантыОтветов(); - - Иначе - - - Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.Пустая; - - КонецЕсли; - - -КонецПроцедуры // УправлениеВидимостью() +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаКлиенте -Процедура ДоступностьНеобходимостьПояснениеКомментария() - - Элементы.ПояснениеКомментария.АвтоОтметкаНезаполненного = Объект.ТребуетсяКомментарий; - Элементы.ПояснениеКомментария.ТолькоПросмотр = НЕ Объект.ТребуетсяКомментарий; - - ОтключитьОтметкуНезаполненного(); - -КонецПроцедуры // ДоступностьНеобходимостьПояснениеКомментария() - -&НаКлиенте -Процедура ДоступностьТаблицыВариантыОтветов() - - Если Объект.Ссылка.Пустая() Тогда - Элементы.ТаблицаВариантыОтветов.ТолькоПросмотр = Истина; - ИнформацияВариантыОтветов = НСтр("ru = 'Для редактирования вариантов ответов необходимо записать вопрос для анкетирования'"); - Иначе - Элементы.ТаблицаВариантыОтветов.ТолькоПросмотр = Ложь; - ИнформацияВариантыОтветов = НСтр("ru = 'Варианты ответов на вопрос:'"); - КонецЕсли; - - Если ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз") Тогда - Элементы.ТребуетОткрытогоОтвета.Видимость = Ложь; - ИначеЕсли ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") Тогда - Элементы.ТребуетОткрытогоОтвета.Видимость = Истина; - КонецЕсли; - -КонецПроцедуры // ВидимостьТаблицыВариантыОтветов() - -&НаКлиенте -Процедура ОткрытьФормуЭлементаСправочникаВопросыОтветовАнкет(Элемент,РежимДобавления) - - СтруктураПараметров = Новый Структура; - СтруктураПараметров.Вставить("Владелец",Объект.Ссылка); - СтруктураПараметров.Вставить("ТипОтвета",Объект.ТипОтвета); - - Если Не РежимДобавления Тогда - ТекущиеДанные = Элементы.ТаблицаВариантыОтветов.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - СтруктураПараметров.Вставить("Ключ",ТекущиеДанные.Ссылка); - КонецЕсли; - - ОткрытьФорму("Справочник.ВариантыОтветовАнкет.Форма.ФормаЭлемента",СтруктураПараметров,Элемент); - -КонецПроцедуры // () - -&НаСервере -Процедура УстановитьТипОтвета() - - Для каждого ЗначениеПеречисления Из Метаданные.Перечисления.ТипыОтветовНаВопрос.ЗначенияПеречисления Цикл - - Если Перечисления.ТипыОтветовНаВопрос[ЗначениеПеречисления.Имя] = Перечисления.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы Тогда - - Для каждого ДоступныйТип Из РеквизитФормыВЗначение("Объект").Метаданные().Тип.Типы() Цикл - - Если ДоступныйТип = Тип("Строка") ИЛИ ДоступныйТип = Тип("Булево") ИЛИ ДоступныйТип = Тип("Число") ИЛИ ДоступныйТип = Тип("Дата") ИЛИ ДоступныйТип = Тип("СправочникСсылка.ВариантыОтветовАнкет") Тогда - Продолжить; - КонецЕсли; - - МассивТипов = Новый Массив; - МассивТипов.Добавить(ДоступныйТип); - Элементы.ТипОтвета.СписокВыбора.Добавить(Новый ОписаниеТипов(МассивТипов)); - - КонецЦикла; - - Иначе - Элементы.ТипОтвета.СписокВыбора.Добавить(Перечисления.ТипыОтветовНаВопрос[ЗначениеПеречисления.Имя]); - КонецЕсли; - - КонецЦикла; - - Если Объект.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы Тогда - - ТипОтвета = Объект.ТипЗначения; - - Иначе - - ТипОтвета = Объект.ТипОтвета; - - КонецЕсли; - -КонецПроцедуры - -// Устанавливает точность числового ответа в зависимости от выбранной длины -// -&НаКлиенте -Процедура УстановитьТочностьВЗависимостиОтДлиныЧисла() - - Если Объект.Длина > 15 Тогда - Объект.Длина = 15; - КонецЕсли; - - Если Объект.Длина = 0 Тогда - Объект.Точность = 0; - ИначеЕсли Объект.Длина <= Объект.Точность Тогда - Объект.Точность = Объект.Длина - 1; - КонецЕсли; - - Если Объект.Точность > 3 Тогда - Объект.Точность = 3; - КонецЕсли; - - Если (Объект.Длина - Объект.Точность) > 12 Тогда - Объект.Длина = Объект.Точность + 12; - КонецЕсли; -КонецПроцедуры // () - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаКлиенте Процедура ПриОткрытии(Отказ) УправлениеВидимостью(); КонецПроцедуры -&НаСервере +&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //установим отбор по владельцу на динамическом списке справочника "Варианты ответов анкет" ЭлементОтбораДанных = ВариантыОтветов.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Владелец"); - ЭлементОтбораДанных.Использование = Истина; - ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбораДанных.ПравоеЗначение = Объект.Ссылка; + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Владелец"); + ЭлементОтбораДанных.Использование = Истина; + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораДанных.ПравоеЗначение = Объект.Ссылка; УстановитьТипОтвета(); Если ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Строка Тогда - ДлинаСтроки = Объект.Длина; + ДлинаСтроки = Объект.Длина; КонецЕсли; КонецПроцедуры @@ -193,7 +33,7 @@ Если Объект.МинимальноеЗначение > Объект.МаксимальноеЗначение Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Минимально допустимое значение не может быть больше чем максимальное.'"),, - "Объект.МинимальноеЗначение"); + "Объект.МинимальноеЗначение"); Отказ = Истина; КонецЕсли; @@ -201,7 +41,7 @@ Объект.Длина = ДлинаСтроки; Если ДлинаСтроки = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не заполнено значение длины строки.'"),,"ДлинаСтроки"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не заполнено значение длины строки.'"),,"ДлинаСтроки"); Отказ = Истина; КонецЕсли; @@ -213,8 +53,8 @@ КонецПроцедуры -////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ТипОтветаПриИзменении(Элемент) @@ -222,22 +62,22 @@ Если ТипЗнч(ТипОтвета) = Тип("ПеречислениеСсылка.ТипыОтветовНаВопрос") Тогда Объект.ТипОтвета = ТипОтвета; - + ИначеЕсли ТипЗнч(ТипОтвета) = Тип("ОписаниеТипов") Тогда - Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы"); - Объект.ТипЗначения = ТипОтвета; + Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы"); + Объект.ТипЗначения = ТипОтвета; КонецЕсли; - УправлениеВидимостью(); + УправлениеВидимостью(); Если Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Число") Тогда - УстановитьТочностьВЗависимостиОтДлиныЧисла(); + УстановитьТочностьВЗависимостиОтДлиныЧисла(); КонецЕсли; КонецПроцедуры - + &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) @@ -250,7 +90,7 @@ Процедура ТаблицаВариантыОтветовПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) Отказ = Истина; - ОткрытьФормуЭлементаСправочникаВопросыОтветовАнкет(Элемент,Истина); + ОткрытьФормуЭлементаСправочникаВопросыОтветовАнкет(Элемент,Истина); КонецПроцедуры @@ -301,17 +141,16 @@ УстановитьТочностьВЗависимостиОтДлиныЧисла(); КонецПроцедуры - - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ПОДСИСТЕМЫ НАСТРОЙКИ ПОРЯДКА ЭЛЕМЕНТОВ ДЛЯ ПОДЧИНЕННОГО СПРАВОЧНИКА -// ВАРИАНТЫ ОТВЕТОВ АНКЕТ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ПереместитьЭлементВверх(Команда) НастройкаПорядкаЭлементовКлиент.ПереместитьЭлементВверхВыполнить(ВариантыОтветов, Элементы.ТаблицаВариантыОтветов); -КонецПроцедуры +КонецПроцедуры &НаКлиенте Процедура ПереместитьЭлементВниз(Команда) @@ -320,3 +159,164 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Управляет видимостью страниц и элементов формы +&НаКлиенте +Процедура УправлениеВидимостью() + + ВозможенКомментарий = НЕ (Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") ИЛИ Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Текст")); + Элементы.ТребуетсяКомментарий.Доступность = ВозможенКомментарий; + Элементы.Комментарий.Доступность = ВозможенКомментарий; + Если НЕ ВозможенКомментарий Тогда + Объект.ТребуетсяКомментарий = Ложь; + Объект.ПояснениеКомментария = ""; + КонецЕсли; + ДоступностьНеобходимостьПояснениеКомментария(); + Элементы.ЗаполнятьАвтоматически.Видимость = Объект.Предопределенный; + + + Если Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Строка") Тогда + + Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.СтраницаСтрока; + + ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.Число") Тогда + + Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.СтраницаЧисло; + + ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы") Тогда + + Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.Пустая; + + ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ВидКонтактнойИнформации") Тогда + + Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.КонтактнаяИнформация; + + ИначеЕсли Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз") + ИЛИ Объект.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") Тогда + + Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.ВариантыОтветов; + + ДоступностьТаблицыВариантыОтветов(); + + Иначе + + + Элементы.ЗависимыеПараметры.ТекущаяСтраница = Элементы.Пустая; + + КонецЕсли; + + +КонецПроцедуры + +&НаКлиенте +Процедура ДоступностьНеобходимостьПояснениеКомментария() + + Элементы.ПояснениеКомментария.АвтоОтметкаНезаполненного = Объект.ТребуетсяКомментарий; + Элементы.ПояснениеКомментария.ТолькоПросмотр = НЕ Объект.ТребуетсяКомментарий; + + ОтключитьОтметкуНезаполненного(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДоступностьТаблицыВариантыОтветов() + + Если Объект.Ссылка.Пустая() Тогда + Элементы.ТаблицаВариантыОтветов.ТолькоПросмотр = Истина; + ИнформацияВариантыОтветов = НСтр("ru = 'Для редактирования вариантов ответов необходимо записать вопрос для анкетирования'"); + Иначе + Элементы.ТаблицаВариантыОтветов.ТолькоПросмотр = Ложь; + ИнформацияВариантыОтветов = НСтр("ru = 'Варианты ответов на вопрос:'"); + КонецЕсли; + + Если ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз") Тогда + Элементы.ТребуетОткрытогоОтвета.Видимость = Ложь; + ИначеЕсли ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") Тогда + Элементы.ТребуетОткрытогоОтвета.Видимость = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуЭлементаСправочникаВопросыОтветовАнкет(Элемент,РежимДобавления) + + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("Владелец",Объект.Ссылка); + СтруктураПараметров.Вставить("ТипОтвета",Объект.ТипОтвета); + + Если Не РежимДобавления Тогда + ТекущиеДанные = Элементы.ТаблицаВариантыОтветов.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + СтруктураПараметров.Вставить("Ключ",ТекущиеДанные.Ссылка); + КонецЕсли; + + ОткрытьФорму("Справочник.ВариантыОтветовАнкет.Форма.ФормаЭлемента",СтруктураПараметров,Элемент); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьТипОтвета() + + Для каждого ЗначениеПеречисления Из Метаданные.Перечисления.ТипыОтветовНаВопрос.ЗначенияПеречисления Цикл + + Если Перечисления.ТипыОтветовНаВопрос[ЗначениеПеречисления.Имя] = Перечисления.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы Тогда + + Для каждого ДоступныйТип Из РеквизитФормыВЗначение("Объект").Метаданные().Тип.Типы() Цикл + + Если ДоступныйТип = Тип("Строка") ИЛИ ДоступныйТип = Тип("Булево") ИЛИ ДоступныйТип = Тип("Число") ИЛИ ДоступныйТип = Тип("Дата") ИЛИ ДоступныйТип = Тип("СправочникСсылка.ВариантыОтветовАнкет") Тогда + Продолжить; + КонецЕсли; + + МассивТипов = Новый Массив; + МассивТипов.Добавить(ДоступныйТип); + Элементы.ТипОтвета.СписокВыбора.Добавить(Новый ОписаниеТипов(МассивТипов)); + + КонецЦикла; + + Иначе + Элементы.ТипОтвета.СписокВыбора.Добавить(Перечисления.ТипыОтветовНаВопрос[ЗначениеПеречисления.Имя]); + КонецЕсли; + + КонецЦикла; + + Если Объект.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы Тогда + + ТипОтвета = Объект.ТипЗначения; + + Иначе + + ТипОтвета = Объект.ТипОтвета; + + КонецЕсли; + +КонецПроцедуры + +// Устанавливает точность числового ответа в зависимости от выбранной длины +// +&НаКлиенте +Процедура УстановитьТочностьВЗависимостиОтДлиныЧисла() + + Если Объект.Длина > 15 Тогда + Объект.Длина = 15; + КонецЕсли; + + Если Объект.Длина = 0 Тогда + Объект.Точность = 0; + ИначеЕсли Объект.Длина <= Объект.Точность Тогда + Объект.Точность = Объект.Длина - 1; + КонецЕсли; + + Если Объект.Точность > 3 Тогда + Объект.Точность = 3; + КонецЕсли; + + Если (Объект.Длина - Объект.Точность) > 12 Тогда + Объект.Длина = Объект.Точность + 12; + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl index fca50db19..cf8c33c6a 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ObjectModule.bsl @@ -1,12 +1,13 @@ + //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий объекта +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если ЭтоГруппа Тогда Возврат; - КонецЕсли; - + КонецЕсли; + МассивНепроверяемыхРеквизитов = Новый Массив(); Если Не ТребуетсяКомментарий Тогда @@ -16,22 +17,22 @@ Если (ТипОтвета <> Перечисления.ТипыОтветовНаВопрос.Строка) И (ТипОтвета <> Перечисления.ТипыОтветовНаВопрос.Число) Тогда МассивНепроверяемыхРеквизитов.Добавить("Длина"); - КонецЕсли; + КонецЕсли; Если ТипОтвета <> Перечисления.ТипыОтветовНаВопрос.ЗначениеИнформационнойБазы Тогда МассивНепроверяемыхРеквизитов.Добавить("ТипЗначения"); - КонецЕсли; + КонецЕсли; Если ТипОтвета <> Перечисления.ТипыОтветовНаВопрос.ВидКонтактнойИнформации Тогда МассивНепроверяемыхРеквизитов.Добавить("ВидКонтактнойИнформации"); - КонецЕсли; + КонецЕсли; ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов); КонецПроцедуры - + Процедура ПередЗаписью(Отказ) - Если ОбменДанными.Загрузка Тогда - Возврат; + Если ОбменДанными.Загрузка Тогда + Возврат; КонецЕсли; Если Не ЭтоГруппа Тогда @@ -42,7 +43,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Процедура очищает значения ненужных реквизитов, // Такая ситуация возникает, когда пользователь изменяет тип ответа при редактировании. @@ -53,10 +54,10 @@ ВидКонтактнойИнформации = Справочники.ВидыКонтактнойИнформации.ПустаяСсылка(); - КонецЕсли; + КонецЕсли; Если ((ТипОтвета <> Перечисления.ТипыОтветовНаВопрос.Число) И (ТипОтвета <> Перечисления.ТипыОтветовНаВопрос.Строка) И (ТипОтвета <> Перечисления.ТипыОтветовНаВопрос.Текст)) - И (Длина <> 0)Тогда + И (Длина <> 0)Тогда Длина = 0; @@ -64,18 +65,18 @@ Если (ТипОтвета <> Перечисления.ТипыОтветовНаВопрос.Число) Тогда - МинимальноеЗначение = 0; - МаксимальноеЗначение = 0; - АгрегироватьСуммуВОтчетах = Ложь; + МинимальноеЗначение = 0; + МаксимальноеЗначение = 0; + АгрегироватьСуммуВОтчетах = Ложь; - КонецЕсли; + КонецЕсли; Если ТипОтвета = Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз Тогда - ТребуетсяКомментарий = Ложь; + ТребуетсяКомментарий = Ложь; ПояснениеКомментария = ""; КонецЕсли; -КонецПроцедуры // () +КонецПроцедуры //Устанавливает тип значения ПВХ в зависимости от типа ответа Процедура УстановкаТипаПВХ() @@ -85,30 +86,30 @@ // Квалификаторы КЧ = Новый КвалификаторыЧисла(?(Длина = 0,15,Длина),Точность); КС = Новый КвалификаторыСтроки(Длина); - КД = Новый КвалификаторыДаты(ЧастиДаты.Дата); + КД = Новый КвалификаторыДаты(ЧастиДаты.Дата); // Описание типов - ОписаниеТиповЧисло = Новый ОписаниеТипов("Число",,КЧ); - ОписаниеТиповСтрока = Новый ОписаниеТипов("Строка", , КС); - ОписаниеТиповДата = Новый ОписаниеТипов("Дата",КД , , ); - ОписаниеТиповБулево = Новый ОписаниеТипов("Булево"); - ОписаниеТиповВО = Новый ОписаниеТипов("СправочникСсылка.ВариантыОтветовАнкет"); + ОписаниеТиповЧисло = Новый ОписаниеТипов("Число",,КЧ); + ОписаниеТиповСтрока = Новый ОписаниеТипов("Строка", , КС); + ОписаниеТиповДата = Новый ОписаниеТипов("Дата",КД , , ); + ОписаниеТиповБулево = Новый ОписаниеТипов("Булево"); + ОписаниеТиповВО = Новый ОписаниеТипов("СправочникСсылка.ВариантыОтветовАнкет"); Если ТипОтвета = ТипыОтветовНаВопрос.Строка Тогда - ТипЗначения = ОписаниеТиповСтрока; + ТипЗначения = ОписаниеТиповСтрока; ИначеЕсли ТипОтвета = ТипыОтветовНаВопрос.Текст Тогда - ТипЗначения = ОписаниеТиповСтрока; + ТипЗначения = ОписаниеТиповСтрока; ИначеЕсли ТипОтвета = ТипыОтветовНаВопрос.Число Тогда - ТипЗначения = ОписаниеТиповЧисло; + ТипЗначения = ОписаниеТиповЧисло; ИначеЕсли ТипОтвета = ТипыОтветовНаВопрос.Дата Тогда - ТипЗначения = ОписаниеТиповДата; + ТипЗначения = ОписаниеТиповДата; ИначеЕсли ТипОтвета = ТипыОтветовНаВопрос.Булево Тогда @@ -116,13 +117,13 @@ ИначеЕсли ТипОтвета = ТипыОтветовНаВопрос.ВидКонтактнойИнформации Тогда - ТипЗначения = ОписаниеТиповСтрока; + ТипЗначения = ОписаниеТиповСтрока; - ИначеЕсли ТипОтвета =ТипыОтветовНаВопрос.ОдинВариантИз + ИначеЕсли ТипОтвета =ТипыОтветовНаВопрос.ОдинВариантИз ИЛИ ТипОтвета = ТипыОтветовНаВопрос.НесколькоВариантовИз Тогда - ТипЗначения = ОписаниеТиповВО; - - КонецЕсли; + ТипЗначения = ОписаниеТиповВО; + + КонецЕсли; -КонецПроцедуры // УстановкаТипаПВХ()() \ No newline at end of file +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Form.form new file mode 100644 index 000000000..a5657aa81 --- /dev/null +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Form.form @@ -0,0 +1,641 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormGroup"> + <name>ДиалогиПользователя</name> + <id>1</id> + <items xsi:type="form:FormGroup"> + <name>ОбъектНеИспользуется</name> + <id>2</id> + <items xsi:type="form:FormGroup"> + <name>Пояснения</name> + <id>12</id> + <items xsi:type="form:FormGroup"> + <name>ПояснениеДополнительногоРеквизита</name> + <id>22</id> + <items xsi:type="form:Decoration"> + <name>ТекстПоясненияДополнительногоРеквизита</name> + <id>23</id> + <title> + <key>ru</key> + <value>Дополнительный реквизит не используется в информационной базе. + +Тип значения дополнительного реквизита можно изменять.</value> + + true + true + + true + + + ТекстПоясненияДополнительногоРеквизитаРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ТекстПоясненияДополнительногоРеквизитаКонтекстноеМеню + 24 + true + + Label + true + 4 + true + false + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Пояснение дополнительного реквизита</value> + + + ru + Пояснение дополнительного реквизита + + + ПояснениеДополнительногоРеквизитаРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Page + + Vertical + + + + ПояснениеДополнительногоСведения + 25 + + ТекстПоясненияДополнительногоСведения + 26 + + <key>ru</key> + <value>Дополнительное сведение не используется в информационной базе. + +Тип значения дополнительного сведения можно изменять.</value> + + true + true + + true + + + ТекстПоясненияДополнительногоСведенияРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ТекстПоясненияДополнительногоСведенияКонтекстноеМеню + 27 + true + + Label + true + 4 + true + false + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Пояснение дополнительного сведения</value> + + + ru + Пояснение дополнительного сведения + + + ПояснениеДополнительногоСведенияРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Page + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Пояснения</value> + + + ru + Пояснения + + + ПоясненияРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + Pages + + Auto + + + + КнопкиПояснения + 13 + + ОК + 16 + + <key>ru</key> + <value>ОК</value> + + true + true + + true + + false + + ОКРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + Form.Command.РазрешитьРедактирование + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Кнопки пояснения</value> + + + ru + Кнопки пояснения + + + КнопкиПоясненияРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Объект не используется</value> + + + ru + Объект не используется + + + ОбъектНеИспользуетсяРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Page + + Vertical + + + + ОбъектИспользуется + 3 + + Предупреждения + 17 + + ПредупреждениеДополнительногоРеквизита + 18 + + ТекстПредупрежденияДополнительногоРеквизита + 6 + + <key>ru</key> + <value>Внимание! Дополнительный реквизит уже используется в информационной базе. + +Изменение типа значения дополнительного реквизита может привести к потере +ранее установленных значений его текущего типа.</value> + + true + true + + true + + + ТекстПредупрежденияДополнительногоРеквизитаРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ТекстПредупрежденияДополнительногоРеквизитаКонтекстноеМеню + 7 + true + + Label + true + 4 + true + false + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Предупреждение дополнительного реквизита</value> + + + ru + Предупреждение дополнительного реквизита + + + ПредупреждениеДополнительногоРеквизитаРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Page + + Vertical + + + + ПредупреждениеДополнительногоСведения + 19 + + ТекстПредупрежденияДополнительногоСведения + 20 + + <key>ru</key> + <value>Внимание! Дополнительное сведение уже используется в информационной базе. + +Изменение типа значения дополнительного сведения может привести к потере +ранее установленных значений его текущего типа.</value> + + true + true + + true + + + ТекстПредупрежденияДополнительногоСведенияРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ТекстПредупрежденияДополнительногоСведенияКонтекстноеМеню + 21 + true + + Label + true + 4 + true + false + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Предупреждение дополнительного сведения</value> + + + ru + Предупреждение дополнительного сведения + + + ПредупреждениеДополнительногоСведенияРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Page + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Предупреждения</value> + + + ru + Предупреждения + + + ПредупрежденияРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + Pages + + Auto + + + + КнопкиПредупреждения + 8 + + РазрешитьРедактирование + 9 + true + true + + true + + false + + РазрешитьРедактированиеРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Form.Command.РазрешитьРедактирование + Normal + Auto + true + true + UserCmds + Auto + + + Отмена + 11 + true + true + + true + + false + + ОтменаРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Кнопки предупреждения</value> + + + ru + Кнопки предупреждения + + + КнопкиПредупрежденияРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Объект используется</value> + + + ru + Объект используется + + + ОбъектИспользуетсяРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Page + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Диалоги пользователя</value> + + + ru + Диалоги пользователя + + + ДиалогиПользователяРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + Pages + + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + РазрешитьРедактирование + + <key>ru</key> + <value>Разрешить редактирование</value> + + 1 + + ru + Разрешить редактирование + + + true + + + + РазрешитьРедактирование + + + Auto + Auto + + + Ссылка + + ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения + + + + + + + diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl new file mode 100644 index 000000000..fce93b849 --- /dev/null +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Module.bsl @@ -0,0 +1,45 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначения.ОбъектИспользуютсяВБазеДанных(Параметры.Ссылка) Тогда + + Элементы.ДиалогиПользователя.ТекущаяСтраница = Элементы.ОбъектИспользуется; + Элементы.РазрешитьРедактирование.КнопкаПоУмолчанию = Истина; + + Если Параметры.ЭтоДополнительныйРеквизит = Истина Тогда + Элементы.Предупреждения.ТекущаяСтраница = Элементы.ПредупреждениеДополнительногоРеквизита; + Иначе + Элементы.Предупреждения.ТекущаяСтраница = Элементы.ПредупреждениеДополнительногоСведения; + КонецЕсли; + Иначе + Элементы.ДиалогиПользователя.ТекущаяСтраница = Элементы.ОбъектНеИспользуется; + Элементы.ОК.КнопкаПоУмолчанию = Истина; + + Если Параметры.ЭтоДополнительныйРеквизит = Истина Тогда + Элементы.Пояснения.ТекущаяСтраница = Элементы.ПояснениеДополнительногоРеквизита; + Иначе + Элементы.Пояснения.ТекущаяСтраница = Элементы.ПояснениеДополнительногоСведения; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура РазрешитьРедактирование(Команда) + + Результат = Новый Массив; + Результат.Добавить("ТипЗначения"); + Закрыть(Результат); + +КонецПроцедуры diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаГруппы/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаГруппы/Module.bsl index 76a62c9d5..80ee121de 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаГруппы/Module.bsl @@ -1,6 +1,12 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура КомментарийОткрытие(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; - ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияКомментария(Элемент.ТекстРедактирования, Объект.Комментарий, Модифицированность); + + ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияКомментария( + Элемент.ТекстРедактирования, Объект.Комментарий, Модифицированность); + КонецПроцедуры diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаПоискаСсылокНаПВХ/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаПоискаСсылокНаПВХ/Module.bsl deleted file mode 100644 index d45700bbd..000000000 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаПоискаСсылокНаПВХ/Module.bsl +++ /dev/null @@ -1,22 +0,0 @@ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если ЗапретРедактированияРеквизитовОбъектов.ПроверитьНаОбъектыИмеютсяСсылкиВИБ(Параметры.Ссылка) Тогда - Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаНайденыСсылки; - Элементы.РазрешитьРедактирование.КнопкаПоУмолчанию = Истина; - Иначе - Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаСсылокНеНайдено; - Элементы.ОК.КнопкаПоУмолчанию = Истина; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура РазрешитьРедактирование(Команда) - - Результат = Новый Массив; - Результат.Добавить("ТипЗначения"); - Закрыть(Результат); - -КонецПроцедуры diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов/Form.form index cbddd0169..53adeb7dd 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов/Form.form @@ -421,7 +421,7 @@ - ЗавершитьВыполнить + Завершить TextPicture @@ -447,7 +447,7 @@ - ОтменаВыполнить + Отмена TextPicture diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов/Module.bsl index 7d5ce2e68..321b16988 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов/Module.bsl @@ -1,6 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -17,21 +16,27 @@ | Справочник.НаборыДополнительныхРеквизитовИСведений КАК НаборыДополнительныхРеквизитовИСведений | |УПОРЯДОЧИТЬ ПО - | Ссылка ИЕРАРХИЯ + | НаборыДополнительныхРеквизитовИСведений.Ссылка ИЕРАРХИЯ |АВТОУПОРЯДОЧИВАНИЕ"; Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); МассивУдаляемыхСтрок = Новый Массив; - Для Каждого СтрокаДерева Из Дерево.Строки Цикл - Справочники.НаборыДополнительныхРеквизитовИСведений.ПолучитьЧастиИмени(СтрокаДерева.Набор, ПерваяЧастьИмени, ВтораяЧастьИмени); + Для каждого СтрокаДерева Из Дерево.Строки Цикл + + ВидыСвойствНабора = УправлениеСвойствами.ВидыСвойствНабора(СтрокаДерева.Набор); + ИспользоватьДопРеквизиты = ВидыСвойствНабора.ДополнительныеРеквизиты; + ИспользоватьДопСведения = ВидыСвойствНабора.ДополнительныеСведения; Если Параметры.ЭтоДополнительноеСведение - И НЕ Справочники.НаборыДополнительныхРеквизитовИСведений.ИспользуютсяДопСведения(ПерваяЧастьИмени, ВтораяЧастьИмени) Тогда + И НЕ ВидыСвойствНабора.ИспользоватьДопСведения Тогда + МассивУдаляемыхСтрок.Добавить(СтрокаДерева); + ИначеЕсли НЕ Параметры.ЭтоДополнительноеСведение - И НЕ Справочники.НаборыДополнительныхРеквизитовИСведений.ИспользуютсяДопРеквизиты(ПерваяЧастьИмени, ВтораяЧастьИмени) Тогда + И НЕ ВидыСвойствНабора.ИспользоватьДопРеквизиты Тогда + МассивУдаляемыхСтрок.Добавить(СтрокаДерева); КонецЕсли; КонецЦикла; @@ -41,15 +46,16 @@ КонецЦикла; ВыбранныеНаборы = Параметры.ВыбранныеНаборы; - Для Каждого Набор Из ВыбранныеНаборы Цикл - Стр = Дерево.Строки.Найти(Набор.Значение, "Набор", Истина); - Если Стр <> Неопределено Тогда - Стр.Выбран = Истина; + Для каждого Набор Из ВыбранныеНаборы Цикл + + Строка = Дерево.Строки.Найти(Набор.Значение, "Набор", Истина); + Если Строка <> Неопределено Тогда + Строка.Выбран = Истина; КонецЕсли; КонецЦикла; - Для Каждого Стр Из Дерево.Строки Цикл - ПроверитьФлагУСтроки(Стр); + Для Каждого Строка Из Дерево.Строки Цикл + ПроверитьФлагУСтроки(Строка); КонецЦикла; ЗначениеВРеквизитФормы(Дерево, "ДеревоНаборов"); @@ -58,76 +64,56 @@ КонецПроцедуры -&НаКлиенте -Функция ПроверитьМожноЗакрытьФорму() - - Если Модифицированность И Не БылаНажатаКлавишаЗакрытия Тогда - Ответ = Вопрос(НСтр("ru = 'Отказаться от изменений?'"), РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Нет Тогда - Возврат Ложь; - КонецЕсли; - КонецЕсли; - - Возврат Истина; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ВыбранПриИзменении(Элемент) - текДанные = Элементы.ДеревоНаборов.ТекущиеДанные; - Если текДанные = Неопределено Тогда + ТекущиеДанные = Элементы.ДеревоНаборов.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; - Если текДанные.Выбран = 2 Тогда - текДанные.Выбран = 0; + Если ТекущиеДанные.Выбран = 2 Тогда + ТекущиеДанные.Выбран = 0; КонецЕсли; - Строки = текДанные.ПолучитьЭлементы(); - УстановитьФлагПодчиненнымСтрокам(Строки, текДанные.Выбран); + Строки = ТекущиеДанные.ПолучитьЭлементы(); + УстановитьФлагПодчиненнымСтрокам(Строки, ТекущиеДанные.Выбран); - текЭлемент = текДанные.ПолучитьРодителя(); - Пока текЭлемент <> Неопределено Цикл + ТекущийЭлемент = ТекущиеДанные.ПолучитьРодителя(); + Пока ТекущийЭлемент <> Неопределено Цикл Есть0 = Ложь; Есть1 = Ложь; Есть2 = Ложь; - Для Каждого Стр Из текЭлемент.ПолучитьЭлементы() Цикл - Есть0 = Есть0 ИЛИ (Стр.Выбран = 0); - Есть1 = Есть1 ИЛИ (Стр.Выбран = 1); - Есть2 = Есть2 ИЛИ (Стр.Выбран = 2); + Для Каждого Строка Из ТекущийЭлемент.ПолучитьЭлементы() Цикл + Есть0 = Есть0 ИЛИ (Строка.Выбран = 0); + Есть1 = Есть1 ИЛИ (Строка.Выбран = 1); + Есть2 = Есть2 ИЛИ (Строка.Выбран = 2); КонецЦикла; Если Не Есть1 И Не Есть2 Тогда - текЭлемент.Выбран = 0; + ТекущийЭлемент.Выбран = 0; + ИначеЕсли Не Есть2 И Не Есть0 Тогда - текЭлемент.Выбран = 1; + ТекущийЭлемент.Выбран = 1; Иначе - текЭлемент.Выбран = 2; + ТекущийЭлемент.Выбран = 2; КонецЕсли; - текЭлемент = текЭлемент.ПолучитьРодителя(); + ТекущийЭлемент = ТекущийЭлемент.ПолучитьРодителя(); КонецЦикла; КонецПроцедуры -&НаКлиенте -Процедура ОтменаВыполнить() - - БылаНажатаКлавишаЗакрытия = Ложь; - Если ПроверитьМожноЗакрытьФорму() Тогда - Закрыть(); - КонецЕсли; - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте -Процедура ЗавершитьВыполнить() +Процедура Завершить(Команда) БылаНажатаКлавишаЗакрытия = Истина; @@ -140,18 +126,45 @@ КонецПроцедуры +&НаКлиенте +Процедура Отмена(Команда) + + БылаНажатаКлавишаЗакрытия = Ложь; + Если ПроверитьМожноЗакрытьФорму() Тогда + Закрыть(); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Функция ПроверитьМожноЗакрытьФорму() + + Если Модифицированность И Не БылаНажатаКлавишаЗакрытия Тогда + + Ответ = Вопрос(НСтр("ru = 'Отказаться от изменений?'"), РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Нет Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Истина; + +КонецФункции &НаКлиенте Процедура ЗаполнитьВыбранныеНаборы(ВыбранныеНаборы, Строки) - Для Каждого Стр Из Строки Цикл - подчСтроки = Стр.ПолучитьЭлементы(); - Если подчСтроки.Количество() <> 0 Тогда - ЗаполнитьВыбранныеНаборы(ВыбранныеНаборы, подчСтроки); - ИначеЕсли Стр.Выбран Тогда - ВыбранныеНаборы.Добавить(Стр.Набор, Стр.Наименование); + Для каждого Строка Из Строки Цикл + ПодчиненныеСтроки = Строка.ПолучитьЭлементы(); + + Если ПодчиненныеСтроки.Количество() <> 0 Тогда + ЗаполнитьВыбранныеНаборы(ВыбранныеНаборы, ПодчиненныеСтроки); + + ИначеЕсли Строка.Выбран Тогда + ВыбранныеНаборы.Добавить(Строка.Набор, Строка.Наименование); КонецЕсли; КонецЦикла; @@ -168,15 +181,18 @@ Есть1 = Ложь; Есть2 = Ложь; - Для Каждого Стр Из СтрокаДерева.Строки Цикл - ПроверитьФлагУСтроки(Стр); - Есть0 = Есть0 ИЛИ (Стр.Выбран = 0); - Есть1 = Есть1 ИЛИ (Стр.Выбран = 1); - Есть2 = Есть2 ИЛИ (Стр.Выбран = 2); + Для Каждого Строка Из СтрокаДерева.Строки Цикл + + ПроверитьФлагУСтроки(Строка); + + Есть0 = Есть0 ИЛИ (Строка.Выбран = 0); + Есть1 = Есть1 ИЛИ (Строка.Выбран = 1); + Есть2 = Есть2 ИЛИ (Строка.Выбран = 2); КонецЦикла; Если Не Есть1 И Не Есть2 Тогда СтрокаДерева.Выбран = 0; + ИначеЕсли Не Есть2 И Не Есть0 Тогда СтрокаДерева.Выбран = 1; Иначе @@ -188,9 +204,10 @@ &НаКлиенте Процедура УстановитьФлагПодчиненнымСтрокам(Строки, Флаг) - Для Каждого Стр Из Строки Цикл - Стр.Выбран = Флаг; - УстановитьФлагПодчиненнымСтрокам(Стр.ПолучитьЭлементы(), Флаг) + Для Каждого Строка Из Строки Цикл + Строка.Выбран = Флаг; + УстановитьФлагПодчиненнымСтрокам(Строка.ПолучитьЭлементы(), Флаг) КонецЦикла; КонецПроцедуры + diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form index d0446002d..61616dd60 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form @@ -706,10 +706,10 @@ true - спсНаборов + СписокНаборов <key>ru</key> - <value>Спс наборов</value> + <value>Список наборов</value> 2 @@ -832,7 +832,7 @@ - РедактироватьСписокНаборовВыполнить + РедактироватьСписокНаборов Auto diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl index 7da4e7d4f..287762409 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl @@ -1,21 +1,22 @@ - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Обработчик подсистемы запрета редактирования реквизитов объектов + // Обработчик подсистемы запрета редактирования реквизитов объектов. ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтаФорма); ОбновитьСоставЭлементовФормы(); - ЕдинственноеЧислоПредмета = СтрПолучитьСтроку(Объект.СклоненияПредмета, 1); + ЕдинственноеЧислоПредмета = СтрПолучитьСтроку(Объект.СклоненияПредмета, 1); МножественноеЧислоПредмета = СтрПолучитьСтроку(Объект.СклоненияПредмета, 2); ОткрываетсяИзНабораСвойств = Параметры.ОткрываетсяИзНабораСвойств; - Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + Элементы.ЭтоДополнительноеСведениеРеквизит.Доступность = Ложь; + Иначе Если Параметры.ОткрываетсяИзНабораСвойств Тогда Если ЗначениеЗаполнено(Параметры.Копируемый) Тогда Объект.Наименование = Параметры.Копируемый.Наименование; @@ -45,7 +46,7 @@ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК ДополнительныеРеквизиты |ГДЕ | ДополнительныеРеквизиты.Свойство = &Свойство - | И (НЕ ДополнительныеРеквизиты.Ссылка.ЭтоГруппа) + | И НЕ ДополнительныеРеквизиты.Ссылка.ЭтоГруппа | |ОБЪЕДИНИТЬ ВСЕ | @@ -56,13 +57,13 @@ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения КАК ДополнительныеСведения |ГДЕ | ДополнительныеСведения.Свойство = &Свойство - | И (НЕ ДополнительныеСведения.Ссылка.ЭтоГруппа)"); + | И НЕ ДополнительныеСведения.Ссылка.ЭтоГруппа"); Запрос.УстановитьПараметр("Свойство", Объект.Ссылка); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - спсНаборов.Добавить(Выборка.Набор, Выборка.Наименование); + СписокНаборов.Добавить(Выборка.Набор, Выборка.Наименование); КонецЦикла; КонецЕсли; @@ -78,35 +79,15 @@ КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Функция ПолучитьЗаголовок(Ссылка, ЭтоДополнительноеСведение) - - Если ЗначениеЗаполнено(Ссылка) Тогда - Заголовок = Строка(Ссылка); - Если ЭтоДополнительноеСведение Тогда - Заголовок = Заголовок + " " + НСтр("ru = '(Дополнительное сведение)'"); - Иначе - Заголовок = Заголовок + " " + НСтр("ru = '(Дополнительный реквизит)'"); - КонецЕсли; - Иначе - Если ЭтоДополнительноеСведение Тогда - Заголовок = НСтр("ru = 'Дополнительное сведение (создание)'"); - Иначе - Заголовок = НСтр("ru = 'Дополнительный реквизит (создание)'"); - КонецЕсли; - КонецЕсли; - - Возврат Заголовок; - -КонецФункции - &НаКлиенте Процедура ПередЗаписью(Отказ) - // Проверим, есть ли с таким же наименованием свойство - Если ЕстьСТакимЖеНаименованием(Объект.Наименование, Объект.Ссылка) Тогда - Ответ = Вопрос(НСтр("ru = 'С указанным наименованием уже был введен ранее доп.реквизит/сведение. - |Продолжить запись?'"), РежимДиалогаВопрос.ОКОтмена); + // Проверка есть ли свойство с тем же наименованием. + Если НаименованиеУжеИспользуется(Объект.Наименование, Объект.Ссылка) Тогда + + ТекстВопроса = НСтр("ru = 'С указанным наименованием уже был введен ранее доп.реквизит/сведение. + |Продолжить запись?'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ОКОтмена); Если Ответ = КодВозвратаДиалога.Отмена Тогда Отказ = Истина; КонецЕсли; @@ -123,21 +104,20 @@ ТекущийОбъект.СклоненияПредмета = ""; КонецЕсли; - Если (НЕ Объект.ЭтоДополнительноеСведение) - И - (Объект.ТипЗначения.СодержитТип(Тип("Число")) - ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Дата")) - ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Булево")) - )Тогда - // - Иначе + Если Объект.ЭтоДополнительноеСведение + ИЛИ НЕ ( Объект.ТипЗначения.СодержитТип(Тип("Число" )) + ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Дата" )) + ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Булево")) )Тогда + ТекущийОбъект.ФорматСвойства = ""; КонецЕсли; ТекущийОбъект.МногострочноеПолеВвода = 0; - Если НЕ Объект.ЭтоДополнительноеСведение И - Объект.ТипЗначения.СодержитТип(Тип("Строка")) И Объект.ТипЗначения.Типы().Количество() = 1 Тогда + Если НЕ Объект.ЭтоДополнительноеСведение + И Объект.ТипЗначения.Типы().Количество() = 1 + И Объект.ТипЗначения.СодержитТип(Тип("Строка")) Тогда + Если МногострочноеПолеВвода Тогда ТекущийОбъект.МногострочноеПолеВвода = МногострочноеПолеВводаЧисло; КонецЕсли; @@ -162,9 +142,9 @@ |ИЗ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК ДополнительныеРеквизиты |ГДЕ - | ((НЕ ДополнительныеРеквизиты.Ссылка В (&ВключенВНаборы)) + | (НЕ ДополнительныеРеквизиты.Ссылка В (&ВключенВНаборы) | ИЛИ &ЭтоДополнительноеСведение) - | И (НЕ ДополнительныеРеквизиты.Ссылка.ЭтоГруппа) + | И НЕ ДополнительныеРеквизиты.Ссылка.ЭтоГруппа | И ДополнительныеРеквизиты.Свойство = &Свойство | |ОБЪЕДИНИТЬ ВСЕ @@ -176,9 +156,9 @@ |ИЗ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения КАК ДополнительныеСведения |ГДЕ - | ((НЕ ДополнительныеСведения.Ссылка В (&ВключенВНаборы)) - | ИЛИ (НЕ &ЭтоДополнительноеСведение)) - | И (НЕ ДополнительныеСведения.Ссылка.ЭтоГруппа) + | (НЕ ДополнительныеСведения.Ссылка В (&ВключенВНаборы) + | ИЛИ НЕ &ЭтоДополнительноеСведение) + | И НЕ ДополнительныеСведения.Ссылка.ЭтоГруппа | И ДополнительныеСведения.Свойство = &Свойство | |ОБЪЕДИНИТЬ ВСЕ @@ -191,16 +171,16 @@ | Справочник.НаборыДополнительныхРеквизитовИСведений КАК НаборыДополнительныхРеквизитовИСведений |ГДЕ | НаборыДополнительныхРеквизитовИСведений.Ссылка В(&ВключенВНаборы) - | И (НЕ НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты.Ссылка В + | И НЕ НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты.Ссылка В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ДополнительныеРеквизиты.Ссылка КАК Набор | ИЗ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК ДополнительныеРеквизиты | ГДЕ | ДополнительныеРеквизиты.Ссылка В (&ВключенВНаборы) - | И (НЕ ДополнительныеРеквизиты.Ссылка.ЭтоГруппа) + | И НЕ ДополнительныеРеквизиты.Ссылка.ЭтоГруппа | И ДополнительныеРеквизиты.Свойство = &Свойство - | И (НЕ &ЭтоДополнительноеСведение) + | И НЕ &ЭтоДополнительноеСведение | | ОБЪЕДИНИТЬ ВСЕ | @@ -210,13 +190,13 @@ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения КАК ДополнительныеСведения | ГДЕ | ДополнительныеСведения.Ссылка В (&ВключенВНаборы) - | И (НЕ ДополнительныеСведения.Ссылка.ЭтоГруппа) + | И НЕ ДополнительныеСведения.Ссылка.ЭтоГруппа | И ДополнительныеСведения.Свойство = &Свойство - | И &ЭтоДополнительноеСведение))"); + | И &ЭтоДополнительноеСведение)"); - Запрос.Параметры.Вставить("Свойство", ТекущийОбъект.Ссылка); + Запрос.Параметры.Вставить("Свойство", ТекущийОбъект.Ссылка); Запрос.Параметры.Вставить("ЭтоДополнительноеСведение", ТекущийОбъект.ЭтоДополнительноеСведение); - Запрос.Параметры.Вставить("ВключенВНаборы", спсНаборов); + Запрос.Параметры.Вставить("ВключенВНаборы", СписокНаборов); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); @@ -231,25 +211,18 @@ Если Выборка.ДополнительноеСведение Тогда НаборСвойств.ДополнительныеСведения.Добавить().Свойство = ТекущийОбъект.Ссылка; - Иначе - НаборСвойств.ДополнительныеРеквизиты.Добавить().Свойство = ТекущийОбъект.Ссылка; - КонецЕсли; - Иначе - Если Выборка.ДополнительноеСведение Тогда - НаборСвойств.ДополнительныеСведения.Удалить(НаборСвойств.ДополнительныеСведения.Найти(ТекущийОбъект.Ссылка, "Свойство")); - + НаборСвойств.ДополнительныеСведения.Удалить( + НаборСвойств.ДополнительныеСведения.Найти(ТекущийОбъект.Ссылка, "Свойство")); Иначе - - НаборСвойств.ДополнительныеРеквизиты.Удалить(НаборСвойств.ДополнительныеРеквизиты.Найти(ТекущийОбъект.Ссылка, "Свойство")); - + НаборСвойств.ДополнительныеРеквизиты.Удалить( + НаборСвойств.ДополнительныеРеквизиты.Найти(ТекущийОбъект.Ссылка, "Свойство")); КонецЕсли; - КонецЕсли; НаборСвойств.Записать(); @@ -258,21 +231,10 @@ КонецПроцедуры -&НаКлиенте -Процедура ПослеЗаписи(ПараметрыЗаписи) - - СтруктураОповещения = Новый Структура; - СтруктураОповещения.Вставить("ЭтоДополнительноеСведение", Объект.ЭтоДополнительноеСведение); - СтруктураОповещения.Вставить("Комментарий", Объект.Комментарий); - - Оповестить("Запись_ДополнительныеРеквизитыИСведения", СтруктураОповещения, Объект.Ссылка); - -КонецПроцедуры - &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - // Обработчик подсистемы запрета редактирования реквизитов объектов + // Обработчик подсистемы запрета редактирования реквизитов объектов. ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтаФорма); Заголовок = ПолучитьЗаголовок(Объект.Ссылка, Объект.ЭтоДополнительноеСведение); @@ -280,15 +242,77 @@ КонецПроцедуры &НаКлиенте -Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда) +Процедура ПослеЗаписи(ПараметрыЗаписи) - Если Не Объект.Ссылка.Пустая() Тогда - Результат = ОткрытьФормуМодально("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаПоискаСсылокНаПВХ", Новый Структура("Ссылка", Объект.Ссылка)); - Если ТипЗнч(Результат) = Тип("Массив") И Результат.Количество() > 0 Тогда - ЗапретРедактированияРеквизитовОбъектовКлиент.УстановитьДоступностьЭлементовФормы(ЭтаФорма, Результат); - КонецЕсли; + СтруктураОповещения = Новый Структура; + СтруктураОповещения.Вставить("ЭтоДополнительноеСведение", Объект.ЭтоДополнительноеСведение); + СтруктураОповещения.Вставить("Комментарий", Объект.Комментарий); + + Оповестить("Запись_ДополнительныеРеквизитыИСведения", СтруктураОповещения, Объект.Ссылка); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ЭтоДополнительноеСведениеРеквизитПриИзменении(Элемент) + + Объект.ЭтоДополнительноеСведение = ЭтоДополнительноеСведениеРеквизит; + + ОбновитьСоставЭлементовФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ТипЗначенияПриИзменении(Элемент) + + Если НЕ Объект.ТипЗначения.СодержитТип(Тип("Число")) + И НЕ Объект.ТипЗначения.СодержитТип(Тип("Дата")) + И НЕ Объект.ТипЗначения.СодержитТип(Тип("Булево")) Тогда + + Объект.ФорматСвойства = ""; + УстановитьЗаголовокКнопкиФормата(Элементы.РедактироватьФорматЗначения, Истина); КонецЕсли; + Если Объект.ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) + ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Число")) + ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Дата")) + ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Булево")) + ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Строка")) Тогда + + ОбновитьСоставЭлементовФормы(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура МногострочноеПолеВводаЧислоПриИзменении(Элемент) + + МногострочноеПолеВвода = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура КомментарийОткрытие(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияКомментария( + Элемент.ТекстРедактирования, + Объект.Комментарий, + Модифицированность); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура РедактироватьСписокНаборов(Команда) + + ОткрытьСписокНаборов(); + КонецПроцедуры &НаКлиенте @@ -306,61 +330,28 @@ КонецПроцедуры &НаКлиенте -Процедура КомментарийОткрытие(Элемент, СтандартнаяОбработка) +Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда) - СтандартнаяОбработка = Ложь; - ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияКомментария(Элемент.ТекстРедактирования, Объект.Комментарий, Модифицированность); + ЗаблокированныеРеквизиты = ЗапретРедактированияРеквизитовОбъектовКлиент.РеквизитыКромеНевидимых(ЭтаФорма); + Если ЗаблокированныеРеквизиты.Количество() > 0 Тогда + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Ссылка", Объект.Ссылка); + ПараметрыФормы.Вставить("ЭтоДополнительныйРеквизит", ЭтоДополнительноеСведениеРеквизит = 0); + + Результат = ОткрытьФормуМодально( + "ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.РазблокированиеРеквизитов", ПараметрыФормы); + + ЗапретРедактированияРеквизитовОбъектовКлиент.УстановитьДоступностьЭлементовФормы(ЭтаФорма, Результат); + Иначе + ЗапретРедактированияРеквизитовОбъектовКлиент.ПредупреждениеВсеВидимыеРеквизитыРазблокированы(); + КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура ЭтоДополнительноеСведениеРеквизитПриИзменении(Элемент) - - Объект.ЭтоДополнительноеСведение = ЭтоДополнительноеСведениеРеквизит; - - ОбновитьСоставЭлементовФормы(); - -КонецПроцедуры - -&НаКлиенте -Процедура РедактироватьСписокНаборовВыполнить() - - ОткрытьСписокНаборов(); - -КонецПроцедуры - -&НаКлиенте -Процедура ТипЗначенияПриИзменении(Элемент) - - Если НЕ Объект.ТипЗначения.СодержитТип(Тип("Число")) - И НЕ Объект.ТипЗначения.СодержитТип(Тип("Дата")) - И НЕ Объект.ТипЗначения.СодержитТип(Тип("Булево")) Тогда - Объект.ФорматСвойства = ""; - УстановитьЗаголовокКнопкиФормата(Элементы.РедактироватьФорматЗначения, Истина); - КонецЕсли; - - Если Объект.ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) - ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Число")) - ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Дата")) - ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Булево")) - ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Строка")) Тогда - ОбновитьСоставЭлементовФормы(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура МногострочноеПолеВводаЧислоПриИзменении(Элемент) - - МногострочноеПолеВвода = Истина; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ОбновитьСоставЭлементовФормы() @@ -371,21 +362,20 @@ Элементы.ГруппаСклонения.Видимость = Ложь; КонецЕсли; - Если (НЕ Объект.ЭтоДополнительноеСведение) - И - (Объект.ТипЗначения.СодержитТип(Тип("Число")) - ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Дата")) - ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Булево")) - )Тогда - - Элементы.РедактироватьФорматЗначения.Видимость = Истина; - Иначе + Если Объект.ЭтоДополнительноеСведение + ИЛИ НЕ ( Объект.ТипЗначения.СодержитТип(Тип("Число" )) + ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Дата" )) + ИЛИ Объект.ТипЗначения.СодержитТип(Тип("Булево")) )Тогда + Элементы.РедактироватьФорматЗначения.Видимость = Ложь; + Иначе + Элементы.РедактироватьФорматЗначения.Видимость = Истина; КонецЕсли; - Если (НЕ Объект.ЭтоДополнительноеСведение) - И Объект.ТипЗначения.СодержитТип(Тип("Строка")) - И Объект.ТипЗначения.Типы().Количество() = 1 Тогда + Если НЕ Объект.ЭтоДополнительноеСведение + И Объект.ТипЗначения.Типы().Количество() = 1 + И Объект.ТипЗначения.СодержитТип(Тип("Строка")) Тогда + Элементы.ГруппаМногострочность.Видимость = Истина; Иначе Элементы.ГруппаМногострочность.Видимость = Ложь; @@ -393,19 +383,39 @@ КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Процедура УстановитьЗаголовокКнопкиФормата(КнопкаФормы, ФорматНеУстановлен) +&НаСервере +Процедура ОбновитьНадписьОНаборах() - Если ФорматНеУстановлен Тогда - КнопкаФормы.Заголовок = НСтр("ru = 'Формат по умолчанию'"); + Количество = СписокНаборов.Количество(); + Если Количество = 0 Тогда + ИнформационнаяНадпись = НСтр("ru = 'Не входит ни в один набор'"); + + ИначеЕсли Количество = 1 Тогда + ИнформационнаяНадпись = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Входит в набор: %1'"), + СписокНаборов[0].Представление); Иначе - КнопкаФормы.Заголовок = НСтр("ru = 'Формат установлен'"); + СтрокаНаборы = СокрЛП(ЧислоПрописью(Количество, "НД=Ложь", "набор,набора,наборов,м,,,,,0")); + Пока Истина Цикл + Позиция = Найти(СтрокаНаборы, " "); + Если Позиция = 0 Тогда + Прервать; + КонецЕсли; + СтрокаНаборы =СокрЛП(Сред(СтрокаНаборы, Позиция + 1)); + КонецЦикла; + + ИнформационнаяНадпись = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Входит в %1 %2'"), + Количество, + СтрокаНаборы); КонецЕсли; + Элементы.РедактироватьСписокНаборов.Заголовок = ИнформационнаяНадпись; + КонецПроцедуры &НаСервереБезКонтекста -Функция ЕстьСТакимЖеНаименованием(Наименование, Ссылка) +Функция НаименованиеУжеИспользуется(Знач Наименование, Знач Ссылка) Запрос = Новый Запрос; Запрос.Текст = @@ -424,31 +434,36 @@ КонецФункции -&НаСервере -Процедура ОбновитьНадписьОНаборах() +&НаКлиентеНаСервереБезКонтекста +Функция ПолучитьЗаголовок(Знач Ссылка, Знач ЭтоДополнительноеСведение) - Колво = спсНаборов.Количество(); - Если Колво = 0 Тогда - ИнформационнаяНадпись = НСтр("ru = 'Не входит ни в один набор'"); - ИначеЕсли Колво = 1 Тогда - ИнформационнаяНадпись = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Входит в набор: %1'"), спсНаборов[0].Представление); + Если ЗначениеЗаполнено(Ссылка) Тогда + Заголовок = Строка(Ссылка); + Если ЭтоДополнительноеСведение Тогда + Заголовок = Заголовок + " " + НСтр("ru = '(Дополнительное сведение)'"); + Иначе + Заголовок = Заголовок + " " + НСтр("ru = '(Дополнительный реквизит)'"); + КонецЕсли; Иначе - СтрНаборы = СокрЛП(ЧислоПрописью(Колво, "НД=Ложь", "набор,набора,наборов,м,,,,,0")); - Пока Истина Цикл - Поз = Найти(СтрНаборы, " "); - Если Поз = 0 Тогда - Прервать; - КонецЕсли; - СтрНаборы =СокрЛП(Сред(СтрНаборы, Поз+1)); - КонецЦикла; - - ИнформационнаяНадпись = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Входит в %1 %2'"), Колво, СтрНаборы ); + Если ЭтоДополнительноеСведение Тогда + Заголовок = НСтр("ru = 'Дополнительное сведение (создание)'"); + Иначе + Заголовок = НСтр("ru = 'Дополнительный реквизит (создание)'"); + КонецЕсли; КонецЕсли; - Элементы.РедактироватьСписокНаборов.Заголовок = ИнформационнаяНадпись; + Возврат Заголовок; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьЗаголовокКнопкиФормата(Знач КнопкаФормы, Знач ФорматНеУстановлен) + + Если ФорматНеУстановлен Тогда + КнопкаФормы.Заголовок = НСтр("ru = 'Формат по умолчанию'"); + Иначе + КнопкаФормы.Заголовок = НСтр("ru = 'Формат установлен'"); + КонецЕсли; КонецПроцедуры @@ -457,22 +472,25 @@ Если ОткрываетсяИзНабораСвойств Тогда Предупреждение(НСтр("ru = 'Свойство открыто из формы набора. - |Редактирование списка наборов по свойству не производится.'")); + |Редактирование списка наборов не производится.'")); Возврат; КонецЕсли; - ПараметрыОткрытия = Новый Структура("ВыбранныеНаборы,ЭтоДополнительноеСведение", спсНаборов, Объект.ЭтоДополнительноеСведение); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ВыбранныеНаборы", СписокНаборов); + ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", Объект.ЭтоДополнительноеСведение); - Результат = ОткрытьФормуМодально("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаРедактированияСпискаНаборов", ПараметрыОткрытия); + Результат = ОткрытьФормуМодально( + "ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаРедактированияСпискаНаборов", ПараметрыФормы); Если Результат = Неопределено Тогда Возврат; КонецЕсли; + СписокНаборов = Результат; Модифицированность = Истина; - спсНаборов = Результат; + ОбновитьНадписьОНаборах(); КонецПроцедуры - diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl index 0379ac5ae..682282af4 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl @@ -1,4 +1,12 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС +// Возвращает имена блокруемых реквизитов для подсистемы +// "Запрет редактирования реквизитов объектов". +// +// Возвращаемое значание: +// Массив Строк - имена блокируемых реквизитов. +// Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт Результат = Новый Массив; diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo index e286dc2c5..1f4079130 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo @@ -276,10 +276,10 @@ MobileDevice - ФормаПоискаСсылокНаПВХ + РазблокированиеРеквизитов ru - Форма поиска ссылок на ПВХ + Разблокирование реквизитов PersonalComputer MobileDevice diff --git a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ObjectModule.bsl index e65efffc5..53e58697c 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/ObjectModule.bsl @@ -1,5 +1,8 @@ -// Обработчик события ПередЗаписью предотвращает изменение разделов дат запрета изменения, +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +// Предотвращает изменение разделов дат запрета изменения, // которые должны изменятся только в режиме конфигурирования. // Процедура ПередЗаписью(Отказ) diff --git a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo index ffc447126..f8ad2de11 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo @@ -110,7 +110,7 @@ true Variable - 50 + 150 AsDescription InDialog BothWays diff --git a/SSL/src/CommonAttributes/ОбластьДанных/ОбластьДанных.mdo b/SSL/src/CommonAttributes/ОбластьДанных/ОбластьДанных.mdo new file mode 100644 index 000000000..fbcf3979e --- /dev/null +++ b/SSL/src/CommonAttributes/ОбластьДанных/ОбластьДанных.mdo @@ -0,0 +1,407 @@ + + + ОбластьДанных + + ru + Область данных + + + Number + + 7 + true + + + + + Use + + + Constant.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания + DontUse + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных + DontUse + + + ScheduledJob.ПолучениеИОтправкаЭлектронныхПисем + DontUse + + + Constant.ПараметрыАдминистрированияИБ + DontUse + + + ScheduledJob.СлияниеИндексаППД + DontUse + + + Constant.КопироватьОбластиДанныхИзЭталонной + DontUse + + + InformationRegister.СообщенияОбменаДанными + DontUse + + + ScheduledJob.ОбновлениеИндексаППД + DontUse + + + ExchangePlan.ОбменСообщениями + DontUse + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения + DontUse + + + Constant.НастройкаПроксиСервера + DontUse + + + InformationRegister.ПодпискиПолучателей + DontUse + + + Constant.ИмяСлужебногоПользователяСервисаПоставляемыхДанных + DontUse + + + Constant.ВыполнятьЗамерыПроизводительности + DontUse + + + InformationRegister.ВерсииПоставляемыхДанных + DontUse + + + Constant.РежимИспользованияИнформационнойБазы + DontUse + + + Catalog.КлючевыеОперации + DontUse + + + Constant.СообщениеБлокировкиПриОбновленииКонфигурации + DontUse + + + InformationRegister.АдресныеСокращения + DontUse + + + ScheduledJob.ОбслуживаниеОбластейДанных + DontUse + + + Catalog.СценарииОбменовДанными + DontUse + + + Catalog.ИдентификаторыОбъектовМетаданных + DontUse + + + InformationRegister.АдресныйКлассификатор + DontUse + + + Constant.ОбщийКаталогВременныхФайлов + DontUse + + + InformationRegister.ДанныеПроизводственногоКалендаря + DontUse + + + InformationRegister.РазделенныеРегламентныеЗадания + DontUse + + + ScheduledJob.ЗагрузкаКлассификатораБанковРФССайтаРБК + DontUse + + + InformationRegister.БлокировкиСеансовОбластиДанных + DontUse + + + Constant.ПарольСлужебногоПользователяМенеджераСервиса + DontUse + + + Constant.СписокРасширенийТекстовыхФайлов + DontUse + + + ScheduledJob.ЗаполнениеДанныхДляОграниченияДоступа + DontUse + + + Constant.ПарольПользователяАгентаСервиса + DontUse + + + Constant.СписокРасширенийФайловOpenDocument + DontUse + + + InformationRegister.СвязиПоставляемыхДанных + DontUse + + + ScheduledJob.ОбновлениеОбщихПоставляемыхДанных + DontUse + + + InformationRegister.НастройкиОтправителя + DontUse + + + InformationRegister.СостоянияОбменовДанными + DontUse + + + InformationRegister.ВерсииПодсистем + DontUse + + + Constant.ИзвлекатьТекстыФайловНаСервере + DontUse + + + Constant.ОбщийКаталогВременныхФайловLinux + DontUse + + + Constant.МаксимальныйРазмерФайла + DontUse + + + ScheduledJob.КонтрольЖурналаРегистрации + DontUse + + + Catalog.ПроизводственныеКалендари + DontUse + + + Catalog.СтраныМира + DontUse + + + ScheduledJob.ОбновлениеАгрегатов + DontUse + + + Constant.МаксимальноеКоличествоИсполняющихФоновыхЗаданий + DontUse + + + Constant.АдресАгентаСервиса + DontUse + + + ScheduledJob.ЭкспортОценкиПроизводительности + DontUse + + + ScheduledJob.ПерестроениеАгрегатов + DontUse + + + InformationRegister.ИзмененияОбщихДанныхУзлов + DontUse + + + InformationRegister.НеразделенныеПользователи + DontUse + + + ScheduledJob.ИзвлечениеТекста + DontUse + + + ScheduledJob.ПланированиеОбработкиЗаданий + DontUse + + + Constant.ИспользоватьПолнотекстовыйПоиск + DontUse + + + Constant.КаталогВременныхФайловСообщенийОбменаДляWindows + DontUse + + + InformationRegister.КэшПрограммныхИнтерфейсов + DontUse + + + Catalog.КлассификаторВалют + DontUse + + + Constant.НеИспользоватьРазделениеПоОбластямДанных + DontUse + + + ScheduledJob.ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения + DontUse + + + Constant.КаталогВременныхФайловСообщенийОбменаДляLinux + DontUse + + + Constant.УдалитьТипХраненияФайлов + DontUse + + + Constant.КонечнаяТочкаМенеджераСервиса + DontUse + + + InformationRegister.КурсыВалютПоКлассификатору + DontUse + + + Constant.БлокировкаОтправкиБыстрыхСообщений + DontUse + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз + DontUse + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора + DontUse + + + ScheduledJob.МониторингЗадач + DontUse + + + Constant.ПарольСлужебногоПользователяСервисаПоставляемыхДанных + DontUse + + + Constant.ИмяСлужебногоПользователяМенеджераСервиса + DontUse + + + InformationRegister.НастройкиТранспортаОбмена + DontUse + + + InformationRegister.ПравилаДляОбменаДанными + DontUse + + + ScheduledJob.ОбновлениеОбластейДанных + DontUse + + + Constant.ВнутреннийАдресМенеджераСервиса + DontUse + + + Constant.СписокЗапрещенныхРасширений + DontUse + + + InformationRegister.ЗамерыВремени + DontUse + + + Constant.ИмяПользователяАгентаСервиса + DontUse + + + Constant.АдресВебСервисаОбменаДанными + DontUse + + + ScheduledJob.ЗагрузкаКурсовВалют + DontUse + + + ExchangePlan.ИзмененияПоставляемыхДанных + DontUse + + + ScheduledJob.УведомлениеИсполнителейОНовыхЗадачах + DontUse + + + Constant.ИспользоватьРазделениеПоОбластямДанных + DontUse + + + Constant.ХранитьФайлыВТомахНаДиске + DontUse + + + ScheduledJob.ЗапускДополнительныхОбработок + DontUse + + + ChartOfCharacteristicTypes.ВидыДоступа + DontUse + + + InformationRegister.ОбластиДанных + DontUse + + + InformationRegister.СостоянияУспешныхОбменовДанными + DontUse + + + Constant.НомерЗагрузкиПоставляемыхДанных + DontUse + + + Constant.АдресСервисаПоставляемыхДанных + DontUse + + + Catalog.ТомаХраненияФайлов + DontUse + + + ScheduledJob.ВыполнениеОбменаДанными + DontUse + + + ScheduledJob.ОтправкаИПолучениеСообщенийСистемы + DontUse + + + ScheduledJob.УстановкаПериодаРассчитанныхИтогов + DontUse + + + ScheduledJob.КонтрольОбновленияРазделенныхПоставляемыхДанных + DontUse + + + Catalog.СообщенияСистемы + DontUse + + + InformationRegister.ОчередьЗаданий + DontUse + + + DocumentJournal.Взаимодействия + DontUse + + SessionParameter.ОбластьДанныхЗначение + SessionParameter.ОбластьДанныхИспользование + Constant.ИспользоватьРазделениеПоОбластямДанных + Use + diff --git a/SSL/src/CommonCommands/ВыгрузитьДанныеВЛокальнуюВерсию/CommandModule.bsl b/SSL/src/CommonCommands/ВыгрузитьДанныеВЛокальнуюВерсию/CommandModule.bsl new file mode 100644 index 000000000..7d3a68d67 --- /dev/null +++ b/SSL/src/CommonCommands/ВыгрузитьДанныеВЛокальнуюВерсию/CommandModule.bsl @@ -0,0 +1,11 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ОткрытьФорму("ОбщаяФорма.ВыгрузкаДанных", , ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры diff --git a/SSL/src/CommonCommands/ВыгрузитьДанныеВЛокальнуюВерсию/ВыгрузитьДанныеВЛокальнуюВерсию.mdo b/SSL/src/CommonCommands/ВыгрузитьДанныеВЛокальнуюВерсию/ВыгрузитьДанныеВЛокальнуюВерсию.mdo new file mode 100644 index 000000000..9d934dc60 --- /dev/null +++ b/SSL/src/CommonCommands/ВыгрузитьДанныеВЛокальнуюВерсию/ВыгрузитьДанныеВЛокальнуюВерсию.mdo @@ -0,0 +1,10 @@ + + + ВыгрузитьДанныеВЛокальнуюВерсию + + ru + Выгрузить данные в локальную версию + + ActionsPanelTools + Auto + diff --git a/SSL/src/CommonCommands/ВыгрузитьДанныеДляПереходаВСервис/CommandModule.bsl b/SSL/src/CommonCommands/ВыгрузитьДанныеДляПереходаВСервис/CommandModule.bsl new file mode 100644 index 000000000..4cfb1ce08 --- /dev/null +++ b/SSL/src/CommonCommands/ВыгрузитьДанныеДляПереходаВСервис/CommandModule.bsl @@ -0,0 +1,12 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ОткрытьФорму("ОбщаяФорма.ВыгрузкаДанных", , ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры + diff --git a/SSL/src/CommonCommands/ВыгрузитьДанныеДляПереходаВСервис/ВыгрузитьДанныеДляПереходаВСервис.mdo b/SSL/src/CommonCommands/ВыгрузитьДанныеДляПереходаВСервис/ВыгрузитьДанныеДляПереходаВСервис.mdo new file mode 100644 index 000000000..559c6090d --- /dev/null +++ b/SSL/src/CommonCommands/ВыгрузитьДанныеДляПереходаВСервис/ВыгрузитьДанныеДляПереходаВСервис.mdo @@ -0,0 +1,10 @@ + + + ВыгрузитьДанныеДляПереходаВСервис + + ru + Выгрузить данные для перехода в сервис + + ActionsPanelTools + Auto + diff --git a/SSL/src/CommonCommands/ВыполнитьОбменДанными/CommandModule.bsl b/SSL/src/CommonCommands/ВыполнитьОбменДанными/CommandModule.bsl index 25e245757..ede143261 100644 --- a/SSL/src/CommonCommands/ВыполнитьОбменДанными/CommandModule.bsl +++ b/SSL/src/CommonCommands/ВыполнитьОбменДанными/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/ВыполнитьОбменДаннымиИнтерактивно/CommandModule.bsl b/SSL/src/CommonCommands/ВыполнитьОбменДаннымиИнтерактивно/CommandModule.bsl index 548eca40b..a981176c9 100644 --- a/SSL/src/CommonCommands/ВыполнитьОбменДаннымиИнтерактивно/CommandModule.bsl +++ b/SSL/src/CommonCommands/ВыполнитьОбменДаннымиИнтерактивно/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/ДобавитьПользователейСервиса/CommandModule.bsl b/SSL/src/CommonCommands/ДобавитьПользователейСервиса/CommandModule.bsl new file mode 100644 index 000000000..63d182de5 --- /dev/null +++ b/SSL/src/CommonCommands/ДобавитьПользователейСервиса/CommandModule.bsl @@ -0,0 +1,11 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + СтруктураПользователя = ОткрытьФорму("ОбщаяФорма.ПользователиСервиса", , + ПараметрыВыполненияКоманды.Источник); + +КонецПроцедуры diff --git a/SSL/src/CommonCommands/ДобавитьПользователейСервиса/ДобавитьПользователейСервиса.mdo b/SSL/src/CommonCommands/ДобавитьПользователейСервиса/ДобавитьПользователейСервиса.mdo new file mode 100644 index 000000000..61b27f529 --- /dev/null +++ b/SSL/src/CommonCommands/ДобавитьПользователейСервиса/ДобавитьПользователейСервиса.mdo @@ -0,0 +1,14 @@ + + + ДобавитьПользователейСервиса + + ru + Добавить пользователей сервиса + + ActionsPanelCreate + Auto + + ru + Добавить существующих пользователей сервиса + + diff --git a/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиЗаполнениеОбъекта/CommandModule.bsl b/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиЗаполнениеОбъекта/CommandModule.bsl index 3c3cdf37a..ef2da445e 100644 --- a/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиЗаполнениеОбъекта/CommandModule.bsl +++ b/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиЗаполнениеОбъекта/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиОтчеты/CommandModule.bsl b/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиОтчеты/CommandModule.bsl index 06c072254..96d706746 100644 --- a/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиОтчеты/CommandModule.bsl +++ b/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиОтчеты/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиПечатныеФормы/CommandModule.bsl b/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиПечатныеФормы/CommandModule.bsl index 006ef3275..f7baf9eae 100644 --- a/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиПечатныеФормы/CommandModule.bsl +++ b/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиПечатныеФормы/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиСозданиеСвязанныхОбъектов/CommandModule.bsl b/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиСозданиеСвязанныхОбъектов/CommandModule.bsl index 51a086b35..db186e7fb 100644 --- a/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиСозданиеСвязанныхОбъектов/CommandModule.bsl +++ b/SSL/src/CommonCommands/ДополнительныеОтчетыИОбработкиСозданиеСвязанныхОбъектов/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/ДополнительныеСведения/CommandModule.bsl b/SSL/src/CommonCommands/ДополнительныеСведения/CommandModule.bsl index 8dfcc20bf..337614422 100644 --- a/SSL/src/CommonCommands/ДополнительныеСведения/CommandModule.bsl +++ b/SSL/src/CommonCommands/ДополнительныеСведения/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -6,8 +8,8 @@ Возврат; КонецЕсли; - ПараметрыФормыРедактированияЗначенийСвойств = Новый Структура("Ссылка", ПараметрКоманды); + ПараметрыФормы = Новый Структура("Ссылка", ПараметрКоманды); - ОткрытьФорму("ОбщаяФорма.РедактированиеЗначенийСвойств", ПараметрыФормыРедактированияЗначенийСвойств, , ПараметрКоманды); + ОткрытьФорму("ОбщаяФорма.РедактированиеЗначенийСвойств", ПараметрыФормы, , ПараметрКоманды); КонецПроцедуры diff --git a/SSL/src/CommonCommands/ЗагрузитьДанныеВОбласть/CommandModule.bsl b/SSL/src/CommonCommands/ЗагрузитьДанныеВОбласть/CommandModule.bsl new file mode 100644 index 000000000..84d487909 --- /dev/null +++ b/SSL/src/CommonCommands/ЗагрузитьДанныеВОбласть/CommandModule.bsl @@ -0,0 +1,12 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ОткрытьФорму("ОбщаяФорма.ЗагрузкаДанныхВОбласть", , ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры + diff --git a/SSL/src/CommonCommands/ЗагрузитьДанныеВОбласть/ЗагрузитьДанныеВОбласть.mdo b/SSL/src/CommonCommands/ЗагрузитьДанныеВОбласть/ЗагрузитьДанныеВОбласть.mdo new file mode 100644 index 000000000..781291742 --- /dev/null +++ b/SSL/src/CommonCommands/ЗагрузитьДанныеВОбласть/ЗагрузитьДанныеВОбласть.mdo @@ -0,0 +1,10 @@ + + + ЗагрузитьДанныеВОбласть + + ru + Загрузить данные в область + + ActionsPanelTools + Auto + diff --git a/SSL/src/CommonCommands/ЗагрузитьДанныеИзЛокальнойВерсии/CommandModule.bsl b/SSL/src/CommonCommands/ЗагрузитьДанныеИзЛокальнойВерсии/CommandModule.bsl new file mode 100644 index 000000000..c062b3384 --- /dev/null +++ b/SSL/src/CommonCommands/ЗагрузитьДанныеИзЛокальнойВерсии/CommandModule.bsl @@ -0,0 +1,38 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + АдресВХранилище = Неопределено; + Если НЕ ПоместитьФайл(АдресВХранилище, "*.zip") Тогда + Возврат; + КонецЕсли; + + ЗагрузитьДанныеНаСервере(АдресВХранилище); + + ОбновитьИнтерфейс(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЗагрузитьДанныеНаСервере(Знач АдресВХранилище) + + ДанныеАрхива = ПолучитьИзВременногоХранилища(АдресВХранилище); + ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); + ДанныеАрхива.Записать(ИмяАрхива); + ДанныеАрхива = Неопределено; + + ВыгрузкаЗагрузкаДанных.ЗагрузитьТекущуюОбластьИзАрхива(ИмяАрхива); + + Попытка + УдалитьФайлы(ИмяАрхива); + Исключение + + КонецПопытки; + +КонецПроцедуры diff --git a/SSL/src/CommonCommands/ЗагрузитьДанныеИзЛокальнойВерсии/ЗагрузитьДанныеИзЛокальнойВерсии.mdo b/SSL/src/CommonCommands/ЗагрузитьДанныеИзЛокальнойВерсии/ЗагрузитьДанныеИзЛокальнойВерсии.mdo new file mode 100644 index 000000000..0d168d9d7 --- /dev/null +++ b/SSL/src/CommonCommands/ЗагрузитьДанныеИзЛокальнойВерсии/ЗагрузитьДанныеИзЛокальнойВерсии.mdo @@ -0,0 +1,10 @@ + + + ЗагрузитьДанныеИзЛокальнойВерсии + + ru + Загрузить данные из локальной версии + + ActionsPanelTools + Auto + diff --git a/SSL/src/CommonCommands/ЗагрузитьДанныеИзСервиса/CommandModule.bsl b/SSL/src/CommonCommands/ЗагрузитьДанныеИзСервиса/CommandModule.bsl new file mode 100644 index 000000000..6ca98198f --- /dev/null +++ b/SSL/src/CommonCommands/ЗагрузитьДанныеИзСервиса/CommandModule.bsl @@ -0,0 +1,44 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + Ответ = Вопрос(НСтр("ru = 'Загружать информацию о пользователях?'"), РежимДиалогаВопрос.ДаНетОтмена, , + КодВозвратаДиалога.Да); + Если Ответ = КодВозвратаДиалога.Отмена Тогда + Возврат; + КонецЕсли; + + АдресВХранилище = Неопределено; + Если НЕ ПоместитьФайл(АдресВХранилище, "*.zip") Тогда + Возврат; + КонецЕсли; + + ЗагрузитьДанныеНаСервере(АдресВХранилище, Ответ = КодВозвратаДиалога.Да); + + ОбновитьИнтерфейс(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЗагрузитьДанныеНаСервере(Знач АдресВХранилище, Знач ЗагружатьПользователей) + + ДанныеАрхива = ПолучитьИзВременногоХранилища(АдресВХранилище); + ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); + ДанныеАрхива.Записать(ИмяАрхива); + ДанныеАрхива = Неопределено; + + ВыгрузкаЗагрузкаДанных.ЗагрузитьТекущуюОбластьИзАрхива(ИмяАрхива, Истина, ЗагружатьПользователей); + + Попытка + УдалитьФайлы(ИмяАрхива); + Исключение + + КонецПопытки; + +КонецПроцедуры diff --git a/SSL/src/CommonCommands/ЗагрузитьДанныеИзСервиса/ЗагрузитьДанныеИзСервиса.mdo b/SSL/src/CommonCommands/ЗагрузитьДанныеИзСервиса/ЗагрузитьДанныеИзСервиса.mdo new file mode 100644 index 000000000..9d9e726aa --- /dev/null +++ b/SSL/src/CommonCommands/ЗагрузитьДанныеИзСервиса/ЗагрузитьДанныеИзСервиса.mdo @@ -0,0 +1,10 @@ + + + ЗагрузитьДанныеИзСервиса + + ru + Загрузить данные из сервиса + + ActionsPanelTools + Auto + diff --git a/SSL/src/CommonCommands/ЗаметкиПоПредмету/CommandModule.bsl b/SSL/src/CommonCommands/ЗаметкиПоПредмету/CommandModule.bsl index 56ea65b9b..ce7be4677 100644 --- a/SSL/src/CommonCommands/ЗаметкиПоПредмету/CommandModule.bsl +++ b/SSL/src/CommonCommands/ЗаметкиПоПредмету/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl b/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl index b9467baa6..fb683e1a9 100644 --- a/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl +++ b/SSL/src/CommonCommands/ИсторияИзменений/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/НастроитьПараметрыТранспортаСообщенийОбмена/CommandModule.bsl b/SSL/src/CommonCommands/НастроитьПараметрыТранспортаСообщенийОбмена/CommandModule.bsl index 9e5898bc2..0c240f8b8 100644 --- a/SSL/src/CommonCommands/НастроитьПараметрыТранспортаСообщенийОбмена/CommandModule.bsl +++ b/SSL/src/CommonCommands/НастроитьПараметрыТранспортаСообщенийОбмена/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/НастройкаОбменаСообщениями/CommandModule.bsl b/SSL/src/CommonCommands/НастройкаОбменаСообщениями/CommandModule.bsl new file mode 100644 index 000000000..dd77fd100 --- /dev/null +++ b/SSL/src/CommonCommands/НастройкаОбменаСообщениями/CommandModule.bsl @@ -0,0 +1,9 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ОткрытьФорму("ОбщаяФорма.НастройкаОбменаСообщениями",, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры diff --git a/SSL/src/CommonCommands/НастройкаОбменаСообщениями/НастройкаОбменаСообщениями.mdo b/SSL/src/CommonCommands/НастройкаОбменаСообщениями/НастройкаОбменаСообщениями.mdo new file mode 100644 index 000000000..348b534a2 --- /dev/null +++ b/SSL/src/CommonCommands/НастройкаОбменаСообщениями/НастройкаОбменаСообщениями.mdo @@ -0,0 +1,10 @@ + + + НастройкаОбменаСообщениями + + ru + Настройка обмена сообщениями + + NavigationPanelOrdinary + Auto + diff --git a/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/CommandModule.bsl b/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/CommandModule.bsl index bb196fad7..bb719463c 100644 --- a/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/CommandModule.bsl +++ b/SSL/src/CommonCommands/НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/ОбменСообщениями/CommandModule.bsl b/SSL/src/CommonCommands/ОбменСообщениями/CommandModule.bsl new file mode 100644 index 000000000..20c535e5d --- /dev/null +++ b/SSL/src/CommonCommands/ОбменСообщениями/CommandModule.bsl @@ -0,0 +1,9 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ОткрытьФорму("Справочник.СообщенияСистемы.ФормаСписка",, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры diff --git a/SSL/src/CommonCommands/ОбменСообщениями/ОбменСообщениями.mdo b/SSL/src/CommonCommands/ОбменСообщениями/ОбменСообщениями.mdo new file mode 100644 index 000000000..5eb75f797 --- /dev/null +++ b/SSL/src/CommonCommands/ОбменСообщениями/ОбменСообщениями.mdo @@ -0,0 +1,10 @@ + + + ОбменСообщениями + + ru + Обмен сообщениями + + NavigationPanelOrdinary + Auto + diff --git a/SSL/src/CommonCommands/ОбновлениеОбщихПоставляемыхДанных/CommandModule.bsl b/SSL/src/CommonCommands/ОбновлениеОбщихПоставляемыхДанных/CommandModule.bsl new file mode 100644 index 000000000..b548bb0aa --- /dev/null +++ b/SSL/src/CommonCommands/ОбновлениеОбщихПоставляемыхДанных/CommandModule.bsl @@ -0,0 +1,20 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ПолучитьПоставляемыеДанные(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ПолучитьПоставляемыеДанные() + + ПоставляемыеДанные.ОбновлениеОбщихПоставляемыхДанных(); + +КонецПроцедуры diff --git a/SSL/src/CommonCommands/ОбновлениеОбщихПоставляемыхДанных/ОбновлениеОбщихПоставляемыхДанных.mdo b/SSL/src/CommonCommands/ОбновлениеОбщихПоставляемыхДанных/ОбновлениеОбщихПоставляемыхДанных.mdo new file mode 100644 index 000000000..aa34ea826 --- /dev/null +++ b/SSL/src/CommonCommands/ОбновлениеОбщихПоставляемыхДанных/ОбновлениеОбщихПоставляемыхДанных.mdo @@ -0,0 +1,10 @@ + + + ОбновлениеОбщихПоставляемыхДанных + + ru + Обновление общих поставляемых данных + + ActionsPanelTools + Auto + diff --git a/SSL/src/CommonCommands/ОбновлениеПоставляемыхДанных/CommandModule.bsl b/SSL/src/CommonCommands/ОбновлениеПоставляемыхДанных/CommandModule.bsl new file mode 100644 index 000000000..bd82133fc --- /dev/null +++ b/SSL/src/CommonCommands/ОбновлениеПоставляемыхДанных/CommandModule.bsl @@ -0,0 +1,20 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ОбновитьПоставляемыеДанные(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ОбновитьПоставляемыеДанные() + + ПоставляемыеДанные.ОбновитьПоставляемыеДанные(ОбщегоНазначения.ЗначениеРазделителяСеанса(), 0); + +КонецПроцедуры diff --git a/SSL/src/CommonCommands/ОбновлениеПоставляемыхДанных/ОбновлениеПоставляемыхДанных.mdo b/SSL/src/CommonCommands/ОбновлениеПоставляемыхДанных/ОбновлениеПоставляемыхДанных.mdo new file mode 100644 index 000000000..4212f60cb --- /dev/null +++ b/SSL/src/CommonCommands/ОбновлениеПоставляемыхДанных/ОбновлениеПоставляемыхДанных.mdo @@ -0,0 +1,10 @@ + + + ОбновлениеПоставляемыхДанных + + ru + Обновление поставляемых данных + + ActionsPanelTools + Auto + diff --git a/SSL/src/CommonCommands/ОткрытьОбменыДанными/CommandModule.bsl b/SSL/src/CommonCommands/ОткрытьОбменыДанными/CommandModule.bsl index 1748d0b1e..6902ac9a9 100644 --- a/SSL/src/CommonCommands/ОткрытьОбменыДанными/CommandModule.bsl +++ b/SSL/src/CommonCommands/ОткрытьОбменыДанными/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/ОткрытьПравилаКонвертацииОбъектов/CommandModule.bsl b/SSL/src/CommonCommands/ОткрытьПравилаКонвертацииОбъектов/CommandModule.bsl index 0f721ba0c..da238cd78 100644 --- a/SSL/src/CommonCommands/ОткрытьПравилаКонвертацииОбъектов/CommandModule.bsl +++ b/SSL/src/CommonCommands/ОткрытьПравилаКонвертацииОбъектов/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/ОткрытьПравилаРегистрацииОбъектов/CommandModule.bsl b/SSL/src/CommonCommands/ОткрытьПравилаРегистрацииОбъектов/CommandModule.bsl index 4fa118916..79f9c52a5 100644 --- a/SSL/src/CommonCommands/ОткрытьПравилаРегистрацииОбъектов/CommandModule.bsl +++ b/SSL/src/CommonCommands/ОткрытьПравилаРегистрацииОбъектов/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/ОткрытьСценарииОбменовДанными/CommandModule.bsl b/SSL/src/CommonCommands/ОткрытьСценарииОбменовДанными/CommandModule.bsl index 7466cd9e1..75f750d15 100644 --- a/SSL/src/CommonCommands/ОткрытьСценарииОбменовДанными/CommandModule.bsl +++ b/SSL/src/CommonCommands/ОткрытьСценарииОбменовДанными/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/ОчиститьРегистрациюИзмененийПоставляемыхДанных/CommandModule.bsl b/SSL/src/CommonCommands/ОчиститьРегистрациюИзмененийПоставляемыхДанных/CommandModule.bsl new file mode 100644 index 000000000..d87311fde --- /dev/null +++ b/SSL/src/CommonCommands/ОчиститьРегистрациюИзмененийПоставляемыхДанных/CommandModule.bsl @@ -0,0 +1,38 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ОчиститьРегистрациюИзмененийПоставляемыхДанных(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ОчиститьРегистрациюИзмененийПоставляемыхДанных() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ИзмененияПоставляемыхДанных.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.ИзмененияПоставляемыхДанных КАК ИзмененияПоставляемыхДанных + |ГДЕ + | ИзмененияПоставляемыхДанных.Ссылка <> &ЭтотУзел"; + Запрос.УстановитьПараметр("ЭтотУзел", ПланыОбмена.ИзмененияПоставляемыхДанных.ЭтотУзел()); + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + ПланыОбмена.УдалитьРегистрациюИзменений(Выборка.Ссылка); + КонецЦикла; + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonCommands/ОчиститьРегистрациюИзмененийПоставляемыхДанных/ОчиститьРегистрациюИзмененийПоставляемыхДанных.mdo b/SSL/src/CommonCommands/ОчиститьРегистрациюИзмененийПоставляемыхДанных/ОчиститьРегистрациюИзмененийПоставляемыхДанных.mdo new file mode 100644 index 000000000..f93a13789 --- /dev/null +++ b/SSL/src/CommonCommands/ОчиститьРегистрациюИзмененийПоставляемыхДанных/ОчиститьРегистрациюИзмененийПоставляемыхДанных.mdo @@ -0,0 +1,10 @@ + + + ОчиститьРегистрациюИзмененийПоставляемыхДанных + + ru + Очистить регистрацию изменений поставляемых данных + + ActionsPanelTools + Auto + diff --git a/SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных/CommandModule.bsl b/SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных/CommandModule.bsl index 6a61a0f22..1d2e0cfea 100644 --- a/SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных/CommandModule.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + &НаКлиенте Процедура ОбработкаКоманды(УзелИнформационнойБазы, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных/CommandModule.bsl b/SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных/CommandModule.bsl index 90dcca42a..0ab34b853 100644 --- a/SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных/CommandModule.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + &НаКлиенте Процедура ОбработкаКоманды(УзелИнформационнойБазы, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/ПерсональнаяНастройкаПроксиСервера/CommandModule.bsl b/SSL/src/CommonCommands/ПерсональнаяНастройкаПроксиСервера/CommandModule.bsl index 2f2ad21e8..2a7f78a19 100644 --- a/SSL/src/CommonCommands/ПерсональнаяНастройкаПроксиСервера/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПерсональнаяНастройкаПроксиСервера/CommandModule.bsl @@ -1,8 +1,14 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ОткрытьФорму("ОбщаяФорма.ПараметрыПроксиСервера", - Новый Структура("НастройкаПроксиНаКлиенте", Истина)); +#Если ВебКлиент Тогда + Предупреждение(НСтр("ru = 'В веб-клиенте параметры прокси-сервера необходимо задавать в настройках браузера.'")); + Возврат; +#КонецЕсли + + ОткрытьФорму("ОбщаяФорма.ПараметрыПроксиСервера", Новый Структура("НастройкаПроксиНаКлиенте", Истина)); КонецПроцедуры diff --git a/SSL/src/CommonCommands/ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы/CommandModule.bsl b/SSL/src/CommonCommands/ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы/CommandModule.bsl index ad4e09261..7450fac99 100644 --- a/SSL/src/CommonCommands/ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -20,6 +22,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервере Процедура ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазыНаСервере(Отказ, АдресВременногоХранилища, УзелИнформационнойБазы) diff --git a/SSL/src/CommonCommands/ПрисоединенныеФайлыКОбъекту/CommandModule.bsl b/SSL/src/CommonCommands/ПрисоединенныеФайлыКОбъекту/CommandModule.bsl index 48251070a..7a96fe7a0 100644 --- a/SSL/src/CommonCommands/ПрисоединенныеФайлыКОбъекту/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПрисоединенныеФайлыКОбъекту/CommandModule.bsl @@ -1,8 +1,17 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ПараметрыФормы = Новый Структура("ВладелецФайла,ТолькоПросмотр", ПараметрКоманды, ПараметрыВыполненияКоманды.Источник.ТолькоПросмотр); - ОткрытьФорму("ОбщаяФорма.ПрисоединенныеФайлы", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ВладелецФайла", ПараметрКоманды); + ПараметрыФормы.Вставить("ТолькоПросмотр", ПараметрыВыполненияКоманды.Источник.ТолькоПросмотр); + + ОткрытьФорму("ОбщаяФорма.ПрисоединенныеФайлы", + ПараметрыФормы, + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/CommonCommands/СинхронизироватьДанные/CommandModule.bsl b/SSL/src/CommonCommands/СинхронизироватьДанные/CommandModule.bsl new file mode 100644 index 000000000..c5e3828ac --- /dev/null +++ b/SSL/src/CommonCommands/СинхронизироватьДанные/CommandModule.bsl @@ -0,0 +1,10 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ОткрытьФорму("ОбщаяФорма.ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами",, ПараметрыВыполненияКоманды.Источник, 1); + +КонецПроцедуры + diff --git a/SSL/src/CommonCommands/СинхронизироватьДанные/СинхронизироватьДанные.mdo b/SSL/src/CommonCommands/СинхронизироватьДанные/СинхронизироватьДанные.mdo new file mode 100644 index 000000000..2805d5b64 --- /dev/null +++ b/SSL/src/CommonCommands/СинхронизироватьДанные/СинхронизироватьДанные.mdo @@ -0,0 +1,17 @@ + + + СинхронизироватьДанные + + ru + Синхронизировать данные + + ActionsPanelTools + Auto + + ru + Выполнить синхронизацию данных приложений + + + StdPicture.Refresh + + diff --git a/SSL/src/CommonCommands/СоздатьЗаметкуПоПредмету/CommandModule.bsl b/SSL/src/CommonCommands/СоздатьЗаметкуПоПредмету/CommandModule.bsl index ffeb1afbb..e3410f51e 100644 --- a/SSL/src/CommonCommands/СоздатьЗаметкуПоПредмету/CommandModule.bsl +++ b/SSL/src/CommonCommands/СоздатьЗаметкуПоПредмету/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/CommonCommands/УстановитьНапоминаниеПоПредмету/CommandModule.bsl b/SSL/src/CommonCommands/УстановитьНапоминаниеПоПредмету/CommandModule.bsl index c03f3b63e..21d4ff01e 100644 --- a/SSL/src/CommonCommands/УстановитьНапоминаниеПоПредмету/CommandModule.bsl +++ b/SSL/src/CommonCommands/УстановитьНапоминаниеПоПредмету/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) @@ -12,6 +14,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервере Функция ПолучитьКлючЗаписиПоИсточнику(Источник) @@ -30,7 +35,7 @@ | НапоминанияПользователя.Пользователь = &Пользователь | И НапоминанияПользователя.Источник = &Источник"; - Запрос.УстановитьПараметр("Пользователь", ОбщегоНазначения.ТекущийПользователь()); + Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); Запрос.УстановитьПараметр("Источник", Источник); Запрос.Текст = ТекстЗапроса; diff --git a/SSL/src/CommonCommands/ФайлыВТоме/CommandModule.bsl b/SSL/src/CommonCommands/ФайлыВТоме/CommandModule.bsl index 4a0f35415..a3412d610 100644 --- a/SSL/src/CommonCommands/ФайлыВТоме/CommandModule.bsl +++ b/SSL/src/CommonCommands/ФайлыВТоме/CommandModule.bsl @@ -1,8 +1,16 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ПараметрыФормы = Новый Структура("Том", ПараметрКоманды); - ОткрытьФорму("ОбщаяФорма.ФайлыВТоме", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Том", ПараметрКоманды); + + ОткрытьФорму("ОбщаяФорма.ФайлыВТоме", + ПараметрыФормы, + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/CommonForms/АдреснаяКнига/Module.bsl b/SSL/src/CommonForms/АдреснаяКнига/Module.bsl index 0848f02b4..2008e7b1b 100644 --- a/SSL/src/CommonForms/АдреснаяКнига/Module.bsl +++ b/SSL/src/CommonForms/АдреснаяКнига/Module.bsl @@ -1,232 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОСУЩЕСТВЛЕНИЯ ПОИСКА - -// Осуществляет поиск контактов по доменному имени или по адресу электронной почты. -// -&НаСервере -Функция НайтиПоEmail(ПоДомену) - - Возврат Взаимодействия.НайтиПоEmail(СтрокаПоиска, ПоДомену ,ЭтаФорма); - -КонецФункции - -//Осуществляет поиск контактов по строке -// -&НаСервере -Функция ОсуществитьПоискКонтактовПоСтроке() - - Возврат Взаимодействия.ОсуществитьПоискКонтактовПоСтроке(ЭтаФорма, Истина); - -КонецФункции - -// Осуществляет поиск контактов по началу наименования -// -&НаСервере -Функция НайтиПоНачалуНаименования() - - Возврат Взаимодействия.ПолучитьВсеКонтактыПоНачалуНаименованияСАдресамиЭлектроннойПочты(СтрокаПоиска, ЭтаФорма); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ - -&НаСервере -Процедура ЗаполнитьТаблицуПолучателей() - - табПолучатели = РеквизитФормыВЗначение("ПолучателиПисьма"); - - Для Каждого ГруппаВыбранных Из Параметры.СписокВыбранных Цикл - Если ГруппаВыбранных.Значение <> Неопределено Тогда - Для Каждого Элемент Из ГруппаВыбранных.Значение Цикл - новСтр = табПолучатели.Добавить(); - новСтр.Группа = ГруппаВыбранных.Представление; - ЗаполнитьЗначенияСвойств(новСтр, Элемент); - КонецЦикла; - КонецЕсли; - КонецЦикла; - - табПолучатели.Сортировать("Группа"); - - Если табПолучатели.Количество() > 0 Тогда - ТаблицаАдресов = - Взаимодействия.ПолучитьАдресаЭлектроннойПочтыДляМассиваКонтактов(табПолучатели.ВыгрузитьКолонку("Контакт")); - - Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ - | ПолучателиПисьма.Адрес, - | ПолучателиПисьма.Представление, - | ПолучателиПисьма.Контакт, - | ПолучателиПисьма.Группа - |ПОМЕСТИТЬ ПолучателиПисьма - |ИЗ - | &ПолучателиПисьма КАК ПолучателиПисьма - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | КонтактыАдреса.Контакт, - | КонтактыАдреса.СписокАдресов - |ПОМЕСТИТЬ КонтактыСписокАдресов - |ИЗ - | &КонтактыАдреса КАК КонтактыАдреса - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ПолучателиПисьма.Адрес, - | ПолучателиПисьма.Представление, - | ПолучателиПисьма.Контакт, - | ПолучателиПисьма.Группа, - | ЕСТЬNULL(КонтактыСписокАдресов.СписокАдресов, """") КАК СписокАдресов - |ИЗ - | ПолучателиПисьма КАК ПолучателиПисьма - | ЛЕВОЕ СОЕДИНЕНИЕ КонтактыСписокАдресов КАК КонтактыСписокАдресов - | ПО КонтактыСписокАдресов.Контакт = ПолучателиПисьма.Контакт"; - - Запрос.УстановитьПараметр("ПолучателиПисьма", табПолучатели); - Запрос.УстановитьПараметр("КонтактыАдреса", ТаблицаАдресов); - - табПолучатели = Запрос.Выполнить().Выгрузить(); - - КонецЕсли; - - ЗначениеВРеквизитФормы(табПолучатели, "ПолучателиПисьма"); - -КонецПроцедуры - -//Добавляет строку в таблицу "Получатели письма" и заполняет ее согласно переданным параметрам. -// -//Параметры -// Адрес - Строка - адрес электронной почты. -// Наименование - Строка - Представление адресата. -// Контакт - СправочникСсылка - контакт получатель. -// -&НаКлиенте -Процедура ДобавитьПолучателя(Адрес, Наименование, Контакт,СписокАдресов = "") - - новСтр = ПолучателиПисьма.Добавить(); - новСтр.Адрес = Адрес; - новСтр.Представление = Наименование; - новСтр.Контакт = Контакт; - новСтр.СписокАдресов = СписокАдресов; - новСтр.Группа = ГруппаПоУмолчанию; - -КонецПроцедуры - -// Добавляет в таблицу получателей письма выбранную строку из списка "Контакты по предмету" -// -&НаКлиенте -Процедура ДобавитьПолучателяИзСпискаПоПредмету() - - текДанные = Элементы.КонтактыПоПредмету.ТекущиеДанные; - Если текДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Результат = ВзаимодействияВызовСервера.ПолучитьНаименованиеИАдресаЭлектроннойПочтыКонтакта(текДанные.Ссылка); - Если Результат <> Неопределено И Результат.Адреса.Количество() > 0 Тогда - СписокАдресов = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(Результат.Адреса, ";"); - Иначе - СписокАдресов = ""; - КонецЕсли; - - ДобавитьПолучателя(текДанные.Адрес, текДанные.Наименование, текДанные.Ссылка, СписокАдресов); - -КонецПроцедуры - -//Позиционируется на заданном контакте в списке получателей письма -// -//Параметры -// Контакт - СправочникСсылка - контакт, на котором необходимо спозиционироватся. -// -&НаКлиенте -Процедура УстановитьКонтактВСпискеПолучателей(Контакт) - - Если ЗначениеЗаполнено(Контакт) И Элементы.ПолучателиПисьма.ТекущиеДанные <> Неопределено Тогда - Элементы.ПолучателиПисьма.ТекущиеДанные.Контакт = Контакт; - КонецЕсли; - -КонецПроцедуры - -// Устанавливает текущим контакт в соответствующем динамическом списке. -// -//Параметры -// Контакт - СправочникСсылка - контакт, на котором необходимо спозиционироватся. -// -&НаСервере -Процедура УстановитьТекущимКонтакт(Контакт) - - Взаимодействия.УстановитьТекущимКонтакт(Контакт, ЭтаФорма); - -КонецПроцедуры - -//Изменяет группу получателей письма. -// -//Параметры -// ИмяГруппы - Строка - имя группы, которое будет установлено выделенным получателям письма. -// -&НаКлиенте -Процедура ИзменитьГруппу(ИмяГруппы) - - Для Каждого Стр Из Элементы.ПолучателиПисьма.ВыделенныеСтроки Цикл - Элемент = ПолучателиПисьма.НайтиПоИдентификатору(Стр); - Элемент.Группа = ИмяГруппы; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ПеренестиВыделенныеСтроки(ЗНАЧ ВыделенныеСтроки) - - Результат = Взаимодействия.ПолучитьАдресаЭлектроннойПочтыДляМассиваКонтактов(ВыделенныеСтроки, ГруппаПоУмолчанию); - - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Результат, ПолучателиПисьма); - -КонецПроцедуры - -&НаСервере -Процедура УстановитьГруппуПоУмолчанию() - - Если Параметры.Свойство("ГруппаПоУмолчанию") Тогда - ГруппаПоУмолчанию = Параметры.ГруппаПоУмолчанию; - КонецЕсли; - Если ПустаяСтрока(ГруппаПоУмолчанию) Тогда - ГруппаПоУмолчанию = НСтр("ru = 'Кому'"); - КонецЕсли; - -КонецПроцедуры - -// Управляет доступностью элементов формы -&НаКлиенте -Процедура УправлениеДоступностью() - - Элементы.КомандаОбновитьИндексППД.Доступность = Не ИндексАктуален; - -КонецПроцедуры - -&НаКлиенте -Процедура УправлениеСтраницами() - - Если Элементы.СтраницыСписки.ТекущаяСтраница = Элементы.СтраницаВсеКонтактыПоПредмету ИЛИ - Элементы.СтраницыСписки.ТекущаяСтраница = Элементы.СтраницаПоискКонтактов ИЛИ - Элементы.СтраницыСписки.ТекущаяСтраница.ПодчиненныеЭлементы.Количество() = 1 ИЛИ - (Элементы.СтраницыСписки.ТекущаяСтраница = Элементы.СтраницаПользователей И - (НЕ ИспользоватьГруппыПользователей))Тогда - - Элементы.СтраницыПереместить.ТекущаяСтраница = Элементы.СтраницаПереместитьОднаТаблица; - - Иначе - - Элементы.СтраницыПереместить.ТекущаяСтраница = Элементы.СтраницаПереместитьДвеТаблицы; - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -265,7 +38,118 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -//КОМАНДЫ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура СтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница) + + УправлениеСтраницами(); + +КонецПроцедуры + +&НаКлиенте +Процедура АдресНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) + + Элемент.СписокВыбора.Очистить(); + + ТекущиеДанные = Элементы.ПолучателиПисьма.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если НЕ ПустаяСтрока(ТекущиеДанные.СписокАдресов) Тогда + Элемент.СписокВыбора.ЗагрузитьЗначения( + СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекущиеДанные.СписокАдресов,";")); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура КонтактНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ТекущиеДанные = Элементы.ПолучателиПисьма.ТекущиеДанные; + Если ВзаимодействияКлиент.ВыбратьКонтакт(Предмет, ТекущиеДанные.Адрес, ТекущиеДанные.Представление, + ТекущиеДанные.Контакт, Истина, Ложь, Истина) Тогда + Модифицированность = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучателиПисьмаПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование) + + Если НоваяСтрока Тогда + Элемент.ТекущиеДанные.Группа = "Кому"; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура КонтактыПоПредметуВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ДобавитьПолучателяИзСпискаПоПредмету(); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокСправочникаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Если Не ЗначениеЗаполнено(ВыбраннаяСтрока) Тогда + Возврат; + КонецЕсли; + + Результат = ВзаимодействияВызовСервера.ПолучитьНаименованиеИАдресаЭлектроннойПочтыКонтакта(ВыбраннаяСтрока); + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Адрес = Результат.Адреса[0]; + СписокАдресов = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(Результат.Адреса, ";"); + + ДобавитьПолучателя(Адрес, Результат.Наименование, ВыбраннаяСтрока, СписокАдресов); + +КонецПроцедуры + +//Универсальный обработчик активизации строки динамического списка, у которого есть подчинненные списки. +&НаКлиенте +Процедура Подключаемый_СписокВладелецПриАктивизацииСтроки(Элемент) + + ВзаимодействияКлиент.КонтактВладелецПриАктивизацииСтроки(Элемент, ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура НайденныеКонтактыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ТекущиеДанные = Элементы.НайденныеКонтакты.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Результат = ВзаимодействияВызовСервера.ПолучитьНаименованиеИАдресаЭлектроннойПочтыКонтакта(ТекущиеДанные.Ссылка); + Если Результат <> Неопределено И Результат.Адреса.Количество() > 0 Тогда + СписокАдресов = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(Результат.Адреса, ";"); + Иначе + СписокАдресов = ""; + КонецЕсли; + + ДобавитьПолучателя(ТекущиеДанные.Представление, ТекущиеДанные.НаименованиеКонтакта, ТекущиеДанные.Ссылка, СписокАдресов); + +КонецПроцедуры + +&НаКлиенте +Процедура ГруппыПользователейПриАктивизацииСтроки(Элемент) + + СписокПользователей.Параметры.УстановитьЗначениеПараметра("ГруппаПользователей", Элементы.ГруппыПользователей.ТекущаяСтрока); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ // Передает владельцу в качестве результата работы формы массив структур содержащих // адреса выбранных получателей и закрывает форму. @@ -275,10 +159,10 @@ Результат = Новый Массив; - Для Каждого Стр Из ПолучателиПисьма Цикл - Группа = ?(ПустаяСтрока(Стр.Группа), "Кому", Стр.Группа); + Для Каждого СтрокаТаблицы Из ПолучателиПисьма Цикл + Группа = ?(ПустаяСтрока(СтрокаТаблицы.Группа), "Кому", СтрокаТаблицы.Группа); Контакт = Новый Структура("Адрес, Представление, Контакт, Группа", - Стр.Адрес, Стр.Представление, Стр.Контакт, Группа); + СтрокаТаблицы.Адрес, СтрокаТаблицы.Представление, СтрокаТаблицы.Контакт, Группа); Результат.Добавить(Контакт); КонецЦикла; @@ -340,7 +224,7 @@ ИначеЕсли ВариантыПоиска = "ПоДомену" Тогда НайтиПоEmail(Истина); ИначеЕсли ВариантыПоиска = "ПоСтроке" Тогда - Результат = ОсуществитьПоискКонтактовПоСтроке(); + Результат = КонтактыНайденныеПоСтроке(); ИначеЕсли ВариантыПоиска = "НачинаетсяС" Тогда НайтиПоНачалуНаименования(); КонецЕсли; @@ -369,9 +253,9 @@ &НаКлиенте Процедура НайтиВСпискеИзСпискаНайденныхВыполнить() - текДанные = Элементы.НайденныеКонтакты.ТекущиеДанные; - Если текДанные <> Неопределено И ЗначениеЗаполнено(текДанные.Ссылка) Тогда - УстановитьТекущимКонтакт(текДанные.Ссылка); + ТекущиеДанные = Элементы.НайденныеКонтакты.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено И ЗначениеЗаполнено(ТекущиеДанные.Ссылка) Тогда + УстановитьТекущимКонтакт(ТекущиеДанные.Ссылка); КонецЕсли; КонецПроцедуры @@ -382,9 +266,9 @@ &НаКлиенте Процедура НайтиВСпискеИзСпискаПолучателейВыполнить() - текДанные = Элементы.ПолучателиПисьма.ТекущиеДанные; - Если текДанные <> Неопределено И ЗначениеЗаполнено(текДанные.Контакт) Тогда - УстановитьТекущимКонтакт(текДанные.Контакт); + ТекущиеДанные = Элементы.ПолучателиПисьма.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено И ЗначениеЗаполнено(ТекущиеДанные.Контакт) Тогда + УстановитьТекущимКонтакт(ТекущиеДанные.Контакт); КонецЕсли; КонецПроцедуры @@ -395,9 +279,9 @@ &НаКлиенте Процедура НайтиВСпискеИзСпискаПредметовВыполнить() - текДанные = Элементы.КонтактыПоПредмету.ТекущиеДанные; - Если текДанные <> Неопределено Тогда - УстановитьТекущимКонтакт(текДанные.Ссылка); + ТекущиеДанные = Элементы.КонтактыПоПредмету.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + УстановитьТекущимКонтакт(ТекущиеДанные.Ссылка); КонецЕсли; КонецПроцедуры @@ -411,12 +295,12 @@ НайденныеКонтакты.Очистить(); ВариантыПоиска = "ПоEmail"; - текДанные = Элементы.ПолучателиПисьма.ТекущиеДанные; - Если текДанные = Неопределено Тогда + ТекущиеДанные = Элементы.ПолучателиПисьма.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; - СтрокаПоиска = текДанные.Адрес; + СтрокаПоиска = ТекущиеДанные.Адрес; Если Не ПустаяСтрока(СтрокаПоиска) Тогда НайтиПоEmail(Ложь); КонецЕсли; @@ -432,14 +316,14 @@ НайденныеКонтакты.Очистить(); ВариантыПоиска = "ПоСтроке"; - текДанные = Элементы.ПолучателиПисьма.ТекущиеДанные; - Если текДанные = Неопределено Тогда + ТекущиеДанные = Элементы.ПолучателиПисьма.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; - СтрокаПоиска = текДанные.Представление; + СтрокаПоиска = ТекущиеДанные.Представление; Если Не ПустаяСтрока(СтрокаПоиска) Тогда - Результат = ОсуществитьПоискКонтактовПоСтроке(); + Результат = КонтактыНайденныеПоСтроке(); Если Не ПустаяСтрока(Результат) Тогда Предупреждение(Результат); КонецЕсли; @@ -452,12 +336,12 @@ &НаКлиенте Процедура УстановитьАдресКонтактаВыполнить() - текДанные = Элементы.ПолучателиПисьма.ТекущиеДанные; - Если текДанные = Неопределено ИЛИ Не ЗначениеЗаполнено(текДанные.Контакт) Тогда + ТекущиеДанные = Элементы.ПолучателиПисьма.ТекущиеДанные; + Если ТекущиеДанные = Неопределено ИЛИ Не ЗначениеЗаполнено(ТекущиеДанные.Контакт) Тогда Возврат; КонецЕсли; - Результат = ВзаимодействияВызовСервера.ПолучитьАдресаЭлектроннойПочтыКонтакта(текДанные.Контакт); + Результат = ВзаимодействияВызовСервера.ПолучитьАдресаЭлектроннойПочтыКонтакта(ТекущиеДанные.Контакт); Если Результат.Количество() = 0 Тогда Возврат; КонецЕсли; @@ -466,29 +350,29 @@ Адрес = Результат[0].АдресЭП; Представление = Результат[0].Представление; Иначе - спсВыбора = Новый СписокЗначений; + СписокВыбора = Новый СписокЗначений; Номер = 0; Для Каждого Элемент Из Результат Цикл - спсВыбора.Добавить(Номер, Элемент.ВидНаименование + ": " + Элемент.АдресЭП); + СписокВыбора.Добавить(Номер, Элемент.ВидНаименование + ": " + Элемент.АдресЭП); Номер = Номер + 1; КонецЦикла; - выбрЭлемент = спсВыбора.ВыбратьЭлемент(); - Если выбрЭлемент = Неопределено Тогда + ВыбранныйЭлемент = СписокВыбора.ВыбратьЭлемент(); + Если ВыбранныйЭлемент = Неопределено Тогда Возврат; КонецЕсли; - Индекс = выбрЭлемент.Значение; + Индекс = ВыбранныйЭлемент.Значение; Адрес = Результат[Индекс].АдресЭП; Представление = Результат[Индекс].Представление; КонецЕсли; - Поз = Найти(Представление, "<"); - Представление = ?(Поз = 0, "", СокрЛП(Лев(Представление, Поз-1))); + Позиция = Найти(Представление, "<"); + Представление = ?(Позиция= 0, "", СокрЛП(Лев(Представление, Позиция-1))); - текДанные.Адрес = Адрес; + ТекущиеДанные.Адрес = Адрес; Если Не ПустаяСтрока(Представление) Тогда - текДанные.Представление = Представление; + ТекущиеДанные.Представление = Представление; КонецЕсли; КонецПроцедуры @@ -499,9 +383,9 @@ &НаКлиенте Процедура УстановитьКонтактИзСпискаПредметовВыполнить() - текДанные = Элементы.КонтактыПоПредмету.ТекущиеДанные; - Если текДанные <> Неопределено Тогда - УстановитьКонтактВСпискеПолучателей(текДанные.Ссылка); + ТекущиеДанные = Элементы.КонтактыПоПредмету.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + УстановитьКонтактВСпискеПолучателей(ТекущиеДанные.Ссылка); КонецЕсли; КонецПроцедуры @@ -573,113 +457,234 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ -&НаКлиенте -Процедура СтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница) +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции осуществления поиска + +// Осуществляет поиск контактов по доменному имени или по адресу электронной почты. +// +&НаСервере +Процедура НайтиПоEmail(ПоДомену) - УправлениеСтраницами(); + Взаимодействия.НайтиПоEmail(СтрокаПоиска, ПоДомену ,ЭтаФорма); КонецПроцедуры +//Осуществляет поиск контактов по строке +// +&НаСервере +Функция КонтактыНайденныеПоСтроке() + + Возврат Взаимодействия.ОсуществитьПоискКонтактовПоСтроке(ЭтаФорма, Истина); + +КонецФункции + +// Осуществляет поиск контактов по началу наименования +// +&НаСервере +Процедура НайтиПоНачалуНаименования() + + Взаимодействия.ПолучитьВсеКонтактыПоНачалуНаименованияСАдресамиЭлектроннойПочты(СтрокаПоиска, ЭтаФорма); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Прочее + +&НаСервере +Процедура ЗаполнитьТаблицуПолучателей() + + табПолучатели = РеквизитФормыВЗначение("ПолучателиПисьма"); + + Для Каждого ГруппаВыбранных Из Параметры.СписокВыбранных Цикл + Если ГруппаВыбранных.Значение <> Неопределено Тогда + Для Каждого Элемент Из ГруппаВыбранных.Значение Цикл + НоваяСтрока = табПолучатели.Добавить(); + НоваяСтрока.Группа = ГруппаВыбранных.Представление; + ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент); + КонецЦикла; + КонецЕсли; + КонецЦикла; + + табПолучатели.Сортировать("Группа"); + + Если табПолучатели.Количество() > 0 Тогда + ТаблицаАдресов = + Взаимодействия.ПолучитьАдресаЭлектроннойПочтыДляМассиваКонтактов(табПолучатели.ВыгрузитьКолонку("Контакт")); + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ПолучателиПисьма.Адрес, + | ПолучателиПисьма.Представление, + | ПолучателиПисьма.Контакт, + | ПолучателиПисьма.Группа + |ПОМЕСТИТЬ ПолучателиПисьма + |ИЗ + | &ПолучателиПисьма КАК ПолучателиПисьма + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КонтактыАдреса.Контакт, + | КонтактыАдреса.СписокАдресов + |ПОМЕСТИТЬ КонтактыСписокАдресов + |ИЗ + | &КонтактыАдреса КАК КонтактыАдреса + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПолучателиПисьма.Адрес, + | ПолучателиПисьма.Представление, + | ПолучателиПисьма.Контакт, + | ПолучателиПисьма.Группа, + | ЕСТЬNULL(КонтактыСписокАдресов.СписокАдресов, """") КАК СписокАдресов + |ИЗ + | ПолучателиПисьма КАК ПолучателиПисьма + | ЛЕВОЕ СОЕДИНЕНИЕ КонтактыСписокАдресов КАК КонтактыСписокАдресов + | ПО КонтактыСписокАдресов.Контакт = ПолучателиПисьма.Контакт"; + + Запрос.УстановитьПараметр("ПолучателиПисьма", табПолучатели); + Запрос.УстановитьПараметр("КонтактыАдреса", ТаблицаАдресов); + + табПолучатели = Запрос.Выполнить().Выгрузить(); + + КонецЕсли; + + ЗначениеВРеквизитФормы(табПолучатели, "ПолучателиПисьма"); + +КонецПроцедуры + +//Добавляет строку в таблицу "Получатели письма" и заполняет ее согласно переданным параметрам. +// +//Параметры +// Адрес - Строка - адрес электронной почты. +// Наименование - Строка - Представление адресата. +// Контакт - СправочникСсылка - контакт получатель. +// &НаКлиенте -Процедура АдресНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) +Процедура ДобавитьПолучателя(Адрес, Наименование, Контакт,СписокАдресов = "") - Элемент.СписокВыбора.Очистить(); + НоваяСтрока = ПолучателиПисьма.Добавить(); + НоваяСтрока.Адрес = Адрес; + НоваяСтрока.Представление = Наименование; + НоваяСтрока.Контакт = Контакт; + НоваяСтрока.СписокАдресов = СписокАдресов; + НоваяСтрока.Группа = ГруппаПоУмолчанию; - ТекущиеДанные = Элементы.ПолучателиПисьма.ТекущиеДанные; +КонецПроцедуры + +// Добавляет в таблицу получателей письма выбранную строку из списка "Контакты по предмету" +// +&НаКлиенте +Процедура ДобавитьПолучателяИзСпискаПоПредмету() + + ТекущиеДанные = Элементы.КонтактыПоПредмету.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; - Если НЕ ПустаяСтрока(ТекущиеДанные.СписокАдресов) Тогда - Элемент.СписокВыбора.ЗагрузитьЗначения( - СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекущиеДанные.СписокАдресов,";")); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура КонтактНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - текДанные = Элементы.ПолучателиПисьма.ТекущиеДанные; - Если ВзаимодействияКлиент.ВыбратьКонтакт(Предмет, текДанные.Адрес, текДанные.Представление, - текДанные.Контакт, Истина, Ложь, Истина) Тогда - Модифицированность = Истина; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПолучателиПисьмаПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование) - - Если НоваяСтрока Тогда - Элемент.ТекущиеДанные.Группа = "Кому"; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура КонтактыПоПредметуВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ДобавитьПолучателяИзСпискаПоПредмету(); - -КонецПроцедуры - -&НаКлиенте -Процедура СписокСправочникаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - Если Не ЗначениеЗаполнено(ВыбраннаяСтрока) Тогда - Возврат; - КонецЕсли; - - Результат = ВзаимодействияВызовСервера.ПолучитьНаименованиеИАдресаЭлектроннойПочтыКонтакта(ВыбраннаяСтрока); - Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - - Адрес = Результат.Адреса[0]; - СписокАдресов = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(Результат.Адреса, ";"); - - ДобавитьПолучателя(Адрес, Результат.Наименование, ВыбраннаяСтрока, СписокАдресов); - -КонецПроцедуры - -//Универсальный обработчик активизации строки динамического списка, у которого есть подчинненные списки. -&НаКлиенте -Процедура Подключаемый_СписокВладелецПриАктивизацииСтроки(Элемент) - - ВзаимодействияКлиент.КонтактВладелецПриАктивизацииСтроки(Элемент, ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура НайденныеКонтактыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - текДанные = Элементы.НайденныеКонтакты.ТекущиеДанные; - Если текДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Результат = ВзаимодействияВызовСервера.ПолучитьНаименованиеИАдресаЭлектроннойПочтыКонтакта(текДанные.Ссылка); + Результат = ВзаимодействияВызовСервера.ПолучитьНаименованиеИАдресаЭлектроннойПочтыКонтакта(ТекущиеДанные.Ссылка); Если Результат <> Неопределено И Результат.Адреса.Количество() > 0 Тогда СписокАдресов = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(Результат.Адреса, ";"); Иначе СписокАдресов = ""; КонецЕсли; - ДобавитьПолучателя(текДанные.Представление, текДанные.НаименованиеКонтакта, текДанные.Ссылка, СписокАдресов); + ДобавитьПолучателя(ТекущиеДанные.Адрес, ТекущиеДанные.Наименование, ТекущиеДанные.Ссылка, СписокАдресов); КонецПроцедуры +//Позиционируется на заданном контакте в списке получателей письма +// +//Параметры +// Контакт - СправочникСсылка - контакт, на котором необходимо спозиционироватся. +// &НаКлиенте -Процедура ГруппыПользователейПриАктивизацииСтроки(Элемент) +Процедура УстановитьКонтактВСпискеПолучателей(Контакт) - СписокПользователей.Параметры.УстановитьЗначениеПараметра("ГруппаПользователей", Элементы.ГруппыПользователей.ТекущаяСтрока); + Если ЗначениеЗаполнено(Контакт) И Элементы.ПолучателиПисьма.ТекущиеДанные <> Неопределено Тогда + Элементы.ПолучателиПисьма.ТекущиеДанные.Контакт = Контакт; + КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +// Устанавливает текущим контакт в соответствующем динамическом списке. +// +//Параметры +// Контакт - СправочникСсылка - контакт, на котором необходимо спозиционироватся. +// +&НаСервере +Процедура УстановитьТекущимКонтакт(Контакт) + + Взаимодействия.УстановитьТекущимКонтакт(Контакт, ЭтаФорма); + +КонецПроцедуры + +//Изменяет группу получателей письма. +// +//Параметры +// ИмяГруппы - Строка - имя группы, которое будет установлено выделенным получателям письма. +// +&НаКлиенте +Процедура ИзменитьГруппу(ИмяГруппы) + + Для Каждого ВыделеннаяСтрока Из Элементы.ПолучателиПисьма.ВыделенныеСтроки Цикл + Элемент = ПолучателиПисьма.НайтиПоИдентификатору(ВыделеннаяСтрока); + Элемент.Группа = ИмяГруппы; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ПеренестиВыделенныеСтроки(ЗНАЧ ВыделенныеСтроки) + + Результат = Взаимодействия.ПолучитьАдресаЭлектроннойПочтыДляМассиваКонтактов(ВыделенныеСтроки, ГруппаПоУмолчанию); + + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Результат, ПолучателиПисьма); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьГруппуПоУмолчанию() + + Если Параметры.Свойство("ГруппаПоУмолчанию") Тогда + ГруппаПоУмолчанию = Параметры.ГруппаПоУмолчанию; + КонецЕсли; + Если ПустаяСтрока(ГруппаПоУмолчанию) Тогда + ГруппаПоУмолчанию = НСтр("ru = 'Кому'"); + КонецЕсли; + +КонецПроцедуры + +// Управляет доступностью элементов формы +&НаКлиенте +Процедура УправлениеДоступностью() + + Элементы.КомандаОбновитьИндексППД.Доступность = Не ИндексАктуален; + +КонецПроцедуры + +&НаКлиенте +Процедура УправлениеСтраницами() + + Если Элементы.СтраницыСписки.ТекущаяСтраница = Элементы.СтраницаВсеКонтактыПоПредмету ИЛИ + Элементы.СтраницыСписки.ТекущаяСтраница = Элементы.СтраницаПоискКонтактов ИЛИ + Элементы.СтраницыСписки.ТекущаяСтраница.ПодчиненныеЭлементы.Количество() = 1 ИЛИ + (Элементы.СтраницыСписки.ТекущаяСтраница = Элементы.СтраницаПользователей И + (НЕ ИспользоватьГруппыПользователей))Тогда + + Элементы.СтраницыПереместить.ТекущаяСтраница = Элементы.СтраницаПереместитьОднаТаблица; + + Иначе + + Элементы.СтраницыПереместить.ТекущаяСтраница = Элементы.СтраницаПереместитьДвеТаблицы; + + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ВводАдреса/Form.form b/SSL/src/CommonForms/ВводАдреса/Form.form index e4a8a3635..7adef752c 100644 --- a/SSL/src/CommonForms/ВводАдреса/Form.form +++ b/SSL/src/CommonForms/ВводАдреса/Form.form @@ -302,10 +302,6 @@ Left true - - Opening - ИндексОткрытие - 6 true true @@ -1231,6 +1227,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + DontBlock true true @@ -1730,6 +1730,21 @@ true + + СтруктураЗагруженных + + <key>ru</key> + <value>Структура загруженных</value> + + 26 + + + true + + + true + + КомандаОК @@ -1916,6 +1931,12 @@ <stringQualifiers/> </valueType> </parameters> + <parameters> + <name>СкрыватьНеактуальныеАдреса</name> + <valueType> + <types>Boolean</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/CommonForms/ВводАдреса/Module.bsl b/SSL/src/CommonForms/ВводАдреса/Module.bsl index f575d493a..49d99afd4 100644 --- a/SSL/src/CommonForms/ВводАдреса/Module.bsl +++ b/SSL/src/CommonForms/ВводАдреса/Module.bsl @@ -25,23 +25,30 @@ Страна = СтранаРоссия; Элементы.Страна.Доступность = Ложь; + Элементы.Страна.КнопкаВыбора = Ложь; Иначе Если Не ПустаяСтрока(КодСтраны) ИЛИ Не ПустаяСтрока(НаименованиеСтраны) Тогда // если задан код или наименование страны, то найдем страну - НайтиСтрануПоКодуИлиНаименованию(); + НайтиСтрануПоКодуИлиНаименованию(КодСтраны, НаименованиеСтраны); Иначе Страна = СтранаРоссия; КонецЕсли; КонецЕсли; + Если ЗначениеЗаполнено(Страна) Тогда + ЗаполнитьКодИНаименованиеСтраны(); + КонецЕсли; + Если НЕ ПустаяСтрока(Параметры.Заголовок) Тогда АвтоЗаголовок = Ложь; Заголовок = Параметры.Заголовок; КонецЕсли; + // СтандартныеПодсистемы.АдресныйКлассификатор + // Восстанавливаем значение флага "Скрывать неактуальные адреса" Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ВводАдреса", "СкрыватьНеактуальныеАдреса"); Если Значение = Неопределено Тогда @@ -50,6 +57,14 @@ СкрыватьНеактуальныеАдреса = Значение; КонецЕсли; + Если ИспользуютсяКлассификаторы И (Страна = СтранаРоссия) И Не ПустаяСтрока(Регион) Тогда + СтруктураАдреса = ПолучитьСтруктуруАдресаНаСервере(); + СтруктураЗагруженных = ЗагруженныеПоляПоРегиону(СтруктураАдреса); + ЗаписатьСтруктуруАдресаНаСервере(СтруктураАдреса); + КонецЕсли; + + // Конец СтандартныеПодсистемы.АдресныйКлассификатор + КонецПроцедуры &НаКлиенте @@ -57,16 +72,28 @@ ПроверитьТипыПолей(); ПроверитьКнопкиВыбора(); + + // СтандартныеПодсистемы.АдресныйКлассификатор Если ИспользуютсяКлассификаторы И (Страна = СтранаРоссия) И Не ПустаяСтрока(Регион) Тогда - УстановитьДоступностьПолейПоРегиону(); + УстановитьДоступностьПолейПоРегиону(СтруктураЗагруженных); КонецЕсли; Элементы.СкрыватьНеактуальныеАдреса.Пометка = СкрыватьНеактуальныеАдреса; + // Конец СтандартныеПодсистемы.АдресныйКлассификатор КонецПроцедуры &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, Модифицированность, БылиНажатыКнопкиЗакрытия); + +КонецПроцедуры + +// СтандартныеПодсистемы.АдресныйКлассификатор + +&НаКлиенте +Процедура ПриЗакрытии() + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ВводАдреса", "СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); КонецПроцедуры @@ -76,12 +103,17 @@ Если ВРег(ИмяСобытия) = ВРег("Запись_АдресныйКлассификатор") Тогда - УстановитьДоступностьПолейПоРегиону(); + СтруктураАдреса = ПолучитьСтруктуруАдреса(); + СтруктураЗагруженных = ЗагруженныеПоляПоРегиону(СтруктураАдреса); + ЗаписатьСтруктуруАдреса(СтруктураАдреса); + УстановитьДоступностьПолейПоРегиону(СтруктураЗагруженных); КонецЕсли; КонецПроцедуры +// Конец СтандартныеПодсистемы.АдресныйКлассификатор + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -97,107 +129,67 @@ СформироватьПредставление(); ПроверитьКнопкиВыбора(); + + Если Страна <> СтранаРоссия Тогда + // Разрешаем вводить любые адреса + Элементы.Район.Доступность = Истина; + Элементы.Город.Доступность = Истина; + Элементы.НаселенныйПункт.Доступность = Истина; + Элементы.Улица.Доступность = Истина; + КонецЕсли; + + // СтандартныеПодсистемы.АдресныйКлассификатор Если ИспользуютсяКлассификаторы И (Страна = СтранаРоссия) И Не ПустаяСтрока(Регион) Тогда ЗагрузитьРегион(); - УстановитьДоступностьПолейПоРегиону(); + СтруктураАдреса = ПолучитьСтруктуруАдреса(); + СтруктураЗагруженных = ЗагруженныеПоляПоРегиону(СтруктураАдреса); + ЗаписатьСтруктуруАдреса(СтруктураАдреса); + УстановитьДоступностьПолейПоРегиону(СтруктураЗагруженных); КонецЕсли; + // Конец СтандартныеПодсистемы.АдресныйКлассификатор КонецПроцедуры &НаКлиенте Процедура ИндексПриИзменении(Элемент) - Если (Страна = СтранаРоссия) И ИспользуютсяКлассификаторы Тогда - Если Не ПустаяСтрока(Индекс) И (СтрДлина(Индекс) = 6) Тогда - ПоИндексуВосстановитьДанные(); - КонецЕсли; - КонецЕсли; - - СформироватьПредставление(); + // СтандартныеПодсистемы.АдресныйКлассификатор + Если (Страна = СтранаРоссия) И ИспользуютсяКлассификаторы + И Не ПустаяСтрока(Индекс) И (СтрДлина(Индекс) = 6) Тогда -КонецПроцедуры - -&НаКлиенте -Процедура ИндексОткрытие(Элемент, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - Если (Страна = СтранаРоссия) И ИспользуютсяКлассификаторы Тогда - Если Не ПустаяСтрока(Индекс) И (СтрДлина(Индекс) = 6) Тогда - ПоИндексуВосстановитьДанные(); - КонецЕсли; - КонецЕсли; - - СформироватьПредставление(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПоИндексуВосстановитьДанные() - - Результат = УправлениеКонтактнойИнформациейКлассификаторы.НайтиЗаписиВАКПоИндексу(Индекс); - - Найдено = Результат.Количество; - - Если Найдено = 0 Тогда - Возврат; + ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Вставить("Индекс", Индекс); + ПараметрыПоиска.Вставить("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - ИначеЕсли Найдено > 1 Тогда + Результат = ОткрытьФормуМодально("ОбщаяФорма.ПоискПоИндексу", ПараметрыПоиска); - // откроем форму выбора - ПараметрыФормыПоиска = Новый Структура; - ПараметрыФормыПоиска.Вставить("Индекс", Индекс); - ПараметрыФормыПоиска.Вставить("НайденныйРегион", Результат.НайденныйРегион); - ПараметрыФормыПоиска.Вставить("НайденныйРайон", Результат.НайденныйРайон); - ПараметрыФормыПоиска.Вставить("ПризнакАктуальности", Результат.ПризнакАктуальности); - ПараметрыФормыПоиска.Вставить("АдресВХранилище", Результат.АдресВХранилище); - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ВводАдреса", "СкрыватьНеактуальныеАдреса" - , СкрыватьНеактуальныеАдреса); - - КодАдресногоЭлемента = ОткрытьФормуМодально("ОбщаяФорма.ПоискПоИндексу", ПараметрыФормыПоиска); - - // Восстанавливаем значение флага "Скрывать неактуальные адреса" - Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ВводАдреса", "СкрыватьНеактуальныеАдреса"); - Если Значение = Неопределено Тогда - СкрыватьНеактуальныеАдреса = Ложь; - Иначе - СкрыватьНеактуальныеАдреса = Значение; - КонецЕсли; - Элементы.СкрыватьНеактуальныеАдреса.Пометка = СкрыватьНеактуальныеАдреса; - - Если КодАдресногоЭлемента = Неопределено Тогда + Если Результат = Неопределено Тогда Возврат; КонецЕсли; - Результат = Новый Структура; - УправлениеКонтактнойИнформациейКлассификаторы.ПоКодуАдресногоЭлементаВСтруктуруПолучитьЕгоКомпоненты( - КодАдресногоЭлемента, Результат); + Элементы.СкрыватьНеактуальныеАдреса.Пометка = Результат.СкрыватьНеактуальныеАдреса; + ЗаписатьСтруктуруАдреса(Результат.СтруктураАдреса); + УстановитьДоступностьПолейПоРегиону(Результат.СтруктураЗагруженных); + #Если Не ВебКлиент Тогда + Если Не ПустаяСтрока(Улица) Тогда + ТекущийЭлемент = Элементы.Улица; + ИначеЕсли Не ПустаяСтрока(НаселенныйПункт) Тогда + ТекущийЭлемент = Элементы.НаселенныйПункт; + ИначеЕсли Не ПустаяСтрока(Город) Тогда + ТекущийЭлемент = Элементы.Город; + ИначеЕсли Не ПустаяСтрока(Район) Тогда + ТекущийЭлемент = Элементы.Район; + ИначеЕсли Не ПустаяСтрока(Регион) Тогда + ТекущийЭлемент = Элементы.Регион; + КонецЕсли; + #КонецЕсли + КонецЕсли; + // Конец СтандартныеПодсистемы.АдресныйКлассификатор - ПризнакАктуальности = Результат.ПризнакАктуальности; - Регион = Результат.Регион; - Район = Результат.Район; - Город = Результат.Город; - НаселенныйПункт = Результат.НаселенныйПункт; - Улица = Результат.Улица; - - УстановитьДоступностьПолейПоРегиону(); - - #Если Не ВебКлиент Тогда - Если Не ПустаяСтрока(Улица) Тогда - ТекущийЭлемент = Элементы.Улица; - ИначеЕсли Не ПустаяСтрока(НаселенныйПункт) Тогда - ТекущийЭлемент = Элементы.НаселенныйПункт; - ИначеЕсли Не ПустаяСтрока(Город) Тогда - ТекущийЭлемент = Элементы.Город; - ИначеЕсли Не ПустаяСтрока(Район) Тогда - ТекущийЭлемент = Элементы.Район; - ИначеЕсли Не ПустаяСтрока(Регион) Тогда - ТекущийЭлемент = Элементы.Регион; - КонецЕсли; - #КонецЕсли - + СформироватьПредставление(); + КонецПроцедуры &НаКлиенте @@ -205,22 +197,27 @@ ПроверитьТипыПолей(); + // СтандартныеПодсистемы.АдресныйКлассификатор Если ИспользуютсяКлассификаторы И (Страна = СтранаРоссия) Тогда - ИсправитьПоля(ПолучитьУровеньЭлемента(Элемент)); - УстановитьДоступностьПолейПоРегиону(); + // Обрабатываем поля и готовим данные на сервере для дальнейшей обработки на клиенте + СтруктураАдреса = ПолучитьСтруктуруАдреса(); + СтруктураРезультата = ОбработатьПолеНаСервере(СтруктураАдреса, ПолучитьУровеньЭлемента(Элемент)); + ЗаписатьСтруктуруАдреса(СтруктураАдреса); - НовыйИндекс = УправлениеКонтактнойИнформациейКлассификаторы.ПолучитьИндекс(Регион, Район, Город - , НаселенныйПункт, Улица, Дом, Корпус); - Если Не ПустаяСтрока(НовыйИндекс) Тогда - Индекс = НовыйИндекс; - КонецЕсли; + УстановитьДоступностьПолейПоРегиону(СтруктураРезультата.СтруктураЗагруженных); + + Для Каждого Ошибка ИЗ СтруктураРезультата.СтруктураОшибок Цикл + ОчиститьСообщения(); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Ошибка.Значение, , Ошибка.Ключ); + КонецЦикла; Если Элемент.Имя = "Регион" Тогда - ЗагрузитьРегион(); + ЗагрузитьРегион(СтруктураРезультата.МожноЗагружатьРегион); КонецЕсли; КонецЕсли; + // Конец СтандартныеПодсистемы.АдресныйКлассификатор СформироватьПредставление(); @@ -235,74 +232,95 @@ КонецЕсли; Уровень = ПолучитьУровеньЭлемента(Элемент); - СтруктураАдреса = Новый Структура("Регион,Район,Город,НаселенныйПункт,Улица,Уровень", Регион, Район, Город - , НаселенныйПункт, Улица, Уровень); + СтруктураАдреса = ПолучитьСтруктуруАдреса(); + СтруктураАдреса.Вставить("Уровень", Уровень); // СтандартныеПодсистемы.АдресныйКлассификатор - - Если Элемент.Имя <> "Регион" Тогда - // При подборе из формы необходимо, чтобы был заполнен регион, в противном случае получится пустой список - Если ПустаяСтрока(Регион) Тогда - - ОчиститьСообщения(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Укажите регион.'"), , "Регион"); - Возврат; + // При подборе из формы необходимо, чтобы был заполнен регион, в противном случае получится пустой список + Если ИспользуютсяКлассификаторы И (Страна = СтранаРоссия) Тогда - Иначе - - Если Не ЗагруженныеПоляПоРегиону().Регион Тогда - Возврат; + Отказ = Ложь; + Если Элемент.Имя <> "Регион" Тогда + Если ПустаяСтрока(Регион) Тогда + ОчиститьСообщения(); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Укажите регион.'"), , "Регион"); + Отказ = Истина; + Иначе + Отказ = ПередВыборомАдресногоЭлемента(Регион, СкрыватьНеактуальныеАдреса, Истина); КонецЕсли; - КонецЕсли; - + + Если Отказ Тогда + Возврат; + КонецЕсли; + + // Открываем форму подбора адреса + СтруктураРезультата = ОткрытьФормуМодально("РегистрСведений.АдресныйКлассификатор.Форма.ФормаВыбора", СтруктураАдреса); + + Если СтруктураРезультата = Неопределено Тогда + // Восстанавливаем значение флага "Скрывать неактуальные адреса" + Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ВводАдреса", "СкрыватьНеактуальныеАдреса"); + Если Значение = Неопределено Тогда + СкрыватьНеактуальныеАдреса = Ложь; + Иначе + СкрыватьНеактуальныеАдреса = Значение; + КонецЕсли; + Элементы.СкрыватьНеактуальныеАдреса.Пометка = СкрыватьНеактуальныеАдреса; + Возврат; + КонецЕсли; + + ЭтаФорма[Элемент.Имя] = СокрЛП(СтруктураРезультата.Наименование + " " + СтруктураРезультата.Сокращение); + ПолеИзменилось = (ЭтаФорма[Элемент.Имя] <> СокрЛП(Элемент.ТекстРедактирования)); + ЗаписатьСтруктуруАдреса(СтруктураРезультата.СтруктураАдреса); + Элементы.СкрыватьНеактуальныеАдреса.Пометка = СтруктураРезультата.СкрыватьНеактуальныеАдреса; + ПроверитьТипыПолей(); + + Для Каждого Ошибка ИЗ СтруктураРезультата.СтруктураОшибок Цикл + ОчиститьСообщения(); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Ошибка.Значение, , Ошибка.Ключ); + КонецЦикла; + + Если Элемент.Имя = "Регион" Тогда + ЗагрузитьРегион(СтруктураРезультата.МожноЗагружатьРегион); + КонецЕсли; + + Если ПустаяСтрока(КодРегиона) Тогда + РезультатКодРегиона = Неопределено; + Если СтруктураРезультата.Свойство("КодРегиона", РезультатКодРегиона) <> Неопределено Тогда + КодРегиона = РезультатКодРегиона; + КонецЕсли; + КонецЕсли; + + УстановитьДоступностьПолейПоРегиону(СтруктураРезультата.СтруктураЗагруженных); + + Модифицированность = Истина; + + КонецЕсли; + // Конец СтандартныеПодсистемы.АдресныйКлассификатор + + СформироватьПредставление(); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПередВыборомАдресногоЭлемента(Регион, СкрыватьНеактуальныеАдреса, ПроверяетсяРегион) + + Если Не ПроверяетсяРегион И НЕ ПустаяСтрока(Регион) Тогда + + РегионЗагружен = УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(Регион); + Если Не РегионЗагружен Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ВводАдреса", "СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - - // Открываем форму подбора адреса - Результат = ОткрытьФормуМодально("РегистрСведений.АдресныйКлассификатор.Форма.ФормаВыбора", СтруктураАдреса); + Возврат Ложь; - // Восстанавливаем значение флага "Скрывать неактуальные адреса" - Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ВводАдреса", "СкрыватьНеактуальныеАдреса"); - Если Значение = Неопределено Тогда - СкрыватьНеактуальныеАдреса = Ложь; - Иначе - СкрыватьНеактуальныеАдреса = Значение; - КонецЕсли; - Элементы.СкрыватьНеактуальныеАдреса.Пометка = СкрыватьНеактуальныеАдреса; - - Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - - ЭтаФорма[Элемент.Имя] = СокрЛП(Результат.Наименование + " " + Результат.Сокращение); - ПолеПриИзменении(Элемент); - - // Очистка потомков. - // ЭтаФорма[Элемент.Имя] является фактически выбранным значением. - // Элемент.ТекстРедактирования является значением до изменения. - Если ЭтаФорма[Элемент.Имя] <> СокрЛп(Элемент.ТекстРедактирования) Тогда - УправлениеКонтактнойИнформациейКлассификаторы.ОчиститьПотомковПоУровнюАдресногоЭлемента(Регион, Район, Город, - НаселенныйПункт, Улица, Дом, Корпус, Квартира, ПолучитьУровеньЭлемента(Элемент)); - КонецЕсли; - - УстановитьВозможностьРедактированияТекстаПоляГород(); - - Если ПустаяСтрока(КодРегиона) Тогда - РезультатКодРегиона = Неопределено; - Если Результат.Свойство("КодРегиона", РезультатКодРегиона) <> Неопределено Тогда - КодРегиона = РезультатКодРегиона; - КонецЕсли; - КонецЕсли; - - УстановитьДоступностьПолейПоРегиону(); - - Модифицированность = Истина; - // Конец СтандартныеПодсистемы.АдресныйКлассификатор - -КонецПроцедуры +КонецФункции + +// СтандартныеПодсистемы.АдресныйКлассификатор &НаКлиенте Процедура ПолеАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) @@ -321,23 +339,24 @@ &НаКлиенте Процедура ОбработкаАвтоПодбораИОкончанияВвода(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) - Если (Не ИспользуютсяКлассификаторы) ИЛИ (ПустаяСтрока(Текст)) ИЛИ (Страна <> СтранаРоссия) - ИЛИ (Не УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(Регион)) Тогда + Если (Не ИспользуютсяКлассификаторы) ИЛИ (ПустаяСтрока(Текст)) ИЛИ (Страна <> СтранаРоссия) Тогда Возврат; КонецЕсли; УровеньЭлемента = ПолучитьУровеньЭлемента(Элемент); - Результат = УправлениеКонтактнойИнформациейКлассификаторы.АвтоПодборТекстВАдресномЭлементе(Текст - , ?(УровеньЭлемента > 1, Регион, ""), ?(УровеньЭлемента > 2, Район, "") - , ?(УровеньЭлемента > 3, Город, ""), ?(УровеньЭлемента > 4, НаселенныйПункт, ""), УровеньЭлемента); + СтруктураАдреса = ПолучитьСтруктуруАдреса(); + Результат = РезультатАвтоПодбора(Текст, СтруктураАдреса, УровеньЭлемента); + ЗаписатьСтруктуруАдреса(СтруктураАдреса); Если Результат <> Неопределено Тогда + СтандартнаяОбработка = Ложь; + // Удаляем неактуальные адреса из результата, если это нужно Если СкрыватьНеактуальныеАдреса Тогда МассивУдаляемыхРезультатов = Новый Массив; Для Каждого ЭлементРезультата Из Результат Цикл - Если Не ЭлементРезультата.Пометка Тогда + Если Не ЭлементРезультата.Значение.ПометкаУдаления Тогда МассивУдаляемыхРезультатов.Добавить(ЭлементРезультата); КонецЕсли; КонецЦикла; @@ -345,11 +364,26 @@ Результат.Удалить(УдаляемыйЭлемент); КонецЦикла; КонецЕсли; - ДанныеВыбора = Результат; + + // Удаляем возможные повторы + МассивЗначений = Новый Массив; + СписокРезультатов = Новый СписокЗначений; + Для Каждого ЭлементРезультата Из Результат Цикл + НайденоеЗначение = МассивЗначений.Найти(ЭлементРезультата.Значение.Значение); + Если НайденоеЗначение = Неопределено Тогда + МассивЗначений.Добавить(ЭлементРезультата.Значение.Значение); + СписокРезультатов.Добавить(ЭлементРезультата.Значение); + КонецЕсли; + КонецЦикла; + + ДанныеВыбора = СписокРезультатов; + КонецЕсли; КонецПроцедуры +// Конец СтандартныеПодсистемы.АдресныйКлассификатор + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ @@ -370,13 +404,6 @@ КонецПроцедуры -&НаКлиенте -Процедура КлассификаторВыполнить() - - УправлениеКонтактнойИнформациейКлассификаторыКлиент.ЗагрузитьАдресныйКлассификатор(); - -КонецПроцедуры - &НаКлиенте Процедура КомандаОчиститьВыполнить() @@ -402,6 +429,15 @@ КонецПроцедуры +// СтандартныеПодсистемы.АдресныйКлассификатор + +&НаКлиенте +Процедура КлассификаторВыполнить() + + УправлениеКонтактнойИнформациейКлассификаторыКлиент.ЗагрузитьАдресныйКлассификатор(); + +КонецПроцедуры + &НаКлиенте Процедура ПроверитьКорректностьЗаполнения(Команда) @@ -433,6 +469,8 @@ КонецПроцедуры +// Конец СтандартныеПодсистемы.АдресныйКлассификатор + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -466,25 +504,16 @@ Представление = ""; - СтурктураАдреса = Новый Структура; - СтурктураАдреса.Вставить("Страна", ?(Страна <> СтранаРоссия, Страна, Неопределено)); - СтурктураАдреса.Вставить("НаименованиеСтраны", ?(Страна <> СтранаРоссия, НаименованиеСтраны, "")); - СтурктураАдреса.Вставить("Индекс", Индекс); - СтурктураАдреса.Вставить("Регион", Регион); - СтурктураАдреса.Вставить("Район", Район); - СтурктураАдреса.Вставить("Город", Город); - СтурктураАдреса.Вставить("НаселенныйПункт", НаселенныйПункт); - СтурктураАдреса.Вставить("Улица", Улица); - СтурктураАдреса.Вставить("Дом", Дом); - СтурктураАдреса.Вставить("ТипДома", ТипДома); - СтурктураАдреса.Вставить("Корпус", Корпус); - СтурктураАдреса.Вставить("ТипКорпуса", ТипКорпуса); - СтурктураАдреса.Вставить("Квартира", Квартира); - СтурктураАдреса.Вставить("ТипКвартиры", ТипКвартиры); - СтурктураАдреса.Вставить("НаименованиеВида", НаименованиеВида); - СтурктураАдреса.Вставить("Представление", Представление); + СтруктураАдреса = ПолучитьСтруктуруАдреса(); + СтруктураАдреса.Вставить("Страна", ?(Страна <> СтранаРоссия, Страна, Неопределено)); + СтруктураАдреса.Вставить("НаименованиеСтраны", ?(Страна <> СтранаРоссия, НаименованиеСтраны, "")); + СтруктураАдреса.Вставить("ТипДома", ТипДома); + СтруктураАдреса.Вставить("ТипКорпуса", ТипКорпуса); + СтруктураАдреса.Вставить("ТипКвартиры", ТипКвартиры); + СтруктураАдреса.Вставить("НаименованиеВида", НаименованиеВида); + СтруктураАдреса.Вставить("Представление", Представление); - ПредставлениеСВидом = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеАдреса(СтурктураАдреса + ПредставлениеСВидом = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеАдреса(СтруктураАдреса , Представление, НаименованиеВида); КонецПроцедуры @@ -496,7 +525,12 @@ НаименованиеВида = Строка(Параметры.Вид); Для Каждого ЭлементАдреса Из Параметры.ЗначенияПолей Цикл - ЭтаФорма[ЭлементАдреса.Представление] = ЭлементАдреса.Значение; + // Для Страны - отдельная обработка, т.к. в отличие от других полей это ссылочный тип + Если ЭлементАдреса.Представление = "Страна" Тогда + Страна = Справочники.СтраныМира.НайтиПоНаименованию(ЭлементАдреса.Значение); + Иначе + ЭтаФорма[ЭлементАдреса.Представление] = ЭлементАдреса.Значение; + КонецЕсли; КонецЦикла; КонецПроцедуры @@ -546,7 +580,6 @@ КонецФункции &НаКлиенте - Процедура ПроверитьТипыПолей() ТипДома = ?(ЗначениеЗаполнено(ТипДома), ТипДома, Элементы.ТипДома.СписокВыбора[0].Значение); @@ -577,8 +610,8 @@ КонецПроцедуры -&НаСервере -Процедура НайтиСтрануПоКодуИлиНаименованию() +&НаСервереБезКонтекста +Процедура НайтиСтрануПоКодуИлиНаименованию(КодСтраны, НаименованиеСтраны) Запрос = Новый Запрос; Запрос.УстановитьПараметр("КодСтраны", КодСтраны); @@ -630,73 +663,109 @@ КонецПроцедуры &НаКлиенте -Процедура ЗагрузитьРегион() +Функция ПолучитьСтруктуруАдреса() - Если ПустаяСтрока(Регион) Тогда - Возврат; + СтруктураАдреса = Новый Структура(); + СтруктураАдреса.Вставить("Индекс", Индекс); + СтруктураАдреса.Вставить("Регион", Регион); + СтруктураАдреса.Вставить("Район", Район); + СтруктураАдреса.Вставить("Город", Город); + СтруктураАдреса.Вставить("НаселенныйПункт", НаселенныйПункт); + СтруктураАдреса.Вставить("Улица", Улица); + СтруктураАдреса.Вставить("Дом", Дом); + СтруктураАдреса.Вставить("Корпус", Корпус); + СтруктураАдреса.Вставить("Квартира", Квартира); + Возврат СтруктураАдреса; + +КонецФункции + +&НаКлиенте +Процедура ЗаписатьСтруктуруАдреса(СтруктураАдреса) + + Если Индекс <> СтруктураАдреса.Индекс Тогда + Индекс = СтруктураАдреса.Индекс; КонецЕсли; - - СтруктураЗагруженных = ЗагруженныеПоляПоРегиону(); - - Если Не СтруктураЗагруженных.Регион - И (Пользователи.ЭтоПолноправныйПользовательИБ() - ИЛИ УправлениеДоступом.ЕстьРоль("ДобавлениеИзменениеБазовойНСИ")) Тогда - - // Предлагаем загрузить регион из классификатора адресов (КЛАДР) - ВопросПроЗагрузкуРегиона = НСтр("ru='По региону ""%Регион%"" не загружен адресный классификатор (КЛАДР).%ПереводСтроки%Загрузить?'"); - ВопросПроЗагрузкуРегиона = СтрЗаменить(ВопросПроЗагрузкуРегиона, "%Регион%", Регион); - ВопросПроЗагрузкуРегиона = СтрЗаменить(ВопросПроЗагрузкуРегиона, "%ПереводСтроки%", Символы.ПС); - СписокКнопок = Новый СписокЗначений; - СписокКнопок.Добавить("Загрузить"); - СписокКнопок.Добавить("Отмена"); - Ответ = Вопрос(ВопросПроЗагрузкуРегиона, СписокКнопок); - Если Ответ = "Загрузить" Тогда - ПодготовкаКЗагрузкеАдресногоКлассификатораРегиона(Регион); - УправлениеКонтактнойИнформациейКлассификаторыКлиент.ЗагрузитьАдресныйКлассификатор(); - КонецЕсли; - + Если Регион <> СтруктураАдреса.Регион Тогда + Регион = СтруктураАдреса.Регион; + КонецЕсли; + Если Район <> СтруктураАдреса.Район Тогда + Район = СтруктураАдреса.Район; + КонецЕсли; + Если Город <> СтруктураАдреса.Город Тогда + Город = СтруктураАдреса.Город; + КонецЕсли; + Если НаселенныйПункт <> СтруктураАдреса.НаселенныйПункт Тогда + НаселенныйПункт = СтруктураАдреса.НаселенныйПункт; + КонецЕсли; + Если Улица <> СтруктураАдреса.Улица Тогда + Улица = СтруктураАдреса.Улица; + КонецЕсли; + Если Дом <> СтруктураАдреса.Дом Тогда + Дом = СтруктураАдреса.Дом; + КонецЕсли; + Если Корпус <> СтруктураАдреса.Корпус Тогда + Корпус = СтруктураАдреса.Корпус; + КонецЕсли; + Если Квартира <> СтруктураАдреса.Квартира Тогда + Квартира = СтруктураАдреса.Квартира; КонецЕсли; КонецПроцедуры &НаСервере -Процедура ИсправитьПоля(Уровень) +Процедура ЗаписатьСтруктуруАдресаНаСервере(СтруктураАдреса) - Если Не УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(Регион) Тогда - Возврат; + Если Индекс <> СтруктураАдреса.Индекс Тогда + Индекс = СтруктураАдреса.Индекс; КонецЕсли; - - СтруктураПроверки = УправлениеКонтактнойИнформациейКлассификаторы.ПроверитьСоответствиеАдресаКЛАДРу("" - , Регион, Район, Город, НаселенныйПункт, Улица, Дом, Корпус); - - // Очищаем не подходящие поля - Если СтруктураПроверки.ЕстьОшибки Тогда - - УправлениеКонтактнойИнформациейКлассификаторы.ОчиститьПотомковПоУровнюАдресногоЭлемента(Регион, Район - , Город, НаселенныйПункт, Улица, Дом, Корпус, Квартира, Уровень); - - КонецЕсли; - - // Заполняем или исправляем промежуточные поля - Если Уровень > 2 И (ПустаяСтрока(Район) Или СтруктураПроверки.СтруктураОшибок.Свойство("Район")) Тогда - Район = СокрЛП(СтруктураПроверки.Район.Наименование + " " + СтруктураПроверки.Район.Сокращение); + Если Регион <> СтруктураАдреса.Регион Тогда + Регион = СтруктураАдреса.Регион; КонецЕсли; - - Если Уровень > 3 И (ПустаяСтрока(Город) Или СтруктураПроверки.СтруктураОшибок.Свойство("Город")) Тогда - Город = СокрЛП(СтруктураПроверки.Город.Наименование + " " + СтруктураПроверки.Город.Сокращение); + Если Район <> СтруктураАдреса.Район Тогда + Район = СтруктураАдреса.Район; КонецЕсли; - - Если Уровень > 4 И (ПустаяСтрока(НаселенныйПункт) Или СтруктураПроверки.СтруктураОшибок.Свойство("НаселенныйПункт")) Тогда - НаселенныйПункт = СокрЛП(СтруктураПроверки.НаселенныйПункт.Наименование + " " - + СтруктураПроверки.НаселенныйПункт.Сокращение); + Если Город <> СтруктураАдреса.Город Тогда + Город = СтруктураАдреса.Город; + КонецЕсли; + Если НаселенныйПункт <> СтруктураАдреса.НаселенныйПункт Тогда + НаселенныйПункт = СтруктураАдреса.НаселенныйПункт; + КонецЕсли; + Если Улица <> СтруктураАдреса.Улица Тогда + Улица = СтруктураАдреса.Улица; + КонецЕсли; + Если Дом <> СтруктураАдреса.Дом Тогда + Дом = СтруктураАдреса.Дом; + КонецЕсли; + Если Корпус <> СтруктураАдреса.Корпус Тогда + Корпус = СтруктураАдреса.Корпус; + КонецЕсли; + Если Квартира <> СтруктураАдреса.Квартира Тогда + Квартира = СтруктураАдреса.Квартира; КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура УстановитьДоступностьПолейПоРегиону() +&НаСервере +Функция ПолучитьСтруктуруАдресаНаСервере() - СтруктураЗагруженных = ЗагруженныеПоляПоРегиону(); + СтруктураАдреса = Новый Структура(); + СтруктураАдреса.Вставить("Индекс", Индекс); + СтруктураАдреса.Вставить("Регион", Регион); + СтруктураАдреса.Вставить("Район", Район); + СтруктураАдреса.Вставить("Город", Город); + СтруктураАдреса.Вставить("НаселенныйПункт", НаселенныйПункт); + СтруктураАдреса.Вставить("Улица", Улица); + СтруктураАдреса.Вставить("Дом", Дом); + СтруктураАдреса.Вставить("Корпус", Корпус); + СтруктураАдреса.Вставить("Квартира", Квартира); + Возврат СтруктураАдреса; + +КонецФункции + +// СтандартныеПодсистемы.АдресныйКлассификатор + +&НаКлиенте +Процедура УстановитьДоступностьПолейПоРегиону(СтруктураЗагруженных) Если СтруктураЗагруженных.Регион Тогда @@ -730,16 +799,145 @@ КонецПроцедуры -&НаСервере -Функция ЗагруженныеПоляПоРегиону() +&НаКлиенте +Процедура ЗагрузитьРегион(МожноЗагружатьРегион = Неопределено) + + Если МожноЗагружатьРегион = Неопределено Тогда + МожноЗагружатьРегион = ЗагружатьРегион(Регион); + КонецЕсли; + + Если Не ПустаяСтрока(Регион) И МожноЗагружатьРегион Тогда + + // Предлагаем загрузить регион из классификатора адресов (КЛАДР) + ВопросПроЗагрузкуРегиона = НСтр("ru='По региону ""%Регион%"" не загружен адресный классификатор (КЛАДР).%ПереводСтроки%Загрузить?'"); + ВопросПроЗагрузкуРегиона = СтрЗаменить(ВопросПроЗагрузкуРегиона, "%Регион%", Регион); + ВопросПроЗагрузкуРегиона = СтрЗаменить(ВопросПроЗагрузкуРегиона, "%ПереводСтроки%", Символы.ПС); + СписокКнопок = Новый СписокЗначений; + СписокКнопок.Добавить("Загрузить"); + СписокКнопок.Добавить("Отмена"); + Ответ = Вопрос(ВопросПроЗагрузкуРегиона, СписокКнопок); + Если Ответ = "Загрузить" Тогда + ПодготовкаКЗагрузкеАдресногоКлассификатораРегиона(Регион); + УправлениеКонтактнойИнформациейКлассификаторыКлиент.ЗагрузитьАдресныйКлассификатор(); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры - Если УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(Регион) Тогда +&НаСервереБезКонтекста +Функция ЗагружатьРегион(Регион) + + // Загрузить регион могут только администраторы или пользователи с правом добавления/изменения базовой НСИ + Если НЕ Пользователи.РолиДоступны("ДобавлениеИзменениеБазовойНСИ") Тогда + Возврат Ложь; + КонецЕсли; + + // Разбиваем регион на наименование и сокращение + АдресноеСокращение = ""; + НаименованиеРегиона = УправлениеКонтактнойИнформациейКлассификаторы.ПолучитьИмяИАдресноеСокращение(Регион, АдресноеСокращение); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | АдресныйКлассификатор.Код + |ИЗ + | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор + |ГДЕ + | АдресныйКлассификатор.ТипАдресногоЭлемента = 1 + | И АдресныйКлассификатор.Наименование = &НаименованиеРегиона"; + Запрос.УстановитьПараметр("НаименованиеРегиона", НаименованиеРегиона); + + Если Запрос.Выполнить().Пустой() Тогда + Возврат Ложь; // Загружаются только регионы, которые есть в списке регионов. + Иначе + РегионЗагружен = УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(Регион); + Возврат Не РегионЗагружен; // Загружаем регион, если он не загружен. + КонецЕсли; + +КонецФункции + +&НаСервереБезКонтекста +Функция ИсправитьПоля(СтруктураАдреса, Уровень) + + // Получаем поля из структуры адреса + Индекс = СтруктураАдреса.Индекс; + Регион = СтруктураАдреса.Регион; + Район = СтруктураАдреса.Район; + Город = СтруктураАдреса.Город; + НаселенныйПункт = СтруктураАдреса.НаселенныйПункт; + Улица = СтруктураАдреса.Улица; + Дом = СтруктураАдреса.Дом; + Корпус = СтруктураАдреса.Корпус; + Квартира = СтруктураАдреса.Квартира; + + Если Не УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(Регион) Тогда + СтруктураПолей = Новый Структура("СтруктураОшибок,СтруктураАдреса", Новый Структура, СтруктураАдреса); + Возврат СтруктураПолей; + КонецЕсли; + + СтруктураПроверки = УправлениеКонтактнойИнформациейКлассификаторы.ПроверитьСоответствиеАдресаКЛАДРу("" + , Регион, Район, Город, НаселенныйПункт, Улица, Дом, Корпус); + + // Очищаем не подходящие поля + Если СтруктураПроверки.ЕстьОшибки Тогда + + УправлениеКонтактнойИнформациейКлассификаторы.ОчиститьПотомковПоУровнюАдресногоЭлемента(Регион, Район + , Город, НаселенныйПункт, Улица, Дом, Корпус, Квартира, Уровень); + + КонецЕсли; + + // Заполняем или исправляем промежуточные поля + Если Уровень > 2 И (ПустаяСтрока(Район) Или СтруктураПроверки.СтруктураОшибок.Свойство("Район")) Тогда + Район = СокрЛП(СтруктураПроверки.Район.Наименование + " " + СтруктураПроверки.Район.Сокращение); + КонецЕсли; + + Если Уровень > 3 И (ПустаяСтрока(Город) Или СтруктураПроверки.СтруктураОшибок.Свойство("Город")) Тогда + Город = СокрЛП(СтруктураПроверки.Город.Наименование + " " + СтруктураПроверки.Город.Сокращение); + КонецЕсли; + + Если Уровень > 4 И (ПустаяСтрока(НаселенныйПункт) Или СтруктураПроверки.СтруктураОшибок.Свойство("НаселенныйПункт")) Тогда + НаселенныйПункт = СокрЛП(СтруктураПроверки.НаселенныйПункт.Наименование + " " + + СтруктураПроверки.НаселенныйПункт.Сокращение); + КонецЕсли; + + // Исправляем индекс + НовыйИндекс = УправлениеКонтактнойИнформациейКлассификаторы.ПолучитьИндекс(Регион + , Район, Город, НаселенныйПункт, Улица, Дом, Корпус); + + Если Не ПустаяСтрока(НовыйИндекс) Тогда + Индекс = НовыйИндекс; + КонецЕсли; + + // Обновляем структуру адреса + СтруктураАдреса.Индекс = Индекс; + СтруктураАдреса.Регион = Регион; + СтруктураАдреса.Район = Район; + СтруктураАдреса.Город = Город; + СтруктураАдреса.НаселенныйПункт = НаселенныйПункт; + СтруктураАдреса.Улица = Улица; + СтруктураАдреса.Дом = Дом; + СтруктураАдреса.Корпус = Корпус; + СтруктураАдреса.Квартира = Квартира; + + // Проверяем ещё раз и возвращаем структуру ошибок + СтруктураПроверки = УправлениеКонтактнойИнформациейКлассификаторы.ПроверитьСоответствиеАдресаКЛАДРу("" + , Регион, Район, Город, НаселенныйПункт, Улица, Дом, Корпус); + + СтруктураПроверки.Вставить("СтруктураАдреса", СтруктураАдреса); + + Возврат СтруктураПроверки; + +КонецФункции + +&НаСервереБезКонтекста +Функция ЗагруженныеПоляПоРегиону(СтруктураАдреса) + + Если УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(СтруктураАдреса.Регион) Тогда + + СтруктураЗагруженных = УправлениеКонтактнойИнформациейКлассификаторы.СтруктураЗагруженныхЭлементовАдреса( + СтруктураАдреса.Регион, СтруктураАдреса.Район, СтруктураАдреса.Город, СтруктураАдреса.НаселенныйПункт, СтруктураАдреса.Улица); - СтруктураЗагруженных = Новый Структура("Регион,Район,Город,НаселенныйПункт,Улица", Истина - , УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(Регион, , , , , 2) - , УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(Регион, Район, , , , 3) - , УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(Регион, Район, Город, , , 4) - , УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(Регион, Район, Город, НаселенныйПункт, , 5)); Возврат СтруктураЗагруженных; Иначе @@ -750,24 +948,6 @@ КонецФункции -// Процедура устанавливает возможность редактирования текста в поле "Город". -// -// Если "Регион" - Москва, тогда нельзя редактировать текст в поле "Город". -// -&НаКлиенте -Процедура УстановитьВозможностьРедактированияТекстаПоляГород() - - РегионСтрока = Нрег(Регион); - МассивРегион = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(РегионСтрока, " "); - - Если МассивРегион.Найти("москва") <> Неопределено Тогда - Элементы.Город.РедактированиеТекста = Ложь; - Иначе - Элементы.Город.РедактированиеТекста = Истина; - КонецЕсли; - -КонецПроцедуры - &НаСервереБезКонтекста Процедура ПодготовкаКЗагрузкеАдресногоКлассификатораРегиона(Регион) @@ -779,3 +959,39 @@ , МассивЗагружаемыхАО); КонецПроцедуры + +&НаСервереБезКонтекста +Функция РезультатАвтоПодбора(Текст, СтруктураАдреса, Уровень) + + ЭлементЗагружен = УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(СтруктураАдреса.Регион + , СтруктураАдреса.Район, СтруктураАдреса.Город, СтруктураАдреса.НаселенныйПункт, СтруктураАдреса.Улица, Уровень); + + Если ЭлементЗагружен ИЛИ Уровень = 1 Тогда + Результат = УправлениеКонтактнойИнформациейКлассификаторы.АвтоПодборТекстВАдресномЭлементе(Текст + , ?(Уровень > 1, СтруктураАдреса.Регион, ""), ?(Уровень > 2, СтруктураАдреса.Район, "") + , ?(Уровень > 3, СтруктураАдреса.Город, ""), ?(Уровень > 4, СтруктураАдреса.НаселенныйПункт, ""), Уровень); + Иначе + Результат = Неопределено; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаСервереБезКонтекста +Функция ОбработатьПолеНаСервере(СтруктураАдреса, Уровень) + + СтруктураПолей = ИсправитьПоля(СтруктураАдреса, Уровень); + СтруктураАдреса = СтруктураПолей.СтруктураАдреса; + СтруктураОшибок = СтруктураПолей.СтруктураОшибок; + СтруктураЗагруженных = ЗагруженныеПоляПоРегиону(СтруктураАдреса); + МожноЗагружатьРегион = ЗагружатьРегион(СтруктураАдреса.Регион); + + СтруктураРезультата = Новый Структура("СтруктураОшибок,СтруктураЗагруженных,МожноЗагружатьРегион" + , СтруктураОшибок, СтруктураЗагруженных, МожноЗагружатьРегион); + + Возврат СтруктураРезультата; + +КонецФункции + +// Конец СтандартныеПодсистемы.АдресныйКлассификатор diff --git a/SSL/src/CommonForms/ВводТелефона/Module.bsl b/SSL/src/CommonForms/ВводТелефона/Module.bsl index 9b9464d51..9a7ab62fc 100644 --- a/SSL/src/CommonForms/ВводТелефона/Module.bsl +++ b/SSL/src/CommonForms/ВводТелефона/Module.bsl @@ -1,9 +1,13 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + ПрочитатьЗначенияПараметров(); ПредставлениеСВидом = НаименованиеВида + ": " + Представление; @@ -21,22 +25,13 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - Если Модифицированность И Не БылиНажатыКнопкиЗакрытия Тогда - - ТекстВопроса = НСтр("ru = 'Даные были изменены. Отказаться от изменений?'"); - - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ОКОтмена); - - Если Ответ = КодВозвратаДиалога.Отмена Тогда - Отказ = Истина; - КонецЕсли; - - КонецЕсли; + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, Модифицированность, БылиНажатыКнопкиЗакрытия); КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ПолеПриИзменении(Элемент) @@ -66,8 +61,9 @@ КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ПрочитатьЗначенияПараметров() diff --git a/SSL/src/CommonForms/ВключениеЖурналаРегистрации/Module.bsl b/SSL/src/CommonForms/ВключениеЖурналаРегистрации/Module.bsl index e3e6a0b22..d65f66c29 100644 --- a/SSL/src/CommonForms/ВключениеЖурналаРегистрации/Module.bsl +++ b/SSL/src/CommonForms/ВключениеЖурналаРегистрации/Module.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -10,6 +13,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ПодключитьОбработчикОжидания("ОбновитьКоличествоАктивныхПользователей", 10); +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ОткрытьФормуАктивныхПользователей(Команда) СтандартныеПодсистемыКлиентПереопределяемый.ОткрытьСписокАктивныхПользователей(); @@ -22,10 +34,9 @@ ОбщегоНазначенияКлиент.ПроверитьВключениеЖурналаРегистрации(СписокПроверок, Ложь); КонецПроцедуры -&НаКлиенте -Процедура ПриОткрытии(Отказ) - ПодключитьОбработчикОжидания("ОбновитьКоличествоАктивныхПользователей", 10); -КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура ОбновитьКоличествоАктивныхПользователей() diff --git a/SSL/src/CommonForms/Вопрос/Form.form b/SSL/src/CommonForms/Вопрос/Form.form index c5da09b70..18e382dd4 100644 --- a/SSL/src/CommonForms/Вопрос/Form.form +++ b/SSL/src/CommonForms/Вопрос/Form.form @@ -33,7 +33,7 @@ <autoMaxHeight>true</autoMaxHeight> <extInfo xsi:type="form:PictureDecorationExtInfo"> <picture xsi:type="core:PictureRef"> - <picture>CommonPicture.Предупреждение32</picture> + <picture>CommonPicture.Вопрос32</picture> </picture> </extInfo> </items> diff --git a/SSL/src/CommonForms/Вопрос/Module.bsl b/SSL/src/CommonForms/Вопрос/Module.bsl index c6f97fae4..32ffbfdf5 100644 --- a/SSL/src/CommonForms/Вопрос/Module.bsl +++ b/SSL/src/CommonForms/Вопрос/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -45,8 +45,9 @@ КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура Подключаемый_ОбработчикКоманды(Команда) @@ -57,8 +58,9 @@ КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Добавляет команды и соответствующие им кнопки на форму. // diff --git a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Module.bsl b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Module.bsl index 7ba252628..5159c7f5a 100644 --- a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Module.bsl +++ b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Module.bsl @@ -1,3 +1,25 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если Параметры.Свойство("Сообщение") Тогда + Если Параметры.Сообщение <> Неопределено Тогда + Элементы.ДекорацияПояснение.Заголовок = Параметры.Сообщение + Символы.ПС + НСтр("ru = ' Установить и подключить?'"); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура НеУстанавливать(Команда) @@ -27,14 +49,3 @@ Процедура ЗакрытьФорму(Команда) Закрыть(Истина); // предлагать позже - в другом сеансе КонецПроцедуры - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("Сообщение") Тогда - Если Параметры.Сообщение <> Неопределено Тогда - Элементы.ДекорацияПояснение.Заголовок = Параметры.Сообщение + Символы.ПС + НСтр("ru = ' Установить и подключить?'"); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры diff --git a/SSL/src/CommonForms/ВсеОтчеты/Form.form b/SSL/src/CommonForms/ВсеОтчеты/Form.form index af3eca68a..897375944 100644 --- a/SSL/src/CommonForms/ВсеОтчеты/Form.form +++ b/SSL/src/CommonForms/ВсеОтчеты/Form.form @@ -11,7 +11,7 @@ <name>ГруппаДерево</name> <id>28</id> <items xsi:type="form:Table"> - <name>ОтображениеВариантов</name> + <name>ДеревоНастройкиВидимостиВариантов</name> <id>3</id> <visible>true</visible> <enabled>true</enabled> @@ -191,23 +191,23 @@ </items> <commandBarLocation>Top</commandBarLocation> <autoCommandBar> - <name>ОтображениеВариантовКоманднаяПанель</name> + <name>ДеревоНастройкиВидимостиВариантовКоманднаяПанель</name> <id>5</id> <horizontalAlign>Left</horizontalAlign> </autoCommandBar> <handlers> <event>Selection</event> - <name>ОтображениеВариантовВыбор</name> + <name>ДеревоНастройкиВидимостиВариантовВыбор</name> </handlers> <handlers> <event>OnActivateRow</event> - <name>ОтображениеВариантовПриАктивизацииСтроки</name> + <name>ДеревоНастройкиВидимостиВариантовПриАктивизацииСтроки</name> </handlers> <searchStringAddition> - <name>ОтображениеВариантовСтрокаПоиска</name> + <name>ДеревоНастройкиВидимостиВариантовСтрокаПоиска</name> <id>76</id> <extendedTooltip> - <name>ОтображениеВариантовСтрокаПоискаРасширеннаяПодсказка</name> + <name>ДеревоНастройкиВидимостиВариантовСтрокаПоискаРасширеннаяПодсказка</name> <id>78</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -217,20 +217,20 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ОтображениеВариантовСтрокаПоискаКонтекстноеМеню</name> + <name>ДеревоНастройкиВидимостиВариантовСтрокаПоискаКонтекстноеМеню</name> <id>77</id> <autoFill>true</autoFill> </contextMenu> - <source>ОтображениеВариантов</source> + <source>ДеревоНастройкиВидимостиВариантов</source> <extInfo xsi:type="form:SearchStringAdditionExtInfo"> <autoMaxWidth>true</autoMaxWidth> </extInfo> </searchStringAddition> <viewStatusAddition> - <name>ОтображениеВариантовСостояниеПросмотра</name> + <name>ДеревоНастройкиВидимостиВариантовСостояниеПросмотра</name> <id>79</id> <extendedTooltip> - <name>ОтображениеВариантовСостояниеПросмотраРасширеннаяПодсказка</name> + <name>ДеревоНастройкиВидимостиВариантовСостояниеПросмотраРасширеннаяПодсказка</name> <id>81</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -240,21 +240,21 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ОтображениеВариантовСостояниеПросмотраКонтекстноеМеню</name> + <name>ДеревоНастройкиВидимостиВариантовСостояниеПросмотраКонтекстноеМеню</name> <id>80</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> - <source>ОтображениеВариантов</source> + <source>ДеревоНастройкиВидимостиВариантов</source> <extInfo xsi:type="form:ViewStatusAdditionExtInfo"> <autoMaxWidth>true</autoMaxWidth> </extInfo> </viewStatusAddition> <searchControlAddition> - <name>ОтображениеВариантовУправлениеПоиском</name> + <name>ДеревоНастройкиВидимостиВариантовУправлениеПоиском</name> <id>82</id> <extendedTooltip> - <name>ОтображениеВариантовУправлениеПоискомРасширеннаяПодсказка</name> + <name>ДеревоНастройкиВидимостиВариантовУправлениеПоискомРасширеннаяПодсказка</name> <id>84</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -264,18 +264,18 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ОтображениеВариантовУправлениеПоискомКонтекстноеМеню</name> + <name>ДеревоНастройкиВидимостиВариантовУправлениеПоискомКонтекстноеМеню</name> <id>83</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> - <source>ОтображениеВариантов</source> + <source>ДеревоНастройкиВидимостиВариантов</source> <extInfo xsi:type="form:SearchControlAdditionExtInfo"> <autoMaxWidth>true</autoMaxWidth> </extInfo> </searchControlAddition> <extendedTooltip> - <name>ОтображениеВариантовРасширеннаяПодсказка</name> + <name>ДеревоНастройкиВидимостиВариантовРасширеннаяПодсказка</name> <id>75</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -285,7 +285,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ОтображениеВариантовКонтекстноеМеню</name> + <name>ДеревоНастройкиВидимостиВариантовКонтекстноеМеню</name> <id>4</id> <items xsi:type="form:Button"> <name>ФормаОткрыть</name> @@ -418,7 +418,7 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Items.ОтображениеВариантов.CurrentData.Описание</segments> + <segments>Items.ДеревоНастройкиВидимостиВариантов.CurrentData.Описание</segments> </dataPath> <titleLocation>None</titleLocation> <extendedTooltip> @@ -515,7 +515,7 @@ <name>ГруппаСписок</name> <id>29</id> <items xsi:type="form:Table"> - <name>ОтображениеВариантовСписок</name> + <name>СписокНастройкиВидимостиВариантов</name> <id>30</id> <visible>true</visible> <enabled>true</enabled> @@ -693,23 +693,23 @@ </items> <commandBarLocation>Top</commandBarLocation> <autoCommandBar> - <name>ОтображениеВариантовСписокКоманднаяПанель</name> + <name>СписокНастройкиВидимостиВариантовКоманднаяПанель</name> <id>32</id> <horizontalAlign>Left</horizontalAlign> </autoCommandBar> <handlers> <event>Selection</event> - <name>ОтображениеВариантовВыбор</name> + <name>СписокНастройкиВидимостиВариантовВыбор</name> </handlers> <handlers> <event>OnActivateRow</event> - <name>ОтображениеВариантовСписокПриАктивизацииСтроки</name> + <name>СписокНастройкиВидимостиВариантовПриАктивизацииСтроки</name> </handlers> <searchStringAddition> - <name>ОтображениеВариантовСписокСтрокаПоиска</name> + <name>СписокНастройкиВидимостиВариантовСтрокаПоиска</name> <id>108</id> <extendedTooltip> - <name>ОтображениеВариантовСписокСтрокаПоискаРасширеннаяПодсказка</name> + <name>СписокНастройкиВидимостиВариантовСтрокаПоискаРасширеннаяПодсказка</name> <id>110</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -719,20 +719,20 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ОтображениеВариантовСписокСтрокаПоискаКонтекстноеМеню</name> + <name>СписокНастройкиВидимостиВариантовСтрокаПоискаКонтекстноеМеню</name> <id>109</id> <autoFill>true</autoFill> </contextMenu> - <source>ОтображениеВариантовСписок</source> + <source>СписокНастройкиВидимостиВариантов</source> <extInfo xsi:type="form:SearchStringAdditionExtInfo"> <autoMaxWidth>true</autoMaxWidth> </extInfo> </searchStringAddition> <viewStatusAddition> - <name>ОтображениеВариантовСписокСостояниеПросмотра</name> + <name>СписокНастройкиВидимостиВариантовСостояниеПросмотра</name> <id>111</id> <extendedTooltip> - <name>ОтображениеВариантовСписокСостояниеПросмотраРасширеннаяПодсказка</name> + <name>СписокНастройкиВидимостиВариантовСостояниеПросмотраРасширеннаяПодсказка</name> <id>113</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -742,21 +742,21 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ОтображениеВариантовСписокСостояниеПросмотраКонтекстноеМеню</name> + <name>СписокНастройкиВидимостиВариантовСостояниеПросмотраКонтекстноеМеню</name> <id>112</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> - <source>ОтображениеВариантовСписок</source> + <source>СписокНастройкиВидимостиВариантов</source> <extInfo xsi:type="form:ViewStatusAdditionExtInfo"> <autoMaxWidth>true</autoMaxWidth> </extInfo> </viewStatusAddition> <searchControlAddition> - <name>ОтображениеВариантовСписокУправлениеПоиском</name> + <name>СписокНастройкиВидимостиВариантовУправлениеПоиском</name> <id>114</id> <extendedTooltip> - <name>ОтображениеВариантовСписокУправлениеПоискомРасширеннаяПодсказка</name> + <name>СписокНастройкиВидимостиВариантовУправлениеПоискомРасширеннаяПодсказка</name> <id>116</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -766,18 +766,18 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ОтображениеВариантовСписокУправлениеПоискомКонтекстноеМеню</name> + <name>СписокНастройкиВидимостиВариантовУправлениеПоискомКонтекстноеМеню</name> <id>115</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> - <source>ОтображениеВариантовСписок</source> + <source>СписокНастройкиВидимостиВариантов</source> <extInfo xsi:type="form:SearchControlAdditionExtInfo"> <autoMaxWidth>true</autoMaxWidth> </extInfo> </searchControlAddition> <extendedTooltip> - <name>ОтображениеВариантовСписокРасширеннаяПодсказка</name> + <name>СписокНастройкиВидимостиВариантовРасширеннаяПодсказка</name> <id>107</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -787,7 +787,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ОтображениеВариантовСписокКонтекстноеМеню</name> + <name>СписокНастройкиВидимостиВариантовКонтекстноеМеню</name> <id>31</id> <items xsi:type="form:Button"> <name>ФормаОткрытьСписок</name> @@ -922,7 +922,7 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Items.ОтображениеВариантовСписок.CurrentData.Описание</segments> + <segments>Items.СписокНастройкиВидимостиВариантов.CurrentData.Описание</segments> </dataPath> <titleLocation>None</titleLocation> <extendedTooltip> @@ -1092,7 +1092,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Item.ОтображениеВариантовСписок.StandardCommand.Find</commandName> + <commandName>Form.Item.СписокНастройкиВидимостиВариантов.StandardCommand.Find</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> @@ -1118,7 +1118,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Item.ОтображениеВариантовСписок.StandardCommand.CancelSearch</commandName> + <commandName>Form.Item.СписокНастройкиВидимостиВариантов.StandardCommand.CancelSearch</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> diff --git a/SSL/src/CommonForms/ВсеОтчеты/Module.bsl b/SSL/src/CommonForms/ВсеОтчеты/Module.bsl index 2159dd314..ce9b6f751 100644 --- a/SSL/src/CommonForms/ВсеОтчеты/Module.bsl +++ b/SSL/src/CommonForms/ВсеОтчеты/Module.bsl @@ -85,7 +85,7 @@ | И (ИсключенныеПользователи.Пользователь = Пользователь)"; Запрос.Текст = ТЗ; - Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь); + Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); Запрос.УстановитьПараметр("Ключи", ТаблицаВариантов.ВыгрузитьКолонку("Ключ")); УстановитьПривилегированныйРежим(истина); ТаблицаПользователей = Запрос.Выполнить().Выгрузить(); @@ -218,7 +218,7 @@ Для каждого СтрокаВарианта из ТаблицаВариантов Цикл БыстрыйДоступ = СтрокаВарианта.БыстрыйДоступ; - СтрокиПользователи = ТаблицаПользователей.НайтиСтроки(Новый Структура("Ключ, Пользователь", СтрокаВарианта.Ключ, ПараметрыСеанса.ТекущийПользователь)); + СтрокиПользователи = ТаблицаПользователей.НайтиСтроки(Новый Структура("Ключ, Пользователь", СтрокаВарианта.Ключ, Пользователи.ТекущийПользователь())); Для каждого СтрокаПользователи из СтрокиПользователи Цикл БыстрыйДоступ = СтрокаПользователи.БыстрыйДоступ; КонецЦикла; @@ -365,12 +365,48 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + СписокКлючейВарианта = Новый СписокЗначений; + СписокЭлементовУправления = Новый СписокЗначений; + + Для каждого СтрокаГруппировки из ДеревоНастройкиВидимостиВариантов.ПолучитьЭлементы() Цикл + Если СтрокаГруппировки.Ключ <> "" Тогда + КлючОбъекта = СтрокаГруппировки.Ключ; + ПозицияВарианта = Найти(КлючОбъекта, "\"); + ИмяОтчета = Лев(КлючОбъекта, ПозицияВарианта-1); + КлючВарианта = Прав(КлючОбъекта, СтрДлина(КлючОбъекта)-ПозицияВарианта); + СписокКлючейВарианта.Добавить(КлючОбъекта, , СтрокаГруппировки.Использование); + СписокЭлементовУправления.Добавить(СтрокаГруппировки.НазваниеЭлемента, , СтрокаГруппировки.Использование); + Иначе + Для каждого ЭлементЗначение из СтрокаГруппировки.ПолучитьЭлементы() Цикл + КлючОбъекта = ЭлементЗначение.Ключ; + ПозицияВарианта = Найти(КлючОбъекта, "\"); + ИмяОтчета = Лев(КлючОбъекта, ПозицияВарианта-1); + КлючВарианта = Прав(КлючОбъекта, СтрДлина(КлючОбъекта)-ПозицияВарианта); + СписокКлючейВарианта.Добавить(КлючОбъекта, , ЭлементЗначение.Использование); + СписокЭлементовУправления.Добавить(ЭлементЗначение.НазваниеЭлемента, , ЭлементЗначение.Использование); + КонецЦикла; + КонецЕсли; + КонецЦикла; + + ОповеститьОВыборе(Новый Структура("СписокВариантов, СписокЭлементов", СписокКлючейВарианта, СписокЭлементовУправления)); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоНастройкиВидимостиВариантов &НаКлиенте -Процедура ОтображениеВариантовПриАктивизацииСтроки(Элемент) +Процедура ДеревоНастройкиВидимостиВариантовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ВыборВТаблице(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоНастройкиВидимостиВариантовПриАктивизацииСтроки(Элемент) Если Элемент.ТекущиеДанные <> Неопределено И Элемент.ТекущиеДанные.Использование Тогда Элементы.ФормаИспользовать.Пометка = Истина; @@ -400,21 +436,44 @@ Если Элемент.ТекущиеДанные <> Неопределено Тогда Ключ = Элемент.ТекущиеДанные.Ключ; - Элементы.ОтображениеВариантовСписок.ТекущаяСтрока = Элемент.ТекущиеДанные.Идентификатор; + Элементы.СписокНастройкиВидимостиВариантов.ТекущаяСтрока = Элемент.ТекущиеДанные.Идентификатор; КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокНастройкиВидимостиВариантов + +&НаКлиенте +Процедура СписокНастройкиВидимостиВариантовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ВыборВТаблице(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокНастройкиВидимостиВариантовПриАктивизацииСтроки(Элемент) + + Если Элемент.ТекущиеДанные <> Неопределено Тогда + Ключ = Элемент.ТекущиеДанные.Ключ; + Элементы.ДеревоНастройкиВидимостиВариантов.ТекущаяСтрока = Элемент.ТекущиеДанные.Идентификатор; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура Использовать(Команда) - Если Элементы.ОтображениеВариантов.ТекущиеДанные = Неопределено Тогда + Если Элементы.ДеревоНастройкиВидимостиВариантов.ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; СписокКлючейВариантов = Новый СписокЗначений; - Если Элементы.ОтображениеВариантов.ВыделенныеСтроки.Количество() > 0 Тогда - Для каждого ИндексСтроки из Элементы.ОтображениеВариантов.ВыделенныеСтроки Цикл + Если Элементы.ДеревоНастройкиВидимостиВариантов.ВыделенныеСтроки.Количество() > 0 Тогда + Для каждого ИндексСтроки из Элементы.ДеревоНастройкиВидимостиВариантов.ВыделенныеСтроки Цикл ТекущиеДанные = ДеревоНастройкиВидимостиВариантов.НайтиПоИдентификатору(ИндексСтроки); Если СписокКлючейВариантов.НайтиПоЗначению(ТекущиеДанные.Ключ) = Неопределено Тогда СписокКлючейВариантов.Добавить(ТекущиеДанные.Ключ); @@ -422,8 +481,8 @@ КонецЦикла; КонецЕсли; - Если Элементы.ОтображениеВариантовСписок.ВыделенныеСтроки.Количество() > 0 Тогда - Для каждого ИндексСтроки из Элементы.ОтображениеВариантовСписок.ВыделенныеСтроки Цикл + Если Элементы.СписокНастройкиВидимостиВариантов.ВыделенныеСтроки.Количество() > 0 Тогда + Для каждого ИндексСтроки из Элементы.СписокНастройкиВидимостиВариантов.ВыделенныеСтроки Цикл ТекущиеДанные = СписокНастройкиВидимостиВариантов.НайтиПоИдентификатору(ИндексСтроки); Если СписокКлючейВариантов.НайтиПоЗначению(ТекущиеДанные.Ключ) = Неопределено Тогда СписокКлючейВариантов.Добавить(ТекущиеДанные.Ключ); @@ -475,36 +534,14 @@ КонецПроцедуры -&НаКлиенте -Процедура УстановитьДоступностьПодчиненныхВариантов(СтрокаДерева, Использование, СписокКлючейВариантов) - - Для каждого ПодчиненнаяСтрокаДерева из СтрокаДерева.ПолучитьЭлементы() Цикл - - Если ПодчиненнаяСтрокаДерева.Ключ <> "" Тогда - Если СписокКлючейВариантов.НайтиПоЗначению(ПодчиненнаяСтрокаДерева.Ключ) <> Неопределено Тогда - ТекущиеДанные = ПодчиненнаяСтрокаДерева; - ТекущиеДанные.Использование = Использование; - Если ТекущиеДанные.Использование Тогда - ТекущиеДанные.Картинка = Закрепить; - Иначе - ТекущиеДанные.Картинка = Открепить; - КонецЕсли; - КонецЕсли; - Иначе - УстановитьДоступностьПодчиненныхВариантов(ПодчиненнаяСтрокаДерева, Использование, СписокКлючейВариантов); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - &НаКлиенте Процедура ОткрытьОтчет(Команда) - Если Элементы.ОтображениеВариантов.ТекущиеДанные = Неопределено Тогда + Если Элементы.ДеревоНастройкиВидимостиВариантов.ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; - Ключ = Элементы.ОтображениеВариантов.ТекущиеДанные.Ключ; + Ключ = Элементы.ДеревоНастройкиВидимостиВариантов.ТекущиеДанные.Ключ; Если СокрЛП(Ключ) = "" Тогда Возврат; @@ -534,39 +571,51 @@ КонецПроцедуры &НаКлиенте -Процедура ПриЗакрытии() +Процедура Разделы(Команда) - СписокКлючейВарианта = Новый СписокЗначений; - СписокЭлементовУправления = Новый СписокЗначений; + Если Элементы.ФормаРазделы.Пометка Тогда + Элементы.ФормаРазделы.Пометка = Ложь; + Элементы.ГруппаСтраницыПредставления.ТекущаяСтраница = Элементы.ГруппаСписок; + Элементы.ФормаНайти.Доступность = Истина; + Элементы.ФормаОтменитьПоиск.Доступность = Истина; + Иначе + Элементы.ФормаРазделы.Пометка = Истина; + Элементы.ГруппаСтраницыПредставления.ТекущаяСтраница = Элементы.ГруппаДерево; + Элементы.ФормаНайти.Доступность = Ложь; + Элементы.ФормаОтменитьПоиск.Доступность = Ложь; + КонецЕсли; - Для каждого СтрокаГруппировки из ДеревоНастройкиВидимостиВариантов.ПолучитьЭлементы() Цикл - Если СтрокаГруппировки.Ключ <> "" Тогда - КлючОбъекта = СтрокаГруппировки.Ключ; - ПозицияВарианта = Найти(КлючОбъекта, "\"); - ИмяОтчета = Лев(КлючОбъекта, ПозицияВарианта-1); - КлючВарианта = Прав(КлючОбъекта, СтрДлина(КлючОбъекта)-ПозицияВарианта); - СписокКлючейВарианта.Добавить(КлючОбъекта, , СтрокаГруппировки.Использование); - СписокЭлементовУправления.Добавить(СтрокаГруппировки.НазваниеЭлемента, , СтрокаГруппировки.Использование); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура УстановитьДоступностьПодчиненныхВариантов(СтрокаДерева, Использование, СписокКлючейВариантов) + + Для каждого ПодчиненнаяСтрокаДерева из СтрокаДерева.ПолучитьЭлементы() Цикл + + Если ПодчиненнаяСтрокаДерева.Ключ <> "" Тогда + Если СписокКлючейВариантов.НайтиПоЗначению(ПодчиненнаяСтрокаДерева.Ключ) <> Неопределено Тогда + ТекущиеДанные = ПодчиненнаяСтрокаДерева; + ТекущиеДанные.Использование = Использование; + Если ТекущиеДанные.Использование Тогда + ТекущиеДанные.Картинка = Закрепить; + Иначе + ТекущиеДанные.Картинка = Открепить; + КонецЕсли; + КонецЕсли; Иначе - Для каждого ЭлементЗначение из СтрокаГруппировки.ПолучитьЭлементы() Цикл - КлючОбъекта = ЭлементЗначение.Ключ; - ПозицияВарианта = Найти(КлючОбъекта, "\"); - ИмяОтчета = Лев(КлючОбъекта, ПозицияВарианта-1); - КлючВарианта = Прав(КлючОбъекта, СтрДлина(КлючОбъекта)-ПозицияВарианта); - СписокКлючейВарианта.Добавить(КлючОбъекта, , ЭлементЗначение.Использование); - СписокЭлементовУправления.Добавить(ЭлементЗначение.НазваниеЭлемента, , ЭлементЗначение.Использование); - КонецЦикла; + УстановитьДоступностьПодчиненныхВариантов(ПодчиненнаяСтрокаДерева, Использование, СписокКлючейВариантов); КонецЕсли; КонецЦикла; - ОповеститьОВыборе(Новый Структура("СписокВариантов, СписокЭлементов", СписокКлючейВарианта, СписокЭлементовУправления)); - КонецПроцедуры &НаКлиенте -Процедура ОтображениеВариантовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) +Процедура ВыборВТаблице(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - Ключ = Элементы.ОтображениеВариантов.ТекущиеДанные.Ключ; + Ключ = Элементы.ДеревоНастройкиВидимостиВариантов.ТекущиеДанные.Ключ; Если СокрЛП(Ключ) = "" Тогда Возврат; КонецЕсли; @@ -586,32 +635,3 @@ КонецЕсли; КонецПроцедуры - -&НаКлиенте -Процедура Разделы(Команда) - - Если Элементы.ФормаРазделы.Пометка Тогда - Элементы.ФормаРазделы.Пометка = Ложь; - Элементы.ГруппаСтраницыПредставления.ТекущаяСтраница = Элементы.ГруппаСписок; - Элементы.ФормаНайти.Доступность = Истина; - Элементы.ФормаОтменитьПоиск.Доступность = Истина; - Элементы.ОтображениеВариантовСписок.ОтборСтрок = Неопределено; - Иначе - Элементы.ФормаРазделы.Пометка = Истина; - Элементы.ГруппаСтраницыПредставления.ТекущаяСтраница = Элементы.ГруппаДерево; - Элементы.ФормаНайти.Доступность = Ложь; - Элементы.ФормаОтменитьПоиск.Доступность = Ложь; - Элементы.ОтображениеВариантовСписок.ОтборСтрок = Новый ФиксированнаяСтруктура; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОтображениеВариантовСписокПриАктивизацииСтроки(Элемент) - - Если Элемент.ТекущиеДанные <> Неопределено Тогда - Ключ = Элемент.ТекущиеДанные.Ключ; - Элементы.ОтображениеВариантов.ТекущаяСтрока = Элемент.ТекущиеДанные.Идентификатор; - КонецЕсли; - -КонецПроцедуры diff --git a/SSL/src/CommonForms/ВходВОбластьДанных/Form.form b/SSL/src/CommonForms/ВходВОбластьДанных/Form.form new file mode 100644 index 000000000..70f134598 --- /dev/null +++ b/SSL/src/CommonForms/ВходВОбластьДанных/Form.form @@ -0,0 +1,211 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormField"> + <name>ЗначениеРазделителя</name> + <id>1</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ЗначениеРазделителя</segments> + </dataPath> + <extendedTooltip> + <name>ЗначениеРазделителяРасширеннаяПодсказка</name> + <id>6</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ЗначениеРазделителяКонтекстноеМеню</name> + <id>2</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormGroup"> + <name>ГруппаВходВобласть</name> + <id>5</id> + <items xsi:type="form:Button"> + <name>ФормаВойтиВОбластьДанных</name> + <id>3</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаВойтиВОбластьДанныхРасширеннаяПодсказка</name> + <id>9</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.ВойтиВОбластьДанных</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>ФормаВыйтиИзОбластиДанных</name> + <id>4</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаВыйтиИзОбластиДанныхРасширеннаяПодсказка</name> + <id>10</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.ВыйтиИзОбластиДанных</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Группа вход вобласть</value> + + + ГруппаВходВобластьРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + CommandBar + + Left + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + ЗначениеРазделителя + + <key>ru</key> + <value>Значение разделителя</value> + + 1 + + Number + + 7 + true + + + + true + + + true + + + + ВойтиВОбластьДанных + + <key>ru</key> + <value>Войти в область данных</value> + + 1 + + ru + Войти в область данных + + + true + + + + ВойтиВОбластьДанных + + + Auto + Auto + + + ВыйтиИзОбластиДанных + + <key>ru</key> + <value>Выйти из области данных</value> + + 2 + + ru + Выйти из области данных + + + true + + + + ВыйтиИзОбластиДанных + + + Auto + Auto + + + + + + diff --git a/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl b/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl new file mode 100644 index 000000000..ba3d7e7bf --- /dev/null +++ b/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl @@ -0,0 +1,160 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ВойтиВОбластьДанных(Команда) + + Если ОсуществленВходВОбластьДанных() Тогда + Отказ = Ложь; + СтандартныеПодсистемыКлиент.ДействияПередЗавершениемРаботыСистемы(Отказ); + Если Отказ Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + Если НЕ УказаннаяОбластьДанныхЗаполнена(ЗначениеРазделителя) Тогда + Ответ = Вопрос(НСтр("ru = 'Выбранная область данных не заполнена, продолжить вход?'"), + РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + + Если Ответ = КодВозвратаДиалога.Нет Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + ВойтиВОбластьДанныхНаСервере(ЗначениеРазделителя); + + ОбновитьИнтерфейс(); + + Отказ = Ложь; + + СтандартныеПодсистемыКлиент.ДействияПередНачаломРаботыСистемы(Отказ); + + Если Отказ Тогда + ВыйтиИзОбластиДанныхНаСервере(); + + ОбновитьИнтерфейс(); + + Возврат; + КонецЕсли; + + СтандартныеПодсистемыКлиент.ДействияПриНачалеРаботыСистемы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыйтиИзОбластиДанных(Команда) + + Если ОсуществленВходВОбластьДанных() Тогда + Отказ = Ложь; + ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; + СтандартныеПодсистемыКлиент.ДействияПередЗавершениемРаботыСистемы(Отказ); + Если Отказ Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + ВыйтиИзОбластиДанныхНаСервере(); + + ОбновитьИнтерфейс(); + + СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервереБезКонтекста +Функция УказаннаяОбластьДанныхЗаполнена(Знач ЗначениеРазделителя) + + УстановитьПривилегированныйРежим(Истина); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); + ЭлементБлокировки.УстановитьЗначение("ОбластьДанных", ЗначениеРазделителя); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбластиДанных.Статус КАК Статус + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + |ГДЕ + | ОбластиДанных.ОбластьДанных = &ОбластьДанных"; + Запрос.УстановитьПараметр("ОбластьДанных", ЗначениеРазделителя); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Результат = Запрос.Выполнить(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если Результат.Пустой() Тогда + Возврат Ложь; + Иначе + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + Возврат Выборка.Статус = Перечисления.СтатусыОбластейДанных.Используется + КонецЕсли; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ВойтиВОбластьДанныхНаСервере(Знач ЗначениеРазделителя) + + УстановитьПривилегированныйРежим(Истина); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ЗначениеРазделителя); + + НачатьТранзакцию(); + + Попытка + КлючОбласти = РегистрыСведений.ОбластиДанных.СоздатьКлючЗаписи(Новый Структура("ОбластьДанных", ЗначениеРазделителя)); + ЗаблокироватьДанныеДляРедактирования(КлючОбласти); + + Блокировка = Новый БлокировкаДанных; + Элемент = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); + Элемент.УстановитьЗначение("ОбластьДанных", ЗначениеРазделителя); + Элемент.Режим = РежимБлокировкиДанных.Разделяемый; + Блокировка.Заблокировать(); + + МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = ЗначениеРазделителя; + МенеджерЗаписи.Прочитать(); + Если Не МенеджерЗаписи.Выбран() Тогда + МенеджерЗаписи.ОбластьДанных = ЗначениеРазделителя; + МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Используется; + МенеджерЗаписи.Записать(); + КонецЕсли; + РазблокироватьДанныеДляРедактирования(КлючОбласти); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +&НаСервере +Процедура ВыйтиИзОбластиДанныхНаСервере() + + УстановитьПривилегированныйРежим(Истина); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ОсуществленВходВОбластьДанных() + + УстановитьПривилегированныйРежим(Истина); + Возврат ОбщегоНазначения.ИспользованиеРазделителяСеанса(); + +КонецФункции diff --git a/SSL/src/CommonForms/ВходВОбластьДанных/ВходВОбластьДанных.mdo b/SSL/src/CommonForms/ВходВОбластьДанных/ВходВОбластьДанных.mdo new file mode 100644 index 000000000..f34864b41 --- /dev/null +++ b/SSL/src/CommonForms/ВходВОбластьДанных/ВходВОбластьДанных.mdo @@ -0,0 +1,11 @@ + + + ВходВОбластьДанных + + ru + Вход в область данных + + PersonalComputer + MobileDevice + true + diff --git a/SSL/src/CommonForms/ВыборДаты/Form.form b/SSL/src/CommonForms/ВыборДаты/Form.form new file mode 100644 index 000000000..5f4b347e5 --- /dev/null +++ b/SSL/src/CommonForms/ВыборДаты/Form.form @@ -0,0 +1,315 @@ + + + + ПоясняющийТекст + 6 + true + true + + true + + + ПоясняющийТекст + + None + + ПоясняющийТекстРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ПоясняющийТекстКонтекстноеМеню + 7 + true + + LabelField + Enter + true + Left + true + + true + 2 + true + + Style.ПоясняющийТекст + + + + + Календарь + 1 + true + true + + true + + + Календарь + + None + + КалендарьРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + КалендарьКонтекстноеМеню + 2 + true + + CalendarField + Enter + true + Left + true + + + Selection + КалендарьВыбор + + 34 + true + 7 + true + true + true + true + + + 1 + + 2 + 1 + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаОК + 3 + true + true + + true + + + ФормаОКРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 4 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + PictureAndText + true + true + UserCmds + Auto + + + ФормаСправка + 5 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Календарь + + <key>ru</key> + <value>Календарь</value> + + 1 + + Date + + Date + + + + true + + + true + + + + ПоясняющийТекст + + <key>ru</key> + <value>Поясняющий текст</value> + + 2 + + String + + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + Auto + Auto + + + Отмена + + <key>ru</key> + <value>Отмена</value> + + 2 + + ru + Отмена + + + true + + + + Отмена + + + Auto + Auto + + + НачальноеЗначение + + Date + + Date + + + + + ПоясняющийТекст + + String + + + + + НачалоПериодаОтображения + + Date + + Date + + + + + КонецПериодаОтображения + + Date + + Date + + + + + + + + diff --git a/SSL/src/CommonForms/ВыборДаты/Module.bsl b/SSL/src/CommonForms/ВыборДаты/Module.bsl new file mode 100644 index 000000000..9e472b3f1 --- /dev/null +++ b/SSL/src/CommonForms/ВыборДаты/Module.bsl @@ -0,0 +1,65 @@ +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + НачальноеЗначение = Параметры.НачальноеЗначение; + + Если НЕ ЗначениеЗаполнено(НачальноеЗначение) Тогда + НачальноеЗначение = ТекущаяДатаСеанса(); + КонецЕсли; + + Параметры.Свойство("НачалоПериодаОтображения", Элементы.Календарь.НачалоПериодаОтображения); + Параметры.Свойство("КонецПериодаОтображения", Элементы.Календарь.КонецПериодаОтображения); + + Календарь = НачальноеЗначение; + + Параметры.Свойство("ПоясняющийТекст", ПоясняющийТекст); + Параметры.Свойство("Заголовок", Заголовок); + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ + +&НаКлиенте +Процедура КалендарьВыбор(Элемент, ВыбраннаяДата) + + ВыбратьДату(ВыбраннаяДата); + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ОК(Команда) + + ВыделенныеДаты = Элементы.Календарь.ВыделенныеДаты; + + Если ВыделенныеДаты.Количество() = 0 Тогда + Предупреждение(НСтр("ru = 'Дата не выбрана.'")); + Возврат; + КонецЕсли; + + ВыбратьДату(ВыделенныеДаты[0]); + +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + + Закрыть(); + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ВыбратьДату(ВыбраннаяДата) + + Закрыть(ВыбраннаяДата); + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ВыборДаты/ВыборДаты.mdo b/SSL/src/CommonForms/ВыборДаты/ВыборДаты.mdo new file mode 100644 index 000000000..532c910fb --- /dev/null +++ b/SSL/src/CommonForms/ВыборДаты/ВыборДаты.mdo @@ -0,0 +1,10 @@ + + + ВыборДаты + + ru + Выбор даты + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl index 44ad8f10c..ef9f4ba15 100644 --- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl +++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl @@ -1,46 +1,5 @@ -&НаКлиенте -Процедура Выбрать(Команда) - - Если Элементы.Страницы.ТекущаяСтраница = Элементы.Пользователи Тогда - ОповеститьОВыборе(Элементы.СписокПользователи.ТекущаяСтрока); - - ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.Роли Тогда - ВыборРоли(Элементы.СписокРоли.ТекущаяСтрока); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Функция ВыборРоли(ВыбранноеЗначение) - - Если Не ОбщегоНазначения.ПолучитьЗначениеРеквизита(ВыбранноеЗначение, "ИспользуетсяСОбъектамиАдресации") Тогда - Результат = Новый Структура("РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации", ВыбранноеЗначение, Неопределено, Неопределено); - Иначе - Результат = ОткрытьФормуМодально("ОбщаяФорма.ВыборРолиИсполнителя", Новый Структура("РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации", ВыбранноеЗначение, Неопределено, Неопределено), ЭтаФорма); - КонецЕсли; - - Если ТипЗнч(Результат) = Тип("Структура") Тогда - ОповеститьОВыборе(Результат); - КонецЕсли; - -КонецФункции - -&НаКлиенте -Процедура СписокПользователиВыборЗначения(Элемент, Значение, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - ОповеститьОВыборе(Значение); - -КонецПроцедуры - -&НаКлиенте -Процедура СписокРолиВыборЗначения(Элемент, Значение, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - ОповеститьОВыборе(Значение); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -57,7 +16,8 @@ СписокРоли.Отбор, "ВнешняяРоль", Ложь); КонецЕсли; - ОбновитьЗначениеПараметраКомпоновкиДанных(СписокПользователи, "ПустойУникальныйИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + ОбновитьЗначениеПараметраКомпоновкиДанных(СписокПользователи, "ПустойУникальныйИдентификатор", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); Если Параметры.Свойство("Исполнитель") Тогда @@ -78,6 +38,63 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокРоли + +&НаКлиенте +Процедура СписокПользователиВыборЗначения(Элемент, Значение, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ОповеститьОВыборе(Значение); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокРолиВыборЗначения(Элемент, Значение, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ОповеститьОВыборе(Значение); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Выбрать(Команда) + + Если Элементы.Страницы.ТекущаяСтраница = Элементы.Пользователи Тогда + ОповеститьОВыборе(Элементы.СписокПользователи.ТекущаяСтрока); + + ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.Роли Тогда + ВыборРоли(Элементы.СписокРоли.ТекущаяСтрока); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Функция ВыборРоли(ВыбранноеЗначение) + + Если Не ОбщегоНазначения.ПолучитьЗначениеРеквизита(ВыбранноеЗначение, "ИспользуетсяСОбъектамиАдресации") Тогда + Результат = Новый Структура("РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации", + ВыбранноеЗначение, Неопределено, Неопределено); + Иначе + Результат = ОткрытьФормуМодально("ОбщаяФорма.ВыборРолиИсполнителя", + Новый Структура("РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации", + ВыбранноеЗначение, Неопределено, Неопределено), + ЭтаФорма); + КонецЕсли; + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + ОповеститьОВыборе(Результат); + КонецЕсли; + +КонецФункции + &НаКлиентеНаСервереБезКонтекста Процедура ОбновитьЗначениеПараметраКомпоновкиДанных(Знач ВладелецПараметров, Знач ИмяПараметра, Знач ЗначениеПараметра) diff --git a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl index 3e5ae4560..1f2bf485c 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl +++ b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl @@ -1,195 +1,124 @@ - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОСУЩЕСТВЛЕНИЯ ПОИСКА +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ -// Формирует список значений строк, по которым будет осуществлятся поиск по текущему варианту поиска -// -// Возвращаемое значение: -// СписокЗначений - список строк, по которым будет осуществляться поиск. -// &НаСервере -Функция ПолучитьСписокСтрокПоискаПоВарианту() - - спсСтрок = Новый СписокЗначений; +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Значения = Неопределено; - ВсеСпискиПоиска.Свойство(ВариантыПоиска, Значения); - - Если ТипЗнч(Значения) = Тип("Строка") Тогда - спсСтрок.Добавить(Значения); - ИначеЕсли ТипЗнч(Значения) = Тип("СписокЗначений") Тогда - Для Каждого Элемент Из Значения Цикл - спсСтрок.Добавить(Элемент.Значение); - КонецЦикла; - КонецЕсли; - - Возврат спсСтрок; - -КонецФункции - -// Выполняет первый поиск по всем возможным вариантам поиска согласно переданным параметрам. -// -&НаСервере -Процедура ВыполнитьПервыйПоиск() - - ВариантыПоиска = "ПоСтроке"; - Если ПустаяСтрока(Параметры.Адрес) И ПустаяСтрока(Параметры.Представление) Тогда + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - - // Попробуем поискать по email - ВариантыПоиска = "ПоEmail"; - Для Каждого Вариант Из ПолучитьСписокСтрокПоискаПоВарианту() Цикл - СтрокаПоиска = Вариант.Значение; - Если ПустаяСтрока(СтрокаПоиска) Тогда - Продолжить; - КонецЕсли; - Если НайтиПоEmail(Ложь) Тогда - Возврат; - КонецЕсли; - КонецЦикла; - // Попробуем поискать по телефону - ВариантыПоиска = "ПоТелефону"; - Для Каждого Вариант Из ПолучитьСписокСтрокПоискаПоВарианту() Цикл - СтрокаПоиска = Вариант.Значение; - Если ПустаяСтрока(СтрокаПоиска) Тогда - Продолжить; - КонецЕсли; - Если НайтиПоТелефону() Тогда - Возврат; - КонецЕсли; - КонецЦикла; - - // Если индекс ППД не включен то дальше не ищем - Если НЕ ППДВключен Тогда - ВариантыПоиска = "ПоEmail"; - Возврат; + Взаимодействия.ОбработатьНеобходимостьОтображенияГруппПользователей(ЭтаФорма); + Взаимодействия.ДобавитьСтраницыФормыПодбораКонтактов(ЭтаФорма); + + // Заполним контакты по предмету + Взаимодействия.ЗаполнитьКонтактыПоПредмету(Элементы, Параметры.Предмет, КонтактыПоПредмету, Ложь); + + // Получим информацию об индексе ППД + Взаимодействия.ОбновитьИнформациюОбАктуальностиИндексаППД(ИнформацияОбАктуальностиИндексаППД, ППДВключен, ИндексАктуален); + + // Заполним список вариантов поиска и осуществим первый поиск + ВсеСпискиПоиска = Взаимодействия.ПолучитьСписокДоступныхПоисков(ППДВключен, Параметры, Элементы, Ложь); + ВыполнитьПервыйПоиск(); + + // Если заполнен контакт, установим нужной текущую страницу и спозиционируемся на нем + Если ЗначениеЗаполнено(Параметры.Контакт) Тогда + УстановитьТекущимКонтакт(Параметры.Контакт) КонецЕсли; - - // Попробуем поискать по адресу и представлению - ВариантыПоиска = "ПоСтроке"; - Для Каждого Вариант Из ПолучитьСписокСтрокПоискаПоВарианту() Цикл - СтрокаПоиска = Вариант.Значение; - Если ПустаяСтрока(СтрокаПоиска) Тогда - Продолжить; - КонецЕсли; - НайтиПоСтроке(); - Если НайденныеКонтакты.Количество() > 0 Тогда - Возврат; - КонецЕсли; - КонецЦикла; - + КонецПроцедуры -// Осуществляет поиск контактов по доменному имени или по адресу электронной почты. -// -&НаСервере -Функция НайтиПоEmail(ПоДомену) - - Возврат Взаимодействия.НайтиПоEmail(СтрокаПоиска, ПоДомену, ЭтаФорма); - -КонецФункции - -// Осуществляет поиск контактов по телефону. -// -&НаСервере -Функция НайтиПоТелефону() +&НаКлиенте +Процедура ПриОткрытии(Отказ) - Возврат Взаимодействия.ПолучитьВсеКонтактыПоТелефону(СтрокаПоиска, ЭтаФорма); + ЗаполнитьСписокВыбораВСтрокеПоиска(Ложь); + УправлениеДоступностью(); -КонецФункции - -// Осуществляет поиск контактов по строке -// -&НаСервере -Функция НайтиПоСтроке() - - Возврат Взаимодействия.ОсуществитьПоискКонтактовПоСтроке(ЭтаФорма); - -КонецФункции - -// Осуществляет поиск контактов по началу наименования -// -&НаСервере -Функция НайтиПоНачалуНаименования() - - ТабКонтакты = Взаимодействия.ПолучитьВсеКонтактыПоНачалуНаименования(СтрокаПоиска); - - Если ТабКонтакты = Неопределено ИЛИ ТабКонтакты.Количество() = 0 Тогда - Возврат Ложь; - КонецЕсли; - - Взаимодействия.ЗаполнитьНайденныеКонтакты(ТабКонтакты, НайденныеКонтакты); - Возврат Истина; - -КонецФункции +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ -// Устанавливает текущим контакт в соответствующем динамическом списке. -// -// Параметры -// Контакт - СправочникСсылка - контакт, на котором необходимо спозиционироватся. -// -&НаСервере -Процедура УстановитьТекущимКонтакт(Контакт) - - Взаимодействия.УстановитьТекущимКонтакт(Контакт, ЭтаФорма ); +&НаКлиенте +Процедура НайденныеКонтактыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + Закрыть(Элемент.ТекущиеДанные.Ссылка); КонецПроцедуры &НаКлиенте -Процедура ЗаполнитьСписокВыбораВСтрокеПоиска(ИзменятьСтрокуПоиска) - - стрВариантыПоиска = Неопределено; - ВсеСпискиПоиска.Свойство(ВариантыПоиска, стрВариантыПоиска); +Процедура СписокСправочникаВыбор(Элемент, ВыбраннаяСтрока,Поле , СтандартнаяОбработка) - ЭтоСписок = Ложь; - Если ТипЗнч(стрВариантыПоиска) = Тип("СписокЗначений") Тогда - Количество = стрВариантыПоиска.Количество(); - Если Количество = 0 Тогда - стрВариантыПоиска = ""; - ИначеЕсли Количество = 1 Тогда - стрВариантыПоиска = стрВариантыПоиска.Получить(0).Значение; - Иначе - ЭтоСписок = Истина; - КонецЕсли; + СтандартнаяОбработка = Ложь; + + ТекущиеДанные = Элемент.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; КонецЕсли; - Если ЭтоСписок Тогда - Элементы.СтрокаПоиска.КнопкаСпискаВыбора = Истина; - Элементы.СтрокаПоиска.СписокВыбора.Очистить(); - Для Каждого ЭлементВарианта Из стрВариантыПоиска Цикл - Элементы.СтрокаПоиска.СписокВыбора.Добавить(ЭлементВарианта.Значение); - КонецЦикла; - - Если ИзменятьСтрокуПоиска Тогда - СтрокаПоиска = стрВариантыПоиска.Получить(0).Значение; + ОписаниеКонтакта = Новый Структура; + + МассивОписанийКонтакта = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); + Для Каждого ЭлементМассива Из МассивОписанийКонтакта Цикл + Если ТипЗнч(ТекущиеДанные.Ссылка) = ЭлементМассива.Тип Тогда + ОписаниеКонтакта = ЭлементМассива; + Прервать; КонецЕсли; - - ИначеЕсли ИзменятьСтрокуПоиска Тогда - Элементы.СтрокаПоиска.КнопкаСпискаВыбора = Ложь; - СтрокаПоиска = стрВариантыПоиска; + КонецЦикла; + + Если ОписаниеКонтакта.Свойство("Иерархический")И ОписаниеКонтакта.Иерархический Тогда + ЭтоГруппа = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ТекущиеДанные.Ссылка, "ЭтоГруппа"); + Иначе + ЭтоГруппа = Ложь; КонецЕсли; - + + Если Не ЭтоГруппа Тогда + Закрыть(ТекущиеДанные.Ссылка); + КонецЕсли; + КонецПроцедуры -// Управляет доступностью элементов формы &НаКлиенте -Процедура УправлениеДоступностью() - - Элементы.КомандаОбновитьИндексППД.Доступность = Не ИндексАктуален; +Процедура КонтактыПоПредметуВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Если Элемент.ТекущиеДанные <> Неопределено Тогда + Закрыть(Элемент.ТекущиеДанные.Ссылка); + КонецЕсли; + +КонецПроцедуры +&НаКлиенте +Процедура ВариантыПоискаПриИзменении(Элемент) + + ЗаполнитьСписокВыбораВСтрокеПоиска(Истина); + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -//КОМАНДЫ ФОРМЫ +&НаКлиенте +Процедура Подключаемый_СписокКонтактыПриАктивизацииСтроки(Элемент) + + ТекущиеДанные = Элемент.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + ПоследнийАктивизированныйКонтакт = ТекущиеДанные.Ссылка; + КонецЕсли; + +КонецПроцедуры -//Инициирует процесс поиска контактов. -// - &НаКлиенте +&НаКлиенте +Процедура Подключаемый_СписокВладелецПриАктивизацииСтроки(Элемент) + + ВзаимодействияКлиент.КонтактВладелецПриАктивизацииСтроки(Элемент, ЭтаФорма); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +//Инициирует процесс поиска контактов. +// +&НаКлиенте Процедура КомандаНайтиВыполнить() Если ПустаяСтрока(СтрокаПоиска) Тогда @@ -230,19 +159,19 @@ КонецПроцедуры //Выполняет позиционирование в соответсвующем динамическом списке на текущем контакте из -//списка "Найденные контакты". -// +//списка "Найденные контакты". +// &НаКлиенте Процедура НайтиВСпискеИзСпискаНайденныхВыполнить() Если Элементы.НайденныеКонтакты.ТекущиеДанные <> Неопределено Тогда УстановитьТекущимКонтакт(Элементы.НайденныеКонтакты.ТекущиеДанные.Ссылка); - КонецЕсли; + КонецЕсли; КонецПроцедуры //Выполняет позиционирование в соответсвующем динамическом списке на текущем контакте -//из списка "Контакты по предмету" . +//из списка "Контакты по предмету". // &НаКлиенте Процедура НайтиВСпискеИзСпискаПредметовВыполнить() @@ -318,117 +247,189 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - Взаимодействия.ОбработатьНеобходимостьОтображенияГруппПользователей(ЭтаФорма); - Взаимодействия.ДобавитьСтраницыФормыПодбораКонтактов(ЭтаФорма); - - // Заполним контакты по предмету - Взаимодействия.ЗаполнитьКонтактыПоПредмету(Элементы, Параметры.Предмет, КонтактыПоПредмету, Ложь); - - // Получим информацию об индексе ППД - Взаимодействия.ОбновитьИнформациюОбАктуальностиИндексаППД(ИнформацияОбАктуальностиИндексаППД, ППДВключен, ИндексАктуален); - - // Заполним список вариантов поиска и осуществим первый поиск - ВсеСпискиПоиска = Взаимодействия.ПолучитьСписокДоступныхПоисков(ППДВключен, Параметры, Элементы, Ложь); - ВыполнитьПервыйПоиск(); - - // Если заполнен контакт, установим нужной текущую страницу и спозиционируемся на нем - Если ЗначениеЗаполнено(Параметры.Контакт) Тогда - УстановитьТекущимКонтакт(Параметры.Контакт) - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - ЗаполнитьСписокВыбораВСтрокеПоиска(Ложь); - УправлениеДоступностью(); - -КонецПроцедуры +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ПРОЦЕДУРЫ И ФУНКЦИИ ОСУЩЕСТВЛЕНИЯ ПОИСКА -&НаКлиенте -Процедура НайденныеКонтактыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - Закрыть(Элемент.ТекущиеДанные.Ссылка); +// Формирует список значений строк, по которым будет осуществлятся поиск по текущему варианту поиска +// +// Возвращаемое значение: +// СписокЗначений - список строк, по которым будет осуществляться поиск. +// +&НаСервере +Функция СписокСтрокПоискаПоВарианту() -КонецПроцедуры - -&НаКлиенте -Процедура СписокСправочникаВыбор(Элемент, ВыбраннаяСтрока,Поле , СтандартнаяОбработка) + СписокСтрок = Новый СписокЗначений; - СтандартнаяОбработка = Ложь; + Значения = Неопределено; + ВсеСпискиПоиска.Свойство(ВариантыПоиска, Значения); - ТекущиеДанные = Элемент.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; + Если ТипЗнч(Значения) = Тип("Строка") Тогда + СписокСтрок.Добавить(Значения); + ИначеЕсли ТипЗнч(Значения) = Тип("СписокЗначений") Тогда + Для Каждого Элемент Из Значения Цикл + СписокСтрок.Добавить(Элемент.Значение); + КонецЦикла; КонецЕсли; - ОписаниеКонтакта = Новый Структура; + Возврат СписокСтрок; + +КонецФункции + +// Выполняет первый поиск по всем возможным вариантам поиска согласно переданным параметрам. +// +&НаСервере +Процедура ВыполнитьПервыйПоиск() - МассивОписанийКонтакта = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); - Для Каждого ЭлементМассива Из МассивОписанийКонтакта Цикл - Если ТипЗнч(ТекущиеДанные.Ссылка) = ЭлементМассива.Тип Тогда - ОписаниеКонтакта = ЭлементМассива; - Прервать; + ВариантыПоиска = "ПоСтроке"; + Если ПустаяСтрока(Параметры.Адрес) И ПустаяСтрока(Параметры.Представление) Тогда + Возврат; + КонецЕсли; + + // Попробуем поискать по email + ВариантыПоиска = "ПоEmail"; + Для Каждого Вариант Из СписокСтрокПоискаПоВарианту() Цикл + СтрокаПоиска = Вариант.Значение; + Если ПустаяСтрока(СтрокаПоиска) Тогда + Продолжить; + КонецЕсли; + Если НайтиПоEmail(Ложь) Тогда + Возврат; КонецЕсли; КонецЦикла; - Если ОписаниеКонтакта.Свойство("Иерархический")И ОписаниеКонтакта.Иерархический Тогда - ЭтоГруппа = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ТекущиеДанные.Ссылка, "ЭтоГруппа"); - Иначе - ЭтоГруппа = Ложь; + // Попробуем поискать по телефону + ВариантыПоиска = "ПоТелефону"; + Для Каждого Вариант Из СписокСтрокПоискаПоВарианту() Цикл + СтрокаПоиска = Вариант.Значение; + Если ПустаяСтрока(СтрокаПоиска) Тогда + Продолжить; + КонецЕсли; + Если НайтиПоТелефону() Тогда + Возврат; + КонецЕсли; + КонецЦикла; + + // Если индекс ППД не включен то дальше не ищем + Если НЕ ППДВключен Тогда + ВариантыПоиска = "ПоEmail"; + Возврат; КонецЕсли; + + // Попробуем поискать по адресу и представлению + ВариантыПоиска = "ПоСтроке"; + Для Каждого Вариант Из СписокСтрокПоискаПоВарианту() Цикл + СтрокаПоиска = Вариант.Значение; + Если ПустаяСтрока(СтрокаПоиска) Тогда + Продолжить; + КонецЕсли; + НайтиПоСтроке(); + Если НайденныеКонтакты.Количество() > 0 Тогда + Возврат; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +//Осуществляет поиск контактов по доменному имени или по адресу электронной почты. +// +&НаСервере +Функция НайтиПоEmail(ПоДомену) + + Возврат Взаимодействия.НайтиПоEmail(СтрокаПоиска, ПоДомену, ЭтаФорма); + +КонецФункции + +//Осуществляет поиск контактов по телефону. +// +&НаСервере +Функция НайтиПоТелефону() - Если Не ЭтоГруппа Тогда - Закрыть(ТекущиеДанные.Ссылка); + Возврат Взаимодействия.ПолучитьВсеКонтактыПоТелефону(СтрокаПоиска, ЭтаФорма); + +КонецФункции + +//Осуществляет поиск контактов по строке +// +&НаСервере +Функция НайтиПоСтроке() + + Возврат Взаимодействия.ОсуществитьПоискКонтактовПоСтроке(ЭтаФорма); + +КонецФункции + +// Осуществляет поиск контактов по началу наименования +// +&НаСервере +Функция НайтиПоНачалуНаименования() + + ТаблицаКонтактов = Взаимодействия.ПолучитьВсеКонтактыПоНачалуНаименования(СтрокаПоиска); + + Если ТаблицаКонтактов = Неопределено ИЛИ ТаблицаКонтактов.Количество() = 0 Тогда + Возврат Ложь; КонецЕсли; + Взаимодействия.ЗаполнитьНайденныеКонтакты(ТаблицаКонтактов, НайденныеКонтакты); + Возврат Истина; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ + +// Устанавливает текущим контакт в соответствующем динамическом списке. +// +// Параметры +// Контакт - СправочникСсылка - контакт, на котором необходимо спозиционироватся. +// +&НаСервере +Процедура УстановитьТекущимКонтакт(Контакт) + + Взаимодействия.УстановитьТекущимКонтакт(Контакт, ЭтаФорма ); + КонецПроцедуры &НаКлиенте -Процедура КонтактыПоПредметуВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) +Процедура ЗаполнитьСписокВыбораВСтрокеПоиска(ИзменятьСтрокуПоиска) + + СписокВариантовПоиска = Неопределено; + ВсеСпискиПоиска.Свойство(ВариантыПоиска, СписокВариантовПоиска); - СтандартнаяОбработка = Ложь; - Если Элемент.ТекущиеДанные <> Неопределено Тогда - Закрыть(Элемент.ТекущиеДанные.Ссылка); + ЭтоСписок = Ложь; + Если ТипЗнч(СписокВариантовПоиска) = Тип("СписокЗначений") Тогда + Количество = СписокВариантовПоиска.Количество(); + Если Количество = 0 Тогда + СписокВариантовПоиска = ""; + ИначеЕсли Количество = 1 Тогда + СписокВариантовПоиска = СписокВариантовПоиска.Получить(0).Значение; + Иначе + ЭтоСписок = Истина; + КонецЕсли; КонецЕсли; -КонецПроцедуры + Если ЭтоСписок Тогда + Элементы.СтрокаПоиска.КнопкаСпискаВыбора = Истина; + Элементы.СтрокаПоиска.СписокВыбора.Очистить(); + Для Каждого ЭлементВарианта Из СписокВариантовПоиска Цикл + Элементы.СтрокаПоиска.СписокВыбора.Добавить(ЭлементВарианта.Значение); + КонецЦикла; -&НаКлиенте -Процедура ВариантыПоискаПриИзменении(Элемент) - - ЗаполнитьСписокВыбораВСтрокеПоиска(Истина); - -КонецПроцедуры + Если ИзменятьСтрокуПоиска Тогда + СтрокаПоиска = СписокВариантовПоиска.Получить(0).Значение; + КонецЕсли; -&НаКлиенте -Процедура Подключаемый_СписокКонтактыПриАктивизацииСтроки(Элемент) - - ТекущиеДанные = Элемент.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено Тогда - ПоследнийАктивизированныйКонтакт = ТекущиеДанные.Ссылка; + ИначеЕсли ИзменятьСтрокуПоиска Тогда + Элементы.СтрокаПоиска.КнопкаСпискаВыбора = Ложь; + СтрокаПоиска = СписокВариантовПоиска; КонецЕсли; - + КонецПроцедуры +// Управляет доступностью элементов формы &НаКлиенте -Процедура Подключаемый_СписокВладелецПриАктивизацииСтроки(Элемент) - - ВзаимодействияКлиент.КонтактВладелецПриАктивизацииСтроки(Элемент, ЭтаФорма); +Процедура УправлениеДоступностью() + + Элементы.КомандаОбновитьИндексППД.Доступность = Не ИндексАктуален; КонецПроцедуры - diff --git a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение/Form.form b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Form.form similarity index 99% rename from SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение/Form.form rename to SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Form.form index 9cfcd578c..9b9e7c981 100644 --- a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение/Form.form +++ b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Form.form @@ -312,7 +312,6 @@ true true MultiRow -
    true
    1 1 AutoUse @@ -324,8 +323,6 @@ Auto true true - true - true Список.ИндексКартинки diff --git a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl new file mode 100644 index 000000000..c29c393ba --- /dev/null +++ b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl @@ -0,0 +1,135 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + РежимПодбора = (Параметры.ЗакрыватьПриВыборе = Ложь); + ИмяРеквизита = Параметры.ИмяРеквизита; + + Если Параметры.ПараметрыВнешнегоСоединения.ТипСоединения = "ВнешнееСоединение" Тогда + + СтрокаСообщенияОбОшибке = ""; + + ВнешнееСоединение = ОбменДаннымиПовтИсп.УстановитьВнешнееСоединение(Параметры.ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке); + + Если ВнешнееСоединение = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщенияОбОшибке,,,, Отказ); + Возврат; + КонецЕсли; + + СвойстваОбъектаМетаданных = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.СвойстваОбъектаМетаданных(Параметры.ПолноеИмяТаблицыБазыКорреспондента); + + Если Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда + + ТаблицаБазыКорреспондента = ОбщегоНазначения.ЗначениеИзСтрокиXML(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьОбъектыТаблицы_2_0_1_6(Параметры.ПолноеИмяТаблицыБазыКорреспондента)); + + Иначе + + ТаблицаБазыКорреспондента = ЗначениеИзСтрокиВнутр(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьОбъектыТаблицы(Параметры.ПолноеИмяТаблицыБазыКорреспондента)); + + КонецЕсли; + + ИначеЕсли Параметры.ПараметрыВнешнегоСоединения.ТипСоединения = "ВебСервис" Тогда + + СтрокаСообщенияОбОшибке = ""; + + Если Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда + WSПрокси = ОбменДаннымиПовтИсп.ПолучитьWSПрокси_2_0_1_6(Параметры.ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке); + Иначе + WSПрокси = ОбменДаннымиПовтИсп.ПолучитьWSПрокси(Параметры.ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке); + КонецЕсли; + + Если WSПрокси = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщенияОбОшибке,,,, Отказ); + Возврат; + КонецЕсли; + + Если Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда + + ДанныеБазыКорреспондента = СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetIBData(Параметры.ПолноеИмяТаблицыБазыКорреспондента)); + + СвойстваОбъектаМетаданных = ДанныеБазыКорреспондента.СвойстваОбъектаМетаданных; + ТаблицаБазыКорреспондента = ОбщегоНазначения.ЗначениеИзСтрокиXML(ДанныеБазыКорреспондента.ТаблицаБазыКорреспондента); + + Иначе + + ДанныеБазыКорреспондента = ЗначениеИзСтрокиВнутр(WSПрокси.GetIBData(Параметры.ПолноеИмяТаблицыБазыКорреспондента)); + + СвойстваОбъектаМетаданных = ЗначениеИзСтрокиВнутр(ДанныеБазыКорреспондента.СвойстваОбъектаМетаданных); + ТаблицаБазыКорреспондента = ЗначениеИзСтрокиВнутр(ДанныеБазыКорреспондента.ТаблицаБазыКорреспондента); + + КонецЕсли; + + КонецЕсли; + + Заголовок = СвойстваОбъектаМетаданных.Синоним; + + Элементы.Список.Отображение = ?(СвойстваОбъектаМетаданных.Иерархический = Истина, ОтображениеТаблицы.ИерархическийСписок, ОтображениеТаблицы.Список); + + КоллекцияЭлементовДерева = Список.ПолучитьЭлементы(); + КоллекцияЭлементовДерева.Очистить(); + ОбщегоНазначения.ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, ТаблицаБазыКорреспондента); + + // Позиционирование курсора в дереве значений + Если Не ПустаяСтрока(Параметры.НачальноеЗначениеВыбора) Тогда + + ИдентификаторСтроки = 0; + + ОбщегоНазначенияКлиентСервер.ПолучитьИдентификаторСтрокиДереваПоЗначениюПоля("Идентификатор", ИдентификаторСтроки, КоллекцияЭлементовДерева, Параметры.НачальноеЗначениеВыбора, Ложь); + + Элементы.Список.ТекущаяСтрока = ИдентификаторСтроки; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + +&НаКлиенте +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ОбработкаВыбораЗначения(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ВыбратьЗначение(Команда) + + ОбработкаВыбораЗначения(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ОбработкаВыбораЗначения() + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Данные = Новый Структура("Представление, Идентификатор"); + + ЗаполнитьЗначенияСвойств(Данные, ТекущиеДанные); + + Данные.Вставить("РежимПодбора", РежимПодбора); + Данные.Вставить("ИмяРеквизита", ИмяРеквизита); + + ОповеститьОВыборе(Данные); + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение/ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение.mdo b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/ВыборОбъектовИнформационнойБазыКорреспондента.mdo similarity index 77% rename from SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение/ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение.mdo rename to SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/ВыборОбъектовИнформационнойБазыКорреспондента.mdo index 97a65f461..91739aaec 100644 --- a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение/ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение.mdo +++ b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/ВыборОбъектовИнформационнойБазыКорреспондента.mdo @@ -1,9 +1,9 @@ - ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение + ВыборОбъектовИнформационнойБазыКорреспондента ru - Выбор объектов информационной базы через внешнее соединение + Выбор объектов информационной базы корреспондента PersonalComputer MobileDevice diff --git a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение/Module.bsl b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение/Module.bsl deleted file mode 100644 index a9c40f99c..000000000 --- a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение/Module.bsl +++ /dev/null @@ -1,90 +0,0 @@ - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - РежимПодбора = (Параметры.ЗакрыватьПриВыборе = Ложь); - ИмяРеквизита = Параметры.ИмяРеквизита; - - СтрокаСообщенияОбОшибке = ""; - - ВнешнееСоединение = ОбменДаннымиПовтИсп.УстановитьВнешнееСоединение(Параметры.ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке); - - Если ВнешнееСоединение = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщенияОбОшибке,,,, Отказ); - Возврат; - КонецЕсли; - - СвойстваОбъектаМетаданных = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.СвойстваОбъектаМетаданных(Параметры.ПолноеИмяТаблицыБазыКорреспондента); - - Заголовок = СвойстваОбъектаМетаданных.Синоним; - - Элементы.Список.Отображение = ?(СвойстваОбъектаМетаданных.Иерархический = Истина, ОтображениеТаблицы.ИерархическийСписок, ОтображениеТаблицы.Список); - - ТаблицаБазыКорреспондента = ЗначениеИзСтрокиВнутр(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьОбъектыТаблицы(Параметры.ПолноеИмяТаблицыБазыКорреспондента)); - - КоллекцияЭлементовДерева = Список.ПолучитьЭлементы(); - КоллекцияЭлементовДерева.Очистить(); - ОбщегоНазначения.ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, ТаблицаБазыКорреспондента); - - // Позиционирование курсора в дереве значений - Если Не ПустаяСтрока(Параметры.НачальноеЗначениеВыбора) Тогда - - ИдентификаторСтроки = 0; - - ОбщегоНазначенияКлиентСервер.ПолучитьИдентификаторСтрокиДереваПоЗначениюПоля("Идентификатор", ИдентификаторСтроки, КоллекцияЭлементовДерева, Параметры.НачальноеЗначениеВыбора, Ложь); - - Элементы.Список.ТекущаяСтрока = ИдентификаторСтроки; - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - ОбработкаВыбораЗначения(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыбратьЗначение(Команда) - - ОбработкаВыбораЗначения(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаКлиенте -Процедура ОбработкаВыбораЗначения() - - ТекущиеДанные = Элементы.Список.ТекущиеДанные; - - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Данные = Новый Структура("Представление, Идентификатор"); - - ЗаполнитьЗначенияСвойств(Данные, ТекущиеДанные); - - Данные.Вставить("РежимПодбора", РежимПодбора); - Данные.Вставить("ИмяРеквизита", ИмяРеквизита); - - ОповеститьОВыборе(Данные); - -КонецПроцедуры diff --git a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl index 7cd6041f5..db6654e1a 100644 --- a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl +++ b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl @@ -27,13 +27,17 @@ // список при открытии формы // -/////////////////////////////////////////////////////////////////////////////// -// БЛОК ОБРАБОТЧИКОВ СОБЫТИЙ // -/////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + ВыбранныеОбъектыМетаданных.ЗагрузитьЗначения(Параметры.ВыбранныеОбъектыМетаданных.ВыгрузитьЗначения()); Если Параметры.ФильтрПоОбъектамМетаданных.Количество() > 0 Тогда @@ -64,14 +68,14 @@ Если Параметры.РодительскиеПодсистемы.Количество()> 0 Тогда Элементы.ДеревоОбъектовМетаданных.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни; КонецЕсли; + + НачальнаяПометкаКоллекций(); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - НачальнаяПометкаКоллекций(); - // Устанавливаем начальное значение выбора Если ИдентификаторТекущейСтрокиПриОткрытии > 0 Тогда @@ -81,17 +85,9 @@ КонецПроцедуры -&НаКлиенте -Процедура ДеревоОбъектовМетаданныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - Если ВыборЕдинственного Тогда - - ВыбратьВыполнить(); - - КонецЕсли; - - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ // Процедура обработчик события нажатия на поле "Пометка" дерева формы &НаКлиенте @@ -106,10 +102,28 @@ КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ "ДеревоОбъектовМетаданных" + +&НаКлиенте +Процедура ДеревоОбъектовМетаданныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + Если ВыборЕдинственного Тогда + + ВыбратьВыполнить(); + + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ВыбратьВыполнить() - Если ВыборЕдинственного Тогда ТекДанные = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; @@ -144,9 +158,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// БЛОК ВСПОМОГАТЕЛЬНЫХ ФУНКЦИЙ // -/////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ЗаполнитьСписокПодсистем(СписокПодсистем) @@ -437,6 +451,63 @@ КонецФункции +&НаСервере +Процедура ПометитьЭлементыРодителейНаСервере(Элемент) + + Родитель = Элемент.ПолучитьРодителя(); + + Если Родитель = Неопределено Тогда + Возврат; + КонецЕсли; + + Если НЕ Родитель.ЭтоОбъектМетаданных Тогда + + ЭлементыРодителя = Родитель.ПолучитьЭлементы(); + Если ЭлементыРодителя.Количество() = 0 Тогда + Родитель.Пометка = 0; + ИначеЕсли Элемент.Пометка = 2 Тогда + Родитель.Пометка = 2; + Иначе + Родитель.Пометка = ЗначениеПометкиЭлементовНаСервере(ЭлементыРодителя); + КонецЕсли; + + КонецЕсли; + + ПометитьЭлементыРодителейНаСервере(Родитель); + +КонецПроцедуры + +&НаСервере +Функция ЗначениеПометкиЭлементовНаСервере(ЭлементыРодителя) + + ЕстьПомеченые = Ложь; + ЕстьНепомеченные = Ложь; + + Для каждого ЭлементРодителя Из ЭлементыРодителя Цикл + + Если ЭлементРодителя.Пометка = 2 ИЛИ (ЕстьПомеченые И ЕстьНепомеченные) Тогда + ЕстьПомеченые = Истина; + ЕстьНепомеченные = Истина; + Прервать; + ИначеЕсли ЭлементРодителя.ЭтоОбъектМетаданных Тогда + ЕстьПомеченые = ЕстьПомеченые ИЛИ ЭлементРодителя.Пометка; + ЕстьНепомеченные = ЕстьНепомеченные ИЛИ НЕ ЭлементРодителя.Пометка; + Иначе + ВложенныеЭлементы = ЭлементРодителя.ПолучитьЭлементы(); + Если ВложенныеЭлементы.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + ЗначениеПометкиВложенныхЭлементов = ЗначениеПометкиЭлементовНаСервере(ВложенныеЭлементы); + ЕстьПомеченые = ЕстьПомеченые ИЛИ ЭлементРодителя.Пометка ИЛИ ЗначениеПометкиВложенныхЭлементов; + ЕстьНепомеченные = ЕстьНепомеченные ИЛИ НЕ ЭлементРодителя.Пометка ИЛИ НЕ ЗначениеПометкиВложенныхЭлементов; + КонецЕсли; + КонецЦикла; + + Возврат ?(ЕстьПомеченые И ЕстьНепомеченные, 2, ?(ЕстьПомеченые, 1, 0)); + +КонецФункции + + // Процедура НачальнаяПометкаКоллекций устанавливает пометку для коллекций // объектов метаданных, которые не имеют объектов метаданных (истина) и // которые имеют объекты метаданных с заданной пометкой. @@ -444,7 +515,7 @@ // Параметры: // Элемент - ДанныеФормыКоллекцияЭлементовДерева // -&НаКлиенте +&НаСервере Процедура НачальнаяПометкаКоллекций(Родитель = Неопределено) Если Родитель = Неопределено Тогда @@ -458,7 +529,7 @@ Если ВложенныеЭлементы.Количество() = 0 Тогда Родитель.Пометка = 0; ИначеЕсли ВложенныеЭлементы[0].ЭтоОбъектМетаданных Тогда - ПометитьЭлементыРодителей(ВложенныеЭлементы[0]); + ПометитьЭлементыРодителейНаСервере(ВложенныеЭлементы[0]); Иначе Для каждого ВложенныйЭлемент ИЗ ВложенныеЭлементы Цикл НачальнаяПометкаКоллекций(ВложенныйЭлемент); diff --git a/SSL/src/CommonForms/ВыборПрисоединенныхФайлов/Module.bsl b/SSL/src/CommonForms/ВыборПрисоединенныхФайлов/Module.bsl index 02c124ca5..5db8433ba 100644 --- a/SSL/src/CommonForms/ВыборПрисоединенныхФайлов/Module.bsl +++ b/SSL/src/CommonForms/ВыборПрисоединенныхФайлов/Module.bsl @@ -1,7 +1,10 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -9,28 +12,59 @@ ВладелецФайла = Параметры.ВладелецФайла; ЗакрыватьПриВыборе = Параметры.ЗакрыватьПриВыборе; - УстановитьСвойстваДинамическогоСписка(); - УстановитьЭлементыФормы(); + НастроитьДинамическийСписок(); + НастроитьЭлементыФормы(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + +&НаКлиенте +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ОбработкаВыбораЗначения(); КонецПроцедуры -&НаКлиенте -Процедура СтандартнаяКомандаВыбрать(Команда) - ОбработкаВыбораЗначения(); -КонецПроцедуры - -&НаКлиенте -Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ОбработкаВыбораЗначения() -КонецПроцедуры - &НаКлиенте Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; - ОбработкаВыбораЗначения() + + ОбработкаВыбораЗначения(); + КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура СтандартнаяКомандаВыбрать(Команда) + + ОбработкаВыбораЗначения(); + +КонецПроцедуры + +&НаКлиенте +Процедура СтандартнаяКомандаСвойстваОбъекта(Команда) + + Если Элементы.Список.ТекущиеДанные = Неопределено Тогда + Возврат + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПрисоединенныйФайл", Элементы.Список.ТекущиеДанные.Ссылка); + + ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаКлиенте Процедура ОбработкаВыбораЗначения() @@ -44,75 +78,42 @@ КонецПроцедуры -&НаКлиенте -Процедура СтандартнаяКомандаСвойстваОбъекта(Команда) - - Если Элементы.Список.ТекущиеДанные = Неопределено Тогда - Возврат - КонецЕсли; - - ПараметрыФормы = Новый Структура("ПрисоединенныйФайл", Элементы.Список.ТекущиеДанные.Ссылка); - ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы); - -КонецПроцедуры - &НаСервере -Процедура УстановитьСвойстваДинамическогоСписка() +Процедура НастроитьДинамическийСписок() - ИмяСправочникаХранилищаФайлов = СтрЗаменить("[ИмяОбъекта]ПрисоединенныеФайлы", "[ИмяОбъекта]", - СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ВладелецФайла.Метаданные().ПолноеИмя(), ".")[1]); + Список.ТекстЗапроса = + "ВЫБРАТЬ + | Файлы.Ссылка, + | ВЫБОР + | КОГДА Файлы.ПометкаУдаления = ИСТИНА + | ТОГДА Файлы.ИндексКартинки + 1 + | ИНАЧЕ Файлы.ИндексКартинки + | КОНЕЦ КАК ИндексКартинки + |ИЗ + | &ИмяСправочника КАК Файлы + |ГДЕ + | Файлы.ВладелецФайла = &ВладелецФайла"; - ТекстЗапроса = ШаблонЗапроса(); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяСправочника]", ИмяСправочникаХранилищаФайлов); + ПолноеИмяСправочника = "Справочник." + ВладелецФайла.Метаданные().Имя + "ПрисоединенныеФайлы"; + Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "&ИмяСправочника", ПолноеИмяСправочника); - Список.ТекстЗапроса = ТекстЗапроса; Список.ДинамическоеСчитываниеДанных = Истина; Список.Параметры.УстановитьЗначениеПараметра("ВладелецФайла", ВладелецФайла); - Список.ОсновнаяТаблица = "Справочник." + ИмяСправочникаХранилищаФайлов; + Список.ОсновнаяТаблица = ПолноеИмяСправочника; КонецПроцедуры &НаСервере -Процедура УстановитьЭлементыФормы() +Процедура НастроитьЭлементыФормы() - ЭлементТаблица = Элементы.Список; + Элементы.Список.КартинкаСтрок = БиблиотекаКартинок.КоллекцияПиктограммФайлов; + Элементы.Список.ПутьКДаннымКартинкиСтроки = "Список.ИндексКартинки"; + Элементы.Список.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; - ЭлементТаблица.КартинкаСтрок = БиблиотекаКартинок.КоллекцияПиктограммФайлов; - ЭлементТаблица.ПутьКДаннымКартинкиСтроки = "Список.ИндексКартинки"; - ЭлементТаблица.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; - - ДобавитьПолеВСписок(ЭлементТаблица, "Ссылка", "Наименование"); + Элемент = Элементы.Добавить("СписокСсылка", Тип("ПолеФормы"), Элементы.Список); + Элемент.ПутьКДанным = "Список.Ссылка"; + Элемент.Заголовок = "Наименование"; КонецПроцедуры -&НаСервере -Процедура ДобавитьПолеВСписок(Контейнер, ИмяРеквизита, Заголовок = "") - - Элемент = Элементы.Добавить("Список" + ИмяРеквизита, Тип("ПолеФормы"), Контейнер); - Элемент.ПутьКДанным = "Список." + ИмяРеквизита; - - Если Не ПустаяСтрока(Заголовок) Тогда - Элемент.Заголовок = Заголовок; - КонецЕсли; - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция ШаблонЗапроса() - - ШаблонЗапроса = "ВЫБРАТЬ - | Файлы.Ссылка, - | ВЫБОР - | КОГДА Файлы.ПометкаУдаления = ИСТИНА - | ТОГДА Файлы.ИндексКартинки + 1 - | ИНАЧЕ Файлы.ИндексКартинки - | КОНЕЦ КАК ИндексКартинки - |ИЗ - | Справочник.[ИмяСправочника] КАК Файлы - |ГДЕ - | Файлы.ВладелецФайла = &ВладелецФайла"; - - Возврат ШаблонЗапроса; - -КонецФункции diff --git a/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl b/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl index 2150fc5a4..3b353b23f 100644 --- a/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl +++ b/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl @@ -1,5 +1,72 @@ //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Роль = Параметры.РольИсполнителя; + ОсновнойОбъектАдресации = Параметры.ОсновнойОбъектАдресации; + ДополнительныйОбъектАдресации = Параметры.ДополнительныйОбъектАдресации; + УстановитьТипыОбъектовАдресации(); + УстановитьСостояниеЭлементов(); + +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + ЗаданыТипыОсновногоОбъектаАдресации = ИспользуетсяСОбъектамиАдресации И ЗначениеЗаполнено(ТипыОсновногоОбъектаАдресации); + ЗаданыТипыДополнительногоОбъектаАдресации = ИспользуетсяСОбъектамиАдресации И ЗначениеЗаполнено(ТипыДополнительногоОбъектаАдресации); + + Если ЗаданыТипыОсновногоОбъектаАдресации И ОсновнойОбъектАдресации = Неопределено Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), + Роль.ТипыОсновногоОбъектаАдресации.Наименование ),,, + "ОсновнойОбъектАдресации", + Отказ); + + ИначеЕсли ЗаданыТипыДополнительногоОбъектаАдресации И ДополнительныйОбъектАдресации = Неопределено Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), + Роль.ТипыДополнительногоОбъектаАдресации.Наименование ),,, + "ДополнительныйОбъектАдресации", + Отказ); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ИсполнительПриИзменении(Элемент) + + ОсновнойОбъектАдресации = Неопределено; + ДополнительныйОбъектАдресации = Неопределено; + УстановитьТипыОбъектовАдресации(); + УстановитьСостояниеЭлементов(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура OKВыполнить() + + ОчиститьСообщения(); + Если НЕ ПроверитьЗаполнение() Тогда + Возврат; + КонецЕсли; + Закрыть(ПараметрыЗакрытия()); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура УстановитьТипыОбъектовАдресации() @@ -52,66 +119,3 @@ ?(ДополнительныйОбъектАдресации <> Неопределено И НЕ ДополнительныйОбъектАдресации.Пустая(), ДополнительныйОбъектАдресации, Неопределено)); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Роль = Параметры.РольИсполнителя; - ОсновнойОбъектАдресации = Параметры.ОсновнойОбъектАдресации; - ДополнительныйОбъектАдресации = Параметры.ДополнительныйОбъектАдресации; - УстановитьТипыОбъектовАдресации(); - УстановитьСостояниеЭлементов(); - -КонецПроцедуры - -&НаСервере -Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) - - ЗаданыТипыОсновногоОбъектаАдресации = ИспользуетсяСОбъектамиАдресации И ЗначениеЗаполнено(ТипыОсновногоОбъектаАдресации); - ЗаданыТипыДополнительногоОбъектаАдресации = ИспользуетсяСОбъектамиАдресации И ЗначениеЗаполнено(ТипыДополнительногоОбъектаАдресации); - - Если ЗаданыТипыОсновногоОбъектаАдресации И ОсновнойОбъектАдресации = Неопределено Тогда - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), - Роль.ТипыОсновногоОбъектаАдресации.Наименование ),,, - "ОсновнойОбъектАдресации", - Отказ); - - ИначеЕсли ЗаданыТипыДополнительногоОбъектаАдресации И ДополнительныйОбъектАдресации = Неопределено Тогда - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), - Роль.ТипыДополнительногоОбъектаАдресации.Наименование ),,, - "ДополнительныйОбъектАдресации", - Отказ); - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура ИсполнительПриИзменении(Элемент) - - ОсновнойОбъектАдресации = Неопределено; - ДополнительныйОбъектАдресации = Неопределено; - УстановитьТипыОбъектовАдресации(); - УстановитьСостояниеЭлементов(); - -КонецПроцедуры - -&НаКлиенте -Процедура OKВыполнить() - - ОчиститьСообщения(); - Если НЕ ПроверитьЗаполнение() Тогда - Возврат; - КонецЕсли; - Закрыть(ПараметрыЗакрытия()); - -КонецПроцедуры diff --git a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Form.form b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Form.form index 89b7d7bb6..f8affc0cc 100644 --- a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Form.form +++ b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Form.form @@ -38,7 +38,7 @@ УзлыПлановОбменаПланОбменаПредставлениеРасширеннаяПодсказка - 38 + 40 Label true true @@ -79,7 +79,7 @@ УзлыПлановОбменаУзелПредставлениеРасширеннаяПодсказка - 40 + 42 Label true true @@ -120,10 +120,10 @@ УзлыПлановОбменаСтрокаПоиска - 29 + 31 УзлыПлановОбменаСтрокаПоискаРасширеннаяПодсказка - 31 + 33 Label true true @@ -133,7 +133,7 @@ УзлыПлановОбменаСтрокаПоискаКонтекстноеМеню - 30 + 32 true УзлыПлановОбмена @@ -143,10 +143,10 @@ УзлыПлановОбменаСостояниеПросмотра - 32 + 34 УзлыПлановОбменаСостояниеПросмотраРасширеннаяПодсказка - 34 + 36 Label true true @@ -156,7 +156,7 @@ УзлыПлановОбменаСостояниеПросмотраКонтекстноеМеню - 33 + 35 true ViewStatusAddition @@ -167,10 +167,10 @@ УзлыПлановОбменаУправлениеПоиском - 35 + 37 УзлыПлановОбменаУправлениеПоискомРасширеннаяПодсказка - 37 + 39 Label true true @@ -180,7 +180,7 @@ УзлыПлановОбменаУправлениеПоискомКонтекстноеМеню - 36 + 38 true SearchControlAddition @@ -191,7 +191,7 @@ УзлыПлановОбменаРасширеннаяПодсказка - 28 + 30 Label true true @@ -244,7 +244,7 @@ ФормаВыбратьРасширеннаяПодсказка - 27 + 28 Label true true @@ -260,6 +260,32 @@ UserCmds Auto + + КомандыСпискаУзлов + 27 + true + true + + true + + + <key>ru</key> + <value>Команды списка узлов</value> + + + КомандыСпискаУзловРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + Item.УзлыПлановОбмена + + Left true @@ -270,8 +296,6 @@ Abort Cancel Close - CustomizeForm - Help Ignore No OK diff --git a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl index f6f1eae45..b31d745de 100644 --- a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl +++ b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl @@ -1,11 +1,19 @@ +//////////////////////////////////////////////////////////////////////////////// +// Форма выбора для полей типа "узел плана обмена". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + // Обработка стандартных параметров Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда РежимПодбора = Истина; @@ -57,28 +65,8 @@ КонецПроцедуры - -&НаКлиенте -Процедура Выбрать(Команда) - - Если МножественныйВыбор Тогда - // - ЗначениеВыбора = Новый Массив; - Для каждого ВыделеннаяСтрока Из Элементы.УзлыПлановОбмена.ВыделенныеСтроки Цикл - ЗначениеВыбора.Добавить(УзлыПлановОбмена.НайтиПоИдентификатору(ВыделеннаяСтрока).Узел) - КонецЦикла; - ОповеститьОВыборе(ЗначениеВыбора); - Иначе - ТекущиеДанные = Элементы.УзлыПлановОбмена.ТекущиеДанные; - // - Если ТекущиеДанные = Неопределено Тогда - Предупреждение(НСтр("ru = 'Узел не выбран.'")); - Иначе - ОповеститьОВыборе(ТекущиеДанные.Узел); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ УзлыПлановОбмена &НаКлиенте Процедура УзлыПлановОбменаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -93,17 +81,39 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Выбрать(Команда) + + Если МножественныйВыбор Тогда + + ЗначениеВыбора = Новый Массив; + Для каждого ВыделеннаяСтрока Из Элементы.УзлыПлановОбмена.ВыделенныеСтроки Цикл + ЗначениеВыбора.Добавить(УзлыПлановОбмена.НайтиПоИдентификатору(ВыделеннаяСтрока).Узел) + КонецЦикла; + ОповеститьОВыборе(ЗначениеВыбора); + Иначе + ТекущиеДанные = Элементы.УзлыПлановОбмена.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Предупреждение(НСтр("ru = 'Узел не выбран.'")); + Иначе + ОповеститьОВыборе(ТекущиеДанные.Узел); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ДобавитьИспользуемыйПланОбмена(ОбъектМетаданных) Если ОбъектМетаданных = Неопределено - ИЛИ НЕ Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) Тогда - // + ИЛИ НЕ Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) Тогда Возврат; КонецЕсли; ПланОбмена = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()).ПустаяСсылка(); diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаПоискаСсылокНаПВХ/Form.form b/SSL/src/CommonForms/ВыгрузкаДанных/Form.form similarity index 52% rename from SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаПоискаСсылокНаПВХ/Form.form rename to SSL/src/CommonForms/ВыгрузкаДанных/Form.form index 59bcd6cd2..0bb167e2e 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаПоискаСсылокНаПВХ/Form.form +++ b/SSL/src/CommonForms/ВыгрузкаДанных/Form.form @@ -1,21 +1,20 @@ - + ГруппаСтраницы - 1 + 18 - СтраницаСсылокНеНайдено - 2 + Предупреждение + 19 - ГруппаТекстПояснения - 12 + ГруппаОповещения + 9 - ТекстПояснения - 14 + ДекорацияВнимание + 7 <key>ru</key> - <value>Ссылок на свойство в информационной базе не найдено (свойство не используется). -Изменения типа значения и пометки удаления свойства разрешены.</value> + <value>Внимание!</value> true true @@ -23,8 +22,8 @@ true - ТекстПоясненияРасширеннаяПодсказка - 20 + ДекорацияВниманиеРасширеннаяПодсказка + 32 Label true true @@ -33,19 +32,156 @@ - ТекстПоясненияКонтекстноеМеню - 15 + ДекорацияВниманиеКонтекстноеМеню + 8 true Label true - 3 true - false Left + + ДекорацияПредупреждение + 1 + true + true + + true + + + ДекорацияПредупреждениеРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ДекорацияПредупреждениеКонтекстноеМеню + 2 + true + + Label + true + true + + Left + + + + ДекорацияПредупреждение1 + 16 + + <key>ru</key> + <value>Процесс выгрузки данных может занять продолжительное время.</value> + + true + true + + true + + + ДекорацияПредупреждение1РасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ДекорацияПредупреждение1КонтекстноеМеню + 17 + true + + Label + true + true + + Left + + + + ДекорацияПредупреждение2 + 12 + + <key>ru</key> + <value>Выгрузка не сможет начаться, пока другие пользователи работают с информационной базой. +Полный список пользователей работающих сейчас с информационной базой можно увидеть здесь:</value> + + true + true + + true + + + ДекорацияПредупреждение2РасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + ДекорацияПредупреждение2КонтекстноеМеню + 13 + true + + Label + true + true + + Left + + + + СписокАктивныхПользователей + 27 + + <key>ru</key> + <value>Список активных пользователей</value> + + true + true + + true + + + СписокАктивныхПользователейРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + СписокАктивныхПользователейКонтекстноеМеню + 28 + true + + Label + true + true + true + + + Click + ОткрытьФормуАктивныхПользователей + + true + Left + + true true @@ -53,15 +189,15 @@ <key>ru</key> - <value>Группа текст пояснения</value> + <value>Группа оповещения</value> ru - Группа текст пояснения + Группа оповещения - ГруппаТекстПоясненияРасширеннаяПодсказка - 19 + ГруппаОповещенияРасширеннаяПодсказка + 31 Label true true @@ -80,24 +216,19 @@ - ГруппаКнопокПояснения - 13 + ГруппаКнопки + 6 - ОК - 16 - - <key>ru</key> - <value>ОК</value> - + Продолжить + 3 true true true - false - ОКРасширеннаяПодсказка - 22 + ПродолжитьРасширеннаяПодсказка + 38 Label true true @@ -105,173 +236,9 @@ Left - Form.Command.РазрешитьРедактирование - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа кнопок пояснения</value> - - - ru - Группа кнопок пояснения - - - ГруппаКнопокПоясненияРасширеннаяПодсказка - 21 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница ссылок не найдено</value> - - - ru - Страница ссылок не найдено - - - СтраницаСсылокНеНайденоРасширеннаяПодсказка - 18 - Label - true - true - - Left - - - Page - - Vertical - - - - СтраницаНайденыСсылки - 3 - - ГруппаТекстПредупреждения - 10 - - ТекстПредупреждения - 6 - - <key>ru</key> - <value>Внимание! Дополнительное свойство уже используется в информационной базе. -Изменение типа может привести к потере значений уже установленных свойств. -Вы уверены, что хотите разрешить редактирование тип значения свойства -и пометку на удаление?</value> - - true - true - - true - - - ТекстПредупрежденияРасширеннаяПодсказка - 25 - Label - true - true - - Left - - - - ТекстПредупрежденияКонтекстноеМеню - 7 - true - - Label - true - 3 - true - false - - Left - Top - - - true - true - - true - - - <key>ru</key> - <value>Группа текст предупреждения</value> - - - ru - Группа текст предупреждения - - - ГруппаТекстПредупрежденияРасширеннаяПодсказка - 24 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаКнопок - 8 - - РазрешитьРедактирование - 9 - true - true - - true - - false - - РазрешитьРедактированиеРасширеннаяПодсказка - 27 - Label - true - true - - Left - - - Form.Command.РазрешитьРедактирование - Normal + Form.Command.Продолжить Auto + true true true UserCmds @@ -279,16 +246,15 @@ Отмена - 11 + 4 true true true - false ОтменаРасширеннаяПодсказка - 28 + 39 Label true true @@ -309,13 +275,17 @@ true + + <key>ru</key> + <value>Кнопки</value> + ru - Группа кнопок + Группа кнопки - ГруппаКнопокРасширеннаяПодсказка - 26 + ГруппаКнопкиРасширеннаяПодсказка + 37 Label true true @@ -335,15 +305,11 @@ <key>ru</key> - <value>Страница найдены ссылки</value> + <value>Предупреждение</value> - - ru - Страница найдены ссылки - - СтраницаНайденыСсылкиРасширеннаяПодсказка - 23 + ПредупреждениеРасширеннаяПодсказка + 30 Label true true @@ -354,6 +320,109 @@ Page Vertical + auto + + + + Выгрузка + 20 + + ДекорацияПрогресс + 22 + + <key>ru</key> + <value>Декорация прогресс</value> + + true + true + + true + + + ДекорацияПрогрессРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + ДекорацияПрогрессКонтекстноеМеню + 23 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ДекорацияПодготавливаетсяФайлВыгрузки + 24 + + <key>ru</key> + <value>Пожалуйста, подождите. +Выполняется подготовка файла выгрузки. Операция может занять длительное время.</value> + + true + true + + true + + + ДекорацияПодготавливаетсяФайлВыгрузкиРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ДекорацияПодготавливаетсяФайлВыгрузкиКонтекстноеМеню + 25 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Выгрузка</value> + + + ru + Выгрузка + + + ВыгрузкаРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Page + + Vertical + auto true @@ -365,13 +434,9 @@ ru Группа страницы - - ru - Группа страницы - ГруппаСтраницыРасширеннаяПодсказка - 17 + 29 Label true true @@ -390,14 +455,18 @@ ФормаКоманднаяПанель -1 Left + true OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + DontBlock true - true true Vertical true @@ -406,34 +475,85 @@ UseIfNecessary auto true - - РазрешитьРедактирование + + АдресХранилища <key>ru</key> - <value>Разрешить редактирование</value> + <value>Адрес хранилища</value> + + 1 + + String + + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 2 + + UUID + + + true + + + true + + + + Продолжить + + <key>ru</key> + <value>Продолжить</value> 1 ru - Разрешить редактирование + Продолжить true - РазрешитьРедактирование + ВыгрузитьДанные + + + Auto + Auto + + + ОткрытьФормуАктивныхПользователей + + <key>ru</key> + <value>Открыть форму активных пользователей</value> + + 3 + + ru + Открыть форму активных пользователей + + + true + + + + ОткрытьФормуАктивныхПользователей Auto Auto - - Ссылка - - ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения - - diff --git a/SSL/src/CommonForms/ВыгрузкаДанных/Module.bsl b/SSL/src/CommonForms/ВыгрузкаДанных/Module.bsl new file mode 100644 index 000000000..ce12b6623 --- /dev/null +++ b/SSL/src/CommonForms/ВыгрузкаДанных/Module.bsl @@ -0,0 +1,249 @@ +&НаКлиенте +Перем ИтерацияПроверки; + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ТекстЗаголовкаФормы = НСтр("ru = 'Выгрузить данные в локальную версию'"); + ТекстСообщения = НСтр("ru = 'Данные из сервиса будут выгружены в файл для последующей их загрузки + |и использования в локальной версии.'"); + Иначе + ТекстЗаголовкаФормы = НСтр("ru = 'Выгрузить данные для перехода в сервис'"); + ТекстСообщения = НСтр("ru = 'Данные из локальной версии будут выгружены в файл для последующей их загрузки + |и использования в режиме сервиса.'"); + КонецЕсли; + Элементы.ДекорацияПредупреждение.Заголовок = ТекстСообщения; + Заголовок = ТекстЗаголовкаФормы; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ОткрытьФормуАктивныхПользователей(Команда) + + ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ВыгрузитьДанные(Команда) + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + ПодготовитьВыгрузкуДанных(); + СохранитьФайлВыгрузки(); + Иначе + + ЗапуститьВыгрузкуДанных(); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ПодготовитьВыгрузкуДанных() + + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + + ВыгрузкаЗагрузкаДанных.ВыгрузитьТекущуюОбластьВоВременноеХранилище(АдресХранилища); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьФайлВыгрузки() + + НазваниеФайла = "data_dump.zip"; + + Если ПодключитьРасширениеРаботыСФайлами() Тогда + + ПолучаемыеФайлы = Новый Массив; + + ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + ДиалогВыбора.Фильтр = "ZIP архив(*.zip)|*.zip"; + ДиалогВыбора.Расширение = "zip"; + ДиалогВыбора.ПолноеИмяФайла = НазваниеФайла; + + Если ДиалогВыбора.Выбрать() Тогда + ОписаниеФайла = Новый ОписаниеПередаваемогоФайла(ДиалогВыбора.ПолноеИмяФайла, АдресХранилища); + ПолучаемыеФайлы.Добавить(ОписаниеФайла); + + ПолучитьФайлы(ПолучаемыеФайлы, , , Ложь); + + КонецЕсли; + + Иначе + + ПолучитьФайл(АдресХранилища, НазваниеФайла, Истина); + + КонецЕсли; + + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗапуститьВыгрузкуДанных() + + ЗапуститьВыгрузкуДанныхНаСервере(); + + Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.Выгрузка; + + ИтерацияПроверки = 1; + + ПодключитьОбработчикОжидания("ПроверитьГотовностьВыгрузки", 15); + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьГотовностьВыгрузки() + + Попытка + ГотовностьВыгрузки = ВыгрузкаГотова(); + Исключение + ОтключитьОбработчикОжидания("ПроверитьГотовностьВыгрузки"); + ВызватьИсключение; + КонецПопытки; + + Если ГотовностьВыгрузки Тогда + ОтключитьОбработчикОжидания("ПроверитьГотовностьВыгрузки"); + СохранитьФайлВыгрузки(); + Иначе + + ИтерацияПроверки = ИтерацияПроверки + 1; + + Если ИтерацияПроверки = 3 Тогда + ОтключитьОбработчикОжидания("ПроверитьГотовностьВыгрузки"); + ПодключитьОбработчикОжидания("ПроверитьГотовностьВыгрузки", 30); + ИначеЕсли ИтерацияПроверки = 4 Тогда + ОтключитьОбработчикОжидания("ПроверитьГотовностьВыгрузки"); + ПодключитьОбработчикОжидания("ПроверитьГотовностьВыгрузки", 60); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция НайтиЗаданиеПоИдентификатору(Идентификатор) + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор); + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина) + Иначе + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор); + КонецЕсли; + + Возврат Задание; + +КонецФункции + +&НаСервере +Функция ВыгрузкаГотова() + + Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания); + + Если Задание <> Неопределено + И Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + + Возврат Ложь; + КонецЕсли; + + Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.Предупреждение; + + Если Задание = Неопределено Тогда + ВызватьИсключение(НСтр("ru = 'При подготовке выгрузки произошла ошибка - не найдено задание подготавливающее выгрузку.'")); + КонецЕсли; + + Если Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда + ОшибкаЗадания = Задание.ИнформацияОбОшибке; + Если ОшибкаЗадания <> Неопределено Тогда + ВызватьИсключение(ПодробноеПредставлениеОшибки(ОшибкаЗадания)); + Иначе + ВызватьИсключение(НСтр("ru = 'При подготовке выгрузки произошла ошибка - задание подготавливающее выгрузку завершилось с неизвестной ошибкой.'")); + КонецЕсли; + ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда + ВызватьИсключение(НСтр("ru = 'При подготовке выгрузки произошла ошибка - задание подготавливающее выгрузку было отменено администратором.'")); + Иначе + ИдентификаторЗадания = Неопределено; + Возврат Истина; + КонецЕсли; + +КонецФункции + +&НаСервере +Процедура ЗапуститьВыгрузкуДанныхНаСервере() + + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + + ПараметрыЗадания = Новый Массив; + ПараметрыЗадания.Добавить(ОбщегоНазначения.ЗначениеРазделителяСеанса()); + ПараметрыЗадания.Добавить(АдресХранилища); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + + Задание = ФоновыеЗадания.Выполнить("ВыгрузкаЗагрузкаДанных.ВыгрузитьОбластьВоВременноеХранилище", + ПараметрыЗадания, + , + НСтр("ru = 'Подготовка выгрузки области данных'")); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина) + Иначе + ПараметрыЗадания = Новый Массив; + ПараметрыЗадания.Добавить(АдресХранилища); + + Задание = ФоновыеЗадания.Выполнить("ВыгрузкаЗагрузкаДанных.ВыгрузитьТекущуюОбластьВоВременноеХранилище", + ПараметрыЗадания, + , + НСтр("ru = 'Подготовка выгрузки области данных'")); + КонецЕсли; + + ИдентификаторЗадания = Задание.УникальныйИдентификатор; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + + Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда + ОтменитьЗаданиеПодготовки(ИдентификаторЗадания); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ОтменитьЗаданиеПодготовки(Знач ИдентификаторЗадания) + + Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания); + Если Задание = Неопределено + ИЛИ Задание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда + + Возврат; + КонецЕсли; + + Попытка + Задание.Отменить(); + Исключение + // Возможно задание как раз в этот момент закончилось и ошибки нет + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отмена выполнения задания подготовки выгрузки области данных'"), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ВыгрузкаДанных/ВыгрузкаДанных.mdo b/SSL/src/CommonForms/ВыгрузкаДанных/ВыгрузкаДанных.mdo new file mode 100644 index 000000000..2fd724ab4 --- /dev/null +++ b/SSL/src/CommonForms/ВыгрузкаДанных/ВыгрузкаДанных.mdo @@ -0,0 +1,10 @@ + + + ВыгрузкаДанных + + ru + Выгрузка данных + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ВыполнениеОбменаДанными/Form.form b/SSL/src/CommonForms/ВыполнениеОбменаДанными/Form.form index 12dfadacb..5fb59d041 100644 --- a/SSL/src/CommonForms/ВыполнениеОбменаДанными/Form.form +++ b/SSL/src/CommonForms/ВыполнениеОбменаДанными/Form.form @@ -1,477 +1,26 @@ - - <key>ru</key> - <value>Обмен с информационной базой</value> - - - ВидТранспортаСообщенийОбмена - 7 - true - true - - true - - - ВидТранспортаСообщенийОбмена - - Top - - OnChange - ВидТранспортаСообщенийОбменаПриИзменении - - - ВидТранспортаСообщенийОбменаРасширеннаяПодсказка - 66 - Label - true - true - - Left - - - - ВидТранспортаСообщенийОбменаКонтекстноеМеню - 8 - true - - InputField - Enter - true - Left - true - - true - true - true - true - false - true - true - true - true - Normal - - - - ОткрытьКаталогОбменаИнформацией - 57 - true - true - - true - - false - - ОткрытьКаталогОбменаИнформациейРасширеннаяПодсказка - 68 - Label - true - true - - Left - - - Hyperlink - Form.Command.ОткрытьКаталогОбменаИнформацией - Normal - Auto - true - true - UserCmds - Auto - - - НастроитьПараметрыТранспортаСообщенийОбмена - 45 - true - true - - true - - false - - НастроитьПараметрыТранспортаСообщенийОбменаРасширеннаяПодсказка - 69 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастроитьПараметрыТранспортаСообщенийОбмена - Normal - Auto - true - true - UserCmds - Auto - - ГруппаОсновная - 49 + ВыполнениеОбменаДанными + 1 - ГруппаЗагрузкиДанных - 13 - - СтраницыСтатусаЗагрузкиДанных - 23 - - СтатусЗагрузкиНеопределено - 24 - - КартинкаНеопределено - 41 - - <key>ru</key> - <value>Картинка неопределено</value> - - true - true - - true - - - КартинкаНеопределеноРасширеннаяПодсказка - 74 - Label - true - true - - Left - - - - КартинкаНеопределеноКонтекстноеМеню - 42 - true - - 2 - true - 1 - true - false - - - true - true - - true - - - <key>ru</key> - <value>Статус загрузки неопределено</value> - - - ru - Статус загрузки неопределено - - - СтатусЗагрузкиНеопределеноРасширеннаяПодсказка - 73 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - СтатусЗагрузкиУспех - 25 - - КартинкаУспех - 27 - - <key>ru</key> - <value>Картинка успех</value> - - true - true - - true - - - КартинкаУспехРасширеннаяПодсказка - 76 - Label - true - true - - Left - - - - КартинкаУспехКонтекстноеМеню - 28 - true - - 2 - true - 1 - true - false - - - CommonPicture.СостояниеОбменаДаннымиУспех - - - - true - true - - true - - - <key>ru</key> - <value>Статус загрузки успех</value> - - - ru - Статус загрузки неопределено - - - СтатусЗагрузкиУспехРасширеннаяПодсказка - 75 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - СтатусЗагрузкиОшибка - 26 - - КартинкаОшибка - 29 - - <key>ru</key> - <value>Картинка ошибка</value> - - true - true - - true - - - КартинкаОшибкаРасширеннаяПодсказка - 78 - Label - true - true - - Left - - - - КартинкаОшибкаКонтекстноеМеню - 30 - true - - 2 - true - 1 - true - false - - - CommonPicture.СостояниеОбменаДаннымиОшибка - - - - true - true - - true - - - <key>ru</key> - <value>Статус загрузки ошибка</value> - - - ru - Статус загрузки неопределено - - - СтатусЗагрузкиОшибкаРасширеннаяПодсказка - 77 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - СтатусЗагрузкиПредупреждение - 54 - - КартинкаПредупреждение1 - 55 - - <key>ru</key> - <value>Картинка ошибка</value> - - true - true - - true - - - КартинкаПредупреждение1РасширеннаяПодсказка - 80 - Label - true - true - - Left - - - - КартинкаПредупреждение1КонтекстноеМеню - 56 - true - - 2 - true - 1 - true - false - - - CommonPicture.Внимание - - - - true - true - - true - - - <key>ru</key> - <value>Статус загрузки предупреждение</value> - - - ru - Статус загрузки неопределено - - - СтатусЗагрузкиПредупреждениеРасширеннаяПодсказка - 79 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - СтатусЗагрузкиВыполнение - 58 - - КартинкаВыполнениеОбмена - 59 - true - true - - true - - - КартинкаВыполнениеОбменаРасширеннаяПодсказка - 82 - Label - true - true - - Left - - - - КартинкаВыполнениеОбменаКонтекстноеМеню - 60 - true - - 2 - true - 1 - true - false - - - StdPicture.GenerateReport - - - - true - true - - true - - - <key>ru</key> - <value>Статус загрузки выполнение</value> - - - СтатусЗагрузкиВыполнениеРасширеннаяПодсказка - 81 - Label - true - true - - Left - - - Page - - Vertical - auto - - + ЗагрузкаДанных + 2 + + ДлительнаяОперация + 4 + + <key>ru</key> + <value>Длительная операция</value> + true true true - - <key>ru</key> - <value>Страницы статуса загрузки данных</value> - - - ru - Страницы статуса загрузки данных - - СтраницыСтатусаЗагрузкиДанныхРасширеннаяПодсказка - 72 + ДлительнаяОперацияРасширеннаяПодсказка + 38 Label true true @@ -479,27 +28,37 @@ Left - Pages - - Auto + + ДлительнаяОперацияКонтекстноеМеню + 5 + true + + 7 + true + 2 + true + + + CommonPicture.Информация32 + - - ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - 44 + + СтатусЗагрузкиДанных + 6 <key>ru</key> - <value>События загрузки данных</value> + <value>Выполняется загрузка данных. +Пожалуйста, подождите...</value> true true true - false - ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхРасширеннаяПодсказка - 83 + СтатусЗагрузкиДанныхРасширеннаяПодсказка + 39 Label true true @@ -507,15 +66,19 @@ Left - Hyperlink - Form.Command.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - Normal - Auto - 90 + + СтатусЗагрузкиДанныхКонтекстноеМеню + 7 + true + + Label true + 2 true - UserCmds - Auto + + Left + Center + true true @@ -524,15 +87,15 @@ <key>ru</key> - <value>Группа загрузки данных</value> + <value>Загрузка данных</value> ru - Группа загрузки данных + Загрузка данных - ГруппаЗагрузкиДанныхРасширеннаяПодсказка - 71 + ЗагрузкаДанныхРасширеннаяПодсказка + 37 Label true true @@ -540,30 +103,131 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + Page + + auto - ГруппаВыгрузкиДанных - 14 + ВыгрузкаДанных + 3 + + ДлительнаяОперация1 + 10 + + <key>ru</key> + <value>Длительная операция</value> + + true + true + + true + + + ДлительнаяОперация1РасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + ДлительнаяОперация1КонтекстноеМеню + 11 + true + + 7 + true + 2 + true + + + CommonPicture.Информация32 + + + + + СтатусВыгрузкиДанных + 8 + + <key>ru</key> + <value>Выполняется выгрузка данных. +Пожалуйста, подождите...</value> + + true + true + + true + + + СтатусВыгрузкиДанныхРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + СтатусВыгрузкиДанныхКонтекстноеМеню + 9 + true + + Label + true + 2 + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Выгрузка данных</value> + + + ru + Выгрузка данных + + + ВыгрузкаДанныхРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Page + + auto + + + + ЗавершениеОбмена + 12 - СтраницыСтатусаВыгрузкиДанных - 31 + СтатусЗавершенияОбмена + 17 - СтатусВыгрузкиНеопределено - 32 + ОбменЗавершенУспешно + 18 - КартинкаНеопределено1 - 39 + КартинкаОбменЗавершенУспешно + 13 <key>ru</key> - <value>Картинка неопределено</value> + <value>Картинка обмен завершен успешно</value> true true @@ -571,8 +235,8 @@ true - КартинкаНеопределено1РасширеннаяПодсказка - 87 + КартинкаОбменЗавершенУспешноРасширеннаяПодсказка + 46 Label true true @@ -581,125 +245,26 @@ - КартинкаНеопределено1КонтекстноеМеню - 40 + КартинкаОбменЗавершенУспешноКонтекстноеМеню + 14 true - 2 + 7 true - 1 + 2 true - false - - - true - true - - true - - - <key>ru</key> - <value>Статус выгрузки неопределено</value> - - - ru - Статус загрузки неопределено - - - СтатусВыгрузкиНеопределеноРасширеннаяПодсказка - 86 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - СтатусВыгрузкиУспех - 33 - - КартинкаУспех1 - 34 - - <key>ru</key> - <value>Картинка успех</value> - - true - true - - true - - - КартинкаУспех1РасширеннаяПодсказка - 89 - Label - true - true - - Left - - - - КартинкаУспех1КонтекстноеМеню - 35 - true - - 2 - true - 1 - true - false - CommonPicture.СостояниеОбменаДаннымиУспех + CommonPicture.Информация32 - true - true - - true - - - <key>ru</key> - <value>Статус выгрузки успех</value> - - - ru - Статус загрузки неопределено - - - СтатусВыгрузкиУспехРасширеннаяПодсказка - 88 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - СтатусВыгрузкиОшибка - 36 - КартинкаОшибка1 - 37 + СтатусОбменЗавершенУспешно + 15 <key>ru</key> - <value>Картинка ошибка</value> + <value>Обмен данными успешно завершен.</value> true true @@ -707,8 +272,8 @@ true - КартинкаОшибка1РасширеннаяПодсказка - 91 + СтатусОбменЗавершенУспешноРасширеннаяПодсказка + 47 Label true true @@ -717,19 +282,17 @@ - КартинкаОшибка1КонтекстноеМеню - 38 + СтатусОбменЗавершенУспешноКонтекстноеМеню + 16 true - 2 + Label true - 1 + 2 true - false - - - CommonPicture.СостояниеОбменаДаннымиОшибка - + + Left + Center true @@ -739,15 +302,15 @@ <key>ru</key> - <value>Статус выгрузки ошибка</value> + <value>Обмен завершен успешно</value> ru - Статус загрузки неопределено + Обмен завершен успешно - СтатусВыгрузкиОшибкаРасширеннаяПодсказка - 90 + ОбменЗавершенУспешноРасширеннаяПодсказка + 45 Label true true @@ -757,19 +320,18 @@ Page - Vertical auto - СтатусВыгрузкиПредупреждение - 51 + ОбменЗавершенСОшибкой + 19 - КартинкаПредупреждение - 52 + КартинкаОбменЗавершенСОшибкой + 20 <key>ru</key> - <value>Картинка ошибка</value> + <value>Картинка обмен завершен с ошибкой</value> true true @@ -777,8 +339,8 @@ true - КартинкаПредупреждениеРасширеннаяПодсказка - 93 + КартинкаОбменЗавершенСОшибкойРасширеннаяПодсказка + 49 Label true true @@ -787,64 +349,207 @@ - КартинкаПредупреждениеКонтекстноеМеню + КартинкаОбменЗавершенСОшибкойКонтекстноеМеню + 21 + true + + 7 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + СтатусОбменЗавершенСОшибкой + 22 + + <key>ru</key> + <value>Не удалось выполнить обмен данными. +Обратитесь к администратору.</value> + + true + true + + true + + + СтатусОбменЗавершенСОшибкойРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + СтатусОбменЗавершенСОшибкойКонтекстноеМеню + 23 + true + + Label + true + 2 + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Обмен завершен с ошибкой</value> + + + ru + Обмен завершен с ошибкой + + + ОбменЗавершенСОшибкойРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Page + + auto + + + + ОбменЗавершенСОшибкойДляАдминистратора + 28 + + КартинкаОбменЗавершенСОшибкой1 + 29 + + <key>ru</key> + <value>Картинка обмен завершен с ошибкой</value> + + true + true + + true + + + КартинкаОбменЗавершенСОшибкой1РасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + КартинкаОбменЗавершенСОшибкой1КонтекстноеМеню + 30 + true + + 7 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + СтатусноеСообщение + 33 + + СтатусОбменЗавершенСОшибкойДляАдминистратора + 31 + + <key>ru</key> + <value>Не удалось выполнить обмен данными.</value> + + true + true + + true + + + СтатусОбменЗавершенСОшибкойДляАдминистратораРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + СтатусОбменЗавершенСОшибкойДляАдминистратораКонтекстноеМеню + 32 + true + + Label + true + true + false + + Left + Center + + + + ПерейтиВЖурналРегистрации + 34 + true + true + + true + + + ПерейтиВЖурналРегистрацииРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПерейтиВЖурналРегистрации + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Статусное сообщение</value> + + + ru + Статусное сообщение + + + СтатусноеСообщениеРасширеннаяПодсказка 53 - true - - 2 - true - 1 - true - false - - - CommonPicture.Внимание - - - - true - true - - true - - - <key>ru</key> - <value>Статус выгрузки предупреждение</value> - - - ru - Статус загрузки неопределено - - - СтатусВыгрузкиПредупреждениеРасширеннаяПодсказка - 92 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - СтатусВыгрузкиВыполнение - 61 - - КартинкаВыполнениеОбмена1 - 62 - true - true - - true - - - КартинкаВыполнениеОбмена1РасширеннаяПодсказка - 95 Label true true @@ -852,20 +557,14 @@ Left - - КартинкаВыполнениеОбмена1КонтекстноеМеню - 63 - true - - 2 - true - 1 - true - false - - - StdPicture.GenerateReport - + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -875,15 +574,15 @@ <key>ru</key> - <value>Статус выгрузки выполнение</value> + <value>Обмен завершен с ошибкой</value> ru - Статус выгрузки выполнение + Обмен завершен с ошибкой - СтатусВыгрузкиВыполнениеРасширеннаяПодсказка - 94 + ОбменЗавершенСОшибкойДляАдминистратораРасширеннаяПодсказка + 51 Label true true @@ -893,7 +592,6 @@ Page - Vertical auto @@ -904,15 +602,15 @@ <key>ru</key> - <value>Страницы статуса выгрузки данных</value> + <value>Статус завершения обмена</value> ru - Страницы статуса выгрузки данных + Статус завершения обмена - СтраницыСтатусаВыгрузкиДанныхРасширеннаяПодсказка - 85 + СтатусЗавершенияОбменаРасширеннаяПодсказка + 44 Label true true @@ -925,22 +623,50 @@ Auto - - ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - 43 - - <key>ru</key> - <value>События выгрузки данных</value> - + + КоманднаяПанель + 26 + + ФормаЗакрыть + 27 + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + Form.StandardCommand.Close + true + true + true + UserCmds + Auto + true true true - false + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + - ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхРасширеннаяПодсказка - 96 + КоманднаяПанельРасширеннаяПодсказка + 56 Label true true @@ -948,15 +674,11 @@ Left - Hyperlink - Form.Command.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - Normal - Auto - 90 - true - true - UserCmds - Auto + CommandBar + + Right + Form + true true @@ -965,15 +687,15 @@ <key>ru</key> - <value>Группа выгрузки данных</value> + <value>Завершение обмена</value> ru - Группа загрузки данных + Завершение обмена - ГруппаВыгрузкиДанныхРасширеннаяПодсказка - 84 + ЗавершениеОбменаРасширеннаяПодсказка + 43 Label true true @@ -981,13 +703,10 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + Page + + Vertical + auto true @@ -997,15 +716,15 @@ <key>ru</key> - <value>Группа основная</value> + <value>Выполнение обмена данными</value> ru - Группа основная + Выполнение обмена данными - ГруппаОсновнаяРасширеннаяПодсказка - 70 + ВыполнениеОбменаДаннымиРасширеннаяПодсказка + 36 Label true true @@ -1013,59 +732,27 @@ Left - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto + Pages + Auto + None + false ФормаКоманднаяПанель -1 - - ВыполнитьОбменДанными - 10 - true - true - - true - - false - - ВыполнитьОбменДаннымиРасширеннаяПодсказка - 64 - Label - true - true - - Left - - - Form.Command.ВыполнитьОбменДанными - Auto - true - true - true - UserCmds - Auto - Закрыть - 50 + 24 true true true - false ЗакрытьРасширеннаяПодсказка - 65 + 35 Label true true @@ -1075,40 +762,57 @@ Form.StandardCommand.Close Normal - PictureAndText true true UserCmds Auto - Left - true + Right OnOpen ПриОткрытии + + BeforeClose + ПередЗакрытием + OnCreateAtServer ПриСозданииНаСервере - 70 - DontBlock - Use + Abort + Cancel + Help + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + 40 + LockOwner true true Vertical - true true UseIfNecessary auto true - Объект - 1 + ПорядковыйНомерПерехода + + <key>ru</key> + <value>Порядковый номер перехода</value> + + 2 - String - + Number + + 3 + true + true @@ -1116,15 +820,14 @@ true -
    true
    УзелИнформационнойБазы <key>ru</key> - <value>Обмен с информационной базой</value> + <value>Узел информационной базы</value> - 2 + 3 ExchangePlanRef @@ -1136,14 +839,195 @@ - ВидТранспортаСообщенийОбмена + ТаблицаПереходов <key>ru</key> - <value>Укажите способ обмена данными</value> + <value>Таблица переходов</value> - 5 + 1 - EnumRef.ВидыТранспортаСообщенийОбмена + ValueTable + + + true + + + true + + + ПорядковыйНомерПерехода + + <key>ru</key> + <value>Порядковый номер перехода</value> + + 1 + + Number + + 3 + true + + + + true + + + true + + + + ИмяОсновнойСтраницы + + <key>ru</key> + <value>Имя основной страницы</value> + + 2 + + String + + + + true + + + true + + + + ИмяСтраницыДекорации + + <key>ru</key> + <value>Имя страницы декорации</value> + + 3 + + String + + + + true + + + true + + + + ИмяСтраницыНавигации + + <key>ru</key> + <value>Имя страницы навигации</value> + + 4 + + String + + + + true + + + true + + + + ИмяОбработчикаПриОткрытии + + <key>ru</key> + <value>Имя обработчика при открытии</value> + + 5 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеДалее + + <key>ru</key> + <value>Имя обработчика при переходе далее</value> + + 6 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеНазад + + <key>ru</key> + <value>Имя обработчика при переходе назад</value> + + 7 + + String + + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 8 + + Boolean + + + true + + + true + + + + ИмяОбработчикаДлительнойОперации + + <key>ru</key> + <value>Имя обработчика длительной операции</value> + + 9 + + String + + + + true + + + true + + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 4 + + Boolean true @@ -1153,7 +1037,28 @@ - РезультатЗагрузкиДанных + ДлительнаяОперацияЗавершена + + <key>ru</key> + <value>Длительная операция завершена</value> + + 5 + + Boolean + + + true + + + true + + + + ИдентификаторФайлаСообщенияВСервисе + + <key>ru</key> + <value>Идентификатор файла сообщения в сервисе</value> + 6 String @@ -1167,7 +1072,11 @@ - РезультатВыгрузкиДанных + ИдентификаторДлительнойОперации + + <key>ru</key> + <value>Идентификатор длительной операции</value> + 7 String @@ -1181,14 +1090,15 @@ - НастройкаПодчиненногоУзлаРИБЗавершена + ДатаНачалаОперации <key>ru</key> - <value>Настройка подчиненного узла РИБЗавершена</value> + <value>Дата начала операции</value> - 3 + 8 - Boolean + Date + true @@ -1198,12 +1108,12 @@ - ИмяПланаОбмена + WSURLВебСервиса <key>ru</key> - <value>Имя плана обмена</value> + <value>WSURLВеб сервиса</value> - 4 + 9 String @@ -1215,125 +1125,164 @@ true - - ВыполнитьОбменДанными + + WSИмяПользователя <key>ru</key> - <value>Выполнить обмен</value> + <value>WSИмя пользователя</value> - 2 - - ru - Выполнить обмен данными - - + 10 + + String + + + true - - - CommonPicture.ВыполнитьЗапускОбменаДанными - - - - ВыполнитьОбменДанными - - - TextPicture - Auto - Auto - - - ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + + + true + + + + WSПароль <key>ru</key> - <value>Перейти в журнал регистрации событий выгрузки данных</value> + <value>WSПароль</value> - 3 - - ru - Перейти в журнал регистрации событий выгрузки данных - - + 11 + + String + + + true - - - - ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - - - Auto - Auto - - - ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + + + true + + + + ВидТранспортаСообщений <key>ru</key> - <value>Перейти в журнал регистрации событий загрузки данных</value> + <value>Вид транспорта сообщений</value> - 4 - - ru - Перейти в журнал регистрации событий загрузки данных - - + 12 + + EnumRef.ВидыТранспортаСообщенийОбмена + + true - - - - ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - - - Auto - Auto - - - НастроитьПараметрыТранспортаСообщенийОбмена + + + true + + + + ВыполняетсяОбменДанными <key>ru</key> - <value>Настроить параметры транспорта сообщений обмена</value> + <value>Выполняется обмен данными</value> - 5 - - ru - Настроить параметры транспорта сообщений обмена - - + 13 + + Boolean + + true - - - CommonPicture.ПараметрыОбменаДанными - - - - НастроитьПараметрыТранспортаСообщенийОбмена - - - TextPicture - Auto - Auto - - - ОткрытьКаталогОбменаИнформацией + + + true + + + + СообщениеОбОшибке <key>ru</key> - <value>Открыть каталог обмена информацией</value> + <value>Сообщение об ошибке</value> + + 14 + + String + + + + true + + + true + + + + ДлительнаяОперацияЗавершенаСОшибкой + + <key>ru</key> + <value>Длительная операция завершена с ошибкой</value> + + 16 + + Boolean + + + true + + + true + + + + ЕстьОшибки + + <key>ru</key> + <value>Есть ошибки</value> + + 15 + + Boolean + + + true + + + true + + + + РольДоступнаДобавлениеИзменениеОбменовДанными + + <key>ru</key> + <value>Роль доступна добавление изменение обменов данными</value> + + 17 + + Boolean + + + true + + + true + + + + ПерейтиВЖурналРегистрации + + <key>ru</key> + <value>Перейти в журнал регистрации</value> 1 ru - Открыть каталог обмена информацией + Перейти в журнал регистрации true - - StdPicture.OpenFile - - ОткрытьКаталогОбменаИнформацией + ПерейтиВЖурналРегистрации - TextPicture Auto Auto diff --git a/SSL/src/CommonForms/ВыполнениеОбменаДанными/Help/ru.html b/SSL/src/CommonForms/ВыполнениеОбменаДанными/Help/ru.html deleted file mode 100644 index 613e92a76..000000000 --- a/SSL/src/CommonForms/ВыполнениеОбменаДанными/Help/ru.html +++ /dev/null @@ -1,5 +0,0 @@ - -

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

    -

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

    -

    По гиперссылке «Настроить параметры транспорта сообщений обмена» открывается форма для задания и проверки параметров транспорта сообщений обмена.

    -

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

    \ No newline at end of file diff --git a/SSL/src/CommonForms/ВыполнениеОбменаДанными/Module.bsl b/SSL/src/CommonForms/ВыполнениеОбменаДанными/Module.bsl index 4a80a5a34..b249f4266 100644 --- a/SSL/src/CommonForms/ВыполнениеОбменаДанными/Module.bsl +++ b/SSL/src/CommonForms/ВыполнениеОбменаДанными/Module.bsl @@ -1,5 +1,3 @@ -&НаКлиенте -Перем ПолеОтказ; //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -7,6 +5,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьПривилегированныйРежим(Истина); + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; @@ -22,9 +22,7 @@ // выполняем проверку на то, что в подчиненном узле РИБ настройка обмена была выполнена полностью НастройкаПодчиненногоУзлаРИБЗавершена = Истина; - ЭтоПодчиненныйУзелРИБ = ПланыОбмена.ГлавныйУзел() <> Неопределено; - - Если ЭтоПодчиненныйУзелРИБ Тогда + Если ОбменДаннымиСервер.ЭтоПодчиненныйУзелРИБ() Тогда ИмяПланаОбменаРИБ = ПланыОбмена.ГлавныйУзел().Метаданные().Имя; ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); @@ -39,221 +37,725 @@ КонецЕсли; - // получаем вид транспорта сообщений обмена по умолчанию для узла; - // если значение по умолчанию не задано, то устанавливаем значение FILE - ВидТранспортаСообщенийОбмена = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); - Если Не ЗначениеЗаполнено(ВидТранспортаСообщенийОбмена) Тогда - ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE; - КонецЕсли; - - ОбменДаннымиСервер.ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(УзелИнформационнойБазы, Элементы.ВидТранспортаСообщенийОбмена); - - ПолучитьСостоянияОбменовДанными(); - // устанавливаем заголовок формы - Заголовок = НСтр("ru = 'Обмен с информационной базой: %1'"); + Заголовок = НСтр("ru = 'Обмен с ""%1""'"); Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Заголовок, Строка(УзелИнформационнойБазы)); - РольДоступнаДобавлениеИзменениеОбменовДанными = ОбменДаннымиСервер.РольДоступнаДобавлениеИзменениеОбменовДанными(); + // - Элементы.НастроитьПараметрыТранспортаСообщенийОбмена.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными; + ВидТранспортаСообщений = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + + Если ВидТранспортаСообщений = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + + НастройкиТранспортаWS = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(УзелИнформационнойБазы); + + ЗаполнитьЗначенияСвойств(ЭтаФорма, НастройкиТранспортаWS); + + КонецЕсли; + + Если ВидТранспортаСообщений = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + + СценарийОбменаЧерезВебСервис(); + + Иначе + + СценарийОбменаОбычный(); + + КонецЕсли; + + ВыполняетсяОбменДанными = Истина; + ЕстьОшибки = Ложь; + + РольДоступнаДобавлениеИзменениеОбменовДанными = Пользователи.РолиДоступны("ДобавлениеИзменениеОбменовДанными"); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - // открываем форму помощника настройки обмена, если настройка не была завершена. - Если Не НастройкаПодчиненногоУзлаРИБЗавершена Тогда - - Предупреждение(НСтр("ru = 'Для выполнения обмена данными необходимо завершить настройку обмена с использованием помощника.'")); - - ПараметрыФормы = Новый Структура("ИмяПланаОбмена, ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ", ИмяПланаОбмена, Истина); - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.Форма", ПараметрыФормы); - + // Позиционируемся на первом шаге помощника + УстановитьПорядковыйНомерПерехода(1); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Если ВыполняетсяОбменДанными Тогда Отказ = Истина; Возврат; КонецЕсли; - ОбновитьОтображениеЭлементовФормы(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ПерейтиВЖурналРегистрации(Команда) - УстановитьДоступностьКнопкиОткрытияКаталогаОбмена(); + ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма", ПолучитьСтруктуруДанныхОтбораЖурналаРегистрации(УзелИнформационнойБазы), ЭтаФорма); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ПОСТАВЛЯЕМАЯ ЧАСТЬ +//////////////////////////////////////////////////////////////////////////////// &НаКлиенте -Процедура ВыполнитьОбменДанными(Команда) +Процедура ВыполнитьПереходДалее() - РезультатЗагрузкиДанных = "Выполнение"; - - ОбновитьОтображениеЭлементовФормы(); - - // выполняем загрузку данных - ПодключитьОбработчикОжидания("ВыполнитьЗагрузкуДанныхНаКлиенте", 0.1, Истина); + ИзменитьПорядковыйНомерПерехода(+1); КонецПроцедуры &НаКлиенте -Процедура ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных(Команда) +Процедура ИзменитьПорядковыйНомерПерехода(Итератор) - ОбменДаннымиКлиент.ПерейтиВЖурналРегистрацииСобытийДанныхМодально(УзелИнформационнойБазы, ЭтаФорма, "ВыгрузкаДанных"); + ОчиститьСообщения(); + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + Итератор); КонецПроцедуры &НаКлиенте -Процедура ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных(Команда) +Процедура УстановитьПорядковыйНомерПерехода(Знач Значение) - ОбменДаннымиКлиент.ПерейтиВЖурналРегистрацииСобытийДанныхМодально(УзелИнформационнойБазы, ЭтаФорма, "ЗагрузкаДанных"); + ЭтоПереходДалее = (Значение > ПорядковыйНомерПерехода); + + ПорядковыйНомерПерехода = Значение; + + Если ПорядковыйНомерПерехода < 0 Тогда + + ПорядковыйНомерПерехода = 0; + + КонецЕсли; + + ПорядковыйНомерПереходаПриИзменении(ЭтоПереходДалее); КонецПроцедуры &НаКлиенте -Процедура НастроитьПараметрыТранспортаСообщенийОбмена(Команда) +Процедура ПорядковыйНомерПереходаПриИзменении(Знач ЭтоПереходДалее) - Отбор = Новый Структура("Узел", УзелИнформационнойБазы); - ЗначенияЗаполнения = Новый Структура("Узел", УзелИнформационнойБазы); + // Выполняем обработчики событий перехода + ВыполнитьОбработчикиСобытийПерехода(ЭтоПереходДалее); - ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, ЗначенияЗаполнения, "НастройкиТранспортаОбмена", ЭтаФорма); + // Устанавливаем отображение страниц + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + Элементы.ВыполнениеОбменаДанными.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяОсновнойСтраницы]; + + Если ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация Тогда + + ПодключитьОбработчикОжидания("ВыполнитьОбработчикДлительнойОперации", 0.1, Истина); + + КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ОткрытьКаталогОбменаИнформацией(Команда) +Процедура ВыполнитьОбработчикиСобытийПерехода(Знач ЭтоПереходДалее) - // Вызов сервера без контекста - ИмяКаталога = ПолучитьИмяКаталогаНаСервере(ВидТранспортаСообщенийОбмена, УзелИнформационнойБазы); + // Обработчики событий переходов + Если ЭтоПереходДалее Тогда + + СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - 1)); + + Если СтрокиПерехода.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СтрокаПерехода = СтрокиПерехода[0]; + + // обработчик ПриПереходеДалее + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) + И Не СтрокаПерехода.ДлительнаяОперация Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); + + Отказ = Ложь; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + + Иначе + + СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода + 1)); + + Если СтрокиПерехода.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СтрокаПерехода = СтрокиПерехода[0]; + + // обработчик ПриПереходеНазад + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад) + И Не СтрокаПерехода.ДлительнаяОперация Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад); + + Отказ = Ложь; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; - Если ПустаяСтрока(ИмяКаталога) Тогда - Предупреждение(НСтр("ru = 'Каталог обмена информацией не задан.'")); + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + Если СтрокаПереходаТекущая.ДлительнаяОперация И Не ЭтоПереходДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); Возврат; КонецЕсли; - // открываем каталог в приложении explorer - ЗапуститьПриложение(ИмяКаталога); + // обработчик ПриОткрытии + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии) Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПропуститьСтраницу, ЭтоПереходДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии); + + Отказ = Ложь; + ПропуститьСтраницу = Ложь; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + ИначеЕсли ПропуститьСтраницу Тогда + + Если ЭтоПереходДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + Иначе + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ВидТранспортаСообщенийОбменаПриИзменении(Элемент) +Процедура ВыполнитьОбработчикДлительнойОперации() - УстановитьДоступностьКнопкиОткрытияКаталогаОбмена(); + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + // обработчик ОбработкаДлительнойОперации + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации) Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПерейтиДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации); + + Отказ = Ложь; + ПерейтиДалее = Истина; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + ИначеЕсли ПерейтиДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + + Иначе + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; КонецПроцедуры +// Добавляет новую строку в конец текущей таблицы переходов +// +// Параметры: +// +// ПорядковыйНомерПерехода (обязательный) – Число. Порядковый номер перехода, который соответствует текущему шагу перехода +// ИмяОсновнойСтраницы (обязательный) – Строка. Имя страницы панели "ПанельОсновная", которая соответствует текущему номеру перехода +// ИмяСтраницыНавигации (обязательный) – Строка. Имя страницы панели "ПанельНавигации", которая соответствует текущему номеру перехода +// ИмяСтраницыДекорации (необязательный) – Строка. Имя страницы панели "ПанельДекорации", которая соответствует текущему номеру перехода +// ИмяОбработчикаПриОткрытии (необязательный) – Строка. Имя функции-обработчика события открытия текущей страницы помощника +// ИмяОбработчикаПриПереходеДалее (необязательный) – Строка. Имя функции-обработчика события перехода на следующую страницу помощника +// ИмяОбработчикаПриПереходеНазад (необязательный) – Строка. Имя функции-обработчика события перехода на предыдущую страницу помощника +// ДлительнаяОперация (необязательный) - Булево. Признак отображения страницы длительной операции. +// Истина - отображается страница длительной операции; Ложь - отображается обычная страница. Значение по умолчанию - Ложь. +// +&НаСервере +Процедура ТаблицаПереходовНоваяСтрока( + ПорядковыйНомерПерехода, + ИмяОсновнойСтраницы, + ИмяСтраницыНавигации, + ИмяСтраницыДекорации = "", + ИмяОбработчикаПриОткрытии = "", + ИмяОбработчикаПриПереходеДалее = "", + ИмяОбработчикаПриПереходеНазад = "", + ДлительнаяОперация = Ложь, + ИмяОбработчикаДлительнойОперации = "" + ) + НоваяСтрока = ТаблицаПереходов.Добавить(); + + НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; + НоваяСтрока.ИмяОсновнойСтраницы = ИмяОсновнойСтраницы; + НоваяСтрока.ИмяСтраницыДекорации = ИмяСтраницыДекорации; + НоваяСтрока.ИмяСтраницыНавигации = ИмяСтраницыНавигации; + + НоваяСтрока.ИмяОбработчикаПриПереходеДалее = ИмяОбработчикаПриПереходеДалее; + НоваяСтрока.ИмяОбработчикаПриПереходеНазад = ИмяОбработчикаПриПереходеНазад; + НоваяСтрока.ИмяОбработчикаПриОткрытии = ИмяОбработчикаПриОткрытии; + + НоваяСтрока.ДлительнаяОперация = ДлительнаяОперация; + НоваяСтрока.ИмяОбработчикаДлительнойОперации = ИмяОбработчикаДлительнойОперации; + +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьКнопкуФормыПоИмениКоманды(ЭлементФормы, ИмяКоманды) + + Для Каждого Элемент Из ЭлементФормы.ПодчиненныеЭлементы Цикл + + Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда + + ЭлементФормыПоИмениКоманды = ПолучитьКнопкуФормыПоИмениКоманды(Элемент, ИмяКоманды); + + Если ЭлементФормыПоИмениКоманды <> Неопределено Тогда + + Возврат ЭлементФормыПоИмениКоманды; + + КонецЕсли; + + ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") + И Найти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда + + Возврат Элемент; + + Иначе + + Продолжить; + + КонецЕсли; + + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// ПЕРЕОПРЕДЕЛЯЕМАЯ ЧАСТЬ +//////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ -&НаСервере -Процедура ПолучитьСостоянияОбменовДанными() - - СостоянияОбменовДанными = РегистрыСведений.СостоянияОбменовДанными.СостоянияОбменовДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы); - - ЗаполнитьЗначенияСвойств(ЭтаФорма, СостоянияОбменовДанными, "РезультатЗагрузкиДанных, РезультатВыгрузкиДанных"); - -КонецПроцедуры - -&НаСервере -Процедура ВыполнитьЗагрузкуДанныхНаСервере(Отказ) - - // запускаем выполнение обмена - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, Истина, Ложь, ВидТранспортаСообщенийОбмена); - - // обновляем данные формы - ПолучитьСостоянияОбменовДанными(); - -КонецПроцедуры - -&НаСервере -Процедура ВыполнитьВыгрузкуДанныхНаСервере(Отказ) - - // запускаем выполнение обмена - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, Ложь, Истина, ВидТранспортаСообщенийОбмена); - - // обновляем данные формы - ПолучитьСостоянияОбменовДанными(); - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция ПолучитьИмяКаталогаНаСервере(ВидТранспортаСообщенийОбмена, УзелИнформационнойБазы) - - Возврат РегистрыСведений.НастройкиТранспортаОбмена.ИмяКаталогаОбменаИнформацией(ВидТранспортаСообщенийОбмена, УзелИнформационнойБазы); - -КонецФункции - &НаКлиенте -Процедура ОбновитьОтображениеЭлементовФормы() +Процедура ОбработчикОжиданияДлительнойОперации() - Элементы.СтраницыСтатусаЗагрузкиДанных.ТекущаяСтраница = Элементы[ОбменДаннымиКлиент.СтраницыСтатусаЗагрузкиДанных()[РезультатЗагрузкиДанных]]; - Элементы.СтраницыСтатусаВыгрузкиДанных.ТекущаяСтраница = Элементы[ОбменДаннымиКлиент.СтраницыСтатусаВыгрузкиДанных()[РезультатВыгрузкиДанных]]; + ДлительнаяОперацияЗавершенаСОшибкой = Ложь; + СообщениеОбОшибке = ""; - Элементы.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных.Заголовок = ОбменДаннымиКлиент.ЗаголовкиГиперссылокЗагрузкиДанных()[РезультатЗагрузкиДанных]; - Элементы.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных.Заголовок = ОбменДаннымиКлиент.ЗаголовкиГиперссылокВыгрузкиДанных()[РезультатВыгрузкиДанных]; - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьЗагрузкуДанныхНаКлиенте() - - Состояние(НСтр("ru = 'Выполняется загрузка данных.'"),, - НСтр("ru = 'Пожалуйста, подождите...'"), БиблиотекаКартинок.Информация32 + СостояниеОперации = ОбменДаннымиСервер.СостояниеДлительнойОперации(ИдентификаторДлительнойОперации, + WSURLВебСервиса, + WSИмяПользователя, + WSПароль, + СообщениеОбОшибке ); - ПолеОтказ = Ложь; - Отказ = Ложь; - - // выполняем загрузку данных - ВыполнитьЗагрузкуДанныхНаСервере(Отказ); - - ПолеОтказ = ПолеОтказ ИЛИ Отказ; - - РезультатВыгрузкиДанных = "Выполнение"; - - ОбновитьОтображениеЭлементовФормы(); - - // выполняем выгрузку данных - ПодключитьОбработчикОжидания("ВыполнитьВыгрузкуДанныхНаКлиенте", 0.1, Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьВыгрузкуДанныхНаКлиенте() - - Состояние(НСтр("ru = 'Выполняется выгрузка данных.'"),, - НСтр("ru = 'Пожалуйста, подождите...'"), БиблиотекаКартинок.Информация32 - ); - - Отказ = Ложь; - - // выполняем выгрузку данных - ВыполнитьВыгрузкуДанныхНаСервере(Отказ); - - ПолеОтказ = ПолеОтказ ИЛИ Отказ; - - ОбновитьОтображениеЭлементовФормы(); - - Оповестить("ВыполненОбменДанными"); - - Если ПолеОтказ = Истина Тогда + Если СостояниеОперации = "Active" Тогда - Состояние(НСтр("ru = 'Возникли ошибки при выгрузке и загрузке данных!'"),, - НСтр("ru = 'Используйте журнал регистрации для диагностики ошибок.'"), БиблиотекаКартинок.Ошибка32 - ); + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); Иначе - Состояние(НСтр("ru = 'Выгрузка и загрузка данных успешно завершены.'"),,, БиблиотекаКартинок.Информация32); + Если СостояниеОперации <> "Completed" Тогда + + ДлительнаяОперацияЗавершенаСОшибкой = Истина; + + ЕстьОшибки = Истина; + + КонецЕсли; + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Истина; + + ВыполнитьПереходДалее(); КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура УстановитьДоступностьКнопкиОткрытияКаталогаОбмена() +&НаСервереБезКонтекста +Функция ПолучитьСтруктуруДанныхОтбораЖурналаРегистрации(УзелИнформационнойБазы) - Элементы.ОткрытьКаталогОбменаИнформацией.Доступность = Не (ВидТранспортаСообщенийОбмена = ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.EMAIL")); + ОтбираемыеСобытия = Новый Массив; + ОтбираемыеСобытия.Добавить(ОбменДаннымиСервер.ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных)); + ОтбираемыеСобытия.Добавить(ОбменДаннымиСервер.ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ВыгрузкаДанных)); + + СостоянияОбменовДаннымиЗагрузка = РегистрыСведений.СостоянияОбменовДанными.СостоянияОбменовДанными(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + СостоянияОбменовДаннымиВыгрузка = РегистрыСведений.СостоянияОбменовДанными.СостоянияОбменовДанными(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + + Результат = Новый Структура; + Результат.Вставить("СобытиеЖурналаРегистрации", ОтбираемыеСобытия); + Результат.Вставить("ДатаНачала", Мин(СостоянияОбменовДаннымиЗагрузка.ДатаНачала, СостоянияОбменовДаннымиВыгрузка.ДатаНачала)); + Результат.Вставить("ДатаОкончания", Макс(СостоянияОбменовДаннымиЗагрузка.ДатаОкончания, СостоянияОбменовДаннымиВыгрузка.ДатаОкончания)); + + Возврат Результат; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// РАЗДЕЛ ОБРАБОТЧИКОВ СОБЫТИЙ ПЕРЕХОДОВ + +// Обмен через обычные каналы связи + +&НаКлиенте +Функция Подключаемый_ОбычнаяЗагрузкаДанных_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ОбычнаяЗагрузкаДанных_ОбработкаДлительнойОперации(Отказ, УзелИнформационнойБазы, ВидТранспортаСообщений); + + ЕстьОшибки = ЕстьОшибки ИЛИ Отказ; + + Отказ = Ложь; // чтобы не выполнять перехода назад + +КонецФункции + +&НаСервереБезКонтекста +Процедура ОбычнаяЗагрузкаДанных_ОбработкаДлительнойОперации(Отказ, УзелИнформационнойБазы, ВидТранспортаСообщений) + + // запускаем выполнение обмена + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + Отказ, + УзелИнформационнойБазы, + Истина, + Ложь, + ВидТранспортаСообщений + ); + +КонецПроцедуры + +&НаКлиенте +Функция Подключаемый_ОбычнаяВыгрузкаДанных_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ОбычнаяВыгрузкаДанных_ОбработкаДлительнойОперации(Отказ, УзелИнформационнойБазы, ВидТранспортаСообщений); + + ЕстьОшибки = ЕстьОшибки ИЛИ Отказ; + + Отказ = Ложь; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ОбычнаяВыгрузкаДанных_ОбработкаДлительнойОперации(Отказ, УзелИнформационнойБазы, ВидТранспортаСообщений) + + // запускаем выполнение обмена + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + Отказ, + УзелИнформационнойБазы, + Ложь, + Истина, + ВидТранспортаСообщений + ); + +КонецПроцедуры + +// Обмен через Веб-сервис + +&НаКлиенте +Функция Подключаемый_ЗагрузкаДанных_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ИдентификаторФайлаСообщенияВСервисе = ""; + ИдентификаторДлительнойОперации = ""; + + ЗагрузкаДанных_ОбработкаДлительнойОперации( + Отказ, + УзелИнформационнойБазы, + ДлительнаяОперация, + ИдентификаторДлительнойОперации, + ИдентификаторФайлаСообщенияВСервисе, + ДатаНачалаОперации + ); + + ЕстьОшибки = ЕстьОшибки ИЛИ Отказ; + + Отказ = Ложь; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗагрузкаДанных_ОбработкаДлительнойОперации( + Отказ, + УзелИнформационнойБазы, + ДлительнаяОперация, + ИдентификаторОперации, + ИдентификаторФайла, + ДатаНачалаОперации + ) + + ДатаНачалаОперации = ТекущаяДатаСеанса(); + + // запускаем выполнение обмена + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + Отказ, + УзелИнформационнойБазы, + Истина, + Ложь, + Перечисления.ВидыТранспортаСообщенийОбмена.WS, + ДлительнаяОперация, + ИдентификаторОперации, + ИдентификаторФайла, + Истина + ); + +КонецПроцедуры + +&НаКлиенте +Функция Подключаемый_ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперация Тогда + + ПерейтиДалее = Ложь; + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперацияЗавершена Тогда + + Если ДлительнаяОперацияЗавершенаСОшибкой Тогда + + ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбменаСОшибкой( + УзелИнформационнойБазы, + "ЗагрузкаДанных", + ДатаНачалаОперации, + СообщениеОбОшибке + ); + + Иначе + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( + Ложь, + УзелИнформационнойБазы, + ИдентификаторФайлаСообщенияВСервисе, + ДатаНачалаОперации + ); + + КонецЕсли; + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_ВыгрузкаДанных_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ИдентификаторФайлаСообщенияВСервисе = ""; + ИдентификаторДлительнойОперации = ""; + + ВыгрузкаДанных_ОбработкаДлительнойОперации( + Отказ, + УзелИнформационнойБазы, + ДлительнаяОперация, + ИдентификаторДлительнойОперации, + ИдентификаторФайлаСообщенияВСервисе, + ДатаНачалаОперации + ); + + ЕстьОшибки = ЕстьОшибки ИЛИ Отказ; + + Отказ = Ложь; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ВыгрузкаДанных_ОбработкаДлительнойОперации( + Отказ, + УзелИнформационнойБазы, + ДлительнаяОперация, + ИдентификаторОперации, + ИдентификаторФайла, + ДатаНачалаОперации + ) + + ДатаНачалаОперации = ТекущаяДатаСеанса(); + + // запускаем выполнение обмена + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + Отказ, + УзелИнформационнойБазы, + Ложь, + Истина, + Перечисления.ВидыТранспортаСообщенийОбмена.WS, + ДлительнаяОперация, + ИдентификаторОперации, + ИдентификаторФайла, + Истина + ); + +КонецПроцедуры + +&НаКлиенте +Функция Подключаемый_ВыгрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперация Тогда + + ПерейтиДалее = Ложь; + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_ВыгрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперацияЗавершена Тогда + + Если ДлительнаяОперацияЗавершенаСОшибкой Тогда + + ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбменаСОшибкой( + УзелИнформационнойБазы, + "ВыгрузкаДанных", + ДатаНачалаОперации, + СообщениеОбОшибке + ); + + Иначе + + ОбменДаннымиСервер.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации( + УзелИнформационнойБазы, + ДатаНачалаОперации + ); + + КонецЕсли; + + КонецЕсли; + +КонецФункции + +// + +&НаКлиенте +Функция Подключаемый_ЗавершениеОбмена_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + СтраницаОбменЗавершенСОшибкой = ?(РольДоступнаДобавлениеИзменениеОбменовДанными, + Элементы.ОбменЗавершенСОшибкойДляАдминистратора, + Элементы.ОбменЗавершенСОшибкой + ); + + Элементы.СтатусЗавершенияОбмена.ТекущаяСтраница = ?(ЕстьОшибки, + СтраницаОбменЗавершенСОшибкой, + Элементы.ОбменЗавершенУспешно + ); + + // Обновляем все открытые динамические списки + ОбменДаннымиКлиент.ОбновитьВсеОткрытыеДинамическиеСписки(); + +КонецФункции + +&НаКлиенте +Функция Подключаемый_ЗавершениеОбмена_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ПерейтиДалее = Ложь; + ВыполняетсяОбменДанными = Ложь; + + Оповестить("ВыполненОбменДанными"); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// РАЗДЕЛ ИНИЦИАЛИЗАЦИИ ПЕРЕХОДОВ + +&НаСервере +Процедура СценарийОбменаОбычный() + + ТаблицаПереходов.Очистить(); + + ТаблицаПереходовНоваяСтрока(1, "ЗагрузкаДанных",,,,,, Истина, "ОбычнаяЗагрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(2, "ВыгрузкаДанных",,,,,, Истина, "ОбычнаяВыгрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(3, "ЗавершениеОбмена",,, "ЗавершениеОбмена_ПриОткрытии",,, Истина, "ЗавершениеОбмена_ОбработкаДлительнойОперации"); + +КонецПроцедуры + +&НаСервере +Процедура СценарийОбменаЧерезВебСервис() + + ТаблицаПереходов.Очистить(); + + ТаблицаПереходовНоваяСтрока(1, "ЗагрузкаДанных",,,,,, Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(2, "ЗагрузкаДанных",,,,,, Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(3, "ЗагрузкаДанных",,,,,, Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(4, "ВыгрузкаДанных",,,,,, Истина, "ВыгрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(5, "ВыгрузкаДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(6, "ВыгрузкаДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(7, "ЗавершениеОбмена",,, "ЗавершениеОбмена_ПриОткрытии",,, Истина, "ЗавершениеОбмена_ОбработкаДлительнойОперации"); КонецПроцедуры diff --git a/SSL/src/CommonForms/ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo b/SSL/src/CommonForms/ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo index 3f77482ac..f66a56a0f 100644 --- a/SSL/src/CommonForms/ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo +++ b/SSL/src/CommonForms/ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo @@ -5,11 +5,6 @@ ru Выполнение обмена данными - - - ru - - PersonalComputer MobileDevice
    diff --git a/SSL/src/CommonForms/ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами/Form.form b/SSL/src/CommonForms/ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами/Form.form new file mode 100644 index 000000000..f32e6e834 --- /dev/null +++ b/SSL/src/CommonForms/ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами/Form.form @@ -0,0 +1,504 @@ + + + + <key>ru</key> + <value>Синхронизация данных</value> + + + ОсновнаяГруппировка + 1 + + Выполнить + 2 + true + true + + true + + + ВыполнитьРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + UsualButton + Form.Command.Выполнить + Auto + true + true + true + UserCmds + Auto + + + СтраницыСостоянияОбмена + 12 + + СтраницаУспешногоВыполнения + 15 + + НадписьУспеха + 18 + + <key>ru</key> + <value>Последняя синхронизация: <Дата></value> + + true + true + + true + + + НадписьУспехаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + НадписьУспехаКонтекстноеМеню + 19 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница успешного выполнения</value> + + + ru + Страница успешного выполнения + + + СтраницаУспешногоВыполненияРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаОжидания + 13 + + Декорация3 + 3 + + <key>ru</key> + <value>Выполняется синхронизация данных. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация3РасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 4 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница ожидания</value> + + + ru + Страница ожидания + + + СтраницаОжиданияРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы состояния обмена</value> + + + ru + Страницы состояния обмена + + + СтраницыСостоянияОбменаРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Основная группировка</value> + + + ru + Основная группировка + + + ОсновнаяГруппировкаРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СтраницыИндикатораДлительнойОперации + 5 + + СтраницаИндикатораДлительнойОперацииНеактивная + 6 + + Декорация1 + 7 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 8 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница индикатора длительной операции неактивная</value> + + + ru + Страница индикатора длительной операции неактивная + + + СтраницаИндикатораДлительнойОперацииНеактивнаяРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаИндикатораДлительнойОперацииАктивная + 9 + + ДлительнаяОперация + 10 + + <key>ru</key> + <value>Длительная операция</value> + + true + true + + true + + + ДлительнаяОперацияРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ДлительнаяОперацияКонтекстноеМеню + 11 + true + + 6 + true + 3 + true + + + CommonPicture.ДлительнаяОперация48 + + + + true + true + + true + + + <key>ru</key> + <value>Страница индикатора длительной операции активная</value> + + + ru + Страница индикатора длительной операции активная + + + СтраницаИндикатораДлительнойОперацииАктивнаяРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы индикатора длительной операции</value> + + + ru + Страницы индикатора длительной операции + + + СтраницыИндикатораДлительнойОперацииРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + Pages + + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + String + + + + true + + + true + +
    true
    +
    + + ОбновитьВсеОткрытыеСписки + + <key>ru</key> + <value>Обновить все открытые списки</value> + + 3 + + Boolean + + + true + + + true + + + + НажатаКнопкаСинхронизироватьДанные + + <key>ru</key> + <value>Нажата кнопка синхронизировать данные</value> + + 4 + + Boolean + + + true + + + true + + + + Выполнить + + <key>ru</key> + <value>Синхронизировать данные</value> + + 1 + + ru + Выполнить + + + true + + + StdPicture.Refresh + + + + КомандаВыполнить + + + TextPicture + Auto + Auto + + + + + +
    diff --git a/SSL/src/CommonForms/ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами/Module.bsl b/SSL/src/CommonForms/ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами/Module.bsl new file mode 100644 index 000000000..52b0daec8 --- /dev/null +++ b/SSL/src/CommonForms/ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами/Module.bsl @@ -0,0 +1,110 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + НажатаКнопкаСинхронизироватьДанные = Ложь; + + ОбновитьДанныеФормыНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ПодключитьОбработчикОжидания("ОбновитьДанныеФормы", 15); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура КомандаВыполнить(Команда) + + НажатаКнопкаСинхронизироватьДанные = Истина; + + ИнициироватьОбменДанными(); + + ОбновитьВсеОткрытыеСписки = Ложь; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ОбновитьДанныеФормы() + + ОбновитьДанныеФормыНаСервере(); + + Если ОбновитьВсеОткрытыеСписки Тогда + + // Обновляем все открытые динамические списки + ОбменДаннымиКлиент.ОбновитьВсеОткрытыеДинамическиеСписки(); + + ОбновитьВсеОткрытыеСписки = Ложь; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьДанныеФормыНаСервере() + + ВыполняетсяОбменДанными = ОбменДаннымиВМоделиСервиса.ВСистемеВыполняетсяОбменДанными(); + + Если ВыполняетсяОбменДанными Тогда + + Элементы.СтраницыИндикатораДлительнойОперации.ТекущаяСтраница = Элементы.СтраницаИндикатораДлительнойОперацииАктивная; + Элементы.Выполнить.Доступность = Ложь; + + Элементы.СтраницыСостоянияОбмена.ТекущаяСтраница = Элементы.СтраницаОжидания; + + Иначе + + Если НажатаКнопкаСинхронизироватьДанные Тогда + + ОбновитьВсеОткрытыеСписки = Истина; + + КонецЕсли; + + НажатаКнопкаСинхронизироватьДанные = Ложь; + + Элементы.СтраницыИндикатораДлительнойОперации.ТекущаяСтраница = Элементы.СтраницаИндикатораДлительнойОперацииНеактивная; + Элементы.Выполнить.Доступность = Истина; + + Элементы.СтраницыСостоянияОбмена.ТекущаяСтраница = Элементы.СтраницаУспешногоВыполнения; + + ДатаПоследнейУспешнойЗагрузки = ОбменДаннымиВМоделиСервиса.ДатаПоследнейУспешнойЗагрузкиДляВсехУзловИнформационнойБазы(); + ДатаПоследнейУспешнойЗагрузкиСтрокой = Формат(ДатаПоследнейУспешнойЗагрузки, "ДЛФ=DDT"); + + Если ДатаПоследнейУспешнойЗагрузки = Неопределено Тогда + + Элементы.НадписьУспеха.Заголовок = НСтр("ru = 'Синхронизация данных не выполнялась.'"); + + Иначе + + Элементы.НадписьУспеха.Заголовок = НСтр("ru = 'Последняя синхронизация: %1'"); + Элементы.НадписьУспеха.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.НадписьУспеха.Заголовок, ДатаПоследнейУспешнойЗагрузкиСтрокой); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ИнициироватьОбменДанными() + + ОбменДаннымиВМоделиСервиса.ВыполнитьОбменДаннымиСоВсемиИнформационнымиБазамиАбонента(); + + ОбновитьДанныеФормыНаСервере(); + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами/ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами.mdo b/SSL/src/CommonForms/ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами/ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами.mdo new file mode 100644 index 000000000..d62946764 --- /dev/null +++ b/SSL/src/CommonForms/ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами/ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами.mdo @@ -0,0 +1,10 @@ + + + ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами + + ru + Выполнение обмена данными со всеми информационными базами + + PersonalComputer + MobileDevice + diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form b/SSL/src/CommonForms/ДлительнаяОперация/Form.form similarity index 57% rename from SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form rename to SSL/src/CommonForms/ДлительнаяОперация/Form.form index 0a53ffb26..367c6b946 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form +++ b/SSL/src/CommonForms/ДлительнаяОперация/Form.form @@ -1,15 +1,11 @@ - - <key>ru</key> - <value>Правила для обмена данными</value> - - Информация - 4 + ДекорацияДлительнаяОперация + 3 <key>ru</key> - <value>Информация</value> + <value>Длительная операция</value> true true @@ -17,44 +13,7 @@ true - ИнформацияРасширеннаяПодсказка - 9 - Label - true - true - - Left - - - - ИнформацияКонтекстноеМеню - 5 - true - - 5 - true - 3 - true - - - CommonPicture.Информация32 - - - - - Надпись - 2 - - <key>ru</key> - <value>Работа с правилами для обмена данными через форму списка не поддерживается.</value> - - true - true - - true - - - НадписьРасширеннаяПодсказка + ДекорацияДлительнаяОперацияРасширеннаяПодсказка 10 Label true @@ -64,18 +23,58 @@ - НадписьКонтекстноеМеню - 3 + ДекорацияДлительнаяОперацияКонтекстноеМеню + 4 + true + + 7 + true + 3 + true + false + false + + + CommonPicture.ДлительнаяОперация48 + + + + + ДекорацияПоясняющийТекстДлительнойОперации + 1 + + <key>ru</key> + <value>Операция выполняется...</value> + + true + true + + true + + + ДекорацияПоясняющийТекстДлительнойОперацииРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ДекорацияПоясняющийТекстДлительнойОперацииКонтекстноеМеню + 2 true Label true + 3 true - - Style.ПоясняющийТекст - + true + false Left + Center Bottom @@ -84,17 +83,16 @@ ФормаКоманднаяПанель -1 - КнопкаЗакрыть - 1 + ФормаОтмена + 8 true true true - true - КнопкаЗакрытьРасширеннаяПодсказка - 7 + ФормаОтменаРасширеннаяПодсказка + 9 Label true true @@ -102,33 +100,7 @@ Left - Form.StandardCommand.Close - Normal - PictureAndText - true - true - UserCmds - Auto - - - ФормаСправка - 6 - true - true - - true - - - ФормаСправкаРасширеннаяПодсказка - 8 - Label - true - true - - Left - - - Form.StandardCommand.Help + Form.StandardCommand.Cancel Normal Auto true @@ -138,16 +110,45 @@ Right - 48 - DontBlock + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + LockOwner true - true true true true UseIfNecessary auto true + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 1 + + UUID + + + true + + + true + + + + ИдентификаторЗадания + + UUID + + diff --git a/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl b/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl new file mode 100644 index 000000000..fb6ad9b39 --- /dev/null +++ b/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl @@ -0,0 +1,23 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Параметры.ИдентификаторЗадания) Тогда + ИдентификаторЗадания = Параметры.ИдентификаторЗадания; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + + ДлительныеОперацииКлиент.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ДлительнаяОперация/ДлительнаяОперация.mdo b/SSL/src/CommonForms/ДлительнаяОперация/ДлительнаяОперация.mdo new file mode 100644 index 000000000..c0e6fb057 --- /dev/null +++ b/SSL/src/CommonForms/ДлительнаяОперация/ДлительнаяОперация.mdo @@ -0,0 +1,10 @@ + + + ДлительнаяОперация + + ru + Длительная операция + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессИсполнение/Form.form b/SSL/src/CommonForms/ДокументооборотБизнесПроцессИсполнение/Form.form index 393e2ce79..730d9ab58 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессИсполнение/Form.form +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессИсполнение/Form.form @@ -1371,6 +1371,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + 70 DontBlock true diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессИсполнение/Module.bsl b/SSL/src/CommonForms/ДокументооборотБизнесПроцессИсполнение/Module.bsl index 21aba58cb..c2c5763ee 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессИсполнение/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессИсполнение/Module.bsl @@ -120,6 +120,7 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + #Если Не ВебКлиент Тогда Если Модифицированность Тогда ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); Режим = РежимДиалогаВопрос.ДаНетОтмена; @@ -130,9 +131,26 @@ Отказ = Истина; КонецЕсли; КонецЕсли; + #КонецЕсли КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + #Если ВебКлиент Тогда + Если Модифицированность Тогда + ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + Режим = РежимДиалогаВопрос.ДаНет; + Ответ = Вопрос(ТекстВопроса, Режим); + Если Ответ = КодВозвратаДиалога.Да Тогда + ЗаписатьОбъектВыполнить(); + КонецЕсли; + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + &НаКлиенте Процедура ГлавнаяЗадачаОткрытие(Элемент, СтандартнаяОбработка) @@ -591,6 +609,8 @@ + + diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВнутреннегоДокумента/Form.form b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВнутреннегоДокумента/Form.form index c2aebec2e..e20961afb 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВнутреннегоДокумента/Form.form +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВнутреннегоДокумента/Form.form @@ -790,6 +790,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + 70 DontBlock true diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВнутреннегоДокумента/Module.bsl b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВнутреннегоДокумента/Module.bsl index 54a9b9a04..456fd7001 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВнутреннегоДокумента/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВнутреннегоДокумента/Module.bsl @@ -109,6 +109,7 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + #Если Не ВебКлиент Тогда Если Модифицированность Тогда ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); Режим = РежимДиалогаВопрос.ДаНетОтмена; @@ -119,9 +120,26 @@ Отказ = Истина; КонецЕсли; КонецЕсли; + #КонецЕсли КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + #Если ВебКлиент Тогда + Если Модифицированность Тогда + ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + Режим = РежимДиалогаВопрос.ДаНет; + Ответ = Вопрос(ТекстВопроса, Режим); + Если Ответ = КодВозвратаДиалога.Да Тогда + ЗаписатьОбъектВыполнить(); + КонецЕсли; + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + &НаКлиенте Процедура ГлавнаяЗадачаПредставлениеОткрытие(Элемент, СтандартнаяОбработка) @@ -367,4 +385,4 @@ Модифицированность = Ложь; Возврат Истина; -КонецФункции \ No newline at end of file +КонецФункции diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВходящегоДокумента/Form.form b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВходящегоДокумента/Form.form index f6b0ca2f1..54fde747c 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВходящегоДокумента/Form.form +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВходящегоДокумента/Form.form @@ -604,6 +604,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + 70 DontBlock true diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВходящегоДокумента/Module.bsl b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВходящегоДокумента/Module.bsl index d2ebb5f3d..172facd49 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВходящегоДокумента/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВходящегоДокумента/Module.bsl @@ -85,6 +85,7 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + #Если Не ВебКлиент Тогда Если Модифицированность Тогда ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); Режим = РежимДиалогаВопрос.ДаНетОтмена; @@ -95,9 +96,26 @@ Отказ = Истина; КонецЕсли; КонецЕсли; + #КонецЕсли КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + #Если ВебКлиент Тогда + Если Модифицированность Тогда + ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + Режим = РежимДиалогаВопрос.ДаНет; + Ответ = Вопрос(ТекстВопроса, Режим); + Если Ответ = КодВозвратаДиалога.Да Тогда + ЗаписатьОбъектВыполнить(); + КонецЕсли; + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + &НаКлиенте Процедура ГлавнаяЗадачаПредставлениеОткрытие(Элемент, СтандартнаяОбработка) diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаИсходящегоДокумента/Form.form b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаИсходящегоДокумента/Form.form index c415233c5..5183fee81 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаИсходящегоДокумента/Form.form +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаИсходящегоДокумента/Form.form @@ -641,6 +641,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + 70 DontBlock true diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаИсходящегоДокумента/Module.bsl b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаИсходящегоДокумента/Module.bsl index 7edcded0a..048eeb88f 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаИсходящегоДокумента/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаИсходящегоДокумента/Module.bsl @@ -66,6 +66,7 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + #Если Не ВебКлиент Тогда Если Модифицированность Тогда ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); Режим = РежимДиалогаВопрос.ДаНетОтмена; @@ -76,9 +77,26 @@ Отказ = Истина; КонецЕсли; КонецЕсли; + #КонецЕсли КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + #Если ВебКлиент Тогда + Если Модифицированность Тогда + ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + Режим = РежимДиалогаВопрос.ДаНет; + Ответ = Вопрос(ТекстВопроса, Режим); + Если Ответ = КодВозвратаДиалога.Да Тогда + ЗаписатьОбъектВыполнить(); + КонецЕсли; + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + &НаКлиенте Процедура ГлавнаяЗадачаПредставлениеОткрытие(Элемент, СтандартнаяОбработка) diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОзнакомление/Form.form b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОзнакомление/Form.form index 4989de3bf..98e5dc584 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОзнакомление/Form.form +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОзнакомление/Form.form @@ -1015,6 +1015,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + 70 DontBlock true diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОзнакомление/Module.bsl b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОзнакомление/Module.bsl index 90fa46bc6..ff9943a0d 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессОзнакомление/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОзнакомление/Module.bsl @@ -78,6 +78,7 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + #Если Не ВебКлиент Тогда Если Модифицированность Тогда ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); Режим = РежимДиалогаВопрос.ДаНетОтмена; @@ -88,9 +89,26 @@ Отказ = Истина; КонецЕсли; КонецЕсли; + #КонецЕсли КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + #Если ВебКлиент Тогда + Если Модифицированность Тогда + ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + Режим = РежимДиалогаВопрос.ДаНет; + Ответ = Вопрос(ТекстВопроса, Режим); + Если Ответ = КодВозвратаДиалога.Да Тогда + ЗаписатьОбъектВыполнить(); + КонецЕсли; + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + &НаКлиенте Процедура ГлавнаяЗадачаПредставлениеОткрытие(Элемент, СтандартнаяОбработка) diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессПоручение/Form.form b/SSL/src/CommonForms/ДокументооборотБизнесПроцессПоручение/Form.form index 800be032c..6108f7824 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессПоручение/Form.form +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессПоручение/Form.form @@ -924,6 +924,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + 70 DontBlock true diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессПоручение/Module.bsl b/SSL/src/CommonForms/ДокументооборотБизнесПроцессПоручение/Module.bsl index eb1db5019..f345169aa 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессПоручение/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессПоручение/Module.bsl @@ -131,6 +131,7 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + #Если Не ВебКлиент Тогда Если Модифицированность Тогда ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); Режим = РежимДиалогаВопрос.ДаНетОтмена; @@ -141,9 +142,26 @@ Отказ = Истина; КонецЕсли; КонецЕсли; + #КонецЕсли КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + #Если ВебКлиент Тогда + Если Модифицированность Тогда + ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + Режим = РежимДиалогаВопрос.ДаНет; + Ответ = Вопрос(ТекстВопроса, Режим); + Если Ответ = КодВозвратаДиалога.Да Тогда + ЗаписатьОбъектВыполнить(); + КонецЕсли; + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + &НаКлиенте Процедура ГлавнаяЗадачаПредставлениеОткрытие(Элемент, СтандартнаяОбработка) diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессРассмотрение/Form.form b/SSL/src/CommonForms/ДокументооборотБизнесПроцессРассмотрение/Form.form index c83ccacd3..de6f29080 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессРассмотрение/Form.form +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессРассмотрение/Form.form @@ -841,6 +841,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + 70 DontBlock true diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессРассмотрение/Module.bsl b/SSL/src/CommonForms/ДокументооборотБизнесПроцессРассмотрение/Module.bsl index 809902c31..cfab22750 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессРассмотрение/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессРассмотрение/Module.bsl @@ -77,6 +77,7 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + #Если Не ВебКлиент Тогда Если Модифицированность Тогда ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); Режим = РежимДиалогаВопрос.ДаНетОтмена; @@ -87,9 +88,26 @@ Отказ = Истина; КонецЕсли; КонецЕсли; + #КонецЕсли КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + #Если ВебКлиент Тогда + Если Модифицированность Тогда + ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + Режим = РежимДиалогаВопрос.ДаНет; + Ответ = Вопрос(ТекстВопроса, Режим); + Если Ответ = КодВозвратаДиалога.Да Тогда + ЗаписатьОбъектВыполнить(); + КонецЕсли; + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + &НаКлиенте Процедура ГлавнаяЗадачаПредставлениеОткрытие(Элемент, СтандартнаяОбработка) diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессРегистрация/Form.form b/SSL/src/CommonForms/ДокументооборотБизнесПроцессРегистрация/Form.form index 6e34e4a6d..e1f7a3fbe 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессРегистрация/Form.form +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессРегистрация/Form.form @@ -754,6 +754,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + 70 DontBlock true diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессРегистрация/Module.bsl b/SSL/src/CommonForms/ДокументооборотБизнесПроцессРегистрация/Module.bsl index 46d8ad79e..8a334cdb9 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессРегистрация/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессРегистрация/Module.bsl @@ -77,6 +77,7 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + #Если Не ВебКлиент Тогда Если Модифицированность Тогда ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); Режим = РежимДиалогаВопрос.ДаНетОтмена; @@ -87,9 +88,26 @@ Отказ = Истина; КонецЕсли; КонецЕсли; + #КонецЕсли КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + #Если ВебКлиент Тогда + Если Модифицированность Тогда + ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + Режим = РежимДиалогаВопрос.ДаНет; + Ответ = Вопрос(ТекстВопроса, Режим); + Если Ответ = КодВозвратаДиалога.Да Тогда + ЗаписатьОбъектВыполнить(); + КонецЕсли; + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + &НаКлиенте Процедура ГлавнаяЗадачаПредставлениеОткрытие(Элемент, СтандартнаяОбработка) diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессСогласование/Form.form b/SSL/src/CommonForms/ДокументооборотБизнесПроцессСогласование/Form.form index 1aaf39045..30c082139 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессСогласование/Form.form +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессСогласование/Form.form @@ -1211,6 +1211,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + 70 DontBlock true diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессСогласование/Module.bsl b/SSL/src/CommonForms/ДокументооборотБизнесПроцессСогласование/Module.bsl index 6e069092f..10a572b53 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессСогласование/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессСогласование/Module.bsl @@ -111,6 +111,7 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + #Если Не ВебКлиент Тогда Если Модифицированность Тогда ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); Режим = РежимДиалогаВопрос.ДаНетОтмена; @@ -121,9 +122,26 @@ Отказ = Истина; КонецЕсли; КонецЕсли; + #КонецЕсли КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + #Если ВебКлиент Тогда + Если Модифицированность Тогда + ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + Режим = РежимДиалогаВопрос.ДаНет; + Ответ = Вопрос(ТекстВопроса, Режим); + Если Ответ = КодВозвратаДиалога.Да Тогда + ЗаписатьОбъектВыполнить(); + КонецЕсли; + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + &НаКлиенте Процедура ГлавнаяЗадачаПредставлениеОткрытие(Элемент, СтандартнаяОбработка) diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессУтверждение/Form.form b/SSL/src/CommonForms/ДокументооборотБизнесПроцессУтверждение/Form.form index 90466a459..b66b6bbf7 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессУтверждение/Form.form +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессУтверждение/Form.form @@ -788,6 +788,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + 70 DontBlock true diff --git a/SSL/src/CommonForms/ДокументооборотБизнесПроцессУтверждение/Module.bsl b/SSL/src/CommonForms/ДокументооборотБизнесПроцессУтверждение/Module.bsl index b4f237cd6..07bff326e 100644 --- a/SSL/src/CommonForms/ДокументооборотБизнесПроцессУтверждение/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотБизнесПроцессУтверждение/Module.bsl @@ -77,6 +77,7 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + #Если Не ВебКлиент Тогда Если Модифицированность Тогда ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); Режим = РежимДиалогаВопрос.ДаНетОтмена; @@ -87,9 +88,26 @@ Отказ = Истина; КонецЕсли; КонецЕсли; + #КонецЕсли КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + #Если ВебКлиент Тогда + Если Модифицированность Тогда + ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + Режим = РежимДиалогаВопрос.ДаНет; + Ответ = Вопрос(ТекстВопроса, Режим); + Если Ответ = КодВозвратаДиалога.Да Тогда + ЗаписатьОбъектВыполнить(); + КонецЕсли; + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + &НаКлиенте Процедура ГлавнаяЗадачаПредставлениеОткрытие(Элемент, СтандартнаяОбработка) diff --git a/SSL/src/CommonForms/ДокументооборотВнутреннийДокумент/Module.bsl b/SSL/src/CommonForms/ДокументооборотВнутреннийДокумент/Module.bsl index b90892f94..488286a6e 100644 --- a/SSL/src/CommonForms/ДокументооборотВнутреннийДокумент/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотВнутреннийДокумент/Module.bsl @@ -1236,8 +1236,8 @@ ПараметрыСоздания = Новый Структура("Имя, Расширение, Размер, ВремяИзменения, ВремяИзмененияУниверсальное, АдресВременногоХранилищаФайла, Текст, ВебКлиент"); - ВремяИзменения = ТекущаяДата(); // Т.к. не можем получить дату модификации файла на диске - ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДата()); + ВремяИзменения = Дата('00010101'); // Т.к. не можем получить дату модификации файла на диске + ВремяИзмененияУниверсальное = Дата('00010101'); Размер = 0; // Т.к. не можем получить размер файла на диске ИмяБезРасширения = ""; Расширение = ""; diff --git a/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Module.bsl b/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Module.bsl index 8e8a47146..27f66fbd5 100644 --- a/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Module.bsl @@ -1132,8 +1132,8 @@ ПараметрыСоздания = Новый Структура("Имя, Расширение, Размер, ВремяИзменения, ВремяИзмененияУниверсальное, АдресВременногоХранилищаФайла, Текст, ВебКлиент"); - ВремяИзменения = ТекущаяДата(); // Т.к. не можем получить дату модификации файла на диске - ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДата()); + ВремяИзменения = Дата('00010101'); // Т.к. не можем получить дату модификации файла на диске + ВремяИзмененияУниверсальное = Дата('00010101'); Размер = 0; // Т.к. не можем получить размер файла на диске ИмяБезРасширения = ""; Расширение = ""; diff --git a/SSL/src/CommonForms/ДокументооборотДокументы/Form.form b/SSL/src/CommonForms/ДокументооборотДокументы/Form.form index 73104ac7d..ed5e00218 100644 --- a/SSL/src/CommonForms/ДокументооборотДокументы/Form.form +++ b/SSL/src/CommonForms/ДокументооборотДокументы/Form.form @@ -1342,7 +1342,7 @@ true - CommonPicture.Внимание + CommonPicture.Предупреждение diff --git a/SSL/src/CommonForms/ДокументооборотЗадачи/ConditionalAppearance.dcssca b/SSL/src/CommonForms/ДокументооборотЗадачи/ConditionalAppearance.dcssca index bca8b130f..a91a91581 100644 --- a/SSL/src/CommonForms/ДокументооборотЗадачи/ConditionalAppearance.dcssca +++ b/SSL/src/CommonForms/ДокументооборотЗадачи/ConditionalAppearance.dcssca @@ -96,7 +96,7 @@ false ЦветТекста - style:УдаленныйДополнительныйРеквизитЦвет + style:НедоступныеДанныеЦвет Видимость diff --git a/SSL/src/CommonForms/ДокументооборотЗадачи/Module.bsl b/SSL/src/CommonForms/ДокументооборотЗадачи/Module.bsl index 9c418cbb2..9ff9d8558 100644 --- a/SSL/src/CommonForms/ДокументооборотЗадачи/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотЗадачи/Module.bsl @@ -57,7 +57,7 @@ ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоБизнесПроцессовИЗадач.СрокИсполнения"); ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше; - ЭлементОтбораДанных.ПравоеЗначение = ТекущаяДата(); + ЭлементОтбораДанных.ПравоеЗначение = ТекущаяДатаСеанса(); ЭлементОтбораДанных.Использование = Истина; НовыйЭлемент = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); diff --git a/SSL/src/CommonForms/ДокументооборотИсходящийДокумент/Module.bsl b/SSL/src/CommonForms/ДокументооборотИсходящийДокумент/Module.bsl index f3ee97f88..c6066bb11 100644 --- a/SSL/src/CommonForms/ДокументооборотИсходящийДокумент/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотИсходящийДокумент/Module.bsl @@ -1052,13 +1052,20 @@ Процедура ОтправленПриИзменении(Элемент) Если Отправлен Тогда - ДатаОтправки = ТекущаяДата(); + ДатаОтправки = ПолучитьТекущуюДату(); Иначе ДатаОтправки = '00010101'; КонецЕсли; КонецПроцедуры +&НаСервереБезКонтекста +Функция ПолучитьТекущуюДату() + + Возврат ТекущаяДатаСеанса(); + +КонецФункции + &НаКлиенте Процедура СвойстваЗначениеПредставлениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -1172,8 +1179,8 @@ ПараметрыСоздания = Новый Структура("Имя, Расширение, Размер, ВремяИзменения, ВремяИзмененияУниверсальное, АдресВременногоХранилищаФайла, Текст, ВебКлиент"); - ВремяИзменения = ТекущаяДата(); // Т.к. не можем получить дату модификации файла на диске - ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДата()); + ВремяИзменения = Дата('00010101'); // Т.к. не можем получить дату модификации файла на диске + ВремяИзмененияУниверсальное = Дата('00010101'); Размер = 0; // Т.к. не можем получить размер файла на диске ИмяБезРасширения = ""; Расширение = ""; diff --git a/SSL/src/CommonForms/ДокументооборотКарточкаФайла/Form.form b/SSL/src/CommonForms/ДокументооборотКарточкаФайла/Form.form index 9ac197642..590444a17 100644 --- a/SSL/src/CommonForms/ДокументооборотКарточкаФайла/Form.form +++ b/SSL/src/CommonForms/ДокументооборотКарточкаФайла/Form.form @@ -1459,6 +1459,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + 70 18 LockOwner diff --git a/SSL/src/CommonForms/ДокументооборотКарточкаФайла/Module.bsl b/SSL/src/CommonForms/ДокументооборотКарточкаФайла/Module.bsl index a22c53c66..fbb41de07 100644 --- a/SSL/src/CommonForms/ДокументооборотКарточкаФайла/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотКарточкаФайла/Module.bsl @@ -562,28 +562,28 @@ КонецПроцедуры &НаКлиенте -Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - - Если ЗакрытиеСПараметром Тогда - Возврат; - КонецЕсли; +Процедура ПриЗакрытии() Если Модифицированность Тогда ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена,,КодВозвратаДиалога.Да); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Да); Если Ответ = КодВозвратаДиалога.Да Тогда ЗаписатьВыполнитьКлиент(); ПараметрыОповещения = Новый Структура; Оповестить("Запись_ДокументооборотДокумент", ПараметрыОповещения, ЭтаФорма.ВладелецФормы); - ИначеЕсли Ответ <> КодВозвратаДиалога.Нет Тогда - Отказ = Истина; - Возврат; КонецЕсли; КонецЕсли; - Отказ = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Если ЗакрытиеСПараметром Тогда + Возврат; + КонецЕсли; ЗакрытиеСПараметром = Истина; Закрыть(КодВозвратаДиалога.Отмена); diff --git a/SSL/src/CommonForms/ДокументооборотФайлы/Module.bsl b/SSL/src/CommonForms/ДокументооборотФайлы/Module.bsl index fb2fa51fe..0db54ddcc 100644 --- a/SSL/src/CommonForms/ДокументооборотФайлы/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотФайлы/Module.bsl @@ -213,8 +213,8 @@ ПараметрыСоздания = Новый Структура("Имя, Расширение, Размер, ВремяИзменения, ВремяИзмененияУниверсальное, АдресВременногоХранилищаФайла, Текст, ВебКлиент"); - ВремяИзменения = ТекущаяДата(); // Т.к. не можем получить дату модификации файла на диске - ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДата()); + ВремяИзменения = Дата('00010101'); // Т.к. не можем получить дату модификации файла на диске + ВремяИзмененияУниверсальное = Дата('00010101'); Размер = 0; // Т.к. не можем получить размер файла на диске ИмяБезРасширения = ""; Расширение = ""; diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form index 433154dbb..21c574ddf 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form @@ -1,41 +1,241 @@ - - Обработки - 15 - true - true - - true - - - Обработки - - false - None - Add - Change - Copy - Delete - EndEdit - MoveDown - MoveUp - SortListAsc - SortListDesc - - ОбработкиПредставление - 26 + + Страницы + 37 + + СтраницаОткрытьОбработку + 38 + + Обработки + 15 + true + true + + true + + + Обработки + + false + None + Add + Change + Copy + Delete + EndEdit + MoveDown + MoveUp + SortListAsc + SortListDesc + + ОбработкиПредставление + 26 + true + true + + true + + + Обработки.Представление + + + ОбработкиПредставлениеРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + ОбработкиПредставлениеКонтекстноеМеню + 27 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + None + + ОбработкиКоманднаяПанель + 17 + Left + true + + + Selection + ОбработкиВыбор + + + ОбработкиСтрокаПоиска + 59 + + ОбработкиСтрокаПоискаРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + ОбработкиСтрокаПоискаКонтекстноеМеню + 60 + true + + Обработки + + true + + + + ОбработкиСостояниеПросмотра + 62 + + ОбработкиСостояниеПросмотраРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + ОбработкиСостояниеПросмотраКонтекстноеМеню + 63 + true + + ViewStatusAddition + Обработки + + true + + + + ОбработкиУправлениеПоиском + 65 + + ОбработкиУправлениеПоискомРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + + ОбработкиУправлениеПоискомКонтекстноеМеню + 66 + true + + SearchControlAddition + Обработки + + true + + + + ОбработкиРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + ОбработкиКонтекстноеМеню + 16 + true + + true + true + true + true + true + true + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + None + None + None + true + + + + НастроитьСписокБыстрогоДоступа + 35 + true + true + + true + + false + + НастроитьСписокБыстрогоДоступаРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + Hyperlink + Form.Command.НастроитьСписокБыстрогоДоступа + Normal + Auto + true + true + UserCmds + Auto + true true true - - Обработки.Представление - + + <key>ru</key> + <value>Страница открыть обработку</value> + + + ru + Страница открыть обработку + - ОбработкиПредставлениеРасширеннаяПодсказка - 48 + СтраницаОткрытьОбработкуРасширеннаяПодсказка + 57 Label true true @@ -43,161 +243,173 @@ Left - - ОбработкиПредставлениеКонтекстноеМеню - 27 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal + Page + + Vertical + auto - None - - ОбработкиКоманднаяПанель - 17 - Left - true - - - Selection - ОбработкиВыбор - - - ОбработкиСтрокаПоиска + + СтраницаВыполненияОбработки 39 - - ОбработкиСтрокаПоискаРасширеннаяПодсказка - 41 - Label - true - true - - Left - - - - ОбработкиСтрокаПоискаКонтекстноеМеню - 40 - true - - Обработки - - true - - - - ОбработкиСостояниеПросмотра - 42 - - ОбработкиСостояниеПросмотраРасширеннаяПодсказка + + ДекорацияДлительнаяОперация 44 - Label + + <key>ru</key> + <value>Длительная операция</value> + + true + true + + true + + + ДекорацияДлительнаяОперацияРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + + ДекорацияДлительнаяОперацияКонтекстноеМеню + 45 + true + + 7 true + 3 true - - Left + false + false + + + CommonPicture.ДлительнаяОперация48 + - - - ОбработкиСостояниеПросмотраКонтекстноеМеню - 43 - true - - ViewStatusAddition - Обработки - - true - - - - ОбработкиУправлениеПоиском - 45 - - ОбработкиУправлениеПоискомРасширеннаяПодсказка - 47 - Label - true - true - - Left - - - - ОбработкиУправлениеПоискомКонтекстноеМеню + + + ПоясняющаяДекорация 46 - true - - SearchControlAddition - Обработки - + true + true + + true + + + ПоясняющаяДекорацияРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + + ПоясняющаяДекорацияКонтекстноеМеню + 47 + true + + Label true - - - - ОбработкиРасширеннаяПодсказка - 38 - Label - true - true - + 3 + true + true + false + + Left + Center + + + + ПоясняющаяДекорация1 + 54 + true + + true + + + ПоясняющаяДекорация + + None + + ПоясняющаяДекорация1РасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + ПоясняющаяДекорация1КонтекстноеМеню + 55 + true + + LabelField Left + Center + Enter + true + Left + true + + true + 3 + true + true + false + + + true + true + + true + + + <key>ru</key> + <value>Страница выполнения обработки</value> + + + ru + Страница выполнения обработки + + + СтраницаВыполненияОбработкиРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + Page + + auto -
    - - ОбработкиКонтекстноеМеню - 16 - true - - true - true - true - true - true - true - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - true - true - true - true - None - None - None - true - - - - НастроитьСписокБыстрогоДоступа - 35 + true true true - false + + <key>ru</key> + <value>Страницы</value> + + + ru + Страницы + - НастроитьСписокБыстрогоДоступаРасширеннаяПодсказка - 58 + СтраницыРасширеннаяПодсказка + 56 Label true true @@ -205,83 +417,268 @@ Left - Hyperlink - Form.Command.НастроитьСписокБыстрогоДоступа - Normal - Auto - true - true - UserCmds - Auto + Pages + + Auto + - Bottom - true + + СтраницыКомандныеПанели + 48 + + СтраницаКоманднаяПанельСтраницыОткрытьОбработку + 49 + + КоманднаяПанельСтраницыОткрытьОбработку + 36 + + ВыполнитьОбработку + 28 + true + true + + true + + true + false + + ВыполнитьОбработкуРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + Form.Command.ВыполнитьОбработку + Auto + true + true + true + UserCmds + Auto + + + Отмена + 29 + true + true + + true + + false + + ОтменаРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель страницы открыть обработку</value> + + + ru + Командная панель страницы открыть обработку + + + КоманднаяПанельСтраницыОткрытьОбработкуРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница командная панель страницы открыть обработку</value> + + + ru + Страница командная панель страницы открыть обработку + + + СтраницаКоманднаяПанельСтраницыОткрытьОбработкуРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаКоманднаяПанельСтраницыВыполненияОбработки + 50 + + КоманднаяПанельСтраницыВыполненияОбработки + 51 + + ОтменитьВыполнениеОбработки + 53 + true + true + + true + + false + + ОтменитьВыполнениеОбработкиРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + Form.Command.ОтменитьВыполнениеОбработки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель страницы выполнения обработки</value> + + + ru + Командная панель + + + КоманднаяПанельСтраницыВыполненияОбработкиРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница командная панель страницы выполнения обработки</value> + + + ru + Командная панель страницы открыть обработку + + + СтраницаКоманднаяПанельСтраницыВыполненияОбработкиРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы командные панели</value> + + + ru + Страницы командные панели + + + СтраницыКомандныеПанелиРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + Pages + + Auto + + + None + false ФормаКоманднаяПанель -1 - - ВыполнитьОбработку - 28 - true - true - - true - - true - false - - ВыполнитьОбработкуРасширеннаяПодсказка - 36 - Label - true - true - - Left - - - Form.Command.ВыполнитьОбработку - Auto - true - true - true - UserCmds - Auto - - - Отмена - 29 - true - true - - true - - false - - ОтменаРасширеннаяПодсказка - 37 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto - Right + + ChoiceProcessing + ОбработкаВыбора + OnCreateAtServer ПриСозданииНаСервере + CustomizeForm 80 - LockOwner + DontBlock true true Vertical @@ -521,15 +918,14 @@ - ИмяРаздела + Раздел <key>ru</key> - <value>Имя раздела</value> + <value>Раздел</value> 7 - String - + CatalogRef.ИдентификаторыОбъектовМетаданных true @@ -573,6 +969,59 @@ true + + ФоновоеЗаданиеИдентификатор + + <key>ru</key> + <value>Фоновое задание идентификатор</value> + + 9 + + UUID + + + true + + + true + + + + ФоновоеЗаданиеАдресХранилища + + <key>ru</key> + <value>Фоновое задание адрес хранилища</value> + + 11 + + String + + + + true + + + true + + + + ПоясняющаяДекорация + + <key>ru</key> + <value>Поясняющая декорация</value> + + 14 + + String + + + + true + + + true + + ВыполнитьОбработку @@ -621,6 +1070,28 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ОтменитьВыполнениеОбработки</name> + <title> + <key>ru</key> + <value>Отмена</value> + + 2 + + ru + Отменить выполнение обработки + + + true + + + + ОтменитьВыполнениеОбработки + + + Auto + Auto + ОбъектыНазначения diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl index 1ca39bbe1..d71e599d1 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl @@ -1,5 +1,11 @@ +&НаКлиенте +Перем ПараметрыОбработчика; + +&НаКлиенте +Перем ВыполняемаяОбработка; + //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -9,7 +15,11 @@ Возврат; КонецЕсли; - ИмяРаздела = Параметры.ИмяРаздела; + Если ЗначениеЗаполнено(Параметры.ИмяРаздела) + И Параметры.ИмяРаздела <> ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола() Тогда + Раздел = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Подсистемы.Найти(Параметры.ИмяРаздела)); + КонецЕсли; + ВидОбработокСтрока = Параметры.Вид; Если ВидОбработокСтрока = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта() Тогда @@ -23,11 +33,13 @@ ИначеЕсли ВидОбработокСтрока = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка() Тогда Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Дополнительные обработки (%1)'"), - ДополнительныеОтчетыИОбработки.ПолучитьИмяРабочегоМеста(ИмяРаздела)); + ДополнительныеОтчетыИОбработки.ПолучитьИмяРабочегоМеста(Раздел) + ); ИначеЕсли ВидОбработокСтрока = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет()Тогда Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Дополнительные отчеты (%1)'"), - ДополнительныеОтчетыИОбработки.ПолучитьИмяРабочегоМеста(ИмяРаздела)); + ДополнительныеОтчетыИОбработки.ПолучитьИмяРабочегоМеста(Раздел) + ); КонецЕсли; ВидОбработок = ДополнительныеОтчетыИОбработки.ПолучитьВидОбработкиПоСтроковомуПредставлениюВида(ВидОбработокСтрока); @@ -59,8 +71,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + Если ВыбранноеЗначение = "ВыполненаНастройкаМоихОтчетовИОбработок" Тогда + ЗаполнитьТаблицуОбработок(); + КонецЕсли; +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Обработки &НаКлиенте Процедура ОбработкиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -71,6 +90,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ВыполнитьОбработку(Команда) @@ -80,77 +102,351 @@ &НаКлиенте Процедура Настроить(Команда) + Открытие = Новый Структура("Имя, Параметры, Владелец, Уникальность, Окно"); - Результат = ОткрытьФормуМодально("ОбщаяФорма.НастройкаМоихОтчетовИОбработок", - Новый Структура("ВидОбработок,ЭтоГлобальныеОбработки,ТекущийРаздел", - ВидОбработок, - ЭтоГлобальныеОбработки, - ИмяРаздела - ) ); + Открытие.Имя = "ОбщаяФорма.НастройкаМоихОтчетовИОбработок"; + Открытие.Владелец = ЭтаФорма; + Открытие.Уникальность = Ложь; - Если ТипЗнч(Результат) = Тип("Булево") Тогда - ЗаполнитьТаблицуОбработок(); - КонецЕсли; + Открытие.Параметры = Новый Структура("ВидОбработок, ЭтоГлобальныеОбработки, ТекущийРаздел"); + Открытие.Параметры.ВидОбработок = ВидОбработок; + Открытие.Параметры.ЭтоГлобальныеОбработки = ЭтоГлобальныеОбработки; + Открытие.Параметры.ТекущийРаздел = Раздел; + ОткрытьФорму(Открытие.Имя, Открытие.Параметры, Открытие.Владелец, Открытие.Уникальность, Открытие.Окно); +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьВыполнениеОбработки(Команда) + ДлительныеОперацииКлиент.ОтменитьВыполнениеЗадания(ФоновоеЗаданиеИдентификатор); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаКлиенте -Процедура ВыполнитьОбработкуПоПараметрам() - - ТекущиеДанные = Элементы.Обработки.ТекущиеДанные; - - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ЭтоГлобальныеОбработки Тогда - ОбъектыНазначенияМассив = Неопределено; - Иначе - ОбъектыНазначенияМассив = ОбъектыНазначения.ВыгрузитьЗначения(); - КонецЕсли; - - Отказ = Ложь; - ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьОбработку( - ТекущиеДанные.Ссылка, - ВидОбработокСтрока, - ТекущиеДанные.Идентификатор, - ТекущиеДанные.БезопасныйРежим, - ТекущиеДанные.ВариантЗапуска, - ТекущиеДанные.ПоказыватьОповещение, - ТекущиеДанные.Модификатор, - ОбъектыНазначенияМассив, - Отказ); - - Если Не Отказ Тогда - // обновляем форму объекта - Если ТипЗнч(ВладелецФормы) = Тип("УправляемаяФорма") Тогда - Попытка - ВладелецФормы.Прочитать(); - Исключение - // Если метода Прочитать нет, значит печать выполнена не из формы объекта. - КонецПопытки; - КонецЕсли; - - Закрыть(); - КонецЕсли; - -КонецПроцедуры +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ЗаполнитьТаблицуОбработок() ДоступныеКоманды = ДополнительныеОтчетыИОбработки.ПолучитьДоступныеКоманды( - ЭтоНазначаемыеОбработки, - ПолноеИмяОбъектаМетаданных, - ЭтоФормаОбъекта, - ИмяРаздела, - ВидОбработок); + ЭтоНазначаемыеОбработки, + ПолноеИмяОбъектаМетаданных, + ЭтоФормаОбъекта, + Раздел, + ВидОбработок + ); ЗначениеВРеквизитФормы(ДоступныеКоманды, "Обработки"); КонецПроцедуры +&НаКлиенте +Процедура ВыполнитьОбработкуПоПараметрам() + ДанныеОбработки = Элементы.Обработки.ТекущиеДанные; + Если ДанныеОбработки = Неопределено Тогда + Возврат; + КонецЕсли; + + ВыполняемаяОбработка = Новый Структура( + "Ссылка, БезопасныйРежим, Представление, + |Идентификатор, ВариантЗапуска, ПоказыватьОповещение, + |Модификатор, ОбъектыНазначения" + ); + ЗаполнитьЗначенияСвойств(ВыполняемаяОбработка, ДанныеОбработки); + Если НЕ ЭтоГлобальныеОбработки Тогда + ВыполняемаяОбработка.ОбъектыНазначения = ОбъектыНазначения.ВыгрузитьЗначения(); + КонецЕсли; + + Если ДанныеОбработки.ВариантЗапуска = ДополнительныеОтчетыИОбработкиКлиент.ВариантЗапускаОткрытиеФормы() Тогда + + ВыполнитьОткрытиеФормыОбработки(); + + + ИначеЕсли ДанныеОбработки.ВариантЗапуска = ДополнительныеОтчетыИОбработкиКлиент.ВариантЗапускаВызовКлиентскогоМетода() Тогда + + ВыполнитьКлиентскийМетодОбработки(); + + ИначеЕсли ВидОбработокСтрока = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма() + И ДанныеОбработки.Модификатор = "ПечатьMXL" Тогда + + ВыполнитьОткрытиеПечатнойФормы(); + + ИначеЕсли ДанныеОбработки.ВариантЗапуска = ДополнительныеОтчетыИОбработкиКлиент.ВариантЗапускаВызовСерверногоМетода() Тогда + + // Изменение элементов формы + Элементы.ПоясняющаяДекорация.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполняется обработка ""%1""...'"), + ДанныеОбработки.Представление + ); + Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВыполненияОбработки; + Элементы.СтраницыКомандныеПанели.ТекущаяСтраница = Элементы.СтраницаКоманднаяПанельСтраницыВыполненияОбработки; + + // Вызов сервера только после перехода формы в консистентное состояние + ПодключитьОбработчикОжидания("ВыполнитьСерверныйМетодОбработки", 0.1, Истина); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОткрытиеФормыОбработки() + ИмяОбработки = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(ВыполняемаяОбработка.Ссылка); + + ПараметрыОбработки = Новый Структура("ИдентификаторКоманды, ДополнительнаяОбработкаСсылка"); + ПараметрыОбработки.ИдентификаторКоманды = ВыполняемаяОбработка.Идентификатор; + ПараметрыОбработки.ДополнительнаяОбработкаСсылка = ВыполняемаяОбработка.Ссылка; + + Если НЕ ЭтоГлобальныеОбработки Тогда + ПараметрыОбработки.Вставить("ОбъектыНазначения", ВыполняемаяОбработка.ОбъектыНазначения); + КонецЕсли; + + Если ВидОбработокСтрока = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет() + ИЛИ ВидОбработокСтрока = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет() Тогда + ОткрытьФорму("ВнешнийОтчет."+ ИмяОбработки +".Форма", ПараметрыОбработки); + Иначе + ОткрытьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма", ПараметрыОбработки); + КонецЕсли; + + ПоказатьРезультатВыполненияОбработки(); +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьКлиентскийМетодОбработки() + Если ВыполняемаяОбработка.ПоказыватьОповещение Тогда + ПоказатьОповещениеПользователя(НСтр("ru = 'Обработка выполняется...'")); + КонецЕсли; + + ИмяОбработки = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(ВыполняемаяОбработка.Ссылка); + + ПараметрыОбработки = Новый Структура("ИдентификаторКоманды,ДополнительнаяОбработкаСсылка"); + ПараметрыОбработки.ИдентификаторКоманды = ВыполняемаяОбработка.Идентификатор; + ПараметрыОбработки.ДополнительнаяОбработкаСсылка = ВыполняемаяОбработка.Ссылка; + + Если НЕ ЭтоГлобальныеОбработки Тогда + ПараметрыОбработки.Вставить("ОбъектыНазначения", ВыполняемаяОбработка.ОбъектыНазначения); + КонецЕсли; + + Если ВидОбработокСтрока = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет() + ИЛИ ВидОбработокСтрока = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет() Тогда + ФормаОбработки = ПолучитьФорму("ВнешнийОтчет."+ ИмяОбработки +".Форма", ПараметрыОбработки); + Иначе + ФормаОбработки = ПолучитьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма", ПараметрыОбработки); + КонецЕсли; + + Если ЭтоГлобальныеОбработки Тогда + + ФормаОбработки.ВыполнитьКоманду(ВыполняемаяОбработка.Идентификатор); + + ИначеЕсли ВидОбработокСтрока = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиСозданиеСвязанныхОбъектов() Тогда + + СозданныеОбъекты = Новый Массив; + + ФормаОбработки.ВыполнитьКоманду(ВыполняемаяОбработка.Идентификатор, ВыполняемаяОбработка.ОбъектыНазначения, СозданныеОбъекты); + + ТипыСозданныхОбъектов = Новый Массив; + + Для Каждого СозданныйОбъект Из СозданныеОбъекты Цикл + Тип = ТипЗнч(СозданныйОбъект); + Если ТипыСозданныхОбъектов.Найти(Тип) = Неопределено Тогда + ТипыСозданныхОбъектов.Добавить(Тип); + КонецЕсли; + КонецЦикла; + + Для Каждого Тип Из ТипыСозданныхОбъектов Цикл + ОповеститьОбИзменении(Тип); + КонецЦикла; + + ИначеЕсли ВидОбработокСтрока = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма() Тогда + + ФормаОбработки.Печать(ВыполняемаяОбработка.Идентификатор, ВыполняемаяОбработка.ОбъектыНазначения); + + ИначеЕсли ВидОбработокСтрока = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта() Тогда + + ФормаОбработки.ВыполнитьКоманду(ВыполняемаяОбработка.Идентификатор, ВыполняемаяОбработка.ОбъектыНазначения); + + ТипыИзмененныхОбъектов = Новый Массив; + + Для Каждого ИзмененныйОбъект Из ВыполняемаяОбработка.ОбъектыНазначения Цикл + Тип = ТипЗнч(ИзмененныйОбъект); + Если ТипыИзмененныхОбъектов.Найти(Тип) = Неопределено Тогда + ТипыИзмененныхОбъектов.Добавить(Тип); + КонецЕсли; + КонецЦикла; + + Для Каждого Тип Из ТипыИзмененныхОбъектов Цикл + ОповеститьОбИзменении(Тип); + КонецЦикла; + + ИначеЕсли ВидОбработокСтрока = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет() Тогда + + ФормаОбработки.ВыполнитьКоманду(ВыполняемаяОбработка.Идентификатор, ВыполняемаяОбработка.ОбъектыНазначения); + + КонецЕсли; + + ПоказатьРезультатВыполненияОбработки(); +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОткрытиеПечатнойФормы() + Если УправлениеПечатьюКлиент.ПроверитьДокументыПроведены(ВыполняемаяОбработка.ОбъектыНазначения) Тогда + + ПараметрыОткрытия = Новый Структура("ИсточникДанных, ПараметрыИсточника"); + ПараметрыОткрытия.ИсточникДанных = ВыполняемаяОбработка.Ссылка; + ПараметрыОткрытия.ПараметрыИсточника = Новый Структура("ИдентификаторКоманды, ОбъектыНазначения"); + ПараметрыОткрытия.ПараметрыИсточника.ИдентификаторКоманды = ВыполняемаяОбработка.Идентификатор; + ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = ВыполняемаяОбработка.ОбъектыНазначения; + + ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия); + + ПоказатьРезультатВыполненияОбработки(); + + Иначе + + // Действие не требуется - подсистема "Управление печатью" сама выводит ошибки, + // а данная форма остается открытой + + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьСерверныйМетодОбработки() + ПараметрыВызоваСервера = Новый Структура("ВнешняяОбработкаСсылка, ИдентификаторКоманды, ОбъектыНазначения, РезультатВыполнения"); + ПараметрыВызоваСервера.ВнешняяОбработкаСсылка = ВыполняемаяОбработка.Ссылка; + ПараметрыВызоваСервера.ИдентификаторКоманды = ВыполняемаяОбработка.Идентификатор; + ПараметрыВызоваСервера.ОбъектыНазначения = ВыполняемаяОбработка.ОбъектыНазначения; + ПараметрыВызоваСервера.РезультатВыполнения = Новый Массив; + + Результат = ВыполнитьСерверныйМетодОбработкиНаСервере(ПараметрыВызоваСервера); + + Если Результат.ЗаданиеВыполнено Тогда + ПоказатьРезультатВыполненияОбработки(Результат); + ИначеЕсли Результат.ВызваноИсключение Тогда + // Изменение элементов формы + Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОткрытьОбработку; + Элементы.СтраницыКомандныеПанели.ТекущаяСтраница = Элементы.СтраницаКоманднаяПанельСтраницыОткрытьОбработку; + // Вывод сообщения об ошибке + Предупреждение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось выполнить обработку ""%1"". + |Подробности см. в журнале регистрации.'"), + ВыполняемаяОбработка.Представление + ) + ); + Иначе + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчика); + ПодключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания", 1, Истина); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция ВыполнитьСерверныйМетодОбработкиНаСервере(ПараметрыВызоваСервера) + Результат = Новый Структура("ЗаданиеВыполнено, ВызваноИсключение, РезультатВыполнения"); + + Попытка + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + РезультатФоновогоЗадания = Новый Структура("ЗаданиеВыполнено, АдресХранилища"); + РезультатФоновогоЗадания.ЗаданиеВыполнено = Истина; + РезультатФоновогоЗадания.АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + ДополнительныеОтчетыИОбработки.ВыполнитьОбработкуВКонтекстеСеанса(ПараметрыВызоваСервера, РезультатФоновогоЗадания.АдресХранилища); + Иначе + РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "ДополнительныеОтчетыИОбработки.ВыполнитьОбработкуВКонтекстеСеанса", + ПараметрыВызоваСервера, + НСтр("ru = 'Дополнительные отчеты и обработки: Выполнение серверного метода обработки'") + ); + КонецЕсли; + + Результат.ЗаданиеВыполнено = РезультатФоновогоЗадания.ЗаданиеВыполнено; + Результат.ВызваноИсключение = Ложь; + Если Результат.ЗаданиеВыполнено Тогда + РезультатРаботыМетода = ПолучитьИзВременногоХранилища(РезультатФоновогоЗадания.АдресХранилища); + Если РезультатРаботыМетода <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(Результат, РезультатРаботыМетода); + КонецЕсли; + Иначе + ФоновоеЗаданиеИдентификатор = РезультатФоновогоЗадания.ИдентификаторЗадания; + ФоновоеЗаданиеАдресХранилища = РезультатФоновогоЗадания.АдресХранилища; + КонецЕсли; + Исключение + Результат.ЗаданиеВыполнено = Ложь; + Результат.ВызваноИсключение = Истина; + КонецПопытки; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура ПоказатьРезультатВыполненияОбработки(Результат = Неопределено) + // Показать оповещение + Если ВыполняемаяОбработка.ПоказыватьОповещение Тогда + ОповещениеЗаголовок = НСтр("ru = 'Обработка выполнена'"); + ОповещениеТекст = ВыполняемаяОбработка.Представление; + ОповещениеКартинка = БиблиотекаКартинок.ВыполнитьЗадачу; + ПоказатьОповещениеПользователя(ОповещениеЗаголовок, , ОповещениеТекст, ОповещениеКартинка); + КонецЕсли; + + // Обновить измененные типы + Если Результат <> Неопределено + И Результат.Свойство("РезультатВыполнения") + И ТипЗнч(Результат.РезультатВыполнения) = Тип("Массив") Тогда + + Для Каждого ЭлементМассива Из Результат.РезультатВыполнения Цикл + ОповеститьОбИзменении(ЭлементМассива); + КонецЦикла; + + КонецЕсли; + + // Обновить форму владельца + Если ТипЗнч(ВладелецФормы) = Тип("УправляемаяФорма") Тогда + Попытка + ВладелецФормы.Прочитать(); + Исключение + КонецПопытки; + КонецЕсли; + + // Закрыть текущую форму + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьВыполнениеФоновогоЗадания() + Результат = ПроверитьВыполнениеФоновогоЗаданияНаСервере(ФоновоеЗаданиеИдентификатор, ФоновоеЗаданиеАдресХранилища); + Если Результат.ЗаданиеВыполнено Тогда + ПоказатьРезультатВыполненияОбработки(Результат); + ИначеЕсли Результат.ВызваноИсключение Тогда + // Изменение элементов формы + Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОткрытьОбработку; + Элементы.СтраницыКомандныеПанели.ТекущаяСтраница = Элементы.СтраницаКоманднаяПанельСтраницыОткрытьОбработку; + // Вывод сообщения об ошибке + Предупреждение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось выполнить обработку ""%1"". + |Подробности см. в журнале регистрации.'"), + ВыполняемаяОбработка.Представление + ) + ); + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчика); + ПодключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания", ПараметрыОбработчика.ТекущийИнтервал, Истина); + КонецЕсли; +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПроверитьВыполнениеФоновогоЗаданияНаСервере(ФоновоеЗаданиеИдентификатор, ФоновоеЗаданиеАдресХранилища) + Результат = Новый Структура("ВнешняяОбработкаСсылка, ИдентификаторКоманды, ОбъектыНазначения, РезультатВыполнения, ЗаданиеВыполнено, ВызваноИсключение"); + Попытка + Результат.ЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ФоновоеЗаданиеИдентификатор); + Результат.ВызваноИсключение = Ложь; + Если Результат.ЗаданиеВыполнено Тогда + РезультатРаботыМетода = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + Если РезультатРаботыМетода <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(Результат, РезультатРаботыМетода); + КонецЕсли; + КонецЕсли; + Исключение + Результат.ЗаданиеВыполнено = Ложь; + Результат.ВызваноИсключение = Истина; + КонецПопытки; + Возврат Результат; +КонецФункции diff --git a/SSL/src/CommonForms/ЗагрузкаДанныхВОбласть/Form.form b/SSL/src/CommonForms/ЗагрузкаДанныхВОбласть/Form.form new file mode 100644 index 000000000..8a0a1a935 --- /dev/null +++ b/SSL/src/CommonForms/ЗагрузкаДанныхВОбласть/Form.form @@ -0,0 +1,187 @@ + + + + ЗначениеРазделителя + 1 + + <key>ru</key> + <value>Область данных</value> + + true + true + + true + + + ЗначениеРазделителя + + + ЗначениеРазделителяРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + ЗначениеРазделителяКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ПродолжитьЗагрузкуДанных + 6 + + <key>ru</key> + <value>Продолжить</value> + + true + true + + true + + + ПродолжитьЗагрузкуДанныхРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + Form.Command.ПродолжитьЗагрузкуДанных + Auto + true + true + true + UserCmds + Auto + + + Отмена + 7 + true + true + + true + + + ОтменаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + Right + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + ЗначениеРазделителя + + <key>ru</key> + <value>Значение разделителя</value> + + 1 + + Number + + 7 + true + + + + true + + + true + + + + АдресВХранилище + + <key>ru</key> + <value>Адрес в хранилище</value> + + 3 + + String + + + + true + + + true + + + + ПродолжитьЗагрузкуДанных + + <key>ru</key> + <value>Продолжить загрузку данных</value> + + 3 + + ru + Продолжить загрузку данных + + + true + + + + ПродолжитьЗагрузкуДанных + + + Auto + Auto + + + + + + diff --git a/SSL/src/CommonForms/ЗагрузкаДанныхВОбласть/Module.bsl b/SSL/src/CommonForms/ЗагрузкаДанныхВОбласть/Module.bsl new file mode 100644 index 000000000..f6f97bf6a --- /dev/null +++ b/SSL/src/CommonForms/ЗагрузкаДанныхВОбласть/Module.bsl @@ -0,0 +1,99 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ПродолжитьЗагрузкуДанных(Команда) + + Если РазделительСуществует(ЗначениеРазделителя) Тогда + Текст = НСтр("ru = 'Указанная область данных существует. Загрузка может привести к порче текущих данных. + |Продолжить загрузку?'"); + Результат = Вопрос(Текст, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + + Если Результат = КодВозвратаДиалога.Нет Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + АдресВХранилище = Неопределено; + Если НЕ ПоместитьФайл(АдресВХранилище) Тогда + Возврат; + КонецЕсли; + + Состояние(НСтр("ru = 'Выполняется загрузка данных в область'")); + Попытка + ЗагрузитьДанныеНаСервере(АдресВХранилище, ЗначениеРазделителя); + + Пользователи.АвторизоватьТекущегоПользователя(); + + ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(Истина); + + Отказ = Ложь; + + СтандартныеПодсистемыКлиент.ДействияПередНачаломРаботыСистемы(Отказ); + + Если Отказ Тогда + Предупреждение(НСтр("ru = 'Загрузка данных завершена с ошибками'")); + Возврат; + КонецЕсли; + + СтандартныеПодсистемыКлиент.ДействияПриНачалеРаботыСистемы(); + + Состояние(НСтр("ru = 'Загрузка данных завершена успешно'")); + Исключение + Предупреждение(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЗагрузитьДанныеНаСервере(Знач АдресВХранилище, ЗначениеРазделителя) + + ДанныеАрхива = ПолучитьИзВременногоХранилища(АдресВХранилище); + ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); + ДанныеАрхива.Записать(ИмяАрхива); + ДанныеАрхива = Неопределено; + + УстановитьПривилегированныйРежим(Истина); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ЗначениеРазделителя); + + Если НЕ РазделительСуществует(ЗначениеРазделителя) Тогда + МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = ЗначениеРазделителя; + МенеджерЗаписи.Представление = ЗначениеРазделителя; + МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Используется; + МенеджерЗаписи.Записать(); + КонецЕсли; + + ВыгрузкаЗагрузкаДанных.ЗагрузитьТекущуюОбластьИзАрхива(ИмяАрхива); + + Попытка + УдалитьФайлы(ИмяАрхива); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Удаление временных файлов'"), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецПроцедуры + +&НаСервере +Функция РазделительСуществует(ЗначениеРазделителя) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбластиДанных.ОбластьДанных + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + |ГДЕ + | ОбластиДанных.ОбластьДанных = &ОбластьДанных"; + Запрос.УстановитьПараметр("ОбластьДанных", ЗначениеРазделителя); + + Возврат НЕ Запрос.Выполнить().Пустой(); + +КонецФункции diff --git a/SSL/src/CommonForms/ЗагрузкаДанныхВОбласть/ЗагрузкаДанныхВОбласть.mdo b/SSL/src/CommonForms/ЗагрузкаДанныхВОбласть/ЗагрузкаДанныхВОбласть.mdo new file mode 100644 index 000000000..ef16eba4e --- /dev/null +++ b/SSL/src/CommonForms/ЗагрузкаДанныхВОбласть/ЗагрузкаДанныхВОбласть.mdo @@ -0,0 +1,11 @@ + + + ЗагрузкаДанныхВОбласть + + ru + Загрузка данных в область + + PersonalComputer + MobileDevice + true + diff --git a/SSL/src/CommonForms/ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации/Module.bsl b/SSL/src/CommonForms/ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации/Module.bsl index d33484e50..8fb39ca57 100644 --- a/SSL/src/CommonForms/ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации/Module.bsl +++ b/SSL/src/CommonForms/ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации/Module.bsl @@ -1,4 +1,3 @@ - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -27,7 +26,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ВыполнитьЗагрузкуДанных(Команда) diff --git a/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/Form.form b/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/Form.form new file mode 100644 index 000000000..037b37ea9 --- /dev/null +++ b/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/Form.form @@ -0,0 +1,105 @@ + + + + НеразделенныйПользователь + 1 + + <key>ru</key> + <value>Неразделенный пользователь</value> + + true + true + + true + + + НеразделенныйПользовательРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + НеразделенныйПользовательКонтекстноеМеню + 2 + true + + Label + true + true + + Left + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + UseIfNecessary + auto + true + + + + DocumentJournal.Взаимодействия.Command.ВзаимодействияПоПредмету + + + + CommonCommand.ЗадачиПоПредмету + + + + 0 + + + + 0 + + + + + + 0 + + + + BusinessProcess.Задание.StandardCommand.CreateBasedOn + + + + DocumentJournal.Взаимодействия.Command.ЗапланироватьВзаимодействие + + + + DocumentJournal.Взаимодействия.Command.ЗапланироватьВстречу + + + + DocumentJournal.Взаимодействия.Command.НаписатьЭлектронноеПисьмо + + + + DocumentJournal.Взаимодействия.Command.Позвонить + + + + + diff --git a/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/Module.bsl b/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/Module.bsl new file mode 100644 index 000000000..476cc7b6b --- /dev/null +++ b/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/Module.bsl @@ -0,0 +1,18 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ШаблонСообщения = НСтр("ru = 'Просмотр сведений о пользователе %1 не доступен, т.к. это + |служебная учетная запись, предусмотренная для администраторов сервиса.'"); + Элементы.НеразделенныйПользователь.Заголовок = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Параметры.Ключ.Наименование); + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/ИнформацияНеразделенногоПользователя.mdo b/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/ИнформацияНеразделенногоПользователя.mdo new file mode 100644 index 000000000..c03a4f2cf --- /dev/null +++ b/SSL/src/CommonForms/ИнформацияНеразделенногоПользователя/ИнформацияНеразделенногоПользователя.mdo @@ -0,0 +1,11 @@ + + + ИнформацияНеразделенногоПользователя + + ru + Информация неразделенного пользователя + + PersonalComputer + MobileDevice + true + diff --git a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl index 9fb089b8c..09f5fba68 100644 --- a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl +++ b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl @@ -1,150 +1,6 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - // Отвечает за построение формы заполнения - &НаСервере - Процедура ПостроениеФормыСогласноРаздела() - - //определение выбранного раздела - ТекущиеДанныеДеревоРазделов = ДеревоРазделов.НайтиПоИдентификатору(Элементы.ДеревоРазделов.ТекущаяСтрока); - Если ТекущиеДанныеДеревоРазделов = Неопределено Тогда - Возврат; - КонецЕсли; - - НомерТекущегоРаздела = Элементы.ДеревоРазделов.ТекущаяСтрока; - Анкетирование.ПостроениеФормыЗаполненияПоРазделу(ЭтаФорма,ТекущиеДанныеДеревоРазделов); - Анкетирование.СформироватьТаблицуПодчиненияВопросов(ЭтаФорма); - - Элементы.ПредыдущийРазделПодвал.Видимость = (ТаблицаВопросовРаздела.Количество() > 0); - Элементы.СледующийРазделПодвал.Видимость = (ТаблицаВопросовРаздела.Количество() > 0); - - КонецПроцедуры // () - - // Начинает процесс построения формы заполнения согласно разделам - &НаКлиенте - Процедура ВыполнитьПостроениеФормыЗаполнения() - - Элементы.ГруппаСтраницыФормаЗаполнения.ТекущаяСтраница = Элементы.СтраницаОжидание; - ПодключитьОбработчикОжидания("ОкончаниеПостроенияФормыЗаполнения",0.1,Истина); - - КонецПроцедуры // - -// Заканчивает формирование формы заполнения анкеты - &НаКлиенте - Процедура ОкончаниеПостроенияФормыЗаполнения() - - ПостроениеФормыСогласноРаздела(); - УправлениеДоступностьюПодчиненныеВопросы(); - Элементы.ГруппаСтраницыФормаЗаполнения.ТекущаяСтраница = Элементы.ГруппаТелоАнкеты; - УправлениеДоступностьюКнопкиНавигацияРазделов(); - - КонецПроцедуры // () - - // Отвечает за доступность кнопок навигации по разделам - &НаКлиенте - Процедура УправлениеДоступностьюКнопкиНавигацияРазделов() - - Элементы.ПредыдущийРаздел.Доступность = (Элементы.ДеревоРазделов.ТекущаяСтрока <> 0); - Элементы.ПредыдущийРазделПодвал.Доступность = (Элементы.ДеревоРазделов.ТекущаяСтрока > 0); - Элементы.СледующийРаздел.Доступность = (ДеревоРазделов.НайтиПоИдентификатору(Элементы.ДеревоРазделов.ТекущаяСтрока + 1) <> Неопределено); - Элементы.СледующийРазделПодвал.Доступность = (ДеревоРазделов.НайтиПоИдентификатору(Элементы.ДеревоРазделов.ТекущаяСтрока + 1) <> Неопределено); - - КонецПроцедуры - - // Изменяет текущий раздел - &НаКлиенте - Процедура ИзменитьРаздел(Направление) - - Элементы.ДеревоРазделов.ТекущаяСтрока = НомерТекущегоРаздела + ?(Направление = "Вперед",1,-1); - НомерТекущегоРаздела = НомерТекущегоРаздела + ?(Направление = "Вперед",1,-1); - ТекущиеДанныеДеревоРазделов = ДеревоРазделов.НайтиПоИдентификатору(Элементы.ДеревоРазделов.ТекущаяСтрока); - Если ТекущиеДанныеДеревоРазделов.КоличествоВопросов = 0 И ТекущиеДанныеДеревоРазделов.ТипСтроки = "Раздел" Тогда - ИзменитьРаздел(Направление); - КонецЕсли; - ВыполнитьПостроениеФормыЗаполнения(); - -КонецПроцедуры // - -// Изменяет видимость дерева разделов -&НаКлиенте -Процедура ИзменитьВидимостьДеревоРазделов() - - Элементы.ГруппаДеревоРазделов.Видимость = НЕ Элементы.ГруппаДеревоРазделов.Видимость; - Элементы.СкрытьПоказатьДеревоРазделов.Заголовок = ?(Элементы.ГруппаДеревоРазделов.Видимость,"Скрыть разделы","Показать разделы"); - Элементы.ДекорацияОжиданиеЭлементы.Ширина = ?(Элементы.ГруппаДеревоРазделов.Видимость,20,45); - -КонецПроцедуры - -//Управляет доступностью элементов формы -&НаКлиенте -Процедура УправлениеДоступностьюПодчиненныеВопросы() - - Для каждого ЭлементКоллекции Из ПодчиненныеВопросы Цикл - - ИмяВопроса = АнкетированиеКлиентСервер.ПолучитьИмяВопроса(ЭлементКоллекции.Вопрос); - - Для каждого ПодчиненныйВопрос Из ЭлементКоллекции.Подчиненные Цикл - - Элементы[ПодчиненныйВопрос.ИмяЭлементаПодчиненногоВопроса].ТолькоПросмотр = (НЕ ЭтаФорма[ИмяВопроса]); - Если СтрЧислоВхождений(ПодчиненныйВопрос.ИмяЭлементаПодчиненногоВопроса,"Реквизит") = 0 Тогда - - //У флажка и переключателя нет свойства АвтоотметкаНезаполенного. - Попытка - Элементы[ПодчиненныйВопрос.ИмяЭлементаПодчиненногоВопроса].АвтоотметкаНезаполненного = (ЭтаФорма[ИмяВопроса] И ПодчиненныйВопрос.Обязательный); - Исключение - КонецПопытки; - - КонецЕсли; - КонецЦикла; - КонецЦикла; - -КонецПроцедуры // УправлениеДоступностью() - -//////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ - -&НаКлиенте -Процедура СкрытьПоказатьДеревоРазделов(Команда) - - ИзменитьВидимостьДеревоРазделов(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПредыдущийРаздел(Команда) - - ИзменитьРаздел("Назад"); - -КонецПроцедуры - -&НаКлиенте -Процедура СледующийРаздел(Команда) - - ИзменитьРаздел("Вперед"); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыборРаздела(Команда) - - ВыполнитьПостроениеФормыЗаполнения(); - УправлениеДоступностьюКнопкиНавигацияРазделов(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -// Устанавливает значения реквзитов формы, определенных в шаблоне анкеты -// -&НаСервере -Процедура УстановитьЗначенияРеквзитовФормыСогласноШаблонаАнкеты() - - РеквизитыШаблонАнкеты = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ШаблонАнкеты,"Заголовок,Вступление,Заключение"); - ЗаполнитьЗначенияСвойств(ЭтаФорма,РеквизитыШаблонАнкеты); - -КонецПроцедуры // () - &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -179,8 +35,8 @@ КонецПроцедуры -////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ДеревоРазделовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -192,14 +48,156 @@ ВыполнитьПостроениеФормыЗаполнения(); УправлениеДоступностьюКнопкиНавигацияРазделов(); - + КонецПроцедуры - -//Обработчик события ПриИзменении для вопросов с условием - &НаКлиенте + +&НаКлиенте Процедура Подключаемый_ПриИзмененииВопросовСУсловием(Элемент) - УправлениеДоступностьюПодчиненныеВопросы(); + УправлениеДоступностьюПодчиненныеВопросы(); -КонецПроцедуры // () - \ No newline at end of file +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура СкрытьПоказатьДеревоРазделов(Команда) + + ИзменитьВидимостьДеревоРазделов(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПредыдущийРаздел(Команда) + + ИзменитьРаздел("Назад"); + +КонецПроцедуры + +&НаКлиенте +Процедура СледующийРаздел(Команда) + + ИзменитьРаздел("Вперед"); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыборРаздела(Команда) + + ВыполнитьПостроениеФормыЗаполнения(); + УправлениеДоступностьюКнопкиНавигацияРазделов(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Отвечает за построение формы заполнения +&НаСервере +Процедура ПостроениеФормыСогласноРаздела() + + //определение выбранного раздела + ТекущиеДанныеДеревоРазделов = ДеревоРазделов.НайтиПоИдентификатору(Элементы.ДеревоРазделов.ТекущаяСтрока); + Если ТекущиеДанныеДеревоРазделов = Неопределено Тогда + Возврат; + КонецЕсли; + + НомерТекущегоРаздела = Элементы.ДеревоРазделов.ТекущаяСтрока; + Анкетирование.ПостроениеФормыЗаполненияПоРазделу(ЭтаФорма,ТекущиеДанныеДеревоРазделов); + Анкетирование.СформироватьТаблицуПодчиненияВопросов(ЭтаФорма); + + Элементы.ПредыдущийРазделПодвал.Видимость = (ТаблицаВопросовРаздела.Количество() > 0); + Элементы.СледующийРазделПодвал.Видимость = (ТаблицаВопросовРаздела.Количество() > 0); + +КонецПроцедуры + +// Начинает процесс построения формы заполнения согласно разделам +&НаКлиенте +Процедура ВыполнитьПостроениеФормыЗаполнения() + + Элементы.ГруппаСтраницыФормаЗаполнения.ТекущаяСтраница = Элементы.СтраницаОжидание; + ПодключитьОбработчикОжидания("ОкончаниеПостроенияФормыЗаполнения",0.1,Истина); + +КонецПроцедуры + +// Заканчивает формирование формы заполнения анкеты +&НаКлиенте +Процедура ОкончаниеПостроенияФормыЗаполнения() + + ПостроениеФормыСогласноРаздела(); + УправлениеДоступностьюПодчиненныеВопросы(); + Элементы.ГруппаСтраницыФормаЗаполнения.ТекущаяСтраница = Элементы.ГруппаТелоАнкеты; + УправлениеДоступностьюКнопкиНавигацияРазделов(); + + КонецПроцедуры // () + +// Отвечает за доступность кнопок навигации по разделам +&НаКлиенте +Процедура УправлениеДоступностьюКнопкиНавигацияРазделов() + + Элементы.ПредыдущийРаздел.Доступность = (Элементы.ДеревоРазделов.ТекущаяСтрока <> 0); + Элементы.ПредыдущийРазделПодвал.Доступность = (Элементы.ДеревоРазделов.ТекущаяСтрока > 0); + Элементы.СледующийРаздел.Доступность = (ДеревоРазделов.НайтиПоИдентификатору(Элементы.ДеревоРазделов.ТекущаяСтрока + 1) <> Неопределено); + Элементы.СледующийРазделПодвал.Доступность = (ДеревоРазделов.НайтиПоИдентификатору(Элементы.ДеревоРазделов.ТекущаяСтрока + 1) <> Неопределено); + +КонецПроцедуры + +// Изменяет текущий раздел +&НаКлиенте +Процедура ИзменитьРаздел(Направление) + + Элементы.ДеревоРазделов.ТекущаяСтрока = НомерТекущегоРаздела + ?(Направление = "Вперед",1,-1); + НомерТекущегоРаздела = НомерТекущегоРаздела + ?(Направление = "Вперед",1,-1); + ТекущиеДанныеДеревоРазделов = ДеревоРазделов.НайтиПоИдентификатору(Элементы.ДеревоРазделов.ТекущаяСтрока); + Если ТекущиеДанныеДеревоРазделов.КоличествоВопросов = 0 И ТекущиеДанныеДеревоРазделов.ТипСтроки = "Раздел" Тогда + ИзменитьРаздел(Направление); + КонецЕсли; + ВыполнитьПостроениеФормыЗаполнения(); + +КонецПроцедуры + +// Изменяет видимость дерева разделов +&НаКлиенте +Процедура ИзменитьВидимостьДеревоРазделов() + + Элементы.ГруппаДеревоРазделов.Видимость = НЕ Элементы.ГруппаДеревоРазделов.Видимость; + Элементы.СкрытьПоказатьДеревоРазделов.Заголовок = ?(Элементы.ГруппаДеревоРазделов.Видимость,"Скрыть разделы","Показать разделы"); + Элементы.ДекорацияОжиданиеЭлементы.Ширина = ?(Элементы.ГруппаДеревоРазделов.Видимость,20,45); + +КонецПроцедуры + +//Управляет доступностью элементов формы +&НаКлиенте +Процедура УправлениеДоступностьюПодчиненныеВопросы() + + Для каждого ЭлементКоллекции Из ПодчиненныеВопросы Цикл + + ИмяВопроса = АнкетированиеКлиентСервер.ПолучитьИмяВопроса(ЭлементКоллекции.Вопрос); + + Для каждого ПодчиненныйВопрос Из ЭлементКоллекции.Подчиненные Цикл + + Элементы[ПодчиненныйВопрос.ИмяЭлементаПодчиненногоВопроса].ТолькоПросмотр = (НЕ ЭтаФорма[ИмяВопроса]); + Если СтрЧислоВхождений(ПодчиненныйВопрос.ИмяЭлементаПодчиненногоВопроса,"Реквизит") = 0 Тогда + + //У флажка и переключателя нет свойства АвтоотметкаНезаполенного. + Попытка + Элементы[ПодчиненныйВопрос.ИмяЭлементаПодчиненногоВопроса].АвтоотметкаНезаполненного = (ЭтаФорма[ИмяВопроса] И ПодчиненныйВопрос.Обязательный); + Исключение + КонецПопытки; + + КонецЕсли; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +// Устанавливает значения реквзитов формы, определенных в шаблоне анкеты +// +&НаСервере +Процедура УстановитьЗначенияРеквзитовФормыСогласноШаблонаАнкеты() + + РеквизитыШаблонАнкеты = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ШаблонАнкеты,"Заголовок,Вступление,Заключение"); + ЗаполнитьЗначенияСвойств(ЭтаФорма,РеквизитыШаблонАнкеты); + +КонецПроцедуры diff --git a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form index a8140437a..82ec8862f 100644 --- a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form +++ b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form @@ -625,7 +625,11 @@ OnCreateAtServer ПриСозданииНаСервере - DontBlock + + OnClose + ПриЗакрытии + + LockOwner true true true @@ -706,15 +710,14 @@ - ИмяРаздела + Раздел <key>ru</key> - <value>Имя раздела</value> + <value>Раздел</value> 4 - String - + CatalogRef.ИдентификаторыОбъектовМетаданных true @@ -794,15 +797,14 @@ - ИмяРаздела + Раздел <key>ru</key> - <value>Имя раздела</value> + <value>Раздел</value> 4 - String - + CatalogRef.ИдентификаторыОбъектовМетаданных true @@ -993,8 +995,7 @@ ТекущийРаздел - String - + CatalogRef.ИдентификаторыОбъектовМетаданных diff --git a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl index 3395bbbc9..4af7391ba 100644 --- a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl +++ b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl @@ -4,9 +4,12 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ВидОбработок = Параметры.ВидОбработок; - ЭтоГлобальныеОбработки = Параметры.ЭтоГлобальныеОбработки; - ТекущийРаздел = Параметры.ТекущийРаздел; + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ЭтаФорма, Параметры, "ВидОбработок, ЭтоГлобальныеОбработки, ТекущийРаздел"); ЗаполнитьДеревоОбработок(Истина, "МоиКоманды"); ЗаполнитьДеревоОбработок(Ложь, "КомандыИсточник"); @@ -15,19 +18,23 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - Если Модифицированность Тогда - Результат = Вопрос(НСтр("ru = 'Настройки были изменены. Сохранить изменения?'"), РежимДиалогаВопрос.ДаНетОтмена); - Если Результат = КодВозвратаДиалога.Да Тогда - ЗаписатьНаборОбработокПользователя(); - Модифицированность = Ложь; - Закрыть(Истина); - ИначеЕсли Результат <> КодВозвратаДиалога.Нет Тогда - Отказ = Истина; - КонецЕсли; + Если ДополнительныеОтчетыИОбработкиКлиент.СохранитьДанныеПроизвольнойФормы(Отказ, Модифицированность) Тогда + ЗаписатьНаборОбработокПользователя(); + ОповеститьОВыборе("ВыполненаНастройкаМоихОтчетовИОбработок"); КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + Если ДополнительныеОтчетыИОбработкиКлиент.СохранитьДанныеПроизвольнойФормы(, Модифицированность) Тогда + ЗаписатьНаборОбработокПользователя(); + ОповеститьОВыборе("ВыполненаНастройкаМоихОтчетовИОбработок"); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ДобавитьКоманду(Команда) @@ -57,7 +64,7 @@ КомандыИсточникЭлементы = КомандыИсточник.ПолучитьЭлементы(); Для Каждого СтрокаРазделы Из КомандыИсточникЭлементы Цикл - ЭлементРаздел = НайтиЭлементРаздел(МоиКоманды, СтрокаРазделы.ИмяРаздела, СтрокаРазделы.Наименование); + ЭлементРаздел = НайтиЭлементРаздел(МоиКоманды, СтрокаРазделы.Раздел, СтрокаРазделы.Наименование); ЭлементыКоманды = СтрокаРазделы.ПолучитьЭлементы(); Для Каждого ЭлементКоманда Из ЭлементыКоманды Цикл НоваяКоманда = НайтиЭлементКоманду(ЭлементРаздел.ПолучитьЭлементы(), ЭлементКоманда.Идентификатор); @@ -79,85 +86,72 @@ &НаКлиенте Процедура ОК(Команда) - ЗаписатьНаборОбработокПользователя(); - Модифицированность = Ложь; - Закрыть(Истина); - + ОповеститьОВыборе("ВыполненаНастройкаМоихОтчетовИОбработок"); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Функция ЗаполнитьДеревоОбработок(КомандыПользователя, ИмяЭлементыРеквизитаДерева) Запрос = Новый Запрос; - ТекстЗапроса = " - |ВЫБРАТЬ"; + ТекстЗапроса = + "ВЫБРАТЬ + | ДОИО.Ссылка КАК Обработка, + | КомандыДОИО.Представление КАК Наименование, + | РазделыДОИО.Раздел КАК Раздел, + | КомандыДОИО.Идентификатор КАК Идентификатор + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки КАК ДОИО + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК КомандыДОИО + | ПО ДОИО.Ссылка = КомандыДОИО.Ссылка + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Разделы КАК РазделыДОИО + | ПО ДОИО.Ссылка = РазделыДОИО.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам КАК ДоступДОИО + | ПО ДОИО.Ссылка = ДоступДОИО.ДополнительныйОтчетИлиОбработка + | И (ДоступДОИО.ИдентификаторКоманды = КомандыДОИО.Идентификатор) + | И (ДоступДОИО.Пользователь = &Пользователь) + |ГДЕ + | ДОИО.Вид = &ВидОбработок + | И НЕ ДОИО.ПометкаУдаления + | И ДОИО.Публикация В(&ВариантыПубликации) + | И ДоступДОИО.Доступно + |ИТОГИ ПО + | &ИтогиПоРаздел"; Если ЭтоГлобальныеОбработки Тогда - ТекстЗапроса = ТекстЗапроса + " - | ДополнительныеОтчетыИОбработкиРазделы.ИмяРаздела КАК ИмяРаздела,"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИтогиПоРаздел", "Раздел"); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ДополнительныеОтчетыИОбработкиРазделы.Раздел КАК Раздел,", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Разделы КАК РазделыДОИО", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПО ДОИО.Ссылка = РазделыДОИО.Ссылка", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ИТОГИ ПО", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИтогиПоРаздел", ""); КонецЕсли; - ТекстЗапроса = ТекстЗапроса + " - | ДополнительныеОтчетыИОбработкиКоманды.Представление КАК Наименование, - | ДополнительныеОтчетыИОбработкиКоманды.Идентификатор КАК Идентификатор, - | ДополнительныеОтчетыИОбработки.Ссылка КАК Обработка - |ИЗ - | Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки - | СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК ДополнительныеОтчетыИОбработкиКоманды - | ПО ДополнительныеОтчетыИОбработкиКоманды.Ссылка = ДополнительныеОтчетыИОбработки.Ссылка"; - - Если ЭтоГлобальныеОбработки Тогда - ТекстЗапроса = ТекстЗапроса + " - | СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Разделы КАК ДополнительныеОтчетыИОбработкиРазделы - | ПО ДополнительныеОтчетыИОбработкиРазделы.Ссылка = ДополнительныеОтчетыИОбработки.Ссылка"; + Если НЕ КомандыПользователя Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам КАК ДоступДОИО", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПО ДОИО.Ссылка = ДоступДОИО.ДополнительныйОтчетИлиОбработка", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ДоступДОИО.ИдентификаторКоманды = КомандыДОИО.Идентификатор)", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ДоступДОИО.Пользователь = &Пользователь)", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И ДоступДОИО.Доступно", ""); КонецЕсли; - Если КомандыПользователя Тогда - ТекстЗапроса = ТекстЗапроса + " - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам КАК ПользовательскиеНастройкиДоступаКОбработкам - | ПО ПользовательскиеНастройкиДоступаКОбработкам.ДополнительныйОтчетИлиОбработка = ДополнительныеОтчетыИОбработки.Ссылка - | И ПользовательскиеНастройкиДоступаКОбработкам.ИдентификаторКоманды = ДополнительныеОтчетыИОбработкиКоманды.Идентификатор - | И ПользовательскиеНастройкиДоступаКОбработкам.Пользователь = &Пользователь"; + ВариантыПубликации = Новый Массив; + ВариантыПубликации.Добавить(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется); + Если Пользователи.РолиДоступны("ДобавлениеИзменениеДополнительныхОтчетовИОбработок") Тогда + ВариантыПубликации.Добавить(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки); КонецЕсли; - ТекстЗапроса = ТекстЗапроса + " - |ГДЕ - | ДополнительныеОтчетыИОбработки.Вид = &ВидОбработок - | И НЕ ДополнительныеОтчетыИОбработки.ПометкаУдаления - | И ( - | ДополнительныеОтчетыИОбработки.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется)"; - - Если РольДоступна(Метаданные.Роли.ДобавлениеИзменениеДополнительныхОтчетовИОбработок) - ИЛИ РольДоступна(Метаданные.Роли.ПолныеПрава) Тогда - ТекстЗапроса = ТекстЗапроса + " - | ИЛИ ДополнительныеОтчетыИОбработки.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки)"; - КонецЕсли; - - ТекстЗапроса = ТекстЗапроса + " - | )"; - - Если КомандыПользователя Тогда - ТекстЗапроса = ТекстЗапроса + " - | И ПользовательскиеНастройкиДоступаКОбработкам.Доступно"; - КонецЕсли; - - Если ЭтоГлобальныеОбработки Тогда - ТекстЗапроса = ТекстЗапроса + " - |ИТОГИ ПО - | ИмяРаздела"; - КонецЕсли; - - Запрос.Параметры.Вставить("Пользователь", ОбщегоНазначения.ТекущийПользователь()); + Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); + Запрос.УстановитьПараметр("ВариантыПубликации", ВариантыПубликации); + Запрос.УстановитьПараметр("ВидОбработок", ВидОбработок); Запрос.Текст = ТекстЗапроса; - Запрос.Параметры.Вставить("ВидОбработок", ВидОбработок); - Если ЭтоГлобальныеОбработки Тогда ДеревоКоманд = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); Иначе @@ -173,9 +167,9 @@ Если ЭтоГлобальныеОбработки Тогда Для Каждого СтрокаРазделы Из ДеревоКоманд.Строки Цикл СтрокаВерхнегоУровня = КомандыДерево.Строки.Добавить(); - СтрокаВерхнегоУровня.ИмяРаздела = СтрокаРазделы.ИмяРаздела; - СтрокаВерхнегоУровня.Наименование = ДополнительныеОтчетыИОбработки.ПолучитьИмяРабочегоМеста(СтрокаРазделы.ИмяРаздела); - Если СтрокаВерхнегоУровня.ИмяРаздела = ТекущийРаздел Тогда + СтрокаВерхнегоУровня.Раздел = СтрокаРазделы.Раздел; + СтрокаВерхнегоУровня.Наименование = ДополнительныеОтчетыИОбработки.ПолучитьИмяРабочегоМеста(СтрокаРазделы.Раздел); + Если СтрокаВерхнегоУровня.Раздел = ТекущийРаздел Тогда СобственныйИндекс = Индекс; КонецЕсли; Для Каждого СтрокаКоманды Из СтрокаРазделы.Строки Цикл @@ -212,7 +206,7 @@ Если ЭтоГлобальныеОбработки Тогда Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл - ЭлементРаздел = НайтиЭлементРаздел(МоиКоманды, НайденнаяСтрока.ИмяРаздела, НайденнаяСтрока.Родитель.Наименование); + ЭлементРаздел = НайтиЭлементРаздел(МоиКоманды, НайденнаяСтрока.Раздел, НайденнаяСтрока.Родитель.Наименование); НоваяКоманда = ЭлементРаздел.ПолучитьЭлементы().Добавить(); ЗаполнитьЗначенияСвойств(НоваяКоманда, НайденнаяСтрока); КонецЦикла; @@ -281,12 +275,12 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Функция НайтиЭлементРаздел(ДанныеФормыКоманды, ИмяРаздела, Наименование) +Функция НайтиЭлементРаздел(ДанныеФормыКоманды, Раздел, Наименование) Результат = Неопределено; Для Каждого ЭлементДанных Из ДанныеФормыКоманды.ПолучитьЭлементы() Цикл - Если ЭлементДанных.ИмяРаздела = ИмяРаздела Тогда + Если ЭлементДанных.Раздел = Раздел Тогда Результат = ЭлементДанных; Прервать; КонецЕсли; @@ -294,7 +288,7 @@ Если Результат = Неопределено Тогда НовыйРаздел = ДанныеФормыКоманды.ПолучитьЭлементы().Добавить(); - НовыйРаздел.ИмяРаздела = ИмяРаздела; + НовыйРаздел.Раздел = Раздел; НовыйРаздел.Наименование = Наименование; Результат = НовыйРаздел; КонецЕсли; @@ -325,7 +319,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// БЛОК РАБОТЫ С ЗАПИСЯМИ РЕГИСТРА ПОЛЬЗОВАТЕЛЬСКОЙ ДОСТУПНОСТИ ОБРАБОТОК +// Работа с регистром ПользовательскиеНастройкиДоступаКОбработкам &НаСервере Процедура ЗаписатьНаборОбработокПользователя() @@ -397,6 +391,7 @@ ВызватьИсключение; КонецПопытки; + Модифицированность = Ложь; КонецПроцедуры &НаСервереБезКонтекста @@ -410,3 +405,4 @@ КонецФункции + diff --git a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Form.form b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Form.form new file mode 100644 index 000000000..4d230587c --- /dev/null +++ b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Form.form @@ -0,0 +1,1596 @@ + + + + СписокСостоянияУзлов + 1 + true + true + + true + + + СписокСостоянияУзлов + + None + Add + Change + Copy + Delete + EndEdit + MoveDown + MoveUp + SelectAll + SortListAsc + SortListDesc + + СписокСостоянияУзловГруппаОсновная + 44 + + СписокСостоянияУзловВедущая + 45 + true + true + + true + + + СписокСостоянияУзлов.Ведущая + + None + + СписокСостоянияУзловВедущаяРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + + СписокСостоянияУзловВедущаяКонтекстноеМеню + 46 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + CommonPicture.ВедущаяКонечнаяТочка + + + + 1 + + + + + СписокСостоянияУзловУзелИнформационнойБазы + 10 + true + true + + true + + + СписокСостоянияУзлов.УзелИнформационнойБазы + + + СписокСостоянияУзловУзелИнформационнойБазыРасширеннаяПодсказка + 83 + Label + true + true + + Left + + + + СписокСостоянияУзловУзелИнформационнойБазыКонтекстноеМеню + 11 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + ru + Список состояния узлов группа основная + + + СписокСостоянияУзловГруппаОсновнаяРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ГруппаСостоянияЗагрузки + 18 + + СписокСостоянияУзловРезультатПоследнейЗагрузкиДанных + 8 + true + true + + true + + + СписокСостоянияУзлов.РезультатПоследнейЗагрузкиДанных + + None + + СписокСостоянияУзловРезультатПоследнейЗагрузкиДанныхРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + + СписокСостоянияУзловРезультатПоследнейЗагрузкиДанныхКонтекстноеМеню + 9 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + CommonPicture.СостояниеОбменаДанными + + + + 1 + + + + + СписокСостоянияУзловДатаПоследнейЗагрузки + 14 + true + true + + true + + + СписокСостоянияУзлов.ДатаПоследнейЗагрузки + + + СписокСостоянияУзловДатаПоследнейЗагрузкиРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + + СписокСостоянияУзловДатаПоследнейЗагрузкиКонтекстноеМеню + 15 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа состояния загрузки</value> + + + ru + Группа состояния загрузки + + + ГруппаСостоянияЗагрузкиРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СписокСостоянияУзловДатаПоследнейУспешнойЗагрузки + 12 + true + + true + + + СписокСостоянияУзлов.ДатаПоследнейУспешнойЗагрузки + + + СписокСостоянияУзловДатаПоследнейУспешнойЗагрузкиРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + СписокСостоянияУзловДатаПоследнейУспешнойЗагрузкиКонтекстноеМеню + 13 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаСостоянияВыгрузки + 19 + + СписокСостоянияУзловРезультатПоследнейВыгрузкиДанных + 6 + true + true + + true + + + СписокСостоянияУзлов.РезультатПоследнейВыгрузкиДанных + + None + + СписокСостоянияУзловРезультатПоследнейВыгрузкиДанныхРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + СписокСостоянияУзловРезультатПоследнейВыгрузкиДанныхКонтекстноеМеню + 7 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + CommonPicture.СостояниеОбменаДанными + + + + 1 + + + + + СписокСостоянияУзловДатаПоследнейВыгрузки + 16 + true + true + + true + + + СписокСостоянияУзлов.ДатаПоследнейВыгрузки + + + СписокСостоянияУзловДатаПоследнейВыгрузкиРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + СписокСостоянияУзловДатаПоследнейВыгрузкиКонтекстноеМеню + 17 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа состояния выгрузки</value> + + + ru + Группа состояния выгрузки + + + ГруппаСостоянияВыгрузкиРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СписокСостоянияУзловДатаПоследнейУспешнойВыгрузки + 4 + true + + true + + + СписокСостоянияУзлов.ДатаПоследнейУспешнойВыгрузки + + + СписокСостоянияУзловДатаПоследнейУспешнойВыгрузкиРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + + СписокСостоянияУзловДатаПоследнейУспешнойВыгрузкиКонтекстноеМеню + 5 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СписокСостоянияУзловКоманднаяПанель + 3 + + СписокСостоянияУзловПодключитьКонечнуюТочку + 22 + true + true + + true + + + СписокСостоянияУзловПодключитьКонечнуюТочкуРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Form.Command.ПодключитьКонечнуюТочку + Normal + Auto + true + true + UserCmds + Auto + + + СписокСостоянияУзловНастроитьПодписки + 47 + true + true + + true + + + СписокСостоянияУзловНастроитьПодпискиРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + Form.Command.НастроитьПодписки + Normal + Auto + true + true + UserCmds + Auto + + + СписокСостоянияУзловИзменитьКонечнуюТочку + 31 + true + true + + true + + + СписокСостоянияУзловИзменитьКонечнуюТочкуРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + Form.Command.ИзменитьКонечнуюТочку + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокСостоянияУзловОтправитьИПолучитьСообщенияСейчас + 30 + + СписокСостоянияУзловОтправитьИПолучитьСообщения + 21 + true + true + + true + + + СписокСостоянияУзловОтправитьИПолучитьСообщенияРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + Form.Command.ОтправитьИПолучитьСообщения + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ru + Список состояния узлов отправить и получить сообщения сейчас + + + СписокСостоянияУзловОтправитьИПолучитьСообщенияСейчасРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + + + СписокСостоянияУзловГруппа1 + 27 + + СписокСостоянияУзловНайти + 23 + true + true + + true + + + СписокСостоянияУзловНайтиРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + Form.Item.СписокСостоянияУзлов.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокСостоянияУзловОтменитьПоиск + 24 + true + true + + true + + + СписокСостоянияУзловОтменитьПоискРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + Form.Item.СписокСостоянияУзлов.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокСостоянияУзловВывестиСписок + 25 + true + true + + true + + + СписокСостоянияУзловВывестиСписокРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + Form.Item.СписокСостоянияУзлов.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокСостоянияУзловКопироватьВБуферОбмена + 26 + true + true + + true + + + СписокСостоянияУзловКопироватьВБуферОбменаРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + Form.Item.СписокСостоянияУзлов.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + СписокСостоянияУзловГруппа1РасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + + + СписокСостоянияУзловГруппа2 + 28 + + СписокСостоянияУзловОбновитьМонитор + 20 + true + true + + true + + + СписокСостоянияУзловОбновитьМониторРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + Form.Command.ОбновитьМонитор + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + СписокСостоянияУзловГруппа2РасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + + + СписокСостоянияУзловРасписаниеОтправкиИПолучения + 43 + + СписокСостоянияУзловВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы + 42 + true + true + + true + + + СписокСостоянияУзловВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемыРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + Form.Command.ВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы + Normal + Auto + true + true + UserCmds + Auto + + + СписокСостоянияУзловНастроитьРасписаниеОтправкиИПолученияСообщенийСистемы + 41 + true + true + + true + + + СписокСостоянияУзловНастроитьРасписаниеОтправкиИПолученияСообщенийСистемыРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + Form.Command.НастроитьРасписаниеОтправкиИПолученияСообщенийСистемы + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Расписание отправки и получения</value> + + + СписокСостоянияУзловРасписаниеОтправкиИПолученияРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + Popup + + + StdPicture.ScheduledJob + + PictureAndText + Normal + + + Left + + + Selection + СписокСостоянияУзловВыбор + + + СписокСостоянияУзловСтрокаПоиска + 71 + + СписокСостоянияУзловСтрокаПоискаРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + + СписокСостоянияУзловСтрокаПоискаКонтекстноеМеню + 72 + true + + СписокСостоянияУзлов + + true + + + + СписокСостоянияУзловСостояниеПросмотра + 74 + + СписокСостоянияУзловСостояниеПросмотраРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + + СписокСостоянияУзловСостояниеПросмотраКонтекстноеМеню + 75 + true + + ViewStatusAddition + СписокСостоянияУзлов + + true + + + + СписокСостоянияУзловУправлениеПоиском + 77 + + СписокСостоянияУзловУправлениеПоискомРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + + СписокСостоянияУзловУправлениеПоискомКонтекстноеМеню + 78 + true + + SearchControlAddition + СписокСостоянияУзлов + + true + + + + СписокСостоянияУзловРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + + СписокСостоянияУзловКонтекстноеМеню + 2 + + СписокСостоянияУзловКонтекстноеМенюИзменитьКонечнуюТочку + 32 + true + true + + true + + + СписокСостоянияУзловКонтекстноеМенюИзменитьКонечнуюТочкуРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.Command.ИзменитьКонечнуюТочку + Normal + Auto + true + true + UserCmds + Auto + + + СписокСостоянияУзловКонтекстноеМенюГруппа2 + 38 + + СписокСостоянияУзловКонтекстноеМенюПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + 40 + true + true + + true + + + СписокСостоянияУзловКонтекстноеМенюПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Form.Command.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + Normal + Auto + true + true + UserCmds + Auto + + + СписокСостоянияУзловКонтекстноеМенюПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + 39 + true + true + + true + + + СписокСостоянияУзловКонтекстноеМенюПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + Form.Command.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокСостоянияУзловКонтекстноеМенюГруппа2РасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + + + СписокСостоянияУзловКонтекстноеМенюГруппа1 + 37 + + СписокСостоянияУзловКонтекстноеМенюВывестиСписок + 36 + true + true + + true + + + СписокСостоянияУзловКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + Form.Item.СписокСостоянияУзлов.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + СписокСостоянияУзловКонтекстноеМенюКопироватьВБуферОбмена + 33 + true + true + + true + + + СписокСостоянияУзловКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Form.Item.СписокСостоянияУзлов.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + СписокСостоянияУзловКонтекстноеМенюГруппа1РасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + + + true + true + true + true + true + true + MultiRow + Row +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + None + None + None + true + +
    + None + false + + ФормаКоманднаяПанель + -1 + Left + + + NotificationProcessing + ОбработкаОповещения + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + СписокСостоянияУзлов + + <key>ru</key> + <value>Список состояния узлов</value> + + 2 + + ValueTable + + + true + + + true + + + ДатаПоследнейУспешнойВыгрузки + + <key>ru</key> + <value>Дата успешной отправки</value> + + 1 + + Date + + + + true + + + true + + + + РезультатПоследнейВыгрузкиДанных + 2 + + Number + + 1 + true + + + + true + + + true + + + + РезультатПоследнейЗагрузкиДанных + 3 + + Number + + 1 + true + + + + true + + + true + + + + УзелИнформационнойБазы + + <key>ru</key> + <value>Конечная точка</value> + + 4 + + ExchangePlanRef + + + true + + + true + + + + ДатаПоследнейУспешнойЗагрузки + + <key>ru</key> + <value>Дата успешного получения</value> + + 5 + + Date + + + + true + + + true + + + + ДатаПоследнейЗагрузки + + <key>ru</key> + <value>Дата получения</value> + + 6 + + Date + + + + true + + + true + + + + ДатаПоследнейВыгрузки + + <key>ru</key> + <value>Дата отправки</value> + + 7 + + Date + + + + true + + + true + + + + ИмяПланаОбмена + + <key>ru</key> + <value>План обмена</value> + + 8 + + String + + + + true + + + true + + + + Ведущая + + <key>ru</key> + <value>Ведущая</value> + + 9 + + Boolean + + + true + + + true + + + + + ИдентификаторРегламентногоЗадания + + <key>ru</key> + <value>Идентификатор регламентного задания</value> + + 1 + + String + + + + true + + + true + + + + ИспользованиеРегламентногоЗадания + + <key>ru</key> + <value>Использование регламентного задания</value> + + 3 + + Boolean + + + true + + + true + + + + ПодключитьКонечнуюТочку + + <key>ru</key> + <value>Подключить конечную точку</value> + + 1 + + ru + Подключить конечную точку + + + true + + + StdPicture.CreateListItem + + + + ПодключитьКонечнуюТочку + + + TextPicture + Auto + Auto + + + ОтправитьИПолучитьСообщения + + <key>ru</key> + <value>Отправить и получить сообщения</value> + + 2 + + ru + Отправить и получить сообщения сейчас + + + true + + + CommonPicture.ВыполнитьЗапускОбменаДанными + + + + ОтправитьИПолучитьСообщения + + + TextPicture + Auto + Auto + + + ОбновитьМонитор + + <key>ru</key> + <value>Обновить</value> + + 3 + + ru + Обновить монитор + + + true + + F5 + + StdPicture.Refresh + + + + ОбновитьМонитор + + + Auto + Auto + + + ИзменитьКонечнуюТочку + + <key>ru</key> + <value>Изменить</value> + + 5 + + ru + Изменить конечную точку + + + true + + F2 + + StdPicture.Change + + + + ИзменитьКонечнуюТочку + + + Auto + Auto + + + ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + + <key>ru</key> + <value>События отправки сообщений</value> + + 4 + + ru + Перейти в журнал регистрации событий выгрузки данных + + + true + + + + ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + + + Auto + Auto + + + ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + + <key>ru</key> + <value>События получения сообщений</value> + + 6 + + ru + Перейти в журнал регистрации событий загрузки данных + + + true + + + + ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + + + Auto + Auto + + + НастроитьРасписаниеОтправкиИПолученияСообщенийСистемы + + <key>ru</key> + <value>Настроить расписание...</value> + + 7 + + ru + Настроить расписание отправки и получения сообщений системы + + + true + + + + НастроитьРасписаниеОтправкиИПолученияСообщенийСистемы + + + Picture + Auto + Auto + + + ВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы + + <key>ru</key> + <value>Включить расписание отправки и получения</value> + + 8 + + ru + Включить/отключить расписание отправки и получения сообщений системы + + + true + + + + ВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы + + + Auto + Auto + + + НастроитьПодписки + + <key>ru</key> + <value>Настроить подписки...</value> + + 9 + + ru + Настроить подписки + + + true + + + + НастроитьПодписки + + + Auto + Auto + + + + + +
    diff --git a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl new file mode 100644 index 000000000..aada686eb --- /dev/null +++ b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl @@ -0,0 +1,216 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Настройка подсистемы в разделенном режиме не поддерживается.'"),,,, Отказ + ); + Возврат; + КонецЕсли; + + ОбновитьСписокСостоянияУзлов(); + + УстановитьПривилегированныйРежим(Истина); + РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы); + УстановитьПривилегированныйРежим(Ложь); + + ИдентификаторРегламентногоЗадания = Строка(РегламентноеЗадание.УникальныйИдентификатор); + + ИспользованиеРегламентногоЗадания = РегламентноеЗадание.Использование; + + Элементы.СписокСостоянияУзловВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы.Пометка = ИспользованиеРегламентногоЗадания; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = ОбменСообщениямиКлиент.ИмяСобытияВыполненаОтправкаИПолучениеСообещений() + ИЛИ ИмяСобытия = ОбменСообщениямиКлиент.ИмяСобытияЗакрытаФормаКонечнойТочки() + ИЛИ ИмяСобытия = ОбменСообщениямиКлиент.ИмяСобытияДобавленаКонечнаяТочка() + ИЛИ ИмяСобытия = ОбменСообщениямиКлиент.ИмяСобытияУстановленаВедущаяКонечнаяТочка() + Тогда + + ОбновитьДанныеМонитора(); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура СписокСостоянияУзловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ИзменитьКонечнуюТочку(Неопределено); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ПодключитьКонечнуюТочку(Команда) + + ОткрытьФорму("ОбщаяФорма.ПодключениеКонечнойТочки",, ЭтаФорма, 1); + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьПодписки(Команда) + + ОткрытьФорму("РегистрСведений.ПодпискиПолучателей.Форма.НастройкаПодписокЭтойКонечнойТочки",, ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтправитьИПолучитьСообщения(Команда) + + ОбменСообщениямиКлиент.ОтправитьИПолучитьСообщения(); + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьКонечнуюТочку(Команда) + + ТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ОткрытьЗначение(ТекущиеДанные.УзелИнформационнойБазы); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных(Команда) + + ТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ОбменДаннымиКлиент.ПерейтиВЖурналРегистрацииСобытийДанныхМодально(ТекущиеДанные.УзелИнформационнойБазы, ЭтаФорма, "ВыгрузкаДанных"); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных(Команда) + + ТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ОбменДаннымиКлиент.ПерейтиВЖурналРегистрацииСобытийДанныхМодально(ТекущиеДанные.УзелИнформационнойБазы, ЭтаФорма, "ЗагрузкаДанных"); + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьРасписаниеОтправкиИПолученияСообщенийСистемы(Команда) + + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(РегламентныеЗаданияКлиент.ПолучитьРасписаниеРегламентногоЗадания(ИдентификаторРегламентногоЗадания)); + + Если Диалог.ОткрытьМодально() Тогда + + РегламентныеЗаданияКлиент.УстановитьРасписаниеРегламентногоЗадания(ИдентификаторРегламентногоЗадания, Диалог.Расписание); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы(Команда) + + ИспользованиеРегламентногоЗадания = Не ИспользованиеРегламентногоЗадания; + + РегламентныеЗаданияСервер.УстановитьИспользованиеРегламентногоЗадания(ИдентификаторРегламентногоЗадания, ИспользованиеРегламентногоЗадания); + + Элементы.СписокСостоянияУзловВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы.Пометка = ИспользованиеРегламентногоЗадания; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьМонитор(Команда) + + ОбновитьДанныеМонитора(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ОбновитьСписокСостоянияУзлов() + + Массив = Новый Массив; + Массив.Добавить("ОбменСообщениями"); + + // обновляем данные в списке состояния узлов + СписокСостоянияУзлов.Загрузить(ОбменДаннымиСервер.ТаблицаМонитораОбменаДанными(Массив, "Ведущая")); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьДанныеМонитора() + + ИндексСтрокиСписокСостоянияУзлов = ПолучитьТекущийИндексСтроки("СписокСостоянияУзлов"); + + // выполняем обновление таблиц монитора на сервере + ОбновитьСписокСостоянияУзлов(); + + // выполняем позиционирование курсора + ВыполнитьПозиционированиеКурсора("СписокСостоянияУзлов", ИндексСтрокиСписокСостоянияУзлов); + +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьТекущийИндексСтроки(ИмяТаблицы) + + // возвращаемое значение функции + ИндексСтроки = Неопределено; + + // при обновлении монитора выполняем позиционирование курсора + ТекущиеДанные = Элементы[ИмяТаблицы].ТекущиеДанные; + + Если ТекущиеДанные <> Неопределено Тогда + + ИндексСтроки = ЭтаФорма[ИмяТаблицы].Индекс(ТекущиеДанные); + + КонецЕсли; + + Возврат ИндексСтроки; +КонецФункции + +&НаКлиенте +Процедура ВыполнитьПозиционированиеКурсора(ИмяТаблицы, ИндексСтроки) + + Если ИндексСтроки <> Неопределено Тогда + + // выполняем проверки позиционирования курсора после получения новых данных + Если ЭтаФорма[ИмяТаблицы].Количество() <> 0 Тогда + + Если ИндексСтроки > ЭтаФорма[ИмяТаблицы].Количество() - 1 Тогда + + ИндексСтроки = ЭтаФорма[ИмяТаблицы].Количество() - 1; + + КонецЕсли; + + // позиционируем курсор + Элементы[ИмяТаблицы].ТекущаяСтрока = ЭтаФорма[ИмяТаблицы][ИндексСтроки].ПолучитьИдентификатор(); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/CommonForms/НастройкаОбменаСообщениями/НастройкаОбменаСообщениями.mdo b/SSL/src/CommonForms/НастройкаОбменаСообщениями/НастройкаОбменаСообщениями.mdo new file mode 100644 index 000000000..03d80a0bf --- /dev/null +++ b/SSL/src/CommonForms/НастройкаОбменаСообщениями/НастройкаОбменаСообщениями.mdo @@ -0,0 +1,11 @@ + + + НастройкаОбменаСообщениями + + ru + Настройка обмена сообщениями + + PersonalComputer + MobileDevice + true + diff --git a/SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/Form.form b/SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/Form.form index a43557d91..6e0d38a70 100644 --- a/SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/Form.form +++ b/SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/Form.form @@ -2,26 +2,26 @@ <key>ru</key> - <value>Подготовка документов к отправке</value> + <value>Отправить по почте</value> Форматы 28 - ФорматMXL - 29 + ФорматPDF + 38 true true true - ФорматMXL + ФорматPDF Right - ФорматMXLРасширеннаяПодсказка - 41 + ФорматPDFРасширеннаяПодсказка + 45 Label true true @@ -30,8 +30,8 @@ - ФорматMXLКонтекстноеМеню - 30 + ФорматPDFКонтекстноеМеню + 39 true CheckBoxField @@ -55,7 +55,7 @@ Right ФорматXLSРасширеннаяПодсказка - 43 + 47 Label true true @@ -89,7 +89,7 @@ Right ФорматHTMLРасширеннаяПодсказка - 45 + 49 Label true true @@ -109,6 +109,74 @@ true + + ФорматODS + 40 + true + true + + true + + + ФорматODS + + Right + + ФорматODSРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + ФорматODSКонтекстноеМеню + 41 + true + + CheckBoxField + Enter + true + Left + true + + + + ФорматMXL + 29 + true + true + + true + + + ФорматMXL + + Right + + ФорматMXLРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + ФорматMXLКонтекстноеМеню + 30 + true + + CheckBoxField + Enter + true + Left + true + + true true @@ -116,15 +184,9 @@ <key>ru</key> - <value>Формат отправляемых документов</value> + <value>Формат вложений</value> - - System.DefaultGUIFont - true - false - false - false - + ru Форматы @@ -132,7 +194,7 @@ true ФорматыРасширеннаяПодсказка - 40 + 44 Label true true @@ -147,6 +209,7 @@ StrongSeparation true true + auto Auto Auto @@ -165,7 +228,7 @@ Right ЗапаковатьZIPРасширеннаяПодсказка - 47 + 55 Label true true @@ -201,7 +264,7 @@ false КнопкаОКРасширеннаяПодсказка - 38 + 42 Label true true @@ -228,7 +291,7 @@ false ОтменаРасширеннаяПодсказка - 39 + 43 Label true true @@ -263,7 +326,7 @@ ЗапаковатьZIP <key>ru</key> - <value>Упаковать в zip-архив</value> + <value>Упаковать в архив (.zip)</value> 2 @@ -283,7 +346,7 @@ ФорматMXL <key>ru</key> - <value>MXL (табличный документ 1С:Предприятие)</value> + <value>Табличный документ (.mxl)</value> 5 @@ -303,7 +366,7 @@ ФорматXLS <key>ru</key> - <value>XLS (табличный документ MS Excel)</value> + <value>Лист Excel (.xls)</value> 6 @@ -323,7 +386,7 @@ ФорматHTML <key>ru</key> - <value>HTML</value> + <value>Документ HTML (.html)</value> 7 @@ -339,6 +402,46 @@ ФорматHTML + + ФорматPDF + + <key>ru</key> + <value>Документ PDF (.pdf)</value> + + 1 + + Boolean + + + true + + + true + + + ФорматPDF + + + + ФорматODS + + <key>ru</key> + <value>Электронная таблица ODF(.ods)</value> + + 3 + + Boolean + + + true + + + true + + + ФорматODS + + КнопкаОК diff --git a/SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/Module.bsl b/SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/Module.bsl index 87110b428..6e3b87a81 100644 --- a/SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/Module.bsl +++ b/SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/Module.bsl @@ -1,19 +1,39 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура КнопкаОКВыполнить() - Если Не ФорматMXL И Не ФорматXLS И Не ФорматHTML Тогда - Предупреждение(НСтр("ru = 'Необходимо указать как минимум один из форматов: MXL, XLS или HTML!'")); - Возврат; + СписокТипов = Новый СписокЗначений; + Если ФорматMXL Тогда + СписокТипов.Добавить(ТипФайлаТабличногоДокумента.MXL, "mxl"); КонецЕсли; + Если ФорматHTML Тогда + СписокТипов.Добавить(ТипФайлаТабличногоДокумента.HTML, "html"); + КонецЕсли; + + Если ФорматXLS Тогда + СписокТипов.Добавить(ТипФайлаТабличногоДокумента.XLS, "xls"); + КонецЕсли; + + Если ФорматPDF Тогда + СписокТипов.Добавить(ТипФайлаТабличногоДокумента.PDF, "pdf"); + КонецЕсли; + + Если ФорматODS Тогда + СписокТипов.Добавить(ТипФайлаТабличногоДокумента.ODS, "ods"); + КонецЕсли; + + + Если СписокТипов.Количество() = 0 Тогда + Предупреждение(НСтр("ru = 'Необходимо указать как минимум один из предложенных форматов.'")); + Возврат; + КонецЕсли; + Результат = Новый Структура; Результат.Вставить("ЗапаковатьZIP", ЗапаковатьZIP); - Результат.Вставить("ФорматMXL", ФорматMXL); - Результат.Вставить("ФорматXLS", ФорматXLS); - Результат.Вставить("ФорматHTML", ФорматHTML); + Результат.Вставить("СписокТипов", СписокТипов); Закрыть(Результат); diff --git a/SSL/src/CommonForms/НастройкиЭЦП/Form.form b/SSL/src/CommonForms/НастройкиЭЦП/Form.form index 37d339564..1e5680315 100644 --- a/SSL/src/CommonForms/НастройкиЭЦП/Form.form +++ b/SSL/src/CommonForms/НастройкиЭЦП/Form.form @@ -122,6 +122,7 @@ <autoFill>true</autoFill> </contextMenu> <type>InputField</type> + <markRequiredComplete>true</markRequiredComplete> <editMode>Enter</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> @@ -131,6 +132,7 @@ <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> <listChoiceMode>true</listChoiceMode> + <autoMarkIncomplete>true</autoMarkIncomplete> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> @@ -164,6 +166,7 @@ <autoFill>true</autoFill> </contextMenu> <type>InputField</type> + <markRequiredComplete>true</markRequiredComplete> <editMode>Enter</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> @@ -173,6 +176,7 @@ <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> <listChoiceMode>true</listChoiceMode> + <autoMarkIncomplete>true</autoMarkIncomplete> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> @@ -206,6 +210,7 @@ <autoFill>true</autoFill> </contextMenu> <type>InputField</type> + <markRequiredComplete>true</markRequiredComplete> <editMode>Enter</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> @@ -215,6 +220,7 @@ <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> <listChoiceMode>true</listChoiceMode> + <autoMarkIncomplete>true</autoMarkIncomplete> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> @@ -584,6 +590,10 @@ <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> + <handlers> + <event>FillCheckProcessingAtServer</event> + <name>ОбработкаПроверкиЗаполненияНаСервере</name> + </handlers> <windowOpeningMode>DontBlock</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoUrl>true</autoUrl> @@ -631,7 +641,6 @@ <edit> <common>true</common> </edit> - <fillChecking>ShowError</fillChecking> </attributes> <attributes> <name>АлгоритмПодписи</name> @@ -650,7 +659,6 @@ <edit> <common>true</common> </edit> - <fillChecking>ShowError</fillChecking> </attributes> <attributes> <name>АлгоритмХеширования</name> @@ -669,7 +677,6 @@ <edit> <common>true</common> </edit> - <fillChecking>ShowError</fillChecking> </attributes> <attributes> <name>ВыполнятьПроверкуЭЦПНаСервере</name> @@ -705,7 +712,6 @@ <edit> <common>true</common> </edit> - <fillChecking>ShowError</fillChecking> </attributes> <attributes> <name>ПутиМодулейКриптографииСерверовLinux</name> @@ -778,6 +784,23 @@ </edit> </columns> </attributes> + <attributes> + <name>СпискиАлгоритмовУспешноЗаполнены</name> + <title> + <key>ru</key> + <value>Списки алгоритмов успешно заполнены</value> + + 8 + + Boolean + + + true + + + true + + ОК diff --git a/SSL/src/CommonForms/НастройкиЭЦП/Module.bsl b/SSL/src/CommonForms/НастройкиЭЦП/Module.bsl index f4266de8f..da2dcd154 100644 --- a/SSL/src/CommonForms/НастройкиЭЦП/Module.bsl +++ b/SSL/src/CommonForms/НастройкиЭЦП/Module.bsl @@ -6,9 +6,9 @@ Элементы.АлгоритмШифрования.Видимость = Ложь; КонецЕсли; - ГлавныйУзел = (ПланыОбмена.ГлавныйУзел() <> Неопределено); + ЭтоПодчиненныйУзел = (ПланыОбмена.ГлавныйУзел() <> Неопределено); - Если ГлавныйУзел Тогда // мы в не главном узле + Если ЭтоПодчиненныйУзел Тогда // мы в не главном узле Элементы.АлгоритмПодписи.ТолькоПросмотр = Истина; Элементы.АлгоритмХеширования.ТолькоПросмотр = Истина; Элементы.АлгоритмШифрования.ТолькоПросмотр = Истина; @@ -121,6 +121,8 @@ &НаКлиенте Процедура ЗаполнитьСпискиВыбораНаКлиенте() + ОчиститьСообщения(); + Элементы.АлгоритмПодписи.СписокВыбора.Очистить(); Элементы.АлгоритмХеширования.СписокВыбора.Очистить(); Элементы.АлгоритмШифрования.СписокВыбора.Очистить(); @@ -151,9 +153,25 @@ Элементы.АлгоритмШифрования.СписокВыбора.Добавить(Строка); КонецЦикла; + Элементы.АлгоритмПодписи.АвтоОтметкаНезаполненного = Истина; + Элементы.АлгоритмХеширования.АвтоОтметкаНезаполненного = Истина; + Элементы.АлгоритмШифрования.АвтоОтметкаНезаполненного = Истина; + + СпискиАлгоритмовУспешноЗаполнены = Истина; + Исключение - Предупреждение(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + СпискиАлгоритмовУспешноЗаполнены = Ложь; + + АлгоритмПодписи = ""; + АлгоритмХеширования = ""; + АлгоритмШифрования = ""; + + Элементы.АлгоритмПодписи.АвтоОтметкаНезаполненного = Ложь; + Элементы.АлгоритмХеширования.АвтоОтметкаНезаполненного = Ложь; + Элементы.АлгоритмШифрования.АвтоОтметкаНезаполненного = Ложь; + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -182,3 +200,28 @@ КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + Если СпискиАлгоритмовУспешноЗаполнены Тогда + + Если Не ЗначениеЗаполнено(АлгоритмПодписи) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru='Выберите алгоритм подписи'"), , "АлгоритмПодписи", , Отказ); + КонецЕсли; + + Если Не ЗначениеЗаполнено(АлгоритмХеширования) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru='Выберите алгоритм хеширования'"), , "АлгоритмХеширования", , Отказ); + КонецЕсли; + + Если Не ЗначениеЗаполнено(АлгоритмШифрования) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru='Выберите алгоритм шифрования'"), , "АлгоритмШифрования", , Отказ); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Form.form b/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Form.form index d0e4a3f43..a430f35b1 100644 --- a/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Form.form +++ b/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Form.form @@ -1,57 +1,285 @@ <?xml version="1.0" encoding="UTF-8"?> -<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> - <items xsi:type="form:Decoration"> - <name>ТекстСообщения</name> - <id>13</id> - <title> - <key>ru</key> - <value>Текст сообщения</value> - - true - true - - true - - - ТекстСообщенияРасширеннаяПодсказка - 17 - Label + + + ГруппаПредупреждение + 15 + + КартинкаПредупреждение + 16 + + <key>ru</key> + <value>Картинка предупреждение</value> + + true + true + + true + + + КартинкаПредупреждениеРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + КартинкаПредупреждениеКонтекстноеМеню + 17 + true + + 5 true + 2 true - - Left + + + CommonPicture.Предупреждение32 + - - - ТекстСообщенияКонтекстноеМеню - 14 - true - - Label - true - true - true - true - - Left - Top - - - - ТекстСсылки - 11 - - <key>ru</key> - <value>Загрузить последнюю версию платформы 1С:Предприятие из Интернета</value> - - true - true - - true - - - ТекстСсылкиРасширеннаяПодсказка + + + ГруппаТекст 18 + + ГруппаВерсия + 21 + + Версия + 19 + + <key>ru</key> + <value>Для работы с программой требуется версия платформы 1С:Предприятие не менее: +Используемая сейчас версия: %1</value> + + true + true + + true + + + ВерсияРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ВерсияКонтекстноеМеню + 20 + true + + Label + true + 2 + true + false + false + + Left + Top + + + + РекомендуемаяВерсияПлатформы + 22 + + <key>ru</key> + <value>номер версии</value> + + true + true + + true + + + РекомендуемаяВерсияПлатформыРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + РекомендуемаяВерсияПлатформыКонтекстноеМеню + 23 + true + + Label + true + true + true + false + + System.DefaultGUIFont + true + false + false + false + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Группа версия</value> + + Ctrl+S + + ГруппаВерсияРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ТекстСообщения + 13 + + <key>ru</key> + <value>Текст сообщения</value> + + true + true + + true + + + ТекстСообщенияРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ТекстСообщенияКонтекстноеМеню + 14 + true + + Label + true + 6 + true + true + true + + Left + Top + + + + ТекстСсылки + 11 + + <key>ru</key> + <value>Загрузить последнюю версию платформы 1С:Предприятие из Интернета</value> + + true + true + + true + + + ru + http://users.v8.1c.ru/project.jsp?id=Platform82 + + + ТекстСсылкиРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ТекстСсылкиКонтекстноеМеню + 12 + true + + Label + true + true + + + Click + ТекстСсылкиНажатие + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа текст</value> + + + ГруппаТекстРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа предупреждение</value> + + + ГруппаПредупреждениеРасширеннаяПодсказка + 26 Label true true @@ -59,21 +287,13 @@ Left - - ТекстСсылкиКонтекстноеМеню - 12 - true - - Label - true - true - - - Click - ТекстСсылкиНажатие - - true - Left + UsualGroup + + Auto + true + true + Auto + Auto Bottom @@ -91,7 +311,7 @@ ФормаЗавершитьРаботуРасширеннаяПодсказка - 15 + 24 Label true true @@ -117,7 +337,7 @@ ФормаНетРасширеннаяПодсказка - 16 + 25 Label true true @@ -245,6 +465,13 @@
    true
    + + РекомендуемаяВерсияПлатформы + + String + + + diff --git a/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Module.bsl b/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Module.bsl index f55dacb20..b8e6bb448 100644 --- a/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Module.bsl +++ b/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Module.bsl @@ -1,14 +1,39 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + Элементы.ТекстСообщения.Заголовок = Параметры.ТекстСообщения; + Элементы.РекомендуемаяВерсияПлатформы.Заголовок = Параметры.РекомендуемаяВерсияПлатформы; + СистемнаяИнформация = Новый СистемнаяИнформация; + Элементы.Версия.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Элементы.Версия.Заголовок, СистемнаяИнформация.ВерсияПриложения); Если Параметры.ЗавершитьРаботу Тогда Элементы.ФормаНет.Видимость = Ложь; КонецЕсли; КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ТекстСсылкиНажатие(Элемент) + СтандартнаяОбработка = Ложь; + ЗапуститьПриложение(Элементы.ТекстСсылки.Подсказка); +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ПродолжитьРаботу(Команда) @@ -23,8 +48,3 @@ КонецПроцедуры -&НаКлиенте -Процедура ТекстСсылкиНажатие(Элемент) - СтандартнаяОбработка = Ложь; - ЗапуститьПриложение("http://users.v8.1c.ru/"); -КонецПроцедуры diff --git a/SSL/src/CommonForms/ОбменыДанными/Form.form b/SSL/src/CommonForms/ОбменыДанными/Form.form index 4c342419d..196895b1d 100644 --- a/SSL/src/CommonForms/ОбменыДанными/Form.form +++ b/SSL/src/CommonForms/ОбменыДанными/Form.form @@ -20,7 +20,6 @@ Add Change Copy - CopyToClipboard Delete EndEdit MoveDown @@ -40,7 +39,7 @@ СписокСостоянияУзловИмяПланаОбменаРасширеннаяПодсказка - 135 + 169 Label true true @@ -81,7 +80,7 @@ СписокСостоянияУзловУзелИнформационнойБазыРасширеннаяПодсказка - 137 + 171 Label true true @@ -126,7 +125,7 @@ None СписокСостоянияУзловРезультатПоследнейЗагрузкиДанныхРасширеннаяПодсказка - 140 + 174 Label true true @@ -171,7 +170,7 @@ СписокСостоянияУзловДатаПоследнейЗагрузкиРасширеннаяПодсказка - 142 + 176 Label true true @@ -214,7 +213,7 @@ ГруппаСостоянияЗагрузкиРасширеннаяПодсказка - 139 + 173 Label true true @@ -242,7 +241,7 @@ СписокСостоянияУзловДатаПоследнейУспешнойЗагрузкиРасширеннаяПодсказка - 144 + 178 Label true true @@ -287,7 +286,7 @@ None СписокСостоянияУзловРезультатПоследнейВыгрузкиДанныхРасширеннаяПодсказка - 147 + 181 Label true true @@ -332,7 +331,7 @@ СписокСостоянияУзловДатаПоследнейВыгрузкиРасширеннаяПодсказка - 149 + 183 Label true true @@ -375,7 +374,7 @@ ГруппаСостоянияВыгрузкиРасширеннаяПодсказка - 146 + 180 Label true true @@ -403,7 +402,7 @@ СписокСостоянияУзловДатаПоследнейУспешнойВыгрузкиРасширеннаяПодсказка - 151 + 185 Label true true @@ -448,10 +447,10 @@ СписокСостоянияУзловСтрокаПоиска - 126 + 160 СписокСостоянияУзловСтрокаПоискаРасширеннаяПодсказка - 128 + 162 Label true true @@ -461,7 +460,7 @@ СписокСостоянияУзловСтрокаПоискаКонтекстноеМеню - 127 + 161 true СписокСостоянияУзлов @@ -471,10 +470,10 @@ СписокСостоянияУзловСостояниеПросмотра - 129 + 163 СписокСостоянияУзловСостояниеПросмотраРасширеннаяПодсказка - 131 + 165 Label true true @@ -484,7 +483,7 @@ СписокСостоянияУзловСостояниеПросмотраКонтекстноеМеню - 130 + 164 true ViewStatusAddition @@ -495,10 +494,10 @@ СписокСостоянияУзловУправлениеПоиском - 132 + 166 СписокСостоянияУзловУправлениеПоискомРасширеннаяПодсказка - 134 + 168 Label true true @@ -508,7 +507,7 @@ СписокСостоянияУзловУправлениеПоискомКонтекстноеМеню - 133 + 167 true SearchControlAddition @@ -519,7 +518,7 @@ СписокСостоянияУзловРасширеннаяПодсказка - 125 + 159 Label true true @@ -544,7 +543,7 @@ false ВыполнитьОбменДанными1РасширеннаяПодсказка - 118 + 151 Label true true @@ -570,7 +569,7 @@ ВыполнитьОбменДаннымиИнтерактивно1РасширеннаяПодсказка - 119 + 152 Label true true @@ -601,7 +600,7 @@ ГруппаКнопокВыполненияОбменаДаннымиРасширеннаяПодсказка - 117 + 150 Label true true @@ -612,7 +611,7 @@ - СобытияЖурналаРегистрации + КонтекстноеМенюСписокСостоянияДиагностика 86 КонтекстноеМенюСписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных @@ -625,7 +624,7 @@ false КонтекстноеМенюСписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхРасширеннаяПодсказка - 121 + 154 Label true true @@ -652,7 +651,7 @@ false КонтекстноеМенюСписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхРасширеннаяПодсказка - 122 + 155 Label true true @@ -673,9 +672,13 @@ true + + <key>ru</key> + <value>Диагностика</value> + - СобытияЖурналаРегистрацииРасширеннаяПодсказка - 120 + КонтекстноеМенюСписокСостоянияДиагностикаРасширеннаяПодсказка + 153 Label true true @@ -698,7 +701,7 @@ НастроитьРасписаниеВыполненияОбмена1РасширеннаяПодсказка - 124 + 157 Label true true @@ -706,7 +709,7 @@ Left - Form.Command.НастроитьРасписаниеВыполненияОбмена + Form.Command.НастроитьСценарииОбменаДанными Normal Auto true @@ -729,7 +732,7 @@ ГруппаКнопокНастройкиРасписанияРасширеннаяПодсказка - 123 + 156 Label true true @@ -739,6 +742,32 @@ + + СписокСостоянияУзловКонтекстноеМенюКопироватьВБуферОбмена + 116 + true + true + + true + + + СписокСостоянияУзловКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + Form.Item.СписокСостоянияУзлов.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + true true @@ -785,11 +814,11 @@ ru - Подменю создать + Настроить новый обмен данными ПодменюСоздатьРасширеннаяПодсказка - 106 + 135 Label true true @@ -806,36 +835,37 @@ Normal - - ВыполнениеОбменаДанными - 94 - - ВыполнитьОбменДанными - 52 - true - true - - true - - false - - ВыполнитьОбменДаннымиРасширеннаяПодсказка - 108 - Label - true - true - - Left - - - Form.Command.ВыполнитьОбменДанными - Normal - Auto + + ВыполнитьОбменДанными + 52 + true + true + + true + + false + + ВыполнитьОбменДаннымиРасширеннаяПодсказка + 136 + Label true true - UserCmds - Auto - + + Left + + + Form.Command.ВыполнитьОбменДанными + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Настройка + 94 ВыполнитьОбменДаннымиИнтерактивно 92 @@ -846,7 +876,7 @@ ВыполнитьОбменДаннымиИнтерактивноРасширеннаяПодсказка - 109 + 138 Label true true @@ -863,7 +893,120 @@ Auto - ВыполнениеОбменаДаннымиПодгруппа + ГруппаРасписание + 103 + + НастроитьРасписаниеВыполненияОбмена + 102 + true + true + + true + + + НастроитьРасписаниеВыполненияОбменаРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + Form.Command.НастроитьСценарииОбменаДанными + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа расписание</value> + + + ru + Группа расписание + + + ГруппаРасписаниеРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + + + ГруппаИзменить + 108 + + СписокСостоянияУзловИзменитьУзелИнформационнойБазы + 53 + true + true + + true + + true + Role.ДобавлениеИзменениеОбменовДанными + + + false + + СписокСостоянияУзловИзменитьУзелИнформационнойБазыРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + Form.Command.ИзменитьУзелИнформационнойБазы + Normal + PictureAndText + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа изменить</value> + + + ru + Группа изменить + + + ГруппаИзменитьРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + + + + ГруппаДиагностика 100 СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных @@ -875,7 +1018,7 @@ СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхРасширеннаяПодсказка - 111 + 144 Label true true @@ -890,6 +1033,7 @@ true UserCmds Auto + InAdditionalSubmenu СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных @@ -901,7 +1045,7 @@ СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхРасширеннаяПодсказка - 112 + 145 Label true true @@ -916,6 +1060,7 @@ true UserCmds Auto + InAdditionalSubmenu true true @@ -924,69 +1069,15 @@ <key>ru</key> - <value>Выполнение обмена данными подгруппа</value> + <value>Группа диагностика</value> ru - Выполнение обмена данными подгруппа + Группа диагностика - ВыполнениеОбменаДаннымиПодгруппаРасширеннаяПодсказка - 110 - Label - true - true - - Left - - - - - - ВыполнениеОбменаДаннымиПодгруппаРасписания - 103 - - НастроитьРасписаниеВыполненияОбмена - 102 - true - true - - true - - - НастроитьРасписаниеВыполненияОбменаРасширеннаяПодсказка - 114 - Label - true - true - - Left - - - Form.Command.НастроитьРасписаниеВыполненияОбмена - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Выполнение обмена данными подгруппа расписания</value> - - - ru - Выполнение обмена данными подгруппа расписания - - - ВыполнениеОбменаДаннымиПодгруппаРасписанияРасширеннаяПодсказка - 113 + ГруппаДиагностикаРасширеннаяПодсказка + 143 Label true true @@ -1003,15 +1094,15 @@ <key>ru</key> - <value>Выполнение обмена данными</value> + <value>Настройка</value> ru - Выполнение обмена данными + Настройка обмена данными - ВыполнениеОбменаДаннымиРасширеннаяПодсказка - 107 + НастройкаРасширеннаяПодсказка + 137 Label true true @@ -1021,44 +1112,10 @@ Popup - - CommonPicture.ВыполнитьЗапускОбменаДанными - Auto Normal - - СписокСостоянияУзловИзменитьУзелИнформационнойБазы - 53 - true - true - - true - - true - Role.ДобавлениеИзменениеОбменовДанными - - - false - - СписокСостоянияУзловИзменитьУзелИнформационнойБазыРасширеннаяПодсказка - 115 - Label - true - true - - Left - - - Form.Command.ИзменитьУзелИнформационнойБазы - Normal - Auto - true - true - UserCmds - Auto - ОбновитьМонитор 16 @@ -1070,7 +1127,7 @@ false ОбновитьМониторРасширеннаяПодсказка - 116 + 146 Label true true @@ -1085,9 +1142,87 @@ true UserCmds Auto + InAdditionalSubmenu + + + ФормаВывестиСписок + 115 + true + true + + true + + + ФормаВывестиСписокРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + Form.Item.СписокСостоянияУзлов.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + ФормаИзменитьФорму + 134 + true + true + + true + + + ФормаИзменитьФормуРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСправка + 133 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto Left - true NotificationProcessing @@ -1295,7 +1430,7 @@ ВыполнитьОбменДанными <key>ru</key> - <value>Выполнить автоматически</value> + <value>Выполнить сейчас</value> 3 @@ -1346,7 +1481,7 @@ ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных <key>ru</key> - <value>События загрузки данных</value> + <value>События загрузки данных...</value> 7 @@ -1368,7 +1503,7 @@ ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных <key>ru</key> - <value>События выгрузки данных</value> + <value>События выгрузки данных...</value> 8 @@ -1390,7 +1525,7 @@ ВыполнитьОбменДаннымиИнтерактивно <key>ru</key> - <value>Выполнить интерактивно...</value> + <value>Выполнить с настройкой...</value> 2 @@ -1413,25 +1548,22 @@ Auto - НастроитьРасписаниеВыполненияОбмена + НастроитьСценарииОбменаДанными <key>ru</key> - <value>Настроить сценарии обмена данными...</value> + <value>Сценарии обмена данными</value> 5 ru - Настроить расписание выполнения обмена + Настроить сценарии обмена данными true - - StdPicture.ScheduledJob - - НастроитьРасписаниеВыполненияОбмена + НастроитьСценарииОбменаДанными Auto diff --git a/SSL/src/CommonForms/ОбменыДанными/Help/ru.html b/SSL/src/CommonForms/ОбменыДанными/Help/ru.html index 72e472bd1..37664c15e 100644 --- a/SSL/src/CommonForms/ОбменыДанными/Help/ru.html +++ b/SSL/src/CommonForms/ОбменыДанными/Help/ru.html @@ -1,7 +1,7 @@ -

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

    -

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

    -

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

    +

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

    +

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

    +

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

    Замена типовых правил конвертации объектов и правил регистрации объектов из внешнего файла

    Для замены типовых правил конвертации объектов и правил регистрации объектов правилами из внешнего файла необходимо:

    diff --git a/SSL/src/CommonForms/ОбменыДанными/Module.bsl b/SSL/src/CommonForms/ОбменыДанными/Module.bsl index f45633135..f937899e7 100644 --- a/SSL/src/CommonForms/ОбменыДанными/Module.bsl +++ b/SSL/src/CommonForms/ОбменыДанными/Module.bsl @@ -5,23 +5,17 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); - Если СписокПлановОбмена.Количество() = 0 Тогда - - НСтрока = НСтр("ru = 'В конфигурации не задано ни одного плана обмена. - |Монитор обменов данными не может быть использован.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,,, Отказ); + ТекстСообщения = НСтр("ru = 'Возможность настройки обмена данными не предусмотрена.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,,, Отказ); Возврат; КонецЕсли; ОбновитьСписокСостоянияУзлов(); - РольДоступнаДобавлениеИзменениеОбменовДанными = ОбменДаннымиСервер.РольДоступнаДобавлениеИзменениеОбменовДанными(); - + РольДоступнаДобавлениеИзменениеОбменовДанными = Пользователи.РолиДоступны("ДобавлениеИзменениеОбменовДанными"); Если РольДоступнаДобавлениеИзменениеОбменовДанными Тогда - ДобавитьКомандыСозданияНовогоОбмена(); - КонецЕсли; Элементы.СписокСостоянияУзловИзменитьУзелИнформационнойБазы.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными; @@ -40,20 +34,51 @@ ИЛИ ИмяСобытия = "ЗакрытаФормаПомощникаСозданияОбменаДанными" Тогда // обновляем данные монитора - ОбновитьМонитор(); + ОбновитьДанныеМонитора(); КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокСостоянияУзлов + +&НаКлиенте +Процедура СписокСостоянияУзловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ВыполнитьОбменДаннымиОбработкаКоманды(Элементы.СписокСостоянияУзлов.ТекущиеДанные.УзелИнформационнойБазы, ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокСостоянияУзловПриАктивизацииСтроки(Элемент) + + ЗаданыТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные <> Неопределено; + + Элементы.Настройка.Доступность = ЗаданыТекущиеДанные; + Элементы.СписокСостоянияУзловИзменитьУзелИнформационнойБазы.Доступность = ЗаданыТекущиеДанные; + + Элементы.ГруппаКнопокВыполненияОбменаДанными.Доступность = ЗаданыТекущиеДанные; + Элементы.КонтекстноеМенюСписокСостоянияДиагностика.Доступность = ЗаданыТекущиеДанные; + Элементы.ГруппаКнопокНастройкиРасписания.Доступность = ЗаданыТекущиеДанные; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ВыполнитьОбменДанными(Команда) ТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + ОбменДаннымиКлиент.ВыполнитьОбменДаннымиОбработкаКоманды(ТекущиеДанные.УзелИнформационнойБазы, ЭтаФорма); КонецПроцедуры @@ -62,30 +87,22 @@ Процедура ВыполнитьОбменДаннымиИнтерактивно(Команда) ТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные; - ОбменДаннымиКлиент.ОткрытьПомощникСопоставленияОбъектовОбработкаКоманды(ТекущиеДанные.УзелИнформационнойБазы, ЭтаФорма); КонецПроцедуры &НаКлиенте -Процедура НастроитьРасписаниеВыполненияОбмена(Команда) +Процедура НастроитьСценарииОбменаДанными(Команда) ТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные; - ОбменДаннымиКлиент.ОбработкаКомандыНастроитьРасписаниеВыполненияОбмена(ТекущиеДанные.УзелИнформационнойБазы, ЭтаФорма); КонецПроцедуры &НаКлиенте -Процедура ОбновитьМонитор(Команда = Неопределено) +Процедура ОбновитьМонитор(Команда) - ИндексСтрокиСписокСостоянияУзлов = ПолучитьТекущийИндексСтроки("СписокСостоянияУзлов"); - - // выполняем обновление таблиц монитора на сервере - ОбновитьСписокСостоянияУзлов(); - - // выполняем позиционирование курсора - ВыполнитьПозиционированиеКурсора("СписокСостоянияУзлов", ИндексСтрокиСписокСостоянияУзлов); + ОбновитьДанныеМонитора(); КонецПроцедуры @@ -98,13 +115,6 @@ КонецПроцедуры -&НаКлиенте -Процедура СписокСостоянияУзловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ВыполнитьОбменДаннымиОбработкаКоманды(Элементы.СписокСостоянияУзлов.ТекущиеДанные.УзелИнформационнойБазы, ЭтаФорма); - -КонецПроцедуры - &НаКлиенте Процедура ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных(Команда) @@ -124,21 +134,27 @@ КонецПроцедуры &НаКлиенте -Процедура СписокСостоянияУзловПриАктивизацииСтроки(Элемент) +Процедура ОткрытьПомощникНастройкиОбменаДанными(Команда) - ЗаданыТекущиеДанные = Элементы.СписокСостоянияУзлов.ТекущиеДанные <> Неопределено; - - Элементы.ВыполнениеОбменаДанными.Доступность = ЗаданыТекущиеДанные; - Элементы.СписокСостоянияУзловИзменитьУзелИнформационнойБазы.Доступность = ЗаданыТекущиеДанные; - - Элементы.ГруппаКнопокВыполненияОбменаДанными.Доступность = ЗаданыТекущиеДанные; - Элементы.СобытияЖурналаРегистрации.Доступность = ЗаданыТекущиеДанные; - Элементы.ГруппаКнопокНастройкиРасписания.Доступность = ЗаданыТекущиеДанные; + ОбменДаннымиКлиент.ОткрытьПомощникНастройкиОбменаДанными(Команда.Имя); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ОбновитьДанныеМонитора() + + ИндексСтрокиСписокСостоянияУзлов = ПолучитьТекущийИндексСтроки("СписокСостоянияУзлов"); + + // выполняем обновление таблиц монитора на сервере + ОбновитьСписокСостоянияУзлов(); + + // выполняем позиционирование курсора + ВыполнитьПозиционированиеКурсора("СписокСостоянияУзлов", ИндексСтрокиСписокСостоянияУзлов); + +КонецПроцедуры &НаСервере Процедура ОбновитьСписокСостоянияУзлов() @@ -169,6 +185,21 @@ Элементы.Добавить(ИмяПланаОбмена, Тип("КнопкаФормы"), Элементы.ПодменюСоздать); Элементы[ИмяПланаОбмена].ИмяКоманды = ИмяПланаОбмена; + Если МенеджерПланаОбмена.ПланОбменаИспользуетсяВМоделиСервиса() + И Не Метаданные.ПланыОбмена[ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза Тогда + + ИмяКоманды = "[ИмяПланаОбмена]ПланОбменаИспользуетсяВМоделиСервиса"; + ИмяКоманды = СтрЗаменить(ИмяКоманды, "[ИмяПланаОбмена]", ИмяПланаОбмена); + + Команды.Добавить(ИмяКоманды); + Команды[ИмяКоманды].Заголовок = МенеджерПланаОбмена.ЗаголовокКомандыДляСозданияНовогоОбменаДанными() + НСтр("ru = ' (в сервисе)'"); + Команды[ИмяКоманды].Действие = "ОткрытьПомощникНастройкиОбменаДанными"; + + Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Элементы.ПодменюСоздать); + Элементы[ИмяКоманды].ИмяКоманды = ИмяКоманды; + + КонецЕсли; + КонецЕсли; КонецЦикла; @@ -224,9 +255,3 @@ КонецПроцедуры -&НаКлиенте -Процедура ОткрытьПомощникНастройкиОбменаДанными(Команда) - - ОбменДаннымиКлиент.ОткрытьПомощникНастройкиОбменаДанными(Команда.Имя); - -КонецПроцедуры diff --git a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Form.form b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Form.form index 65979a3c6..900ccab28 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Form.form +++ b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Form.form @@ -50,43 +50,52 @@ Special ScrollAlways ScrollAlways + true Auto true true true + + ПоказыватьПриОбновлении + 5 + true + true + + true + + + ПоказыватьПриСледующихОбновлениях + + Right + + ПоказыватьПриОбновленииРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ПоказыватьПриОбновленииКонтекстноеМеню + 6 + true + + CheckBoxField + Enter + true + Left + true + + Bottom true ФормаКоманднаяПанель -1 - - Сохранить - 5 - true - true - - true - - - СохранитьРасширеннаяПодсказка - 6 - Label - true - true - - Left - - - Form.Item.ОписаниеОбновлений.StandardCommand.Save - Normal - Auto - true - true - UserCmds - Auto - Закрыть 3 @@ -147,6 +156,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + DontBlock true true @@ -176,6 +189,24 @@ + + ПоказыватьПриСледующихОбновлениях + + <key>ru</key> + <value>Показывать при следующих обновлениях</value> + + 1 + + Boolean + + + true + + + true + + FunctionalOption.СтандартныеПодсистемыВМоделиСервиса + ВыполненныеОбработчикиОбновления diff --git a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Module.bsl b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Module.bsl index 8849b5a9b..34077fbcd 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Module.bsl +++ b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Module.bsl @@ -1,35 +1,83 @@ -////////////////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + НеПоказыватьОписаниеИзмененийСистемы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеИБ", + "НеПоказыватьОписаниеИзмененийСистемы"); + Если НеПоказыватьОписаниеИзмененийСистемы = Неопределено Тогда + ПоказыватьПриСледующихОбновлениях = Истина; + Иначе + ПоказыватьПриСледующихОбновлениях = НЕ НеПоказыватьОписаниеИзмененийСистемы; + КонецЕсли; + КонецЕсли; + + ВыполненныеОбработчикиОбновления = Неопределено; Если ПустаяСтрока(Параметры.ВыполненныеОбработчикиОбновления) Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + ВыполненныеОбработчикиОбновления = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеИБ", + "ВыполненныеОбработчики"); + КонецЕсли; + Иначе + ВыполненныеОбработчикиОбновления = ПолучитьИзВременногоХранилища(Параметры.ВыполненныеОбработчикиОбновления); + КонецЕсли; + + Если ВыполненныеОбработчикиОбновления = Неопределено Тогда ДокументОписаниеОбновлений = Метаданные.ОбщиеМакеты.Найти("ОписаниеИзмененийСистемы"); Если ДокументОписаниеОбновлений <> Неопределено Тогда ДокументОписаниеОбновлений = ПолучитьОбщийМакет(ДокументОписаниеОбновлений); Иначе ДокументОписаниеОбновлений = Новый ТабличныйДокумент(); КонецЕсли; - Иначе - ВыполненныеОбработчикиОбновления = ПолучитьИзВременногоХранилища(Параметры.ВыполненныеОбработчикиОбновления); + Иначе ДокументОписаниеОбновлений = ОбновлениеИнформационнойБазы.ДокументОписаниеОбновлений(ВыполненныеОбработчикиОбновления); КонецЕсли; + Если ДокументОписаниеОбновлений.ВысотаТаблицы = 0 Тогда Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Конфигурация успешно обновлена на версию %1'"), Метаданные.Версия); ДокументОписаниеОбновлений.Область("R1C1:R1C1").Текст = Текст; - КонецЕсли; + КонецЕсли; ОбновлениеИнформационнойБазыПереопределяемый.ПриПодготовкеМакетаОписанияОбновлений(ДокументОписаниеОбновлений); - ОписаниеОбновлений.Очистить(); + ОписаниеОбновлений.Очистить(); ОписаниеОбновлений.Вывести(ДокументОписаниеОбновлений); КонецПроцедуры +&НаКлиенте +Процедура ПриЗакрытии() + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ЗаписатьТекущиеНастройки(ПоказыватьПриСледующихОбновлениях); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + &НаКлиенте Процедура ОписаниеОбновленийВыбор(Элемент, Область, СтандартнаяОбработка) + Если Найти(Область.Текст, "http://") = 1 Тогда + ЗапуститьПриложение(Область.Текст); + КонецЕсли; ОбновлениеИнформационнойБазыКлиентПереопределяемый.ПриНажатииНаГиперссылкуВДокументеОписанияОбновлений(Область); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервереБезКонтекста +Процедура ЗаписатьТекущиеНастройки(Знач ПоказыватьПриСледующихОбновлениях) + + ОбщегоНазначения.ХранилищеОбщихНастроекУдалить("ОбновлениеИБ", "ВыполненныеОбработчики", ИмяПользователя()); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ОбновлениеИБ", "НеПоказыватьОписаниеИзмененийСистемы", + НЕ ПоказыватьПриСледующихОбновлениях, НСтр("ru = 'Не показывать описание изменений системы при обновлении версии ИБ'")); + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl index b4ef47e27..fc1430c29 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl +++ b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl @@ -1,6 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// События формы -//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -31,15 +30,81 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ВыбранноеЗначение <> Неопределено тогда + УстановитьВидимостьВариантовОтчета(ВыбранноеЗначение); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "Запись_ХранилищеВариантовОтчетов" тогда + ОбновитьПанельОтчетов(); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// Контекстные вызовы сервера +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ОткрытьОтчет(Инициатор) + + Ключ = Инициатор.Имя; + Ключ = Лев(Ключ, Найти(Ключ, "_ГруппаРаздела_")-1); + Ключ = ВариантыОтчетовКлиент.ВосстановитьЗапрещенныеСимволы(Ключ); + + ПозицияВарианта = Найти(Ключ, "\"); + ИмяОтчета = Лев(Ключ, ПозицияВарианта-1); + КлючВарианта = Прав(Ключ, СтрДлина(Ключ)-ПозицияВарианта); + + ПараметрыОтчета = Новый Структура("КлючВарианта", КлючВарианта); + + СтандартнаяОбработка = истина; + + ВариантыОтчетовКлиентПереопределяемый.ПередОткрытиемФормыОтчета(Ключ, ПараметрыОтчета, СтандартнаяОбработка); + + Если СтандартнаяОбработка тогда + Если ИмяОтчета = "Отчет.ДополнительнаяКоманда" тогда + ПараметрКоманды = ВариантыОтчетовКлиент.ПолучитьПараметрыКоманды(ЗначениеПараметровКоманд, МассивПараметровКомманд, КлючВарианта); + Если ПараметрКоманды <> Неопределено тогда + ВариантыОтчетовКлиентПереопределяемый.ВыполнитьВнешнююКоманду(КлючВарианта, ПараметрКоманды); + КонецЕсли; + Иначе + ОткрытьФорму(ИмяОтчета + ".Форма", ПараметрыОтчета, , Ключ); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ОбщийСписокВариантовОтчетов(Команда) + + ПараметрыФормы = Новый Структура("Подсистемы, ИмяФормы, КартинкаФормы"); + + ПараметрыФормы.Подсистемы = Подсистемы; + ПараметрыФормы.ИмяФормы = НСтр("ru = 'Все'") +" "+ Нрег(ИмяФормыОтчетов); + ПараметрыФормы.КартинкаФормы = КартинкаФормы; + + СтруктураПараметров = ОткрытьФорму("ОбщаяФорма.ВсеОтчеты", ПараметрыФормы, ЭтаФорма); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ОбновитьПанельОтчетов(Отказ = ложь) МассивЭлементов = Новый Массив; - + Для каждого ЭлементГруппыСсылка из Элементы.ГруппаОсновная.ПодчиненныеЭлементы Цикл Если ЭлементГруппыСсылка.Имя = "КартинкаОтчета" тогда Продолжить; @@ -159,7 +224,7 @@ | И (ИсключенныеПользователи.Пользователь = Пользователь)"; Запрос.Текст = ТЗ; - Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь); + Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); Запрос.УстановитьПараметр("Ключи", ТаблицаВариантов.ВыгрузитьКолонку("Ключ")); УстановитьПривилегированныйРежим(истина); ТаблицаПользователей = Запрос.Выполнить().Выгрузить(); @@ -285,7 +350,7 @@ Для каждого СтрокаВарианта из ТаблицаВариантов Цикл БыстрыйДоступ = СтрокаВарианта.БыстрыйДоступ; - СтрокиПользователи = ТаблицаПользователей.НайтиСтроки(Новый Структура("Ключ, Пользователь", СтрокаВарианта.Ключ, ПараметрыСеанса.ТекущийПользователь)); + СтрокиПользователи = ТаблицаПользователей.НайтиСтроки(Новый Структура("Ключ, Пользователь", СтрокаВарианта.Ключ, Пользователи.ТекущийПользователь())); Для каждого СтрокаПользователи из СтрокиПользователи Цикл БыстрыйДоступ = СтрокаПользователи.БыстрыйДоступ; КонецЦикла; @@ -494,49 +559,6 @@ Конецпроцедуры -&НаКлиенте -Процедура ОткрытьОтчет(Инициатор) - - Ключ = Инициатор.Имя; - Ключ = Лев(Ключ, Найти(Ключ, "_ГруппаРаздела_")-1); - Ключ = ВариантыОтчетовКлиент.ВосстановитьЗапрещенныеСимволы(Ключ); - - ПозицияВарианта = Найти(Ключ, "\"); - ИмяОтчета = Лев(Ключ, ПозицияВарианта-1); - КлючВарианта = Прав(Ключ, СтрДлина(Ключ)-ПозицияВарианта); - - ПараметрыОтчета = Новый Структура("КлючВарианта", КлючВарианта); - - СтандартнаяОбработка = истина; - - ВариантыОтчетовКлиентПереопределяемый.ПередОткрытиемФормыОтчета(Ключ, ПараметрыОтчета, СтандартнаяОбработка); - - Если СтандартнаяОбработка тогда - Если ИмяОтчета = "Отчет.ДополнительнаяКоманда" тогда - ПараметрКоманды = ВариантыОтчетовКлиент.ПолучитьПараметрыКоманды(ЗначениеПараметровКоманд, МассивПараметровКомманд, КлючВарианта); - Если ПараметрКоманды <> Неопределено тогда - ВариантыОтчетовКлиентПереопределяемый.ВыполнитьВнешнююКоманду(КлючВарианта, ПараметрКоманды); - КонецЕсли; - Иначе - ОткрытьФорму(ИмяОтчета + ".Форма", ПараметрыОтчета, , Ключ); - КОнецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОбщийСписокВариантовОтчетов(Команда) - - ПараметрыФормы = Новый Структура("Подсистемы, ИмяФормы, КартинкаФормы"); - - ПараметрыФормы.Подсистемы = Подсистемы; - ПараметрыФормы.ИмяФормы = "Все " + Нрег(ИмяФормыОтчетов); - ПараметрыФормы.КартинкаФормы = КартинкаФормы; - - СтруктураПараметров = ОткрытьФорму("ОбщаяФорма.ВсеОтчеты", ПараметрыФормы, ЭтаФорма); - -КонецПроцедуры - &НаСервере Процедура УстановитьВидимостьВариантовОтчета(СтруктураПараметров) @@ -556,7 +578,7 @@ УстановитьПривилегированныйРежим(Истина); Выборка = Запрос.Выполнить().Выбрать(); - ТекущийПользователь = ПараметрыСеанса.ТекущийПользователь; + ТекущийПользователь = Пользователи.ТекущийПользователь(); Пока Выборка.Следующий() Цикл ЗначениеЭлемент = СписокКлючей.НайтиПоЗначению(Выборка.Ключ); @@ -616,20 +638,3 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) - - Если ВыбранноеЗначение <> Неопределено тогда - УстановитьВидимостьВариантовОтчета(ВыбранноеЗначение); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - - Если ИмяСобытия = "Запись_ХранилищеВариантовОтчетов" тогда - ОбновитьПанельОтчетов(); - КонецЕсли; - -КонецПроцедуры diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Form.form b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Form.form index 0aeac5775..68b1d1445 100644 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Form.form +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Form.form @@ -1,63 +1,76 @@ - ГруппаПодключениеКСерверу - 1 - - КластерТребуетАвторизации - 7 - true - true - - true - - - КластерТребуетАвторизации - - Right - - OnChange - КластерТребуетАвторизацииПриИзменении - - - КластерТребуетАвторизацииРасширеннаяПодсказка - 28 - Label - true - true - - Left - - - - КластерТребуетАвторизацииКонтекстноеМеню - 8 - true - - CheckBoxField - Enter - true - Left - true - - + ГруппаАдминистрирование + 24 - ГруппаАвторизацияКластера - 9 - - ИмяАдминистратораКластера - 10 + РежимРаботы + 31 + + РазделениеДанных + 33 + + НеразделенныйАдминистраторИБ + 34 + + <key>ru</key> + <value>Имя пользователя</value> + + true + true + + true + + + НеразделенныйАдминистраторИБ + + + НеразделенныйАдминистраторИБРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + НеразделенныйАдминистраторИБКонтекстноеМеню + 35 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + true true true - - ИмяАдминистратораКластера - + + <key>ru</key> + <value>Разделение данных</value> + + + ru + Разделение данных + - ИмяАдминистратораКластераРасширеннаяПодсказка - 31 + РазделениеДанныхРасширеннаяПодсказка + 41 Label true true @@ -65,41 +78,77 @@ Left - - ИмяАдминистратораКластераКонтекстноеМеню - 11 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - Normal + Page + + Vertical + auto - - ПарольАдминистратораКластера - 12 + + НетРазделенияДанных + 32 + + АдминистраторИБ + 25 + + <key>ru</key> + <value>Имя пользователя</value> + + true + true + + true + + + АдминистраторИБ + + + ru + Администратор информационной базы, от имени которого выполняется принудительное отключение сеансов + + + АдминистраторИБРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + АдминистраторИБКонтекстноеМеню + 26 + true + + InputField + Enter + true + Left + true + + 22 + true + true + false + true + true + true + Normal + + true true true - - ПарольАдминистратораКластера - + + <key>ru</key> + <value>Нет разделения данных</value> + - ПарольАдминистратораКластераРасширеннаяПодсказка - 33 + НетРазделенияДанныхРасширеннаяПодсказка + 44 Label true true @@ -107,26 +156,10 @@ Left - - ПарольАдминистратораКластераКонтекстноеМеню - 13 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - true - Normal + Page + + Vertical + auto true @@ -134,13 +167,9 @@ true - - <key>ru</key> - <value>Параметры авторизации кластера серверов</value> - - ГруппаАвторизацияКластераРасширеннаяПодсказка - 30 + РежимРаботыРасширеннаяПодсказка + 40 Label true true @@ -148,35 +177,33 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto + Pages + Auto - НестандартныеПорты - 14 + ПарольАдминистратораИБ + 27 + + <key>ru</key> + <value>Пароль</value> + true true true - НестандартныеПорты + ПарольАдминистратораИБ - Right - - OnChange - НестандартныеПортыПриИзменении - + + ru + Пароль администратора информационной базы, от имени которого выполняется принудительное отключение сеансов + - НестандартныеПортыРасширеннаяПодсказка - 35 + ПарольАдминистратораИБРасширеннаяПодсказка + 47 Label true true @@ -185,127 +212,25 @@ - НестандартныеПортыКонтекстноеМеню - 15 + ПарольАдминистратораИБКонтекстноеМеню + 28 true - CheckBoxField + InputField Enter true Left true - - - - ГруппаПорты - 16 - - ПортКластераСерверов - 17 - true - true - - true - - - ПортКластераСерверов - - - ПортКластераСерверовРасширеннаяПодсказка - 38 - Label - true - true - - Left - - - - ПортКластераСерверовКонтекстноеМеню - 18 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - ПортАгентаСервера - 19 - true - true - - true - - - ПортАгентаСервера - - - ПортАгентаСервераРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - - ПортАгентаСервераКонтекстноеМеню - 20 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Порты</value> - - - ГруппаПортыРасширеннаяПодсказка - 37 - Label + + 15 true true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + false + true + true + true + true + Normal true @@ -315,11 +240,318 @@ <key>ru</key> - <value>Подключение к серверу</value> + <value>Укажите администратора информационной базы:</value> - ГруппаПодключениеКСерверуРасширеннаяПодсказка - 27 + ГруппаАдминистрированиеРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + + КластерТребуетАвторизации + 7 + true + true + + true + + + КластерТребуетАвторизации + + Right + + OnChange + КластерТребуетАвторизацииПриИзменении + + + КластерТребуетАвторизацииРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + КластерТребуетАвторизацииКонтекстноеМеню + 8 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаАвторизацияКластера + 9 + + ИмяАдминистратораКластера + 10 + true + true + + true + + + ИмяАдминистратораКластера + + + ИмяАдминистратораКластераРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ИмяАдминистратораКластераКонтекстноеМеню + 11 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + Normal + + + + ПарольАдминистратораКластера + 12 + true + true + + true + + + ПарольАдминистратораКластера + + + ПарольАдминистратораКластераРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ПарольАдминистратораКластераКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Параметры авторизации кластера серверов</value> + + + ГруппаАвторизацияКластераРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + НестандартныеПорты + 14 + true + true + + true + + + НестандартныеПорты + + Right + + OnChange + НестандартныеПортыПриИзменении + + + НестандартныеПортыРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + НестандартныеПортыКонтекстноеМеню + 15 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаПорты + 16 + + ПортКластераСерверов + 17 + true + true + + true + + + ПортКластераСерверов + + + ПортКластераСерверовРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + ПортКластераСерверовКонтекстноеМеню + 18 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ПортАгентаСервера + 19 + true + true + + true + + + ПортАгентаСервера + + + ПортАгентаСервераРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + ПортАгентаСервераКонтекстноеМеню + 20 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Порты</value> + + + ГруппаПортыРасширеннаяПодсказка + 58 Label true true @@ -343,17 +575,16 @@ ФормаКоманднаяПанель -1 - СохранитьПараметрыПодключения - 21 + ФормаOK + 30 true true true - false - СохранитьПараметрыПодключенияРасширеннаяПодсказка - 24 + ФормаOKРасширеннаяПодсказка + 36 Label true true @@ -361,7 +592,7 @@ Left - Form.Command.Записать + Form.Command.OK Auto true true @@ -370,17 +601,16 @@ Auto - Закрыть - 22 + ФормаОтмена + 29 true true true - false - ЗакрытьРасширеннаяПодсказка - 25 + ФормаОтменаРасширеннаяПодсказка + 37 Label true true @@ -388,8 +618,9 @@ Left - Form.StandardCommand.Close + Form.StandardCommand.Cancel Normal + Auto true true UserCmds @@ -406,7 +637,7 @@ false СправкаРасширеннаяПодсказка - 26 + 38 Label true true @@ -428,6 +659,10 @@ OnCreateAtServer ПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + LockOwner true true @@ -551,16 +786,69 @@ true - - Записать + + АдминистраторИБ <key>ru</key> - <value>Записать</value> + <value>Администратор ИБ</value> + + 1 + + CatalogRef.Пользователи + + + true + + + true + + + + ПарольАдминистратораИБ + + <key>ru</key> + <value>Пароль администратора ИБ</value> + + 2 + + String + + + + true + + + true + + + + НеразделенныйАдминистраторИБ + + <key>ru</key> + <value>Неразделенный администратор ИБ</value> + + 9 + + String + + + + true + + + true + + + + OK + + <key>ru</key> + <value>OK</value> 1 ru - Записать + OK true diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Help/ru.html b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Help/ru.html new file mode 100644 index 000000000..f6faa867a --- /dev/null +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Help/ru.html @@ -0,0 +1,9 @@ + +

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

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

     

    +

    См. также

    + \ No newline at end of file diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Module.bsl b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Module.bsl index ae961c8f6..cb8c83bef 100644 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Module.bsl +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -16,38 +16,72 @@ ПараметрыАдминистрирования = СоединенияИБ.ПолучитьПараметрыАдминистрированияИБ(); - ИмяАдминистратораКластера = ПараметрыАдминистрирования.ИмяАдминистратораКластера; - ПарольАдминистратораКластера= ПараметрыАдминистрирования.ПарольАдминистратораКластера; - ПортАгентаСервера = ПараметрыАдминистрирования.ПортАгентаСервера; - ПортКластераСерверов = ПараметрыАдминистрирования.ПортКластераСерверов; + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени( + ПараметрыАдминистрирования.ИмяАдминистратораИБ); + Если ПользовательИБ <> Неопределено Тогда + ИдентификаторАдминистратораИБ = ПользовательИБ.УникальныйИдентификатор; + КонецЕсли; - НестандартныеПорты = ПортКластераСерверов <> 0 ИЛИ ПортАгентаСервера <> 0; - КластерТребуетАвторизации = НЕ ПустаяСтрока(ИмяАдминистратораКластера); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Элементы.РежимРаботы.ТекущаяСтраница = Элементы.РазделениеДанных; + НеразделенныйАдминистраторИБ = Строка(ИдентификаторАдминистратораИБ); + СписокВыбора = Элементы.НеразделенныйАдминистраторИБ.СписокВыбора; + СписокВыбора.Очистить(); + Администраторы = РегистрыСведений.НеразделенныеПользователи.СписокАдминистраторов(); + Для каждого ЭлементСписка Из Администраторы Цикл + СписокВыбора.Добавить(Строка(ЭлементСписка.Значение), ЭлементСписка.Представление); + КонецЦикла; + Иначе + Элементы.РежимРаботы.ТекущаяСтраница = Элементы.НетРазделенияДанных; + Пользователи.НайтиНеоднозначныхПользователейИБ(, ИдентификаторАдминистратораИБ); + АдминистраторИБ = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ИдентификаторАдминистратораИБ); + КонецЕсли; + ПарольАдминистратораИБ = ПараметрыАдминистрирования.ПарольАдминистратораИБ; + + ИмяАдминистратораКластера = ПараметрыАдминистрирования.ИмяАдминистратораКластера; + ПарольАдминистратораКластера = ПараметрыАдминистрирования.ПарольАдминистратораКластера; + ПортАгентаСервера = ПараметрыАдминистрирования.ПортАгентаСервера; + ПортКластераСерверов = ПараметрыАдминистрирования.ПортКластераСерверов; + + НестандартныеПорты = ПортКластераСерверов <> 0 ИЛИ ПортАгентаСервера <> 0; + КластерТребуетАвторизации = НЕ ПустаяСтрока(ИмяАдминистратораКластера); Элементы.ГруппаПорты.Доступность = НестандартныеПорты; Элементы.ГруппаАвторизацияКластера.Доступность = КластерТребуетАвторизации; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура Записать(Команда) +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) - ОчиститьСообщения(); - ПараметрыПодключения = СохранитьПараметрыПодключения(КластерТребуетАвторизации, - ИмяАдминистратораКластера, ПарольАдминистратораКластера, НестандартныеПорты, - ПортАгентаСервера, ПортКластераСерверов); - - Если ПараметрыПодключения = Неопределено Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ПустаяСтрока(НеразделенныйАдминистраторИБ) Тогда + Возврат; + КонецЕсли; + ИмяПоля = "НеразделенныйАдминистраторИБ"; + Иначе + Если Не ЗначениеЗаполнено(АдминистраторИБ) Тогда + Возврат; + КонецЕсли; + ИмяПоля = "АдминистраторИБ"; + КонецЕсли; + ПользовательИБ = ПолучитьАдминистратораИБ(); + Если ПользовательИБ = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Указанный пользователь не имеет доступа к информационной базе.'"),, + ИмяПоля,,Отказ); Возврат; - КонецЕсли; - - Закрыть(); + КонецЕсли; + Если Не Пользователи.ЭтоПолноправныйПользователь(ПользовательИБ, Истина) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'У пользователя нет административных прав.'"),, + ИмяПоля,,Отказ); + Возврат; + КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + &НаКлиенте Процедура КластерТребуетАвторизацииПриИзменении(Элемент) @@ -63,7 +97,23 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Записать(Команда) + + ОчиститьСообщения(); + Если Не СохранитьПараметрыПодключения() Тогда + Возврат; + КонецЕсли; + + Оповестить("Запись_ПараметрыАдминистрированияИБ"); + Закрыть(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура УстановитьСостояниеПолей() @@ -74,16 +124,23 @@ КонецПроцедуры &НаСервере -Функция СохранитьПараметрыПодключения(КластерТребуетАвторизации, - ИмяАдминистратораКластера, ПарольАдминистратораКластера, НестандартныеПорты, - ПортАгентаСервера, ПортКластераСерверов) +Функция СохранитьПараметрыПодключения() Если НЕ ПроверитьЗаполнение() Тогда - Возврат Неопределено; + Возврат Ложь; КонецЕсли; ПараметрыАдминистрирования = СоединенияИБ.ПолучитьПараметрыАдминистрированияИБ(); + ПользовательИБ = ПолучитьАдминистратораИБ(); + Если ПользовательИБ <> Неопределено Тогда + ИмяАдминистратораИБ = ПользовательИБ.Имя; + Иначе + ИмяАдминистратораИБ = ""; + КонецЕсли; + ПараметрыАдминистрирования.ИмяАдминистратораИБ = ИмяАдминистратораИБ; + ПараметрыАдминистрирования.ПарольАдминистратораИБ = ПарольАдминистратораИБ; + Если КластерТребуетАвторизации Тогда ПараметрыАдминистрирования.ИмяАдминистратораКластера = ИмяАдминистратораКластера; ПараметрыАдминистрирования.ПарольАдминистратораКластера = ПарольАдминистратораКластера; @@ -100,12 +157,25 @@ ПараметрыАдминистрирования.ПортАгентаСервера = 0; КонецЕсли; - Константы.ПараметрыАдминистрированияИБ.Установить(Новый ХранилищеЗначения(ПараметрыАдминистрирования)); - СоединенияИБ.ЗаписатьПараметрыАдминистрированияИБ(ПараметрыАдминистрирования); - Возврат ПараметрыАдминистрирования; + Возврат Истина; КонецФункции +Функция ПолучитьАдминистратораИБ() + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ПустаяСтрока(НеразделенныйАдминистраторИБ) Тогда + Возврат Неопределено; + КонецЕсли; + Возврат ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + Новый УникальныйИдентификатор(НеразделенныйАдминистраторИБ)); + Иначе + Если Не ЗначениеЗаполнено(АдминистраторИБ) Тогда + Возврат Неопределено; + КонецЕсли; + Возврат ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + АдминистраторИБ.ИдентификаторПользователяИБ); + КонецЕсли; +КонецФункции diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/ПараметрыАдминистрированияСервернойИБ.mdo b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/ПараметрыАдминистрированияСервернойИБ.mdo index dfd87c50d..f26786083 100644 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/ПараметрыАдминистрированияСервернойИБ.mdo +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/ПараметрыАдминистрированияСервернойИБ.mdo @@ -3,8 +3,13 @@ ПараметрыАдминистрированияСервернойИБ ru - Параметры администрирования информационной базы + Параметры администрирования ИБ + + + ru + + PersonalComputer MobileDevice true diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form index 8aee5f83f..6f711e0a5 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form @@ -11,6 +11,7 @@ ВариантИспользованияПроксиСервера + None OnChange ИспользоватьСистемныеНастройкиПроксиСервераПриИзменении @@ -58,7 +59,7 @@ ru - Использовать другие настройки прокси-сервера + Использовать другие настройки прокси-сервера: 2 @@ -369,10 +370,9 @@ Vertical Auto - WeakSeparation + NormalSeparation true true - auto Auto Auto @@ -401,7 +401,7 @@ Left
    - Form.Command.ОК + Form.Command.КнопкаОК Auto true true @@ -566,23 +566,6 @@ true - - ИспользоватьПрокси - - <key>ru</key> - <value>Использовать прокси-сервер для соединения с Интернет</value> - - 7 - - Boolean - - - true - - - true - - ВариантИспользованияПроксиСервера @@ -620,23 +603,36 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ИспользоватьПрокси</name> + <title> + <key>ru</key> + <value>Использовать прокси</value> + + 7 + + Boolean + + + true + + + true + + - ОК + КнопкаОК <key>ru</key> <value>ОК</value> 1 - - ru - ОК - true - ОкВыполнить + КнопкаОК TextPicture @@ -648,6 +644,7 @@ Boolean + true diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl index 69babdbdb..13e613d14 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl @@ -1,9 +1,8 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - НастройкаПроксиНаКлиенте = Параметры.НастройкаПроксиНаКлиенте; Если НастройкаПроксиНаКлиенте Тогда @@ -22,36 +21,80 @@ ИспользоватьСистемныеНастройки = НастройкаПроксиСервера.Получить("ИспользоватьСистемныеНастройки"); КонецЕсли; + ВариантИспользованияПроксиСервера = ?(ИспользоватьПрокси, ?(ИспользоватьСистемныеНастройки = Истина, 1, 2), 0); + Если Не НастройкаПроксиНаКлиенте Тогда + НастройкиПрокси = Неопределено; + // Варианты настройки прокси-сервера: + // 0 - Не использовать прокси-сервер (по умолчанию, соответствует Новый ИнтернетПрокси(Ложь)) + // 1 - Использовать системные настройки прокси-сервера (соответствует Новый ИнтернетПрокси(Истина)) + // 2 - Использовать свои настройки прокси-сервера (соответствует ручной настройке параметров прокси-сервера) + // Для последнего становятся достуно ручное изменение параметров прокси-сервера + Если ВариантИспользованияПроксиСервера = 0 Тогда + НастройкиПрокси = ПустыеНастройкиПроксиСервера(); + ИначеЕсли ВариантИспользованияПроксиСервера = 1 Тогда + НастройкиПрокси = СистемныеНастройкиПроксиСервераНаСервере(); + КонецЕсли; + ИнициализироватьЭлементыФормы(ЭтаФорма, НастройкиПрокси); + КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) + + Если НастройкаПроксиНаКлиенте Тогда +#Если ВебКлиент Тогда + Предупреждение(НСтр("ru = 'В веб-клиенте параметры прокси-сервера необходимо задавать в настройках браузера.'")); + Отказ = Истина; + Возврат; +#КонецЕсли + НастройкиПрокси = Неопределено; + // Варианты настройки прокси-сервера: + // 0 - Не использовать прокси-сервер (по умолчанию, соответствует Новый ИнтернетПрокси(Ложь)) + // 1 - Использовать системные настройки прокси-сервера (соответствует Новый ИнтернетПрокси(Истина)) + // 2 - Использовать свои настройки прокси-сервера (соответствует ручной настройке параметров прокси-сервера) + // Для последнего становятся достуно ручное изменение параметров прокси-сервера + Если ВариантИспользованияПроксиСервера = 0 Тогда + НастройкиПрокси = ПустыеНастройкиПроксиСервера(); + ИначеЕсли ВариантИспользованияПроксиСервера = 1 Тогда + НастройкиПрокси = СистемныеНастройкиПроксиСервераНаКлиенте(); + КонецЕсли; + ИнициализироватьЭлементыФормы(ЭтаФорма, НастройкиПрокси); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ИспользоватьСистемныеНастройкиПроксиСервераПриИзменении(Элемент) + + ИспользоватьПрокси = ВариантИспользованияПроксиСервера > 0; + ИспользоватьСистемныеНастройки = ВариантИспользованияПроксиСервера = 1; + + НастройкиПрокси = Неопределено; // Варианты настройки прокси-сервера: - // 0 - Не использовать прокси-сервер (по-умолчанию, соответствует Новый ИнтернетПрокси(Ложь)) + // 0 - Не использовать прокси-сервер (по умолчанию, соответствует Новый ИнтернетПрокси(Ложь)) // 1 - Использовать системные настройки прокси-сервера (соответствует Новый ИнтернетПрокси(Истина)) // 2 - Использовать свои настройки прокси-сервера (соответствует ручной настройке параметров прокси-сервера) // Для последнего становятся достуно ручное изменение параметров прокси-сервера - ВариантИспользованияПроксиСервера = ?(ИспользоватьПрокси, ?(ИспользоватьСистемныеНастройки = Истина, 1, 2), 0); - Если (ВариантИспользованияПроксиСервера = 0) Тогда - ПоказатьПустыеНастройкиПроксиСервера(); - ИначеЕсли (ВариантИспользованияПроксиСервера = 1) Тогда - ПоказатьСистемныеНастройкиПроксиСервера(); + Если ВариантИспользованияПроксиСервера = 0 Тогда + НастройкиПрокси = ПустыеНастройкиПроксиСервера(); + ИначеЕсли ВариантИспользованияПроксиСервера = 1 Тогда + НастройкиПрокси = ?(НастройкаПроксиНаКлиенте, СистемныеНастройкиПроксиСервераНаКлиенте(), СистемныеНастройкиПроксиСервераНаСервере()); КонецЕсли; - Элементы.ПараметрыПрокси.Доступность = ?(ВариантИспользованияПроксиСервера = 2, Истина, Ложь); + ИнициализироватьЭлементыФормы(ЭтаФорма, НастройкиПрокси); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ -// Обработчик события нажатия на кнопку "ОК" командной панели формы -// Закрывает форму, передавая в качестве возвращаемого результата -// параметры прокси. -// &НаКлиенте -Процедура ОкВыполнить() +Процедура КнопкаОК(Команда) + // Закрывает форму, передавая в качестве возвращаемого результата параметры прокси. НастройкаПроксиСервера = Новый Соответствие; НастройкаПроксиСервера.Вставить("ИспользоватьПрокси", ИспользоватьПрокси); НастройкаПроксиСервера.Вставить("Пользователь", Пользователь); @@ -62,76 +105,78 @@ НастройкаПроксиСервера.Вставить("ИспользоватьСистемныеНастройки", ИспользоватьСистемныеНастройки); СохранитьНастройкиПроксиСервера(НастройкаПроксиНаКлиенте, НастройкаПроксиСервера); - Закрыть(НастройкаПроксиСервера); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Сохранение настроек прокси -// &НаСервереБезКонтекста Процедура СохранитьНастройкиПроксиСервера(НастройкаПроксиНаКлиенте, НастройкаПроксиСервера) - Если НастройкаПроксиНаКлиенте Тогда ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкаПроксиСервера", , НастройкаПроксиСервера); ОбновитьПовторноИспользуемыеЗначения(); Иначе ПолучениеФайловИзИнтернета.СохранитьНастройкиПроксиНаСервере1СПредприятие(НастройкаПроксиСервера); КонецЕсли; - КонецПроцедуры - -// Изменяем доступность группы редактирования параметров прокси в зависимости от варианта использования прокси-сервера -// -&НаКлиенте -Процедура ИспользоватьСистемныеНастройкиПроксиСервераПриИзменении(Элемент) +&НаКлиентеНаСервереБезКонтекста +Процедура ИнициализироватьЭлементыФормы(Форма, НастройкиПрокси) - // Варианты настройки прокси-сервера: - // 0 - Не использовать прокси-сервер (по-умолчанию, соответствует Новый ИнтернетПрокси(Ложь)) - // 1 - Использовать системные настройки прокси-сервера (соответствует Новый ИнтернетПрокси(Истина)) - // 2 - Использовать свои настройки прокси-сервера (соответствует ручной настройке параметров прокси-сервера) - // Для последнего становятся достуно ручное изменение параметров прокси-сервера - ИспользоватьПрокси = Не (ВариантИспользованияПроксиСервера = 0); - ИспользоватьСистемныеНастройки = (ВариантИспользованияПроксиСервера = 1); - Если (ВариантИспользованияПроксиСервера = 0) Тогда - ПоказатьПустыеНастройкиПроксиСервера(); - ИначеЕсли (ВариантИспользованияПроксиСервера = 1) Тогда - ПоказатьСистемныеНастройкиПроксиСервера(); + Если НастройкиПрокси <> Неопределено Тогда + Форма.Сервер = НастройкиПрокси.Сервер; + Форма.Порт = НастройкиПрокси.Порт; + Форма.Пользователь = НастройкиПрокси.Пользователь; + Форма.Пароль = НастройкиПрокси.Пароль; + Форма.НеИспользоватьПроксиДляЛокальныхАдресов = НастройкиПрокси.НеИспользоватьПроксиДляЛокальныхАдресов; КонецЕсли; - Элементы.ПараметрыПрокси.Доступность = ?(ВариантИспользованияПроксиСервера = 2, Истина, Ложь); + + // Изменяем доступность группы редактирования параметров прокси в зависимости от варианта использования прокси-сервера + Форма.Элементы.ПараметрыПрокси.Доступность = (Форма.ВариантИспользованияПроксиСервера = 2); КонецПроцедуры -// Загружаем в форму системные настройки прокси-сервера -// &НаКлиенте -Процедура ПоказатьСистемныеНастройкиПроксиСервера() +Функция СистемныеНастройкиПроксиСервераНаКлиенте() Прокси = Новый ИнтернетПрокси(Истина); - Сервер = Прокси.Сервер(); - Порт = Прокси.Порт(); - Пользователь = Прокси.Пользователь; - Пароль = Прокси.Пароль; - НеИспользоватьПроксиДляЛокальныхАдресов = Прокси.НеИспользоватьПроксиДляЛокальныхАдресов; -КонецПроцедуры - -// Загружаем в форму пустые настройки прокси-сервера -// -&НаКлиенте -Процедура ПоказатьПустыеНастройкиПроксиСервера() + Результат = Новый Структура(); + Результат.Вставить("Сервер", Прокси.Сервер()); + Результат.Вставить("Порт", Прокси.Порт()); + Результат.Вставить("Пользователь", Прокси.Пользователь); + Результат.Вставить("Пароль", Прокси.Пароль); + Результат.Вставить("НеИспользоватьПроксиДляЛокальныхАдресов", Прокси.НеИспользоватьПроксиДляЛокальныхАдресов); + Возврат Результат; - Прокси = Новый ИнтернетПрокси(Ложь); - Сервер = ""; - Порт = 0; - Пользователь = ""; - Пароль = ""; - НеИспользоватьПроксиДляЛокальныхАдресов = Ложь; +КонецФункции + +&НаСервереБезКонтекста +Функция СистемныеНастройкиПроксиСервераНаСервере() -КонецПроцедуры - + Прокси = Новый ИнтернетПрокси(Истина); + + Результат = Новый Структура(); + Результат.Вставить("Сервер", Прокси.Сервер()); + Результат.Вставить("Порт", Прокси.Порт()); + Результат.Вставить("Пользователь", Прокси.Пользователь); + Результат.Вставить("Пароль", Прокси.Пароль); + Результат.Вставить("НеИспользоватьПроксиДляЛокальныхАдресов", Прокси.НеИспользоватьПроксиДляЛокальныхАдресов); + Возврат Результат; + +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция ПустыеНастройкиПроксиСервера() + + Результат = Новый Структура(); + Результат.Вставить("Сервер", ""); + Результат.Вставить("Порт", 0); + Результат.Вставить("Пользователь", ""); + Результат.Вставить("Пароль", ""); + Результат.Вставить("НеИспользоватьПроксиДляЛокальныхАдресов", Ложь); + Возврат Результат; + +КонецФункции diff --git a/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Form.form b/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Form.form index c7ee5274f..25f498375 100644 --- a/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Form.form +++ b/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Form.form @@ -317,6 +317,7 @@ true + ShowError ПутьМодуляКриптографии @@ -353,6 +354,7 @@ true + ShowError ОтпечатокЛичногоСертификатаДляШифрования @@ -407,6 +409,7 @@ true + ShowError ОК diff --git a/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Module.bsl b/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Module.bsl index 99ead285f..4ac692804 100644 --- a/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Module.bsl +++ b/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Module.bsl @@ -33,6 +33,13 @@ &НаКлиенте Процедура ОК(Команда) + + ОчиститьСообщения(); + + Если Не ПроверитьЗаполнение() Тогда + Возврат; + КонецЕсли; + МассивСтруктур = Новый Массив; Элемент = Новый Структура; @@ -68,6 +75,7 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур); Закрыть(); + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/ПечатьДокументов/Form.form b/SSL/src/CommonForms/ПечатьДокументов/Form.form index 536321925..0211acc0f 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Form.form +++ b/SSL/src/CommonForms/ПечатьДокументов/Form.form @@ -82,6 +82,7 @@ Left true + 4 true true true @@ -141,6 +142,7 @@ Left true + 4 true true true @@ -197,6 +199,7 @@ Left true + 4 true true true @@ -253,6 +256,7 @@ Left true + 4 true true true @@ -309,6 +313,7 @@ Left true + 4 true true true @@ -365,6 +370,7 @@ Left true + 4 true true true @@ -600,6 +606,7 @@ ScrollAlways ScrollAlways Auto + true true true true @@ -675,6 +682,7 @@ ScrollAlways ScrollAlways Auto + true true true true @@ -750,6 +758,7 @@ ScrollAlways ScrollAlways Auto + true true true true @@ -825,6 +834,7 @@ ScrollAlways ScrollAlways Auto + true true true true @@ -900,6 +910,7 @@ ScrollAlways ScrollAlways Auto + true true true true @@ -1350,14 +1361,7 @@ Печать - - true - Role.ВыводНаПринтерФайлБуферОбмена - - - true - Role.ПолныеПрава - + true StdPicture.Print diff --git a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl index c37047251..cb7a88830 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl +++ b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl @@ -1,6 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -108,15 +107,15 @@ Элементы.Страницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; КонецЕсли; - Если Пользователи.ЭтоПолноправныйПользовательИБ() - ИЛИ (РольДоступна("ВыводНаПринтерФайлБуферОбмена") - И РаботаСПочтовымиСообщениями.ПолучитьДоступныеУчетныеЗаписи(Истина).Количество() > 0) Тогда + Если Пользователи.РолиДоступны("ВыводНаПринтерФайлБуферОбмена") + И РаботаСПочтовымиСообщениями.ПолучитьДоступныеУчетныеЗаписи(Истина).Количество() > 0 Тогда Элементы.ОтправитьПоПочте.Доступность = ОбъектыПечати.Количество() > 0; Иначе Элементы.ОтправитьПоПочте.Доступность = Ложь; КонецЕсли; Элементы.Перейти.Доступность = ОбъектыПечати.Количество() > 1; + Элементы.ПечатьПоКомплектно.Доступность = Пользователи.РолиДоступны("ВыводНаПринтерФайлБуферОбмена"); КонецПроцедуры @@ -147,21 +146,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура ПечатьВыполнить() - - ТабличныеДокументы = Новый СписокЗначений; - - Для Каждого ТабДокумент Из ИменаТабДокументов Цикл - ТабличныеДокументы.Добавить(ЭтаФорма["Таб" + ТабДокумент.Значение], ТабДокумент.Представление); - КонецЦикла; - - УправлениеПечатьюКлиент.РаспечататьТабличныеДокументы(ТабличныеДокументы, ОбъектыПечати, - ДоступнаПечатьПоКомплектно); - -КонецПроцедуры +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура КопииПриИзменении(Элемент) @@ -174,6 +159,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ОтправитьПоПочтеВыполнить() @@ -226,14 +214,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаСервереБезКонтекста -Процедура СохранитьНастройкиКоличестваКопий(КлючНастроек, КоличествоКопийДляПечати) - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("КоличествоКопийДляПечати", КлючНастроек, КоличествоКопийДляПечати); -КонецПроцедуры - &НаКлиенте Процедура ПерейтиКУправлениюМакетами(Команда) @@ -243,29 +223,27 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ФУНКЦИИ И ПРОЦЕДУРЫ ПОДГОТАВЛИВАЮЩИЕ ТАБЛИЧНЫЕ ДОКУМЕНТЫ К ОТПРАВКЕ +&НаКлиенте +Процедура ПечатьВыполнить() + + ТабличныеДокументы = Новый СписокЗначений; + + Для Каждого ТабДокумент Из ИменаТабДокументов Цикл + ТабличныеДокументы.Добавить(ЭтаФорма["Таб" + ТабДокумент.Значение], ТабДокумент.Представление); + КонецЦикла; + + УправлениеПечатьюКлиент.РаспечататьТабличныеДокументы(ТабличныеДокументы, ОбъектыПечати, + ДоступнаПечатьПоКомплектно); + +КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Функция ПолучитьСписокТиповФайловТабличныхДокументов(Результат) - - СписокТипов = Новый СписокЗначений; - - Если Результат.ФорматMXL Тогда - СписокТипов.Добавить(ТипФайлаТабличногоДокумента.MXL, "mxl"); - КонецЕсли; - - Если Результат.ФорматHTML Тогда - СписокТипов.Добавить(ТипФайлаТабличногоДокумента.HTML, "html"); - КонецЕсли; - - Если Результат.ФорматXLS Тогда - СписокТипов.Добавить(ТипФайлаТабличногоДокумента.XLS, "xls"); - КонецЕсли; - - Возврат СписокТипов; - -КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервереБезКонтекста +Процедура СохранитьНастройкиКоличестваКопий(КлючНастроек, КоличествоКопийДляПечати) + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("КоличествоКопийДляПечати", КлючНастроек, КоличествоКопийДляПечати); +КонецПроцедуры &НаСервере Процедура ПоместитьТабличныеДокументыВоВременноеХранилище(СписокФайлов, НастройкиСохранения) @@ -277,27 +255,21 @@ ЗаписьZipФайла = Новый ЗаписьZipФайла(ИмяАрхива); КонецЕсли; - СписокТипов = ПолучитьСписокТиповФайловТабличныхДокументов(НастройкиСохранения); - ДатаПредставление = Формат(ТекущаяДата(), "ДФ='yyyyMMdd HH:mm'"); + СписокТипов = НастройкиСохранения.СписокТипов; ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); СоздатьКаталог(ИмяВременнойПапки); Для Каждого ТабДокумент Из ИменаТабДокументов Цикл ТабДок = ЭтаФорма["Таб" + ТабДокумент.Значение]; - + НомерПечатнойФормы = ТабДокумент.Значение; Для Каждого ТипФайла Из СписокТипов Цикл - Если ОбъектыПечати.Количество() > 1 Тогда - ИмяФайла = "[ИмяМакета] ([ДатаПредставление]).[Расширение]"; - Иначе - ИмяФайла = "[Документ] ([ИмяМакета] [ДатаПредставление]).[Расширение]"; - КонецЕсли; + ИмяФайла = "[ИмяМакета] ([НомерПечатнойФормы]).[Расширение]"; - ИмяФайла = СтрЗаменить(ИмяФайла, "[Документ]", Строка(ОбъектыПечати[0].Значение)); - ИмяФайла = СтрЗаменить(ИмяФайла, "[ИмяМакета]", ТабДокумент.Представление); - ИмяФайла = СтрЗаменить(ИмяФайла, "[ДатаПредставление]", ДатаПредставление); - ИмяФайла = СтрЗаменить(ИмяФайла, "[Расширение]", ТипФайла.Представление); + ИмяФайла = СтрЗаменить(ИмяФайла, "[ИмяМакета]", ТабДокумент.Представление); + ИмяФайла = СтрЗаменить(ИмяФайла, "[НомерПечатнойФормы]", НомерПечатнойФормы); + ИмяФайла = СтрЗаменить(ИмяФайла, "[Расширение]", ТипФайла.Представление); ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла); diff --git a/SSL/src/CommonForms/ПодключениеКонечнойТочки/Form.form b/SSL/src/CommonForms/ПодключениеКонечнойТочки/Form.form new file mode 100644 index 000000000..b6ba85bab --- /dev/null +++ b/SSL/src/CommonForms/ПодключениеКонечнойТочки/Form.form @@ -0,0 +1,579 @@ + + + + <key>ru</key> + <value>Подключение конечной точки</value> + + + НастройкиПодключенияОтправителя + 9 + + НастройкиОтправителяWSURLВебСервиса + 19 + true + true + + true + + + НастройкиОтправителяWSURLВебСервиса + + + НастройкиОтправителяWSURLВебСервисаРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + НастройкиОтправителяWSURLВебСервисаКонтекстноеМеню + 20 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + НастройкиОтправителяWSИмяПользователя + 21 + true + true + + true + + + НастройкиОтправителяWSИмяПользователя + + + НастройкиОтправителяWSИмяПользователяРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + НастройкиОтправителяWSИмяПользователяКонтекстноеМеню + 22 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + НастройкиОтправителяWSПароль + 23 + true + true + + true + + + НастройкиОтправителяWSПароль + + + НастройкиОтправителяWSПарольРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + НастройкиОтправителяWSПарольКонтекстноеМеню + 24 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройки подключения к конечной точке</value> + + + ru + Настройки подключения отправителя + + + НастройкиПодключенияОтправителяРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + + НастройкиПодключенияПолучателя + 12 + + НастройкиПолучателяWSURLВебСервиса + 13 + true + true + + true + + + НастройкиПолучателяWSURLВебСервиса + + + НастройкиПолучателяWSURLВебСервисаРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + НастройкиПолучателяWSURLВебСервисаКонтекстноеМеню + 14 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + НастройкиПолучателяWSИмяПользователя + 15 + true + true + + true + + + НастройкиПолучателяWSИмяПользователя + + + НастройкиПолучателяWSИмяПользователяРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + НастройкиПолучателяWSИмяПользователяКонтекстноеМеню + 16 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + НастройкиПолучателяWSПароль + 17 + true + true + + true + + + НастройкиПолучателяWSПароль + + + НастройкиПолучателяWSПарольРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + НастройкиПолучателяWSПарольКонтекстноеМеню + 18 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройки подключения из конечной точки к этой информационной базе</value> + + + ru + Настройки подключения получателя + + + НастройкиПодключенияПолучателяРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаПодключитьКонечнуюТочку + 10 + true + true + + true + + + ФормаПодключитьКонечнуюТочкуРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + Form.Command.ПодключитьКонечнуюТочку + Auto + true + true + true + UserCmds + Auto + + + ФормаЗакрыть + 11 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + true + true + UserCmds + Auto + + Right + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + CustomizeForm + Help + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + НастройкиОтправителяWSURLВебСервиса + + <key>ru</key> + <value>Строка подключения</value> + + 1 + + String + + + + true + + + true + + ShowError + + + НастройкиОтправителяWSИмяПользователя + + <key>ru</key> + <value>Имя пользователя</value> + + 2 + + String + + 50 + + + + true + + + true + + + + НастройкиОтправителяWSПароль + + <key>ru</key> + <value>Пароль</value> + + 3 + + String + + 50 + + + + true + + + true + + + + СобытиеЖурналаРегистрацииПодключениеКонечнойТочки + + <key>ru</key> + <value>Событие журнала регистрации подключение конечной точки</value> + + 5 + + String + + + + true + + + true + + + + НастройкиПолучателяWSURLВебСервиса + + <key>ru</key> + <value>Строка подключения</value> + + 4 + + String + + + + true + + + true + + ShowError + + + НастройкиПолучателяWSИмяПользователя + + <key>ru</key> + <value>Имя пользователя</value> + + 6 + + String + + 50 + + + + true + + + true + + + + НастройкиПолучателяWSПароль + + <key>ru</key> + <value>Пароль</value> + + 7 + + String + + 50 + + + + true + + + true + + + + ПодключитьКонечнуюТочку + + <key>ru</key> + <value>Подключить</value> + + 1 + + ru + Подключить конечную точку + + + true + + + + ПодключитьКонечнуюТочку + + + Auto + Auto + + + + + + diff --git a/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl b/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl new file mode 100644 index 000000000..c29ad0886 --- /dev/null +++ b/SSL/src/CommonForms/ПодключениеКонечнойТочки/Module.bsl @@ -0,0 +1,98 @@ +&НаКлиенте +Перем ЗакрытьФормуБезусловно; + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + СобытиеЖурналаРегистрацииПодключениеКонечнойТочки = ОбменСообщениямиВнутренний.СобытиеЖурналаРегистрацииПодключениеКонечнойТочки(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ЗакрытьФормуБезусловно = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы( + Отказ, + , + ЗакрытьФормуБезусловно, + НСтр("ru = 'Отменить подключение конечной точки?'") + ); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ПодключитьКонечнуюТочку(Команда) + + Состояние(НСтр("ru = 'Выполняется подключение конечной точки. Пожалуйста, подождите...'")); + + Отказ = Ложь; + ОшибкаЗаполнения = Ложь; + + ПодключитьКонечнуюТочкуНаСервере(Отказ, ОшибкаЗаполнения); + + Если ОшибкаЗаполнения Тогда + Возврат; + КонецЕсли; + + Если Отказ Тогда + + НСтрока = НСтр("ru = 'При подключении конечной точки возникли ошибки. + |Перейти в журнал регистрации?'"); + Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); + Если Ответ = КодВозвратаДиалога.Да Тогда + + Отбор = Новый Структура; + Отбор.Вставить("СобытиеЖурналаРегистрации", СобытиеЖурналаРегистрацииПодключениеКонечнойТочки); + ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма", Отбор, ЭтаФорма); + + КонецЕсли; + Возврат; + КонецЕсли; + + Оповестить(ОбменСообщениямиКлиент.ИмяСобытияДобавленаКонечнаяТочка()); + + Предупреждение(НСтр("ru = 'Подключение конечной точки успешно завершено.'")); + + ЗакрытьФормуБезусловно = Истина; + + Закрыть(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ПодключитьКонечнуюТочкуНаСервере(Отказ, ОшибкаЗаполнения) + + Если Не ПроверитьЗаполнение() Тогда + ОшибкаЗаполнения = Истина; + Возврат; + КонецЕсли; + + ОбменСообщениями.ПодключитьКонечнуюТочку( + Отказ, + НастройкиОтправителяWSURLВебСервиса, + НастройкиОтправителяWSИмяПользователя, + НастройкиОтправителяWSПароль, + НастройкиПолучателяWSURLВебСервиса, + НастройкиПолучателяWSИмяПользователя, + НастройкиПолучателяWSПароль + ); + +КонецПроцедуры + + diff --git a/SSL/src/CommonForms/ПодключениеКонечнойТочки/ПодключениеКонечнойТочки.mdo b/SSL/src/CommonForms/ПодключениеКонечнойТочки/ПодключениеКонечнойТочки.mdo new file mode 100644 index 000000000..daf4dfc07 --- /dev/null +++ b/SSL/src/CommonForms/ПодключениеКонечнойТочки/ПодключениеКонечнойТочки.mdo @@ -0,0 +1,10 @@ + + + ПодключениеКонечнойТочки + + ru + Подключение конечной точки + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Module.bsl b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Module.bsl index 5f5805a30..dd0719941 100644 --- a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Module.bsl +++ b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Module.bsl @@ -22,8 +22,7 @@ //------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ И ЭЛЕМЕНТОВ ФОРМЫ -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -57,6 +56,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура СохранитьПарольИПродолжитьВыполнить() @@ -77,8 +79,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СЕРВИСНЫЕ ФУНКЦИИ -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура СохранитьПароль(Значение) diff --git a/SSL/src/CommonForms/ПоискПоИндексу/ConditionalAppearance.dcssca b/SSL/src/CommonForms/ПоискПоИндексу/ConditionalAppearance.dcssca index 6abab17f4..844eb99f9 100644 --- a/SSL/src/CommonForms/ПоискПоИндексу/ConditionalAppearance.dcssca +++ b/SSL/src/CommonForms/ПоискПоИндексу/ConditionalAppearance.dcssca @@ -19,7 +19,7 @@ ЦветТекста - style:УдаленныйДополнительныйРеквизитЦвет + style:НедоступныеДанныеЦвет diff --git a/SSL/src/CommonForms/ПоискПоИндексу/Form.form b/SSL/src/CommonForms/ПоискПоИндексу/Form.form index 8142d34db..cbcbab8c5 100644 --- a/SSL/src/CommonForms/ПоискПоИндексу/Form.form +++ b/SSL/src/CommonForms/ПоискПоИндексу/Form.form @@ -963,6 +963,26 @@ + + Индекс + + <key>ru</key> + <value>Индекс</value> + + 6 + + String + + 6 + + + + true + + + true + + КомандаВыбрать @@ -1050,6 +1070,12 @@ </numberQualifiers> </valueType> </parameters> + <parameters> + <name>СкрыватьНеактуальныеАдреса</name> + <valueType> + <types>Boolean</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/CommonForms/ПоискПоИндексу/Module.bsl b/SSL/src/CommonForms/ПоискПоИндексу/Module.bsl index 566ade95e..a1ead5e45 100644 --- a/SSL/src/CommonForms/ПоискПоИндексу/Module.bsl +++ b/SSL/src/CommonForms/ПоискПоИндексу/Module.bsl @@ -13,6 +13,21 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Индекс = Параметры.Индекс; + + НайденоПоИндексу = УправлениеКонтактнойИнформациейКлассификаторы.НайтиЗаписиВАКПоИндексу(Параметры.Индекс); + Найдено = НайденоПоИндексу.Количество; + Если Найдено = 0 Тогда + Отказ = Истина; + ИначеЕсли Найдено > 1 Тогда + Параметры.НайденныйРегион = НайденоПоИндексу.НайденныйРегион; + Параметры.НайденныйРайон = НайденоПоИндексу.НайденныйРайон; + Параметры.ПризнакАктуальности = НайденоПоИндексу.ПризнакАктуальности; + Параметры.АдресВХранилище = НайденоПоИндексу.АдресВХранилище; + СкрыватьНеактуальныеАдреса = Параметры.СкрыватьНеактуальныеАдреса; + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ВводАдреса", "СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); + КонецЕсли; + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; @@ -65,7 +80,7 @@ Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ВводАдреса", "СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - + КонецПроцедуры @@ -99,6 +114,10 @@ &НаКлиенте Процедура ОбработатьВыбор() + Если Элементы.НайденныеЗаписиПоИндексу.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + Если Элементы.НайденныеЗаписиПоИндексу.ТекущиеДанные.ПризнакАктуальности <> 0 Тогда СписокКнопок = Новый СписокЗначений; СписокКнопок.Добавить("Выбрать"); @@ -111,7 +130,9 @@ КонецЕсли; КонецЕсли; - Закрыть(Элементы.НайденныеЗаписиПоИндексу.ТекущиеДанные.Код); + КодАдресногоЭлемента = Элементы.НайденныеЗаписиПоИндексу.ТекущиеДанные.Код; + Результат = ОбработатьРезультатПоискаПоИндексу(КодАдресногоЭлемента); + Закрыть(Результат); КонецПроцедуры @@ -138,3 +159,65 @@ КонецЕсли; КонецПроцедуры + +&НаСервереБезКонтекста +Функция ОбработатьРезультатПоискаПоИндексу(КодАдресногоЭлемента) + + // Восстанавливаем значение флага "Скрывать неактуальные адреса" + Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ВводАдреса", "СкрыватьНеактуальныеАдреса"); + Если Значение = Неопределено Тогда + Результат = Новый Структура("СкрыватьНеактуальныеАдреса", Ложь); + Иначе + Результат = Новый Структура("СкрыватьНеактуальныеАдреса", Значение); + КонецЕсли; + + // Заполняем адресные элементы + Если КодАдресногоЭлемента = Неопределено Тогда + Результат.Вставить("ПризнакАктуальности", 0); + Результат.Вставить("Регион", ""); + Результат.Вставить("Результат", ""); + Результат.Вставить("Город", ""); + Результат.Вставить("НаселенныйПункт", ""); + Результат.Вставить("Улица", ""); + Иначе + УправлениеКонтактнойИнформациейКлассификаторы.ПоКодуАдресногоЭлементаВСтруктуруПолучитьЕгоКомпоненты( + КодАдресногоЭлемента, Результат); + + ПризнакАктуальности = Результат.ПризнакАктуальности; + Регион = Результат.Регион; + Район = Результат.Район; + Город = Результат.Город; + НаселенныйПункт = Результат.НаселенныйПункт; + Улица = Результат.Улица; + + СтруктураАдреса = УправлениеКонтактнойИнформациейКлассификаторы.ПолучитьСтруктуруАдресаНаСервере(КодАдресногоЭлемента); + КонецЕсли; + + // Заполняем структуру загруженных по региону + СтруктураЗагруженных = ЗагруженныеПоляПоРегиону(СтруктураАдреса); + Результат.Вставить("СтруктураЗагруженных", СтруктураЗагруженных); + Результат.Вставить("СтруктураАдреса", СтруктураАдреса); + + Возврат Результат; + +КонецФункции + +&НаСервереБезКонтекста +Функция ЗагруженныеПоляПоРегиону(СтруктураАдреса) + + Если УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(СтруктураАдреса.Регион) Тогда + + СтруктураЗагруженных = УправлениеКонтактнойИнформациейКлассификаторы.СтруктураЗагруженныхЭлементовАдреса( + СтруктураАдреса.Регион, СтруктураАдреса.Район, СтруктураАдреса.Город, СтруктураАдреса.НаселенныйПункт, СтруктураАдреса.Улица); + + Возврат СтруктураЗагруженных; + + Иначе + + Возврат Новый Структура("Регион", Ложь); + + КонецЕсли; + +КонецФункции + + diff --git a/SSL/src/CommonForms/ПользователиСервиса/Form.form b/SSL/src/CommonForms/ПользователиСервиса/Form.form new file mode 100644 index 000000000..1aa90211d --- /dev/null +++ b/SSL/src/CommonForms/ПользователиСервиса/Form.form @@ -0,0 +1,726 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:Table"> + <name>ПользователиСервиса</name> + <id>1</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ПользователиСервиса</segments> + </dataPath> + <titleLocation>None</titleLocation> + <excludedCommands>Add</excludedCommands> + <excludedCommands>Change</excludedCommands> + <excludedCommands>Copy</excludedCommands> + <excludedCommands>Delete</excludedCommands> + <excludedCommands>EndEdit</excludedCommands> + <excludedCommands>MoveDown</excludedCommands> + <excludedCommands>MoveUp</excludedCommands> + <excludedCommands>SelectAll</excludedCommands> + <excludedCommands>SortListAsc</excludedCommands> + <excludedCommands>SortListDesc</excludedCommands> + <items xsi:type="form:FormField"> + <name>ПользователиСервисаДобавить</name> + <id>16</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ПользователиСервиса.Добавить</segments> + </dataPath> + <titleLocation>None</titleLocation> + <extendedTooltip> + <name>ПользователиСервисаДобавитьРасширеннаяПодсказка</name> + <id>35</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ПользователиСервисаДобавитьКонтекстноеМеню</name> + <id>17</id> + <autoFill>true</autoFill> + </contextMenu> + <type>CheckBoxField</type> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> + </items> + <items xsi:type="form:FormField"> + <name>ПользователиСервисаИмя</name> + <id>4</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ПользователиСервиса.Имя</segments> + </dataPath> + <extendedTooltip> + <name>ПользователиСервисаИмяРасширеннаяПодсказка</name> + <id>37</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ПользователиСервисаИмяКонтекстноеМеню</name> + <id>5</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>ПользователиСервисаПолноеИмя</name> + <id>6</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ПользователиСервиса.ПолноеИмя</segments> + </dataPath> + <extendedTooltip> + <name>ПользователиСервисаПолноеИмяРасширеннаяПодсказка</name> + <id>39</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ПользователиСервисаПолноеИмяКонтекстноеМеню</name> + <id>7</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>ПользователиСервисаКомментарий</name> + <id>10</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ПользователиСервиса.Комментарий</segments> + </dataPath> + <extendedTooltip> + <name>ПользователиСервисаКомментарийРасширеннаяПодсказка</name> + <id>41</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ПользователиСервисаКомментарийКонтекстноеМеню</name> + <id>11</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>ПользователиСервисаИдентификатор</name> + <id>12</id> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ПользователиСервиса.Идентификатор</segments> + </dataPath> + <extendedTooltip> + <name>ПользователиСервисаИдентификаторРасширеннаяПодсказка</name> + <id>43</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ПользователиСервисаИдентификаторКонтекстноеМеню</name> + <id>13</id> + <autoFill>true</autoFill> + </contextMenu> + <type>LabelField</type> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:LabelFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>ПользователиСервисаЕстьДоступ</name> + <id>14</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ПользователиСервиса.ЕстьДоступ</segments> + </dataPath> + <extendedTooltip> + <name>ПользователиСервисаЕстьДоступРасширеннаяПодсказка</name> + <id>45</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ПользователиСервисаЕстьДоступКонтекстноеМеню</name> + <id>15</id> + <autoFill>true</autoFill> + </contextMenu> + <type>CheckBoxField</type> + <readOnly>true</readOnly> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> + </items> + <autoCommandBar> + <name>ПользователиСервисаКоманднаяПанель</name> + <id>3</id> + <items xsi:type="form:Button"> + <name>ПользователиСервисаУстановитьВсе</name> + <id>18</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ПользователиСервисаУстановитьВсеРасширеннаяПодсказка</name> + <id>23</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.УстановитьВсе</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>ПользователиСервисаСнятьВсе</name> + <id>19</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ПользователиСервисаСнятьВсеРасширеннаяПодсказка</name> + <id>24</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.СнятьВсе</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <horizontalAlign>Left</horizontalAlign> + <autoFill>true</autoFill> + </autoCommandBar> + <searchStringAddition> + <name>ПользователиСервисаСтрокаПоиска</name> + <id>26</id> + <extendedTooltip> + <name>ПользователиСервисаСтрокаПоискаРасширеннаяПодсказка</name> + <id>28</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ПользователиСервисаСтрокаПоискаКонтекстноеМеню</name> + <id>27</id> + <autoFill>true</autoFill> + </contextMenu> + <source>ПользователиСервиса</source> + <extInfo xsi:type="form:SearchStringAdditionExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + </extInfo> + </searchStringAddition> + <viewStatusAddition> + <name>ПользователиСервисаСостояниеПросмотра</name> + <id>29</id> + <extendedTooltip> + <name>ПользователиСервисаСостояниеПросмотраРасширеннаяПодсказка</name> + <id>31</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ПользователиСервисаСостояниеПросмотраКонтекстноеМеню</name> + <id>30</id> + <autoFill>true</autoFill> + </contextMenu> + <type>ViewStatusAddition</type> + <source>ПользователиСервиса</source> + <extInfo xsi:type="form:ViewStatusAdditionExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + </extInfo> + </viewStatusAddition> + <searchControlAddition> + <name>ПользователиСервисаУправлениеПоиском</name> + <id>32</id> + <extendedTooltip> + <name>ПользователиСервисаУправлениеПоискомРасширеннаяПодсказка</name> + <id>34</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ПользователиСервисаУправлениеПоискомКонтекстноеМеню</name> + <id>33</id> + <autoFill>true</autoFill> + </contextMenu> + <type>SearchControlAddition</type> + <source>ПользователиСервиса</source> + <extInfo xsi:type="form:SearchControlAdditionExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + </extInfo> + </searchControlAddition> + <extendedTooltip> + <name>ПользователиСервисаРасширеннаяПодсказка</name> + <id>25</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ПользователиСервисаКонтекстноеМеню</name> + <id>2</id> + <autoFill>true</autoFill> + </contextMenu> + <changeRowSet>true</changeRowSet> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <autoMaxRowsCount>true</autoMaxRowsCount> + <selectionMode>MultiRow</selectionMode> + <header>true</header> + <headerHeight>1</headerHeight> + <footerHeight>1</footerHeight> + <horizontalScrollBar>AutoUse</horizontalScrollBar> + <verticalScrollBar>AutoUse</verticalScrollBar> + <horizontalLines>true</horizontalLines> + <verticalLines>true</verticalLines> + <useAlternationRowColorBWA>false</useAlternationRowColorBWA> + <autoInsertNewRow>true</autoInsertNewRow> + <searchOnInput>Auto</searchOnInput> + <initialListView>Auto</initialListView> + <horizontalStretch>true</horizontalStretch> + <verticalStretch>true</verticalStretch> + <enableStartDrag>true</enableStartDrag> + <enableDrag>true</enableDrag> + <searchStringLocation>None</searchStringLocation> + <viewStatusLocation>None</viewStatusLocation> + <searchControlLocation>None</searchControlLocation> + <autoMaxCardHeight>true</autoMaxCardHeight> + <rowFilter xsi:type="core:UndefinedValue"/> + </items> + <items xsi:type="form:FormGroup"> + <name>ГруппаКнопкиДействий</name> + <id>20</id> + <items xsi:type="form:Button"> + <name>ДобавитьВыбранныхПользователей</name> + <id>21</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ДобавитьВыбранныхПользователейРасширеннаяПодсказка</name> + <id>56</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.ДобавитьВыбранныхПользователей</commandName> + <representation>Auto</representation> + <defaultButton>true</defaultButton> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>Отмена</name> + <id>22</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ОтменаРасширеннаяПодсказка</name> + <id>57</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.StandardCommand.Close</commandName> + <buttonImportance>Normal</buttonImportance> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Группа кнопки действий</value> + + + ru + Группа кнопки действий + + + ГруппаКнопкиДействийРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + CommandBar + + Right + +
    + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + ПользователиСервиса + + <key>ru</key> + <value>Пользователи сервиса</value> + + 1 + + ValueTable + + + true + + + true + + + Имя + + <key>ru</key> + <value>Имя</value> + + 1 + + String + + 100 + + + + true + + + true + + + + ПолноеИмя + + <key>ru</key> + <value>Полное имя</value> + + 2 + + String + + 100 + + + + true + + + true + + + + Идентификатор + + <key>ru</key> + <value>Идентификатор</value> + + 3 + + UUID + + + true + + + true + + + + Комментарий + + <key>ru</key> + <value>Комментарий</value> + + 4 + + String + + 500 + + + + true + + + true + + + + ЕстьДоступ + + <key>ru</key> + <value>Есть доступ</value> + + 5 + + Boolean + + + true + + + true + + + + Добавить + + <key>ru</key> + <value>Добавить</value> + + 6 + + Boolean + + + true + + + true + + + + + УстановитьВсе + + <key>ru</key> + <value>Установить все</value> + + 1 + + ru + Установить все + + + true + + + StdPicture.CheckAll + + + + УстановитьВсе + + + Auto + Auto + + + СнятьВсе + + <key>ru</key> + <value>Снять все</value> + + 2 + + ru + Снять все + + + true + + + StdPicture.UncheckAll + + + + СнятьВсе + + + Auto + Auto + + + ДобавитьВыбранныхПользователей + + <key>ru</key> + <value>Добавить выбранных пользователей</value> + + 3 + + ru + Добавить выбранных пользователей + + + true + + + + ДобавитьВыбранныхПользователей + + + Auto + Auto + + + ПараметрыАвторизации + + + + РежимВыбора + + Boolean + + true + + + + + + diff --git a/SSL/src/CommonForms/ПользователиСервиса/Module.bsl b/SSL/src/CommonForms/ПользователиСервиса/Module.bsl new file mode 100644 index 000000000..fed26869b --- /dev/null +++ b/SSL/src/CommonForms/ПользователиСервиса/Module.bsl @@ -0,0 +1,154 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение(НСтр("ru = 'Недостаточно прав для добавления пользователей'")); + КонецЕсли; + + РежимРаботы = Константы.РежимИспользованияИнформационнойБазы.Получить(); + Если РежимРаботы = Перечисления.РежимыИспользованияИнформационнойБазы.Демонстрационный Тогда + ВызватьИсключение(НСтр("ru = 'В демонстрационном режиме не доступно добавление новых пользователей'")); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Прокси = РаботаВМоделиСервиса.ПолучитьПроксиМенеджераСервиса(); + + СообщениеОбОшибке = ""; + СписокПользователей = Неопределено; + + ТекущаяОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + Результат = Прокси.GetUserList(ТекущаяОбластьДанных, СписокПользователей, СообщениеОбОшибке); + + Если НЕ Результат Тогда + ШаблонСообщения = НСтр("ru = 'Ошибка при попытке получения списка пользователей сервиса: + |%1'"); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, СообщениеОбОшибке)); + КонецЕсли; + + ИдентификаторыПользователей = Новый Массив; + + Для каждого ИнформацияОПользователе Из СписокПользователей.User Цикл + ИдентификаторыПользователей.Добавить(Новый УникальныйИдентификатор(ИнформацияОПользователе.UserID)); + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка, + | Пользователи.ИдентификаторПользователяСервиса КАК Идентификатор + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяСервиса В(&Идентификаторы)"; + Запрос.УстановитьПараметр("Идентификаторы", ИдентификаторыПользователей); + Результат = Запрос.Выполнить(); + ИдентификаторыПользователейСДоступом = Результат.Выгрузить().ВыгрузитьКолонку("Идентификатор"); + + Для каждого ИнформацияОПользователе Из СписокПользователей.User Цикл + ИдентификаторПользователя = Новый УникальныйИдентификатор(ИнформацияОПользователе.UserID); + Если ИдентификаторыПользователейСДоступом.Найти(ИдентификаторПользователя) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + СтрокаПользователя = ПользователиСервиса.Добавить(); + СтрокаПользователя.Имя = ИнформацияОПользователе.Name; + СтрокаПользователя.ПолноеИмя = ИнформацияОПользователе.FullName; + СтрокаПользователя.Комментарий = ИнформацияОПользователе.Comment; + СтрокаПользователя.Идентификатор = ИдентификаторПользователя; + СтрокаПользователя.ЕстьДоступ = ИнформацияОПользователе.HasAccess; + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура УстановитьВсе(Команда) + + Для каждого СтрокаТаблицы Из ПользователиСервиса Цикл + СтрокаТаблицы.Добавить = Истина; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура СнятьВсе(Команда) + + Для каждого СтрокаТаблицы Из ПользователиСервиса Цикл + СтрокаТаблицы.Добавить = Ложь; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьВыбранныхПользователей(Команда) + + ДобавитьВыбранныхПользователейНаСервере(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ДобавитьВыбранныхПользователейНаСервере() + + УстановитьПривилегированныйРежим(Истина); + + Прокси = РаботаВМоделиСервиса.ПолучитьПроксиМенеджераСервиса(); + + НаборПрав = "ПользовательОбластиДанных"; + + Счетчик = 0; + КоличествоСтрок = ПользователиСервиса.Количество(); + Для Счетчик = 1 По КоличествоСтрок Цикл + СтрокаТаблицы = ПользователиСервиса[КоличествоСтрок - Счетчик]; + Если НЕ СтрокаТаблицы.Добавить Тогда + Продолжить; + КонецЕсли; + + UserInfo = Неопределено; + СообщениеОбОшибке = ""; + Результат = Прокси.GetUserInfo(Строка(СтрокаТаблицы.Идентификатор), + UserInfo, СообщениеОбОшибке); + Если НЕ Результат Тогда + ШаблонСообщения = НСтр("ru = 'Ошибка при получении информации о пользователе с идентификатором %1: + |%2'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, СтрокаТаблицы.Идентификатор, СообщениеОбОшибке); + ЗаписьЖурналаРегистрации("ManageApplication", УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщения); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + Продолжить; + КонецЕсли; + + СообщениеОбОшибке = ""; + ТекущаяОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + Результат = Прокси.GrantUserAccess(Строка(СтрокаТаблицы.Идентификатор), ТекущаяОбластьДанных, "User", СообщениеОбОшибке); + + Если НЕ Результат Тогда + ШаблонСообщения = НСтр("ru = 'Ошибка при предоставлении пользователя доступа в приложение %1 с сервисом: + |%2'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, СтрокаТаблицы.Имя, СообщениеОбОшибке); + ЗаписьЖурналаРегистрации("ManageApplication", УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщения); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + ОтменитьТранзакцию(); + Продолжить; + КонецЕсли; + + ПользователиСервиса.Удалить(СтрокаТаблицы); + + КонецЦикла; + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ПользователиСервиса/ПользователиСервиса.mdo b/SSL/src/CommonForms/ПользователиСервиса/ПользователиСервиса.mdo new file mode 100644 index 000000000..94ea81fb2 --- /dev/null +++ b/SSL/src/CommonForms/ПользователиСервиса/ПользователиСервиса.mdo @@ -0,0 +1,11 @@ + + + ПользователиСервиса + + ru + Пользователи сервиса + + PersonalComputer + MobileDevice + true + diff --git a/SSL/src/CommonForms/ПраваДоступа/Module.bsl b/SSL/src/CommonForms/ПраваДоступа/Module.bsl index addb0c570..d26d4c3ed 100644 --- a/SSL/src/CommonForms/ПраваДоступа/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступа/Module.bsl @@ -1,7 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,13 +12,13 @@ // Установка заголовка формы. Заголовок = УправлениеДоступом.ЗаголовокПодчиненнойФормы(НСтр("ru = 'Права доступа: %1 (%2)'"), Параметры.Пользователь); - ПользовательИБПолноправный = Пользователи.ЭтоПолноправныйПользовательИБ(); + ПользовательИБПолноправный = Пользователи.ЭтоПолноправныйПользователь(); СвойДоступ = Параметры.Пользователь = Пользователи.АвторизованныйПользователь(); ПользовательИБОтветственный = НЕ ПользовательИБПолноправный И ПравоДоступа("Редактирование", Метаданные.Справочники.ГруппыДоступа); Элементы.ГруппыДоступаКонтекстноеМенюИзменитьГруппу.Видимость = ПользовательИБПолноправный ИЛИ ПользовательИБОтветственный; - Элементы.ФормаОтчетПраваДоступа.Видимость = ПользовательИБПолноправный ИЛИ Параметры.Пользователь = ОбщегоНазначения.ТекущийПользователь(); + Элементы.ФормаОтчетПраваДоступа.Видимость = ПользовательИБПолноправный ИЛИ Параметры.Пользователь = Пользователи.ТекущийПользователь(); // Настройка команды для неполноправного пользователя Элементы.ФормаИзменитьГруппу.Видимость = НЕ ПользовательИБПолноправный И ПользовательИБОтветственный; @@ -64,8 +62,8 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = "ИзмененаГруппаДоступа" - ИЛИ ИмяСобытия = "ИзмененПрофильГруппДоступа" Тогда + Если ВРег(ИмяСобытия) = ВРег("Запись_ГруппыДоступа") + ИЛИ ВРег(ИмяСобытия) = ВРег("Запись_ПрофилиГруппДоступа") Тогда ВывестиГруппыДоступа(); РазвернутьПодсистемыРолей(); @@ -89,8 +87,57 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ГруппыДоступа + +&НаКлиенте +Процедура ГруппыДоступаПриАктивизацииСтроки(Элемент) + + ТекущиеДанные = Элементы.ГруппыДоступа.ТекущиеДанные; + ТекущийРодитель = Элементы.ГруппыДоступа.ТекущийРодитель; + + Если ТекущиеДанные = Неопределено Тогда + ГруппаДоступаИзменена = ЗначениеЗаполнено(ТекущаяГруппаДоступа); + ТекущаяГруппаДоступа = Неопределено; + Иначе + НоваяГруппаДоступа = ?(ТекущийРодитель = Неопределено, ТекущиеДанные.ГруппаДоступа, ТекущийРодитель.ГруппаДоступа); + ГруппаДоступаИзменена = ТекущаяГруппаДоступа <> НоваяГруппаДоступа; + ТекущаяГруппаДоступа = НоваяГруппаДоступа; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ГруппыДоступаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + НайденнаяСтрока = ГруппыДоступа.НайтиПоИдентификатору(ВыбраннаяСтрока); + Если НайденнаяСтрока <> Неопределено Тогда + Если Элементы.ФормаИзменитьГруппу.Видимость + ИЛИ Элементы.ГруппыДоступаИзменитьГруппу.Видимость Тогда + ИзменитьГруппу(Элементы.ФормаИзменитьГруппу); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Роли + +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей + +&НаКлиенте +Процедура РолиПометкаПриИзменении(Элемент) + + Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда + ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ВключитьВГруппу(Команда) @@ -107,13 +154,14 @@ Если ТипЗнч(НоваяГруппаДоступаПользователя) = Тип("СправочникСсылка.ГруппыДоступа") И ЗначениеЗаполнено(НоваяГруппаДоступаПользователя) Тогда - // + ОписаниеОшибки = ""; ИзменитьСоставГруппы(НоваяГруппаДоступаПользователя, Истина, ОписаниеОшибки); Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда Предупреждение(ОписаниеОшибки); Иначе - Оповестить("ИзмененаГруппаДоступа", НоваяГруппаДоступаПользователя); + ОповеститьОбИзменении(НоваяГруппаДоступаПользователя); + Оповестить("Запись_ГруппыДоступа", Новый Структура, НоваяГруппаДоступаПользователя); КонецЕсли; КонецЕсли; @@ -132,7 +180,8 @@ Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда Предупреждение(ОписаниеОшибки); Иначе - Оповестить("ИзмененаГруппаДоступа", ТекущаяГруппаДоступа); + ОповеститьОбИзменении(ТекущаяГруппаДоступа); + Оповестить("Запись_ГруппыДоступа", Новый Структура, ТекущаяГруппаДоступа); КонецЕсли; КонецПроцедуры @@ -180,41 +229,8 @@ КонецПроцедуры - -&НаКлиенте -Процедура ГруппыДоступаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - НайденнаяСтрока = ГруппыДоступа.НайтиПоИдентификатору(ВыбраннаяСтрока); - Если НайденнаяСтрока <> Неопределено Тогда - Если Элементы.ФормаИзменитьГруппу.Видимость - ИЛИ Элементы.ГруппыДоступаИзменитьГруппу.Видимость Тогда - ИзменитьГруппу(Элементы.ФормаИзменитьГруппу); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ГруппыДоступаПриАктивизацииСтроки(Элемент) - - ТекущиеДанные = Элементы.ГруппыДоступа.ТекущиеДанные; - ТекущийРодитель = Элементы.ГруппыДоступа.ТекущийРодитель; - - Если ТекущиеДанные = Неопределено Тогда - ГруппаДоступаИзменена = ЗначениеЗаполнено(ТекущаяГруппаДоступа); - ТекущаяГруппаДоступа = Неопределено; - Иначе - НоваяГруппаДоступа = ?(ТекущийРодитель = Неопределено, ТекущиеДанные.ГруппаДоступа, ТекущийРодитель.ГруппаДоступа); - ГруппаДоступаИзменена = ТекущаяГруппаДоступа <> НоваяГруппаДоступа; - ТекущаяГруппаДоступа = НоваяГруппаДоступа; - КонецЕсли; - -КонецПроцедуры - - -//** Для работы интерфейса ролей +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей &НаКлиенте Процедура ПоказатьТолькоВыбранныеРоли(Команда) @@ -238,15 +254,6 @@ КонецПроцедуры -&НаКлиенте -Процедура РолиПометкаПриИзменении(Элемент) - - Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда - ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура УстановитьФлажки(Команда) @@ -265,8 +272,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ВывестиГруппыДоступа() @@ -405,12 +411,16 @@ ГруппаДоступаОбъект.Пользователи.Удалить(СтрокаТЧ); КонецЕсли; КонецЕсли; + Если ГруппаДоступаОбъект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда - ОписаниеОшибки = НСтр("ru = 'Изменение состава администраторов выполняется - |непосредственно в группе доступа Администраторы.'"); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Изменение состава администраторов выполняется + |непосредственно в группе доступа %1.'"), + ГруппаДоступаОбъект.Наименование); Иначе ГруппаДоступаОбъект.Записать(); КонецЕсли; + РазблокироватьДанныеДляРедактирования(ГруппаДоступаОбъект.Ссылка); ТекущаяГруппаДоступа = ГруппаДоступаОбъект.Ссылка; @@ -511,7 +521,8 @@ КонецПроцедуры -//** Для работы интерфейса ролей +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей &НаСервере Функция КоллекцияРолей(ТаблицаЗначенийДляЧтения = Ложь) @@ -630,8 +641,8 @@ ПодготовитьДеревоРолей(Строка.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли); Если Строка.ЭтоРоль Тогда - Если СкрытьРольПолныеПрава - И (ВРег(Строка.Имя) = ВРег("ПолныеПрава") ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы")) Тогда + Если СкрытьРольПолныеПрава И + (ВРег(Строка.Имя) = ВРег("ПолныеПрава") ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы")) Тогда Коллекция.Удалить(Индекс); Иначе Строка.НомерКартинки = 6; diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form index 11c8f92e0..256934a6c 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Form.form @@ -1708,6 +1708,10 @@ OnCreateAtServer ПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + DontBlock true true diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl index 84a08f556..aeb804320 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl @@ -1,7 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -16,7 +14,7 @@ Возврат; КонецЕсли; - Если Пользователи.ЭтоПолноправныйПользовательИБ() Тогда + Если Пользователи.ЭтоПолноправныйПользователь() Тогда // Просмотр и редактирование состава профилей и ограничений доступа ОтборПрофилейТолькоТекущегоПользователя = Ложь; // @@ -28,10 +26,8 @@ Элементы.ПрофилиПометка.Видимость = Ложь; Элементы.Доступ.Видимость = Ложь; Элементы.ФормаЗаписать.Видимость = Ложь; - Элементы.ФормаЗаписатьИЗакрыть.Видимость = Ложь; Иначе Элементы.ФормаЗаписать.Видимость = Ложь; - Элементы.ФормаЗаписатьИЗакрыть.Видимость = Ложь; Элементы.ФормаОтчетПраваДоступа.Видимость = Ложь; Элементы.ПраваИОграничения.Видимость = Ложь; Элементы.НедостаточноПравНаПросмотр.Видимость = Истина; @@ -103,7 +99,7 @@ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа | ПО Профили.Ссылка = ГруппыДоступа.Профиль | И (ГруппыДоступа.Пользователь = &Пользователь - | ИЛИ Профили.Ссылка = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)) + | ИЛИ Профили.Ссылка В (ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор))) | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи | ПО (ГруппыДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка) | И (ГруппыДоступаПользователи.Пользователь = &Пользователь) @@ -174,10 +170,10 @@ КонецЕсли; //** Заполнение изменяемых коллекций - Для каждого ОписаниеПрофиля Из Профили Цикл - Для каждого ОписаниеВидаДоступа Из ВидыДоступа.НайтиСтроки(Новый Структура("Профиль", ОписаниеПрофиля.Профиль)) Цикл - ОбновитьПредставлениеИспользованияВидаДоступа(ЭтаФорма, ОписаниеПрофиля, ОписаниеВидаДоступа); - ОбновитьНомерСтрокиПоВиду(ЭтаФорма, ОписаниеПрофиля, ОписаниеВидаДоступа); + Для каждого СвойстваПрофиля Из Профили Цикл + Для каждого ОписаниеВидаДоступа Из ВидыДоступа.НайтиСтроки(Новый Структура("Профиль", СвойстваПрофиля.Профиль)) Цикл + ОбновитьПредставлениеИспользованияВидаДоступа(ЭтаФорма, СвойстваПрофиля, ОписаниеВидаДоступа); + ОбновитьНомерСтрокиПоВиду(ЭтаФорма, СвойстваПрофиля, ОписаниеВидаДоступа); КонецЦикла; КонецЦикла; @@ -186,40 +182,31 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - Если Модифицированность Тогда - // - КодВозврата = Вопрос(НСтр("ru = 'Данные были изменены. Сохранить изменения?'"), РежимДиалогаВопрос.ДаНетОтмена); - // - Если КодВозврата = КодВозвратаДиалога.Да Тогда - ЗаписатьИзменения(Отказ); - ИначеЕсли КодВозврата = КодВозвратаДиалога.Отмена Тогда - Отказ = Истина; - Возврат; + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, Модифицированность); + +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + Ошибки = Неопределено; + + Для каждого СвойстваПрофиля Из Профили Цикл + + ПроверитьЗаполнениеПрофиля(ЭтаФорма, СвойстваПрофиля, Ошибки, Отказ); + + Если Отказ Тогда + Прервать; КонецЕсли; - КонецЕсли; + + КонецЦикла; + + ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// - -&НаКлиенте -Процедура Записать(Команда) - - ЗаписатьИзменения(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтчетПоПравамДоступа(Команда) - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Пользователь", Параметры.Пользователь); - ОткрытьФорму("Отчет.ПраваДоступа.Форма", ПараметрыФормы); - -КонецПроцедуры - +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Профили &НаКлиенте Процедура ПрофилиПриАктивизацииСтроки(Элемент) @@ -232,22 +219,28 @@ Процедура ПрофилиПометкаПриИзменении(Элемент) Отказ = Ложь; + ТекущиеДанные = Элементы.Профили.ТекущиеДанные; - Если Элементы.Профили.ТекущиеДанные <> Неопределено - И НЕ Элементы.Профили.ТекущиеДанные.Пометка Тогда - // + Если ТекущиеДанные <> Неопределено И НЕ ТекущиеДанные.Пометка Тогда + // Проверка незаполненных и повторяющихся значений доступа + // перед отключением профиля и отключением доступности его настройки. ОчиститьСообщения(); - ОбработкаПроверкиЗаполнения(Отказ, Элементы.Профили.ТекущиеДанные.Профиль); + СвойстваПрофиля = Профили.НайтиПоИдентификатору(Элементы.Профили.ТекущаяСтрока); + Ошибки = Неопределено; + ПроверитьЗаполнениеПрофиля(ЭтаФорма, СвойстваПрофиля, Ошибки, Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); КонецЕсли; Если Отказ Тогда - Элементы.Профили.ТекущиеДанные.Пометка = Истина; + ТекущиеДанные.Пометка = Истина; Иначе ПриИзмененииТекущегоПрофиля(ЭтаФорма); КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ВидыДоступа &НаКлиенте Процедура ВидыДоступаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -281,6 +274,8 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий элемента Использование таблицы формы ВидыДоступа &НаКлиенте Процедура ВидыДоступаИспользованиеПриИзменении(Элемент) @@ -318,6 +313,8 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ЗначенияДоступа &НаКлиенте Процедура ЗначенияДоступаПриИзменении(Элемент) @@ -452,19 +449,31 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Записать(Команда) + + ЗаписатьИзменения(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтчетПоПравамДоступа(Команда) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Пользователь", Параметры.Пользователь); + ОткрытьФорму("Отчет.ПраваДоступа.Форма", ПараметрыФормы); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура ЗаписатьИзменения(Отказ = Ложь) ОчиститьСообщения(); - - ОбработкаПроверкиЗаполнения(Отказ); - Если Отказ Тогда - Возврат; - КонецЕсли; - ЗаписатьИзмененияНаСервере(Отказ); КонецПроцедуры @@ -472,9 +481,16 @@ &НаСервере Процедура ЗаписатьИзмененияНаСервере(Отказ) + Если НЕ ПроверитьЗаполнение() Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + Пользователи.НайтиНеоднозначныхПользователейИБ(); + // Получить список измененных Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Пользователь", Параметры.Пользователь); + Запрос.УстановитьПараметр("Пользователь", Параметры.Пользователь); Запрос.УстановитьПараметр("Профили", Профили.Выгрузить(, "Профиль, Пометка")); Запрос.УстановитьПараметр("ВидыДоступа", ВидыДоступа.Выгрузить(, "Профиль, ВидДоступа, ДоступРазрешен")); Запрос.УстановитьПараметр("ЗначенияДоступа", ЗначенияДоступа.Выгрузить(, "Профиль, ВидДоступа, ЗначениеДоступа")); @@ -523,7 +539,7 @@ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа | ПО Профили.Ссылка = ГруппыДоступа.Профиль | И (ГруппыДоступа.Пользователь = &Пользователь - | ИЛИ Профили.Ссылка = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)) + | ИЛИ Профили.Ссылка В (ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор))) | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи | ПО (ГруппыДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка) | И (ГруппыДоступаПользователи.Пользователь = &Пользователь) @@ -641,7 +657,7 @@ ГруппаДоступаОбъект.Пользователь = Параметры.Пользователь; ГруппаДоступаОбъект.Профиль = Выборка.Профиль; КонецЕсли; - Если Выборка.Профиль = ПрофильАдминистратор Тогда + Если Выборка.Профиль = Справочники.ПрофилиГруппДоступа.Администратор Тогда Если Выборка.Пометка Тогда Если ГруппаДоступаОбъект.Пользователи.Найти(Параметры.Пользователь, "Пользователь") = Неопределено Тогда ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Параметры.Пользователь; @@ -650,18 +666,21 @@ ОписаниеПользователя = ГруппаДоступаОбъект.Пользователи.Найти(Параметры.Пользователь, "Пользователь"); Если ОписаниеПользователя <> Неопределено Тогда ГруппаДоступаОбъект.Пользователи.Удалить(ОписаниеПользователя); - // Проверка пустого списка пользователей ИБ в группе доступа Администраторы - НайденПользовательИБ = Ложь; - Для каждого ОписаниеПользователя ИЗ ГруппаДоступаОбъект.Пользователи Цикл - Если ЗначениеЗаполнено(ОписаниеПользователя.Пользователь) - И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ОписаниеПользователя.Пользователь.ИдентификаторПользователяИБ) <> Неопределено Тогда - // - НайденПользовательИБ = Истина; - Прервать; + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + // Проверка пустого списка пользователей ИБ в группе доступа Администраторы + НайденПользовательИБ = Ложь; + Для каждого ОписаниеПользователя ИЗ ГруппаДоступаОбъект.Пользователи Цикл + Если ЗначениеЗаполнено(ОписаниеПользователя.Пользователь) + И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ОписаниеПользователя.Пользователь.ИдентификаторПользователяИБ) <> Неопределено Тогда + // + НайденПользовательИБ = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если НЕ НайденПользовательИБ Тогда + ВызватьИсключение(НСтр("ru = 'Профиль Администратор должен быть хотя бы у одного пользователя, которому разрешен доступ к информационной базе.'")); КонецЕсли; - КонецЦикла; - Если НЕ НайденПользовательИБ Тогда - ВызватьИсключение(НСтр("ru = 'Профиль Администратор должен быть хотя бы у одного пользователя, которому разрешен доступ к информационной базе.'")); КонецЕсли; КонецЕсли; КонецЕсли; @@ -688,136 +707,91 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбработкаПроверкиЗаполнения(Отказ, Профиль = Неопределено) - - // Проверка незаполненных и повторяющихся значений доступа. - Для каждого ОписаниеПрофиля Из ?(Профиль = Неопределено, Профили, Профили.НайтиСтроки(Новый Структура("Профиль", Профиль))) Цикл - - ВидыДоступаПрофиля = ВидыДоступа.НайтиСтроки(Новый Структура("Профиль", ОписаниеПрофиля.Профиль)); - НомерСтрокиВидДоступа = ВидыДоступаПрофиля.Количество()-1; - - Пока НЕ Отказ И НомерСтрокиВидДоступа >= 0 Цикл - ТекущаяСтрокаВидовДоступа = ВидыДоступаПрофиля[НомерСтрокиВидДоступа]; - - ЗначенияДоступаВидаДоступа = ЗначенияДоступа.НайтиСтроки(Новый Структура("Профиль, ВидДоступа", ОписаниеПрофиля.Профиль, ТекущаяСтрокаВидовДоступа.ВидДоступа)); - НомерСтроки = ЗначенияДоступаВидаДоступа.Количество()-1; - - Пока НЕ Отказ И НомерСтроки >= 0 Цикл - - ТекущаяСтрока = ЗначенияДоступаВидаДоступа[НомерСтроки]; - - // Проверка заполнения значения. - Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.ЗначениеДоступа) Тогда - Элементы.Профили.ТекущаяСтрока = ОписаниеПрофиля.ПолучитьИдентификатор(); - Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидовДоступа.ПолучитьИдентификатор(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Значение не заполнено.'"), - , - "ЗначенияДоступа[" + Формат(ЗначенияДоступа.Индекс(ТекущаяСтрока), "ЧГ=0") + "].ЗначениеДоступа", - , - Отказ); - Продолжить; - КонецЕсли; - - // Проверка наличия повторяющихся значений. - НайденныеЗначения = ЗначенияДоступа.НайтиСтроки(Новый Структура("Профиль, ВидДоступа, ЗначениеДоступа", ОписаниеПрофиля.Профиль, ТекущаяСтрокаВидовДоступа.ВидДоступа, ТекущаяСтрока.ЗначениеДоступа)); - Если НайденныеЗначения.Количество() > 1 Тогда - Элементы.Профили.ТекущаяСтрока = ОписаниеПрофиля.ПолучитьИдентификатор(); - Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидовДоступа.ПолучитьИдентификатор(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Значение повторяется.'"), - , - "ЗначенияДоступа[" + Формат(ЗначенияДоступа.Индекс(ТекущаяСтрока), "ЧГ=0") + "].ЗначениеДоступа", - , - Отказ); - Продолжить; - КонецЕсли; - - НомерСтроки = НомерСтроки - 1; - КонецЦикла; - - НомерСтрокиВидДоступа = НомерСтрокиВидДоступа - 1; - КонецЦикла; - КонецЦикла; - -КонецПроцедуры - &НаКлиентеНаСервереБезКонтекста -Процедура ПриИзмененииТекущегоПрофиля(Знач Контекст) +Процедура ПриИзмененииТекущегоПрофиля(Знач Форма) + + Элементы = Форма.Элементы; + Профили = Форма.Профили; + ВидыДоступа = Форма.ВидыДоступа; #Если Клиент Тогда - ТекущиеДанные = Контекст.Элементы.Профили.ТекущиеДанные; + ТекущиеДанные = Элементы.Профили.ТекущиеДанные; #Иначе - ТекущиеДанные = Контекст.Профили.НайтиПоИдентификатору(?(Контекст.Элементы.Профили.ТекущаяСтрока = Неопределено, -1, Контекст.Элементы.Профили.ТекущаяСтрока)); + ТекущиеДанные = Профили.НайтиПоИдентификатору(?(Элементы.Профили.ТекущаяСтрока = Неопределено, -1, Элементы.Профили.ТекущаяСтрока)); #КонецЕсли - Контекст.ТекущийПрофиль = Неопределено; + Форма.ТекущийПрофиль = Неопределено; РедактированиеТекущихОграничений = Ложь; Если ТекущиеДанные <> Неопределено Тогда - Контекст.ТекущийПрофиль = ТекущиеДанные.Профиль; + Форма.ТекущийПрофиль = ТекущиеДанные.Профиль; РедактированиеТекущихОграничений = ТекущиеДанные.Пометка - И Контекст.ТекущийПрофиль <> Контекст.ПрофильАдминистратор - И НЕ Контекст.ТолькоПросмотр; + И Форма.ТекущийПрофиль <> Форма.ПрофильАдминистратор + И НЕ Форма.ТолькоПросмотр; КонецЕсли; - Контекст.Элементы.НадписьПрофиль.Доступность = ТекущиеДанные <> Неопределено И ТекущиеДанные.Пометка; - Контекст.Элементы.ВидыДоступа.ТолькоПросмотр = НЕ РедактированиеТекущихОграничений; - Контекст.Элементы.НадписьВидДоступа.Доступность = ТекущиеДанные <> Неопределено И ТекущиеДанные.Пометка; - Контекст.Элементы.ЗначенияДоступа.ТолькоПросмотр = НЕ РедактированиеТекущихОграничений; - Контекст.Элементы.ВидыДоступаИзменить.Доступность = РедактированиеТекущихОграничений; - Контекст.Элементы.ВидыДоступаКонтекстноеМенюИзменить.Доступность = РедактированиеТекущихОграничений; + Элементы.НадписьПрофиль.Доступность = ТекущиеДанные <> Неопределено И ТекущиеДанные.Пометка; + Элементы.ВидыДоступа.ТолькоПросмотр = НЕ РедактированиеТекущихОграничений; + Элементы.НадписьВидДоступа.Доступность = ТекущиеДанные <> Неопределено И ТекущиеДанные.Пометка; + Элементы.ЗначенияДоступа.ТолькоПросмотр = НЕ РедактированиеТекущихОграничений; + Элементы.ВидыДоступаИзменить.Доступность = РедактированиеТекущихОграничений; + Элементы.ВидыДоступаКонтекстноеМенюИзменить.Доступность = РедактированиеТекущихОграничений; - Если Контекст.Элементы.ВидыДоступа.ОтборСтрок = Неопределено - ИЛИ Контекст.Элементы.ВидыДоступа.ОтборСтрок.Профиль <> Контекст.ТекущийПрофиль Тогда + Если Элементы.ВидыДоступа.ОтборСтрок = Неопределено + ИЛИ Элементы.ВидыДоступа.ОтборСтрок.Профиль <> Форма.ТекущийПрофиль Тогда // - Контекст.Элементы.ВидыДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("Профиль", Контекст.ТекущийПрофиль); - ТекущиеВидыДоступа = Контекст.ВидыДоступа.НайтиСтроки(Новый Структура("Профиль", Контекст.ТекущийПрофиль)); + Элементы.ВидыДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("Профиль", Форма.ТекущийПрофиль); + ТекущиеВидыДоступа = ВидыДоступа.НайтиСтроки(Новый Структура("Профиль", Форма.ТекущийПрофиль)); Если ТекущиеВидыДоступа.Количество() = 0 Тогда - Контекст.Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("Профиль, ВидДоступа", Контекст.ТекущийПрофиль, Неопределено); - ПриИзмененииТекущегоВидаДоступа(Контекст); + Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("Профиль, ВидДоступа", Форма.ТекущийПрофиль, Неопределено); + ПриИзмененииТекущегоВидаДоступа(Форма); Иначе - Контекст.Элементы.ВидыДоступа.ТекущаяСтрока = ТекущиеВидыДоступа[0].ПолучитьИдентификатор(); + Элементы.ВидыДоступа.ТекущаяСтрока = ТекущиеВидыДоступа[0].ПолучитьИдентификатор(); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ПриИзмененииТекущегоВидаДоступа(Знач Контекст) +Процедура ПриИзмененииТекущегоВидаДоступа(Знач Форма) + + Элементы = Форма.Элементы; + ВидыДоступа = Форма.ВидыДоступа; + ЗначенияДоступа = Форма.ЗначенияДоступа; ЗначенияЗадаются = Ложь; #Если Клиент Тогда - ТекущиеДанные = Контекст.Элементы.ВидыДоступа.ТекущиеДанные; + ТекущиеДанные = Элементы.ВидыДоступа.ТекущиеДанные; #Иначе - ТекущиеДанные = Контекст.ВидыДоступа.НайтиПоИдентификатору(?(Контекст.Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено, -1, Контекст.Элементы.ВидыДоступа.ТекущаяСтрока)); + ТекущиеДанные = ВидыДоступа.НайтиПоИдентификатору(?(Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено, -1, Элементы.ВидыДоступа.ТекущаяСтрока)); #КонецЕсли Если ТекущиеДанные <> Неопределено Тогда - Контекст.ТекущийВидДоступа = ТекущиеДанные.ВидДоступа; + Форма.ТекущийВидДоступа = ТекущиеДанные.ВидДоступа; - Если Контекст.ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению(ТекущиеДанные.ВидДоступа) = Неопределено Тогда + Если Форма.ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению(ТекущиеДанные.ВидДоступа) = Неопределено Тогда ЗначенияЗадаются = Истина; - Контекст.Элементы.ТипыВидовДоступа.ТекущаяСтраница = Контекст.Элементы.ОбычныйВидДоступа; + Элементы.ТипыВидовДоступа.ТекущаяСтраница = Элементы.ОбычныйВидДоступа; // Установка отбора значений - Если Контекст.Элементы.ЗначенияДоступа.ОтборСтрок = Неопределено - ИЛИ Контекст.Элементы.ЗначенияДоступа.ОтборСтрок.Профиль <> Контекст.ТекущийПрофиль - ИЛИ Контекст.Элементы.ЗначенияДоступа.ОтборСтрок.ВидДоступа <> ТекущиеДанные.ВидДоступа Тогда + Если Элементы.ЗначенияДоступа.ОтборСтрок = Неопределено + ИЛИ Элементы.ЗначенияДоступа.ОтборСтрок.Профиль <> Форма.ТекущийПрофиль + ИЛИ Элементы.ЗначенияДоступа.ОтборСтрок.ВидДоступа <> ТекущиеДанные.ВидДоступа Тогда // - Контекст.Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("Профиль, ВидДоступа", Контекст.ТекущийПрофиль, ТекущиеДанные.ВидДоступа); + Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("Профиль, ВидДоступа", Форма.ТекущийПрофиль, ТекущиеДанные.ВидДоступа); КонецЕсли; Иначе - Контекст.Элементы.ТипыВидовДоступа.ТекущаяСтраница = ?(ТекущиеДанные.ДоступРазрешен, Контекст.Элементы.ВидДоступаЧерезПраваПоЗначениямДоступаПредупреждение, Контекст.Элементы.ВидДоступаЧерезПраваПоЗначениямДоступаИнформация); + Элементы.ТипыВидовДоступа.ТекущаяСтраница = ?(ТекущиеДанные.ДоступРазрешен, Элементы.ВидДоступаЧерезПраваПоЗначениямДоступаПредупреждение, Элементы.ВидДоступаЧерезПраваПоЗначениямДоступаИнформация); КонецЕсли; // Обновление поля НадписьВидДоступа - Контекст.НадписьВидДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ?(ТекущиеДанные.ВидДоступа = Контекст.ВидДоступаПользователи, + Форма.НадписьВидДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ?(ТекущиеДанные.ВидДоступа = Форма.ВидДоступаПользователи, ?(ТекущиеДанные.ДоступРазрешен, НСтр("ru = 'Разрешенные значения (%1) - текущий пользователь всегда разрешен'"), НСтр("ru = 'Разрешенные значения (%1) - текущий пользователь всегда разрешен'") ), - ?(ТекущиеДанные.ВидДоступа = Контекст.ВидДоступаВнешниеПользователи, + ?(ТекущиеДанные.ВидДоступа = Форма.ВидДоступаВнешниеПользователи, ?(ТекущиеДанные.ДоступРазрешен, НСтр("ru = 'Запрещенные значения (%1) - текущий внешний пользователь всегда разрешен'"), НСтр("ru = 'Запрещенные значения (%1) - текущий внешний пользователь всегда разрешен'") ), @@ -828,46 +802,56 @@ ), Строка(ТекущиеДанные.ВидДоступа)); - ОбновитьПредставлениеИспользованияВидаДоступа(Контекст, Контекст.Элементы.Профили.ТекущиеДанные, ТекущиеДанные); + ОбновитьПредставлениеИспользованияВидаДоступа(Форма, Элементы.Профили.ТекущиеДанные, ТекущиеДанные); Иначе - Контекст.НадписьВидДоступа = ""; - Контекст.ТекущийВидДоступа = Неопределено; - Контекст.Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("Профиль, ВидДоступа", Контекст.ТекущийПрофиль, Неопределено); + Форма.НадписьВидДоступа = ""; + Форма.ТекущийВидДоступа = Неопределено; + Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("Профиль, ВидДоступа", Форма.ТекущийПрофиль, Неопределено); - Если Контекст.ВидыДоступа.Количество() = 0 Тогда - Контекст.ЗначенияДоступа.Очистить(); + Если ВидыДоступа.Количество() = 0 Тогда + ЗначенияДоступа.Очистить(); КонецЕсли; КонецЕсли; - Контекст.ТекущийТипЗначенияДоступа = ?(ТекущиеДанные = Неопределено, Неопределено, ТекущиеДанные.ТекущийТипЗначенияДоступа); - Контекст.ТекущиеТипыЗначенийДоступа = Новый СписокЗначений; - // + Форма.ТекущийТипЗначенияДоступа = ?(ТекущиеДанные = Неопределено, Неопределено, ТекущиеДанные.ТекущийТипЗначенияДоступа); + Форма.ТекущиеТипыЗначенийДоступа = Новый СписокЗначений; + Если ЗначенияЗадаются Тогда - Для каждого ОписаниеТипаВидаДоступа Из Контекст.ТипыЗначенийДоступаВидовДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущиеДанные.ВидДоступа)) Цикл - Контекст.ТекущиеТипыЗначенийДоступа.Добавить(ОписаниеТипаВидаДоступа.ТипЗначенияДоступа, ОписаниеТипаВидаДоступа.ПредставлениеТипа); + Для каждого ОписаниеТипаВидаДоступа Из Форма.ТипыЗначенийДоступаВидовДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущиеДанные.ВидДоступа)) Цикл + Форма.ТекущиеТипыЗначенийДоступа.Добавить(ОписаниеТипаВидаДоступа.ТипЗначенияДоступа, ОписаниеТипаВидаДоступа.ПредставлениеТипа); КонецЦикла; Иначе Если ТекущиеДанные <> Неопределено Тогда - Отбор = Новый Структура("Профиль, ВидДоступа", Контекст.ТекущийПрофиль, Контекст.ТекущийВидДоступа); - Для каждого Строка Из Контекст.ЗначенияДоступа.НайтиСтроки(Отбор) Цикл - Контекст.ЗначенияДоступа.Удалить(Строка); + Отбор = Новый Структура("Профиль, ВидДоступа", Форма.ТекущийПрофиль, Форма.ТекущийВидДоступа); + Для каждого Строка Из ЗначенияДоступа.НайтиСтроки(Отбор) Цикл + ЗначенияДоступа.Удалить(Строка); КонецЦикла КонецЕсли; КонецЕсли; - // - Если Контекст.ТекущиеТипыЗначенийДоступа.Количество() = 0 Тогда - Контекст.ТекущиеТипыЗначенийДоступа.Добавить(Неопределено, НСтр("ru = 'Неопределено'")); + + Если Форма.ТекущиеТипыЗначенийДоступа.Количество() = 0 Тогда + Форма.ТекущиеТипыЗначенийДоступа.Добавить(Неопределено, НСтр("ru = 'Неопределено'")); КонецЕсли; - Контекст.Элементы.ЗначенияДоступа.Доступность = ЗначенияЗадаются; - Контекст.Элементы.ЗначенияДоступа.КоманднаяПанель.ПодчиненныеЭлементы.ЗначенияДоступаДобавить.Доступность = ЗначенияЗадаются; + Элементы.ЗначенияДоступа.Доступность = ЗначенияЗадаются; + Элементы.ЗначенияДоступа.КоманднаяПанель.ПодчиненныеЭлементы.ЗначенияДоступаДобавить.Доступность = ЗначенияЗадаются; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьПредставлениеИспользованияВидаДоступа(Контекст, ОписаниеПрофиля, ОписаниеВидаДоступа) +Процедура ОбновитьПредставлениеИспользованияВидаДоступа(Форма, СвойстваПрофиля, ОписаниеВидаДоступа) + + Элементы = Форма.Элементы; + ЗначенияДоступа = Форма.ЗначенияДоступа; + ВидыДоступаЧерезПраваПоЗначениямДоступа = Форма.ВидыДоступаЧерезПраваПоЗначениямДоступа; + + Если СвойстваПрофиля = Неопределено ИЛИ ОписаниеВидаДоступа = Неопределено Тогда + ОписаниеВидаДоступа.Использование = ""; + Возврат; + КонецЕсли; + + КоличествоЗначений = ЗначенияДоступа.НайтиСтроки(Новый Структура("Профиль, ВидДоступа", СвойстваПрофиля.Профиль, ОписаниеВидаДоступа.ВидДоступа)).Количество(); - КоличествоЗначений = Контекст.ЗначенияДоступа.НайтиСтроки(Новый Структура("Профиль, ВидДоступа", ОписаниеПрофиля.Профиль, ОписаниеВидаДоступа.ВидДоступа)).Количество(); Если КоличествоЗначений > 0 Тогда ПрописьЧисла = ЧислоПрописью(КоличествоЗначений, "Л = ru_RU", НСтр("ru = ',,,,,,,,0'")); ПрописьЧислаИПредмета = ЧислоПрописью(КоличествоЗначений, "Л = ru_RU", НСтр("ru = '-го значения,-х значений,-и значений,,,,,,0'")); @@ -877,7 +861,7 @@ НСтр("ru = 'Все разрешены, кроме %1'"), НСтр("ru = 'Все запрещены, кроме %1'") ), ЧислоИПредмет); - ИначеЕсли Контекст.ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению(ОписаниеВидаДоступа.ВидДоступа) = Неопределено Тогда + ИначеЕсли ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению(ОписаниеВидаДоступа.ВидДоступа) = Неопределено Тогда ОписаниеВидаДоступа.Использование = ?(ОписаниеВидаДоступа.ДоступРазрешен, НСтр("ru = 'Все разрешены, без исключений'"), @@ -892,10 +876,12 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьНомерСтрокиПоВиду(Контекст, ОписаниеПрофиля, ОписаниеВидаДоступа) +Процедура ОбновитьНомерСтрокиПоВиду(Форма, СвойстваПрофиля, ОписаниеВидаДоступа) - Отбор = Новый Структура("Профиль, ВидДоступа", ОписаниеПрофиля.Профиль, ОписаниеВидаДоступа.ВидДоступа); - ЗначенияДоступаПоВиду = Контекст.ЗначенияДоступа.НайтиСтроки(Отбор); + ЗначенияДоступа = Форма.ЗначенияДоступа; + + Отбор = Новый Структура("Профиль, ВидДоступа", СвойстваПрофиля.Профиль, ОписаниеВидаДоступа.ВидДоступа); + ЗначенияДоступаПоВиду = ЗначенияДоступа.НайтиСтроки(Отбор); ТекущийНомер = 1; Для каждого Строка Из ЗначенияДоступаПоВиду Цикл @@ -948,5 +934,76 @@ КонецФункции - - +&НаКлиентеНаСервереБезКонтекста +Процедура ПроверитьЗаполнениеПрофиля(Знач Форма, Знач СвойстваПрофиля, Ошибки, Отказ) + + ВидыДоступа = Форма.ВидыДоступа; + ЗначенияДоступа = Форма.ЗначенияДоступа; + Элементы = Форма.Элементы; + + ВидыДоступаПрофиля = ВидыДоступа.НайтиСтроки(Новый Структура("Профиль", СвойстваПрофиля.Профиль)); + НомерСтрокиВидаДоступа = ВидыДоступаПрофиля.Количество()-1; + + Пока НЕ Отказ И НомерСтрокиВидаДоступа >= 0 Цикл + ТекущаяСтрокаВидаДоступа = ВидыДоступаПрофиля[НомерСтрокиВидаДоступа]; + + ЗначенияДоступаВидаДоступа = ЗначенияДоступа.НайтиСтроки(Новый Структура( + "Профиль, + |ВидДоступа", + СвойстваПрофиля.Профиль, + ТекущаяСтрокаВидаДоступа.ВидДоступа)); + + НомерСтроки = ЗначенияДоступаВидаДоступа.Количество()-1; + + Пока НомерСтроки >= 0 Цикл + + ТекущаяСтрока = ЗначенияДоступаВидаДоступа[НомерСтроки]; + + // Проверка заполнения значения. + Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.ЗначениеДоступа) Тогда + + Элементы.Профили.ТекущаяСтрока = СвойстваПрофиля.ПолучитьИдентификатор(); + Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидаДоступа.ПолучитьИдентификатор(); + + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.ЗначенияДоступа[%1].ЗначениеДоступа", + НСтр("ru = 'Значение не выбрано.'"), + "ЗначенияДоступа", + НомерСтроки, + НСтр("ru = 'Значение в строке %1 не выбрано.'")); + Отказ = Истина; + Прервать; + КонецЕсли; + + // Проверка наличия повторяющихся значений. + НайденныеЗначения = ЗначенияДоступа.НайтиСтроки( + Новый Структура( + "Профиль, + |ВидДоступа, + |ЗначениеДоступа", + СвойстваПрофиля.Профиль, + ТекущаяСтрокаВидаДоступа.ВидДоступа, + ТекущаяСтрока.ЗначениеДоступа)); + + Если НайденныеЗначения.Количество() > 1 Тогда + + Элементы.Профили.ТекущаяСтрока = СвойстваПрофиля.ПолучитьИдентификатор(); + Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидаДоступа.ПолучитьИдентификатор(); + + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.ЗначенияДоступа[%1].ЗначениеДоступа", + НСтр("ru = 'Значение повторяется.'"), + "ЗначенияДоступа", + НомерСтроки, + НСтр("ru = 'Значение в строке %1 повторяется.'")); + Отказ = Истина; + Прервать; + КонецЕсли; + + НомерСтроки = НомерСтроки - 1; + КонецЦикла; + + НомерСтрокиВидаДоступа = НомерСтрокиВидаДоступа - 1; + КонецЦикла; + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Form.form b/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Form.form index aace4bc95..468fd52aa 100644 --- a/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Form.form +++ b/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Form.form @@ -682,6 +682,10 @@ OnCreateAtServer ПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + Abort Cancel Ignore diff --git a/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Module.bsl b/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Module.bsl index ca819ed52..91932f8ea 100644 --- a/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Module.bsl +++ b/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Module.bsl @@ -1,7 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -87,67 +85,151 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - Если Модифицированность Тогда - Ответ = Вопрос(НСтр("ru = 'Сохранить изменения?'"), РежимДиалогаВопрос.ДаНетОтмена, , КодВозвратаДиалога.Отмена); - Если Ответ = КодВозвратаДиалога.Да Тогда - ЗаписатьПрава(Отказ); - ИначеЕсли Ответ = КодВозвратаДиалога.Отмена Тогда - Отказ = Истина; + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, Модифицированность); + +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + Ошибки = Неопределено; + + // Проверка незаполненных прав + ИмяПервогоПрава = ""; + Для каждого ВозможноеПраво Из ВозможныеПрава Цикл + ИмяПервогоПрава = ВозможноеПраво.Ключ; + Прервать; + КонецЦикла; + + Для каждого ТекущаяСтрока Из ГруппыПрав Цикл + НомерСтроки = ГруппыПрав.Индекс(ТекущаяСтрока); + + // Проверка заполнения флажков прав. + НетЗаполненногоПрава = Истина; + Для каждого ВозможноеПраво Из ВозможныеПрава Цикл + Если ТекущаяСтрока[ВозможноеПраво.Ключ] Тогда + НетЗаполненногоПрава = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + + Если НетЗаполненногоПрава Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "ГруппыПрав[%1]." + ИмяПервогоПрава, + НСтр("ru = 'Необходимо заполнить не менее одного права доступа.'"), + "ГруппыПрав", + НомерСтроки, + НСтр("ru = 'В строке %1 необходимо заполнить не менее одного права доступа.'")); КонецЕсли; - КонецЕсли; + + // Проверка незаполненных и повторяющихся пользователей. + Если НастройкаПоЗначениюДоступа Тогда + + // Проверка заполнения. + Если НЕ ЗначениеЗаполнено(ТекущаяСтрока["Пользователь"]) Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "ГруппыПрав[%1].Пользователь", + НСтр("ru = 'Пользователь не выбран.'"), + "ГруппыПрав", + НомерСтроки, + НСтр("ru = 'Пользователь в строке %1 не выбран.'")); + Продолжить; + КонецЕсли; + + // Проверка наличия повторяющихся значений. + Отбор = Новый Структура( + "НаследуетсяОт, + |Пользователь", + ТекущаяСтрока["НаследуетсяОт"], + ТекущаяСтрока["Пользователь"]); + + Если ГруппыПрав.НайтиСтроки(Отбор).Количество() > 1 Тогда + + Если ТипЗнч(Отбор.Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда + ТекстДляОднойОшибки = НСтр("ru = 'Пользователь повторяется.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Пользователь в строке %1 повторяется.'"); + + ИначеЕсли ТипЗнч(Отбор.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + ТекстДляОднойОшибки = НСтр("ru = 'Внешний пользователь повторяется.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Внешний пользователь в строке %1 повторяется.'"); + + ИначеЕсли ТипЗнч(Отбор.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") Тогда + ТекстДляОднойОшибки = НСтр("ru = 'Группа пользователей повторяется.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Группа пользователей в строке %1 повторяется.'"); + Иначе + ТекстДляОднойОшибки = НСтр("ru = 'Группа внешних пользователей повторяется.'"); + ТекстДляНесколькихОшибок = НСтр("ru = 'Группа внешних пользователей в строке %1 повторяется.'"); + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "ГруппыПрав[%1].Пользователь", + ТекстДляОднойОшибки, + "ГруппыПрав", + НомерСтроки, + ТекстДляНесколькихОшибок); + КонецЕсли; + + ИначеЕсли НастройкаПоГруппеПользователей Тогда + + // Проверка заполнения. + Если НЕ ЗначениеЗаполнено(ТекущаяСтрока["ЗначениеДоступа"]) Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "ГруппыПрав[%1].ЗначениеДоступа", + НСтр("ru = 'Значение не выбрано.'"), + "ГруппыПрав", + НомерСтроки, + НСтр("ru = 'Значение в строке %1 не выбрано.'")); + Продолжить; + КонецЕсли; + + // Проверка наличия повторяющихся значений. + Отбор = Новый Структура("ЗначениеДоступа", ТекущаяСтрока["ЗначениеДоступа"]); + Если ГруппыПрав.НайтиСтроки(Отбор).Количество() > 1 Тогда + + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.Состав[%1].ЗначениеДоступа", + НСтр("ru = 'Значение повторяется.'"), + "Объект.Состав", + НомерСтроки, + НСтр("ru = 'Значение в строке %1 повторяется.'")); + КонецЕсли; + Иначе + // Проверка заполнения. + Если НЕ ЗначениеЗаполнено(ТекущаяСтрока["ЗначениеДоступа"]) Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "ГруппыПрав[%1].ЗначениеДоступа", + НСтр("ru = 'Значение не выбрано.'"), + "ГруппыПрав", + НомерСтроки, + НСтр("ru = 'Значение в строке %1 не выбрано.'")); + Продолжить; + КонецЕсли; + + // Проверка наличия повторяющихся значений. + Отбор = Новый Структура( + "ГруппаПользователей, + |ЗначениеДоступа", + ТекущаяСтрока["ГруппаПользователей"], + ТекущаяСтрока["ЗначениеДоступа"]); + + Если ГруппыПрав.НайтиСтроки(Отбор).Количество() > 1 Тогда + + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Объект.Состав[%1].ЗначениеДоступа", + НСтр("ru = 'Значение повторяется.'"), + "Объект.Состав", + НомерСтроки, + НСтр("ru = 'Значение в строке %1 повторяется.'")); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// - -//** Обработчики команд. - -&НаКлиенте -Процедура ЗаписатьИЗакрыть(Команда) - - Отказ = Ложь; - ОбработкаПроверкиЗаполнения(Отказ); - - Если НЕ Отказ Тогда - - ЗаписатьПрава(Отказ); - Если НЕ Отказ Тогда - Закрыть(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура Записать(Команда) - - Отказ = Ложь; - ОбработкаПроверкиЗаполнения(Отказ); - - Если НЕ Отказ Тогда - - РазрешеноУправлениеПравамиПослеЗаписи = Ложь; - ОписаниеПредупреждения = ""; - ЗаписатьПрава(Отказ, РазрешеноУправлениеПравамиПослеЗаписи, ОписаниеПредупреждения); - Если НЕ Отказ И НЕ РазрешеноУправлениеПравамиПослеЗаписи Тогда - Предупреждение(ОписаниеПредупреждения, 7, НСтр("ru = 'После успешной записи'")); - Закрыть(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура Перечитать(Команда) - - Если НЕ Модифицированность ИЛИ Вопрос(НСтр("ru = 'Данные изменены. Прочитать без сохранения?'"), РежимДиалогаВопрос.ОКОтмена, 5, КодВозвратаДиалога.Отмена) = КодВозвратаДиалога.ОК Тогда - ПрочитатьПрава(); - КонецЕсли; - -КонецПроцедуры - +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ВидДоступаПриИзменении(Элемент) @@ -189,7 +271,6 @@ КонецПроцедуры - &НаКлиенте Процедура НаследоватьПраваРодителейПриИзменении(Элемент) @@ -217,8 +298,8 @@ КонецПроцедуры - -//** Обработчики таблицы ГруппыПрав. +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ГруппыПрав &НаКлиенте Процедура ГруппыПравПередНачаломИзменения(Элемент, Отказ) @@ -259,6 +340,7 @@ КонецПроцедуры + &НаКлиенте Процедура ГруппыПравПользовательПриИзменении(Элемент) @@ -309,7 +391,6 @@ КонецПроцедуры - &НаКлиенте Процедура ГруппыПравЗапрещеноПриИзменении(Элемент) @@ -357,8 +438,48 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + + Отказ = Ложь; + ОчиститьСообщения(); + ЗаписатьПрава(Отказ); + + Если НЕ Отказ Тогда + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Записать(Команда) + + Отказ = Ложь; + РазрешеноУправлениеПравамиПослеЗаписи = Ложь; + ОписаниеПредупреждения = ""; + ОчиститьСообщения(); + ЗаписатьПрава(Отказ, РазрешеноУправлениеПравамиПослеЗаписи, ОписаниеПредупреждения); + + Если НЕ Отказ И НЕ РазрешеноУправлениеПравамиПослеЗаписи Тогда + Предупреждение(ОписаниеПредупреждения, 7, НСтр("ru = 'После успешной записи'")); + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Перечитать(Команда) + + Если НЕ Модифицированность ИЛИ Вопрос(НСтр("ru = 'Данные изменены. Прочитать без сохранения?'"), РежимДиалогаВопрос.ОКОтмена, 5, КодВозвратаДиалога.Отмена) = КодВозвратаДиалога.ОК Тогда + ПрочитатьПрава(); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Подготовка таблиц прав, проверяемых в стандартных шаблонах ограничения доступа по возможным правам. &НаСервере @@ -432,8 +553,26 @@ Если НастройкаПоЗначениюДоступа Тогда Если НовыеРеквизиты <> Неопределено Тогда - ДобавитьРеквизит(НовыеРеквизиты, Новый РеквизитФормы("Пользователь", Новый ОписаниеТипов("СправочникСсылка.Пользователи, СправочникСсылка.ГруппыПользователей, СправочникСсылка.ВнешниеПользователи, СправочникСсылка.ГруппыВнешнихПользователей"), "ГруппыПрав", НСтр("ru = 'Пользователь'")), Справочники.Пользователи.ПустаяСсылка()); - ДобавитьРеквизит(НовыеРеквизиты, Новый РеквизитФормы("НомерКартинки", Новый ОписаниеТипов("Число"), "ГруппыПрав"), -1); + ДобавитьРеквизит( + НовыеРеквизиты, + Новый РеквизитФормы( + "Пользователь", + Новый ОписаниеТипов( + "СправочникСсылка.Пользователи, + |СправочникСсылка.ГруппыПользователей, + |СправочникСсылка.ВнешниеПользователи, + |СправочникСсылка.ГруппыВнешнихПользователей"), + "ГруппыПрав", + НСтр("ru = 'Пользователь'")), + Справочники.Пользователи.ПустаяСсылка()); + + ДобавитьРеквизит( + НовыеРеквизиты, + Новый РеквизитФормы( + "НомерКартинки", + Новый ОписаниеТипов("Число"), + "ГруппыПрав"), + -1); Иначе Элемент = ДобавитьЭлемент("ГруппыПравПользователь", Тип("ПолеФормы"), Элементы.ГруппыПрав); Элемент.Вид = ВидПоляФормы.ПолеВвода; @@ -449,10 +588,14 @@ КонецЕсли; Иначе Если НовыеРеквизиты <> Неопределено Тогда - ДобавитьРеквизит(НовыеРеквизиты, Новый РеквизитФормы("ЗначениеДоступа", Метаданные.НайтиПоПолномуИмени(ТаблицаЗначенийДоступа).СтандартныеРеквизиты.Ссылка.Тип, - "ГруппыПрав", - НазваниеЗначенийДоступа), - Неопределено); + ДобавитьРеквизит( + НовыеРеквизиты, + Новый РеквизитФормы( + "ЗначениеДоступа", + Метаданные.НайтиПоПолномуИмени(ТаблицаЗначенийДоступа).СтандартныеРеквизиты.Ссылка.Тип, + "ГруппыПрав", + НазваниеЗначенийДоступа), + Неопределено); Иначе Элемент = ДобавитьЭлемент("ГруппыПравЗначениеДоступа", Тип("ПолеФормы"), Элементы.ГруппыПрав); Элемент.Вид = ВидПоляФормы.ПолеВвода; @@ -464,7 +607,14 @@ Для каждого ОписаниеПрава Из ОписанияВозможныхПрав Цикл Если НовыеРеквизиты <> Неопределено Тогда - ДобавитьРеквизит(НовыеРеквизиты, Новый РеквизитФормы(ОписаниеПрава.Имя, Новый ОписаниеТипов("Булево"), "ГруппыПрав", ОписаниеПрава.Синоним), ОписаниеПрава.НачальноеЗначение); + ДобавитьРеквизит( + НовыеРеквизиты, + Новый РеквизитФормы( + ОписаниеПрава.Имя, + Новый ОписаниеТипов("Булево"), + "ГруппыПрав", + ОписаниеПрава.Синоним), + ОписаниеПрава.НачальноеЗначение); ВозможныеПрава.Вставить(ОписаниеПрава.Имя); @@ -501,7 +651,14 @@ Если НовыеРеквизиты <> Неопределено Тогда ТипыНаследуетсяОт = Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа.Измерения.ЗначениеДоступа.Тип.Типы(); ТипыНаследуетсяОт.Добавить(Тип("Строка")); - ДобавитьРеквизит(НовыеРеквизиты, Новый РеквизитФормы("НаследуетсяОт", Новый ОписаниеТипов(ТипыНаследуетсяОт), "ГруппыПрав", НСтр("ru = 'Наследуется от'")), НСтр("ru = '<не наследуется>'")); + ДобавитьРеквизит( + НовыеРеквизиты, + Новый РеквизитФормы( + "НаследуетсяОт", + Новый ОписаниеТипов(ТипыНаследуетсяОт), + "ГруппыПрав", + НСтр("ru = 'Наследуется от'")), + НСтр("ru = '<не наследуется>'")); Иначе Элемент = ДобавитьЭлемент("ГруппыПравНаследуетсяОт", Тип("ПолеФормы"), Элементы.ГруппыПрав); Элемент.Вид = ВидПоляФормы.ПолеВвода; @@ -511,7 +668,17 @@ КонецЕсли; ИначеЕсли НЕ НастройкаПоГруппеПользователей Тогда Если НовыеРеквизиты <> Неопределено Тогда - ДобавитьРеквизит(НовыеРеквизиты, Новый РеквизитФормы("ГруппаПользователей", Новый ОписаниеТипов("СправочникСсылка.ГруппыПользователей, СправочникСсылка.ГруппыВнешнихПользователей, Строка"), "ГруппыПрав", НСтр("ru = 'От группы'")), Неопределено); + ДобавитьРеквизит( + НовыеРеквизиты, + Новый РеквизитФормы( + "ГруппаПользователей", + Новый ОписаниеТипов( + "СправочникСсылка.ГруппыПользователей, + |СправочникСсылка.ГруппыВнешнихПользователей, + |Строка"), + "ГруппыПрав", + НСтр("ru = 'От группы'")), + Неопределено); Иначе Элемент = ДобавитьЭлемент("ГруппыПравГруппаПользователей", Тип("ПолеФормы"), Элементы.ГруппыПрав); Элемент.Вид = ВидПоляФормы.ПолеВвода; @@ -523,16 +690,15 @@ Если НовыеРеквизиты = Неопределено Тогда Элемент = ДобавитьЭлемент("ГруппыПравЗапрещено", Тип("ПолеФормы"), Элементы.ГруппыПрав); - Элемент.Вид = ВидПоляФормы.ПолеВвода; - Элемент.ПутьКДанным = "ГруппыПрав.Запрещено"; - Элемент.Заголовок = НСтр("ru = 'Тип прав'"); + Элемент.Вид = ВидПоляФормы.ПолеВвода; + Элемент.ПутьКДанным = "ГруппыПрав.Запрещено"; + Элемент.Заголовок = НСтр("ru = 'Тип прав'"); + Элемент.Формат = НСтр("ru = 'БЛ=Разрешить; БИ=Запретить'"); + Элемент.Подсказка = НСтр("ru = 'Запретить/Разрешить'"); Элемент.УстановитьДействие("ПриИзменении", "ГруппыПравЗапрещеноПриИзменении"); - Элемент.Формат = НСтр("ru = 'БЛ=Разрешить; БИ=Запретить'"); Элемент.ФорматРедактирования = Элемент.Формат; - Элемент.Подсказка = НСтр("ru = 'Запретить/Разрешить'"); КонецЕсли; - КонецПроцедуры &НаСервере @@ -764,131 +930,14 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбработкаПроверкиЗаполнения(Отказ) - - НомерСтроки = ГруппыПрав.Количество()-1; - - Пока НЕ Отказ И НомерСтроки >= 0 Цикл - ТекущаяСтрока = ГруппыПрав.Получить(НомерСтроки); - - // Проверка заполнения флажков прав. - НетЗаполненногоПрава = Истина; - ИмяПервогоПрава = ""; - Для каждого ВозможноеПраво Из ВозможныеПрава Цикл - Если НЕ ЗначениеЗаполнено(ИмяПервогоПрава) Тогда - ИмяПервогоПрава = ВозможноеПраво.Ключ; - КонецЕсли; - Если ТекущаяСтрока[ВозможноеПраво.Ключ] Тогда - НетЗаполненногоПрава = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - Если НетЗаполненногоПрава Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Необходимо заполнить по меньшей мере одно право доступа.'"), - , - "ГруппыПрав[" + Формат(НомерСтроки, "ЧГ=0") + "]." + ИмяПервогоПрава, - , - Отказ); - Возврат; - КонецЕсли; - - // Проверка заполенения пользователей/групп пользователей, - // значений доступа и их дублей. - Если НастройкаПоЗначениюДоступа Тогда - - // Проверка заполнения. - Если НЕ ЗначениеЗаполнено(ТекущаяСтрока["Пользователь"]) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Выберите пользователя или группу пользователей.'"), - , - "ГруппыПрав[" + Формат(НомерСтроки, "ЧГ=0") + "].Пользователь", - , - Отказ); - Возврат; - КонецЕсли; - - // Проверка дублей. - Отбор = Новый Структура("НаследуетсяОт, Пользователь", - ТекущаяСтрока["НаследуетсяОт"], - ТекущаяСтрока["Пользователь"]); - Если ГруппыПрав.НайтиСтроки(Отбор).Количество() > 1 Тогда - Если ТипЗнч(Отбор.Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда - ТекстСообщения = НСтр("ru = 'Настройка для пользователя ""%1"" уже есть. - |Выберите другого пользователя или группу пользователей.'"); - Иначе - ТекстСообщения = НСтр("ru = 'Настройка для группы пользователей ""%1"" уже есть. - |Выберите другую группу пользователей или пользователя.'"); - КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Отбор.Пользователь), - , - "ГруппыПрав[" + Формат(НомерСтроки, "ЧГ=0") + "].Пользователь", - , - Отказ); - Возврат; - КонецЕсли; - - ИначеЕсли НастройкаПоГруппеПользователей Тогда - - // Проверка заполнения. - Если НЕ ЗначениеЗаполнено(ТекущаяСтрока["ЗначениеДоступа"]) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Необходимо выбрать значение.'"), - , - "ГруппыПрав[" + Формат(НомерСтроки, "ЧГ=0") + "].ЗначениеДоступа", - , - Отказ); - Возврат; - КонецЕсли; - - // Проверка дублей. - Отбор = Новый Структура("ЗначениеДоступа", - ТекущаяСтрока["ЗначениеДоступа"]); - Если ГруппыПрав.НайтиСтроки(Отбор).Количество() > 1 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Настройка для значения ""%1"" уже есть. - |Необходимо выбрать другое значение.'"), - Отбор.ЗначениеДоступа), - , - "ГруппыПрав[" + Формат(НомерСтроки, "ЧГ=0") + "].ЗначениеДоступа", - , - Отказ); - Возврат; - КонецЕсли; - - Иначе - - // Проверка заполнения. - Если НЕ ЗначениеЗаполнено(ТекущаяСтрока["ЗначениеДоступа"]) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Необходимо выбрать значение.'"), - , - "ГруппыПрав[" + Формат(НомерСтроки, "ЧГ=0") + "].ЗначениеДоступа", - , - Отказ); - Возврат; - КонецЕсли; - - // Проверка дублей. - Отбор = Новый Структура("ГруппаПользователей, ЗначениеДоступа", - ТекущаяСтрока["ГруппаПользователей"], - ТекущаяСтрока["ЗначениеДоступа"]); - Если ГруппыПрав.НайтиСтроки(Отбор).Количество() > 1 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Настройка для значения ""%1"" уже есть. - |Необходимо выбрать другое значение.'"), - Отбор.ЗначениеДоступа), - , - "ГруппыПрав[" + Формат(НомерСтроки, "ЧГ=0") + "].ЗначениеДоступа", - , - Отказ); - Возврат; - КонецЕсли; - КонецЕсли; - - НомерСтроки = НомерСтроки - 1; - КонецЦикла; - -КонецПроцедуры - &НаСервере Процедура ЗаписатьПрава(Отказ = Ложь, РазрешеноУправлениеПравамиПослеЗаписи = Ложь, ОписаниеПредупреждения = "") + Если НЕ ПроверитьЗаполнение() Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + ОписаниеОшибки = ""; Если НЕ УправлениеДоступом.РазрешеноУправлениеПравамиПоЗначениямДоступа(Параметры.СсылкаНаОбъект, ОписаниеОшибки) Тогда ВызватьИсключение(ОписаниеОшибки); @@ -1137,5 +1186,3 @@ Пользователи.ЗаполнитьНомераКартинокПользователей(ГруппыПрав, "Пользователь", "НомерКартинки", ИдентификаторСтроки); КонецПроцедуры - - diff --git a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form index 16e5eda61..89310ecad 100644 --- a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form +++ b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Form.form @@ -41,7 +41,7 @@ false - CommonPicture.Предупреждение32 + CommonPicture.Вопрос32
    @@ -187,10 +187,9 @@ RestoreValues Retry SaveValues - 40 + 45 5 DontBlock - UseList true SettingsStorage.ХранилищеВариантовОтчетов true diff --git a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl index 5128b0cfd..12c90935a 100644 --- a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl +++ b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl @@ -1,9 +1,9 @@ - -/////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ФОРМЫ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; @@ -14,8 +14,8 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ЭЛЕМЕНТОВ ФОРМЫ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ // Обработчик нажатия на гиперссылку. // @@ -38,7 +38,7 @@ // Инициализирует массив будущих задач, которые необходимо выполнить при закрытии. // &НаКлиенте -Процедура ИзмененитьМассивБудущихЗадач(Элемент) +Процедура ИзменитьМассивБудущихЗадач(Элемент) ИмяЭлемента = Элемент.Имя; НайденныйЭлемент = Элементы.Найти(ИмяЭлемента); @@ -66,7 +66,7 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте @@ -85,8 +85,8 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Создает элементы формы по передаваемым вопросам пользователю. // @@ -135,12 +135,13 @@ Группа = Элементы.Добавить(ИмяГруппы, ТипГруппы, РодительГруппы); Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; Группа.Отображение = ОтображениеОбычнойГруппы.Нет; - Группа.ОтображатьЗаголовок = Ложь; + Группа.ОтображатьЗаголовок = Ложь; + Группа.РастягиватьПоГоризонтали = Истина; Возврат Группа; КонецФункции -// Формирует на форме гипперссылку с поясняющим текстом. +// Формирует на форме гиперссылку с поясняющим текстом. // // Параметры: // СтруктураВопроса - структура передаваемого вопроса. @@ -251,7 +252,7 @@ СтруктураДействия = Неопределено; Если СтруктураВопроса.Свойство("ДействиеПриУстановленномФлажке", СтруктураДействия) Тогда Если СтруктураДействия.Свойство("Форма", ФормаЭлемента) Тогда - НовоеПолеФормы.УстановитьДействие("ПриИзменении", "ИзмененитьМассивБудущихЗадач"); + НовоеПолеФормы.УстановитьДействие("ПриИзменении", "ИзменитьМассивБудущихЗадач"); СтруктураМассива = Новый Структура; СтруктураМассива.Вставить("Имя", ИмяФлажка); @@ -270,8 +271,6 @@ КонецЕсли; КонецПроцедуры -// Создает надпись окончательного вопроса в форме. -// &НаСервере Процедура СоздатьОкончательныйВопрос() Группа = СформироватьГруппуЭлементовФормы(); @@ -309,19 +308,19 @@ КонецЦикла; КонецФункции -&НаСервере -Функция ИдентификаторМассиваЗадачПоИмени(ИмяЭлемента) +&НаКлиенте +Функция ИдентификаторМассиваЗадачПоИмени(ИмяЭлемента) Для каждого ЭлементМассива из МассивЗадачНаВыполнениеПослеЗакрытия цикл Наименование = ""; Если ЭлементМассива.Значение.Свойство("Имя", Наименование) Тогда Если Не ПустаяСтрока(Наименование) и Наименование = ИмяЭлемента тогда Возврат ЭлементМассива.ПолучитьИдентификатор(); - КонецЕсли; - КонецЕсли; - КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЦикла; Возврат Неопределено; -КонецФункции +КонецФункции // Выполняет необходимые задачи. // diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/ConditionalAppearance.dcssca b/SSL/src/CommonForms/ПрисоединенныеФайлы/ConditionalAppearance.dcssca new file mode 100644 index 000000000..ab380ea9f --- /dev/null +++ b/SSL/src/CommonForms/ПрисоединенныеФайлы/ConditionalAppearance.dcssca @@ -0,0 +1,53 @@ + + + + + + Список + + + + + Список.ФайлРедактируется + Equal + true + + + Список.ФайлРедактируетТекущийПользователь + Equal + true + + + + + ЦветТекста + style:ФайлЗанятыйТекущимПользователем + + + + + + + Список + + + + + Список.ФайлРедактируется + Equal + true + + + Список.ФайлРедактируетТекущийПользователь + Equal + false + + + + + ЦветТекста + style:ФайлЗанятыйДругимПользователем + + + + diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form b/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form index 89f7a1cd1..c52e817c5 100644 --- a/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form +++ b/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form @@ -16,6 +16,325 @@ Список None + Delete + SetDeletionMark + + СписокПодписанЭЦП + 88 + true + true + + true + + + Список.ПодписанЭЦП + + None + + СписокПодписанЭЦПРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + + СписокПодписанЭЦПКонтекстноеМеню + 89 + true + + PictureField + Enter + true + + CommonPicture.ПодписанЭЦП + + Left + true + + true + true + true + true + + CommonPicture.ПодписанЭЦП + + + + 1 + + + + + СписокЗашифрован + 90 + true + true + + true + + + Список.Зашифрован + + None + + СписокЗашифрованРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + + СписокЗашифрованКонтекстноеМеню + 91 + true + + PictureField + Enter + true + + CommonPicture.Зашифрован + + Left + true + + true + true + true + true + + CommonPicture.Зашифрован + + + + 1 + + + + + СписокНаименование + 86 + true + true + + true + + + Список.Description + + + СписокНаименованиеРасширеннаяПодсказка + 169 + Label + true + true + + Left + + + + СписокНаименованиеКонтекстноеМеню + 87 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокОписание + 92 + true + true + + true + + + Список.Описание + + + СписокОписаниеРасширеннаяПодсказка + 171 + Label + true + true + + Left + + + + СписокОписаниеКонтекстноеМеню + 93 + true + + LabelField + Enter + true + Left + true + + true + 1 + true + + + + СписокДатаСоздания + 94 + true + true + + + Список.ДатаСоздания + + + СписокДатаСозданияРасширеннаяПодсказка + 173 + Label + true + true + + Left + + + + СписокДатаСозданияКонтекстноеМеню + 95 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокДатаИзменения + 100 + true + true + + true + + + Список.ДатаИзменения + + + СписокДатаИзмененияРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + + СписокДатаИзмененияКонтекстноеМеню + 101 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокАвтор + 96 + true + true + + true + + + Список.Автор + + + СписокАвторРасширеннаяПодсказка + 177 + Label + true + true + + Left + + + + СписокАвторКонтекстноеМеню + 97 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СписокРазмер + 98 + + <key>ru</key> + <value>Размер (байт)</value> + + true + true + + true + + + Список.Размер + + + СписокРазмерРасширеннаяПодсказка + 179 + Label + true + true + + Left + + + + СписокРазмерКонтекстноеМеню + 99 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -35,10 +354,6 @@ BeforeAddRow СписокПередНачаломДобавления - - BeforeDeleteRow - СписокПередУдалением - OnActivateRow СписокПриАктивизацииСтроки @@ -53,10 +368,10 @@ СписокСтрокаПоиска - 140 + 156 СписокСтрокаПоискаРасширеннаяПодсказка - 142 + 158 Label true true @@ -66,7 +381,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 141 + 157 true Список @@ -76,10 +391,10 @@ СписокСостояниеПросмотра - 143 + 159 СписокСостояниеПросмотраРасширеннаяПодсказка - 145 + 161 Label true true @@ -89,7 +404,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 144 + 160 true ViewStatusAddition @@ -100,10 +415,10 @@ СписокУправлениеПоиском - 146 + 162 СписокУправлениеПоискомРасширеннаяПодсказка - 148 + 164 Label true true @@ -113,7 +428,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 147 + 163 true SearchControlAddition @@ -124,7 +439,7 @@ СписокРасширеннаяПодсказка - 139 + 155 Label true true @@ -136,16 +451,20 @@ СписокКонтекстноеМеню 7 - СписокКонтекстноеМенюДобавитьФайлы + СписокКонтекстноеМенюСоздать 54 + + <key>ru</key> + <value>Добавить</value> + true true true - СписокКонтекстноеМенюДобавитьФайлыРасширеннаяПодсказка - 115 + СписокКонтекстноеМенюСоздатьРасширеннаяПодсказка + 131 Label true true @@ -153,7 +472,7 @@ Left - Form.Command.ДобавитьФайлы + Form.StandardCommand.Create Normal Auto true @@ -174,7 +493,7 @@ СписокКонтекстноеМенюОткрытьФайлДляПросмотраРасширеннаяПодсказка - 117 + 133 Label true true @@ -205,7 +524,7 @@ СписокКонтекстноеМенюГруппаКомандВажноеРасширеннаяПодсказка - 116 + 132 Label true true @@ -228,7 +547,7 @@ СписокКонтекстноеМенюРедактироватьРасширеннаяПодсказка - 119 + 135 Label true true @@ -254,7 +573,7 @@ СписокКонтекстноеМенюЗакончитьРедактированиеРасширеннаяПодсказка - 120 + 136 Label true true @@ -280,7 +599,7 @@ СписокКонтекстноеМенюОсвободитьРасширеннаяПодсказка - 121 + 137 Label true true @@ -311,7 +630,7 @@ СписокКонтекстноеМенюГруппаКомандСовместныйДоступРасширеннаяПодсказка - 118 + 134 Label true true @@ -325,7 +644,7 @@ СписокКонтекстноеМенюГруппаКомандСтандартные 61 - СписокКонтекстноеМенюСтандартнаяКомандаСкопировать + СписокКонтекстноеМенюСкопировать 63 true true @@ -333,8 +652,8 @@ true - СписокКонтекстноеМенюСтандартнаяКомандаСкопироватьРасширеннаяПодсказка - 123 + СписокКонтекстноеМенюСкопироватьРасширеннаяПодсказка + 139 Label true true @@ -342,7 +661,7 @@ Left - Form.Command.СтандартнаяКомандаСкопировать + Form.StandardCommand.Copy Normal Auto true @@ -351,7 +670,7 @@ Auto - СписокКонтекстноеМенюСтандартнаяКомандаПометкаУдаления + СписокКонтекстноеМенюУстановитьПометкуУдаления 64 true true @@ -359,8 +678,8 @@ true - СписокКонтекстноеМенюСтандартнаяКомандаПометкаУдаленияРасширеннаяПодсказка - 124 + СписокКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка + 140 Label true true @@ -368,7 +687,7 @@ Left - Form.Command.СтандартнаяКомандаПометкаУдаления + Form.Command.УстановитьПометкуУдаления Normal Auto true @@ -386,7 +705,7 @@ СписокКонтекстноеМенюСохранитьКакРасширеннаяПодсказка - 125 + 141 Label true true @@ -412,7 +731,7 @@ СписокКонтекстноеМенюОбновитьИзФайлаНаДискеРасширеннаяПодсказка - 126 + 142 Label true true @@ -429,16 +748,20 @@ Auto - СписокКонтекстноеМенюСтандартнаяКомандаСвойстваОбъекта + СписокКонтекстноеМенюИзменить 67 + + <key>ru</key> + <value>Свойства файла</value> + true true true - СписокКонтекстноеМенюСтандартнаяКомандаСвойстваОбъектаРасширеннаяПодсказка - 127 + СписокКонтекстноеМенюИзменитьРасширеннаяПодсказка + 143 Label true true @@ -446,12 +769,15 @@ Left - Form.Command.СтандартнаяКомандаСвойстваОбъекта + Form.StandardCommand.Change Normal Auto true true UserCmds + + StdPicture.Properties + Auto true @@ -469,7 +795,7 @@ СписокКонтекстноеМенюГруппаКомандСтандартныеРасширеннаяПодсказка - 122 + 138 Label true true @@ -489,7 +815,7 @@ СписокКонтекстноеМенюОткрытьКаталогФайлаРасширеннаяПодсказка - 128 + 144 Label true true @@ -518,7 +844,7 @@ СписокКонтекстноеМенюНайтиРасширеннаяПодсказка - 130 + 146 Label true true @@ -544,7 +870,7 @@ СписокКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка - 131 + 147 Label true true @@ -575,7 +901,7 @@ СписокКонтекстноеМенюГруппаКомандОтСпискаРасширеннаяПодсказка - 129 + 145 Label true true @@ -598,7 +924,7 @@ СписокКонтекстноеМенюЭЦППодписатьРасширеннаяПодсказка - 133 + 149 Label true true @@ -624,7 +950,7 @@ СписокКонтекстноеМенюДобавитьЭЦПИзФайлаРасширеннаяПодсказка - 134 + 150 Label true true @@ -650,7 +976,7 @@ СписокКонтекстноеМенюСохранитьВместеСЭЦПРасширеннаяПодсказка - 135 + 151 Label true true @@ -679,7 +1005,7 @@ СписокКонтекстноеМенюЗашифроватьРасширеннаяПодсказка - 137 + 153 Label true true @@ -705,7 +1031,7 @@ СписокКонтекстноеМенюРасшифроватьРасширеннаяПодсказка - 138 + 154 Label true true @@ -736,7 +1062,7 @@ СписокКонтекстноеМенюГруппаКомандШифрованияРасширеннаяПодсказка - 136 + 152 Label true true @@ -768,7 +1094,7 @@ СписокКонтекстноеМенюГруппаКомандЭЦПРасширеннаяПодсказка - 132 + 148 Label true true @@ -803,6 +1129,9 @@ true true true + + Список.ИндексКартинки + CommonPicture.КоллекцияПиктограммФайлов @@ -825,16 +1154,20 @@ ФормаКоманднаяПанель -1 - ФормаДобавитьФайлы + ФормаСоздать 1 + + <key>ru</key> + <value>Добавить</value> + true true true - ФормаДобавитьФайлыРасширеннаяПодсказка - 86 + ФормаСоздатьРасширеннаяПодсказка + 102 Label true true @@ -842,7 +1175,7 @@ Left - Form.Command.ДобавитьФайлы + Form.StandardCommand.Create Normal Auto true @@ -863,7 +1196,7 @@ ФормаОткрытьФайлДляПросмотраРасширеннаяПодсказка - 88 + 104 Label true true @@ -894,7 +1227,7 @@ ГруппаКомандВажноеРасширеннаяПодсказка - 87 + 103 Label true true @@ -917,7 +1250,7 @@ ФормаРедактироватьРасширеннаяПодсказка - 90 + 106 Label true true @@ -943,7 +1276,7 @@ ФормаЗакончитьРедактированиеРасширеннаяПодсказка - 91 + 107 Label true true @@ -969,7 +1302,7 @@ ФормаОсвободитьРасширеннаяПодсказка - 92 + 108 Label true true @@ -997,7 +1330,7 @@ ГруппаКомандСовместныйДоступРасширеннаяПодсказка - 89 + 105 Label true true @@ -1020,7 +1353,7 @@ ФормаЭЦППодписатьРасширеннаяПодсказка - 94 + 110 Label true true @@ -1046,7 +1379,7 @@ ФормаСохранитьВместеСЭЦПРасширеннаяПодсказка - 95 + 111 Label true true @@ -1072,7 +1405,7 @@ ФормаДобавитьЭЦПИзФайлаРасширеннаяПодсказка - 96 + 112 Label true true @@ -1101,7 +1434,7 @@ ФормаЗашифроватьРасширеннаяПодсказка - 98 + 114 Label true true @@ -1127,7 +1460,7 @@ ФормаРасшифроватьРасширеннаяПодсказка - 99 + 115 Label true true @@ -1158,7 +1491,7 @@ ГруппаКнопокШифрованияРасширеннаяПодсказка - 97 + 113 Label true true @@ -1190,7 +1523,7 @@ ГруппаКомандЭЦПРасширеннаяПодсказка - 93 + 109 Label true true @@ -1208,7 +1541,7 @@ ГруппаКомандСтандартные 18 - ФормаСтандартнаяКомандаСкопировать + ФормаСкопировать 19 true true @@ -1216,8 +1549,8 @@ true - ФормаСтандартнаяКомандаСкопироватьРасширеннаяПодсказка - 101 + ФормаСкопироватьРасширеннаяПодсказка + 117 Label true true @@ -1225,7 +1558,7 @@ Left - Form.Command.СтандартнаяКомандаСкопировать + Form.StandardCommand.Copy Normal Auto true @@ -1234,7 +1567,7 @@ Auto - ФормаСтандартнаяКомандаПометкаУдаления + ФормаУстановитьПометкуУдаления 21 true true @@ -1242,8 +1575,8 @@ true - ФормаСтандартнаяКомандаПометкаУдаленияРасширеннаяПодсказка - 102 + ФормаУстановитьПометкуУдаленияРасширеннаяПодсказка + 118 Label true true @@ -1251,7 +1584,7 @@ Left - Form.Command.СтандартнаяКомандаПометкаУдаления + Form.Command.УстановитьПометкуУдаления Normal Auto true @@ -1270,7 +1603,7 @@ ФормаСохранитьКакРасширеннаяПодсказка - 103 + 119 Label true true @@ -1296,7 +1629,7 @@ ФормаОбновитьИзФайлаНаДискеРасширеннаяПодсказка - 104 + 120 Label true true @@ -1314,16 +1647,20 @@ InAdditionalSubmenu - ФормаСтандартнаяКомандаСвойстваОбъекта + ФормаИзменить 20 + + <key>ru</key> + <value>Свойства файла</value> + true true true - ФормаСтандартнаяКомандаСвойстваОбъектаРасширеннаяПодсказка - 105 + ФормаИзменитьРасширеннаяПодсказка + 121 Label true true @@ -1331,12 +1668,15 @@ Left - Form.Command.СтандартнаяКомандаСвойстваОбъекта + Form.StandardCommand.Change Normal Auto true true UserCmds + + StdPicture.Properties + Auto true @@ -1354,7 +1694,7 @@ ГруппаКомандСтандартныеРасширеннаяПодсказка - 100 + 116 Label true true @@ -1374,7 +1714,7 @@ ФормаОткрытьКаталогФайлаРасширеннаяПодсказка - 106 + 122 Label true true @@ -1404,7 +1744,7 @@ ФормаНайтиРасширеннаяПодсказка - 108 + 124 Label true true @@ -1412,7 +1752,7 @@ Left - Form.Item.Список.StandardCommand.Find + Form.StandardCommand.Find Normal Auto true @@ -1431,7 +1771,7 @@ ФормаОтменитьПоискРасширеннаяПодсказка - 109 + 125 Label true true @@ -1439,7 +1779,7 @@ Left - Form.Item.Список.StandardCommand.CancelSearch + Form.StandardCommand.CancelSearch Normal Auto true @@ -1458,7 +1798,7 @@ ФормаНастройкаСпискаРасширеннаяПодсказка - 110 + 126 Label true true @@ -1466,7 +1806,7 @@ Left - Form.Item.Список.StandardCommand.ListSettings + Form.StandardCommand.ListSettings Normal Auto true @@ -1484,7 +1824,7 @@ ФормаВывестиСписокРасширеннаяПодсказка - 111 + 127 Label true true @@ -1492,7 +1832,7 @@ Left - Form.Item.Список.StandardCommand.OutputList + Form.StandardCommand.OutputList Normal Auto true @@ -1510,7 +1850,7 @@ ФормаОбновитьРасширеннаяПодсказка - 112 + 128 Label true true @@ -1518,7 +1858,7 @@ Left - Form.Item.Список.StandardCommand.Refresh + Form.StandardCommand.Refresh Normal Auto true @@ -1536,7 +1876,7 @@ ФормаИзменитьФормуРасширеннаяПодсказка - 113 + 129 Label true true @@ -1553,33 +1893,6 @@ Auto InAdditionalSubmenu - - ФормаСправка - 9 - true - true - - true - - - ФормаСправкаРасширеннаяПодсказка - 114 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - true true @@ -1595,7 +1908,7 @@ ГруппаКомандОтСпискаРасширеннаяПодсказка - 107 + 123 Label true true @@ -1605,16 +1918,49 @@ + + ФормаСправка + 9 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left + true NotificationProcessing ОбработкаОповещения + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере + Delete + SetDeletionMark DontBlock true true @@ -1641,8 +1987,40 @@ true + + Список.DeletionMark + + + Список.Ref + + + Список.Зашифрован + + + Список.ФайлРедактируетТекущийПользователь + + + Список.ФайлРедактируется +
    true
    + ВЫБРАТЬ + Файлы.Ссылка, + ЛОЖЬ КАК ПометкаУдаления, + 1 КАК ИндексКартинки, + Файлы.Наименование, + "" КАК Описание, + ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) КАК ДатаСоздания, + ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) КАК ДатаИзменения, + ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Автор, + 0 КАК Размер, + ЛОЖЬ КАК ПодписанЭЦП, + ЛОЖЬ КАК Зашифрован, + ЛОЖЬ КАК ФайлРедактируется, + ЛОЖЬ КАК ФайлРедактируетТекущийПользователь +ИЗ + Справочник.ТомаХраненияФайлов КАК Файлы + Catalog.ТомаХраненияФайлов true true true @@ -1650,38 +2028,6 @@ true - - ВладелецФайла - - <key>ru</key> - <value>Владелец файла</value> - - 2 - - - true - - - true - - - - ДоступныФункцииИзмененияФайлов - - <key>ru</key> - <value>Доступны функции изменения файлов</value> - - 3 - - Boolean - - - true - - - true - - ИменаЭлементовКнопокФормы @@ -1712,32 +2058,6 @@ <common>true</common> </edit> </attributes> - <formCommands> - <name>ДобавитьФайлы</name> - <title> - <key>ru</key> - <value>Добавить</value> - - 1 - - ru - Добавить файлы - - - true - - - StdPicture.CreateListItem - - - - ДобавитьФайлы - - - TextPicture - Auto - Auto - ОткрытьФайлДляПросмотра @@ -1843,59 +2163,7 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>СтандартнаяКомандаСкопировать</name> - <title> - <key>ru</key> - <value>Скопировать</value> - - 6 - - ru - Создать новый элемент копированием текущего - - - true - - F9 - - StdPicture.CloneListItem - - - - СтандартнаяКомандаСкопировать - - - Auto - Auto - - - СтандартнаяКомандаСвойстваОбъекта - - <key>ru</key> - <value>Свойства файла</value> - - 7 - - ru - Свойства файла - - - true - - F2 - - StdPicture.Properties - - - - СтандартнаяКомандаСвойстваОбъекта - - - Auto - Auto - - - СтандартнаяКомандаПометкаУдаления + УстановитьПометкуУдаления <key>ru</key> <value>Пометить на удаление / Снять пометку</value> @@ -1913,7 +2181,7 @@ </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>СтандартнаяКомандаПометкаУдаления</name> + <name>УстановитьПометкуУдаления</name> </handler> </action> <currentRowUse>Auto</currentRowUse> @@ -2116,6 +2384,11 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <parameters> + <name>ВладелецФайла</name> + <valueType/> + <keyParameter>true</keyParameter> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl b/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl index f27adb2d4..7257c6b92 100644 --- a/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl @@ -1,43 +1,47 @@ -/////////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы и элементов формы +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Перем ИмяСправочникаХранилищаФайлов; - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - ВладелецФайла = Параметры.ВладелецФайла; - УстановитьСвойстваДинамическогоСписка(ИмяСправочникаХранилищаФайлов); - СоздатьЭлементыФормы(); + Если НЕ Параметры.Свойство("ВладелецФайла") Тогда + ВызватьИсключение НСтр("ru = 'Список присоединенных файлов можно посмотреть + |только в форме объекта-владельца.'"); + КонецЕсли; - УстановитьУсловноеОформление(); + НастроитьДинамическийСписок(ИмяСправочникаХранилищаФайлов); ТипСправочникаСФайлами = Тип("СправочникСсылка." + ИмяСправочникаХранилищаФайлов); МетаданныеСправочникаСФайлами = Метаданные.НайтиПоТипу(ТипСправочникаСФайлами); - // - Если Не ПравоДоступа("Добавление", МетаданныеСправочникаСФайлами) Тогда - УстановитьКнопкиДобавленияНевидимыми(); + + Если НЕ ПравоДоступа("Добавление", МетаданныеСправочникаСФайлами) Тогда + СкрытьКнопкиДобавления(); КонецЕсли; - // - Если Не ПравоДоступа("Изменение", МетаданныеСправочникаСФайлами) - Или Не ПравоДоступа("Изменение", ВладелецФайла.Метаданные()) - Или Параметры.ТолькоПросмотр = Истина Тогда - УстановитьКнопкиИзмененияНевидимыми(Элементы); + + Если НЕ ПравоДоступа("Изменение", МетаданныеСправочникаСФайлами) + ИЛИ НЕ ПравоДоступа("Изменение", Параметры.ВладелецФайла.Метаданные()) + ИЛИ Параметры.ТолькоПросмотр = Истина Тогда + + СкрытьКнопкиИзменения(); КонецЕсли; ИменаВсехКомандФормы = ПолучитьИменаКомандФормы(); ИменаЭлементов = Новый Массив; Для Каждого ЭлементФормы ИЗ Элементы Цикл + Если ТипЗнч(ЭлементФормы) <> Тип("КнопкаФормы") Тогда Продолжить; КонецЕсли; + Если ИменаВсехКомандФормы.Найти(ЭлементФормы.ИмяКоманды) <> Неопределено Тогда ИменаЭлементов.Добавить(ЭлементФормы.Имя); КонецЕсли; @@ -47,6 +51,53 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + УниверсальноеВремя = УниверсальноеВремя(ТекущаяДата()); + + Список.Параметры.УстановитьЗначениеПараметра( + "СекундДоМестногоВремени", + ТекущаяДата() - УниверсальноеВремя(ТекущаяДата()) ); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия <> "Запись_ПрисоединенныйФайл" Тогда + Возврат; + КонецЕсли; + + СсылкаНаФайл = ?(ТипЗнч(Источник) = Тип("Массив"), Источник[0], Источник); + + Если Параметр.Свойство("ЭтоНовый") И Параметр.ЭтоНовый Тогда + + Элементы.Список.ТекущаяСтрока = СсылкаНаФайл; + УстановитьДоступностьКнопок(); + Иначе + Если НЕ ПроверитьДействиеРазрешено() Тогда + Возврат; + КонецЕсли; + + Если СсылкаНаФайл = Элементы.Список.ТекущиеДанные.Ссылка Тогда + УстановитьДоступностьКнопок(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + +&НаКлиенте +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ОткрытьФайл(); + +КонецПроцедуры + &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) @@ -54,92 +105,76 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - - Если ИмяСобытия <> "Запись_ПрисоединенныйФайл" Тогда - Возврат; - КонецЕсли; - - ФайлСсылка = Источник; - Если ТипЗнч(Источник) = Тип("Массив") Тогда - ФайлСсылка = Источник[0]; - КонецЕсли; - ЭтоНовыйФайл = Ложь; - Если Параметр.Свойство("ЭтоНовый", ЭтоНовыйФайл) И ЭтоНовыйФайл Тогда - Элементы.Список.ТекущаяСтрока = ФайлСсылка; - УстановитьДоступностьКнопок(); - Иначе - Если НЕ ПроверитьДействиеРазрешено() Тогда - Возврат; - КонецЕсли; - - Если ФайлСсылка = Элементы.Список.ТекущиеДанные.Ссылка Тогда - УстановитьДоступностьКнопок(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) Отказ = Истина; Если Копирование Тогда - СтандартнаяКомандаСкопировать(); - Иначе - ДобавитьФайлы(); + + Если НЕ ПроверитьДействиеРазрешено() Тогда + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура("ЗначениеКопирования", Элемент.ТекущиеДанные.Ссылка); + + ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы); + + ИначеЕсли Элементы.ФормаСоздать.Видимость + И Элементы.ФормаСоздать.Доступность Тогда + + ПрисоединенныеФайлыКлиент.ДобавитьФайлы(Параметры.ВладелецФайла, УникальныйИдентификатор); КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - ОткрытьФайлДляПросмотра(); - -КонецПроцедуры - &НаКлиенте Процедура СписокПередНачаломИзменения(Элемент, Отказ) Отказ = Истина; - СтандартнаяКомандаСвойстваОбъекта(); -КонецПроцедуры - -&НаКлиенте -Процедура СписокПередУдалением(Элемент, Отказ) + Если НЕ ПроверитьДействиеРазрешено() Тогда + Возврат; + КонецЕсли; - Отказ = Истина; - СтандартнаяКомандаПометкаУдаления(); + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Ключ", ТекущиеДанные.Ссылка); + ПараметрыФормы.Вставить("ТолькоПросмотр", ТолькоПросмотр); + + ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы, , Ложь); КонецПроцедуры &НаКлиенте Процедура СписокПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + СтандартнаяОбработка = Ложь; + КонецПроцедуры &НаКлиенте Процедура СписокПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) СтандартнаяОбработка = Ложь; - + МассивИменФайлов = Новый Массив; - Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл") И ПараметрыПеретаскивания.Значение.ЭтоФайл() = Истина Тогда + Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл") + И ПараметрыПеретаскивания.Значение.ЭтоФайл() = Истина Тогда МассивИменФайлов.Добавить(ПараметрыПеретаскивания.Значение.ПолноеИмя); ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда - Если ПараметрыПеретаскивания.Значение.Количество() >= 1 И ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Файл") Тогда - Для Каждого ФайлПринятый Из ПараметрыПеретаскивания.Значение Цикл - Если ТипЗнч(ФайлПринятый) = Тип("Файл") И ФайлПринятый.ЭтоФайл() Тогда - МассивИменФайлов.Добавить(ФайлПринятый.ПолноеИмя); + Если ПараметрыПеретаскивания.Значение.Количество() >= 1 + И ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Файл") Тогда + + Для каждого Значение Из ПараметрыПеретаскивания.Значение Цикл + + Если ТипЗнч(Значение) = Тип("Файл") И Значение.ЭтоФайл() Тогда + МассивИменФайлов.Добавить(Значение.ПолноеИмя); КонецЕсли; КонецЦикла; КонецЕсли; @@ -147,56 +182,26 @@ КонецЕсли; Если МассивИменФайлов.Количество() > 0 Тогда - ВладелецФайла = Список.Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВладелецФайла")).Значение; - ПрисоединенныеФайлыКлиент.ДобавитьФайлыПеретаскиванием(ВладелецФайла, УникальныйИдентификатор, МассивИменФайлов); + ПрисоединенныеФайлыКлиент.ДобавитьФайлыПеретаскиванием(Параметры.ВладелецФайла, УникальныйИдентификатор, МассивИменФайлов); КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + /////////////////////////////////////////////////////////////////////////////////// // Обработчики команд файлов &НаКлиенте -Процедура ДобавитьФайлы(Команда = Неопределено) +Процедура ОткрытьФайлДляПросмотра(Команда) - Если НЕ Элементы.ФормаДобавитьФайлы.Видимость - ИЛИ НЕ Элементы.ФормаДобавитьФайлы.Доступность Тогда - Возврат; - КонецЕсли; - - ВладелецФайла = Список.Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВладелецФайла")).Значение; - ПрисоединенныеФайлыКлиент.ДобавитьФайлы(ВладелецФайла, УникальныйИдентификатор); + ОткрытьФайл(); КонецПроцедуры &НаКлиенте -Процедура ОткрытьФайлДляПросмотра(Команда = Неопределено) - - Если НЕ ПроверитьДействиеРазрешено() Тогда - Возврат; - КонецЕсли; - - ТекущиеДанные = Элементы.Список.ТекущиеДанные; - - Если ТекущиеДанные.Зашифрован Тогда - Возврат; - КонецЕсли; - - ФайлРедактируется = ТекущиеДанные.ФайлРедактируется И ТекущиеДанные.ФайлРедактируетТекущийПользователь; - - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); - - Если ДанныеФайла.Зашифрован Тогда - ОповеститьОбИзменении(ТекущиеДанные.Ссылка); // файл может быть изменен в другом сеансе - Возврат; - КонецЕсли; - - ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, ФайлРедактируется); - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьКаталогФайла(Команда = Неопределено) +Процедура ОткрытьКаталогФайла(Команда) Если НЕ ПроверитьДействиеРазрешено() Тогда Возврат; @@ -211,7 +216,8 @@ ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если ТекущиеДанные.Зашифрован Тогда - ОповеститьОбИзменении(ТекущиеДанные.Ссылка); // файл может быть изменен в другом сеансе + // Файл может быть изменен в другом сеансе. + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); Возврат; КонецЕсли; @@ -220,7 +226,7 @@ КонецПроцедуры &НаКлиенте -Процедура СохранитьКак(Команда = Неопределено) +Процедура СохранитьКак(Команда) Если НЕ ПроверитьДействиеРазрешено() Тогда Возврат; @@ -237,7 +243,8 @@ Если ДанныеФайла.Зашифрован ИЛИ (ДанныеФайла.ФайлРедактируется И ДанныеФайла.ФайлРедактируетТекущийПользователь) Тогда - ОповеститьОбИзменении(ТекущиеДанные.Ссылка); // файл может быть изменен в другом сеансе + // Файл может быть изменен в другом сеансе. + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); Возврат; КонецЕсли; @@ -246,7 +253,7 @@ КонецПроцедуры &НаКлиенте -Процедура ОбновитьИзФайлаНаДиске(Команда = Неопределено) +Процедура ОбновитьИзФайлаНаДиске(Команда) Если НЕ ПроверитьДействиеРазрешено() Тогда Возврат; @@ -265,33 +272,21 @@ Если ДанныеФайла.Зашифрован ИЛИ ДанныеФайла.ПодписанЭЦП ИЛИ ДанныеФайла.ФайлРедактируется Тогда - ОповеститьОбИзменении(ТекущиеДанные.Ссылка); // файл может быть изменен в другом сеансе + // Файл может быть изменен в другом сеансе. + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); Возврат; КонецЕсли; - Если ПрисоединенныеФайлыКлиент.ОбновитьПрисоединенныйФайл(ТекущиеДанные.Ссылка, ДанныеФайла, УникальныйИдентификатор) Тогда + Если ПрисоединенныеФайлыКлиент.ОбновитьПрисоединенныйФайл(ТекущиеДанные.Ссылка, + ДанныеФайла, + УникальныйИдентификатор) Тогда ОповеститьОбИзменении(ТекущиеДанные.Ссылка); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура СтандартнаяКомандаСвойстваОбъекта(Команда = Неопределено) - - Если НЕ ПроверитьДействиеРазрешено() Тогда - Возврат; - КонецЕсли; - - ТекущиеДанные = Элементы.Список.ТекущиеДанные; - - ПараметрыФормы = Новый Структура("ПрисоединенныйФайл,ТолькоПросмотр", ТекущиеДанные.Ссылка, ТолькоПросмотр); - - ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы,, ТекущиеДанные.Ссылка); - -КонецПроцедуры - -&НаКлиенте -Процедура СтандартнаяКомандаПометкаУдаления(Команда = Неопределено) +Процедура УстановитьПометкуУдаления(Команда) Если НЕ ПроверитьДействиеРазрешено("ПометкаУдаления") Тогда Возврат; @@ -300,11 +295,14 @@ ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные.ПометкаУдаления Тогда - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Снять с ""%1"" пометку на удаление?'"), ТекущиеДанные.Ссылка); + ТекстВопроса = НСтр("ru = 'Снять пометку на удаление с файла + |""%1""?'"); Иначе - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Пометить ""%1"" на удаление?'"), ТекущиеДанные.Ссылка); + ТекстВопроса = НСтр("ru = 'Пометить на удаление файл + |""%1""?'"); КонецЕсли; + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ТекущиеДанные.Ссылка); Результат = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); Если Результат = КодВозвратаДиалога.Да Тогда @@ -314,114 +312,11 @@ КонецПроцедуры -&НаКлиенте -Процедура СтандартнаяКомандаСкопировать(Команда = Неопределено) - - Если НЕ ПроверитьДействиеРазрешено() Тогда - Возврат; - КонецЕсли; - - ТекущиеДанные = Элементы.Список.ТекущиеДанные; - - ПараметрыФормы = Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка); - - ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы); - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////////// -// Обработчики команд для поддержки совместного изменения - -&НаКлиенте -Процедура Редактировать(Команда = Неопределено) - - Если НЕ ПроверитьДействиеРазрешено() Тогда - Возврат; - КонецЕсли; - - ТекущиеДанные = Элементы.Список.ТекущиеДанные; - - Если (ТекущиеДанные.ФайлРедактируется И НЕ ТекущиеДанные.ФайлРедактируетТекущийПользователь) - ИЛИ ТекущиеДанные.Зашифрован - ИЛИ ТекущиеДанные.ПодписанЭЦП Тогда - Возврат; - КонецЕсли; - - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); - - Если (ДанныеФайла.ФайлРедактируется И НЕ ДанныеФайла.ФайлРедактируетТекущийПользователь) - ИЛИ ДанныеФайла.Зашифрован - ИЛИ ДанныеФайла.ПодписанЭЦП Тогда - ОповеститьОбИзменении(ТекущиеДанные.Ссылка); // файл может быть изменен в другом сеансе - Возврат; - КонецЕсли; - - ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, Истина); - - Если НЕ ТекущиеДанные.ФайлРедактируется Тогда - ПрисоединенныеФайлы.ЗанятьФайлДляРедактированияСервер(ТекущиеДанные.Ссылка); - ОповеститьОбИзменении(ТекущиеДанные.Ссылка); - УстановитьДоступностьКнопок(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗакончитьРедактирование(Команда = Неопределено) - - Если НЕ ПроверитьДействиеРазрешено() Тогда - Возврат; - КонецЕсли; - - ТекущиеДанные = Элементы.Список.ТекущиеДанные; - - Если НЕ ТекущиеДанные.ФайлРедактируется - ИЛИ (ТекущиеДанные.ФайлРедактируется И НЕ ТекущиеДанные.ФайлРедактируетТекущийПользователь) Тогда - Возврат; - КонецЕсли; - - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, , Ложь); - - Если НЕ ДанныеФайла.ФайлРедактируется - ИЛИ (ДанныеФайла.ФайлРедактируется И НЕ ДанныеФайла.ФайлРедактируетТекущийПользователь) Тогда - Возврат; - КонецЕсли; - - ИнформацияОФайле = Новый Структура; - - Если ПрисоединенныеФайлыКлиент.ПоместитьРедактируемыйФайлНаДискеВХранилище(ДанныеФайла, ИнформацияОФайле, УникальныйИдентификатор) Тогда - ПрисоединенныеФайлы.ПоместитьФайлВХранилищеИОсвободить(ТекущиеДанные.Ссылка, ИнформацияОФайле); - ОповеститьОбИзменении(ТекущиеДанные.Ссылка); - УстановитьДоступностьКнопок(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура Освободить(Команда = Неопределено) - - Если НЕ ПроверитьДействиеРазрешено() Тогда - Возврат; - КонецЕсли; - - ТекущиеДанные = Элементы.Список.ТекущиеДанные; - - Если НЕ ТекущиеДанные.ФайлРедактируется - ИЛИ (ТекущиеДанные.ФайлРедактируется И НЕ ТекущиеДанные.ФайлРедактируетТекущийПользователь) Тогда - Возврат; - КонецЕсли; - - ПрисоединенныеФайлы.ОсвободитьФайл(ТекущиеДанные.Ссылка); - ОповеститьОбИзменении(ТекущиеДанные.Ссылка); - УстановитьДоступностьКнопок(); - -КонецПроцедуры - /////////////////////////////////////////////////////////////////////////////////// // Обработчики команд для поддержки ЭЦП и шифрования &НаКлиенте -Процедура ЭЦППодписать(Команда = Неопределено) +Процедура ЭЦППодписать(Команда) Если НЕ ПроверитьДействиеРазрешено() Тогда Возврат; @@ -438,11 +333,13 @@ Если ДанныеФайла.ФайлРедактируется ИЛИ ДанныеФайла.Зашифрован Тогда - ОповеститьОбИзменении(ТекущиеДанные.Ссылка); // файл может быть изменен в другом сеансе + // Файл может быть изменен в другом сеансе. + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); Возврат; КонецЕсли; Если ПрисоединенныеФайлыКлиент.СформироватьПодписьФайла(ТекущиеДанные.Ссылка, ДанныеФайла) Тогда + ЭлектроннаяЦифроваяПодписьКлиент.ИнформироватьОПодписанииОбъекта(ТекущиеДанные.Ссылка); УстановитьДоступностьКнопок(); КонецЕсли; @@ -450,7 +347,7 @@ КонецПроцедуры &НаКлиенте -Процедура СохранитьВместеСЭЦП(Команда = Неопределено) +Процедура СохранитьВместеСЭЦП(Команда) Если НЕ ПроверитьДействиеРазрешено() Тогда Возврат; @@ -465,7 +362,8 @@ ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если ДанныеФайла.Зашифрован Тогда - ОповеститьОбИзменении(ТекущиеДанные.Ссылка); // файл может быть изменен в другом сеансе + // Файл может быть изменен в другом сеансе. + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); Возврат; КонецЕсли; @@ -474,7 +372,7 @@ КонецПроцедуры &НаКлиенте -Процедура ДобавитьЭЦПИзФайла(Команда = Неопределено) +Процедура ДобавитьЭЦПИзФайла(Команда) Если НЕ ПроверитьДействиеРазрешено() Тогда Возврат; @@ -492,7 +390,7 @@ КонецПроцедуры &НаКлиенте -Процедура Зашифровать(Команда = Неопределено) +Процедура Зашифровать(Команда) Если НЕ ПроверитьДействиеРазрешено() Тогда Возврат; @@ -509,7 +407,8 @@ Если ДанныеФайла.ФайлРедактируется ИЛИ ДанныеФайла.Зашифрован Тогда - ОповеститьОбИзменении(ТекущиеДанные.Ссылка); // файл может быть изменен в другом сеансе + // Файл может быть изменен в другом сеансе. + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); Возврат; КонецЕсли; @@ -520,7 +419,7 @@ КонецПроцедуры &НаКлиенте -Процедура Расшифровать(Команда = Неопределено) +Процедура Расшифровать(Команда) Если НЕ ПроверитьДействиеРазрешено() Тогда Возврат; @@ -535,7 +434,8 @@ ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если НЕ ДанныеФайла.Зашифрован Тогда - ОповеститьОбИзменении(ТекущиеДанные.Ссылка); // файл может быть изменен в другом сеансе + // Файл может быть изменен в другом сеансе. + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); Возврат; КонецЕсли; @@ -546,10 +446,128 @@ КонецПроцедуры /////////////////////////////////////////////////////////////////////////////////// -// Служебные функции +// Обработчики команд для поддержки совместной работы с файлами &НаКлиенте -Функция ПроверитьДействиеРазрешено(ТекущееДействие = "") +Процедура Редактировать(Команда) + + Если НЕ ПроверитьДействиеРазрешено() Тогда + Возврат; + КонецЕсли; + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + + Если (ТекущиеДанные.ФайлРедактируется И НЕ ТекущиеДанные.ФайлРедактируетТекущийПользователь) + ИЛИ ТекущиеДанные.Зашифрован + ИЛИ ТекущиеДанные.ПодписанЭЦП Тогда + Возврат; + КонецЕсли; + + ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + + Если ( ДанныеФайла.ФайлРедактируется + И НЕ ДанныеФайла.ФайлРедактируетТекущийПользователь) + ИЛИ ДанныеФайла.Зашифрован + ИЛИ ДанныеФайла.ПодписанЭЦП Тогда + // Файл может быть изменен в другом сеансе. + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); + Возврат; + КонецЕсли; + + ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, Истина); + + Если НЕ ТекущиеДанные.ФайлРедактируется Тогда + ПрисоединенныеФайлы.ЗанятьФайлДляРедактированияСервер(ТекущиеДанные.Ссылка); + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); + УстановитьДоступностьКнопок(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакончитьРедактирование(Команда) + + Если НЕ ПроверитьДействиеРазрешено() Тогда + Возврат; + КонецЕсли; + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + + Если НЕ ТекущиеДанные.ФайлРедактируется + ИЛИ НЕ ТекущиеДанные.ФайлРедактируетТекущийПользователь Тогда + Возврат; + КонецЕсли; + + ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, , Ложь); + + Если НЕ ДанныеФайла.ФайлРедактируется + ИЛИ НЕ ДанныеФайла.ФайлРедактируетТекущийПользователь Тогда + Возврат; + КонецЕсли; + + ИнформацияОФайле = Новый Структура; + + Если ПрисоединенныеФайлыКлиент.ПоместитьРедактируемыйФайлНаДискеВХранилище(ДанныеФайла, ИнформацияОФайле, УникальныйИдентификатор) Тогда + + ПрисоединенныеФайлы.ПоместитьФайлВХранилищеИОсвободить(ТекущиеДанные.Ссылка, ИнформацияОФайле); + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); + УстановитьДоступностьКнопок(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Освободить(Команда) + + Если НЕ ПроверитьДействиеРазрешено() Тогда + Возврат; + КонецЕсли; + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + + Если НЕ ТекущиеДанные.ФайлРедактируется + ИЛИ НЕ ТекущиеДанные.ФайлРедактируетТекущийПользователь Тогда + Возврат; + КонецЕсли; + + ПрисоединенныеФайлы.ОсвободитьФайл(ТекущиеДанные.Ссылка); + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); + УстановитьДоступностьКнопок(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ОткрытьФайл() + + Если НЕ ПроверитьДействиеРазрешено() Тогда + Возврат; + КонецЕсли; + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + + Если ТекущиеДанные.Зашифрован Тогда + Возврат; + КонецЕсли; + + ФайлРедактируется = ТекущиеДанные.ФайлРедактируется И ТекущиеДанные.ФайлРедактируетТекущийПользователь; + + ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + + Если ДанныеФайла.Зашифрован Тогда + // Файл может быть изменен в другом сеансе. + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); + Возврат; + КонецЕсли; + + ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, ФайлРедактируется); + +КонецПроцедуры + +&НаКлиенте +Функция ПроверитьДействиеРазрешено(Знач ТекущееДействие = "") Если Элементы.Список.ТекущиеДанные = Неопределено Тогда Возврат Ложь; @@ -557,16 +575,18 @@ ТекущиеДанные = Элементы.Список.ТекущиеДанные; - Если ТекущееДействие = "ПометкаУдаления" и ТекущиеДанные.ФайлРедактируется Тогда - ТекстПредупреждения = НСтр("ru = 'Действие недоступно, так как файл занят для редактирования'"); - Если не ТекущиеДанные.ФайлРедактируетТекущийПользователь Тогда - ТекстПредупреждения = ТекстПредупреждения + " " - + НСтр("ru = 'другим пользователем'"); + Если ТекущееДействие = "ПометкаУдаления" И ТекущиеДанные.ФайлРедактируется Тогда + + Если НЕ ТекущиеДанные.ФайлРедактируетТекущийПользователь Тогда + ТекстПредупреждения = НСтр("ru = 'Действие недоступно, так как файл занят для редактирования.'"); + Иначе + ТекстПредупреждения = НСтр("ru = 'Действие недоступно, так как файл занят для редактирования + |другим пользователем.'"); КонецЕсли; - ТекстПредупреждения = ТекстПредупреждения + "."; + Предупреждение(ТекстПредупреждения); Возврат Ложь; - КонецЕсли; + КонецЕсли; Если ТипЗнч(Элементы.Список.ТекущаяСтрока) = ТипСправочникаСФайлами Тогда Возврат Истина; @@ -575,33 +595,37 @@ Возврат Ложь; КонецЕсли; - Если НЕ Элементы.ФормаСтандартнаяКомандаСкопировать.Видимость - ИЛИ НЕ Элементы.ФормаСтандартнаяКомандаСкопировать.Доступность Тогда + Если НЕ Элементы.ФормаСкопировать.Видимость + ИЛИ НЕ Элементы.ФормаСкопировать.Доступность Тогда Возврат Ложь; КонецЕсли; Возврат Истина; + КонецФункции &НаСервере -Процедура УстановитьКнопкиДобавленияНевидимыми() +Процедура СкрытьКнопкиДобавления() - Элементы.ФормаДобавитьФайлы.Доступность = Ложь; - Элементы.ФормаДобавитьФайлы.Видимость = Ложь; + Элементы.ФормаСоздать.Доступность = Ложь; + Элементы.ФормаСоздать.Видимость = Ложь; - Элементы.ФормаСтандартнаяКомандаСкопировать.Доступность = Ложь; - Элементы.ФормаСтандартнаяКомандаСкопировать.Видимость = Ложь; + Элементы.ФормаСкопировать.Доступность = Ложь; + Элементы.ФормаСкопировать.Видимость = Ложь; КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Процедура УстановитьКнопкиИзмененияНевидимыми(Элементы) +&НаСервере +Процедура СкрытьКнопкиИзменения() ИменаКоманд = ПолучитьИменаКомандИзмененияОбъектов(); - Для Каждого ЭлементФормы ИЗ Элементы Цикл + + Для каждого ЭлементФормы Из Элементы Цикл + Если ТипЗнч(ЭлементФормы) <> Тип("КнопкаФормы") Тогда Продолжить; КонецЕсли; + Если ИменаКоманд.Найти(ЭлементФормы.ИмяКоманды) <> Неопределено Тогда ЭлементФормы.Видимость = Ложь; КонецЕсли; @@ -618,22 +642,27 @@ Если Элементы.Список.ТекущиеДанные = Неопределено Тогда Возврат; + ИначеЕсли ТипЗнч(Элементы.Список.ТекущаяСтрока) <> ТипСправочникаСФайлами Тогда ИменаКоманд = Новый Массив; Иначе ТекущиеДанные = Элементы.Список.ТекущиеДанные; - ИменаКоманд = ПолучитьДоступныеКоманды(ТекущиеДанные.ФайлРедактируется, - ТекущиеДанные.ФайлРедактируетТекущийПользователь, - ТекущиеДанные.ПодписанЭЦП, - ТекущиеДанные.Зашифрован); + ИменаКоманд = ПолучитьДоступныеКоманды( + ТекущиеДанные.ФайлРедактируется, + ТекущиеДанные.ФайлРедактируетТекущийПользователь, + ТекущиеДанные.ПодписанЭЦП, + ТекущиеДанные.Зашифрован); КонецЕсли; - Для Каждого ИмяЭлементаФормы ИЗ ИменаЭлементовКнопокФормы Цикл + Для каждого ИмяЭлементаФормы Из ИменаЭлементовКнопокФормы Цикл + ЭлементФормы = Элементы.Найти(ИмяЭлементаФормы); + Если ИменаКоманд.Найти(ЭлементФормы.ИмяКоманды) <> Неопределено Тогда Если НЕ ЭлементФормы.Доступность Тогда ЭлементФормы.Доступность = Истина; КонецЕсли; + ИначеЕсли ЭлементФормы.Доступность Тогда ЭлементФормы.Доступность = Ложь; КонецЕсли; @@ -642,7 +671,7 @@ КонецПроцедуры &НаСервереБезКонтекста -Процедура УстановитьЗначениеПометкиУдаления(ПрисоединенныйФайл, ПометкаУдаления) +Процедура УстановитьЗначениеПометкиУдаления(Знач ПрисоединенныйФайл, Знач ПометкаУдаления) ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); ПрисоединенныйФайлОбъект.ПометкаУдаления = ПометкаУдаления; @@ -651,153 +680,52 @@ КонецПроцедуры &НаСервере -Процедура УстановитьУсловноеОформление() +Процедура НастроитьДинамическийСписок(ИмяСправочникаХранилищаФайлов) - ЭлементУО = Список.УсловноеОформление.Элементы.Добавить(); + ИмяСправочникаХранилищаФайлов = Параметры.ВладелецФайла.Метаданные().Имя + "ПрисоединенныеФайлы"; - ДобавитьЭлементОтбораДанных(ЭлементУО, "ФайлРедактируется", Истина); - ДобавитьЭлементОтбораДанных(ЭлементУО, "ФайлРедактируетТекущийПользователь", Истина); + ТекстЗапроса = + "ВЫБРАТЬ + | Файлы.Ссылка, + | Файлы.ПометкаУдаления, + | ВЫБОР + | КОГДА Файлы.ПометкаУдаления = ИСТИНА + | ТОГДА Файлы.ИндексКартинки + 1 + | ИНАЧЕ Файлы.ИндексКартинки + | КОНЕЦ КАК ИндексКартинки, + | Файлы.Наименование, + | Файлы.Описание, + | Файлы.ДатаСоздания, + | ДОБАВИТЬКДАТЕ(Файлы.ДатаМодификацииУниверсальная, СЕКУНДА, &СекундДоМестногоВремени) КАК ДатаИзменения, + | Файлы.Автор, + | Файлы.Размер КАК Размер, + | Файлы.ПодписанЭЦП, + | Файлы.Зашифрован, + | ВЫБОР + | КОГДА Файлы.Редактирует = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК ФайлРедактируется, + | ВЫБОР + | КОГДА Файлы.Редактирует = &ТекущийПользователь + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ФайлРедактируетТекущийПользователь + |ИЗ + | &ИмяСправочника КАК Файлы + |ГДЕ + | Файлы.ВладелецФайла = &ВладелецФайла"; - ЭлементЦветаОформления = ЭлементУО.Оформление.Элементы.Найти("TextColor"); - ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ФайлЗанятыйТекущимПользователем.Значение; - ЭлементЦветаОформления.Использование = Истина; + Список.ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочникаХранилищаФайлов); - ЭлементУО = Список.УсловноеОформление.Элементы.Добавить(); - - ДобавитьЭлементОтбораДанных(ЭлементУО, "ФайлРедактируется", Истина); - ДобавитьЭлементОтбораДанных(ЭлементУО, "ФайлРедактируетТекущийПользователь", Ложь); - - ЭлементЦветаОформления = ЭлементУО.Оформление.Элементы.Найти("TextColor"); - ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ФайлЗанятыйДругимПользователем.Значение; - ЭлементЦветаОформления.Использование = Истина; - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура ДобавитьЭлементОтбораДанных(ЭлементУсловногоОФормления, Поле, ПравоеЗначение) - - ЭлементОтбораДанных = ЭлементУсловногоОФормления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Поле); - ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбораДанных.ПравоеЗначение = ПравоеЗначение; - ЭлементОтбораДанных.Использование = Истина; - -КонецПроцедуры - -&НаСервере -Процедура СоздатьЭлементыФормы() - - ЭлементТаблица = Элементы.Список; - - ЭлементТаблица.КартинкаСтрок = БиблиотекаКартинок.КоллекцияПиктограммФайлов; - ЭлементТаблица.ПутьКДаннымКартинкиСтроки = "Список.ИндексКартинки"; - ЭлементТаблица.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; - - ДобавитьПолеКартинкиВСписок(ЭлементТаблица, "ПодписанЭЦП", БиблиотекаКартинок.ПодписанЭЦП, БиблиотекаКартинок.ПодписанЭЦП); - ДобавитьПолеКартинкиВСписок(ЭлементТаблица, "Зашифрован", БиблиотекаКартинок.Зашифрован, БиблиотекаКартинок.Зашифрован); - - ДобавитьПолеВСписок(ЭлементТаблица, "Ссылка",,,НСтр("ru = 'Наименование'")); - ДобавитьПолеВСписок(ЭлементТаблица, "Описание", 1); - ДобавитьПолеВСписок(ЭлементТаблица, "ДатаСоздания"); - ДобавитьПолеВСписок(ЭлементТаблица, "Автор"); - ДобавитьПолеВСписок(ЭлементТаблица, "Размер", , , НСтр("ru = 'Размер (байт)'")); - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьПолеВСписок(Контейнер, ИмяРеквизита, Высота = 0, Видимость = Истина, Заголовок = "") - - Элемент = Элементы.Добавить("Список" + ИмяРеквизита, Тип("ПолеФормы"), Контейнер); - Элемент.ПутьКДанным = "Список." + ИмяРеквизита; - Элемент.Высота = Высота; - Элемент.Видимость = Видимость; - Элемент.Заголовок = Заголовок; - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьПолеКартинкиВСписок(Контейнер, ИмяРеквизита, КартинкаЗначений, КартинкаШапки = Неопределено) - - Элемент = Элементы.Добавить("Список" + ИмяРеквизита, Тип("ПолеФормы"), Контейнер); - Элемент.Вид = ВидПоляФормы.ПолеКартинки; - Элемент.ПутьКДанным = "Список."+ИмяРеквизита; - Элемент.КартинкаЗначений = КартинкаЗначений; - Если КартинкаШапки = Неопределено Тогда - Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; - Иначе - Элемент.КартинкаШапки = КартинкаШапки; - КонецЕсли; - Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; - -КонецПроцедуры - -&НаСервере -Процедура УстановитьСвойстваДинамическогоСписка(ИмяСправочникаХранилищаФайлов) - - ИмяСправочникаХранилищаФайлов = СтрЗаменить("[ИмяОбъекта]ПрисоединенныеФайлы", "[ИмяОбъекта]", - СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ВладелецФайла.Метаданные().ПолноеИмя(), ".")[1]); - - ТекстЗапроса = ШаблонЗапроса(); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяСправочника]", ИмяСправочникаХранилищаФайлов); - - Список.ТекстЗапроса = ТекстЗапроса; - Список.ДинамическоеСчитываниеДанных = Истина; - - Список.Параметры.УстановитьЗначениеПараметра("ВладелецФайла", ВладелецФайла); - Список.Параметры.УстановитьЗначениеПараметра("ТекущийПользователь", ОбщегоНазначения.ТекущийПользователь()); + Список.Параметры.УстановитьЗначениеПараметра("ВладелецФайла", Параметры.ВладелецФайла); + Список.Параметры.УстановитьЗначениеПараметра("ТекущийПользователь", Пользователи.ТекущийПользователь()); + Список.Параметры.УстановитьЗначениеПараметра("ВладелецФайла", Параметры.ВладелецФайла); + Список.Параметры.УстановитьЗначениеПараметра("СекундДоМестногоВремени", 0); Список.ОсновнаяТаблица = "Справочник." + ИмяСправочникаХранилищаФайлов; - Список.УстановитьОбязательноеИспользование("Ссылка", Истина); - Список.УстановитьОбязательноеИспользование("ПометкаУдаления", Истина); - Список.УстановитьОбязательноеИспользование("Зашифрован", Истина); - Список.УстановитьОбязательноеИспользование("ФайлРедактируется", Истина); - Список.УстановитьОбязательноеИспользование("ФайлРедактируетТекущийПользователь", Истина); - Список.УстановитьОбязательноеИспользование("ПодписанЭЦП", Истина); - Список.УстановитьОбязательноеИспользование("Зашифрован", Истина); - Список.УстановитьОбязательноеИспользование("Редактирует", Истина); - КонецПроцедуры -&НаСервереБезКонтекста -Функция ШаблонЗапроса() - - ШаблонЗапроса = "ВЫБРАТЬ - | Файлы.Ссылка, - | Файлы.ПометкаУдаления, - | Файлы.Наименование, - | Файлы.Расширение, - | Файлы.Автор, - | Файлы.ДатаСоздания, - | Файлы.ДатаМодификацииУниверсальная, - | ВЫБОР - | КОГДА Файлы.ПометкаУдаления = ИСТИНА - | ТОГДА Файлы.ИндексКартинки + 1 - | ИНАЧЕ Файлы.ИндексКартинки - | КОНЕЦ КАК ИндексКартинки, - | Файлы.Описание, - | Файлы.ПодписанЭЦП, - | Файлы.Зашифрован, - | Файлы.Размер КАК Размер, - | Файлы.ВладелецФайла, - | ВЫБОР - | КОГДА Файлы.Редактирует = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) - | ТОГДА Ложь - | ИНАЧЕ Истина - | КОНЕЦ КАК ФайлРедактируется, - | ВЫБОР - | КОГДА Файлы.Редактирует = &ТекущийПользователь - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ФайлРедактируетТекущийПользователь - |ИЗ - | Справочник.[ИмяСправочника] КАК Файлы - |ГДЕ - | Файлы.ВладелецФайла = &ВладелецФайла"; - - Возврат ШаблонЗапроса; - -КонецФункции - &НаКлиентеНаСервереБезКонтекста Функция ПолучитьИменаКомандФормы() @@ -815,7 +743,7 @@ ИменаКоманд = Новый Массив; - // зависимые от состояния объектов + // Команды зависимые от состояния объектов. ИменаКоманд.Добавить("ЗакончитьРедактирование"); ИменаКоманд.Добавить("Освободить"); ИменаКоманд.Добавить("Редактировать"); @@ -829,10 +757,10 @@ ИменаКоманд.Добавить("ОбновитьИзФайлаНаДиске"); - // независимые от состояния объектов - ИменаКоманд.Добавить("ДобавитьФайлы"); - ИменаКоманд.Добавить("СтандартнаяКомандаПометкаУдаления"); - ИменаКоманд.Добавить("СтандартнаяКомандаСкопировать"); + // Команды независимые от состояния объектов. + ИменаКоманд.Добавить("Создать"); + ИменаКоманд.Добавить("УстановитьПометкуУдаления"); + ИменаКоманд.Добавить("Скопировать"); Возврат ИменаКоманд; @@ -843,7 +771,7 @@ ИменаКоманд = Новый Массив; - // простые команды - доступны любому пользователю читающему файлы + // Простые команды доступные любому пользователю, читающему файлы. ИменаКоманд.Добавить("ОткрытьКаталогФайла"); ИменаКоманд.Добавить("ОткрытьФайлДляПросмотра"); ИменаКоманд.Добавить("СохранитьКак"); @@ -854,9 +782,9 @@ &НаКлиентеНаСервереБезКонтекста Функция ПолучитьДоступныеКоманды(ФайлРедактируется, - ФайлРедактируетТекущийПользователь, - ФайлПодписан, - ФайлЗашифрован) + ФайлРедактируетТекущийПользователь, + ФайлПодписан, + ФайлЗашифрован) ИменаКоманд = ПолучитьИменаКомандФормы(); @@ -929,6 +857,3 @@ Массив.Удалить(Позиция); КонецПроцедуры - - - diff --git a/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form b/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form index e40b469da..2c67e4907 100644 --- a/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form +++ b/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form @@ -1006,7 +1006,7 @@ <locationInCommandBar>InAdditionalSubmenu</locationInCommandBar> </items> <items xsi:type="form:Button"> - <name>ФормаСтандартныеПометитьНаУдалениеСнятьПометку</name> + <name>ФормаСтандартныеУстановитьПометкуУдаления</name> <id>5</id> <visible>true</visible> <enabled>true</enabled> @@ -1014,7 +1014,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ФормаСтандартныеПометитьНаУдалениеСнятьПометкуРасширеннаяПодсказка</name> + <name>ФормаСтандартныеУстановитьПометкуУдаленияРасширеннаяПодсказка</name> <id>61</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1023,7 +1023,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Command.СтандартныеПометитьНаУдалениеСнятьПометку</commandName> + <commandName>Form.Command.СтандартныеУстановитьПометкуУдаления</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> @@ -1472,7 +1472,7 @@ <name>ДатаМодификации</name> <title> <key>ru</key> - <value>Дата модификации</value> + <value>Дата изменения</value> 1 @@ -1972,7 +1972,7 @@ Auto - СтандартныеПометитьНаУдалениеСнятьПометку + СтандартныеУстановитьПометкуУдаления <key>ru</key> <value>Пометить на удаление / Снять пометку</value> @@ -1990,7 +1990,7 @@ </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>СтандартныеПометитьНаУдалениеСнятьПометку</name> + <name>СтандартныеУстановитьПометкуУдаления</name> </handler> </action> <currentRowUse>Auto</currentRowUse> @@ -2436,7 +2436,7 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> - <name>ПрисоединенныйФайл</name> + <name>Ключ</name> <valueType> <types>AnyRef</types> </valueType> diff --git a/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl b/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl index ae15bb476..8cf1f7944 100644 --- a/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl +++ b/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl @@ -1,10 +1,10 @@ -/////////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы и элементов формы +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -17,46 +17,64 @@ КонецЦикла; ОписаниеКолонокТаблицыПодписей = Новый ФиксированныйМассив(КолонкиМассив); - ТекущийПользователь = ОбщегоНазначения.ТекущийПользователь(); + ТекущийПользователь = Пользователи.ТекущийПользователь(); ПользовательПустаяСссылка = Справочники.Пользователи.ПустаяСсылка(); Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда - ЗначениеКопирования = Параметры.ЗначениеКопирования; - КопируемыйОбъект = ЗначениеКопирования.ПолучитьОбъект(); - ИмяСправочника = ЗначениеКопирования.Метаданные().Имя; - ОбъектЗначение = Справочники[ИмяСправочника].СоздатьЭлемент(); - ЗаполнитьЗначенияСвойств(ОбъектЗначение, КопируемыйОбъект, - "ДатаМодификацииУниверсальная, ДатаСоздания, Зашифрован, Описание, ПодписанЭЦП, Размер, Расширение, ТекстХранилище, ВладелецФайла, ПометкаУдаления", - "ВерсияДанных, ДополнительныеСвойства, Код, ОбменДанными, Предопределенный, Родитель, Ссылка, ЭтоГруппа, Наименование, Автор, Изменил, ИндексКартинки, ПутьКФайлу, Редактирует"); + КопируемыйОбъект = Параметры.ЗначениеКопирования.ПолучитьОбъект(); + + ОбъектЗначение = Справочники[КопируемыйОбъект.Метаданные().Имя].СоздатьЭлемент(); + ЗаполнитьЗначенияСвойств( + ОбъектЗначение, + КопируемыйОбъект, + "ДатаМодификацииУниверсальная, + |ДатаСоздания, + |Зашифрован, + |Описание, + |ПодписанЭЦП, + |Размер, + |Расширение, + |ТекстХранилище, + |ВладелецФайла, + |ПометкаУдаления"); + Для Каждого ЭлементЭЦП Из КопируемыйОбъект.ЭлектронныеЦифровыеПодписи Цикл НоваяСтрока = ОбъектЗначение.ЭлектронныеЦифровыеПодписи.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭлементЭЦП); КонецЦикла; + Для Каждого ЭлементШифрования Из КопируемыйОбъект.СертификатыШифрования Цикл НоваяСтрока = ОбъектЗначение.СертификатыШифрования.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭлементШифрования); КонецЦикла; - // - ОбъектЗначение.Автор = ОбщегоНазначения.ТекущийПользователь(); + + ОбъектЗначение.Автор = Пользователи.ТекущийПользователь(); Иначе - ОбъектЗначение = Параметры.ПрисоединенныйФайл.ПолучитьОбъект(); + Если Параметры.Свойство("ПрисоединенныйФайл") Тогда + ОбъектЗначение = Параметры.ПрисоединенныйФайл.ПолучитьОбъект(); + Иначе + ОбъектЗначение = Параметры.Ключ.ПолучитьОбъект(); + КонецЕсли; КонецЕсли; ИмяСправочника = ОбъектЗначение.Метаданные().Имя; - СоздатьРеквизитыФормы(); - ЗначениеВРеквизитФормы(ОбъектЗначение, "Объект"); + НастроитьОбъектФормы(ОбъектЗначение); СоздатьЭлементыФормы(); ЗаполнитьСписокПодписей(); ЗаполнитьСписокШифрования(); - Если ТолькоПросмотр или НЕ ПравоДоступа("Изменение", ЭтаФорма.Объект.ВладелецФайла.Метаданные()) Тогда + Если ТолькоПросмотр + ИЛИ НЕ ПравоДоступа("Изменение", ЭтаФорма.Объект.ВладелецФайла.Метаданные()) Тогда + УстановитьКнопкиИзмененияНевидимыми(Элементы); КонецЕсли; - Если Не ТолькоПросмотр и НЕ ЭтаФорма.Объект.Ссылка.Пустая() Тогда - ЗаблокироватьДанныеДляРедактирования(ЭтаФорма.Объект.Ссылка,, УникальныйИдентификатор); + Если НЕ ТолькоПросмотр + И НЕ ЭтаФорма.Объект.Ссылка.Пустая() Тогда + + ЗаблокироватьДанныеДляРедактирования(ЭтаФорма.Объект.Ссылка, , УникальныйИдентификатор); КонецЕсли; УстановитьДоступностьКнопок(ЭтаФорма, Элементы, ТекущийПользователь); @@ -81,53 +99,34 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаПодписей + +&НаКлиенте +Процедура ТаблицаПодписейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ЭлектроннаяЦифроваяПодписьКлиент.ОткрытьПодпись(Элементы.ТаблицаПодписей.ТекущиеДанные); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СертификатыШифрования + +&НаКлиенте +Процедура СертификатыШифрованияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ОткрытьСертификатШифрования(Неопределено); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + /////////////////////////////////////////////////////////////////////////////////// // Обработчики команд файлов -&НаКлиенте -Процедура ОткрытьФайлДляПросмотра() - - Если ЭтоНовый() - ИЛИ ЭтаФорма.Объект.Зашифрован Тогда - Возврат; - КонецЕсли; - - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); - - ФайлРедактируется = ЗначениеЗаполнено(ЭтаФорма.Объект.Редактирует) И ЭтаФорма.Объект.Редактирует = ТекущийПользователь; - - ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, ФайлРедактируется); - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьКаталогФайла() - - Если ЭтоНовый() - ИЛИ ЭтаФорма.Объект.Зашифрован Тогда - Возврат; - КонецЕсли; - - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); - - ПрисоединенныеФайлыКлиент.ОткрытьКаталогСФайлом(ДанныеФайла); - -КонецПроцедуры - -&НаКлиенте -Процедура СохранитьКак() - - Если ЭтоНовый() - ИЛИ ЭтаФорма.Объект.Зашифрован Тогда - Возврат; - КонецЕсли; - - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); - - ПрисоединенныеФайлыКлиент.СохранитьФайлКак(ДанныеФайла); - -КонецПроцедуры - &НаКлиенте Процедура ОбновитьИзФайлаНаДиске(Команда) @@ -144,7 +143,9 @@ ИнформацияОФайле = Новый Структура; - Если ПрисоединенныеФайлыКлиент.ВыбратьФайлНаДискеИПоместитьВХранилище(ДанныеФайла, ИнформацияОФайле, УникальныйИдентификатор) Тогда + Если ПрисоединенныеФайлыКлиент.ВыбратьФайлНаДискеИПоместитьВХранилище( + ДанныеФайла, ИнформацияОФайле, УникальныйИдентификатор) Тогда + ОбновитьДвоичныеДанныеФайлаНаСервере(ИнформацияОФайле); ОповеститьОбИзменении(ЭтаФорма.Объект.Ссылка); Оповестить("Запись_ПрисоединенныйФайл", Новый Структура, ЭтаФорма.Объект.Ссылка); @@ -152,15 +153,6 @@ КонецПроцедуры -&НаСервере -Процедура ОбновитьДвоичныеДанныеФайлаНаСервере(ИнформацияОФайле) - - ЗаписываемыйОбъект = РеквизитФормыВЗначение("Объект"); - ПрисоединенныеФайлы.ОбновитьПрисоединенныйФайл(ЗаписываемыйОбъект, ИнформацияОФайле); - ЗначениеВРеквизитФормы(ЗаписываемыйОбъект, "Объект"); - -КонецПроцедуры - &НаКлиенте Процедура СтандартнаяЗаписатьИЗакрыть(Команда) @@ -178,7 +170,7 @@ КонецПроцедуры &НаКлиенте -Процедура СтандартныеПометитьНаУдалениеСнятьПометку(Команда) +Процедура СтандартныеУстановитьПометкуУдаления(Команда) Если ЭтоНовый() Тогда Возврат; @@ -186,18 +178,29 @@ Если Модифицированность Тогда Если ЭтаФорма.Объект.ПометкаУдаления Тогда - ТекстВопроса = НСтр("ru = 'Для снятия отметки удаления необходимо записать внесенные Вами изменения. Записать данные?'"); + ТекстВопроса = НСтр( + "ru = 'Для выполнения действия требуется записать изменения файла. + |Записать изменения и снять пометку на удаление с файла + |""%1""?'"); Иначе - ТекстВопроса = НСтр("ru = 'Для установки отметки удаления необходимо записать внесенные Вами изменения. Записать данные?'"); + ТекстВопроса = НСтр( + "ru = 'Для выполнения действия требуется записать изменения файла. + |Записать изменения и пометить на удаление файл + |""%1""?'"); КонецЕсли; Иначе Если ЭтаФорма.Объект.ПометкаУдаления Тогда - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Снять с ""%1"" пометку на удаление?'"), ЭтаФорма.Объект.Ссылка); + ТекстВопроса = НСтр("ru = 'Снять пометку на удаление с файла + |""%1""?'"); Иначе - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Пометить ""%1"" на удаление?'"), ЭтаФорма.Объект.Ссылка); + ТекстВопроса = НСтр("ru = 'Пометить на удаление файл + |""%1""?'"); КонецЕсли; КонецЕсли; + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстВопроса, ЭтаФорма.Объект.Ссылка); + Результат = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); Если Результат = КодВозвратаДиалога.Да Тогда @@ -254,11 +257,14 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( + ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); ДанныеПодписи = Неопределено; - Если ПрисоединенныеФайлыКлиент.ВыбратьСертификатыЭЦПИСформироватьДанныеПодписи(ЭтаФорма.Объект.Ссылка, ДанныеФайла, ДанныеПодписи) Тогда + Если ПрисоединенныеФайлыКлиент.ВыбратьСертификатыЭЦПИСформироватьДанныеПодписи( + ЭтаФорма.Объект.Ссылка, ДанныеФайла, ДанныеПодписи) Тогда + ЗанестиИнформациюОднойПодписи(ДанныеПодписи); ОповеститьОбИзменении(ЭтаФорма.Объект.Ссылка); Оповестить("Запись_ПрисоединенныйФайл", Новый Структура, ЭтаФорма.Объект.Ссылка); @@ -271,7 +277,8 @@ #Если ВебКлиент Тогда Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда - Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, операция прервана.'")); + Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, + |операция прервана.'")); Возврат; КонецЕсли; #КонецЕсли @@ -285,17 +292,22 @@ ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); Если ПодключитьРасширениеРаботыСФайлами() Тогда - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( + ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); - МассивПодписей = ПрисоединенныеФайлыКлиент.ПолучитьМассивПодписей(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + МассивПодписей = ПрисоединенныеФайлыКлиент.ПолучитьМассивПодписей( + ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); Если МассивПодписей.Количество() > 0 Тогда ЗанестиИнформациюОПодписях(МассивПодписей); - ПрисоединенныеФайлыКлиент.ОповеститьОДобавленииПодписиИзФайла(ЭтаФорма.Объект.Ссылка, МассивПодписей.Количество()); + + ПрисоединенныеФайлыКлиент.ОповеститьОДобавленииПодписиИзФайла( + ЭтаФорма.Объект.Ссылка, МассивПодписей.Количество()); КонецЕсли; Иначе #Если ВебКлиент Тогда - Предупреждение(НСтр("ru = 'Для выполнения данной операции вам нужно установить расширение работы с файлами.'")); + Предупреждение(НСтр("ru = 'Для выполнения данной операции необходимо + |установить расширение работы с файлами.'")); #КонецЕсли КонецЕсли; @@ -310,9 +322,13 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( + ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); - ПрисоединенныеФайлыКлиент.СохранитьВместеСЭЦП(ЭтаФорма.Объект.Ссылка, ДанныеФайла, УникальныйИдентификатор); + ПрисоединенныеФайлыКлиент.СохранитьВместеСЭЦП( + ЭтаФорма.Объект.Ссылка, + ДанныеФайла, + УникальныйИдентификатор); КонецПроцедуры @@ -325,18 +341,27 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( + ЭтаФорма.Объект.Ссылка, + УникальныйИдентификатор); ЗашифрованныеДанные = Неопределено; МассивОтпечатков = Новый Массив; - Если НЕ ПрисоединенныеФайлыКлиент.ПолучитьЗашифрованныеДанные(ЭтаФорма.Объект.Ссылка, ДанныеФайла, УникальныйИдентификатор, ЗашифрованныеДанные, МассивОтпечатков) Тогда + Если НЕ ПрисоединенныеФайлыКлиент.ПолучитьЗашифрованныеДанные( + ЭтаФорма.Объект.Ссылка, + ДанныеФайла, + УникальныйИдентификатор, + ЗашифрованныеДанные, + МассивОтпечатков) Тогда + Возврат; КонецЕсли; ЗашифроватьСервер(ЗашифрованныеДанные, МассивОтпечатков); - ПрисоединенныеФайлыКлиент.ОповеститьОбИзмененииИУдалитьФайлВРабочемКаталоге(ЭтаФорма.Объект.Ссылка, ДанныеФайла); + ПрисоединенныеФайлыКлиент.ОповеститьОбИзмененииИУдалитьФайлВРабочемКаталоге( + ЭтаФорма.Объект.Ссылка, ДанныеФайла); ЗаполнитьСписокШифрования(); ОповеститьОбИзменении(ЭтаФорма.Объект.Ссылка); @@ -355,33 +380,36 @@ ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); РасшифрованныеДанные = Неопределено; - - Если НЕ ПрисоединенныеФайлыКлиент.ПолучитьРасшифрованныеДанные(ЭтаФорма.Объект.Ссылка, ДанныеФайла, РасшифрованныеДанные, УникальныйИдентификатор) Тогда + Если НЕ ПрисоединенныеФайлыКлиент.ПолучитьРасшифрованныеДанные( + ЭтаФорма.Объект.Ссылка, + ДанныеФайла, + РасшифрованныеДанные, + УникальныйИдентификатор) Тогда Возврат; КонецЕсли; РасшифроватьСервер(РасшифрованныеДанные); - ПрисоединенныеФайлыКлиент.ОповеститьОРасшифровкеФайла(ЭтаФорма.Объект.Ссылка, ДанныеФайла); + ПрисоединенныеФайлыКлиент.ОповеститьОРасшифровкеФайла(ЭтаФорма.Объект.Ссылка); ЗаполнитьСписокШифрования(); КонецПроцедуры -&НаКлиенте -Процедура ТаблицаПодписейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ЭлектроннаяЦифроваяПодписьКлиент.ОткрытьПодпись(Элементы.ТаблицаПодписей.ТекущиеДанные); -КонецПроцедуры - &НаКлиенте Процедура КомандаЭЦПСписокОткрытьПодпись(Команда) + ЭлектроннаяЦифроваяПодписьКлиент.ОткрытьПодпись(Элементы.ТаблицаПодписей.ТекущиеДанные); + КонецПроцедуры &НаКлиенте Процедура ПроверитьЭЦП(Команда) - Если ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьПерсональныеНастройкиРаботыСЭЦП().ВыполнятьПроверкуЭЦПНаСервере Тогда + ПерсональныеНастройкиРаботыСЭЦП = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьПерсональныеНастройкиРаботыСЭЦП(); + + Если ПерсональныеНастройкиРаботыСЭЦП.ВыполнятьПроверкуЭЦПНаСервере Тогда + ДанныеВыделенныхСтрок = Новый Массив; ИменаКолонок = ""; Для Каждого ИмяКолонки Из ОписаниеКолонокТаблицыПодписей Цикл @@ -406,9 +434,13 @@ КонецЦикла; Иначе МенеджерКриптографии = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМенеджерКриптографии(); - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка).СсылкаНаДвоичныеДанныеФайла); + + ДвоичныеДанные = ПолучитьИзВременногоХранилища( + ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка).СсылкаНаДвоичныеДанныеФайла); + Для Каждого Элемент Из Элементы.ТаблицаПодписей.ВыделенныеСтроки Цикл ДанныеСтроки = Элементы.ТаблицаПодписей.ДанныеСтроки(Элемент); + Если ДанныеСтроки.Объект <> Неопределено И (НЕ ДанныеСтроки.Объект.Пустая()) Тогда ПроверитьОднуПодпись(ДанныеСтроки, МенеджерКриптографии, ДвоичныеДанные); КонецЕсли; @@ -421,9 +453,10 @@ &НаКлиенте Процедура ПроверитьВсе(Команда) - ВыполнятьПроверкуЭЦПНаСервере = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьПерсональныеНастройкиРаботыСЭЦП().ВыполнятьПроверкуЭЦПНаСервере; + ПерсональныеНастройкиРаботыСЭЦП = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьПерсональныеНастройкиРаботыСЭЦП(); - Если ВыполнятьПроверкуЭЦПНаСервере Тогда + Если ПерсональныеНастройкиРаботыСЭЦП.ВыполнятьПроверкуЭЦПНаСервере Тогда + ДанныеСтрок = Новый Массив; ИменаКолонок = ""; Для Каждого ИмяКолонки Из ОписаниеКолонокТаблицыПодписей Цикл @@ -446,8 +479,11 @@ Индекс = Индекс + 1; КонецЦикла; Иначе - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка).СсылкаНаДвоичныеДанныеФайла); + ДвоичныеДанные = ПолучитьИзВременногоХранилища( + ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка).СсылкаНаДвоичныеДанныеФайла); + МенеджерКриптографии = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМенеджерКриптографии(); + Для Каждого Строка Из ТаблицаПодписей Цикл Если Строка.Объект <> Неопределено И (НЕ Строка.Объект.Пустая()) Тогда ПроверитьОднуПодпись(Строка, МенеджерКриптографии, ДвоичныеДанные); @@ -501,26 +537,23 @@ СтруктураСертификата = Неопределено; Если НЕ ПустаяСтрока(ТекущиеДанные.АдресСертификата) Тогда ДвоичныеДанныеСертификата = ПолучитьИзВременногоХранилища(ТекущиеДанные.АдресСертификата); + Сертификат = Новый СертификатКриптографии(ДвоичныеДанныеСертификата); СтруктураСертификата = ЭлектроннаяЦифроваяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата(Сертификат); Иначе СтруктураСертификата = ЭлектроннаяЦифроваяПодписьКлиент.ЗаполнитьСтруктуруСертификатаПоОтпечатку(Отпечаток); - КонецЕсли; + КонецЕсли; Если СтруктураСертификата <> Неопределено Тогда - ЭлектроннаяЦифроваяПодписьКлиент.ОткрытьСертификатСоСтруктурой(СтруктураСертификата, Отпечаток, ТекущиеДанные.АдресСертификата); + + ЭлектроннаяЦифроваяПодписьКлиент.ОткрытьСертификатСоСтруктурой( + СтруктураСертификата, Отпечаток, ТекущиеДанные.АдресСертификата); КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура СертификатыШифрованияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ОткрытьСертификатШифрования(Неопределено); -КонецПроцедуры - /////////////////////////////////////////////////////////////////////////////////// -// Обработчики команд для поддержки совместного изменения +// Обработчики команд для поддержки совместной работы с файлами &НаКлиенте Процедура Редактировать(Команда) @@ -531,11 +564,13 @@ Возврат; КонецЕсли; - Если ЗначениеЗаполнено(ЭтаФорма.Объект.Редактирует) И НЕ (ЭтаФорма.Объект.Редактирует = ТекущийПользователь) Тогда + Если ЗначениеЗаполнено(ЭтаФорма.Объект.Редактирует) + И ЭтаФорма.Объект.Редактирует <> ТекущийПользователь Тогда Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( + ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); Если ЗначениеЗаполнено(ЭтаФорма.Объект.Редактирует) Тогда ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, Истина); @@ -553,7 +588,7 @@ Если ЭтоНовый() ИЛИ НЕ ЗначениеЗаполнено(ЭтаФорма.Объект.Редактирует) - ИЛИ (ЗначениеЗаполнено(ЭтаФорма.Объект.Редактирует) И НЕ (ЭтаФорма.Объект.Редактирует = ТекущийПользователь)) Тогда + ИЛИ ЭтаФорма.Объект.Редактирует <> ТекущийПользователь Тогда Возврат; КонецЕсли; @@ -561,7 +596,11 @@ ИнформацияОФайле = Новый Структура; - Если ПрисоединенныеФайлыКлиент.ПоместитьРедактируемыйФайлНаДискеВХранилище(ДанныеФайла, ИнформацияОФайле, УникальныйИдентификатор) Тогда + Если ПрисоединенныеФайлыКлиент.ПоместитьРедактируемыйФайлНаДискеВХранилище( + ДанныеФайла, + ИнформацияОФайле, + УникальныйИдентификатор) Тогда + ПоместитьФайлВХранилищеИОсвободить(ИнформацияОФайле); ОповеститьОбИзменении(ЭтаФорма.Объект.Ссылка); Оповестить("Запись_ПрисоединенныйФайл", Новый Структура, ЭтаФорма.Объект.Ссылка); @@ -575,8 +614,8 @@ Процедура Освободить(Команда) Если ЭтоНовый() - ИЛИ НЕ ЗначениеЗаполнено(ЭтаФорма.Объект.Редактирует) - ИЛИ (ЗначениеЗаполнено(ЭтаФорма.Объект.Редактирует) И НЕ (ЭтаФорма.Объект.Редактирует = ТекущийПользователь)) Тогда + ИЛИ НЕ ЗначениеЗаполнено(ЭтаФорма.Объект.Редактирует) + ИЛИ ЭтаФорма.Объект.Редактирует <> ТекущийПользователь Тогда Возврат; КонецЕсли; @@ -586,17 +625,77 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////// -// Служебные функции +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ОткрытьФайлДляПросмотра() + + Если ЭтоНовый() + ИЛИ ЭтаФорма.Объект.Зашифрован Тогда + Возврат; + КонецЕсли; + + ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( + ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + + ФайлРедактируется = ЗначениеЗаполнено(ЭтаФорма.Объект.Редактирует) + И ЭтаФорма.Объект.Редактирует = ТекущийПользователь; + + ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, ФайлРедактируется); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьКаталогФайла() + + Если ЭтоНовый() + ИЛИ ЭтаФорма.Объект.Зашифрован Тогда + Возврат; + КонецЕсли; + + ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( + ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + + ПрисоединенныеФайлыКлиент.ОткрытьКаталогСФайлом(ДанныеФайла); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьКак() + + Если ЭтоНовый() + ИЛИ ЭтаФорма.Объект.Зашифрован Тогда + Возврат; + КонецЕсли; + + ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( + ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + + ПрисоединенныеФайлыКлиент.СохранитьФайлКак(ДанныеФайла); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьДвоичныеДанныеФайлаНаСервере(ИнформацияОФайле) + + ЗаписываемыйОбъект = РеквизитФормыВЗначение("Объект"); + ПрисоединенныеФайлы.ОбновитьПрисоединенныйФайл(ЗаписываемыйОбъект, ИнформацияОФайле); + ЗначениеВРеквизитФормы(ЗаписываемыйОбъект, "Объект"); + +КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Процедура УстановитьКнопкиИзмененияНевидимыми(Элементы) ИменаКоманд = ПолучитьИменаКомандИзмененияОбъекта(); - Для Каждого ЭлементФормы ИЗ Элементы Цикл + + Для каждого ЭлементФормы ИЗ Элементы Цикл + Если ТипЗнч(ЭлементФормы) <> Тип("КнопкаФормы") Тогда Продолжить; КонецЕсли; + Если ИменаКоманд.Найти(ЭлементФормы.ИмяКоманды) <> Неопределено Тогда ЭлементФормы.Видимость = Ложь; КонецЕсли; @@ -617,8 +716,10 @@ НоваяСтрока.Отпечаток = СтруктураСертификата.Отпечаток; ДвоичныеДанныеСертификата = СтруктураСертификата.Сертификат.Получить(); - Если ДвоичныеДанныеСертификата <> Неопределено Тогда - НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище(ДвоичныеДанныеСертификата, УникальныйИдентификатор); + Если ДвоичныеДанныеСертификата <> Неопределено Тогда + + НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище( + ДвоичныеДанныеСертификата, УникальныйИдентификатор); КонецЕсли; КонецЦикла; @@ -627,7 +728,11 @@ ТекстЗаголовка = НСтр("ru = 'Зашифрован для'"); Если СертификатыШифрования.Количество() <> 0 Тогда - ТекстЗаголовка = ТекстЗаголовка + " (" + Строка(СертификатыШифрования.Количество()) + ")"; + ТекстЗаголовка = + ТекстЗаголовка + + " (" + + Строка(СертификатыШифрования.Количество()) + + ")"; КонецЕсли; Элементы.ГруппаШифрование.Заголовок = ТекстЗаголовка; @@ -642,12 +747,15 @@ ДвоичныеДанныеПодписи = ПолучитьИзВременногоХранилища(ДанныеСтроки.АдресПодписи); Попытка - ЭлектроннаяЦифроваяПодписьКлиент.ПроверитьПодпись(МенеджерКриптографии, ДвоичныеДанныеФайла, ДвоичныеДанныеПодписи); + ЭлектроннаяЦифроваяПодписьКлиент.ПроверитьПодпись( + МенеджерКриптографии, + ДвоичныеДанныеФайла, + ДвоичныеДанныеПодписи); ДанныеСтроки.Статус = НСтр("ru = 'Верна'"); ДанныеСтроки.Неверна = Ложь; Исключение - ДанныеСтроки.Статус = НСтр("ru = 'Неверна. '"); + ДанныеСтроки.Статус = НСтр("ru = 'Неверна.'") + " "; Инфо = ИнформацияОбОшибке(); Если Инфо.Причина <> Неопределено Тогда ДанныеСтроки.Статус = ДанныеСтроки.Статус + Инфо.Причина.Описание; @@ -669,17 +777,20 @@ НоваяСтрока = ТаблицаПодписей.Добавить(); НоваяСтрока.КомуВыданСертификат = ЭлементЭЦП.КомуВыданСертификат; - НоваяСтрока.ДатаПодписи = ЭлементЭЦП.ДатаПодписи; - НоваяСтрока.Комментарий = ЭлементЭЦП.Комментарий; - НоваяСтрока.Объект = ЭтаФорма.Объект.Ссылка; - НоваяСтрока.Отпечаток = ЭлементЭЦП.Отпечаток; + НоваяСтрока.ДатаПодписи = ЭлементЭЦП.ДатаПодписи; + НоваяСтрока.Комментарий = ЭлементЭЦП.Комментарий; + НоваяСтрока.Объект = ЭтаФорма.Объект.Ссылка; + НоваяСтрока.Отпечаток = ЭлементЭЦП.Отпечаток; НоваяСтрока.УстановившийПодпись = ЭлементЭЦП.УстановившийПодпись; - НоваяСтрока.Неверна = Ложь; - НоваяСтрока.АдресПодписи = ПоместитьВоВременноеХранилище(ЭлементЭЦП.Подпись.Получить(), УникальныйИдентификатор); + НоваяСтрока.Неверна = Ложь; + НоваяСтрока.АдресПодписи = ПоместитьВоВременноеХранилище( + ЭлементЭЦП.Подпись.Получить(), УникальныйИдентификатор); ДвоичныеДанныеСертификата = ЭлементЭЦП.Сертификат.Получить(); Если ДвоичныеДанныеСертификата <> Неопределено Тогда - НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище(ДвоичныеДанныеСертификата, УникальныйИдентификатор); + + НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище( + ДвоичныеДанныеСертификата, УникальныйИдентификатор); КонецЕсли; КонецЦикла; @@ -699,7 +810,9 @@ Процедура УдалитьИзСпискаПодписейИЗаписатьФайл() Для Каждого НомерВыделеннойСтроки Из Элементы.ТаблицаПодписей.ВыделенныеСтроки Цикл - ТаблицаПодписей.Удалить(ТаблицаПодписей.Индекс(ТаблицаПодписей.НайтиПоИдентификатору(НомерВыделеннойСтроки))); + + ТаблицаПодписей.Удалить(ТаблицаПодписей.Индекс( + ТаблицаПодписей.НайтиПоИдентификатору(НомерВыделеннойСтроки))); КонецЦикла; ЗаписываемыйОбъект = РеквизитФормыВЗначение("Объект"); @@ -736,16 +849,17 @@ ФайлРедактируетТекущийПользователь = Форма.Объект.Редактирует = ТекущийПользователь; ИменаВсехКоманд = ПолучитьИменаКомандФормы(); - ИменаКоманд = ПолучитьДоступныеКоманды(ФайлРедактируется, - ФайлРедактируетТекущийПользователь, - Форма.Объект.ПодписанЭЦП, - Форма.Объект.Зашифрован, - Форма.Объект.Ссылка.Пустая()); - + ИменаКоманд = ПолучитьДоступныеКоманды( + ФайлРедактируется, + ФайлРедактируетТекущийПользователь, + Форма.Объект.ПодписанЭЦП, + Форма.Объект.Зашифрован, + Форма.Объект.Ссылка.Пустая()); + Если Форма.ТаблицаПодписей.Количество() = 0 Тогда УдалитьКомандуИзМассива(ИменаКоманд, "ОткрытьПодпись"); КонецЕсли; - + Для Каждого ЭлементФормы ИЗ Элементы Цикл Если ТипЗнч(ЭлементФормы) <> Тип("КнопкаФормы") Тогда Продолжить; @@ -763,12 +877,14 @@ ЭлементФормы.Доступность = Истина; КонецЕсли; КонецЦикла; + КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Функция ПолучитьИменаКомандФормы() ИменаКоманд = ПолучитьИменаКомандИзмененияОбъекта(); + Для Каждого ИмяКоманды Из ПолучитьИменаПростыхКомандОбъектов() Цикл ИменаКоманд.Добавить(ИмяКоманды); КонецЦикла; @@ -782,7 +898,7 @@ ИменаКоманд = Новый Массив; - // простые команды - доступны любому пользователю читающему файлы + // Простые команды, которые доступны любому пользователю читающему файлы. ИменаКоманд.Добавить("СохранитьВместеСЭЦП"); ИменаКоманд.Добавить("ОткрытьСертификат"); @@ -821,19 +937,18 @@ ИменаКоманд.Добавить("СтандартнаяЗаписать"); ИменаКоманд.Добавить("СтандартнаяЗаписатьИЗакрыть"); - ИменаКоманд.Добавить("СтандартныеПометитьНаУдалениеСнятьПометку"); + ИменаКоманд.Добавить("СтандартныеУстановитьПометкуУдаления"); Возврат ИменаКоманд; КонецФункции - &НаКлиентеНаСервереБезКонтекста Функция ПолучитьДоступныеКоманды(ФайлРедактируется, - ФайлРедактируетТекущийПользователь, - ФайлПодписан, - ФайлЗашифрован, - ЭтоНовыйФайл) + ФайлРедактируетТекущийПользователь, + ФайлПодписан, + ФайлЗашифрован, + ЭтоНовыйФайл) Если ЭтоНовыйФайл Тогда @@ -904,7 +1019,7 @@ КонецФункции &НаКлиентеНаСервереБезКонтекста -Процедура УдалитьКомандыЭЦП(ИменаКоманд) +Процедура УдалитьКомандыЭЦП(Знач ИменаКоманд) УдалитьКомандуИзМассива(ИменаКоманд, "ПодписатьФайлЭЦП"); УдалитьКомандуИзМассива(ИменаКоманд, "ДобавитьЭЦПИзФайла"); @@ -929,7 +1044,9 @@ Процедура ЗашифроватьСервер(ЗашифрованныеДанные, МассивОтпечатков) ЗаписываемыйОбъект = РеквизитФормыВЗначение("Объект"); + ПрисоединенныеФайлы.Зашифровать(ЗаписываемыйОбъект, ЗашифрованныеДанные, МассивОтпечатков); + ЗначениеВРеквизитФормы(ЗаписываемыйОбъект, "Объект"); УстановитьДоступностьКнопок(ЭтаФорма, Элементы, ТекущийПользователь); @@ -940,7 +1057,10 @@ Процедура ЗанестиИнформациюОПодписях(МассивПодписей) ЗаписываемыйОбъект = РеквизитФормыВЗначение("Объект"); - ПрисоединенныеФайлы.ЗанестиИнформациюОПодписях(ЗаписываемыйОбъект, МассивПодписей, УникальныйИдентификатор); + + ПрисоединенныеФайлы.ЗанестиИнформациюОПодписях( + ЗаписываемыйОбъект, МассивПодписей, УникальныйИдентификатор); + ЗначениеВРеквизитФормы(ЗаписываемыйОбъект, "Объект"); ЗаполнитьСписокПодписей(); @@ -973,7 +1093,7 @@ КонецПроцедуры &НаСервере -Процедура ПоместитьФайлВХранилищеИОсвободить(ИнформацияОФайле) +Процедура ПоместитьФайлВХранилищеИОсвободить(Знач ИнформацияОФайле) ЗаписываемыйОбъект = РеквизитФормыВЗначение("Объект"); ПрисоединенныеФайлы.ПоместитьФайлВХранилищеИОсвободить(ЗаписываемыйОбъект, ИнформацияОФайле); @@ -994,8 +1114,8 @@ Функция ОбработатьКомандуЗаписиФайла() Если ПустаяСтрока(ЭтаФорма.Объект.Наименование) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Для продолжения укажите имя файла.'"),, - "Наименование", "Объект"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Для продолжения укажите имя файла.'"), , "Наименование", "Объект"); Возврат Ложь; КонецЕсли; @@ -1003,7 +1123,10 @@ ФайловыеФункцииКлиент.КорректноеИмяФайла(ЭтаФорма.Объект.Наименование); Исключение Информация = ИнформацияОбОшибке(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Информация.Описание,,"Наименование", "Объект"); + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + Информация.Описание, ,"Наименование", "Объект"); + Возврат Ложь; КонецПопытки; @@ -1014,8 +1137,11 @@ Модифицированность = Ложь; ОтобразитьИзменениеДанных(ЭтаФорма.Объект.Ссылка, ВидИзмененияДанных.Изменение); ОповеститьОбИзменении(ЭтаФорма.Объект.Ссылка); - Оповестить("Запись_ПрисоединенныйФайл", Новый Структура("ЭтоНовый", ФайлБылСоздан), - ЭтаФорма.Объект.Ссылка); + + Оповестить("Запись_ПрисоединенныйФайл", + Новый Структура("ЭтоНовый", ФайлБылСоздан), + ЭтаФорма.Объект.Ссылка); + Возврат Истина; КонецФункции @@ -1029,7 +1155,7 @@ КонецПроцедуры &НаСервере -Функция ЗаписатьФайл(ПараметрОбъект = Неопределено) +Функция ЗаписатьФайл(Знач ПараметрОбъект = Неопределено) Если ПараметрОбъект = Неопределено Тогда ЗаписываемыйОбъект = РеквизитФормыВЗначение("Объект"); @@ -1041,7 +1167,10 @@ Попытка Если ЗначениеЗаполнено(ЗначениеКопирования) Тогда ДвоичныеДанные = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(ЗначениеКопирования); - Если ФайловыеФункции.ПолучитьТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + + Если ФайловыеФункции.ПолучитьТипХраненияФайлов() + = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + НачатьТранзакцию(); ТранзакцияАктивна = Истина; СсылкаНового = Справочники[ИмяСправочника].ПолучитьСсылку(); @@ -1049,10 +1178,17 @@ ПрисоединенныеФайлы.ЗаписатьФайлВИнформационнуюБазу(СсылкаНового, ДвоичныеДанные); ЗаписываемыйОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; Иначе - // добавить в один из томов (где есть свободное место) - ФайловыеФункции.ДобавитьНаДиск(ДвоичныеДанные, ЗаписываемыйОбъект.ПутьКФайлу, ЗаписываемыйОбъект.Том, - ЗаписываемыйОбъект.ДатаМодификацииУниверсальная, "", - ЗаписываемыйОбъект.Наименование, ЗаписываемыйОбъект.Расширение, ЗаписываемыйОбъект.Размер); + // Добавление файла в один из томов (где есть свободное место). + ФайловыеФункции.ДобавитьНаДиск( + ДвоичныеДанные, + ЗаписываемыйОбъект.ПутьКФайлу, + ЗаписываемыйОбъект.Том, + ЗаписываемыйОбъект.ДатаМодификацииУниверсальная, + "", + ЗаписываемыйОбъект.Наименование, + ЗаписываемыйОбъект.Расширение, + ЗаписываемыйОбъект.Размер); + ЗаписываемыйОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; КонецЕсли; КонецЕсли; @@ -1065,8 +1201,12 @@ Исключение Если ТранзакцияАктивна Тогда ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Присоединенный файл'"), УровеньЖурналаРегистрации.Ошибка,,, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Присоединенный файл'"), + УровеньЖурналаРегистрации.Ошибка, + , + , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ); КонецЕсли; ВызватьИсключение; КонецПопытки; @@ -1082,43 +1222,45 @@ КонецФункции &НаСервере -Процедура СоздатьРеквизитыФормы() +Процедура НастроитьОбъектФормы(Знач НовыйОбъект) - ОписаниеТипаОбъект = Новый ОписаниеТипов("СправочникОбъект."+ИмяСправочника); + ТипНовогоОбъекта = Новый Массив; + ТипНовогоОбъекта.Добавить(ТипЗнч(НовыйОбъект)); - ДобавляемыеРеквизиты = Новый Массив; - НовыйРеквит = Новый РеквизитФормы("Объект", ОписаниеТипаОбъект); + НовыйРеквит = Новый РеквизитФормы("Объект", Новый ОписаниеТипов(ТипНовогоОбъекта)); НовыйРеквит.СохраняемыеДанные = Истина; + ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(НовыйРеквит); ИзменитьРеквизиты(ДобавляемыеРеквизиты); + ЗначениеВРеквизитФормы(НовыйОбъект, "Объект"); + КонецПроцедуры &НаСервере Процедура СоздатьЭлементыФормы() - Элемент = ДобавитьПолеОбъектаНаФорму("Наименование", Элементы.ГруппаОбщаяИнформация, Истина, "Имя файла", Ложь); - Элемент = ДобавитьПолеОбъектаНаФорму("Описание", Элементы.ГруппаОбщаяИнформация, Истина, , Ложь); + Элемент = ДобавитьПолеОбъектаНаФорму( + "Наименование", Элементы.ГруппаОбщаяИнформация, Истина, "Имя файла", Ложь); - // ------------------------------------------ + Элемент = ДобавитьПолеОбъектаНаФорму( + "Описание", Элементы.ГруппаОбщаяИнформация, Истина, , Ложь); - ДобавитьПолеОбъектаНаФорму("Автор", Элементы.ГруппаСведенияЧасть1); - ДобавитьПолеОбъектаНаФорму("Изменил", Элементы.ГруппаСведенияЧасть1); - ДобавитьПолеОбъектаНаФорму("Расширение", Элементы.ГруппаСведенияЧасть1); + ДобавитьПолеОбъектаНаФорму("Автор", Элементы.ГруппаСведенияЧасть1); + ДобавитьПолеОбъектаНаФорму("Изменил", Элементы.ГруппаСведенияЧасть1); + ДобавитьПолеОбъектаНаФорму("Расширение", Элементы.ГруппаСведенияЧасть1); ДобавитьПолеОбъектаНаФорму("Редактирует", Элементы.ГруппаСведенияЧасть1); - ДобавитьПолеОбъектаНаФорму("ДатаСоздания", Элементы.ГруппаСведенияЧасть2,,,,Ложь); - ДобавитьПолеНаФорму("ДатаМодификации", Элементы.ГруппаСведенияЧасть2); - ДобавитьПолеОбъектаНаФорму("Размер", Элементы.ГруппаСведенияЧасть2,,,,, 11); - - // ------------------------------------------ + ДобавитьПолеОбъектаНаФорму("ДатаСоздания", Элементы.ГруппаСведенияЧасть2, , , , Ложь); + ДобавитьПолеНаФорму("ДатаМодификации", Элементы.ГруппаСведенияЧасть2); + ДобавитьПолеОбъектаНаФорму("Размер", Элементы.ГруппаСведенияЧасть2, , , , , 11); КонецПроцедуры &НаСервереБезКонтекста -Процедура РазблокироватьОбъект(Ссылка, УникальныйИдентификатор) +Процедура РазблокироватьОбъект(Знач Ссылка, Знач УникальныйИдентификатор) РазблокироватьДанныеДляРедактирования(Ссылка, УникальныйИдентификатор); @@ -1136,21 +1278,25 @@ КонецЕсли; Если Не ПодключитьРасширениеРаботыСКриптографией() Тогда - Возврат; + Возврат; КонецЕсли; Попытка - МенеджерКриптографии = Новый МенеджерКриптографии(ПерсональныеНастройкиРаботыСЭЦП.ПровайдерЭЦП, - ПерсональныеНастройкиРаботыСЭЦП.ПутьМодуляКриптографии, ПерсональныеНастройкиРаботыСЭЦП.ТипПровайдераЭЦП); + МенеджерКриптографии = Новый МенеджерКриптографии( + ПерсональныеНастройкиРаботыСЭЦП.ПровайдерЭЦП, + ПерсональныеНастройкиРаботыСЭЦП.ПутьМодуляКриптографии, + ПерсональныеНастройкиРаботыСЭЦП.ТипПровайдераЭЦП); Исключение Возврат; КонецПопытки; ЗаполнитьЗначенияСвойств(МенеджерКриптографии, ПерсональныеНастройкиРаботыСЭЦП); - Для Каждого СтрокаТаблицы Из ТаблицаПодписей Цикл - Если ПустаяСтрока(СтрокаТаблицы.Отпечаток) Тогда // подпись не была прочитана при записи объекта + Для каждого СтрокаТаблицы Из ТаблицаПодписей Цикл + + Если ПустаяСтрока(СтрокаТаблицы.Отпечаток) Тогда // Подпись не была прочитана при записи объекта. Подпись = ПолучитьИзВременногоХранилища(СтрокаТаблицы.АдресПодписи); + Если ЗначениеЗаполнено(Подпись) Тогда Попытка Сертификаты = МенеджерКриптографии.ПолучитьСертификатыИзПодписи(Подпись); @@ -1160,16 +1306,16 @@ Сертификат = Сертификаты[0]; СтрокаТаблицы.Отпечаток = Base64Строка(Сертификат.Отпечаток); - СтрокаТаблицы.КомуВыданСертификат = ЭлектроннаяЦифроваяПодписьКлиентСервер.ПолучитьПредставлениеПользователя(Сертификат.Субъект); + + СтрокаТаблицы.КомуВыданСертификат = ЭлектроннаяЦифроваяПодписьКлиентСервер + .ПолучитьПредставлениеПользователя(Сертификат.Субъект); + КонецЕсли; КонецЕсли; КонецЦикла; - + КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////// -// Вспомогательные - &НаКлиенте Функция ЭтоНовый() @@ -1178,13 +1324,13 @@ КонецФункции &НаСервере -Функция ДобавитьПолеОбъектаНаФорму(знач ИмяРеквизита, - знач Контейнер = Неопределено, - знач ЗаголовокСверху = Ложь, - знач Заголовок = "", - знач ТолькоПросмотр = Истина, - знач ПоказыватьЗаголовок = Истина, - знач Ширина = 0) +Функция ДобавитьПолеОбъектаНаФорму(Знач ИмяРеквизита, + Знач Контейнер = Неопределено, + Знач ЗаголовокСверху = Ложь, + Знач Заголовок = "", + Знач ТолькоПросмотр = Истина, + Знач ПоказыватьЗаголовок = Истина, + Знач Ширина = 0) Если Контейнер = Неопределено Тогда Контейнер = ЭтаФорма; @@ -1214,7 +1360,7 @@ КонецФункции &НаСервере -Процедура ДобавитьПолеНаФорму(знач ИмяРеквизита, знач Контейнер = Неопределено) +Процедура ДобавитьПолеНаФорму(Знач ИмяРеквизита, Знач Контейнер = Неопределено) Если Контейнер = Неопределено Тогда Контейнер = ЭтаФорма; diff --git a/SSL/src/CommonForms/РедактированиеЗначенийСвойств/Form.form b/SSL/src/CommonForms/РедактированиеЗначенийСвойств/Form.form index b379d3881..f0996aead 100644 --- a/SSL/src/CommonForms/РедактированиеЗначенийСвойств/Form.form +++ b/SSL/src/CommonForms/РедактированиеЗначенийСвойств/Form.form @@ -671,6 +671,9 @@ <value>Изменить состав дополнительных реквизитов и сведений</value> </toolTip> <use> + <for> + <role>Role.РаботаСПапкамиФайлов</role> + </for> <for> <role>Role.Администрирование</role> </for> @@ -828,7 +831,7 @@ </use> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>КомандаОКВыполнить</name> + <name>КомандаОК</name> </handler> </action> <currentRowUse>Auto</currentRowUse> @@ -850,7 +853,7 @@ </use> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>КомандаОтменаВыполнить</name> + <name>КомандаОтмена</name> </handler> </action> <currentRowUse>Auto</currentRowUse> diff --git a/SSL/src/CommonForms/РедактированиеЗначенийСвойств/Module.bsl b/SSL/src/CommonForms/РедактированиеЗначенийСвойств/Module.bsl index f8d3378bc..4bcf042ab 100644 --- a/SSL/src/CommonForms/РедактированиеЗначенийСвойств/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеЗначенийСвойств/Module.bsl @@ -1,11 +1,10 @@ - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -13,7 +12,7 @@ БылаНажатаКнопкаЗакрытия = Ложь; СсылкаНаОбъект = Параметры.Ссылка; - // Получим список доступных наборов свойств + // Получение списка доступных наборов свойств. ДоступныеНаборы = УправлениеСвойствами.ПолучитьДоступныеНаборыСвойств(Параметры.Ссылка); Если ДоступныеНаборы = Неопределено Тогда @@ -24,11 +23,11 @@ ДоступныеНаборыСвойств.Добавить(ДоступныеНаборы); КонецЕсли; - // Установим заголовок + // Установка заголовока. Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Дополнительные сведения: %1'"), Строка(Параметры.Ссылка) ); + НСтр("ru = 'Дополнительные сведения: %1'"), Строка(Параметры.Ссылка) ); - // Заполним таблицу значений свойств + // Заполнение таблицы значений свойств. ЗаполнитьТаблицуЗначенийСвойств(Истина); КонецПроцедуры @@ -36,13 +35,8 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - Если Модифицированность И Не БылаНажатаКнопкаЗакрытия Тогда - Результат = Вопрос(НСтр("ru = 'Значения были изменены. Сохранить?'"), РежимДиалогаВопрос.ДаНетОтмена); - Если Результат = КодВозвратаДиалога.Да Тогда - ЗаписатьЗначенияСвойств(); - ИначеЕсли Результат = КодВозвратаДиалога.Отмена Тогда - Отказ = Истина; - КонецЕсли; + Если НЕ БылаНажатаКнопкаЗакрытия Тогда + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, Модифицированность); КонецЕсли; КонецПроцедуры @@ -51,6 +45,7 @@ Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "Запись_НаборыДополнительныхРеквизитовИСведений" Тогда + Если ДоступныеНаборыСвойств.НайтиПоЗначению(Параметр) <> Неопределено Тогда ЗаполнитьТаблицуЗначенийСвойств(Ложь); КонецЕсли; @@ -58,10 +53,8 @@ КонецПроцедуры - - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЧНОГО ПОЛЯ ДеревоЗначенийСвойств И команды РедактироватьСоставСвойств +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаЗначенийСвойств &НаКлиенте Процедура ТаблицаЗначенийСвойствПриИзменении(Элемент) @@ -91,16 +84,38 @@ &НаКлиенте Процедура ТаблицаЗначенийСвойствПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование) - Элемент.ПодчиненныеЭлементы.ТаблицаЗначенийСвойствЗначение.ОграничениеТипа = Элемент.ТекущиеДанные.ТипЗначения; + Элемент.ПодчиненныеЭлементы.ТаблицаЗначенийСвойствЗначение.ОграничениеТипа + = Элемент.ТекущиеДанные.ТипЗначения; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура КомандаОК(Команда) + + ЗаписатьЗначенияСвойств(); + БылаНажатаКнопкаЗакрытия = Истина; + Закрыть(); КонецПроцедуры &НаКлиенте -Процедура РедактироватьСоставСвойств() +Процедура КомандаОтмена(Команда) + + БылаНажатаКнопкаЗакрытия = Истина; + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьСоставСвойств(Команда) Если ДоступныеНаборыСвойств.Количество() = 0 Тогда - Предупреждение(НСтр("ru = 'У объекта дополнительные свойста отсутствуют.'")); + Предупреждение(НСтр("ru = 'У объекта отсутствуют дополнительные свойста.'")); Возврат; + ИначеЕсли ДоступныеНаборыСвойств.Количество() = 1 Тогда Элемент = ДоступныеНаборыСвойств.Получить(0); Иначе @@ -110,39 +125,21 @@ КонецЕсли; КонецЕсли; - ПараметрыФормыНабораСвойств = Новый Структура("Ключ", Элемент.Значение); - ОткрытьФормуМодально("Справочник.НаборыДополнительныхРеквизитовИСведений.Форма.ФормаЭлемента", ПараметрыФормыНабораСвойств); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Ключ", Элемент.Значение); + + ОткрытьФормуМодально("Справочник.НаборыДополнительныхРеквизитовИСведений.Форма.ФормаЭлемента", ПараметрыФормы); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ НАЖАТИЯ НА КЛАВИШИ ОК И ОТМЕНА +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -&НаКлиенте -Процедура КомандаОКВыполнить() - - ЗаписатьЗначенияСвойств(); - БылаНажатаКнопкаЗакрытия = Истина; - Закрыть(); - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаОтменаВыполнить() - - БылаНажатаКнопкаЗакрытия = Истина; - Закрыть(); - -КонецПроцедуры - - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ - -// Заполнить значениями дерево свойств &НаСервере Процедура ЗаполнитьТаблицуЗначенийСвойств(ИзОбработчикаПриСоздании) + // Заполнение дерева значениями свойств. Если ИзОбработчикаПриСоздании Тогда ЗначенияСвойств = ПрочитатьЗначенияСвойствИзРегистраСведений(); Иначе @@ -150,29 +147,34 @@ ТаблицаЗначенийСвойств.Очистить(); КонецЕсли; - Таблица = УправлениеСвойствами.ПолучитьТаблицуЗначенийСвойств(ЗначенияСвойств, ДоступныеНаборыСвойств, Истина); - Для Каждого Стр Из Таблица Цикл - новСтр = ТаблицаЗначенийСвойств.Добавить(); - ЗаполнитьЗначенияСвойств(новСтр, Стр); - новСтр.НомерКартинки = ?(Стр.Удалено, 0, -1); + Таблица = УправлениеСвойствами.ПолучитьТаблицуЗначенийСвойств( + ЗначенияСвойств, ДоступныеНаборыСвойств, Истина); + + Для каждого Строка Из Таблица Цикл + НоваяСтрока = ТаблицаЗначенийСвойств.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); + НоваяСтрока.НомерКартинки = ?(Строка.Удалено, 0, -1); - Если Стр.Значение = Неопределено И - ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(Стр.ТипЗначения, Тип("Булево")) ТОгда - новСтр.Значение = Ложь; + Если Строка.Значение = Неопределено И + ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(Строка.ТипЗначения, Тип("Булево")) ТОгда + НоваяСтрока.Значение = Ложь; КонецЕсли; КонецЦикла; КонецПроцедуры -// Записать значения свойств в регистр сведений &НаКлиенте Процедура ЗаписатьЗначенияСвойств() + // Запись значений свойств в регистр сведений. ЗначенияСвойств = Новый Массив; - Для Каждого Стр Из ТаблицаЗначенийСвойств Цикл - Если ЗначениеЗаполнено(Стр.Значение) И (Стр.Значение <> Ложь) Тогда - Значение = Новый Структура("Свойство, Значение", Стр.Свойство, Стр.Значение); + Для каждого Строка Из ТаблицаЗначенийСвойств Цикл + + Если ЗначениеЗаполнено(Строка.Значение) + И (Строка.Значение <> Ложь) Тогда + + Значение = Новый Структура("Свойство, Значение", Строка.Свойство, Строка.Значение); ЗначенияСвойств.Добавить(Значение); КонецЕсли; КонецЦикла; @@ -182,15 +184,15 @@ КонецПроцедуры &НаСервереБезКонтекста -Процедура ЗаписатьНаборСвойствВРегистр(Ссылка, ЗначенияСвойств) +Процедура ЗаписатьНаборСвойствВРегистр(Знач Ссылка, Знач ЗначенияСвойств) Набор = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей(); Набор.Отбор.Объект.Установить(Ссылка); - Для Каждого Стр Из ЗначенияСвойств Цикл + Для каждого Строка Из ЗначенияСвойств Цикл Запись = Набор.Добавить(); - Запись.Свойство = Стр.Свойство; - Запись.Значение = Стр.Значение; + Запись.Свойство = Строка.Свойство; + Запись.Значение = Строка.Значение; Запись.Объект = Ссылка; КонецЦикла; @@ -223,14 +225,16 @@ ЗначенияСвойств.Колонки.Добавить("Свойство"); ЗначенияСвойств.Колонки.Добавить("Значение"); - Для Каждого Стр Из ТаблицаЗначенийСвойств Цикл - Если ЗначениеЗаполнено(Стр.Значение) И (Стр.Значение <> Ложь) Тогда - новСтр = ЗначенияСвойств.Добавить(); - новСтр.Свойство = Стр.Свойство; - новСтр.Значение = Стр.Значение; + Для каждого Строка Из ТаблицаЗначенийСвойств Цикл + + Если ЗначениеЗаполнено(Строка.Значение) И (Строка.Значение <> Ложь) Тогда + НоваяСтрока = ЗначенияСвойств.Добавить(); + НоваяСтрока.Свойство = Строка.Свойство; + НоваяСтрока.Значение = Строка.Значение; КонецЕсли; КонецЦикла; Возврат ЗначенияСвойств; КонецФункции + diff --git a/SSL/src/CommonForms/РедактированиеНовогоПисьма/Module.bsl b/SSL/src/CommonForms/РедактированиеНовогоПисьма/Module.bsl index 51b73b2a4..069dca145 100644 --- a/SSL/src/CommonForms/РедактированиеНовогоПисьма/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеНовогоПисьма/Module.bsl @@ -59,8 +59,7 @@ //------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ ОБРАБОТЧИКОВ СОБЫТИЙ ФОРМЫ И ЭЛЕМЕНТОВ ФОРМЫ -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ // Заполняет поля формы по переданным в форму параметрам // @@ -207,18 +206,6 @@ КонецПроцедуры -&НаСервереБезКонтекста -Функция ПолучитьПочтовыйАдресПоУчетнойЗаписи(знач УчетнаяЗапись) - - Возврат СокрЛП(УчетнаяЗапись.ИмяПользователя) - + ? (ПустаяСтрока(СокрЛП(УчетнаяЗапись.ИмяПользователя)), - УчетнаяЗапись.АдресЭлектроннойПочты, - " <" + УчетнаяЗапись.АдресЭлектроннойПочты + ">"); - -КонецФункции - -// Вызывает функцию заполнения списка вложений -// &НаКлиенте Процедура ПриОткрытии(Отказ) @@ -226,6 +213,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + &НаКлиенте Процедура УчетнаяЗаписьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -237,64 +227,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОтправитьПисьмоВыполнить() - - ОчиститьСообщения(); - - Попытка - ПриведенныйПочтовыйАдрес = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПочтовыйАдресПолучателя); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , - ПочтовыйАдресПолучателя); - Возврат; - КонецПопытки; - - Если ЗначениеЗаполнено(АдресОтвета) Тогда - Попытка - ПриведенныйАдресОтвета = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(АдресОтвета); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , - "АдресОтвета"); - Возврат; - КонецПопытки; - КонецЕсли; - - Пароль = Неопределено; - - Если ((ТипЗнч(ПарольЗадан) = Тип("Булево") И Не ПарольЗадан) - Или (ТипЗнч(ПарольЗадан) = Тип("ФиксированныйМассив") И ПарольЗадан.Найти(УчетнаяЗапись) = Неопределено)) Тогда - ПараметрУчетнаяЗапись = Новый Структура("УчетнаяЗапись", УчетнаяЗапись); - Пароль = ОткрытьФормуМодально("ОбщаяФорма.ПодтверждениеПароляУчетнойЗаписи", - ПараметрУчетнаяЗапись); - Если ТипЗнч(Пароль) <> Тип("Строка") Тогда - Возврат; - КонецЕсли; - КонецЕсли; - - ПараметрыПисьма = СформироватьПараметрыПисьма(ПриведенныйПочтовыйАдрес, Пароль); - - Если ПараметрыПисьма = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Ошибка формирования параметров почтового сообщения'")); - Возврат; - КонецЕсли; - - Попытка - ЭлектроннаяПочта.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - Возврат; - КонецПопытки; - - СохранитьАдресОтвета(АдресОтвета); - Предупреждение(НСтр("ru = 'Сообщение успешно отправлено'")); - - УстановитьСостояниеОтправленногоСообщения(); - -КонецПроцедуры - // Подставляет адрес ответа, если флаг автоматической подставновки ответа // установлен. // @@ -365,6 +297,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Вложения + // Удаляет вложение из списка, а так же вызывает функцию // обновления таблицы представления вложений // @@ -383,13 +318,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПриложитьФайлВыполнить() - - ДобавлениеФайлаКВложениям(); - -КонецПроцедуры - &НаКлиенте Процедура ВложенияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) @@ -405,11 +333,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОткрытьФайл(Команда) - ОткрытьВложение(); -КонецПроцедуры - &НаКлиенте Процедура ВложенияПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) СтандартнаяОбработка = Ложь; @@ -434,9 +357,95 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ СЕРВИСНЫХ ФУНКЦИЙ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ОткрытьФайл(Команда) + ОткрытьВложение(); +КонецПроцедуры + +&НаКлиенте +Процедура ОтправитьПисьмоВыполнить() + + ОчиститьСообщения(); + + Попытка + ПриведенныйПочтовыйАдрес = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПочтовыйАдресПолучателя); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , + ПочтовыйАдресПолучателя); + Возврат; + КонецПопытки; + + Если ЗначениеЗаполнено(АдресОтвета) Тогда + Попытка + ПриведенныйАдресОтвета = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(АдресОтвета); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , + "АдресОтвета"); + Возврат; + КонецПопытки; + КонецЕсли; + + Пароль = Неопределено; + + Если ((ТипЗнч(ПарольЗадан) = Тип("Булево") И Не ПарольЗадан) + Или (ТипЗнч(ПарольЗадан) = Тип("ФиксированныйМассив") И ПарольЗадан.Найти(УчетнаяЗапись) = Неопределено)) Тогда + ПараметрУчетнаяЗапись = Новый Структура("УчетнаяЗапись", УчетнаяЗапись); + Пароль = ОткрытьФормуМодально("ОбщаяФорма.ПодтверждениеПароляУчетнойЗаписи", + ПараметрУчетнаяЗапись); + Если ТипЗнч(Пароль) <> Тип("Строка") Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + ПараметрыПисьма = СформироватьПараметрыПисьма(ПриведенныйПочтовыйАдрес, Пароль); + + Если ПараметрыПисьма = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Ошибка формирования параметров почтового сообщения'")); + Возврат; + КонецЕсли; + + Попытка + ЭлектроннаяПочта.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат; + КонецПопытки; + + СохранитьАдресОтвета(АдресОтвета); + Предупреждение(НСтр("ru = 'Сообщение успешно отправлено'")); + + УстановитьСостояниеОтправленногоСообщения(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриложитьФайлВыполнить() + + ДобавлениеФайлаКВложениям(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// СЕКЦИЯ ОБРАБОТЧИКОВ СОБЫТИЙ ФОРМЫ И ЭЛЕМЕНТОВ ФОРМЫ // +&НаСервереБезКонтекста +Функция ПолучитьПочтовыйАдресПоУчетнойЗаписи(знач УчетнаяЗапись) + + Возврат СокрЛП(УчетнаяЗапись.ИмяПользователя) + + ? (ПустаяСтрока(СокрЛП(УчетнаяЗапись.ИмяПользователя)), + УчетнаяЗапись.АдресЭлектроннойПочты, + " <" + УчетнаяЗапись.АдресЭлектроннойПочты + ">"); + +КонецФункции + &НаКлиенте Процедура УстановитьСостояниеОтправленногоСообщения() @@ -540,9 +549,6 @@ КонецПроцедуры -// Обновляет представление списка вложений -// -// &НаКлиенте Процедура ОбновитьПредставлениеВложений() @@ -680,8 +686,6 @@ КонецФункции -// Возвращает приведенный почтовый адрес -// &НаКлиенте Функция ПолучитьПриведенныйПочтовыйАдресВФормате(Текст) diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html new file mode 100644 index 000000000..f727f60a8 --- /dev/null +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html @@ -0,0 +1,2 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16443"></meta></head><body> +<p style="MARGIN-RIGHT: 0px" dir="ltr">В этой форме вам надо указать параметры файловой или клиент-серверной базы, где будет создан начальный образ базы для обмена РИБ. Если у вас есть файлы в томах, вам также потребуется указать путь к файлу, в который будет записан архив (zip) со всеми файлами в томах. При первом запуске в базе филиала вам нужно будет выполнить команду "Разместить файлы начального образа", указав в ней путь к файлу архива.</p></body></html> \ No newline at end of file diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl index 67b716998..1031e92fa 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl @@ -133,6 +133,7 @@ КонецЕсли; Предупреждение(НСтр("ru = 'Создание начального образа успешно завершено.'")); + Закрыть(); КонецПроцедуры diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/СозданиеНачальногоОбразаСФайлами.mdo b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/СозданиеНачальногоОбразаСФайлами.mdo index e65b8783f..1fda2fb57 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/СозданиеНачальногоОбразаСФайлами.mdo +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/СозданиеНачальногоОбразаСФайлами.mdo @@ -5,6 +5,11 @@ <key>ru</key> <value>Создание начального образа с файлами</value> </synonym> + <help> + <pages> + <lang>ru</lang> + </pages> + </help> <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> <useStandardCommands>true</useStandardCommands> diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl index 9587ef4f9..a966e0855 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl @@ -1,3 +1,56 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Параметры.Свойство("ОбъектОтбора", ДокументСсылка); + + ИсходныйДокумент = ДокументСсылка; + + Если ЗначениеЗаполнено(ДокументСсылка) Тогда + ОбновитьДеревоСтруктурыПодчиненности(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ТаблицаОтчета.Показать(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Обновить(Команда) + + ВывестиСтруктуруПодчиненности(); + ТаблицаОтчета.Показать(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВывестиДляТекущего(Команда) + + ТекущийДокумент = Элементы.ТаблицаОтчета.ТекущаяОбласть.Расшифровка; + + Если ЗначениеЗаполнено(ТекущийДокумент) Тогда + ДокументСсылка = ТекущийДокумент; + Иначе + Возврат; + КонецЕсли; + + ВывестиСтруктуруПодчиненности(); + ТаблицаОтчета.Показать(); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ////////////////////////////////////////////////////////////////////////////////////////////// // Процедуры вывода в табличный документ. @@ -13,18 +66,18 @@ ВывестиРодительскиеЭлементыДерева(ДеревоРодительскиеДокументы.ПолучитьЭлементы(),Макет,1); ВывестиТекущийДокумент(Макет); ВывестиПодчиненныеЭлементыДерева(ДеревоПодчиненныеДокументы.ПолучитьЭлементы(),Макет,1) - -КонецПроцедуры // + +КонецПроцедуры // Выводит строки дерева родительских документов // // Параметры -// СтрокиДерева - ДанныеФормыКоллекцияЭлементовДерева - строки дерева +// СтрокиДерева - ДанныеФормыКоллекцияЭлементовДерева - строки дерева // которые выводятся в табличный документ -// Макет - МакетТабличногоДокумента - макет, на основании которого -// происходит вывод в табличный документ -// УровеньРекурсии - Число - уровень рекурсии процедуры -// +// Макет - МакетТабличногоДокумента - макет, на основании которого +// происходит вывод в табличный документ +// УровеньРекурсии - Число - уровень рекурсии процедуры +// &НаСервере Процедура ВывестиРодительскиеЭлементыДерева(СтрокиДерева,Макет,УровеньРекурсии) @@ -33,8 +86,8 @@ ТекущаяСтрокаДерева = СтрокиДерева.Получить(Счетчик -1); ПодчиненныеЭлементыСтрокиДерева = ТекущаяСтрокаДерева.ПолучитьЭлементы(); - ВывестиРодительскиеЭлементыДерева(ПодчиненныеЭлементыСтрокиДерева,Макет,УровеньРекурсии + 1); - + ВывестиРодительскиеЭлементыДерева(ПодчиненныеЭлементыСтрокиДерева,Макет,УровеньРекурсии + 1); + Для инд=1 По УровеньРекурсии Цикл Если инд = УровеньРекурсии Тогда @@ -42,10 +95,10 @@ Если СтрокиДерева.Индекс(ТекущаяСтрокаДерева) < (СтрокиДерева.Количество()-1) Тогда Область = Макет.ПолучитьОбласть("КоннекторВерхПравоНиз"); Иначе - Область = Макет.ПолучитьОбласть("КоннекторПравоНиз"); + Область = Макет.ПолучитьОбласть("КоннекторПравоНиз"); КонецЕсли; - Иначе + Иначе Если НеобходимостьВыводаВертикальногоКоннектора(УровеньРекурсии - инд + 1,ТекущаяСтрокаДерева,Ложь) Тогда Область = Макет.ПолучитьОбласть("КоннекторВерхНиз"); @@ -54,7 +107,7 @@ КонецЕсли; - КонецЕсли; + КонецЕсли; Если инд = 1 Тогда ТаблицаОтчета.Вывести(Область); @@ -68,9 +121,9 @@ Счетчик = Счетчик - 1; - КонецЦикла; + КонецЦикла; -КонецПроцедуры +КонецПроцедуры // Выводит в табличный документ картинку, соответствующую статусу документа и его представление // @@ -95,13 +148,13 @@ Иначе ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПроведен"); КонецЕсли; - Иначе + Иначе Если СтрокаДерева.ПолучитьЭлементы().Количество() Тогда - ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПроведенКоннекторЛевоВерх"); - Иначе - ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПроведен"); + ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПроведенКоннекторЛевоВерх"); + Иначе + ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПроведен"); КонецЕсли; - КонецЕсли; + КонецЕсли; ИначеЕсли СтрокаДерева.ПометкаУдаления Тогда Если ЭтоПодчиненный = Неопределено Тогда Если ДеревоПодчиненныеДокументы.ПолучитьЭлементы().Количество() И ДеревоРодительскиеДокументы.ПолучитьЭлементы().Количество() Тогда @@ -115,15 +168,15 @@ КонецЕсли; ИначеЕсли ЭтоПодчиненный = Истина Тогда Если СтрокаДерева.ПолучитьЭлементы().Количество() Тогда - ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПомеченНаУдалениеКоннекторЛевоНиз"); - Иначе - ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПомеченНаУдаление"); + ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПомеченНаУдалениеКоннекторЛевоНиз"); + Иначе + ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПомеченНаУдаление"); КонецЕсли; - Иначе + Иначе Если СтрокаДерева.ПолучитьЭлементы().Количество() Тогда - ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПомеченНаУдалениеКоннекторЛевоВерх"); - Иначе - ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПомеченНаУдаление"); + ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПомеченНаУдалениеКоннекторЛевоВерх"); + Иначе + ОбластьКартинка = Макет.ПолучитьОбласть("ДокументПомеченНаУдаление"); КонецЕсли; КонецЕсли; Иначе @@ -139,15 +192,15 @@ КонецЕсли; ИначеЕсли ЭтоПодчиненный = Истина Тогда Если СтрокаДерева.ПолучитьЭлементы().Количество() Тогда - ОбластьКартинка = Макет.ПолучитьОбласть("ДокументЗаписанКоннекторЛевоНиз"); - Иначе - ОбластьКартинка = Макет.ПолучитьОбласть("ДокументЗаписан"); + ОбластьКартинка = Макет.ПолучитьОбласть("ДокументЗаписанКоннекторЛевоНиз"); + Иначе + ОбластьКартинка = Макет.ПолучитьОбласть("ДокументЗаписан"); КонецЕсли; - Иначе + Иначе Если СтрокаДерева.ПолучитьЭлементы().Количество() Тогда - ОбластьКартинка = Макет.ПолучитьОбласть("ДокументЗаписанКоннекторЛевоВерх"); - Иначе - ОбластьКартинка = Макет.ПолучитьОбласть("ДокументЗаписан"); + ОбластьКартинка = Макет.ПолучитьОбласть("ДокументЗаписанКоннекторЛевоВерх"); + Иначе + ОбластьКартинка = Макет.ПолучитьОбласть("ДокументЗаписан"); КонецЕсли; КонецЕсли; КонецЕсли; @@ -164,7 +217,7 @@ ОбластьДокумент.Параметры.Документ = СтрокаДерева.Ссылка; ТаблицаОтчета.Присоединить(ОбластьДокумент); -КонецПроцедуры +КонецПроцедуры // Определяет необходимость вывода вертикального коннектора в табличный документ // @@ -172,44 +225,44 @@ // УровеньВверх - Число - на каком количестве уровней выше находится // родитель от которого будет рисоваться вертикальный коннектор // СтрокаДерева - ДанныеФормыЭлементДерева - исходная строка дерева значений -// от которой ведется отсчет. +// от которой ведется отсчет. // Возвращаемое значение: // Булево - необходимость вывода в области вертиркального коннекотора // &НаСервере Функция НеобходимостьВыводаВертикальногоКоннектора(УровеньВверх,СтрокаДерева,ИщемСредиПодчиненных = Истина) - + ТекущаяСтрока = СтрокаДерева; Для инд=1 По УровеньВверх Цикл - - ТекущаяСтрока = ТекущаяСтрока.ПолучитьРодителя(); - Если инд = УровеньВверх Тогда - ИскомыйРодитель = ТекущаяСтрока; - ИначеЕсли инд = (УровеньВверх-1) Тогда - ИскомаяСтрока = ТекущаяСтрока; - КонецЕсли; - - КонецЦикла; - - Если ИскомыйРодитель = Неопределено Тогда + + ТекущаяСтрока = ТекущаяСтрока.ПолучитьРодителя(); + Если инд = УровеньВверх Тогда + ИскомыйРодитель = ТекущаяСтрока; + ИначеЕсли инд = (УровеньВверх-1) Тогда + ИскомаяСтрока = ТекущаяСтрока; + КонецЕсли; + + КонецЦикла; + + Если ИскомыйРодитель = Неопределено Тогда Если ИщемСредиПодчиненных Тогда - ПодчиненныеЭлементыРодителя = ДеревоПодчиненныеДокументы.ПолучитьЭлементы(); - Иначе - ПодчиненныеЭлементыРодителя = ДеревоРодительскиеДокументы.ПолучитьЭлементы(); - КонецЕсли; - Иначе - ПодчиненныеЭлементыРодителя = ИскомыйРодитель.ПолучитьЭлементы(); - КонецЕсли; - - Возврат ПодчиненныеЭлементыРодителя.Индекс(ИскомаяСтрока) < (ПодчиненныеЭлементыРодителя.Количество()-1); - -КонецФункции + ПодчиненныеЭлементыРодителя = ДеревоПодчиненныеДокументы.ПолучитьЭлементы(); + Иначе + ПодчиненныеЭлементыРодителя = ДеревоРодительскиеДокументы.ПолучитьЭлементы(); + КонецЕсли; + Иначе + ПодчиненныеЭлементыРодителя = ИскомыйРодитель.ПолучитьЭлементы(); + КонецЕсли; + + Возврат ПодчиненныеЭлементыРодителя.Индекс(ИскомаяСтрока) < (ПодчиненныеЭлементыРодителя.Количество()-1); + +КонецФункции // Выводит в табличный документ строку с документом, для которого формируется структура подчиненности // // Параметры -// Макет - МакетТабличногоДокумента - макет, на основании которого формирутеся табличный документ. +// Макет - МакетТабличногоДокумента - макет, на основании которого формирутеся табличный документ. &НаСервере Процедура ВывестиТекущийДокумент(Макет) @@ -229,7 +282,7 @@ КонецЕсли; -КонецПроцедуры +КонецПроцедуры // Формирует представление документа для вывода в табличный документ // @@ -251,24 +304,24 @@ Возврат ПредставлениеДокумента; КонецФункции - + // Выводит строки дерева подчиненных документов // // Параметры -// СтрокиДерева - ДанныеФормыКоллекцияЭлементовДерева - строки дерева +// СтрокиДерева - ДанныеФормыКоллекцияЭлементовДерева - строки дерева // которые выводятся в табличный документ -// Макет - МакетТабличногоДокумента - макет, на основании которого +// Макет - МакетТабличногоДокумента - макет, на основании которого // происходит вывод в табличный документ -// УровеньРекурсии - Число - уровень рекурсии процедуры +// УровеньРекурсии - Число - уровень рекурсии процедуры // &НаСервере Процедура ВывестиПодчиненныеЭлементыДерева(СтрокиДерева,Макет,УровеньРекурсии) Для каждого СтрокаДерева Из СтрокиДерева Цикл - ЭтоТекущийДокумент = (СтрокаДерева.Ссылка = ДокументСсылка); + ЭтоТекущийДокумент = (СтрокаДерева.Ссылка = ДокументСсылка); ЭтоИсходныйДокумент = (СтрокаДерева.Ссылка = ИсходныйДокумент); - ПодчиненныеЭлементыДерева = СтрокаДерева.ПолучитьЭлементы(); + ПодчиненныеЭлементыДерева = СтрокаДерева.ПолучитьЭлементы(); //Вывод коннекторов Для инд = 1 По УровеньРекурсии Цикл @@ -305,9 +358,9 @@ //Вывод подчиненных элементов дерева ВывестиПодчиненныеЭлементыДерева(ПодчиненныеЭлементыДерева,Макет,УровеньРекурсии + 1); - КонецЦикла; + КонецЦикла; -КонецПроцедуры // () +КонецПроцедуры //Инициирует вывод в табличный документ и отображает его по окончанию формирования. &НаКлиенте @@ -367,7 +420,7 @@ // ДокументСсылка - ДокументСсылка - документ, значения реквзитов которого получаются запросом. // // Возвращаемое значение: -// ВыборкаИзРезультатаЗапроса +// ВыборкаИзРезультатаЗапроса // &НаСервере Функция ПолучитьВыборкуПоРеквизитамДокумента(ДокументСсылка) @@ -398,9 +451,6 @@ КонецФункции -///////////////////////////////////////////////////////////////////// -// - &НаСервере Процедура ВывестиРодительскиеДокументы(ТекущийДокумент,ДеревоРодитель) @@ -517,7 +567,7 @@ ТекущийРодитель = СтрокаРодитель; Пока ТекущийРодитель <> Неопределено Цикл Если ТекущийРодитель.Ссылка = ИскомыйДокумент Тогда - Возврат Истина; + Возврат Истина; КонецЕсли; ТекущийРодитель = ТекущийРодитель.ПолучитьРодителя(); КонецЦикла; @@ -674,59 +724,7 @@ КонецФункции -////////////////////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы - &НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Параметры.Свойство("ОбъектОтбора", ДокументСсылка); - - ИсходныйДокумент = ДокументСсылка; - - Если ЗначениеЗаполнено(ДокументСсылка) Тогда - ОбновитьДеревоСтруктурыПодчиненности(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - ТаблицаОтчета.Показать(); - -КонецПроцедуры - -////////////////////////////////////////////////////////////////////////////////////////////// -// Обработчики команд формы - -&НаКлиенте -Процедура Обновить(Команда) - - ВывестиСтруктуруПодчиненности(); - ТаблицаОтчета.Показать(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВывестиДляТекущего(Команда) - - ТекущийДокумент = Элементы.ТаблицаОтчета.ТекущаяОбласть.Расшифровка; - - Если ЗначениеЗаполнено(ТекущийДокумент) Тогда - ДокументСсылка = ТекущийДокумент; - Иначе - Возврат; - КонецЕсли; - - ВывестиСтруктуруПодчиненности(); - ТаблицаОтчета.Показать(); - -КонецПроцедуры - -///////////////////////////////////////////////////////////////////// -// Потом разобрать - Процедура ДополнитьТекстЗапросаПоРеквизитамДокумента(ТекстЗапроса, МассивРеквизитов) ТекстПредставление = "Представление КАК Представление"; diff --git a/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Form.form b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Form.form new file mode 100644 index 000000000..ba48eb4fd --- /dev/null +++ b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Form.form @@ -0,0 +1,371 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <title> + <key>ru</key> + <value>Установка ведущей конечной точки</value> + + + НастройкиПодключения + 9 + + WSURLВебСервиса + 1 + true + true + + true + + + WSURLВебСервиса + + + WSURLВебСервисаРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + WSURLВебСервисаКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + WSИмяПользователя + 3 + true + true + + true + + + WSИмяПользователя + + + WSИмяПользователяРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + WSИмяПользователяКонтекстноеМеню + 4 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + WSПароль + 5 + true + true + + true + + + WSПароль + + + WSПарольРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + WSПарольКонтекстноеМеню + 6 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Задайте параметры подключения к конечной точке</value> + + + ru + Настройки подключения + + + НастройкиПодключенияРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаУстановить + 10 + true + true + + true + + + ФормаУстановитьРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + Form.Command.Установить + Auto + true + true + true + UserCmds + Auto + + + ФормаЗакрыть + 11 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + true + true + UserCmds + Auto + + Right + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + CustomizeForm + Help + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + WSURLВебСервиса + + <key>ru</key> + <value>Строка подключения</value> + + 1 + + String + + + + true + + + true + + ShowError + + + WSИмяПользователя + + <key>ru</key> + <value>Имя пользователя</value> + + 2 + + String + + 50 + + + + true + + + true + + + + WSПароль + + <key>ru</key> + <value>Пароль</value> + + 3 + + String + + 50 + + + + true + + + true + + + + СобытиеЖурналаРегистрацииУстановкаВедущейКонечнойТочки + + <key>ru</key> + <value>Событие журнала регистрации установка ведущей конечной точки</value> + + 5 + + String + + + + true + + + true + + + + КонечнаяТочка + + <key>ru</key> + <value>Конечная точка</value> + + 4 + + ExchangePlanRef.ОбменСообщениями + + + true + + + true + + + + Установить + + <key>ru</key> + <value>Установить</value> + + 1 + + ru + Установить + + + true + + + + Установить + + + Auto + Auto + + + + + + diff --git a/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl new file mode 100644 index 000000000..7f63afc50 --- /dev/null +++ b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/Module.bsl @@ -0,0 +1,103 @@ +&НаКлиенте +Перем ЗакрытьФормуБезусловно; + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + СобытиеЖурналаРегистрацииУстановкаВедущейКонечнойТочки = ОбменСообщениямиВнутренний.СобытиеЖурналаРегистрацииУстановкаВедущейКонечнойТочки(); + + КонечнаяТочка = Параметры.КонечнаяТочка; + + // Зачитываем значения настроек подключения + ЗаполнитьЗначенияСвойств(ЭтаФорма, РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(КонечнаяТочка)); + + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установка ведущей конечной точки для ""%1""'"), + ОбщегоНазначения.ПолучитьЗначениеРеквизита(КонечнаяТочка, "Наименование") + ); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы( + Отказ, + , + ЗакрытьФормуБезусловно, + НСтр("ru = 'Отменить выполнение операции?'") + ); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Установить(Команда) + + Состояние(НСтр("ru = 'Выполняется установка ведущей конечной точки. Пожалуйста, подождите...'")); + + Отказ = Ложь; + ОшибкаЗаполнения = Ложь; + + УстановитьВедущуюКонечнуюТочкуНаСервере(Отказ, ОшибкаЗаполнения); + + Если ОшибкаЗаполнения Тогда + Возврат; + КонецЕсли; + + Если Отказ Тогда + + НСтрока = НСтр("ru = 'При установке ведущей конечной точки возникли ошибки. + |Перейти в журнал регистрации?'"); + Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); + Если Ответ = КодВозвратаДиалога.Да Тогда + + Отбор = Новый Структура; + Отбор.Вставить("СобытиеЖурналаРегистрации", СобытиеЖурналаРегистрацииУстановкаВедущейКонечнойТочки); + ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма", Отбор, ЭтаФорма); + + КонецЕсли; + Возврат; + КонецЕсли; + + Оповестить(ОбменСообщениямиКлиент.ИмяСобытияУстановленаВедущаяКонечнаяТочка()); + + Предупреждение(НСтр("ru = 'Установка ведущей конечной точки успешно завершена.'")); + + ЗакрытьФормуБезусловно = Истина; + + Закрыть(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура УстановитьВедущуюКонечнуюТочкуНаСервере(Отказ, ОшибкаЗаполнения) + + Если Не ПроверитьЗаполнение() Тогда + ОшибкаЗаполнения = Истина; + Возврат; + КонецЕсли; + + НастройкиПодключенияWS = ОбменДаннымиСервер.СтруктураПараметровWS(); + + ЗаполнитьЗначенияСвойств(НастройкиПодключенияWS, ЭтаФорма); + + ОбменСообщениямиВнутренний.УстановитьВедущуюКонечнуюТочкуНаСторонеОтправителя(Отказ, НастройкиПодключенияWS, КонечнаяТочка); + +КонецПроцедуры + + + diff --git a/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/УстановкаВедущейКонечнойТочки.mdo b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/УстановкаВедущейКонечнойТочки.mdo new file mode 100644 index 000000000..f23ca68e2 --- /dev/null +++ b/SSL/src/CommonForms/УстановкаВедущейКонечнойТочки/УстановкаВедущейКонечнойТочки.mdo @@ -0,0 +1,10 @@ + + + УстановкаВедущейКонечнойТочки + + ru + Установка ведущей конечной точки + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl index 0742dbc41..5cc6e3491 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl +++ b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl @@ -1,517 +1,6 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ - -&НаСервере -Процедура ЗаполнитьСпискиНайденныхКонтактовПоEmail() - - // Получим список адресов, для которых не указан email - масАдресов = Новый Массив; - Для Каждого Стр Из ТаблицаКонтактов Цикл - Если Не ПустаяСтрока(Стр.Адрес) Тогда - масАдресов.Добавить(Стр.Адрес); - КонецЕсли; - КонецЦикла; - - // Если для всех адресов email указан, то поиск не осуществляем - Если масАдресов.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - // Найдем контакты по email - НайденныеКонтакты = Взаимодействия.ПолучитьВсеКонтактыПоСпискуEmail(масАдресов); - Если НайденныеКонтакты.Строки.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - Для каждого Строка Из НайденныеКонтакты.Строки Цикл - Строка.Представление = ВРег(Строка.Представление); - КонецЦикла; - - // Для каждой строки проставим список найденных контактов - Для Каждого Стр Из ТаблицаКонтактов Цикл - Если Не ПустаяСтрока(Стр.Адрес) Тогда - Группа = НайденныеКонтакты.Строки.Найти(ВРег(Стр.Адрес), "Представление"); - Если Группа = Неопределено Тогда - Продолжить; - КонецЕсли; - - Для Каждого СтрГруппы Из Группа.Строки Цикл - ПредставлениеКонтакта = СтрГруппы.Наименование + ?(ПустаяСтрока(СтрГруппы.НаименованиеВладельца), "", " (" + СтрГруппы.НаименованиеВладельца + ")"); - Стр.СписокНайденныхКонтактов.Добавить(СтрГруппы.Контакт, ПредставлениеКонтакта); - КонецЦикла; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Функция СформироватьПредставлениеАдресаСВидом(Адрес, ВидКИ) - - Если ПустаяСтрока(Адрес) Тогда - Возврат Строка(ВидКИ); - Иначе - Возврат Строка(ВидКИ) + " (" + Адрес + ")"; - КонецЕсли; - -КонецФункции - -&НаСервере -Процедура ЗаполнитьТаблицыТекущихEmailКонтактов() - - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); - - ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | Контакты.Контакт - |ПОМЕСТИТЬ ВсеКонтакты - |ИЗ - | &Контакты КАК Контакты - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Контакты.Контакт - |ПОМЕСТИТЬ Контакты - |ИЗ - | ВсеКонтакты КАК Контакты - |ГДЕ - | Контакты.Контакт <> НЕОПРЕДЕЛЕНО - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВидыКонтактнойИнформации.Ссылка КАК Вид, - | ВидыКонтактнойИнформации.Наименование КАК ВидНаименование, - | ТаблицаКонтакты.Ссылка КАК Контакт - |ПОМЕСТИТЬ ПользователиВидыКИ - |ИЗ - | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации, - | Справочник.Пользователи КАК ТаблицаКонтакты - |ГДЕ - | ВидыКонтактнойИнформации.Родитель = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.СправочникПользователи) - | И ВидыКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) - | И ТаблицаКонтакты.Ссылка В - | (ВЫБРАТЬ - | Контакты.Контакт - | ИЗ - | Контакты КАК Контакты) - |;"; - - Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл - - Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда - Продолжить; - КонецЕсли; - - ТекстЗапроса = ТекстЗапроса + " - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВидыКонтактнойИнформации.Ссылка КАК Вид, - | ВидыКонтактнойИнформации.Наименование КАК ВидНаименование, - | ТаблицаКонтакты.Ссылка КАК Контакт - |ПОМЕСТИТЬ " + ЭлементМассиваОписания.Имя + "ВидыКИ - |ИЗ - | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации, - | Справочник." + ЭлементМассиваОписания.Имя + " КАК ТаблицаКонтакты - |ГДЕ - | ВидыКонтактнойИнформации.Родитель = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.Справочник" + ЭлементМассиваОписания.Имя + ") - | И ВидыКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) - | И ТаблицаКонтакты.Ссылка В - | (ВЫБРАТЬ - | Контакты.Контакт - | ИЗ - | Контакты КАК Контакты) - | " + ?(ЭлементМассиваОписания.Иерархический,"И (НЕ ТаблицаКонтакты.ЭтоГруппа)","") + " - |;"; - - КонецЦикла; - - ТекстЗапроса = ТекстЗапроса + " - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | КонтактыВидыКИ.Контакт, - | ЕСТЬNULL(КонтактнаяИнформация.АдресЭП, """") КАК АдресЭП, - | КонтактыВидыКИ.Вид, - | КонтактыВидыКИ.ВидНаименование КАК ВидНаименование - |ИЗ - | ПользователиВидыКИ КАК КонтактыВидыКИ - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК КонтактнаяИнформация - | ПО КонтактыВидыКИ.Контакт = КонтактнаяИнформация.Ссылка - | И КонтактыВидыКИ.ВИД = КонтактнаяИнформация.Вид"; - - Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл - - Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда - Продолжить; - КонецЕсли; - - ТекстЗапроса = ТекстЗапроса + " - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | КонтактыВидыКИ.Контакт, - | ЕСТЬNULL(КонтактнаяИнформация.АдресЭП, """"), - | КонтактыВидыКИ.Вид, - | КонтактыВидыКИ.ВидНаименование - | - |ИЗ - | " + ЭлементМассиваОписания.Имя + "ВидыКИ КАК КонтактыВидыКИ - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник." + ЭлементМассиваОписания.Имя + ".КонтактнаяИнформация КАК КонтактнаяИнформация - | ПО КонтактыВидыКИ.ВИД = КонтактнаяИнформация.Вид - | И КонтактыВидыКИ.Контакт = КонтактнаяИнформация.Ссылка"; - - КонецЦикла; - - ТекстЗапроса = ТекстЗапроса + " - | - |ИТОГИ ПО - | Контакт"; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Контакты",ТаблицаКонтактов.Выгрузить()); - - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - Возврат; - КонецЕсли; - - ДеревоРезультатов = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); - - Для каждого СтрокаТаблицыКонтактов Из ТаблицаКонтактов Цикл - Если ЗначениеЗаполнено(СтрокаТаблицыКонтактов.Контакт) Тогда - НайденнаяСтрока = ДеревоРезультатов.Строки.Найти(СтрокаТаблицыКонтактов.Контакт, "Контакт"); - Если НайденнаяСтрока <> Неопределено Тогда - - ЗаполнитьТаблицуАдресовИзКоллекции(СтрокаТаблицыКонтактов, НайденнаяСтрока.Строки); - - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьТаблицуАдресовИзКоллекции(СтрокаТаблицыКонтактов, Коллекция) - - СтрокаТаблицыКонтактов.ТаблицаАдресовКонтакта.Очистить(); - СтрокаТаблицыКонтактов.ТекущийАдресКонтакта = ""; - СтрокаТаблицыКонтактов.ТекущийВидКонтактнойИнформации = Справочники.ВидыКонтактнойИнформации.ПустаяСсылка(); - СтрокаТаблицыКонтактов.ТекущийАдресКонтактаПредставление = ""; - - БылоНайденоСопоставлениеАдресов = Ложь; - - Для каждого СтрокаКоллекции Из Коллекция Цикл - - НоваяСтрокаТаблицыАдресов = СтрокаТаблицыКонтактов.ТаблицаАдресовКонтакта.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрокаТаблицыАдресов, СтрокаКоллекции); - Если ВРег(СтрокаТаблицыКонтактов.Адрес) = ВРег(СтрокаКоллекции.АдресЭП) Тогда - СтрокаТаблицыКонтактов.ТекущийАдресКонтакта = СтрокаТаблицыКонтактов.Адрес; - СтрокаТаблицыКонтактов.ТекущийВидКонтактнойИнформации = СтрокаКоллекции.Вид; - СтрокаТаблицыКонтактов.ТекущийАдресКонтактаПредставление = - СформироватьПредставлениеАдресаСВидом(СтрокаТаблицыКонтактов.Адрес, СтрокаКоллекции.ВидНаименование); - БылоНайденоСопоставлениеАдресов = Истина; - КонецЕсли; - - КонецЦикла; - - Если (НЕ БылоНайденоСопоставлениеАдресов) И Коллекция.Количество() > 0 Тогда - - СтрокаТаблицыКонтактов.ТекущийАдресКонтакта = Коллекция[0].АдресЭП; - СтрокаТаблицыКонтактов.ТекущийВидКонтактнойИнформации = Коллекция[0].Вид; - СтрокаТаблицыКонтактов.ТекущийАдресКонтактаПредставление = - СформироватьПредставлениеАдресаСВидом(Коллекция[0].АдресЭП,Коллекция[0].Вид); - СтрокаТаблицыКонтактов.Изменять = Истина; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОчисткеКонтакта(ТекущиеДанные) - - ТекущиеДанные.СписокНайденныхКонтактов.Очистить(); - ТекущиеДанные.ТаблицаАдресовКонтакта.Очистить(); - ТекущиеДанные.Представление = ""; - ТекущиеДанные.ТекущийАдресКонтакта = ""; - ТекущиеДанные.ТекущийВидКонтактнойИнформации = - ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.ПустаяСсылка"); - ТекущиеДанные.ТекущийАдресКонтактаПредставление = ""; - -КонецПроцедуры - -&НаСервере -Процедура ИзменитьКонтактнуюИнформациюДляВыбранных() - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ТаблицаКонтакты.Контакт, - | ТаблицаКонтакты.Адрес, - | ТаблицаКонтакты.ТекущийВидКонтактнойИнформации, - | ТаблицаКонтакты.Изменять - |ПОМЕСТИТЬ ВсеКонтакты - |ИЗ - | &ТаблицаКонтакты КАК ТаблицаКонтакты - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВсеКонтакты.Контакт, - | ВсеКонтакты.Адрес, - | ВсеКонтакты.ТекущийВидКонтактнойИнформации КАК Вид - |ИЗ - | ВсеКонтакты КАК ВсеКонтакты - |ГДЕ - | ВсеКонтакты.Изменять"; - - Запрос.УстановитьПараметр("ТаблицаКонтакты",ТаблицаКонтактов.Выгрузить()); - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - - КонтактОбъект = Выборка.Контакт.ПолучитьОбъект(); - - СтрокаТабличнойЧасти = КонтактОбъект.КонтактнаяИнформация.Найти(Выборка.Вид,"Вид"); - Если СтрокаТабличнойЧасти = Неопределено Тогда - СтрокаТабличнойЧасти = КонтактОбъект.КонтактнаяИнформация.Добавить(); - СтрокаТабличнойЧасти.Вид = Выборка.Вид; - СтрокаТабличнойЧасти.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; - КонецЕсли; - - СтрокаТабличнойЧасти.Представление = Выборка.Адрес; - СтрокаТабличнойЧасти.АдресЭП = Выборка.Адрес; - Поз = Найти(СтрокаТабличнойЧасти.АдресЭП, "@"); - Если Поз <> 0 Тогда - СтрокаТабличнойЧасти.ДоменноеИмяСервера = Сред(СтрокаТабличнойЧасти.АдресЭП, Поз+1); - КонецЕсли; - - НачатьТранзакцию(); - - Попытка - - КонтактОбъект.Записать(); - - ВыполнятьЗамену = Истина; - - НайденныеСтроки = ТаблицаКонтактов.НайтиСтроки(Новый Структура("Адрес" ,Выборка.Адрес)); - Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл - Если НайденнаяСтрока.Изменять Тогда - Если НайденнаяСтрока.СписокНайденныхКонтактов.Количество() > 1 Тогда - ВыполнятьЗамену = Ложь; - ИначеЕсли НайденнаяСтрока.СписокНайденныхКонтактов.Количество() = 1 И - НайденнаяСтрока.СписокНайденныхКонтактов.Получить(0) <> КонтактОбъект.Ссылка Тогда - - ВыполнятьЗамену = Ложь; - - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ - | ЭлектронноеПисьмоВходящееПолучателиПисьма.Ссылка КАК Ссылка, - | ЭлектронноеПисьмоВходящееПолучателиПисьма.Адрес, - | ЭлектронноеПисьмоВходящееПолучателиПисьма.Контакт, - | ""ПолучателиПисьма"" КАК ИмяТабличнойЧасти - |ИЗ - | Документ.ЭлектронноеПисьмоВходящее.ПолучателиПисьма КАК ЭлектронноеПисьмоВходящееПолучателиПисьма - |ГДЕ - | ЭлектронноеПисьмоВходящееПолучателиПисьма.Адрес = &Адрес - | И ЭлектронноеПисьмоВходящееПолучателиПисьма.Контакт = НЕОПРЕДЕЛЕНО - | И ЭлектронноеПисьмоВходящееПолучателиПисьма.Ссылка <> &Письмо - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ЭлектронноеПисьмоВходящееПолучателиКопий.Ссылка, - | ЭлектронноеПисьмоВходящееПолучателиКопий.Адрес, - | ЭлектронноеПисьмоВходящееПолучателиКопий.Контакт, - | ""ПолучателиКопий"" - |ИЗ - | Документ.ЭлектронноеПисьмоВходящее.ПолучателиКопий КАК ЭлектронноеПисьмоВходящееПолучателиКопий - |ГДЕ - | ЭлектронноеПисьмоВходящееПолучателиКопий.Адрес = &Адрес - | И ЭлектронноеПисьмоВходящееПолучателиКопий.Контакт = НЕОПРЕДЕЛЕНО - | И ЭлектронноеПисьмоВходящееПолучателиКопий.Ссылка <> &Письмо - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ЭлектронноеПисьмоВходящее.Ссылка, - | ЭлектронноеПисьмоВходящее.ОтправительАдрес, - | ЭлектронноеПисьмоВходящее.ОтправительКонтакт, - | ""Отправитель"" - |ИЗ - | Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее - |ГДЕ - | ЭлектронноеПисьмоВходящее.ОтправительАдрес = &Адрес - | И ЭлектронноеПисьмоВходящее.ОтправительКонтакт = НЕОПРЕДЕЛЕНО - | И ЭлектронноеПисьмоВходящее.Ссылка <> &Письмо - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Ссылка, - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Адрес, - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Контакт, - | ""ПолучателиПисьма"" - |ИЗ - | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиПисьма КАК ЭлектронноеПисьмоИсходящееПолучателиПисьма - |ГДЕ - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Адрес = &Адрес - | И ЭлектронноеПисьмоИсходящееПолучателиПисьма.Контакт = НЕОПРЕДЕЛЕНО - | И ЭлектронноеПисьмоИсходящееПолучателиПисьма.Ссылка <> &Письмо - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ЭлектронноеПисьмоИсходящееПолучателиКопий.Ссылка, - | ЭлектронноеПисьмоИсходящееПолучателиКопий.Адрес, - | ЭлектронноеПисьмоИсходящееПолучателиКопий.Контакт, - | ""ПолучателиКопий"" - |ИЗ - | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиКопий КАК ЭлектронноеПисьмоИсходящееПолучателиКопий - |ГДЕ - | ЭлектронноеПисьмоИсходящееПолучателиКопий.Адрес = &Адрес - | И ЭлектронноеПисьмоИсходящееПолучателиКопий.Контакт = НЕОПРЕДЕЛЕНО - | И ЭлектронноеПисьмоИсходящееПолучателиКопий.Ссылка <> &Письмо - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Ссылка, - | ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Адрес, - | ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Контакт, - | ""ПолучателиСкрытыхКопий"" - |ИЗ - | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиСкрытыхКопий КАК ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий - |ГДЕ - | ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Адрес = &Адрес - | И ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Контакт = НЕОПРЕДЕЛЕНО - | И ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Ссылка <> &Письмо - |ИТОГИ ПО - | Ссылка"; - - Запрос.УстановитьПараметр("Адрес",Выборка.Адрес); - Запрос.УстановитьПараметр("Письмо",Письмо); - - ВыборкаПисьма = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); - Пока ВыборкаПисьма.Следующий() Цикл - - ПисьмоОбъект = ВыборкаПисьма.Ссылка.ПолучитьОбъект(); - ВыборкаДеталиПисьма = ВыборкаПисьма.Выбрать(); - Пока ВыборкаДеталиПисьма.Следующий() Цикл - Если ВыборкаДеталиПисьма.ИмяТабличнойЧасти = "Отправитель" Тогда - ПисьмоОбъект.ОтправительКонтакт = КонтактОбъект.Ссылка; - Иначе - НайденныеСтроки = - ПисьмоОбъект[ВыборкаДеталиПисьма.ИмяТабличнойЧасти].НайтиСтроки(Новый Структура("Адрес",Выборка.Адрес)); - Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл - Если Не ЗначениеЗаполнено(НайденнаяСтрока.Контакт) Тогда - НайденнаяСтрока.Контакт = КонтактОбъект.Ссылка; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЦикла; - - ПисьмоОбъект.Записать(); - - КонецЦикла; - - Исключение - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время обновления контактной информации %1 произошла ошибка - |%2'"), Выборка.Контакт,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщенияОбОшибке); - - ОтменитьТранзакцию(); - - Продолжить; - КонецПопытки; - - ЗафиксироватьТранзакцию(); - - КонецЦикла; - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьСнятьПризнакИзменятьЕслиНеобходимо(ТекущиеДанные) - - Если (НЕ ЗначениеЗаполнено(ТекущиеДанные.Адрес) ИЛИ Не ЗначениеЗаполнено(ТекущиеДанные.Контакт) ИЛИ - ВРег(ТекущиеДанные.Адрес) = ВРег(ТекущиеДанные.ТекущийАдресКонтакта)) Тогда - - ТекущиеДанные.Изменять = Ложь; - - Иначе - - ТекущиеДанные.Изменять = Истина; - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьАдресаКонтакта(ТекущаяСтрока) - - ТекущиеДанные = ТаблицаКонтактов.НайтиПоИдентификатору(ТекущаяСтрока); - ТаблицаАдресов = ВзаимодействияВызовСервера.ПолучитьАдресаЭлектроннойПочтыКонтакта(ТекущиеДанные.Контакт,Истина); - - Если (Не НеИзменятьПредставлениеПриИзмененииКонтакта) ИЛИ ПустаяСтрока(ТекущиеДанные.Представление) Тогда - ТекущиеДанные.Представление = Строка(ТекущиеДанные.Контакт); - КонецЕсли; - ЗаполнитьТаблицуАдресовИзКоллекции(ТекущиеДанные, ТаблицаАдресов); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ - -&НаКлиенте -Процедура КомандаОКВыполнить() - - Результат = Новый Массив; - ЕстьКонтактнаяИнформацияДляИзменения = Ложь; - Для каждого СтрокаТаблицыКонтактов Из ТаблицаКонтактов Цикл - - Если СтрокаТаблицыКонтактов.Изменять Тогда - ЕстьКонтактнаяИнформацияДляИзменения = Истина; - КонецЕсли; - - СтруктураДанные = Новый Структура("Представление,Адрес,Контакт,Группа", - СтрокаТаблицыКонтактов.Представление, - СтрокаТаблицыКонтактов.Адрес, - СтрокаТаблицыКонтактов.Контакт, - СтрокаТаблицыКонтактов.Группа); - - Результат.Добавить(СтруктураДанные); - - КонецЦикла; - - Если ЕстьКонтактнаяИнформацияДляИзменения Тогда - ИзменитьКонтактнуюИнформациюДляВыбранных(); - КонецЕсли; - - ВыполненаКомандаЗакрытия = Истина; - - Если Не Модифицированность Тогда - Закрыть(); - Возврат; - КонецЕсли; - - Закрыть(Результат); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -549,19 +38,12 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - Если НЕ ВыполненаКомандаЗакрытия И - Модифицированность И - Вопрос(НСтр("ru='При закрытии формы введенная в нее информация будет утеряна. Закрыть?'"), - РежимДиалогаВопрос.ДаНет) <> КодВозвратаДиалога.Да Тогда - - Отказ = Истина; - - КонецЕсли; - + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, Модифицированность, ВыполненаКомандаЗакрытия); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Таблица контактов &НаКлиенте Процедура ТаблицаКонтактовКонтактНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) @@ -725,5 +207,513 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +&НаКлиенте +Процедура КомандаОКВыполнить() + + Результат = Новый Массив; + ЕстьКонтактнаяИнформацияДляИзменения = Ложь; + Для каждого СтрокаТаблицыКонтактов Из ТаблицаКонтактов Цикл + + Если СтрокаТаблицыКонтактов.Изменять Тогда + ЕстьКонтактнаяИнформацияДляИзменения = Истина; + КонецЕсли; + + СтруктураДанные = Новый Структура("Представление,Адрес,Контакт,Группа", + СтрокаТаблицыКонтактов.Представление, + СтрокаТаблицыКонтактов.Адрес, + СтрокаТаблицыКонтактов.Контакт, + СтрокаТаблицыКонтактов.Группа); + + Результат.Добавить(СтруктураДанные); + + КонецЦикла; + + Если ЕстьКонтактнаяИнформацияДляИзменения Тогда + ИзменитьКонтактнуюИнформациюДляВыбранных(); + КонецЕсли; + + ВыполненаКомандаЗакрытия = Истина; + + Если Не Модифицированность Тогда + Закрыть(); + Возврат; + КонецЕсли; + + Закрыть(Результат); + +КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЗаполнитьСпискиНайденныхКонтактовПоEmail() + + // Получим список адресов, для которых не указан email + МассивАдресов = Новый Массив; + Для Каждого СтрокаТаблицы Из ТаблицаКонтактов Цикл + Если Не ПустаяСтрока(СтрокаТаблицы.Адрес) Тогда + МассивАдресов.Добавить(СтрокаТаблицы.Адрес); + КонецЕсли; + КонецЦикла; + + // Если для всех адресов email указан, то поиск не осуществляем + Если МассивАдресов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + // Найдем контакты по email + НайденныеКонтакты = Взаимодействия.ПолучитьВсеКонтактыПоСпискуEmail(МассивАдресов); + Если НайденныеКонтакты.Строки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для каждого Строка Из НайденныеКонтакты.Строки Цикл + Строка.Представление = ВРег(Строка.Представление); + КонецЦикла; + + // Для каждой строки проставим список найденных контактов + Для Каждого СтрокаТаблицы Из ТаблицаКонтактов Цикл + Если Не ПустаяСтрока(СтрокаТаблицы.Адрес) Тогда + Группа = НайденныеКонтакты.Строки.Найти(ВРег(СтрокаТаблицы.Адрес), "Представление"); + Если Группа = Неопределено Тогда + Продолжить; + КонецЕсли; + + Для Каждого Группа Из Группа.Строки Цикл + ПредставлениеКонтакта = Группа.Наименование + ?(ПустаяСтрока(Группа.НаименованиеВладельца), "", " (" + Группа.НаименованиеВладельца + ")"); + СтрокаТаблицы.СписокНайденныхКонтактов.Добавить(Группа.Контакт, ПредставлениеКонтакта); + КонецЦикла; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция СформироватьПредставлениеАдресаСВидом(Адрес, ВидКИ) + + Если ПустаяСтрока(Адрес) Тогда + Возврат Строка(ВидКИ); + Иначе + Возврат Строка(ВидКИ) + " (" + Адрес + ")"; + КонецЕсли; + +КонецФункции + +&НаСервере +Процедура ЗаполнитьТаблицыТекущихEmailКонтактов() + + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); + + ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | Контакты.Контакт + |ПОМЕСТИТЬ ВсеКонтакты + |ИЗ + | &Контакты КАК Контакты + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Контакты.Контакт + |ПОМЕСТИТЬ Контакты + |ИЗ + | ВсеКонтакты КАК Контакты + |ГДЕ + | Контакты.Контакт <> НЕОПРЕДЕЛЕНО + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка КАК Вид, + | ВидыКонтактнойИнформации.Наименование КАК ВидНаименование, + | ТаблицаКонтакты.Ссылка КАК Контакт + |ПОМЕСТИТЬ ПользователиВидыКИ + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации, + | Справочник.Пользователи КАК ТаблицаКонтакты + |ГДЕ + | ВидыКонтактнойИнформации.Родитель = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.СправочникПользователи) + | И ВидыКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) + | И ТаблицаКонтакты.Ссылка В + | (ВЫБРАТЬ + | Контакты.Контакт + | ИЗ + | Контакты КАК Контакты) + |;"; + + Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл + + Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда + Продолжить; + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + " + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка КАК Вид, + | ВидыКонтактнойИнформации.Наименование КАК ВидНаименование, + | ТаблицаКонтакты.Ссылка КАК Контакт + |ПОМЕСТИТЬ " + ЭлементМассиваОписания.Имя + "ВидыКИ + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации, + | Справочник." + ЭлементМассиваОписания.Имя + " КАК ТаблицаКонтакты + |ГДЕ + | ВидыКонтактнойИнформации.Родитель = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.Справочник" + ЭлементМассиваОписания.Имя + ") + | И ВидыКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) + | И ТаблицаКонтакты.Ссылка В + | (ВЫБРАТЬ + | Контакты.Контакт + | ИЗ + | Контакты КАК Контакты) + | " + ?(ЭлементМассиваОписания.Иерархический,"И (НЕ ТаблицаКонтакты.ЭтоГруппа)","") + " + |;"; + + КонецЦикла; + + ТекстЗапроса = ТекстЗапроса + " + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КонтактыВидыКИ.Контакт, + | ЕСТЬNULL(КонтактнаяИнформация.АдресЭП, """") КАК АдресЭП, + | КонтактыВидыКИ.Вид, + | КонтактыВидыКИ.ВидНаименование КАК ВидНаименование + |ИЗ + | ПользователиВидыКИ КАК КонтактыВидыКИ + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК КонтактнаяИнформация + | ПО КонтактыВидыКИ.Контакт = КонтактнаяИнформация.Ссылка + | И КонтактыВидыКИ.ВИД = КонтактнаяИнформация.Вид"; + + Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл + + Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда + Продолжить; + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + " + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | КонтактыВидыКИ.Контакт, + | ЕСТЬNULL(КонтактнаяИнформация.АдресЭП, """"), + | КонтактыВидыКИ.Вид, + | КонтактыВидыКИ.ВидНаименование + | + |ИЗ + | " + ЭлементМассиваОписания.Имя + "ВидыКИ КАК КонтактыВидыКИ + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник." + ЭлементМассиваОписания.Имя + ".КонтактнаяИнформация КАК КонтактнаяИнформация + | ПО КонтактыВидыКИ.ВИД = КонтактнаяИнформация.Вид + | И КонтактыВидыКИ.Контакт = КонтактнаяИнформация.Ссылка"; + + КонецЦикла; + + ТекстЗапроса = ТекстЗапроса + " + | + |ИТОГИ ПО + | Контакт"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Контакты",ТаблицаКонтактов.Выгрузить()); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат; + КонецЕсли; + + ДеревоРезультатов = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + + Для каждого СтрокаТаблицыКонтактов Из ТаблицаКонтактов Цикл + Если ЗначениеЗаполнено(СтрокаТаблицыКонтактов.Контакт) Тогда + НайденнаяСтрока = ДеревоРезультатов.Строки.Найти(СтрокаТаблицыКонтактов.Контакт, "Контакт"); + Если НайденнаяСтрока <> Неопределено Тогда + + ЗаполнитьТаблицуАдресовИзКоллекции(СтрокаТаблицыКонтактов, НайденнаяСтрока.Строки); + + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьТаблицуАдресовИзКоллекции(СтрокаТаблицыКонтактов, Коллекция) + + СтрокаТаблицыКонтактов.ТаблицаАдресовКонтакта.Очистить(); + СтрокаТаблицыКонтактов.ТекущийАдресКонтакта = ""; + СтрокаТаблицыКонтактов.ТекущийВидКонтактнойИнформации = Справочники.ВидыКонтактнойИнформации.ПустаяСсылка(); + СтрокаТаблицыКонтактов.ТекущийАдресКонтактаПредставление = ""; + + БылоНайденоСопоставлениеАдресов = Ложь; + + Для каждого СтрокаКоллекции Из Коллекция Цикл + + НоваяСтрокаТаблицыАдресов = СтрокаТаблицыКонтактов.ТаблицаАдресовКонтакта.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрокаТаблицыАдресов, СтрокаКоллекции); + Если ВРег(СтрокаТаблицыКонтактов.Адрес) = ВРег(СтрокаКоллекции.АдресЭП) Тогда + СтрокаТаблицыКонтактов.ТекущийАдресКонтакта = СтрокаТаблицыКонтактов.Адрес; + СтрокаТаблицыКонтактов.ТекущийВидКонтактнойИнформации = СтрокаКоллекции.Вид; + СтрокаТаблицыКонтактов.ТекущийАдресКонтактаПредставление = + СформироватьПредставлениеАдресаСВидом(СтрокаТаблицыКонтактов.Адрес, СтрокаКоллекции.ВидНаименование); + БылоНайденоСопоставлениеАдресов = Истина; + КонецЕсли; + + КонецЦикла; + + Если (НЕ БылоНайденоСопоставлениеАдресов) И Коллекция.Количество() > 0 Тогда + + СтрокаТаблицыКонтактов.ТекущийАдресКонтакта = Коллекция[0].АдресЭП; + СтрокаТаблицыКонтактов.ТекущийВидКонтактнойИнформации = Коллекция[0].Вид; + СтрокаТаблицыКонтактов.ТекущийАдресКонтактаПредставление = + СформироватьПредставлениеАдресаСВидом(Коллекция[0].АдресЭП,Коллекция[0].Вид); + СтрокаТаблицыКонтактов.Изменять = Истина; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОчисткеКонтакта(ТекущиеДанные) + + ТекущиеДанные.СписокНайденныхКонтактов.Очистить(); + ТекущиеДанные.ТаблицаАдресовКонтакта.Очистить(); + ТекущиеДанные.Представление = ""; + ТекущиеДанные.ТекущийАдресКонтакта = ""; + ТекущиеДанные.ТекущийВидКонтактнойИнформации = + ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.ПустаяСсылка"); + ТекущиеДанные.ТекущийАдресКонтактаПредставление = ""; + +КонецПроцедуры + +&НаСервере +Процедура ИзменитьКонтактнуюИнформациюДляВыбранных() + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ТаблицаКонтакты.Контакт, + | ТаблицаКонтакты.Адрес, + | ТаблицаКонтакты.ТекущийВидКонтактнойИнформации, + | ТаблицаКонтакты.Изменять + |ПОМЕСТИТЬ ВсеКонтакты + |ИЗ + | &ТаблицаКонтакты КАК ТаблицаКонтакты + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВсеКонтакты.Контакт, + | ВсеКонтакты.Адрес, + | ВсеКонтакты.ТекущийВидКонтактнойИнформации КАК Вид + |ИЗ + | ВсеКонтакты КАК ВсеКонтакты + |ГДЕ + | ВсеКонтакты.Изменять"; + + Запрос.УстановитьПараметр("ТаблицаКонтакты",ТаблицаКонтактов.Выгрузить()); + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + КонтактОбъект = Выборка.Контакт.ПолучитьОбъект(); + + СтрокаТабличнойЧасти = КонтактОбъект.КонтактнаяИнформация.Найти(Выборка.Вид,"Вид"); + Если СтрокаТабличнойЧасти = Неопределено Тогда + СтрокаТабличнойЧасти = КонтактОбъект.КонтактнаяИнформация.Добавить(); + СтрокаТабличнойЧасти.Вид = Выборка.Вид; + СтрокаТабличнойЧасти.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; + КонецЕсли; + + СтрокаТабличнойЧасти.Представление = Выборка.Адрес; + СтрокаТабличнойЧасти.АдресЭП = Выборка.Адрес; + Позиция = Найти(СтрокаТабличнойЧасти.АдресЭП, "@"); + Если Позиция <> 0 Тогда + СтрокаТабличнойЧасти.ДоменноеИмяСервера = Сред(СтрокаТабличнойЧасти.АдресЭП, Позиция+1); + КонецЕсли; + + НачатьТранзакцию(); + + Попытка + + КонтактОбъект.Записать(); + + ВыполнятьЗамену = Истина; + + НайденныеСтроки = ТаблицаКонтактов.НайтиСтроки(Новый Структура("Адрес" ,Выборка.Адрес)); + Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл + Если НайденнаяСтрока.Изменять Тогда + Если НайденнаяСтрока.СписокНайденныхКонтактов.Количество() > 1 Тогда + ВыполнятьЗамену = Ложь; + ИначеЕсли НайденнаяСтрока.СписокНайденныхКонтактов.Количество() = 1 И + НайденнаяСтрока.СписокНайденныхКонтактов.Получить(0) <> КонтактОбъект.Ссылка Тогда + + ВыполнятьЗамену = Ложь; + + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ЭлектронноеПисьмоВходящееПолучателиПисьма.Ссылка КАК Ссылка, + | ЭлектронноеПисьмоВходящееПолучателиПисьма.Адрес, + | ЭлектронноеПисьмоВходящееПолучателиПисьма.Контакт, + | ""ПолучателиПисьма"" КАК ИмяТабличнойЧасти + |ИЗ + | Документ.ЭлектронноеПисьмоВходящее.ПолучателиПисьма КАК ЭлектронноеПисьмоВходящееПолучателиПисьма + |ГДЕ + | ЭлектронноеПисьмоВходящееПолучателиПисьма.Адрес = &Адрес + | И ЭлектронноеПисьмоВходящееПолучателиПисьма.Контакт = НЕОПРЕДЕЛЕНО + | И ЭлектронноеПисьмоВходящееПолучателиПисьма.Ссылка <> &Письмо + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЭлектронноеПисьмоВходящееПолучателиКопий.Ссылка, + | ЭлектронноеПисьмоВходящееПолучателиКопий.Адрес, + | ЭлектронноеПисьмоВходящееПолучателиКопий.Контакт, + | ""ПолучателиКопий"" + |ИЗ + | Документ.ЭлектронноеПисьмоВходящее.ПолучателиКопий КАК ЭлектронноеПисьмоВходящееПолучателиКопий + |ГДЕ + | ЭлектронноеПисьмоВходящееПолучателиКопий.Адрес = &Адрес + | И ЭлектронноеПисьмоВходящееПолучателиКопий.Контакт = НЕОПРЕДЕЛЕНО + | И ЭлектронноеПисьмоВходящееПолучателиКопий.Ссылка <> &Письмо + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЭлектронноеПисьмоВходящее.Ссылка, + | ЭлектронноеПисьмоВходящее.ОтправительАдрес, + | ЭлектронноеПисьмоВходящее.ОтправительКонтакт, + | ""Отправитель"" + |ИЗ + | Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее + |ГДЕ + | ЭлектронноеПисьмоВходящее.ОтправительАдрес = &Адрес + | И ЭлектронноеПисьмоВходящее.ОтправительКонтакт = НЕОПРЕДЕЛЕНО + | И ЭлектронноеПисьмоВходящее.Ссылка <> &Письмо + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Ссылка, + | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Адрес, + | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Контакт, + | ""ПолучателиПисьма"" + |ИЗ + | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиПисьма КАК ЭлектронноеПисьмоИсходящееПолучателиПисьма + |ГДЕ + | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Адрес = &Адрес + | И ЭлектронноеПисьмоИсходящееПолучателиПисьма.Контакт = НЕОПРЕДЕЛЕНО + | И ЭлектронноеПисьмоИсходящееПолучателиПисьма.Ссылка <> &Письмо + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЭлектронноеПисьмоИсходящееПолучателиКопий.Ссылка, + | ЭлектронноеПисьмоИсходящееПолучателиКопий.Адрес, + | ЭлектронноеПисьмоИсходящееПолучателиКопий.Контакт, + | ""ПолучателиКопий"" + |ИЗ + | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиКопий КАК ЭлектронноеПисьмоИсходящееПолучателиКопий + |ГДЕ + | ЭлектронноеПисьмоИсходящееПолучателиКопий.Адрес = &Адрес + | И ЭлектронноеПисьмоИсходящееПолучателиКопий.Контакт = НЕОПРЕДЕЛЕНО + | И ЭлектронноеПисьмоИсходящееПолучателиКопий.Ссылка <> &Письмо + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Ссылка, + | ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Адрес, + | ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Контакт, + | ""ПолучателиСкрытыхКопий"" + |ИЗ + | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиСкрытыхКопий КАК ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий + |ГДЕ + | ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Адрес = &Адрес + | И ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Контакт = НЕОПРЕДЕЛЕНО + | И ЭлектронноеПисьмоИсходящееПолучателиСкрытыхКопий.Ссылка <> &Письмо + |ИТОГИ ПО + | Ссылка"; + + Запрос.УстановитьПараметр("Адрес",Выборка.Адрес); + Запрос.УстановитьПараметр("Письмо",Письмо); + + ВыборкаПисьма = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + Пока ВыборкаПисьма.Следующий() Цикл + + ПисьмоОбъект = ВыборкаПисьма.Ссылка.ПолучитьОбъект(); + ВыборкаДеталиПисьма = ВыборкаПисьма.Выбрать(); + Пока ВыборкаДеталиПисьма.Следующий() Цикл + Если ВыборкаДеталиПисьма.ИмяТабличнойЧасти = "Отправитель" Тогда + ПисьмоОбъект.ОтправительКонтакт = КонтактОбъект.Ссылка; + Иначе + НайденныеСтроки = + ПисьмоОбъект[ВыборкаДеталиПисьма.ИмяТабличнойЧасти].НайтиСтроки(Новый Структура("Адрес",Выборка.Адрес)); + Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл + Если Не ЗначениеЗаполнено(НайденнаяСтрока.Контакт) Тогда + НайденнаяСтрока.Контакт = КонтактОбъект.Ссылка; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + ПисьмоОбъект.Записать(); + + КонецЦикла; + + Исключение + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Во время обновления контактной информации %1 произошла ошибка + |%2'"), Выборка.Контакт,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, , , + ТекстСообщенияОбОшибке); + + ОтменитьТранзакцию(); + + Продолжить; + КонецПопытки; + + ЗафиксироватьТранзакцию(); + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСнятьПризнакИзменятьЕслиНеобходимо(ТекущиеДанные) + + Если (НЕ ЗначениеЗаполнено(ТекущиеДанные.Адрес) ИЛИ Не ЗначениеЗаполнено(ТекущиеДанные.Контакт) ИЛИ + ВРег(ТекущиеДанные.Адрес) = ВРег(ТекущиеДанные.ТекущийАдресКонтакта)) Тогда + + ТекущиеДанные.Изменять = Ложь; + + Иначе + + ТекущиеДанные.Изменять = Истина; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьАдресаКонтакта(ТекущаяСтрока) + + ТекущиеДанные = ТаблицаКонтактов.НайтиПоИдентификатору(ТекущаяСтрока); + ТаблицаАдресов = ВзаимодействияВызовСервера.ПолучитьАдресаЭлектроннойПочтыКонтакта(ТекущиеДанные.Контакт,Истина); + + Если (Не НеИзменятьПредставлениеПриИзмененииКонтакта) ИЛИ ПустаяСтрока(ТекущиеДанные.Представление) Тогда + ТекущиеДанные.Представление = Строка(ТекущиеДанные.Контакт); + КонецЕсли; + ЗаполнитьТаблицуАдресовИзКоллекции(ТекущиеДанные, ТаблицаАдресов); + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ФайлыВТоме/Form.form b/SSL/src/CommonForms/ФайлыВТоме/Form.form index 58d3d8fb9..11110388a 100644 --- a/SSL/src/CommonForms/ФайлыВТоме/Form.form +++ b/SSL/src/CommonForms/ФайлыВТоме/Form.form @@ -5,7 +5,7 @@ Файлы в томе - ВладелецФайлов + ПредставлениеХранилищаФайлов 9 true true @@ -13,11 +13,11 @@ true - ВладелецФайлов + ПредставлениеХранилищаФайлов - ВладелецФайловРасширеннаяПодсказка - 19 + ПредставлениеХранилищаФайловРасширеннаяПодсказка + 22 Label true true @@ -26,7 +26,7 @@ - ВладелецФайловКонтекстноеМеню + ПредставлениеХранилищаФайловКонтекстноеМеню 10 true @@ -38,7 +38,7 @@ StartChoice - ВладелецФайловНачалоВыбора + ПредставлениеХранилищаФайловНачалоВыбора true true @@ -61,6 +61,119 @@ ФайлыВТомах None + CancelSearch + Change + Copy + CopyToClipboard + Find + + ПутьКФайлу + 18 + true + true + + true + + + ФайлыВТомах.ПутьКФайлу + + + ПутьКФайлуРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ПутьКФайлуКонтекстноеМеню + 19 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Размер + 20 + true + true + + true + + + ФайлыВТомах.Размер + + + РазмерРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + РазмерКонтекстноеМеню + 21 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Автор + 14 + true + true + + true + + + ФайлыВТомах.Автор + + + АвторРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 15 + true + + LabelField + Enter + true + Left + true + + true + true + + ФайлыВТомахКоманднаяПанель 13 @@ -70,34 +183,15 @@ Selection ФайлыВТомахВыбор + + BeforeRowChange + ФайлыВТомахПередНачаломИзменения + ФайлыВТомахСтрокаПоиска - 22 - - ФайлыВТомахСтрокаПоискаРасширеннаяПодсказка - 24 - Label - true - true - - Left - - - - ФайлыВТомахСтрокаПоискаКонтекстноеМеню - 23 - true - - ФайлыВТомах - - true - - - - ФайлыВТомахСостояниеПросмотра 25 - ФайлыВТомахСостояниеПросмотраРасширеннаяПодсказка + ФайлыВТомахСтрокаПоискаРасширеннаяПодсказка 27 Label true @@ -107,10 +201,33 @@ - ФайлыВТомахСостояниеПросмотраКонтекстноеМеню + ФайлыВТомахСтрокаПоискаКонтекстноеМеню 26 true + ФайлыВТомах + + true + + + + ФайлыВТомахСостояниеПросмотра + 28 + + ФайлыВТомахСостояниеПросмотраРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ФайлыВТомахСостояниеПросмотраКонтекстноеМеню + 29 + true + ViewStatusAddition ФайлыВТомах @@ -119,10 +236,10 @@ ФайлыВТомахУправлениеПоиском - 28 + 31 ФайлыВТомахУправлениеПоискомРасширеннаяПодсказка - 30 + 33 Label true true @@ -132,7 +249,7 @@ ФайлыВТомахУправлениеПоискомКонтекстноеМеню - 29 + 32 true SearchControlAddition @@ -143,7 +260,7 @@ ФайлыВТомахРасширеннаяПодсказка - 21 + 24 Label true true @@ -175,7 +292,7 @@ true true - ФайлыВТомах.DefaultPicture + ФайлыВТомах.ИндексКартинки CommonPicture.КоллекцияПиктограммФайлов @@ -198,137 +315,8 @@ ФормаКоманднаяПанель -1 - - ФормаИзменить - 8 - true - true - - true - - - ФормаИзменитьРасширеннаяПодсказка - 14 - Label - true - true - - Left - - - Form.Command.Изменить - Normal - Auto - true - true - UserCmds - Auto - - - ФормаНастройкаСписка - 4 - true - true - - true - - - ФормаНастройкаСпискаРасширеннаяПодсказка - 15 - Label - true - true - - Left - - - 0 - Normal - Auto - true - true - UserCmds - Auto - - - ФормаВывестиСписок - 5 - true - true - - true - - - ФормаВывестиСписокРасширеннаяПодсказка - 16 - Label - true - true - - Left - - - 0 - Normal - Auto - true - true - UserCmds - Auto - - - ФормаИзменитьФорму - 7 - true - true - - true - - - ФормаИзменитьФормуРасширеннаяПодсказка - 17 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - - - ФормаСправка - 6 - true - true - - true - - - ФормаСправкаРасширеннаяПодсказка - 18 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - Left + true OnCreateAtServer @@ -369,10 +357,10 @@ - ИмяОбъектаВладельцаФайла + ИмяХранилищаФайлов <key>ru</key> - <value>Имя объекта владельца файла</value> + <value>Имя хранилища файлов</value> 3 @@ -404,7 +392,7 @@ - ВладелецФайлов + ПредставлениеХранилищаФайлов <key>ru</key> <value>Владелец файлов</value> @@ -437,10 +425,28 @@ <edit> <common>true</common> </edit> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>ФайлыВТомах.Ссылка</segments> + </notDefaultUseAlwaysAttributes> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>ФайлыВТомах.ЭтоПрисоединенныеФайлы</segments> + </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> + <queryText>ВЫБРАТЬ + ХранилищеФайлов.Ссылка КАК Ссылка, + 1 КАК ИндексКартинки, + "" КАК ПутьКФайлу, + 0 КАК Размер, + Значение(Справочник.Пользователи.ПустаяСсылка) КАК Автор, + ЛОЖЬ КАК ЭтоПрисоединенныеФайлы +ИЗ + Справочник.ТомаХраненияФайлов КАК ХранилищеФайлов +</queryText> + <mainTable>Catalog.ТомаХраненияФайлов</mainTable> <dynamicDataRead>true</dynamicDataRead> <autoFillAvailableFields>true</autoFillAvailableFields> + <customQuery>true</customQuery> <autoSaveUserSettings>true</autoSaveUserSettings> <getInvisibleFieldPresentations>true</getInvisibleFieldPresentations> </extInfo> @@ -462,31 +468,6 @@ <common>true</common> </edit> </attributes> - <formCommands> - <name>Изменить</name> - <title> - <key>ru</key> - <value>Изменить</value> - - 1 - - ru - Изменить - - - true - - - StdPicture.Change - - - - Изменить - - - Auto - Auto - Том diff --git a/SSL/src/CommonForms/ФайлыВТоме/Module.bsl b/SSL/src/CommonForms/ФайлыВТоме/Module.bsl index 7a4f2217d..8dda59d3c 100644 --- a/SSL/src/CommonForms/ФайлыВТоме/Module.bsl +++ b/SSL/src/CommonForms/ФайлыВТоме/Module.bsl @@ -1,111 +1,42 @@ -&НаСервере -Процедура УстановитьЗапросДинамическогоСписка(ИмяХранилища) - - ТекстЗапроса = ШаблонЗапроса(); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяСправочника]", ИмяХранилища); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ЭтоПрисоединенныеФайлы]", ?(ИмяХранилища="ВерсииФайлов", "Ложь", "Истина")); - - ФайлыВТомах.ТекстЗапроса = ТекстЗапроса; - ФайлыВТомах.ДинамическоеСчитываниеДанных = Истина; - ФайлыВТомах.Параметры.УстановитьЗначениеПараметра("Том", Том); - ФайлыВТомах.УстановитьОбязательноеИспользование("Ссылка", Истина); - ФайлыВТомах.УстановитьОбязательноеИспользование("ЭтоПрисоединенныеФайлы", Истина); - -КонецПроцедуры - -&НаСервере -Функция ШаблонЗапроса() - - ТекстЗапроса = " - |ВЫБРАТЬ - | ХранилищеФайлов.Ссылка КАК Ссылка, - | ХранилищеФайлов.ИндексКартинки КАК ИндексКартинки, - | ХранилищеФайлов.ПутьКФайлу КАК ПутьКФайлу, - | ХранилищеФайлов.Размер КАК Размер, - | ХранилищеФайлов.Автор КАК Автор, - | ХранилищеФайлов.Том КАК Том, - | [ЭтоПрисоединенныеФайлы] КАК ЭтоПрисоединенныеФайлы - |ИЗ - | Справочник.[ИмяСправочника] КАК ХранилищеФайлов - |ГДЕ - | ХранилищеФайлов.Том = &Том"; - - Возврат ТекстЗапроса; - -КонецФункции - -&НаСервере -Функция ПолучитьИменаХранилищФайлов() - - Для Каждого СправочникОМ Из Метаданные.Справочники Цикл - Если СправочникОМ.Имя = "ВерсииФайлов" - ИЛИ Прав(СправочникОМ.Имя, 19) = "ПрисоединенныеФайлы" Тогда - ИменаХранилищФайлов.Добавить(СправочникОМ.Имя, СправочникОМ.Синоним); - КонецЕсли; - КонецЦикла; - - Возврат ИменаХранилищФайлов; - -КонецФункции - -&НаСервере -Процедура ДобавитьПолеВСписок(Контейнер, ИмяРеквизита, Заголовок = "", Видимость = Истина) - - Элемент = Элементы.Добавить("ФайлыВТомах" + ИмяРеквизита, Тип("ПолеФормы"), Контейнер); - Элемент.ПутьКДанным = "ФайлыВТомах." + ИмяРеквизита; - Элемент.Заголовок = Заголовок; - Элемент.Видимость = Видимость; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Том = Параметры.Том; - // Получаем доступные хранилища файлов - ПолучитьИменаХранилищФайлов(); + // Определение доступных хранилищ файлов. + ЗаполнитьИменаХранилищФайлов(); Если ИменаХранилищФайлов.Количество() = 0 Тогда ВызватьИсключение НСтр("ru = 'Не найдены хранилища файлов.'"); + ИначеЕсли ИменаХранилищФайлов.Количество() = 1 Тогда - Элементы.ВладелецФайлов.Видимость = Ложь; + Элементы.ПредставлениеХранилищаФайлов.Видимость = Ложь; КонецЕсли; - ИмяХранилища = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + ИмяХранилищаФайлов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "ОбщаяФорма.ФайлыВТоме.ОтборПоХранилищам", - Строка(Том.УникальныйИдентификатор()) - ); + Строка(Том.УникальныйИдентификатор()) ); - Если ИмяХранилища = Неопределено - Или ИменаХранилищФайлов.НайтиПоЗначению(ИмяХранилища) = Неопределено Тогда + Если ИмяХранилищаФайлов = "" + ИЛИ ИменаХранилищФайлов.НайтиПоЗначению(ИмяХранилищаФайлов) = Неопределено Тогда ЭлементВерсииФайлов = ИменаХранилищФайлов.НайтиПоЗначению("ВерсииФайлов"); Если ЭлементВерсииФайлов = Неопределено Тогда - ИмяОбъектаВладельцаФайла = ИменаХранилищФайлов[0].Значение; - ВладелецФайлов = ИменаХранилищФайлов[0].Представление; + ИмяХранилищаФайлов = ИменаХранилищФайлов[0].Значение; + ПредставлениеХранилищаФайлов = ИменаХранилищФайлов[0].Представление; Иначе - ИмяОбъектаВладельцаФайла = ЭлементВерсииФайлов.Значение; - ВладелецФайлов = ЭлементВерсииФайлов.Представление; + ИмяХранилищаФайлов = ЭлементВерсииФайлов.Значение; + ПредставлениеХранилищаФайлов = ЭлементВерсииФайлов.Представление; КонецЕсли; - Иначе - ИмяОбъектаВладельцаФайла = ИмяХранилища; - ВладелецФайлов = ИменаХранилищФайлов.НайтиПоЗначению(ИмяХранилища).Представление; + ПредставлениеХранилищаФайлов = ИменаХранилищФайлов.НайтиПоЗначению(ИмяХранилищаФайлов).Представление; КонецЕсли; - УстановитьЗапросДинамическогоСписка(ИмяОбъектаВладельцаФайла); - - Элементы.ФайлыВТомах.КартинкаСтрок = БиблиотекаКартинок.КоллекцияПиктограммФайлов; - Элементы.ФайлыВТомах.ПутьКДаннымКартинкиСтроки = "ФайлыВТомах.ИндексКартинки"; - - ДобавитьПолеВСписок(Элементы.ФайлыВТомах, "ПутьКФайлу", НСтр("ru = 'Путь к файлу'")); - ДобавитьПолеВСписок(Элементы.ФайлыВТомах, "Размер", НСтр("ru = 'Размер'")); - ДобавитьПолеВСписок(Элементы.ФайлыВТомах, "Автор", НСтр("ru = 'Автор'")); + НастроитьДинамическийСписок(ИмяХранилищаФайлов); КонецПроцедуры @@ -113,33 +44,102 @@ Процедура ПриЗакрытии() Если СохранитьНастройкиОтбораХранилищ Тогда - СохранитьНастройкиОтбора(Том, ИмяОбъектаВладельцаФайла); + СохранитьНастройкиОтбора(Том, ИмяХранилищаФайлов); КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ПредставлениеХранилищаФайловНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ТекущееХранилище = ВыбратьИзСписка(ИменаХранилищФайлов, + Элементы.ПредставлениеХранилищаФайлов, + ИменаХранилищФайлов.НайтиПоЗначению(ИмяХранилищаФайлов)); + + Если ТипЗнч(ТекущееХранилище) = Тип("ЭлементСпискаЗначений") Тогда + + ИмяХранилищаФайлов = ТекущееХранилище.Значение; + ПредставлениеХранилищаФайлов = ТекущееХранилище.Представление; + НастроитьДинамическийСписок(ИмяХранилищаФайлов); + СохранитьНастройкиОтбораХранилищ = Истина; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ФайлыВТомах + +&НаКлиенте +Процедура ФайлыВТомахВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ОткрытьКарточкуФайла(); + +КонецПроцедуры + +&НаКлиенте +Процедура ФайлыВТомахПередНачаломИзменения(Элемент, Отказ) + + Отказ = Истина; + + ОткрытьКарточкуФайла(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура НастроитьДинамическийСписок(Знач ИмяХранилища) + + ТекстЗапроса = + "ВЫБРАТЬ + | ХранилищеФайлов.Ссылка КАК Ссылка, + | ХранилищеФайлов.ИндексКартинки КАК ИндексКартинки, + | ХранилищеФайлов.ПутьКФайлу КАК ПутьКФайлу, + | ХранилищеФайлов.Размер КАК Размер, + | ХранилищеФайлов.Автор КАК Автор, + | &ЭтоПрисоединенныеФайлы КАК ЭтоПрисоединенныеФайлы + |ИЗ + | &ИмяСправочника КАК ХранилищеФайлов + |ГДЕ + | ХранилищеФайлов.Том = &Том"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяХранилища); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоПрисоединенныеФайлы", ?( + ВРег(ИмяХранилища) = ВРег("ВерсииФайлов"), "ЛОЖЬ", "ИСТИНА")); + + ФайлыВТомах.ТекстЗапроса = ТекстЗапроса; + ФайлыВТомах.Параметры.УстановитьЗначениеПараметра("Том", Том); + ФайлыВТомах.ОсновнаяТаблица = "Справочник." + ИмяХранилища; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьИменаХранилищФайлов() + + Для каждого Справочник Из Метаданные.Справочники Цикл + + Если Справочник.Имя = "ВерсииФайлов" + ИЛИ Прав(Справочник.Имя, 19) = "ПрисоединенныеФайлы" Тогда + + ИменаХранилищФайлов.Добавить(Справочник.Имя, Справочник.Синоним); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + &НаСервереБезКонтекста Процедура СохранитьНастройкиОтбора(Том, ТекущиеНастройки) ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "ОбщаяФорма.ФайлыВТоме.ОтборПоХранилищам", - Строка(Том.УникальныйИдентификатор()), - ТекущиеНастройки - ); - -КонецПроцедуры - -&НаКлиенте -Процедура Изменить(Команда) - - ОткрытьКарточкуФайла(); - -КонецПроцедуры - -&НаКлиенте -Процедура ФайлыВТомахВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ОткрытьКарточкуФайла(); + "ОбщаяФорма.ФайлыВТоме.ОтборПоХранилищам", + Строка(Том.УникальныйИдентификатор()), + ТекущиеНастройки); КонецПроцедуры @@ -160,18 +160,4 @@ КонецПроцедуры -&НаКлиенте -Процедура ВладелецФайловНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ТекущееХранилище = ИменаХранилищФайлов.НайтиПоЗначению(ИмяОбъектаВладельцаФайла); - - ТекущееХранилище = ВыбратьИзСписка(ИменаХранилищФайлов, Элементы.ВладелецФайлов, ТекущееХранилище); - - Если ТипЗнч(ТекущееХранилище) = Тип("ЭлементСпискаЗначений") Тогда - ИмяОбъектаВладельцаФайла = ТекущееХранилище.Значение; - ВладелецФайлов = ТекущееХранилище.Представление; - УстановитьЗапросДинамическогоСписка(ИмяОбъектаВладельцаФайла); - СохранитьНастройкиОтбораХранилищ = Истина; - КонецЕсли; - -КонецПроцедуры + diff --git a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl index 6c952e473..14d675780 100644 --- a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl @@ -162,9 +162,57 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Блок функций первоначального заполнения и обновления ИБ +// Возвращает структуру, содержащую информацию по адресному объекту +// +// Параметры +// КодАдресногоОбъекта - Строка - номер адресного объекта от 1 до 89 + 99 в формате NN // +// Возвращаемое значение +// Структура, с ключами: КодАдресногоОбъекта, Наименование, Сокращение, Индекс. +// +Функция ИнформацияПоАдресномуОбъекту(КодАдресногоОбъекта) Экспорт + + КлассификаторАдресныхОбъектовXML = РегистрыСведений.АдресныйКлассификатор.ПолучитьМакет("КлассификаторАдресныхОбъектовРоссии").ПолучитьТекст(); + + КлассификаторТаблица = ОбщегоНазначения.ПрочитатьXMLВТаблицу(КлассификаторАдресныхОбъектовXML).Данные; + + Результат = Новый Структура("КодАдресногоОбъекта, Наименование, Сокращение, Индекс"); + + Если КодАдресногоОбъекта = "AL" Тогда + // + Результат.КодАдресногоОбъекта = "AL"; + Результат.Наименование = НСтр("ru = 'Альтернативные названия'"); + Результат.Сокращение = ""; + Результат.Индекс = ""; + // + ИначеЕсли КодАдресногоОбъекта = "SO" Тогда + // + Результат.КодАдресногоОбъекта = "SO"; + Результат.Наименование = НСтр("ru = 'Адресные сокращения'"); + Результат.Сокращение = ""; + Результат.Индекс = ""; + Иначе + Для Каждого АдресныйОбъект Из КлассификаторТаблица Цикл + Если Лев(АдресныйОбъект.Code, 2) = КодАдресногоОбъекта Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Результат.КодАдресногоОбъекта = АдресныйОбъект.Code; + Результат.Наименование = АдресныйОбъект.Name; + Результат.Сокращение = АдресныйОбъект.Socr; + Результат.Индекс = АдресныйОбъект.Index; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Первоначальное заполнение и обновление ИБ // Добавляет в список Обработчики процедуры-обработчики обновления, // необходимые данной подсистеме. @@ -175,13 +223,18 @@ // Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.1.1"; + Обработчик.Процедура = "АдресныйКлассификатор.ЗагрузитьАдресныеОбъектыПервогоУровня"; + + КонецЕсли; + Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.1.1"; - Обработчик.Процедура = "АдресныйКлассификатор.ЗагрузитьАдресныеОбъектыПервогоУровня"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.2.3.1"; + Обработчик.Версия = "2.0.1.11"; Обработчик.Процедура = "АдресныйКлассификатор.РазложитьАдресныеОбъектыПоЭлементам"; + Обработчик.ОбщиеДанные = Истина; КонецПроцедуры @@ -319,124 +372,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Функции для получении информации по адресным объектам - -// Возвращает структуру, содержащую информацию по адресному объекту -// -// Параметры -// КодАдресногоОбъекта - Строка - номер адресного объекта от 1 до 89 + 99 в формате NN -// -// Возвращаемое значение -// Структура, с ключами: КодАдресногоОбъекта, Наименование, Сокращение, Индекс. -// -Функция ИнформацияПоАдресномуОбъекту(КодАдресногоОбъекта) Экспорт - - КлассификаторАдресныхОбъектовXML = РегистрыСведений.АдресныйКлассификатор.ПолучитьМакет("КлассификаторАдресныхОбъектовРоссии").ПолучитьТекст(); - - КлассификаторТаблица = ОбщегоНазначения.ПрочитатьXMLВТаблицу(КлассификаторАдресныхОбъектовXML).Данные; - - Результат = Новый Структура("КодАдресногоОбъекта, Наименование, Сокращение, Индекс"); - - Если КодАдресногоОбъекта = "AL" Тогда - // - Результат.КодАдресногоОбъекта = "AL"; - Результат.Наименование = НСтр("ru = 'Альтернативные названия'"); - Результат.Сокращение = ""; - Результат.Индекс = ""; - // - ИначеЕсли КодАдресногоОбъекта = "SO" Тогда - // - Результат.КодАдресногоОбъекта = "SO"; - Результат.Наименование = НСтр("ru = 'Адресные сокращения'"); - Результат.Сокращение = ""; - Результат.Индекс = ""; - Иначе - Для Каждого АдресныйОбъект Из КлассификаторТаблица Цикл - Если Лев(АдресныйОбъект.Code, 2) = КодАдресногоОбъекта Тогда - Прервать; - КонецЕсли; - КонецЦикла; - - Результат.КодАдресногоОбъекта = АдресныйОбъект.Code; - Результат.Наименование = АдресныйОбъект.Name; - Результат.Сокращение = АдресныйОбъект.Socr; - Результат.Индекс = АдресныйОбъект.Index; - КонецЕсли; - - Возврат Результат; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Аутентификация на пользовательском сайте 1С - -// Получает параметры аутентификации пользователя (логин и пароль) на пользовательском сайте 1с. -// -// Возвращаемое значение: -// Булево - Истина - параметры аутентификации заполнены -// Ложь - хотя бы один из параметров аутентификации не заполнен -// -Функция ПолучитьПараметрыАутентификации(КодПользователя, Пароль) Экспорт - - КодПользователя = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "АутентификацияНаПользовательскомСайте", - "КодПользователя", "" - ); - - Пароль = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "АутентификацияНаПользовательскомСайте", - "Пароль", "" - ); - - Возврат НЕ ПустаяСтрока(КодПользователя) И НЕ ПустаяСтрока(Пароль); - -КонецФункции - -// Сохраняет код пользователя и пароль в системном хранилище настроек ИБ -// -// Параметры -// КодПользователя - Строка - код пользователя, или логин, для доступа к пользовательскому сайту 1с -// Пароль - Строка - пароль -// -Процедура СохранитьПараметрыАутентификации(КодПользователя, Пароль) Экспорт - - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "АутентификацияНаПользовательскомСайте", - "КодПользователя", - КодПользователя - ); - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "АутентификацияНаПользовательскомСайте", - "Пароль", - Пароль - ); - -КонецПроцедуры - -// Обновляет версии адресных сведений. -// -// Параметры: -// НовыеВерсии - Соттветствие - новые версиию -// -Процедура ОбновитьВерсииАдресныхСведений(НовыеВерсии) Экспорт - - Для каждого ОписаниеВерсии Из НовыеВерсии Цикл - АдресныеСведения = ИнформацияПоАдресномуОбъекту(ОписаниеВерсии.Ключ); - УстановитьВерсиюКлассификатора(ОписаниеВерсии.Ключ, - АдресныеСведения.Наименование + " " + АдресныеСведения.Сокращение, - ОписаниеВерсии.Значение); - КонецЦикла; - -КонецПроцедуры - - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции +// Прочие служебные процедуры и функции // Проверяет наличие обновлений адресного классификатора на веб сервере // для тех объектов, которые ранее уже загружались. @@ -553,7 +489,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Экспортные процедуры и функции для работы с версиями сведений по адресным объектам +// Работа с версиями сведений по адресным объектам // Устанавливает версию адресного объекта в регистре // @@ -640,6 +576,70 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Аутентификация на пользовательском сайте 1С + +// Получает параметры аутентификации пользователя (логин и пароль) на пользовательском сайте 1с. +// +// Возвращаемое значение: +// Булево - Истина - параметры аутентификации заполнены +// Ложь - хотя бы один из параметров аутентификации не заполнен +// +Функция ПолучитьПараметрыАутентификации(КодПользователя, Пароль) Экспорт + + КодПользователя = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "АутентификацияНаПользовательскомСайте", + "КодПользователя", "" + ); + + Пароль = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "АутентификацияНаПользовательскомСайте", + "Пароль", "" + ); + + Возврат НЕ ПустаяСтрока(КодПользователя) И НЕ ПустаяСтрока(Пароль); + +КонецФункции + +// Сохраняет код пользователя и пароль в системном хранилище настроек ИБ +// +// Параметры +// КодПользователя - Строка - код пользователя, или логин, для доступа к пользовательскому сайту 1с +// Пароль - Строка - пароль +// +Процедура СохранитьПараметрыАутентификации(КодПользователя, Пароль) Экспорт + + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "АутентификацияНаПользовательскомСайте", + "КодПользователя", + КодПользователя + ); + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "АутентификацияНаПользовательскомСайте", + "Пароль", + Пароль + ); + +КонецПроцедуры + +// Обновляет версии адресных сведений. +// +// Параметры: +// НовыеВерсии - Соттветствие - новые версиию +// +Процедура ОбновитьВерсииАдресныхСведений(НовыеВерсии) Экспорт + + Для каждого ОписаниеВерсии Из НовыеВерсии Цикл + АдресныеСведения = ИнформацияПоАдресномуОбъекту(ОписаниеВерсии.Ключ); + УстановитьВерсиюКлассификатора(ОписаниеВерсии.Ключ, + АдресныеСведения.Наименование + " " + АдресныеСведения.Сокращение, + ОписаниеВерсии.Значение); + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Локальные служебные процедуры и функции diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl index 16240c88d..1638b6a80 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl @@ -1,11 +1,14 @@ //////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ ФУНКЦИЙ ДЛЯ ЗАГРУЗКИ ФАЙЛОВ АДРЕСНОГО КЛАССИФИКАТОРА С ВЕБ СЕРВЕРА, -// А ТАК ЖЕ ФУНКЦИИ ПОДДЕРЖКИ ОБНОВЛЕНИЯ АДРЕСНЫХ СВЕДЕНИЙ -// +// Подсистема "Адресный классификатор". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Вызывает форму загрузки классификатора. Может использоваться как интерфейс. // -Функция ЗагрузитьАдресныйКлассификатор() Экспорт +Процедура ЗагрузитьАдресныйКлассификатор() Экспорт #Если ВебКлиент Тогда Предупреждение(НСтр("ru = 'В Веб-клиенте загрузка адресного классификатора не поддерживается.'")); @@ -13,12 +16,12 @@ ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.ФормаЗагрузкиАдресногоКлассификатора"); #КонецЕсли -КонецФункции +КонецПроцедуры // Проверяет наличие обновлений адресного классификатора на веб сервере // для тех объектов, которые ранее уже загружались. // -Процедура ПроверитьОбновлениеАдресныхОбъектов() Экспорт +Процедура ОпределитьНеобходимостьОбновленияАдресныхОбъектов() Экспорт #Если ВебКлиент Тогда Результат = АдресныйКлассификатор.ПроверитьОбновлениеАдресныхОбъектовСервер(); @@ -39,16 +42,16 @@ АдресныеОбъекты = Новый Массив; - Для Каждого АО Из Результат.Значение Цикл - Если АО.КодАдресногоОбъекта = "AL" Тогда + Для Каждого АдресныйОбъект Из Результат.Значение Цикл + Если АдресныйОбъект.КодАдресногоОбъекта = "AL" Тогда Продолжить; КонецЕсли; - Если АО.ОбновлениеДоступно Тогда + Если АдресныйОбъект.ОбновлениеДоступно Тогда КоличествоОбновлений = КоличествоОбновлений + 1; - АдресныеОбъекты.Добавить(Лев(АО.КодАдресногоОбъекта, 2)); - СписокСтрока = СписокСтрока + Лев(АО.КодАдресногоОбъекта, 2) - + " - " + АО.Наименование - + " " + АО.Сокращение + Символы.ПС; + АдресныеОбъекты.Добавить(Лев(АдресныйОбъект.КодАдресногоОбъекта, 2)); + СписокСтрока = СписокСтрока + Лев(АдресныйОбъект.КодАдресногоОбъекта, 2) + + " - " + АдресныйОбъект.Наименование + + " " + АдресныйОбъект.Сокращение + Символы.ПС; КонецЕсли; КонецЦикла; @@ -62,7 +65,7 @@ #Иначе Текст = Текст + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Приступить к обновлению адресного классификатора на версию от %1?'"), - Формат(Результат.ВерсияПоследнегоОбновленияКЛАДР, "ДФ=dd.MM.yyyy")); + Формат(Результат.ВерсияПоследнегоОбновленияКЛАДР, "ДЛФ=D")); Результат = Вопрос(Текст, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет, "Обновление адресного классификатора"); Если Результат = КодВозвратаДиалога.Да Тогда @@ -71,14 +74,12 @@ КонецЕсли; #КонецЕсли Иначе - Предупреждение( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Обновление не требуется. - |Информационная база содержит актуальные адресные сведения - |при сравнении с версией классификатора от %1.'"), - Формат(Результат.ВерсияПоследнегоОбновленияКЛАДР, "ДФ=dd.MM.yyyy")), - , - НСтр("ru = 'Адресный классификатор'")); + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Обновление не требуется. + |Информационная база содержит актуальные адресные сведения + |при сравнении с версией классификатора от %1.'"), + Формат(Результат.ВерсияПоследнегоОбновленияКЛАДР, "ДЛФ=D")); + Предупреждение(ТекстПредупреждения, , НСтр("ru = 'Адресный классификатор'")); КонецЕсли; Иначе Предупреждение(НСтр("ru = 'Адресный классификатор не заполнен.'"), , НСтр("ru = 'Адресный классификатор'")); @@ -94,9 +95,9 @@ КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ ВСПОМОГАТЕЛЬНЫХ ФУНКЦИИ -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Содержит полный список файлов данных КЛАДР // @@ -116,6 +117,12 @@ // Заменяет в имени файла расширение с ".DBF" на ".EXE" // +// Параметры: +// Строка - Строка - строка с расширением "DBF". +// +// Возвращаемое значение: +// Строка - строка с расширением "EXE". +// Функция ЗаменитьРасширение_DBF_На_EXE(Строка) Возврат СтрЗаменить(Строка, ".DBF", ".EXE"); @@ -124,6 +131,12 @@ // Заменяет в имени файла расширение на c ".DBF" на ".ZIP" // +// Параметры: +// Строка - Строка - строка с расширением "DBF". +// +// Возвращаемое значение: +// Строка - строка с расширением "ZIP". +// Функция ЗаменитьРасширение_DBF_На_ZIP(Строка) Экспорт Возврат СтрЗаменить(Строка, ".DBF", ".ZIP"); @@ -132,6 +145,12 @@ // Заменяет в имени файла расширение на c ".EXE" на ".DBF" // +// Параметры: +// Строка - Строка - строка с расширением "EXE". +// +// Возвращаемое значение: +// Строка - строка с расширением "DBF". +// Функция ЗаменитьРасширение_EXE_На_DBF(Строка) Экспорт Возврат СтрЗаменить(Строка, ".EXE", ".DBF"); @@ -140,16 +159,15 @@ //////////////////////////////////////////////////////////////////////////////// // Блок функций проверки наличия файлов на диске (ИТС) -// // Проверяет существование файлов адресного классификатора на диске ИТС. // // Параметры: -// ПутьКДискуИТС - строка - путь к корню диска ИТС +// ПутьКДискуИТС - строка - путь к корню диска ИТС // // Возвращаемое значение: -// Булево - истина - файлы присутствуют -// ложь - файлы отсутствуют +// Булево - истина - файлы присутствуют +// ложь - файлы отсутствуют // Функция ПроверитьНаличиеФайловНаДискеИТС(знач ПутьКДискуИТС) Экспорт @@ -180,10 +198,10 @@ // Функция возвращает относительный путь на диске ИТС по которому находятся файлы КЛАДР. // // Параметры: -// ПутьКДискуИТС - путь к корневому каталогу диска ИТС. +// ПутьКДискуИТС - путь к корневому каталогу диска ИТС. // // Возвращаемое значение: -// строка - относительный путь на диске ИТС к файлам КЛАДР (самораспаковывающийся архив). +// Строка - относительный путь на диске ИТС к файлам КЛАДР (самораспаковывающийся архив). // если файлы не найдены, возвращается пустая строка. // Функция ПутьККаталогуСДаннымиКЛАДРНаДискеИТС(знач ПутьКДискуИТС) Экспорт @@ -211,6 +229,9 @@ // Содержит полный список файлов данных КЛАДР (в формате самораспаковывающегося архива, EXE) // +// Возвращаемое значение: +// Массив - список файлов данных КЛАДР. +// Функция СписокФайловДанныхНаДискеИТС() Экспорт Список = СписокФайловДанных(); @@ -227,12 +248,12 @@ // Проверяет существование файлов данных в переданном каталоге // // Параметры: -// ПутьККаталогу - строка - путь к каталогу, который необходимо проверить на наличие файлов +// ПутьККаталогу - строка - путь к каталогу, который необходимо проверить на наличие файлов // // Возвращаемое значение: -// Истина - файлы существуют на диске -// Ложь - хотя бы одного файла из необходимого набора файлов -// не существует на диске +// Истина - файлы существуют на диске +// Ложь - хотя бы одного файла из необходимого набора файлов +// не существует на диске // Функция ПроверитьНаличиеФайловДанныхВКаталоге(знач ПутьККаталогу) Экспорт @@ -263,11 +284,11 @@ // ДискИТС - строка - путь к корневой папке диска ИТС // // Возвращаемое значение -// строка - путь к временному каталогу с файлами архива кладр +// Строка - путь к временному каталогу с файлами архива кладр // Функция ПреобразоватьФайлыКЛАДРEXEВZIP(знач ДискИТС) Экспорт - ВременныйКаталог = ОбщегоНазначенияКлиентСервер.ПолучитьИмяКаталога("kladr_files"); + ВременныйКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолучитьИмяВременногоФайла()); СоздатьКаталог(ВременныйКаталог); @@ -305,14 +326,14 @@ // Сжимает файл из поставки КЛАДР в ZIP архив. // // Параметры -// ПутьКDBFФайлам - строка - путь к каталогу с файлами DBF -// ИмяФайла - строка - имя файла, который требуется сжать -// КаталогВременныхФайлов - строка - каталог, в который требуется сохранить файл архива +// ПутьКDBFФайлам - строка - путь к каталогу с файлами DBF +// ИмяФайла - строка - имя файла, который требуется сжать +// КаталогВременныхФайлов - строка - каталог, в который требуется сохранить файл архива // Процедура СжатьФайл(Знач ПутьКDBFФайлам, ИмяФайла, КаталогВременныхФайлов) Экспорт Если Не ЗначениеЗаполнено(КаталогВременныхФайлов) Тогда - КаталогВременныхФайлов = ОбщегоНазначенияКлиентСервер.ПолучитьИмяКаталога("kladr_files"); + КаталогВременныхФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолучитьИмяВременногоФайла()); СоздатьКаталог(КаталогВременныхФайлов); КонецЕсли; @@ -330,22 +351,25 @@ КонецПроцедуры // Загружает файлы КЛАДР региона с Веб сервера +// // Параметры -// АдресныйОбъект - массив - каждая строка идентификатор адресного объекта в формате NN -// ДанныеАутентификации - структура - параметры аутентификации на пользовательском сайте 1С +// АдресныйОбъект - Массив - каждая строка идентификатор адресного объекта в формате NN +// ДанныеАутентификации - Структура - параметры аутентификации на пользовательском сайте 1С // ключ - КодПользователя - значение - пользователь (логин) // ключ - Пароль - значение - пароль пользователя -// Возвращаемое значение: структура, ключ Статус - булево - истина или ложь +// ВременныйКаталог - Строка - путь к временному каталогу. +// +// Возвращаемое значение: Структура, ключ Статус - булево - истина или ложь // ключ значение - строка - если Статус ложь, содержит // пояснение об ошибке. // -Функция ЗагрузитьКЛАДРСВебСервера(знач АдресныйОбъект, знач ДанныеАутентификации, ВремКаталог) Экспорт +Функция ЗагрузитьКЛАДРСВебСервера(знач АдресныйОбъект, знач ДанныеАутентификации, ВременныйКаталог) Экспорт URLСтрока = "http://downloads.v8.1c.ru/tmplts/ITS/KLADR/"; - Если Не ЗначениеЗаполнено(ВремКаталог) Тогда - ВремКаталог = КаталогВременныхФайлов() + "kladr_files"; - СоздатьКаталог(ВремКаталог); + Если Не ЗначениеЗаполнено(ВременныйКаталог) Тогда + ВременныйКаталог = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(ВременныйКаталог); КонецЕсли; ПараметрыЗагрузкиФайла = Новый Структура; @@ -354,9 +378,9 @@ Если АдресныйОбъект = "AL" Тогда // - Файл = Новый Файл(ВремКаталог + "\altnames.zip"); + Файл = Новый Файл(ВременныйКаталог + "\altnames.zip"); Если Не Файл.Существует() Тогда - ПараметрыЗагрузкиФайла.Вставить("ПутьДляСохранения", ВремКаталог + "\altnames.zip"); + ПараметрыЗагрузкиФайла.Вставить("ПутьДляСохранения", ВременныйКаталог + "\altnames.zip"); Результат = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте(URLСтрока + "altnames.zip", ПараметрыЗагрузкиФайла); Если Не Результат.Статус Тогда @@ -366,9 +390,9 @@ // ИначеЕсли АдресныйОбъект = "SO" Тогда // - Файл = Новый Файл(ВремКаталог + "\socrbase.zip"); + Файл = Новый Файл(ВременныйКаталог + "\socrbase.zip"); Если Не Файл.Существует() Тогда - ПараметрыЗагрузкиФайла.Вставить("ПутьДляСохранения", ВремКаталог + "\socrbase.zip"); + ПараметрыЗагрузкиФайла.Вставить("ПутьДляСохранения", ВременныйКаталог + "\socrbase.zip"); Результат = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте(URLСтрока + "socrbase.zip", ПараметрыЗагрузкиФайла); Если Не Результат.Статус Тогда @@ -377,7 +401,7 @@ КонецЕсли; Иначе ИмяZIP = "base" + АдресныйОбъект + ".zip"; - ПараметрыЗагрузкиФайла.Вставить("ПутьДляСохранения", ВремКаталог + "\" + ИмяZIP); + ПараметрыЗагрузкиФайла.Вставить("ПутьДляСохранения", ВременныйКаталог + "\" + ИмяZIP); Результат = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте(URLСтрока + ИмяZIP, ПараметрыЗагрузкиФайла); Если Не Результат.Статус Тогда @@ -392,11 +416,11 @@ // Передает сжатый файл КЛАДР на сервер. На стороне сервера файл распаковывается. // // Параметры -// ПутьКФайламНаКлиенте - строка - путь к каталогу с файлом -// ИмяФайла - строка - имя файла архива, который нужно передать на сервер и распаковывать +// ПутьКФайламНаКлиенте - строка - путь к каталогу с файлом +// ИмяФайла - строка - имя файла архива, который нужно передать на сервер и распаковывать // // Возвращаемое значение -// Строка - путь к каталогу на сервере, в который был распакован файл +// Строка - путь к каталогу на сервере, в который был распакован файл // // Процедура ПередатьФайлНаСервер(знач ПутьКФайламНаКлиенте, знач ИмяФайла, ПутьККаталогуНаСервере) Экспорт @@ -418,9 +442,9 @@ // Передает сжатый файлы КЛАДР на сервер. На стороне сервера файл распаковывается. // // Параметры: -// ПутьКФайламНаКлиенте - строка - путь к каталогу с файлом на клиенте -// ПутьККаталогуНаСервере - строка - путь к каталогу, в который будет распаковываться файл на сервере -// АдресныйОбъект - строка - номер адресного объекта в формате NN. +// ПутьКФайламНаКлиенте - Строка - путь к каталогу с файлом на клиенте +// ПутьККаталогуНаСервере - Строка - путь к каталогу, в который будет распаковываться файл на сервере +// АдресныйОбъект - Строка - номер адресного объекта в формате NN. // Процедура ПередатьФайлыНаСерверПоАдреснымОбъектам(знач ПутьКФайламНаКлиенте, ПутьККаталогуНаСервере, АдресныйОбъект) Экспорт diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl index 2fe35b260..5eac527b1 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl @@ -1,14 +1,21 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Адресный классификатор". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Проверяет наличие обновлений адресного классификатора на веб сервере // для тех объектов, которые ранее уже загружались. // // Возвращаемое значение -// Массив структур, в котором каждая структура имеет формат: -// ключ КодАдресногоОбъекта - строка - код адресного объекта -// ключ Наименование - строка - наименование адресного объекта -// ключ Сокращение - строка - сокращение адресного объекта -// ключ Индекс - строка - индекс адресного объекта -// ключ ОбновлениеДоступно - Булево +// Массив структур, в котором каждая структура имеет формат: +// ключ КодАдресногоОбъекта - строка - код адресного объекта +// ключ Наименование - строка - наименование адресного объекта +// ключ Сокращение - строка - сокращение адресного объекта +// ключ Индекс - строка - индекс адресного объекта +// ключ ОбновлениеДоступно - Булево // Функция ПроверитьОбновлениеАдресныхОбъектов() Экспорт @@ -33,7 +40,7 @@ КонецЦикла; // Подготовка версии последнего обновления КЛАДР на сайте 1С - Результат = ОбщегоНазначенияКлиентСервер.ЗаполнитьРезультат(ДоступныеОбновления); + Результат = ЗаполнитьРезультат(ДоступныеОбновления); // ВерсияПоследнегоОбновленияКЛАДР = ДоступныеВерсии["V0"]; Если ТипЗнч(ВерсияПоследнегоОбновленияКЛАДР) <> Тип("Дата") Тогда @@ -45,7 +52,20 @@ КонецФункции -// Только для внутреннего использования + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции + +// Получает версии доступные на сайте 1С. +// +// Возввращемое значение: +// Структура: +// ключ Статус - Булево - статус наличия доступных версий. +// ключ ДоступныеВерсии - Соответствие - доступные версии. +// Функция ПолучитьВерсииДоступныеНаСайте1С() Экспорт URLСтрока = ПутьКФайлуОписаниюДанныхКЛАДР(); @@ -74,9 +94,30 @@ // Путь к файлу на веб сервере, содержащему информацию по версиям адресных сведений // +// Возвращаемое значение: +// Строка - путь к файлу описания данных КЛАДР. +// Функция ПутьКФайлуОписаниюДанныхКЛАДР() Экспорт Возврат "http://downloads.1c.ru/ipp/ITSREPV/V8Update/Configs/kladr/versions.xml"; КонецФункции +// Формирует структуру с ключами Статус (Истина) и Значение. +// +// Параметры: +// Значение - ПроизвольныйТип - передаваемое значение. +// Статус - Булево - передаваемый статус. +// +// Возвращаемое значение: +// Структура - возвращаемая структура. +// +Функция ЗаполнитьРезультат(знач Значение, знач Статус = Истина) + + Если Статус Тогда + Возврат Новый Структура("Статус, Значение", Истина, Значение); + Иначе + Возврат Новый Структура("Статус, СообщениеОбОшибке", Ложь, Значение); + КонецЕсли; + +КонецФункции diff --git a/SSL/src/CommonModules/Анкетирование/Module.bsl b/SSL/src/CommonModules/Анкетирование/Module.bsl index 262987592..e6ddd0b36 100644 --- a/SSL/src/CommonModules/Анкетирование/Module.bsl +++ b/SSL/src/CommonModules/Анкетирование/Module.bsl @@ -1,316 +1,14 @@ //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Устанавливает параметры отбора в отбор динамического списка -// -// Параметры -// Параметры - Структура - параметры, переданные форме -// ОтборДинамическогоСписка - Отбор - Отбор динамического списка, -// в который устанавливаются параметры отбора. -Процедура УстановитьПараметрыОтбораФормуВыбора(Параметры,ОтборДинамическогоСписка) Экспорт - - Если Параметры.Свойство("МассивОтбора") = Истина Тогда - - Для каждого ЭлементМассиваОтбора Из Параметры.МассивОтбора Цикл - - ЭлементОтбораДанных = ОтборДинамическогоСписка.Элементы.Добавить(ЭлементМассиваОтбора.ТипОтбора); - ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ЭлементМассиваОтбора.ЛевоеЗначение); - ЭлементОтбораДанных.Использование = Истина; - ЭлементОтбораДанных.ВидСравнения = ЭлементМассиваОтбора.ВидСравнения; - ЭлементОтбораДанных.ПравоеЗначение = ЭлементМассиваОтбора.ПравоеЗначение; - - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры // УстановитьПараметрыОтбораФормуВыбора() - -// Функция заполняет структуру значениями перечисления -// -// Параметры -// ИмяПеречисления - строка - имя перечисления -// Включать пустую ссылку - булево - добавлять ли в структуру значение пустой ссылки -// -// Возвращаемое значение: -// СтруктураВозврата - Структура содержащая значения перечисления, -// в том числе пустое значение. -Функция ПолучитьСтруктуруЗначенияПеречисления(ИмяПеречисления, ВключатьПустуюСсылку = ЛОЖЬ) Экспорт - - СтруктураВозврата = Новый Структура; - Для каждого ЭлементМетаданных Из Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления Цикл - СтруктураВозврата.Вставить(ЭлементМетаданных.Имя,Перечисления[ИмяПеречисления][ЭлементМетаданных.Имя]); - КонецЦикла; - - Если ВключатьПустуюСсылку Тогда - СтруктураВозврата.Вставить("ПустаяСсылка",Перечисления[ИмяПеречисления].ПустаяСсылка()); - КонецЕсли; - - Возврат СтруктураВозврата; - -КонецФункции // ПолучитьСтруктуруЗначенияПеречисления() - -// Процедура удаляет старые элементы вопроса шаблона анкеты. -Процедура УдалитьВопросыШаблонаАнкеты(СсылкаВладелец) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - //удалим старые вопросы шаблона - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ВопросыШаблонаАнкеты.Ссылка - |ИЗ - | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты - |ГДЕ - | ВопросыШаблонаАнкеты.Владелец = &Владелец"; - - Запрос.УстановитьПараметр("Владелец",СсылкаВладелец); - - РезультатЗапроса = Запрос.Выполнить(); - Если Не РезультатЗапроса.Пустой() Тогда - - МассивСсылок = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка"); - Для каждого ЭлементМассива Из МассивСсылок Цикл - - СправочникОбъект = ЭлементМассива.ПолучитьОбъект(); - Если (НЕ СправочникОбъект = Неопределено) Тогда - СправочникОбъект.Удалить(); - КонецЕсли; - - КонецЦикла; - КонецЕсли; - - УстановитьПривилегированныйРежим(Ложь); - -КонецПроцедуры // УдалитьВопросыШаблонаАнкеты() - -// Возвращает код картинки в зависимости от типа вопроса и принадлежности к разделу. -// -// Параметры -// ЭтоРаздел - Булево - признак раздела -// ТипВопроса - Перечисление.ТипыВопросовШаблонаАнкеты -// -// Возвращаемое значение: -// Число - код картинки для отображения в дереве -// -Функция ПолучитьКодКартинкиШаблонаАнкеты(ЭтоРаздел,ТипВопроса = Неопределено) Экспорт - - Если ЭтоРаздел Тогда - Возврат 1; - ИначеЕсли ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.Простой Тогда - Возврат 2; - ИначеЕсли ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.ВопросСУсловием Тогда - Возврат 4; - ИначеЕсли ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.Табличный Тогда - Возврат 3; - Иначе - Возврат 0; - КонецЕсли; - -КонецФункции - -// Получает представления элементарный вопросов табличных вопросов -// и заполняет соответствие ПредставленияВопросов, из которого потом будут получаться представления -// вопросов при выводе табличных вопросов. -// -// Параметры: -// ШаблонАнкеты - СправочникСсылка.ШаблоныАнкет, по которому проводился опрос -// -// ВозвращаемоеЗначение: -// Соответствие - в качестве ключа выступает ссылка на вопрос, в качестве значения его формулировка -// -Функция ПолучитьПредставленияЭлементарныхВопросовТабличногоВопроса(ШаблонАнкеты) Экспорт - - ПредставленияВопросов = Новый Соответствие; - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ВопросыШаблонаАнкеты.Ссылка - |ПОМЕСТИТЬ ВопросыШаблона - |ИЗ - | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты - |ГДЕ - | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ВопросыШаблонаАнкетыСоставТабличногоВопроса.ЭлементарныйВопрос - |ПОМЕСТИТЬ ЭлементарныеВопросы - |ИЗ - | Справочник.ВопросыШаблонаАнкеты.СоставТабличногоВопроса КАК ВопросыШаблонаАнкетыСоставТабличногоВопроса - |ГДЕ - | ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка В - | (ВЫБРАТЬ - | ВопросыШаблона.Ссылка - | ИЗ - | ВопросыШаблона КАК ВопросыШаблона) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВопросыДляАнкетирования.Ссылка, - | ВопросыДляАнкетирования.Формулировка, - | ВопросыДляАнкетирования.АгрегироватьСуммуВОтчетах - |ИЗ - | ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования - |ГДЕ - | ВопросыДляАнкетирования.Ссылка В - | (ВЫБРАТЬ - | ЭлементарныеВопросы.ЭлементарныйВопрос - | ИЗ - | ЭлементарныеВопросы КАК ЭлементарныеВопросы)"; - - Запрос.УстановитьПараметр("ШаблонАнкеты",ШаблонАнкеты); - - Результат = Запрос.Выполнить(); - Если НЕ Результат.Пустой() Тогда - - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - ПредставленияВопросов.Вставить(Выборка.Ссылка,Новый Структура("Формулировка,АгрегироватьСуммуВОтчетах", Выборка.Формулировка,Выборка.АгрегироватьСуммуВОтчетах)); - КонецЦикла; - - КонецЕсли; - - Возврат ПредставленияВопросов; - -КонецФункции - -// Получает таблицу доступных на данный момент респонденту анкет -// -// Параметры -// Респондент - СправочникСсылка - респондент для которого получается список анкет -// -// Возвращаемое значение: -// ТаблицаЗначений - таблица, содержащая информацию о доступных респонденту анкетах. -// Неопределено - в случае если для респондента нет достунпых анкет. -// -Функция ПолучитьТаблицуДоступныхРеспондентуАнкет(Респондент) Экспорт - - Если ЗначениеЗаполнено(Респондент) Тогда - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | НазначениеОпросов.Ссылка, - | НазначениеОпросов.СвободныйОпрос, - | НазначениеОпросов.ДатаОкончания, - | НазначениеОпросов.Наименование - |ПОМЕСТИТЬ ДействующиеОпросы - |ИЗ - | Документ.НазначениеОпросов КАК НазначениеОпросов - |ГДЕ - | НазначениеОпросов.Проведен - | И (НЕ НазначениеОпросов.ПометкаУдаления) - | И (НазначениеОпросов.ДатаНачала = &ПустаяДата - | ИЛИ НАЧАЛОПЕРИОДА(НазначениеОпросов.ДатаНачала, ДЕНЬ) < &ТекущаяДата) - | И НазначениеОпросов.ТипРеспондентов = &ТипРеспондентов - | И (НазначениеОпросов.ДатаОкончания = &ПустаяДата - | ИЛИ КОНЕЦПЕРИОДА(НазначениеОпросов.ДатаОкончания, ДЕНЬ) > &ТекущаяДата) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ДействующиеОпросы.Ссылка, - | ДействующиеОпросы.ДатаОкончания, - | ДействующиеОпросы.Наименование - |ПОМЕСТИТЬ ДействующиеОпросыОтборПоРеспонденту - |ИЗ - | ДействующиеОпросы КАК ДействующиеОпросы - |ГДЕ - | ДействующиеОпросы.СвободныйОпрос - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | НазначениеОпросовРеспонденты.Ссылка, - | НазначениеОпросов.ДатаОкончания, - | НазначениеОпросов.Наименование - |ИЗ - | Документ.НазначениеОпросов.Респонденты КАК НазначениеОпросовРеспонденты - | ЛЕВОЕ СОЕДИНЕНИЕ Документ.НазначениеОпросов КАК НазначениеОпросов - | ПО НазначениеОпросовРеспонденты.Ссылка = НазначениеОпросов.Ссылка - |ГДЕ - | НазначениеОпросовРеспонденты.Респондент = &Респондент - | И НазначениеОпросовРеспонденты.Ссылка В - | (ВЫБРАТЬ - | ДействующиеОпросы.Ссылка - | ИЗ - | ДействующиеОпросы КАК ДействующиеОпросы - | ГДЕ - | (НЕ ДействующиеОпросы.СвободныйОпрос)) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВЫБОР - | КОГДА АнкетыПоДействующимЗапросам.Ссылка ЕСТЬ NULL - | ТОГДА ""Опросы"" - | ИНАЧЕ ""Анкеты"" - | КОНЕЦ КАК Статус, - | ВЫБОР - | КОГДА АнкетыПоДействующимЗапросам.Ссылка ЕСТЬ NULL - | ТОГДА ДействующиеОпросыОтборПоРеспонденту.Ссылка - | ИНАЧЕ АнкетыПоДействующимЗапросам.Ссылка - | КОНЕЦ КАК АнкетаОпрос, - | ДействующиеОпросыОтборПоРеспонденту.ДатаОкончания КАК ДатаОкончания, - | ДействующиеОпросыОтборПоРеспонденту.Наименование, - | АнкетыПоДействующимЗапросам.Дата КАК ДатаАнкеты, - | ЕСТЬNULL(АнкетыПоДействующимЗапросам.Проведен, ЛОЖЬ) КАК Проведен - |ПОМЕСТИТЬ НеотвеченныеОпросыСохраненныеАнкеты - |ИЗ - | ДействующиеОпросыОтборПоРеспонденту КАК ДействующиеОпросыОтборПоРеспонденту - | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | Анкета.Ссылка КАК Ссылка, - | Анкета.ДатаРедактирования КАК Дата, - | Анкета.Проведен КАК Проведен, - | Анкета.Опрос КАК Опрос - | ИЗ - | Документ.Анкета КАК Анкета - | ГДЕ - | Анкета.Опрос В - | (ВЫБРАТЬ - | ДействующиеОпросыОтборПоРеспонденту.Ссылка - | ИЗ - | ДействующиеОпросыОтборПоРеспонденту КАК ДействующиеОпросыОтборПоРеспонденту) - | И Анкета.Респондент = &Респондент - | И (НЕ Анкета.ПометкаУдаления)) КАК АнкетыПоДействующимЗапросам - | ПО ДействующиеОпросыОтборПоРеспонденту.Ссылка = АнкетыПоДействующимЗапросам.Опрос - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | НеотвеченныеОпросыСохраненныеАнкеты.Статус, - | НеотвеченныеОпросыСохраненныеАнкеты.АнкетаОпрос, - | НеотвеченныеОпросыСохраненныеАнкеты.ДатаОкончания, - | НеотвеченныеОпросыСохраненныеАнкеты.Наименование, - | НеотвеченныеОпросыСохраненныеАнкеты.ДатаАнкеты - |ИЗ - | НеотвеченныеОпросыСохраненныеАнкеты КАК НеотвеченныеОпросыСохраненныеАнкеты - |ГДЕ - | (НЕ НеотвеченныеОпросыСохраненныеАнкеты.Проведен)"; - - Запрос.УстановитьПараметр("Респондент", Респондент); - Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); - Запрос.УстановитьПараметр("ПустаяДата" ,Дата(1, 1, 1)); - Запрос.УстановитьПараметр("ТипРеспондентов", Справочники[Респондент.Метаданные().Имя].ПустаяСсылка()); - - Результат = Запрос.Выполнить(); - - Если НЕ Результат.Пустой() Тогда - - Возврат Результат.Выгрузить(); - - КонецЕсли; - - КонецЕсли; - - Возврат Неопределено; - -КонецФункции +// Подсистема "Анкетирование" +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ЗАПОЛНЕНИЕ ДЕРЕВА АНКЕТЫ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Заполнение дерева анкеты //Обновляет превью табличного вопроса Процедура ОбновитьПревьюТабличныйВопрос(Вопросы,Ответы,ТипТабличногоВопроса,Форма,ИмяТаблицыПревью,Ключ) Экспорт @@ -577,7 +275,7 @@ НоваяСтрока.ЭлементарныйВопрос = ?(Выборка.ЭтоРаздел,Выборка.Наименование,?(Выборка.ТипВопроса <> Перечисления.ТипыВопросовШаблонаАнкеты.Табличный,Выборка.ЭлементарныйВопрос,Выборка.Формулировка)); НоваяСтрока.Обязательный = ?(Выборка.ЭтоРаздел,Неопределено,?(Выборка.ТипВопроса <> Перечисления.ТипыВопросовШаблонаАнкеты.Табличный,Выборка.Обязательный,Неопределено)); НоваяСтрока.Формулировка = ?(Выборка.ЭтоРаздел,Выборка.Наименование,Выборка.Формулировка); - НоваяСтрока.Заметки = Выборка.Заметки; + НоваяСтрока.Заметки = Выборка.Заметки; Иначе НоваяСтрока.Формулировка = Выборка.Формулировка; НоваяСтрока.ЭлементарныйВопрос = Выборка.ЭлементарныйВопрос; @@ -607,7 +305,7 @@ КонецЦикла; -КонецПроцедуры // ДобавитьСтрокиДереваАнкеты() +КонецПроцедуры //Выполняет запрос по шаблона анкеты, для формирования дерева анкеты в формах // @@ -616,6 +314,7 @@ // // Возвращаемое значение // РезультатЗапроса - результат запроса по шаблону анкеты +// Функция ВыполнитьЗапросПоВопросамШаблонаАнкеты(ШаблонАнкеты) Запрос = Новый Запрос; @@ -772,7 +471,7 @@ ЭлементСтраница = Форма.Элементы.Добавить("Страница_" + ИмяТаблицы,Тип("ГруппаФормы"),Форма.Элементы.СтраницыИнформация); ЭлементСтраница.Вид = ВидГруппыФормы.Страница; - ЭлементСтраница.ОтображатьЗаголовок = Ложь; + ЭлементСтраница.ОтображатьЗаголовок = Ложь; ЭлементСтраница.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; Элемент = Форма.Элементы.Добавить("Формулировка_" + ИмяТаблицы,Тип("ПолеФормы"),ЭлементСтраница); @@ -847,7 +546,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ФОРМИРОВАНИЕ ФОРМЫ ЗАПОЛНЕНИЯ АНКЕТЫ +// Формирование формы заполнения анкеты // Выполняет построение формы, согласно раздела шаблона анкеты // @@ -862,7 +561,7 @@ Если ТекущиеДанныеДеревоРазделов.ТипСтроки = "Раздел" Тогда - Форма.Элементы.НадписьВступление.Заголовок = "Раздел " + ТекущиеДанныеДеревоРазделов.Формулировка; + Форма.Элементы.НадписьВступление.Заголовок = НСтр("ru = 'Раздел '") + ТекущиеДанныеДеревоРазделов.Формулировка; Форма.Элементы.НадписьВступление.ЦветТекста = WebЦвета.НейтральноКоричневый; Форма.Элементы.НадписьВступление.Шрифт = Новый Шрифт(, 8, Истина, , , ); @@ -901,7 +600,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СОЗДАНИЕ РЕКВИЗИТОВ ФОРМЫ ЗАПОЛНЕНИЯ АНКЕТЫ +// Создание реквизитов формы заполеннеия анкеты // Формирует массив добавляемых реквизитов // @@ -1089,7 +788,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СОЗДАНИЕ ЭЛЕМЕНТОВ ФОРМЫ ЗАПОЛНЕНИЯ АНКЕТЫ +// Создание элементов формы заполнения анкеты // Формирует элементы формы заполнения анкеты для выбранного раздела Процедура СформироватьЭлементыФормыДляРаздела(Форма) @@ -1224,7 +923,7 @@ ДобавитьЭлементыТабличныйВопрос(СтрокаТаблицы,ЭлементГруппаВопроса,Форма); - Иначе + Иначе Если СтрокаТаблицы.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Строка Тогда @@ -1420,14 +1119,14 @@ Иначе Продолжить; КонецЕсли; - КонецЕсли; + КонецЕсли; Элемент = Форма.Элементы.Добавить(ИмяКолонки, Тип("ПолеФормы"), Форма.Элементы[ИмяТаблицы]); Элемент.РежимРедактирования = РежимРедактированияКолонки.Непосредственно; Если ТаблицаВопроса.Колонки[ИмяКолонки].ТипЗначения = Новый ОписаниеТипов("Булево") Тогда - Элемент.Вид = ВидПоляФормы.ПолеФлажка; - Иначе + Элемент.Вид = ВидПоляФормы.ПолеФлажка; + Иначе Элемент.Вид = ВидПоляФормы.ПолеВвода; //Установка списка выборка для тех колонок, тип ответа которых "Варианты ответов анкет" и ограничения для числовых вопросов @@ -1502,7 +1201,7 @@ КонецЦикла; - //Заполнение строк таблицы. + //Заполнение строк таблицы. Если ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках Тогда МассивОтветы = СтрокаТаблицы.ПредопределенныеОтветы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",СтрокаТаблицы.СоставТабличногоВопроса[0].ЭлементарныйВопрос)); @@ -1518,8 +1217,8 @@ Для инд = 2 По СтрокаТаблицы.СоставТабличногоВопроса.Количество() Цикл - НоваяСтрока = ТаблицаВопроса.Добавить(); - НоваяСтрока[ИмяТаблицы + "_Колонка_1"] = СтрокаТаблицы.СоставТабличногоВопроса[инд-1].ЭлементарныйВопрос; + НоваяСтрока = ТаблицаВопроса.Добавить(); + НоваяСтрока[ИмяТаблицы + "_Колонка_1"] = СтрокаТаблицы.СоставТабличногоВопроса[инд-1].ЭлементарныйВопрос; КонецЦикла; @@ -1547,7 +1246,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ ФОРМЫ ЗАПОЛНЕНИЯ АНКЕТЫ +// Вспомогательные процедуры формы заполнения анкеты //Получает возможные варианты ответа на вопрос // @@ -1570,7 +1269,7 @@ // СтрокаТаблицы - ДанныеФормыЭлементКоллекции - строка таблицы вопросов раздела // // Возвращаемое значение: -// Строка - строка содержащая полный код и формулировку +// Строка - строка содержащая полный код и формулировку // Функция ПолныйКодНаименование(СтрокаТаблицы) @@ -1587,7 +1286,7 @@ НайденныеСтроки = Форма.ТаблицаВопросовРаздела.НайтиСтроки(Новый Структура("ТипОтвета",Перечисления.ТипыОтветовНаВопрос.ОдинВариантИз)); - Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл + Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл Если НЕ ЗначениеЗаполнено(Форма[АнкетированиеКлиентСервер.ПолучитьИмяВопроса(НайденнаяСтрока.КлючСтроки)]) Тогда ВариантыОтветовНаВопрос = ПолучитьВариантыОтветовНаВопрос(НайденнаяСтрока.ЭлементарныйВопрос,Форма); @@ -1605,12 +1304,12 @@ // // Параметры // Элемент - ПолеФормы - элемент, для которого устанавливаются параметры -// +// Процедура УстановитьПараметрыЭлементаЯчейкаТекст(Элемент) Элемент.КнопкаВыбора = Истина; Элемент.МногострочныйРежим = Истина; - Элемент.УстановитьДействие("НачалоВыбора","Подключаемый_НачалоВыбораТекстовыхЯчеекТабличныхВопросов"); + Элемент.УстановитьДействие("НачалоВыбора","Подключаемый_НачалоВыбораТекстовыхЯчеекТабличныхВопросов"); КонецПроцедуры @@ -1735,127 +1434,128 @@ КонецПроцедуры // Получает необходимую информацию по разделу анкеты: вопросы раздела, - //необходимые реквизиты вопросов, варианты ответов. Помещает полученную информацию в - // реквизиты формы - // - // Параметры - // Форма - УправляемаяФорма - форма для которой получается информация - // ШаблонАнкеты - СправочникСсылка.ШаблонАнкеты - шаблон анкеты, по которому получается информация - // Раздел - СправочникСсылка.ВопросыШаблонаАнкеты - раздел анкеты, по которому получается информация - // ПолныйКодРаздела - Строка - Полный код раздела, по которому получается информация - // -Процедура ПолучитьИнформациюПоВопросамАнкеты(Форма, ШаблонАнкеты, Раздел,ПолныйКодРаздела) - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ВопросыДляАнкетирования.Ссылка КАК Вопрос, - | ВопросыДляАнкетирования.Формулировка КАК Формулировка, - | ВопросыДляАнкетирования.ТипЗначения КАК Тип, - | ВопросыДляАнкетирования.ТипОтвета КАК ТипОтвета, - | ВопросыДляАнкетирования.МинимальноеЗначение КАК МинимальноеЗначение, - | ВопросыДляАнкетирования.МаксимальноеЗначение КАК МаксимальноеЗначение - |ИЗ - | ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования - |ГДЕ - | ВопросыДляАнкетирования.Ссылка В - | (ВЫБРАТЬ РАЗЛИЧНЫЕ - | ВопросыШаблонаАнкеты.ЭлементарныйВопрос - | ИЗ - | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты - | ГДЕ - | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты - | И ВопросыШаблонаАнкеты.Родитель = &Раздел - | - | ОБЪЕДИНИТЬ ВСЕ - | - | ВЫБРАТЬ - | ВопросыШаблонаАнкетыСоставТабличногоВопроса.ЭлементарныйВопрос - | ИЗ - | Справочник.ВопросыШаблонаАнкеты.СоставТабличногоВопроса КАК ВопросыШаблонаАнкетыСоставТабличногоВопроса - | ГДЕ - | ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка.Владелец = &ШаблонАнкеты - | И ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка.Родитель = &Раздел) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВопросыШаблонаАнкеты.Ссылка КАК ВопросШаблона, - | ВопросыШаблонаАнкеты.Родитель КАК Родитель, - | ВопросыШаблонаАнкеты.Наименование КАК Наименование, - | ВопросыШаблонаАнкеты.Обязательный КАК Обязательный, - | ВопросыШаблонаАнкеты.ТипВопроса КАК ТипВопроса, - | ВопросыШаблонаАнкеты.ТипТабличногоВопроса КАК ТипТабличногоВопроса, - | ВопросыШаблонаАнкеты.ЭлементарныйВопрос КАК ЭлементарныйВопрос, - | ""Вопрос"" КАК ТипСтроки, - | ВопросыШаблонаАнкеты.РодительВопрос КАК РодительВопрос, - | ВопросыШаблонаАнкеты.СоставТабличногоВопроса.( - | НомерСтроки, - | ЭлементарныйВопрос - | ), - | ВопросыШаблонаАнкеты.ПредопределенныеОтветы.( - | НомерСтроки, - | ЭлементарныйВопрос, - | Ответ - | ), - | ЕСТЬNULL(ВопросыДляАнкетирования.Длина, 0) КАК Длина, - | ВопросыДляАнкетирования.ТипЗначения КАК ТипЗначения, - | ЕСТЬNULL(ВопросыДляАнкетирования.ТребуетсяКомментарий, ЛОЖЬ) КАК ТребуетсяКомментарий, - | ЕСТЬNULL(ВопросыДляАнкетирования.ПояснениеКомментария, """") КАК ПояснениеКомментария, - | ЕСТЬNULL(ВопросыДляАнкетирования.МинимальноеЗначение, 0) КАК МинимальноеЗначение, - | ЕСТЬNULL(ВопросыДляАнкетирования.МаксимальноеЗначение, 0) КАК МаксимальноеЗначение, - | ЕСТЬNULL(ВопросыДляАнкетирования.ТипОтвета, ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ПустаяСсылка)) КАК ТипОтвета, - | ЕСТЬNULL(ВопросыШаблонаАнкеты.Формулировка, """") КАК Формулировка, - | ЕСТЬNULL(ВопросыДляАнкетирования.Точность, 0) КАК Точность, - | ВопросыШаблонаАнкеты.ВысотаЭлементаФормулировкиВопроса КАК ВысотаЭлементаФормулировкиВопроса - |ИЗ - | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты - | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования - | ПО ВопросыШаблонаАнкеты.ЭлементарныйВопрос = ВопросыДляАнкетирования.Ссылка - |ГДЕ - | (НЕ ВопросыШаблонаАнкеты.ПометкаУдаления) - | И ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты - | И ВопросыШаблонаАнкеты.Родитель = &Раздел - | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа) - | - |УПОРЯДОЧИТЬ ПО - | ВопросыШаблонаАнкеты.Код - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВариантыОтветовАнкет.Владелец КАК Вопрос, - | ВариантыОтветовАнкет.Ссылка КАК Ответ, - | ВариантыОтветовАнкет.Представление, - | ВариантыОтветовАнкет.ТребуетОткрытогоОтвета - |ИЗ - | Справочник.ВариантыОтветовАнкет КАК ВариантыОтветовАнкет - |ГДЕ - | ВариантыОтветовАнкет.Владелец В - | (ВЫБРАТЬ - | ВопросыШаблонаАнкеты.ЭлементарныйВопрос - | ИЗ - | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты - | ГДЕ - | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты - | И ВопросыШаблонаАнкеты.Родитель = &Раздел - | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа) - | И (НЕ ВопросыШаблонаАнкеты.ПометкаУдаления) - | - | ОБЪЕДИНИТЬ ВСЕ - | - | ВЫБРАТЬ - | ВопросыШаблонаАнкетыСоставТабличногоВопроса.ЭлементарныйВопрос - | ИЗ - | Справочник.ВопросыШаблонаАнкеты.СоставТабличногоВопроса КАК ВопросыШаблонаАнкетыСоставТабличногоВопроса - | ГДЕ - | ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка.Владелец = &ШаблонАнкеты - | И ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка.Родитель = &Раздел - | И (НЕ ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка.ЭтоГруппа) - | И (НЕ ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка.ПометкаУдаления)) - | И (НЕ ВариантыОтветовАнкет.ПометкаУдаления) - | - |УПОРЯДОЧИТЬ ПО - | ВариантыОтветовАнкет.РеквизитДопУпорядочивания"; +//необходимые реквизиты вопросов, варианты ответов. Помещает полученную информацию в +// реквизиты формы +// +// Параметры +// Форма - УправляемаяФорма - форма для которой получается информация +// ШаблонАнкеты - СправочникСсылка.ШаблонАнкеты - шаблон анкеты, по которому получается информация +// Раздел - СправочникСсылка.ВопросыШаблонаАнкеты - раздел анкеты, по которому получается информация +// ПолныйКодРаздела - Строка - Полный код раздела, по которому получается информация +// +Процедура ПолучитьИнформациюПоВопросамАнкеты(Форма, ШаблонАнкеты, Раздел,ПолныйКодРаздела) + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ВопросыДляАнкетирования.Ссылка КАК Вопрос, + | ВопросыДляАнкетирования.Формулировка КАК Формулировка, + | ВопросыДляАнкетирования.ТипЗначения КАК Тип, + | ВопросыДляАнкетирования.ТипОтвета КАК ТипОтвета, + | ВопросыДляАнкетирования.МинимальноеЗначение КАК МинимальноеЗначение, + | ВопросыДляАнкетирования.МаксимальноеЗначение КАК МаксимальноеЗначение + |ИЗ + | ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования + |ГДЕ + | ВопросыДляАнкетирования.Ссылка В + | (ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВопросыШаблонаАнкеты.ЭлементарныйВопрос + | ИЗ + | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты + | ГДЕ + | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты + | И ВопросыШаблонаАнкеты.Родитель = &Раздел + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ВопросыШаблонаАнкетыСоставТабличногоВопроса.ЭлементарныйВопрос + | ИЗ + | Справочник.ВопросыШаблонаАнкеты.СоставТабличногоВопроса КАК ВопросыШаблонаАнкетыСоставТабличногоВопроса + | ГДЕ + | ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка.Владелец = &ШаблонАнкеты + | И ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка.Родитель = &Раздел) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВопросыШаблонаАнкеты.Ссылка КАК ВопросШаблона, + | ВопросыШаблонаАнкеты.Родитель КАК Родитель, + | ВопросыШаблонаАнкеты.Наименование КАК Наименование, + | ВопросыШаблонаАнкеты.Обязательный КАК Обязательный, + | ВопросыШаблонаАнкеты.ТипВопроса КАК ТипВопроса, + | ВопросыШаблонаАнкеты.ТипТабличногоВопроса КАК ТипТабличногоВопроса, + | ВопросыШаблонаАнкеты.ЭлементарныйВопрос КАК ЭлементарныйВопрос, + | ""Вопрос"" КАК ТипСтроки, + | ВопросыШаблонаАнкеты.РодительВопрос КАК РодительВопрос, + | ВопросыШаблонаАнкеты.СоставТабличногоВопроса.( + | НомерСтроки, + | ЭлементарныйВопрос + | ), + | ВопросыШаблонаАнкеты.ПредопределенныеОтветы.( + | НомерСтроки, + | ЭлементарныйВопрос, + | Ответ + | ), + | ЕСТЬNULL(ВопросыДляАнкетирования.Длина, 0) КАК Длина, + | ВопросыДляАнкетирования.ТипЗначения КАК ТипЗначения, + | ЕСТЬNULL(ВопросыДляАнкетирования.ТребуетсяКомментарий, ЛОЖЬ) КАК ТребуетсяКомментарий, + | ЕСТЬNULL(ВопросыДляАнкетирования.ПояснениеКомментария, """") КАК ПояснениеКомментария, + | ЕСТЬNULL(ВопросыДляАнкетирования.МинимальноеЗначение, 0) КАК МинимальноеЗначение, + | ЕСТЬNULL(ВопросыДляАнкетирования.МаксимальноеЗначение, 0) КАК МаксимальноеЗначение, + | ЕСТЬNULL(ВопросыДляАнкетирования.ТипОтвета, ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ПустаяСсылка)) КАК ТипОтвета, + | ЕСТЬNULL(ВопросыШаблонаАнкеты.Формулировка, """") КАК Формулировка, + | ЕСТЬNULL(ВопросыДляАнкетирования.Точность, 0) КАК Точность, + | ВопросыШаблонаАнкеты.ВысотаЭлементаФормулировкиВопроса КАК ВысотаЭлементаФормулировкиВопроса + |ИЗ + | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования + | ПО ВопросыШаблонаАнкеты.ЭлементарныйВопрос = ВопросыДляАнкетирования.Ссылка + |ГДЕ + | (НЕ ВопросыШаблонаАнкеты.ПометкаУдаления) + | И ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты + | И ВопросыШаблонаАнкеты.Родитель = &Раздел + | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа) + | + |УПОРЯДОЧИТЬ ПО + | ВопросыШаблонаАнкеты.Код + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВариантыОтветовАнкет.Владелец КАК Вопрос, + | ВариантыОтветовАнкет.Ссылка КАК Ответ, + | ВариантыОтветовАнкет.Представление, + | ВариантыОтветовАнкет.ТребуетОткрытогоОтвета + |ИЗ + | Справочник.ВариантыОтветовАнкет КАК ВариантыОтветовАнкет + |ГДЕ + | ВариантыОтветовАнкет.Владелец В + | (ВЫБРАТЬ + | ВопросыШаблонаАнкеты.ЭлементарныйВопрос + | ИЗ + | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты + | ГДЕ + | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты + | И ВопросыШаблонаАнкеты.Родитель = &Раздел + | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа) + | И (НЕ ВопросыШаблонаАнкеты.ПометкаУдаления) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ВопросыШаблонаАнкетыСоставТабличногоВопроса.ЭлементарныйВопрос + | ИЗ + | Справочник.ВопросыШаблонаАнкеты.СоставТабличногоВопроса КАК ВопросыШаблонаАнкетыСоставТабличногоВопроса + | ГДЕ + | ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка.Владелец = &ШаблонАнкеты + | И ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка.Родитель = &Раздел + | И (НЕ ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка.ЭтоГруппа) + | И (НЕ ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка.ПометкаУдаления)) + | И (НЕ ВариантыОтветовАнкет.ПометкаУдаления) + | + |УПОРЯДОЧИТЬ ПО + | ВариантыОтветовАнкет.РеквизитДопУпорядочивания"; Запрос.УстановитьПараметр("ШаблонАнкеты",ШаблонАнкеты); Запрос.УстановитьПараметр("Раздел",Раздел); @@ -1891,61 +1591,62 @@ // Формирует таблицу подчинения вопросов // // Параметры -// Форма - УправляемаяФорма - форма для которой формируется таблица подчинения +// Форма - УправляемаяФорма - форма для которой формируется таблица подчинения // Процедура СформироватьТаблицуПодчиненияВопросов(Форма) Экспорт Форма.ПодчиненныеВопросы.Очистить(); Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ВнешнийИсточник.ВопросШаблона КАК ВопросШаблона, - | ВнешнийИсточник.РодительВопрос КАК РодительВопрос, - | ВнешнийИсточник.ТипВопроса, - | ВнешнийИсточник.СтроковыйКлюч, - | ВнешнийИсточник.Обязательный, - | ВнешнийИсточник.ТребуетсяКомментарий, - | ВнешнийИсточник.ЭлементарныйВопрос, - | ВнешнийИсточник.ТипОтвета - |ПОМЕСТИТЬ ВопросыРаздела - |ИЗ - | &ВнешнийИсточник КАК ВнешнийИсточник - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВопросыРаздела.ВопросШаблона КАК ВопросШаблона, - | ВопросыРаздела.СтроковыйКлюч - |ПОМЕСТИТЬ ВопросыСУсловием - |ИЗ - | ВопросыРаздела КАК ВопросыРаздела - |ГДЕ - | ВопросыРаздела.ТипВопроса = ЗНАЧЕНИЕ(Перечисление.ТипыВопросовШаблонаАнкеты.ВопросСУсловием) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВопросыРаздела.РодительВопрос КАК РодительВопрос, - | ВопросыРаздела.ВопросШаблона, - | ВопросыРаздела.СтроковыйКлюч КАК КлючСтроки, - | ВопросыСУсловием.СтроковыйКлюч КАК КлючСтрокиРодителя, - | ВопросыРаздела.Обязательный, - | ВопросыРаздела.ТребуетсяКомментарий, - | ВопросыРаздела.ТипВопроса, - | ВопросыРаздела.ЭлементарныйВопрос, - | ВопросыРаздела.ТипОтвета - |ИЗ - | ВопросыРаздела КАК ВопросыРаздела - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВопросыСУсловием КАК ВопросыСУсловием - | ПО ВопросыРаздела.РодительВопрос = ВопросыСУсловием.ВопросШаблона - |ГДЕ - | ВопросыРаздела.РодительВопрос В - | (ВЫБРАТЬ - | ВопросыСУсловием.ВопросШаблона - | ИЗ - | ВопросыСУсловием КАК ВопросыСУсловием) - |ИТОГИ ПО - | КлючСтрокиРодителя"; + Запрос.Текст = " + |ВЫБРАТЬ + | ВнешнийИсточник.ВопросШаблона КАК ВопросШаблона, + | ВнешнийИсточник.РодительВопрос КАК РодительВопрос, + | ВнешнийИсточник.ТипВопроса, + | ВнешнийИсточник.СтроковыйКлюч, + | ВнешнийИсточник.Обязательный, + | ВнешнийИсточник.ТребуетсяКомментарий, + | ВнешнийИсточник.ЭлементарныйВопрос, + | ВнешнийИсточник.ТипОтвета + |ПОМЕСТИТЬ ВопросыРаздела + |ИЗ + | &ВнешнийИсточник КАК ВнешнийИсточник + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВопросыРаздела.ВопросШаблона КАК ВопросШаблона, + | ВопросыРаздела.СтроковыйКлюч + |ПОМЕСТИТЬ ВопросыСУсловием + |ИЗ + | ВопросыРаздела КАК ВопросыРаздела + |ГДЕ + | ВопросыРаздела.ТипВопроса = ЗНАЧЕНИЕ(Перечисление.ТипыВопросовШаблонаАнкеты.ВопросСУсловием) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВопросыРаздела.РодительВопрос КАК РодительВопрос, + | ВопросыРаздела.ВопросШаблона, + | ВопросыРаздела.СтроковыйКлюч КАК КлючСтроки, + | ВопросыСУсловием.СтроковыйКлюч КАК КлючСтрокиРодителя, + | ВопросыРаздела.Обязательный, + | ВопросыРаздела.ТребуетсяКомментарий, + | ВопросыРаздела.ТипВопроса, + | ВопросыРаздела.ЭлементарныйВопрос, + | ВопросыРаздела.ТипОтвета + |ИЗ + | ВопросыРаздела КАК ВопросыРаздела + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВопросыСУсловием КАК ВопросыСУсловием + | ПО ВопросыРаздела.РодительВопрос = ВопросыСУсловием.ВопросШаблона + |ГДЕ + | ВопросыРаздела.РодительВопрос В + | (ВЫБРАТЬ + | ВопросыСУсловием.ВопросШаблона + | ИЗ + | ВопросыСУсловием КАК ВопросыСУсловием) + |ИТОГИ ПО + | КлючСтрокиРодителя"; ВнешнийИсточник = Форма.ТаблицаВопросовРаздела.Выгрузить(); ВнешнийИсточник.Колонки.Добавить("СтроковыйКлюч", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(50))); @@ -1984,37 +1685,348 @@ ВариантыОтветовНаВопрос = ПолучитьВариантыОтветовНаВопрос(ВыборкаДетали.ЭлементарныйВопрос,Форма); - Счётчик = 0; + Счётчик = 0; Для каждого ВариантОтвета Из ВариантыОтветовНаВопрос Цикл - Счётчик = Счётчик + 1; + Счётчик = Счётчик + 1; НоваяСтрокаПодчиненные = НоваяСтрока.Подчиненные.Добавить(); - НоваяСтрокаПодчиненные.ИмяЭлементаПодчиненногоВопроса = ИмяВопроса + "_Реквизит_" + Счётчик; - НоваяСтрокаПодчиненные.Обязательный = Ложь; + НоваяСтрокаПодчиненные.ИмяЭлементаПодчиненногоВопроса = ИмяВопроса + "_Реквизит_" + Счётчик; + НоваяСтрокаПодчиненные.Обязательный = Ложь; Если ВариантОтвета.ТребуетОткрытогоОтвета Тогда НоваяСтрокаПодчиненные = НоваяСтрока.Подчиненные.Добавить(); - НоваяСтрокаПодчиненные.ИмяЭлементаПодчиненногоВопроса = ИмяВопроса + "_Комментарий_" + Счётчик; - НоваяСтрокаПодчиненные.Обязательный = Ложь; + НоваяСтрокаПодчиненные.ИмяЭлементаПодчиненногоВопроса = ИмяВопроса + "_Комментарий_" + Счётчик; + НоваяСтрокаПодчиненные.Обязательный = Ложь; КонецЕсли; КонецЦикла; Иначе НоваяСтрокаПодчиненные = НоваяСтрока.Подчиненные.Добавить(); - НоваяСтрокаПодчиненные.ИмяЭлементаПодчиненногоВопроса = ИмяВопроса; - НоваяСтрокаПодчиненные.Обязательный = ВыборкаДетали.Обязательный; + НоваяСтрокаПодчиненные.ИмяЭлементаПодчиненногоВопроса = ИмяВопроса; + НоваяСтрокаПодчиненные.Обязательный = ВыборкаДетали.Обязательный; Если ВыборкаДетали.ТребуетсяКомментарий Тогда НоваяСтрокаПодчиненные = НоваяСтрока.Подчиненные.Добавить(); - НоваяСтрокаПодчиненные.ИмяЭлементаПодчиненногоВопроса = ИмяВопроса + "_Комментарий"; - НоваяСтрокаПодчиненные.Обязательный = Ложь;; - КонецЕсли; + НоваяСтрокаПодчиненные.ИмяЭлементаПодчиненногоВопроса = ИмяВопроса + "_Комментарий"; + НоваяСтрокаПодчиненные.Обязательный = Ложь;; + КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; // выборка детали - КонецЦикла; //выборка + КонецЕсли; + КонецЕсли; + КонецЦикла; // выборка детали + КонецЦикла; //выборка -КонецПроцедуры // - +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Прочее + +// Устанавливает параметры отбора в отбор динамического списка +// +// Параметры +// Параметры - Структура - параметры, переданные форме +// ОтборДинамическогоСписка - Отбор - Отбор динамического списка, +// в который устанавливаются параметры отбора. +Процедура УстановитьПараметрыОтбораФормуВыбора(Параметры,ОтборДинамическогоСписка) Экспорт + + Если Параметры.Свойство("МассивОтбора") = Истина Тогда + + Для каждого ЭлементМассиваОтбора Из Параметры.МассивОтбора Цикл + + ЭлементОтбораДанных = ОтборДинамическогоСписка.Элементы.Добавить(ЭлементМассиваОтбора.ТипОтбора); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ЭлементМассиваОтбора.ЛевоеЗначение); + ЭлементОтбораДанных.Использование = Истина; + ЭлементОтбораДанных.ВидСравнения = ЭлементМассиваОтбора.ВидСравнения; + ЭлементОтбораДанных.ПравоеЗначение = ЭлементМассиваОтбора.ПравоеЗначение; + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +// Функция заполняет структуру значениями перечисления +// +// Параметры +// ИмяПеречисления - строка - имя перечисления +// Включать пустую ссылку - булево - добавлять ли в структуру значение пустой ссылки +// +// Возвращаемое значение: +// СтруктураВозврата - Структура содержащая значения перечисления, +// в том числе пустое значение. +Функция ПолучитьСтруктуруЗначенияПеречисления(ИмяПеречисления, ВключатьПустуюСсылку = ЛОЖЬ) Экспорт + + СтруктураВозврата = Новый Структура; + Для каждого ЭлементМетаданных Из Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления Цикл + СтруктураВозврата.Вставить(ЭлементМетаданных.Имя,Перечисления[ИмяПеречисления][ЭлементМетаданных.Имя]); + КонецЦикла; + + Если ВключатьПустуюСсылку Тогда + СтруктураВозврата.Вставить("ПустаяСсылка",Перечисления[ИмяПеречисления].ПустаяСсылка()); + КонецЕсли; + + Возврат СтруктураВозврата; + +КонецФункции + +// Процедура удаляет старые элементы вопроса шаблона анкеты. +Процедура УдалитьВопросыШаблонаАнкеты(СсылкаВладелец) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + //удалим старые вопросы шаблона + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ВопросыШаблонаАнкеты.Ссылка + |ИЗ + | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты + |ГДЕ + | ВопросыШаблонаАнкеты.Владелец = &Владелец"; + + Запрос.УстановитьПараметр("Владелец",СсылкаВладелец); + + РезультатЗапроса = Запрос.Выполнить(); + Если Не РезультатЗапроса.Пустой() Тогда + + МассивСсылок = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка"); + Для каждого ЭлементМассива Из МассивСсылок Цикл + + СправочникОбъект = ЭлементМассива.ПолучитьОбъект(); + Если (НЕ СправочникОбъект = Неопределено) Тогда + СправочникОбъект.Удалить(); + КонецЕсли; + + КонецЦикла; + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +// Возвращает код картинки в зависимости от типа вопроса и принадлежности к разделу. +// +// Параметры +// ЭтоРаздел - Булево - признак раздела +// ТипВопроса - Перечисление.ТипыВопросовШаблонаАнкеты +// +// Возвращаемое значение: +// Число - код картинки для отображения в дереве +// +Функция ПолучитьКодКартинкиШаблонаАнкеты(ЭтоРаздел,ТипВопроса = Неопределено) Экспорт + + Если ЭтоРаздел Тогда + Возврат 1; + ИначеЕсли ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.Простой Тогда + Возврат 2; + ИначеЕсли ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.ВопросСУсловием Тогда + Возврат 4; + ИначеЕсли ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.Табличный Тогда + Возврат 3; + Иначе + Возврат 0; + КонецЕсли; + +КонецФункции + +// Получает представления элементарный вопросов табличных вопросов +// и заполняет соответствие ПредставленияВопросов, из которого потом будут получаться представления +// вопросов при выводе табличных вопросов. +// +// Параметры: +// ШаблонАнкеты - СправочникСсылка.ШаблоныАнкет, по которому проводился опрос +// +// ВозвращаемоеЗначение: +// Соответствие - в качестве ключа выступает ссылка на вопрос, в качестве значения его формулировка +// +Функция ПолучитьПредставленияЭлементарныхВопросовТабличногоВопроса(ШаблонАнкеты) Экспорт + + ПредставленияВопросов = Новый Соответствие; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ВопросыШаблонаАнкеты.Ссылка + |ПОМЕСТИТЬ ВопросыШаблона + |ИЗ + | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты + |ГДЕ + | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВопросыШаблонаАнкетыСоставТабличногоВопроса.ЭлементарныйВопрос + |ПОМЕСТИТЬ ЭлементарныеВопросы + |ИЗ + | Справочник.ВопросыШаблонаАнкеты.СоставТабличногоВопроса КАК ВопросыШаблонаАнкетыСоставТабличногоВопроса + |ГДЕ + | ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка В + | (ВЫБРАТЬ + | ВопросыШаблона.Ссылка + | ИЗ + | ВопросыШаблона КАК ВопросыШаблона) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВопросыДляАнкетирования.Ссылка, + | ВопросыДляАнкетирования.Формулировка, + | ВопросыДляАнкетирования.АгрегироватьСуммуВОтчетах + |ИЗ + | ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования + |ГДЕ + | ВопросыДляАнкетирования.Ссылка В + | (ВЫБРАТЬ + | ЭлементарныеВопросы.ЭлементарныйВопрос + | ИЗ + | ЭлементарныеВопросы КАК ЭлементарныеВопросы)"; + + Запрос.УстановитьПараметр("ШаблонАнкеты",ШаблонАнкеты); + + Результат = Запрос.Выполнить(); + Если НЕ Результат.Пустой() Тогда + + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + ПредставленияВопросов.Вставить(Выборка.Ссылка,Новый Структура("Формулировка,АгрегироватьСуммуВОтчетах", Выборка.Формулировка,Выборка.АгрегироватьСуммуВОтчетах)); + КонецЦикла; + + КонецЕсли; + + Возврат ПредставленияВопросов; + +КонецФункции + +// Получает таблицу доступных на данный момент респонденту анкет +// +// Параметры +// Респондент - СправочникСсылка - респондент для которого получается список анкет +// +// Возвращаемое значение: +// ТаблицаЗначений - таблица, содержащая информацию о доступных респонденту анкетах. +// Неопределено - в случае если для респондента нет достунпых анкет. +// +Функция ПолучитьТаблицуДоступныхРеспондентуАнкет(Респондент) Экспорт + + Если ЗначениеЗаполнено(Респондент) Тогда + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | НазначениеОпросов.Ссылка, + | НазначениеОпросов.СвободныйОпрос, + | НазначениеОпросов.ДатаОкончания, + | НазначениеОпросов.Наименование + |ПОМЕСТИТЬ ДействующиеОпросы + |ИЗ + | Документ.НазначениеОпросов КАК НазначениеОпросов + |ГДЕ + | НазначениеОпросов.Проведен + | И (НЕ НазначениеОпросов.ПометкаУдаления) + | И (НазначениеОпросов.ДатаНачала = &ПустаяДата + | ИЛИ НАЧАЛОПЕРИОДА(НазначениеОпросов.ДатаНачала, ДЕНЬ) < &ТекущаяДата) + | И НазначениеОпросов.ТипРеспондентов = &ТипРеспондентов + | И (НазначениеОпросов.ДатаОкончания = &ПустаяДата + | ИЛИ КОНЕЦПЕРИОДА(НазначениеОпросов.ДатаОкончания, ДЕНЬ) > &ТекущаяДата) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДействующиеОпросы.Ссылка, + | ДействующиеОпросы.ДатаОкончания, + | ДействующиеОпросы.Наименование + |ПОМЕСТИТЬ ДействующиеОпросыОтборПоРеспонденту + |ИЗ + | ДействующиеОпросы КАК ДействующиеОпросы + |ГДЕ + | ДействующиеОпросы.СвободныйОпрос + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | НазначениеОпросовРеспонденты.Ссылка, + | НазначениеОпросов.ДатаОкончания, + | НазначениеОпросов.Наименование + |ИЗ + | Документ.НазначениеОпросов.Респонденты КАК НазначениеОпросовРеспонденты + | ЛЕВОЕ СОЕДИНЕНИЕ Документ.НазначениеОпросов КАК НазначениеОпросов + | ПО НазначениеОпросовРеспонденты.Ссылка = НазначениеОпросов.Ссылка + |ГДЕ + | НазначениеОпросовРеспонденты.Респондент = &Респондент + | И НазначениеОпросовРеспонденты.Ссылка В + | (ВЫБРАТЬ + | ДействующиеОпросы.Ссылка + | ИЗ + | ДействующиеОпросы КАК ДействующиеОпросы + | ГДЕ + | (НЕ ДействующиеОпросы.СвободныйОпрос)) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВЫБОР + | КОГДА АнкетыПоДействующимЗапросам.Ссылка ЕСТЬ NULL + | ТОГДА ""Опросы"" + | ИНАЧЕ ""Анкеты"" + | КОНЕЦ КАК Статус, + | ВЫБОР + | КОГДА АнкетыПоДействующимЗапросам.Ссылка ЕСТЬ NULL + | ТОГДА ДействующиеОпросыОтборПоРеспонденту.Ссылка + | ИНАЧЕ АнкетыПоДействующимЗапросам.Ссылка + | КОНЕЦ КАК АнкетаОпрос, + | ДействующиеОпросыОтборПоРеспонденту.ДатаОкончания КАК ДатаОкончания, + | ДействующиеОпросыОтборПоРеспонденту.Наименование, + | АнкетыПоДействующимЗапросам.Дата КАК ДатаАнкеты, + | ЕСТЬNULL(АнкетыПоДействующимЗапросам.Проведен, ЛОЖЬ) КАК Проведен + |ПОМЕСТИТЬ НеотвеченныеОпросыСохраненныеАнкеты + |ИЗ + | ДействующиеОпросыОтборПоРеспонденту КАК ДействующиеОпросыОтборПоРеспонденту + | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ + | Анкета.Ссылка КАК Ссылка, + | Анкета.ДатаРедактирования КАК Дата, + | Анкета.Проведен КАК Проведен, + | Анкета.Опрос КАК Опрос + | ИЗ + | Документ.Анкета КАК Анкета + | ГДЕ + | Анкета.Опрос В + | (ВЫБРАТЬ + | ДействующиеОпросыОтборПоРеспонденту.Ссылка + | ИЗ + | ДействующиеОпросыОтборПоРеспонденту КАК ДействующиеОпросыОтборПоРеспонденту) + | И Анкета.Респондент = &Респондент + | И (НЕ Анкета.ПометкаУдаления)) КАК АнкетыПоДействующимЗапросам + | ПО ДействующиеОпросыОтборПоРеспонденту.Ссылка = АнкетыПоДействующимЗапросам.Опрос + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | НеотвеченныеОпросыСохраненныеАнкеты.Статус, + | НеотвеченныеОпросыСохраненныеАнкеты.АнкетаОпрос, + | НеотвеченныеОпросыСохраненныеАнкеты.ДатаОкончания, + | НеотвеченныеОпросыСохраненныеАнкеты.Наименование, + | НеотвеченныеОпросыСохраненныеАнкеты.ДатаАнкеты + |ИЗ + | НеотвеченныеОпросыСохраненныеАнкеты КАК НеотвеченныеОпросыСохраненныеАнкеты + |ГДЕ + | (НЕ НеотвеченныеОпросыСохраненныеАнкеты.Проведен)"; + + Запрос.УстановитьПараметр("Респондент", Респондент); + Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); + Запрос.УстановитьПараметр("ПустаяДата" ,Дата(1, 1, 1)); + Запрос.УстановитьПараметр("ТипРеспондентов", Справочники[Респондент.Метаданные().Имя].ПустаяСсылка()); + + Результат = Запрос.Выполнить(); + + Если НЕ Результат.Пустой() Тогда + + Возврат Результат.Выгрузить(); + + КонецЕсли; + + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + diff --git a/SSL/src/CommonModules/АнкетированиеКлиент/Module.bsl b/SSL/src/CommonModules/АнкетированиеКлиент/Module.bsl index bbc59afd8..8708692c1 100644 --- a/SSL/src/CommonModules/АнкетированиеКлиент/Module.bsl +++ b/SSL/src/CommonModules/АнкетированиеКлиент/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Анкетирование" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Создает структуру отбора, для дальнейшей передачи на сервер, //и использования в качестве параметров отбора динамических списков вызываемых форм // diff --git a/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl b/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl index fef166093..3ed602457 100644 --- a/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl @@ -1,10 +1,17 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Анкетирование" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Преобразовывает массив в строку, // // Параметры: -// Массив - Массив - массив, который будет преобразован в строку +// Массив - Массив - массив, который будет преобразован в строку // Разделитель - Строка - строка, которая будет разделять элементы массива -// +// // Возвращаемое значение: // Строка - строка получившаяся в результате преобразования массива // @@ -13,24 +20,24 @@ СтрокаРезультат = ""; Для каждого Элемент Из Массив Цикл - СтрокаРезультат = СтрокаРезультат + Строка(Элемент) + Разделитель; + СтрокаРезультат = СтрокаРезультат + Строка(Элемент) + Разделитель; КонецЦикла; Возврат СтрокаРезультат; -КонецФункции // ПреобразоватьМассивВСтроку() +КонецФункции // Удаляет из строки последние символы, если они равны подстроке удаления, // до тех пор, пока последние символы будут не равны подстроке удаления. // // Параметры -// ВходящаяСтрока - Строка - строка, которая будет обрабатываться -// ПодстрокаУдаления - Строка - подстрока, которая будет удалена из конца строки -// Разделитель - Строка - если задан, то удаление происходит только в том случае, -// если подстрока удаления находится целиком после разделителя. -// +// ВходящаяСтрока - Строка - строка, которая будет обрабатываться +// ПодстрокаУдаления - Строка - подстрока, которая будет удалена из конца строки +// Разделитель - Строка - если задан, то удаление происходит только в том случае, +// если подстрока удаления находится целиком после разделителя. +// // Возвращаемое значение: -// Строка - получившаяся в результате обработки строка +// Строка - получившаяся в результате обработки строка // Функция УдалитьПоследниеСимволыИзСтроки(ВходящаяСтрока,ПодстрокаУдаления,Разделитель = Неопределено) Экспорт @@ -38,7 +45,7 @@ Если Разделитель <> Неопределено Тогда Если СРЕД(ВходящаяСтрока,СтрДлина(ВходящаяСтрока)-СтрДлина(ПодстрокаУдаления)-СтрДлина(Разделитель),СтрДлина(Разделитель)) = Разделитель Тогда - Возврат ВходящаяСтрока; + Возврат ВходящаяСтрока; КонецЕсли; КонецЕсли; ВходящаяСтрока = ЛЕВ(ВходящаяСтрока,СтрДлина(ВходящаяСтрока) - СтрДлина(ПодстрокаУдаления)); @@ -47,21 +54,21 @@ Возврат ВходящаяСтрока; -КонецФункции // () +КонецФункции // Формирует имя вопроса на основании уникального идентификатора строки дерева анкеты // // Параметры -// Ключ - УникальныйИдентификатор - ключ, на основе которого будет формироваться имя вопроса -// +// Ключ - УникальныйИдентификатор - ключ, на основе которого будет формироваться имя вопроса +// // Возвращаемое значение: -// Строка - получившаяся в результате обработки строка +// Строка - получившаяся в результате обработки строка // Функция ПолучитьИмяВопроса(Ключ) Экспорт - + Возврат "Вопрос_" + СтрЗаменить(Ключ,"-","_"); -КонецФункции // +КонецФункции // Заново формирует нумерацию дерева анкеты Процедура СформироватьНумерациюДерева(ДеревоАнкеты,ПреобразовыватьФормулировку = Ложь) Экспорт @@ -72,15 +79,15 @@ ЗначимыеЭлементыДерева = ДеревоАнкеты.ПолучитьЭлементы(); КонецЕсли; - CформироватьНумерациюЭлементовДерева(ЗначимыеЭлементыДерева,1,Новый Массив,ПреобразовыватьФормулировку); + CформироватьНумерациюЭлементовДерева(ЗначимыеЭлементыДерева,1,Новый Массив,ПреобразовыватьФормулировку); -КонецПроцедуры // +КонецПроцедуры //Вызывается рекурсивно при формировании полного кода строк дерева анкеты Процедура CформироватьНумерациюЭлементовДерева(СтрокиДерева, УровеньРекурсии, МассивПолныйКод, ПреобразовыватьФормулировку) Если МассивПолныйКод.Количество() < УровеньРекурсии Тогда - МассивПолныйКод.Добавить(0); + МассивПолныйКод.Добавить(0); КонецЕсли; Для каждого Элемент Из СтрокиДерева Цикл @@ -99,21 +106,21 @@ Элемент.ПолныйКод = ПолныйКод; Если ПреобразовыватьФормулировку Тогда - Элемент.Формулировка = Элемент.ПолныйКод + Элемент.Формулировка; + Элемент.Формулировка = Элемент.ПолныйКод + Элемент.Формулировка; КонецЕсли; ПодчиненныеЭлементыСтрокиДерева = Элемент.ПолучитьЭлементы(); Попытка Если ПодчиненныеЭлементыСтрокиДерева.Количество() > 0 Тогда - CформироватьНумерациюЭлементовДерева(ПодчиненныеЭлементыСтрокиДерева,?(Элемент.ТипСтроки ="Вопрос",УровеньРекурсии,УровеньРекурсии + 1),МассивПолныйКод,ПреобразовыватьФормулировку); + CформироватьНумерациюЭлементовДерева(ПодчиненныеЭлементыСтрокиДерева,?(Элемент.ТипСтроки ="Вопрос",УровеньРекурсии,УровеньРекурсии + 1),МассивПолныйКод,ПреобразовыватьФормулировку); КонецЕсли; Исключение КонецПопытки КонецЦикла; -КонецПроцедуры // () +КонецПроцедуры //Находит первую строку в заданной колонке, с заданным значением в коллекции ДанныеФормыДерево Функция НайтиСтрокуВДанныхФормыДерево(ГдеИскать,Значение,Колонка,ИскатьВПодчиненных) Экспорт @@ -122,16 +129,16 @@ Для каждого ЭлементДерева Из ЭлементыДерева Цикл Если ЭлементДерева[Колонка] = Значение Тогда - Возврат ЭлементДерева.ПолучитьИдентификатор(); + Возврат ЭлементДерева.ПолучитьИдентификатор(); ИначеЕсли ИскатьВПодчиненных Тогда - НайденныйИдентификаторСтроки = НайтиСтрокуВДанныхФормыДерево(ЭлементДерева,Значение,Колонка,ИскатьВПодчиненных); - Если НайденныйИдентификаторСтроки >=0 Тогда - Возврат НайденныйИдентификаторСтроки; - КонецЕсли; - КонецЕсли; - + НайденныйИдентификаторСтроки = НайтиСтрокуВДанныхФормыДерево(ЭлементДерева,Значение,Колонка,ИскатьВПодчиненных); + Если НайденныйИдентификаторСтроки >=0 Тогда + Возврат НайденныйИдентификаторСтроки; + КонецЕсли; + КонецЕсли; + КонецЦикла; Возврат -1; -КонецФункции \ No newline at end of file +КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl index f9634b910..2a6eaa590 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl @@ -1,5 +1,10 @@ //////////////////////////////////////////////////////////////////////////////// -// Программный интерфейс подсистемы +// Подсистема "Бизнес-процессы и задачи" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Получить структуру с описанием формы выполнения задачи. // @@ -12,10 +17,10 @@ Функция ПолучитьФормуВыполненияЗадачи(Знач ЗадачаСсылка) Экспорт Если ТипЗнч(ЗадачаСсылка) <> Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неправильный тип параметра ЗадачаСсылка (передан: %1; ожидается: %2)'"), - ТипЗнч(ЗадачаСсылка), "ЗадачаСсылка.ЗадачаИсполнителя"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неправильный тип параметра ЗадачаСсылка (передан: %1; ожидается: %2)'"), + ТипЗнч(ЗадачаСсылка), "ЗадачаСсылка.ЗадачаИсполнителя"); ВызватьИсключение ТекстСообщения; КонецЕсли; @@ -25,7 +30,7 @@ Возврат Новый Структура(); КонецЕсли; - ТипБизнесПроцесса = Метаданные.НайтиПоТипу(ТипЗнч(Реквизиты.БизнесПроцесс)); + ТипБизнесПроцесса = Реквизиты.БизнесПроцесс.Метаданные(); ПараметрыФормы = БизнесПроцессы[ТипБизнесПроцесса.Имя].ФормаВыполненияЗадачи(ЗадачаСсылка, Реквизиты.ТочкаМаршрута); Возврат ПараметрыФормы; @@ -61,7 +66,7 @@ ЗадачаОбъект.Прочитать(); Если ДействиеПоУмолчанию И ЗадачаОбъект.БизнесПроцесс <> Неопределено И НЕ ЗадачаОбъект.БизнесПроцесс.Пустая() Тогда - ТипБизнесПроцесса = Метаданные.НайтиПоТипу(ТипЗнч(ЗадачаОбъект.БизнесПроцесс)); + ТипБизнесПроцесса = ЗадачаОбъект.БизнесПроцесс.Метаданные(); БизнесПроцессы[ТипБизнесПроцесса.Имя].ОбработкаВыполненияПоУмолчанию(ЗадачаСсылка, ЗадачаОбъект.БизнесПроцесс, ЗадачаОбъект.ТочкаМаршрута); КонецЕсли; @@ -214,7 +219,8 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -362,19 +368,20 @@ ЗадачаОбъект.ПринятаКИсполнению = Истина; ЗадачаОбъект.ДатаПринятияКИсполнению = ТекущаяДатаСеанса(); Если ЗадачаОбъект.Исполнитель.Пустая() Тогда - ЗадачаОбъект.Исполнитель = ОбщегоНазначения.ТекущийПользователь(); - КонецЕсли; + ЗадачаОбъект.Исполнитель = Пользователи.ТекущийПользователь(); + КонецЕсли; ЗадачаОбъект.Записать(); НовыйМассивЗадач.Добавить(Задача); - КонецЕсли; + КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; Задачи = НовыйМассивЗадач; @@ -405,7 +412,8 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -433,30 +441,37 @@ // Процедура УведомитьИсполнителейОНовыхЗадачах() Экспорт + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + // Получаем текущее время компьютера сервера - ТекушаяДата() - ТекущаяДата = ТекущаяДата(); + ДатаУведомления = ТекущаяДата(); УстановитьПривилегированныйРежим(Истина); ДатаПоследнегоУведомления = Константы.ДатаУведомленияОНовыхЗадачах.Получить(); + УстановитьПривилегированныйРежим(Ложь); // Если оповещение ранее не производилось, или последнее оповещение происходило // ранее, чем за сутки, то отбираем новые задачи за последние сутки. Если (ДатаПоследнегоУведомления = '00010101000000') - Или (ТекущаяДата - ДатаПоследнегоУведомления > 24*60*60) Тогда - ДатаПоследнегоУведомления = ТекущаяДата - 24*60*60; + Или (ДатаУведомления - ДатаПоследнегоУведомления > 24*60*60) Тогда + ДатаПоследнегоУведомления = ДатаУведомления - 24*60*60; КонецЕсли; - Константы.ДатаУведомленияОНовыхЗадачах.Установить(ТекущаяДата); - УстановитьПривилегированныйРежим(Ложь); ЗаписьЖурналаРегистрации(БизнесПроцессыИЗадачиСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, , , СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Начато регламентное уведомление о новых задачах за период %1 - %2'"), - ДатаПоследнегоУведомления, ТекущаяДата)); + ДатаПоследнегоУведомления, ДатаУведомления)); - ЗадачиПоИсполнителям = ВыбратьНовыеЗадачиПоИсполнителям(ДатаПоследнегоУведомления, ТекущаяДата); + ЗадачиПоИсполнителям = ВыбратьНовыеЗадачиПоИсполнителям(ДатаПоследнегоУведомления, ДатаУведомления); Для Каждого СтрокаИсполнителя Из ЗадачиПоИсполнителям.Строки Цикл ОтправитьУведомлениеОНовыхЗадачах(СтрокаИсполнителя.Исполнитель, СтрокаИсполнителя); КонецЦикла; + УстановитьПривилегированныйРежим(Истина); + Константы.ДатаУведомленияОНовыхЗадачах.Установить(ДатаУведомления); + УстановитьПривилегированныйРежим(Ложь); + ЗаписьЖурналаРегистрации(БизнесПроцессыИЗадачиСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, , , СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -469,6 +484,10 @@ // Процедура ПроконтролироватьЗадачи() Экспорт + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + ПросроченныеЗадачи = ВыбратьПросроченныеЗадачи(); Если ПросроченныеЗадачи.Количество() = 0 Тогда Возврат; @@ -591,7 +610,8 @@ УровеньВажностиСобытия = УровеньЖурналаРегистрации.Информация; КонецЕсли; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о просроченных задачах'"), УровеньВажностиСобытия,,, ТекстСообщения); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о просроченных задачах'"), + УровеньВажностиСобытия,,, ТекстСообщения); КонецЦикла; КонецПроцедуры @@ -671,6 +691,9 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + //////////////////////////////////////////////////////////////////////////////// // Мониторинг и контроль исполнения @@ -880,12 +903,12 @@ | ЗадачаИсполнителя.Наименование КАК Наименование, | ЗадачаИсполнителя.СрокИсполнения КАК СрокИсполнения, | ЗадачаИсполнителя.Автор КАК Автор, - | ЗадачаИсполнителя.Описание КАК Описание, - | ВЫБОР - | КОГДА ЗадачаИсполнителя.Исполнитель ЕСТЬ НЕ NULL И ЗадачаИсполнителя.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) - | ТОГДА ЗадачаИсполнителя.Исполнитель - | ИНАЧЕ - | ИсполнителиЗадач.Исполнитель + | ПОДСТРОКА(ЗадачаИсполнителя.Описание, 1, 250) КАК Описание, + | ВЫБОР + | КОГДА ЗадачаИсполнителя.Исполнитель ЕСТЬ НЕ NULL + | И ЗадачаИсполнителя.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + | ТОГДА ЗадачаИсполнителя.Исполнитель + | ИНАЧЕ ИсполнителиЗадач.Исполнитель | КОНЕЦ КАК Исполнитель, | ЗадачаИсполнителя.РольИсполнителя КАК РольИсполнителя, | ЗадачаИсполнителя.ОсновнойОбъектАдресации КАК ОсновнойОбъектАдресации, @@ -900,30 +923,25 @@ | ЗадачаИсполнителя.ПометкаУдаления = ЛОЖЬ | И ЗадачаИсполнителя.Дата > &ДатаВремяОт | И ЗадачаИсполнителя.Дата <= &ДатаВремяПо - | И ((ЗадачаИсполнителя.Исполнитель ЕСТЬ НЕ NULL И ЗадачаИсполнителя.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)) ИЛИ - | (ИсполнителиЗадач.Исполнитель ЕСТЬ НЕ NULL И ИсполнителиЗадач.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка))) + | И (ЗадачаИсполнителя.Исполнитель ЕСТЬ НЕ NULL + | И ЗадачаИсполнителя.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + | ИЛИ ИсполнителиЗадач.Исполнитель ЕСТЬ НЕ NULL + | И ИсполнителиЗадач.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)) | И ЗадачаИсполнителя.Выполнена = ЛОЖЬ | |УПОРЯДОЧИТЬ ПО | Исполнитель, - | СрокИсполнения УБЫВ"); + | СрокИсполнения УБЫВ + |ИТОГИ ПО + | Исполнитель"); Запрос.Параметры.Вставить("ДатаВремяОт", ДатаВремяОт); Запрос.Параметры.Вставить("ДатаВремяПо", ДатаВремяПо); - ТаблицаРезультатов = Запрос.Выполнить().Выгрузить(); - - ПостроительЗапроса = Новый ПостроительЗапроса(); - Источник = Новый ОписаниеИсточникаДанных(ТаблицаРезультатов); - Источник.Колонки.Исполнитель.Измерение = Истина; - ПостроительЗапроса.ИсточникДанных = Источник; - ПостроительЗапроса.Измерения.Добавить("Исполнитель"); - ПостроительЗапроса.Выполнить(); - Результат = ПостроительЗапроса.Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); - + Результат = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); Возврат Результат; КонецФункции -Процедура ОтправитьУведомлениеОНовыхЗадачах(Исполнитель, ЗадачиПоИсполнителю) +Функция ОтправитьУведомлениеОНовыхЗадачах(Исполнитель, ЗадачиПоИсполнителю) ПочтовыйАдресПолучателя = ""; БизнесПроцессыИЗадачиПереопределяемый.ПолучитьАдресЭлектроннойПочты(Исполнитель, ПочтовыйАдресПолучателя); @@ -932,7 +950,7 @@ УровеньЖурналаРегистрации.Информация,,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Уведомление не отправлено, так как не указан почтовый адрес у пользователя %1.'"), Строка(Исполнитель))); - Возврат; + Возврат Ложь; КонецЕсли; ТекстПисьма = ""; @@ -958,15 +976,16 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при отправке уведомления о новых задачах: %1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); - Возврат; + Возврат Ложь; КонецПопытки; ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'"), УровеньЖурналаРегистрации.Информация,,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Уведомления успешно отправлены на адрес %1.'"), ПочтовыйАдресПолучателя)); + Возврат Истина; -КонецПроцедуры +КонецФункции Функция СформироватьПредставлениеЗадачи(ЗадачаСтруктура) @@ -1003,7 +1022,6 @@ КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Прочие внутренние процедуры и функции @@ -1029,7 +1047,7 @@ Возврат; КонецЕсли; - ТипБизнесПроцесса = Метаданные.НайтиПоТипу(ТипЗнч(ЗадачаОбъект.БизнесПроцесс)); + ТипБизнесПроцесса = ЗадачаОбъект.БизнесПроцесс.Метаданные(); Попытка БизнесПроцессы[ТипБизнесПроцесса.Имя].ПриПеренаправленииЗадачи(ЗадачаОбъект.Ссылка, НоваяЗадачаОбъект.Ссылка); Исключение @@ -1046,13 +1064,13 @@ Результат = БизнесПроцессыИЗадачиПереопределяемый.ЕстьПраваНаОстановкуБизнесПроцесса(БизнесПроцесс); Если Результат <> Неопределено Тогда Возврат Результат; - КонецЕсли; + КонецЕсли; - Если РольДоступна(Метаданные.Роли.ПолныеПрава) Тогда + Если Пользователи.ЭтоПолноправныйПользователь() Тогда Возврат Истина; - КонецЕсли; + КонецЕсли; - Если БизнесПроцесс.Автор = ОбщегоНазначения.ТекущийПользователь() Тогда + Если БизнесПроцесс.Автор = Пользователи.ТекущийПользователь() Тогда Возврат Истина; КонецЕсли; @@ -1205,11 +1223,11 @@ Процедура ПриПометкеУдаленияЗадачи(ЗадачаСсылка, НовоеЗначениеПометкиУдаления) Экспорт ОбъектЗадачи = ЗадачаСсылка.Метаданные(); - Если НовоеЗначениеПометкиУдаления И Не ПравоДоступа("ИнтерактивнаяПометкаУдаления", ОбъектЗадачи) Тогда - ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа.'"); + Если НовоеЗначениеПометкиУдаления Тогда + ВыполнитьПроверкуПравДоступа("ИнтерактивнаяПометкаУдаления", ОбъектЗадачи); КонецЕсли; - Если Не НовоеЗначениеПометкиУдаления И Не ПравоДоступа("ИнтерактивноеСнятиеПометкиУдаления", ОбъектЗадачи) Тогда - ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа.'"); + Если Не НовоеЗначениеПометкиУдаления Тогда + ВыполнитьПроверкуПравДоступа("ИнтерактивноеСнятиеПометкиУдаления", ОбъектЗадачи); КонецЕсли; НачатьТранзакцию(); @@ -1239,7 +1257,7 @@ КонецПроцедуры -// Возвращает Истина если задача соответствует указанной точке маршрута +// Возвращает Истина, если задача соответствует указанной точке маршрута Функция ПроверитьТипЗадачи(Задача, ТочкаМаршрута) Экспорт Если Задача.ТочкаМаршрута = ТочкаМаршрута Тогда diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl index 32377444d..fa6f2f4c6 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl @@ -1,5 +1,10 @@ //////////////////////////////////////////////////////////////////////////////// -// Клиентские процедуры подсистемы +// Подсистема "Бизнес-процессы и задачи" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Стандартный обработчик оповещения для форм выполнения задач. // Для вызова из обработчика события формы ОбработкаОповещения. @@ -140,7 +145,9 @@ // ПараметрыФормы - Структура - параметры открываемой формы. // Процедура СоздатьЗадание(Знач ФормаВладелец = Неопределено, Знач ПараметрыФормы = Неопределено) Экспорт + ОткрытьФорму("БизнесПроцесс.Задание.ФормаОбъекта", ПараметрыФормы, ФормаВладелец); + КонецПроцедуры // Открыть форму для перенаправления одной или нескольких задач другому исполнителю. @@ -214,7 +221,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Стандартный обработчик ПометкаУдаления для списков бизнес-процессов. // Для вызова из обработчика события списка ПометкаУдаления. @@ -240,17 +247,17 @@ КонецПроцедуры // Открывает форму выбора исполнителя -Процедура ВыбратьИсполнителя( - ЭлементИсполнитель, - РеквизитИсполнитель, - ТолькоПростыеРоли, - БезВнешнихРолей) Экспорт +Процедура ВыбратьИсполнителя(ЭлементИсполнитель, РеквизитИсполнитель, ТолькоПростыеРоли, БезВнешнихРолей) Экспорт - Если БизнесПроцессыИЗадачиКлиентПереопределяемый.ВыбратьИсполнителя(ЭлементИсполнитель, РеквизитИсполнитель, ТолькоПростыеРоли, БезВнешнихРолей) Тогда + Если БизнесПроцессыИЗадачиКлиентПереопределяемый.ВыбратьИсполнителя(ЭлементИсполнитель, РеквизитИсполнитель, + ТолькоПростыеРоли, БезВнешнихРолей) Тогда + Возврат; + КонецЕсли; - ПараметрыФормы = Новый Структура("Исполнитель, ТолькоПростыеРоли, БезВнешнихРолей", РеквизитИсполнитель, ТолькоПростыеРоли, БезВнешнихРолей); + ПараметрыФормы = Новый Структура("Исполнитель, ТолькоПростыеРоли, БезВнешнихРолей", + РеквизитИсполнитель, ТолькоПростыеРоли, БезВнешнихРолей); ОткрытьФорму("ОбщаяФорма.ВыборИсполнителяБизнесПроцесса", ПараметрыФормы, ЭлементИсполнитель); КонецПроцедуры diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl index f63ee8abb..c071f9f90 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентПереопределяемый/Module.bsl @@ -1,4 +1,21 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Бизнес-процессы и задачи" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Открывает форму выбора исполнителя +// Параметры +// ЭлементИсполнитель - элемент формы, в которой выполняется выбора исполнителя, +// который будет указан как владелец формы выбора исполнителя +// РеквизитИсполнитель - выбранное ранее значение исполнителя. +// Используется для установки текущей строки в форме выбора исполнителя +// ТолькоПростыеРоли - булево, если Итисна то указывает что для выбора нужно +// использовать только роли без объектов адресации +// БезВнешнихРолей - булево, если Истина, то указывает, что для выбора надо +// использовать только роли, у которых не установлен признак ВнешняяРоль Функция ВыбратьИсполнителя(ЭлементИсполнитель, РеквизитИсполнитель, ТолькоПростыеРоли, БезВнешнихРолей) Экспорт Возврат Ложь; diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl index a7d34a66e..226791429 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl @@ -1,19 +1,24 @@ -/////////////////////////////////////////////////////////////////////////////// -// ИНТЕРФЕЙСНАЯ ЧАСТЬ ПЕРЕОПРЕДЕЛЯЕМОГО МОДУЛЯ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Бизнес-процессы и задачи" +// +//////////////////////////////////////////////////////////////////////////////// -// Возвращает адрес электронной почты пользователя ПользовательСсылка. +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает адрес электронной почты пользователя Получатель. // // Параметры -// ПользовательСсылка – СправочникСсылка.Пользователи -// Адрес - Строка – возвращаемый адрес электронной почты. +// Получатель – СправочникСсылка.Пользователи +// Адрес - Строка – возвращаемый адрес электронной почты. // // -Процедура ПолучитьАдресЭлектроннойПочты(Знач ПользовательСсылка, Адрес) Экспорт +Процедура ПолучитьАдресЭлектроннойПочты(Знач Получатель, Адрес) Экспорт - // КонтактнаяИнформация - Адрес = УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта(ПользовательСсылка, - Справочники.ВидыКонтактнойИнформации.EmailПользователя); - // Конец КонтактнаяИнформация + // СтандартныеПодсистемы.КонтактнаяИнформация + Адрес = УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта( + Получатель, Справочники.ВидыКонтактнойИнформации.EmailПользователя); + // Конец СтандартныеПодсистемы.КонтактнаяИнформация КонецПроцедуры @@ -24,6 +29,7 @@ // Запись - РегистрСведенийЗапись.ДанныеБизнесПроцессов // Процедура ПриЗаписиСпискаБизнесПроцессов(Запись) Экспорт + КонецПроцедуры // Вызывается для проверки прав на остановку и продолжение бизнес-процесса @@ -56,13 +62,13 @@ // Возвращает содержание переданного объекта // Параметры -// Объект - объект, представление которого надо сформировать +// ПредметЗадачи - объект, представление которого надо сформировать // Возвращает содержание в виде HTML или MXL документа -Функция ПолучитьСодержание(Объект) Экспорт +Функция ПолучитьПредставлениеПредметаВнешнейЗадачи(ПредметЗадачи) Экспорт - // ВнешниеБизнесПроцессыИЗадачи - Возврат ВнешниеЗадачиВызовСервера.ПолучитьСодержание(Объект); - // Конец ВнешниеБизнесПроцессыИЗадачи + // СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи + Возврат ВнешниеЗадачиВызовСервера.ПолучитьПредставлениеПредметаВнешнейЗадачи(ПредметЗадачи); + // Конец СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи КонецФункции @@ -70,26 +76,26 @@ // или Неопределено Функция ПолучитьСписокФайлов(Источник) Экспорт - // ВнешниеБизнесПроцессыИЗадачи + // СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи Возврат ВнешниеЗадачиВызовСервера.ПолучитьСписокФайлов(Источник); - // Конец ВнешниеБизнесПроцессыИЗадачи + // Конец СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи КонецФункции // Возвращает Истина, если задача является внешней Функция ЭтоВнешняяЗадача(ЗадачаСсылка) Экспорт - // ВнешниеБизнесПроцессыИЗадачи + // СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи Возврат ВнешниеЗадачиВызовСервера.ЭтоВнешняяЗадача(ЗадачаСсылка); - // Конец ВнешниеБизнесПроцессыИЗадачи + // Конец СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи КонецФункции // Помечает задачу-источник как выполненную Процедура ВыполнитьЗадачуИсточник(БизнесПроцесс) Экспорт - // ВнешниеБизнесПроцессыИЗадачи + // СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи ВнешниеЗадачиВызовСервера.ВыполнитьЗадачуИсточник(БизнесПроцесс); - // Конец ВнешниеБизнесПроцессыИЗадачи + // Конец СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи КонецПроцедуры diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl index 93623276b..c3dfad9e4 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl @@ -1,37 +1,42 @@ //////////////////////////////////////////////////////////////////////////////// -// Серверные процедуры подсистемы +// Подсистема "Бизнес-процессы и задачи" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Инициализирует общие параметры формы выполнения задачи. // // Параметры: -// Форма - УправляемаяФорма - форма выполнения задачи. +// ФормаЗадачи - УправляемаяФорма - форма выполнения задачи. // ЗадачаОбъект - ЗадачаОбъект - объект задачи. // ЭлементГруппаСостояние - элемент управления формы - группа с информации о // состоянии задачи // ЭлементДатаИсполнения - элемент управления формы - поле с датой исполнения задачи // -Процедура ФормаЗадачиПриСозданииНаСервере(Форма, ЗадачаОбъект, +Процедура ФормаЗадачиПриСозданииНаСервере(ФормаЗадачи, ЗадачаОбъект, ЭлементГруппаСостояние, ЭлементДатаИсполнения) Экспорт - Форма.ТолькоПросмотр = ЗадачаОбъект.Выполнена; + ФормаЗадачи.ТолькоПросмотр = ЗадачаОбъект.Выполнена; ИзменятьЗаданияЗаднимЧислом = ПолучитьФункциональнуюОпцию("ИзменятьЗаданияЗаднимЧислом"); ЭлементДатаИсполнения.Вид = ?(ИзменятьЗаданияЗаднимЧислом, ВидПоляФормы.ПолеВвода, ВидПоляФормы.ПолеНадписи); ЭлементГруппаСостояние.Видимость = ЗадачаОбъект.Выполнена; Если ЗадачаОбъект.Выполнена Тогда - Родитель = ?(ЭлементГруппаСостояние <> Неопределено, ЭлементГруппаСостояние, Форма); - Элемент = Форма.Элементы.Найти("__СостояниеЗадачиКартинка"); + Родитель = ?(ЭлементГруппаСостояние <> Неопределено, ЭлементГруппаСостояние, ФормаЗадачи); + Элемент = ФормаЗадачи.Элементы.Найти("__СостояниеЗадачиКартинка"); Если Элемент = Неопределено Тогда - Элемент = Форма.Элементы.Добавить("__СостояниеЗадачиКартинка", Тип("ДекорацияФормы"), Родитель); + Элемент = ФормаЗадачи.Элементы.Добавить("__СостояниеЗадачиКартинка", Тип("ДекорацияФормы"), Родитель); Элемент.Вид = ВидДекорацииФормы.Картинка; Элемент.Картинка = БиблиотекаКартинок.Информация32; Элемент.Высота = 2; Элемент.Ширина = 4; КонецЕсли; - Элемент = Форма.Элементы.Найти("__СостояниеЗадачи"); + Элемент = ФормаЗадачи.Элементы.Найти("__СостояниеЗадачи"); Если Элемент = Неопределено Тогда - Элемент = Форма.Элементы.Добавить("__СостояниеЗадачи", Тип("ДекорацияФормы"), Родитель); + Элемент = ФормаЗадачи.Элементы.Добавить("__СостояниеЗадачи", Тип("ДекорацияФормы"), Родитель); Элемент.Вид = ВидДекорацииФормы.Надпись; Элемент.Высота = 2; КонецЕсли; @@ -47,19 +52,19 @@ КонецЕсли; Если БизнесПроцессыИЗадачиВызовСервера.ЭтоВедущаяЗадача(ЗадачаОбъект.Ссылка) Тогда - Родитель = ?(ЭлементГруппаСостояние <> Неопределено, ЭлементГруппаСостояние, Форма); - Элемент = Форма.Элементы.Найти("__ВедущаяЗадачаКартинка"); + Родитель = ?(ЭлементГруппаСостояние <> Неопределено, ЭлементГруппаСостояние, ФормаЗадачи); + Элемент = ФормаЗадачи.Элементы.Найти("__ВедущаяЗадачаКартинка"); Если Элемент = Неопределено Тогда - Элемент = Форма.Элементы.Добавить("__ВедущаяЗадачаКартинка", Тип("ДекорацияФормы"), Родитель); + Элемент = ФормаЗадачи.Элементы.Добавить("__ВедущаяЗадачаКартинка", Тип("ДекорацияФормы"), Родитель); Элемент.Вид = ВидДекорацииФормы.Картинка; Элемент.Картинка = БиблиотекаКартинок.Информация32; Элемент.Высота = 2; Элемент.Ширина = 4; КонецЕсли; - Элемент = Форма.Элементы.Найти("__ВедущаяЗадача"); + Элемент = ФормаЗадачи.Элементы.Найти("__ВедущаяЗадача"); Если Элемент = Неопределено Тогда - Элемент = Форма.Элементы.Добавить("__ВедущаяЗадача", Тип("ДекорацияФормы"), Родитель); + Элемент = ФормаЗадачи.Элементы.Добавить("__ВедущаяЗадача", Тип("ДекорацияФормы"), Родитель); Элемент.Вид = ВидДекорацииФормы.Надпись; Элемент.Заголовок = НСтр("ru ='Это ведущая задача для вложенных бизнес-процессов.'"); Элемент.Высота = 2; @@ -71,12 +76,12 @@ // Вызывается при создании формы списка задач на сервере. // // Параметры -// УсловноеОформление - УсловноеОформление - условное оформление списка задач +// УсловноеОформлениеСпискаЗадач - УсловноеОформление - условное оформление списка задач // -Процедура УстановитьОформлениеЗадач(Знач УсловноеОформление) Экспорт +Процедура УстановитьОформлениеЗадач(Знач УсловноеОформлениеСпискаЗадач) Экспорт // установка оформления для просроченных задач - ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + ЭлементУсловногоОформления = УсловноеОформлениеСпискаЗадач.Элементы.Добавить(); ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СрокИсполнения"); @@ -86,7 +91,7 @@ ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СрокИсполнения"); ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше; - ЭлементОтбораДанных.ПравоеЗначение = КонецДня(ТекущаяДатаСеанса()); + ЭлементОтбораДанных.ПравоеЗначение = ТекущаяДатаСеанса(); ЭлементОтбораДанных.Использование = Истина; ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); @@ -100,7 +105,7 @@ ЭлементЦветаОформления.Использование = Истина; // установка оформления для выполненных задач - ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + ЭлементУсловногоОформления = УсловноеОформлениеСпискаЗадач.Элементы.Добавить(); ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Выполнена"); @@ -113,7 +118,7 @@ ЭлементЦветаОформления.Использование = Истина; // установка оформления для задач, не принятых к исполнению - ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + ЭлементУсловногоОформления = УсловноеОформлениеСпискаЗадач.Элементы.Добавить(); ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПринятаКИсполнению"); @@ -127,39 +132,43 @@ КонецПроцедуры -// Возвращает строковое представление исполнителя задачи. +// Возвращает строковое представление исполнителя задачи Исполнитель, +// либо указанного в параметрах РольИсполнителя, ОсновнойОбъектАдресации и ДополнительныйОбъектАдресации. // -// Возвращаемое значение: -// Строка -// -Функция ИсполнительСтрокой(Знач ПользовательСсылка, Знач РольСсылка, - Знач ОсновнойОбъектАдресации = Неопределено, - Знач ДополнительныйОбъектАдресации = Неопределено) Экспорт - - Если НЕ ПользовательСсылка.Пустая() Тогда - Возврат Строка(ПользовательСсылка) - ИначеЕсли НЕ РольСсылка.Пустая() Тогда - Возврат РольСтрокой(РольСсылка, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации); - КонецЕсли; - Возврат НСтр("ru = 'Не указан'"); - -КонецФункции - -// Возвращает строковое представление роли. -// -// Параметры -// Роль – Справочники.РолиИсполнителей – роль +// Параметры: +// Исполнитель - ПользовательСсылка - исполнитель задачи. +// РольИсполнителя – Справочники.РолиИсполнителей – роль // ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации - произвольный ссылочный тип. // // Возвращаемое значение: // Строка // -Функция РольСтрокой(Знач РольСсылка, - Знач ОсновнойОбъектАдресации = Неопределено, - Знач ДополнительныйОбъектАдресации = Неопределено) Экспорт +Функция ИсполнительСтрокой(Знач Исполнитель, Знач РольИсполнителя, + Знач ОсновнойОбъектАдресации = Неопределено, Знач ДополнительныйОбъектАдресации = Неопределено) Экспорт - Если НЕ РольСсылка.Пустая() Тогда - Результат = Строка(РольСсылка); + Если НЕ Исполнитель.Пустая() Тогда + Возврат Строка(Исполнитель) + ИначеЕсли НЕ РольИсполнителя.Пустая() Тогда + Возврат РольСтрокой(РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации); + КонецЕсли; + Возврат НСтр("ru = 'Не указан'"); + +КонецФункции + +// Возвращает строковое представление роли РольИсполнителя. +// +// Параметры +// РольИсполнителя – Справочники.РолиИсполнителей – роль +// ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации - произвольный ссылочный тип. +// +// Возвращаемое значение: +// Строка +// +Функция РольСтрокой(Знач РольИсполнителя, + Знач ОсновнойОбъектАдресации = Неопределено, Знач ДополнительныйОбъектАдресации = Неопределено) Экспорт + + Если НЕ РольИсполнителя.Пустая() Тогда + Результат = Строка(РольИсполнителя); Если ОсновнойОбъектАдресации <> Неопределено Тогда Результат = Результат + " (" + Строка(ОсновнойОбъектАдресации); Если ДополнительныйОбъектАдресации <> Неопределено Тогда @@ -173,7 +182,7 @@ КонецФункции -// Помечает на удаление задачи указанного бизнес-процесса. +// Помечает на удаление задачи бизнес-процесса БизнесПроцессСсылка. // // Параметры // БизнесПроцессСсылка - бизнес-процесс @@ -241,6 +250,9 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl index a2c471b65..e5e489b82 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl @@ -1,3 +1,14 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Бизнес-процессы и задачи" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события подсистемы. + // Обработчик подписки на событие ЗаписатьВСписокБизнесПроцессов. // Процедура ЗаписатьВСписокБизнесПроцессов(Источник, Отказ) Экспорт @@ -9,8 +20,7 @@ СписокПолей = "Номер,Дата,Завершен,Стартован,Автор,ДатаЗавершения,Наименование,ПометкаУдаления"; ЗначенияПолей = Новый Структура(СписокПолей); ЗаполнитьЗначенияСвойств(ЗначенияПолей, Источник, СписокПолей); - БизнесПроцессыИЗадачиВызовСервера.ЗаписатьВСписокБизнесПроцессов(Источник.Ссылка, - ЗначенияПолей); + БизнесПроцессыИЗадачиВызовСервера.ЗаписатьВСписокБизнесПроцессов(Источник.Ссылка, ЗначенияПолей); КонецПроцедуры @@ -44,16 +54,10 @@ Если Не Источник.ЭтоНовый() Тогда НовоеСостояние = Источник.Состояние; - СтароеСостояние = ПолучитьСостояниеБизнесПроцесса(Источник); + СтароеСостояние = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Источник.Ссылка, "Состояние"); Если НовоеСостояние <> СтароеСостояние Тогда БизнесПроцессыИЗадачиСервер.ПриИзмененииСостоянияБизнесПроцесса(Источник, СтароеСостояние, НовоеСостояние); КонецЕсли; КонецЕсли; КонецПроцедуры - -Функция ПолучитьСостояниеБизнесПроцесса(БизнесПроцесс) - - Возврат ОбщегоНазначения.ПолучитьЗначениеРеквизита(БизнесПроцесс.Ссылка, "Состояние"); - -КонецФункции diff --git a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl index 4a92d3707..900a5ff59 100644 --- a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl @@ -1,13 +1,434 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Варианты отчетов" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Позволяет установить описание варианта отчета. Для использования из модуля менеджера отчета. +// +// Параметры: +// Настройки (Структура) Передается "как есть" из первого параметра процедуры НастройкиОтчета. +// Ключ (Строка) Имя варианта отчета. Если необходимо зарегистрировать сам отчет, а не вариант +// (например, если отчет не на СКД), то в этот параметр необходимо передать "_СсылкаНаОтчет". +// Описание (Строка) Описание варианта отчета. Локализуем. +// +// Например: +// Процедура НастройкиОтчета(Настройки) Экспорт +// ВариантыОтчетов.УстановитьОписаниеВариантаВДопНастройках(Настройки, "ПОСчету50", НСтр("ru = 'Кассовые операции за текущий месяц'")); +// КонецПроцедуры +// +Процедура УстановитьОписаниеВариантаВДопНастройках(Настройки, Ключ, Описание) Экспорт + + Настройки.ОписаниеВариантов.Вставить(Ключ, Описание); + +КонецПроцедуры + +////////////////////////////////////////////////////////////////// +// Работа с дополнительными настройками + +// Добавить вариант отчета в подсистему. Для использования в функции КомандныйИнтерфейс +// общего модуля ВариантыОтчетовПереопределяемый. +// +// Параметры: +// ДопНастройки - параметр настройки процедуры НастройкиОтчетов +// Ключ - общий ключ варианта отчета "Отчет.Взаиморасчеты\Основной" +// ПутьКПодсистеме - путь к подсистеме, к которой вариант привязывается +// +// Пример кода: +// +// Функция КомандныйИнтерфейс() Экспорт +// ДанныеОПодсистемахВариантов = ВариантыОтчетов.НоваяСтруктураКомандногоИнтерфейса(); +// ВариантыОтчетов.ДобавитьПодсистемуВариантаВДопНастройках(Настройки, "Отчет.ДинамикаИзмененийФайлов\СводнаяДиаграммаИзменения", "Администрирование"); +// Возврат ДанныеОПодсистемахВариантов; +// КонецФункции +// +Процедура ДобавитьПодсистемуВариантаВДопНастройках(ДопНастройки, Ключ, ПутьКПодсистеме) Экспорт + + Если ДопНастройки = Неопределено или Ключ = "" или ПутьКПодсистеме = "" тогда + Возврат; + КонецЕсли; + + СтрокаПодсистемы = ДопНастройки.СоответствиеПодсистемИВариантов.Добавить(); + СтрокаПодсистемы.Ключ = Ключ; + СтрокаПодсистемы.ПутьКПодсистеме = ПутьКПодсистеме; + +Конецпроцедуры + +// Удалить вариант отчета из подсистемы. Для использования в функции КомандныйИнтерфейс +// переопределяемого модуля. +// +// Параметры: +// ДопНастройки - параметр настройки процедуры НастройкиОтчетов +// Ключ - общий ключ варианта отчета "Отчет.Взаиморасчеты\Основной" +// ПутьКПодсистеме - путь к подсистеме, к которой вариант привязывается +// +// Пример кода: +// ВариантыОтчетов.УдалитьПодсистемуВариантаВДопНастройках(ДанныеОПодсистемахВариантов, "Отчет.ДинамикаИзмененийФайлов\СводнаяДиаграммаИзменения", "Администрирование"); +// +Процедура УдалитьПодсистемуВариантаВДопНастройках(ДопНастройки, Ключ, ПутьКПодсистеме) Экспорт + + Если ДопНастройки = Неопределено или Ключ = "" или ПутьКПодсистеме = "" тогда + Возврат; + КонецЕсли; + + СтрокаНеИспПодсистем = ДопНастройки.НеИспользоватьПодсистемыОтчета.Добавить(); + СтрокаНеИспПодсистем.Ключ = Ключ; + СтрокаНеИспПодсистем.ПутьКПодсистеме = ПутьКПодсистеме; + +КонецПроцедуры + +// Добавить вариант отчета не на базе СКД. Для использования в процедуре НастройкиОтчета +// менеджера отчета. +// +// Параметры: +// ДопНастройки - параметр настройки процедуры НастройкиОтчетов +// Ключ - общий ключ варианта отчета "Отчет.Взаиморасчеты\Основной" +// Представление - представление варианта отчета +// ЗначениеНастройки - путь к подсистеме, к которой вариант привязывается +// +// Пример кода: +// +// Процедура НастройкиОтчета(Настройки) Экспорт +// ВариантыОтчетов.ДобавитьПредопределенныйВариантВДопНастройках(Настройки, "Отчет.ОСВ\ПОСчету50", НСтр("ru = 'Кассовые операции'"), Новый Структура("Счет", 50)); +// КонецПроцедуры +// +Процедура ДобавитьПредопределенныйВариантВДопНастройках(ДопНастройки, Ключ, Представление, ЗначениеНастройки) Экспорт + + Если ДопНастройки = Неопределено или Ключ = "" или Представление = "" тогда + Возврат; + КонецЕсли; + + ДопНастройки.ПредопределенныеВариантыБезСКД.Добавить(Ключ, Представление); + ДопНастройки.ЗначенияНастроекОтчетовБезСКД.Вставить(Ключ, ЗначениеНастройки); + +КонецПроцедуры + +// Возвращает структуру данных для переопределения командного интерфейса. +// +Функция НоваяСтруктураКомандногоИнтерфейса() Экспорт + + ДанныеОПодсистемахВариантов = Новый Структура("СоответствиеПодсистемИВариантов, НеИспользоватьПодсистемыОтчета"); + ДанныеОПодсистемахВариантов.СоответствиеПодсистемИВариантов = Новый ТаблицаЗначений; + ДанныеОПодсистемахВариантов.СоответствиеПодсистемИВариантов.Колонки.Добавить("Ключ"); + ДанныеОПодсистемахВариантов.СоответствиеПодсистемИВариантов.Колонки.Добавить("ПутьКПодсистеме"); + + ДанныеОПодсистемахВариантов.НеИспользоватьПодсистемыОтчета = Новый ТаблицаЗначений; + ДанныеОПодсистемахВариантов.НеИспользоватьПодсистемыОтчета.Колонки.Добавить("Ключ"); + ДанныеОПодсистемахВариантов.НеИспользоватьПодсистемыОтчета.Колонки.Добавить("ПутьКПодсистеме"); + + Возврат ДанныеОПодсистемахВариантов; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции + +// Возвращает список значений подсистем отчетов. +// Для внутреннего использования. +// +Функция ПолучитьСписокПодсистемОтчетов() Экспорт + + СоответствиеПодсистемОтчетам = Новый ТаблицаЗначений; + СоответствиеПодсистемОтчетам.Колонки.Добавить("Отчет"); + СоответствиеПодсистемОтчетам.Колонки.Добавить("ПутьКПодсистеме"); + СоответствиеПодсистемОтчетам.Колонки.Добавить("НазваниеПодсистемы"); + СоответствиеПодсистемОтчетам.Колонки.Добавить("Пояснение"); + + Для каждого Подсистема из Метаданные.Подсистемы Цикл + Если Не Подсистема.ВключатьВКомандныйИнтерфейс тогда + Продолжить; + КонецЕсли; + Путь = Подсистема.Имя; + ДобавитьОтчетыПодсистемы(Подсистема, СоответствиеПодсистемОтчетам, Путь); + КонецЦикла; + + Возврат СоответствиеПодсистемОтчетам; + +КонецФункции + +// Возвращает список виртуальных подсистем. +// Для внутреннего использования. +// +Функция ПолучитьВиртуальныеПодсистемы(ПутьПодсистемы) Экспорт + + ПодсистемыВиртуальные = Новый СписокЗначений; + + ПутиИПодсистем = ПолучитьПутьВиртуальныхПодсистем(); + + Для каждого ЗначениеПути из ПутиИПодсистем Цикл + + Если ЗначениеПути.Значение.ПутьПодсистемы = ПутьПодсистемы тогда + ПодсистемыВиртуальные.Добавить(ЗначениеПути.Значение.ПутьПодсистемы+"\"+ ЗначениеПути.Значение.ИмяПодсистемы, ЗначениеПути.Представление); + КонецЕсли; + + КонецЦикла; + + Возврат ПодсистемыВиртуальные; + +КонецФункции + +// Возвращает список подсистем (разделов). +// Для внутреннего использования. +// +Функция ПолучитьСписокПодсистем(ПутиПодсистемы, ДеревоПодсистем) Экспорт + + СписокПодсистем = Новый СписокЗначений; + + Для каждого Подсистема из Метаданные.Подсистемы Цикл + + Если Не Подсистема.ВключатьВКомандныйИнтерфейс тогда + Продолжить; + КонецЕсли; + + ПутьКПодсистеме = Подсистема.Имя; + + ПодсистемаПрисутствует = ложь; + + Для каждого ЭлементПодсистемы из ПутиПодсистемы Цикл + ПутьПодсистемы = ЭлементПодсистемы.Значение; + Если Найти(ПутьКПодсистеме, ПутьПодсистемы) > 0 тогда + ПодсистемаПрисутствует = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ПодсистемаПрисутствует тогда + СтрокаДереваПодсистем = ДеревоПодсистем.Строки.Добавить(); + СтрокаДереваПодсистем.Подсистема = ПутьКПодсистеме; + СтрокаДереваПодсистем.Название = Подсистема.Синоним; + + ЕстьПравоПросмотра = ПравоДоступа("Просмотр", Подсистема); + Если НЕ ЕстьПравоПросмотра тогда + Продолжить; + КонецЕсли; + + ПараметрыФункциональнаяОпция = Новый Структура(""); + + ДоступенПоФункциональнаяОпцияОпциям = ложь; + СодержитсяВФункциональнаяОпция = ложь; + Для каждого ФункциональнаяОпция из Метаданные.ФункциональныеОпции Цикл + + Если Не ФункциональнаяОпция.Состав.Содержит(Подсистема) тогда + Продолжить; + КонецЕсли; + + СодержитсяВФункциональнаяОпция = Истина; + + ЗначениеФункциональнаяОпция = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, ПараметрыФункциональнаяОпция); + Если ТипЗнч(ЗначениеФункциональнаяОпция) = Тип("Булево") тогда + Если ЗначениеФункциональнаяОпция тогда + ДоступенПоФункциональнаяОпцияОпциям = истина; + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если СодержитсяВФункциональнаяОпция И НЕ ДоступенПоФункциональнаяОпцияОпциям тогда + Продолжить; + КонецЕсли; + + + СтрокаПодсистемы = СписокПодсистем.Добавить(); + СтрокаПодсистемы.Значение = ПутьКПодсистеме; + СтрокаПодсистемы.Представление = Подсистема.Синоним; + ДобавитьДеревоПодсистем(СписокПодсистем, Подсистема, ПутьКПодсистеме, СтрокаДереваПодсистем); + КонецЕсли; + + КонецЦикла; + + ВиртуальныеПодсистемы = ПолучитьВиртуальныеПодсистемы(Подсистема); + + Для каждого Подсистема из ВиртуальныеПодсистемы Цикл + + ПутьКПодсистеме = Подсистема.Значение; + + ПодсистемаПрисутствует = ложь; + + Для каждого ЭлементПодсистемы из ПутиПодсистемы Цикл + ПутьПодсистемы = ЭлементПодсистемы.Значение; + Если Найти(ПутьКПодсистеме, ПутьПодсистемы) > 0 тогда + ПодсистемаПрисутствует = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ПодсистемаПрисутствует тогда + + СтрокаДереваПодсистем = ДеревоПодсистем.Строки.Добавить(); + СтрокаДереваПодсистем.Подсистема = ПутьКПодсистеме; + СтрокаДереваПодсистем.Название = Подсистема.Представление; + + СтрокаПодсистемы = СписокПодсистем.Добавить(); + СтрокаПодсистемы.Значение = Подсистема.Значение; + СтрокаПодсистемы.Представление = Подсистема.Представление; + ДобавитьДеревоВиртуальныхПодсистем(СписокПодсистем, Подсистема.Значение, СтрокаДереваПодсистем); + КонецЕсли; + + КонецЦикла; + + Возврат СписокПодсистем; + +КонецФункции + +// Заменяет запрещенные символы в именах элементов формы на их допустимые аналоги. +// +Функция ЗаменитьЗапрещенныеСимволы(Знач СтрокаДляЗамены) Экспорт + + СтрокаРезультат = СтрокаДляЗамены; + + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ".", "_Точка_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ",", "_Зап_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "\", "_Слэш_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "-", "_Тирэ_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, " ", "_П_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "!", "_Воскл_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "@", "_Соб_"); + + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "№", "_Ном_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ";", "_ТЗап_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "%", "_Проц_"); + + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ":", "_ДвТ_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "?", "_Воп_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "*", "_Звезд_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "(", "_ОСк_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ")", "_ЗСк_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "=", "_Рав_"); + + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "~", "_Вол_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "`", "_Ап_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "#", "_Реш_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "$", "_Дол_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "^", "_Степ_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "&", "_Анд_"); + + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "{", "_ОФС_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "{", "_ЗФС_"); + + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "[", "_ОКС_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "[", "_ЗКС_"); + + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, """", "_Кав_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "'", "_ОКав_"); + + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "|", "_Пал_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "\", "_ПСл_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "/", "_ОСл_"); + + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ">", "_Бол_"); + СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "<", "_Мен_"); + + Возврат СтрокаРезультат; + +КонецФункции + +// Возвращает шаблон заполнения для доп. настроек отчета. +// Для внутреннего использования. +// +Функция ПолучитьСтруктуруДополнительныхНастроек() Экспорт + + ДополнительныеНастройки = Новый Структура("ПредопределенныеВариантыБезСКД, + |ЗначенияНастроекОтчетовБезСКД, + |ОписаниеВариантов"); + + ДополнительныеНастройки.ПредопределенныеВариантыБезСКД = Новый СписокЗначений; + ДополнительныеНастройки.ЗначенияНастроекОтчетовБезСКД = Новый Соответствие; + + ДополнительныеНастройки.ОписаниеВариантов = Новый Соответствие; + + Возврат ДополнительныеНастройки; + +КонецФункции + +// Получает право изменения вариантов отчета +// +// Параметры: +// КлючОбъекта - (...) +// |- (Неопределено) - Право проверяется для всех отчетов конфигурации +// |- (Строка) - Имя отчета с точкой +// +// Возвращаемое значение: +// Истина - Есть право изменения вариантов +// Ложь - Нет права изменения вариантов +// +Функция ПравоИзмененияВариантов(КлючОбъекта = Неопределено, ЧерезИсключение = Ложь) Экспорт + Если КлючОбъекта = Неопределено Тогда + + Для Каждого ОтчетМД Из Метаданные.Отчеты Цикл + Если НЕ ПравоДоступа("Просмотр", ОтчетМД) Тогда + Если ЧерезИсключение Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав доступа для работы с отчетом %1'"), + ОтчетМД.Представление() + ); + Иначе + Возврат Ложь; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Иначе + + ОтчетМД = Метаданные.Отчеты.Найти(СтрЗаменить(КлючОбъекта, "Отчет.", "")); + Если ОтчетМД = Неопределено Тогда + Если ЧерезИсключение Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отчет %1 не найден в системе'"), + КлючОбъекта + ); + Иначе + Возврат Ложь; + КонецЕсли; + ИначеЕсли НЕ ПравоДоступа("Использование", ОтчетМД) Тогда + Если ЧерезИсключение Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав доступа к отчету %1'"), + ОтчетМД.Представление() + ); + Иначе + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + Возврат Истина; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "ВариантыОтчетов.ОбработкаПредопределенныхВариантов"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.2.3"; + Обработчик.Процедура = "ВариантыОтчетов.УстановитьПризнакВариантаВнешнегоОтчета"; + +КонецПроцедуры // Регистрирует предопределенные варианты отчетов при обновлении ИБ и заполнении пустой ИБ. // // Параметры: -// ИзмененныеОбъектыДанных - (Соответствие) -// |- Ключ - (Строка) Старое имя отчета -// |- Значение - (Строка) Новое имя отчета -// +// ИзмененныеОбъектыДанных (Соответствие) +// |- Ключ (Строка) Старое имя отчета +// |- Значение (Строка) Новое имя отчета +// Функция ОбработкаПредопределенныхВариантов(ИзмененныеОбъектыДанных = Неопределено) Экспорт // обновить название отчетов и ключи объектов @@ -315,11 +736,25 @@ ВариантОбъект.УстановитьПометкуУдаления(истина); КонецЦикла; + // перенос вариантов отчетов + Если ХранилищеВариантовОтчетов = ХранилищаНастроек.ХранилищеВариантовОтчетов Тогда + ЗавершитьКонвертациюВариантовОтчетов(); + Иначе + ПрямаяКонвертацияВариантовОтчетов(); + КонецЕсли; + ЗафиксироватьТранзакцию(); Исключение ОписаниеОшибки = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации(НСТр("ru = 'Обновление вариантов отчетов'"), УровеньЖурналаРегистрации.Ошибка,,, - ПодробноеПредставлениеОшибки(ОписаниеОшибки)); + ЗаписьЖурналаРегистрации( + ИмяСобытия(), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники.ВариантыОтчетов, + , + НСТр("ru = 'В процессе обновления вариантов возникла ошибка:'") + + Символы.ПС + + ПодробноеПредставлениеОшибки(ОписаниеОшибки) + ); ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; @@ -327,346 +762,269 @@ Возврат истина; КонецФункции -////////////////////////////////////////////////////////////////// -// РАБОТА С ДОПОЛНИТЕЛЬНЫМИ НАСТРОЙКАМИ - -// Добавить вариант отчета в подсистему. Для использования в функции КомандныйИнтерфейс -// общего модуля ВариантыОтчетовПереопределяемый. +// Загружает варианты, предварительно сохраненные из системного хранилища вариантов в хранилище общих настроек, +// в хранилище подсистемы. +// Используется для загрузки вариантов отчетов при полном или частичном внедрении. +// При полном внедрении может вызваться из обработки "ПереносВариантовОтчетов". // // Параметры: -// ДопНастройки - параметр настройки процедуры НастройкиОтчетов -// Ключ - общий ключ варианта отчета "Отчет.Взаиморасчеты\Основной" -// ПутьКПодсистеме - путь к подсистеме, к которой вариант привязывается -// -// Пример кода: -// -// Функция КомандныйИнтерфейс() Экспорт -// ДанныеОПодсистемахВариантов = ВариантыОтчетов.НоваяСтруктураКомандногоИнтерфейса(); -// ВариантыОтчетов.ДобавитьПодсистемуВариантаВДопНастройках(Настройки, "Отчет.ДинамикаИзмененийФайлов\СводнаяДиаграммаИзменения", "Администрирование"); -// Возврат ДанныеОПодсистемахВариантов; -// КонецФункции -// -Процедура ДобавитьПодсистемуВариантаВДопНастройках(ДопНастройки, Ключ, ПутьКПодсистеме) Экспорт +// ТаблицаВариантов - (ТаблицаЗначений) Необязательный. Используется в системных целях. +// +Процедура ЗавершитьКонвертациюВариантовОтчетов(ТаблицаВариантов = Неопределено) Экспорт - Если ДопНастройки = Неопределено или Ключ = "" или ПутьКПодсистеме = "" тогда - Возврат; + Если ТаблицаВариантов = Неопределено Тогда + ТаблицаВариантов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПереносВариантовОтчетов", "ТаблицаВариантов", , , ""); КонецЕсли; - СтрокаПодсистемы = ДопНастройки.СоответствиеПодсистемИВариантов.Добавить(); - СтрокаПодсистемы.Ключ = Ключ; - СтрокаПодсистемы.ПутьКПодсистеме = ПутьКПодсистеме; - -Конецпроцедуры - -// Удалить вариант отчета из подсистемы. Для использования в процедуре НастройкиОтчета -// менеджера отчета. -// -// Параметры: -// ДопНастройки - параметр настройки процедуры НастройкиОтчетов -// Ключ - общий ключ варианта отчета "Отчет.Взаиморасчеты\Основной" -// ПутьКПодсистеме - путь к подсистеме, к которой вариант привязывается -// -// Пример кода: -// -// Процедура НастройкиОтчета(Настройки) Экспорт -// ВариантыОтчетов.ДобавитьПодсистемуВариантаВДопНастройках(Настройки, "Отчет.ДинамикаИзмененийФайлов\СводнаяДиаграммаИзменения", "Администрирование"); -// КонецПроцедуры -// -Процедура УдалитьПодсистемуВариантаВДопНастройках(ДопНастройки, Ключ, ПутьКПодсистеме) Экспорт - - Если ДопНастройки = Неопределено или Ключ = "" или ПутьКПодсистеме = "" тогда - Возврат; + Если ТипЗнч(ТаблицаВариантов) <> Тип("ТаблицаЗначений") ИЛИ ТаблицаВариантов.Количество() = 0 Тогда + Возврат; КонецЕсли; - СтрокаНеИспПодсистем = ДопНастройки.НеИспользоватьПодсистемыОтчета.Добавить(); - СтрокаНеИспПодсистем.Ключ = Ключ; - СтрокаНеИспПодсистем.ПутьКПодсистеме = ПутьКПодсистеме; + ТаблицаВариантов.Сортировать("Отчет Возр, Вариант Возр"); -КонецПроцедуры - -// Добавить вариант отчета не на базе СКД. Для использования в процедуре НастройкиОтчета -// менеджера отчета. -// -// Параметры: -// ДопНастройки - параметр настройки процедуры НастройкиОтчетов -// Ключ - общий ключ варианта отчета "Отчет.Взаиморасчеты\Основной" -// Представление - представление варианта отчета -// ЗначениеНастройки - путь к подсистеме, к которой вариант привязывается -// -// Пример кода: -// -// Процедура НастройкиОтчета(Настройки) Экспорт -// ВариантыОтчетов.ДобавитьПредопределенныйВариантВДопНастройках(Настройки, "Отчет.ОСВ\ПОСчету50", "Кассовые операции", Новый Структура("Счет", 50); -// КонецПроцедуры -// -Процедура ДобавитьПредопределенныйВариантВДопНастройках(ДопНастройки, Ключ, Представление, ЗначениеНастройки) Экспорт + // Существующие варианты отчетов + ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаВариантов.Отчет, + | ТаблицаВариантов.Вариант, + | ТаблицаВариантов.Автор + |ПОМЕСТИТЬ втВарианты + |ИЗ + | &ТаблицаВариантов КАК ТаблицаВариантов + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | втВарианты.Отчет, + | втВарианты.Вариант, + | ВариантыОтчетов.Ссылка, + | ПользователиПоИмени.Ссылка КАК ПользовательПоИмени + |ИЗ + | втВарианты КАК втВарианты + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК ПользователиПоИмени + | ПО втВарианты.Автор = ПользователиПоИмени.Наименование + | И (ПользователиПоИмени.ПометкаУдаления = ЛОЖЬ) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | ПО втВарианты.Отчет = ВариантыОтчетов.КлючОбъекта + | И втВарианты.Вариант = ВариантыОтчетов.КлючВарианта"; - Если ДопНастройки = Неопределено или Ключ = "" или Представление = "" тогда - Возврат; - КонецЕсли; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТаблицаВариантов", ТаблицаВариантов); + Запрос.Текст = ТекстЗапроса; - ДопНастройки.ПредопределенныеВариантыБезСКД.Добавить(Ключ, Представление); - ДопНастройки.ЗначенияНастроекОтчетовБезСКД.Вставить(Ключ, ЗначениеНастройки); + ВариантыБД = Запрос.Выполнить().Выгрузить(); -КонецПроцедуры - -// Установить описание варианта отчета. Для использования в процедуре НастройкиОтчета -// менеджера отчета. -// -// Параметры: -// ДопНастройки - параметр настройки процедуры НастройкиОтчетов -// Ключ - общий ключ варианта отчета "Отчет.Взаиморасчеты\Основной" -// Описание - описание варианта отчета -// -// Пример кода: -// -// Процедура НастройкиОтчета(Настройки) Экспорт -// ВариантыОтчетов.УстановитьОписаниеВариантаВДопНастройках(Настройки, "Отчет.ОСВ\ПОСчету50", "Кассовые операции за текущий месяц"); -// КонецПроцедуры -// -Процедура УстановитьОписаниеВариантаВДопНастройках(ДопНастройки, Ключ, Описание) Экспорт + // Авторы вариантов + ТекстЗапроса = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Пользователь, + | Пользователи.ИдентификаторПользователяИБ КАК Идентификатор + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяИБ В(&Идентификаторы) + | И Пользователи.ПометкаУдаления = ЛОЖЬ"; - ДопНастройки.ОписаниеВариантов.Вставить(Ключ, Описание); + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Идентификаторы", ТаблицаВариантов.ВыгрузитьКолонку("ИдентификаторАвтора")); + Запрос.Текст = ТекстЗапроса; -КонецПроцедуры - -// Возвращает структуру данных для переопределения командного интерфейса. -// -Функция НоваяСтруктураКомандногоИнтерфейса() Экспорт + ПользователиПоИдентификатору = Запрос.Выполнить().Выгрузить(); + + // Пользователь по умолчанию + ТекущийПользователь = Пользователи.ТекущийПользователь(); + + // (ТаблицаЗначений) Колонки: Отчет, ПутьКПодсистеме, НазваниеПодсистемы, Пояснение + ПодсистемыОтчетов = ПолучитьСписокПодсистемОтчетов(); + + // Загрузка вариантов в хранилище подсистемы + НачатьТранзакцию(); + Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл + Найденные = ВариантыБД.НайтиСтроки(Новый Структура("Отчет, Вариант", СтрокаТаблицы.Отчет, СтрокаТаблицы.Вариант)); + ВариантБД = Найденные[0]; - ДанныеОПодсистемахВариантов = Новый Структура("СоответствиеПодсистемИВариантов, НеИспользоватьПодсистемыОтчета"); - ДанныеОПодсистемахВариантов.СоответствиеПодсистемИВариантов = Новый ТаблицаЗначений; - ДанныеОПодсистемахВариантов.СоответствиеПодсистемИВариантов.Колонки.Добавить("Ключ"); - ДанныеОПодсистемахВариантов.СоответствиеПодсистемИВариантов.Колонки.Добавить("ПутьКПодсистеме"); - - ДанныеОПодсистемахВариантов.НеИспользоватьПодсистемыОтчета = Новый ТаблицаЗначений; - ДанныеОПодсистемахВариантов.НеИспользоватьПодсистемыОтчета.Колонки.Добавить("Ключ"); - ДанныеОПодсистемахВариантов.НеИспользоватьПодсистемыОтчета.Колонки.Добавить("ПутьКПодсистеме"); - - Возврат ДанныеОПодсистемахВариантов; - -КонецФункции - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ВНУТРЕННИЕ ПРОЦЕДУРЫ ПОДСИСТЕМЫ - -// Возвращает список значений подсистем отчетов. -// Для внутреннего использования. -// -Функция ПолучитьСписокПодсистемОтчетов() Экспорт - - СоответствиеПодсистемОтчетам = Новый ТаблицаЗначений; - СоответствиеПодсистемОтчетам.Колонки.Добавить("Отчет"); - СоответствиеПодсистемОтчетам.Колонки.Добавить("ПутьКПодсистеме"); - СоответствиеПодсистемОтчетам.Колонки.Добавить("НазваниеПодсистемы"); - СоответствиеПодсистемОтчетам.Колонки.Добавить("Пояснение"); - - Для каждого Подсистема из Метаданные.Подсистемы Цикл - Если Не Подсистема.ВключатьВКомандныйИнтерфейс тогда - Продолжить; - КонецЕсли; - Путь = Подсистема.Имя; - ДобавитьОтчетыПодсистемы(Подсистема, СоответствиеПодсистемОтчетам, Путь); - КонецЦикла; - - Возврат СоответствиеПодсистемОтчетам; - -КонецФункции - -// Возвращает список виртуальных подсистем. -// Для внутреннего использования. -// -Функция ПолучитьВиртуальныеПодсистемы(ПутьПодсистемы) Экспорт - - ПодсистемыВиртуальные = Новый СписокЗначений; - - ПутиИПодсистем = ПолучитьПутьВиртуальныхПодсистем(); - - Для каждого ЗначениеПути из ПутиИПодсистем Цикл - - Если ЗначениеПути.Значение.ПутьПодсистемы = ПутьПодсистемы тогда - ПодсистемыВиртуальные.Добавить(ЗначениеПути.Значение.ПутьПодсистемы+"\"+ ЗначениеПути.Значение.ИмяПодсистемы, ЗначениеПути.Представление); - КонецЕсли; - - КонецЦикла; - - Возврат ПодсистемыВиртуальные; - -КонецФункции - -// Возвращает список подсистем (разделов). -// Для внутреннего использования. -// -Функция ПолучитьСписокПодсистем(ПутиПодсистемы, ДеревоПодсистем) Экспорт - - СписокПодсистем = Новый СписокЗначений; - - Для каждого Подсистема из Метаданные.Подсистемы Цикл - - Если Не Подсистема.ВключатьВКомандныйИнтерфейс тогда + // Если вариант уже загружен в справочник "Варианты отчетов" - не загружаем его. + Если ЗначениеЗаполнено(ВариантБД.Ссылка) Тогда Продолжить; КонецЕсли; - ПутьКПодсистеме = Подсистема.Имя; + // СправочникОбъект + ВариантОбъект = Справочники.ВариантыОтчетов.СоздатьЭлемент(); - ПодсистемаПрисутствует = ложь; + // Настройки КД + ВариантОбъект.ХранилищеЗначений = СтрокаТаблицы.Настройка; - Для каждого ЭлементПодсистемы из ПутиПодсистемы Цикл - ПутьПодсистемы = ЭлементПодсистемы.Значение; - Если Найти(ПутьКПодсистеме, ПутьПодсистемы) > 0 тогда - ПодсистемаПрисутствует = Истина; - Прервать; - КонецЕсли; + // Заполнение нового варианта + ВариантОбъект.КлючОбъекта = СтрокаТаблицы.Отчет; + ВариантОбъект.КлючВарианта = СтрокаТаблицы.Вариант; + ВариантОбъект.ПредставлениеОбъекта = СтрокаТаблицы.ПредставлениеОтчета; + ВариантОбъект.Наименование = СтрокаТаблицы.ПредставлениеВарианта; + + // Тип варианта + ОтчетМетаданные = Метаданные.Отчеты.Найти(СтрЗаменить(СтрокаТаблицы.Отчет, "Отчет.", "")); + Если ОтчетМетаданные = Неопределено Тогда + ВариантОбъект.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.ВнешнийОтчет; + Иначе + ВариантОбъект.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Пользовательский; + КонецЕсли; + + // Автор варианта + ПользовательПоИД = ПользователиПоИдентификатору.Найти(СтрокаТаблицы.ИдентификаторАвтора, "Идентификатор"); + Если ПользовательПоИД <> Неопределено И ЗначениеЗаполнено(ПользовательПоИД.Пользователь) Тогда + ВариантОбъект.Администратор = ПользовательПоИД.Пользователь; + ИначеЕсли ВариантБД <> Неопределено И ЗначениеЗаполнено(ВариантБД.ПользовательПоИмени) Тогда + ВариантОбъект.Администратор = ВариантБД.ПользовательПоИмени; + Иначе + ВариантОбъект.Записать(); + ЗаписьЖурналаРегистрации( + ИмяСобытия(), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники.ВариантыОтчетов, + ВариантОбъект.Ссылка, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Вариант ""%1"" отчета ""%2"": не найден автор ""%3""'"), + ВариантОбъект.Наименование, + ВариантОбъект.ПредставлениеОбъекта, + СтрокаТаблицы.Автор + ) + ); + КонецЕсли; + + // Быстрый доступ - только для автора + ВариантОбъект.БыстрыйДоступ = Ложь; + ВариантОбъект.ИсключенияБыстрогоДоступа.Добавить().Пользователь = ВариантОбъект.Администратор; + + // Подсистемы варианта + ПодсистемыОтчета = ПодсистемыОтчетов.НайтиСтроки(Новый Структура("Отчет", ВариантОбъект.КлючОбъекта)); + Для Каждого Подсистема Из ПодсистемыОтчета Цикл + СтрокаПодсистемы = ВариантОбъект.Подсистемы.Добавить(); + СтрокаПодсистемы.Подсистема = Подсистема.ПутьКПодсистеме; + СтрокаПодсистемы.Название = Подсистема.НазваниеПодсистемы; + СтрокаПодсистемы.Предопределенная = Истина; КонецЦикла; - Если ПодсистемаПрисутствует тогда - СтрокаДереваПодсистем = ДеревоПодсистем.Строки.Добавить(); - СтрокаДереваПодсистем.Подсистема = ПутьКПодсистеме; - СтрокаДереваПодсистем.Название = Подсистема.Синоним; - - ЕстьПравоПросмотра = ПравоДоступа("Просмотр", Подсистема); - Если НЕ ЕстьПравоПросмотра тогда + ВариантОбъект.Записать(); + КонецЦикла; + ЗафиксироватьТранзакцию(); + + // Очистка + ОбщегоНазначения.ХранилищеОбщихНастроекУдалить("ПереносВариантовОтчетов", "ТаблицаВариантов", ""); +КонецПроцедуры // ЗавершитьКонвертациюВариантовОтчетов() + +// Загружает варианты из системного хранилища вариантов в хранилище подсистемы при частичном внедрении. +// +// Параметры: +// ИспользоватьДопОтчеты - (Булево) Признак поиска вариантов отчетов подсистемы "Дополнительные отчеты и обработки" +// +Процедура ПрямаяКонвертацияВариантовОтчетов() Экспорт + + // Результат, который будет сохранен в хранилище + ТипСтрока = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(1000)); + ТаблицаВариантов = Новый ТаблицаЗначений; + ТаблицаВариантов.Колонки.Добавить("Отчет", ТипСтрока); + ТаблицаВариантов.Колонки.Добавить("Вариант", ТипСтрока); + ТаблицаВариантов.Колонки.Добавить("Автор", ТипСтрока); + ТаблицаВариантов.Колонки.Добавить("Настройка", Новый ОписаниеТипов("ХранилищеЗначения")); + ТаблицаВариантов.Колонки.Добавить("ПредставлениеОтчета", ТипСтрока); + ТаблицаВариантов.Колонки.Добавить("ПредставлениеВарианта", ТипСтрока); + ТаблицаВариантов.Колонки.Добавить("ИдентификаторАвтора", Новый ОписаниеТипов("УникальныйИдентификатор")); + + ВыборкаХранилища = ХранилищеВариантовОтчетов.Выбрать(); + ОшибокЧтенияПодряд = 0; + Пока Истина Цикл + Попытка + ЭлементВыборкиПолучен = ВыборкаХранилища.Следующий(); + ОшибокЧтенияПодряд = 0; + Исключение + ЭлементВыборкиПолучен = Неопределено; + ОшибокЧтенияПодряд = ОшибокЧтенияПодряд + 1; + ЗаписьЖурналаРегистрации( + ИмяСобытия(), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники.ВариантыОтчетов, + , + НСтр("ru = 'В процессе выборки вариантов отчетов из стандартного хранилища возникла ошибка:'") + + Символы.ПС + + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + + Если ЭлементВыборкиПолучен = Ложь Тогда + Прервать; + ИначеЕсли ЭлементВыборкиПолучен = Неопределено Тогда + Если ОшибокЧтенияПодряд > 100 Тогда + Прервать; + Иначе Продолжить; КонецЕсли; - - ПараметрыФункциональнаяОпция = Новый Структура(""); - - ДоступенПоФункциональнаяОпцияОпциям = ложь; - СодержитсяВФункциональнаяОпция = ложь; - Для каждого ФункциональнаяОпция из Метаданные.ФункциональныеОпции Цикл - - Если Не ФункциональнаяОпция.Состав.Содержит(Подсистема) тогда - Продолжить; - КонецЕсли; - - СодержитсяВФункциональнаяОпция = Истина; - - ЗначениеФункциональнаяОпция = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, ПараметрыФункциональнаяОпция); - Если ТипЗнч(ЗначениеФункциональнаяОпция) = Тип("Булево") тогда - Если ЗначениеФункциональнаяОпция тогда - ДоступенПоФункциональнаяОпцияОпциям = истина; - Прервать; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если СодержитсяВФункциональнаяОпция И НЕ ДоступенПоФункциональнаяОпцияОпциям тогда + КонецЕсли; + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ВыборкаХранилища.Пользователь); + Если ПользовательИБ = Неопределено Тогда + Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ВыборкаХранилища.Пользователь, Истина); + Если НЕ ЗначениеЗаполнено(Пользователь) Тогда Продолжить; КонецЕсли; - - - СтрокаПодсистемы = СписокПодсистем.Добавить(); - СтрокаПодсистемы.Значение = ПутьКПодсистеме; - СтрокаПодсистемы.Представление = Подсистема.Синоним; - ДобавитьДеревоПодсистем(СписокПодсистем, Подсистема, ПутьКПодсистеме, СтрокаДереваПодсистем); + ИдентификаторПользователя = Пользователь.ИдентификаторПользователяИБ; + Иначе + ИдентификаторПользователя = ПользовательИБ.УникальныйИдентификатор; + КонецЕсли; + + ОтчетМД = Метаданные.Отчеты.Найти(СтрЗаменить(ВыборкаХранилища.КлючОбъекта, "Отчет.", "")); + ПредставлениеОтчета = ?(ОтчетМД = Неопределено, ВыборкаХранилища.КлючОбъекта, ОтчетМД.Представление()); + + СтрокаТаблицы = ТаблицаВариантов.Добавить(); + СтрокаТаблицы.Отчет = ВыборкаХранилища.КлючОбъекта; + СтрокаТаблицы.Вариант = ВыборкаХранилища.КлючНастроек; + СтрокаТаблицы.Автор = ВыборкаХранилища.Пользователь; + СтрокаТаблицы.Настройка = Новый ХранилищеЗначения(ВыборкаХранилища.Настройки, Новый СжатиеДанных(9)); + СтрокаТаблицы.ПредставлениеОтчета = ПредставлениеОтчета; + СтрокаТаблицы.ПредставлениеВарианта = ВыборкаХранилища.Представление; + СтрокаТаблицы.ИдентификаторАвтора = ИдентификаторПользователя; + КонецЦикла; + + // Загрузка вариантов в хранилище подсистемы + ЗавершитьКонвертациюВариантовОтчетов(ТаблицаВариантов); + +КонецПроцедуры // ПрямаяКонвертацияВариантовОтчетов() + +// Для внешних отчетов заполняет реквизит ТипВариантаОтчета значением +// Перечисления.ТипыВариантовОтчетов.ВнешнийОтчет +// +Процедура УстановитьПризнакВариантаВнешнегоОтчета() Экспорт + + ТекстЗапроса = " + |ВЫБРАТЬ + | ВариантыОтчетов.Ссылка, + | ВариантыОтчетов.КлючОбъекта + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + ИмяОтчета = СтрЗаменить(Выборка.КлючОбъекта, "Отчет.", ""); + МетаданныеОтчета = Метаданные.Отчеты.Найти(ИмяОтчета); + ЭтоВнешнийОтчет = (МетаданныеОтчета = Неопределено); + Если ЭтоВнешнийОтчет Тогда + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.ВнешнийОтчет; + Объект.Записать(); КонецЕсли; КонецЦикла; - ВиртуальныеПодсистемы = ПолучитьВиртуальныеПодсистемы(Подсистема); - - Для каждого Подсистема из ВиртуальныеПодсистемы Цикл - - ПутьКПодсистеме = Подсистема.Значение; - - ПодсистемаПрисутствует = ложь; - - Для каждого ЭлементПодсистемы из ПутиПодсистемы Цикл - ПутьПодсистемы = ЭлементПодсистемы.Значение; - Если Найти(ПутьКПодсистеме, ПутьПодсистемы) > 0 тогда - ПодсистемаПрисутствует = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - Если ПодсистемаПрисутствует тогда - - СтрокаДереваПодсистем = ДеревоПодсистем.Строки.Добавить(); - СтрокаДереваПодсистем.Подсистема = ПутьКПодсистеме; - СтрокаДереваПодсистем.Название = Подсистема.Представление; +КонецПроцедуры - СтрокаПодсистемы = СписокПодсистем.Добавить(); - СтрокаПодсистемы.Значение = Подсистема.Значение; - СтрокаПодсистемы.Представление = Подсистема.Представление; - ДобавитьДеревоВиртуальныхПодсистем(СписокПодсистем, Подсистема.Значение, СтрокаДереваПодсистем); - КонецЕсли; - - КонецЦикла; - - Возврат СписокПодсистем; - -КонецФункции - -// Заменяет запрещенные символы в именах элементов формы на их допустимые аналоги. -// -Функция ЗаменитьЗапрещенныеСимволы(Знач СтрокаДляЗамены) Экспорт - - СтрокаРезультат = СтрокаДляЗамены; - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ".", "_Точка_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ",", "_Зап_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "\", "_Слэш_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "-", "_Тирэ_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, " ", "_П_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "!", "_Воскл_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "@", "_Соб_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "№", "_Ном_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ";", "_ТЗап_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "%", "_Проц_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ":", "_ДвТ_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "?", "_Воп_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "*", "_Звезд_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "(", "_ОСк_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ")", "_ЗСк_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "=", "_Рав_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "~", "_Вол_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "`", "_Ап_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "#", "_Реш_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "$", "_Дол_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "^", "_Степ_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "&", "_Анд_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "{", "_ОФС_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "{", "_ЗФС_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "[", "_ОКС_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "[", "_ЗКС_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, """", "_Кав_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "'", "_ОКав_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "|", "_Пал_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "\", "_ПСл_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "/", "_ОСл_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ">", "_Бол_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "<", "_Мен_"); - - Возврат СтрокаРезультат; - -КонецФункции - -// Возвращает шаблон заполнения для доп. настроек отчета. -// Для внутреннего использования. -// -Функция ПолучитьСтруктуруДополнительныхНастроек() Экспорт - - ДополнительныеНастройки = Новый Структура("ПредопределенныеВариантыБезСКД, - |ЗначенияНастроекОтчетовБезСКД, - |ОписаниеВариантов"); - - ДополнительныеНастройки.ПредопределенныеВариантыБезСКД = Новый СписокЗначений; - ДополнительныеНастройки.ЗначенияНастроекОтчетовБезСКД = Новый Соответствие; - - ДополнительныеНастройки.ОписаниеВариантов = Новый Соответствие; - - Возврат ДополнительныеНастройки; - -КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции +// Для внутреннего использования +// Процедура ДобавитьОтчетыПодсистемы(Подсистема, СоответствиеПодсистемОтчетам, Знач Путь) Для каждого ОбъектМетаданных из Подсистема.Состав Цикл @@ -697,6 +1055,8 @@ КонецПроцедуры +// Для внутреннего использования +// Функция ПолучитьПутьВиртуальныхПодсистем() СписокЗначений = Новый СписокЗначений; @@ -729,7 +1089,9 @@ Возврат СписокЗначений; КонецФункции - Процедура ДобавитьДеревоПодсистем(СписокПодсистем, Подсистема, Знач ПутьПодсистемы, СтрокаДереваПодсистем) +// Для внутреннего использования +// +Процедура ДобавитьДеревоПодсистем(СписокПодсистем, Подсистема, Знач ПутьПодсистемы, СтрокаДереваПодсистем) Для каждого ПодсистемаПодчиненная из Подсистема.Подсистемы Цикл @@ -801,6 +1163,8 @@ КонецПроцедуры +// Для внутреннего использования +// Процедура ДобавитьДеревоВиртуальныхПодсистем(СписокПодсистем, Знач Подсистема, СтрокаДереваПодсистем) ВиртуальныеПодсистемы = ПолучитьВиртуальныеПодсистемы(Подсистема); @@ -823,6 +1187,8 @@ КонецПроцедуры +// Для внутреннего использования +// Процедура ДобавитьВДопНастройки(ИмяОтчета, ОписаниеВариантов, ДанныеОПодсистемахВариантов, СписокДопВариантов, ЗначениеНастроекДопВариантов) ДанныеДополнительныхНастроек = ПолучитьСтруктуруДополнительныхНастроек(); @@ -835,7 +1201,7 @@ НастройкиПолучены = Истина; Исключение ЗаписьЖурналаРегистрации( - НСтр("ru = 'Варианты отчетов'"), + ИмяСобытия(), УровеньЖурналаРегистрации.Информация, Метаданные.Справочники.ВариантыОтчетов, , @@ -848,13 +1214,19 @@ Если НЕ НастройкиПолучены Тогда ОтчетОбъект = ОтчетМенеджер.Создать(); - Если ОтчетОбъект.СхемаКомпоновкиДанных <> Неопределено Тогда + Если ОтчетОбъект.СхемаКомпоновкиДанных = Неопределено Тогда + УстановитьОписаниеВариантаВДопНастройках( + ДанныеДополнительныхНастроек, + "_СсылкаНаОтчет", + "" + ); + Иначе ВариантыОтчета = ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек; Для Каждого Вариант Из ВариантыОтчета Цикл УстановитьОписаниеВариантаВДопНастройках( ДанныеДополнительныхНастроек, Вариант.Имя, - Вариант.Представление + "" ); КонецЦикла; КонецЕсли; @@ -887,53 +1259,11 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ - -// Добавляет в список Обработчики процедуры-обработчики обновления, -// необходимые данной подсистеме. +// Имя события для записи в журнал регистрации +// +// Возвращаемое значение: +// (Строка) Имя события для записи в журнал регистрации // -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.2.3"; - Обработчик.Процедура = "ВариантыОтчетов.УстановитьПризнакВариантаВнешнегоОтчета"; - -КонецПроцедуры - -// Для внешних отчетов заполняет реквизит ТипВариантаОтчета значением -// Перечисления.ТипыВариантовОтчетов.ВнешнийОтчет -// -Процедура УстановитьПризнакВариантаВнешнегоОтчета() Экспорт - - ТекстЗапроса = " - |ВЫБРАТЬ - | ВариантыОтчетов.Ссылка, - | ВариантыОтчетов.КлючОбъекта - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - - ИмяОтчета = СтрЗаменить(Выборка.КлючОбъекта, "Отчет.", ""); - МетаданныеОтчета = Метаданные.Отчеты.Найти(ИмяОтчета); - ЭтоВнешнийОтчет = (МетаданныеОтчета = Неопределено); - Если ЭтоВнешнийОтчет Тогда - Объект = Выборка.Ссылка.ПолучитьОбъект(); - Объект.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.ВнешнийОтчет; - Объект.Записать(); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - +Функция ИмяСобытия() + Возврат НСтр("ru = 'Варианты отчетов'"); +КонецФункции diff --git a/SSL/src/CommonModules/ВариантыОтчетов/ВариантыОтчетов.mdo b/SSL/src/CommonModules/ВариантыОтчетов/ВариантыОтчетов.mdo index 0f67ea911..cb059c0eb 100644 --- a/SSL/src/CommonModules/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/CommonModules/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -3,7 +3,7 @@ ВариантыОтчетов ru - Варианты отчетов (сервер) + Варианты отчетов true true diff --git a/SSL/src/CommonModules/ВариантыОтчетовВызовСервераПовтИсп/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовВызовСервераПовтИсп/Module.bsl new file mode 100644 index 000000000..2f853afa1 --- /dev/null +++ b/SSL/src/CommonModules/ВариантыОтчетовВызовСервераПовтИсп/Module.bsl @@ -0,0 +1,26 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Варианты отчетов" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Получает список отчетов, доступных текущему пользователю +// +// Возвращаемое значение: +// СписокОтчетов (СписокЗначений) Список отчетов +// |- Значение (Строка) Имя отчета, как оно задано в метаданных +// +Функция ОтчетыТекущегоПользователя() Экспорт + СписокОтчетов = Новый СписокЗначений; + + Для Каждого ОтчетМД Из Метаданные.Отчеты Цикл + Если ПравоДоступа("Просмотр", ОтчетМД) Тогда + СписокОтчетов.Добавить("Отчет."+ ОтчетМД.Имя); + КонецЕсли; + КонецЦикла; + + Возврат СписокОтчетов; +КонецФункции + diff --git a/SSL/src/CommonModules/ВариантыОтчетовВызовСервераПовтИсп/ВариантыОтчетовВызовСервераПовтИсп.mdo b/SSL/src/CommonModules/ВариантыОтчетовВызовСервераПовтИсп/ВариантыОтчетовВызовСервераПовтИсп.mdo new file mode 100644 index 000000000..e26c57dfa --- /dev/null +++ b/SSL/src/CommonModules/ВариантыОтчетовВызовСервераПовтИсп/ВариантыОтчетовВызовСервераПовтИсп.mdo @@ -0,0 +1,11 @@ + + + ВариантыОтчетовВызовСервераПовтИсп + + ru + Варианты отчетов вызов сервера повт исп + + true + true + DuringSession + diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl index 3c9d7c457..9a2e02830 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl @@ -1,37 +1,43 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// МОДУЛЬ СОДЕРЖИТ КЛИЕНТСКИЕ ПРОЦЕДУРЫ ПОДСИСТЕМЫ "ВАРИАНТЫ ОТЧЕТОВ" +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Варианты отчетов" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Открывает панель отчетов. Используется в модуле общей команды. -// +// // Параметры: -// Подсистемы - строка с путем к подсистеме -// НазваниеФормы - заголовок панели отчетов должен соответствовать представление команды -// ПараметрыВыполненияКоманды - Параметры выполнения команды -// КартинкаФормы - картинка возле заголовка панели. -// -Процедура ОткрытьПанельОтчетов(Подсистемы, НазваниеФормы, ПараметрыВыполненияКоманды, +// ИмяРаздела (Строка) Имя раздела командного интерфейса, из которого вызывается команда. +// ЗаголовокПанелиОтчетов (Строка) Заголовок, который будет установлен для панели отчетов. Локализуем. +// ПараметрыВыполненияКоманды (...) Передается "как есть" из параметров обработчика команды. +// КартинкаФормы (Картина) Необязательный. Картинка, которая будет установлена в панели отчетов. +// +Процедура ОткрытьПанельОтчетов(ИмяРаздела, ЗаголовокПанелиОтчетов, ПараметрыВыполненияКоманды, КартинкаФормы = Неопределено) Экспорт ИмяФормы = "ОбщаяФорма.ПанельОтчетов"; Параметры = Новый Структура("Подсистемы, ИмяФормы, КартинкаФормы"); - Параметры.Подсистемы = Подсистемы; - Параметры.ИмяФормы = НазваниеФормы; + Параметры.Подсистемы = ИмяРаздела; + Параметры.ИмяФормы = ЗаголовокПанелиОтчетов; Параметры.КартинкаФормы = КартинкаФормы; Владелец = ПараметрыВыполненияКоманды.Источник; Уникальность = ПараметрыВыполненияКоманды.Уникальность; Если ТипЗнч(Владелец) = Тип("ОкноКлиентскогоПриложения") И Владелец.Основное = Истина Тогда - Уникальность = Подсистемы +"."+ СтрЗаменить(ТРег(НазваниеФормы), " ", "") +"."+ Уникальность; + Уникальность = ИмяРаздела +"."+ СтрЗаменить(ТРег(ЗаголовокПанелиОтчетов), " ", "") +"."+ Уникальность; КонецЕсли; Окно = ПараметрыВыполненияКоманды.Окно; ОткрытьФорму(ИмяФормы, Параметры, Владелец, Уникальность, Окно); - КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Восстанавливает из строки СтрокаДляЗамены запрещенные символы в именах элементов формы. // @@ -85,7 +91,6 @@ КонецФункции - // Возвращает параметры дополнительной команды. // // Параметры: diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиент/ВариантыОтчетовКлиент.mdo b/SSL/src/CommonModules/ВариантыОтчетовКлиент/ВариантыОтчетовКлиент.mdo index 0896c065d..1e040f104 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиент/ВариантыОтчетовКлиент.mdo +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиент/ВариантыОтчетовКлиент.mdo @@ -3,7 +3,7 @@ ВариантыОтчетовКлиент ru - Варианты отчетов (клиент) + Варианты отчетов клиент true true diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиентПереопределяемый/Module.bsl index a35c6fbf4..85a75a983 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиентПереопределяемый/Module.bsl @@ -1,22 +1,28 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Варианты отчетов" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Вызывается перед нажатием на команду открытия варианта отчета. -// -// Параметры -// Ключ - Строка - ключ варианта отчета -// ПараметрыФормы - Структура - параметры формы отчета -// СтандартнаяОбработка - Булево - по умолчанию Истина. Если Истина, то подсистема откроет форму отчета. -// +// +// Параметры: +// Ключ (Строка) Имя отчета + "\" + Имя варианта отчета +// ПараметрыФормы (Структура) Параметры формы отчета +// СтандартнаяОбработка (Булево) Флаг открытия формы отчета средствами подсистемы +// Процедура ПередОткрытиемФормыОтчета(Ключ, ПараметрыФормы, СтандартнаяОбработка) Экспорт - - КонецПроцедуры // Вызывается, когда требуется выполнить внешнюю команду для интеграции с другими подсистемами. -// -// Параметры -// УникальныйИдентификатор - Строка - ключ варианта отчета -// ПараметрКоманды - произвольный тип - параметры внешней команды -// +// +// Параметры: +// УникальныйИдентификатор (Строка) Ключ варианта отчета +// ПараметрКоманды (*) Параметры внешней команды +// Процедура ВыполнитьВнешнююКоманду(УникальныйИдентификатор, ПараметрКоманды) Экспорт КонецПроцедуры diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиентПереопределяемый/ВариантыОтчетовКлиентПереопределяемый.mdo b/SSL/src/CommonModules/ВариантыОтчетовКлиентПереопределяемый/ВариантыОтчетовКлиентПереопределяемый.mdo index 7e443942d..31b5492ff 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиентПереопределяемый/ВариантыОтчетовКлиентПереопределяемый.mdo +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиентПереопределяемый/ВариантыОтчетовКлиентПереопределяемый.mdo @@ -3,7 +3,7 @@ ВариантыОтчетовКлиентПереопределяемый ru - Варианты отчетов (клиент, переопределяемый) + Варианты отчетов клиент переопределяемый true true diff --git a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl index fc4c2f288..6d82653eb 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl @@ -1,12 +1,17 @@ -////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// МОДУЛЬ, В КОТОРОМ ОПРЕДЕЛЯЮТСЯ НАСТРОЙКИ ПОДСИСТЕМЫ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Варианты отчетов" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Функция должна вернуть список значений с описанием виртуальных подсистем // Пример кода: // // Функция ОписаниеВиртуальныхПодсистем() Экспорт // СписокПодсистем = Новый СписокЗначений; -// СписокПодсистем.Добавить("Маркетинг\АнализКлиентов", "Работа с клиентами") +// СписокПодсистем.Добавить("Маркетинг\АнализКлиентов", НСтр("ru = 'Работа с клиентами'")) // Возврат СписокПодсистем; // КонецФункции // @@ -34,7 +39,6 @@ Возврат СоответствиеСортировкиИВариантов; КонецФункции - // Функция должна вернуть список значений с ключами отчета, которые поддерживаются подсистемой // Функция СписокОтчетовПоддерживаемыхПодсистемой() Экспорт diff --git a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/ВариантыОтчетовПереопределяемый.mdo b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/ВариантыОтчетовПереопределяемый.mdo index a6c6f6e8a..a2506769d 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/ВариантыОтчетовПереопределяемый.mdo +++ b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/ВариантыОтчетовПереопределяемый.mdo @@ -3,7 +3,7 @@ ВариантыОтчетовПереопределяемый ru - варианты отчетов (переопределяемый) + Варианты отчетов переопределяемый true true diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl index b97ab53a1..b1190fe4f 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl @@ -1,65 +1,10 @@ - -// Записывает версию объекта в регистр сведений -// Параметры -// Ссылка - СправочникСсылка / ДокументСсылка - ссылка на объект ИБ -// ЧислоВерсийОбъекта - Число - число версий объекта -// ХранилищеДанных - ХранилищеЗначения - хранилище с объектом ИБ (сериализованным в Fast InfoSet) +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Версионирование объектов". // -Процедура ЗаписатьВерсиюОбъекта(знач Ссылка, - знач НомерПоследнейВерсии, - знач ХранилищеДанных, - знач Комментарий) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - МенеджерЗаписиВерсииОбъектов = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи(); - МенеджерЗаписиВерсииОбъектов.Объект = Ссылка; - МенеджерЗаписиВерсииОбъектов.ДатаВерсии = ТекущаяДатаСеанса(); - МенеджерЗаписиВерсииОбъектов.ВерсияОбъекта = ХранилищеДанных; - МенеджерЗаписиВерсииОбъектов.НомерВерсии = Число(НомерПоследнейВерсии) + 1; - МенеджерЗаписиВерсииОбъектов.АвторВерсии = Пользователи.АвторизованныйПользователь(); - МенеджерЗаписиВерсииОбъектов.Комментарий = Комментарий; - - МенеджерЗаписиВерсииОбъектов.Записать(); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// -// Возвращает номер последней записанной версии данного типа объектов -// Параметры -// Объект - СправочникСсылка/ДокументСсылка - ссылка на объект ИБ -// Возвращаемое значение -// Число - количество версий объекта Объект в регистре сведений ВерсииОбъектов -// -Функция ПолучитьНомерПоследнейВерсии(Ссылка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = " - | ВЫБРАТЬ ЕСТЬNULL(МАКСИМУМ(НомерВерсии), 0) КАК НомерВерсии - | ИЗ РегистрСведений.ВерсииОбъектов - | ГДЕ Объект = &Ссылка"; - Запрос.УстановитьПараметр("Ссылка", Ссылка); - - Выборка = Запрос.Выполнить().Выбрать(); - Выборка.Следующий(); - - Возврат Выборка.НомерВерсии; - -КонецФункции - -// Удаляет хранимые версии объекта по ссылке Ссылка из регистра ВерсииОбъектов -// -Процедура УдалитьХранимыеВерсииПоОбъекту(Ссылка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Объект.Использование = Истина; - НаборЗаписей.Отбор.Объект.Значение = Ссылка; - НаборЗаписей.Записать(); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Выполняется при обновлении конфигурации. // 1. Очищает настройки версионирования по объектам, для которых версионирование не применено @@ -124,10 +69,116 @@ КонецПроцедуры -// Получает объекты информационной базы, для которых применена подсистема версионирования -// Возвращаемое значение -// Массив, элемент массива - строка, идентифицирующая объект метаданных в формате -// Справочник.<Имя справочника> или Документ.<Имя документа> +// Записывает настройку версионирования по объекту в регистр сведений. +// +// Параметры: +// ИмяОбъектаМетаданных - Строка - полное имя объекта метаданных; +// ВариантВерсионирования - Перечисление.ВариантыВерсионированияОбъектов. +// +Процедура ЗаписатьНастройкуВерсионированияПоОбъекту(ИмяОбъектаМетаданных, ВариантВерсионирования) Экспорт + + ВариантМВ = РегистрыСведений.НастройкиВерсионированияОбъектов.СоздатьМенеджерЗаписи(); + ВариантМВ.ТипОбъекта = ИмяОбъектаМетаданных; + ВариантМВ.Вариант = ВариантВерсионирования; + ВариантМВ.Записать(); + +КонецПроцедуры + +// Выполняет с формой действия, необходимые для подключения подсистемы версионирования. +// +// Параметры: +// Форма - УправляемаяФорма - форма для подключения механизма версионирования. +// +Процедура ПриСозданииНаСервере(Форма) Экспорт + + Если Пользователи.РолиДоступны("ЧтениеВерсийОбъектов") И ПолучитьФункциональнуюОпцию("ИспользоватьВерсионированиеОбъектов") Тогда + ИмяФормыМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Форма.ИмяФормы, "."); + ПолноеИмяМетаданных = ИмяФормыМассив[0] + "." + ИмяФормыМассив[1]; + Иначе + ПолноеИмяМетаданных = Неопределено; + КонецЕсли; + + Форма.УстановитьПараметрыФункциональныхОпцийФормы(Новый Структура("ТипВерсионируемогоОбъекта", ПолноеИмяМетаданных)); + +КонецПроцедуры + +// Возвращает табличный документ, заполненный данными объекта. +// +// Параметры: +// СсылкаНаОбъект - ЛюбаяСсылка +// +// Возвращаемое значение: +// ТабличныйДокумент - печатная форма объекта. +// +Функция ПолучитьПечатнуюФормуОбъекта(СсылкаНаОбъект) Экспорт + ТабличныйДокумент = Новый ТабличныйДокумент; + СформироватьОтчетПоПереданнойВерсии(ТабличныйДокумент, СериализоватьОбъект(СсылкаНаОбъект.ПолучитьОбъект()), СсылкаНаОбъект); + Возврат ТабличныйДокумент; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Записывает версию объекта в информационную базу. +// +// Параметры +// Ссылка - Ссылка - ссылка на объект ИБ; +// НомерПоследнейВерсии - Число - номер последней записанной версии объекта; +// ХранилищеДанных - ХранилищеЗначения - хранилище с объектом ИБ (сериализованным в Fast InfoSet); +// Комментарий - Строка - комментарий к записываемой версии. +// +Процедура ЗаписатьВерсиюОбъекта(знач Ссылка, + знач НомерПоследнейВерсии, + знач ХранилищеДанных, + знач Комментарий) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписиВерсииОбъектов = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи(); + МенеджерЗаписиВерсииОбъектов.Объект = Ссылка; + МенеджерЗаписиВерсииОбъектов.ДатаВерсии = ТекущаяДатаСеанса(); + МенеджерЗаписиВерсииОбъектов.ВерсияОбъекта = ХранилищеДанных; + МенеджерЗаписиВерсииОбъектов.НомерВерсии = Число(НомерПоследнейВерсии) + 1; + МенеджерЗаписиВерсииОбъектов.АвторВерсии = Пользователи.АвторизованныйПользователь(); + МенеджерЗаписиВерсииОбъектов.Комментарий = Комментарий; + + МенеджерЗаписиВерсииОбъектов.Записать(); + +КонецПроцедуры + +// Возвращает номер последней записанной версии объекта. +// +// Параметры: +// Ссылка - Ссылка - ссылка на объект информационной базы. +// +// Возвращаемое значение: +// Число - номер версии объекта. +// +Функция ПолучитьНомерПоследнейВерсии(Ссылка) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЕСТЬNULL(МАКСИМУМ(ВерсииОбъектов.НомерВерсии), 0) КАК НомерВерсии + |ИЗ + | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов + |ГДЕ + | ВерсииОбъектов.Объект = &Ссылка"; + Запрос.УстановитьПараметр("Ссылка", Ссылка); + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.НомерВерсии; + +КонецФункции + +// Возвращает полные имена объектов метаданных, для которых подключен механизм версионирования. +// +// Возвращаемое значение: +// Массив строк - имена объектов метаданных. // Функция ПолучитьВерсионируемыеОбъекты() @@ -151,11 +202,14 @@ КонецФункции -// Получить вариант версионирования для указанного объекта метаданных. +// Возвращает вариант версионирования для указанного объекта метаданных. // // Параметры -// ПолноеИмя - строка - полный путь к объекту метаданных, например Справочник.Номенклатура -// +// ПолноеИмя - строка - полный путь к объекту метаданных. Например, "Справочник.Номенклатура". +// +// Возвращаемое значение: +// Перечисление.ВариантыВерсионированияОбъектов. +// Функция ПолучитьВариантВерсионирования(ПолноеИмя) Экспорт Возврат ПолучитьФункциональнуюОпцию("ВариантыВерсионированияОбъектов", @@ -163,21 +217,22 @@ КонецФункции -// Получает настройку версионирования по умолчанию по полному имени к объекту метаданных. +// Возвращает настройку версионирования по умолчанию по полному имени к объекту метаданных. // -// Параметры -// ПолноеИмя - строка - полный путь к объекту метаданных, например Справочник.Номенклатура +// Параметры: +// ПолноеИмя - строка - полный путь к объекту метаданных. Например, "Справочник.Номенклатура". // -// Возвращаемое значение -// Для документов, разрешенных к проведению настройка проведения - Версионировать при проведении -// Для документов, не разрешенных к проведению настройка проведения - Версионировать при записи -// Для остальных объектов - не версионировать +// Возвращаемое значение: +// Перечисление.ВариантыВерсионированияОбъектов - +// Для документов, разрешенных к проведению настройка проведения: ВерсионироватьПриПроведении; +// Для документов, не разрешенных к проведению настройка проведения: ВерсионироватьПриЗаписи; +// Для остальных объектов: НеВерсионировать. // Функция ПолучитьНастройкуВерсионированияПоУмолчанию(ПолноеИмя) Экспорт РазложенныйПуть = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмя, "."); - Если РазложенныйПуть[0] = "Документ" Тогда + Если РазложенныйПуть[0] = "Документ" Тогда Если Метаданные.НайтиПоПолномуИмени(ПолноеИмя).Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда Возврат Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении; Иначе @@ -189,15 +244,13 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Переход к версии объекта - -// Функция получает объект по его сериализованному XML представлению. +// Получает объект по его сериализованному XML представлению. // // Параметры -// АдресВоВременномХранилище - строка - адрес двоичных данных во временном хранилище +// АдресВоВременномХранилище - Строка - адрес двоичных данных во временном хранилище. +// ТекстСообщенияОбОшибке - Строка - (возвращаемый параметр) текст ошибки, если восстановить объект не удалось. // -// Возвращаемое значение - объект +// Возвращаемое значение - Объект или Неопределено. // Функция ВосстановитьОбъектПоXML(знач АдресВоВременномХранилище = "", ТекстСообщенияОбОшибке = "") Экспорт @@ -219,21 +272,21 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Служебные функции - -// Функция по номеру версии объекта и ссылке на него получает объект из -// регистра сведений. +// Возвращает структуру, содержащую версию объекта и дополнительную информацию. // // Параметры: -// Ссылка - СправочникСсылка/ДокументСсылка - ссылка на экземпляр -// объекта метаданных -// НомерВерсии - число - номер версии документа в регистре сведений +// Ссылка - Ссылка - ссылка версионируемый объект; +// НомерВерсии - Число - номер версии объекта. // -// Возвращаемое значение - объект информационной базы +// Возвращаемое значение - Структура: +// ВерсияОбъекта - ДвоичныеДанные - сохраненная версия объекта информационной базы; +// АвторВерсии - Справочник.Пользователи, Справочник.ВнешниеПользователи - +// пользователь, записавший версию объекта. +// ДатаВерсии - Дата - дата записи версии объекта. // -// Функция может вызвать исключение, если запись не содержит данных. -// Функцию требуется вызвать в привелигированном режиме. +// Примечание: +// Функция может вызвать исключение, если запись не содержит данных. +// Функцию требуется вызвать в привелигированном режиме. // Функция ПолучитьИнформациюПоВерсии(знач Ссылка, знач НомерВерсии) Экспорт @@ -271,54 +324,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Блок функций для работы с настройками значений - -// Записывает настройку версионирования по объекту в регистр сведений -// -Процедура ЗаписатьНастройкуВерсионированияПоОбъекту( - Объект, - ВариантВерсионирования) Экспорт - - ВариантМВ = РегистрыСведений.НастройкиВерсионированияОбъектов.СоздатьМенеджерЗаписи(); - ВариантМВ.ТипОбъекта = Объект; - ВариантМВ.Вариант = ВариантВерсионирования; - ВариантМВ.Записать(); - -КонецПроцедуры - -// Выполняет с формой действия, необходимые для подключения подсистемы версионирования -// -Процедура ПриСозданииНаСервере(Форма) Экспорт - - Если ПустаяСтрока(ПользователиИнформационнойБазы.ТекущийПользователь().Имя) - ИЛИ РольДоступна(Метаданные.Роли.ПолныеПрава) - Или РольДоступна(Метаданные.Роли.ЧтениеВерсийОбъектов) Тогда - ИмяФормыМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Форма.ИмяФормы, "."); - ПолноеИмяМетаданных = ИмяФормыМассив[0] + "." + ИмяФормыМассив[1]; - Иначе - ПолноеИмяМетаданных = Неопределено; - КонецЕсли; - - Форма.УстановитьПараметрыФункциональныхОпцийФормы(Новый Структура("ТипВерсионируемогоОбъекта", ПолноеИмяМетаданных)); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Получение печатной формы объекта - -// Возвращает табличный документ, заполненный данными объекта. -// -// Параметры: -// СсылкаНаОбъект - ЛюбаяСсылка -// -// Возвращаемое значение: -// ТабличныйДокумент - печатная форма объекта. -// -Функция ПолучитьПечатнуюФормуОбъекта(СсылкаНаОбъект) Экспорт - ТабличныйДокумент = Новый ТабличныйДокумент; - СформироватьОтчетПоПереданнойВерсии(ТабличныйДокумент, СериализоватьОбъект(СсылкаНаОбъект.ПолучитьОбъект()), СсылкаНаОбъект); - Возврат ТабличныйДокумент; -КонецФункции +// Функции для получения отчета по объекту // Возвращает сериализованный объект в виде двоичных данных. // diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl index de16fa842..ebd7cb272 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовКлиент/Module.bsl @@ -1,10 +1,17 @@ //////////////////////////////////////////////////////////////////////////////// -// Программный интерфейс подсистемы версионирования для вызова отчета по версии -// (изменениями между версиями) +// Подсистема "Версионирование объектов". // +//////////////////////////////////////////////////////////////////////////////// -// Функция открывает отчет по изменениям, сравнивая текущую версию объекта -// и другую (передаваемую). +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Открывает отчет по версиям объекта в режиме сравнения версий. +// +// Параметры: +// Ссылка - ЛюбаяСсылка - ссылка на версионируемый объект; +// АдресСериализованногоОбъекта - Строка - адрес двоичных данных сравниваемой версии +// объекта во временном хранилище. // Процедура ОткрытьОтчетПоИзменениям(Ссылка, АдресСериализованногоОбъекта) Экспорт @@ -18,6 +25,10 @@ // Функция открывает отчет по версии объекта переданной в параметре АдресСериализованногоОбъекта. // +// Параметры: +// Ссылка - ЛюбаяСсылка - ссылка на версионируемый объект; +// АдресСериализованногоОбъекта - Строка - адрес двоичных данных версии объекта во временном хранилище. +// Процедура ОткрытьОтчетПоВерсииОбъекта(Ссылка, АдресСериализованногоОбъекта) Экспорт Параметры = Новый Структура; @@ -27,4 +38,4 @@ ОткрытьФорму("РегистрСведений.ВерсииОбъектов.Форма.ОтчетПоВерсиямОбъекта", Параметры); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl index fd23b9893..a99308f83 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl @@ -1,6 +1,16 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Версионирование объектов". +// +//////////////////////////////////////////////////////////////////////////////// -// Обработчик события ПриЗаписи. Определен для версионируемых объектов. -// Объект сериализуется в XML (Fast Infoset). +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Записывает версию объекта в информационную базу. +// +// Параметры +// Источник - Объект - записываемый объект ИБ; +// Отказ - Булево - признак отказа от записи объекта. // Процедура ЗаписатьВерсиюОбъекта(Источник, Отказ) Экспорт @@ -29,6 +39,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Проверяет настройки версионирования по переданному объекту и // и возвращает вариант версионирования. Если по объекту не настроено // версионирование, то он версионируется в соответствии с правилами @@ -61,12 +74,3 @@ Возврат ВерсионироватьОбъект; КонецФункции - -// Обработчик события ПриЗаписи Справочников и Документов ИБ. -// Подготавливает объект к записи в регистр версий. -// -Процедура ВерсионированиеОбъектовПередУдалениемОбъекта(Источник, Отказ) Экспорт - - ВерсионированиеОбъектов.УдалитьХранимыеВерсииПоОбъекту(Источник.Ссылка); - -КонецПроцедуры diff --git a/SSL/src/CommonModules/Взаимодействия/Module.bsl b/SSL/src/CommonModules/Взаимодействия/Module.bsl index bb8fb0966..db3935af0 100644 --- a/SSL/src/CommonModules/Взаимодействия/Module.bsl +++ b/SSL/src/CommonModules/Взаимодействия/Module.bsl @@ -1,3 +1,120 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Взаимодействия" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАМНЫЙ ИНТЕРФЕЙС + +//Вызывается из обработчиков заполнения документов - взаимодействий и предметов заполнения. +//Выполняет необходимые действия по заполнению реквизитов по умолчанию +// +//Параметры +// Объект - ДокументОбъект - документ, для которого выполняется заполнение. +// ДанныеЗаполнения - Произвольный - значение,которое используется как основание для заполнения. +// +Процедура ЗаполнитьРеквизитыПоУмолчанию(Объект, ДанныеЗаполнения) Экспорт + + ЭтоВзаимодействие = ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Объект.Ссылка); + + //текущий пользователь является автором и ответственным по создаваемому взаимодействию + Если ЭтоВзаимодействие Тогда + Объект.Автор = Пользователи.ТекущийПользователь(); + Объект.Ответственный = Объект.Автор; + КонецЕсли; + + Если ДанныеЗаполнения = Неопределено Тогда + Возврат; + КонецЕсли; + + Контакты = Неопределено; + + Если ВзаимодействияКлиентСервер.ЯвляетсяКонтактом(ДанныеЗаполнения) + И Не ДанныеЗаполнения.ЭтоГруппа Тогда + // На основании контакта + Контакты = Новый Массив; + Контакты.Добавить(ДанныеЗаполнения); + + ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяПредметом(ДанныеЗаполнения) Тогда + // На основании предмета + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДанныеЗаполнения); + Контакты = МенеджерОбъекта.ПолучитьКонтакты(ДанныеЗаполнения); + + ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(ДанныеЗаполнения) Тогда + // На основании взаимодействия + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДанныеЗаполнения); + Контакты = МенеджерОбъекта.ПолучитьКонтакты(ДанныеЗаполнения); + + ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда + // Заполним контакт + Если ДанныеЗаполнения.Свойство("Контакт") И ЗначениеЗаполнено(ДанныеЗаполнения.Контакт) Тогда + Контакты = Новый Массив; + Контакты.Добавить(ДанныеЗаполнения.Контакт); + КонецЕсли; + + КонецЕсли; + + // Заполним участников + Если ЗначениеЗаполнено(Контакты) И (Контакты.Количество() > 0) Тогда + Объект.ЗаполнитьКонтакты(Контакты); + КонецЕсли; + +КонецПроцедуры + +//Устанавливает во всей цепочке взаимодействий в качестве предмета созданный объект +//Параметры: +// Предмет - созданный предмет взаимодействий, +// Взаимодействие - взаимодействие, по которому создан предмет, +// Отказ - флаг отказа от операции +// +Процедура ПриЗаписиПредметаИзФормы(Предмет, Взаимодействие, Отказ) Экспорт + + Если Не ЗначениеЗаполнено(Взаимодействие) + Или Не ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Взаимодействие) Тогда + Возврат; + КонецЕсли; + + СтарыйПредмет = ПолучитьЗначениеПредмета(Взаимодействие); + Если Предмет = СтарыйПредмет Тогда + // Предмет уже был установлен + Возврат; + КонецЕсли; + + // Получим список взаимодействий у которых нужно изменить предмет + Если ЗначениеЗаполнено(СтарыйПредмет) + И ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтарыйПредмет) Тогда + МассивЗаменить = ВзаимодействияВызовСервера.ПолучитьВзаимодействияИзЦепочки(СтарыйПредмет, Взаимодействие); + Иначе + МассивЗаменить = Новый Массив; + КонецЕсли; + МассивЗаменить.Вставить(0, Взаимодействие); + + // Заменим предмет во всех взаимодействиях + + Для Каждого Элемент Из МассивЗаменить Цикл + Попытка + УстановитьПредмет(Элемент, Предмет); + Исключение + ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при замене предмета у %1: %2'"), + Элемент, + ПредставлениеОшибки), + , + , + , + Отказ); + Отказ = Истина; + Возврат; + + КонецПопытки; + КонецЦикла; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции отвечающие за полнотекстовый поиск @@ -34,13 +151,13 @@ // Возвращает список доступных видов поиска контактов // // Параметры -// ППДВключен - Булево - признак доступности полнотекстового поиска -// Параметры - Структура - параметры содержащие Представление и Адрес контакта -// ЭлементыФормы - ЭлементыФормы -// ДляАдреснойКниги - Булево - истина если список формируется для адресной книги +// ППДВключен - Булево - признак доступности полнотекстового поиска +// Параметры - Структура - параметры содержащие Представление и Адрес контакта +// ЭлементыФормы - ЭлементыФормы +// ДляАдреснойКниги - Булево - истина если список формируется для адресной книги // // Возвращаемое значение: -// Структура - структура содержащая виды поиска и значения поиска в них. +// Структура - структура содержащая виды поиска и значения поиска в них. // Функция ПолучитьСписокДоступныхПоисков(ППДВключен, Параметры, ЭлементыФормы, ДляАдреснойКниги) Экспорт @@ -83,8 +200,8 @@ // ЭлементыФормы - ЭлементыФормы // ИмяВарианта - Строка - Имя варианта поиска // Представление - Строка - Представление варианта поиска -// Значение - Строка - Значение для поиска в данном варианте поиска -// +// Значение - Строка - Значение для поиска в данном варианте поиска +// Процедура ДобавитьВариантПоиска(ВсеСпискиПоиска, ЭлементыФормы, ИмяВарианта, Представление, Значение) ЭлементыФормы.ВариантыПоиска.СписокВыбора.Добавить(ИмяВарианта, Представление); @@ -144,9 +261,9 @@ // Функция ПолучитьДоменныйАдресДляПоиска(Адрес) - Стр = Адрес; - Поз = Найти(Стр, "@"); - Возврат ?(Поз = 0, "", Сред(Стр, Поз+1)); + Строка = Адрес; + Позиция = Найти(Строка, "@"); + Возврат ?(Позиция = 0, "", Сред(Строка, Позиция+1)); КонецФункции @@ -167,11 +284,11 @@ Возврат """" + Представление + """"; КонецЕсли; - стрВариантыПоиска = Новый СписокЗначений; - стрВариантыПоиска.Добавить("""" + Представление + """" + " ИЛИ " + Адрес); - стрВариантыПоиска.Добавить("""" + Представление + """" + " И " + Адрес); + ВариантыПоиска = Новый СписокЗначений; + ВариантыПоиска.Добавить("""" + Представление + """" + " ИЛИ " + Адрес); + ВариантыПоиска.Добавить("""" + Представление + """" + " И " + Адрес); - Возврат стрВариантыПоиска; + Возврат ВариантыПоиска; КонецФункции @@ -197,17 +314,18 @@ //Возвращает массив, содержащий структуры с информацией о контактах взаимодействия //или участниках предмета взаимодействия +// //Параметры: -//ТаблицаКонтактов - Документ.ТабличнаяЧасть - содержащая описания и ссылки на контакты взаимодействия -//или участников предмета взаимодействия +// ТаблицаКонтактов - Документ.ТабличнаяЧасть - содержащая описания и ссылки на контакты взаимодействия +// или участников предмета взаимодействия // Функция ПреобразоватьТаблицуКонтактовВМассив(ТаблицаКонтактов) Экспорт Результат = Новый Массив; - Для Каждого Стр Из ТаблицаКонтактов Цикл - Контакт = ?(ТипЗнч(Стр.Контакт) = Тип("Строка"), Неопределено, Стр.Контакт); + Для Каждого ЭлементМассива Из ТаблицаКонтактов Цикл + Контакт = ?(ТипЗнч(ЭлементМассива.Контакт) = Тип("Строка"), Неопределено, ЭлементМассива.Контакт); Запись = Новый Структура( - "Адрес, Представление, Контакт", Стр.Адрес, Стр.Представление, Контакт + "Адрес, Представление, Контакт", ЭлементМассива.Адрес, ЭлементМассива.Представление, Контакт ); Результат.Добавить(Запись); КонецЦикла; @@ -217,20 +335,20 @@ КонецФункции // Заполняет таблицу значений "Найденные контакты" общих форм "Адресная книга" и "Выбора контактов" -// на основании переданной таблицы значений. +// на основании переданной таблицы значений. // // Параметры -// ТабКонтакты - ТаблицаЗначений - таблица значений источник. +// ТаблицаКонтакты - ТаблицаЗначений - таблица значений источник. // НайденныеКонтакты - ТаблицаЗначений - таблица значений приемник. -// -Процедура ЗаполнитьНайденныеКонтакты(ТабКонтакты,НайденныеКонтакты) Экспорт +// +Процедура ЗаполнитьНайденныеКонтакты(ТаблицаКонтакты,НайденныеКонтакты) Экспорт - Для Каждого Стр Из ТабКонтакты Цикл - новСтр = НайденныеКонтакты.Добавить(); - новСтр.Ссылка = Стр.Контакт; - новСтр.Представление = Стр.Представление; - новСтр.НаименованиеКонтакта = Стр.Наименование + ?(ПустаяСтрока(Стр.НаименованиеВладельца), "", " (" + Стр.НаименованиеВладельца + ")"); - новСтр.ИмяСправочника = Стр.Контакт.Метаданные().Имя; + Для Каждого Стр Из ТаблицаКонтакты Цикл + НоваяСтрока = НайденныеКонтакты.Добавить(); + НоваяСтрока.Ссылка = Стр.Контакт; + НоваяСтрока.Представление = Стр.Представление; + НоваяСтрока.НаименованиеКонтакта = Стр.Наименование + ?(ПустаяСтрока(Стр.НаименованиеВладельца), "", " (" + Стр.НаименованиеВладельца + ")"); + НоваяСтрока.ИмяСправочника = Стр.Контакт.Метаданные().Имя; КонецЦикла; КонецПроцедуры @@ -240,7 +358,7 @@ // Возвращаемое значение: // Массив - массив содержащий метаданные возможных типов контактов // -Функция ПолучитьМассивМетаданныхКонтакты() +Функция ПолучитьМассивМетаданныхКонтакты() МассивОписанияКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); МассивМетаданных = Новый Массив; @@ -329,16 +447,16 @@ Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("Предмет", Предмет); - табКонтакты = Запрос.Выполнить().Выгрузить(); + ТаблицаКонтакты = Запрос.Выполнить().Выгрузить(); - табКонтакты.Колонки.Добавить("ПредставлениеНаименования"); + ТаблицаКонтакты.Колонки.Добавить("ПредставлениеНаименования"); - Для Каждого Стр Из табКонтакты Цикл - Стр.ПредставлениеНаименования = Стр.Наименование + - ?(ПустаяСтрока(Стр.НаименованиеВладельца), "", " (" + Стр.НаименованиеВладельца + ")"); + Для Каждого СтрокаТаблицы Из ТаблицаКонтакты Цикл + СтрокаТаблицы.ПредставлениеНаименования = СтрокаТаблицы.Наименование + + ?(ПустаяСтрока(СтрокаТаблицы.НаименованиеВладельца), "", " (" + СтрокаТаблицы.НаименованиеВладельца + ")"); КонецЦикла; - Возврат табКонтакты; + Возврат ТаблицаКонтакты; КонецФункции @@ -348,31 +466,31 @@ // Функция ПолучитьТекстЗапросаПоискКонтактовПоЦепочкеВзаимодействий(ПомещатьВоВременнуюТаблицу) - спсПоиска = Новый СписокЗначений; - спсПоиска.Добавить("Встреча.Участники", "Контакт"); - спсПоиска.Добавить("ЗапланированноеВзаимодействие.Участники", "Контакт"); - спсПоиска.Добавить("ТелефонныйЗвонок", "АбонентКонтакт"); - спсПоиска.Добавить("ЭлектронноеПисьмоВходящее", "ОтправительКонтакт"); - спсПоиска.Добавить("ЭлектронноеПисьмоВходящее.ПолучателиПисьма", "Контакт"); - спсПоиска.Добавить("ЭлектронноеПисьмоВходящее.ПолучателиКопий", "Контакт"); - спсПоиска.Добавить("ЭлектронноеПисьмоВходящее.ПолучателиОтвета", "Контакт"); - спсПоиска.Добавить("ЭлектронноеПисьмоИсходящее.ПолучателиПисьма", "Контакт"); - спсПоиска.Добавить("ЭлектронноеПисьмоИсходящее.ПолучателиКопий", "Контакт"); - спсПоиска.Добавить("ЭлектронноеПисьмоИсходящее.ПолучателиОтвета", "Контакт"); - спсПоиска.Добавить("ЭлектронноеПисьмоИсходящее.ПолучателиСкрытыхКопий", "Контакт"); + СписокПоиска = Новый СписокЗначений; + СписокПоиска.Добавить("Встреча.Участники", "Контакт"); + СписокПоиска.Добавить("ЗапланированноеВзаимодействие.Участники", "Контакт"); + СписокПоиска.Добавить("ТелефонныйЗвонок", "АбонентКонтакт"); + СписокПоиска.Добавить("ЭлектронноеПисьмоВходящее", "ОтправительКонтакт"); + СписокПоиска.Добавить("ЭлектронноеПисьмоВходящее.ПолучателиПисьма", "Контакт"); + СписокПоиска.Добавить("ЭлектронноеПисьмоВходящее.ПолучателиКопий", "Контакт"); + СписокПоиска.Добавить("ЭлектронноеПисьмоВходящее.ПолучателиОтвета", "Контакт"); + СписокПоиска.Добавить("ЭлектронноеПисьмоИсходящее.ПолучателиПисьма", "Контакт"); + СписокПоиска.Добавить("ЭлектронноеПисьмоИсходящее.ПолучателиКопий", "Контакт"); + СписокПоиска.Добавить("ЭлектронноеПисьмоИсходящее.ПолучателиОтвета", "Контакт"); + СписокПоиска.Добавить("ЭлектронноеПисьмоИсходящее.ПолучателиСкрытыхКопий", "Контакт"); ТекстЗапроса = ""; ТекстПроРазрешенные = " РАЗРЕШЕННЫЕ"; ТекстВременнаяТаблица = ?( ПомещатьВоВременнуюТаблицу, - "ПОМЕСТИТЬ табКонтакты + "ПОМЕСТИТЬ ТаблицаКонтакты |", "" ); ТекстОбъединить = ""; ШаблонУсловияНаСсылки = ПолучитьШаблонУсловияНаСсылкиКонтактовДляЗапроса(); - Для Каждого ЭлементСписка Из спсПоиска Цикл + Для Каждого ЭлементСписка Из СписокПоиска Цикл ИмяТаблицы = ЭлементСписка.Значение; ИмяПоля = ЭлементСписка.Представление; УсловиеНаСсылки = СтрЗаменить(ШаблонУсловияНаСсылки, "%ИмяПоля%", ИмяПоля); @@ -475,7 +593,7 @@ КонецФункции -// Формирует строку выборки поля, для получения в запросе адреса электронной почты. +// Формирует строку выборки поля, для получения в запросе адреса электронной почты. // // Параметры // ВключатьEmail - Булево - признак необходимости получения в данном запросе @@ -528,9 +646,9 @@ | Таблица.Наименование КАК Наименование, | """" КАК НаименованиеВладельца " + ПолучитьСтрокуПроАдресДляЗапросаИнформацииОКонтактах(ВключатьEmail,"Пользователи") + " |ИЗ - | табКонтакты КАК табКонтакты + | ТаблицаКонтакты КАК ТаблицаКонтакты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Таблица" + ПолучитьСтрокуСоединенияДляЗапросаИнформацииОКонтактах(ВключатьEmail,"Пользователи") + " - | ПО табКонтакты.Контакт = Таблица.Ссылка + | ПО ТаблицаКонтакты.Контакт = Таблица.Ссылка |ГДЕ | (НЕ Таблица.ПометкаУдаления) |"; @@ -550,9 +668,9 @@ | Таблица.Наименование, | """"" + ПолучитьСтрокуПроАдресДляЗапросаИнформацииОКонтактах(ВключатьEmail,ЭлементМассиваОписания.Имя) + " |ИЗ - | табКонтакты КАК табКонтакты + | ТаблицаКонтакты КАК ТаблицаКонтакты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник." + ЭлементМассиваОписания.Имя + " КАК Таблица" + ПолучитьСтрокуСоединенияДляЗапросаИнформацииОКонтактах(ВключатьEmail,ЭлементМассиваОписания.Имя) + " - | ПО табКонтакты.Контакт = Таблица.Ссылка + | ПО ТаблицаКонтакты.Контакт = Таблица.Ссылка |ГДЕ | (НЕ Таблица.ПометкаУдаления) | "+?(ЭлементМассиваОписания.Иерархический," И (НЕ Таблица.Ссылка.ЭтоГруппа)",""); @@ -621,7 +739,7 @@ КонецЕсли; - КонецЦикла; + КонецЦикла; ТекстЗапроса = ТекстЗапроса + " | @@ -706,13 +824,13 @@ Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("Телефон", Телефон); - ТабКонтакты = Запрос.Выполнить().Выгрузить(); + ТаблицаКонтакты = Запрос.Выполнить().Выгрузить(); - Если ТабКонтакты = Неопределено ИЛИ ТабКонтакты.Количество() = 0 Тогда + Если ТаблицаКонтакты = Неопределено ИЛИ ТаблицаКонтакты.Количество() = 0 Тогда Возврат Ложь; КонецЕсли; - ЗаполнитьНайденныеКонтакты(ТабКонтакты,Форма.НайденныеКонтакты); + ЗаполнитьНайденныеКонтакты(ТаблицаКонтакты,Форма.НайденныеКонтакты); Возврат Истина; @@ -740,7 +858,7 @@ | Справочник.Пользователи КАК Таблица |ГДЕ | Таблица.Наименование ПОДОБНО &Наименование - | И (НЕ Таблица.ПометкаУдаления) + | И (НЕ Таблица.ПометкаУдаления) |"; Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл @@ -844,13 +962,13 @@ Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("Наименование", Наименование + "%"); - ТабКонтакты = Запрос.Выполнить().Выгрузить(); + ТаблицаКонтакты = Запрос.Выполнить().Выгрузить(); - Если ТабКонтакты = Неопределено ИЛИ ТабКонтакты.Количество() = 0 Тогда + Если ТаблицаКонтакты = Неопределено ИЛИ ТаблицаКонтакты.Количество() = 0 Тогда Возврат Ложь; КонецЕсли; - ЗаполнитьНайденныеКонтакты(ТабКонтакты,Форма.НайденныеКонтакты); + ЗаполнитьНайденныеКонтакты(ТаблицаКонтакты,Форма.НайденныеКонтакты); Возврат Истина; КонецФункции @@ -894,16 +1012,16 @@ Функция НайтиПоEmail(СтрокаПоиска,ПоДомену,Форма) Экспорт Если ПоДомену Тогда - ТабКонтакты = ПолучитьКонтактыПоДоменномуАдресу(СтрокаПоиска); + ТаблицаКонтакты = ПолучитьКонтактыПоДоменномуАдресу(СтрокаПоиска); Иначе - ТабКонтакты = ПолучитьВсеКонтактыПоEmail(СтрокаПоиска); + ТаблицаКонтакты = ПолучитьВсеКонтактыПоEmail(СтрокаПоиска); КонецЕсли; - Если ТабКонтакты = Неопределено ИЛИ ТабКонтакты.Количество() = 0 Тогда + Если ТаблицаКонтакты = Неопределено ИЛИ ТаблицаКонтакты.Количество() = 0 Тогда Возврат Ложь; КонецЕсли; - ЗаполнитьНайденныеКонтакты(ТабКонтакты, Форма.НайденныеКонтакты); + ЗаполнитьНайденныеКонтакты(ТаблицаКонтакты, Форма.НайденныеКонтакты); Возврат Истина; @@ -997,10 +1115,10 @@ Возврат НСтр("ru = 'Использование индекса полнотекстового поиска данных запрещено!'"); КонецЕсли; - масМетаданных = ПолучитьМассивМетаданныхКонтакты(); + МассивМетаданных = ПолучитьМассивМетаданныхКонтакты(); СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок(Форма.СтрокаПоиска, 101); - СписокПоиска.ОбластьПоиска = масМетаданных; + СписокПоиска.ОбластьПоиска = МассивМетаданных; СписокПоиска.ПерваяЧасть(); КоличествоНайденныхЭлементов = СписокПоиска.Количество(); @@ -1008,12 +1126,12 @@ Возврат ""; КонецЕсли; - масСсылок = Новый Массив; - соотвОписание = Новый Соответствие; - Для Сч = 0 По Мин(КоличествоНайденныхЭлементов, 100)-1 Цикл - ЭлементСписка = СписокПоиска.Получить(Сч); - масСсылок.Добавить(ЭлементСписка.Значение); - соотвОписание.Вставить(ЭлементСписка.Значение, ЭлементСписка.Описание); + МассивСсылок = Новый Массив; + СоответствиеОписаний = Новый Соответствие; + Для Инд = 0 По Мин(КоличествоНайденныхЭлементов, 100)-1 Цикл + ЭлементСписка = СписокПоиска.Получить(Инд); + МассивСсылок.Добавить(ЭлементСписка.Значение); + СоответствиеОписаний.Вставить(ЭлементСписка.Значение, ЭлементСписка.Описание); КонецЦикла; Если ДляАдреснойКниги Тогда @@ -1025,14 +1143,14 @@ Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("масСсылок", масСсылок); + Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - новСтр = Форма.НайденныеКонтакты.Добавить(); - новСтр.Ссылка = Выборка.Контакт; - новСтр.Представление = ?(ДляАдреснойКниги ,Выборка.Представление,соотвОписание.Получить(Выборка.Контакт)); - новСтр.НаименованиеКонтакта = Выборка.Наименование + + НоваяСтрока = Форма.НайденныеКонтакты.Добавить(); + НоваяСтрока.Ссылка = Выборка.Контакт; + НоваяСтрока.Представление = ?(ДляАдреснойКниги ,Выборка.Представление,СоответствиеОписаний.Получить(Выборка.Контакт)); + НоваяСтрока.НаименованиеКонтакта = Выборка.Наименование + ?(ПустаяСтрока(Выборка.НаименованиеВладельца), "", " (" + Выборка.НаименованиеВладельца + ")"); КонецЦикла; @@ -1058,7 +1176,7 @@ |ИЗ | Справочник.Пользователи КАК ТаблицаСправочника |ГДЕ - | ТаблицаСправочника.Ссылка В(&масСсылок) + | ТаблицаСправочника.Ссылка В(&МассивСсылок) | И (НЕ ТаблицаСправочника.ПометкаУдаления)"; Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл @@ -1078,7 +1196,7 @@ |ИЗ | Справочник." +ЭлементМассиваОписания.Имя +" КАК ТаблицаСправочника |ГДЕ - | ТаблицаСправочника.Ссылка В(&масСсылок) "+?(ЭлементМассиваОписания.Иерархический," И (НЕ ТаблицаСправочника.ЭтоГруппа)","")+" + | ТаблицаСправочника.Ссылка В(&МассивСсылок) "+?(ЭлементМассиваОписания.Иерархический," И (НЕ ТаблицаСправочника.ЭтоГруппа)","")+" | И (НЕ ТаблицаСправочника.ПометкаУдаления)"; КонецЦикла; @@ -1113,7 +1231,7 @@ | ПО (ТаблицаКонтактнаяИнформация.Ссылка = ТаблицаСправочника.Ссылка) | И (ТаблицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)) |ГДЕ - | ТаблицаСправочника.Ссылка В(&масСсылок) + | ТаблицаСправочника.Ссылка В(&МассивСсылок) | И (НЕ ТаблицаСправочника.ПометкаУдаления)"; Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл @@ -1136,7 +1254,7 @@ | ПО (ТаблицаКонтактнаяИнформация.Ссылка = ТаблицаСправочника.Ссылка) | И (ТаблицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)) |ГДЕ - | ТаблицаСправочника.Ссылка В(&масСсылок) "+?(ЭлементМассиваОписания.Иерархический," И (НЕ ТаблицаСправочника.ЭтоГруппа)","")+" + | ТаблицаСправочника.Ссылка В(&МассивСсылок) "+?(ЭлементМассиваОписания.Иерархический," И (НЕ ТаблицаСправочника.ЭтоГруппа)","")+" | И (НЕ ТаблицаСправочника.ПометкаУдаления)"; КонецЦикла; @@ -1166,25 +1284,24 @@ Возврат; КонецЕсли; - табКонтакты = ПолучитьВсеКонтактыПоПредметуИлиЦепочке(Предмет, ВключатьEmail); - Если (табКонтакты = Неопределено) ИЛИ (табКонтакты.Количество() = 0) Тогда + ТаблицаКонтакты = ПолучитьВсеКонтактыПоПредметуИлиЦепочке(Предмет, ВключатьEmail); + Если (ТаблицаКонтакты = Неопределено) ИЛИ (ТаблицаКонтакты.Количество() = 0) Тогда ЭлементыФормы.СтраницаВсеКонтактыПоПредмету.Видимость = Ложь; Возврат; КонецЕсли; - Для Каждого Стр Из табКонтакты Цикл - новСтр = КонтактыПоПредмету.Добавить(); - новСтр.Ссылка = Стр.Ссылка; - новСтр.Наименование = Стр.Наименование; - новСтр.ИмяСправочника = Стр.Ссылка.Метаданные().Имя; - новСтр.ПредставлениеНаименования = Стр.ПредставлениеНаименования; + Для Каждого СтрокаТаблицы Из ТаблицаКонтакты Цикл + НоваяСтрока = КонтактыПоПредмету.Добавить(); + НоваяСтрока.Ссылка = СтрокаТаблицы.Ссылка; + НоваяСтрока.Наименование = СтрокаТаблицы.Наименование; + НоваяСтрока.ИмяСправочника = СтрокаТаблицы.Ссылка.Метаданные().Имя; + НоваяСтрока.ПредставлениеНаименования = СтрокаТаблицы.ПредставлениеНаименования; Если ВключатьEmail Тогда - новСтр.Адрес = Стр.АдресЭП; + НоваяСтрока.Адрес = СтрокаТаблицы.АдресЭП; КонецЕсли; КонецЦикла; ЭлементыФормы.СтраницыСписки.ТекущаяСтраница = ЭлементыФормы.СтраницаВсеКонтактыПоПредмету; - Возврат; КонецПроцедуры @@ -1322,8 +1439,7 @@ Возврат Выборка.Количество; КонецЕсли; -КонецФункции // ПолучитьКоличествоВзаимодействийПоКонтакту() - +КонецФункции /////////////////////////////////////////////////////////////////////////////////// // Процедуры и функции работы с взаимодействиями @@ -1353,61 +1469,13 @@ КонецФункции -//Вызывается из обработчиков заполнения документов - взаимодействий и предметов заполнения. -//Выполняет необходимые действия по заполнению реквизитов по умолчанию +// Устанавливает предмет взаимодействия по данным заполнения документа взаимодействия // -//Параметры -// Объект - ДокументОбъект - документ, для которого выполняется заполнение. -// ДанныеЗаполнения - Произвольный - значение,которое используется как основание для заполнения. +// Параметры +// Параметры - Структура - параметры, переданные при создании документа взаимодействия +// Предмет - ДокументСсылка, СправочникСсылка - в данную процедуру устанавливается предмет +// взаимодействия согласно данным заполнения. // -Процедура ЗаполнитьРеквизитыПоУмолчанию(Объект, ДанныеЗаполнения) Экспорт - - ЭтоВзаимодействие = ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Объект.Ссылка); - - //текущий пользователь является автором и ответственным по создаваемому взаимодействию - Если ЭтоВзаимодействие Тогда - Объект.Автор = ОбщегоНазначения.ТекущийПользователь(); - Объект.Ответственный = Объект.Автор; - КонецЕсли; - - Если ДанныеЗаполнения = Неопределено Тогда - Возврат; - КонецЕсли; - - Контакты = Неопределено; - - Если ВзаимодействияКлиентСервер.ЯвляетсяКонтактом(ДанныеЗаполнения) - И Не ДанныеЗаполнения.ЭтоГруппа Тогда - // На основании контакта - Контакты = Новый Массив; - Контакты.Добавить(ДанныеЗаполнения); - - ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяПредметом(ДанныеЗаполнения) Тогда - // На основании предмета - МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДанныеЗаполнения); - Контакты = МенеджерОбъекта.ПолучитьКонтакты(ДанныеЗаполнения); - - ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(ДанныеЗаполнения) Тогда - // На основании взаимодействия - МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДанныеЗаполнения); - Контакты = МенеджерОбъекта.ПолучитьКонтакты(ДанныеЗаполнения); - - ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда - // Заполним контакт - Если ДанныеЗаполнения.Свойство("Контакт") И ЗначениеЗаполнено(ДанныеЗаполнения.Контакт) Тогда - Контакты = Новый Массив; - Контакты.Добавить(ДанныеЗаполнения.Контакт); - КонецЕсли; - - КонецЕсли; - - // Заполним участников - Если ЗначениеЗаполнено(Контакты) И (Контакты.Количество() > 0) Тогда - Объект.ЗаполнитьКонтакты(Контакты); - КонецЕсли; - -КонецПроцедуры - Процедура УстановитьПредметПоДаннымЗаполнения(Параметры,Предмет) Экспорт Если ВзаимодействияКлиентСервер.ЯвляетсяПредметом(Параметры.Основание) Тогда @@ -1475,10 +1543,10 @@ // Функция ПолучитьУчастникаПоПолям(Контакт, Адрес, Представление) Экспорт - Стр = Новый Структура("Контакт, Адрес, Представление", Контакт, Адрес, Представление); - Рез = Новый Массив; - Рез.Добавить(Стр); - Возврат Рез; + СтруктураКонтакта = Новый Структура("Контакт, Адрес, Представление", Контакт, Адрес, Представление); + ФормируемыйМассив = Новый Массив; + ФормируемыйМассив.Добавить(СтруктураКонтакта); + Возврат ФормируемыйМассив; КонецФункции @@ -1509,18 +1577,18 @@ Возврат; КонецЕсли; - Для Каждого Стр Из Контакты Цикл + Для Каждого ЭлементМассива Из Контакты Цикл - новСтр = Участники.Добавить(); - Если ТипЗнч(Стр) = Тип("Структура") Тогда - новСтр.Контакт = Стр.Контакт; - новСтр.ПредставлениеКонтакта = Стр.Представление; - новСтр.КакСвязаться = Стр.Адрес; + НоваяСтрока = Участники.Добавить(); + Если ТипЗнч(ЭлементМассива) = Тип("Структура") Тогда + НоваяСтрока.Контакт = ЭлементМассива.Контакт; + НоваяСтрока.ПредставлениеКонтакта = ЭлементМассива.Представление; + НоваяСтрока.КакСвязаться = ЭлементМассива.Адрес; Иначе - новСтр.Контакт = Стр; + НоваяСтрока.Контакт = ЭлементМассива; КонецЕсли; - ДозаполнитьПоляКонтактов(новСтр.Контакт, новСтр.ПредставлениеКонтакта, новСтр.КакСвязаться); + ДозаполнитьПоляКонтактов(НоваяСтрока.Контакт, НоваяСтрока.ПредставлениеКонтакта, НоваяСтрока.КакСвязаться); КонецЦикла; @@ -1615,7 +1683,7 @@ Возврат Метаданные.НайтиПоТипу(ТипОбъекта)[ИмяСвойства]; -КонецФункции +КонецФункции //Получает адреса электронной почты для массива контактов // @@ -1634,25 +1702,26 @@ МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); - ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | ТаблицаКонтактнаяИнформация.АдресЭП КАК Адрес, - | ТаблицаКонтакт.Ссылка КАК Контакт - |ПОМЕСТИТЬ КонтактыАдреса - |ИЗ - | Справочник.Пользователи КАК ТаблицаКонтакт - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК ТаблицаКонтактнаяИнформация - | ПО (ТаблицаКонтактнаяИнформация.Ссылка = ТаблицаКонтакт.Ссылка) - | И (ТаблицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)) - |ГДЕ - | (ТаблицаКонтакт.Ссылка В (&МассивКонтактов) - | ИЛИ ИСТИНА В - | (ВЫБРАТЬ - | ИСТИНА - | ИЗ - | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - | ГДЕ - | СоставыГруппПользователей.Пользователь = ТаблицаКонтакт.Ссылка - | И СоставыГруппПользователей.ГруппаПользователей В (&МассивКонтактов)))"; + ТекстЗапроса = " + |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | ТаблицаКонтактнаяИнформация.АдресЭП КАК Адрес, + | ТаблицаКонтакт.Ссылка КАК Контакт + |ПОМЕСТИТЬ КонтактыАдреса + |ИЗ + | Справочник.Пользователи КАК ТаблицаКонтакт + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК ТаблицаКонтактнаяИнформация + | ПО (ТаблицаКонтактнаяИнформация.Ссылка = ТаблицаКонтакт.Ссылка) + | И (ТаблицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)) + |ГДЕ + | (ТаблицаКонтакт.Ссылка В (&МассивКонтактов) + | ИЛИ ИСТИНА В + | (ВЫБРАТЬ + | ИСТИНА + | ИЗ + | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ГДЕ + | СоставыГруппПользователей.Пользователь = ТаблицаКонтакт.Ссылка + | И СоставыГруппПользователей.ГруппаПользователей В (&МассивКонтактов)))"; Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл @@ -1948,20 +2017,20 @@ Если ТипЗнч(Источник) = Тип("ДанныеФормыСтруктура") ИЛИ ТипЗнч(Источник) = Тип("ДокументОбъект.ЭлектронноеПисьмоИсходящее") ИЛИ ТипЗнч(Источник) = Тип("СтрокаТаблицыЗначений") Тогда - ТабЗн = Источник[ИмяТаблицы]; + Таблица = Источник[ИмяТаблицы]; ИначеЕсли ТипЗнч(Источник) = Тип("ВыборкаИзРезультатаЗапроса") Тогда - ТабЗн = Источник[ИмяТаблицы].Выгрузить(); + Таблица = Источник[ИмяТаблицы].Выгрузить(); Иначе Возврат; КонецЕсли; - Если ТабЗн.Количество() = 0 Тогда + Если Таблица.Количество() = 0 Тогда Возврат; КонецЕсли; Адресаты = Новый Массив; - Для Каждого Стр Из ТабЗн Цикл - Адресаты.Добавить(Новый Структура("Адрес,Представление", Стр.Адрес, Стр.Представление)); + Для Каждого СтрокаТаблицы Из Таблица Цикл + Адресаты.Добавить(Новый Структура("Адрес,Представление", СтрокаТаблицы.Адрес, СтрокаТаблицы.Представление)); КонецЦикла; ПараметрыПисьма.Вставить(ИмяПараметра, Адресаты); @@ -2097,7 +2166,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ОБНОВЛЕНИЯ +// Обработчики обновления //Регистрирует обработчики обновления ИБ для подсистемы Взазимодействий Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт @@ -2131,8 +2200,8 @@ Обработчик.Процедура = "Взаимодействия.ЗаполнитьКонстантыИспользованияВзаимодействий_1_2_1_4"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.2.2.2"; - Обработчик.Процедура = "Взаимодействия.ВыполнитьПерекодировкуПапокЭлектроннойПочты_1_2_2_2"; + Обработчик.Версия = "2.0.1.2"; + Обработчик.Процедура = "Взаимодействия.ВыполнитьПерекодировкуПапокЭлектроннойПочты_2_0_1_2"; КонецПроцедуры @@ -2353,33 +2422,34 @@ Процедура ПреобразоватьОписаниеВТему_1_2_1_4() Экспорт Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | Встреча.Ссылка, - | ПОДСТРОКА(Встреча.Описание, 1, 1024) КАК Описание - |ИЗ - | Документ.Встреча КАК Встреча - |ГДЕ - | Встреча.Тема <> """""""" - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ЗапланированноеВзаимодействие.Ссылка, - | ПОДСТРОКА(ЗапланированноеВзаимодействие.Описание, 1, 1024) - |ИЗ - | Документ.ЗапланированноеВзаимодействие КАК ЗапланированноеВзаимодействие - |ГДЕ - | ЗапланированноеВзаимодействие.Тема <> """""""" - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ТелефонныйЗвонок.Ссылка, - | ПОДСТРОКА(ТелефонныйЗвонок.Описание, 1, 1024) - |ИЗ - | Документ.ТелефонныйЗвонок КАК ТелефонныйЗвонок - |ГДЕ - | ТелефонныйЗвонок.Тема <> """""""""; + Запрос.Текст = " + |ВЫБРАТЬ + | Встреча.Ссылка, + | ПОДСТРОКА(Встреча.Описание, 1, 1024) КАК Описание + |ИЗ + | Документ.Встреча КАК Встреча + |ГДЕ + | Встреча.Тема <> """""""" + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЗапланированноеВзаимодействие.Ссылка, + | ПОДСТРОКА(ЗапланированноеВзаимодействие.Описание, 1, 1024) + |ИЗ + | Документ.ЗапланированноеВзаимодействие КАК ЗапланированноеВзаимодействие + |ГДЕ + | ЗапланированноеВзаимодействие.Тема <> """""""" + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ТелефонныйЗвонок.Ссылка, + | ПОДСТРОКА(ТелефонныйЗвонок.Описание, 1, 1024) + |ИЗ + | Документ.ТелефонныйЗвонок КАК ТелефонныйЗвонок + |ГДЕ + | ТелефонныйЗвонок.Тема <> """""""""; Выборка = Запрос.Выполнить().Выбрать(); @@ -2389,7 +2459,7 @@ ВзаимодействиеОбъект.Тема = Выборка.Описание; ВзаимодействиеОбъект.Записать(); КонецЕсли; - КонецЦикла; + КонецЦикла; КонецПроцедуры @@ -2445,7 +2515,7 @@ // Заполняет коды у предопределенных папок и выполняет перекодировку справочника // если это необходимо // -Процедура ВыполнитьПерекодировкуПапокЭлектроннойПочты_1_2_2_2() Экспорт +Процедура ВыполнитьПерекодировкуПапокЭлектроннойПочты_2_0_1_2() Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ @@ -2514,7 +2584,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБЩИЕ ОБРАБОТЧИКИ СОБЫТИЙ ДОКУМЕНТОВ МЕХАНИЗМА ВЗАИМОДЕЙСТВИЯ +// Общие обработчики событий документов взаимодействий // Заполняет список выбора для поля "Рассмотреть после" // @@ -2593,57 +2663,6 @@ КонецПроцедуры -//Устанавливает во всей цепочке взаимодействий в качестве предмета созданный объект -//Параметры: -// Предмет - созданный предмет взаимодействий, -// Взаимодействие - взаимодействие, по которому создан предмет, -// Отказ - флаг отказа от операции -// -Процедура ПриЗаписиПредметаИзФормы(Предмет, Взаимодействие, Отказ) Экспорт - - Если Не ЗначениеЗаполнено(Взаимодействие) - Или Не ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Взаимодействие) Тогда - Возврат; - КонецЕсли; - - СтарыйПредмет = ПолучитьЗначениеПредмета(Взаимодействие); - Если Предмет = СтарыйПредмет Тогда - // Предмет уже был установлен - Возврат; - КонецЕсли; - - // Получим список взаимодействий у которых нужно изменить предмет - Если ЗначениеЗаполнено(СтарыйПредмет) - И ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтарыйПредмет) Тогда - масЗамен = ВзаимодействияВызовСервера.ПолучитьВзаимодействияИзЦепочки(СтарыйПредмет, Взаимодействие); - Иначе - масЗамен = Новый Массив; - КонецЕсли; - масЗамен.Вставить(0, Взаимодействие); - - // Заменим предмет во всех взаимодействиях - - Для Каждого Элемент Из масЗамен Цикл - Попытка - УстановитьПредмет(Элемент, Предмет); - Исключение - ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при замене предмета у %1: %2'"), - Элемент, - ПредставлениеОшибки), - , - , - , - Отказ); - Отказ = Истина; - Возврат; - - КонецПопытки; - КонецЦикла; - -КонецПроцедуры - //Обработчик события перед записью, возникающих в формах документов взаимодействий. // //Параметры @@ -2752,10 +2771,10 @@ ЭлементСтраница = Форма.Элементы.Добавить( "Страница_" + ЭлементМассиваОписания.Имя,Тип("ГруппаФормы"),Форма.Элементы.СтраницыСписки); - ЭлементСтраница.Вид = ВидГруппыФормы.Страница; - ЭлементСтраница.ОтображатьЗаголовок = Истина; - ЭлементСтраница.Заголовок = ЭлементМассиваОписания.Представление; - ЭлементСтраница.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + ЭлементСтраница.Вид = ВидГруппыФормы.Страница; + ЭлементСтраница.ОтображатьЗаголовок = Истина; + ЭлементСтраница.Заголовок = ЭлементМассиваОписания.Представление; + ЭлементСтраница.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; КонецЕсли; @@ -2788,6 +2807,11 @@ КонецПроцедуры +//Устанавливает отбор динамического списка документов взаимодействий, исключая документы не относящиеся к почте. +// +// Параметры +// Список - ДинамическийСписок - динамический список, для которого устанавливается отбор +// Процедура СоздатьОтборПоТипуСогласноФО(Список) Экспорт ГруппаОтбора = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора( @@ -2847,24 +2871,6 @@ КонецПроцедуры -// Устанавливает видимость страниц дополнительных для форм документов взаимодействий -// -// Параметры -// Форма - УправляемаяФорма - форма для которой будет выполняться процедура -// УстанавливатьЗаголовокОписание - Булево - признак того что для поля "Описание", в случае отсутствия доп. -// реквизитов будет установлен заголовок. -// -Процедура УстановитьВидимостьСтраницДопРеквизитов(Форма,УстанавливатьЗаголовокОписание) Экспорт - - Если Форма.Элементы.СтраницаДополнительныеРеквизиты.ПодчиненныеЭлементы.Количество() = 0 Тогда - Форма.Элементы.СтраницыОписаниеДополнительно.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; - Если УстанавливатьЗаголовокОписание Тогда - Форма.Элементы.Описание.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - ////////////////////////////////////////////////////////////////////////////////// // Работа с предметами взаимодействий @@ -3027,7 +3033,7 @@ Возврат ПолучитьТекстHTMLИзОбъектаДокументHTML(ДокументHTML); -КонецФункции +КонецФункции // Формирует текст HTML для исходящего электронного письма // @@ -3169,7 +3175,7 @@ Текст, ТекстHTML, ТипТекстаПреобразование, - Кодировка = Неопределено, + Кодировка = "", ОбработатьКартинки = Ложь) Если ТипТекста <> ТипТекстаПреобразование И @@ -3186,14 +3192,29 @@ Иначе + КодировкаПисьма = Кодировка; + + Если ПустаяСтрока(КодировкаПисьма) Тогда + ПозицияАтрибутаКодировки = Найти(ТекстHTML,"charset"); + Если ПозицияАтрибутаКодировки <> 0 Тогда + инд = 0; + Пока КодСимвола(Сред(ТекстHTML,ПозицияАтрибутаКодировки + 8 + инд,1)) <> 34 Цикл + КодировкаПисьма = КодировкаПисьма + Сред(ТекстHTML,ПозицияАтрибутаКодировки + 8 + инд,1); + инд = инд + 1; + КонецЦикла + Иначе + КодировкаПисьма = "utf8"; + КонецЕсли; + КонецЕсли; + ТаблицаФайлов = ПолучитьВложенияПисьмаСНеПустымИД(Письмо); Если ТаблицаФайлов.Количество() Тогда - ДокументHTML = ЗаменитьИдентификаторыКартинокНаПутьКФайлам(ТекстHTML, ТаблицаФайлов, Кодировка, ОбработатьКартинки); + ДокументHTML = ЗаменитьИдентификаторыКартинокНаПутьКФайлам(ТекстHTML, ТаблицаФайлов, КодировкаПисьма, ОбработатьКартинки); Иначе - ДокументHTML = ПолучитьОбъектДокументHTMLИзТекстаHTML(ТекстHTML); + ДокументHTML = ПолучитьОбъектДокументHTMLИзТекстаHTML(ТекстHTML, КодировкаПисьма); КонецЕсли; КонецЕсли; @@ -3892,7 +3913,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////////// -// Работа с настройками +// Работа с настройками // Возвращает настройку текущего пользователя // Если настройка не задана и передав параметр ЗначениеЕслиНеЗадана, @@ -3905,9 +3926,7 @@ Результат = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( КлючОбъекта, КлючНастроек, - ЗначениеЕслиНеЗадана,//ЗначениеПоУмолчанию - "", // <ОписаниеНастроек> - Строка(ПараметрыСеанса.ТекущийПользователь.ИдентификаторПользователяИБ)); + ЗначениеЕслиНеЗадана); Возврат Результат; @@ -3919,9 +3938,7 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( КлючОбъекта, КлючНастроек, - Значение, - "", // <ОписаниеНастроек> - Строка(ПараметрыСеанса.ТекущийПользователь.ИдентификаторПользователяИБ)); + Значение); КонецПроцедуры @@ -3963,7 +3980,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////// -// Работа с папками электронных писем +// Работа с папками электронных писем // Проверяет, является ли текущий пользователь ответсвенным за ведение папок для учетной записи // @@ -3975,6 +3992,10 @@ // Функция ПользовательЯвляетсяОтветственнымЗаВедениеПапок(УчетнаяЗапись) Экспорт + Если Пользователи.ЭтоПолноправныйПользователь() Тогда + Возврат Истина; + КонецЕсли; + Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ РАЗРЕШЕННЫЕ @@ -4328,22 +4349,23 @@ КонецЕсли; Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ПравилаОбработкиЭлектроннойПочты.КомпоновщикНастроек, - | ПравилаОбработкиЭлектроннойПочты.ПомещатьВПапку - |ИЗ - | Справочник.ПравилаОбработкиЭлектроннойПочты КАК ПравилаОбработкиЭлектроннойПочты - |ГДЕ - | ПравилаОбработкиЭлектроннойПочты.Владелец В - | (ВЫБРАТЬ - | Взаимодействия.УчетнаяЗапись - | ИЗ - | ЖурналДокументов.Взаимодействия КАК Взаимодействия - | ГДЕ - | Взаимодействия.Ссылка = &Письмо) - | - |УПОРЯДОЧИТЬ ПО - | ПравилаОбработкиЭлектроннойПочты.РеквизитДопУпорядочивания"; + Запрос.Текст = " + |ВЫБРАТЬ + | ПравилаОбработкиЭлектроннойПочты.КомпоновщикНастроек, + | ПравилаОбработкиЭлектроннойПочты.ПомещатьВПапку + |ИЗ + | Справочник.ПравилаОбработкиЭлектроннойПочты КАК ПравилаОбработкиЭлектроннойПочты + |ГДЕ + | ПравилаОбработкиЭлектроннойПочты.Владелец В + | (ВЫБРАТЬ + | Взаимодействия.УчетнаяЗапись + | ИЗ + | ЖурналДокументов.Взаимодействия КАК Взаимодействия + | ГДЕ + | Взаимодействия.Ссылка = &Письмо) + | + |УПОРЯДОЧИТЬ ПО + | ПравилаОбработкиЭлектроннойПочты.РеквизитДопУпорядочивания"; Запрос.УстановитьПараметр("Письмо", Письмо); diff --git a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl index 8d1ef467f..e89127d6a 100644 --- a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl @@ -1,3 +1,229 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Взаимодействия" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Основные процедуры и функции поиска контактов + +// Получает представление и всю контактную информацию контакта. +// +// Параметры +// Контакт - Ссылка - контакт для которого получается информация +// Представление - Строка - в данный параметр будет помещено полученное представление +// СтрокаКИ - Строка - в данный параметр будет помещено полученная контактная информация +// +Процедура ПолучитьПредставлениеИВсюКонтактнуюИнформациюКонтакта(Контакт, Представление, СтрокаКИ,ТипКонтакнойИнформации = Неопределено) Экспорт + + Представление = ""; + СтрокаКИ = ""; + Если Не ЗначениеЗаполнено(Контакт) Тогда + Возврат; + КонецЕсли; + + ИмяТаблицы = Контакт.Метаданные().Имя; + ИмяПоляДляНаименованияВладельца = ПолучитьИмяПоляДляНаименованияВладельца(ИмяТаблицы); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Таблица.Наименование, + | " + ИмяПоляДляНаименованияВладельца + " КАК НаименованиеВладельца, + | Таблица.КонтактнаяИнформация.( + | Тип, + | Представление + | ) + |ИЗ + | Справочник." + ИмяТаблицы + " КАК Таблица + |ГДЕ + | Таблица.Ссылка = &Контакт" + ?(ТипКонтакнойИнформации = Неопределено,""," И Таблица.КонтактнаяИнформация.Тип = &ТипКонтактнойИнформации"); + + Запрос.УстановитьПараметр("Контакт", Контакт); + Запрос.УстановитьПараметр("ТипКонтактнойИнформации", ТипКонтакнойИнформации); + Выборка = Запрос.Выполнить().Выбрать(); + Если Не Выборка.Следующий() Тогда + Возврат; + КонецЕсли; + + Представление = Выборка.Наименование; + + Если Не ПустаяСтрока(Выборка.НаименованиеВладельца) Тогда + Представление = Представление + " (" + Выборка.НаименованиеВладельца + ")"; + КонецЕсли; + + Для Каждого СтрокаТаблицы Из Выборка.КонтактнаяИнформация.Выгрузить() Цикл + Если СтрокаТаблицы.Тип <> Перечисления.ТипыКонтактнойИнформации.Другое Тогда + СтрокаКИ = СтрокаКИ + ?(ПустаяСтрока(СтрокаКИ), "", ", ") + СтрокаТаблицы.Представление; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Возвращает поля для получения наименования владельца, если такой имеется +// +//Параметры +// ИмяТаблицы - Строка - Имя основной таблицы, для которой формируется запрос. +// +//Возвращаемое значение: +// Строка - строка, которая будет вставлена в запрос. +// +Функция ПолучитьИмяПоляДляНаименованияВладельца(ИмяТаблицы) + + МассивОписанияКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); + + Для каждого ЭлементОписанияМассива Из МассивОписанияКонтактов Цикл + Если ЭлементОписанияМассива.Имя = ИмяТаблицы И ЭлементОписанияМассива.ЕстьВладелец Тогда + Возврат "Таблица.Владелец.Наименование"; + КонецЕсли; + КонецЦикла; + + Возврат """"""; + +КонецФункции + +//Получает наименование и адреса электронной почты контакта +// +//Параметры +// Контакт - Ссылка - контакт, для которого получаются данные +// +//Возвращаемое значение: +// Структура - содержит наименование контакта и список значений электронной почты контакта +// +Функция ПолучитьНаименованиеИАдресаЭлектроннойПочтыКонтакта(Контакт) Экспорт + + Если Не ЗначениеЗаполнено(Контакт) Тогда + Возврат Неопределено; + КонецЕсли; + + Если Контакт.Метаданные().Иерархический Тогда + Если Контакт.ЭтоГруппа Тогда + Возврат Неопределено; + КонецЕсли; + КонецЕсли; + + ИмяТаблицы = Контакт.Метаданные().ПолноеИмя(); + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | ЕстьNULL(ТаблицаКонтактнаяИнформация.АдресЭП,"""") КАК АдресЭП, + | Таблица.Наименование КАК Наименование + |ИЗ + | " + ИмяТаблицы + " КАК Таблица + | ЛЕВОЕ СОЕДИНЕНИЕ " + ИмяТаблицы + ".КонтактнаяИнформация КАК ТаблицаКонтактнаяИнформация + | ПО (ТаблицаКонтактнаяИнформация.Ссылка = Таблица.Ссылка) + | И (ТаблицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)) + |ГДЕ + | Таблица.Ссылка = &Контакт + |ИТОГИ ПО + | Наименование"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("Контакт", Контакт); + Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + + Если Не Выборка.Следующий() Тогда + Возврат Неопределено; + КонецЕсли; + + Адреса = Новый Структура("Наименование,Адреса", Выборка.Наименование, Новый СписокЗначений); + ВыборкаАдреса = Выборка.Выбрать(); + Пока ВыборкаАдреса.Следующий() Цикл + Адреса.Адреса.Добавить(ВыборкаАдреса.АдресЭП); + КонецЦикла; + + Возврат Адреса; + +КонецФункции + +//Получает адреса электронной почты контакта +// +//Параметры +// Контакт - Ссылка - контакт, для которого получаются данные +// +//Возвращаемое значение: +// Массив - массив структур содержащих адреса, виды и представления адресов +// +Функция ПолучитьАдресаЭлектроннойПочтыКонтакта(Контакт, ВключатьНезаполненныеВиды = Ложь) Экспорт + + Если Не ЗначениеЗаполнено(Контакт) Тогда + Возврат Неопределено; + КонецЕсли; + + Запрос = Новый Запрос; + ИмяМетаданныхКонтакта = Контакт.Метаданные().Имя; + + Если ВключатьНезаполненныеВиды Тогда + + Запрос.Текст = + "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка КАК Вид, + | ВидыКонтактнойИнформации.Наименование КАК ВидНаименование, + | Контакты.Ссылка КАК Контакт + |ПОМЕСТИТЬ КонтактВидыКИ + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации, + | Справочник." + ИмяМетаданныхКонтакта + " КАК Контакты + |ГДЕ + | ВидыКонтактнойИнформации.Родитель = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.Справочник" + ИмяМетаданныхКонтакта + ") + | И Контакты.Ссылка = &Контакт + | И ВидыКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Представление(КонтактВидыКИ.Контакт) КАК Представление, + | ЕСТЬNULL(КонтактнаяИнформация.АдресЭП, """") КАК АдресЭП, + | КонтактВидыКИ.Вид, + | КонтактВидыКИ.ВидНаименование + |ИЗ + | КонтактВидыКИ КАК КонтактВидыКИ + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник." + ИмяМетаданныхКонтакта + ".КонтактнаяИнформация КАК КонтактнаяИнформация + | ПО (КонтактнаяИнформация.Ссылка = КонтактВидыКИ.Контакт) + | И (КонтактнаяИнформация.Вид = КонтактВидыКИ.Вид)" + + Иначе + + Запрос.Текст = + "ВЫБРАТЬ + | Таблицы.АдресЭП, + | Таблицы.Вид, + | Таблицы.Представление, + | Таблицы.Вид.Наименование КАК ВидНаименование + |ИЗ + | Справочник." + ИмяМетаданныхКонтакта + ".КонтактнаяИнформация КАК Таблицы + |ГДЕ + | Таблицы.Ссылка = &Контакт + | И Таблицы.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)"; + + КонецЕсли; + + Запрос.УстановитьПараметр("Контакт", Контакт); + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Количество() = 0 Тогда + Возврат Новый Массив; + КонецЕсли; + + Результат = Новый Массив; + Пока Выборка.Следующий() Цикл + Адрес = Новый Структура; + Адрес.Вставить("АдресЭП", Выборка.АдресЭП); + Адрес.Вставить("Вид", Выборка.Вид); + Адрес.Вставить("Представление", Выборка.Представление); + Адрес.Вставить("ВидНаименование", Выборка.ВидНаименование); + Результат.Добавить(Адрес); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Прочее + //Заменяет предмет в цепочке взаимодействий. // //Параметры @@ -99,8 +325,8 @@ //Устанавливает папку электронного письма //Параметры: -//Ссылка - ссылка на письмо, -//Папка - устанавливаемая папка электроннного письма +// Ссылка - ссылка на письмо, +// Папка - устанавливаемая папка электроннного письма // Процедура УстановитьПапкуЭлектронногоПисьма(Ссылка, Папка) Экспорт @@ -108,218 +334,3 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Основные процедуры и функции поиска контактов - -// Получает представление и всю контактную информацию контакта. -// -// Параметры -// Контакт - Ссылка - контакт для которого получается информация -// Представление - Строка - в данный параметр будет помещено полученное представление -// СтрокаКИ - Строка - в данный параметр будет помещено полученная контактная информация -// -Процедура ПолучитьПредставлениеИВсюКонтактнуюИнформациюКонтакта(Контакт, Представление, СтрокаКИ,ТипКонтакнойИнформации = Неопределено) Экспорт - - Представление = ""; - СтрокаКИ = ""; - Если Не ЗначениеЗаполнено(Контакт) Тогда - Возврат; - КонецЕсли; - - ИмяТаблицы = Контакт.Метаданные().Имя; - ИмяПоляДляНаименованияВладельца = ПолучитьИмяПоляДляНаименованияВладельца(ИмяТаблицы); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Таблица.Наименование, - | " + ИмяПоляДляНаименованияВладельца + " КАК НаименованиеВладельца, - | Таблица.КонтактнаяИнформация.( - | Тип, - | Представление - | ) - |ИЗ - | Справочник." + ИмяТаблицы + " КАК Таблица - |ГДЕ - | Таблица.Ссылка = &Контакт" + ?(ТипКонтакнойИнформации = Неопределено,""," И Таблица.КонтактнаяИнформация.Тип = &ТипКонтактнойИнформации"); - - Запрос.УстановитьПараметр("Контакт", Контакт); - Запрос.УстановитьПараметр("ТипКонтактнойИнформации", ТипКонтакнойИнформации); - Выборка = Запрос.Выполнить().Выбрать(); - Если Не Выборка.Следующий() Тогда - Возврат; - КонецЕсли; - - Представление = Выборка.Наименование; - - Если Не ПустаяСтрока(Выборка.НаименованиеВладельца) Тогда - Представление = Представление + " (" + Выборка.НаименованиеВладельца + ")"; - КонецЕсли; - - Для Каждого Стр Из Выборка.КонтактнаяИнформация.Выгрузить() Цикл - Если Стр.Тип <> Перечисления.ТипыКонтактнойИнформации.Другое Тогда - СтрокаКИ = СтрокаКИ + ?(ПустаяСтрока(СтрокаКИ), "", ", ") + Стр.Представление; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Возвращает поля для получения наименования владельца, если такой имеется -// -//Параметры -// ИмяТаблицы - Строка - Имя основной таблицы, для которой формируется запрос. -// -//Возвращаемое значение: -// Строка - строка, которая будет вставлена в запрос. -// -Функция ПолучитьИмяПоляДляНаименованияВладельца(ИмяТаблицы) - - МассивОписанияКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); - - Для каждого ЭлементОписанияМассива Из МассивОписанияКонтактов Цикл - Если ЭлементОписанияМассива.Имя = ИмяТаблицы И ЭлементОписанияМассива.ЕстьВладелец Тогда - Возврат "Таблица.Владелец.Наименование"; - КонецЕсли; - КонецЦикла; - - Возврат """"""; - -КонецФункции - -//Получает наименование и адреса электронной почты контакта -// -//Параметры -// Контакт - Ссылка - контакт, для которого получаются данные -// -//Возвращаемое значение: -// Структура - содержит наименование контакта и список значений электронной почты контакта -// -Функция ПолучитьНаименованиеИАдресаЭлектроннойПочтыКонтакта(Контакт) Экспорт - - Если Не ЗначениеЗаполнено(Контакт) Тогда - Возврат Неопределено; - КонецЕсли; - - Если Контакт.Метаданные().Иерархический Тогда - Если Контакт.ЭтоГруппа Тогда - Возврат Неопределено; - КонецЕсли; - КонецЕсли; - - ИмяТаблицы = Контакт.Метаданные().ПолноеИмя(); - - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | ЕстьNULL(ТаблицаКонтактнаяИнформация.АдресЭП,"""") КАК АдресЭП, - | Таблица.Наименование КАК Наименование - |ИЗ - | " + ИмяТаблицы + " КАК Таблица - | ЛЕВОЕ СОЕДИНЕНИЕ " + ИмяТаблицы + ".КонтактнаяИнформация КАК ТаблицаКонтактнаяИнформация - | ПО (ТаблицаКонтактнаяИнформация.Ссылка = Таблица.Ссылка) - | И (ТаблицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)) - |ГДЕ - | Таблица.Ссылка = &Контакт - |ИТОГИ ПО - | Наименование"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("Контакт", Контакт); - Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); - - Если Не Выборка.Следующий() Тогда - Возврат Неопределено; - КонецЕсли; - - Адреса = Новый Структура("Наименование,Адреса", Выборка.Наименование, Новый СписокЗначений); - ВыборкаАдреса = Выборка.Выбрать(); - Пока ВыборкаАдреса.Следующий() Цикл - Адреса.Адреса.Добавить(ВыборкаАдреса.АдресЭП); - КонецЦикла; - - Возврат Адреса; - -КонецФункции - - //Получает адреса электронной почты контакта -// -//Параметры -// Контакт - Ссылка - контакт, для которого получаются данные -// -//Возвращаемое значение: -// Массив - массив структур содержащих адреса, виды и представления адресов -// -Функция ПолучитьАдресаЭлектроннойПочтыКонтакта(Контакт, ВключатьНезаполненныеВиды = Ложь) Экспорт - - Если Не ЗначениеЗаполнено(Контакт) Тогда - Возврат Неопределено; - КонецЕсли; - - Запрос = Новый Запрос; - ИмяМетаданныхКонтакта = Контакт.Метаданные().Имя; - - Если ВключатьНезаполненныеВиды Тогда - - Запрос.Текст = - "ВЫБРАТЬ - | ВидыКонтактнойИнформации.Ссылка КАК Вид, - | ВидыКонтактнойИнформации.Наименование КАК ВидНаименование, - | Контакты.Ссылка КАК Контакт - |ПОМЕСТИТЬ КонтактВидыКИ - |ИЗ - | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации, - | Справочник." + ИмяМетаданныхКонтакта + " КАК Контакты - |ГДЕ - | ВидыКонтактнойИнформации.Родитель = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.Справочник" + ИмяМетаданныхКонтакта + ") - | И Контакты.Ссылка = &Контакт - | И ВидыКонтактнойИнформации.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Представление(КонтактВидыКИ.Контакт) КАК Представление, - | ЕСТЬNULL(КонтактнаяИнформация.АдресЭП, """") КАК АдресЭП, - | КонтактВидыКИ.Вид, - | КонтактВидыКИ.ВидНаименование - |ИЗ - | КонтактВидыКИ КАК КонтактВидыКИ - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник." + ИмяМетаданныхКонтакта + ".КонтактнаяИнформация КАК КонтактнаяИнформация - | ПО (КонтактнаяИнформация.Ссылка = КонтактВидыКИ.Контакт) - | И (КонтактнаяИнформация.Вид = КонтактВидыКИ.Вид)" - - Иначе - - Запрос.Текст = - "ВЫБРАТЬ - | Таблицы.АдресЭП, - | Таблицы.Вид, - | Таблицы.Представление, - | Таблицы.Вид.Наименование КАК ВидНаименование - |ИЗ - | Справочник." + ИмяМетаданныхКонтакта + ".КонтактнаяИнформация КАК Таблицы - |ГДЕ - | Таблицы.Ссылка = &Контакт - | И Таблицы.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)"; - - КонецЕсли; - - Запрос.УстановитьПараметр("Контакт", Контакт); - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Количество() = 0 Тогда - Возврат Новый Массив; - КонецЕсли; - - Результат = Новый Массив; - Пока Выборка.Следующий() Цикл - Адрес = Новый Структура; - Адрес.Вставить("АдресЭП", Выборка.АдресЭП); - Адрес.Вставить("Вид", Выборка.Вид); - Адрес.Вставить("Представление", Выборка.Представление); - Адрес.Вставить("ВидНаименование", Выборка.ВидНаименование); - Результат.Добавить(Адрес); - КонецЦикла; - - Возврат Результат; - -КонецФункции - diff --git a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl index f5ac18813..98846e550 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl @@ -258,9 +258,9 @@ СтандартнаяОбработка = Ложь; Модифицированность = Истина; - + Если ТипЗнч(ВыбранноеЗначение) = Тип("Число") Тогда - ЗначениеПоля = ТекущаяДата() + ВыбранноеЗначение; + ЗначениеПоля = ОбщегоНазначенияКлиент.ДатаСеанса() + ВыбранноеЗначение; Иначе ЗначениеПоля = ВыбранноеЗначение; КонецЕсли; @@ -414,7 +414,6 @@ // ДанныеСобытия - ФиксированнаяСтруктура - данные содержит параметры события // СтандартнаяОбработка - Булево - признак стандартной обработки события. // -&НаКлиенте Процедура ПолеHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) Экспорт Если ДанныеСобытия.Href <> Неопределено Тогда diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl index 80380e991..2155e8376 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентПереопределяемый/Module.bsl @@ -1,4 +1,12 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Взаимодействия" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + //Вызывается при создании нового контакта. //Используется, если для одного или нескольких видов контактов требуется, //чтобы вместо основной формы при их создании открывалась другая форма. diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl index 2d81c817e..884754c93 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl @@ -1,3 +1,31 @@ + +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Взаимодействия" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Определение типа ссылки + +// Определяет, является ли переданная в функцию ссылка контактом. +// +// Параметры +// ОбъектСсылка - Ссылка - для которой выполняется проверка. +// +// Возвращаемое значение: +// Булево - истина, если является контактом, ложь в обратном случае. +// +Функция ЯвляетсяКонтактом(ОбъектСсылка) Экспорт + + ОписаниеТиповВозможныхКонтактов = Новый ОписаниеТипов(ПолучитьМассивВозможныхТиповКонтактов()); + + Возврат ОписаниеТиповВозможныхКонтактов.СодержитТип(ТипЗнч(ОбъектСсылка)); + +КонецФункции + // Определяет, является ли переданная в функцию ссылка взаимодействием. // // Параметры @@ -49,6 +77,37 @@ КонецФункции +// Проверяет, является ли переданная ссылка предметом взаимодействий. +// +// Параметры +// ОбъектСсылка - Ссылка - ссылка, для которой выполняется проверка, +// является ли она ссылкой на предмет взаимодействий. +// +// Возвращаемое значение: +// Булево - Истина если является, Ложь в обратном случае. +// +Функция ЯвляетсяПредметом(ОбъектСсылка) Экспорт + + МассивТиповПредметов = ВзаимодействияКлиентСерверПовтИспПереопределяемый.ПолучитьМассивТиповПредметов(); + + Для каждого ЭлементМассива Из МассивТиповПредметов Цикл + + Если ТипЗнч(ОбъектСсылка) = Тип(ЭлементМассива) Тогда + + Возврат Истина; + + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; + +КонецФункции + + +//////////////////////////////////////////////////////////////////////////////// +// Прочее + // Получает расширение для переданного имени файла. // // Параметры @@ -70,9 +129,9 @@ // // Параметры // ПолноеИмяФайла - Строка - полное имя файла, из которого будут получены имя каталога и имя файла. -// ИмяКаталога - Строка - в данную переменную будет помещено полученное имя каталога. -// ИмяФайла - Строка - в данную переменную будет помещено полученное имя файла. -// +// ИмяКаталога - Строка - в данную переменную будет помещено полученное имя каталога. +// ИмяФайла - Строка - в данную переменную будет помещено полученное имя файла. +// Процедура ПолучитьКаталогИИмяФайла(Знач ПолноеИмяФайла, ИмяКаталога, ИмяФайла) Экспорт ИмяФайла = ПолноеИмяФайла; @@ -80,34 +139,18 @@ Пока Истина Цикл - Поз = Макс(Найти(ИмяФайла, "\"), Найти(ИмяФайла, "/")); - Если Поз = 0 Тогда + Позиция = Макс(Найти(ИмяФайла, "\"), Найти(ИмяФайла, "/")); + Если Позиция = 0 Тогда Возврат; КонецЕсли; - ИмяКаталога = ИмяКаталога + Лев(ИмяФайла, Поз); - ИмяФайла = Сред(ИмяФайла, Поз+1); + ИмяКаталога = ИмяКаталога + Лев(ИмяФайла, Позиция); + ИмяФайла = Сред(ИмяФайла, Позиция+1); КонецЦикла; КонецПроцедуры -// Определяет, является ли переданная в функцию ссылка контактом. -// -// Параметры -// ОбъектСсылка - Ссылка - для которой выполняется проверка. -// -// Возвращаемое значение: -// Булево - истина, если является контактом, ложь в обратном случае. -// -Функция ЯвляетсяКонтактом(ОбъектСсылка) Экспорт - - ОписаниеТиповВозможныхКонтактов = Новый ОписаниеТипов(ПолучитьМассивВозможныхТиповКонтактов()); - - Возврат ОписаниеТиповВозможныхКонтактов.СодержитТип(ТипЗнч(ОбъектСсылка)); - -КонецФункции - // Получает массив описания возможных контактов и формирует из него массив типов. // // Возвращаемое значение: @@ -143,7 +186,7 @@ // ИскатьПоДомену - Булево - признак того, что по данному типу контакта будет осуществляться поиск по домену. // Связь - Строка - описывает возможную связь данного контакта с другим контактом, в случае когда текущий контакт // является реквизитом другого контакта. Описывается следующей строкой "ИмяТаблицы.ИмяРеквизита" -// +// Процедура ДобавитьЭлементМассиваОписанияВозможныхТиповКонтактов( МассивОписания, Тип, @@ -177,7 +220,7 @@ // Возвращаемое значение: // Массив - массив структур, в котором описываются возможные типы контактов. // Каждая структура содержит описание одного типа контактов. -// Описание полей структуры см. в комментарии к функции +// Описание полей структуры см. в комментарии к функции // ДобавитьЭлементМассиваОписанияВозможныхТиповКонтактов общего модуля // ВзаимодействияКлиентСервер. // @@ -193,33 +236,6 @@ КонецФункции // ПолучитьСтруктуруВозможныеКонтакты() -// Проверяет, является ли переданная ссылка предметом взаимодействий. -// -// Параметры -// ОбъектСсылка - Ссылка - ссылка, для которой выполняется проверка, -// является ли она ссылкой на предмет взаимодействий. -// -// Возвращаемое значение: -// Булево - Истина если является, Ложь в обратном случае. -// -Функция ЯвляетсяПредметом(ОбъектСсылка) Экспорт - - МассивТиповПредметов = ВзаимодействияКлиентСерверПовтИспПереопределяемый.ПолучитьМассивТиповПредметов(); - - Для каждого ЭлементМассива Из МассивТиповПредметов Цикл - - Если ТипЗнч(ОбъектСсылка) = Тип(ЭлементМассива) Тогда - - Возврат Истина; - - КонецЕсли; - - КонецЦикла; - - Возврат Ложь; - -КонецФункции - // Проверяет заполнение контактов в документе взаимодействий и обновляет форму документа взаимодействий// // Параметры // Объект - ДокументОбъект - документ взаимодействий, для которой выполняется проверка @@ -281,13 +297,20 @@ //установить отборы для режима Если Форма[ИмяОтбора] = "КРассмотрению" Тогда + + #Если Сервер Или ВнешнееСоединение Тогда + ДатаДляОтбора = ТекущаяДатаСеанса(); + #Иначе + ДатаДляОтбора = ОбщегоНазначенияКлиент.ДатаСеанса(); + #КонецЕсли ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Отбор, "Рассмотрено", Ложь,,, Истина); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( - Отбор, "РассмотретьПосле", ТекущаяДата(), ВидСравненияКомпоновкиДанных.МеньшеИлиРавно,, Истина); + Отбор, "РассмотретьПосле", ДатаДляОтбора, ВидСравненияКомпоновкиДанных.МеньшеИлиРавно,, Истина); + ИначеЕсли Форма[ИмяОтбора] = "Отложенные" Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Отбор, "Рассмотрено", Ложь,,, Истина); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( - Отбор, "РассмотретьПосле", , ВидСравненияКомпоновкиДанных.Заполнено,, Истина); + Отбор, "РассмотретьПосле", , ВидСравненияКомпоновкиДанных.Заполнено,, Истина); ИначеЕсли Форма[ИмяОтбора] = "Рассмотренные" Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Отбор, "Рассмотрено", Истина,,, Истина); КонецЕсли; @@ -435,9 +458,9 @@ Функция ПолучитьПредставлениеСпискаАдресатов(ТаблицаАдресатов, ВключатьИмяКонтакта = Истина) Экспорт Представление = ""; - Для Каждого Стр Из ТаблицаАдресатов Цикл + Для Каждого СтрокаТаблицы Из ТаблицаАдресатов Цикл Представление = Представление + - ПолучитьПредставлениеАдресата(Стр.Представление, Стр.Адрес, ?(ВключатьИмяКонтакта, Стр.Контакт, "")) + "; "; + ПолучитьПредставлениеАдресата(СтрокаТаблицы.Представление, СтрокаТаблицы.Адрес, ?(ВключатьИмяКонтакта, СтрокаТаблицы.Контакт, "")) + "; "; КонецЦикла; Возврат Представление; @@ -455,14 +478,14 @@ // Функция КонтактыЗаполнены(ВзаимодействиеОбъект,ВидДокумента) - МассивТЧ = Новый Массив; + МассивТабличныхЧастей = Новый Массив; Если ВидДокумента = "ЭлектронноеПисьмоИсходящее" Тогда - МассивТЧ.Добавить("ПолучателиПисьма"); - МассивТЧ.Добавить("ПолучателиКопий"); - МассивТЧ.Добавить("ПолучателиОтвета"); - МассивТЧ.Добавить("ПолучателиСкрытыхКопий"); + МассивТабличныхЧастей.Добавить("ПолучателиПисьма"); + МассивТабличныхЧастей.Добавить("ПолучателиКопий"); + МассивТабличныхЧастей.Добавить("ПолучателиОтвета"); + МассивТабличныхЧастей.Добавить("ПолучателиСкрытыхКопий"); ИначеЕсли ВидДокумента = "ЭлектронноеПисьмоВходящее" Тогда @@ -470,13 +493,13 @@ Возврат Ложь; КонецЕсли; - МассивТЧ.Добавить("ПолучателиПисьма"); - МассивТЧ.Добавить("ПолучателиКопий"); - МассивТЧ.Добавить("ПолучателиОтвета"); + МассивТабличныхЧастей.Добавить("ПолучателиПисьма"); + МассивТабличныхЧастей.Добавить("ПолучателиКопий"); + МассивТабличныхЧастей.Добавить("ПолучателиОтвета"); ИначеЕсли ВидДокумента = "Встреча" ИЛИ ВидДокумента = "ЗапланированноеВзаимодействие" Тогда - МассивТЧ.Добавить("Участники"); + МассивТабличныхЧастей.Добавить("Участники"); ИначеЕсли ВидДокумента = "ТелефонныйЗвонок" Тогда @@ -486,10 +509,10 @@ КонецЕсли; - Для каждого ИмяТЧ Из МассивТЧ Цикл - Для каждого СтрокаТЧ Из ВзаимодействиеОбъект[ИмяТч] Цикл + Для каждого ИмяТабличнойЧасти Из МассивТабличныхЧастей Цикл + Для каждого СтрокаТабличнойЧасти Из ВзаимодействиеОбъект[ИмяТабличнойЧасти] Цикл - Если НЕ ЗначениеЗаполнено(СтрокаТЧ.Контакт) Тогда + Если НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.Контакт) Тогда Возврат Ложь; КонецЕсли; diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСерверПовтИспПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСерверПовтИспПереопределяемый/Module.bsl index 3708a69ef..90be281fc 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСерверПовтИспПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСерверПовтИспПереопределяемый/Module.bsl @@ -1,4 +1,12 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Взаимодействия" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // В данной функции при необходимости формируется массив строковых представлений предметов взаимодействий // Используется, если в конфигурации определен хотя бы один предмет взаимодействий. // diff --git a/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl index 99f677df9..7be9fb8b0 100644 --- a/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияПереопределяемый/Module.bsl @@ -1,3 +1,12 @@ + +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Взаимодействия" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + //Возвращает текст запроса, отбирающего контакты (участников) предмета взаимодействия. //Используется, если в конфигурации определен хотя бы один предмет взаимодействий. // diff --git a/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl b/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl index 05a6be0a8..475767f71 100644 --- a/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияСобытия/Module.bsl @@ -1,4 +1,12 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Взаимодействия" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + //Обработчик события при записи учетной записи электронной почты Процедура ПриЗаписиУчетнойЗаписиЭлектроннойПочты(Источник, Отказ) Экспорт diff --git a/SSL/src/CommonModules/ВнешниеЗадачиВызовСервера/Module.bsl b/SSL/src/CommonModules/ВнешниеЗадачиВызовСервера/Module.bsl index e8b2bcdc5..638b1ffee 100644 --- a/SSL/src/CommonModules/ВнешниеЗадачиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеЗадачиВызовСервера/Module.bsl @@ -1,22 +1,27 @@ // Возвращает содержание переданного объекта // Параметры -// Объект - объект, представление которого надо сформировать -// Возвращает содержание в виде HTML или MXL документа -Функция ПолучитьСодержание(Объект) Экспорт +// ПредметЗадачи - объект, представление которого надо сформировать +// Возвращаемое значение: +// Строка или MXL документ - содержание в виде HTML или MXL документа +Функция ПолучитьПредставлениеПредметаВнешнейЗадачи(ПредметЗадачи) Экспорт - Если Объект = Неопределено Или Объект.Пустая() Тогда + Если ПредметЗадачи = Неопределено Или ПредметЗадачи.Пустая() Тогда Возврат ""; КонецЕсли; - Строка = ""; - ВнешниеЗадачиВызовСервераПереопределяемый.ПолучитьСодержание(Объект, Строка); + Представление = ""; + ВнешниеЗадачиВызовСервераПереопределяемый.ПолучитьПредставлениеПредметаВнешнейЗадачи(ПредметЗадачи, Представление); - Возврат Строка; + Возврат Представление; КонецФункции // Возвращает массив объектов типа ОписаниеПередаваемогоФайла +// Параметры +// Источник - объект информационной базы // или Неопределено +// Возвращаемое значение: +// Массив - массив ссылок на Файлы Функция ПолучитьСписокФайлов(Источник) Экспорт МассивФайлов = Новый Массив; @@ -26,6 +31,10 @@ КонецФункции // Возвращает Истина, если задача является внешней +// Параметры +// ЗадачаСсылка - задача +// Возвращаемое значение: +// Булево - Истина, если задача является внешней Функция ЭтоВнешняяЗадача(ЗадачаСсылка) Экспорт ВнешняяЗадача = ВнешниеЗадачиВызовСервераПереопределяемый.ЭтоВнешняяЗадача(ЗадачаСсылка); @@ -62,6 +71,9 @@ // Создает и стартует внешний бизнес-процесс Задание // при записи задачи другого бизнес-процесса, если эта задача // является внешней +// Параметры +// Источник - объект информационной базы +// Отказ - Булево - Признак отказа от записи задачи Процедура СтартВнешнегоЗаданияПриЗаписиЗадач(Источник, Отказ) Экспорт Если Источник.ОбменДанными.Загрузка Тогда @@ -82,6 +94,9 @@ КонецПроцедуры +// Стартует внешний бизнес-процесс Задание по переданной задаче +// Параметры +// Задача - ЗадачаСсылка.ЗадачаИсполнителя Процедура СтартоватьВнешнийБизнесПроцесс(Задача) Если ВнешниеЗадачиВызовСервераПереопределяемый.СтартоватьВнешнийБизнесПроцесс(Задача) Тогда @@ -105,6 +120,8 @@ КонецПроцедуры // Помечает задачу-источник как выполненную +// Параметры +// БизнесПроцесс - тип БизнесПроцессСсылка Процедура ВыполнитьЗадачуИсточник(БизнесПроцесс) Экспорт Если ВнешниеЗадачиВызовСервераПереопределяемый.ВыполнитьЗадачуИсточник(БизнесПроцесс) Тогда @@ -121,6 +138,9 @@ // Сохраняет сведения о записи новой задачи для последующей обработки // в обработчике перед записью +// Параметры +// Источник - объект информационной базы +// Отказ - Булево - Признак отказа от записи задачи Процедура СтартВнешнегоЗаданияПередЗаписьюЗадач(Источник, Отказ) Экспорт Если Источник.ОбменДанными.Загрузка Тогда diff --git a/SSL/src/CommonModules/ВнешниеЗадачиВызовСервераПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВнешниеЗадачиВызовСервераПереопределяемый/Module.bsl index ccd35ac96..369568fda 100644 --- a/SSL/src/CommonModules/ВнешниеЗадачиВызовСервераПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеЗадачиВызовСервераПереопределяемый/Module.bsl @@ -1,28 +1,32 @@ -// Возвращает массив ссылок на файлы -// или Неопределено +// Формирует массив ссылок на файлы +// Параметры +// Объект - объект информационной базы +// МассивФайлов - Массив ссылок на справочник Файлы Процедура ПолучитьСписокФайлов(Объект, МассивФайлов) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиВызовСервера.ПолучитьПрикрепленныеФайлыКОбъекту(Объект, МассивФайлов); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы ПрисоединенныеФайлы.ПолучитьПрикрепленныеФайлыКОбъекту(Объект, МассивФайлов); - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы КонецПроцедуры -// Возвращает содержание переданного объекта +// Формирует представление переданного объекта // Параметры -// Объект - объект, представление которого надо сформировать -// Возвращает содержание в виде HTML или MXL документа -Процедура ПолучитьСодержание(Объект, Строка) Экспорт +// ПредметЗадачи - объект, представление которого надо сформировать +// Представление - Строка с HTML текстом или MXL документ +Процедура ПолучитьПредставлениеПредметаВнешнейЗадачи(ПредметЗадачи, Представление) Экспорт КонецПроцедуры // Создает и стартует внешний бизнес-процесс по указанной задаче +// Параметры +// Задача - ЗадачаСсылка.ЗадачаИсполнителя Функция СтартоватьВнешнийБизнесПроцесс(Задача) Экспорт // Следует переопределить эту функцию, если в качестве внешнего @@ -33,6 +37,10 @@ КонецФункции // Помечает задачу-источник указанного бизнес-процесса как выполненную +// Параметры +// БизнесПроцесс - тип БизнесПроцессСсылка +// Возвращаемое значение: +// Булево - Если задача выполнена успешно, возвращает Истина, иначе Ложь Функция ВыполнитьЗадачуИсточник(БизнесПроцесс) Экспорт Возврат Ложь; @@ -42,6 +50,11 @@ // Проверяет является ли задача внешней // Если проверка выполнена, то возвращает Истина или Ложь // Иначе возвращает Неопределено +// Параметры +// Задача - ЗадачаСсылка.ЗадачаИсполнителя +// +// Возвращаемое значение: +// Булево - Если проверка выполнена, то возвращает Истина или Ложь, Иначе возвращает Неопределено Функция ЭтоВнешняяЗадача(ЗадачаСсылка) Экспорт Возврат Неопределено; diff --git a/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl b/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl index f37445c0c..59bb5fa78 100644 --- a/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl @@ -1,10 +1,13 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Пользователи". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции прикладного разработчика -// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Функция ИспользоватьВнешнихПользователей() возвращает -// значение функциональной опции ИспользоватьВнешнихПользователей. +// Возвращает признак использования внешних пользователей в программе. +// (значение функциональной опции ИспользоватьВнешнихПользователей). // // Возвращаемое значение: // Булево. @@ -15,7 +18,12 @@ КонецФункции -// Получает значение параметра сеанса "Текущий внешний пользователь" +// Возвращает текущего внешнего пользователя, +// соответствующего пользователю информационной базы, +// который авторизовался в 1С:Предприятии 8. +// +// Если авторизованному пользователю информационной базы +// соответствует обычный пользователь, тогда возвращается пустая ссылка. // // Возвращаемое значение: // СправочникСсылка.ВнешниеПользователи @@ -28,10 +36,9 @@ КонецФункции -// Функция ПолучитьОбъектАвторизацииВнешнегоПользователя возвращает объект -// авторизации внешнего пользователя, полученный из информационной базы. -// ОбъектАвторизации - это ссылка на объект информационной базы, используемый -// для связи с внешним пользователем, например, контрагенты, физические лица и т.д. +// Возвращает ссылку на объект авторизации внешнего пользователя, полученный из информационной базы. +// Объект авторизации - это ссылка на объект информационной базы, используемый +// для связи с внешним пользователем, например, контрагент, физическое лицо и т.д. // // Параметры // ВнешнийПользователь - СправочникСсылка.ВнешниеПользователи @@ -41,20 +48,37 @@ // Функция ПолучитьОбъектАвторизацииВнешнегоПользователя(ВнешнийПользователь) Экспорт - Возврат ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ВнешнийПользователь, "ОбъектАвторизации").ОбъектАвторизации; + ОбъектАвторизации = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ВнешнийПользователь, "ОбъектАвторизации").ОбъектАвторизации; + + Если ЗначениеЗаполнено(ОбъектАвторизации) Тогда + Если ОбъектАвторизацииИспользуется(ОбъектАвторизации, ВнешнийПользователь) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка в базе данных: + |Объект авторизации ""%1"" (%2) + |установлен для нескольких внешних пользователей.'"), + ОбъектАвторизации, + ТипЗнч(ОбъектАвторизации)); + КонецЕсли; + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка в базе данных: + |Для внешнего пользователя ""%1"" не задан объект авторизации.'"), + ВнешнийПользователь); + КонецЕсли; + + Возврат ОбъектАвторизации; КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Внутренние процедуры и функции -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Процедура ОбновитьСоставГруппВнешнихПользователей обновляет в регистре сведений -// "Состав групп пользователей" соответствие групп внешних пользователей и внешних пользователей -// с учетом иерархии групп внешних пользователей (родитель включает внешних пользователей порожденных групп). -// Эти данные требуются для формы списка и формы выбора внешних пользователей. -// Данные регистра могут быть применены в других целях для повышения производительности, -// т.к. не требуется работать с иерархией на языке запросов. +// Обновляет соответствие групп внешних пользователей и внешних пользователей +// с учетом иерархии групп внешних пользователей (группа-родитель включает +// пользователей порожденных групп). +// Данные используеются в форме списка и форме выбора внешних пользователей. +// Данные могут быть использованы в целях для повышения производительности, +// так как не требуется работать с иерархией на языке запросов. // // Параметры: // ГруппаВнешнихПользователей - СправочникСсылка.ГруппыВнешнихПользователей @@ -196,14 +220,17 @@ КонецПроцедуры -// Процедура ОбновитьРолиВнешнихПользователей обновляет список ролей пользователей -// информационной базы по их текущим принадлежностям к группам внешних пользователей. +// Обновляет список ролей пользователей информационной базы, которые соответствуют +// внешним пользователям. Состав ролей вычисляется исходя из вхождения внешних +// пользователей в группы внешних пользователей, кроме тех внешних пользователей, +// для которых роли установлены непосредственно. +// Требуется только при разрешении редактирования ролей, например, если +// встроена подсистема Управление доступом, то эта процедура не требуется. // // Параметры: // МассивВнешнихПользователей - Массив элементов СправочникСсылка.ВнешниеПользователи. -// ЕстьОшибки - Булево. Возвращает истина, когда были ошибки, записанные в журнал регистрации. // -Процедура ОбновитьРолиВнешнихПользователей(Знач МассивВнешнихПользователей, ЕстьОшибки = Ложь) Экспорт +Процедура ОбновитьРолиВнешнихПользователей(Знач МассивВнешнихПользователей) Экспорт Если ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда // Роли устанавливаются другим механизмом, например, механизмом подсистемы УправлениеДоступом. @@ -216,6 +243,8 @@ УстановитьПривилегированныйРежим(Истина); + Пользователи.НайтиНеоднозначныхПользователейИБ(); + ИдентификаторыПользователейИБ = Новый Соответствие; Запрос = Новый Запрос( "ВЫБРАТЬ @@ -351,10 +380,9 @@ Строка(Выборка.ГруппаВнешнихПользователей)); ЗаписьЖурналаРегистрации(НСтр("ru = 'Внешние пользователи.Роль не найдена в метаданных'"), УровеньЖурналаРегистрации.Ошибка,,, ТекстСообщения, РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - ЕстьОшибки = Истина; КонецЦикла; - // Обновление ролей пользователейИБ. + // Обновление ролей пользователей ИБ. Запрос.Текст = "ВЫБРАТЬ | ИзмененныеВнешниеПользователиИРоли.ВнешнийПользователь, @@ -395,7 +423,7 @@ Пока Выборка.Следующий() Цикл Если ЗначениеЗаполнено(Выборка.Роль) Тогда ПользовательИБ.Роли.Добавить(Метаданные.Роли[Выборка.Роль]); - Продолжить; + Продолжить; КонецЕсли; Если ПользовательИБ <> Неопределено Тогда ПользовательИБ.Записать(); @@ -409,8 +437,8 @@ КонецПроцедуры -// Функция ОбъектАвторизацииИспользуется проверяет, что объект информационной базы, -// используется в качестве объекта авторизации внешнего пользователя, кроме текущего (если задан). +// Проверяет, что объект информационной базы используется в качестве объекта авторизации +// какого-нибудь внешнего пользователя, кроме заданного внешнего пользователя (если задан). // Функция ОбъектАвторизацииИспользуется(Знач СсылкаНаОбъектАвторизации, Знач СсылкаНаТекущегоВнешнегоПользователя = Неопределено, @@ -441,7 +469,7 @@ КонецФункции -// Обработчик подписки на событие ОбновитьПредставлениеВнешнегоПользователя +// Обновляет представление внешнего пользователя при изменении представления его объекта авторизации. Процедура ОбновитьПредставлениеВнешнегоПользователя(СсылкаНаОбъектАвторизации) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -467,10 +495,8 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// Обработчики обновления при переходе на новую версию конфигурации БСП -// +// Обновление информационной базы // Обработчик обновления при переходе на версию конфигурации 1.0.6.5 // для обновления записей регистра сведений СоставыГруппПользователей. diff --git a/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанных/Module.bsl b/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанных/Module.bsl new file mode 100644 index 000000000..38503d419 --- /dev/null +++ b/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанных/Module.bsl @@ -0,0 +1,1677 @@ +//////////////////////////////////////////////////////////////////////////////// +// ВыгрузкаЗагрузкаДанных: Экспорт области данных в файл/Импорт области данных из файла. +// Доступно только администратору ИБ/Области данных. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Выгружает данные текущей области данных в zip архив с XML файлами. +// +// Параметры: +// БезДеленияПоФайлам - Булево - Истина - выгружать все данные в один файл, +// Ложь - отдельно выгружать данные требующие замены ссылок при загрузке. +// СохранятьПаролиПользователей - Булево - выгружать вместе с пользователями +// сохраняемые значения паролей. +// +// Возврвщаемое значение: +// Строка - полное имя файла с выгрузкой. +// +Функция ВыгрузитьТекущуюОбластьВАрхив(Знач БезДеленияПоФайлам = Ложь, Знач СохранятьПаролиПользователей = Ложь) Экспорт + + КаталогВыгрузки = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(КаталогВыгрузки); + + КаталогВыгрузки = КаталогВыгрузки + "/"; + + ЗаписатьИнформациюОВыгрузкеВXML(КаталогВыгрузки, БезДеленияПоФайлам); + + Если БезДеленияПоФайлам Тогда + ИмяФайлаВыгрузки = КаталогВыгрузки + "data_misc.xml"; + Запись = Новый ЗаписьXML; + Запись.ОткрытьФайл(ИмяФайлаВыгрузки); + Запись.ЗаписатьОбъявлениеXML(); + ЗаписатьДанныеОбластиВXML(Запись, Истина); + Запись.Закрыть(); + Иначе + ЗаписатьДанныеВXMLСУказаниемТипов(КаталогВыгрузки, ПолучитьМассивТиповПоставляемыхСправочников()); + КонецЕсли; + + ЗаписатьПользователейВXML(КаталогВыгрузки, СохранятьПаролиПользователей); + + ВыгрузкаЗагрузкаДанныхПереопределяемый.ПередЗавершениемВыгрузки(КаталогВыгрузки); + + ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); + + Архиватор = Новый ЗаписьZipФайла(ИмяАрхива, , , , УровеньСжатияZIP.Максимальный); + Архиватор.Добавить(КаталогВыгрузки + "*"); + Архиватор.Записать(); + + Попытка + УдалитьФайлы(КаталогВыгрузки); + Исключение + + КонецПопытки; + + Возврат ИмяАрхива; + +КонецФункции + +// Загружает данные текущей области данных из zip архива с XML файлами. +// +// Параметры: +// ИмяАрхива - Строка - полное имя файла архива с данными +// БезДеленияПоФайлам - Булево - Истина - все данные в архиве содержаться в одном файла, +// Ложь - в архиве отдельно выделены данные требующие замены ссылок при загрузке. +// ЗагружатьПользователей - Булево - загружать информацию о пользователях ИБ +// РежимОтладки - Булево - Истина - при возникновении ошибки десериализации, выводить +// в журнал регистрации фрагмент XML, на котором произошла ошибка. Замедляет загрузку. +// +Процедура ЗагрузитьТекущуюОбластьИзАрхива(Знач ИмяАрхива, Знач БезДеленияПоФайлам = Ложь, Знач ЗагружатьПользователей = Ложь, Знач РежимОтладки = Ложь) Экспорт + + КаталогВыгрузки = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(КаталогВыгрузки); + + КаталогВыгрузки = КаталогВыгрузки + "/"; + + Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); + Разархиватор.ИзвлечьВсе(КаталогВыгрузки, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); + + Если БезДеленияПоФайлам Тогда + ЗагрузитьДанныеЧерезXDTOСериализатор(КаталогВыгрузки, , РежимОтладки); + Иначе + СтандартныеПодсистемыПереопределяемый.СоздатьУзелОбластиДанных(ОбщегоНазначения.ЗначениеРазделителяСеанса()); + + ЗагрузитьДанныеСПодменойСсылок(КаталогВыгрузки, РежимОтладки); + КонецЕсли; + + СтандартныеПодсистемыПереопределяемый.ПослеЗагрузкиДанныхИзДругойМодели(); + + Если ЗагружатьПользователей Тогда + СоответствиеИдентификаторов = СоздатьПользователейИзXML(КаталогВыгрузки); + ОбработатьПользователейПослеЗагрузкиИзДругойМодели(СоответствиеИдентификаторов); + КонецЕсли; + + Попытка + УдалитьФайлы(КаталогВыгрузки); + Исключение + + КонецПопытки; + +КонецПроцедуры + +// Записывает данные области данных в переданный объект ЗаписьXML. +// +// Параметры: +// Запись - ЗаписьXML, ЗаписьFastInfoSet - инициализированный объект для записи XML. +// ВыгружатьОбщиеПоставляемыеДанные - Булево - выгружать общие данные, являющиеся +// общими поставляемые данными. +// +Процедура ЗаписатьДанныеОбластиВXML(Знач Запись, Знач ВыгружатьОбщиеПоставляемыеДанные = Ложь) Экспорт + + НевыгружаемыеТипы = Новый Массив; + СтандартныеПодсистемыПереопределяемый.ПолучитьНевыгружаемыеИзИнформационнойБазыТипы(НевыгружаемыеТипы); + + ИменаНевыгружаемыхТипов = Новый Соответствие; + Для каждого Тип Из НевыгружаемыеТипы Цикл + ИменаНевыгружаемыхТипов.Вставить(Метаданные.НайтиПоТипу(Тип), Истина); + КонецЦикла; + ИменаНевыгружаемыхТипов = Новый ФиксированноеСоответствие(ИменаНевыгружаемыхТипов); + + ИменаВыгружаемыхОбщихДанных = Новый Соответствие; + Если ВыгружатьОбщиеПоставляемыеДанные Тогда + + Для каждого СтрокаСоответствия Из ОбщегоНазначения.ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим() Цикл + Если СтрокаСоответствия.ТипРазделенныхДанных <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ПолноеИмяОбщихДанных = Метаданные.НайтиПоТипу(СтрокаСоответствия.ТипОбщихДанных); + Если ИменаНевыгружаемыхТипов.Получить(ПолноеИмяОбщихДанных) = Неопределено Тогда + ИменаВыгружаемыхОбщихДанных.Вставить(ПолноеИмяОбщихДанных, Истина); + КонецЕсли; + КонецЦикла; + КонецЕсли; + ИменаВыгружаемыхОбщихДанных = Новый ФиксированноеСоответствие(ИменаВыгружаемыхОбщихДанных); + + Запись.ЗаписатьНачалоЭлемента("Data"); + Запись.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema"); + Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); + Запись.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data"); + + МДОбщегоРеквизита = Метаданные.ОбщиеРеквизиты.ОбластьДанных; + + // Переберем все метаданные + + // 1) Константы + Для каждого МетаданныеКонстанты Из Метаданные.Константы Цикл + ПолноеИмяОбъектаМД = МетаданныеКонстанты.ПолноеИмя(); + + Если ИменаНевыгружаемыхТипов.Получить(ПолноеИмяОбъектаМД) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МетаданныеКонстанты) Тогда + Если ИменаВыгружаемыхОбщихДанных.Получить(ПолноеИмяОбъектаМД) = Неопределено Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + МенеджерЗначения = Константы[МетаданныеКонстанты.Имя].СоздатьМенеджерЗначения(); + МенеджерЗначения.Прочитать(); + Попытка + ВыгрузкаЗагрузкаДанныхПереопределяемый.ПередВыгрузкойДанных(МенеджерЗначения); + ЗаписатьXML(Запись, МенеджерЗначения); + Исключение + ВызватьИсключениеСУточняющимТекстом(Константы[МетаданныеКонстанты.Имя], ИнформацияОбОшибке()); + КонецПопытки; + КонецЦикла; + + // 2) Независимые регистры сведений + Для каждого МДРегистра Из Метаданные.РегистрыСведений Цикл + ПолноеИмяОбъектаМД = МДРегистра.ПолноеИмя(); + + Если ИменаНевыгружаемыхТипов.Получить(ПолноеИмяОбъектаМД) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МДРегистра) Тогда + Если ИменаВыгружаемыхОбщихДанных.Получить(ПолноеИмяОбъектаМД) = Неопределено Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Если МДРегистра.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда + + Продолжить; + КонецЕсли; + + МенеджерТипа = РегистрыСведений[МДРегистра.Имя]; + + НаборЗаписей = МенеджерТипа.СоздатьНаборЗаписей(); + НаборЗаписей.Прочитать(); + Попытка + ВыгрузкаЗагрузкаДанныхПереопределяемый.ПередВыгрузкойДанных(НаборЗаписей); + ЗаписатьXML(Запись, НаборЗаписей); + Исключение + ВызватьИсключениеСУточняющимТекстом(МенеджерТипа, ИнформацияОбОшибке()); + КонецПопытки; + КонецЦикла; + + // 3) Ссылочные типы + + ВидыОбъектов = Новый Массив; + ВидыОбъектов.Добавить("Справочники"); + ВидыОбъектов.Добавить("Документы"); + ВидыОбъектов.Добавить("ПланыВидовХарактеристик"); + ВидыОбъектов.Добавить("ПланыСчетов"); + ВидыОбъектов.Добавить("ПланыВидовРасчета"); + ВидыОбъектов.Добавить("БизнесПроцессы"); + ВидыОбъектов.Добавить("Задачи"); + + Для каждого ВидОбъекта Из ВидыОбъектов Цикл + МетаданныеКоллекция = Метаданные[ВидОбъекта]; + Для каждого МДОбъекта Из МетаданныеКоллекция Цикл + ПолноеИмяОбъектаМД = МДОбъекта.ПолноеИмя(); + + Если ИменаНевыгружаемыхТипов.Получить(ПолноеИмяОбъектаМД) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МДОбъекта) Тогда + Если ИменаВыгружаемыхОбщихДанных.Получить(ПолноеИмяОбъектаМД) = Неопределено Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | _XMLВыгрузка_Таблица.Ссылка КАК Ссылка + |ИЗ + | " + ПолноеИмяОбъектаМД + " КАК _XMLВыгрузка_Таблица"; + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Попытка + ВыгрузкаЗагрузкаДанныхПереопределяемый.ПередВыгрузкойДанных(Объект); + ЗаписатьXML(Запись, Объект); + Исключение + ВызватьИсключениеСУточняющимТекстом(ПолноеИмяОбъектаМД, ИнформацияОбОшибке(), "Ссылка: " + Выборка.Ссылка); + КонецПопытки; + КонецЦикла; + КонецЦикла; + КонецЦикла; + + // 4) Регистры кроме независимых регистров сведений и последовательности + ВидыТаблиц = Новый Массив; + ВидыТаблиц.Добавить("РегистрыНакопления"); + ВидыТаблиц.Добавить("РегистрыРасчета"); + ВидыТаблиц.Добавить("РегистрыБухгалтерии"); + ВидыТаблиц.Добавить("РегистрыСведений"); + ВидыТаблиц.Добавить("Последовательности"); + Для каждого ВидТаблицы Из ВидыТаблиц Цикл + МетаданныеКоллекция = Метаданные[ВидТаблицы]; + МенеджерВида = Вычислить(ВидТаблицы); + Для каждого МДРегистра Из МетаданныеКоллекция Цикл + ПолноеИмяОбъектаМД = МДРегистра.ПолноеИмя(); + + Если ИменаНевыгружаемыхТипов.Получить(ПолноеИмяОбъектаМД) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МДРегистра) Тогда + Если ИменаВыгружаемыхОбщихДанных.Получить(ПолноеИмяОбъектаМД) = Неопределено Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Если ВидТаблицы = "РегистрыСведений" + И МДРегистра.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда + + Продолжить; + КонецЕсли; + + МенеджерТипа = МенеджерВида[МДРегистра.Имя]; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | _XMLВыгрузка_Таблица.Регистратор КАК Регистратор + |ИЗ + | " + ПолноеИмяОбъектаМД + " КАК _XMLВыгрузка_Таблица"; + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + НаборЗаписей = МенеджерТипа.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор); + НаборЗаписей.Прочитать(); + Попытка + ВыгрузкаЗагрузкаДанныхПереопределяемый.ПередВыгрузкойДанных(НаборЗаписей); + ЗаписатьXML(Запись, НаборЗаписей); + Исключение + ВызватьИсключениеСУточняющимТекстом(МенеджерТипа, ИнформацияОбОшибке(), "Регистратор: " + Выборка.Регистратор); + КонецПопытки; + КонецЦикла; + КонецЦикла; + КонецЦикла; + + Запись.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +// Считывает данные из переданного объект ЧтениеXML и записывает их +// в ИБ. +// +// Параметры: +// Чтение - ЧтениеXML, ЧтениеFatsInfoSet - инициализированный объект для чтения XML. +// +Процедура ПрочитатьДанныеОбластиИзXML(Знач Чтение) Экспорт + + Типы = Новый Массив; + СтандартныеПодсистемыПереопределяемый.ПолучитьНезагружаемыеВОбластиДанныхТипы(Типы); + РаботаВМоделиСервисаПереопределяемый.ПолучитьНезагружаемыеВОбластиДанныхТипы(Типы); + ИсключаемыеТипы = Новый Соответствие; + Для каждого Тип Из Типы Цикл + ИсключаемыеТипы.Вставить(Тип, Истина); + КонецЦикла; + + Пока Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл + Если НЕ ВозможностьЧтенияXML(Чтение) Тогда + ОшибкаОпределенияТипаПриЧтении(Чтение); + КонецЕсли; + + Данные = ПрочитатьXML(Чтение); + + Если ИсключаемыеТипы.Получить(ТипЗнч(Данные)) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Данные.ДополнительныеСвойства.Вставить("НеПроверятьДатыЗапретаИзмененияДанных", Истина); + Данные.ОбменДанными.Загрузка = Истина; + Данные.Записать(); + КонецЦикла; + +КонецПроцедуры + +// Выгружает данные текущей области данных во временное хранилище по переданному адресу +// +// Параметры: +// АдресХранилища - Строка - адрес временного хранилища в которое нужно поместить данные. +// +Процедура ВыгрузитьТекущуюОбластьВоВременноеХранилище(Знач АдресХранилища) Экспорт + + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда + + ВызватьИсключение(НСтр("ru = 'Операция может быть выполнена только администратором области данных.'")); + + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ИмяАрхива = ВыгрузитьТекущуюОбластьВАрхив(); + + ДанныеВыгрузки = Новый ДвоичныеДанные(ИмяАрхива); + + ПоместитьВоВременноеХранилище(ДанныеВыгрузки, АдресХранилища); + + ДанныеВыгрузки = Неопределено; + Попытка + УдалитьФайлы(ИмяАрхива); + Исключение + // При неудаче система удалит временный файл автоматически + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецПроцедуры + +// Выгружает указанную область данных во временное хранилище по переданному адресу +// +// Параметры: +// ОбластьДанных - Число - значения разделителя области данных, которую требуется выгрузить. +// АдресХранилища - Строка - адрес временного хранилища в которое нужно поместить данные. +// +Процедура ВыгрузитьОбластьВоВременноеХранилище(Знач ОбластьДанных, Знач АдресХранилища) Экспорт + + Если НЕ ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() + ИЛИ НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + + ВызватьИсключение(НСтр("ru = 'Операция может быть выполнена только администратором информационной базы.'")); + КонецЕсли; + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОбластьДанных); + + ВыгрузитьТекущуюОбластьВоВременноеХранилище(АдресХранилища); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура ОшибкаОпределенияТипаПриЧтении(Знач Чтение) + + Запись = Новый ЗаписьXML; + Запись.УстановитьСтроку(); + Запись.ЗаписатьТекущий(Чтение); + ТекущийЭлемент = Запись.Закрыть(); + + ШаблонТекста = НСтр("ru = 'Ошибка при чтении XML. Не удалось определить тип данных на основе элемента: + |%1'"); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста, ТекущийЭлемент); + ВызватьИсключение(ТекстСообщения); + +КонецПроцедуры + +Функция ПолучитьФабрикуСУказаниемТипов(Знач Типы = Неопределено) + + ИмяФайлаСхемы = ПолучитьИмяВременногоФайла("xsd"); + + НаборСхем = ФабрикаXDTO.ЭкспортСхемыXML("http://v8.1c.ru/8.1/data/enterprise/current-config"); + Схема = НаборСхем[0]; + Схема.ОбновитьЭлементDOM(); + + ЗаписьDOM = Новый ЗаписьDOM; + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.ОткрытьФайл(ИмяФайлаСхемы); + + КорневойУзел = Схема.ДокументDOM.ДочерниеУзлы[0]; + + ИгнорироватьТипы = Новый Массив; + ИгнорироватьТипы.Добавить("AccountingRegisterExtDimensions"); + ИгнорироватьТипы.Добавить("CatalogTabularSectionRow"); + ИгнорироватьТипы.Добавить("ChartOfAccountsExtDimensionTypesRow"); + ИгнорироватьТипы.Добавить("LeadingCalculationTypesRow"); + ИгнорироватьТипы.Добавить("DocumentTabularSectionRow"); + ИгнорироватьТипы.Добавить("AccountingRegisterRecord"); + ИгнорироватьТипы.Добавить("AccumulationRegisterRecord"); + ИгнорироватьТипы.Добавить("InformationRegisterRecord"); + ИгнорироватьТипы.Добавить("EnumRef"); + + Если Типы = Неопределено Тогда + ТолькоУказанныеТипы = Ложь; + Иначе + ТолькоУказанныеТипы = Истина; + + УказанныеТипы = Новый Соответствие; + Для каждого Тип Из Типы Цикл + УказанныеТипы.Вставить(СериализаторXDTO.XMLТип(Тип).ИмяТипа, Истина); + КонецЦикла; + КонецЕсли; + + Для каждого Узел Из КорневойУзел.ДочерниеУзлы Цикл + ДобавитьТипККоду = Ложь; + + Если Узел.ЛокальноеИмя <> "complexType" Тогда + Продолжить; + КонецЕсли; + + Если Узел.ДочерниеУзлы.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + СодержимоеУзла = Узел.ДочерниеУзлы[0]; + + Если СодержимоеУзла.ЛокальноеИмя <> "sequence" Тогда + Продолжить; + КонецЕсли; + + Для каждого УзелПоля Из СодержимоеУзла.ДочерниеУзлы Цикл + Если УзелПоля.ЛокальноеИмя <> "element" Тогда + Продолжить; + КонецЕсли; + + АтрибутИмя = УзелПоля.Атрибуты.ПолучитьИменованныйЭлемент("name"); + Если ДобавитьТипККоду + И АтрибутИмя <> Неопределено И АтрибутИмя.ТекстовоеСодержимое = "Code" Тогда + УзелПоля.УстановитьАтрибут("nillable", "true"); + УзелПоля.УдалитьАтрибут("type"); + Продолжить; + КонецЕсли; + + АтрибутТип = УзелПоля.Атрибуты.ПолучитьИменованныйЭлемент("type"); + Если АтрибутТип <> Неопределено Тогда + Если Найти(АтрибутТип.ТекстовоеСодержимое, "tns:") = 1 Тогда + + ТипБезNSПрефикса = Сред(АтрибутТип.ТекстовоеСодержимое, СтрДлина("tns:") + 1); + + Если ТолькоУказанныеТипы Тогда + Если УказанныеТипы.Получить(ТипБезNSПрефикса) = Неопределено Тогда + Продолжить; + КонецЕсли; + Иначе + Пропустить = Ложь; + Для каждого ПрефиксТипа Из ИгнорироватьТипы Цикл + Если Найти(ТипБезNSПрефикса, ПрефиксТипа) = 1 Тогда + Пропустить = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если Пропустить Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Если АтрибутИмя <> Неопределено И АтрибутИмя.ТекстовоеСодержимое = "Ref" Тогда + ДобавитьТипККоду = Истина; + КонецЕсли; + + УзелПоля.УстановитьАтрибут("nillable", "true"); + УзелПоля.УдалитьАтрибут("type"); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + ЗаписьDOM.Записать(Схема.ДокументDOM, ЗаписьXML); + + ЗаписьXML.Закрыть(); + + Фабрика = СоздатьФабрикуXDTO(ИмяФайлаСхемы); + + Попытка + УдалитьФайлы(ИмяФайлаСхемы); + Исключение + + КонецПопытки; + + Возврат Фабрика; + +КонецФункции + +Процедура ЗаписатьПользователейВXML(КаталогВыгрузки, СохранятьПароли) + + Запись = Новый ЗаписьXML; + Запись.ОткрытьФайл(КаталогВыгрузки + "users.xml"); + Запись.ЗаписатьОбъявлениеXML(); + + Запись.ЗаписатьНачалоЭлемента("Users"); + Запись.ЗаписатьСоответствиеПространстваИмен("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(Запись, ЗаписатьПользователяВXDTO(Пользователь, СохранятьПароли)); + КонецЦикла; + + Запись.ЗаписатьКонецЭлемента(); + + Запись.Закрыть(); + +КонецПроцедуры + +Процедура ЗаписатьИнформациюОВыгрузкеВXML(КаталогВыгрузки, БезДеленияПоФайлам) + + Запись = Новый ЗаписьXML; + Запись.ОткрытьФайл(КаталогВыгрузки + "dumpinfo.xml"); + Запись.ЗаписатьОбъявлениеXML(); + + Запись.ЗаписатьНачалоЭлемента("Info"); + Запись.ЗаписатьСоответствиеПространстваИмен("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"); + + ТипDumpInfo = ФабрикаXDTO.Тип("http://v8.1c.ru/misc/datadump", "DumpInfo"); + ТипConfigurationInfo = ФабрикаXDTO.Тип("http://v8.1c.ru/misc/datadump", "ConfigurationInfo"); + + ИнформацияОВыгрузке = ФабрикаXDTO.Создать(ТипDumpInfo); + Если БезДеленияПоФайлам Тогда + ИнформацияОВыгрузке.Type = "ServiceToBox"; + Иначе + ИнформацияОВыгрузке.Type = "BoxToService"; + КонецЕсли; + ИнформацияОВыгрузке.Created = ТекущаяДата(); + + ИнформацияОКонфигурации = ФабрикаXDTO.Создать(ТипConfigurationInfo); + ИнформацияОКонфигурации.Name = Метаданные.Имя; + ИнформацияОКонфигурации.Version = Метаданные.Версия; + ИнформацияОКонфигурации.Presentation = Метаданные.Представление(); + + ИнформацияОВыгрузке.Configuration = ИнформацияОКонфигурации; + + ФабрикаXDTO.ЗаписатьXML(Запись, ИнформацияОВыгрузке); + + Запись.ЗаписатьКонецЭлемента(); + + Запись.Закрыть(); + +КонецПроцедуры + +Функция ПолучитьМассивТиповПоставляемыхСправочников() + + Типы = Новый Массив; + ТаблицаСоответствия = ОбщегоНазначения.ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(); + Для каждого СтрокаСоответствия Из ТаблицаСоответствия Цикл + Если НЕ Справочники.ТипВсеСсылки().СодержитТип(СтрокаСоответствия.ТипОбщихДанных) Тогда + Продолжить; + КонецЕсли; + + Если СтрокаСоответствия.ТипРазделенныхДанных = Неопределено Тогда + Тип = СтрокаСоответствия.ТипОбщихДанных; + Иначе + Тип = СтрокаСоответствия.ТипРазделенныхДанных; + КонецЕсли; + Типы.Добавить(Тип); + КонецЦикла; + + Возврат Типы; + +КонецФункции + +Функция ФорматНомеров(Знач Значение) + + Возврат Формат(Значение, "ЧЦ=4; ЧН=0000; ЧВН=; ЧГ="); + +КонецФункции + +Процедура ОткрытьЗаписьXML(ПараметрыЗаписи) + + ПараметрыЗаписи.Запись = Новый ЗаписьXML; + Если ПараметрыЗаписи.НомерЧасти = Неопределено Тогда + ПараметрыЗаписи.НомерЧасти = 1; + Иначе + ПараметрыЗаписи.НомерЧасти = ПараметрыЗаписи.НомерЧасти + 1; + КонецЕсли; + ПараметрыЗаписи.РазмерЧасти = 0; + + НомерЧастиСтрокой = ФорматНомеров(ПараметрыЗаписи.НомерЧасти); + ИмяФайлаВыгрузки = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПараметрыЗаписи.ШаблонИмени, НомерЧастиСтрокой); + + ПараметрыЗаписи.Запись.ОткрытьФайл(ИмяФайлаВыгрузки); + ПараметрыЗаписи.Запись.ЗаписатьОбъявлениеXML(); + + ПараметрыЗаписи.Запись.ЗаписатьНачалоЭлемента("DataDumpPart"); + ПараметрыЗаписи.Запись.ЗаписатьСоответствиеПространстваИмен("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"); + + ПараметрыЗаписи.Запись.ЗаписатьНачалоЭлемента("Data"); + +КонецПроцедуры + +Процедура ЗакрытьЗаписьXML(ПараметрыЗаписи, ЕстьПродолжение = Ложь) + + ПараметрыЗаписи.Запись.ЗаписатьКонецЭлемента(); + + ПараметрыЗаписи.Запись.ЗаписатьНачалоЭлемента("PartInfo"); + ПараметрыЗаписи.Запись.ЗаписатьАтрибут("LastPart", XMLСтрока(НЕ ЕстьПродолжение)); + ПараметрыЗаписи.Запись.ЗаписатьКонецЭлемента(); + + ПараметрыЗаписи.Запись.ЗаписатьКонецЭлемента(); + + ПараметрыЗаписи.Запись.Закрыть(); + +КонецПроцедуры + +Процедура ЗаписатьВXML(Значение, МетаданныеЗначения, Размер, Сериализатор, ПараметрыЗаписи_ЗаменяемыеТипы, + ПараметрыЗаписи_ПрочиеДанные, ИменаМетаданныхЗаменяемыхТипов, МаксимальныйРазмерЧасти) + + Если ИменаМетаданныхЗаменяемыхТипов.Получить(МетаданныеЗначения.ПолноеИмя()) = Неопределено Тогда + ПараметрыЗаписи = ПараметрыЗаписи_ПрочиеДанные; + Иначе + ПараметрыЗаписи = ПараметрыЗаписи_ЗаменяемыеТипы; + КонецЕсли; + + Если ПараметрыЗаписи.РазмерЧасти >= МаксимальныйРазмерЧасти Тогда + ЗакрытьЗаписьXML(ПараметрыЗаписи, Истина); + ОткрытьЗаписьXML(ПараметрыЗаписи); + КонецЕсли; + + ПараметрыЗаписи.РазмерЧасти = ПараметрыЗаписи.РазмерЧасти + Размер; + + ВыгрузкаЗагрузкаДанныхПереопределяемый.ПередВыгрузкойДанных(Значение); + Сериализатор.ЗаписатьXML(ПараметрыЗаписи.Запись, Значение); + +КонецПроцедуры + +Функция ОценитьРазмерОбъекта(МДОбъекта, Объект) + + Размер = 1; + Для каждого МДТабличнойЧасти Из МДОбъекта.ТабличныеЧасти Цикл + Размер = Размер + Объект[МДТабличнойЧасти.Имя].Количество(); + КонецЦикла; + + Возврат Размер; + +КонецФункции + +Функция ОценитьРазмерНабораЗаписей(МДНабора, Набор) + + Возврат Набор.Количество(); + +КонецФункции + +Процедура ЗаписатьДанныеВXMLСУказаниемТипов(КаталогВыгрузки, ТипыДляЗамены = Неопределено, МаксимальныйРазмерЧасти = 100000, + ВыгружатьПланыОбмена = Ложь) + + ИменаМетаданныхЗаменяемыхТипов = Новый Соответствие; + Если ТипыДляЗамены <> Неопределено Тогда + Для каждого ТипДляЗамены Из ТипыДляЗамены Цикл + ИменаМетаданныхЗаменяемыхТипов.Вставить(Метаданные.НайтиПоТипу(ТипДляЗамены).ПолноеИмя(), Истина); + КонецЦикла; + + Фабрика = ПолучитьФабрикуСУказаниемТипов(ТипыДляЗамены); + Сериализатор = Новый СериализаторXDTO(Фабрика); + Иначе + Сериализатор = СериализаторXDTO; + КонецЕсли; + + ТекущийРазмерЧасти = Неопределено; + ТекущийНомерЧасти = 0; + + ПараметрыЗаписи_ЗаменяемыеТипы = Новый Структура("Запись, РазмерЧасти, ШаблонИмени, НомерЧасти"); + ПараметрыЗаписи_ЗаменяемыеТипы.ШаблонИмени = КаталогВыгрузки + "data_common%1.xml"; + + ОткрытьЗаписьXML(ПараметрыЗаписи_ЗаменяемыеТипы); + + ПараметрыЗаписи_ПрочиеДанные = Новый Структура("Запись, РазмерЧасти, ШаблонИмени, НомерЧасти"); + ПараметрыЗаписи_ПрочиеДанные.ШаблонИмени = КаталогВыгрузки + "data_misc%1.xml"; + + ОткрытьЗаписьXML(ПараметрыЗаписи_ПрочиеДанные); + + МДОбщегоРеквизита = Метаданные.ОбщиеРеквизиты.ОбластьДанных; + + // Переберем все метаданные + + // Константы + Для каждого МетаданныеКонстанты Из Метаданные.Константы Цикл + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МетаданныеКонстанты) Тогда + Продолжить; + КонецЕсли; + + МенеджерЗначения = Константы[МетаданныеКонстанты.Имя].СоздатьМенеджерЗначения(); + МенеджерЗначения.Прочитать(); + ЗаписатьВXML(МенеджерЗначения, МетаданныеКонстанты, 1, Сериализатор, ПараметрыЗаписи_ЗаменяемыеТипы, + ПараметрыЗаписи_ПрочиеДанные, ИменаМетаданныхЗаменяемыхТипов, МаксимальныйРазмерЧасти) + КонецЦикла; + + // Ссылочные типы + + ВидыОбъектов = Новый Массив; + ВидыОбъектов.Добавить("Справочники"); + ВидыОбъектов.Добавить("Документы"); + ВидыОбъектов.Добавить("ПланыВидовХарактеристик"); + ВидыОбъектов.Добавить("ПланыСчетов"); + ВидыОбъектов.Добавить("ПланыВидовРасчета"); + ВидыОбъектов.Добавить("БизнесПроцессы"); + ВидыОбъектов.Добавить("Задачи"); + + Для каждого ВидОбъекта Из ВидыОбъектов Цикл + МетаданныеКоллекция = Метаданные[ВидОбъекта]; + Для каждого МДОбъекта Из МетаданныеКоллекция Цикл + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МДОбъекта) Тогда + Если ИменаМетаданныхЗаменяемыхТипов.Получить(МДОбъекта.ПолноеИмя()) = Неопределено Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | _XMLВыгрузка_Таблица.Ссылка КАК Ссылка + |ИЗ + | " + МДОбъекта.ПолноеИмя() + " КАК _XMLВыгрузка_Таблица"; + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + Объект = Выборка.Ссылка.ПолучитьОбъект(); + + Размер = ОценитьРазмерОбъекта(МДОбъекта, Объект); + ЗаписатьВXML(Объект, МДОбъекта, Размер, Сериализатор, ПараметрыЗаписи_ЗаменяемыеТипы, + ПараметрыЗаписи_ПрочиеДанные, ИменаМетаданныхЗаменяемыхТипов, МаксимальныйРазмерЧасти) + КонецЦикла; + КонецЦикла; + КонецЦикла; + + // Регистры кроме независимых регистров сведений + ВидыТаблиц = Новый Массив; + ВидыТаблиц.Добавить("РегистрыНакопления"); + ВидыТаблиц.Добавить("РегистрыРасчета"); + ВидыТаблиц.Добавить("РегистрыБухгалтерии"); + ВидыТаблиц.Добавить("РегистрыСведений"); + ВидыТаблиц.Добавить("Последовательности"); + Для каждого ВидТаблицы Из ВидыТаблиц Цикл + МетаданныеКоллекция = Метаданные[ВидТаблицы]; + МенеджерВида = Вычислить(ВидТаблицы); + Для каждого МДРегистра Из МетаданныеКоллекция Цикл + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МДРегистра) Тогда + Продолжить; + КонецЕсли; + + Если ВидТаблицы = "РегистрыСведений" + И МДРегистра.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда + + Продолжить; + КонецЕсли; + + МенеджерТипа = МенеджерВида[МДРегистра.Имя]; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | _XMLВыгрузка_Таблица.Регистратор КАК Регистратор + |ИЗ + | " + МДРегистра.ПолноеИмя() + " КАК _XMLВыгрузка_Таблица"; + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + НаборЗаписей = МенеджерТипа.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор); + НаборЗаписей.Прочитать(); + + Размер = ОценитьРазмерНабораЗаписей(МДРегистра, НаборЗаписей); + ЗаписатьВXML(НаборЗаписей, МДРегистра, Размер, Сериализатор, ПараметрыЗаписи_ЗаменяемыеТипы, + ПараметрыЗаписи_ПрочиеДанные, ИменаМетаданныхЗаменяемыхТипов, МаксимальныйРазмерЧасти) + КонецЦикла; + КонецЦикла; + КонецЦикла; + + ОбщиеРегистрыСведений = РаботаВМоделиСервиса.ОбщиеРегистрыСведенийСРазделеннымиДанными(); + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + // Независимые регистры сведений + Для каждого МДРегистра Из Метаданные.РегистрыСведений Цикл + + Если МДРегистра.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда + Продолжить; + КонецЕсли; + + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МДРегистра) Тогда + Если ОбщиеРегистрыСведений.Найти(МДРегистра.Имя) = Неопределено Тогда + Продолжить; + КонецЕсли; + ОбщийРегистр = Истина; + Иначе + ОбщийРегистр = Ложь; + КонецЕсли; + + МенеджерТипа = РегистрыСведений[МДРегистра.Имя]; + + НаборЗаписей = МенеджерТипа.СоздатьНаборЗаписей(); + Если ОбщийРегистр Тогда + НаборЗаписей.Отбор.ОбластьДанных.Установить(ОбластьДанных); + КонецЕсли; + НаборЗаписей.Прочитать(); + + Размер = ОценитьРазмерНабораЗаписей(МДРегистра, НаборЗаписей); + ЗаписатьВXML(НаборЗаписей, МДРегистра, Размер, Сериализатор, ПараметрыЗаписи_ЗаменяемыеТипы, + ПараметрыЗаписи_ПрочиеДанные, ИменаМетаданныхЗаменяемыхТипов, МаксимальныйРазмерЧасти) + КонецЦикла; + + Если ВыгружатьПланыОбмена Тогда + Для каждого МДОбъекта Из Метаданные.ПланыОбмена Цикл + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МДОбъекта) Тогда + Продолжить; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | _XMLВыгрузка_Таблица.Ссылка КАК Ссылка + |ИЗ + | " + МДОбъекта.ПолноеИмя() + " КАК _XMLВыгрузка_Таблица + |ГДЕ + | _XMLВыгрузка_Таблица.Ссылка <> &ЭтотУзел"; + Запрос.УстановитьПараметр("ЭтотУзел", ПланыОбмена[МДОбъекта.Имя].ЭтотУзел()); + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + Объект = Выборка.Ссылка.ПолучитьОбъект(); + + Размер = ОценитьРазмерОбъекта(МДОбъекта, Объект); + ЗаписатьВXML(Объект, МДОбъекта, Размер, Сериализатор, ПараметрыЗаписи_ЗаменяемыеТипы, + ПараметрыЗаписи_ПрочиеДанные, ИменаМетаданныхЗаменяемыхТипов, МаксимальныйРазмерЧасти) + КонецЦикла; + КонецЦикла; + КонецЕсли; + + ЗакрытьЗаписьXML(ПараметрыЗаписи_ЗаменяемыеТипы); + ЗакрытьЗаписьXML(ПараметрыЗаписи_ПрочиеДанные); + +КонецПроцедуры + +Функция ПодготовитьСловарьЗамен() + + СловарьЗамен = Новый ТаблицаЗначений; + СловарьЗамен.Колонки.Добавить("ИмяТипаXML", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(255, ДопустимаяДлина.Переменная))); + СловарьЗамен.Колонки.Добавить("Тип", Новый ОписаниеТипов("Тип")); + СловарьЗамен.Колонки.Добавить("ОбщиеДанные", Новый ОписаниеТипов("Булево")); + СловарьЗамен.Колонки.Добавить("СоответствиеСсылок", Новый ОписаниеТипов("Соответствие")); + СловарьЗамен.Колонки.Добавить("ОбратноеСоответствие", Новый ОписаниеТипов("Соответствие")); + СловарьЗамен.Колонки.Добавить("ТекстЗапроса", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная))); + СловарьЗамен.Колонки.Добавить("ОбщиеСсылки", Новый ОписаниеТипов("Массив")); + Для каждого СтрокаСоответствия Из ОбщегоНазначения.ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим() Цикл + Если НЕ Справочники.ТипВсеСсылки().СодержитТип(СтрокаСоответствия.ТипОбщихДанных) Тогда + Продолжить; + КонецЕсли; + + ОписаниеТипаЗамены = СловарьЗамен.Добавить(); + + Если СтрокаСоответствия.ТипРазделенныхДанных = Неопределено Тогда + ОписаниеТипаЗамены.ОбщиеДанные = Истина; + ОписаниеТипаЗамены.Тип = СтрокаСоответствия.ТипОбщихДанных; + Иначе + ОписаниеТипаЗамены.ОбщиеДанные = Ложь; + ОписаниеТипаЗамены.Тип = СтрокаСоответствия.ТипРазделенныхДанных; + КонецЕсли; + + ОписаниеТипаЗамены.ИмяТипаXML = СериализаторXDTO.XMLТип(ОписаниеТипаЗамены.Тип).ИмяТипа; + + МетаданныеТипа = Метаданные.НайтиПоТипу(ОписаниеТипаЗамены.Тип); + МетаданныеОбщегоТипа = Метаданные.НайтиПоТипу(СтрокаСоответствия.ТипОбщихДанных); + + Если МетаданныеОбщегоТипа.Иерархический + И МетаданныеОбщегоТипа.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда + + УсловиеНаГруппы = Символы.ПС + Символы.Таб + Символы.Таб + "И Коды.ЭтоГруппа = ТаблицаСправочника.ЭтоГруппа"; + + Иначе + + УсловиеНаГруппы = ""; + + КонецЕсли; + + ОписаниеТипаЗамены.ТекстЗапроса = + "ВЫБРАТЬ + | Коды.Ссылка КАК ИсходнаяСсылка, + | Коды.Код КАК Код, + | ТаблицаСправочника.Ссылка КАК ОбщаяСсылка + |ИЗ + | Коды КАК Коды + | ЛЕВОЕ СОЕДИНЕНИЕ " + МетаданныеОбщегоТипа.ПолноеИмя() + " КАК ТаблицаСправочника + | ПО Коды.Код = ТаблицаСправочника.Код" + УсловиеНаГруппы + " + |ГДЕ + | Коды.Ссылка ССЫЛКА " + МетаданныеТипа.ПолноеИмя(); + + КонецЦикла; + + Возврат СловарьЗамен; + +КонецФункции + +Функция ПодготовитьФрагментСловаряЗамен() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Тип", Новый ОписаниеТипов("Тип")); + Результат.Колонки.Добавить("СоответствиеСсылок", Новый ОписаниеТипов("Соответствие")); + + Возврат Результат; + +КонецФункции + +Процедура ДобавитьФрагментВСловарьЗамен(Знач СловарьЗамен, Знач Фрагмент) + + ПустойУИД = СериализаторXDTO.XMLСтрока(Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Для каждого СтрокаФрагмента Из Фрагмент Цикл + СтрокаСловаря = СловарьЗамен.Найти(СтрокаФрагмента.Тип, "Тип"); + Если СтрокаСловаря = Неопределено Тогда + СтрокаСловаря = СловарьЗамен.Добавить(); + СтрокаСловаря.Тип = СтрокаФрагмента.Тип; + СтрокаСловаря.ИмяТипаXML = СериализаторXDTO.XMLТип(СтрокаСловаря.Тип).ИмяТипа; + СтрокаСловаря.ОбщиеДанные = Истина; + КонецЕсли; + + СтрокаСловаря.СоответствиеСсылок = СтрокаФрагмента.СоответствиеСсылок; + + СтрокаСловаря.ОбратноеСоответствие = Новый Соответствие; + СтрокаСловаря.ОбратноеСоответствие.Вставить(ПустойУИД, ПустойУИД); + + Для каждого КлючИЗначение Из СтрокаСловаря.СоответствиеСсылок Цикл + ИсходнаяСсылкаXML = СериализаторXDTO.XMLСтрока(КлючИЗначение.Значение.УникальныйИдентификатор()); + НайденнаяСсылкаXML = СериализаторXDTO.XMLСтрока(КлючИЗначение.Ключ.УникальныйИдентификатор()); + СтрокаСловаря.ОбратноеСоответствие.Вставить(ИсходнаяСсылкаXML, НайденнаяСсылкаXML); + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗагрузитьДанныеСПодменойСсылок(Знач КаталогВыгрузки, Знач РежимОтладки) + + СловарьЗамен = ПодготовитьСловарьЗамен(); + + ФрагментСловаряЗамен = ПодготовитьФрагментСловаряЗамен(); + ВыгрузкаЗагрузкаДанныхПереопределяемый.ДополнитьСловарьЗаменПоКаталогуВыгрузки(ФрагментСловаряЗамен, КаталогВыгрузки); + ДобавитьФрагментВСловарьЗамен(СловарьЗамен, ФрагментСловаряЗамен); + + ПустойУИД = СериализаторXDTO.XMLСтрока(Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Коллизии = Новый ТаблицаЗначений; + Коллизии.Колонки.Добавить("ИсходнаяСсылка", Справочники.ТипВсеСсылки()); + Коллизии.Колонки.Добавить("Код", Новый ОписаниеТипов("Число, Строка", + Новый КвалификаторыЧисла(20, 0, ДопустимыйЗнак.Неотрицательный), Новый КвалификаторыСтроки(50, ДопустимаяДлина.Переменная))); + Коллизии.Колонки.Добавить("НайденнаяСсылка", Справочники.ТипВсеСсылки()); + Коллизии.Индексы.Добавить("ИсходнаяСсылка, НайденнаяСсылка"); + + РазорванныеСсылки = Новый ТаблицаЗначений; + РазорванныеСсылки.Колонки.Добавить("ИсходнаяСсылка", Справочники.ТипВсеСсылки()); + РазорванныеСсылки.Колонки.Добавить("Код", Новый ОписаниеТипов("Число, Строка", + Новый КвалификаторыЧисла(20, 0, ДопустимыйЗнак.Неотрицательный), Новый КвалификаторыСтроки(50, ДопустимаяДлина.Переменная))); + + ТекстЗапросаСозданияТаблицыКодов = + "ВЫБРАТЬ + | Коды.Ссылка КАК Ссылка, + | Коды.Код КАК Код, + | Коды.ЭтоГруппа КАК ЭтоГруппа + |ПОМЕСТИТЬ Коды + |ИЗ + | &ТаблицаКодов КАК Коды + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка"; + + ФайлыОбщихДанных = НайтиФайлы(КаталогВыгрузки, "data_common*.xml", Ложь); + Для каждого ФайлОбщихДанных Из ФайлыОбщихДанных Цикл + + ТаблицаКодов = ПолучитьТаблицуКодовОбщихДанных(ФайлОбщихДанных.ПолноеИмя); + + МенеджерВТ = Новый МенеджерВременныхТаблиц; + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = МенеджерВТ; + Запрос.Текст = ТекстЗапросаСозданияТаблицыКодов; + Запрос.УстановитьПараметр("ТаблицаКодов", ТаблицаКодов); + Запрос.Выполнить(); + + Для каждого ОписаниеТипаЗамены Из СловарьЗамен Цикл + Если ПустаяСтрока(ОписаниеТипаЗамены.ТекстЗапроса) Тогда + Продолжить; + КонецЕсли; + + ОписаниеТипаЗамены.СоответствиеСсылок = Новый Соответствие; + + ОписаниеТипаЗамены.ОбратноеСоответствие = Новый Соответствие; + ОписаниеТипаЗамены.ОбратноеСоответствие.Вставить(ПустойУИД, ПустойУИД); + + СсылкиДляПодбора = Новый Массив; + + Запрос.Текст = ОписаниеТипаЗамены.ТекстЗапроса; + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + ИсходнаяСсылкаXML = СериализаторXDTO.XMLСтрока(Выборка.ИсходнаяСсылка.УникальныйИдентификатор()); + + Если Выборка.ОбщаяСсылка = NULL Тогда + СтрокаОшибки = РазорванныеСсылки.Добавить(); + СтрокаОшибки.ИсходнаяСсылка = Выборка.ИсходнаяСсылка; + СтрокаОшибки.Код = Выборка.Код; + + ОписаниеТипаЗамены.ОбратноеСоответствие.Вставить( + ИсходнаяСсылкаXML, ИсходнаяСсылкаXML); + Иначе + НайденнаяСсылкаXML = СериализаторXDTO.XMLСтрока(Выборка.ОбщаяСсылка.УникальныйИдентификатор()); + + СуществующееЗначение = ОписаниеТипаЗамены.СоответствиеСсылок.Получить(Выборка.ОбщаяСсылка); + Если СуществующееЗначение <> Неопределено Тогда + Если Коллизии.НайтиСтроки(Новый Структура("ИсходнаяСсылка, НайденнаяСсылка", + СуществующееЗначение, Выборка.ОбщаяСсылка)).Количество() = 0 Тогда + + Коллизия = Коллизии.Добавить(); + Коллизия.ИсходнаяСсылка = СуществующееЗначение; + Коллизия.Код = Выборка.Код; + Коллизия.НайденнаяСсылка = Выборка.ОбщаяСсылка; + КонецЕсли; + + Коллизия = Коллизии.Добавить(); + Коллизия.ИсходнаяСсылка = Выборка.ИсходнаяСсылка; + Коллизия.Код = Выборка.Код; + Коллизия.НайденнаяСсылка = Выборка.ОбщаяСсылка; + Иначе + ОписаниеТипаЗамены.СоответствиеСсылок.Вставить(Выборка.ОбщаяСсылка, Выборка.ИсходнаяСсылка); + ОписаниеТипаЗамены.ОбратноеСоответствие.Вставить(ИсходнаяСсылкаXML, НайденнаяСсылкаXML); + + ОписаниеТипаЗамены.ОбщиеСсылки.Добавить(Выборка.ОбщаяСсылка); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + КонецЦикла; + + ФрагментСловаряЗамен = ПодготовитьФрагментСловаряЗамен(); + ВыгрузкаЗагрузкаДанныхПереопределяемый.ДополнитьСловарьЗаменПоОбщимДанным(ФрагментСловаряЗамен, ФайлОбщихДанных.ПолноеИмя); + ДобавитьФрагментВСловарьЗамен(СловарьЗамен, ФрагментСловаряЗамен); + + МаскаПоиска = "data_*.xml"; + ВсеФайлыДанных = НайтиФайлы(КаталогВыгрузки, МаскаПоиска, Ложь); + Для каждого ФайлДанных Из ВсеФайлыДанных Цикл + + // Замена ссылок + + Чтение = Новый ЧтениеТекста(ФайлДанных.ПолноеИмя); + ИмяОбработанногоФайла = ПолучитьИмяВременногоФайла(); + Запись = Новый ЗаписьТекста(ИмяОбработанногоФайла); + + // Константы для разбора текста + НачалоТипа = "xsi:type=""v8:"; + ДлинаНачалаТипа = СтрДлина(НачалоТипа); + КонецТипа = """>"; + ДлинаКонцаТипа = СтрДлина(КонецТипа); + + ИсходнаяСтрока = Чтение.ПрочитатьСтроку(); + Пока ИсходнаяСтрока <> Неопределено Цикл + + ОстатокСтроки = Неопределено; + + ТекущаяПозиция = 1; + ПозицияТипа = Найти(ИсходнаяСтрока, НачалоТипа); + Пока ПозицияТипа > 0 Цикл + + Запись.Записать(Сред(ИсходнаяСтрока, ТекущаяПозиция, ПозицияТипа - 1 + ДлинаНачалаТипа)); + + ТекущаяПозиция = ТекущаяПозиция + ПозицияТипа + ДлинаНачалаТипа; + + Если ОстатокСтроки = Неопределено Тогда + ОстатокСтроки = Сред(ИсходнаяСтрока, ПозицияТипа + ДлинаНачалаТипа); + Иначе + ОстатокСтроки = Сред(ОстатокСтроки, ПозицияТипа + ДлинаНачалаТипа); + КонецЕсли; + ПозицияТипа = Найти(ОстатокСтроки, НачалоТипа); + + ПозицияКонцаТипа = Найти(ОстатокСтроки, КонецТипа); + Если ПозицияКонцаТипа = 0 Тогда + Прервать; + КонецЕсли; + + ИмяТипа = Лев(ОстатокСтроки, ПозицияКонцаТипа - 1); + ОписаниеТипаЗамены = СловарьЗамен.Найти(ИмяТипа, "ИмяТипаXML"); + Если ОписаниеТипаЗамены = Неопределено Тогда + Продолжить; + КонецЕсли; + + Запись.Записать(ИмяТипа); + Запись.Записать(КонецТипа); + + ИсходнаяСсылкаXML = Сред(ОстатокСтроки, ПозицияКонцаТипа + ДлинаКонцаТипа, 36); + НайденнаяСсылкаXML = ОписаниеТипаЗамены.ОбратноеСоответствие.Получить(ИсходнаяСсылкаXML); + Если НайденнаяСсылкаXML = Неопределено Тогда + Запись.Записать(ИсходнаяСсылкаXML); + Иначе + Запись.Записать(НайденнаяСсылкаXML); + КонецЕсли; + + ТекущаяПозиция = ТекущаяПозиция + ПозицияКонцаТипа - 1 + ДлинаКонцаТипа + 36; + ОстатокСтроки = Сред(ОстатокСтроки, ПозицияКонцаТипа + ДлинаКонцаТипа + 36); + ПозицияТипа = Найти(ОстатокСтроки, НачалоТипа); + + КонецЦикла; + + Если ОстатокСтроки <> Неопределено Тогда + Запись.ЗаписатьСтроку(ОстатокСтроки); + Иначе + Запись.ЗаписатьСтроку(Сред(ИсходнаяСтрока, ТекущаяПозиция)); + КонецЕсли; + + ИсходнаяСтрока = Чтение.ПрочитатьСтроку(); + КонецЦикла; + + Чтение.Закрыть(); + + Запись.Закрыть(); + + УдалитьФайлы(ФайлДанных.ПолноеИмя); + ПереместитьФайл(ИмяОбработанногоФайла, ФайлДанных.ПолноеИмя); + + КонецЦикла; + + КонецЦикла; + + // Загрузка данных + ЗагрузитьДанныеЧерезXDTOСериализатор(КаталогВыгрузки, , РежимОтладки); + + Для каждого ОписаниеТипаЗамены Из СловарьЗамен Цикл + Если ОписаниеТипаЗамены.ОбщиеДанные Тогда + Продолжить; + КонецЕсли; + + СтандартныеПодсистемыВызовСервераПереопределяемый.ПодобратьПоставляемыеДанныеИзКлассификатора(ОписаниеТипаЗамены.ОбщиеСсылки); + КонецЦикла; + +КонецПроцедуры + +Процедура ЗагрузитьДанныеЧерезXDTOСериализатор(Знач КаталогВыгрузки, Знач МаскаПоиска = Неопределено, Знач РежимОтладки = Ложь) + + Типы = Новый Массив; + СтандартныеПодсистемыПереопределяемый.ПолучитьНезагружаемыеВОбластиДанныхТипы(Типы); + РаботаВМоделиСервисаПереопределяемый.ПолучитьНезагружаемыеВОбластиДанныхТипы(Типы); + ИсключаемыеТипы = Новый Соответствие; + Для каждого Тип Из Типы Цикл + ИсключаемыеТипы.Вставить(Тип, Истина); + КонецЦикла; + + Если МаскаПоиска = Неопределено Тогда + МаскаПоиска = "data_*.xml"; + КонецЕсли; + + МДОбщегоРеквизита = Метаданные.ОбщиеРеквизиты.ОбластьДанных; + + ТипыПлановОбмена = Новый Соответствие; + Для каждого МетаданныеПланаОбмена Из Метаданные.ПланыОбмена Цикл + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МетаданныеПланаОбмена) Тогда + Продолжить; + КонецЕсли; + + ТипыПлановОбмена.Вставить(Тип("ПланОбменаОбъект." + МетаданныеПланаОбмена.Имя), Истина); + КонецЦикла; + + ТипыОбщихРегистровСведений = Новый Соответствие; + Для каждого ИмяРегистра Из РаботаВМоделиСервиса.ОбщиеРегистрыСведенийСРазделеннымиДанными() Цикл + ТипыОбщихРегистровСведений.Вставить(Тип("РегистрСведенийНаборЗаписей." + ИмяРегистра), Истина); + КонецЦикла; + + // Добавим в исключаемые типы все общие данные кроме общих регистров сведений + Для каждого ЭлементСостава Из МДОбщегоРеквизита.Состав Цикл + Если ОбщегоНазначения.ЭлементСоставаОбщегоРеквизитаИспользуется(ЭлементСостава, МДОбщегоРеквизита) Тогда + Продолжить; + КонецЕсли; + + Если Метаданные.РегламентныеЗадания.Содержит(ЭлементСостава.Метаданные) Тогда + Продолжить; + ИначеЕсли Метаданные.Константы.Содержит(ЭлементСостава.Метаданные) Тогда + ИмяТипа = "КонстантаМенеджерЗначения"; + ИначеЕсли Метаданные.Справочники.Содержит(ЭлементСостава.Метаданные) Тогда + ИмяТипа = "СправочникОбъект"; + ИначеЕсли Метаданные.Документы.Содержит(ЭлементСостава.Метаданные) Тогда + ИмяТипа = "ДокументОбъект"; + ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(ЭлементСостава.Метаданные) Тогда + ИмяТипа = "ПланВидовХарактеристикОбъект"; + ИначеЕсли Метаданные.ПланыСчетов.Содержит(ЭлементСостава.Метаданные) Тогда + ИмяТипа = "ПланСчетовОбъект"; + ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(ЭлементСостава.Метаданные) Тогда + ИмяТипа = "ПланВидовРасчетаОбъект"; + ИначеЕсли Метаданные.БизнесПроцессы.Содержит(ЭлементСостава.Метаданные) Тогда + ИмяТипа = "БизнесПроцессОбъект"; + ИначеЕсли Метаданные.Задачи.Содержит(ЭлементСостава.Метаданные) Тогда + ИмяТипа = "ЗадачаОбъект"; + ИначеЕсли Метаданные.ПланыОбмена.Содержит(ЭлементСостава.Метаданные) Тогда + ИмяТипа = "ПланОбменаОбъект"; + ИначеЕсли Метаданные.РегистрыНакопления.Содержит(ЭлементСостава.Метаданные) Тогда + ИмяТипа = "РегистрНакопленияНаборЗаписей"; + ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(ЭлементСостава.Метаданные) Тогда + ИмяТипа = "РегистрБухгалтерииНаборЗаписей"; + ИначеЕсли Метаданные.Последовательности.Содержит(ЭлементСостава.Метаданные) Тогда + ИмяТипа = "ПоследовательностьНаборЗаписей"; + Иначе + ИмяТипа = Неопределено; + // Регистры сведений и расчета обработаем отдельно + Если Метаданные.РегистрыСведений.Содержит(ЭлементСостава.Метаданные) Тогда + ТипДанных = Тип("РегистрСведенийНаборЗаписей." + ЭлементСостава.Метаданные.Имя); + Если ТипыОбщихРегистровСведений.Получить(ТипДанных) = Неопределено Тогда + ИсключаемыеТипы.Вставить(ТипДанных, Истина); + КонецЕсли; + ИначеЕсли Метаданные.РегистрыРасчета.Содержит(ЭлементСостава.Метаданные) Тогда + ИсключаемыеТипы.Вставить(Тип("РегистрРасчетаНаборЗаписей." + ЭлементСостава.Метаданные.Имя), Истина); + Для каждого МетаданныеПерерасчета Из ЭлементСостава.Метаданные.Перерасчеты Цикл + ИсключаемыеТипы.Вставить(Тип("ПерерасчетНаборЗаписей." + МетаданныеПерерасчета.Имя), Истина); + КонецЦикла; + Иначе + ШаблонСообщения = НСтр("ru = 'Неожиданный объект метаданных в составе общего реквизита %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, + ЭлементСостава.Метаданные.ПолноеИмя()); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + КонецЕсли; + + Если ИмяТипа <> Неопределено Тогда + ИсключаемыеТипы.Вставить(Тип(ИмяТипа + "." + ЭлементСостава.Метаданные.Имя), Истина); + КонецЕсли; + КонецЦикла; + + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + ВсеФайлыДанных = НайтиФайлы(КаталогВыгрузки, МаскаПоиска, Ложь); + + Пока Истина Цикл + + Попытка + + Для каждого ФайлДанных Из ВсеФайлыДанных Цикл + Чтение = Новый ЧтениеXML; + Чтение.ОткрытьФайл(ФайлДанных.ПолноеИмя); + Чтение.ПерейтиКСодержимому(); + + Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента + ИЛИ Чтение.Имя <> "DataDumpPart" Тогда + + ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Неверный формат файла. Ожидается начало элемента Data.'")); + КонецЕсли; + + Если РежимОтладки Тогда + СоответствияПространствИмен = Чтение.КонтекстПространствИмен.СоответствияПространствИмен(); + КонецЕсли; + + Если НЕ Чтение.Прочитать() Тогда + ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Обнаружено завершение файла.'")); + КонецЕсли; + + Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента + ИЛИ Чтение.Имя <> "Data" Тогда + + ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Неверный формат файла. Ожидается начало элемента Data.'")); + КонецЕсли; + + Если НЕ Чтение.Прочитать() Тогда + ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Обнаружено завершение файла.'")); + КонецЕсли; + + Пока Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл + Если НЕ СериализаторXDTO.ВозможностьЧтенияXML(Чтение) Тогда + ОшибкаОпределенияТипаПриЧтении(Чтение); + КонецЕсли; + + Если РежимОтладки Тогда + ЗаписьФрагмента = Новый ЗаписьXML; + ЗаписьФрагмента.УстановитьСтроку(); + + ИмяУзлаФрагмента = Чтение.Имя; + + КорневойУзел = Истина; + + Пока НЕ (Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента + И Чтение.Имя = ИмяУзлаФрагмента) Цикл + + ЗаписьФрагмента.ЗаписатьТекущий(Чтение); + + Если КорневойУзел Тогда + ПрефиксыФрагмента = ЗаписьФрагмента.КонтекстПространствИмен.СоответствияПространствИмен(); + Для каждого ПрефиксИПространство Из СоответствияПространствИмен Цикл + Если ПрефиксыФрагмента.Получить(ПрефиксИПространство.Ключ) = Неопределено Тогда + ЗаписьФрагмента.ЗаписатьСоответствиеПространстваИмен(ПрефиксИПространство.Ключ, ПрефиксИПространство.Значение); + КонецЕсли; + КонецЦикла; + КорневойУзел = Ложь; + КонецЕсли; + + Чтение.Прочитать(); + КонецЦикла; + ЗаписьФрагмента.ЗаписатьТекущий(Чтение); + Чтение.Прочитать(); + + Фрагмент = ЗаписьФрагмента.Закрыть(); + + ЧтениеФрагмента = Новый ЧтениеXML; + ЧтениеФрагмента.УстановитьСтроку(Фрагмент); + Попытка + Данные = СериализаторXDTO.ПрочитатьXML(ЧтениеФрагмента); + Исключение + ЗаписьЖурналаРегистрации("ВыгрузкаЗагрузкаДанных.ОшибкаЧтенияXML", УровеньЖурналаРегистрации.Ошибка, , + Фрагмент, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + Иначе + Данные = СериализаторXDTO.ПрочитатьXML(Чтение); + КонецЕсли; + + ТипЗагруженногоЗначения = ТипЗнч(Данные); + + Если ИсключаемыеТипы.Получить(ТипЗагруженногоЗначения) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ЭтоПланОбмена = Ложь; + Если ТипыПлановОбмена.Получить(ТипЗагруженногоЗначения) <> Неопределено Тогда + ЭтоПланОбмена = Истина; + Данные.ОбластьДанных = ОбластьДанных; + ИначеЕсли ТипыОбщихРегистровСведений.Получить(ТипЗагруженногоЗначения) <> Неопределено Тогда + Данные.Отбор.ОбластьДанных.Установить(ОбластьДанных); + + Для каждого Запись Из Данные Цикл + Запись.ОбластьДанных = ОбластьДанных; + КонецЦикла; + КонецЕсли; + + Данные.ДополнительныеСвойства.Вставить("НеПроверятьДатыЗапретаИзмененияДанных", Истина); + Если НЕ ЭтоПланОбмена Тогда + Данные.ОбменДанными.Загрузка = Истина; + КонецЕсли; + ВыгрузкаЗагрузкаДанныхПереопределяемый.ПередЗагрузкойДанных(Данные); + Данные.Записать(); + КонецЦикла; + КонецЦикла; + + Исключение + ЗаписьЖурналаРегистрации("ВыгрузкаЗагрузкаДанных.ОшибкаЧтенияXML", УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + Если НЕ РежимОтладки Тогда + РежимОтладки = Истина; + Продолжить; + КонецЕсли; + + ВызватьИсключение; + КонецПопытки; + + Прервать; + + КонецЦикла; + +КонецПроцедуры + +Функция ПолучитьТаблицуКодовОбщихДанных(Знач ИмяФайлаОбщихДанных) + + ИмяФайлыТаблицыКодов = ПолучитьИмяВременногоФайла("xml"); + + ЗаписьТаблицы = Новый ЗаписьXML; + ЗаписьТаблицы.ОткрытьФайл(ИмяФайлыТаблицыКодов); + + Преобразование = ОбщегоНазначенияПовтИсп.ПолучитьПреобразованиеXSLИзОбщегоМакета("ИзвлечениеКодовОбщихДанных"); + Преобразование.ПреобразоватьИзФайла(ИмяФайлаОбщихДанных, ЗаписьТаблицы); + + ЗаписьТаблицы.Закрыть(); + + Чтение = Новый ЧтениеXML; + Чтение.ОткрытьФайл(ИмяФайлыТаблицыКодов); + Чтение.ПерейтиКСодержимому(); + + Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента + ИЛИ Чтение.Имя <> "Data" Тогда + + ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Неверный формат файла. Ожидается начало элемента Data.'")); + КонецЕсли; + + Если НЕ Чтение.Прочитать() Тогда + ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Обнаружено завершение файла.'")); + КонецЕсли; + + ТаблицаКодов = СериализаторXDTO.ПрочитатьXML(Чтение); + + Чтение.Закрыть(); + + Попытка + УдалитьФайлы(ИмяФайлыТаблицыКодов); + Исключение + + КонецПопытки; + + Возврат ТаблицаКодов; + +КонецФункции + +Функция ЗаписатьПользователяВXDTO(Знач Пользователь, Знач СохранятьПароль = Ложь, Знач СохранятьРазделение = Ложь) + + ТипInfoBaseUser = ФабрикаXDTO.Тип("http://v8.1c.ru/misc/datadump", "InfoBaseUser"); + ТипUserRoles = ФабрикаXDTO.Тип("http://v8.1c.ru/misc/datadump", "UserRoles"); + + ПользовательXDTO = ФабрикаXDTO.Создать(ТипInfoBaseUser); + ПользовательXDTO.OSAuthentication = Пользователь.АутентификацияОС; + ПользовательXDTO.StandardAuthentication = Пользователь.АутентификацияСтандартная; + ПользовательXDTO.CannotChangePassword = Пользователь.ЗапрещеноИзменятьПароль; + ПользовательXDTO.Name = Пользователь.Имя; + Если Пользователь.ОсновнойИнтерфейс <> Неопределено Тогда + ПользовательXDTO.DefaultInterface = Пользователь.ОсновнойИнтерфейс.Имя; + Иначе + ПользовательXDTO.DefaultInterface = ""; + КонецЕсли; + ПользовательXDTO.PasswordIsSet = Пользователь.ПарольУстановлен; + ПользовательXDTO.ShowInList = Пользователь.ПоказыватьВСпискеВыбора; + ПользовательXDTO.FullName = Пользователь.ПолноеИмя; + ПользовательXDTO.OSUser = Пользователь.ПользовательОС; + Если СохранятьРазделение Тогда + ПользовательXDTO.DataSeparation = СериализаторXDTO.ЗаписатьXDTO(Пользователь.РазделениеДанных); + Иначе + ПользовательXDTO.DataSeparation = Неопределено; + КонецЕсли; + ПользовательXDTO.RunMode = РежимЗапускаСтрокой(Пользователь.РежимЗапуска); + ПользовательXDTO.Roles = ФабрикаXDTO.Создать(ТипUserRoles); + Для каждого Роль Из Пользователь.Роли Цикл + ПользовательXDTO.Roles.Role.Добавить(Роль.Имя); + КонецЦикла; + Если СохранятьПароль Тогда + ПользовательXDTO.StoredPasswordValue = Пользователь.СохраняемоеЗначениеПароля; + Иначе + ПользовательXDTO.StoredPasswordValue = Неопределено; + КонецЕсли; + ПользовательXDTO.UUID = Пользователь.УникальныйИдентификатор; + Если Пользователь.Язык <> Неопределено Тогда + ПользовательXDTO.Language = Пользователь.Язык.Имя; + Иначе + ПользовательXDTO.Language = ""; + КонецЕсли; + + Возврат ПользовательXDTO; + +КонецФункции + +Функция ОбновитьПользователяИзXDTO(Знач ПользовательXDTO, Знач ВосстанавливатьПароль = Ложь, Знач ВосстанавливатьРазделение = Ложь) + + Пользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ПользовательXDTO.UUID); + Если Пользователь = Неопределено Тогда + Пользователь = ПользователиИнформационнойБазы.СоздатьПользователя(); + КонецЕсли; + + Пользователь.АутентификацияОС = ПользовательXDTO.OSAuthentication; + Пользователь.АутентификацияСтандартная = ПользовательXDTO.StandardAuthentication; + Пользователь.ЗапрещеноИзменятьПароль = ПользовательXDTO.CannotChangePassword; + Пользователь.Имя = ПользовательXDTO.Name; + Если ПустаяСтрока(ПользовательXDTO.DefaultInterface) Тогда + Пользователь.ОсновнойИнтерфейс = Неопределено; + Иначе + Пользователь.ОсновнойИнтерфейс = Метаданные.Интерфейсы.Найти(ПользовательXDTO.DefaultInterface); + КонецЕсли; + Пользователь.ПоказыватьВСпискеВыбора = ПользовательXDTO.ShowInList; + Пользователь.ПолноеИмя = ПользовательXDTO.FullName; + Пользователь.ПользовательОС = ПользовательXDTO.OSUser; + Если ВосстанавливатьРазделение Тогда + Если ПользовательXDTO.DataSeparation = Неопределено Тогда + Пользователь.РазделениеДанных = Новый Структура; + Иначе + Пользователь.РазделениеДанных = СериализаторXDTO.ПрочитатьXDTO(ПользовательXDTO.DataSeparation); + КонецЕсли; + Иначе + Пользователь.РазделениеДанных = Новый Структура; + КонецЕсли; + Пользователь.РежимЗапуска = РежимЗапускаКлиентскогоПриложения[ПользовательXDTO.RunMode]; + Пользователь.Роли.Очистить(); + Для каждого ИмяРоли Из ПользовательXDTO.Roles.Role Цикл + Роль = Метаданные.Роли.Найти(ИмяРоли); + Если Роль <> Неопределено Тогда + Пользователь.Роли.Добавить(Роль); + КонецЕсли; + КонецЦикла; + Если ВосстанавливатьПароль Тогда + Пользователь.СохраняемоеЗначениеПароля = ПользовательXDTO.StoredPasswordValue; + Иначе + Пользователь.СохраняемоеЗначениеПароля = ""; + КонецЕсли; + Если ПустаяСтрока(ПользовательXDTO.Language) Тогда + Пользователь.Язык = Неопределено; + Иначе + Пользователь.Язык = Метаданные.Языки[ПользовательXDTO.Language]; + КонецЕсли; + + Возврат Пользователь; + +КонецФункции + +Функция РежимЗапускаСтрокой(Знач РежимЗапуска) + + Если РежимЗапуска = Неопределено Тогда + Возврат ""; + ИначеЕсли РежимЗапуска = РежимЗапускаКлиентскогоПриложения.Авто Тогда + Возврат "Auto"; + ИначеЕсли РежимЗапуска = РежимЗапускаКлиентскогоПриложения.ОбычноеПриложение Тогда + Возврат "OrdinaryApplication"; + ИначеЕсли РежимЗапуска = РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение Тогда + Возврат "ManagedApplication"; + Иначе + ШаблонСообщения = НСтр("ru = 'Неизвестный режим запуска клиентского приложения %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, РежимЗапуска); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + +КонецФункции + +Функция СоздатьПользователейИзXML(Знач КаталогВыгрузки) + + Чтение = Новый ЧтениеXML; + Чтение.ОткрытьФайл(КаталогВыгрузки + "users.xml"); + Чтение.ПерейтиКСодержимому(); + + Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента + ИЛИ Чтение.Имя <> "Users" Тогда + + ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Неверный формат файла. Ожидается начало элемента Users.'")); + КонецЕсли; + + Если НЕ Чтение.Прочитать() Тогда + ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Обнаружено завершение файла.'")); + КонецЕсли; + + ТипInfoBaseUser = ФабрикаXDTO.Тип("http://v8.1c.ru/misc/datadump", "InfoBaseUser"); + + СоответствиеИдентификаторов = Новый Соответствие; + + ТаблицаПользователей = Новый ТаблицаЗначений; + ТаблицаПользователей.Колонки.Добавить("Пользователь"); + ТаблицаПользователей.Колонки.Добавить("Администратор", Новый ОписаниеТипов("Булево")); + ТаблицаПользователей.Колонки.Добавить("ПользовательXDTO"); + + Пока Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл + ПользовательXDTO = ФабрикаXDTO.ПрочитатьXML(Чтение, ТипInfoBaseUser); + + Пользователь = ОбновитьПользователяИзXDTO(ПользовательXDTO); + + ОбработатьРолиПользователяПриЗагрузкиИзДругойМодели(Пользователь); + + СтрокаПользователя = ТаблицаПользователей.Добавить(); + СтрокаПользователя.Пользователь = Пользователь; + СтрокаПользователя.Администратор = Пользователь.Роли.Содержит(Метаданные.Роли.ПолныеПрава); + СтрокаПользователя.ПользовательXDTO = ПользовательXDTO; + КонецЦикла; + + Чтение.Закрыть(); + + ТаблицаПользователей.Сортировать("Администратор УБЫВ"); + Если ТаблицаПользователей.Количество() > 0 Тогда + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + И НЕ ТаблицаПользователей[0].Администратор Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'В списке пользователей нет ни одного администратора. Загрузка списка пользователей не выполнена.'")); + Иначе + + Для каждого СтрокаПользователя Из ТаблицаПользователей Цикл + Пользователи.ЗаписатьПользователяИнформационнойБазы(СтрокаПользователя.Пользователь); + СоответствиеИдентификаторов.Вставить(СтрокаПользователя.ПользовательXDTO.UUID, + СтрокаПользователя.Пользователь.УникальныйИдентификатор); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Возврат СоответствиеИдентификаторов; + +КонецФункции + +Процедура ОбработатьРолиПользователяПриЗагрузкиИзДругойМодели(Пользователь) + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + // Удалим недоступные роли + НедоступныеРоли = + ПользователиСерверПовтИсп.НедоступныеРолиПоТипуПользователя(Перечисления.ТипыПользователей.ПользовательОбластиДанных); + Для каждого Роль Из НедоступныеРоли Цикл + Если Пользователь.Роли.Содержит(Роль) Тогда + Пользователь.Роли.Удалить(Роль); + КонецЕсли; + КонецЦикла; + Иначе + // Добавим АдминистраторСистемы к роли ПолныеПрава + Если Пользователь.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда + Пользователь.Роли.Добавить(Метаданные.Роли.АдминистраторСистемы); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьПользователейПослеЗагрузкиИзДругойМодели(Знач СоответствиеИдентификаторов) + + СтарыеИдентификаторы = Новый Массив; + Для каждого КлючИЗначение Из СоответствиеИдентификаторов Цикл + СтарыеИдентификаторы.Добавить(КлючИЗначение.Ключ); + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Ссылка, + | Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяИБ + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяИБ В(&СтарыеИдентификаторы)"; + Запрос.УстановитьПараметр("СтарыеИдентификаторы", СтарыеИдентификаторы); + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + ПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ПользовательОбъект.ИдентификаторПользователяСервиса = Неопределено; + ПользовательОбъект.ИдентификаторПользователяИБ = СоответствиеИдентификаторов.Получить(Выборка.ИдентификаторПользователяИБ); + ПользовательОбъект.Записать(); + КонецЦикла; + +КонецПроцедуры + +Процедура ВызватьИсключениеСУточняющимТекстом(Знач ОбъектЗаписи, Знач ИнформацияОбОшибке, Знач ТекстДополнительно = "") + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимые символы в объекте %1. + |'"), "" + ОбъектЗаписи); + Если ТекстДополнительно <> "" Тогда + ТекстОшибки = ТекстОшибки + ТекстДополнительно + Символы.ПС; + КонецЕсли; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выгрузка данных'"), + УровеньЖурналаРегистрации.Ошибка, , , + ТекстОшибки + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + ВызватьИсключение(ТекстОшибки); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанных/ВыгрузкаЗагрузкаДанных.mdo b/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанных/ВыгрузкаЗагрузкаДанных.mdo new file mode 100644 index 000000000..28042b2d6 --- /dev/null +++ b/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанных/ВыгрузкаЗагрузкаДанных.mdo @@ -0,0 +1,11 @@ + + + ВыгрузкаЗагрузкаДанных + + ru + Выгрузка загрузка данных + + true + true + true + diff --git a/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанныхПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанныхПереопределяемый/Module.bsl new file mode 100644 index 000000000..96a001ebe --- /dev/null +++ b/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанныхПереопределяемый/Module.bsl @@ -0,0 +1,80 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ВыгрузкаЗагрузкаДанныхПереопределяемый: обработка событий выгрузки и загрузки данных в области. +// +/////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Обработчик, вызываемый для данных перед их записью в файл при выгрузке областей. +// +// Параметры: +// ЭлементДанных - КонстантаМенеджер.<Имя>; СправочникОбъект.<Имя>; Регистр<Вид>НаборЗаписей.<Имя>. +// +Процедура ПередВыгрузкойДанных(ЭлементДанных) Экспорт + + // СтандартныеПодсистемы.ФайловыеФункции + ОтправкаЭлемента = ОтправкаЭлементаДанных.Авто; + ОбменФайламиСобытия.ПриОтправкеДанныхФайла(ЭлементДанных, ОтправкаЭлемента, Ложь); + // Конец СтандартныеПодсистемы.ФайловыеФункции + +КонецПроцедуры + +// Обработчик, вызываемый для считанных из файла данных перед их записью в ИБ при загрузке областей. +// +// Параметры: +// ЭлементДанных - КонстантаМенеджер.<Имя>; СправочникОбъект.<Имя>; Регистр<Вид>НаборЗаписей.<Имя>. +// +Процедура ПередЗагрузкойДанных(ЭлементДанных) Экспорт + + // СтандартныеПодсистемы.ФайловыеФункции + ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; + ОбменФайламиСобытия.ПриПолученииДанныхФайла(ЭлементДанных, ПолучениеЭлемента); + // Конец СтандартныеПодсистемы.ФайловыеФункции + +КонецПроцедуры + +// Обработчик, вызываемый перед завершением выгрузки данных области. +// +// Параметры: +// КаталогВыгрузки - Строка - каталог с подготовленными файлами выгрузки. +// При окончании выгрузки все файлы из этого каталога попадут в +// результирующий архив. +// +Процедура ПередЗавершениемВыгрузки(Знач КаталогВыгрузки) Экспорт + + Справочники.ИдентификаторыОбъектовМетаданных.ВыгрузитьДанныеСправочника(КаталогВыгрузки); + +КонецПроцедуры + +// Обработчик, вызываемый перед стандартным формированием словаря замен +// +// Параметры +// СловарьЗамен - таблица значений, колонки: +// Тип - Тип - Тип значения заменяемой ссылки +// СоответствиеСсылок - Соответствие - соответствие новой ссылки исходной +// Ключ - Новая ссылка (на которую требуется заменить) +// Значение - Исходная ссылка (требующая замены) +// КаталогВыгрузки - Строка - имя каталога с файлами выгрузки +// +Процедура ДополнитьСловарьЗаменПоКаталогуВыгрузки(Знач СловарьЗамен, Знач КаталогВыгрузки) Экспорт + + Справочники.ИдентификаторыОбъектовМетаданных.ДополнитьСловарьЗаменСсылокИдентификаторовТекущихИЗагружаемыхДанных(СловарьЗамен, КаталогВыгрузки); + +КонецПроцедуры + +// Обработчик, вызываемый при окончании стандартного формирования словаря замен +// по очередному файлу общих данных. +// +// Параметры +// СловарьЗамен - таблица значений, колонки: +// Тип - Тип - Тип значения заменяемой ссылки +// СоответствиеСсылок - Соответствие - соответствие новой ссылки исходной +// Ключ - Новая ссылка (на которую требуется заменить) +// Значение - Исходная ссылка (требующая замены) +// ИмяФайлаОбщихДанных - Строка - имя текущего обрабатываемого файла выгрузки +// общих данных +// +Процедура ДополнитьСловарьЗаменПоОбщимДанным(Знач СловарьЗамен, Знач ИмяФайлаОбщихДанных) Экспорт + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанныхПереопределяемый/ВыгрузкаЗагрузкаДанныхПереопределяемый.mdo b/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанныхПереопределяемый/ВыгрузкаЗагрузкаДанныхПереопределяемый.mdo new file mode 100644 index 000000000..9a8aab78b --- /dev/null +++ b/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанныхПереопределяемый/ВыгрузкаЗагрузкаДанныхПереопределяемый.mdo @@ -0,0 +1,11 @@ + + + ВыгрузкаЗагрузкаДанныхПереопределяемый + + ru + Выгрузка загрузка данных переопределяемый + + true + true + true + diff --git a/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl index c99f5d643..9cdd4f7d8 100644 --- a/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ГрупповоеИзменениеОбъектовКлиент/Module.bsl @@ -1,7 +1,15 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Групповое изменение объектов". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Используется для открытия формы группового изменения объектов. +// // Параметры: -// +// Список - ТаблицаФормы - элемент формы списка, содержащий ссылки на изменяемые объекты. // Процедура ИзменитьВыделенные(Список) Экспорт diff --git a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl index 7a4be0f21..4fa8eb738 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl @@ -1,7 +1,327 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Даты запрета изменения". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ПОДПИСОК НА СОБЫТИЯ +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Проверяет наличие запрета изменения элемента данных. +// Для работы функции требуется настройка процедуры +// ДанныеДляПроверкиЗапретаИзменения() +// модуля ДатыЗапретаИзмененияПереопределяемый // +// Если Данные - полное имя объекта метаданных, +// тогда данные для проверки будут получены +// из базы данных через ИдентификаторДанных +// Если Данные - объект, тогда данные для проверки +// будут получены из экземпляра объекта или +// набора записей +// Если Данные - объект и задан ИдентификаторДанных, +// тогда будут выполнены две проверки, причем +// данные будут получены и из объекта/набора записей, +// и из базы данных через ИдентификаторДанных +// +// Параметры: +// Данные - Строка (полное имя объекта метаданных), +// СправочникОбъект.<Имя>, +// ДокументОбъект.<Имя>, +// ПланВидовХарактеристикОбъект.<Имя>, +// ПланСчетовОбъект.<Имя>, +// ПланВидовРасчетаОбъект.<Имя>, +// БизнесПроцессОбъект.<Имя>, +// ЗадачаОбъект.<Имя>, +// ПланОбменаОбъект.<Имя>, +// РегистрСведенийНаборЗаписей.<Имя>, +// РегистрНакопленияНаборЗаписей.<Имя>, +// РегистрБухгалтерииНаборЗаписей.<Имя>, +// РегистрРасчетаНаборЗаписей.<Имя>, +// +// ИдентификаторДанных - СправочникСсылка.<Имя>, +// ДокументСсылка.<Имя>, +// ПланВидовХарактеристикСсылка.<Имя>, +// ПланСчетовСсылка.<Имя>, +// ПланВидовРасчетаСсылка.<Имя>, +// БизнесПроцессСсылка.<Имя>, +// ЗадачаСсылка.<Имя>, +// ПланОбменаСсылка.<Имя>, +// РегистрСведенийНаборЗаписей.<Имя>.Отбор, +// РегистрНакопленияНаборЗаписей.<Имя>.Отбор, +// РегистрБухгалтерииНаборЗаписей.<Имя>.Отбор, +// РегистрРасчетаНаборЗаписей.<Имя>.Отбор, +// +// СообщитьОЗапрете - Булево, если Истина, будет выведено сообщение пользователю +// о запрете изменения данных. +// +// СтандартнаяОбработка - Булево, если Ложь, проверка запрета изменения (для пользователей) +// будет пропущена. +// +// УзелПланаОбмена - Неопределено, ПланыОбменаСсылка.<Имя плана обмена> - +// если задать узел будет выполнена проверка запрета загрузки. +// +// Возвращаемое значение: +// Булево. +// +Функция ИзменениеЗапрещено(Знач Данные, Знач ИдентификаторДанных = Неопределено, Знач СообщитьОЗапрете = Истина, Знач СтандартнаяОбработка = Истина, Знач УзелПланаОбмена = Неопределено, НайденныеЗапреты = Неопределено) Экспорт + + ДанныеДляПроверки = Новый Структура; + ДанныеДляПроверки.Вставить("Таблица", Данные); + ДанныеДляПроверки.Вставить("ИдентификаторДанных", ИдентификаторДанных); + ДанныеДляПроверки.Вставить("ЗначенияПолейИзОбъекта", Неопределено); + + Если ТипЗнч(Данные) <> Тип("Строка") Тогда + ДанныеДляПроверки.Таблица = Данные.Метаданные().ПолноеИмя(); + ДанныеДляПроверки.ЗначенияПолейИзОбъекта = ИзвлечьЗначенияПолейИзОбъекта(Данные); + КонецЕсли; + + НайденныеЗапреты = Неопределено; + ЗапретНайден = НайденЗапретИзмененияДанных(ДанныеДляПроверки, СообщитьОЗапрете, , СтандартнаяОбработка, УзелПланаОбмена, НайденныеЗапреты); + + Если ЗапретНайден И ТипЗнч(Данные) <> Тип("Строка") Тогда + Для каждого КлючИЗначение Из НайденныеЗапреты Цикл + Данные.ДополнительныеСвойства.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + КонецЕсли; + + Возврат ЗапретНайден; + +КонецФункции + +// Обработчик события формы ПриЧтенииНаСервере, который +// встраивается в формы элементов данных +// (элементов справочников, документов, записей регистров, и др.), +// чтобы заблокировать форму при наличии запрета изменения. +// +// Параметры: +// Форма - УправляемаяФорма, +// +// ИдентификаторДанных - СправочникСсылка.<Имя>, +// ДокументСсылка.<Имя>, +// ПланВидовХарактеристикСсылка.<Имя>, +// ПланСчетовСсылка.<Имя>, +// ПланВидовРасчетаСсылка.<Имя>, +// БизнесПроцессСсылка.<Имя>, +// ЗадачаСсылка.<Имя>, +// ПланОбменаСсылка.<Имя>, +// РегистрСведенийНаборЗаписей.Отбор, +// РегистрНакопленияНаборЗаписей.Отбор, +// РегистрБухгалтерииНаборЗаписей.Отбор, +// РегистрРасчетаНаборЗаписей.Отбор, +// +Функция ОбъектПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ТекущийОбъект)); + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + + Если ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных) Тогда + // Приведение менеджера записи к набору записей с одной записью + МенеджерДанных = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); + Источник = МенеджерДанных.СоздатьНаборЗаписей(); + Для каждого ЭлементОтбора Из Источник.Отбор Цикл + ЭлементОтбора.Установить(ТекущийОбъект[ЭлементОтбора.Имя], Истина); + КонецЦикла; + ИдентификаторДанных = Источник.Отбор; + ЗаполнитьЗначенияСвойств(Источник.Добавить(), ТекущийОбъект); + Иначе + Источник = ТекущийОбъект; + ИдентификаторДанных = ТекущийОбъект.Ссылка; + КонецЕсли; + + СтандартнаяОбработка = Истина; + УзелПланаОбмена = Неопределено; + СообщитьОЗапрете = Ложь; + + Если ПропуститьПроверкуЗапретаИзменения(Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Тогда + Возврат Истина; + КонецЕсли; + + Если ИзменениеЗапрещено(ПолноеИмя, ИдентификаторДанных, СообщитьОЗапрете, СтандартнаяОбработка, УзелПланаОбмена) Тогда + Форма.ТолькоПросмотр = Истина; + КонецЕсли; + +КонецФункции + +// Добавляет строку описание источников данных для проверки запрета изменения +// +// Параметры: +// Таблица - Строка +// ПолеДаты - Строка +// Раздел - Строка +// ПолеОбъекта - Строка +// +Процедура ДобавитьСтроку(Данные, Таблица, ПолеДаты, Раздел = "", ПолеОбъекта = "") Экспорт + + НоваяСтрока = Данные.Добавить(); + НоваяСтрока.Таблица = Таблица; + НоваяСтрока.ПолеДаты = ПолеДаты; + НоваяСтрока.Раздел = Раздел; + НоваяСтрока.ПолеОбъекта = ПолеОбъекта; + +КонецПроцедуры + +// Выполняет поиск дат запрета по проверяемым данным +// для авторизованного пользователя и/или узла плана обмена +// +// Параметры: +// ДанныеДляПроверки - таблица, возвращаемая функцией +// ДатыЗапретаИзменения.ШаблонДанныхДляПроверки() +// +// СообщитьОЗапрете - Булево, выводит сообщение о найденных запретах +// при проверке данных +// +// ИдентификаторДанных - Ссылка на объект данных для получения представления, +// используемого в сообщении о запрете +// +// СтандартнаяОбработка - Булево, если Ложь, проверка запрета изменения (для пользователей) +// будет пропущена. +// +// УзелПланаОбмена - Неопределено, ПланыОбменаСсылка.<Имя плана обмена> - +// если задать узел будет выполнена проверка запрета загрузки. +// +// НайденныеЗапреты - Структура. Если найден запрет изменения данных, значит есть +// свойство НайденЗапретИзмененияДанных, если найден запрет +// загрузки данных, значит есть свойство НайденЗапретЗагрузкиДанных +// +// Возвращаемое значение: +// Булево +// +Функция НайденЗапретИзмененияДанных(Знач ДанныеДляПроверки, Знач СообщитьОЗапрете, Знач ИдентификаторДанных = Неопределено, Знач СтандартнаяОбработка = Истина, Знач УзелПланаОбмена = Неопределено, НайденныеЗапреты = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(ДанныеДляПроверки) = Тип("Структура") Тогда + ИдентификаторДанных = ДанныеДляПроверки.ИдентификаторДанных; + ТаблицаДанных = ДанныеДляПроверки.Таблица; + ДанныеДляПроверки = ПолучитьДанныеДляПроверки(ДанныеДляПроверки); + Иначе + Если ИдентификаторДанных = Неопределено Тогда + ТаблицаДанных = Неопределено; + Иначе + ТаблицаДанных = ИдентификаторДанных.Метаданные().ПолноеИмя(); + КонецЕсли; + КонецЕсли; + + // Приведение пустых ссылок объектов к единому значению Неопределено + Для каждого Строка Из ДанныеДляПроверки Цикл + Если НЕ ЗначениеЗаполнено(Строка.Объект) Тогда + Строка.Объект = Неопределено; + КонецЕсли; + КонецЦикла; + + // Свертка лишних строк, чтобы сократить число проверок и сообщений + ДанныеДляПроверки.Свернуть("Дата, Раздел, Объект"); + // Назначение ключей для отдельных проверок + ДанныеДляПроверки.Колонки.Добавить("КлючСтроки", Новый ОписаниеТипов("Число")); + ТекущийКлючСтроки = 0; + Для каждого Строка Из ДанныеДляПроверки Цикл + Строка.КлючСтроки = ТекущийКлючСтроки; + ТекущийКлючСтроки = ТекущийКлючСтроки + 1; + КонецЦикла; + + СвойстваВстраивания = ДатыЗапретаИзмененияПовтИсп.СвойстваРазделов(); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ДанныеДляПроверки", ДанныеДляПроверки); + Запрос.УстановитьПараметр("БезРазделовИОбъектов", СвойстваВстраивания.БезРазделовИОбъектов); + Запрос.УстановитьПараметр("ВсеРазделыБезОбъектов", СвойстваВстраивания.ВсеРазделыБезОбъектов); + Запрос.УстановитьПараметр("ЕдинственныйРаздел", СвойстваВстраивания.ЕдинственныйРаздел); + Запрос.УстановитьПараметр("ПервыйРаздел", ?(СвойстваВстраивания.ЕдинственныйРаздел, + СвойстваВстраивания.ТипыОбъектовРазделов[0].Раздел, + Неопределено)); + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Запрос.Текст = + "ВЫБРАТЬ + | ДанныеДляПроверки.Раздел, + | ДанныеДляПроверки.Объект, + | ДанныеДляПроверки.Дата, + | ДанныеДляПроверки.КлючСтроки + |ПОМЕСТИТЬ НачальныеДанные + |ИЗ + | &ДанныеДляПроверки КАК ДанныеДляПроверки + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Данные.Раздел, + | Данные.Объект, + | МИНИМУМ(Данные.Дата) КАК Дата, + | МИНИМУМ(Данные.КлючСтроки) КАК КлючСтроки + |ПОМЕСТИТЬ ДанныеДляПроверки + |ИЗ + | (ВЫБРАТЬ + | ВЫБОР + | КОГДА &БезРазделовИОбъектов + | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) + | КОГДА &ЕдинственныйРаздел + | ТОГДА &ПервыйРаздел + | ИНАЧЕ НачальныеДанные.Раздел + | КОНЕЦ КАК Раздел, + | ВЫБОР + | КОГДА &БезРазделовИОбъектов + | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) + | ИНАЧЕ ВЫБОР + | КОГДА &ВсеРазделыБезОбъектов + | ИЛИ НачальныеДанные.Объект = НЕОПРЕДЕЛЕНО + | ТОГДА ВЫБОР + | КОГДА &ЕдинственныйРаздел + | ТОГДА &ПервыйРаздел + | ИНАЧЕ НачальныеДанные.Раздел + | КОНЕЦ + | ИНАЧЕ НачальныеДанные.Объект + | КОНЕЦ + | КОНЕЦ КАК Объект, + | НачальныеДанные.Дата КАК Дата, + | НачальныеДанные.КлючСтроки КАК КлючСтроки + | ИЗ + | НачальныеДанные КАК НачальныеДанные) КАК Данные + | + |СГРУППИРОВАТЬ ПО + | Данные.Раздел, + | Данные.Объект + | + |ИМЕЮЩИЕ + | (НЕ(Данные.Объект <> Данные.Раздел + | И ТИПЗНАЧЕНИЯ(Данные.Объект) = ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения))) И + | (НЕ(Данные.Объект <> Данные.Раздел + | И Данные.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка)))"; + Запрос.Выполнить(); + + НайденныеЗапреты = Новый Структура; + Запрос.УстановитьПараметр("ПустыеСсылкиУзловПлановОбмена", СвойстваВстраивания.ПустыеСсылкиУзловПлановОбмена); + Сообщение = ""; + + Если СтандартнаяОбработка Тогда + Запрос.УстановитьПараметр("ВидНазначенияДатЗапретаДляВсех", Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей); + Запрос.УстановитьПараметр("Пользователь", Пользователи.АвторизованныйПользователь()); + Если НайденЗапретИзмененияИлиЗагрузкиДанных(Запрос, СообщитьОЗапрете, ИдентификаторДанных, ТаблицаДанных, СвойстваВстраивания, Ложь, Сообщение) Тогда + НайденныеЗапреты.Вставить("НайденЗапретИзмененияДанных", Сообщение); + КонецЕсли; + КонецЕсли; + + Если УзелПланаОбмена <> Неопределено Тогда + Запрос.УстановитьПараметр("ВидНазначенияДатЗапретаДляВсех", Перечисления.ВидыНазначенияДатЗапрета.ДляВсехУзловПлановОбмена); + Запрос.УстановитьПараметр("Пользователь", УзелПланаОбмена); + Если НайденЗапретИзмененияИлиЗагрузкиДанных(Запрос, СообщитьОЗапрете, ИдентификаторДанных, ТаблицаДанных, СвойстваВстраивания, Истина, Сообщение) Тогда + НайденныеЗапреты.Вставить("НайденЗапретЗагрузкиДанных", Сообщение); + КонецЕсли; + КонецЕсли; + + Возврат НайденныеЗапреты.Количество() > 0; + +КонецФункции + +// Возвращает готовую пустую таблицу значений (с колонками Дата, Раздел, Объект) +// для заполнения и последующей передачи в функцию +// ДатыЗапретаИзменения.НайденЗапретИзмененияДанных() +// +Функция ШаблонДанныхДляПроверки() Экспорт + + Возврат ДатыЗапретаИзмененияПовтИсп.ШаблонДанныхДляПроверки().Скопировать(); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события // Обработчик подписки на событие ПередЗаписью для типов: // СправочникОбъект @@ -216,174 +536,13 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// МЕТОДЫ ОБЩЕГО НАЗНАЧЕНИЯ -// - -// Функция ИзменениеЗапрещено() проверяет элемент данных -// на запрет его изменения. -// Для работы функции требуется настройка -// процедуры ДанныеДляПроверкиЗапретаИзменения() -// модуля ДатыЗапретаИзмененияПереопределяемый -// Если Данные - полное имя объекта метаданных, -// тогда данные для проверки будут получены -// из базы данных через ИдентификаторДанных -// Если Данные - объект, тогда данные для проверки -// будут получены из экземпляра объекта или -// набора записей -// Если Данные - объект и задан ИдентификаторДанных, -// тогда будут выполнены две проверки, причем -// данные будут получены и из объекта/набора записей, -// и из базы данных через ИдентификаторДанных -// -// Параметры: -// Данные - Строка (полное имя объекта метаданных), -// СправочникОбъект.<Имя>, -// ДокументОбъект.<Имя>, -// ПланВидовХарактеристикОбъект.<Имя>, -// ПланСчетовОбъект.<Имя>, -// ПланВидовРасчетаОбъект.<Имя>, -// БизнесПроцессОбъект.<Имя>, -// ЗадачаОбъект.<Имя>, -// ПланОбменаОбъект.<Имя>, -// РегистрСведенийНаборЗаписей.<Имя>, -// РегистрНакопленияНаборЗаписей.<Имя>, -// РегистрБухгалтерииНаборЗаписей.<Имя>, -// РегистрРасчетаНаборЗаписей.<Имя>, -// -// ИдентификаторДанных - СправочникСсылка.<Имя>, -// ДокументСсылка.<Имя>, -// ПланВидовХарактеристикСсылка.<Имя>, -// ПланСчетовСсылка.<Имя>, -// ПланВидовРасчетаСсылка.<Имя>, -// БизнесПроцессСсылка.<Имя>, -// ЗадачаСсылка.<Имя>, -// ПланОбменаСсылка.<Имя>, -// РегистрСведенийНаборЗаписей.<Имя>.Отбор, -// РегистрНакопленияНаборЗаписей.<Имя>.Отбор, -// РегистрБухгалтерииНаборЗаписей.<Имя>.Отбор, -// РегистрРасчетаНаборЗаписей.<Имя>.Отбор, -// -// СообщитьОЗапрете - Булево, если Истина, будет выведено сообщение пользователю -// о запрете изменения данных. -// -// СтандартнаяОбработка - Булево, если Ложь, проверка запрета изменения (для пользователей) -// будет пропущена. -// -// УзелПланаОбмена - Неопределено, ПланыОбменаСсылка.<Имя плана обмена> - -// если задать узел будет выполнена проверка запрета загрузки. -// -// Возвращаемое значение: -// Булево. -// -Функция ИзменениеЗапрещено(Знач Данные, Знач ИдентификаторДанных = Неопределено, Знач СообщитьОЗапрете = Истина, Знач СтандартнаяОбработка = Истина, Знач УзелПланаОбмена = Неопределено, НайденныеЗапреты = Неопределено) Экспорт - - ДанныеДляПроверки = Новый Структура; - ДанныеДляПроверки.Вставить("Таблица", Данные); - ДанныеДляПроверки.Вставить("ИдентификаторДанных", ИдентификаторДанных); - ДанныеДляПроверки.Вставить("ЗначенияПолейИзОбъекта", Неопределено); - - Если ТипЗнч(Данные) <> Тип("Строка") Тогда - ДанныеДляПроверки.Таблица = Данные.Метаданные().ПолноеИмя(); - ДанныеДляПроверки.ЗначенияПолейИзОбъекта = ИзвлечьЗначенияПолейИзОбъекта(Данные); - КонецЕсли; - - НайденныеЗапреты = Неопределено; - ЗапретНайден = ДатыЗапретаИзмененияВызовСервера.НайденЗапретИзмененияДанных(ДанныеДляПроверки, СообщитьОЗапрете, , СтандартнаяОбработка, УзелПланаОбмена, НайденныеЗапреты); - - Если ЗапретНайден И ТипЗнч(Данные) <> Тип("Строка") Тогда - Для каждого КлючИЗначение Из НайденныеЗапреты Цикл - Данные.ДополнительныеСвойства.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); - КонецЦикла; - КонецЕсли; - - Возврат ЗапретНайден; - -КонецФункции - -// Функция ОбъектПриЧтенииНаСервере встраивается -// формы элементов данных (элементов справочников, -// документов, записей регистров, и др.), которые проверяются -// на запрет изменения с целью установить блокировку изменения -// и уведомления пользователя о наличии запрета. -// -// Параметры: -// Форма - УправляемаяФорма, -// -// ИдентификаторДанных - СправочникСсылка.<Имя>, -// ДокументСсылка.<Имя>, -// ПланВидовХарактеристикСсылка.<Имя>, -// ПланСчетовСсылка.<Имя>, -// ПланВидовРасчетаСсылка.<Имя>, -// БизнесПроцессСсылка.<Имя>, -// ЗадачаСсылка.<Имя>, -// ПланОбменаСсылка.<Имя>, -// РегистрСведенийНаборЗаписей.Отбор, -// РегистрНакопленияНаборЗаписей.Отбор, -// РегистрБухгалтерииНаборЗаписей.Отбор, -// РегистрРасчетаНаборЗаписей.Отбор, -// -Функция ОбъектПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт - - ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ТекущийОбъект)); - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - - Если ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных) Тогда - // Приведение менеджера записи к набору записей с одной записью - МенеджерДанных = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); - Источник = МенеджерДанных.СоздатьНаборЗаписей(); - Для каждого ЭлементОтбора Из Источник.Отбор Цикл - ЭлементОтбора.Установить(ТекущийОбъект[ЭлементОтбора.Имя], Истина); - КонецЦикла; - ИдентификаторДанных = Источник.Отбор; - ЗаполнитьЗначенияСвойств(Источник.Добавить(), ТекущийОбъект); - Иначе - Источник = ТекущийОбъект; - ИдентификаторДанных = ТекущийОбъект.Ссылка; - КонецЕсли; - - СтандартнаяОбработка = Истина; - УзелПланаОбмена = Неопределено; - СообщитьОЗапрете = Ложь; - // - Если ПропуститьПроверкуЗапретаИзменения(Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Тогда - Возврат Истина; - КонецЕсли; - - Если ИзменениеЗапрещено(ПолноеИмя, ИдентификаторДанных, СообщитьОЗапрете, СтандартнаяОбработка, УзелПланаОбмена) Тогда - Форма.ТолькоПросмотр = Истина; - КонецЕсли; - -КонецФункции - -// Процедура ДобавитьСтроку добавляет -// строку описание источников данных для -// проверки запрета изменения -// -// Параметры: -// Таблица - Строка -// ПолеДаты - Строка -// Раздел - Строка -// ПолеОбъекта - Строка -// -Процедура ДобавитьСтроку(Данные, Таблица, ПолеДаты, Раздел = "", ПолеОбъекта = "") Экспорт - - НоваяСтрока = Данные.Добавить(); - НоваяСтрока.Таблица = Таблица; - НоваяСтрока.ПолеДаты = ПолеДаты; - НоваяСтрока.Раздел = Раздел; - НоваяСтрока.ПолеОбъекта = ПолеОбъекта; - -КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Только для внутреннего использования Функция ПропуститьПроверкуЗапретаИзменения(Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) - Если ДатыЗапретаИзмененияВызовСервера.ЗапретИзмененияДанныхНеИспользуется() Тогда + Если ЗапретИзмененияДанныхНеИспользуется() Тогда Возврат Истина; КонецЕсли; @@ -397,7 +556,25 @@ КонецФункции -// Только для внутреннего использования +Функция ЗапретИзмененияДанныхНеИспользуется() + + УстановитьПривилегированныйРежим(Истина); + + Если ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + Возврат Истина; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения"; + + Возврат Запрос.Выполнить().Пустой(); + +КонецФункции + Функция ИзвлечьЗначенияПолейИзОбъекта(Знач Данные) ЗначенияПолей = Новый Структура; @@ -428,8 +605,7 @@ КонецФункции -// Только для внутреннего использования -Функция ПолучитьИсточникиДанных(Отбор) Экспорт +Функция ПолучитьИсточникиДанных(Отбор) ИсточникиДанныхТаблиц = ДатыЗапретаИзмененияПовтИсп.ИсточникиДанныхДляПроверкиЗапретаИзменения(); // @@ -446,8 +622,7 @@ КонецФункции -// Только для внутреннего использования -Функция ПолучитьПоляРегистра(ИсточникиДанных, Таблица) Экспорт +Функция ПолучитьПоляРегистра(ИсточникиДанных, Таблица) ПоляРегистра = ","; @@ -492,8 +667,7 @@ КонецФункции -// Только для внутреннего использования -Функция ПолучитьСтруктуруПолейОбъекта(ОбъектМетаданных, ИсточникиДанных, Таблица) Экспорт +Функция ПолучитьСтруктуруПолейОбъекта(ОбъектМетаданных, ИсточникиДанных, Таблица) СтруктураПолей = Новый Структура; @@ -510,7 +684,6 @@ КонецФункции -// Только для внутреннего использования Процедура ДобавитьПоле(ОбъектМетаданных, ИсточникДанных, СтруктураПолей, Поле, Таблица, ВидПоляДляСообщений) Поля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Поле, "."); @@ -565,90 +738,515 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ДАННЫХ ПОДСИСТЕМЫ - -// Добавляет в список Обработчики процедуры-обработчики обновления, -// необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт +Функция ПолучитьДанныеДляПроверки(ПредварительныеДанные) - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.1.12"; - Обработчик.Процедура = "ДатыЗапретаИзменения.ЗаменитьНеопределеноНаЗначениеПеречисления"; + ДанныеДляПроверки = ШаблонДанныхДляПроверки(); - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.3.2"; - Обработчик.Процедура = "ДатыЗапретаИзменения.УдалитьПустыеДатыЗапретаПоУмолчанию"; - -КонецПроцедуры - -// Обработчик обновления выполняет замену значения Неопределено -// измерения Пользователь регистра сведений ДатыЗапретаИзменения -// на значение Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей -// -Процедура ЗаменитьНеопределеноНаЗначениеПеречисления() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - НаборЗаписей = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Пользователь.Установить(Неопределено); - НаборЗаписей.Прочитать(); - Если НаборЗаписей.Количество() > 0 Тогда - Таблица = НаборЗаписей.Выгрузить(); - НаборЗаписей.Отбор.Пользователь.Установить(Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей); - Таблица.ЗаполнитьЗначения(Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей, "Пользователь"); - НаборЗаписей.Загрузить(Таблица); - НаборЗаписей.Записать(); + ИсточникиДанныхТаблиц = ДатыЗапретаИзмененияПовтИсп.ИсточникиДанныхДляПроверкиЗапретаИзменения(); + // + Отбор = Новый Структура("Таблица", ПредварительныеДанные.Таблица); + ИсточникиДанных = ИсточникиДанныхТаблиц.НайтиСтроки(Отбор); + // + Если ИсточникиДанных.Количество() = 0 Тогда + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для проверки запрета изменения не найдены + |источники данных для таблицы ""%1"".'"), + Отбор.Таблица)); КонецЕсли; -КонецПроцедуры - -// Обработчик обновления выполняет удаление пустых дат запрета заданных -// для всех пользователей или всех планов обмена, т.е. "По умолчанию", -// т.к. по умолчанию даты запрета пустые. -// -Процедура УдалитьПустыеДатыЗапретаПоУмолчанию() Экспорт + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПредварительныеДанные.Таблица); - УстановитьПривилегированныйРежим(Истина); + ЭтоНаборЗаписей = ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных); + КлассОМ = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Отбор.Таблица, ".")[0]; - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ПустаяДата", '00000000'); - Запрос.Текст = - "ВЫБРАТЬ - | ДатыЗапретаИзменения.Раздел, - | ДатыЗапретаИзменения.Объект, - | ДатыЗапретаИзменения.Пользователь - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - |ГДЕ - | ДатыЗапретаИзменения.Пользователь В (ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей), ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехУзловПлановОбмена)) - | И ДатыЗапретаИзменения.ДатаЗапрета = &ПустаяДата - | И ДатыЗапретаИзменения.ОписаниеДатыЗапрета = """""; + ЗначенияПолей = Неопределено; - Выгрузка = Запрос.Выполнить().Выгрузить(); - - Если Выгрузка.Количество() > 0 Тогда - МенеджерЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьМенеджерЗаписи(); - НачатьТранзакцию(); - Попытка - Для каждого Строка Из Выгрузка Цикл - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Строка); - МенеджерЗаписи.Прочитать(); - Если МенеджерЗаписи.Выбран() Тогда - МенеджерЗаписи.Удалить(); + Если ПредварительныеДанные.ИдентификаторДанных <> Неопределено Тогда + Если ЭтоНаборЗаписей Тогда + // Заполнение значений полей из базы данных + Поля = ПолучитьПоляРегистра(ИсточникиДанных, Отбор.Таблица); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | &Поля + |ИЗ + | &Таблица КАК Таблица + |ГДЕ + | &УсловиеОтбора"; + ВставитьПараметрыИУсловиеОтбора(Запрос, ПредварительныеДанные.ИдентификаторДанных); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Поля", Поля); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", Отбор.Таблица); + ЗначенияПолей = Запрос.Выполнить().Выгрузить(); + ЗначенияПолей.Свернуть(Поля); + // + ИначеЕсли ЗначениеЗаполнено(ПредварительныеДанные.ИдентификаторДанных) Тогда + // Заполнение значений полей из базы данных + ЗначенияПолей = ПолучитьСтруктуруПолейОбъекта(ОбъектМетаданных, ИсточникиДанных, Отбор.Таблица); + // Установка значений полей + Поля = ""; + Для каждого Поле Из ЗначенияПолей Цикл + Если ОбъектМетаданных.ТабличныеЧасти.Найти(Поле.Ключ) <> Неопределено Тогда + Поля = Поля + Поле.Ключ + ".(" + Поле.Значение + "),"; + Иначе + Поля = Поля + Поле.Ключ + ","; КонецЕсли; КонецЦикла; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; + Поля = Лев(Поля, СтрДлина(Поля)-1); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | &Поля + |ИЗ + | &Таблица КАК Таблица + |ГДЕ + | Таблица.Ссылка = &Ссылка"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Поля", Поля); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", Отбор.Таблица); + Запрос.УстановитьПараметр("Ссылка", ПредварительныеДанные.ИдентификаторДанных); + ДанныеИзБазы = Запрос.Выполнить().Выгрузить(); + Для каждого Поле Из ЗначенияПолей Цикл + Если ОбъектМетаданных.ТабличныеЧасти.Найти(Поле.Ключ) <> Неопределено Тогда + Поля = Поле.Значение; + ЗначенияПолей[Поле.Ключ] = ДанныеИзБазы[0][Поле.Ключ].Скопировать(, Поля); + ЗначенияПолей[Поле.Ключ].Свернуть(Поля); + Иначе + ЗначенияПолей[Поле.Ключ] = ДанныеИзБазы[0][Поле.Ключ]; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Если ПредварительныеДанные.ЗначенияПолейИзОбъекта <> Неопределено Тогда + ДобавитьДанныеДляПроверки(ДанныеДляПроверки, ИсточникиДанных, ПредварительныеДанные.ЗначенияПолейИзОбъекта, ЭтоНаборЗаписей, ОбъектМетаданных); + КонецЕсли; + + Если ЗначенияПолей <> Неопределено Тогда + ДобавитьДанныеДляПроверки(ДанныеДляПроверки, ИсточникиДанных, ЗначенияПолей, ЭтоНаборЗаписей, ОбъектМетаданных); + КонецЕсли; + + Возврат ДанныеДляПроверки; + +КонецФункции + +Процедура ДобавитьДанныеДляПроверки(Знач ДанныеДляПроверки, Знач ИсточникиДанных, Знач ЗначенияПолей, Знач ЭтоНаборЗаписей, Знач ОбъектМетаданных) + + Для каждого ИсточникДанных Из ИсточникиДанных Цикл + Если ЭтоНаборЗаписей Тогда + Для каждого Строка Из ЗначенияПолей Цикл + ДобавитьСтрокуДанных(Строка, Строка, ИсточникДанных, ДанныеДляПроверки); + КонецЦикла; + Иначе + ДопИсточникДанных = Новый Структура("ПолеДаты, Раздел, ПолеОбъекта, Таблица"); + ЗаполнитьЗначенияСвойств(ДопИсточникДанных, ИсточникДанных); + ТЧПоляДаты = ""; + ПозицияТочки = Найти(ДопИсточникДанных.ПолеДаты, "."); + Если ПозицияТочки <> 0 Тогда + ТЧПоляДаты = Лев( ДопИсточникДанных.ПолеДаты, ПозицияТочки-1); + Если ОбъектМетаданных.ТабличныеЧасти.Найти(ТЧПоляДаты) = Неопределено Тогда + ТЧПоляДаты = ""; + Иначе + ДопИсточникДанных.ПолеДаты = Сред(ДопИсточникДанных.ПолеДаты, ПозицияТочки+1); + КонецЕсли; + КонецЕсли; + ТЧПоляОбъекта = ""; + ПолеОбъекта = ""; + Если ЗначениеЗаполнено(ДопИсточникДанных.ПолеОбъекта) Тогда + ПозицияТочки = Найти(ДопИсточникДанных.ПолеОбъекта, "."); + Если ПозицияТочки <> 0 Тогда + ТЧПоляОбъекта = Лев( ДопИсточникДанных.ПолеОбъекта, ПозицияТочки-1); + Если ОбъектМетаданных.ТабличныеЧасти.Найти(ТЧПоляОбъекта) = Неопределено Тогда + ТЧПоляОбъекта = ""; + Иначе + ДопИсточникДанных.ПолеОбъекта = Сред(ДопИсточникДанных.ПолеОбъекта, ПозицияТочки+1); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если ЗначениеЗаполнено(ТЧПоляДаты) И ЗначениеЗаполнено(ТЧПоляОбъекта) Тогда + Если ТЧПоляДаты = ТЧПоляОбъекта Тогда + Для каждого Строка Из ЗначенияПолей[ТЧПоляДаты] Цикл + ДобавитьСтрокуДанных(Строка, Строка, ДопИсточникДанных, ДанныеДляПроверки); + КонецЦикла; + Иначе + Для каждого СтрокаДаты Из ЗначенияПолей[ТЧПоляДаты] Цикл + Для каждого СтрокаОбъекта Из ЗначенияПолей[ТЧПоляОбъекта] Цикл + ДобавитьСтрокуДанных(СтрокаДаты, СтрокаОбъекта, ДопИсточникДанных, ДанныеДляПроверки); + КонецЦикла; + КонецЦикла; + КонецЕсли; + ИначеЕсли ЗначениеЗаполнено(ТЧПоляДаты) Тогда + Для каждого Строка Из ЗначенияПолей[ТЧПоляДаты] Цикл + ДобавитьСтрокуДанных(Строка, ЗначенияПолей, ДопИсточникДанных, ДанныеДляПроверки); + КонецЦикла; + ИначеЕсли ЗначениеЗаполнено(ТЧПоляОбъекта) Тогда + Для каждого Строка Из ЗначенияПолей[ТЧПоляОбъекта] Цикл + ДобавитьСтрокуДанных(ЗначенияПолей, Строка, ДопИсточникДанных, ДанныеДляПроверки); + КонецЦикла; + Иначе + ДобавитьСтрокуДанных(ЗначенияПолей, ЗначенияПолей, ДопИсточникДанных, ДанныеДляПроверки); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьСтрокуДанных(Знач СтрокаДаты, Знач СтрокаОбъекта, Знач ИсточникДанных, Знач ДанныеДляПроверки) + + НоваяСтрока = ДанныеДляПроверки.Добавить(); + УстановитьЗначениеПоля(СтрокаДаты, НоваяСтрока.Дата, ИсточникДанных.ПолеДаты); + Если ЗначениеЗаполнено(ИсточникДанных.Раздел) Тогда + НоваяСтрока.Раздел = ПланыВидовХарактеристик.РазделыДатЗапретаИзменения[ИсточникДанных.Раздел]; + КонецЕсли; + Если ЗначениеЗаполнено(ИсточникДанных.ПолеОбъекта) Тогда + УстановитьЗначениеПоля(СтрокаОбъекта, НоваяСтрока.Объект, ИсточникДанных.ПолеОбъекта) КонецЕсли; КонецПроцедуры +Процедура УстановитьЗначениеПоля(Знач Строка, ПолеДанных, Знач ПолеИсточника) + + ПозицияТочки = Найти(ПолеИсточника, "."); + Если ПозицияТочки = 0 Тогда + ПолеДанных = Строка[ПолеИсточника]; + Иначе + Значение = Строка[Лев(ПолеИсточника, ПозицияТочки-1)]; + Реквизит = Сред(ПолеИсточника, ПозицияТочки+1); + ПолеДанных = ПолучитьЗначениеРеквизита(Значение, Реквизит); + КонецЕсли; + +КонецПроцедуры + +Функция НайденЗапретИзмененияИлиЗагрузкиДанных(Запрос, СообщитьОЗапрете, ИдентификаторДанных, ТаблицаДанных, СвойстваВстраивания, ПоискЗапретовЗагрузки, Текст) + + Запрос.Текст = + "ВЫБРАТЬ + | ДанныеДляПроверки.КлючСтроки, + | ДатыЗапретаИзменения.Раздел, + | ДатыЗапретаИзменения.Объект, + | ДанныеДляПроверки.Дата, + | ДатыЗапретаИзменения.Пользователь, + | ДатыЗапретаИзменения.ДатаЗапрета, + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Перечисление.ВидыНазначенияДатЗапрета) + | ТОГДА 0 + | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыПользователей) + | ТОГДА 1 + | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей) + | ТОГДА 1 + | КОГДА ДатыЗапретаИзменения.Пользователь В (&ПустыеСсылкиУзловПлановОбмена) + | ТОГДА 1 + | ИНАЧЕ 10 + | КОНЕЦ + ВЫБОР + | КОГДА ДатыЗапретаИзменения.Объект = ДатыЗапретаИзменения.Раздел + | ТОГДА 0 + | ИНАЧЕ 100 + | КОНЕЦ + ВЫБОР + | КОГДА ДатыЗапретаИзменения.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) + | ТОГДА 0 + | ИНАЧЕ 1000 + | КОНЕЦ КАК Приоритет + |ПОМЕСТИТЬ ДатыЗапретаБезУчетаПриоритета + |ИЗ + | ДанныеДляПроверки КАК ДанныеДляПроверки + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + | ПО (ДатыЗапретаИзменения.Раздел В (ДанныеДляПроверки.Раздел, ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка))) + | И (ДатыЗапретаИзменения.Объект В (ДанныеДляПроверки.Объект, ДатыЗапретаИзменения.Раздел)) + | И (ВЫБОР + | КОГДА ДатыЗапретаИзменения.Пользователь = &ВидНазначенияДатЗапретаДляВсех + | ТОГДА ИСТИНА + | КОГДА ДатыЗапретаИзменения.Пользователь = &Пользователь + | ИЛИ ДатыЗапретаИзменения.Пользователь В (&ПустыеСсылкиУзловПлановОбмена) + | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИПЗНАЧЕНИЯ(&Пользователь) + | ТОГДА ИСТИНА + | ИНАЧЕ ДатыЗапретаИзменения.Пользователь В + | (ВЫБРАТЬ + | СоставыГруппПользователей.ГруппаПользователей + | ИЗ + | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ГДЕ + | СоставыГруппПользователей.Пользователь = &Пользователь) + | КОНЕЦ) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДанныеДляПроверки.Раздел, + | ДанныеДляПроверки.Объект, + | ДанныеДляПроверки.Дата, + | ДанныеДляПроверки.КлючСтроки + |ИЗ + | ДанныеДляПроверки КАК ДанныеДляПроверки + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ДатыЗапрета.КлючСтроки КАК КлючСтроки, + | ДатыЗапрета.Раздел, + | ДатыЗапрета.Объект, + | ДатыЗапрета.Пользователь, + | ДатыЗапрета.ДатаЗапрета + |ИЗ + | ДатыЗапретаБезУчетаПриоритета КАК ДатыЗапрета + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ + | ДатыЗапрета.КлючСтроки КАК КлючСтроки, + | ДатыЗапрета.Приоритет КАК Приоритет, + | МАКСИМУМ(ДатыЗапрета.ДатаЗапрета) КАК ДатаЗапрета + | ИЗ + | ДатыЗапретаБезУчетаПриоритета КАК ДатыЗапрета + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ + | ДатыЗапрета.КлючСтроки КАК КлючСтроки, + | МАКСИМУМ(ДатыЗапрета.Приоритет) КАК Приоритет + | ИЗ + | ДатыЗапретаБезУчетаПриоритета КАК ДатыЗапрета + | + | СГРУППИРОВАТЬ ПО + | ДатыЗапрета.КлючСтроки) КАК МаксимальныеПриоритет + | ПО ДатыЗапрета.КлючСтроки = МаксимальныеПриоритет.КлючСтроки + | И ДатыЗапрета.Приоритет = МаксимальныеПриоритет.Приоритет + | + | СГРУППИРОВАТЬ ПО + | ДатыЗапрета.КлючСтроки, + | ДатыЗапрета.Приоритет) КАК ПриоритетныеДатыЗапрета + | ПО ДатыЗапрета.КлючСтроки = ПриоритетныеДатыЗапрета.КлючСтроки + | И ДатыЗапрета.Приоритет = ПриоритетныеДатыЗапрета.Приоритет + | И ДатыЗапрета.ДатаЗапрета = ПриоритетныеДатыЗапрета.ДатаЗапрета + |ГДЕ + | ДатыЗапрета.ДатаЗапрета >= ДатыЗапрета.Дата + | + |УПОРЯДОЧИТЬ ПО + | КлючСтроки + |ИТОГИ ПО + | КлючСтроки + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ ДатыЗапретаБезУчетаПриоритета"; + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + ЗапретыДанных = РезультатыЗапроса[2].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + + Если ЗапретыДанных.Строки.Количество() > 0 Тогда + // + Проверки = РезультатыЗапроса[1].Выгрузить(); + Текст = ПолучитьПредставлениеДанных(ИдентификаторДанных, ТаблицаДанных); + Если ЗначениеЗаполнено(Текст) Тогда + Если ПоискЗапретовЗагрузки Тогда + Текст = Текст + НСтр("ru = ' запрещено загружать в запрещенный период.'") + Символы.ПС + Символы.ПС; + Иначе + Текст = Текст + НСтр("ru = ' запрещено изменять или перемещать в запрещенный период.'") + Символы.ПС + Символы.ПС; + КонецЕсли; + КонецЕсли; + // + Для каждого ОписаниеЗапретов Из ЗапретыДанных.Строки Цикл + Запреты = ОписаниеЗапретов.Строки; + Проверка = Проверки.Найти(ОписаниеЗапретов.КлючСтроки, "КлючСтроки"); + Если Проверка.Раздел = Проверка.Объект Тогда + Если Проверка.Раздел = ПланыВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка() Тогда + Текст = Текст + НСтр("ru = 'Дате %1'"); + Иначе + Текст = Текст + НСтр("ru = 'Дате %1 по разделу ""%2""'"); + КонецЕсли; + ИначеЕсли СвойстваВстраивания.ЕдинственныйРаздел Тогда + Текст = Текст + НСтр("ru = 'Дате %1 по объекту ""%3""'"); + Иначе + Текст = Текст + НСтр("ru = 'Дате %1 по объекту ""%3"" раздела ""%2""'"); + КонецЕсли; + Текст = Текст + " "; + Если Запреты.Количество() = 1 Тогда + Текст = Текст + НСтр("ru = 'соответствует запрет изменения данных'") + " "; + Иначе + Текст = Текст + НСтр("ru = 'соответствуют запреты изменения данных:'") + Символы.ПС; + КонецЕсли; + Для каждого Запрет Из Запреты Цикл + Текст = Текст + ?(Запреты.Количество() = 1, "", Символы.ПС + "- "); + Если Запрет.Пользователь = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей Тогда + Текст = Текст + НСтр("ru = 'для всех пользователей'"); + // + ИначеЕсли Запрет.Пользователь = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехУзловПлановОбмена Тогда + Текст = Текст + НСтр("ru = 'для всех узлов планов обмена'"); + // + ИначеЕсли ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") + ИЛИ ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + Текст = Текст + НСтр("ru = 'для группы пользователей ""%4""'"); + // + ИначеЕсли ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.Пользователи") + ИЛИ ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + Текст = Текст + НСтр("ru = 'для пользователя ""%4""'"); + // + ИначеЕсли ЗначениеЗаполнено(Запрет.Пользователь) Тогда + Текст = Текст + НСтр("ru = 'для узла ""%4""'"); + Иначе + Текст = Текст + НСтр("ru = 'для всех узлов ""%6""'"); + КонецЕсли; + Текст = Текст + " " + НСтр("ru = 'по %5'"); + Если НЕ СвойстваВстраивания.БезРазделовИОбъектов Тогда + Если ЗначениеЗаполнено(Запрет.Раздел) Тогда + Если Запрет.Объект = Запрет.Раздел Тогда + Текст = Текст + " " + НСтр("ru = '(запрет установлен на раздел ""%2"")'"); + ИначеЕсли СвойстваВстраивания.ЕдинственныйРаздел Тогда + Текст = Текст + " " + НСтр("ru = '(запрет установлен на объект ""%3"")'"); + Иначе + Текст = Текст + " " + НСтр("ru = '(запрет установлен на объект ""%3"" раздела ""%2"")'"); + КонецЕсли; + Иначе + Текст = Текст + " " + НСтр("ru = '(установлена общая дата запрета)'"); + КонецЕсли; + КонецЕсли; + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Текст, + Формат(Проверка.Дата, "ДФ=dd.MM.yyyy"), + Проверка.Раздел, + Проверка.Объект, + Запрет.Пользователь, + Формат(Запрет.ДатаЗапрета, "ДФ=dd.MM.yyyy"), + Запрет.Пользователь.Метаданные().Представление()) + + Символы.ПС; + КонецЦикла; + Текст = Текст + Символы.ПС; + КонецЦикла; + + Если СообщитьОЗапрете Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст); + КонецЕсли; + + Если ТранзакцияАктивна() Тогда + // Если поиск запретов выполняется в транзакции, а не ПриЧтенииНаСервере, + // тогда выполняется запись в журнал регистрации + ЗаписьЖурналаРегистрации(?(ПоискЗапретовЗагрузки, + НСтр("ru = 'Даты запрета изменения.Найдены запреты загрузки'"), + НСтр("ru = 'Даты запрета изменения.Найдены запрета изменения'")), + УровеньЖурналаРегистрации.Ошибка, + , + , + Текст, + РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); + КонецЕсли; + КонецЕсли; + + Возврат ЗапретыДанных.Строки.Количество() > 0; + +КонецФункции + +Функция ПолучитьЗначениеРеквизита(Ссылка, ИмяРеквизита) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЕстьNULL(" + ИмяРеквизита + ", Неопределено) КАК ЗначениеРеквизита + |ИЗ + | " + Ссылка.Метаданные().ПолноеИмя() + " КАК Таблица + |ГДЕ + | Таблица.Ссылка = &Ссылка"; + Запрос.УстановитьПараметр("Ссылка", Ссылка); + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.ЗначениеРеквизита; + +КонецФункции + +Функция ПолучитьПредставлениеДанных(ИдентификаторДанных, ТаблицаДанных) + + ПредставлениеДанных = ""; + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ТаблицаДанных); + + Если Метаданные.РегистрыСведений.Содержит(ОбъектМетаданных) Тогда + ПредставлениеДанных = НСтр("ru = 'Записи регистра сведений ""%1""'"); + + ИначеЕсли Метаданные.РегистрыНакопления.Содержит(ОбъектМетаданных) Тогда + ПредставлениеДанных = НСтр("ru = 'Записи регистра накопления ""%1""'"); + + ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМетаданных) Тогда + ПредставлениеДанных = НСтр("ru = 'Записи регистра бухгалтерии ""%1""'"); + + ИначеЕсли Метаданные.РегистрыРасчета.Содержит(ОбъектМетаданных) Тогда + ПредставлениеДанных = НСтр("ru = 'Записи регистра расчета ""%1""'"); + + КонецЕсли; + + Если ЗначениеЗаполнено(ПредставлениеДанных) Тогда + + КоличествоПолей = 0; + Для каждого ЭлементОтбора Из ИдентификаторДанных Цикл + КоличествоПолей = КоличествоПолей + 1; + КонецЦикла; + + Если КоличествоПолей = 1 Тогда + ПредставлениеДанных = ПредставлениеДанных + " " + НСтр("ru = 'с полем'") + " " + Строка(ИдентификаторДанных); + + ИначеЕсли КоличествоПолей > 1 Тогда + ПредставлениеДанных = ПредставлениеДанных + " " + НСтр("ru = 'с полями'") + " " + Строка(ИдентификаторДанных); + КонецЕсли; + Иначе + Если Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда + ПредставлениеДанных = НСтр("ru = 'Элемент справочника ""%1""'"); + + ИначеЕсли Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда + ПредставлениеДанных = НСтр("ru = 'Документ'"); + + ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных) Тогда + ПредставлениеДанных = НСтр("ru = 'План видов характеристик ""%1""'"); + + ИначеЕсли Метаданные.ПланыСчетов.Содержит(ОбъектМетаданных) Тогда + ПредставлениеДанных = НСтр("ru = 'План счетов ""%1""'"); + + ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(ОбъектМетаданных) Тогда + ПредставлениеДанных = НСтр("ru = 'План видов расчета ""%1""'"); + + ИначеЕсли Метаданные.БизнесПроцессы.Содержит(ОбъектМетаданных) Тогда + ПредставлениеДанных = НСтр("ru = 'Бизнес-процесс'"); + + ИначеЕсли Метаданные.Задачи.Содержит(ОбъектМетаданных) Тогда + ПредставлениеДанных = НСтр("ru = 'Задача'"); + + ИначеЕсли Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) Тогда + ПредставлениеДанных = НСтр("ru = 'План обмена ""%1""'"); + КонецЕсли; + + Если ЗначениеЗаполнено(ПредставлениеДанных) И ЗначениеЗаполнено(ИдентификаторДанных) Тогда + ПредставлениеДанных = ПредставлениеДанных + " " + Строка(ИдентификаторДанных); + Иначе + ПредставлениеДанных = ""; + КонецЕсли; + КонецЕсли; + + ПредставлениеДанных = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредставлениеДанных, ОбъектМетаданных.Синоним); + + Возврат ПредставлениеДанных; + +КонецФункции + +// Функция преобразует Отбор в условие на языке запросов и вставляет в запрос +// +// Параметры: +// Запрос - Запрос +// Отбор - РегистрСведенийНаборЗаписей.Отбор, +// РегистрНакопленияНаборЗаписей.Отбор, +// РегистрБухгалтерииНаборЗаписей.Отбор, +// РегистрРасчетаНаборЗаписей.Отбор, +// ПсевдонимТаблицы - Строка - псевдоним регистра в запросе. +// МестоУсловияОтбора - Строка - Идентификатор места условия в запросе, +// например, &УсловиеОтбора +// +// Возвращаемое значение: +// Строка +// +Процедура ВставитьПараметрыИУсловиеОтбора(Запрос, Отбор, ПсевдонимТаблицы = "Таблица", МестоУсловияОтбора = "&УсловиеОтбора") + + Условие = ""; + Для каждого ЭлементОтбора Из Отбор Цикл + + Если ЭлементОтбора.Использование Тогда + Если НЕ ПустаяСтрока(Условие) Тогда + Условие = Условие + Символы.ПС + "И "; + КонецЕсли; + Запрос.УстановитьПараметр(ЭлементОтбора.Имя, ЭлементОтбора.Значение); + Условие = Условие + ПсевдонимТаблицы + "." + ЭлементОтбора.Имя + " = &" + ЭлементОтбора.Имя; + КонецЕсли; + КонецЦикла; + Условие = ?(ЗначениеЗаполнено(Условие), Условие, "Истина"); + Запрос.Текст = СтрЗаменить(Запрос.Текст, МестоУсловияОтбора, Условие); + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo b/SSL/src/CommonModules/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo index cad0fa451..1f64031f2 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo +++ b/SSL/src/CommonModules/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияВызовСервера/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияВызовСервера/Module.bsl deleted file mode 100644 index 1cd135267..000000000 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияВызовСервера/Module.bsl +++ /dev/null @@ -1,847 +0,0 @@ - -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Общего назначения -// - -// Функция НайденЗапретИзмененияДанных выполняет -// поиск дат запрета по проверяемым данным -// для авторизованного пользователя и/или узла плана обмена -// -// Параметры: -// ДанныеДляПроверки - таблица, возвращаемая функцией -// ДатыЗапретаИзмененияПовтИсп.ШаблонДанныхДляПроверки() -// -// СообщитьОЗапрете - Булево, выводит сообщение о найденных запретах -// при проверке данных -// -// ИдентификаторДанных - Ссылка на объект данных для получения представления, -// используемого в сообщении о запрете -// -// СтандартнаяОбработка - Булево, если Ложь, проверка запрета изменения (для пользователей) -// будет пропущена. -// -// УзелПланаОбмена - Неопределено, ПланыОбменаСсылка.<Имя плана обмена> - -// если задать узел будет выполнена проверка запрета загрузки. -// -// НайденныеЗапреты - Структура. Если найден запрет изменения данных, значит есть -// свойство НайденЗапретИзмененияДанных, если найден запрет -// загрузки данных, значит есть свойство НайденЗапретЗагрузкиДанных -// -// Возвращаемое значение: -// Булево -// -Функция НайденЗапретИзмененияДанных(Знач ДанныеДляПроверки, Знач СообщитьОЗапрете, Знач ИдентификаторДанных = Неопределено, Знач СтандартнаяОбработка = Истина, Знач УзелПланаОбмена = Неопределено, НайденныеЗапреты = Неопределено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ТипЗнч(ДанныеДляПроверки) = Тип("Структура") Тогда - ИдентификаторДанных = ДанныеДляПроверки.ИдентификаторДанных; - ТаблицаДанных = ДанныеДляПроверки.Таблица; - ДанныеДляПроверки = ПолучитьДанныеДляПроверки(ДанныеДляПроверки); - Иначе - Если ИдентификаторДанных = Неопределено Тогда - ТаблицаДанных = Неопределено; - Иначе - ТаблицаДанных = ИдентификаторДанных.Метаданные().ПолноеИмя(); - КонецЕсли; - КонецЕсли; - - // Приведение пустых ссылок объектов к единому значению Неопределено - Для каждого Строка Из ДанныеДляПроверки Цикл - Если НЕ ЗначениеЗаполнено(Строка.Объект) Тогда - Строка.Объект = Неопределено; - КонецЕсли; - КонецЦикла; - - // Свертка лишних строк, чтобы сократить число проверок и сообщений - ДанныеДляПроверки.Свернуть("Дата, Раздел, Объект"); - // Назначение ключей для отдельных проверок - ДанныеДляПроверки.Колонки.Добавить("КлючСтроки", Новый ОписаниеТипов("Число")); - ТекущийКлючСтроки = 0; - Для каждого Строка Из ДанныеДляПроверки Цикл - Строка.КлючСтроки = ТекущийКлючСтроки; - ТекущийКлючСтроки = ТекущийКлючСтроки + 1; - КонецЦикла; - - СвойстваВстраивания = ДатыЗапретаИзмененияПовтИсп.СвойстваРазделов(); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ДанныеДляПроверки", ДанныеДляПроверки); - Запрос.УстановитьПараметр("БезРазделовИОбъектов", СвойстваВстраивания.БезРазделовИОбъектов); - Запрос.УстановитьПараметр("ВсеРазделыБезОбъектов", СвойстваВстраивания.ВсеРазделыБезОбъектов); - Запрос.УстановитьПараметр("ЕдинственныйРаздел", СвойстваВстраивания.ЕдинственныйРаздел); - Запрос.УстановитьПараметр("ПервыйРаздел", ?(СвойстваВстраивания.ЕдинственныйРаздел, - СвойстваВстраивания.ТипыОбъектовРазделов[0].Раздел, - Неопределено)); - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - Запрос.Текст = - "ВЫБРАТЬ - | ДанныеДляПроверки.Раздел, - | ДанныеДляПроверки.Объект, - | ДанныеДляПроверки.Дата, - | ДанныеДляПроверки.КлючСтроки - |ПОМЕСТИТЬ НачальныеДанные - |ИЗ - | &ДанныеДляПроверки КАК ДанныеДляПроверки - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Данные.Раздел, - | Данные.Объект, - | МИНИМУМ(Данные.Дата) КАК Дата, - | МИНИМУМ(Данные.КлючСтроки) КАК КлючСтроки - |ПОМЕСТИТЬ ДанныеДляПроверки - |ИЗ - | (ВЫБРАТЬ - | ВЫБОР - | КОГДА &БезРазделовИОбъектов - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | КОГДА &ЕдинственныйРаздел - | ТОГДА &ПервыйРаздел - | ИНАЧЕ НачальныеДанные.Раздел - | КОНЕЦ КАК Раздел, - | ВЫБОР - | КОГДА &БезРазделовИОбъектов - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | ИНАЧЕ ВЫБОР - | КОГДА &ВсеРазделыБезОбъектов - | ИЛИ НачальныеДанные.Объект = НЕОПРЕДЕЛЕНО - | ТОГДА ВЫБОР - | КОГДА &ЕдинственныйРаздел - | ТОГДА &ПервыйРаздел - | ИНАЧЕ НачальныеДанные.Раздел - | КОНЕЦ - | ИНАЧЕ НачальныеДанные.Объект - | КОНЕЦ - | КОНЕЦ КАК Объект, - | НачальныеДанные.Дата КАК Дата, - | НачальныеДанные.КлючСтроки КАК КлючСтроки - | ИЗ - | НачальныеДанные КАК НачальныеДанные) КАК Данные - | - |СГРУППИРОВАТЬ ПО - | Данные.Раздел, - | Данные.Объект - | - |ИМЕЮЩИЕ - | (НЕ(Данные.Объект <> Данные.Раздел - | И ТИПЗНАЧЕНИЯ(Данные.Объект) = ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения))) И - | (НЕ(Данные.Объект <> Данные.Раздел - | И Данные.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка)))"; - Запрос.Выполнить(); - - НайденныеЗапреты = Новый Структура; - Запрос.УстановитьПараметр("ПустыеСсылкиУзловПлановОбмена", СвойстваВстраивания.ПустыеСсылкиУзловПлановОбмена); - Сообщение = ""; - - Если СтандартнаяОбработка Тогда - Запрос.УстановитьПараметр("ВидНазначенияДатЗапретаДляВсех", Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей); - Запрос.УстановитьПараметр("Пользователь", Пользователи.АвторизованныйПользователь()); - Если НайденЗапретИзмененияИлиЗагрузкиДанных(Запрос, СообщитьОЗапрете, ИдентификаторДанных, ТаблицаДанных, СвойстваВстраивания, Ложь, Сообщение) Тогда - НайденныеЗапреты.Вставить("НайденЗапретИзмененияДанных", Сообщение); - КонецЕсли; - КонецЕсли; - - Если УзелПланаОбмена <> Неопределено Тогда - Запрос.УстановитьПараметр("ВидНазначенияДатЗапретаДляВсех", Перечисления.ВидыНазначенияДатЗапрета.ДляВсехУзловПлановОбмена); - Запрос.УстановитьПараметр("Пользователь", УзелПланаОбмена); - Если НайденЗапретИзмененияИлиЗагрузкиДанных(Запрос, СообщитьОЗапрете, ИдентификаторДанных, ТаблицаДанных, СвойстваВстраивания, Истина, Сообщение) Тогда - НайденныеЗапреты.Вставить("НайденЗапретЗагрузкиДанных", Сообщение); - КонецЕсли; - КонецЕсли; - - Возврат НайденныеЗапреты.Количество() > 0; - -КонецФункции - -// Процедура ПересчитатьТекущиеЗначенияОтносительныхДатЗапрета выполняет -// пересчет и обновление текущий значений относительных дат -// запрета по состоянию на текущую дату -// -// Параметры: -// ЗаписатьОписаниеРезультатаВЖурналРегистрации - Булево -// ОписаниеРезультата - Строка -// -Процедура ПересчитатьТекущиеЗначенияОтносительныхДатЗапрета(ЗаписатьОписаниеРезультатаВЖурналРегистрации = Истина, ОписаниеРезультата = "") Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ДатыЗапретаИзменения.Раздел, - | ДатыЗапретаИзменения.Объект, - | ДатыЗапретаИзменения.Пользователь, - | ДатыЗапретаИзменения.ДатаЗапрета, - | ДатыЗапретаИзменения.ОписаниеДатыЗапрета - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения"; - - Выборка = Запрос.Выполнить().Выбрать(); - - ТекущаяДатаНаСервере = НачалоДня(ТекущаяДатаСеанса()); - МенеджерЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьМенеджерЗаписи(); - ПредставлениеОшибки = ""; - Отказ = Ложь; - ЕстьОбновленныеДаты = Ложь; - НетОтносительныхДат = Истина; - - Пока Выборка.Следующий() Цикл - РассчитаннаяДатаЗапрета = РассчитатьДатуЗапретаПоОписанию(ТекущаяДатаНаСервере, Выборка.ОписаниеДатыЗапрета); - // - Если ЗначениеЗаполнено(РассчитаннаяДатаЗапрета) Тогда - НетОтносительныхДат = Ложь; - Если Выборка.ДатаЗапрета <> РассчитаннаяДатаЗапрета Тогда - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Выборка); - МенеджерЗаписи.Прочитать(); - Если МенеджерЗаписи.Выбран() Тогда - МенеджерЗаписи.ДатаЗапрета = РассчитаннаяДатаЗапрета; - Попытка - МенеджерЗаписи.Записать(); - ЕстьОбновленныеДаты = Истина; - Исключение - Отказ = Истина; - ПредставлениеОшибки = ПредставлениеОшибки + Символы.ПС + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если НетОтносительныхДат Тогда - ОписаниеРезультата = НСтр("ru = 'Относительные даты запрета не заданы.'"); - // - ИначеЕсли Отказ Тогда - Если ЕстьОбновленныеДаты Тогда - ОписаниеРезультата = НСтр("ru = 'Пересчитаны некоторые текущие значения относительных дат запрета. - |При пересчете возникли ошибки:'"); - Иначе - ОписаниеРезультата = НСтр("ru = 'Не пересчитаны текущие значения дат запрета. - |При пересчете возникли ошибки:'"); - КонецЕсли; - ОписаниеРезультата = ОписаниеРезультата + ПредставлениеОшибки; - Иначе - Если ЕстьОбновленныеДаты Тогда - ОписаниеРезультата = НСтр("ru = 'Успешно пересчитаны текущие значения относительных дат запрета.'"); - Иначе - ОписаниеРезультата = НСтр("ru = 'Сегодня уже пересчитаны текущие значения относительных дат запрета.'"); - КонецЕсли; - КонецЕсли; - - Если ЗаписатьОписаниеРезультатаВЖурналРегистрации Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Даты запрета изменения.Пересчет относительных дат'"), - ?(Отказ, УровеньЖурналаРегистрации.Ошибка, УровеньЖурналаРегистрации.Информация), - , - , - ОписаниеРезультата, - РежимТранзакцииЗаписиЖурналаРегистрации.Независимая); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Обработчик регламентного задания - -// Обработчик регламентного задания ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения -Процедура ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения() Экспорт - - ПересчитатьТекущиеЗначенияОтносительныхДатЗапрета(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// - -// Функция проверяет наличие установленных запретов -// изменения данных -// -Функция ЗапретИзмененияДанныхНеИспользуется() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда - Возврат Истина; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения"; - - Возврат Запрос.Выполнить().Пустой(); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ -// - -Функция НайденЗапретИзмененияИлиЗагрузкиДанных(Запрос, СообщитьОЗапрете, ИдентификаторДанных, ТаблицаДанных, СвойстваВстраивания, ПоискЗапретовЗагрузки, Текст) - - Запрос.Текст = - "ВЫБРАТЬ - | ДанныеДляПроверки.КлючСтроки, - | ДатыЗапретаИзменения.Раздел, - | ДатыЗапретаИзменения.Объект, - | ДанныеДляПроверки.Дата, - | ДатыЗапретаИзменения.Пользователь, - | ДатыЗапретаИзменения.ДатаЗапрета, - | ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Перечисление.ВидыНазначенияДатЗапрета) - | ТОГДА 0 - | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыПользователей) - | ТОГДА 1 - | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей) - | ТОГДА 1 - | КОГДА ДатыЗапретаИзменения.Пользователь В (&ПустыеСсылкиУзловПлановОбмена) - | ТОГДА 1 - | ИНАЧЕ 10 - | КОНЕЦ + ВЫБОР - | КОГДА ДатыЗапретаИзменения.Объект = ДатыЗапретаИзменения.Раздел - | ТОГДА 0 - | ИНАЧЕ 100 - | КОНЕЦ + ВЫБОР - | КОГДА ДатыЗапретаИзменения.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | ТОГДА 0 - | ИНАЧЕ 1000 - | КОНЕЦ КАК Приоритет - |ПОМЕСТИТЬ ДатыЗапретаБезУчетаПриоритета - |ИЗ - | ДанныеДляПроверки КАК ДанныеДляПроверки - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - | ПО (ДатыЗапретаИзменения.Раздел В (ДанныеДляПроверки.Раздел, ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка))) - | И (ДатыЗапретаИзменения.Объект В (ДанныеДляПроверки.Объект, ДатыЗапретаИзменения.Раздел)) - | И (ВЫБОР - | КОГДА ДатыЗапретаИзменения.Пользователь = &ВидНазначенияДатЗапретаДляВсех - | ТОГДА ИСТИНА - | КОГДА ДатыЗапретаИзменения.Пользователь = &Пользователь - | ИЛИ ДатыЗапретаИзменения.Пользователь В (&ПустыеСсылкиУзловПлановОбмена) - | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИПЗНАЧЕНИЯ(&Пользователь) - | ТОГДА ИСТИНА - | ИНАЧЕ ДатыЗапретаИзменения.Пользователь В - | (ВЫБРАТЬ - | СоставыГруппПользователей.ГруппаПользователей - | ИЗ - | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - | ГДЕ - | СоставыГруппПользователей.Пользователь = &Пользователь) - | КОНЕЦ) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ДанныеДляПроверки.Раздел, - | ДанныеДляПроверки.Объект, - | ДанныеДляПроверки.Дата, - | ДанныеДляПроверки.КлючСтроки - |ИЗ - | ДанныеДляПроверки КАК ДанныеДляПроверки - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ДатыЗапрета.КлючСтроки КАК КлючСтроки, - | ДатыЗапрета.Раздел, - | ДатыЗапрета.Объект, - | ДатыЗапрета.Пользователь, - | ДатыЗапрета.ДатаЗапрета - |ИЗ - | ДатыЗапретаБезУчетаПриоритета КАК ДатыЗапрета - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | ДатыЗапрета.КлючСтроки КАК КлючСтроки, - | ДатыЗапрета.Приоритет КАК Приоритет, - | МАКСИМУМ(ДатыЗапрета.ДатаЗапрета) КАК ДатаЗапрета - | ИЗ - | ДатыЗапретаБезУчетаПриоритета КАК ДатыЗапрета - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | ДатыЗапрета.КлючСтроки КАК КлючСтроки, - | МАКСИМУМ(ДатыЗапрета.Приоритет) КАК Приоритет - | ИЗ - | ДатыЗапретаБезУчетаПриоритета КАК ДатыЗапрета - | - | СГРУППИРОВАТЬ ПО - | ДатыЗапрета.КлючСтроки) КАК МаксимальныеПриоритет - | ПО ДатыЗапрета.КлючСтроки = МаксимальныеПриоритет.КлючСтроки - | И ДатыЗапрета.Приоритет = МаксимальныеПриоритет.Приоритет - | - | СГРУППИРОВАТЬ ПО - | ДатыЗапрета.КлючСтроки, - | ДатыЗапрета.Приоритет) КАК ПриоритетныеДатыЗапрета - | ПО ДатыЗапрета.КлючСтроки = ПриоритетныеДатыЗапрета.КлючСтроки - | И ДатыЗапрета.Приоритет = ПриоритетныеДатыЗапрета.Приоритет - | И ДатыЗапрета.ДатаЗапрета = ПриоритетныеДатыЗапрета.ДатаЗапрета - |ГДЕ - | ДатыЗапрета.ДатаЗапрета >= ДатыЗапрета.Дата - | - |УПОРЯДОЧИТЬ ПО - | КлючСтроки - |ИТОГИ ПО - | КлючСтроки - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |УНИЧТОЖИТЬ ДатыЗапретаБезУчетаПриоритета"; - - РезультатыЗапроса = Запрос.ВыполнитьПакет(); - - ЗапретыДанных = РезультатыЗапроса[2].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); - - Если ЗапретыДанных.Строки.Количество() > 0 Тогда - // - Проверки = РезультатыЗапроса[1].Выгрузить(); - Текст = ПолучитьПредставлениеДанных(ИдентификаторДанных, ТаблицаДанных); - Если ЗначениеЗаполнено(Текст) Тогда - Если ПоискЗапретовЗагрузки Тогда - Текст = Текст + НСтр("ru = ' запрещено загружать в запрещенный период.'") + Символы.ПС + Символы.ПС; - Иначе - Текст = Текст + НСтр("ru = ' запрещено изменять или перемещать в запрещенный период.'") + Символы.ПС + Символы.ПС; - КонецЕсли; - КонецЕсли; - // - Для каждого ОписаниеЗапретов Из ЗапретыДанных.Строки Цикл - Запреты = ОписаниеЗапретов.Строки; - Проверка = Проверки.Найти(ОписаниеЗапретов.КлючСтроки, "КлючСтроки"); - Если Проверка.Раздел = Проверка.Объект Тогда - Если Проверка.Раздел = ПланыВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка() Тогда - Текст = Текст + НСтр("ru = 'Дате %1'"); - Иначе - Текст = Текст + НСтр("ru = 'Дате %1 по разделу ""%2""'"); - КонецЕсли; - ИначеЕсли СвойстваВстраивания.ЕдинственныйРаздел Тогда - Текст = Текст + НСтр("ru = 'Дате %1 по объекту ""%3""'"); - Иначе - Текст = Текст + НСтр("ru = 'Дате %1 по объекту ""%3"" раздела ""%2""'"); - КонецЕсли; - Текст = Текст + " "; - Если Запреты.Количество() = 1 Тогда - Текст = Текст + НСтр("ru = 'соответствует запрет изменения данных'") + " "; - Иначе - Текст = Текст + НСтр("ru = 'соответствуют запреты изменения данных:'") + Символы.ПС; - КонецЕсли; - Для каждого Запрет Из Запреты Цикл - Текст = Текст + ?(Запреты.Количество() = 1, "", Символы.ПС + "- "); - Если Запрет.Пользователь = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей Тогда - Текст = Текст + НСтр("ru = 'для всех пользователей'"); - // - ИначеЕсли Запрет.Пользователь = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехУзловПлановОбмена Тогда - Текст = Текст + НСтр("ru = 'для всех узлов планов обмена'"); - // - ИначеЕсли ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") - ИЛИ ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда - Текст = Текст + НСтр("ru = 'для группы пользователей ""%4""'"); - // - ИначеЕсли ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.Пользователи") - ИЛИ ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда - Текст = Текст + НСтр("ru = 'для пользователя ""%4""'"); - // - ИначеЕсли ЗначениеЗаполнено(Запрет.Пользователь) Тогда - Текст = Текст + НСтр("ru = 'для узла ""%4""'"); - Иначе - Текст = Текст + НСтр("ru = 'для всех узлов ""%6""'"); - КонецЕсли; - Текст = Текст + " " + НСтр("ru = 'по %5'"); - Если НЕ СвойстваВстраивания.БезРазделовИОбъектов Тогда - Если ЗначениеЗаполнено(Запрет.Раздел) Тогда - Если Запрет.Объект = Запрет.Раздел Тогда - Текст = Текст + " " + НСтр("ru = '(запрет установлен на раздел ""%2"")'"); - ИначеЕсли СвойстваВстраивания.ЕдинственныйРаздел Тогда - Текст = Текст + " " + НСтр("ru = '(запрет установлен на объект ""%3"")'"); - Иначе - Текст = Текст + " " + НСтр("ru = '(запрет установлен на объект ""%3"" раздела ""%2"")'"); - КонецЕсли; - Иначе - Текст = Текст + " " + НСтр("ru = '(установлена общая дата запрета)'"); - КонецЕсли; - КонецЕсли; - Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Текст, - Формат(Проверка.Дата, "ДФ=dd.MM.yyyy"), - Проверка.Раздел, - Проверка.Объект, - Запрет.Пользователь, - Формат(Запрет.ДатаЗапрета, "ДФ=dd.MM.yyyy"), - Метаданные.НайтиПоТипу(ТипЗнч(Запрет.Пользователь)).Представление()) - + Символы.ПС; - КонецЦикла; - Текст = Текст + Символы.ПС; - КонецЦикла; - - Если СообщитьОЗапрете Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст); - КонецЕсли; - - Если ТранзакцияАктивна() Тогда - // Если поиск запретов выполняется в транзакции, а не ПриЧтенииНаСервере, - // тогда выполняется запись в журнал регистрации - ЗаписьЖурналаРегистрации(?(ПоискЗапретовЗагрузки, - НСтр("ru = 'Даты запрета изменения.Найдены запреты загрузки'"), - НСтр("ru = 'Даты запрета изменения.Найдены запрета изменения'")), - УровеньЖурналаРегистрации.Ошибка, - , - , - Текст, - РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - КонецЕсли; - КонецЕсли; - - Возврат ЗапретыДанных.Строки.Количество() > 0; - -КонецФункции - -Функция ПолучитьПредставлениеДанных(ИдентификаторДанных, ТаблицаДанных) - - ПредставлениеДанных = ""; - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ТаблицаДанных); - - Если Метаданные.РегистрыСведений.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Записи регистра сведений ""%1""'"); - - ИначеЕсли Метаданные.РегистрыНакопления.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Записи регистра накопления ""%1""'"); - - ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Записи регистра бухгалтерии ""%1""'"); - - ИначеЕсли Метаданные.РегистрыРасчета.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Записи регистра расчета ""%1""'"); - - КонецЕсли; - - Если ЗначениеЗаполнено(ПредставлениеДанных) Тогда - - КоличествоПолей = 0; - Для каждого ЭлементОтбора Из ИдентификаторДанных Цикл - КоличествоПолей = КоличествоПолей + 1; - КонецЦикла; - - Если КоличествоПолей = 1 Тогда - ПредставлениеДанных = ПредставлениеДанных + " " + НСтр("ru = 'с полем'") + " " + Строка(ИдентификаторДанных); - - ИначеЕсли КоличествоПолей > 1 Тогда - ПредставлениеДанных = ПредставлениеДанных + " " + НСтр("ru = 'с полями'") + " " + Строка(ИдентификаторДанных); - КонецЕсли; - Иначе - Если Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Элемент справочника ""%1""'"); - - ИначеЕсли Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Документ'"); - - ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'План видов характеристик ""%1""'"); - - ИначеЕсли Метаданные.ПланыСчетов.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'План счетов ""%1""'"); - - ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'План видов расчета ""%1""'"); - - ИначеЕсли Метаданные.БизнесПроцессы.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Бизнес-процесс'"); - - ИначеЕсли Метаданные.Задачи.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'Задача'"); - - ИначеЕсли Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) Тогда - ПредставлениеДанных = НСтр("ru = 'План обмена ""%1""'"); - КонецЕсли; - - Если ЗначениеЗаполнено(ПредставлениеДанных) И ЗначениеЗаполнено(ИдентификаторДанных) Тогда - ПредставлениеДанных = ПредставлениеДанных + " " + Строка(ИдентификаторДанных); - Иначе - ПредставлениеДанных = ""; - КонецЕсли; - КонецЕсли; - - ПредставлениеДанных = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредставлениеДанных, ОбъектМетаданных.Синоним); - - Возврат ПредставлениеДанных; - -КонецФункции - -Функция РассчитатьДатуЗапретаПоОписанию(ТекущаяДатаНаСервере, ОписаниеДатыЗапрета) - - Сутки = 60*60*24; - ВариантДатыЗапрета = ""; - КоличествоДнейРазрешения = 0; - - Если ЗначениеЗаполнено(ОписаниеДатыЗапрета) Тогда - ВариантДатыЗапрета = СтрПолучитьСтроку(ОписаниеДатыЗапрета, 1); - Строка2 = СтрПолучитьСтроку(ОписаниеДатыЗапрета, 2); - Если ЗначениеЗаполнено(Строка2) Тогда - Попытка - КоличествоДнейРазрешения = Число(Строка2); - Исключение - КонецПопытки; - КонецЕсли; - КонецЕсли; - - Если ВариантДатыЗапрета = "КонецПрошлогоГода" Тогда - ТекущаяДатаЗапрета = НачалоГода(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоГода(ТекущаяДатаЗапрета) - Сутки; - - ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоКвартала" Тогда - ТекущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаЗапрета) - Сутки; - - ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоМесяца" Тогда - ТекущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаЗапрета) - Сутки; - - ИначеЕсли ВариантДатыЗапрета = "КонецПрошлойНедели" Тогда - ТекущаяДатаЗапрета = НачалоНедели(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоНедели(ТекущаяДатаЗапрета) - Сутки; - - ИначеЕсли ВариантДатыЗапрета = "ПредыдущийДень" Тогда - ТекущаяДатаЗапрета = НачалоДня(ТекущаяДатаНаСервере) - Сутки; - ПредыдущаяДатаЗапрета = НачалоДня(ТекущаяДатаЗапрета) - Сутки; - Иначе - ТекущаяДатаЗапрета = '00000000'; - КонецЕсли; - - Если ЗначениеЗаполнено(ТекущаяДатаЗапрета) Тогда - СрокРазрешения = ТекущаяДатаЗапрета + КоличествоДнейРазрешения * Сутки; - Если НЕ ТекущаяДатаНаСервере > СрокРазрешения Тогда - ТекущаяДатаЗапрета = ПредыдущаяДатаЗапрета; - КонецЕсли; - КонецЕсли; - - Возврат ТекущаяДатаЗапрета; - -КонецФункции - -Функция ПолучитьДанныеДляПроверки(ПредварительныеДанные) - - ДанныеДляПроверки = ДатыЗапретаИзмененияПовтИсп.ШаблонДанныхДляПроверки().Скопировать(); - - ИсточникиДанныхТаблиц = ДатыЗапретаИзмененияПовтИсп.ИсточникиДанныхДляПроверкиЗапретаИзменения(); - // - Отбор = Новый Структура("Таблица", ПредварительныеДанные.Таблица); - ИсточникиДанных = ИсточникиДанныхТаблиц.НайтиСтроки(Отбор); - // - Если ИсточникиДанных.Количество() = 0 Тогда - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для проверки запрета изменения не найдены - |источники данных для таблицы ""%1"".'"), - Отбор.Таблица)); - КонецЕсли; - - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПредварительныеДанные.Таблица); - - ЭтоНаборЗаписей = ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных); - КлассОМ = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Отбор.Таблица, ".")[0]; - - ЗначенияПолей = Неопределено; - - Если ПредварительныеДанные.ИдентификаторДанных <> Неопределено Тогда - Если ЭтоНаборЗаписей Тогда - // Заполнение значений полей из базы данных - Поля = ДатыЗапретаИзменения.ПолучитьПоляРегистра(ИсточникиДанных, Отбор.Таблица); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | &Поля - |ИЗ - | &Таблица КАК Таблица - |ГДЕ - | &УсловиеОтбора"; - ВставитьПараметрыИУсловиеОтбора(Запрос, ПредварительныеДанные.ИдентификаторДанных); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Поля", Поля); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", Отбор.Таблица); - ЗначенияПолей = Запрос.Выполнить().Выгрузить(); - ЗначенияПолей.Свернуть(Поля); - // - ИначеЕсли ЗначениеЗаполнено(ПредварительныеДанные.ИдентификаторДанных) Тогда - // Заполнение значений полей из базы данных - ЗначенияПолей = ДатыЗапретаИзменения.ПолучитьСтруктуруПолейОбъекта(ОбъектМетаданных, ИсточникиДанных, Отбор.Таблица); - // Установка значений полей - Поля = ""; - Для каждого Поле Из ЗначенияПолей Цикл - Если ОбъектМетаданных.ТабличныеЧасти.Найти(Поле.Ключ) <> Неопределено Тогда - Поля = Поля + Поле.Ключ + ".(" + Поле.Значение + "),"; - Иначе - Поля = Поля + Поле.Ключ + ","; - КонецЕсли; - КонецЦикла; - Поля = Лев(Поля, СтрДлина(Поля)-1); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | &Поля - |ИЗ - | &Таблица КАК Таблица - |ГДЕ - | Таблица.Ссылка = &Ссылка"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Поля", Поля); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", Отбор.Таблица); - Запрос.УстановитьПараметр("Ссылка", ПредварительныеДанные.ИдентификаторДанных); - ДанныеИзБазы = Запрос.Выполнить().Выгрузить(); - Для каждого Поле Из ЗначенияПолей Цикл - Если ОбъектМетаданных.ТабличныеЧасти.Найти(Поле.Ключ) <> Неопределено Тогда - Поля = Поле.Значение; - ЗначенияПолей[Поле.Ключ] = ДанныеИзБазы[0][Поле.Ключ].Скопировать(, Поля); - ЗначенияПолей[Поле.Ключ].Свернуть(Поля); - Иначе - ЗначенияПолей[Поле.Ключ] = ДанныеИзБазы[0][Поле.Ключ]; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если ПредварительныеДанные.ЗначенияПолейИзОбъекта <> Неопределено Тогда - ДобавитьДанныеДляПроверки(ДанныеДляПроверки, ИсточникиДанных, ПредварительныеДанные.ЗначенияПолейИзОбъекта, ЭтоНаборЗаписей, ОбъектМетаданных); - КонецЕсли; - - Если ЗначенияПолей <> Неопределено Тогда - ДобавитьДанныеДляПроверки(ДанныеДляПроверки, ИсточникиДанных, ЗначенияПолей, ЭтоНаборЗаписей, ОбъектМетаданных); - КонецЕсли; - - Возврат ДанныеДляПроверки; - -КонецФункции - -Процедура ДобавитьДанныеДляПроверки(Знач ДанныеДляПроверки, Знач ИсточникиДанных, Знач ЗначенияПолей, Знач ЭтоНаборЗаписей, Знач ОбъектМетаданных) - - Для каждого ИсточникДанных Из ИсточникиДанных Цикл - Если ЭтоНаборЗаписей Тогда - Для каждого Строка Из ЗначенияПолей Цикл - ДобавитьСтрокуДанных(Строка, Строка, ИсточникДанных, ДанныеДляПроверки); - КонецЦикла; - Иначе - ДопИсточникДанных = Новый Структура("ПолеДаты, Раздел, ПолеОбъекта, Таблица"); - ЗаполнитьЗначенияСвойств(ДопИсточникДанных, ИсточникДанных); - ТЧПоляДаты = ""; - ПозицияТочки = Найти(ДопИсточникДанных.ПолеДаты, "."); - Если ПозицияТочки <> 0 Тогда - ТЧПоляДаты = Лев( ДопИсточникДанных.ПолеДаты, ПозицияТочки-1); - Если ОбъектМетаданных.ТабличныеЧасти.Найти(ТЧПоляДаты) = Неопределено Тогда - ТЧПоляДаты = ""; - Иначе - ДопИсточникДанных.ПолеДаты = Сред(ДопИсточникДанных.ПолеДаты, ПозицияТочки+1); - КонецЕсли; - КонецЕсли; - ТЧПоляОбъекта = ""; - ПолеОбъекта = ""; - Если ЗначениеЗаполнено(ДопИсточникДанных.ПолеОбъекта) Тогда - ПозицияТочки = Найти(ДопИсточникДанных.ПолеОбъекта, "."); - Если ПозицияТочки <> 0 Тогда - ТЧПоляОбъекта = Лев( ДопИсточникДанных.ПолеОбъекта, ПозицияТочки-1); - Если ОбъектМетаданных.ТабличныеЧасти.Найти(ТЧПоляОбъекта) = Неопределено Тогда - ТЧПоляОбъекта = ""; - Иначе - ДопИсточникДанных.ПолеОбъекта = Сред(ДопИсточникДанных.ПолеОбъекта, ПозицияТочки+1); - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если ЗначениеЗаполнено(ТЧПоляДаты) И ЗначениеЗаполнено(ТЧПоляОбъекта) Тогда - Если ТЧПоляДаты = ТЧПоляОбъекта Тогда - Для каждого Строка Из ЗначенияПолей[ТЧПоляДаты] Цикл - ДобавитьСтрокуДанных(Строка, Строка, ДопИсточникДанных, ДанныеДляПроверки); - КонецЦикла; - Иначе - Для каждого СтрокаДаты Из ЗначенияПолей[ТЧПоляДаты] Цикл - Для каждого СтрокаОбъекта Из ЗначенияПолей[ТЧПоляОбъекта] Цикл - ДобавитьСтрокуДанных(СтрокаДаты, СтрокаОбъекта, ДопИсточникДанных, ДанныеДляПроверки); - КонецЦикла; - КонецЦикла; - КонецЕсли; - ИначеЕсли ЗначениеЗаполнено(ТЧПоляДаты) Тогда - Для каждого Строка Из ЗначенияПолей[ТЧПоляДаты] Цикл - ДобавитьСтрокуДанных(Строка, ЗначенияПолей, ДопИсточникДанных, ДанныеДляПроверки); - КонецЦикла; - ИначеЕсли ЗначениеЗаполнено(ТЧПоляОбъекта) Тогда - Для каждого Строка Из ЗначенияПолей[ТЧПоляОбъекта] Цикл - ДобавитьСтрокуДанных(ЗначенияПолей, Строка, ДопИсточникДанных, ДанныеДляПроверки); - КонецЦикла; - Иначе - ДобавитьСтрокуДанных(ЗначенияПолей, ЗначенияПолей, ДопИсточникДанных, ДанныеДляПроверки); - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Процедура ДобавитьСтрокуДанных(Знач СтрокаДаты, Знач СтрокаОбъекта, Знач ИсточникДанных, Знач ДанныеДляПроверки) - - НоваяСтрока = ДанныеДляПроверки.Добавить(); - УстановитьЗначениеПоля(СтрокаДаты, НоваяСтрока.Дата, ИсточникДанных.ПолеДаты); - Если ЗначениеЗаполнено(ИсточникДанных.Раздел) Тогда - НоваяСтрока.Раздел = ПланыВидовХарактеристик.РазделыДатЗапретаИзменения[ИсточникДанных.Раздел]; - КонецЕсли; - Если ЗначениеЗаполнено(ИсточникДанных.ПолеОбъекта) Тогда - УстановитьЗначениеПоля(СтрокаОбъекта, НоваяСтрока.Объект, ИсточникДанных.ПолеОбъекта) - КонецЕсли; - -КонецПроцедуры - -Процедура УстановитьЗначениеПоля(Знач Строка, ПолеДанных, Знач ПолеИсточника) - - ПозицияТочки = Найти(ПолеИсточника, "."); - Если ПозицияТочки = 0 Тогда - ПолеДанных = Строка[ПолеИсточника]; - Иначе - Значение = Строка[Лев(ПолеИсточника, ПозицияТочки-1)]; - Реквизит = Сред(ПолеИсточника, ПозицияТочки+1); - ПолеДанных = ПолучитьЗначениеРеквизита(Значение, Реквизит); - КонецЕсли; - -КонецПроцедуры - -// Функция преобразует Отбор в условие на языке запросов и вставляет в запрос -// -// Параметры: -// Запрос - Запрос -// Отбор - РегистрСведенийНаборЗаписей.Отбор, -// РегистрНакопленияНаборЗаписей.Отбор, -// РегистрБухгалтерииНаборЗаписей.Отбор, -// РегистрРасчетаНаборЗаписей.Отбор, -// ПсевдонимТаблицы - Строка - псевдоним регистра в запросе. -// МестоУсловияОтбора - Строка - Идентификатор места условия в запросе, -// например, &УсловиеОтбора -// -// Возвращаемое значение: -// Строка -// -Процедура ВставитьПараметрыИУсловиеОтбора(Запрос, Отбор, ПсевдонимТаблицы = "Таблица", МестоУсловияОтбора = "&УсловиеОтбора") - - Условие = ""; - Для каждого ЭлементОтбора Из Отбор Цикл - - Если ЭлементОтбора.Использование Тогда - Если НЕ ПустаяСтрока(Условие) Тогда - Условие = Условие + Символы.ПС + "И "; - КонецЕсли; - Запрос.УстановитьПараметр(ЭлементОтбора.Имя, ЭлементОтбора.Значение); - Условие = Условие + ПсевдонимТаблицы + "." + ЭлементОтбора.Имя + " = &" + ЭлементОтбора.Имя; - КонецЕсли; - КонецЦикла; - Условие = ?(ЗначениеЗаполнено(Условие), Условие, "Истина"); - Запрос.Текст = СтрЗаменить(Запрос.Текст, МестоУсловияОтбора, Условие); - -КонецПроцедуры - -// Процедура ПолучитьЗначениеРеквизита только для внутреннего использования -Функция ПолучитьЗначениеРеквизита(Ссылка, ИмяРеквизита) - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЕстьNULL(" + ИмяРеквизита + ", Неопределено) КАК ЗначениеРеквизита - |ИЗ - | " + Ссылка.Метаданные().ПолноеИмя() + " КАК Таблица - |ГДЕ - | Таблица.Ссылка = &Ссылка"; - Запрос.УстановитьПараметр("Ссылка", Ссылка); - - Выборка = Запрос.Выполнить().Выбрать(); - Выборка.Следующий(); - - Возврат Выборка.ЗначениеРеквизита; - -КонецФункции diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl index 389e8fe78..7aec98f15 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl @@ -1,11 +1,17 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Даты запрета изменения". +// +//////////////////////////////////////////////////////////////////////////////// -// Процедура НастройкаИнтерфейса позволяет -// изменить работу интерфейса при встраивании. +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Позволяет изменить работу интерфейса при встраивании. // // Параметры: -// НастройкиРаботыИнтерфейса -// - Структура: -// ИспользоватьВнешнихПользователей - Булево (начальное значение Ложь). +// НастройкиРаботыИнтерфейса - +// Структура: +// ИспользоватьВнешнихПользователей - Булево (начальное значение Ложь). // Процедура НастройкаИнтерфейса(Знач НастройкиРаботыИнтерфейса) Экспорт @@ -13,10 +19,10 @@ КонецПроцедуры -// Процедура ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения косвенно -// вызывается из процедуры ДатыЗапретаИзменения.ИзменениеЗапрещено(), +// Содержит описание таблиц и полей объектов для проверки запретов изменения данных. +// Вызывается из процедуры ДатыЗапретаИзменения.ИзменениеЗапрещено(), // используемой в подписке на событие ПередЗаписью объекта -// для проверки запрета и отказа от изменений запрещенного объекта. +// для проверки наличия запретов и отказа от изменений запрещенного объекта. // // Параметры: // ИсточникиДанных - ТаблицаЗначений: @@ -35,10 +41,10 @@ КонецПроцедуры -// Процедура ПередПроверкойЗапретаИзменения позволяет по некоторому -// условию, например, для отказа проверки в некоторых режимах работы +// Позволяет пропустить проверку запретов по произвольному условию. +// Например отказаться от проверки в некоторых режимах работы // подсистемы обмена данными (если она используется) или -// для отказа от проверки по статусу документа (открыт/закрыт). +// отказаться от проверки запрета по статусу документа (открыт/закрыт). // // Параметры: // Объект - объект или набор записей (ПередЗаписью или ПриЧтенииНаСервере): @@ -70,9 +76,9 @@ // Процедура ПередПроверкойЗапретаИзменения(Объект, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Экспорт - // ОбменДанными + // СтандартныеПодсистемы.ОбменДанными ОбменДаннымиСобытия.ПередПроверкойЗапретаИзменения(Объект, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете); - // Конец ОбменДанными + // Конец СтандартныеПодсистемы.ОбменДанными diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/ДатыЗапретаИзмененияПереопределяемый.mdo b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/ДатыЗапретаИзмененияПереопределяемый.mdo index 18f727a67..f27a050de 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/ДатыЗапретаИзмененияПереопределяемый.mdo +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/ДатыЗапретаИзмененияПереопределяемый.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/Module.bsl index 51656b098..3a2572e84 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/Module.bsl @@ -1,8 +1,12 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Даты запрета изменения". +// +//////////////////////////////////////////////////////////////////////////////// -// Функция СвойстваРазделов возвращает -// свойства, характеризующие вариант встраивания -// используемые для внутренних целей -// +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Возвращает свойства, характеризующие вариант встраивания Функция СвойстваРазделов() Экспорт Свойства = Новый Структура; @@ -73,11 +77,7 @@ КонецФункции -// Функция ШаблонДанныхДляПроверки возвращает -// готовую пустую таблицу значений для заполнении -// с последующей передачей в функцию -// ДатыЗапретаИзмененияВызовСервера.НайденЗапретИзмененияДанных() -// +// См. комментарий в вызывающей функции ДатыЗапретаИзменения.ШаблонДанныхДляПроверки() Функция ШаблонДанныхДляПроверки() Экспорт ДанныеДляПроверки = Новый ТаблицаЗначений; @@ -89,9 +89,8 @@ КонецФункции -// Функция ИсточникиДанныхДляПроверкиЗапретаИзменения возвращает источники данных, -// заполненные в процедуре ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения -// модуля ДатыЗапретаИзмененияПереопределяемый +// Возвращает источники данных, заполненные в процедуре +// ДатыЗапретаИзмененияПереопределяемый.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения() // Функция ИсточникиДанныхДляПроверкиЗапретаИзменения() Экспорт diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/ДатыЗапретаИзмененияПовтИсп.mdo b/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/ДатыЗапретаИзмененияПовтИсп.mdo index 7ccee0718..24f9e4a6f 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/ДатыЗапретаИзмененияПовтИсп.mdo +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/ДатыЗапретаИзмененияПовтИсп.mdo @@ -8,6 +8,5 @@ true true true - true DuringSession diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl new file mode 100644 index 000000000..a308a262a --- /dev/null +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl @@ -0,0 +1,247 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Даты запрета изменения". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.1.12"; + Обработчик.Процедура = "ДатыЗапретаИзмененияСлужебный.ЗаменитьНеопределеноНаЗначениеПеречисления"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.3.2"; + Обработчик.Процедура = "ДатыЗапретаИзмененияСлужебный.УдалитьПустыеДатыЗапретаПоУмолчанию"; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Выполняет пересчет и обновление текущий значений относительных +// дат запрета по состоянию на текущую дату сеанса. +// +// Параметры: +// ЗаписатьОписаниеРезультатаВЖурналРегистрации - Булево. +// ОписаниеРезультата - Строка. +// +Процедура ПересчитатьТекущиеЗначенияОтносительныхДатЗапрета(ЗаписатьОписаниеРезультатаВЖурналРегистрации = Истина, ОписаниеРезультата = "") Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДатыЗапретаИзменения.Раздел, + | ДатыЗапретаИзменения.Объект, + | ДатыЗапретаИзменения.Пользователь, + | ДатыЗапретаИзменения.ДатаЗапрета, + | ДатыЗапретаИзменения.ОписаниеДатыЗапрета + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения"; + + Выборка = Запрос.Выполнить().Выбрать(); + + ТекущаяДатаНаСервере = НачалоДня(ТекущаяДатаСеанса()); + МенеджерЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьМенеджерЗаписи(); + ПредставлениеОшибки = ""; + Отказ = Ложь; + ЕстьОбновленныеДаты = Ложь; + НетОтносительныхДат = Истина; + + Пока Выборка.Следующий() Цикл + РассчитаннаяДатаЗапрета = РассчитатьДатуЗапретаПоОписанию(ТекущаяДатаНаСервере, Выборка.ОписаниеДатыЗапрета); + // + Если ЗначениеЗаполнено(РассчитаннаяДатаЗапрета) Тогда + НетОтносительныхДат = Ложь; + Если Выборка.ДатаЗапрета <> РассчитаннаяДатаЗапрета Тогда + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Выборка); + МенеджерЗаписи.Прочитать(); + Если МенеджерЗаписи.Выбран() Тогда + МенеджерЗаписи.ДатаЗапрета = РассчитаннаяДатаЗапрета; + Попытка + МенеджерЗаписи.Записать(); + ЕстьОбновленныеДаты = Истина; + Исключение + Отказ = Истина; + ПредставлениеОшибки = ПредставлениеОшибки + Символы.ПС + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если НетОтносительныхДат Тогда + ОписаниеРезультата = НСтр("ru = 'Относительные даты запрета не заданы.'"); + // + ИначеЕсли Отказ Тогда + Если ЕстьОбновленныеДаты Тогда + ОписаниеРезультата = НСтр("ru = 'Пересчитаны некоторые текущие значения относительных дат запрета. + |При пересчете возникли ошибки:'"); + Иначе + ОписаниеРезультата = НСтр("ru = 'Не пересчитаны текущие значения дат запрета. + |При пересчете возникли ошибки:'"); + КонецЕсли; + ОписаниеРезультата = ОписаниеРезультата + ПредставлениеОшибки; + Иначе + Если ЕстьОбновленныеДаты Тогда + ОписаниеРезультата = НСтр("ru = 'Успешно пересчитаны текущие значения относительных дат запрета.'"); + Иначе + ОписаниеРезультата = НСтр("ru = 'Сегодня уже пересчитаны текущие значения относительных дат запрета.'"); + КонецЕсли; + КонецЕсли; + + Если ЗаписатьОписаниеРезультатаВЖурналРегистрации Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Даты запрета изменения.Пересчет относительных дат'"), + ?(Отказ, УровеньЖурналаРегистрации.Ошибка, УровеньЖурналаРегистрации.Информация), + , + , + ОписаниеРезультата, + РежимТранзакцииЗаписиЖурналаРегистрации.Независимая); + КонецЕсли; + +КонецПроцедуры + +// Обработчик регламентного задания ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения +Процедура ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения() Экспорт + + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + ПересчитатьТекущиеЗначенияОтносительныхДатЗапрета(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +Функция РассчитатьДатуЗапретаПоОписанию(ТекущаяДатаНаСервере, ОписаниеДатыЗапрета) + + Сутки = 60*60*24; + ВариантДатыЗапрета = ""; + КоличествоДнейРазрешения = 0; + + Если ЗначениеЗаполнено(ОписаниеДатыЗапрета) Тогда + ВариантДатыЗапрета = СтрПолучитьСтроку(ОписаниеДатыЗапрета, 1); + Строка2 = СтрПолучитьСтроку(ОписаниеДатыЗапрета, 2); + Если ЗначениеЗаполнено(Строка2) Тогда + Попытка + КоличествоДнейРазрешения = Число(Строка2); + Исключение + КонецПопытки; + КонецЕсли; + КонецЕсли; + + Если ВариантДатыЗапрета = "КонецПрошлогоГода" Тогда + ТекущаяДатаЗапрета = НачалоГода(ТекущаяДатаНаСервере) - Сутки; + ПредыдущаяДатаЗапрета = НачалоГода(ТекущаяДатаЗапрета) - Сутки; + + ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоКвартала" Тогда + ТекущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаНаСервере) - Сутки; + ПредыдущаяДатаЗапрета = НачалоКвартала(ТекущаяДатаЗапрета) - Сутки; + + ИначеЕсли ВариантДатыЗапрета = "КонецПрошлогоМесяца" Тогда + ТекущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаНаСервере) - Сутки; + ПредыдущаяДатаЗапрета = НачалоМесяца(ТекущаяДатаЗапрета) - Сутки; + + ИначеЕсли ВариантДатыЗапрета = "КонецПрошлойНедели" Тогда + ТекущаяДатаЗапрета = НачалоНедели(ТекущаяДатаНаСервере) - Сутки; + ПредыдущаяДатаЗапрета = НачалоНедели(ТекущаяДатаЗапрета) - Сутки; + + ИначеЕсли ВариантДатыЗапрета = "ПредыдущийДень" Тогда + ТекущаяДатаЗапрета = НачалоДня(ТекущаяДатаНаСервере) - Сутки; + ПредыдущаяДатаЗапрета = НачалоДня(ТекущаяДатаЗапрета) - Сутки; + Иначе + ТекущаяДатаЗапрета = '00000000'; + КонецЕсли; + + Если ЗначениеЗаполнено(ТекущаяДатаЗапрета) Тогда + СрокРазрешения = ТекущаяДатаЗапрета + КоличествоДнейРазрешения * Сутки; + Если НЕ ТекущаяДатаНаСервере > СрокРазрешения Тогда + ТекущаяДатаЗапрета = ПредыдущаяДатаЗапрета; + КонецЕсли; + КонецЕсли; + + Возврат ТекущаяДатаЗапрета; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы + +// Обработчик обновления выполняет замену значения Неопределено +// измерения Пользователь регистра сведений ДатыЗапретаИзменения +// на значение Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей +// +Процедура ЗаменитьНеопределеноНаЗначениеПеречисления() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НаборЗаписей = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(Неопределено); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() > 0 Тогда + Таблица = НаборЗаписей.Выгрузить(); + НаборЗаписей.Отбор.Пользователь.Установить(Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей); + Таблица.ЗаполнитьЗначения(Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей, "Пользователь"); + НаборЗаписей.Загрузить(Таблица); + НаборЗаписей.Записать(); + КонецЕсли; + +КонецПроцедуры + +// Обработчик обновления выполняет удаление пустых дат запрета заданных +// для всех пользователей или всех планов обмена, т.е. "По умолчанию", +// т.к. по умолчанию даты запрета пустые. +// +Процедура УдалитьПустыеДатыЗапретаПоУмолчанию() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПустаяДата", '00000000'); + Запрос.Текст = + "ВЫБРАТЬ + | ДатыЗапретаИзменения.Раздел, + | ДатыЗапретаИзменения.Объект, + | ДатыЗапретаИзменения.Пользователь + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + |ГДЕ + | ДатыЗапретаИзменения.Пользователь В (ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей), ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехУзловПлановОбмена)) + | И ДатыЗапретаИзменения.ДатаЗапрета = &ПустаяДата + | И ДатыЗапретаИзменения.ОписаниеДатыЗапрета = """""; + + Выгрузка = Запрос.Выполнить().Выгрузить(); + + Если Выгрузка.Количество() > 0 Тогда + МенеджерЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьМенеджерЗаписи(); + НачатьТранзакцию(); + Попытка + Для каждого Строка Из Выгрузка Цикл + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Строка); + МенеджерЗаписи.Прочитать(); + Если МенеджерЗаписи.Выбран() Тогда + МенеджерЗаписи.Удалить(); + КонецЕсли; + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/ДатыЗапретаИзмененияСлужебный.mdo b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/ДатыЗапретаИзмененияСлужебный.mdo new file mode 100644 index 000000000..5025108fd --- /dev/null +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/ДатыЗапретаИзмененияСлужебный.mdo @@ -0,0 +1,11 @@ + + + ДатыЗапретаИзмененияСлужебный + + ru + Даты запрета изменения служебный + + true + true + true + diff --git a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl new file mode 100644 index 000000000..e65400c4a --- /dev/null +++ b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl @@ -0,0 +1,203 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Поддержка работы длительных серверных операций в веб-клиенте. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Запускает выполнение процедуры в фоновом задании. +// +// Параметры: +// ИдентификаторФормы - УникальныйИдентификатор - идентфикатор формы, +// из которой выполняется запуск длительной операции. +// ИмяЭкспортнойПроцедуры - Строка - имя экспортной процедуры, +// которую необходимо выполнить в фоне. +// Параметры - Структура - все необходимые параметры для +// выполнения процедуры ИмяЭкспортнойПроцедуры. +// НаименованиеЗадания - Строка - наименование фонового задания. +// Если не задано, то будет равно ИмяЭкспортнойПроцедуры. +// +// Возвращаемое значение: +// Структура - Возвращает свойства: +// - АдресХранилища - адрес временного хранилища, в которое будет +// помещен результат работы задания; +// - ИдентификаторЗадания - уникальный идентификатор запущенного +// фонового задания; +// - ЗаданиеВыполнено - Истина если задание было успешно выполнено +// за время вызова функции. +// +Функция ЗапуститьВыполнениеВФоне(Знач ИдентификаторФормы, Знач ИмяЭкспортнойПроцедуры, + Знач Параметры, Знач НаименованиеЗадания = "") Экспорт + + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); + + Если Не ЗначениеЗаполнено(НаименованиеЗадания) Тогда + НаименованиеЗадания = ИмяЭкспортнойПроцедуры; + КонецЕсли; + + ПараметрыЭкспортнойПроцедуры = Новый Массив; + ПараметрыЭкспортнойПроцедуры.Добавить(Параметры); + ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилища); + + ПараметрыЗадания = Новый Массив; + ПараметрыЗадания.Добавить(ИмяЭкспортнойПроцедуры); + ПараметрыЗадания.Добавить(ПараметрыЭкспортнойПроцедуры); + + Если ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая тогда + ВремяОжидания = 4; + Иначе + ВремяОжидания = 2; + КонецЕсли; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + + ПараметрыЗадания.Добавить(ОбщегоНазначения.ЗначениеРазделителяСеанса()); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + + Задание = ФоновыеЗадания.Выполнить("ОбщегоНазначения.ВыполнитьБезопасно", ПараметрыЗадания,, НаименованиеЗадания); + Попытка + Задание.ОжидатьЗавершения(ВремяОжидания); + Исключение + // Специальная обработка не требуется, возможно исключение вызвано истечением времени ожидания. + КонецПопытки; + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина); + Иначе + ПараметрыЗадания.Добавить(Неопределено); + Задание = ФоновыеЗадания.Выполнить("ОбщегоНазначения.ВыполнитьБезопасно", ПараметрыЗадания,, НаименованиеЗадания); + Попытка + Задание.ОжидатьЗавершения(ВремяОжидания); + Исключение + // Специальная обработка не требуется, возможно исключение вызвано истечением времени ожидания. + КонецПопытки; + КонецЕсли; + + + Результат = Новый Структура; + Результат.Вставить("АдресХранилища" , АдресХранилища); + Результат.Вставить("ЗаданиеВыполнено" , ЗаданиеВыполнено(Задание.УникальныйИдентификатор)); + Результат.Вставить("ИдентификаторЗадания", Задание.УникальныйИдентификатор); + + Возврат Результат; + +КонецФункции + +// Отменяет выполение фонового задания по переданному идентификатору. +// +// Параметры: +// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания. +// +Процедура ОтменитьВыполнениеЗадания(Знач ИдентификаторЗадания) Экспорт + + Если Не ЗначениеЗаполнено(ИдентификаторЗадания) Тогда + Возврат; + КонецЕсли; + + Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания); + Если Задание = Неопределено + ИЛИ Задание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда + + Возврат; + КонецЕсли; + + Попытка + Задание.Отменить(); + Исключение + // Возможно задание как раз в этот момент закончилось и ошибки нет + ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Отмена выполнения фонового задания'"), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецПроцедуры + +// Проверяет состояние фонового задания по переданному идентификатору. +// +// Параметры: +// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания. +// +// Возвращаемое значение: +// Булево - возвращает Истина, если задание успешно выполнено, +// Ложь - если выполняется. В иных случаях вызывается исключение. +// +Функция ЗаданиеВыполнено(Знач ИдентификаторЗадания) Экспорт + + Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания); + + Если Задание <> Неопределено + И Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + Возврат Ложь; + КонецЕсли; + + ОперацияНеВыполнена = Истина; + ПоказатьПолныйТекстОшибки = Ложь; + Если Задание = Неопределено Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Фоновое задание не найдено'"), + УровеньЖурналаРегистрации.Ошибка,,, Строка(ИдентификаторЗадания)); + Иначе + Если Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда + ОшибкаЗадания = Задание.ИнформацияОбОшибке; + Если ОшибкаЗадания <> Неопределено Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Фоновое задание завершено аварийно'"), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); + ПоказатьПолныйТекстОшибки = Истина; + Иначе + ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Фоновое задание завершено аварийно'"), + УровеньЖурналаРегистрации.Ошибка,,, + НСтр("ru = 'Задание завершилось с неизвестной ошибкой.'")); + КонецЕсли; + ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Фоновое задание отменено администратором'"), + УровеньЖурналаРегистрации.Ошибка,,, + НСтр("ru = 'Задание завершилось с неизвестной ошибкой.'")); + Иначе + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Если ПоказатьПолныйТекстОшибки Тогда + ТекстОшибки = КраткоеПредставлениеОшибки(ПолучитьИнформациюОбОшибке(Задание.ИнформацияОбОшибке)); + ВызватьИсключение(ТекстОшибки); + ИначеЕсли ОперацияНеВыполнена Тогда + ВызватьИсключение(НСтр("ru = 'Не удалось выполнить данную операцию. + |Подробности см. в Журнале регистрации.'")); + КонецЕсли; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция НайтиЗаданиеПоИдентификатору(Знач ИдентификаторЗадания) + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина); + Иначе + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); + КонецЕсли; + + Возврат Задание; + +КонецФункции + +Функция ПолучитьИнформациюОбОшибке(ИнформацияОбОшибке) + + Результат = ИнформацияОбОшибке; + Если ИнформацияОбОшибке <> Неопределено Тогда + Если ИнформацияОбОшибке.Причина <> Неопределено Тогда + Результат = ПолучитьИнформациюОбОшибке(ИнформацияОбОшибке.Причина); + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютСобытия/РаботаСКурсамиВалютСобытия.mdo b/SSL/src/CommonModules/ДлительныеОперации/ДлительныеОперации.mdo similarity index 62% rename from SSL/src/CommonModules/РаботаСКурсамиВалютСобытия/РаботаСКурсамиВалютСобытия.mdo rename to SSL/src/CommonModules/ДлительныеОперации/ДлительныеОперации.mdo index 573debfb8..43a3ffbe3 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютСобытия/РаботаСКурсамиВалютСобытия.mdo +++ b/SSL/src/CommonModules/ДлительныеОперации/ДлительныеОперации.mdo @@ -1,9 +1,9 @@ - - РаботаСКурсамиВалютСобытия + + ДлительныеОперации ru - Работа с курсами валют события + Длительные операции true true diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl new file mode 100644 index 000000000..e5b6ca283 --- /dev/null +++ b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl @@ -0,0 +1,97 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Поддержка работы длительных серверных операций в веб-клиенте. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Заполняет структуру параметров значениями по умолчанию. +// +// Параметры: +// ПараметрыОбработчикаОжидания - Структура - заполняется значениями по умолчанию. +// +// +Процедура ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания) Экспорт + + ПараметрыОбработчикаОжидания = Новый Структура( + "МинимальныйИнтервал,МаксимальныйИнтервал,ТекущийИнтервал,КоэффициентУвеличенияИнтервала", 1, 15, 1, 1.4); + +КонецПроцедуры + +// Заполняет структуру параметров новыми расчетными значениями. +// +// Параметры: +// ПараметрыОбработчикаОжидания - Структура - заполняется расчетными значениями. +// +// +Процедура ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания) Экспорт + + ПараметрыОбработчикаОжидания.ТекущийИнтервал = ПараметрыОбработчикаОжидания.ТекущийИнтервал * ПараметрыОбработчикаОжидания.КоэффициентУвеличенияИнтервала; + Если ПараметрыОбработчикаОжидания.ТекущийИнтервал > ПараметрыОбработчикаОжидания.МаксимальныйИнтервал Тогда + ПараметрыОбработчикаОжидания.ТекущийИнтервал = ПараметрыОбработчикаОжидания.МаксимальныйИнтервал; + КонецЕсли; + +КонецПроцедуры + +// Отменяет выполнение фонового задания по переданному идентификатору. +// +// Параметры: +// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания. +// +Процедура ОтменитьВыполнениеЗадания(Знач ИдентификаторЗадания) Экспорт + + Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с формой длительной операции +// + +// Открывает форму-индикатор длительной операции. +// +// Параметры: +// ВладелецФормы - УправляемаяФорма - форма, из которой производится открытие. +// ИдентификаторЗадания - УникальныйИдентификатор - Идентификатор фонового задания. +// +// Возвращаемое значение: +// УправляемаяФорма - ссылка на открытую форму. +// +Функция ОткрытьФормуДлительнойОперации(Знач ВладелецФормы, Знач ИдентификаторЗадания) Экспорт + + ФормаДлительнойОперации = ДлительныеОперацииКлиентПовтИсп.ПолучитьФормуДлительнойОперации(); + Если ФормаДлительнойОперации.Открыта() Тогда + ФормаДлительнойОперации = ОткрытьФорму( + "ОбщаяФорма.ДлительнаяОперация", + Новый Структура("ИдентификаторЗадания", ИдентификаторЗадания), + ВладелецФормы); + Иначе + ФормаДлительнойОперации.ВладелецФормы = ВладелецФормы; + ФормаДлительнойОперации.ИдентификаторЗадания = ИдентификаторЗадания; + ФормаДлительнойОперации.Открыть(); + КонецЕсли; + + Возврат ФормаДлительнойОперации; + +КонецФункции + +// Закрывает форму-индикатор длительной операции. +// +// Параметры: +// СсылкаНаФорму - УправляемаяФорма - ссылка на форму-индикатор длительной операции. +// +Процедура ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации) Экспорт + + Если ТипЗнч(ФормаДлительнойОперации) = Тип("УправляемаяФорма") Тогда + Если ФормаДлительнойОперации.Открыта() Тогда + ФормаДлительнойОперации.Закрыть(); + КонецЕсли; + КонецЕсли; + ФормаДлительнойОперации = Неопределено; + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиент/ДлительныеОперацииКлиент.mdo b/SSL/src/CommonModules/ДлительныеОперацииКлиент/ДлительныеОперацииКлиент.mdo new file mode 100644 index 000000000..6b9ae3546 --- /dev/null +++ b/SSL/src/CommonModules/ДлительныеОперацииКлиент/ДлительныеОперацииКлиент.mdo @@ -0,0 +1,10 @@ + + + ДлительныеОперацииКлиент + + ru + Длительные операции клиент + + true + true + diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/Module.bsl new file mode 100644 index 000000000..7c34f5884 --- /dev/null +++ b/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/Module.bsl @@ -0,0 +1,16 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Поддержка работы длительных серверных операций в веб-клиенте. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Получить форму-индикатор выполнения длительной операции. +// +Функция ПолучитьФормуДлительнойОперации() Экспорт + + Возврат ПолучитьФорму("ОбщаяФорма.ДлительнаяОперация"); + +КонецФункции diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/ДлительныеОперацииКлиентПовтИсп.mdo b/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/ДлительныеОперацииКлиентПовтИсп.mdo new file mode 100644 index 000000000..137bf3c72 --- /dev/null +++ b/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/ДлительныеОперацииКлиентПовтИсп.mdo @@ -0,0 +1,11 @@ + + + ДлительныеОперацииКлиентПовтИсп + + ru + Длительные операции клиент повт исп + + true + true + DuringSession + diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl index d3eef23a6..ec922a19f 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl @@ -1,52 +1,116 @@ //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Подсистема "Дополнительные отчеты и обработки" +// +//////////////////////////////////////////////////////////////////////////////// -// Обработчик события ПриСозданииНаСервере. -// Выполняет установки параметров функциональных опций формы - требуется -// для формирования командного интерфейса формы. +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Подключает внешнюю обработку (отчет). +// После подключения обработка (отчет) регистрируется в системе под определенным именем. +// Используя это имя можно получать объект и открывать форму обработки. // -Процедура ПриСозданииНаСервере(Форма) Экспорт +// Параметры: +// Ссылка (СправочникСсылка.ДополнительныеОтчетыИОбработки) Подключемая обработка +// +// Возвращаемое значение: +// (Строка) Имя подключенной обработки, известное системе +// (Неопределено) Если передана некорректная ссылка +// +Функция ПодключитьВнешнююОбработку(Ссылка) Экспорт - ИмяФормыМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Форма.ИмяФормы, "."); + // Проверка корректности переданных параметров + Если ТипЗнч(Ссылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") + ИЛИ Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда + Возврат Неопределено; + КонецЕсли; + + // Подключение + УстановитьПривилегированныйРежим(Истина); + Если Ссылка.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет + ИЛИ Ссылка.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда + Менеджер = ВнешниеОтчеты; + Иначе + Менеджер = ВнешниеОбработки; + КонецЕсли; + АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Ссылка.ХранилищеОбработки.Получить()); + + Возврат Менеджер.Подключить(АдресВоВременномХранилище, , Ссылка.БезопасныйРежим); + +КонецФункции + +// Создает и возвращает экземпляр внешней обработки (отчета) +// +// Параметры: +// Ссылка (СправочникСсылка.ДополнительныеОтчетыИОбработки) Подключемая обработка +// +// Возвращаемое значение: +// (ВнешняяОбработкаОбъект.*) Объект подключенной обработки +// (ВнешнийОтчетОбъект.*) Объект подключенного отчета +// (Неопределено) Если передана некорректная ссылка +// +Функция ПолучитьОбъектВнешнейОбработки(Ссылка) Экспорт + + // Подключение + ИмяОбработки = ПодключитьВнешнююОбработку(Ссылка); + + // Проверка корректности переданных параметров + Если ИмяОбработки = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + // Получение экземпляра объекта + Если Ссылка.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет + ИЛИ Ссылка.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда + Менеджер = ВнешниеОтчеты; + Иначе + Менеджер = ВнешниеОбработки; + КонецЕсли; + + Возврат Менеджер.Создать(ИмяОбработки); + +КонецФункции + +// Установка параметров функциональных опций формы (требуется для формирования +// командного интерфейса формы) +// +// Параметры: +// ЭтаФорма (УправляемаяФорма) +// +Процедура ПриСозданииНаСервере(ЭтаФорма) Экспорт + + ИмяФормыМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЭтаФорма.ИмяФормы, "."); ПолноеИмяОбъектаМетаданных = ИмяФормыМассив[0] + "." + ИмяФормыМассив[1]; ТипФормы = Неопределено; ТипОбъекта = ПолноеИмяОбъектаМетаданных; - Если ПустаяСтрока(ПользователиИнформационнойБазы.ТекущийПользователь().Имя) - ИЛИ РольДоступна(Метаданные.Роли.ПолныеПрава) - ИЛИ РольДоступна(Метаданные.Роли.ИспользованиеДополнительныхОтчетовИОбработок) - ИЛИ РольДоступна(Метаданные.Роли.ДобавлениеИзменениеДополнительныхОтчетовИОбработок) Тогда - - Если ЭтоФормаОбъекта(ПолноеИмяОбъектаМетаданных, Форма.ИмяФормы) Тогда + Если Пользователи.РолиДоступны("ИспользованиеДополнительныхОтчетовИОбработок, ДобавлениеИзменениеДополнительныхОтчетовИОбработок") Тогда + Если ЭтоФормаОбъекта(ПолноеИмяОбъектаМетаданных, ЭтаФорма.ИмяФормы) Тогда ТипФормы = "ФормаОбъекта"; Иначе ТипФормы = "ФормаСписка"; - КонецЕсли; + КонецЕсли; КонецЕсли; - - Форма.УстановитьПараметрыФункциональныхОпцийФормы(Новый Структура("ТипФормыСДополнительнымиОтчетамиИОбработками", ТипФормы)); - Форма.УстановитьПараметрыФункциональныхОпцийФормы(Новый Структура("ТипОбъектаСДополнительнымиОтчетамиИОбработками", ТипОбъекта)); + + ЭтаФорма.УстановитьПараметрыФункциональныхОпцийФормы(Новый Структура("ТипФормыСДополнительнымиОтчетамиИОбработками", ТипФормы)); + ЭтаФорма.УстановитьПараметрыФункциональныхОпцийФормы(Новый Структура("ТипОбъектаСДополнительнымиОтчетамиИОбработками", ТипОбъекта)); КонецПроцедуры -// Функция формирования печатной формы по внешнему источнику. -// ИсточникДанных - СправочникСсылка.ДополнительныеОтчетыИОбработки - ссылка на внешнюю обработку -// ПараметрыИсточника - Структура с ключами: -// БезопасныйРежим - булево - используется ли безопасный режим -// ИдентификаторКоманды - строка- список макетов, перечисленных через запятую -// ОбъектыНазначения - массив - массив ссылок на объекты назначения -// -// параметры, заполняемые в функции (описание см. в модуле УправлениеПечатьюПереопределяемый) -// КоллекцияПечатныхФорм -// ОбъектыПечати -// ПараметрыВывода -// -Процедура ПечатьПоВнешнемуИсточнику(ИсточникДанных, - ПараметрыИсточника, - КоллекцияПечатныхФорм, - ОбъектыПечати, - ПараметрыВывода) Экспорт +// Формирует печатную форму по внешнему источнику +// +// Параметры: +// Ссылка (СправочникСсылка.ДополнительныеОтчетыИОбработки) Внешняя обработка +// ПараметрыИсточника (Структура) +// |- ИдентификаторКоманды (Строка) Список макетов, перечисленных через запятую +// |- ОбъектыНазначения (Массив) +// КоллекцияПечатныхФорм (ТаблицаЗначений) см. УправлениеПечатьюПереопределяемый.ПечатьПоВнешнемуИсточнику() +// ОбъектыПечати (СписокЗначений) см. УправлениеПечатьюПереопределяемый.ПечатьПоВнешнемуИсточнику() +// ПараметрыВывода (Структура) см. УправлениеПечатьюПереопределяемый.ПечатьПоВнешнемуИсточнику() +// +Процедура ПечатьПоВнешнемуИсточнику(Ссылка, ПараметрыИсточника, КоллекцияПечатныхФорм, + ОбъектыПечати, ПараметрыВывода) Экспорт КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(ПараметрыИсточника.ИдентификаторКоманды); @@ -54,18 +118,30 @@ ОбъектыПечати = Новый СписокЗначений; - ВнешняяОбработкаОбъект = ПолучитьОбъектВнешнейОбработки(ИсточникДанных); + ВнешняяОбработкаОбъект = ПолучитьОбъектВнешнейОбработки(Ссылка); + + Если ВнешняяОбработкаОбъект = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Внешняя обработка ""%1"" (тип ""%2"") не обслуживается подсистемой ""Дополнительные отчеты и обработки""'"), + Строка(Ссылка), + Строка(ТипЗнч(Ссылка)) + ); + КонецЕсли; ВнешняяОбработкаОбъект.Печать( - ПараметрыИсточника.ОбъектыНазначения, - КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); + ПараметрыИсточника.ОбъектыНазначения, + КоллекцияПечатныхФорм, + ОбъектыПечати, + ПараметрыВывода + ); // Проверим, все ли макеты были сформированы Для Каждого Стр Из КоллекцияПечатныхФорм Цикл Если Стр.ТабличныйДокумент = Неопределено Тогда ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В обработчике печати не был сформирован табличный документ для: %1'"), - Стр.ИмяМакета); + НСтр("ru = 'В обработчике печати не был сформирован табличный документ для: %1'"), + Стр.ИмяМакета + ); ВызватьИсключение(ТекстСообщенияОбОшибке); КонецЕсли; @@ -74,6 +150,405 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.7.1"; + Обработчик.Процедура = "ДополнительныеОтчетыИОбработки.ОбновитьПользовательскиеНастройкиДоступаКОбработкам"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.0.1.4"; + Обработчик.Процедура = "ДополнительныеОтчетыИОбработки.ЗаполнитьИменаОбъектов"; + +КонецПроцедуры + +// Процедура обновления записей о доступности дополнительных обработок +// +Процедура ОбновитьПользовательскиеНастройкиДоступаКОбработкам() Экспорт + + ПользователиСДопОбработками = ПолучитьМассивПользователейСДоступомКДополнительнымОбработкам(); + + ТаблицаЗаписей = ПолучитьТаблицуЗаписей(ПользователиСДопОбработками); + + Для Каждого Пользователь Из ПользователиСДопОбработками Цикл + НаборЗаписей = РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователь); + ЗаписиПоБыстромуДоступу = ТаблицаЗаписей.НайтиСтроки(Новый Структура("Пользователь,Доступно", Пользователь, Истина)); + Для Каждого ЗаписьБыстрогоДоступа Из ЗаписиПоБыстромуДоступу Цикл + НоваяЗапись = НаборЗаписей.Добавить(); + НоваяЗапись.ДополнительныйОтчетИлиОбработка = ЗаписьБыстрогоДоступа.Обработка; + НоваяЗапись.ИдентификаторКоманды = ЗаписьБыстрогоДоступа.Идентификатор; + НоваяЗапись.Пользователь = Пользователь; + НоваяЗапись.Доступно = Истина; + КонецЦикла; + НаборЗаписей.Записать(Истина); + КонецЦикла; + +КонецПроцедуры + +// Заполнение реквизита "ИмяОбъекта". Данный реквизит отвечает за имя, +// под которыми дополнительный отчет или обработка регистрируется в системе. +// Для объектов с вариантом Публикации "Используется" дополнительно проводится +// контроль уникальности Имени объекта. В случае нахождения отчетов или обработок +// с неуникальными Именами объектов для всех элементов, кроме первого, +// вариант Публикации изменяется с "Используется" на "Режим отладки". +// +Процедура ЗаполнитьИменаОбъектов() Экспорт + ТекстЗапроса = + "ВЫБРАТЬ + | ДопОтчеты.Ссылка, + | ДопОтчеты.ИмяОбъекта, + | ДопОтчеты.ХранилищеОбработки, + | ВЫБОР + | КОГДА ДопОтчеты.Вид В (&ВидыДопОтчетов) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ЭтоОтчет, + | ВЫБОР + | КОГДА ДопОтчеты.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК Публикуется, + | ВЫБОР + | КОГДА ДопОтчеты.ИмяОбъекта = """" + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ТребуетсяЗаполнитьИмяОбъекта + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки КАК ДопОтчеты + |ГДЕ + | ДопОтчеты.ЭтоГруппа = ЛОЖЬ + | И НЕ ДопОтчеты.ХранилищеОбработки ЕСТЬ NULL "; + + ВидыДопОтчетов = Новый Массив; + ВидыДопОтчетов.Добавить(Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет); + ВидыДопОтчетов.Добавить(Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ВидыДопОтчетов", ВидыДопОтчетов); + Запрос.Текст = ТекстЗапроса; + + ВсеДопОтчеты = Запрос.Выполнить().Выгрузить(); + + ПоискДублей = Новый Структура("ИмяОбъекта, ЭтоОтчет, Публикуется"); + ПоискДублей.Публикуется = Истина; + + // Дополнительные отчеты и обработки, для которых необходимо заполнить имя объекта + ДопОтчетыДляЗаполнения = ВсеДопОтчеты.НайтиСтроки(Новый Структура("ТребуетсяЗаполнитьИмяОбъекта", Истина)); + Для Каждого СтрокаТаблицы Из ДопОтчетыДляЗаполнения Цикл + + // Помещение двоичных данных отчета (обработки) во временное хранилище + АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(СтрокаТаблицы.ХранилищеОбработки.Получить()); + + // Определение менеджера + Менеджер = ?(СтрокаТаблицы.ЭтоОтчет, ВнешниеОтчеты, ВнешниеОбработки); + + // Получение экземпляра объекта + Объект = СтрокаТаблицы.Ссылка.ПолучитьОбъект(); + + // Установка имени объекта + Объект.ИмяОбъекта = СокрЛП(Менеджер.Подключить(АдресВоВременномХранилище, , Истина)); + + // Если имя отчета (обработки) уже используется другим опубликованным отчетом (обработкой), + // то данный объект является дублем - необходимо сменить его вариант публикации на режим отладки. + Если СтрокаТаблицы.Публикуется Тогда + ПоискДублей.ИмяОбъекта = Объект.ИмяОбъекта; + ПоискДублей.ЭтоОтчет = СтрокаТаблицы.ЭтоОтчет; + Если ВсеДопОтчеты.НайтиСтроки(ПоискДублей).Количество() > 0 Тогда + Объект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки; + КонецЕсли; + КонецЕсли; + + // Регистрация использованного имени объекта в таблице для контроля дублей + СтрокаТаблицы.ИмяОбъекта = Объект.ИмяОбъекта; + + // Запись объекта + Объект.Записать(); + + КонецЦикла; + +КонецПроцедуры + +// Замена имен рабочих мест на идентификаторы разделов. +// +// Параметры: +// ИменаРазделовИИдентификаторы (Соответствие) +// |- Ключ (Строка) Имя рабочего места (команды), которое ранее указывалось в процедуре +// ПолучитьОбщиеКомандыДополнительныхОбработок или ПолучитьОбщиеКомандыДополнительныхОтчетов +// общего модуля ДополнительныеОтчетыИОбработкиПереопределяемый +// |- Значение (ОбъектМетаданных) Раздел командного интерфейса (подсистема первого уровня), +// в котором размещается данное рабочее место (команда) +// +Процедура ЗаменитьИменаРазделовНаИдентификаторы(ИменаРазделовИИдентификаторы) Экспорт + ИдентификаторРабочегоСтола = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола(); + + МассивИменРазделов = Новый Массив; + Для Каждого КлючИЗначение Из ИменаРазделовИИдентификаторы Цикл + Если КлючИЗначение.Значение = ИдентификаторРабочегоСтола Тогда + ИменаРазделовИИдентификаторы.Вставить(КлючИЗначение.Ключ, Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка()); + Иначе + ИменаРазделовИИдентификаторы.Вставить(КлючИЗначение.Ключ, ОбщегоНазначения.ИдентификаторОбъектаМетаданных(КлючИЗначение.Значение)); + КонецЕсли; + МассивИменРазделов.Добавить(КлючИЗначение.Ключ); + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТЧРазделы.Ссылка + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки.Разделы КАК ТЧРазделы + |ГДЕ + | ТЧРазделы.УдалитьИмяРаздела В (&МассивИменРазделов)"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("МассивИменРазделов", МассивИменРазделов); + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + // Получение экземпляра объекта + Объект = Выборка.Ссылка.ПолучитьОбъект(); + + Для Каждого СтрокаРаздел Из Объект.Разделы Цикл + ИОМ = ИменаРазделовИИдентификаторы.Получить(СтрокаРаздел.УдалитьИмяРаздела); + Если ИОМ = Неопределено Тогда + Продолжить; + КонецЕсли; + СтрокаРаздел.Раздел = ИОМ; + СтрокаРаздел.УдалитьИмяРаздела = ""; + КонецЦикла; + + // Запись объекта + Объект.Записать(); + КонецЦикла; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Изменение регламентных заданий + +// Для внутреннего использования +// +Процедура ОбновитьСведенияПоРасписанию(ДополнительнаяОбработка, Команда, Расписание, Использование, Отказ) Экспорт + + // получаем регламентное задание по идентификатору, если объект не находим, то создаем новый + РегламентноеЗаданиеОбъект = ПолучитьРегламентноеЗадание(Команда.РегламентноеЗаданиеGUID); + + // обновляем свойства РЗ + УстановитьПараметрыРегламентногоЗадания(РегламентноеЗаданиеОбъект, Расписание, Использование, ДополнительнаяОбработка.Ссылка, Команда); + + // записываем измененное задание + ЗаписатьРегламентноеЗадание(Отказ, РегламентноеЗаданиеОбъект); + + //запоминаем GUID регл. задания в реквизите объекта + Команда.РегламентноеЗаданиеGUID = РегламентноеЗаданиеОбъект.УникальныйИдентификатор; + +КонецПроцедуры + +// Выполняет удаление регламентного задания по GUID +// Параметры +// РегламентноеЗаданиеGUID - УникальныйИдентификатор - уникальный идентификатор регламентного задания +// +Процедура УдалитьРегламентноеЗадание(РегламентноеЗаданиеGUID) Экспорт + + РегламентноеЗаданиеОбъект = НайтиРегламентноеЗадание(РегламентноеЗаданиеGUID); + + Если РегламентноеЗаданиеОбъект <> Неопределено Тогда + УстановитьПривилегированныйРежим(Истина); + РегламентноеЗаданиеОбъект.Удалить(); + КонецЕсли; + +КонецПроцедуры + +// Выполняет поиск регламентного задания по GUID +// Параметры +// РегламентноеЗаданиеGUID - УникальныйИдентификатор - уникальный идентификатор регламентного задания +// Возвращаемое значение +// РегламентноеЗадание - если найдено +// Неопределено - если не найдено +// +Функция НайтиРегламентноеЗадание(РегламентноеЗаданиеGUID) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + // Регламентные задание необходимо получать в неразделенном режиме. + // Сохранение текущего состояния. + ТекущееСостояние = ОбщегоНазначения.ИспользованиеРазделителяСеанса(); + Если ТекущееСостояние Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + КонецЕсли; + КонецЕсли; + + Попытка + ТекущееРегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗаданиеGUID); + Исключение + ТекущееРегламентноеЗадание = Неопределено; + КонецПопытки; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + // Восставновление состояния параметра сеанса + Если ТекущееСостояние <> ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(ТекущееСостояние); + КонецЕсли; + КонецЕсли; + + Возврат ТекущееРегламентноеЗадание; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Выполнение регламентных заданий + +// Обработчик экземпляра регламентного задания ЗапускОбработок. +// Запускает обработчик глобальной обработки по регламентному заданию, +// с указанным идентификатором команды. +// +// Параметры +// ВнешняяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки +// ИдентификаторКоманды - Строка - идентификатор выполняемой команды +// +Процедура ВыполнитьОбработкуПоРегламентномуЗаданию(ВнешняяОбработка, ИдентификаторКоманды) Экспорт + + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + НачалоВыполненияОбработки(ВнешняяОбработка, ИдентификаторКоманды); + + ВыполнитьОбработкуНепосредственно(ВнешняяОбработка, ИдентификаторКоманды); + + ОкончаниеРаботыОбработки(ВнешняяОбработка, ИдентификаторКоманды); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции + +// Формирует список доступных команд дополнительных отчетов или обработок +// +// Параметры: +// ЭтоНазначаемыеОбработки (Булево) Фильтр по назначаемым обработкам +// ПолноеИмяОбъектаМетаданных (Строка) Полное имя объекта метаданных +// ДляФормыОбъекта (Булево) Истина - для формы объекта, Ложь - для формы списка +// Раздел (СправочникСсылка.ИдентификаторыОбъектовМетаданных) Раздел командного интерфейса +// ВидОбработок (ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок) Вид обработки +// +// Возвращаемое значение: +// (ТаблицаЗначений) +// |- Ссылка (СправочникСсылка.ДополнительныеОтчетыИОбработки) +// |- БезопасныйРежим (Булево) Обработка вызывается в безопасном режиме +// |- Представление (Строка) Представление команды для конечного пользователя +// |- Идентификатор (Строка) Идентификатор команды +// |- ВариантЗапуска (Строка) Формируется из (ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок) +// |- ПоказыватьОповещение (Булево) Показывать оповещение пользователю после выполнения +// |- Модификатор (Строка) Модификатор команды +// +Функция ПолучитьДоступныеКоманды(ЭтоНазначаемыеОбработки, ПолноеИмяОбъектаМетаданных, ДляФормыОбъекта, Раздел, ВидОбработок) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + + ТекстЗапроса = " + |ВЫБРАТЬ + | ВЫРАЗИТЬ(ДополнительныеОтчетыИОбработкиКоманды.Представление КАК Строка(200)) КАК Представление, + | ДополнительныеОтчетыИОбработкиКоманды.Идентификатор КАК Идентификатор, + | ДополнительныеОтчетыИОбработкиКоманды.ПоказыватьОповещение КАК ПоказыватьОповещение, + | ДополнительныеОтчетыИОбработкиКоманды.Модификатор КАК Модификатор, + | ВЫБОР + | КОГДА ДополнительныеОтчетыИОбработкиКоманды.ВариантЗапуска = ЗНАЧЕНИЕ(Перечисление.СпособыВызоваДополнительныхОбработок.ВызовКлиентскогоМетода) + | ТОГДА ""ВызовКлиентскогоМетода"" + | КОГДА ДополнительныеОтчетыИОбработкиКоманды.ВариантЗапуска = ЗНАЧЕНИЕ(Перечисление.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода) + | ТОГДА ""ВызовСерверногоМетода"" + | КОГДА ДополнительныеОтчетыИОбработкиКоманды.ВариантЗапуска = ЗНАЧЕНИЕ(Перечисление.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы) + | ТОГДА ""ОткрытиеФормы"" + | КОНЕЦ КАК ВариантЗапуска, + | ДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка, + | ДополнительныеОтчетыИОбработки.БезопасныйРежим КАК БезопасныйРежим + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки + | СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК ДополнительныеОтчетыИОбработкиКоманды + | ПО ДополнительныеОтчетыИОбработкиКоманды.Ссылка = ДополнительныеОтчетыИОбработки.Ссылка"; + + Если ЭтоНазначаемыеОбработки Тогда + ТекстЗапроса = ТекстЗапроса + " + | СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Назначение КАК ДополнительныеОтчетыИОбработкиНазначение + | ПО ДополнительныеОтчетыИОбработкиНазначение.Ссылка = ДополнительныеОтчетыИОбработки.Ссылка"; + Иначе + ТекстЗапроса = ТекстЗапроса + " + | СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Разделы КАК ДополнительныеОтчетыИОбработкиРазделы + | ПО ДополнительныеОтчетыИОбработкиРазделы.Ссылка = ДополнительныеОтчетыИОбработки.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам КАК ПользовательскиеНастройкиДоступаКОбработкам + | ПО ПользовательскиеНастройкиДоступаКОбработкам.ДополнительныйОтчетИлиОбработка = ДополнительныеОтчетыИОбработки.Ссылка + | И ПользовательскиеНастройкиДоступаКОбработкам.ИдентификаторКоманды = ДополнительныеОтчетыИОбработкиКоманды.Идентификатор + | И ПользовательскиеНастройкиДоступаКОбработкам.Пользователь = &Пользователь"; + Запрос.Параметры.Вставить("Пользователь", Пользователи.ТекущийПользователь()); + КонецЕсли; + + ////////////////////////// + // блок наложения фильтров + + ТекстЗапроса = ТекстЗапроса + " + |ГДЕ + | ДополнительныеОтчетыИОбработки.Вид = &ВидОбработок + | И НЕ ДополнительныеОтчетыИОбработки.ПометкаУдаления + | И ( + | ДополнительныеОтчетыИОбработки.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется)"; + + Если Пользователи.РолиДоступны("ДобавлениеИзменениеДополнительныхОтчетовИОбработок") Тогда + ТекстЗапроса = ТекстЗапроса + " + | ИЛИ ДополнительныеОтчетыИОбработки.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки)"; + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + " + | )"; + + Если ЭтоНазначаемыеОбработки Тогда + ТекстЗапроса = ТекстЗапроса + " + | И ДополнительныеОтчетыИОбработкиНазначение.ПолноеИмяОбъектаМетаданных ПОДОБНО &ПолноеИмяОбъектаМетаданных"; + + Запрос.Параметры.Вставить("ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных); + + Если ДляФормыОбъекта Тогда + ТекстЗапроса = ТекстЗапроса + " + | И ДополнительныеОтчетыИОбработки.ИспользоватьДляФормыОбъекта"; + Иначе + ТекстЗапроса = ТекстЗапроса + " + | И ДополнительныеОтчетыИОбработки.ИспользоватьДляФормыСписка"; + КонецЕсли; + + Иначе + ТекстЗапроса = ТекстЗапроса + " + | И ДополнительныеОтчетыИОбработкиРазделы.Раздел = &Раздел + | И ПользовательскиеНастройкиДоступаКОбработкам.Доступно"; + Запрос.Параметры.Вставить("Раздел", Раздел); + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + " + |УПОРЯДОЧИТЬ ПО + | Представление Возр"; + + Запрос.Текст = ТекстЗапроса; + + Запрос.Параметры.Вставить("ВидОбработок", ВидОбработок); + + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + // Проверяет, является ли переданное имя формы основной формой объекта метаданных, // полное имя которого передается в параметре ПолноеИмяОбъектаМетаданных // Параметры @@ -94,24 +569,6 @@ КонецФункции -// Обработчик экземпляра регламентного задания ЗапускОбработок. -// Запускает обработчик глобальной обработки по регламентному заданию, -// с указанным идентификатором команды. -// -// Параметры -// ВнешняяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки -// ИдентификаторКоманды - Строка - идентификатор выполняемой команды -// -Процедура ВыполнитьОбработкуПоРегламентномуЗаданию(ВнешняяОбработка, ИдентификаторКоманды) Экспорт - - НачалоВыполненияОбработки(ВнешняяОбработка, ИдентификаторКоманды); - - ВыполнитьОбработкуНепосредственно(ВнешняяОбработка, ИдентификаторКоманды, ВнешняяОбработка.БезопасныйРежим); - - ОкончаниеРаботыОбработки(ВнешняяОбработка, ИдентификаторКоманды); - -КонецПроцедуры - // Функция возвращает таблицу значений со списком объектов метаданных, // к которым может быть применена обработка переданного вида. // Список объектов метаданных берется из общий команд, соответствующих @@ -133,13 +590,13 @@ Команда = Неопределено; - Если Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта Тогда + Если Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта Тогда Команда = Метаданные.ОбщиеКоманды.ДополнительныеОтчетыИОбработкиЗаполнениеОбъекта; - ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Тогда + ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Тогда Команда = Метаданные.ОбщиеКоманды.ДополнительныеОтчетыИОбработкиОтчеты; - ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма Тогда + ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма Тогда Команда = Метаданные.ОбщиеКоманды.ДополнительныеОтчетыИОбработкиПечатныеФормы; - ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов Тогда + ИначеЕсли Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов Тогда Команда = Метаданные.ОбщиеКоманды.ДополнительныеОтчетыИОбработкиСозданиеСвязанныхОбъектов; КонецЕсли; @@ -187,37 +644,6 @@ КонецФункции -// Выполняет подключение внешней обработки. После подключения обработка -// становится известной в системе под определенным именем. После этого -// можно открывать форму обработки. -// -// Параметры -// ВнешняяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки -// БезопасныйРежим - Булево - требуется ли запускать обработку в безопасном режиме -// -// Возвращаемое значение -// Имя обработки - строка - имя обработки известное системе -// -Функция ПодключитьВнешнююОбработку(Ссылка) Экспорт - // Проверка корректности переданных параметров - Если ТипЗнч(Ссылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") - ИЛИ Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда - Возврат Неопределено; - КонецЕсли; - - // Подключение - УстановитьПривилегированныйРежим(Истина); - Если Ссылка.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет - ИЛИ Ссылка.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда - Менеджер = ВнешниеОтчеты; - Иначе - Менеджер = ВнешниеОбработки; - КонецЕсли; - АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Ссылка.ХранилищеОбработки.Получить()); - - Возврат Менеджер.Подключить(АдресВоВременномХранилище, , Ссылка.БезопасныйРежим); -КонецФункции - // Создает объект обработки и передает ему управление через известный интерфейс. // Для назначаемых обработок так же указываются объекты назначения. Из некоторых обработок // происходит получение результата выполнения. @@ -225,11 +651,10 @@ // Параметры // ВнешняяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки // ИдентификаторКоманды - Строка - идентификатор одной из команд обработки -// БезопасныйРежим - Булево - требуется ли запускать обработку в безопасном режиме // ОбъектыНазначения - Массив - объекты назначения обработки // РезультатВыполнения - Массив - используется для передачи результата выполнения обработки // -Процедура ВыполнитьОбработкуНепосредственно(ВнешняяОбработкаСсылка, ИдентификаторКоманды, БезопасныйРежим, +Процедура ВыполнитьОбработкуНепосредственно(ВнешняяОбработкаСсылка, ИдентификаторКоманды, ОбъектыНазначения = Неопределено, РезультатВыполнения = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -241,7 +666,7 @@ ПередаватьПараметрыВыполненияКоманды = Ложь; Если СведенияОВнешнейОбработке.Свойство("ВерсияБСП", ВерсияБСП) И - СтроковыеФункцииКлиентСервер.СравнитьВерсии(ВерсияБСП, "1.2.1.4") >= 0 Тогда + ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияБСП, "1.2.1.4") >= 0 Тогда ПередаватьПараметрыВыполненияКоманды = Истина; ПараметрыВыполненияКоманды = Новый Структура(); ПараметрыВыполненияКоманды.Вставить("ДополнительнаяОбработкаСсылка", ВнешняяОбработкаСсылка); @@ -314,6 +739,25 @@ КонецПроцедуры +// Запускает ВыполнитьОбработкуНепосредственно и помещает результат по адресу АдресХранилища +// +// Параметры: +// ПараметрыВызоваСервера (Структура) Элементы соответствуют параметрам ВыполнитьОбработкуНепосредственно +// АдресХранилища (Строка) Адрес временного хранилища по которому будет размещен результат выполнения +// +Процедура ВыполнитьОбработкуВКонтекстеСеанса(ПараметрыВызоваСервера, АдресХранилища) Экспорт + + ВыполнитьОбработкуНепосредственно( + ПараметрыВызоваСервера.ВнешняяОбработкаСсылка, + ПараметрыВызоваСервера.ИдентификаторКоманды, + ПараметрыВызоваСервера.ОбъектыНазначения, + ПараметрыВызоваСервера.РезультатВыполнения + ); + + ПоместитьВоВременноеХранилище(ПараметрыВызоваСервера, АдресХранилища); + +КонецПроцедуры + // Возвращает вид обработки по строковому представлению // Параметры // СтроковоеПредставление - Строка - строковое представление вида обработки @@ -338,162 +782,26 @@ КонецФункции -// Выполняет создание экземпляра внешней обработки (отчета) -// Параметры -// ВнешняяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки -// БезопасныйРежим - Булево - требуется ли запускать обработку в безопасном режиме -// Возвращаемое значение -// строка - имя обработки известное системе -// -Функция ПолучитьОбъектВнешнейОбработки(Ссылка) Экспорт - // Проверка корректности переданных параметров - Если ТипЗнч(Ссылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") - ИЛИ Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда - Возврат Неопределено; - КонецЕсли; - - // Подключение - ИмяОбработки = ПодключитьВнешнююОбработку(Ссылка); - - // Получение экземпляра объекта - Если Ссылка.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет - ИЛИ Ссылка.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда - Менеджер = ВнешниеОтчеты; - Иначе - Менеджер = ВнешниеОбработки; - КонецЕсли; - - Возврат Менеджер.Создать(ИмяОбработки); -КонецФункции - // Возвращает имя рабочего места команды // -Функция ПолучитьИмяРабочегоМеста(ИмяКоманды) Экспорт - - ТаблицаКоманд = ДополнительныеОтчетыИОбработкиПереопределяемый.ПолучитьОбщиеКомандыДополнительныхОбработок(); - - Найденные = ТаблицаКоманд.НайтиСтроки(Новый Структура("ИмяКоманды", ИмяКоманды)); - - Если Найденные.Количество() = 0 Тогда - ТаблицаКоманд = ДополнительныеОтчетыИОбработкиПереопределяемый.ПолучитьОбщиеКомандыДополнительныхОтчетов(); - Найденные = ТаблицаКоманд.НайтиСтроки(Новый Структура("ИмяКоманды", ИмяКоманды)); +Функция ПолучитьИмяРабочегоМеста(Раздел) Экспорт + Если Раздел = ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола() + ИЛИ Раздел = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка() Тогда + Возврат НСтр("ru = 'Рабочий стол'"); КонецЕсли; - Возврат Найденные[0].ИмяРабочегоМеста; - -КонецФункции - -// Получает список доступных команд дополнительных отчетов или обработок. -// -// Параметры -// ЭтоНазначаемыеОбработки - Булево - фильтр по назначаемым обработкам -// ПолноеИмяОбъектаМетаданных - строка - полное имя объекта метаданных -// ЭтоФормаОбъекта - булево - получать настройку для формы объекта -// ИмяРаздела - имя раздела для глобальных обработок -// ВидОбработок - ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - вид обработок -// -// Возвращаемое значение: -// ТаблицаЗначений - с полями -// Ссылка -// БезопасныйРежим -// Представление -// Идентификатор -// ВариантЗапуска -// ПоказыватьОповещение -// Модификатор -// -Функция ПолучитьДоступныеКоманды(ЭтоНазначаемыеОбработки, ПолноеИмяОбъектаМетаданных, ЭтоФормаОбъекта, ИмяРаздела, ВидОбработок) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - - ТекстЗапроса = " - |ВЫБРАТЬ - | ВЫРАЗИТЬ(ДополнительныеОтчетыИОбработкиКоманды.Представление КАК Строка(200)) КАК Представление, - | ДополнительныеОтчетыИОбработкиКоманды.Идентификатор КАК Идентификатор, - | ДополнительныеОтчетыИОбработкиКоманды.ПоказыватьОповещение КАК ПоказыватьОповещение, - | ДополнительныеОтчетыИОбработкиКоманды.Модификатор КАК Модификатор, - | ВЫБОР - | КОГДА ДополнительныеОтчетыИОбработкиКоманды.ВариантЗапуска = ЗНАЧЕНИЕ(Перечисление.СпособыВызоваДополнительныхОбработок.ВызовКлиентскогоМетода) - | ТОГДА ""ВызовКлиентскогоМетода"" - | КОГДА ДополнительныеОтчетыИОбработкиКоманды.ВариантЗапуска = ЗНАЧЕНИЕ(Перечисление.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода) - | ТОГДА ""ВызовСерверногоМетода"" - | КОГДА ДополнительныеОтчетыИОбработкиКоманды.ВариантЗапуска = ЗНАЧЕНИЕ(Перечисление.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы) - | ТОГДА ""ОткрытиеФормы"" - | КОНЕЦ КАК ВариантЗапуска, - | ДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка, - | ДополнительныеОтчетыИОбработки.БезопасныйРежим КАК БезопасныйРежим - |ИЗ - | Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки - | СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК ДополнительныеОтчетыИОбработкиКоманды - | ПО ДополнительныеОтчетыИОбработкиКоманды.Ссылка = ДополнительныеОтчетыИОбработки.Ссылка"; - - Если ЭтоНазначаемыеОбработки Тогда - ТекстЗапроса = ТекстЗапроса + " - | СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Назначение КАК ДополнительныеОтчетыИОбработкиНазначение - | ПО ДополнительныеОтчетыИОбработкиНазначение.Ссылка = ДополнительныеОтчетыИОбработки.Ссылка"; + Если ТипЗнч(Раздел) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + ПредставлениеРаздела = Раздел.Синоним; + ИначеЕсли ТипЗнч(Раздел) = Тип("ОбъектМетаданных") Тогда + ПредставлениеРаздела = Раздел.Представление(); Иначе - ТекстЗапроса = ТекстЗапроса + " - | СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Разделы КАК ДополнительныеОтчетыИОбработкиРазделы - | ПО ДополнительныеОтчетыИОбработкиРазделы.Ссылка = ДополнительныеОтчетыИОбработки.Ссылка - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам КАК ПользовательскиеНастройкиДоступаКОбработкам - | ПО ПользовательскиеНастройкиДоступаКОбработкам.ДополнительныйОтчетИлиОбработка = ДополнительныеОтчетыИОбработки.Ссылка - | И ПользовательскиеНастройкиДоступаКОбработкам.ИдентификаторКоманды = ДополнительныеОтчетыИОбработкиКоманды.Идентификатор - | И ПользовательскиеНастройкиДоступаКОбработкам.Пользователь = &Пользователь"; - Запрос.Параметры.Вставить("Пользователь", ОбщегоНазначения.ТекущийПользователь()); + ПредставлениеРаздела = Метаданные.Подсистемы.Найти(Раздел).Представление(); КонецЕсли; - ////////////////////////// - // блок наложения фильтров - - ТекстЗапроса = ТекстЗапроса + " - |ГДЕ - | ДополнительныеОтчетыИОбработки.Вид = &ВидОбработок - | И НЕ ДополнительныеОтчетыИОбработки.ПометкаУдаления - | И ( - | ДополнительныеОтчетыИОбработки.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется)"; - - Если РольДоступна(Метаданные.Роли.ДобавлениеИзменениеДополнительныхОтчетовИОбработок) - ИЛИ РольДоступна(Метаданные.Роли.ПолныеПрава) Тогда - ТекстЗапроса = ТекстЗапроса + " - | ИЛИ ДополнительныеОтчетыИОбработки.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки)"; - КонецЕсли; - - ТекстЗапроса = ТекстЗапроса + " - | )"; - - Если ЭтоНазначаемыеОбработки Тогда - ТекстЗапроса = ТекстЗапроса + " - | И ДополнительныеОтчетыИОбработкиНазначение.ПолноеИмяОбъектаМетаданных ПОДОБНО &ПолноеИмяОбъектаМетаданных"; - - Запрос.Параметры.Вставить("ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных); - - Если ЭтоФормаОбъекта Тогда - ТекстЗапроса = ТекстЗапроса + " - | И ДополнительныеОтчетыИОбработки.ИспользоватьДляФормыОбъекта"; - Иначе - ТекстЗапроса = ТекстЗапроса + " - | И ДополнительныеОтчетыИОбработки.ИспользоватьДляФормыСписка"; - КонецЕсли; - - Иначе - ТекстЗапроса = ТекстЗапроса + " - | И ДополнительныеОтчетыИОбработкиРазделы.ИмяРаздела = &ИмяРаздела - | И ПользовательскиеНастройкиДоступаКОбработкам.Доступно"; - Запрос.Параметры.Вставить("ИмяРаздела", ИмяРаздела); - КонецЕсли; - - ТекстЗапроса = ТекстЗапроса + " - |УПОРЯДОЧИТЬ ПО - | Представление Возр"; - - Запрос.Текст = ТекстЗапроса; - - Запрос.Параметры.Вставить("ВидОбработок", ВидОбработок); - - Возврат Запрос.Выполнить().Выгрузить(); - + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Раздел ""%1""'"), + ПредставлениеРаздела + ); КонецФункции // Функция для добавления команд дополнительных обработок в список "своих" @@ -503,16 +811,18 @@ УстановитьПривилегированныйРежим(Истина); Для Каждого ЭлементСтрока Из МассивКоманд Цикл - Запись = РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам.СоздатьМенеджерЗаписи(); - Запись.ДополнительныйОтчетИлиОбработка = ЭлементСтрока.Обработка; - Запись.ИдентификаторКоманды = ЭлементСтрока.Идентификатор; - Запись.Пользователь = ОбщегоНазначения.ТекущийПользователь(); - Запись.Доступно = Истина; + + Запись.ДополнительныйОтчетИлиОбработка = ЭлементСтрока.Обработка; + Запись.ИдентификаторКоманды = ЭлементСтрока.Идентификатор; + Запись.Пользователь = Пользователи.ТекущийПользователь(); + Запись.Доступно = Истина; Запись.Записать(Истина); КонецЦикла; + УстановитьПривилегированныйРежим(Ложь); + КонецПроцедуры // Функция для исключения команд дополнительных обработок из списока "своих" @@ -524,14 +834,19 @@ Для Каждого ЭлементСтрока Из МассивКоманд Цикл Запись = РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам.СоздатьМенеджерЗаписи(); - Запись.ДополнительныйОтчетИлиОбработка = ЭлементСтрока.Обработка; - Запись.ИдентификаторКоманды = ЭлементСтрока.Идентификатор; - Запись.Пользователь = ОбщегоНазначения.ТекущийПользователь(); + + Запись.ДополнительныйОтчетИлиОбработка = ЭлементСтрока.Обработка; + Запись.ИдентификаторКоманды = ЭлементСтрока.Идентификатор; + Запись.Пользователь = Пользователи.ТекущийПользователь(); + Запись.Прочитать(); + Запись.Удалить(); КонецЦикла; + УстановитьПривилегированныйРежим(Ложь); + КонецПроцедуры // Устанавливает доступность команды для указанных типа объекта метаданных и типа формы @@ -578,63 +893,10 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Блок экспортных функций работы с регламентными заданиями - -Процедура ОбновитьСведенияПоРасписанию(ДополнительнаяОбработка, Команда, Расписание, Использование, Отказ) Экспорт - - // получаем регламентное задание по идентификатору, если объект не находим, то создаем новый - РегламентноеЗаданиеОбъект = ПолучитьРегламентноеЗадание(Команда.РегламентноеЗаданиеGUID); - - // обновляем свойства РЗ - УстановитьПараметрыРегламентногоЗадания(РегламентноеЗаданиеОбъект, Расписание, Использование, ДополнительнаяОбработка.Ссылка, Команда); - - // записываем измененное задание - ЗаписатьРегламентноеЗадание(Отказ, РегламентноеЗаданиеОбъект); - - //запоминаем GUID регл. задания в реквизите объекта - Команда.РегламентноеЗаданиеGUID = РегламентноеЗаданиеОбъект.УникальныйИдентификатор; - -КонецПроцедуры - -// Выполняет удаление регламентного задания по GUID -// Параметры -// РегламентноеЗаданиеGUID - УникальныйИдентификатор - уникальный идентификатор регламентного задания -// -Процедура УдалитьРегламентноеЗадание(РегламентноеЗаданиеGUID) Экспорт - - РегламентноеЗаданиеОбъект = НайтиРегламентноеЗадание(РегламентноеЗаданиеGUID); - - Если РегламентноеЗаданиеОбъект <> Неопределено Тогда - УстановитьПривилегированныйРежим(Истина); - РегламентноеЗаданиеОбъект.Удалить(); - КонецЕсли; - -КонецПроцедуры - -// Выполняет поиск регламентного задания по GUID -// Параметры -// РегламентноеЗаданиеGUID - УникальныйИдентификатор - уникальный идентификатор регламентного задания -// Возвращаемое значение -// РегламентноеЗадание - если найдено -// Неопределено - если не найдено -// -Функция НайтиРегламентноеЗадание(РегламентноеЗаданиеGUID) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Попытка - ТекущееРегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗаданиеGUID); - Исключение - ТекущееРегламентноеЗадание = Неопределено; - КонецПопытки; - - Возврат ТекущееРегламентноеЗадание; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Блок служебных функций работы с регламентными заданиями +// Локальные служебные процедуры и функции +// Для внутреннего использования +// Процедура УстановитьПараметрыРегламентногоЗадания(РегламентноеЗаданиеОбъект, Расписание, Использование, Ссылка, Команда) ПараметрыРЗ = Новый Массив; @@ -663,6 +925,16 @@ // Процедура ЗаписатьРегламентноеЗадание(Отказ, РегламентноеЗаданиеОбъект) + УстановленноеИспользование = РегламентноеЗаданиеОбъект.Использование; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + // Если включено разделение, необходимо отключить использование + // разделенного регламентного задания + РегламентноеЗаданиеОбъект.Использование = Ложь; + + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); Попытка @@ -678,10 +950,17 @@ КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения, , , , Отказ); + + Возврат; + КонецПопытки; + СтандартныеПодсистемыПереопределяемый.ПриЗаписиЗаданияДопОбработки(РегламентноеЗаданиеОбъект, УстановленноеИспользование); + КонецПроцедуры +// Для внутреннего использования +// Функция ПолучитьРегламентноеЗадание(РегламентноеЗаданиеGUID) УстановитьПривилегированныйРежим(Истина); @@ -699,83 +978,48 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - +// Для внутреннего использования +// Процедура НачалоВыполненияОбработки(ДополнительнаяОбработкаСсылка, ИдентификаторКоманды) - ТекстСообщения = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Запуск обработчика. Команда: %1.'"), - ИдентификаторКоманды); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Запуск обработчика. Команда: %1.'"), + ИдентификаторКоманды + ); ЗаписатьСобытиеВЖурналРегистрации(ДополнительнаяОбработкаСсылка, ТекстСообщения); КонецПроцедуры +// Для внутреннего использования +// Процедура ОкончаниеРаботыОбработки(ДополнительнаяОбработкаСсылка, ИдентификаторКоманды) - ТекстСообщения = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Возврат из обработчика. Команда: %1.'"), - ИдентификаторКоманды); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Возврат из обработчика. Команда: %1.'"), + ИдентификаторКоманды + ); ЗаписатьСобытиеВЖурналРегистрации(ДополнительнаяОбработкаСсылка, ТекстСообщения); КонецПроцедуры +// Для внутреннего использования +// Процедура ЗаписатьСобытиеВЖурналРегистрации(ДополнительнаяОбработкаСсылка, ТекстСообщения) - ЗаписьЖурналаРегистрации(НСтр("ru = 'Дополнительные отчеты и обработки'"), - УровеньЖурналаРегистрации.Информация, - ДополнительнаяОбработкаСсылка.Метаданные(), - ДополнительнаяОбработкаСсылка, - ТекстСообщения); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Дополнительные отчеты и обработки'"), + УровеньЖурналаРегистрации.Информация, + ДополнительнаяОбработкаСсылка.Метаданные(), + ДополнительнаяОбработкаСсылка, + ТекстСообщения + ); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ - -// Добавляет в список Обработчики процедуры-обработчики обновления, -// необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. +// Для внутреннего использования // -Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.7.1"; - Обработчик.Процедура = "ДополнительныеОтчетыИОбработки.ОбновитьПользовательскиеНастройкиДоступаКОбработкам"; - -КонецПроцедуры - -// Процедура обновления записей о доступности дополнительных обработок -// -Процедура ОбновитьПользовательскиеНастройкиДоступаКОбработкам() Экспорт - - ПользователиСДопОбработками = ПолучитьМассивПользователейСДоступомКДополнительнымОбработкам(); - - ТаблицаЗаписей = ПолучитьТаблицуЗаписей(ПользователиСДопОбработками); - - Для Каждого Пользователь Из ПользователиСДопОбработками Цикл - НаборЗаписей = РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Пользователь.Установить(Пользователь); - ЗаписиПоБыстромуДоступу = ТаблицаЗаписей.НайтиСтроки(Новый Структура("Пользователь,Доступно", Пользователь, Истина)); - Для Каждого ЗаписьБыстрогоДоступа Из ЗаписиПоБыстромуДоступу Цикл - НоваяЗапись = НаборЗаписей.Добавить(); - НоваяЗапись.ДополнительныйОтчетИлиОбработка = ЗаписьБыстрогоДоступа.Обработка; - НоваяЗапись.ИдентификаторКоманды = ЗаписьБыстрогоДоступа.Идентификатор; - НоваяЗапись.Пользователь = Пользователь; - НоваяЗапись.Доступно = Истина; - КонецЦикла; - НаборЗаписей.Записать(Истина); - КонецЦикла; - -КонецПроцедуры - Функция ПолучитьТаблицуЗаписей(ПользователиСДопОбработками) ТекстЗапроса = "ВЫБРАТЬ @@ -840,6 +1084,8 @@ КонецФункции +// Для внутреннего использования +// Функция ПолучитьМассивПользователейСДоступомКДополнительнымОбработкам() Результат = Новый Массив; @@ -853,19 +1099,16 @@ ВсеПользователи = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + УстановитьПривилегированныйРежим(Истина); Для Каждого Пользователь Из ВсеПользователи Цикл - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Пользователь.ИдентификаторПользователяИБ); - - Если ПользовательИБ <> Неопределено Тогда - Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.ИспользованиеДополнительныхОтчетовИОбработок) - ИЛИ ПользовательИБ.Роли.Содержит(Метаданные.Роли.ДобавлениеИзменениеДополнительныхОтчетовИОбработок) - ИЛИ ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда - Результат.Добавить(Пользователь); - КонецЕсли; + Если Пользователи.РолиДоступны("ИспользованиеДополнительныхОтчетовИОбработок, + |ДобавлениеИзменениеДополнительныхОтчетовИОбработок", Пользователь) Тогда + Результат.Добавить(Пользователь); КонецЕсли; КонецЦикла; + УстановитьПривилегированныйРежим(Ложь); ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ | Пользователь @@ -888,100 +1131,3 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Служебные функции, используются в общем модуле ДополнительныеОтчетыИОбработкиПереопределяемый -// - -// Служебная функция используется при определении таблицы рабочих мест для -// глобальных дополнительных отчетов и обработок -// Возвращаемое значение -// Таблица значений, две колонки: -// ИмяКоманды - строка -// ИмяРабочегоМеста - строка -// -Функция ПолучитьТаблицуКоманд() Экспорт - - Таблица = Новый ТаблицаЗначений; - - Таблица.Колонки.Добавить("ИмяКоманды", Новый ОписаниеТипов("Строка")); - Таблица.Колонки.Добавить("ИмяРабочегоМеста", Новый ОписаниеТипов("Строка")); - - Возврат Таблица; - -КонецФункции - -// Служебная процедура, используется при добавлении описания нового рабочего места -// для глобальных дополнительных отчетов и обработок -// Параметры -// ТаблицаКоманд - таблица значений - таблица, получаемая с помощью ПолучитьТаблицуКоманд() -// ИмяКоманды - строка - имя связанной общей команды -// ИмяРабочегоМеста - строка - пользовательское представление рабочего места -// -Процедура ДобавитьКоманду(ТаблицаКоманд, ИмяКоманды, ИмяРабочегоМеста) Экспорт - - НоваяСтрока = ТаблицаКоманд.Добавить(); - НоваяСтрока.ИмяКоманды = ИмяКоманды; - НоваяСтрока.ИмяРабочегоМеста = ИмяРабочегоМеста; - -КонецПроцедуры - -// Служебная процедура для получения команд по переданным разделам -// Параметры: -// МассивИменРазделов - массив строк - каждая строка - имя раздела -// -Функция ПолучитьДоступныеДополнительныеОтчеты(МассивИменРазделов) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - - ТекстЗапроса = "ВЫБРАТЬ - | ДополнительныеОтчетыИОбработкиКоманды.Представление КАК Представление, - | ДополнительныеОтчетыИОбработкиКоманды.Идентификатор КАК Идентификатор, - | ДополнительныеОтчетыИОбработкиКоманды.ПоказыватьОповещение КАК ПоказыватьОповещение, - | ДополнительныеОтчетыИОбработкиКоманды.Модификатор КАК Модификатор, - | ВЫБОР - | КОГДА ДополнительныеОтчетыИОбработкиКоманды.ВариантЗапуска = ЗНАЧЕНИЕ(Перечисление.СпособыВызоваДополнительныхОбработок.ВызовКлиентскогоМетода) - | ТОГДА ""ВызовКлиентскогоМетода"" - | КОГДА ДополнительныеОтчетыИОбработкиКоманды.ВариантЗапуска = ЗНАЧЕНИЕ(Перечисление.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода) - | ТОГДА ""ВызовСерверногоМетода"" - | КОГДА ДополнительныеОтчетыИОбработкиКоманды.ВариантЗапуска = ЗНАЧЕНИЕ(Перечисление.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы) - | ТОГДА ""ОткрытиеФормы"" - | КОНЕЦ КАК ВариантЗапуска, - | ДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка, - | ДополнительныеОтчетыИОбработки.БезопасныйРежим КАК БезопасныйРежим, - | ЕСТЬNULL(ПользовательскиеНастройкиДоступаКОбработкам.Доступно, ЛОЖЬ) КАК Доступно - |ИЗ - | Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК ДополнительныеОтчетыИОбработкиКоманды - | ПО (ДополнительныеОтчетыИОбработкиКоманды.Ссылка = ДополнительныеОтчетыИОбработки.Ссылка) - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Разделы КАК ДополнительныеОтчетыИОбработкиРазделы - | ПО (ДополнительныеОтчетыИОбработкиРазделы.Ссылка = ДополнительныеОтчетыИОбработки.Ссылка) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам КАК ПользовательскиеНастройкиДоступаКОбработкам - | ПО (ПользовательскиеНастройкиДоступаКОбработкам.ДополнительныйОтчетИлиОбработка = ДополнительныеОтчетыИОбработки.Ссылка) - | И (ПользовательскиеНастройкиДоступаКОбработкам.ИдентификаторКоманды = ДополнительныеОтчетыИОбработкиКоманды.Идентификатор) - | И (ПользовательскиеНастройкиДоступаКОбработкам.Пользователь = &Пользователь) - |ГДЕ - | ДополнительныеОтчетыИОбработки.Вид = ЗНАЧЕНИЕ(Перечисление.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет) - | И НЕ ДополнительныеОтчетыИОбработки.ПометкаУдаления - | И ( - | ДополнительныеОтчетыИОбработки.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется)"; - - Если РольДоступна(Метаданные.Роли.ДобавлениеИзменениеДополнительныхОтчетовИОбработок) - ИЛИ РольДоступна(Метаданные.Роли.ПолныеПрава) Тогда - ТекстЗапроса = ТекстЗапроса + " - | ИЛИ ДополнительныеОтчетыИОбработки.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки)"; - КонецЕсли; - - ТекстЗапроса = ТекстЗапроса + " - | ) - | И ДополнительныеОтчетыИОбработкиРазделы.ИмяРаздела В (&МассивИменРазделов)"; - - Запрос.Текст = ТекстЗапроса; - - Запрос.Параметры.Вставить("Пользователь", ОбщегоНазначения.ТекущийПользователь()); - Запрос.Параметры.Вставить("МассивИменРазделов", МассивИменРазделов); - - Возврат Запрос.Выполнить().Выгрузить(); - -КонецФункции diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl new file mode 100644 index 000000000..efbc79ef6 --- /dev/null +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl @@ -0,0 +1,55 @@ +//////////////////////////////////////////////////////////////////////////////// +// ДополнительныеОтчетыИОбработкиВМоделиСервиса. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Для выполнения регламентных заданий в модели сервиса. +// +// Параметры: +// РегламентноеЗадание - РегламентноеЗадание - регламентное задание по +// по выполнению дополнительной обработки +// Использование - Булево - Истина: задание включено, Ложь: выключено. +// +Процедура УточнитьПараметрыЗаданияВОчереди(РегламентноеЗадание, Использование) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + // Если включено разделение, необходимо заполнить регистр РазделенныеРегламентныеЗадания. + ИдентификаторЗадания = РегламентноеЗадание.УникальныйИдентификатор; + НаборЗаписей = РегистрыСведений.РазделенныеРегламентныеЗадания.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.РегламентноеЗадание.Установить(ИдентификаторЗадания); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() = 0 Тогда + Запись = НаборЗаписей.Добавить(); + Запись.РегламентноеЗадание = ИдентификаторЗадания; + Иначе + Запись = НаборЗаписей[0]; + КонецЕсли; + Запись.Использование = Использование; + Запись.ИндивидуальнаяНастройка = Истина; + + НаборЗаписей.Записать(); + + Отбор = Новый Структура("РегламентноеЗадание", ИдентификаторЗадания); + Задание = ОчередьЗаданий.ПолучитьЗадание(Отбор); + + ПараметрыЗадания = Новый Структура("РегламентноеЗадание, Параметры, ИмяМетода, Использование, Ключ", + ИдентификаторЗадания, + РегламентноеЗадание.Параметры, + РегламентноеЗадание.Метаданные.ИмяМетода, + Использование, + РегламентноеЗадание.Ключ + ); + + Если Задание = Неопределено Тогда + ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); + Иначе + ОчередьЗаданий.ИзменитьЗадание(Задание, ПараметрыЗадания); + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo new file mode 100644 index 000000000..66e261865 --- /dev/null +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo @@ -0,0 +1,11 @@ + + + ДополнительныеОтчетыИОбработкиВМоделиСервиса + + ru + Дополнительные отчеты и обработки в модели сервиса + + true + true + true + diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl index 54e14292e..095583656 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl @@ -1,283 +1,121 @@ //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Подсистема "Дополнительные отчеты и обработки" +// +//////////////////////////////////////////////////////////////////////////////// -// Обработчик команд обращения к дополнительным отчетам и обработкам. -// Открывает форму с доступными командами и передает ей объекты назначения -// и вид обработок. -// +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Открывает форму с доступными командами. +// // Параметры: -// ПараметрКоманды - Массив - объекты информационной базы, для которых была вызвана команда -// ПараметрыВыполненияКоманды - ДанныеФормыСтруктура -параметры выполнения команды -// Вид - строка - строковое представление вида обработки -// ИмяРаздела - строка - имя раздела для фильтрации обработок, -// указывается только для глобальных обработок +// ПараметрКоманды (...) Передается "как есть" из параметров обработчика команды. +// ПараметрыВыполненияКоманды (...) Передается "как есть" из параметров обработчика команды. +// Вид (Строка) Вид обработки, который можно получить из серии функций: +// ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработки<...>() +// ИмяРаздела (Строка) Имя раздела командного интерфейса, из которого вызывается команда. // -Процедура ОткрытьФормуКомандДополнительныхОтчетовИОбработок(ПараметрКоманды, - ПараметрыВыполненияКоманды, Вид, ИмяРаздела = "") Экспорт - - ПараметрКомандыСписок = Новый СписокЗначений; +Процедура ОткрытьФормуКомандДополнительныхОтчетовИОбработок(ПараметрКоманды, ПараметрыВыполненияКоманды, Вид, ИмяРаздела = "") Экспорт + ОбъектыНазначения = Новый СписокЗначений; Если ТипЗнч(ПараметрКоманды) = Тип("Массив") Тогда // назначаемая обработка - ПараметрКомандыСписок.ЗагрузитьЗначения(ПараметрКоманды); + ОбъектыНазначения.ЗагрузитьЗначения(ПараметрКоманды); КонецЕсли; - Параметры = Новый Структура("ОбъектыНазначения,Вид,ИмяРаздела", - ПараметрКомандыСписок, Вид, ИмяРаздела); + Параметры = Новый Структура("ОбъектыНазначения, Вид, ИмяРаздела"); + Параметры.ОбъектыНазначения = ОбъектыНазначения; + Параметры.Вид = Вид; + Параметры.ИмяРаздела = ИмяРаздела; Если ТипЗнч(ПараметрКоманды) = Тип("Массив") Тогда // назначаемая обработка Параметры.Вставить("ИмяФормы", ПараметрыВыполненияКоманды.Источник.ИмяФормы); КонецЕсли; - ОткрытьФорму("ОбщаяФорма.ДополнительныеОтчетыИОбработки", Параметры, - ПараметрыВыполненияКоманды.Источник); - -КонецПроцедуры - -// Используется для управления вызовами внешних отчетов и обработок. -// В зависимости от варианта запуска обработки либо открывает форму обработки, -// либо вызывает клиентский метод формы либо передает управление на сервер -// для последующего вызова обработки на сервере. Так же отвечает за -// отображения оповещения и оповещения об измененных объектах. -// -// Параметры: -// ВнешняяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки -// ВидОбработки - Строка - строковое представление вида обработки -// ИдентификаторКоманды - Строка - идентификатор команды -// БезопасныйРежим - Булево - требуется ли использовать обработку в безопасном режиме -// ВариантЗапуска - ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок - вариант запуска обработки -// ПоказыватьОповещение - Булево - требуется ли показывать оповещение о начале и окончании -// выполнения обработки. Не используется если ВариантЗапуска задан как ОткрытиеФормы -// Модификатор - Строка - модификатор команды, используется для печатных форм на основе макетов табличных документов -// ОбъектыНазначенияМассив - Массив - ссылки на объекты информационной базы -// -Процедура ВыполнитьОбработку(ВнешняяОбработка, - ВидОбработки, ИдентификаторКоманды, БезопасныйРежим, ВариантЗапуска, ПоказыватьОповещение, - Модификатор, ОбъектыНазначенияМассив, Отказ = Ложь) Экспорт - - Если ВариантЗапуска = ВариантЗапускаОткрытиеФормы() Тогда - - ВыполнитьОткрытиеФормыОбработки(ВнешняяОбработка, ВидОбработки, ИдентификаторКоманды, - БезопасныйРежим, ОбъектыНазначенияМассив); - - ИначеЕсли ВариантЗапуска = ВариантЗапускаВызовКлиентскогоМетода() Тогда - - ВыполнитьКлиентскийМетодОбработки(ВнешняяОбработка, ВидОбработки, ИдентификаторКоманды, - БезопасныйРежим, ПоказыватьОповещение, ОбъектыНазначенияМассив); - - ИначеЕсли ВариантЗапуска = ВариантЗапускаВызовСерверногоМетода() Тогда - - ВыполнитьСерверныйМетодОбработки(ВнешняяОбработка, ВидОбработки, ИдентификаторКоманды, - БезопасныйРежим, ПоказыватьОповещение, Модификатор, ОбъектыНазначенияМассив, Отказ); - - КонецЕсли; + ОткрытьФорму( + "ОбщаяФорма.ДополнительныеОтчетыИОбработки", + Параметры, + ПараметрыВыполненияКоманды.Источник + ); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция ЭтоГлобальнаяОбработка(Вид) +// Вызывает диалог сохранения редактируемых данных произвольной формы +// Вызывается из обработчиков "ПередЗакрытием" и "ПриЗакрытии". +// +// Параметры: +// Отказ - (...) Флаг отказа от закрытия формы. +// |- (Булево) для обработчика "ПередЗакрытием", используется для толстого и тонкого клиентов +// |- (Неопределено) для обработчика "ПриЗакрытии", используется для веб клиента +// Модифицированность - (Булево) Флаг модифицированности формы. +// Если форма не модифицирована, то сохранять нечего и запрос не требуется +// +// Возвращаемое значение: +// (Булево) Необходимость процедуры сохрания данных формы +// +Функция СохранитьДанныеПроизвольнойФормы(Отказ = Неопределено, Модифицированность) Экспорт + // Изменение сохраняемых данных должно устанавливать модифицированность формы + Если Модифицированность <> Истина Тогда + Возврат Ложь; + КонецЕсли; - Возврат (Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка()) - ИЛИ (Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет()); + // Определение клиента + #Если ВебКлиент Тогда + ЭтоВебКлиент = Истина; + #Иначе + ЭтоВебКлиент = Ложь; + #КонецЕсли + // Предупреждение необходимо вызвать только один раз для одного клиента + Если ЭтоВебКлиент <> (Отказ = Неопределено) Тогда + Возврат Ложь; + КонецЕсли; + + ЗаголовокВопроса = НСтр("ru = '1С: Предприятие'"); + + ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(1, НСтр("ru = 'Да'")); + Кнопки.Добавить(2, НСтр("ru = 'Нет'")); + Если НЕ ЭтоВебКлиент Тогда + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + КонецЕсли; + + Ответ = Вопрос(ТекстВопроса, Кнопки, 60, 1, ЗаголовокВопроса); + + Если Ответ = 1 Тогда + Возврат Истина; + КонецЕсли; + + Если НЕ ЭтоВебКлиент И Ответ = КодВозвратаДиалога.Отмена Тогда + Отказ = Истина; + КонецЕсли; + + Возврат Ложь; КонецФункции -Процедура ВыполнитьОткрытиеФормыОбработки( - ВнешняяОбработка, - ВидОбработки, - ИдентификаторКоманды, - БезопасныйРежим, - ОбъектыНазначенияМассив) - - ИмяОбработки = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(ВнешняяОбработка); - - ПараметрыОбработки = Новый Структура("ИдентификаторКоманды,ДополнительнаяОбработкаСсылка"); - ПараметрыОбработки.ИдентификаторКоманды = ИдентификаторКоманды; - ПараметрыОбработки.ДополнительнаяОбработкаСсылка = ВнешняяОбработка; - - Если НЕ ЭтоГлобальнаяОбработка(ВидОбработки) Тогда - ПараметрыОбработки.Вставить("ОбъектыНазначения", ОбъектыНазначенияМассив); - КонецЕсли; - - Если ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет() - ИЛИ ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет() Тогда - ОткрытьФорму("ВнешнийОтчет."+ ИмяОбработки +".Форма", ПараметрыОбработки); - Иначе - ОткрытьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма", ПараметрыОбработки); - КонецЕсли; - -КонецПроцедуры - -Процедура ВыполнитьКлиентскийМетодОбработки( - ВнешняяОбработка, - ВидОбработки, - ИдентификаторКоманды, - БезопасныйРежим, - ПоказыватьОповещение, - ОбъектыНазначенияМассив) - - Если ПоказыватьОповещение Тогда - ПоказатьОповещениеПользователя(НСтр("ru = 'Обработка выполняется...'")); - КонецЕсли; - - ИмяОбработки = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(ВнешняяОбработка); - - ПараметрыОбработки = Новый Структура("ИдентификаторКоманды,ДополнительнаяОбработкаСсылка"); - ПараметрыОбработки.ИдентификаторКоманды = ИдентификаторКоманды; - ПараметрыОбработки.ДополнительнаяОбработкаСсылка = ВнешняяОбработка; - - Если НЕ ЭтоГлобальнаяОбработка(ВидОбработки) Тогда - ПараметрыОбработки.Вставить("ОбъектыНазначения", ОбъектыНазначенияМассив); - КонецЕсли; - - Если ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет() - ИЛИ ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет() Тогда - ФормаОбработки = ПолучитьФорму("ВнешнийОтчет."+ ИмяОбработки +".Форма", ПараметрыОбработки); - Иначе - ФормаОбработки = ПолучитьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма", ПараметрыОбработки); - КонецЕсли; - - Если ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка() - ИЛИ ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет() Тогда - - ФормаОбработки.ВыполнитьКоманду(ИдентификаторКоманды); - - ИначеЕсли ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиСозданиеСвязанныхОбъектов() Тогда - - СозданныеОбъекты = Новый Массив; - - ФормаОбработки.ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты); - - ТипыСозданныхОбъектов = Новый Массив; - - Для Каждого СозданныйОбъект Из СозданныеОбъекты Цикл - Тип = ТипЗнч(СозданныйОбъект); - Если ТипыСозданныхОбъектов.Найти(Тип) = Неопределено Тогда - ТипыСозданныхОбъектов.Добавить(Тип); - КонецЕсли; - КонецЦикла; - - Для Каждого Тип Из ТипыСозданныхОбъектов Цикл - ОповеститьОбИзменении(Тип); - КонецЦикла; - - ИначеЕсли ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма() Тогда - - ФормаОбработки.Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив); - - ИначеЕсли ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта() Тогда - - ФормаОбработки.ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив); - - ТипыИзмененныхОбъектов = Новый Массив; - - Для Каждого ИзмененныйОбъект Из ОбъектыНазначенияМассив Цикл - Тип = ТипЗнч(ИзмененныйОбъект); - Если ТипыИзмененныхОбъектов.Найти(Тип) = Неопределено Тогда - ТипыИзмененныхОбъектов.Добавить(Тип); - КонецЕсли; - КонецЦикла; - - Для Каждого Тип Из ТипыИзмененныхОбъектов Цикл - ОповеститьОбИзменении(Тип); - КонецЦикла; - - ИначеЕсли ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет() Тогда - - ФормаОбработки.ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив); - - КонецЕсли; - - Если ПоказыватьОповещение Тогда - ПоказатьОповещениеПользователя(НСтр("ru = 'Обработка завершена...'")); - КонецЕсли; - -КонецПроцедуры - -Процедура ВыполнитьСерверныйМетодОбработки( - ВнешняяОбработка, - ВидОбработки, - ИдентификаторКоманды, - БезопасныйРежим, - ПоказыватьОповещение, - Модификатор, - ОбъектыНазначенияМассив, - Отказ) - - Если ПоказыватьОповещение Тогда - ПоказатьОповещениеПользователя(НСтр("ru = 'Обработка выполняется...'")); - КонецЕсли; - - Если ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка() - ИЛИ ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет() Тогда - - ДополнительныеОтчетыИОбработки.ВыполнитьОбработкуНепосредственно(ВнешняяОбработка, ИдентификаторКоманды, БезопасныйРежим); - - ИначеЕсли ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиСозданиеСвязанныхОбъектов() Тогда - - ТипыСозданныхОбъектов = Новый Массив; - - ДополнительныеОтчетыИОбработки.ВыполнитьОбработкуНепосредственно(ВнешняяОбработка, ИдентификаторКоманды, БезопасныйРежим, ОбъектыНазначенияМассив, ТипыСозданныхОбъектов); - - Для Каждого Тип Из ТипыСозданныхОбъектов Цикл - ОповеститьОбИзменении(Тип); - КонецЦикла; - - ИначеЕсли ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма() - И Модификатор = "ПечатьMXL" Тогда - - ПараметрыИсточника = Новый Структура; - ПараметрыИсточника.Вставить("ИдентификаторКоманды", ИдентификаторКоманды); - ПараметрыИсточника.Вставить("ОбъектыНазначения", ОбъектыНазначенияМассив); - ПараметрыИсточника.Вставить("БезопасныйРежим", БезопасныйРежим); - - ПараметрыОткрытия = Новый Структура("ИсточникДанных,ПараметрыИсточника"); - ПараметрыОткрытия.ИсточникДанных = ВнешняяОбработка; - ПараметрыОткрытия.ПараметрыИсточника = ПараметрыИсточника; - - Если УправлениеПечатьюКлиент.ПроверитьДокументыПроведены(ОбъектыНазначенияМассив) Тогда - ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия); - Иначе - Отказ = Истина; - КонецЕсли; - - ИначеЕсли ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта() Тогда - - ИзмененныеОбъекты = Новый Массив; - - ДополнительныеОтчетыИОбработки.ВыполнитьОбработкуНепосредственно(ВнешняяОбработка, ИдентификаторКоманды, БезопасныйРежим, ОбъектыНазначенияМассив, ИзмененныеОбъекты); - - Для Каждого Тип Из ИзмененныеОбъекты Цикл - ОповеститьОбИзменении(Тип); - КонецЦикла; - - ИначеЕсли ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма() - ИЛИ ВидОбработки = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет() Тогда - - ДополнительныеОтчетыИОбработки.ВыполнитьОбработкуНепосредственно(ВнешняяОбработка, ИдентификаторКоманды, БезопасныйРежим, ОбъектыНазначенияМассив); - - КонецЕсли; - - Если ПоказыватьОповещение Тогда - ПоказатьОповещениеПользователя(НСтр("ru = 'Обработка завершена...'")); - КонецЕсли; - -КонецПроцедуры - -Функция ВариантЗапускаВызовКлиентскогоМетода() +// Для внутреннего использования +// +Функция ВариантЗапускаВызовКлиентскогоМетода() Экспорт Возврат "ВызовКлиентскогоМетода"; КонецФункции -Функция ВариантЗапускаВызовСерверногоМетода() +// Для внутреннего использования +// +Функция ВариантЗапускаВызовСерверногоМетода() Экспорт Возврат "ВызовСерверногоМетода"; КонецФункции -Функция ВариантЗапускаОткрытиеФормы() +// Для внутреннего использования +// +Функция ВариантЗапускаОткрытиеФормы() Экспорт Возврат "ОткрытиеФормы"; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl index 3bd7baed9..e0461e2b4 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl @@ -1,5 +1,10 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Дополнительные отчеты и обработки" +// +//////////////////////////////////////////////////////////////////////////////// -// Идентификаторы видов дополнительных внешних обработок +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Идентификатор обработки печатной формы // @@ -48,3 +53,21 @@ Возврат "ДополнительныйОтчет"; // не локализуется КонецФункции + +// Фильтр для диалогов выбора / сохранения дополнительных отчетов и обработок +// +Функция ФильтрДиалоговВыбораИСохранения() Экспорт + + Фильтр = НСтр("ru = 'Внешние отчеты (*.%1)|*.%1|Внешние обработки (*.%2)|*.%2'"); + Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Фильтр, "erf", "epf"); + Возврат Фильтр; + +КонецФункции + +// Идентификатор, который используется для рабочего стола +// +Функция ИдентификаторРабочегоСтола() Экспорт + + Возврат "РабочийСтол"; // не локализуется + +КонецФункции diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl index c05c23035..194ea8a61 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl @@ -1,30 +1,44 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Дополнительные отчеты и обработки" +// +//////////////////////////////////////////////////////////////////////////////// -// Экспортная функция - интерфейс, определяет общие команды конфигурации, -// которые образуют рабочие места для вызова дополнительных обработок. -// Возвращаемое значение - массив, в котором нужно перечислить имена -// общих команд для вызова дополнительных обработок. -// -Функция ПолучитьОбщиеКомандыДополнительныхОбработок() Экспорт - - ТаблицаКоманд = ДополнительныеОтчетыИОбработки.ПолучитьТаблицуКоманд(); - - - - Возврат ТаблицаКоманд; - -КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Экспортная функция - интерфейс, определяет общие команды конфигурации, -// которые образуют рабочие места для вызова дополнительны отчетов. -// Возвращаемое значение - массив, в котором нужно перечислить имена -// общих команд для вызова дополнительных отчетов. +// Определяет разделы, в которых доступна команда вызова дополнительных обработок // -Функция ПолучитьОбщиеКомандыДополнительныхОтчетов() Экспорт - - ТаблицаКоманд = ДополнительныеОтчетыИОбработки.ПолучитьТаблицуКоманд(); +// Параметры: +// Разделы (Массив) из (ОбъектМетаданных) +// +// Описание: +// В Разделы необходимо добавить метаданные тех разделов, +// в которых размещены команды вызова. +// +// Для рабочего стола вместо Метаданных необходимо добавлять +// ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола() +// +Процедура ОпределитьРазделыСДополнительнымиОбработками(Разделы) Экспорт - Возврат ТаблицаКоманд; +КонецПроцедуры + +// Определяет разделы, в которых доступна команда вызова дополнительных отчетов +// +// Параметры: +// Разделы (Массив) из (ОбъектМетаданных) +// +// Описание: +// В Разделы необходимо добавить метаданные тех разделов, +// в которых размещены команды вызова. +// +// Для рабочего стола вместо Метаданных необходимо добавлять +// ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола() +// +Процедура ОпределитьРазделыСДополнительнымиОтчетами(Разделы) Экспорт -КонецФункции + + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиСобытия/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиСобытия/Module.bsl index 0fa747963..4bba44228 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиСобытия/Module.bsl @@ -1,10 +1,16 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Дополнительные отчеты и обработки" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Переопределяет стандартное поведение при загрузке данных. // Реквизит РегламентноеЗаданиеGUID табличной части Команды не переносится, // т.к. связан с регламентным заданием текущей базы. // Процедура ПриПолученииДанных(ЭлементДанных) Экспорт - // фильтр по типу объекта Если ТипЗнч(ЭлементДанных) <> Тип("СправочникОбъект.ДополнительныеОтчетыИОбработки") Тогда Возврат; @@ -25,21 +31,24 @@ СтрокаКоманда.РегламентноеЗаданиеGUID = МассивНайденных[0].РегламентноеЗаданиеGUID; КонецЕсли; КонецЦикла; - КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Для внутреннего использования +// Функция ПолучитьУникальныеИдентификаторыРегламентныхЗаданий(ДополнительнаяОбработкаСсылка) - ТекстЗапроса = - "ВЫБРАТЬ - | Команды.Ссылка КАК Ссылка, - | Команды.Идентификатор КАК Идентификатор, - | Команды.РегламентноеЗаданиеGUID КАК РегламентноеЗаданиеGUID - |ИЗ - | Справочник.ДополнительныеОтчетыИОбработки.Команды КАК Команды - |ГДЕ - | Команды.Ссылка = &Ссылка"; - + "ВЫБРАТЬ + | Команды.Ссылка КАК Ссылка, + | Команды.Идентификатор КАК Идентификатор, + | Команды.РегламентноеЗаданиеGUID КАК РегламентноеЗаданиеGUID + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки.Команды КАК Команды + |ГДЕ + | Команды.Ссылка = &Ссылка"; + Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.Параметры.Вставить("Ссылка", ДополнительнаяОбработкаСсылка); @@ -47,5 +56,4 @@ Таблица = Запрос.Выполнить().Выгрузить(); Возврат Таблица; - КонецФункции diff --git a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl index 74d9950e3..13c778ecf 100644 --- a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl @@ -1,11 +1,19 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Внутренние процедуры и функции для работы с журналом регистрации. +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Процедура выполняет чтение событий журнала регистрации в соответствии с установленным отбором +// Выполняет чтение событий журнала регистрации в соответствии с установленным отбором // // Параметры: -// Журнал - ДанныеФормыКоллекция, содержащая записи журнала регистрации +// ПараметрыОтчета - Структура, содержит параметры для чтения событий журнала регистрации +// АдресХранилища - Адрес временного хранилища, куда помещается итоговый результат +// +// Журнал - ТаблицаЗначений, содержащая записи журнала регистрации // ОтборЖурналаНаКлиенте - Структура, настройки отбора для чтения записей журнала регистрации // КоличествоСобытий - Число, ограничивает число считываемых событий журнала // УникальныйИдентификатор - УникальныйИдентификатор, уникальный идентификатор формы @@ -13,12 +21,18 @@ // необходим для обратного вызова функций оформления // ДобавлятьДополнительныеКолонки - Булево, определяет необходимость обратного вызова для добавления дополнительных колонок // -Процедура ПрочитатьСобытияЖурналаРегистрации(Журнал, ОтборЖурналаНаКлиенте, КоличествоСобытий, УникальныйИдентификатор, МенеджерВладельца, ДобавлятьДополнительныеКолонки = Ложь) Экспорт +Процедура ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища) Экспорт + + Журнал = ПараметрыОтчета.Журнал; + ОтборЖурналаНаКлиенте = ПараметрыОтчета.ОтборЖурналаРегистрации; + КоличествоСобытий = ПараметрыОтчета.КоличествоПоказываемыхСобытий; + УникальныйИдентификатор = ПараметрыОтчета.УникальныйИдентификатор; + МенеджерВладельца = ПараметрыОтчета.МенеджерВладельца; + ДобавлятьДополнительныеКолонки = ПараметрыОтчета.ДобавлятьДополнительныеКолонки; // Удаление ранее подготовленных временных данных - ОписанияАдресов = Журнал.Выгрузить(, "АдресДанных"); - ОписанияАдресов.Свернуть("АдресДанных"); - Для каждого Адрес Из ОписанияАдресов.ВыгрузитьКолонку("АдресДанных") Цикл + ОписанияАдресов = Журнал.ВыгрузитьКолонку("АдресДанных"); + Для каждого Адрес Из ОписанияАдресов Цикл Если ЗначениеЗаполнено(Адрес) Тогда УдалитьИзВременногоХранилища(Адрес); КонецЕсли; @@ -76,7 +90,8 @@ Если СобытиеЖурнала.Данные.Свойство("Право") Тогда СобытиеЖурнала.Данные = НСтр("ru = 'Право: '") + СобытиеЖурнала.Данные.Право; Иначе - СобытиеЖурнала.Данные = НСтр("ru = 'Действие: '") + СобытиеЖурнала.Данные.Действие + ?(СобытиеЖурнала.Данные.Данные = Неопределено, "", ", ..."); + СобытиеЖурнала.Данные = НСтр("ru = 'Действие: '") + СобытиеЖурнала.Данные.Действие + + ?(СобытиеЖурнала.Данные.Данные = Неопределено, "", ", ..."); КонецЕсли; КонецЕсли; @@ -133,12 +148,13 @@ СобытиеЖурнала.Пользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(СобытиеЖурнала.Пользователь); УстановитьПривилегированныйРежим(Ложь); КонецЦикла; - - ЗначениеВДанныеФормы(СобытияЖурнала, Журнал); + + ПоместитьВоВременноеХранилище(Новый Структура("СобытияЖурнала", + СобытияЖурнала), АдресХранилища); КонецПроцедуры // ПрочитатьСобытияЖурналаРегистрации -// Процедура создает пользовательское представление отбора журнала регистрации +// Создает пользовательское представление отбора журнала регистрации // // Параметры: // ПредставлениеОтбора - Строка, строка, содержащая пользовательское представление отбора @@ -146,7 +162,8 @@ // ОтборЖурналаРегистрацииПоУмолчанию - Структура, значения отбора журнала регистрации по умолчанию // (не включаются в пользовательское представления) // -Процедура СформироватьПредставлениеОтбора(ПредставлениеОтбора, ОтборЖурналаРегистрации, ОтборЖурналаРегистрацииПоУмолчанию = Неопределено) Экспорт +Процедура СформироватьПредставлениеОтбора(ПредставлениеОтбора, ОтборЖурналаРегистрации, + ОтборЖурналаРегистрацииПоУмолчанию = Неопределено) Экспорт ПредставлениеОтбора = ""; // Интервал @@ -165,8 +182,12 @@ КонецЕсли; ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, "Пользователь"); - ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, "Событие", ОтборЖурналаРегистрацииПоУмолчанию); - ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, "ИмяПриложения", ОтборЖурналаРегистрацииПоУмолчанию); + ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, + "Событие", ОтборЖурналаРегистрацииПоУмолчанию); + ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, + "ИмяПриложения", ОтборЖурналаРегистрацииПоУмолчанию); + ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, "Сеанс"); + ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, "Уровень"); // Остальные ограничения указываем просто по представлением, без указания значений ограничения Для Каждого ЭлементОтбора Из ОтборЖурналаРегистрации Цикл @@ -175,7 +196,9 @@ Или ВРег(ИмяОграничения) = ВРег("ДатаОкончания") Или ВРег(ИмяОграничения) = ВРег("Событие") Или ВРег(ИмяОграничения) = ВРег("ИмяПриложения") - Или ВРег(ИмяОграничения) = ВРег("Пользователь") Тогда + Или ВРег(ИмяОграничения) = ВРег("Пользователь") + Или ВРег(ИмяОграничения) = ВРег("Сеанс") + Или ВРег(ИмяОграничения) = ВРег("Уровень") Тогда Продолжить; // Интервал и особые ограничения уже выводили КонецЕсли; @@ -213,8 +236,12 @@ КонецПроцедуры // СформироватьПредставлениеОтбора //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Преобразование отбора. +// +// Отбор - отбор - передаваемый отбор. +// Процедура ПреобразованиеОтбора(Отбор) Для Каждого ЭлементОтбора Из Отбор Цикл @@ -229,6 +256,12 @@ КонецПроцедуры +// Преобразование элемента отбора. +// +// Параметры: +// Отбор - отбор - передаваемый отбор. +// Отбор - Элемент отбора - - элемент передаваемого отбора. +// Процедура ПреобразованиеЭлементаОтбора(Отбор, ЭлементОтбора) // Эта процедура вызывается, если элемент отбора является списком значений, @@ -251,7 +284,16 @@ КонецПроцедуры -Процедура ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, ИмяОграничения, ОтборЖурналаРегистрацииПоУмолчанию = Неопределено) +// Добавить ограничение в представление отбора. +// +// Параметры: +// ОтборЖурналаРегистрации - Отбор - отбор журнала регистрации. +// ПредставлениеОтбора - Строка - представление отбора. +// ИмяОграничения - Строка - имя ограничения. +// ОтборЖурналаРегистрацииПоУмолчанию - Отбор - отбор журнала регистрации по умолчанию. +// +Процедура ДобавитьОграничениеВПредставлениеОтбора(ОтборЖурналаРегистрации, ПредставлениеОтбора, ИмяОграничения, + ОтборЖурналаРегистрацииПоУмолчанию = Неопределено) СписокОграничений = ""; Ограничение = ""; @@ -261,7 +303,8 @@ // Не формируем представление отбора, если его значение соответствует значению отбора по умолчанию Если ОтборЖурналаРегистрацииПоУмолчанию <> Неопределено Тогда СписокОграниченийПоУмолчанию = ""; - Если ОтборЖурналаРегистрацииПоУмолчанию.Свойство(ИмяОграничения, СписокОграниченийПоУмолчанию) И ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(СписокОграниченийПоУмолчанию, СписокОграничений) Тогда + Если ОтборЖурналаРегистрацииПоУмолчанию.Свойство(ИмяОграничения, СписокОграниченийПоУмолчанию) + И ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(СписокОграниченийПоУмолчанию, СписокОграничений) Тогда Возврат; КонецЕсли; КонецЕсли; @@ -270,7 +313,18 @@ Если Не ПустаяСтрока(Ограничение) Тогда Ограничение = Ограничение + ", "; КонецЕсли; - Ограничение = Ограничение + ЭлементСписка.Представление; + Если ВРег(ИмяОграничения) = ВРег("Сеанс") + ИЛИ ВРег(ИмяОграничения) = ВРег("Уровень") + И ПустаяСтрока(Ограничение) Тогда + Ограничение = НСтр("ru = '[ИмяОграничения]: [Значение]'"); + Ограничение = СтрЗаменить(Ограничение, "[Значение]", ЭлементСписка.Значение); + Ограничение = СтрЗаменить(Ограничение, "[ИмяОграничения]", ИмяОграничения); + ИначеЕсли ВРег(ИмяОграничения) = ВРег("Сеанс") + ИЛИ ВРег(ИмяОграничения) = ВРег("Уровень")Тогда + Ограничение = Ограничение + ЭлементСписка.Значение; + Иначе + Ограничение = Ограничение + ЭлементСписка.Представление; + КонецЕсли; КонецЦикла; Если Не ПустаяСтрока(ПредставлениеОтбора) Тогда diff --git a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl index 3db51a9ec..aae1154ea 100644 --- a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl @@ -1,5 +1,16 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Внутренние процедуры и функции для работы с журналом регистрации. +// +//////////////////////////////////////////////////////////////////////////////// -// Процедура открывает форму для просмотра дополнительных данных события +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Открывает форму для просмотра дополнительных данных события. +// +// Параметры: +// ТекущиеДанные - Строка таблицы значений - строка журнала регистрации. // Процедура ОткрытьДанныеДляПросмотра(ТекущиеДанные) Экспорт @@ -30,9 +41,12 @@ КонецПроцедуры // ОткрытьДанныеДляПросмотра -// Процедура открывает форму просмотра события обработки "Журнал регистрации" +// Открывает форму просмотра события обработки "Журнал регистрации" // для отображения в ней подробных данных выбранного события // +// Параметры: +// Данные - Строка таблицы значений - строрка журнала регистрации. +// Процедура ПросмотрТекущегоСобытияВОтдельномОкне(Данные) Экспорт Если Данные = Неопределено Тогда @@ -65,7 +79,7 @@ КонецПроцедуры // ПросмотрТекущегоСобытияВОтдельномОкне -// Функция запрашивает у пользователя ограничение периода +// Запрашивает у пользователя ограничение периода // и включает его в отбор журнала регистрации // // Параметры: @@ -116,7 +130,13 @@ КонецФункции // УстановитьИнтервалДатДляПросмотра -// Процедура выполняет обработку выбора отдельного события в таблице событий +// Выполняет обработку выбора отдельного события в таблице событий +// +// Параметры: +// ТекущиеДанные - Строка таблицы значений - строка журнала регистрации. +// Поле - Поле таблицы значений - поле. +// ИнтервалДат - интервал. +// ОтборЖурналаРегистрации - Отбор - отбор журнала регистрации. // Процедура СобытияВыбор(ТекущиеДанные, Поле, ИнтервалДат, ОтборЖурналаРегистрации) Экспорт @@ -140,7 +160,16 @@ КонецПроцедуры // СобытияВыбор -// Процедура заполняет отбор в соответствии с значением в текущей колонке событий +// Заполняет отбор в соответствии с значением в текущей колонке событий. +// +// Параметры: +// ТекущиеДанные - Строка таблицы значений. +// ТекущийЭлемент - Текущий элемент строки таблицы значений. +// ОтборЖурналаРегистрации - Отбор - отбор журнала регистрации. +// КолонкиИсключения - Список значений - колонки исключения. +// +// Возвращаемое значение: +// Булево - Истина, если отбор установлен, Ложь - Иначе. // Функция УстановитьОтборПоЗначениюВТекущейКолонке(ТекущиеДанные, ТекущийЭлемент, ОтборЖурналаРегистрации, КолонкиИсключения) Экспорт diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl index 36031b1dd..f757320d9 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/Module.bsl @@ -1,26 +1,23 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Для функционирования подсистемы в интерактивном режиме форме объекта добавляется -// реквизит ПараметрыЗапретаРедактированияРеквизитов, с типом ФиксированноеСоответствие, где -// ключ - строка - имя реквизита -// значение - структура: -// БлокируемыеЭлементы - Массив - массив, строк - имен блокируемых элементов формы -// Представление - строка - представление реквизита для пользователя -// РазрешитьИзменение - булево - изменение реквизита разрешено -/////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Запрет редактирования реквизитов объектов". +// +//////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////////////////// -// БЛОК ЭКСПОРТНЫХ ФУНКЦИЙ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Процедура принимает в качестве параметра форму и для всех реквизитов, +// Принимает в качестве параметра форму и для всех реквизитов, // для которых определен механизм, блокирует их редактирование. +// // Параметры: -// Форма - управляемая форма - форма объекта, для которой применяется механизм -// НаименованиеГруппыДляКнопкиЗапрета - если требуется поместить кнопку разрешения -// редактирования в специальное место - передается группа на форме -Процедура ЗаблокироватьРеквизиты(Форма, - НаименованиеГруппыДляКнопкиЗапрета = Неопределено) Экспорт +// Форма - УправляемаяФорма объекта, которая будет настроена. +// +// СпециальнаяПолеГруппыДляКнопкиЗапрета - переопределяет стандартное размещение +// кнопки запрета в форме объекта. +// +Процедура ЗаблокироватьРеквизиты(Форма, СпециальнаяПолеГруппыДляКнопкиЗапрета = Неопределено) Экспорт - // Проверяем, что форма подготовлена (созданы необходимые реквизиты и элементы формы) + // Определение, форма уже подготовлена при предыдущем вызове ФормаПодготовлена = Ложь; РеквизитыФормы = Форма.ПолучитьРеквизиты(); Для Каждого РеквизитФормы Из РеквизитыФормы Цикл @@ -31,69 +28,44 @@ КонецЦикла; Если Не ФормаПодготовлена Тогда - ПодготовитьФорму(Форма, Форма.Объект.Ссылка, НаименованиеГруппыДляКнопкиЗапрета); + ПодготовитьФорму(Форма, Форма.Объект.Ссылка, СпециальнаяПолеГруппыДляКнопкиЗапрета); КонецЕсли; - Если Форма.Объект.Ссылка.Пустая() Тогда - РазрешитьИзменение = Истина; - Иначе - РазрешитьИзменение = Ложь; - КонецЕсли; + ЭтоНовыйОбъект = Форма.Объект.Ссылка.Пустая(); - // Блокируем редактирование реквизитов + // Блокировка редактирования элементов формы, связанных с заданными реквизитами Для Каждого ОписаниеБлокируемогоРеквизита Из Форма.ПараметрыЗапретаРедактированияРеквизитов Цикл Для Каждого ОписаниеЭлементаФормы Из ОписаниеБлокируемогоРеквизита.БлокируемыеЭлементы Цикл + + ОписаниеБлокируемогоРеквизита.РедактированиеРазрешено = + ОписаниеБлокируемогоРеквизита.ПравоРедактирования И ЭтоНовыйОбъект; + ЭлементФормы = Форма.Элементы.Найти(ОписаниеЭлементаФормы.Значение); Если ЭлементФормы <> Неопределено Тогда Если ТипЗнч(ЭлементФормы) = Тип("ПолеФормы") ИЛИ ТипЗнч(ЭлементФормы) = Тип("ТаблицаФормы") Тогда - ЭлементФормы.ТолькоПросмотр = НЕ РазрешитьИзменение; + ЭлементФормы.ТолькоПросмотр = НЕ ОписаниеБлокируемогоРеквизита.РедактированиеРазрешено; Иначе - ЭлементФормы.Доступность = РазрешитьИзменение; + ЭлементФормы.Доступность = ОписаниеБлокируемогоРеквизита.РедактированиеРазрешено; КонецЕсли; КонецЕсли; КонецЦикла; - ОписаниеБлокируемогоРеквизита.РазрешитьИзменение = РазрешитьИзменение; КонецЦикла; + Если Форма.Элементы.Найти("РазрешитьРедактированиеРеквизитовОбъекта") <> Неопределено Тогда + Форма.Элементы.РазрешитьРедактированиеРеквизитовОбъекта.Доступность = Истина; + КонецЕсли; + КонецПроцедуры -// Проверяет, что объект с ссылкой Ссылка ссылаются существующие объекты информационной базы. -// -Функция ПроверитьНаОбъектыИмеютсяСсылкиВИБ(знач СсылкаИлиМассивСсылок) Экспорт - - Если ТипЗнч(СсылкаИлиМассивСсылок) = Тип("Массив") Тогда - МассивСсылок = СсылкаИлиМассивСсылок; - Иначе - МассивСсылок = Новый Массив; - МассивСсылок.Добавить(СсылкаИлиМассивСсылок); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - ТаблицаСсылок = НайтиПоСсылкам(МассивСсылок); - СлужебныеОбъекты = ОбщегоНазначенияПереопределяемый.ПолучитьИсключенияПоискаСсылок(); - Исключения = Новый Массив; - Для Каждого ОписаниеСсылки Из ТаблицаСсылок Цикл - Если СлужебныеОбъекты.Найти(ОписаниеСсылки.Метаданные.ПолноеИмя()) <> Неопределено Тогда - Исключения.Добавить(ОписаниеСсылки); - КонецЕсли; - КонецЦикла; - - Для Каждого СтрокаИсключение Из Исключения Цикл - ТаблицаСсылок.Удалить(СтрокаИсключение); - КонецЦикла; - - Возврат ТаблицаСсылок.Количество() > 0; - -КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -/////////////////////////////////////////////////////////////////////////////////////////////////// -// БЛОК ВСПОМОГАТЕЛЬНЫХ ФУНКЦИЙ - -// Подготавливает форму, для подсистемы. -// Добавляется реквизит ПараметрыЗапретаРедактированияРеквизитов тип ФиксированноеСоответствие (см. выше) +// Настраивает форму объекта для работы подсистемы: +// - добавляет реквизит ПараметрыЗапретаРедактированияРеквизитов для хранения внутренних данных +// - добавляет команду и кнопку РазрешитьРедактированиеРеквизитовОбъекта (если есть права) // -Процедура ПодготовитьФорму(Форма, Ссылка, НаименованиеГруппыДляКнопкиЗапрета = Неопределено) +Процедура ПодготовитьФорму(Форма, Ссылка, СпециальнаяПолеГруппыДляКнопкиЗапрета = Неопределено) ОписаниеТиповСтрока100 = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)); ОписаниеТиповБулево = Новый ОписаниеТипов("Булево"); @@ -104,17 +76,19 @@ РеквизитыФормы.Вставить(РеквизитФормы.Имя, РеквизитФормы.Заголовок); КонецЦикла; - // Добавляем реквизит на форму + // Добавление реквизитов на форму ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПараметрыЗапретаРедактированияРеквизитов", Новый ОписаниеТипов("ТаблицаЗначений"))); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИмяРеквизита",ОписаниеТиповСтрока100, "ПараметрыЗапретаРедактированияРеквизитов")); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление",ОписаниеТиповСтрока100, "ПараметрыЗапретаРедактированияРеквизитов")); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("РазрешитьИзменение",ОписаниеТиповБулево, "ПараметрыЗапретаРедактированияРеквизитов")); - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("БлокируемыеЭлементы",ОписаниеТиповМассив, "ПараметрыЗапретаРедактированияРеквизитов")); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИмяРеквизита", ОписаниеТиповСтрока100, "ПараметрыЗапретаРедактированияРеквизитов")); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", ОписаниеТиповСтрока100, "ПараметрыЗапретаРедактированияРеквизитов")); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("РедактированиеРазрешено", ОписаниеТиповБулево, "ПараметрыЗапретаРедактированияРеквизитов")); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("БлокируемыеЭлементы", ОписаниеТиповМассив, "ПараметрыЗапретаРедактированияРеквизитов")); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПравоРедактирования", ОписаниеТиповБулево, "ПараметрыЗапретаРедактированияРеквизитов")); Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); БлокируемыеРеквизиты = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Ссылка).ПолучитьБлокируемыеРеквизитыОбъекта(); + ВсеРеквизитыБезПраваРедактирования = Истина; Для Каждого БлокируемыйРеквизит Из БлокируемыеРеквизиты Цикл @@ -132,48 +106,57 @@ ЗаполнитьСвязанныеЭлементы(ОписаниеРеквизита.БлокируемыеЭлементы, Форма, ОписаниеРеквизита.ИмяРеквизита); - Если Ссылка.Метаданные().Реквизиты.Найти(ОписаниеРеквизита.ИмяРеквизита) <> Неопределено Тогда - Если ЗначениеЗаполнено(Ссылка.Метаданные().Реквизиты[ОписаниеРеквизита.ИмяРеквизита].Синоним) Тогда - Представление = Ссылка.Метаданные().Реквизиты[ОписаниеРеквизита.ИмяРеквизита].Синоним; - Иначе - Представление = Ссылка.Метаданные().Реквизиты[ОписаниеРеквизита.ИмяРеквизита].Имя; + МетаданныеОбъекта = Ссылка.Метаданные(); + МетаданныеРеквизитаИлиТабличнойЧасти = МетаданныеОбъекта.Реквизиты.Найти(ОписаниеРеквизита.ИмяРеквизита); + СтандартныйРеквизитИлиТабличнаяЧасть = Ложь; + Если МетаданныеРеквизитаИлиТабличнойЧасти = Неопределено Тогда + МетаданныеРеквизитаИлиТабличнойЧасти = МетаданныеОбъекта.ТабличныеЧасти.Найти(ОписаниеРеквизита.ИмяРеквизита); + Если МетаданныеРеквизитаИлиТабличнойЧасти = Неопределено Тогда + Если ОбщегоНазначения.ЭтоСтандартныйРеквизит(МетаданныеОбъекта.СтандартныеРеквизиты, ОписаниеРеквизита.ИмяРеквизита) Тогда + МетаданныеРеквизитаИлиТабличнойЧасти = МетаданныеОбъекта.СтандартныеРеквизиты[ОписаниеРеквизита.ИмяРеквизита]; + СтандартныйРеквизитИлиТабличнаяЧасть = Истина; + КонецЕсли; КонецЕсли; - ИначеЕсли ОбщегоНазначения.ЭтоСтандартныйРеквизит(Ссылка.Метаданные().СтандартныеРеквизиты, ОписаниеРеквизита.ИмяРеквизита) Тогда - Если ЗначениеЗаполнено(Ссылка.Метаданные().СтандартныеРеквизиты[ОписаниеРеквизита.ИмяРеквизита].Синоним) Тогда - Представление = Ссылка.Метаданные().СтандартныеРеквизиты[ОписаниеРеквизита.ИмяРеквизита].Синоним; - Иначе - Представление = Ссылка.Метаданные().СтандартныеРеквизиты[ОписаниеРеквизита.ИмяРеквизита].Имя; - КонецЕсли; - ИначеЕсли Ссылка.Метаданные().ТабличныеЧасти.Найти(ОписаниеРеквизита.ИмяРеквизита) <> Неопределено Тогда - Если ЗначениеЗаполнено(Ссылка.Метаданные().ТабличныеЧасти[ОписаниеРеквизита.ИмяРеквизита].Синоним) Тогда - Представление = Ссылка.Метаданные().ТабличныеЧасти[ОписаниеРеквизита.ИмяРеквизита].Синоним; - Иначе - Представление = Ссылка.Метаданные().ТабличныеЧасти[ОписаниеРеквизита.ИмяРеквизита].Имя; - КонецЕсли; - Иначе - Представление = РеквизитыФормы[ОписаниеРеквизита.ИмяРеквизита]; КонецЕсли; - ОписаниеРеквизита.Представление = Представление; - - ОписаниеРеквизита.РазрешитьИзменение = Ложь; - + Если МетаданныеРеквизитаИлиТабличнойЧасти = Неопределено Тогда + ОписаниеРеквизита.Представление = РеквизитыФормы[ОписаниеРеквизита.ИмяРеквизита]; + + ОписаниеРеквизита.ПравоРедактирования = Истина; + ВсеРеквизитыБезПраваРедактирования = Ложь; + Иначе + ОписаниеРеквизита.Представление = ?( + ЗначениеЗаполнено(МетаданныеРеквизитаИлиТабличнойЧасти.Синоним), + МетаданныеРеквизитаИлиТабличнойЧасти.Синоним, + МетаданныеРеквизитаИлиТабличнойЧасти.Имя); + + Если СтандартныйРеквизитИлиТабличнаяЧасть Тогда + ПравоРедактирования = ПравоДоступа("Редактирование", МетаданныеОбъекта, , МетаданныеРеквизитаИлиТабличнойЧасти.Имя); + Иначе + ПравоРедактирования = ПравоДоступа("Редактирование", МетаданныеРеквизитаИлиТабличнойЧасти); + КонецЕсли; + Если ПравоРедактирования Тогда + ОписаниеРеквизита.ПравоРедактирования = Истина; + ВсеРеквизитыБезПраваРедактирования = Ложь; + КонецЕсли; + КонецЕсли; КонецЦикла; - // Команду формы добавляем только если установлена роль "РедактированиеРеквизитовОбъектов" - Если (РольДоступна(Метаданные.Роли.РедактированиеРеквизитовОбъектов) - ИЛИ Пользователи.ЭтоПолноправныйПользовательИБ()) - И ПравоДоступа("Редактирование", Ссылка.Метаданные()) Тогда - // Добавляем команду + // Добавление команды и кнопки, если есть права + Если Пользователи.РолиДоступны("РедактированиеРеквизитовОбъектов") + И ПравоДоступа("Редактирование", Ссылка.Метаданные()) + И НЕ ВсеРеквизитыБезПраваРедактирования Тогда + + // Добавление команды Команда = Форма.Команды.Добавить("РазрешитьРедактированиеРеквизитовОбъекта"); Команда.Заголовок = НСтр("ru = 'Разрешить редактирование реквизитов объекта'"); Команда.Действие = "Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта"; Команда.Картинка = БиблиотекаКартинок.РазрешитьРедактированиеРеквизитовОбъекта; - Команда.ИзменяетСохраняемыеДанные = Ложь; + Команда.ИзменяетСохраняемыеДанные = Истина; - // Добавляем кнопку на форму - Если НаименованиеГруппыДляКнопкиЗапрета <> Неопределено Тогда - РодительскаяГруппа = НаименованиеГруппыДляКнопкиЗапрета; + // Добавление кнопки + Если СпециальнаяПолеГруппыДляКнопкиЗапрета <> Неопределено Тогда + РодительскаяГруппа = СпециальнаяПолеГруппыДляКнопкиЗапрета; Иначе РодительскаяГруппа = Форма.КоманднаяПанель; КонецЕсли; @@ -185,9 +168,7 @@ КонецПроцедуры -// По переданному имени реквизита объекта возвращает имя элемента формы, -// ссылающегося на него -// +// Возвращает имя элемента формы по имени реквизита объекта, ссылающегося на него Процедура ЗаполнитьСвязанныеЭлементы(МассивСвязанныхЭлементов, Форма, ИмяРеквизита) Для Каждого ЭлементФормы Из Форма.Элементы Цикл diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/ЗапретРедактированияРеквизитовОбъектов.mdo b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/ЗапретРедактированияРеквизитовОбъектов.mdo index 627f9e655..64f9e1cb6 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/ЗапретРедактированияРеквизитовОбъектов.mdo +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектов/ЗапретРедактированияРеквизитовОбъектов.mdo @@ -6,5 +6,6 @@ Запрет редактирования реквизитов объектов true - true + true + true diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl index 41a268070..19496e25e 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl @@ -1,134 +1,65 @@ -// Модуль содержит экспортную функцию РазрешитьРедактированиеРеквизитовОбъекта, -// которая умеет разрешать редактирование элементов формы, связанных с заблокированными -// подсистемой реквизитами, а так же формирует запись в реквизите формы -// ПараметрыЗапретаРедактированияРеквизитов позволяющую запись объекта с изменившимися -// реквизитами. -// -// ПараметрыЗапретаРедактированияРеквизитов представляет из себя соответствие, ключем -// в котором выступает наименование реквизита объекта. Значение - структура -// с ключами: -// БлокируемыеЭлементы - Массив - массив, строк - имен блокируемых элементов формы -// Представление - строка - представление поля на форме (заголовок поля или другое представление) -// РазрешитьИзменение - булево - изменение реквизита объекта разрешено -// +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Запрет редактирования реквизитов объектов". +// +//////////////////////////////////////////////////////////////////////////////// -// Функция реализующая взаимодействие с пользователем -// -Функция РазрешитьРедактированиеРеквизитовОбъекта(Форма) Экспорт +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Разрешает редактирование заблокированных элементов формы, связанных с заданными реквизитами. +Функция РазрешитьРедактированиеРеквизитовОбъекта(Знач Форма) Экспорт + + ЗаблокированныеРеквизиты = РеквизитыКромеНевидимых(Форма); + + Если ЗаблокированныеРеквизиты.Количество() = 0 Тогда + ПредупреждениеВсеВидимыеРеквизитыРазблокированы(); + Возврат Ложь; + КонецЕсли; СинонимыРеквизитов = Новый Массив; - Для Каждого ОписаниеБлокируемогоРеквизита Из Форма.ПараметрыЗапретаРедактированияРеквизитов Цикл - СинонимыРеквизитов.Добавить(ОписаниеБлокируемогоРеквизита.Представление); + Для Каждого ОписаниеРеквизита Из Форма.ПараметрыЗапретаРедактированияРеквизитов Цикл + Если ЗаблокированныеРеквизиты.Найти(ОписаниеРеквизита.ИмяРеквизита) <> Неопределено Тогда + СинонимыРеквизитов.Добавить(ОписаниеРеквизита.Представление); + КонецЕсли; КонецЦикла; МассивСсылок = Новый Массив; - МассивСсылок.Добавить(Форма.Объект.Ссылка); Результат = ПроверитьСсылкиНаОбъект(МассивСсылок, СинонимыРеквизитов); Если Результат Тогда - Для Каждого ОписаниеБлокируемогоРеквизита Из Форма.ПараметрыЗапретаРедактированияРеквизитов Цикл - ОписаниеБлокируемогоРеквизита.РазрешитьИзменение = Истина; - КонецЦикла; + УстановитьРазрешенностьРедактированияРеквизитов(Форма, ЗаблокированныеРеквизиты); КонецЕсли; Возврат Результат; КонецФункции -// Спрашивает у пользователя подтверждение на разрешение редактирования реквизитов -// и проверяет есть ли ссылки на объект в информационной базе +// Устанавливает доступность элементов формы, связанных с заданными реквизитами, +// для которых установлено разрешение изменения. Если передать массив реквизитов, +// тогда сначала будет дополнен состав реквизитов разрешенных для изменения. +// Если разблокировка элементов формы, связанных с заданными реквизитами +// снята для всех реквизитов, тогда кнопка разрешения редактирования блокируется. // -Функция ПроверитьСсылкиНаОбъект(МассивСсылок, СинонимыРеквизитов) Экспорт - - Результат = Ложь; - - ЗаголовокДиалога = НСтр("ru = 'Редактирование реквизитов объекта'"); - - РеквизитыПредставление = ""; - - Для Каждого СинонимРеквизита Из СинонимыРеквизитов Цикл - РеквизитыПредставление = РеквизитыПредставление + """" + СинонимРеквизита + """, "; - КонецЦикла; - - РеквизитыПредставление = Лев(РеквизитыПредставление, СтрДлина(РеквизитыПредставление)-2); - - Если СинонимыРеквизитов.Количество() > 1 Тогда - ТекстВопроса = НСтр("ru = 'Изменение этих реквизитов %1 может привести к рассогласованию данных информационной базы.'"); - Иначе - ТекстВопроса = НСтр("ru = 'Изменение этого реквизита %1 может привести к рассогласованию данных информационной базы.'"); - КонецЕсли; - - Если МассивСсылок.Количество() = 1 Тогда - ТекстВопроса = ТекстВопроса + НСтр("ru = ' - |Настоятельно рекомендуется предварительно проверить все случаи использования ссылок на данный объект и оценить последствия изменений. - |Продолжить с проверкой наличия ссылок на этот объект?'"); - Иначе - ЧислоОбъектов = Строка(МассивСсылок.Количество()); - Склонение = ? (Прав(ЧислоОбъектов,1) = "1", НСтр("ru = 'объекта'"), НСтр("ru = 'объектов'")); - ТекстВопроса = ТекстВопроса + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = ' - |Разрешить редактирование реквизитов для %1 %2?'"), - ЧислоОбъектов, Склонение); - КонецЕсли; - - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, РеквизитыПредставление); - - РезультатВыбора = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да, ЗаголовокДиалога); - - Если РезультатВыбора = КодВозвратаДиалога.Да Тогда - - Если МассивСсылок.Количество() = 1 Тогда - Если ЗапретРедактированияРеквизитовОбъектов.ПроверитьНаОбъектыИмеютсяСсылкиВИБ(МассивСсылок) Тогда - ТекстСообщения = НСтр("ru = 'В информационной базе существуют ссылки на редактируемый объект. - |Разрешить редактирование реквизитов объекта?'"); - - РезультатВыбораПослеПоиска = Вопрос(ТекстСообщения, - РежимДиалогаВопрос.ДаНет, , - КодВозвратаДиалога.Да, - ЗаголовокДиалога); - Если РезультатВыбораПослеПоиска = КодВозвратаДиалога.Да Тогда - Результат = Истина; - КонецЕсли; - - Иначе - ТекстСообщения = НСтр("ru = 'В информационной базе не найдены ссылки на редактируемый объект. - |Редактирование реквизитов объекта разрешено.'"); - Предупреждение(ТекстСообщения,, ЗаголовокДиалога); - Результат = Истина; - КонецЕсли; - - Иначе - Результат = Истина; - КонецЕсли; - - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Устанавливает доступность элементов формы соответствующих реквизитам объекта. -// Если все реквизиты объекта разрешены для редактирования так же -// делает кнопку разрешения редактирования недоступной. -// Параметры -// Форма - УправляемаяФорма - форма, в которой требуется разрешить -// редактирование реквизитов объекта -// Реквизиты - Массив - реквизиты, редактирование которых разрешено +// Параметры: +// Форма - УправляемаяФорма - форма, в которой требуется разрешить +// редактирование элементов формы, заданных реквизитов. +// +// Реквизиты - Массив - имена реквизитов, для которых нужно установить разрешенность изменения. +// Используется, когда функция РазрешитьРедактированиеРеквизитовОбъекта +// не используется. +// Неопределено - состав реквизитов доступных для редактирования не изменяется, +// а для элементов формы, связанных с реквизитами, изменение которых +// разрешено устанавливается доступность. // -Процедура УстановитьДоступностьЭлементовФормы(Форма, знач Реквизиты = Неопределено) Экспорт +Процедура УстановитьДоступностьЭлементовФормы(Знач Форма, Знач Реквизиты = Неопределено) Экспорт - Если Реквизиты <> Неопределено Тогда - Для Каждого Реквизит Из Реквизиты Цикл - Форма.ПараметрыЗапретаРедактированияРеквизитов.НайтиСтроки(Новый Структура("ИмяРеквизита", Реквизит))[0].РазрешитьИзменение = Истина; - КонецЦикла; - КонецЕсли; + УстановитьРазрешенностьРедактированияРеквизитов(Форма, Реквизиты); Для Каждого ОписаниеБлокируемогоРеквизита Из Форма.ПараметрыЗапретаРедактированияРеквизитов Цикл - Если ОписаниеБлокируемогоРеквизита.РазрешитьИзменение Тогда + Если ОписаниеБлокируемогоРеквизита.РедактированиеРазрешено Тогда Для Каждого БлокируемыйЭлементФормы Из ОписаниеБлокируемогоРеквизита.БлокируемыеЭлементы Цикл ЭлементФормы = Форма.Элементы.Найти(БлокируемыйЭлементФормы.Значение); Если ЭлементФормы <> Неопределено Тогда @@ -144,3 +75,191 @@ КонецЦикла; КонецПроцедуры + + +// Спрашивает у пользователя подтверждение на включение редактирования реквизитов +// и проверяет есть ли ссылки на объект в информационной базе +// +Функция ПроверитьСсылкиНаОбъект(Знач МассивСсылок, Знач СинонимыРеквизитов) Экспорт + + Результат = Ложь; + + ЗаголовокДиалога = НСтр("ru = 'Редактирование реквизитов объекта'"); + + РеквизитыПредставление = ""; + + Для Каждого СинонимРеквизита Из СинонимыРеквизитов Цикл + РеквизитыПредставление = РеквизитыПредставление + СинонимРеквизита + "," + Символы.ПС; + КонецЦикла; + + РеквизитыПредставление = Лев(РеквизитыПредставление, СтрДлина(РеквизитыПредставление)-2); + + Если СинонимыРеквизитов.Количество() > 1 Тогда + ТекстВопроса = НСтр("ru = 'Изменение следующих реквизитов может привести к рассогласованию + |данных информационной базы: + | + |%1. + | + |Настоятельно рекомендуется проверить все случаи использования + |объекта и оценить последствия изменения этих реквизитов.'"); + Иначе + ТекстВопроса = НСтр("ru = 'Изменение реквизита ""%1"" + |может привести к рассогласованию данных информационной базы. + | + |Настоятельно рекомендуется проверить все случаи использования + |объекта и оценить последствия изменения этого реквизита.'"); + КонецЕсли; + + ТекстВопроса = ТекстВопроса + Символы.ПС + Символы.ПС; + + Если МассивСсылок.Количество() = 1 Тогда + ТекстВопроса = ТекстВопроса + НСтр("ru = 'Продолжить с проверкой использования объекта?'"); + Иначе + Если Прав(Строка(МассивСсылок.Количество()), 1) = "1" Тогда + ШаблонТекстаВопроса = НСтр("ru = 'Разрешить редактирование реквизитов для %1 объекта?'"); + Иначе + ШаблонТекстаВопроса = НСтр("ru = 'Разрешить редактирование реквизитов для %1 объектов?'"); + КонецЕсли; + ТекстВопроса = ТекстВопроса + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаВопроса, МассивСсылок.Количество()); + КонецЕсли; + + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, РеквизитыПредставление); + + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да, ЗаголовокДиалога); + + Если Ответ = КодВозвратаДиалога.Да Тогда + + Если МассивСсылок.Количество() = 1 Тогда + Если ОбщегоНазначения.ОбъектИспользуютсяВБазеДанных(МассивСсылок) Тогда + + ТекстСообщения = НСтр("ru = 'Редактируемый объект используется в информационной базе. + | + |Разрешить редактирование реквизитов объекта?'"); + + Ответ = Вопрос(ТекстСообщения, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да, ЗаголовокДиалога); + + Если Ответ = КодВозвратаДиалога.Да Тогда + Результат = Истина; + КонецЕсли; + Иначе + ТекстСообщения = НСтр("ru = 'Редактируемый объект не используется в информационной базе. + | + |Редактирование реквизитов объекта разрешено.'"); + Предупреждение(ТекстСообщения, , ЗаголовокДиалога); + Результат = Истина; + КонецЕсли; + + Иначе + Результат = Истина; + КонецЕсли; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Устанавливает разрешенность редактирования для тех реквизитов, описание которых подготовлено в форме. +// Используется, когда доступность элементов формы изменяется самостоятельно, без +// использования функции УстановитьДоступностьЭлементовФормы. +// +// Параметры: +// Форма - УправляемаяФорма - форма, в которой требуется разрешить +// редактирование реквизитов объекта. +// +// Реквизиты - Массив - реквизиты, которые нужно пометить, как разрешенные для изменения. +// +// РедактированиеРазрешено - Булево, начальное значение Истина - значение разрешенности редактирования реквизитов, +// которое нужно установить. Значение не будет установлено Истина, если нет права редактирования реквизита. +// Неопределено - не изменять разрешенность редактирования реквизитов. +// Ложь, Истина - установить указанное значение разрешенности редактирования реквизитов. +// +// ПравоРедактирования - Булево, начальное значение Неопределено - позволяет переопределить или доопределить +// возможность разблокировки реквизитов, которая вычисляется автоматически с помощью метода ПравоДоступа. +// Неопределено - не изменять ПравоРедактирования +// Ложь, Истина - установить указанное значение ПраваРедактирования для указанных реквизитов. +// +Процедура УстановитьРазрешенностьРедактированияРеквизитов(Знач Форма, Знач Реквизиты, Знач РедактированиеРазрешено = Истина, Знач ПравоРедактирования = Неопределено) Экспорт + + Если ТипЗнч(Реквизиты) = Тип("Массив") Тогда + + Для Каждого Реквизит Из Реквизиты Цикл + ОписаниеРеквизита = Форма.ПараметрыЗапретаРедактированияРеквизитов.НайтиСтроки(Новый Структура("ИмяРеквизита", Реквизит))[0]; + Если ТипЗнч(ПравоРедактирования) = Тип("Булево") Тогда + ОписаниеРеквизита.ПравоРедактирования = ПравоРедактирования; + КонецЕсли; + Если ТипЗнч(РедактированиеРазрешено) = Тип("Булево") Тогда + ОписаниеРеквизита.РедактированиеРазрешено = ОписаниеРеквизита.ПравоРедактирования И РедактированиеРазрешено; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + // Обновление доступности команды РазрешитьРедактированиеРеквизитовОбъекта + ВсеРеквизитыРазблокированы = Истина; + + Для каждого ОписаниеБлокируемогоРеквизита Из Форма.ПараметрыЗапретаРедактированияРеквизитов Цикл + Если ОписаниеБлокируемогоРеквизита.ПравоРедактирования + И НЕ ОписаниеБлокируемогоРеквизита.РедактированиеРазрешено Тогда + ВсеРеквизитыРазблокированы = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ВсеРеквизитыРазблокированы Тогда + Форма.Элементы.РазрешитьРедактированиеРеквизитовОбъекта.Доступность = Ложь; + КонецЕсли; + +КонецПроцедуры + +// Возвращает массив имен реквизитов, заданных в свойстве формы +// ПараметрыЗапретаРедактированияРеквизитов на основе имен реквизитов +// указанных в модуле мененджера объекта, исключая реквизиты, +// у которых Видимость = Ложь и ПравоРедактирования = Ложь. +// +// Параметры: +// Форма - Форма объекта с обязательным стандартным реквизитом Объект +// ТолькоЗаблокированные - Булево, начальное значение Истина, +// для вспомогательных целей можно задать Ложь, чтобы +// получить список всех видимых реквизитов, которые могут разблокироваться. +// +// Возвращаемое значение: +// Массив - имена реквизитов +// +Функция РеквизитыКромеНевидимых(Знач Форма, Знач ТолькоЗаблокированные = Истина) Экспорт + + РеквизитыКромеНевидимых = Новый Массив; + + Для Каждого ОписаниеБлокируемогоРеквизита Из Форма.ПараметрыЗапретаРедактированияРеквизитов Цикл + + Если ОписаниеБлокируемогоРеквизита.ПравоРедактирования + И ( ОписаниеБлокируемогоРеквизита.РедактированиеРазрешено = Ложь + ИЛИ ТолькоЗаблокированные = Ложь) Тогда + + СуществуетВидимоеПоле = Ложь; + Для Каждого БлокируемыйЭлементФормы Из ОписаниеБлокируемогоРеквизита.БлокируемыеЭлементы Цикл + ЭлементФормы = Форма.Элементы.Найти(БлокируемыйЭлементФормы.Значение); + Если ЭлементФормы <> Неопределено И ЭлементФормы.Видимость Тогда + СуществуетВидимоеПоле = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если СуществуетВидимоеПоле Тогда + РеквизитыКромеНевидимых.Добавить(ОписаниеБлокируемогоРеквизита.ИмяРеквизита); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат РеквизитыКромеНевидимых; + +КонецФункции + +// Выводит предупреждение о том, что все видимые реквизиты разблокированы. +// Необходимость в предупреждении возникает, когда команда разблокировки +// остается включенной из-за наличия невидимых неразблокированных реквизитов. +// +Процедура ПредупреждениеВсеВидимыеРеквизитыРазблокированы() Экспорт + + Предупреждение(НСтр("ru = 'Редактирование всех видимых реквизитов объекта уже разрешено.'")); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl index 842ff66f0..04a842e26 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl @@ -1,5 +1,11 @@ -/////////////////////////////////////////////////////////////////////////////// -// ИНТЕРФЕЙСНАЯ ЧАСТЬ ПЕРЕОПРЕДЕЛЯЕМОГО МОДУЛЯ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Защита персональных данных" +// Модуль предназначен для размещения переопределяемых процедур подсистемы. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Процедура вызывается при заполнении формы "Согласие на обработку персональных данных" // данными, переданных в качестве параметров, субъектов @@ -12,4 +18,18 @@ -КонецПроцедуры // ДополнитьДанныеСубъектовПерсональныхДанных \ No newline at end of file +КонецПроцедуры + +// Процедура вызывается при заполнении формы "Согласие на обработку персональных данных" +// данными организации +// +// Параметры: +// Организация - организация - оператор персональных данных +// ДанныеОрганизации - структура с данными об организации (адрес, ФИО ответственного и т.д.) +// ДатаАктуальности - дата, на которую нужно заполнить сведения +// +Процедура ДополнитьДанныеОрганизацииОператораПерсональныхДанных(Организация, ДанныеОрганизации, ДатаАктуальности) Экспорт + + + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl index 97c1cce97..f4a25e083 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Защита персональных данных" +// Служебные процедуры и функции подсистемы. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Функция определяет перечень событий журнала регистрации // в соответствии с требованиями 152-ФЗ @@ -5,12 +13,12 @@ Функция СписокКонтролируемыхСобытий152ФЗ() Экспорт СписокСобытий = Новый СписокЗначений; - СписокСобытий.Добавить("_$Access$_.Access", "Доступ. Доступ"); - СписокСобытий.Добавить("_$Access$_.AccessDenied", "Доступ. Отказ в доступе"); - СписокСобытий.Добавить("_$Session$_.Authentication", "Сеанс. Аутентификация"); - СписокСобытий.Добавить("_$Session$_.AuthenticationError", "Сеанс. Ошибка аутентификации"); - СписокСобытий.Добавить("_$Session$_.Start", "Сеанс. Начало"); - СписокСобытий.Добавить("_$Session$_.Finish", "Сеанс. Завершение"); + СписокСобытий.Добавить("_$Access$_.Access", НСтр("ru = 'Доступ. Доступ'")); + СписокСобытий.Добавить("_$Access$_.AccessDenied", НСтр("ru = 'Доступ. Отказ в доступе'")); + СписокСобытий.Добавить("_$Session$_.Authentication", НСтр("ru = 'Сеанс. Аутентификация'")); + СписокСобытий.Добавить("_$Session$_.AuthenticationError", НСтр("ru = 'Сеанс. Ошибка аутентификации'")); + СписокСобытий.Добавить("_$Session$_.Start", НСтр("ru = 'Сеанс. Начало'")); + СписокСобытий.Добавить("_$Session$_.Finish", НСтр("ru = 'Сеанс. Завершение'")); Возврат СписокСобытий; diff --git a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl index 2977c84cb..d791abed0 100644 --- a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl @@ -1,5 +1,10 @@ //////////////////////////////////////////////////////////////////////////////// -// ФУНЦИИ БИБЛИОТЕКИ +// Подсистема "Календарные графики" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Функция возвращает массив дат, которые отличается указанной даты на количество дней, // входящих в указанный график @@ -10,11 +15,13 @@ // МассивДней - массив с количеством дней, на которые нужно увеличить дату начала, тип Массив,Число // РассчитыватьСледующуюДатуОтПредыдущей - нужно ли рассчитывать следующую дату от предыдущей или // все даты рассчитываются от переданной даты +// ВызыватьИсключение - булево, если Истина вызывается исключение в случае незаполненного календаря // // Возвращаемое значение -// Массив - массив дат, увеличенных на количество дней, входящих в график +// Массив - массив дат, увеличенных на количество дней, входящих в график, +// Если выбранный календарь не заполнен, и ВызыватьИсключение = Ложь, возвращается Неопределено // -Функция ПолучитьМассивДатПоКалендарю(Знач Календарь, Знач ДатаОт, Знач МассивДней, Знач РассчитыватьСледующуюДатуОтПредыдущей = Ложь) Экспорт +Функция ПолучитьМассивДатПоКалендарю(Знач Календарь, Знач ДатаОт, Знач МассивДней, Знач РассчитыватьСледующуюДатуОтПредыдущей = Ложь, ВызыватьИсключение = Истина) Экспорт ДатаОт = НачалоДня(ДатаОт); @@ -63,10 +70,52 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ + | КалендарныеГрафики.Календарь, + | КалендарныеГрафики.ДатаГрафика, + | КалендарныеГрафики.Год, + | КалендарныеГрафики.ДеньВключенВГрафик + |ПОМЕСТИТЬ КалендарныйГрафик + |ИЗ + | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики + |ГДЕ + | КалендарныеГрафики.Календарь = &Календарь + | + |ИНДЕКСИРОВАТЬ ПО + | КалендарныеГрафики.Календарь, + | КалендарныеГрафики.ДатаГрафика, + | КалендарныеГрафики.Год, + | КалендарныеГрафики.ДеньВключенВГрафик + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КалендарныеГрафики.Календарь, + | КалендарныеГрафики.ДатаГрафика, + | КалендарныеГрафики.Год, + | КалендарныеГрафики.ДеньВключенВГрафик, + | КОЛИЧЕСТВО(ДниВключенныеВГрафик.ДатаГрафика) КАК КоличествоДнейВГрафикеСНачалаГода + |ПОМЕСТИТЬ КалендарныеГрафики + |ИЗ + | КалендарныйГрафик КАК КалендарныеГрафики + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ КалендарныйГрафик КАК ДниВключенныеВГрафик + | ПО КалендарныеГрафики.Календарь = ДниВключенныеВГрафик.Календарь + | И КалендарныеГрафики.Год = ДниВключенныеВГрафик.Год + | И КалендарныеГрафики.ДатаГрафика >= ДниВключенныеВГрафик.ДатаГрафика + | И (ДниВключенныеВГрафик.ДеньВключенВГрафик) + | + |СГРУППИРОВАТЬ ПО + | КалендарныеГрафики.Календарь, + | КалендарныеГрафики.ДатаГрафика, + | КалендарныеГрафики.Год, + | КалендарныеГрафики.ДеньВключенВГрафик + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ | МАКСИМУМ(ГрафикЗаГод.КоличествоДнейВГрафикеСНачалаГода) КАК КоличествоДнейВсего |ПОМЕСТИТЬ ВТ_КоличествоРабочихДнейВГоду |ИЗ - | РегистрСведений.КалендарныеГрафики КАК ГрафикЗаГод + | КалендарныеГрафики КАК ГрафикЗаГод |ГДЕ | ГрафикЗаГод.Календарь = &Календарь | И ГрафикЗаГод.Год = ГОД(&ДатаОт) @@ -79,7 +128,7 @@ | КоличествоРабочихДнейВГоду.КоличествоДнейВсего |ПОМЕСТИТЬ ВТ_КалендарныйГрафик |ИЗ - | РегистрСведений.КалендарныеГрафики КАК ГрафикЗаГод + | КалендарныеГрафики КАК ГрафикЗаГод | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_КоличествоРабочихДнейВГоду КАК КоличествоРабочихДнейВГоду | ПО (ГрафикЗаГод.Календарь = &Календарь) | И (ГрафикЗаГод.ДатаГрафика = &ДатаОт) @@ -117,7 +166,7 @@ | ВТ_ТаблицаДат КАК ТаблицаДат | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_КалендарныйГрафик КАК КалендарныйГрафик | ПО (ИСТИНА)) КАК ГрафикЗаГодДатаОт - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КалендарныеГрафики КАК ГрафикЗаГод + | ЛЕВОЕ СОЕДИНЕНИЕ КалендарныеГрафики КАК ГрафикЗаГод | ПО (ГрафикЗаГод.Календарь = &Календарь) | И ГрафикЗаГодДатаОт.КоличествоДнейДляДатыПо = ГрафикЗаГод.КоличествоДнейВГрафикеСНачалаГода | И ГрафикЗаГодДатаОт.ГодДатыОкончания = ГрафикЗаГод.Год @@ -136,9 +185,13 @@ Пока Выборка.Следующий() Цикл Если Выборка.ДатаПоКалендарю = Неопределено Тогда СообщениеОбОшибке = НСтр("ru = 'Календарь ""%1"" не заполнен с даты %2 на указанное количество рабочих дней.'"); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеОбОшибке, - Календарь, Формат(ДатаОт, "ДЛФ=D")); + Если ВызыватьИсключение Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СообщениеОбОшибке, + Календарь, Формат(ДатаОт, "ДЛФ=D")); + Иначе + Возврат Неопределено; + КонецЕсли; КонецЕсли; МассивДат.Добавить(Выборка.ДатаПоКалендарю); @@ -155,11 +208,13 @@ // Календарь - календарь, который необходимо использовать, тип СправочникСсылка.Календари // ДатаОт - дата, от которой нужно рассчитать количество дней, тип Дата // КоличествоДней - количество дней, на которые нужно увеличить дату начала, тип Число +// ВызыватьИсключение - булево, если Истина вызывается исключение в случае незаполненного календаря // // Возвращаемое значение // Дата - дата, увеличенная на количество дней, входящих в график +// Если выбранный календарь не заполнен, и ВызыватьИсключение = Ложь, возвращается Неопределено // -Функция ПолучитьДатуПоКалендарю(Знач Календарь, Знач ДатаОт, Знач КоличествоДней) Экспорт +Функция ПолучитьДатуПоКалендарю(Знач Календарь, Знач ДатаОт, Знач КоличествоДней, ВызыватьИсключение = Истина) Экспорт ДатаОт = НачалоДня(ДатаОт); @@ -170,9 +225,9 @@ МассивДней = Новый Массив; МассивДней.Добавить(КоличествоДней); - МассивДат = ПолучитьМассивДатПоКалендарю(Календарь, ДатаОт, МассивДней); + МассивДат = ПолучитьМассивДатПоКалендарю(Календарь, ДатаОт, МассивДней, ВызыватьИсключение); - Возврат МассивДат[0]; + Возврат ?(МассивДат <> Неопределено, МассивДат[0], Неопределено); КонецФункции @@ -182,69 +237,190 @@ // Календарь - календарь, который необходимо использовать, тип СправочникСсылка.Календари // ДатаНачала - дата начала периода // ДатаОкончания - дата окончания периода +// ВызыватьИсключение - булево, если Истина вызывается исключение в случае незаполненного календаря // // Возвращаемое значение // Число - количество дней между датами начала и окончания +// Если выбранный календарь не заполнен, и ВызыватьИсключение = Ложь, возвращается Неопределено // -Функция ПолучитьРазностьДатПоКалендарю(Знач Календарь, Знач ДатаНачала, Знач ДатаОкончания) Экспорт +Функция ПолучитьРазностьДатПоКалендарю(Знач Календарь, Знач ДатаНачала, Знач ДатаОкончания, ВызыватьИсключение = Истина) Экспорт ДатаНачала = НачалоДня(ДатаНачала); ДатаОкончания = НачалоДня(ДатаОкончания); - Если ДатаНачала = ДатаОкончания Тогда - Возврат 0; + ДатыГрафика = Новый Массив; + ДатыГрафика.Добавить(ДатаНачала); + Если Год(ДатаНачала) <> Год(ДатаОкончания) И КонецДня(ДатаНачала) <> КонецГода(ДатаНачала) Тогда + Для НомерГода = Год(ДатаНачала) По Год(ДатаОкончания) - 1 Цикл + ДатыГрафика.Добавить(Дата(НомерГода, 12, 31)); + КонецЦикла; КонецЕсли; - - РазныеГода = Год(ДатаНачала) <> Год(ДатаОкончания); + ДатыГрафика.Добавить(ДатаОкончания); Запрос = Новый Запрос; - МассивДатНачала = Новый Массив; - МассивДатНачала.Добавить(ДатаНачала); - Если РазныеГода Тогда - МассивДатНачала.Добавить(НачалоДня(КонецГода(ДатаНачала))); - КонецЕсли; - - Запрос.УстановитьПараметр("Календарь", Календарь); - Запрос.УстановитьПараметр("МассивДатНачала", МассивДатНачала); - Запрос.УстановитьПараметр("ГодДатыНачала", Год(ДатаНачала)); - - Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); - Запрос.УстановитьПараметр("ГодДатыОкончания", Год(ДатаОкончания)); + Запрос.УстановитьПараметр("Календарь", Календарь); + Запрос.УстановитьПараметр("ДатыГрафика", ДатыГрафика); Запрос.Текст = "ВЫБРАТЬ - | КалендарныеГрафики.КоличествоДнейВГрафикеСНачалаГода КАК КоличествоДней, - | КалендарныеГрафики.ДатаГрафика КАК ДатаГрафика + | КалендарныеГрафики.Год, + | КалендарныеГрафики.ДеньВключенВГрафик, + | КалендарныеГрафики.КоличествоДнейВГрафикеСНачалаГода |ИЗ | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики |ГДЕ | КалендарныеГрафики.Календарь = &Календарь - | И (КалендарныеГрафики.Год = &ГодДатыНачала - | И КалендарныеГрафики.ДатаГрафика В (&МассивДатНачала) - | ИЛИ КалендарныеГрафики.Год = &ГодДатыОкончания - | И КалендарныеГрафики.ДатаГрафика = &ДатаОкончания) + | И КалендарныеГрафики.ДатаГрафика В(&ДатыГрафика) | |УПОРЯДОЧИТЬ ПО - | ДатаГрафика"; - ТаблицаДней = Запрос.Выполнить().Выгрузить(); + | КалендарныеГрафики.ДатаГрафика"; + Результат = Запрос.Выполнить(); - Если ТаблицаДней.Количество() < ?(РазныеГода, 3, 2) Тогда - СообщениеОбОшибке = НСтр("ru = 'Календарь ""%1"" не заполнен на период %2.'"); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СообщениеОбОшибке, - Календарь, ПредставлениеПериода(ДатаНачала, КонецДня(ДатаОкончания))); + Если Результат.Пустой() Тогда + Если ВызыватьИсключение Тогда + СообщениеОбОшибке = НСтр("ru = 'Календарь ""%1"" не заполнен на период %2.'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СообщениеОбОшибке, + Календарь, ПредставлениеПериода(ДатаНачала, КонецДня(ДатаОкончания))); + Иначе + Возврат Неопределено; + КонецЕсли; КонецЕсли; - КоличествоДнейДатыНачала = ТаблицаДней[0].КоличествоДней; - КоличествоДнейДатыОкончания = ТаблицаДней[?(РазныеГода, 2, 1)].КоличествоДней + ?(РазныеГода, ТаблицаДней[1].КоличествоДней, 0); + Выборка = Результат.Выбрать(); - Возврат КоличествоДнейДатыОкончания - КоличествоДнейДатыНачала; + КоличествоДнейВГрафике = 0; + ПредыдущийГод = Год(ДатаНачала); + УчестьКоличествоДнейСНачалаГода = КонецДня(ДатаНачала) <> КонецГода(ДатаНачала); + ДобавитьПервыйДень = Неопределено; + + Пока Выборка.Следующий() Цикл + КоличествоДнейВГрафике = ?(УчестьКоличествоДнейСНачалаГода, Выборка.КоличествоДнейВГрафикеСНачалаГода, 0) + - ?(Выборка.Год > ПредыдущийГод, -1 * КоличествоДнейВГрафике, КоличествоДнейВГрафике); + + ПредыдущийГод = Выборка.Год; + УчестьКоличествоДнейСНачалаГода = Истина; + + Если ДобавитьПервыйДень = Неопределено Тогда + ДобавитьПервыйДень = Выборка.ДеньВключенВГрафик; + КонецЕсли; + КонецЦикла; + + Возврат КоличествоДнейВГрафике + ?(ДобавитьПервыйДень, 1, 0); + +КонецФункции + +// Функция определяет для каждой даты дату ближайшего к ней рабочего дня +// +// Параметры: +// График - ссылка на календарь или производственный календарь +// НачальныеДаты - массив дат +// ПолучатьПредшествующие - способ получения ближайшей даты, +// если Истина – определяются рабочие даты, предшествующие переданным в параметре НачальныеДаты, +// если Ложь – получаются даты не ранее начальной даты +// ВызыватьИсключение - булево, если Истина вызывается исключение в случае незаполненного календаря +// +// Возвращаемое значение: +// РабочиеДаты - соответствие, где ключ - дата из переданного массива, +// значение - ближайшая к ней рабочая дата (если передана рабочая дата, то она же и возвращается) +// Если выбранный календарь не заполнен, и ВызыватьИсключение = Ложь, возвращается Неопределено +// +Функция ПолучитьДатыРабочихДней(График, НачальныеДаты, ПолучатьПредшествующие = Ложь, ВызыватьИсключение = Истина) Экспорт + + ТекстЗапросаВТ = ""; + ПерваяЧасть = Истина; + Для Каждого НачальнаяДата Из НачальныеДаты Цикл + Если НЕ ПерваяЧасть Тогда + ТекстЗапросаВТ = ТекстЗапросаВТ + " + |ОБЪЕДИНИТЬ ВСЕ + |"; + КонецЕсли; + ТекстЗапросаВТ = ТекстЗапросаВТ + " + |ВЫБРАТЬ + | ДАТАВРЕМЯ(" + Формат(НачальнаяДата, "ДФ=гггг,ММ,дд") + ")"; + Если ПерваяЧасть Тогда + ТекстЗапросаВТ = ТекстЗапросаВТ + " КАК Дата + |ПОМЕСТИТЬ НачальныеДаты + |"; + КонецЕсли; + ПерваяЧасть = Ложь; + КонецЦикла; + + Если ПустаяСтрока(ТекстЗапросаВТ) Тогда + Возврат Новый Соответствие; + КонецЕсли; + + Запрос = Новый Запрос(ТекстЗапросаВТ); + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Запрос.Выполнить(); + + Если ТипЗнч(График) = Тип("СправочникСсылка.Календари") Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | НачальныеДаты.Дата, + | %Функция%(ДатыКалендаря.ДатаГрафика) КАК БлижайшаяДата + |ИЗ + | НачальныеДаты КАК НачальныеДаты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КалендарныеГрафики КАК ДатыКалендаря + | ПО (ДатыКалендаря.ДатаГрафика %ЗнакУсловия% НачальныеДаты.Дата) + | И (ДатыКалендаря.Календарь = &График) + | И (ДатыКалендаря.ДеньВключенВГрафик) + | + |СГРУППИРОВАТЬ ПО + | НачальныеДаты.Дата"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | НачальныеДаты.Дата, + | %Функция%(ДатыКалендаря.Дата) КАК БлижайшаяДата + |ИЗ + | НачальныеДаты КАК НачальныеДаты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДатыКалендаря + | ПО (ДатыКалендаря.Дата %ЗнакУсловия% НачальныеДаты.Дата) + | И (ДатыКалендаря.ПроизводственныйКалендарь = &График) + | И (ДатыКалендаря.ВидДня В ( + | ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий), + | ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный) + | )) + | + |СГРУППИРОВАТЬ ПО + | НачальныеДаты.Дата"; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%Функция%", ?(ПолучатьПредшествующие, "МАКСИМУМ", "МИНИМУМ")); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ЗнакУсловия%", ?(ПолучатьПредшествующие, "<=", ">=")); + + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("График", График); + + Выборка = Запрос.Выполнить().Выбрать(); + + ДатыРабочихДней = Новый Соответствие; + Пока Выборка.Следующий() Цикл + Если ЗначениеЗаполнено(Выборка.БлижайшаяДата) Тогда + ДатыРабочихДней.Вставить(Выборка.Дата, Выборка.БлижайшаяДата); + Иначе + Если ВызыватьИсключение Тогда + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно определить ближайшую рабочую дату для даты %1, возможно, календарь не заполнен.'"), + Формат(Выборка.Дата, "ДЛФ=D")); + ВызватьИсключение(ТекстИсключения); + Иначе + Возврат Неопределено; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат ДатыРабочихДней; КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ОБНОВЛЕНИЕ ИНФОРМАЦИОННОЙ БАЗЫ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы // Добавляет в список Обработчики процедуры-обработчики обновления, // необходимые данной подсистеме. @@ -256,306 +432,152 @@ Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.6.2"; - Обработчик.Процедура = "КалендарныеГрафики.СоздатьПроизводственныйКалендарьНа2010Год"; + Обработчик.Версия = "1.1.3.11"; + Обработчик.Процедура = "КалендарныеГрафики.СоздатьКалендарьПятидневкаРоссийскойФедерации"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.1.6"; - Обработчик.Процедура = "КалендарныеГрафики.СоздатьПроизводственныйКалендарьНа2011Год"; + Обработчик.Версия = "2.0.1.10"; + Обработчик.Процедура = "КалендарныеГрафики.ОбновитьПроизводственныеКалендари"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.2.2.2"; - Обработчик.Процедура = "КалендарныеГрафики.СоздатьПроизводственныйКалендарьНа2012Год"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.2.2.5"; - Обработчик.Процедура = "КалендарныеГрафики.ПеренестиВыходныеДниМая2012Года"; + Обработчик.Версия = "2.0.1.10"; + Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеПроизводственныхКалендарей"; КонецПроцедуры -// Процедура заполняет регистр сведений Календарные графики за указанный год +// Процедура создает календарь на основе производственного календаря +// Российской Федерации по шаблону "Пятидневка" // -// Параметры -// НомерГода - число, номер года, за который необходимо заполнить регистр -// РабочиеДни - массив, дни, приходящиеся на выходные, которые следует считать рабочими -// ПраздничныеДни - массив, дни, приходящиеся на рабочие, которые следует считать выходными +Процедура СоздатьКалендарьПятидневкаРоссийскойФедерации() Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + СтандартныеПодсистемыПереопределяемый.СкопироватьЭлементыСправочникаПоставляемыхДанных(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("РФ"), Тип("СправочникСсылка.ПроизводственныеКалендари")); + КонецЕсли; + +КонецПроцедуры + +// Обновляет справочник Производственные календари из одноименного макета // -// Возвращаемое значение -// Нет -// -Процедура ЗаполнитьКалендарныйГрафик(НомерГода, РабочиеДни, ПраздничныеДни) +Процедура ОбновитьПроизводственныеКалендари() Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + КлассификаторXML = Справочники.ПроизводственныеКалендари.ПолучитьМакет("ПроизводственныеКалендари").ПолучитьТекст(); + + КлассификаторТаблица = ОбщегоНазначения.ПрочитатьXMLВТаблицу(КлассификаторXML).Данные; Запрос = Новый Запрос; - Запрос.Текст = + Запрос.Текст = "ВЫБРАТЬ - | Календари.Ссылка + | ВЫРАЗИТЬ(КлассификаторТаблица.Code КАК СТРОКА(2)) КАК Код, + | ВЫРАЗИТЬ(КлассификаторТаблица.Description КАК СТРОКА(100)) КАК Наименование + |ПОМЕСТИТЬ КлассификаторТаблица |ИЗ - | Справочник.Календари КАК Календари - |ГДЕ - | Календари.Наименование = ""Производственный календарь"""; + | &КлассификаторТаблица КАК КлассификаторТаблица + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КлассификаторТаблица.Код, + | КлассификаторТаблица.Наименование, + | ПроизводственныеКалендари.Ссылка КАК Ссылка, + | ЕСТЬNULL(ПроизводственныеКалендари.Код, """") КАК ПроизводственныйКалендарьКод, + | ЕСТЬNULL(ПроизводственныеКалендари.Наименование, """") КАК ПроизводственныйКалендарьНаименование + |ИЗ + | КлассификаторТаблица КАК КлассификаторТаблица + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари + | ПО КлассификаторТаблица.Код = ПроизводственныеКалендари.Код"; + + Запрос.УстановитьПараметр("КлассификаторТаблица", КлассификаторТаблица); Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - ПроизводственныйКалендарь = Выборка.Ссылка; - - Иначе - - // Элемент создается только в случае, если в справочнике нет других элементов - Запрос = Новый Запрос( - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК Поле1 - |ИЗ - | Справочник.Календари КАК Календари"); - - Если Не Запрос.Выполнить().Пустой() Тогда - Возврат; + Пока Выборка.Следующий() Цикл + Если СокрЛП(Выборка.Код) = СокрЛП(Выборка.ПроизводственныйКалендарьКод) + И Выборка.Наименование = Выборка.ПроизводственныйКалендарьНаименование Тогда + Продолжить; КонецЕсли; - - ПроизводственныйКалендарь = Справочники.Календари.СоздатьЭлемент(); - ПроизводственныйКалендарь.Наименование = "Производственный календарь"; - ПроизводственныйКалендарь.Записать(); - + Если ЗначениеЗаполнено(Выборка.Ссылка) Тогда + СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект(); + Иначе + СправочникОбъект = Справочники.ПроизводственныеКалендари.СоздатьЭлемент(); + КонецЕсли; + СправочникОбъект.Код = СокрЛП(Выборка.Код); + СправочникОбъект.Наименование = СокрЛП(Выборка.Наименование); + СправочникОбъект.Записать(); + КонецЦикла; + +КонецПроцедуры + +// Обновляет данные производственных календарей из макета +// ДанныеПроизводственныхКалендарей +// +Процедура ОбновитьДанныеПроизводственныхКалендарей() Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; КонецЕсли; - НаборЗаписей = РегистрыСведений.КалендарныеГрафики.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Календарь.Установить(ПроизводственныйКалендарь.Ссылка); - НаборЗаписей.Отбор.Год.Установить(НомерГода); + КлассификаторXML = РегистрыСведений.ДанныеПроизводственногоКалендаря.ПолучитьМакет("ДанныеПроизводственныхКалендарей").ПолучитьТекст(); - КоличествоРабочихДнейСНачалаГода = 0; + КлассификаторТаблица = ОбщегоНазначения.ПрочитатьXMLВТаблицу(КлассификаторXML).Данные; - Для НомерМесяца = 1 По 12 Цикл - Для НомерДня = 1 По День(КонецМесяца(Дата(НомерГода, НомерМесяца, 1))) Цикл - ДатаГрафика = Дата(НомерГода, НомерМесяца, НомерДня); - - ДеньВключенВГрафик = ПраздничныеДни.Найти(ДатаГрафика) = Неопределено - И (РабочиеДни.Найти(ДатаГрафика) <> Неопределено ИЛИ ДеньНедели(ДатаГрафика) <= 5); - - Если ДеньВключенВГрафик Тогда - КоличествоРабочихДнейСНачалаГода = КоличествоРабочихДнейСНачалаГода + 1; - КонецЕсли; - - Строка = НаборЗаписей.Добавить(); - Строка.Календарь = ПроизводственныйКалендарь.Ссылка; - Строка.Год = НомерГода; - Строка.ДатаГрафика = ДатаГрафика; - Строка.ДеньВключенВГрафик = ДеньВключенВГрафик; - Строка.КоличествоДнейВГрафикеСНачалаГода = КоличествоРабочихДнейСНачалаГода; + КлассификаторТаблица.Колонки.Добавить("ВидДня", Новый ОписаниеТипов("ПеречислениеСсылка.ВидыДнейПроизводственногоКалендаря")); + КлассификаторТаблица.Колонки.Добавить("Год", Новый ОписаниеТипов("Число")); + КлассификаторТаблица.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата")); + Для Каждого СтрокаКлассификатора ИЗ КлассификаторТаблица Цикл + СтрокаКлассификатора.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря[СтрокаКлассификатора.DayType]; + СтрокаКлассификатора.Год = Число(СтрокаКлассификатора.Year); + СтрокаКлассификатора.Дата = Дата(СтрокаКлассификатора.Date); + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВЫРАЗИТЬ(КлассификаторТаблица.Calendar КАК СТРОКА(2)) КАК КалендарьКод, + | КлассификаторТаблица.Дата, + | КлассификаторТаблица.Год, + | КлассификаторТаблица.ВидДня + |ПОМЕСТИТЬ КлассификаторТаблица + |ИЗ + | &КлассификаторТаблица КАК КлассификаторТаблица + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПроизводственныеКалендари.Ссылка КАК ПроизводственныйКалендарь, + | КлассификаторТаблица.Год, + | КлассификаторТаблица.Дата, + | КлассификаторТаблица.ВидДня + |ИЗ + | КлассификаторТаблица КАК КлассификаторТаблица + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари + | ПО КлассификаторТаблица.КалендарьКод = ПроизводственныеКалендари.Код + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря + | ПО (ПроизводственныеКалендари.Ссылка = ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь) + | И КлассификаторТаблица.Год = ДанныеПроизводственногоКалендаря.Год + | И КлассификаторТаблица.Дата = ДанныеПроизводственногоКалендаря.Дата + |ГДЕ + | (ДанныеПроизводственногоКалендаря.ВидДня ЕСТЬ NULL + | ИЛИ КлассификаторТаблица.ВидДня <> ДанныеПроизводственногоКалендаря.ВидДня)"; + + Запрос.УстановитьПараметр("КлассификаторТаблица", КлассификаторТаблица); + + НаборЗаписей = РегистрыСведений.ДанныеПроизводственногоКалендаря.СоздатьНаборЗаписей(); + + КлючиРегистра = Новый Массив; + КлючиРегистра.Добавить("ПроизводственныйКалендарь"); + КлючиРегистра.Добавить("Год"); + КлючиРегистра.Добавить("Дата"); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + НаборЗаписей.Очистить(); + ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Выборка); + Для Каждого Ключ Из КлючиРегистра Цикл + НаборЗаписей.Отбор[Ключ].Установить(Выборка[Ключ]); КонецЦикла; + НаборЗаписей.Записать(Истина); КонецЦикла; - НаборЗаписей.Записать(Истина); - КонецПроцедуры - -// Процедура создает в справочнике Календари календарь на 2010 год, соответствующий производственному -// календарю Российской Федерации, если в справочнике нет ни одного календаря за этот год -// -Процедура СоздатьПроизводственныйКалендарьНа2010Год() Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | КалендарныеГрафики.Календарь - |ИЗ - | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики - |ГДЕ - | КалендарныеГрафики.Год = 2010"; - Результат = Запрос.Выполнить(); - - Если Не Результат.Пустой() Тогда - Возврат; - КонецЕсли; - - // Записываем данные за 2010 год - - РабочиеДни = Новый Массив; - ПраздничныеДни = Новый Массив; - - // праздники РФ - ПраздничныеДни.Добавить(Дата(2010, 1, 1)); - ПраздничныеДни.Добавить(Дата(2010, 1, 2)); - ПраздничныеДни.Добавить(Дата(2010, 1, 3)); - ПраздничныеДни.Добавить(Дата(2010, 1, 4)); - ПраздничныеДни.Добавить(Дата(2010, 1, 5)); - ПраздничныеДни.Добавить(Дата(2010, 1, 7)); - ПраздничныеДни.Добавить(Дата(2010, 2, 23)); - ПраздничныеДни.Добавить(Дата(2010, 3, 8)); - ПраздничныеДни.Добавить(Дата(2010, 5, 1)); - ПраздничныеДни.Добавить(Дата(2010, 5, 9)); - ПраздничныеДни.Добавить(Дата(2010, 6, 12)); - ПраздничныеДни.Добавить(Дата(2010, 11, 4)); - - // Переносы праздников с выходных дней - ПраздничныеДни.Добавить(Дата(2010, 1, 6)); - ПраздничныеДни.Добавить(Дата(2010, 1, 8)); - ПраздничныеДни.Добавить(Дата(2010, 2, 22)); - РабочиеДни.Добавить(Дата(2010, 2, 27)); - ПраздничныеДни.Добавить(Дата(2010, 5, 3)); - ПраздничныеДни.Добавить(Дата(2010, 5, 10)); - ПраздничныеДни.Добавить(Дата(2010, 6, 14)); - ПраздничныеДни.Добавить(Дата(2010, 11, 5)); - РабочиеДни.Добавить(Дата(2010, 11, 7)); - - ЗаполнитьКалендарныйГрафик(2010, РабочиеДни, ПраздничныеДни); - -КонецПроцедуры - -// Процедура создает в справочнике Календари календарь на 2011 год, соответствующий производственному -// календарю Российской Федерации, если в справочнике нет ни одного календаря за этот год -// -Процедура СоздатьПроизводственныйКалендарьНа2011Год() Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | КалендарныеГрафики.Календарь - |ИЗ - | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики - |ГДЕ - | КалендарныеГрафики.Год = 2011"; - Результат = Запрос.Выполнить(); - - Если Не Результат.Пустой() Тогда - Возврат; - КонецЕсли; - - // Записываем данные за 2011 год - - РабочиеДни = Новый Массив; - ПраздничныеДни = Новый Массив; - - // праздники РФ - ПраздничныеДни.Добавить(Дата(2011, 1, 1)); - ПраздничныеДни.Добавить(Дата(2011, 1, 2)); - ПраздничныеДни.Добавить(Дата(2011, 1, 3)); - ПраздничныеДни.Добавить(Дата(2011, 1, 4)); - ПраздничныеДни.Добавить(Дата(2011, 1, 5)); - ПраздничныеДни.Добавить(Дата(2011, 1, 7)); - ПраздничныеДни.Добавить(Дата(2011, 2, 23)); - ПраздничныеДни.Добавить(Дата(2011, 3, 8)); - ПраздничныеДни.Добавить(Дата(2011, 5, 1)); - ПраздничныеДни.Добавить(Дата(2011, 5, 9)); - ПраздничныеДни.Добавить(Дата(2011, 6, 12)); - ПраздничныеДни.Добавить(Дата(2011, 11, 4)); - - // Переносы праздников с выходных дней - ПраздничныеДни.Добавить(Дата(2011, 1, 6)); - ПраздничныеДни.Добавить(Дата(2011, 1, 10)); - ПраздничныеДни.Добавить(Дата(2011, 5, 2)); - ПраздничныеДни.Добавить(Дата(2011, 6, 13)); - - ЗаполнитьКалендарныйГрафик(2011, РабочиеДни, ПраздничныеДни); - -КонецПроцедуры - -// Процедура создает в справочнике Календари календарь на 2012 год, соответствующий производственному -// календарю Российской Федерации, если в справочнике нет ни одного календаря за этот год -// -// Параметры: -// Замещать - булево, если Истина, запись производится вне зависимости от наличия данных за 2012 год -// -Процедура СоздатьПроизводственныйКалендарьНа2012Год(Замещать = Ложь) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | КалендарныеГрафики.Календарь - |ИЗ - | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики - |ГДЕ - | КалендарныеГрафики.Год = 2012"; - - Если Не Замещать И Не Запрос.Выполнить().Пустой() Тогда - Возврат; - КонецЕсли; - - // Записываем данные за 2012 год - - РабочиеДни = Новый Массив; - ПраздничныеДни = Новый Массив; - - // праздники РФ - ПраздничныеДни.Добавить(Дата(2012, 1, 1)); - ПраздничныеДни.Добавить(Дата(2012, 1, 2)); - ПраздничныеДни.Добавить(Дата(2012, 1, 3)); - ПраздничныеДни.Добавить(Дата(2012, 1, 4)); - ПраздничныеДни.Добавить(Дата(2012, 1, 5)); - ПраздничныеДни.Добавить(Дата(2012, 1, 7)); - ПраздничныеДни.Добавить(Дата(2012, 2, 23)); - ПраздничныеДни.Добавить(Дата(2012, 3, 8)); - ПраздничныеДни.Добавить(Дата(2012, 5, 1)); - ПраздничныеДни.Добавить(Дата(2012, 5, 9)); - ПраздничныеДни.Добавить(Дата(2012, 6, 12)); - ПраздничныеДни.Добавить(Дата(2012, 11, 4)); - - // Переносы праздников с выходных дней - ПраздничныеДни.Добавить(Дата(2012, 1, 6)); - ПраздничныеДни.Добавить(Дата(2012, 1, 9)); - ПраздничныеДни.Добавить(Дата(2012, 3, 9)); - РабочиеДни.Добавить(Дата(2012, 3, 11)); - ПраздничныеДни.Добавить(Дата(2012, 4, 30)); - РабочиеДни.Добавить(Дата(2012, 4, 28)); - ПраздничныеДни.Добавить(Дата(2012, 6, 11)); - РабочиеДни.Добавить(Дата(2012, 6, 9)); - ПраздничныеДни.Добавить(Дата(2012, 11, 5)); - ПраздничныеДни.Добавить(Дата(2012, 12, 31)); - РабочиеДни.Добавить(Дата(2012, 12, 29)); - - ЗаполнитьКалендарныйГрафик(2012, РабочиеДни, ПраздничныеДни); - -КонецПроцедуры - -// Процедура выполняет перенос праздничных дней в мае 2012 года -// в соответствии с Постановлением Правительства РФ от 15 марта 2012 г. N 201 -// -Процедура ПеренестиВыходныеДниМая2012Года() Экспорт - - // Перенос дней осуществляется только в том случае, - // если календарь полностью соответствует состоянию - // на момент заполнения данными 2012 года - - ПроизводственныйКалендарь = Справочники.Календари.НайтиПоНаименованию("Производственный календарь"); - Если Не ЗначениеЗаполнено(ПроизводственныйКалендарь) Тогда - Возврат; - КонецЕсли; - - РабочиеДни = Справочники.Календари.ПрочитатьДанныеГрафикаИзРегистра(ПроизводственныйКалендарь, 2012); - - // Состояние заполненности производственного календаря на 2012 год - НачатьТранзакцию(); - СоздатьПроизводственныйКалендарьНа2012Год(Истина); - РабочиеДни2012 = Справочники.Календари.ПрочитатьДанныеГрафикаИзРегистра(ПроизводственныйКалендарь, 2012); - ОтменитьТранзакцию(); - - Если Не ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(РабочиеДни, РабочиеДни2012) Тогда - // В календаре есть изменения - перенос дней не осуществляется - Возврат; - КонецЕсли; - - // Выполняется перенос выходных дней: - // - с 5 мая на 7 мая, - // - с 12 мая на 8 мая - - // При этом необходимо перезаполнить поле "КоличествоДнейВГрафикеСНачалаГода" - // за период с 5 по 12 мая - - ПоляЗаписиКалендаря = "Календарь, Год, ДатаГрафика, ДеньВключенВГрафик, КоличествоДнейВГрафикеСНачалаГода"; - - ЗаписиКалендаря = Новый Массив; - ЗаписиКалендаря.Добавить(Новый Структура(ПоляЗаписиКалендаря, ПроизводственныйКалендарь, 2012, Дата(2012, 5, 5), Истина, 82)); - ЗаписиКалендаря.Добавить(Новый Структура(ПоляЗаписиКалендаря, ПроизводственныйКалендарь, 2012, Дата(2012, 5, 6), Ложь, 82)); - ЗаписиКалендаря.Добавить(Новый Структура(ПоляЗаписиКалендаря, ПроизводственныйКалендарь, 2012, Дата(2012, 5, 7), Ложь, 82)); - ЗаписиКалендаря.Добавить(Новый Структура(ПоляЗаписиКалендаря, ПроизводственныйКалендарь, 2012, Дата(2012, 5, 8), Ложь, 82)); - ЗаписиКалендаря.Добавить(Новый Структура(ПоляЗаписиКалендаря, ПроизводственныйКалендарь, 2012, Дата(2012, 5, 9), Ложь, 82)); - ЗаписиКалендаря.Добавить(Новый Структура(ПоляЗаписиКалендаря, ПроизводственныйКалендарь, 2012, Дата(2012, 5, 10), Истина, 83)); - ЗаписиКалендаря.Добавить(Новый Структура(ПоляЗаписиКалендаря, ПроизводственныйКалендарь, 2012, Дата(2012, 5, 11), Истина, 84)); - ЗаписиКалендаря.Добавить(Новый Структура(ПоляЗаписиКалендаря, ПроизводственныйКалендарь, 2012, Дата(2012, 5, 12), Истина, 85)); - - Для Каждого ДанныеЗаписи Из ЗаписиКалендаря Цикл - ЗаписьКалендаря = РегистрыСведений.КалендарныеГрафики.СоздатьМенеджерЗаписи(); - ЗаполнитьЗначенияСвойств(ЗаписьКалендаря, ДанныеЗаписи); - ЗаписьКалендаря.Прочитать(); - ЗаполнитьЗначенияСвойств(ЗаписьКалендаря, ДанныеЗаписи); - ЗаписьКалендаря.Записать(); - КонецЦикла; - -КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/КомандыРаботыСБизнесПроцессамиКлиент/Module.bsl b/SSL/src/CommonModules/КомандыРаботыСБизнесПроцессамиКлиент/Module.bsl index ca6dc9c37..3db3cd63e 100644 --- a/SSL/src/CommonModules/КомандыРаботыСБизнесПроцессамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/КомандыРаботыСБизнесПроцессамиКлиент/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Бизнес-процессы и задачи" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Отмечает указанный бизнес-процесс как остановленный // Процедура Остановить(Знач ПараметрКоманды) Экспорт @@ -220,7 +228,10 @@ Процедура ПринятьЗадачуКИсполнению(Форма, ТекущийПользователь) Экспорт Форма.Объект.ПринятаКИсполнению = Истина; - Форма.Объект.ДатаПринятияКИсполнению = ТекущаяДата(); + + // ДатаПринятияКИсполнению устанавливается пустой - она будет проинициализирована + // текущей датой сеанса перед записью самой задачи + Форма.Объект.ДатаПринятияКИсполнению = Дата('00010101'); Если Форма.Объект.Исполнитель.Пустая() Тогда Форма.Объект.Исполнитель = ТекущийПользователь; КонецЕсли; @@ -283,8 +294,7 @@ Если Форма.Объект.Завершен Тогда - Предупреждение( - НСтр("ru = 'Нельзя остановить завершенный бизнес-процесс.'")); + Предупреждение(НСтр("ru = 'Нельзя остановить завершенный бизнес-процесс.'")); Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/КомандыРаботыСФайламиКлиент/Module.bsl b/SSL/src/CommonModules/КомандыРаботыСФайламиКлиент/Module.bsl index 193e0f32f..2b165e937 100644 --- a/SSL/src/CommonModules/КомандыРаботыСФайламиКлиент/Module.bsl +++ b/SSL/src/CommonModules/КомандыРаботыСФайламиКлиент/Module.bsl @@ -5,7 +5,8 @@ Знач ХранитьВерсии = Неопределено, Знач РедактируетТекущийПользователь = Неопределено, Знач Редактирует = Неопределено, - Знач АвторТекущейВерсии = Неопределено) Экспорт + Знач АвторТекущейВерсии = Неопределено, + Знач Кодировка = Неопределено) Экспорт Если ПараметрКоманды = Неопределено Тогда Возврат; @@ -35,7 +36,14 @@ ХранитьВерсии, РедактируетТекущийПользователь, Редактирует, - АвторТекущейВерсии); + АвторТекущейВерсии, + "", //ПереданныйПолныйПутьКФайлу + Неопределено, //СоздатьНовуюВерсию + Неопределено, //КомментарийКВерсии + Истина, //ПоказыватьОповещение + Ложь, //ПрименитьКоВсем + Истина, //ОсвобождатьФайлы + Кодировка); Если РедактированиеЗакончено Тогда diff --git a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурации/Module.bsl b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурации/Module.bsl index 9749c9671..5f5ebee33 100644 --- a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурации/Module.bsl +++ b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурации/Module.bsl @@ -1,5 +1,15 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Контроль динамического обновления конфигурации" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Проверить, что информационная база была обновлена динамически. // Функция КонфигурацияБДБылаИзмененаДинамически() Экспорт + Возврат КонфигурацияБазыДанныхИзмененаДинамически(); + КонецФункции diff --git a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурации/КонтрольДинамическогоОбновленияКонфигурации.mdo b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурации/КонтрольДинамическогоОбновленияКонфигурации.mdo index 586c2f7fb..5a2a1f40d 100644 --- a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурации/КонтрольДинамическогоОбновленияКонфигурации.mdo +++ b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурации/КонтрольДинамическогоОбновленияКонфигурации.mdo @@ -6,7 +6,5 @@ Контроль динамического обновления конфигурации true - true - true true diff --git a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииГлобальный/Module.bsl b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииГлобальный/Module.bsl index 5f317ee57..030faf26b 100644 --- a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииГлобальный/Module.bsl +++ b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииГлобальный/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Контроль динамического обновления конфигурации" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Обработчик ожидания проверяет, что информационная база была обновлена динамически, и // сообщает об этом пользователю. // @@ -12,7 +20,7 @@ |Перезапустить?'"); Ответ = Вопрос(ТекстСообщения, РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Да Тогда - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; + СтандартныеПодсистемыКлиент.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы(); ЗавершитьРаботуСистемы(Истина, Истина); КонецЕсли; diff --git a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииКлиент/Module.bsl index 59a25b570..18ed4b34b 100644 --- a/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/КонтрольДинамическогоОбновленияКонфигурацииКлиент/Module.bsl @@ -1,7 +1,15 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Контроль динамического обновления конфигурации" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Обработчик события ПриНачалеРаботыСистемы вызывается // для выполнения действий, требуемых для подсистемы -// КонтрольДинамическогоОбновленияКонфигурацииКлиент. +// "Контроль динамического обновления конфигурации". // Процедура ПриНачалеРаботыСистемы() Экспорт - ПодключитьОбработчикОжидания("ОбработчикОжиданияПроверкиДинамическогоИзмененияИБ", 20 * 60); + ПодключитьОбработчикОжидания("ОбработчикОжиданияПроверкиДинамическогоИзмененияИБ", 20 * 60); // раз в 20 минут КонецПроцедуры diff --git a/SSL/src/CommonModules/КонтрольЖурналаРегистрации/Module.bsl b/SSL/src/CommonModules/КонтрольЖурналаРегистрации/Module.bsl deleted file mode 100644 index fd3051ad2..000000000 --- a/SSL/src/CommonModules/КонтрольЖурналаРегистрации/Module.bsl +++ /dev/null @@ -1,52 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИК РЕГЛАМЕНТНОГО ЗАДАНИЯ - -// Процедура - обработчик регламентного задания КонтрольОшибокВЖурналеРегистрации. -// -Процедура ОбработкаРегламентногоЗадания_КонтрольОшибокВЖурналеРегистрации() Экспорт - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Начат регламентный контроль ошибок и предупреждений в журнале регистрации'")); - - Попытка - Обработки.КонтрольЖурналаРегистрации.СформироватьОтчетПоОшибкамИПослатьОтчет(); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Завершен регламентный контроль ошибок и предупреждений в журнале регистрации'")); - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время регламентного контроля ошибок и предупреждений в журнале регистрации, произошла неизвестная ошибка. - |%1'"), ОписаниеОшибки())); - КонецПопытки; - -КонецПроцедуры - -// Получает строку - адресатов получения отчета по контролю журнала регистрации -// -Функция ПолучитьАдресатовПолученияОтчетаПоЖурналуРегистрации() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат Константы.АдресатыПолученияОтчетаПоЖурналуРегистрации.Получить(); - -КонецФункции - -// Устанавливает константу АдресатыПолученияОтчетаПоЖурналуРегистрации -// адресатами получения отчета по контролю журнала регистрации -// -Процедура УстановитьАдресатовПолученияОтчетаПоЖурналуРегистрации(Адресаты) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Константы.АдресатыПолученияОтчетаПоЖурналуРегистрации.Установить(Адресаты); - -КонецПроцедуры - -Функция СобытиеЖурналаРегистрации() - - Возврат "Контроль журнала регистрации"; - -КонецФункции diff --git a/SSL/src/CommonModules/КонтрольЖурналаРегистрацииСлужебный/Module.bsl b/SSL/src/CommonModules/КонтрольЖурналаРегистрацииСлужебный/Module.bsl new file mode 100644 index 000000000..8a2d66db9 --- /dev/null +++ b/SSL/src/CommonModules/КонтрольЖурналаРегистрацииСлужебный/Module.bsl @@ -0,0 +1,57 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Контроль журнала регистрации". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Обработчик регламентного задания КонтрольОшибокВЖурналеРегистрации. +Процедура ОбработкаРегламентногоЗадания_КонтрольОшибокВЖурналеРегистрации() Экспорт + + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + ИмяСобытия = НСтр("ru = 'Контроль журнала регистрации'"); + + ЗаписьЖурналаРегистрации( + ИмяСобытия, + УровеньЖурналаРегистрации.Информация, , , + НСтр("ru = 'Запуск'") + ); + + Попытка + Обработки.КонтрольЖурналаРегистрации.СформироватьОтчетПоОшибкамИПослатьОтчет(); + ЗаписьЖурналаРегистрации( + ИмяСобытия, + УровеньЖурналаРегистрации.Информация, , , + НСтр("ru = 'Успешное завершение'") + ); + Исключение + ЗаписьЖурналаРегистрации( + ИмяСобытия, + УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + +КонецПроцедуры + +// Возвращает адресатов получения отчета по контролю журнала регистрации. +Функция ПолучитьАдресатовПолученияОтчетаПоЖурналуРегистрации() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат Константы.АдресатыПолученияОтчетаПоЖурналуРегистрации.Получить(); + +КонецФункции + +// Устанавливает адресатов получения отчета по контролю журнала регистрации. +Процедура УстановитьАдресатовПолученияОтчетаПоЖурналуРегистрации(Адресаты) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Константы.АдресатыПолученияОтчетаПоЖурналуРегистрации.Установить(Адресаты); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo b/SSL/src/CommonModules/КонтрольЖурналаРегистрацииСлужебный/КонтрольЖурналаРегистрацииСлужебный.mdo similarity index 58% rename from SSL/src/CommonModules/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo rename to SSL/src/CommonModules/КонтрольЖурналаРегистрацииСлужебный/КонтрольЖурналаРегистрацииСлужебный.mdo index 948c33891..58a0426d4 100644 --- a/SSL/src/CommonModules/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo +++ b/SSL/src/CommonModules/КонтрольЖурналаРегистрацииСлужебный/КонтрольЖурналаРегистрацииСлужебный.mdo @@ -1,10 +1,11 @@ - КонтрольЖурналаРегистрации + КонтрольЖурналаРегистрацииСлужебный ru - Контроль журнала регистрации + Контроль журнала регистрации служебный true - true + true + true diff --git a/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl index 10d6df978..f401abe7b 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяВызовСервера/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Напоминания пользователя". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Создаёт новое оповещение пользователя. Если по объекту уже есть оповещение - перезаписывает его. Процедура ПодключитьНапоминание(ПараметрыОповещения, ОбновитьСрокНапоминания = Ложь) Экспорт @@ -87,7 +95,7 @@ КонецЕсли; КонецПроцедуры -// Выполняет запрос по напоминаниям для текущего пользователя на момент времени ТекущаяДата() + 30минут. +// Выполняет запрос по напоминаниям для текущего пользователя на момент времени ТекущаяДатаСеанса() + 30минут. // Момент времени смещён от текущего для использования функции из модуля с повторным использованием // возвращаемых значений. // При обработке результата выполнения функции необходимо учитывать эту особенность. @@ -121,7 +129,7 @@ Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса() + 30*60);// +30 минут для кэша - Запрос.УстановитьПараметр("Пользователь", ОбщегоНазначения.ТекущийПользователь()); + Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); Результат = НапоминанияПользователяСервер.ПолучитьМассивСтруктурИзТаблицы(Запрос.Выполнить().Выгрузить()); diff --git a/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl index 29739d1b9..ae7cb2758 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Напоминания пользователя". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Открывает форму текущих оповещений пользователя Процедура ПроверитьТекущиеНапоминания() Экспорт @@ -11,7 +19,7 @@ НапоминанияПользователяКлиент.ОткрытьФормуОповещения(); Иначе Если ЗначениеЗаполнено(ВремяБлижайшего) Тогда - ИнтервалСледующейПроверки = Мин(ВремяБлижайшего - ТекущаяДата(), ИнтервалСледующейПроверки); + ИнтервалСледующейПроверки = Мин(ВремяБлижайшего - ОбщегоНазначенияКлиент.ДатаСеанса(), ИнтервалСледующейПроверки); КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl index 793524614..f727ee6c7 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Напоминания пользователя". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Запускает периодическую проверку текущих напоминаний пользователя. Процедура Включить() Экспорт ПроверитьТекущиеНапоминания(); @@ -9,12 +17,21 @@ КонецПроцедуры // Активизирует обработчик ожидания, проверяющий текущие напоминания пользователя. -Процедура ПриНачалеРаботыСистемы() Экспорт - Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиНапоминаний.ИспользоватьНапоминания Тогда - Включить(); +Процедура ПриНачалеРаботыСистемы() Экспорт + + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; КонецЕсли; + + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиНапоминаний.ИспользоватьНапоминания Тогда + Включить(); + КонецЕсли; + КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Открывает форму оповещения Процедура ОткрытьФормуОповещения() Экспорт ФормаОповещения = НапоминанияПользователяКлиентПовтИсп.ПолучитьФормуОповещения(); @@ -34,7 +51,7 @@ ВремяБлижайшего = Неопределено; Для Каждого Оповещение из ТаблицаОповещений Цикл - Если Оповещение.СрокНапоминания <= ТекущаяДата() Тогда + Если Оповещение.СрокНапоминания <= ОбщегоНазначенияКлиент.ДатаСеанса() Тогда Результат.Добавить(Оповещение); Иначе Если ВремяБлижайшего = Неопределено Тогда diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl index 3570a08a0..59d360fcf 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиентПовтИсп/Module.bsl @@ -1,9 +1,17 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Напоминания пользователя". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Возвращает форму текущих оповещений пользователя Функция ПолучитьФормуОповещения() Экспорт Возврат ПолучитьФорму("РегистрСведений.НапоминанияПользователя.Форма.ФормаОповещения"); КонецФункции -// Выполняет запрос по напоминаниям для текущего пользователя на момент времени ТекущаяДата() + 30минут. +// Выполняет запрос по напоминаниям для текущего пользователя на 30 минут вперёд от текущего времени. // Момент времени смещён от текущего для того, чтобы данные были актуальны в течение жизни кэша. // При обработке результата выполнения функции необходимо учитывать эту особенность. // diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl index 43da2e7fd..dc5b6da7f 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиентСервер/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Напоминания пользователя". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Возвращает стандартные расписания для периодических напоминаний Функция ПолучитьСтандартныеРасписанияДляНапоминания() Экспорт @@ -11,10 +19,9 @@ ДниНедели = Новый Массив; ДниНедели.Добавить(1); Расписание.ДниНедели = ДниНедели; - Результат.Вставить(НСтр("ru = 'по понедельникам, в 9:00'"), Расписание); - // по пятницам в 14:00 + // по пятницам в 15:00 Расписание = Новый РасписаниеРегламентногоЗадания; Расписание.ПериодПовтораДней = 1; Расписание.ПериодНедель = 1; @@ -24,6 +31,16 @@ Расписание.ДниНедели = ДниНедели; Результат.Вставить(НСтр("ru = 'по пятницам, в 15:00'"), Расписание); + // каждый день в 9:00 + Расписание = Новый РасписаниеРегламентногоЗадания; + Расписание.ПериодПовтораДней = 1; + Расписание.ПериодНедель = 1; + Расписание.ВремяНачала = '00010101090000'; + Результат.Вставить(НСтр("ru = 'каждый день, в 9:00'"), Расписание); + + // для изменения списка + НапоминанияПользователяКлиентСерверПереопределяемый.ПриПолученииСтандартныхРасписанийДляНапоминания(Результат); + Возврат Результат; КонецФункции diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиентСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиентСерверПереопределяемый/Module.bsl index 5f1aa3c63..8072df657 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиентСерверПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиентСерверПереопределяемый/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Напоминания пользователя". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Переопределяет массив реквизитов объекта, относительно которых разрешается устанавливать время напоминания. // Например, можно скрыть те реквизиты с датами, которые являются служебными или не имеют смысла для // установки напоминаний: дата документа или задачи и прочие. @@ -10,4 +18,14 @@ КонецПроцедуры +// Переопределяет варианты расписаний для выбора пользователем. +// +// Параметры: +// Расписания - Соответствие: +// Ключ - Строка - представление расписания; +// Значение - РасписаниеРегламентногоЗадания - вариант расписания. +Процедура ПриПолученииСтандартныхРасписанийДляНапоминания(Расписания) Экспорт + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/НапоминанияПользователяСервер/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяСервер/Module.bsl index 5b3b65548..bdb293cd7 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяСервер/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяСервер/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Напоминания пользователя". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Возвращает структуру настроек напоминаний пользователя Функция ПолучитьНастройкиНапоминаний() Экспорт diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl index 513f06a5c..70440404e 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементов/Module.bsl @@ -1,8 +1,12 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Настройка порядка элементов". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Выполнить перемещение объекта вверх или вниз +// Выполняет перемещение объекта вверх или вниз по списку. // // Параметры: // Ссылка - Ссылка - ссылка на перемещаемый элемент; @@ -12,11 +16,13 @@ // ОтображениеСписком - Булево - Свойство "Отображение" у элемента формы равно "ОтображениеТаблицы.Список"; // Вверх - Булево - Истина, если перемещение вверх, иначе вниз. // +// Возвращаемое значение: +// Строка - описание ошибки. Функция ИзменитьПорядокЭлементов(Ссылка, УстановленныеОтборы, ОтображениеСписком, ПередвинутьВверх) Экспорт - ПараметрыДоступа = ПараметрыДоступа("Изменение", Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)),"Ссылка"); + ПараметрыДоступа = ПараметрыДоступа("Изменение", Ссылка.Метаданные(), "Ссылка"); Если Не ПараметрыДоступа.Доступность или ПараметрыДоступа.ОграничениеУсловием Тогда - Возврат НСтр("ru = 'Недостаточно прав для выполнения операции.'"); + Возврат НСтр("ru = 'Недостаточно прав для изменения порядка элементов.'"); КонецЕсли; Информация = ПолучитьИнформациюДляПеремещенияОМетаданных(Ссылка); @@ -146,7 +152,13 @@ КонецФункции -// Получить структуру с информацией о метаданных объекта +// Возвращает структуру с информацией о метаданных объекта. +// +// Параметры: +// Ссылка - ссылка на объект. +// +// Возвращаемое значение: +// Структура - информация из метаданных объекта. Функция ПолучитьИнформациюДляПеремещенияОМетаданных(Ссылка) Экспорт Информация = Новый Структура; @@ -186,7 +198,15 @@ КонецФункции -// Получить новое значение реквизита доп. упорядочивания для объекта +// Возвращает значение реквизита доп. упорядочивания для нового объекта. +// +// Параметры: +// Информация - Структура - информация о метаданных объекта; +// Родитель - Ссылка - ссылка на родителя объекта; +// Владелец - Ссылка - ссылка на владельца объекта. +// +// Возвращаемое значение: +// Число - значение реквизита доп. упорядочивания. Функция ПолучитьНовоеЗначениеРеквизитаДопУпорядочивания(Информация, Родитель, Владелец) Экспорт УстановитьПривилегированныйРежим(Истина); diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементовКлиент/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементовКлиент/Module.bsl index 0eaa077b8..7491b9367 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементовКлиент/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементовКлиент/Module.bsl @@ -1,28 +1,38 @@ - +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Настройка порядка элементов". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Обработчик команды "Переместить вверх" формы списка -Процедура ПереместитьЭлементВверхВыполнить(СписокРеквизит, СписокЭлемент) Экспорт +// Обработчик команды "Переместить вверх" формы списка. +// +// Параметры: +// РеквизитФормыСписок - ДинамическийСписок - реквизит формы, содержащий список; +// ЭлементФормыСписок - ТаблицаФормы - элемент формы, содержащий список. +// +Процедура ПереместитьЭлементВверхВыполнить(РеквизитФормыСписок, ЭлементФормыСписок) Экспорт - ПереместитьЭлементВыполнить(СписокРеквизит, СписокЭлемент, Истина); + ПереместитьЭлементВыполнить(РеквизитФормыСписок, ЭлементФормыСписок, Истина); КонецПроцедуры -// Обработчик команды "Переместить вниз" формы списка -Процедура ПереместитьЭлементВнизВыполнить(СписокРеквизит, СписокЭлемент) Экспорт +// Обработчик команды "Переместить вниз" формы списка. +// +// Параметры: +// РеквизитФормыСписок - ДинамическийСписок - реквизит формы, содержащий список; +// ЭлементФормыСписок - ТаблицаФормы - элемент формы, содержащий список. +// +Процедура ПереместитьЭлементВнизВыполнить(РеквизитФормыСписок, ЭлементФормыСписок) Экспорт - ПереместитьЭлементВыполнить(СписокРеквизит, СписокЭлемент, Ложь); + ПереместитьЭлементВыполнить(РеквизитФормыСписок, ЭлементФормыСписок, Ложь); КонецПроцедуры - - //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Выполнить операцию перемещения или восстановления порядка Процедура ПереместитьЭлементВыполнить(СписокРеквизит, СписокЭлемент, Вверх) УстановленныеОтборы = Новый Структура; @@ -47,7 +57,6 @@ КонецПроцедуры -// Проверить настройки списка перед выполнением операции Функция ПроверитьСписокПередОперацией(СписокРеквизит, СписокЭлемент, УстановленныеОтборы) // Проверим, установлены ли текущие данные @@ -81,7 +90,6 @@ КонецФункции -// Проверить, правильно ли в списке установлена сортировка Функция СортировкаВСпискеУстановленаПравильно(СписокРеквизит) ЭлементыПорядка = СписокРеквизит.Порядок.Элементы; @@ -113,7 +121,6 @@ КонецФункции -// Получить информацию об установленных отборах и частично проверить их Функция ПроверитьУстановленныеОтборыВСписке(СписокРеквизит, УстановленныеОтборы) УстановленныеОтборы.Вставить("ЕстьОтборПоРодителю", Ложь); diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСобытия/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСобытия/Module.bsl index ded6ff206..cf4f42d9d 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСобытия/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСобытия/Module.bsl @@ -1,13 +1,18 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Заполнить значение реквизита дополнительного упорядочивания у объекта Источник. +// Заполняет значение реквизита дополнительного упорядочивания у объекта. // +// Параметры: +// Источник - Объект - записываемый объект; +// Отказ - Булево - признак отказа от записи объекта. Процедура ЗаполнитьЗначениеРеквизитаУпорядочивания(Источник, Отказ) Экспорт Если Источник.ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; - // Если в обработчике был установлен отказ новые порядок не вычисляем + // Если в обработчике был установлен отказ новый порядок не вычисляем Если Отказ Тогда Возврат; КонецЕсли; @@ -29,8 +34,11 @@ КонецПроцедуры -// Сбросить значение реквизита дополнительного упорядочивания у объекта Источник. +// Обнуляет значение реквизита дополнительного упорядочивания у объекта. // +// Параметры: +// Источник - Объект - объект, создаваемый копированием; +// ОбъектКопирования - Ссылка - исходный объект, который является источником копирования. Процедура СброситьЗначениеРеквизитаУпорядочивания(Источник, ОбъектКопирования) Экспорт Информация = НастройкаПорядкаЭлементов.ПолучитьИнформациюДляПеремещенияОМетаданных(Источник.Ссылка); @@ -40,7 +48,9 @@ КонецПроцедуры -// Проверить, есть ли у объекта РеквизитДопУпорядочивания +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + Функция УОбъектаЕстьРеквизитДопУпорядочивания(Объект, Информация) Если Не Информация.ЕстьРодитель Тогда diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl new file mode 100644 index 000000000..9018e9de4 --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl @@ -0,0 +1,527 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОбменДаннымиВМоделиСервиса: механизм обмена данными. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Обработчик "После определения получателей". +// Вызывается при регистрации объектов в плане обмена. +// Устанавливает константу-признак изменения данных +// и отсылает менеджеру сервиса сообщение об изменении с номером текущей области. +// +// Параметры: +// Данные - СправочникОбъект или ДокументОбъект - Объект для получения значений реквизитов и других свойств. +// Получатели - Массив - Массив элементов типа ПланОбменаСсылка.<Имя> - Узлы плана обмена. +// ИмяПланаОбмена - Строка. +// +Процедура ПослеОпределенияПолучателей(Данные, Получатели, ИмяПланаОбмена) Экспорт + + Если Данные.ОбменДанными.Загрузка Тогда + Возврат; + ИначеЕсли Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + ИначеЕсли Получатели.Количество() = 0 Тогда // объект регистрации не подлежит + Возврат; + ИначеЕсли Не ОбменДаннымиВМоделиСервисаПовтИсп.ПланОбменаИспользуетсяВМоделиСервиса(ИмяПланаОбмена) Тогда + Возврат; + ИначеЕсли ПолучитьФункциональнуюОпцию("ЗарегистрированыИзмененияДанных") Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + + УстановитьПризнакИзмененияДанных(); + Иначе + + ФоновыеЗадания.Выполнить("ОбменДаннымиВМоделиСервиса.УстановитьПризнакИзмененияДанных",, "1"); + КонецЕсли; + +КонецПроцедуры + +// Устанавливает константу-признак изменения данных +// и отсылает менеджеру сервиса сообщение об изменении с номером текущей области. +// +Процедура УстановитьПризнакИзмененияДанных() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + НачатьТранзакцию(); + Попытка + ОбменСообщениями.ОтправитьСообщение("ОбменДанными\УправляющееПриложение\ПризнакИзмененияДанных", + Новый Структура("КодУзла", ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ОбластьДанных)), + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса() + ); + + Константы.ЗарегистрированыИзмененияДанных.Установить(Истина); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.0.1.2"; + Обработчик.Процедура = "ОбменДаннымиВМоделиСервиса.УстановитьКодыПредопределенныхУзлов"; + +КонецПроцедуры + +// Для каждого из используемых в модели сервиса планов обмена +// определяет и устанавливает код и наименование предопределенного узла. +// Код генерируется на основании значения разделителя. +// Наименование - либо по заголовку приложения, либо, если он пустой, +// по представлению текущей области данных из регистра РегистрСведений.ОбластиДанных. +// +Процедура УстановитьКодыПредопределенныхУзлов() Экспорт + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл + + Если ПланОбмена.РаспределеннаяИнформационнаяБаза Тогда + Продолжить; + КонецЕсли; + + ПланОбменаИспользуетсяВМоделиСервиса = Ложь; + + Попытка + ПланОбменаИспользуетсяВМоделиСервиса = ПланыОбмена[ПланОбмена.Имя].ПланОбменаИспользуетсяВМоделиСервиса(); + Исключение + ПланОбменаИспользуетсяВМоделиСервиса = Ложь; + КонецПопытки; + + Если ПланОбменаИспользуетсяВМоделиСервиса Тогда + + ЭтотУзел = ПланыОбмена[ПланОбмена.Имя].ЭтотУзел(); + + Если ПустаяСтрока(ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭтотУзел, "Код")) Тогда + + Наименование = ""; + + Параметры = Новый Структура; + СтандартныеПодсистемыСервер.ДобавитьПараметрыРаботыКлиента(Параметры); + + Наименование = Параметры.ЗаголовокПриложения; + + Если ПустаяСтрока(Наименование) Тогда + + Если Параметры.Свойство("ПредставлениеОбластиДанных") Тогда + + Наименование = Параметры.ПредставлениеОбластиДанных; + + КонецЕсли; + + КонецЕсли; + + Если Не ПустаяСтрока(Наименование) Тогда + + ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); + ЭтотУзелОбъект.Код = КодУзлаПланаОбменаВСервисе(РаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); + ЭтотУзелОбъект.Наименование = СокрЛП(Наименование); + ЭтотУзелОбъект.Записать(); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции + +// Выполняет обмен данными со всеми ИБ абонента. +// Для этого сначала формирует сценарии, а затем инициирует сам обмен. +// +Процедура ВыполнитьОбменДаннымиСоВсемиИнформационнымиБазамиАбонента() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ВерсииМенеджераСервиса = ВерсииМенеджераСервиса(); + + Если ВерсииМенеджераСервиса.Найти("1.0.6.5") <> Неопределено Тогда + + WSПроксиСервиса = ОбменДаннымиВМоделиСервисаПовтИсп.ПолучитьWSПроксиСервисаОбмена_1_0_6_5(); + + СценарийОбменаДаннымиXDTO = СериализаторXDTO.ЗаписатьXDTO(Новый ТаблицаЗначений); + + // Получаем сценарий обмена из управляющего приложения и устанавливаем блокировку на обмен + Попытка + WSПроксиСервиса.GetExchangeScenario(ОбщегоНазначения.ЗначениеРазделителяСеанса(), СценарийОбменаДаннымиXDTO); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат; + КонецПопытки; + + СценарийОбменаДанными = СериализаторXDTO.ПрочитатьXDTO(СценарийОбменаДаннымиXDTO); + + Иначе + + WSПроксиСервиса = ОбменДаннымиВМоделиСервисаПовтИсп.ПолучитьWSПроксиСервисаОбмена(); + + СценарийОбменаДаннымиСтрокой = ""; + + // Получаем сценарий обмена из управляющего приложения и устанавливаем блокировку на обмен + Попытка + WSПроксиСервиса.GetExchangeScenario(ОбщегоНазначения.ЗначениеРазделителяСеанса(), СценарийОбменаДаннымиСтрокой); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат; + КонецПопытки; + + СценарийОбменаДанными = ЗначениеИзСтрокиВнутр(СценарийОбменаДаннымиСтрокой); + + КонецЕсли; + + Если СценарийОбменаДанными.Количество() > 0 Тогда + + СценарийОбменаДанными.Колонки.Добавить("ИнициированоПользователем"); + СценарийОбменаДанными.ЗаполнитьЗначения(Истина, "ИнициированоПользователем"); + + // Запускаем выполнение сценария + ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе(0, СценарийОбменаДанными); + + КонецЕсли; + +КонецПроцедуры + +// Инициирует обмен даными между двумя ИБ. +// +// Параметры: +// СценарийОбменаДанными - ТаблицаЗначений. +// +Процедура ВыполнитьОбменДанными(СценарийОбменаДанными) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // Сбрасываем признак кумулятивного изменения данных для обмена + Константы.ЗарегистрированыИзмененияДанных.Установить(Ложь); + + Если СценарийОбменаДанными.Количество() > 0 Тогда + + // Запускаем выполнение сценария + ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе(0, СценарийОбменаДанными); + + КонецЕсли; + +КонецПроцедуры + +// Выполнить действие сценария обмена, заданное строкой таблицы значений, для первой из двух обменивающихся ИБ. +// +// Параметры: +// ИндексСтрокиСценария - Число - Индекс строки в таблице СценарийОбменаДанными. +// СценарийОбменаДанными - ТаблицаЗначений. +// +Процедура ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе(ИндексСтрокиСценария, СценарийОбменаДанными) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ИндексСтрокиСценария > СценарийОбменаДанными.Количество() - 1 Тогда + Возврат; // Завершение выполнения сценария + КонецЕсли; + + СтрокаСценария = СценарийОбменаДанными[ИндексСтрокиСценария]; + + Если СтрокаСценария.НомерИнформационнойБазы = 1 Тогда + + УзелИнформационнойБазы = НайтиУзелИнформационнойБазы(СтрокаСценария.ИмяПланаОбмена, СтрокаСценария.КодУзлаИнформационнойБазы); + + ОбменДаннымиСервер.ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Ложь, УзелИнформационнойБазы, ПолучитьДействиеПриОбмене(СтрокаСценария.ВыполняемоеДействие), Перечисления.ВидыТранспортаСообщенийОбмена.Combi); + + // Переходим к следующему шагу сценария + ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе(ИндексСтрокиСценария + 1, СценарийОбменаДанными); + + ИначеЕсли СтрокаСценария.НомерИнформационнойБазы = 2 Тогда + + УзелИнформационнойБазы = НайтиУзелИнформационнойБазы(СтрокаСценария.ИмяПланаОбмена, СтрокаСценария.КодЭтогоУзла); + + ВерсииКорреспондента = ВерсииКорреспондента(УзелИнформационнойБазы); + + Если ВерсииКорреспондента.Найти("2.0.1.6") <> Неопределено Тогда + + WSПрокси = ОбменДаннымиВМоделиСервисаПовтИсп.ПолучитьWSПроксиКорреспондента_2_0_1_6(УзелИнформационнойБазы); + + Если WSПрокси = Неопределено Тогда + + // Переходим к следующему шагу сценария + ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе(ИндексСтрокиСценария + 1, СценарийОбменаДанными); + Возврат; + КонецЕсли; + + WSПрокси.StartExchangeExecutionInSecondDataBase(ИндексСтрокиСценария, СериализаторXDTO.ЗаписатьXDTO(СценарийОбменаДанными)); + + Иначе + + WSПрокси = ОбменДаннымиВМоделиСервисаПовтИсп.ПолучитьWSПроксиКорреспондента(УзелИнформационнойБазы); + + Если WSПрокси = Неопределено Тогда + + // Переходим к следующему шагу сценария + ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе(ИндексСтрокиСценария + 1, СценарийОбменаДанными); + Возврат; + КонецЕсли; + + WSПрокси.StartExchangeExecutionInSecondDataBase(ИндексСтрокиСценария, ЗначениеВСтрокуВнутр(СценарийОбменаДанными)); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Выполнить действие сценария обмена, заданное строкой таблицы значений, для второй из двух обменивающихся ИБ. +// +// Параметры: +// ИндексСтрокиСценария - Число - Индекс строки в таблице СценарийОбменаДанными. +// СценарийОбменаДанными - ТаблицаЗначений. +// +Процедура ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазе(ИндексСтрокиСценария, СценарийОбменаДанными) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + СтрокаСценария = СценарийОбменаДанными[ИндексСтрокиСценария]; + + УзелИнформационнойБазы = НайтиУзелИнформационнойБазы(СтрокаСценария.ИмяПланаОбмена, СтрокаСценария.КодУзлаИнформационнойБазы); + + Если СтрокаСценария.ПорядковыйНомерВыполнения = 1 Тогда + // Сбрасываем признак кумулятивного изменения данных для обмена + Константы.ЗарегистрированыИзмененияДанных.Установить(Ложь); + КонецЕсли; + + ОбменДаннымиСервер.ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Ложь, УзелИнформационнойБазы, ПолучитьДействиеПриОбмене(СтрокаСценария.ВыполняемоеДействие), Перечисления.ВидыТранспортаСообщенийОбмена.Combi); + + // Завершение выполнения сценария + Если ИндексСтрокиСценария = СценарийОбменаДанными.Количество() - 1 Тогда + + ВерсииМенеджераСервиса = ВерсииМенеджераСервиса(); + + Если ВерсииМенеджераСервиса.Найти("1.0.6.5") <> Неопределено Тогда + + // Отмечаем выполнение обмена в управляющем приложении + WSПроксиСервиса = ОбменДаннымиВМоделиСервисаПовтИсп.ПолучитьWSПроксиСервисаОбмена_1_0_6_5(); + WSПроксиСервиса.CommitExchange(СериализаторXDTO.ЗаписатьXDTO(СценарийОбменаДанными)); + + Иначе + + // Отмечаем выполнение обмена в управляющем приложении + WSПроксиСервиса = ОбменДаннымиВМоделиСервисаПовтИсп.ПолучитьWSПроксиСервисаОбмена(); + WSПроксиСервиса.CommitExchange(ЗначениеВСтрокуВнутр(СценарийОбменаДанными)); + + КонецЕсли; + + Возврат; + КонецЕсли; + + ВерсииКорреспондента = ВерсииКорреспондента(УзелИнформационнойБазы); + + Если ВерсииКорреспондента.Найти("2.0.1.6") <> Неопределено Тогда + + WSПрокси = ОбменДаннымиВМоделиСервисаПовтИсп.ПолучитьWSПроксиКорреспондента_2_0_1_6(УзелИнформационнойБазы); + + Если WSПрокси <> Неопределено Тогда + + WSПрокси.StartExchangeExecutionInFirstDataBase(ИндексСтрокиСценария + 1, СериализаторXDTO.ЗаписатьXDTO(СценарийОбменаДанными)); + + КонецЕсли; + + Иначе + + WSПрокси = ОбменДаннымиВМоделиСервисаПовтИсп.ПолучитьWSПроксиКорреспондента(УзелИнформационнойБазы); + + Если WSПрокси <> Неопределено Тогда + + WSПрокси.StartExchangeExecutionInFirstDataBase(ИндексСтрокиСценария + 1, ЗначениеВСтрокуВнутр(СценарийОбменаДанными)); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Определяет, выполняется ли обмен в настоящее время. +// Для этого посылается запрос к менеджеру сервиса, установлена ли блокировка обмена. +// +// Возвращаемое значение: +// Булево. +// +Функция ВСистемеВыполняетсяОбменДанными() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + WSПроксиСервиса = ОбменДаннымиВМоделиСервисаПовтИсп.ПолучитьWSПроксиСервисаОбмена(); + + Возврат WSПроксиСервиса.ExchangeBlockIsSet(ОбщегоНазначения.ЗначениеРазделителяСеанса()); + +КонецФункции + +// Возвращает дату последней успешной загрузки текущей области данных для всех узлов ИБ. +// Если синхронизация данных еще не выполнялась, возвращает Неопределено. +// +// Возвращаемое значение: +// Дата; Неопределено. +// +Функция ДатаПоследнейУспешнойЗагрузкиДляВсехУзловИнформационнойБазы() Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | МИНИМУМ(СостоянияУспешныхОбменовДанными.ДатаОкончания) КАК ДатаОкончания + |ИЗ + | РегистрСведений.СостоянияУспешныхОбменовДанными КАК СостоянияУспешныхОбменовДанными + |ГДЕ + | СостоянияУспешныхОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) + | И СостоянияУспешныхОбменовДанными.УзелИнформационнойБазы.ОбластьДанных = &ОбластьДанных + | И СостоянияУспешныхОбменовДанными.УзелИнформационнойБазы.Код ПОДОБНО ""S%"""; + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("ОбластьДанных", РаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Возврат ?(ЗначениеЗаполнено(Выборка.ДатаОкончания), Выборка.ДатаОкончания, Неопределено); + +КонецФункции + +// Генерирует код узла плана обмена для заданной области данных. +// +// Параметры: +// НомерОбласти - Число - Значение разделителя. +// +// Возвращаемое значение: +// Строка - Код узла плана обмена для заданной области. +// +Функция КодУзлаПланаОбменаВСервисе(Знач НомерОбласти) Экспорт + + Если ТипЗнч(НомерОбласти) <> Тип("Число") Тогда + ВызватьИсключение НСтр("ru = 'Неправильный тип параметра номер [1].'"); + КонецЕсли; + + Результат = "S0[НомерОбласти]"; + + Возврат СтрЗаменить(Результат, "[НомерОбласти]", Формат(НомерОбласти, "ЧЦ=7; ЧВН=; ЧГ=0")); + +КонецФункции + +// + +Процедура ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазеИзНеразделенногоСеанса( + ИндексСтрокиСценария, + СценарийОбменаДанными, + ОбластьДанных + ) Экспорт + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОбластьДанных); + УстановитьПривилегированныйРежим(Ложь); + + ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе(ИндексСтрокиСценария, СценарийОбменаДанными); + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +Процедура ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазеИзНеразделенногоСеанса( + ИндексСтрокиСценария, + СценарийОбменаДанными, + ОбластьДанных + ) Экспорт + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОбластьДанных); + УстановитьПривилегированныйРежим(Ложь); + + ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазе(ИндексСтрокиСценария, СценарийОбменаДанными); + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции + +Функция ПолучитьДействиеПриОбмене(ЗначениеСтрокой) + + Возврат Перечисления.ДействияПриОбмене[ЗначениеСтрокой]; + +КонецФункции + +Функция НайтиУзелИнформационнойБазы(Знач ИмяПланаОбмена, Знач КодУзла) + + КодУзлаСПрефиксом = КодУзлаПланаОбменаВСервисе(Число(КодУзла)); + + // Поиск узла по формату кода узла "S00000123" + Результат = ОбменДаннымиПовтИсп.НайтиУзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзлаСПрефиксом); + + Если Результат = Неопределено Тогда + + // Поиск узла по формату кода узла "0000123" (старый формат) + Результат = ОбменДаннымиПовтИсп.НайтиУзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла); + + КонецЕсли; + + Если Результат = Неопределено Тогда + Сообщение = НСтр("ru = 'Не найден узел плана обмена. Имя плана обмена %1; код узла %2 или %3'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ИмяПланаОбмена, КодУзла, КодУзлаСПрефиксом); + ВызватьИсключение Сообщение; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ВерсииКорреспондента(Знач УзелИнформационнойБазы) + + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(УзелИнформационнойБазы); + + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("URL", СтруктураНастроек.WSURLВебСервиса); + ПараметрыПодключения.Вставить("UserName", СтруктураНастроек.WSИмяПользователя); + ПараметрыПодключения.Вставить("Password", СтруктураНастроек.WSПароль); + + Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "ОбменДаннымиВМоделиСервиса"); +КонецФункции + +Функция ВерсииМенеджераСервиса() + + ИмяПользователя = Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(); + ПарольПользователя = Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(); + АдресСервиса = Константы.АдресВебСервисаОбменаДанными.Получить(); + + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("URL", АдресСервиса); + ПараметрыПодключения.Вставить("UserName", ИмяПользователя); + ПараметрыПодключения.Вставить("Password", ПарольПользователя); + + Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "УправляющееПриложениеОбменДанными"); +КонецФункции + diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo new file mode 100644 index 000000000..d3f98cd7d --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo @@ -0,0 +1,11 @@ + + + ОбменДаннымиВМоделиСервиса + + ru + Обмен данными в модели сервиса + + true + true + true + diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl new file mode 100644 index 000000000..40d2bede1 --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl @@ -0,0 +1,121 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОбменДаннымиВМоделиСервисаПовтИсп: механизм обмена данными. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Возвращает ссылку на объект WSПрокси сервиса обмена. +// +// Возвращаемое значение: +// WSПрокси. +// +Функция ПолучитьWSПроксиСервисаОбмена() Экспорт + + ИмяПользователя = Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(); + ПарольПользователя = Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(); + АдресСервиса = Константы.АдресВебСервисаОбменаДанными.Получить(); + + СтруктураНастроек = Новый Структура; + СтруктураНастроек.Вставить("WSURLВебСервиса", АдресСервиса); + СтруктураНастроек.Вставить("WSИмяПользователя", ИмяПользователя); + СтруктураНастроек.Вставить("WSПароль", ПарольПользователя); + СтруктураНастроек.Вставить("WSИмяСервиса", "ManageApplicationExchange"); + СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SaaS/1.0/WS/ManageApplicationExchange"); + + Результат = ОбменДаннымиСервер.ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек); + + Если Результат = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Ошибка получения web-сервиса обмена данными управляющего приложения.'"); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Возвращает ссылку на объект WSПрокси сервиса обмена версии 1.0.6.5. +// +// Возвращаемое значение: +// WSПрокси. +// +Функция ПолучитьWSПроксиСервисаОбмена_1_0_6_5() Экспорт + + ИмяПользователя = Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(); + ПарольПользователя = Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(); + АдресСервиса = Константы.АдресВебСервисаОбменаДанными.Получить(); + + СтруктураНастроек = Новый Структура; + СтруктураНастроек.Вставить("WSURLВебСервиса", АдресСервиса); + СтруктураНастроек.Вставить("WSИмяПользователя", ИмяПользователя); + СтруктураНастроек.Вставить("WSПароль", ПарольПользователя); + СтруктураНастроек.Вставить("WSИмяСервиса", "ManageApplicationExchange_1_0_6_5"); + СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SaaS/1.0/WS/ManageApplicationExchange_1_0_6_5"); + + Результат = ОбменДаннымиСервер.ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек); + + Если Результат = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Ошибка получения web-сервиса обмена данными управляющего приложения.'"); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Возвращает ссылку на объект WSПрокси корреспондента, идентифицируемого узлом плана обмена. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка. +// СтрокаСообщенияОбОшибке - Строка - Текст сообщения об ошибке. +// +// Возвращаемое значение: +// WSПрокси. +// +Функция ПолучитьWSПроксиКорреспондента(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "") Экспорт + + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(УзелИнформационнойБазы); + СтруктураНастроек.Вставить("WSИмяСервиса", "RemoteAdministrationOfExchange"); + СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SaaS/1.0/WS/RemoteAdministrationOfExchange"); + + Возврат ОбменДаннымиСервер.ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке); + +КонецФункции + +// Возвращает ссылку на объект WSПрокси версии 2.0.1.6 корреспондента, идентифицируемого узлом плана обмена. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка. +// СтрокаСообщенияОбОшибке - Строка - Текст сообщения об ошибке. +// +// Возвращаемое значение: +// WSПрокси. +// +Функция ПолучитьWSПроксиКорреспондента_2_0_1_6(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "") Экспорт + + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(УзелИнформационнойБазы); + СтруктураНастроек.Вставить("WSИмяСервиса", "RemoteAdministrationOfExchange_2_0_1_6"); + СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SaaS/1.0/WS/RemoteAdministrationOfExchange_2_0_1_6"); + + Возврат ОбменДаннымиСервер.ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке); +КонецФункции + +// Определяет, используется ли план обмена, идентифицируемый именем, в модели сервиса. +// Чтобы дать возможность это определить, все планы обмена на уровне модуля менеджера +// определяют функцию ПланОбменаИспользуетсяВМоделиСервиса(), +// явно возвращающую значение Истина или Ложь. +// +// Параметры: +// ИмяПланаОбмена - Строка. +// +// Возвращаемое значение: +// Булево. +// +Функция ПланОбменаИспользуетсяВМоделиСервиса(Знач ИмяПланаОбмена) Экспорт + + Попытка + Результат = ПланыОбмена[ИмяПланаОбмена].ПланОбменаИспользуетсяВМоделиСервиса(); + Исключение + Результат = Ложь; + КонецПопытки; + + Возврат Результат; +КонецФункции + diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/ОбменДаннымиВМоделиСервисаПовтИсп.mdo b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/ОбменДаннымиВМоделиСервисаПовтИсп.mdo new file mode 100644 index 000000000..f97b067dd --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/ОбменДаннымиВМоделиСервисаПовтИсп.mdo @@ -0,0 +1,12 @@ + + + ОбменДаннымиВМоделиСервисаПовтИсп + + ru + Обмен данными в модели сервиса повт исп + + true + true + true + DuringSession + diff --git a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl index 6404a8542..a9f802caf 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl @@ -1,28 +1,48 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ВНЕШНЕГО СОЕДИНЕНИЯ +// Подсистема "Обмен данными" +// Модуль предназначен для работы с внешним соединением +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС // Выполняет выгрузку данных для узла информационной базы во временный файл // (Только для внутреннего использования) // -Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазы(Отказ, ИмяПланаОбмена, КодУзлаИнформационнойБазы, ПолноеИмяФайлаСообщенияОбмена, СтрокаСообщенияОбОшибке = "") Экспорт +Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазы(Отказ, + ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ПолноеИмяФайлаСообщенияОбмена, + СтрокаСообщенияОбОшибке = "" + ) Экспорт + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезФайл(Отказ, ИмяПланаОбмена, КодУзлаИнформационнойБазы, ПолноеИмяФайлаСообщенияОбмена, СтрокаСообщенияОбОшибке); + Попытка + ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезФайл(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ПолноеИмяФайлаСообщенияОбмена); + Исключение + Отказ = Истина; + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; Иначе Адрес = ""; - ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВоВременноеХранилище(Отказ, ИмяПланаОбмена, КодУзлаИнформационнойБазы, Адрес, СтрокаСообщенияОбОшибке); - - Если Не Отказ Тогда + Попытка + + ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВоВременноеХранилище(ИмяПланаОбмена, КодУзлаИнформационнойБазы, Адрес); ПолучитьИзВременногоХранилища(Адрес).Записать(ПолноеИмяФайлаСообщенияОбмена); УдалитьИзВременногоХранилища(Адрес); - КонецЕсли; + Исключение + Отказ = Истина; + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; КонецЕсли; @@ -65,7 +85,7 @@ // Функция СтруктураНастроекОбмена(Структура) Экспорт - Возврат ОбменДаннымиСервер.СтруктураНастроекОбменаЧерезВнешнееСоединение(ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(Структура)); + Возврат ОбменДаннымиСервер.СтруктураНастроекОбменаЧерезВнешнееСоединение(ОбменДаннымиСобытия.СкопироватьСтруктуру(Структура)); КонецФункции @@ -102,31 +122,16 @@ // Функция ПолучитьОбъектыТаблицы(ПолноеИмяТаблицы) Экспорт - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяТаблицы); + Возврат ЗначениеВСтрокуВнутр(ОбщегоНазначения.ЗначениеИзСтрокиXML(ОбменДаннымиСервер.ПолучитьОбъектыТаблицы(ПолноеИмяТаблицы))); - Если ОбщегоНазначения.ЭтоСправочник(ОбъектМетаданных) Тогда - - Если ОбъектМетаданных.Иерархический Тогда - - Если ОбъектМетаданных.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда - - Возврат ОбменДаннымиПовтИсп.ПолучитьЭлементыИерархическогоСправочникаИерархияГруппИЭлементов(ПолноеИмяТаблицы); - - Иначе - - Возврат ОбменДаннымиПовтИсп.ПолучитьЭлементыИерархическогоСправочникаИерархияЭлементов(ПолноеИмяТаблицы); - - КонецЕсли; - - Иначе - - Возврат ОбменДаннымиПовтИсп.ПолучитьЭлементыНеиерархическогоСправочника(ПолноеИмяТаблицы); - - КонецЕсли; - - КонецЕсли; +КонецФункции + +// Возвращает таблицу списка объектов заданного объекта метаданных +// (Только для внутреннего использования) +// +Функция ПолучитьОбъектыТаблицы_2_0_1_6(ПолноеИмяТаблицы) Экспорт - Возврат Неопределено; + Возврат ОбменДаннымиСервер.ПолучитьОбъектыТаблицы(ПолноеИмяТаблицы); КонецФункции @@ -135,13 +140,8 @@ // Функция СвойстваОбъектаМетаданных(ПолноеИмяТаблицы) Экспорт - Результат = Новый Структура("Синоним, Иерархический"); + Возврат ОбменДаннымиСервер.СвойстваОбъектаМетаданных(ПолноеИмяТаблицы); - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяТаблицы); - - ЗаполнитьЗначенияСвойств(Результат, ОбъектМетаданных); - - Возврат Результат; КонецФункции // Возвращает название предопределенного узла плана обмена @@ -152,3 +152,31 @@ Возврат ОбменДаннымиСервер.НаименованиеПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); КонецФункции + +Функция ПолучитьОбщиеДанныеУзлов(Знач ИмяПланаОбмена) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ЗначениеВСтрокуВнутр(ОбменДаннымиСервер.ДанныеДляТабличныхЧастейУзловЭтойИнформационнойБазы(ИмяПланаОбмена)); + +КонецФункции + +Функция ПолучитьОбщиеДанныеУзлов_2_0_1_6(Знач ИмяПланаОбмена) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(ОбменДаннымиСервер.ДанныеДляТабличныхЧастейУзловЭтойИнформационнойБазы(ИмяПланаОбмена)); + +КонецФункции + +Функция ПолучитьПараметрыИнформационнойБазы(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке) Экспорт + + Возврат ОбменДаннымиСервер.ПолучитьПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке); + +КонецФункции + +Функция ПолучитьПараметрыИнформационнойБазы_2_0_1_6(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке) Экспорт + + Возврат ОбменДаннымиСервер.ПолучитьПараметрыИнформационнойБазы_2_0_1_6(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке); + +КонецФункции diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl index 8b2815b52..cca850521 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl @@ -1,5 +1,26 @@ //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ВНЕШНИЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Подсистема "Обмен данными" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Процедура-обработчик закрытия формы настройки узлов плана обмена +// +// Параметры: +// Форма – управляемая форма, из которой вызвана процедура +// +Процедура ФормаНастройкиУзловКомандаЗакрытьФорму(Форма) Экспорт + + Если Не Форма.ПроверитьЗаполнение() Тогда + Возврат; + КонецЕсли; + + Форма.Модифицированность = Ложь; + Форма.Закрыть(ВыгрузитьКонтекстИзФормы(Форма)); + +КонецПроцедуры // Процедура-обработчик закрытия формы настройки узла плана обмена // @@ -50,17 +71,36 @@ // Параметры: // ИмяПланаОбмена – Строка – имя плана обмена, как объекта метаданных, для которого необходимо открыть помощник // -Процедура ОткрытьПомощникНастройкиОбменаДанными(ИмяПланаОбмена) Экспорт +Процедура ОткрытьПомощникНастройкиОбменаДанными(Знач ИмяПланаОбмена, НастройкаОбменаССервисом = Ложь) Экспорт + + Если Найти(ИмяПланаОбмена, "ПланОбменаИспользуетсяВМоделиСервиса") > 0 Тогда + + ИмяПланаОбмена = СтрЗаменить(ИмяПланаОбмена, "ПланОбменаИспользуетсяВМоделиСервиса", ""); + + НастройкаОбменаССервисом = Истина; + + КонецЕсли; ПараметрыФормы = Новый Структура("ИмяПланаОбмена", ИмяПланаОбмена); + Если НастройкаОбменаССервисом Тогда + + ПараметрыФормы.Вставить("НастройкаОбменаССервисом"); + + КонецЕсли; + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.Форма", ПараметрыФормы); КонецПроцедуры // Обработчик начала выбора элемента для формы задания настроек узла базы-корреспондента при настройке обмена через внешнее соединение // -Процедура ОбработчикВыбораЭлементовБазыКорреспондентаНачалоВыбора(ИмяРеквизита, ИмяТаблицы, Владелец, СтандартнаяОбработка, ПараметрыВнешнегоСоединения) Экспорт +Процедура ОбработчикВыбораЭлементовБазыКорреспондентаНачалоВыбора(ИмяРеквизита, + ИмяТаблицы, + Владелец, + СтандартнаяОбработка, + ПараметрыВнешнегоСоединения + ) Экспорт НачальноеЗначениеВыбора = ""; @@ -88,13 +128,17 @@ ПараметрыФормы.Вставить("НачальноеЗначениеВыбора", НачальноеЗначениеВыбора); ПараметрыФормы.Вставить("ИмяРеквизита", ИмяРеквизита); - ОткрытьФормуМодально("ОбщаяФорма.ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение", ПараметрыФормы, Владелец); + ОткрытьФормуМодально("ОбщаяФорма.ВыборОбъектовИнформационнойБазыКорреспондента", ПараметрыФормы, Владелец); КонецПроцедуры // Обработчик подбора элементов для формы задания настроек узла базы-корреспондента при настройке обмена через внешнее соединение // -Процедура ОбработчикВыбораЭлементовБазыКорреспондентаПодбор(ИмяРеквизита, ИмяТаблицы, Владелец, ПараметрыВнешнегоСоединения) Экспорт +Процедура ОбработчикВыбораЭлементовБазыКорреспондентаПодбор(ИмяРеквизита, + ИмяТаблицы, + Владелец, + ПараметрыВнешнегоСоединения + ) Экспорт НачальноеЗначениеВыбора = ""; @@ -115,7 +159,7 @@ ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь); ПараметрыФормы.Вставить("ИмяРеквизита", ИмяРеквизита); - ОткрытьФормуМодально("ОбщаяФорма.ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение", ПараметрыФормы, Владелец); + ОткрытьФормуМодально("ОбщаяФорма.ВыборОбъектовИнформационнойБазыКорреспондента", ПараметрыФормы, Владелец); КонецПроцедуры @@ -160,10 +204,28 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СВОЙСТВА +Функция ВТаблицеОтмеченыВсеЭлементы(Таблица) Экспорт + + Для Каждого Элемент Из Таблица Цикл + + Если Элемент.Использовать = Ложь Тогда + + Возврат Ложь; + + КонецЕсли; + + КонецЦикла; + + Возврат Истина; +КонецФункции -// Функция-свойство: возвращает максимально-допустимое количество полей, +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные функции-свойства + +// Возвращает максимально допустимое количество полей, // которые отображаются в помощнике сопоставления объектов ИБ. // // Тип: Число @@ -174,8 +236,76 @@ КонецФункции +// Возвращает структуру статусов выполнения загрузки данных +// +Функция СтраницыСтатусаЗагрузкиДанных() Экспорт + + Структура = Новый Структура; + Структура.Вставить("Неопределено", "СтатусЗагрузкиНеопределено"); + Структура.Вставить("Ошибка", "СтатусЗагрузкиОшибка"); + Структура.Вставить("Успех", "СтатусЗагрузкиУспех"); + Структура.Вставить("Выполнение", "СтатусЗагрузкиВыполнение"); + + Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", "СтатусЗагрузкиПредупреждение"); + Структура.Вставить("ВыполненоСПредупреждениями", "СтатусЗагрузкиПредупреждение"); + Структура.Вставить("Ошибка_ТранспортСообщения", "СтатусЗагрузкиОшибка"); + + Возврат Структура; +КонецФункции + +// Возвращает структуру статусов выполнения выгрузки данных +// +Функция СтраницыСтатусаВыгрузкиДанных() Экспорт + + Структура = Новый Структура; + Структура.Вставить("Неопределено", "СтатусВыгрузкиНеопределено"); + Структура.Вставить("Ошибка", "СтатусВыгрузкиОшибка"); + Структура.Вставить("Успех", "СтатусВыгрузкиУспех"); + Структура.Вставить("Выполнение", "СтатусВыгрузкиВыполнение"); + + Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", "СтатусВыгрузкиПредупреждение"); + Структура.Вставить("ВыполненоСПредупреждениями", "СтатусВыгрузкиПредупреждение"); + Структура.Вставить("Ошибка_ТранспортСообщения", "СтатусВыгрузкиОшибка"); + + Возврат Структура; +КонецФункции + +// Возвращает структуру с наименованием гиперссылки поля загрузки данных +// +Функция ЗаголовкиГиперссылокЗагрузкиДанных() Экспорт + + Структура = Новый Структура; + Структура.Вставить("Неопределено", НСтр("ru = 'Загрузка данных не выполнялась'")); + Структура.Вставить("Ошибка", НСтр("ru = 'Загрузка данных выполнена с ошибками'")); + Структура.Вставить("ВыполненоСПредупреждениями", НСтр("ru = 'Загрузка данных выполнена с предупреждениями'")); + Структура.Вставить("Успех", НСтр("ru = 'Загрузка данных выполнена успешно'")); + Структура.Вставить("Выполнение", НСтр("ru = 'Загрузка данных выполняется...'")); + + Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", НСтр("ru = 'Сообщение обмена было ранее принято'")); + Структура.Вставить("Ошибка_ТранспортСообщения", НСтр("ru = 'Ошибка транспорта сообщения обмена при загрузке данных'")); + + Возврат Структура; +КонецФункции + +// Возвращает структуру с наименованием гиперссылки поля выгрузки данных +// +Функция ЗаголовкиГиперссылокВыгрузкиДанных() Экспорт + + Структура = Новый Структура; + Структура.Вставить("Неопределено", НСтр("ru = 'Выгрузка данных не выполнялась'")); + Структура.Вставить("Ошибка", НСтр("ru = 'Выгрузка данных выполнена с ошибками'")); + Структура.Вставить("Успех", НСтр("ru = 'Выгрузка данных выполнена успешно'")); + Структура.Вставить("Выполнение", НСтр("ru = 'Выгрузка данных выполняется...'")); + + Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", НСтр("ru = 'Выгрузка данных выполнена с предупреждениями'")); + Структура.Вставить("ВыполненоСПредупреждениями", НСтр("ru = 'Выгрузка данных выполнена с предупреждениями'")); + Структура.Вставить("Ошибка_ТранспортСообщения", НСтр("ru = 'Ошибка транспорта сообщения обмена при выгрузке данных'")); + + Возврат Структура; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ВНУТРЕННИЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Экспортные служебные процедуры и функции // Открывает файл в ассоциированном приложении операционной системы // Каталоги открываются в приложении explorer @@ -371,6 +501,14 @@ // Процедура ВыполнитьОбменДаннымиОбработкаКоманды(УзелИнформационнойБазы, Владелец) Экспорт + ТекстВопроса = НСтр("ru = 'Выполнить обмен данными с ""[УзелИнформационнойБазы]""?'"); + ТекстВопроса = СтрЗаменить(ТекстВопроса, "[УзелИнформационнойБазы]", Строка(УзелИнформационнойБазы)); + + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); + Если Ответ = КодВозвратаДиалога.Нет Тогда + Возврат; + КонецЕсли; + ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); @@ -503,43 +641,6 @@ Возврат Ложь; КонецФункции -Процедура ПриЗакрытииФормыНастройкиУзлаПланаОбмена(Форма, ИмяРеквизитаФормы) - - Если Не Форма.ПроверитьЗаполнение() Тогда - Возврат; - КонецЕсли; - - Для Каждого НастройкаОтбора ИЗ Форма[ИмяРеквизитаФормы] Цикл - - Если ТипЗнч(Форма[НастройкаОтбора.Ключ]) = Тип("ДанныеФормыКоллекция") Тогда - - СтруктураТабличнойЧасти = Форма[ИмяРеквизитаФормы][НастройкаОтбора.Ключ]; - - Для Каждого Элемент ИЗ СтруктураТабличнойЧасти Цикл - - СтруктураТабличнойЧасти[Элемент.Ключ].Очистить(); - - Для Каждого СтрокаКоллекции ИЗ Форма[НастройкаОтбора.Ключ] Цикл - - СтруктураТабличнойЧасти[Элемент.Ключ].Добавить(СтрокаКоллекции[Элемент.Ключ]); - - КонецЦикла; - - КонецЦикла; - - Иначе - - Форма[ИмяРеквизитаФормы][НастройкаОтбора.Ключ] = Форма[НастройкаОтбора.Ключ]; - - КонецЕсли; - - КонецЦикла; - - Форма.Модифицированность = Ложь; - Форма.Закрыть(Форма[ИмяРеквизитаФормы]); - -КонецПроцедуры - // Выполняет запуск приложения 1С:Предприятие, при котором выполняется // сеанс работы с помощником интерактивной загрузки данных. // После завершения работы с помощником работа приложения завершается. @@ -591,72 +692,105 @@ КонецПроцедуры +// Оповещает все открытые динамические списки о необходимости обновить отображаемые данные. // +Процедура ОбновитьВсеОткрытыеДинамическиеСписки() Экспорт + + Типы = ОбменДаннымиСервер.ВсеСсылочныеТипыКонфигурации(); + + Для Каждого Тип Из Типы Цикл + + ОповеститьОбИзменении(Тип); + + КонецЦикла; + +КонецПроцедуры -// Возвращает структуру статусов выполнения загрузки данных -// -Функция СтраницыСтатусаЗагрузкиДанных() Экспорт +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции + +Функция ВыгрузитьКонтекстИзФормы(Форма) - Структура = Новый Структура; - Структура.Вставить("Неопределено", "СтатусЗагрузкиНеопределено"); - Структура.Вставить("Ошибка", "СтатусЗагрузкиОшибка"); - Структура.Вставить("Успех", "СтатусЗагрузкиУспех"); - Структура.Вставить("Выполнение", "СтатусЗагрузкиВыполнение"); + // возвращаемое значение функции + Контекст = Новый Структура; - Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", "СтатусЗагрузкиПредупреждение"); - Структура.Вставить("ВыполненоСПредупреждениями", "СтатусЗагрузкиПредупреждение"); - Структура.Вставить("Ошибка_ТранспортСообщения", "СтатусЗагрузкиОшибка"); + Реквизиты = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Форма.Реквизиты); - Возврат Структура; + Для Каждого Реквизит Из Реквизиты Цикл + + Если Найти(Реквизит, ".") > 0 Тогда + + Колонки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Реквизит, "."); + + Если Колонки.Количество() > 0 Тогда + + ИмяТаблицы = Колонки[0]; + + Колонки.Удалить(0); + + КолонкиСтрокой = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(Колонки); + + Таблица = Новый Массив; + + Для Каждого Элемент Из Форма[ИмяТаблицы] Цикл + + СтрокаТаблицы = Новый Структура(КолонкиСтрокой); + + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Элемент); + + Таблица.Добавить(СтрокаТаблицы); + + КонецЦикла; + + Контекст.Вставить(ИмяТаблицы, Таблица) + + КонецЕсли; + + Иначе + + Контекст.Вставить(Реквизит, Форма[Реквизит]) + + КонецЕсли; + + КонецЦикла; + + Возврат Контекст; КонецФункции -// Возвращает структуру статусов выполнения выгрузки данных -// -Функция СтраницыСтатусаВыгрузкиДанных() Экспорт +Процедура ПриЗакрытииФормыНастройкиУзлаПланаОбмена(Форма, ИмяРеквизитаФормы) - Структура = Новый Структура; - Структура.Вставить("Неопределено", "СтатусВыгрузкиНеопределено"); - Структура.Вставить("Ошибка", "СтатусВыгрузкиОшибка"); - Структура.Вставить("Успех", "СтатусВыгрузкиУспех"); - Структура.Вставить("Выполнение", "СтатусВыгрузкиВыполнение"); + Если Не Форма.ПроверитьЗаполнение() Тогда + Возврат; + КонецЕсли; - Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", "СтатусВыгрузкиПредупреждение"); - Структура.Вставить("ВыполненоСПредупреждениями", "СтатусВыгрузкиПредупреждение"); - Структура.Вставить("Ошибка_ТранспортСообщения", "СтатусВыгрузкиОшибка"); + Для Каждого НастройкаОтбора ИЗ Форма[ИмяРеквизитаФормы] Цикл + + Если ТипЗнч(Форма[НастройкаОтбора.Ключ]) = Тип("ДанныеФормыКоллекция") Тогда + + СтруктураТабличнойЧасти = Форма[ИмяРеквизитаФормы][НастройкаОтбора.Ключ]; + + Для Каждого Элемент ИЗ СтруктураТабличнойЧасти Цикл + + СтруктураТабличнойЧасти[Элемент.Ключ].Очистить(); + + Для Каждого СтрокаКоллекции ИЗ Форма[НастройкаОтбора.Ключ] Цикл + + СтруктураТабличнойЧасти[Элемент.Ключ].Добавить(СтрокаКоллекции[Элемент.Ключ]); + + КонецЦикла; + + КонецЦикла; + + Иначе + + Форма[ИмяРеквизитаФормы][НастройкаОтбора.Ключ] = Форма[НастройкаОтбора.Ключ]; + + КонецЕсли; + + КонецЦикла; - Возврат Структура; -КонецФункции + Форма.Модифицированность = Ложь; + Форма.Закрыть(Форма[ИмяРеквизитаФормы]); + +КонецПроцедуры -// Возвращает структуру с наименованием гиперссылки поля загрузки данных -// -Функция ЗаголовкиГиперссылокЗагрузкиДанных() Экспорт - - Структура = Новый Структура; - Структура.Вставить("Неопределено", НСтр("ru = 'Загрузка данных не выполнялась'")); - Структура.Вставить("Ошибка", НСтр("ru = 'Загрузка данных выполнена с ошибками'")); - Структура.Вставить("ВыполненоСПредупреждениями", НСтр("ru = 'Загрузка данных выполнена с предупреждениями'")); - Структура.Вставить("Успех", НСтр("ru = 'Загрузка данных выполнена успешно'")); - Структура.Вставить("Выполнение", НСтр("ru = 'Загрузка данных выполняется...'")); - - Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", НСтр("ru = 'Сообщение обмена было ранее принято'")); - Структура.Вставить("Ошибка_ТранспортСообщения", НСтр("ru = 'Ошибка транспорта сообщения обмена при загрузке данных'")); - - Возврат Структура; -КонецФункции - -// Возвращает структуру с наименованием гиперссылки поля выгрузки данных -// -Функция ЗаголовкиГиперссылокВыгрузкиДанных() Экспорт - - Структура = Новый Структура; - Структура.Вставить("Неопределено", НСтр("ru = 'Выгрузка данных не выполнялась'")); - Структура.Вставить("Ошибка", НСтр("ru = 'Выгрузка данных выполнена с ошибками'")); - Структура.Вставить("Успех", НСтр("ru = 'Выгрузка данных выполнена успешно'")); - Структура.Вставить("Выполнение", НСтр("ru = 'Выгрузка данных выполняется...'")); - - Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", НСтр("ru = 'Выгрузка данных выполнена с предупреждениями'")); - Структура.Вставить("ВыполненоСПредупреждениями", НСтр("ru = 'Выгрузка данных выполнена с предупреждениями'")); - Структура.Вставить("Ошибка_ТранспортСообщения", НСтр("ru = 'Ошибка транспорта сообщения обмена при выгрузке данных'")); - - Возврат Структура; -КонецФункции diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиентПереопределяемый/Module.bsl new file mode 100644 index 000000000..4e6e0a44a --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиКлиентПереопределяемый/Module.bsl @@ -0,0 +1,32 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обмен данными" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Обработчик вызывается при завершении работы помощника создания обмена данными по нажатию в помощнике на кнопку "Готово". +// +// Параметры: +// <Помощник> +// Тип: Управляемая форма, Обычная форма. +// Форма помощника создания обмена данными, которая является инициатором события. +// +// <ЗапуститьМенеджерЗаданий> +// Тип: Булево. +// Признак, показывающий, что необходимо выполнить запуск менеджера заданий (отдельного сеанса 1С:Предприятия) +// для отработки регламентных и фоновых заданий при файловом режиме работы информационной базы. +// Параметр имеет значение Истина, когда в помощнике создания обмена пользователь указал расписание +// и режим работы информационной базы файловый. +// Если режим работы информационной базы клиент-серверный, то значение параметра всегда Ложь. +// +Процедура ПриЗавершенииРаботыПомощникаСозданияОбмена(Помощник, ЗапуститьМенеджерЗаданий) Экспорт + + // СтандартныеПодсистемы.РегламентныеЗадания + Если ЗапуститьМенеджерЗаданий Тогда + ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданийЧерезОбработчикОжидания(); + КонецЕсли; + // Конец СтандартныеПодсистемы.РегламентныеЗадания + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиентПереопределяемый/ОбменДаннымиКлиентПереопределяемый.mdo b/SSL/src/CommonModules/ОбменДаннымиКлиентПереопределяемый/ОбменДаннымиКлиентПереопределяемый.mdo new file mode 100644 index 000000000..901758d59 --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиКлиентПереопределяемый/ОбменДаннымиКлиентПереопределяемый.mdo @@ -0,0 +1,10 @@ + + + ОбменДаннымиКлиентПереопределяемый + + ru + Обмен данными клиент переопределяемый + + true + true + diff --git a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl index c3bf9cae3..dc65cea96 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl @@ -1,3 +1,10 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обмен данными" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Определяет список планов обмена, которые используют функционал подсистемы обмена данными. // @@ -28,7 +35,7 @@ // Функция ПрефиксИнформационнойБазыПоУмолчанию() Экспорт - Возврат "ДМ"; + Возврат НСтр("ru = 'ДМ'"); КонецФункции @@ -36,9 +43,9 @@ // Процедура ПередЗаписьюОбъекта(Объект, Отказ) Экспорт - // ДатыЗапретаИзменения + // СтандартныеПодсистемы.ДатыЗапретаИзменения ДатыЗапретаИзменения.ВыполнитьПроверкуДатыЗапретаИзменения(Объект, Отказ); - // Конец ДатыЗапретаИзменения + // Конец СтандартныеПодсистемы.ДатыЗапретаИзменения КонецПроцедуры @@ -93,6 +100,17 @@ КоличествоОтправленныхОбъектов ) Экспорт + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + ОбменСообщениямиВнутренний.ПередОтправкойДанных(СтандартнаяОбработка, + Получатель, + ИмяФайлаСообщения, + ДанныеСообщения, + КоличествоЭлементовВТранзакции, + ИмяСобытияЖурналаРегистрации, + КоличествоОтправленныхОбъектов + ); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + КонецПроцедуры // Обработчик перед получением данных. @@ -145,6 +163,17 @@ КоличествоПолученныхОбъектов ) Экспорт + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + ОбменСообщениямиВнутренний.ПередПолучениемДанных(СтандартнаяОбработка, + Отправитель, + ИмяФайлаСообщения, + ДанныеСообщения, + КоличествоЭлементовВТранзакции, + ИмяСобытияЖурналаРегистрации, + КоличествоПолученныхОбъектов + ); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + КонецПроцедуры // Обработчик механизма регистрации объектов "После определения получателей". @@ -162,6 +191,9 @@ // Процедура ПослеОпределенияПолучателей(Данные, Получатели, Знач ИмяПланаОбмена) Экспорт + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + ОбменДаннымиВМоделиСервиса.ПослеОпределенияПолучателей(Данные, Получатели, ИмяПланаОбмена); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса КонецПроцедуры @@ -188,7 +220,7 @@ // Отказ от стандартной обработки не отменяет действие. // Значение по умолчанию: Истина. // -Процедура РегистрацияИзмененийНачальнойВыгрузкиДанных(Знач Получатель, СтандартнаяОбработка) Экспорт +Процедура РегистрацияИзмененийНачальнойВыгрузкиДанных(Знач Получатель, СтандартнаяОбработка, Отбор) Экспорт diff --git a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl index bb6153605..63cf2c25c 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl @@ -1,5 +1,133 @@ //////////////////////////////////////////////////////////////////////////////// -// ФУНКЦИИ МЕХАНИЗМА РЕГИСТРАЦИИ ОБЪЕКТОВ НА УЗЛАХ ПЛАНОВ ОБМЕНА (МРО) +// Подсистема "Обмен данными" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//////////////////////////////////////////////////////////////////////////////// +// Механизм регистрации объектов на узлах планов обмена (МРО) + +// Получает имя этой информационной базы из константы или из синонима конфигурации +// (Только для внутреннего использования) +// +Функция ИмяЭтойИнформационнойБазы() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Результат = Константы.ЗаголовокСистемы.Получить(); + + Если ПустаяСтрока(Результат) Тогда + + Результат = Метаданные.Синоним; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Получает код предопределенного узла плана обмена +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе +// +// Возвращаемое значение: +// Строка - код предопределенного узла плана обмена +// +Функция ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена) Экспорт + + Возврат ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена), "Код"); + +КонецФункции + +// Получает массив имен планов обмена конфигурации, которые используют функционал БСП. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// Массив – массив элементов имен планов обмена +// +Функция ПланыОбменаБСП() Экспорт + + Возврат СписокПлановОбменаБСП().ВыгрузитьЗначения(); + +КонецФункции + +// Устанавливает внешнее соединение с информационной базой и возвращает указатель на это соединение +// (Только для внутреннего использования) +// +Функция УстановитьВнешнееСоединение(ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке = "") Экспорт + + Возврат ОбщегоНазначения.УстановитьВнешнееСоединение(ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке); + +КонецФункции + +// Получает объект WSПрокси по настройкам подключения +// (Только для внутреннего использования) +// +Функция ПолучитьWSПрокси(НастройкиПодключения, СтрокаСообщенияОбОшибке = "") Экспорт + + Возврат ОбменДаннымиСервер.ПолучитьWSПрокси(НастройкиПодключения, СтрокаСообщенияОбОшибке); + +КонецФункции + +// Возвращает признак предопределенного узла этой информационной базы по переданному значению ссылки +// +// Параметры: +// УзелПланаОбмена - ПланОбменаСсылка - любой узел плана обмена +// +// Возвращаемое значение: +// Булево - признак предопределенного узла этой информационной базы +// +Функция ЭтоПредопределенныйУзелПланаОбмена(УзелПланаОбмена) Экспорт + + Если Не ЗначениеЗаполнено(УзелПланаОбмена) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ПолучитьЭтотУзелПланаОбменаПоСсылке(УзелПланаОбмена) = УзелПланаОбмена; + +КонецФункции + +// + +Функция НайтиУзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | ПланОбмена.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена + |ГДЕ + | ПланОбмена.Код = &Код"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Код", КодУзла); + Запрос.Текст = ТекстЗапроса; + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + + Возврат Неопределено; + + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.Ссылка; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Механизм регистрации объектов на узлах планов обмена (МРО) // Получает таблицу правил регистрации объектов для плана обмена. // @@ -179,38 +307,6 @@ КонецФункции -// Получает код предопределенного узла плана обмена -// -// Параметры: -// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе -// -// Возвращаемое значение: -// Строка - код предопределенного узла плана обмена -// -Функция ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена) Экспорт - - Возврат ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена), "Код"); - -КонецФункции - -// Возвращает признак предопределенного узла этой информационной базы по переданному значению ссылки -// -// Параметры: -// УзелПланаОбмена - ПланОбменаСсылка - любой узел плана обмена -// -// Возвращаемое значение: -// Булево - признак предопределенного узла этой информационной базы -// -Функция ЭтоПредопределенныйУзелПланаОбмена(УзелПланаОбмена) Экспорт - - Если Не ЗначениеЗаполнено(УзелПланаОбмена) Тогда - Возврат Ложь; - КонецЕсли; - - Возврат ПолучитьЭтотУзелПланаОбменаПоСсылке(УзелПланаОбмена) = УзелПланаОбмена; - -КонецФункции - // Возвращает признак принадлежности узла к плану обмена РИБ // // Параметры: @@ -269,6 +365,20 @@ КонецФункции +// Возвращает признак принадлежности узла к разделенному плану обмена, который использует функционал обмена БСП +// +// Параметры: +// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого требуется получить значение функции +// +// Возвращаемое значение: +// Тип: Булево. Истина – узел принадлежит разделенному плану обмена, использующего функционал БСП; Ложь – нет. +// +Функция ЭтоУзелРазделенногоОбменаДаннымиБСП(УзелИнформационнойБазы) Экспорт + + Возврат РазделенныеПланыОбменаБСП().Найти(ПолучитьИмяПланаОбмена(УзелИнформационнойБазы)) <> Неопределено; + +КонецФункции + // Возвращает признак принадлежности плана обмена к плану обмена РИБ // // Параметры: @@ -381,18 +491,171 @@ Возврат СписокПлановОбмена; КонецФункции -// Получает массив имен планов обмена конфигурации, которые используют функционал БСП. +// Получает массив имен разделенных планов обмена конфигурации, которые используют функционал БСП. // // Параметры: // Нет. // // Возвращаемое значение: -// Массив – массив элементов имен планов обмена +// Массив – массив элементов имен разделенных планов обмена // -Функция ПланыОбменаБСП() Экспорт +Функция РазделенныеПланыОбменаБСП() Экспорт - Возврат СписокПлановОбменаБСП().ВыгрузитьЗначения(); + Результат = Новый Массив; + МассивПлановОбменаБСП = ПланыОбменаБСП(); + + Для Каждого ИмяПланаОбмена Из МассивПлановОбменаБСП Цикл + + Если ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных("ПланОбмена." + ИмяПланаОбмена) Тогда + + Результат.Добавить(ИмяПланаОбмена); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ОбщиеДанныеУзлов(Знач УзелИнформационнойБазы) Экспорт + + Если ТипЗнч(УзелИнформационнойБазы) <> Тип("Строка") Тогда + + ИмяПланаОбмена = ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); + + Иначе + + ИмяПланаОбмена = УзелИнформационнойБазы; + + КонецЕсли; + + Результат = ""; + + Попытка + Результат = ПланыОбмена[ИмяПланаОбмена].ОбщиеДанныеУзлов(); + Результат = СтрЗаменить(Результат, " ", ""); + Исключение + КонецПопытки; + + Возврат Результат; +КонецФункции + +Функция ТабличныеЧастиПланаОбмена(Знач ИмяПланаОбмена) Экспорт + + ТаблицыОбщие = Новый Массив; + ТаблицыЭтойБазы = Новый Массив; + ТаблицыКорреспондента = Новый Массив; + ВсеТаблицыЭтойБазы = Новый Массив; + ВсеТаблицыКорреспондента = Новый Массив; + + ОбщиеДанныеУзлов = ""; + + Попытка + ОбщиеДанныеУзлов = ПланыОбмена[ИмяПланаОбмена].ОбщиеДанныеУзлов(); + ОбщиеДанныеУзлов = СтрЗаменить(ОбщиеДанныеУзлов, " ", ""); + Исключение + ОбщиеДанныеУзлов = ""; + КонецПопытки; + + ТабличныеЧасти = ТабличныеЧастиОбъекта(Метаданные.ПланыОбмена[ИмяПланаОбмена]); + + Если Не ПустаяСтрока(ОбщиеДанныеУзлов) Тогда + + Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл + + Если Найти(ОбщиеДанныеУзлов, ТабличнаяЧасть) <> 0 Тогда + + ТаблицыОбщие.Добавить(ТабличнаяЧасть); + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + НастройкиЭтойБазы = ПланыОбмена[ИмяПланаОбмена].НастройкаОтборовНаУзле(); + + НастройкиЭтойБазы = ОбменДаннымиСобытия.КлючиСтруктурыВСтроку(НастройкиЭтойБазы); + + Если ПустаяСтрока(ОбщиеДанныеУзлов) Тогда + + Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл + + Если Найти(НастройкиЭтойБазы, ТабличнаяЧасть) <> 0 Тогда + + ТаблицыЭтойБазы.Добавить(ТабличнаяЧасть); + + ВсеТаблицыЭтойБазы.Добавить(ТабличнаяЧасть); + + КонецЕсли; + + КонецЦикла; + + Иначе + + Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл + + Если Найти(НастройкиЭтойБазы, ТабличнаяЧасть) <> 0 Тогда + + ВсеТаблицыЭтойБазы.Добавить(ТабличнаяЧасть); + + Если Найти(ОбщиеДанныеУзлов, ТабличнаяЧасть) = 0 Тогда + + ТаблицыЭтойБазы.Добавить(ТабличнаяЧасть); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + НастройкиКорреспондента = ПланыОбмена[ИмяПланаОбмена].НастройкаОтборовНаУзлеБазыКорреспондента(); + + Если ПустаяСтрока(ОбщиеДанныеУзлов) Тогда + + Для Каждого НастройкаКорреспондента Из НастройкиКорреспондента Цикл + + Если ТипЗнч(НастройкаКорреспондента.Значение) = Тип("Структура") Тогда + + ТаблицыКорреспондента.Добавить(ТабличнаяЧасть); + + ВсеТаблицыКорреспондента.Добавить(ТабличнаяЧасть); + + КонецЕсли; + + КонецЦикла; + + Иначе + + Для Каждого НастройкаКорреспондента Из НастройкиКорреспондента Цикл + + Если ТипЗнч(НастройкаКорреспондента.Значение) = Тип("Структура") Тогда + + ВсеТаблицыКорреспондента.Добавить(ТабличнаяЧасть); + + Если Найти(ОбщиеДанныеУзлов, НастройкаКорреспондента.Ключ) = 0 Тогда + + ТаблицыКорреспондента.Добавить(ТабличнаяЧасть); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("ТаблицыОбщие", ТаблицыОбщие); + Результат.Вставить("ТаблицыЭтойБазы", ТаблицыЭтойБазы); + Результат.Вставить("ТаблицыКорреспондента", ТаблицыКорреспондента); + Результат.Вставить("ВсеТаблицыЭтойБазы", ВсеТаблицыЭтойБазы); + Результат.Вставить("ВсеТаблицыКорреспондента", ВсеТаблицыКорреспондента); + + Возврат Результат; КонецФункции // Получает менеджер плана обмена по имени плана обмена @@ -515,10 +778,11 @@ Результат = ПланыОбмена[ПолучитьИмяПланаОбмена(УзелИнформационнойБазы)].ИспользуемыеТранспортыСообщенийОбмена(); - // Для базовых версий конфигураций обмен через COM-соединение не поддерживаем + // Для базовых версий конфигураций обмен через COM-соединение и Веб-сервис не поддерживаем Если СтандартныеПодсистемыПереопределяемый.ЭтоБазоваяВерсияКонфигурации() Тогда ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Перечисления.ВидыТранспортаСообщенийОбмена.COM); + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Перечисления.ВидыТранспортаСообщенийОбмена.WS); КонецЕсли; @@ -559,6 +823,15 @@ КонецФункции +// Получает объект WSПрокси по настройкам подключения для версии 2.0.1.6 +// (Только для внутреннего использования) +// +Функция ПолучитьWSПрокси_2_0_1_6(НастройкиПодключения, СтрокаСообщенияОбОшибке = "") Экспорт + + Возврат ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(НастройкиПодключения, СтрокаСообщенияОбОшибке); + +КонецФункции + // Получает объект WSПрокси по настройкам подключения, заданным для узла плана обмена // (Только для внутреннего использования) // @@ -566,37 +839,16 @@ СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(УзелИнформационнойБазы); - Возврат ОбменДаннымиСервер.ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке); + Возврат ОбменДаннымиСервер.ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке); КонецФункции -// Устанавливает внешнее соединение с информационной базой и возвращает указатель на это соединение -// (Только для внутреннего использования) -// -Функция УстановитьВнешнееСоединение(ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке = "") Экспорт +Функция ОбменВыполняетсяВОднойЛокальнойСети(Знач УзелИнформационнойБазы) Экспорт - Возврат ОбщегоНазначения.УстановитьВнешнееСоединение(ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке); + Возврат ОбменДаннымиСервер.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы); КонецФункции -// Получает имя этой информационной базы из константы или из синонима конфигурации -// (Только для внутреннего использования) -// -Функция ИмяЭтойИнформационнойБазы() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Результат = Константы.ЗаголовокСистемы.Получить(); - - Если ПустаяСтрока(Результат) Тогда - - Результат = Метаданные.Синоним; - - КонецЕсли; - - Возврат Результат; -КонецФункции - // Только для внутреннего использования // Функция ПолучитьЭлементыИерархическогоСправочникаИерархияГруппИЭлементов(ПолноеИмяТаблицы) Экспорт @@ -627,12 +879,10 @@ Таблица = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Таблица.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); - ЗаполнитьЗначенияПолейДереваОбъектов(Таблица.Строки); - Таблица.Колонки.Удалить("Ссылка"); Таблица.Колонки.Удалить("ЭтоГруппа"); - Возврат ЗначениеВСтрокуВнутр(Таблица); + Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(Таблица); КонецФункции // Только для внутреннего использования @@ -667,7 +917,7 @@ Таблица.Колонки.Удалить("Ссылка"); Таблица.Колонки.Удалить("ЭтоГруппа"); - Возврат ЗначениеВСтрокуВнутр(Таблица); + Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(Таблица); КонецФункции // Только для внутреннего использования @@ -702,7 +952,7 @@ Таблица.Колонки.Удалить("Ссылка"); Таблица.Колонки.Удалить("ЭтоГруппа"); - Возврат ЗначениеВСтрокуВнутр(Таблица); + Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(Таблица); КонецФункции // Только для внутреннего использования @@ -764,8 +1014,51 @@ Возврат Ложь; КонецФункции +// Возвращает массив номеров версий, поддерживаемых интерфейсом корреспондента для подсистемы ОбменДанными. +// +// Параметры: +// Корреспондент – Структура, ПланОбменаСсылка. Узел плана обмена, который соответствует информационной базе-корреспонденту. +// +// Возвращаемое значение: +// Массив номеров версий, поддерживаемых интерфейсом корреспондента. +// +Функция ВерсииКорреспондента(Знач Корреспондент) Экспорт + + Если ТипЗнч(Корреспондент) = Тип("Структура") Тогда + СтруктураНастроек = Корреспондент; + Иначе + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(Корреспондент); + КонецЕсли; + + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("URL", СтруктураНастроек.WSURLВебСервиса); + ПараметрыПодключения.Вставить("UserName", СтруктураНастроек.WSИмяПользователя); + ПараметрыПодключения.Вставить("Password", СтруктураНастроек.WSПароль); + + Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "ОбменДанными"); +КонецФункции + +// Возвращает массив всех ссылочных типов, определенных в конфигурации +// +Функция ВсеСсылочныеТипыКонфигурации() Экспорт + + Результат = Новый Массив; + + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, Справочники.ТипВсеСсылки().Типы()); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, Документы.ТипВсеСсылки().Типы()); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, БизнесПроцессы.ТипВсеСсылки().Типы()); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, ПланыВидовХарактеристик.ТипВсеСсылки().Типы()); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, ПланыСчетов.ТипВсеСсылки().Типы()); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, ПланыВидовРасчета.ТипВсеСсылки().Типы()); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, Задачи.ТипВсеСсылки().Типы()); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, ПланыОбмена.ТипВсеСсылки().Типы()); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, Перечисления.ТипВсеСсылки().Типы()); + + Возврат Результат; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ИНИЦИАЛИЗАЦИИ СТРУКТУРЫ НАСТРОЕК ОБМЕНА ДАННЫМИ +// Инициализация структуры настроек обмена данными // Выполняет инициализацию подсистемы обмена данными для выполнения процесса обмена // @@ -774,9 +1067,17 @@ // Возвращаемое значение: // СтруктураНастроекОбмена - Структура - структура со всеми необходимыми данными и объектами для выполнения обмена // -Функция ПолучитьСтруктуруНастроекОбменаДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ДействиеПриОбмене, ВидТранспортаСообщенийОбмена, ИспользоватьНастройкиТранспорта = Истина) Экспорт +Функция ПолучитьСтруктуруНастроекОбменаДляУзлаИнформационнойБазы(УзелИнформационнойБазы, + ДействиеПриОбмене, + ВидТранспортаСообщенийОбмена, + ИспользоватьНастройкиТранспорта = Истина) Экспорт - Возврат ОбменДаннымиСервер.ПолучитьСтруктуруНастроекОбменаДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ДействиеПриОбмене, ВидТранспортаСообщенийОбмена, ИспользоватьНастройкиТранспорта); + Возврат ОбменДаннымиСервер.ПолучитьСтруктуруНастроекОбменаДляУзлаИнформационнойБазы( + УзелИнформационнойБазы, + ДействиеПриОбмене, + ВидТранспортаСообщенийОбмена, + ИспользоватьНастройкиТранспорта + ); КонецФункции @@ -801,8 +1102,6 @@ КонецФункции -// - // Получает список макетов типовых правил для обмена данными из конфигурации для заданного плана обмена; // список заполняется именами и синонимами макетов правил // @@ -842,3 +1141,59 @@ Возврат СписокПравил; КонецФункции + +Функция КаталогВременногоХранилищаФайлов() Экспорт + + // возвращаемое значение функции + Результат = ""; + + СистемнаяИнформация = Новый СистемнаяИнформация; + + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 + ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + + Результат = Константы.КаталогВременныхФайловСообщенийОбменаДляWindows.Получить(); + + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 + ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда + + Результат = Константы.КаталогВременныхФайловСообщенийОбменаДляLinux.Получить(); + + Иначе + + Результат = Константы.КаталогВременныхФайловСообщенийОбменаДляWindows.Получить(); + + КонецЕсли; + + Если ПустаяСтрока(Результат) Тогда + Результат = СокрЛП(КаталогВременныхФайлов()); + Иначе + Результат = СокрЛП(Результат); + + // Проверка существования каталога + Каталог = Новый Файл(Результат); + + Если Не Каталог.Существует() Тогда + + СтрокаСообщения = НСтр("ru = 'Каталог временных файлов сообщений обмена не существует: ""%1""'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Результат); + ВызватьИсключение СтрокаСообщения; + КонецЕсли; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ТабличныеЧастиОбъекта(ОбъектМетаданных) Экспорт + + Результат = Новый Массив; + + Для Каждого ТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл + + Результат.Добавить(ТабличнаяЧасть.Имя); + + КонецЦикла; + + Возврат Результат; +КонецФункции diff --git a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl index f1f532a3a..b5b02af81 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl @@ -1,5 +1,34 @@ //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ВНЕШНИЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Подсистема "Обмен данными" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Процедура-обработчик события "ПриСозданииНаСервере" для формы настройки узлов плана обмена +// +// Параметры: +// Форма – управляемая форма, из которой вызвана процедура +// +Процедура ФормаНастройкиУзловПриСозданииНаСервере(Форма, Отказ) Экспорт + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Форма.Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ЗагрузитьКонтекстВФорму(Форма, Форма.Параметры.Настройки); + + Если Форма.Параметры.Свойство("ПроверкаЗаполнения") Тогда + Возврат; + ИначеЕсли Форма.Параметры.Свойство("ПолучениеОписанияКонтекста") Тогда + Возврат; + КонецЕсли; + + ВыполнитьСравнениеИОбъединениеТаблицФормы(Форма, Отказ); + +КонецПроцедуры // Процедура-обработчик события "ПриСозданииНаСервере" для формы настройки узла // @@ -179,7 +208,214 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ВЫПОЛНЕНИЯ ОБМЕНА ДАННЫМИ +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Приоритет = 1; + Обработчик.ОбщиеДанные = Истина; + Обработчик.Процедура = "ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.1.2"; + Обработчик.Процедура = "ОбменДаннымиСервер.УстановитьНеобходимостьВыполненияКорректировкиИнформацииСопоставленияДляВсехУзловИнформационнойБазы"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.1.2"; + Обработчик.Процедура = "ОбменДаннымиСервер.УстановитьРежимВыгрузкиОбъектовДляВсехУзловИнформационнойБазы"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.1.2"; + Обработчик.Процедура = "ОбменДаннымиСервер.ОбновитьРегламентныеЗаданияСценариевОбменовДанными"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.2.0"; + Обработчик.Процедура = "ОбменДаннымиСервер.ОбновитьКонстантуНастройкаПодчиненногоУзлаРИБЗавершена"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.0.1.10"; + Обработчик.Процедура = "ОбменДаннымиСервер.ПроверитьУстановкуФункциональныхОпцийПриОбновленииИБ"; + +КонецПроцедуры + +// Выполняет обновление правил конвертации/регистрации объектов. +// Обновление выполняется для всех планов обмена, использующих функционал БСП. +// Обновление правил выполняется только для типовых правил. +// Если для плана обмена правила были загружены из файла, то такие правила не обновляются. +// +Процедура ВыполнитьОбновлениеПравилДляОбменаДанными() Экспорт + + // В подчиненном узле РИБ обновление регистра с правилами обмена не выполняем, + // т.к. обновленный регистр мигрирует из главного узла. + Если ЭтоПодчиненныйУзелРИБ() Тогда + Возврат; + КонецЕсли; + + // для сценария, когда в конфигурации был удален или переименован план обмена + УдалитьНеактуальныеЗаписиВРегистреПравилДляОбменаДанными(); + + ПравилаОбменаЗагруженныеИзФайла = Новый Массив; + ПравилаРегистрацииЗагруженныеИзФайла = Новый Массив; + + ВыполнитьПроверкуНаличияПравилОбменаЗагруженныхИзФайла(ПравилаОбменаЗагруженныеИзФайла, ПравилаРегистрацииЗагруженныеИзФайла); + + Отказ = Ложь; + + ВыполнитьОбновлениеВерсииТиповыхПравилДляОбменаДанными(Отказ, ПравилаОбменаЗагруженныеИзФайла, ПравилаРегистрацииЗагруженныеИзФайла); + + Если Отказ Тогда + ВызватьИсключение НСтр("ru = 'При обновлении правил обмена данными возникли ошибки (см. Журнал регистрации).'"); + КонецЕсли; + +КонецПроцедуры + +// Устанавливает признак того, что для всех узлов планов обмена необходимо выполнить процедуру +// корректировки информации сопоставления при следующем обмене данными. +// +Процедура УстановитьНеобходимостьВыполненияКорректировкиИнформацииСопоставленияДляВсехУзловИнформационнойБазы() Экспорт + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьНеобходимостьВыполненияКорректировкиИнформацииСопоставленияДляВсехУзловИнформационнойБазы(); + +КонецПроцедуры + +// Устанавливает для всех узлов универсального обмена данными значения реквизитов-флагов режимов выгрузки значение "Выгружать по условию". +// +Процедура УстановитьРежимВыгрузкиОбъектовДляВсехУзловИнформационнойБазы() Экспорт + + СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); + + Для Каждого Элемент Из СписокПлановОбмена Цикл + + ИмяПланаОбмена = Элемент.Значение; + + Если Метаданные.ПланыОбмена[ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза Тогда + Продолжить; + КонецЕсли; + + МассивУзлов = ОбменДаннымиПовтИсп.ПолучитьМассивУзловПланаОбмена(ИмяПланаОбмена); + + Для Каждого Узел Из МассивУзлов Цикл + + ИменаРеквизитов = ОбщегоНазначения.ИменаРеквизитовПоТипу(Узел, Тип("ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена")); + + Если ПустаяСтрока(ИменаРеквизитов) Тогда + Продолжить; + КонецЕсли; + + ИменаРеквизитов = СтрЗаменить(ИменаРеквизитов, " ", ""); + + Реквизиты = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаРеквизитов); + + ОбъектМодифицирован = Ложь; + + УзелОбъект = Узел.ПолучитьОбъект(); + + Для Каждого ИмяРеквизита Из Реквизиты Цикл + + Если Не ЗначениеЗаполнено(УзелОбъект[ИмяРеквизита]) Тогда + + УзелОбъект[ИмяРеквизита] = Перечисления.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПоУсловию; + + ОбъектМодифицирован = Истина; + + КонецЕсли; + + КонецЦикла; + + Если ОбъектМодифицирован Тогда + + УзелОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + УзелОбъект.Записать(); + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +// Обновляет данные регламентных заданий для всех сценариев обменов данных, кроме помеченных на удаление +// +Процедура ОбновитьРегламентныеЗаданияСценариевОбменовДанными() Экспорт + + ТекстЗапроса = " + |ВЫБРАТЬ + | СценарииОбменовДанными.Ссылка + |ИЗ + | Справочник.СценарииОбменовДанными КАК СценарииОбменовДанными + |ГДЕ + | Не СценарииОбменовДанными.ПометкаУдаления + |"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + Отказ = Ложь; + + Объект = Выборка.Ссылка.ПолучитьОбъект(); + + Справочники.СценарииОбменовДанными.ОбновитьДанныеРегламентногоЗадания(Отказ, Неопределено, Объект); + + Если Отказ Тогда + ВызватьИсключение НСтр("ru = 'Ошибка при обновлении регламентного задания для сценария обмена данными.'"); + КонецЕсли; + + Объект.Записать(); + + КонецЦикла; + +КонецПроцедуры + +// Устанавливает значение константы НастройкаПодчиненногоУзлаРИБЗавершена в Истина для подчиненного узла РИБ, +// т.к. в базе уже настроен обмен в РИБ по факту +// +Процедура ОбновитьКонстантуНастройкаПодчиненногоУзлаРИБЗавершена() Экспорт + + Если ЭтоПодчиненныйУзелРИБ() + И РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаДляУзлаЗаданы(ПланыОбмена.ГлавныйУзел()) Тогда + + Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина); + + ОбновитьПовторноИспользуемыеЗначения(); + + КонецЕсли; + +КонецПроцедуры + +// Переустанавливает значение константы ИспользоватьОбменДанными при необходимости +// +Процедура ПроверитьУстановкуФункциональныхОпцийПриОбновленииИБ() Экспорт + + Если Константы.ИспользоватьОбменДанными.Получить() = Истина Тогда + + Константы.ИспользоватьОбменДанными.Установить(Истина); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Выполнение обмена данными // Точка входа для выполнения итерации обмена данными – загрузки и выгрузки данных для узла плана обмена // @@ -197,22 +433,66 @@ УзелИнформационнойБазы, ВыполнятьЗагрузку = Истина, ВыполнятьВыгрузку = Истина, - ВидТранспортаСообщенийОбмена = Неопределено) Экспорт - // + ВидТранспортаСообщенийОбмена = Неопределено, + ДлительнаяОперация = Ложь, + ИдентификаторОперации = "", + ИдентификаторФайла = "", + ДлительнаяОперацияРазрешена = Ложь + ) Экспорт + + ПроверитьИспользованиеОбменаДанными(); Если ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда // Обмен через внешнее соединение Если ВыполнятьЗагрузку Тогда // ЗАГРУЗКА ДАННЫХ ЧЕРЕЗ ВНЕШНЕЕ СОЕДИНЕНИЕ - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных, Неопределено); + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, + УзелИнформационнойБазы, + Перечисления.ДействияПриОбмене.ЗагрузкаДанных, + Неопределено + ); КонецЕсли; Если ВыполнятьВыгрузку Тогда // ВЫГРУЗКА ДАННЫХ ЧЕРЕЗ ВНЕШНЕЕ СОЕДИНЕНИЕ - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ВыгрузкаДанных, Неопределено); + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, + УзелИнформационнойБазы, + Перечисления.ДействияПриОбмене.ВыгрузкаДанных, + Неопределено + ); + + КонецЕсли; + + ИначеЕсли ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда // Обмен через Web-сервис + + Если ВыполнятьЗагрузку Тогда + + // ЗАГРУЗКА ДАННЫХ ЧЕРЕЗ WEB-СЕРВИС + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Отказ, + УзелИнформационнойБазы, + Перечисления.ДействияПриОбмене.ЗагрузкаДанных, + ДлительнаяОперация, + ИдентификаторОперации, + ИдентификаторФайла, + ДлительнаяОперацияРазрешена + ); + + КонецЕсли; + + Если ВыполнятьВыгрузку Тогда + + // ВЫГРУЗКА ДАННЫХ ЧЕРЕЗ WEB-СЕРВИС + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Отказ, + УзелИнформационнойБазы, + Перечисления.ДействияПриОбмене.ВыгрузкаДанных, + ДлительнаяОперация, + ИдентификаторОперации, + ИдентификаторФайла, + ДлительнаяОперацияРазрешена + ); КонецЕсли; @@ -221,14 +501,22 @@ Если ВыполнятьЗагрузку Тогда // ЗАГРУЗКА ДАННЫХ - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных, ВидТранспортаСообщенийОбмена); + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Отказ, + УзелИнформационнойБазы, + Перечисления.ДействияПриОбмене.ЗагрузкаДанных, + ВидТранспортаСообщенийОбмена + ); КонецЕсли; Если ВыполнятьВыгрузку Тогда // ВЫГРУЗКА ДАННЫХ - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ВыгрузкаДанных, ВидТранспортаСообщенийОбмена); + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Отказ, + УзелИнформационнойБазы, + Перечисления.ДействияПриОбмене.ВыгрузкаДанных, + ВидТранспортаСообщенийОбмена + ); КонецЕсли; @@ -258,6 +546,8 @@ // Процедура ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Отказ, НастройкаВыполненияОбмена, НомерСтроки = Неопределено) Экспорт + ПроверитьИспользованиеОбменаДанными(); + ТекстЗапроса = " |ВЫБРАТЬ | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка КАК НастройкаВыполненияОбмена, @@ -266,10 +556,16 @@ | НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена КАК ВидТранспортаОбмена, | НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы, | НастройкиВыполненияОбменаНастройкиОбмена.КоличествоЭлементовВТранзакции КАК КоличествоЭлементовВТранзакции, + | | ВЫБОР КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.COM) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ЭтоОбменЧерезВнешнееСоединение + | КОНЕЦ КАК ОбменЧерезВнешнееСоединение, + | + | ВЫБОР КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.WS) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ОбменЧерезВебСервис |ИЗ | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК НастройкиВыполненияОбменаНастройкиОбмена |ГДЕ @@ -295,10 +591,14 @@ Пока Выборка.Следующий() Цикл - Если Выборка.ЭтоОбменЧерезВнешнееСоединение Тогда + Если Выборка.ОбменЧерезВнешнееСоединение Тогда ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, Выборка.УзелИнформационнойБазы, Выборка.ВыполняемоеДействие, Выборка.КоличествоЭлементовВТранзакции); + ИначеЕсли Выборка.ОбменЧерезВебСервис Тогда + + ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Отказ, Выборка.УзелИнформационнойБазы, Выборка.ВыполняемоеДействие); + Иначе // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ @@ -347,8 +647,14 @@ // Процедура ВыполнитьОбменДаннымиПоРегламентномуЗаданию(КодСценарияОбмена) Экспорт + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + ПроверитьИспользованиеОбменаДанными(); + Если Не ЗначениеЗаполнено(КодСценарияОбмена) Тогда - Возврат; + ВызватьИсключение НСтр("ru = 'Не задан сценарий обмена данными.'"); КонецЕсли; ТекстЗапроса = " @@ -372,10 +678,17 @@ // выполняем обмен по сценарию ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Ложь, Выборка.Ссылка); + Иначе + + СтрокаСообщения = НСтр("ru = 'Сценарий обмена данными с кодом %1 не найден.'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, КодСценарияОбмена); + ВызватьИсключение СтрокаСообщения; КонецЕсли; КонецПроцедуры +// + // Получает сообщение обмена во временный каталог пользователя ОС // // Параметры: @@ -512,104 +825,370 @@ Возврат Результат; КонецФункции -// ЭКСПОРТНЫЕ ВНУТРЕННИЕ СВОЙСТВА - -// Возвращает имя временного каталога для сообщений обмена данными -// Имя каталога соответствует шаблону: -// "Exchange82 {GUID}", -// где GUID - строка уникального идентификатора -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Строка - имя временного каталога для сообщений обмена данными -// -Функция ИмяВременногоКаталогаСообщенийОбмена() Экспорт +Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( + Отказ, + УзелИнформационнойБазы, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации + ) Экспорт - Возврат СтрЗаменить("Exchange82 {GUID}", "GUID", ВРег(Строка(Новый УникальныйИдентификатор))); + // возвращаемое значение функции + Результат = Новый Структура; + Результат.Вставить("ИмяВременногоКаталогаСообщенийОбмена", ""); + Результат.Вставить("ИмяФайлаСообщенияОбмена", ""); + Результат.Вставить("ИдентификаторФайлаПакетаДанных", Неопределено); + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); + ТекущийУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена); + КодТекущегоУзлаПланаОбмена = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ТекущийУзелПланаОбмена, "Код"); + + // Параметры, которые будут определены в функции + ИмяКаталогаСообщенияОбмена = ""; + ИмяФайлаСообщенияОбмена = ""; + ДатаФайлаСообщенияОбмена = Дата('00010101'); + СтрокаСообщенияОбОшибке = ""; + + // получаем прокси веб-сервиса для узла информационной базы + Прокси = ОбменДаннымиПовтИсп.ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке); + + Если Прокси = Неопределено Тогда + + Отказ = Истина; + Сообщение = НСтр("ru = 'Ошибка при установке подключения ко второй информационной базе: %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, СтрокаСообщенияОбОшибке); + СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина); + + Возврат Результат; + КонецЕсли; + + Попытка + + Прокси.UploadData( + ИмяПланаОбмена, + КодТекущегоУзлаПланаОбмена, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + Истина + ); + + Исключение + + Отказ = Истина; + Сообщение = НСтр("ru = 'При выгрузке данных возникли ошибки во второй информационной базе: %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина); + + Возврат Результат; + КонецПопытки; + + Если ДлительнаяОперация Тогда + СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание получения данных от базы-корреспондента...'"), СтруктураНастроекОбмена); + Возврат Результат; + КонецЕсли; + + Попытка + ИмяФайлаИзСервисаПередачиФайлов = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы); + Исключение + + Отказ = Истина; + Сообщение = НСтр("ru = 'Возникли ошибки при получении сообщения обмена из сервиса передачи файлов: %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина); + + Возврат Результат; + КонецПопытки; + + Если Не СоздатьВременныйКаталогСообщенийОбмена(ИмяКаталогаСообщенияОбмена, СтрокаСообщенияОбОшибке) Тогда + + Отказ = Истина; + Сообщение = НСтр("ru = 'При получении сообщения обмена возникли ошибки: %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, СтрокаСообщенияОбОшибке); + СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина); + + Возврат Результат; + КонецЕсли; + + ШаблонИмениФайлаСообщения = ПолучитьШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, Ложь); + + ИмяФайлаСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена, ШаблонИмениФайлаСообщения + ".xml"); + + ПереместитьФайл(ИмяФайлаИзСервисаПередачиФайлов, ИмяФайлаСообщенияОбмена); + + ФайлСообщенияОбмена = Новый Файл(ИмяФайлаСообщенияОбмена); + Если ФайлСообщенияОбмена.Существует() Тогда + ДатаФайлаСообщенияОбмена = ФайлСообщенияОбмена.ПолучитьВремяИзменения(); + КонецЕсли; + + Результат.ИмяВременногоКаталогаСообщенийОбмена = ИмяКаталогаСообщенияОбмена; + Результат.ИмяФайлаСообщенияОбмена = ИмяФайлаСообщенияОбмена; + Результат.ИдентификаторФайлаПакетаДанных = ДатаФайлаСообщенияОбмена; + + Возврат Результат; КонецФункции -// Возвращает имя обработки транспорта сообщений обмена -// -// Параметры: -// ВидТранспорта – ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена – вид транспорта, для которого необходимо получить имя обработки -// -// Возвращаемое значение: -// Тип: Строка. Имя обработки транспорта сообщений обмена -// -Функция ИмяОбработкиТранспортаСообщенийОбмена(ВидТранспорта) Экспорт +Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( + Отказ, + УзелИнформационнойБазы, + ИдентификаторФайла + ) Экспорт - Возврат СтрЗаменить("ТранспортСообщенийОбмена[ВидТранспорта]", "[ВидТранспорта]", ОбщегоНазначения.ИмяЗначенияПеречисления(ВидТранспорта)); + // возвращаемое значение функции + Результат = Новый Структура; + Результат.Вставить("ИмяВременногоКаталогаСообщенийОбмена", ""); + Результат.Вставить("ИмяФайлаСообщенияОбмена", ""); + Результат.Вставить("ИдентификаторФайлаПакетаДанных", Неопределено); + // Параметры, которые будут определены в функции + ИмяКаталогаСообщенияОбмена = ""; + ИмяФайлаСообщенияОбмена = ""; + ДатаФайлаСообщенияОбмена = Дата('00010101'); + СтрокаСообщенияОбОшибке = ""; + + Попытка + + ИмяФайлаИзСервисаПередачиФайлов = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы); + Исключение + + Отказ = Истина; + Сообщение = НСтр("ru = 'Возникли ошибки при получении сообщения обмена из сервиса передачи файлов: %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина); + + Возврат Результат; + КонецПопытки; + + Если Не СоздатьВременныйКаталогСообщенийОбмена(ИмяКаталогаСообщенияОбмена, СтрокаСообщенияОбОшибке) Тогда + + Отказ = Истина; + Сообщение = НСтр("ru = 'При получении сообщения обмена возникли ошибки: %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, СтрокаСообщенияОбОшибке); + СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина); + + Возврат Результат; + КонецЕсли; + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); + ТекущийУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена); + + ШаблонИмениФайлаСообщения = ПолучитьШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, Ложь); + + ИмяФайлаСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена, ШаблонИмениФайлаСообщения + ".xml"); + + ПереместитьФайл(ИмяФайлаИзСервисаПередачиФайлов, ИмяФайлаСообщенияОбмена); + + ФайлСообщенияОбмена = Новый Файл(ИмяФайлаСообщенияОбмена); + Если ФайлСообщенияОбмена.Существует() Тогда + ДатаФайлаСообщенияОбмена = ФайлСообщенияОбмена.ПолучитьВремяИзменения(); + КонецЕсли; + + Результат.ИмяВременногоКаталогаСообщенийОбмена = ИмяКаталогаСообщенияОбмена; + Результат.ИмяФайлаСообщенияОбмена = ИмяФайлаСообщенияОбмена; + Результат.ИдентификаторФайлаПакетаДанных = ДатаФайлаСообщенияОбмена; + + Возврат Результат; КонецФункции -// Дубль процедуры на сервере ОбменДаннымиКлиент.МаксимальноеКоличествоПолейСопоставленияОбъектов() -// -Функция МаксимальноеКоличествоПолейСопоставленияОбъектов() Экспорт +Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации(Отказ, Знач УзелИнформационнойБазы, + Знач ИдентификаторФайла, + Знач ДатаНачалаОперации) Экспорт - Возврат 5; + Попытка + ФайлСообщенияОбмена = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы); + Исключение + ЗафиксироватьЗавершениеОбменаСОшибкой(УзелИнформационнойБазы, + Перечисления.ДействияПриОбмене.ЗагрузкаДанных, + ДатаНачалаОперации, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + Отказ = Истина; + Возврат; + КонецПопытки; -КонецФункции + // Загрузка файла сообщения обмена в эту базу + Попытка + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку( + УзелИнформационнойБазы, + ФайлСообщенияОбмена, + Перечисления.ДействияПриОбмене.ЗагрузкаДанных + ); + Исключение + ЗафиксироватьЗавершениеОбменаСОшибкой(УзелИнформационнойБазы, + Перечисления.ДействияПриОбмене.ЗагрузкаДанных, + ДатаНачалаОперации, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + Отказ = Истина; + КонецПопытки; + + Попытка + УдалитьФайлы(ФайлСообщенияОбмена); + Исключение + КонецПопытки; + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ ЧЕРЕЗ ВНЕШНЕЕ СОЕДИНЕНИЕ +// Для работы через внешнее соединение -Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВоВременноеХранилище(Отказ, Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, Адрес, СтрокаСообщенияОбОшибке = "") Экспорт +Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВоВременноеХранилище(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, Адрес) Экспорт ПолноеИмяФайлаСообщенияОбмена = ПолучитьИмяВременногоФайла("xml"); - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(Отказ, ИмяПланаОбмена, КодУзлаИнформационнойБазы, ПолноеИмяФайлаСообщенияОбмена,, СтрокаСообщенияОбОшибке, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку( + Неопределено, + ПолноеИмяФайлаСообщенияОбмена, + Перечисления.ДействияПриОбмене.ВыгрузкаДанных, + ИмяПланаОбмена, + КодУзлаИнформационнойБазы + ); - Если Не Отказ Тогда - - Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПолноеИмяФайлаСообщенияОбмена)); - - Попытка - УдалитьФайлы(ПолноеИмяФайлаСообщенияОбмена); - Исключение - КонецПопытки; - - КонецЕсли; + Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПолноеИмяФайлаСообщенияОбмена)); + + Попытка + УдалитьФайлы(ПолноеИмяФайлаСообщенияОбмена); + Исключение + КонецПопытки; КонецПроцедуры -Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезФайл(Отказ, Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, Знач ПолноеИмяФайлаСообщенияОбмена, СтрокаСообщенияОбОшибке = "") Экспорт - - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(Отказ, ИмяПланаОбмена, КодУзлаИнформационнойБазы, ПолноеИмяФайлаСообщенияОбмена,, СтрокаСообщенияОбОшибке, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); - -КонецПроцедуры - -Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезФайл(Отказ, Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, Знач ПолноеИмяФайлаСообщенияОбмена, СтрокаСообщенияОбОшибке = "") Экспорт - - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(Отказ, ИмяПланаОбмена, КодУзлаИнформационнойБазы, ПолноеИмяФайлаСообщенияОбмена,, СтрокаСообщенияОбОшибке, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - -КонецПроцедуры - -Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезСтроку(Отказ, Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, СообщениеОбмена, СтрокаСообщенияОбОшибке = "") Экспорт - - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(Отказ, ИмяПланаОбмена, КодУзлаИнформационнойБазы,, СообщениеОбмена, СтрокаСообщенияОбОшибке, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); - -КонецПроцедуры - -Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезСтроку(Отказ, Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, СообщениеОбмена, СтрокаСообщенияОбОшибке = "") Экспорт - - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(Отказ, ИмяПланаОбмена, КодУзлаИнформационнойБазы,, СообщениеОбмена, СтрокаСообщенияОбОшибке, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - -КонецПроцедуры - -Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(Отказ, ИмяПланаОбмена, КодУзлаИнформационнойБазы, ПолноеИмяФайлаСообщенияОбмена = "", СообщениеОбмена = "", СтрокаСообщенияОбОшибке, ДействиеПриОбмене) +Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов(Знач ИмяПланаОбмена, + Знач КодУзлаИнформационнойБазы, + Знач ИдентификаторФайла) Экспорт УстановитьПривилегированныйРежим(Истина); - УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзлаИнформационнойБазы); + ИмяФайлаСообщения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + КаталогВременногоХранилищаФайлов(), + УникальноеИмяФайлаСообщенияОбмена() + ); - Если УзелИнформационнойБазы.Пустая() Тогда - СтрокаСообщенияОбОшибке = НСтр("ru = 'Узел плана обмена %1 с кодом %2 не найден.'"); - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ИмяПланаОбмена, КодУзлаИнформационнойБазы); + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку( + Неопределено, + ИмяФайлаСообщения, + Перечисления.ДействияПриОбмене.ВыгрузкаДанных, + ИмяПланаОбмена, + КодУзлаИнформационнойБазы + ); + + ПоместитьФайлВХранилище(ИмяФайлаСообщения, ИдентификаторФайла); + +КонецПроцедуры + +Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезФайл(Знач ИмяПланаОбмена, + Знач КодУзлаИнформационнойБазы, + Знач ПолноеИмяФайлаСообщенияОбмена) Экспорт + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку( + Неопределено, + ПолноеИмяФайлаСообщенияОбмена, + Перечисления.ДействияПриОбмене.ВыгрузкаДанных, + ИмяПланаОбмена, + КодУзлаИнформационнойБазы + ); + +КонецПроцедуры + +Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезФайл(Отказ, Знач УзелИнформационнойБазы, Знач ПолноеИмяФайлаСообщенияОбмена) Экспорт + + Попытка + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(УзелИнформационнойБазы, ПолноеИмяФайлаСообщенияОбмена, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + Исключение Отказ = Истина; - Возврат; + КонецПопытки; + +КонецПроцедуры + +Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезСтроку(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, СообщениеОбмена) Экспорт + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(Неопределено, + "", + Перечисления.ДействияПриОбмене.ВыгрузкаДанных, + ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + СообщениеОбмена + ); + +КонецПроцедуры + +Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезСтроку(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, СообщениеОбмена) Экспорт + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(Неопределено, + "", + Перечисления.ДействияПриОбмене.ЗагрузкаДанных, + ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + СообщениеОбмена + ); + +КонецПроцедуры + +Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов(Знач ИмяПланаОбмена, + Знач КодУзлаИнформационнойБазы, + Знач ИдентификаторФайла) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ИмяВременногоФайла = ПолучитьФайлИзХранилища(ИдентификаторФайла); + + Попытка + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку( + Неопределено, + ИмяВременногоФайла, + Перечисления.ДействияПриОбмене.ЗагрузкаДанных, + ИмяПланаОбмена, + КодУзлаИнформационнойБазы + ); + Исключение + Попытка + УдалитьФайлы(ИмяВременногоФайла); + Исключение + КонецПопытки; + ВызватьИсключение; + КонецПопытки; + + Попытка + УдалитьФайлы(ИмяВременногоФайла); + Исключение + КонецПопытки; + +КонецПроцедуры + +Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(УзелИнформационнойБазы = Неопределено, + ПолноеИмяФайлаСообщенияОбмена = "", + ДействиеПриОбмене, + ИмяПланаОбмена = "", + КодУзлаИнформационнойБазы = "", + СообщениеОбмена = "" + ) + + УстановитьПривилегированныйРежим(Истина); + + Если УзелИнформационнойБазы = Неопределено Тогда + + УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзлаИнформационнойБазы); + + Если УзелИнформационнойБазы.Пустая() Тогда + СтрокаСообщенияОбОшибке = НСтр("ru = 'Узел плана обмена %1 с кодом %2 не найден.'"); + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ИмяПланаОбмена, КодУзлаИнформационнойБазы); + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + КонецЕсли; // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ @@ -618,8 +1197,7 @@ Если СтруктураНастроекОбмена.Отказ Тогда СтрокаСообщенияОбОшибке = НСтр("ru = 'Ошибка при инициализации процесса обмена данными.'"); ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Отказ = Истина; - Возврат; + ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; @@ -642,8 +1220,7 @@ ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); Если Не РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда - СтрокаСообщенияОбОшибке = СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке; - Отказ = Истина; + ВызватьИсключение СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке; КонецЕсли; КонецПроцедуры @@ -658,6 +1235,8 @@ Функция СтруктураНастроекОбменаЧерезВнешнееСоединение(Структура) Экспорт + ПроверитьИспользованиеОбменаДанными(); + УстановитьПривилегированныйРежим(Истина); УзелИнформационнойБазы = ПланыОбмена[Структура.ИмяПланаОбмена].НайтиПоКоду(Структура.ТекущийУзелПланаОбменаКод); @@ -689,6 +1268,8 @@ СтруктураНастроекОбменаВнешнееСоединение.Вставить("КоличествоЭлементовВТранзакции", Структура.КоличествоЭлементовВТранзакции); + СтруктураНастроекОбменаВнешнееСоединение.Вставить("ЭтоОбменВРИБ", Ложь); + Возврат СтруктураНастроекОбменаВнешнееСоединение; КонецФункции @@ -700,8 +1281,6 @@ КонецФункции -// - Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, ДействиеПриОбмене, ВидТранспортаСообщенийОбмена) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -739,12 +1318,198 @@ КонецПроцедуры -Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, УзелИнформационнойБазы, ДействиеПриОбмене, КоличествоЭлементовВТранзакции) +Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Отказ, + УзелИнформационнойБазы, + ДействиеПриОбмене, + ДлительнаяОперация = Ложь, + ИдентификаторОперации = "", + ИдентификаторФайла = "", + ДлительнаяОперацияРазрешена = Ложь + ) УстановитьПривилегированныйРежим(Истина); // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ - СтруктураНастроекОбмена = ПолучитьСтруктуруНастроекОбменаДляВнешнегоСоединения(УзелИнформационнойБазы, ДействиеПриОбмене, КоличествоЭлементовВТранзакции); + СтруктураНастроекОбмена = ОбменДаннымиПовтИсп.ПолучитьСтруктуруНастроекОбменаДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ДействиеПриОбмене, Перечисления.ВидыТранспортаСообщенийОбмена.WS, Ложь); + + Если СтруктураНастроекОбмена.Отказ Тогда + // если настройка содержит ошибки, то обмен не производим; статус "Отменено" + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + Отказ = Истина; + Возврат; + КонецЕсли; + + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; + СтруктураНастроекОбмена.ДатаНачала = ТекущаяДатаСеанса(); + + СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); + + СтрокаСообщенияОбОшибке = ""; + + // получаем прокси веб-сервиса для узла информационной базы + Прокси = ОбменДаннымиПовтИсп.ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке); + + Если Прокси = Неопределено Тогда + + // добавляем запись в ЖР + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + // если настройка содержит ошибки, то обмен не производим; статус "Отменено" + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + Отказ = Истина; + Возврат; + КонецЕсли; + + Если СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда + + Если СтруктураНастроекОбмена.ИспользоватьПередачуБольшогоОбъемаДанных Тогда + + ФайлСообщенияОбмена = ""; + + Попытка + + Прокси.UploadData(СтруктураНастроекОбмена.ИмяПланаОбмена, + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена + ); + + Если ДлительнаяОперация Тогда + ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание получения данных от базы-корреспондента...'"), СтруктураНастроекОбмена); + Возврат; + КонецЕсли; + + ФайлСообщенияОбмена = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы); + Исключение + ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; + Отказ = Истина; + КонецПопытки; + + Если Не Отказ Тогда + + ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ФайлСообщенияОбмена); + + КонецЕсли; + + Попытка + Если Не ПустаяСтрока(ФайлСообщенияОбмена) Тогда + УдалитьФайлы(ФайлСообщенияОбмена); + КонецЕсли; + Исключение + КонецПопытки; + + Иначе + + ХранилищеСообщенияОбмена = Неопределено; + + Попытка + Прокси.Upload(СтруктураНастроекОбмена.ИмяПланаОбмена, СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, ХранилищеСообщенияОбмена); + + ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена,, ХранилищеСообщенияОбмена.Получить()); + + Исключение + ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; + КонецПопытки; + + КонецЕсли; + + ИначеЕсли СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда + + Если СтруктураНастроекОбмена.ИспользоватьПередачуБольшогоОбъемаДанных Тогда + + ФайлСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), УникальноеИмяФайлаСообщенияОбмена()); + + ЗаписатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ФайлСообщенияОбмена); + + // отправка сообщения обмена только в случае успешной выгрузки данных + Если РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда + + Попытка + + ИдентификаторФайлаСтрокой = Строка(ПоместитьФайлВХранилищеВСервисе(ФайлСообщенияОбмена, УзелИнформационнойБазы)); + + Попытка + УдалитьФайлы(ФайлСообщенияОбмена); + Исключение + КонецПопытки; + + Прокси.DownloadData(СтруктураНастроекОбмена.ИмяПланаОбмена, + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, + ИдентификаторФайлаСтрокой, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена + ); + + Если ДлительнаяОперация Тогда + ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание загрузки данных в базе-корреспонденте...'"), СтруктураНастроекОбмена); + Возврат; + КонецЕсли; + + Исключение + ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; + Отказ = Истина; + КонецПопытки; + + КонецЕсли; + + Попытка + УдалитьФайлы(ФайлСообщенияОбмена); + Исключение + КонецПопытки; + + Иначе + + СообщениеОбмена = ""; + + Попытка + + ЗаписатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена,, СообщениеОбмена); + + // отправка сообщения обмена только в случае успешной выгрузки данных + Если РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда + + Прокси.Download(СтруктураНастроекОбмена.ИмяПланаОбмена, СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, Новый ХранилищеЗначения(СообщениеОбмена, Новый СжатиеДанных(9))); + + КонецЕсли; + + Исключение + ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; + КонецПопытки; + + КонецЕсли; + + КонецЕсли; + + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + + Если Не РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда + Отказ = Истина; + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, УзелИнформационнойБазы, + ДействиеПриОбмене, + КоличествоЭлементовВТранзакции) + + УстановитьПривилегированныйРежим(Истина); + + // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ + СтруктураНастроекОбмена = ПолучитьСтруктуруНастроекОбменаДляВнешнегоСоединения( + УзелИнформационнойБазы, + ДействиеПриОбмене, + КоличествоЭлементовВТранзакции + ); СтруктураНастроекОбмена.ДатаНачала = ТекущаяДатаСеанса(); @@ -761,7 +1526,10 @@ СтрокаСообщенияОбОшибке = ""; // получаем внешнее соединение для узла информационной базы - ВнешнееСоединение = ОбменДаннымиПовтИсп.ПолучитьВнешнееСоединениеДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке); + ВнешнееСоединение = ОбменДаннымиПовтИсп.ПолучитьВнешнееСоединениеДляУзлаИнформационнойБазы( + УзелИнформационнойБазы, + СтрокаСообщенияОбОшибке + ); Если ВнешнееСоединение = Неопределено Тогда @@ -786,7 +1554,19 @@ // Структура.Вставить("ДействиеПриОбменеСтрокой", ДействиеПриОбменеСтрокой); - СтруктураНастроекОбменаВнешнееСоединение = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.СтруктураНастроекОбмена(Структура); + + Попытка + СтруктураНастроекОбменаВнешнееСоединение = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.СтруктураНастроекОбмена(Структура); + Исключение + // добавляем запись в ЖР + ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); + + // если настройка содержит ошибки, то обмен не производим; статус "Отменено" + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + Отказ = Истина; + Возврат; + КонецПопытки; СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; СтруктураНастроекОбменаВнешнееСоединение.ДатаНачала = ТекущаяДатаСеанса(); @@ -963,11 +1743,15 @@ ); Исключение + + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, УровеньЖурналаРегистрации.Ошибка, СтруктураНастроекОбмена.УзелИнформационнойБазы.Метаданные(), - СтруктураНастроекОбмена.УзелИнформационнойБазы, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + СтруктураНастроекОбмена.УзелИнформационнойБазы, СтрокаСообщенияОбОшибке ); СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; + СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке = СтрокаСообщенияОбОшибке; Возврат; КонецПопытки; @@ -1063,11 +1847,14 @@ ); Исключение + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, УровеньЖурналаРегистрации.Ошибка, СтруктураНастроекОбмена.УзелИнформационнойБазы.Метаданные(), - СтруктураНастроекОбмена.УзелИнформационнойБазы, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + СтруктураНастроекОбмена.УзелИнформационнойБазы, СтрокаСообщенияОбОшибке ); СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; + СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке = СтрокаСообщенияОбОшибке; Возврат; КонецПопытки; @@ -1138,7 +1925,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ВЫПОЛНЕНИЯ ОБМЕНА ПЛАТФОРМЕННЫМИ МЕТОДАМИ СЕРИАЛИЗАЦИИ +// Выполнение обмена методами серилизации // Процедура записи изменений для сообщения обмена. // Применима для случаев когда структура метаданных обменивающихся баз одинакова для всех объектов участвующих в обмене. @@ -1527,7 +2314,49 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ТРАНСПОРТА СООБЩЕНИЙ ОБМЕНА +// Экспортные служебные функции-свойства + +// Возвращает имя временного каталога для сообщений обмена данными +// Имя каталога соответствует шаблону: +// "Exchange82 {GUID}", +// где GUID - строка уникального идентификатора +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// Строка - имя временного каталога для сообщений обмена данными +// +Функция ИмяВременногоКаталогаСообщенийОбмена() Экспорт + + Возврат СтрЗаменить("Exchange82 {GUID}", "GUID", ВРег(Строка(Новый УникальныйИдентификатор))); + +КонецФункции + +// Возвращает имя обработки транспорта сообщений обмена +// +// Параметры: +// ВидТранспорта – ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена – вид транспорта, для которого необходимо получить имя обработки +// +// Возвращаемое значение: +// Тип: Строка. Имя обработки транспорта сообщений обмена +// +Функция ИмяОбработкиТранспортаСообщенийОбмена(ВидТранспорта) Экспорт + + Возврат СтрЗаменить("ТранспортСообщенийОбмена[ВидТранспорта]", "[ВидТранспорта]", ОбщегоНазначения.ИмяЗначенияПеречисления(ВидТранспорта)); + +КонецФункции + +// Дубль процедуры на сервере ОбменДаннымиКлиент.МаксимальноеКоличествоПолейСопоставленияОбъектов() +// +Функция МаксимальноеКоличествоПолейСопоставленияОбъектов() Экспорт + + Возврат 5; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Транспорт сообщений обмена Процедура ВыполнитьТранспортСообщенияОбменаПередОбработкой(СтруктураНастроекОбмена) @@ -1588,726 +2417,272 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ +// Сервис передачи файлов -// Добавляет в список Обработчики процедуры-обработчики обновления, -// необходимые данной подсистеме. +// Функция по переданному идентификатору скачивает файл из сервиса передачи файлов // // Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.Приоритет = 1; - Обработчик.Процедура = "ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.1.2"; - Обработчик.Процедура = "ОбменДаннымиСервер.УстановитьНеобходимостьВыполненияКорректировкиИнформацииСопоставленияДляВсехУзловИнформационнойБазы"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.1.2"; - Обработчик.Процедура = "ОбменДаннымиСервер.УстановитьРежимВыгрузкиОбъектовДляВсехУзловИнформационнойБазы"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.1.2"; - Обработчик.Процедура = "ОбменДаннымиСервер.ОбновитьРегламентныеЗаданияСценариевОбменовДанными"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.2.0"; - Обработчик.Процедура = "ОбменДаннымиСервер.ОбновитьКонстантуНастройкаПодчиненногоУзлаРИБЗавершена"; - -КонецПроцедуры - -// Выполняет обновление версии правил конвертации/регистрации объектов -// Обновление выполняется для всех планов обмена. -// Обновление версии правил выполняется только для типовых правил, т.е. тех правил, которые были загружены из макета конфигурации -// -// Параметры: -// Отказ - Булево - флаг отказа; поднимается при возникновении ошибки обновления правил -// -Процедура ВыполнитьОбновлениеПравилДляОбменаДанными() Экспорт - - // для сценария, когда в конфигурации был удален или переименован план обмена - УдалитьНеактуальныеЗаписиВРегистреПравилДляОбменаДанными(); - - ВыполнитьПроверкуНаличияПравилОбменаЗагруженныхИзФайла(); - - Отказ = Ложь; - - Если Не Отказ Тогда - - // выполняем обновление версии правил конвертации - ВыполнитьОбновлениеТиповыхПравилКонвертацииОбъектов(Отказ); - - КонецЕсли; - - Если Не Отказ Тогда - - // выполняем обновление версии правил регистрации - ВыполнитьОбновлениеТиповыхПравилРегистрацииОбъектов(Отказ); - - КонецЕсли; - - Если Отказ Тогда - - ВызватьИсключение НСтр("ru = 'При обновлении правил обмена данными возникли ошибки(см. Журнал регистрации).'"); - - КонецЕсли; - -КонецПроцедуры - -// Устанавливает признак того, что для всех узлов планов обмена необходимо выполнить процедуру -// корректировки информации сопоставления при следующем обмене данными. -// -Процедура УстановитьНеобходимостьВыполненияКорректировкиИнформацииСопоставленияДляВсехУзловИнформационнойБазы() Экспорт - - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьНеобходимостьВыполненияКорректировкиИнформацииСопоставленияДляВсехУзловИнформационнойБазы(); - -КонецПроцедуры - -// Устанавливает для всех узлов универсального обмена данными значения реквизитов-флагов режимов выгрузки значение "Выгружать по условию". -// -Процедура УстановитьРежимВыгрузкиОбъектовДляВсехУзловИнформационнойБазы() Экспорт - - СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); - - Для Каждого Элемент Из СписокПлановОбмена Цикл - - ИмяПланаОбмена = Элемент.Значение; - - Если Метаданные.ПланыОбмена[ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза Тогда - Продолжить; - КонецЕсли; - - МассивУзлов = ОбменДаннымиПовтИсп.ПолучитьМассивУзловПланаОбмена(ИмяПланаОбмена); - - Для Каждого Узел Из МассивУзлов Цикл - - ИменаРеквизитов = ОбщегоНазначения.ИменаРеквизитовПоТипу(Узел, Тип("ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена")); - - Если ПустаяСтрока(ИменаРеквизитов) Тогда - Продолжить; - КонецЕсли; - - ИменаРеквизитов = СтрЗаменить(ИменаРеквизитов, " ", ""); - - Реквизиты = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаРеквизитов); - - ОбъектМодифицирован = Ложь; - - УзелОбъект = Узел.ПолучитьОбъект(); - - Для Каждого ИмяРеквизита Из Реквизиты Цикл - - Если Не ЗначениеЗаполнено(УзелОбъект[ИмяРеквизита]) Тогда - - УзелОбъект[ИмяРеквизита] = Перечисления.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПоУсловию; - - ОбъектМодифицирован = Истина; - - КонецЕсли; - - КонецЦикла; - - Если ОбъектМодифицирован Тогда - - УзелОбъект.Записать(); - - КонецЕсли; - - КонецЦикла; - - КонецЦикла; - -КонецПроцедуры - -// Обновляет данные регламентных заданий для всех сценариев обменов данных, кроме помеченных на удаление -// -Процедура ОбновитьРегламентныеЗаданияСценариевОбменовДанными() Экспорт - - ТекстЗапроса = " - |ВЫБРАТЬ - | СценарииОбменовДанными.Ссылка - |ИЗ - | Справочник.СценарииОбменовДанными КАК СценарииОбменовДанными - |ГДЕ - | Не СценарииОбменовДанными.ПометкаУдаления - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - - Отказ = Ложь; - - Объект = Выборка.Ссылка.ПолучитьОбъект(); - - Справочники.СценарииОбменовДанными.ОбновитьДанныеРегламентногоЗадания(Отказ, Неопределено, Объект); - - Если Отказ Тогда - ВызватьИсключение НСтр("ru = 'Ошибка при обновлении регламентного задания для сценария обмена данными.'"); - КонецЕсли; - - Объект.Записать(); - - КонецЦикла; - -КонецПроцедуры - -// Устанавливает значение константы НастройкаПодчиненногоУзлаРИБЗавершена в Истина для подчиненного узла РИБ, -// т.к. в базе уже настроен обмен в РИБ по факту -// -Процедура ОбновитьКонстантуНастройкаПодчиненногоУзлаРИБЗавершена() Экспорт - - ЭтоПодчиненныйУзелРИБ = (ПланыОбмена.ГлавныйУзел() <> Неопределено); - - Если ЭтоПодчиненныйУзелРИБ - И РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаДляУзлаЗаданы(ПланыОбмена.ГлавныйУзел()) Тогда - - Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина); - - ОбновитьПовторноИспользуемыеЗначения(); - - КонецЕсли; - -КонецПроцедуры - -// Процедура удаляет неактуальные записи в регистре сведений. -// Запись считается неактуальной, если план обмена, для которого была создана запись, -// был переименован или удален. -// -// Параметры: -// Нет. -// -Процедура УдалитьНеактуальныеЗаписиВРегистреПравилДляОбменаДанными() - - СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); - - ТекстЗапроса = " - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ПравилаДляОбменаДанными.ИмяПланаОбмена КАК ИмяПланаОбмена - |ИЗ - | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - - Если СписокПлановОбмена.НайтиПоЗначению(Выборка.ИмяПланаОбмена) = Неопределено Тогда - - НаборЗаписей = СоздатьНаборЗаписейРегистраСведений(Новый Структура("ИмяПланаОбмена", Выборка.ИмяПланаОбмена), "ПравилаДляОбменаДанными"); - НаборЗаписей.Записать(); - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ВНУТРЕННИЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Добавляет параметры работы клиентской логики для подсистемы обмена данными -// -Процедура ДобавитьПараметрыРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Параметры.Вставить("ЭтоПодчиненныйУзелРИБ", ПланыОбмена.ГлавныйУзел() <> Неопределено); - Параметры.Вставить("ИмяПланаОбменаРИБ", ?(Параметры.ЭтоПодчиненныйУзелРИБ, ПланыОбмена.ГлавныйУзел().Метаданные().Имя, "")); - Параметры.Вставить("НастройкаПодчиненногоУзлаРИБЗавершена", Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить()); - -КонецПроцедуры - -// Выполняет обновление типовых правил конвертации объектов для всех планов обмена, -// для которых созданы настройки обмена в системе -// -// Параметры: -// Отказ - Булево - флаг отказа; поднимается при возникновении ошибки обновления правил -// -Процедура ВыполнитьОбновлениеТиповыхПравилКонвертацииОбъектов(Отказ) - - ВыполнитьОбновлениеВерсииТиповыхПравилДляОбменаДанными(Отказ, "ПравилаКонвертацииОбъектов"); - -КонецПроцедуры - -// Выполняет обновление типовых правил регистрации объектов для всех планов обмена, -// для которых созданы настройки обмена в системе -// -// Параметры: -// Отказ - Булево - флаг отказа; поднимается при возникновении ошибки обновления правил -// -Процедура ВыполнитьОбновлениеТиповыхПравилРегистрацииОбъектов(Отказ) - - ВыполнитьОбновлениеВерсииТиповыхПравилДляОбменаДанными(Отказ, "ПравилаРегистрацииОбъектов"); - -КонецПроцедуры - -Процедура ВыполнитьПроверкуНаличияПравилОбменаЗагруженныхИзФайла() - - ТекстЗапроса = " - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ПравилаДляОбменаДанными.ИмяПланаОбмена - |ИЗ - | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными - |ГДЕ - | ПравилаДляОбменаДанными.ИсточникПравил = ЗНАЧЕНИЕ(Перечисление.ИсточникиПравилДляОбменаДанными.Файл) - | И ПравилаДляОбменаДанными.ПравилаЗагружены - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - - Результат = Запрос.Выполнить(); - - Если Не Результат.Пустой() Тогда - - ПланыОбменаМассив = Результат.Выгрузить().ВыгрузитьКолонку("ИмяПланаОбмена"); - - СтрокаСообщения = НСтр("ru = 'Для плана(ов) обмена %1 используются правила обмена, загруженные из файла. - |Эти правила могут быть несовместимы с новой версией программы. - |Для предупреждения возможного возникновения ошибок при работе с программой рекомендуется актуализировать правила обмена из файла.'"); - // - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(ПланыОбменаМассив)); - - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщения); - - КонецЕсли; - -КонецПроцедуры - -// Выполняет проверку подключения обработки транспорта по заданным настройкам. -// -Процедура ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, СтруктураНастроек, ВидТранспорта, СообщениеОбОшибке = "") Экспорт - - УстановитьПривилегированныйРежим(Истина); - - // создаем экземпляр объекта обработки - ОбработкаОбъект = Обработки[ИмяОбработкиТранспортаСообщенийОбмена(ВидТранспорта)].Создать(); - - // инициализация свойств обработки переданными параметрами настроек - ЗаполнитьЗначенияСвойств(ОбработкаОбъект, СтруктураНастроек); - - // Инициализация транспорта обмена - ОбработкаОбъект.Инициализация(); - - // выполняем проверку подключения - Если Не ОбработкаОбъект.ПодключениеУстановлено() Тогда - - ШаблонСообщения = "%1 - |%2"; - // - - ДополнительноеСообщение = НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); - - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ОбработкаОбъект.СтрокаСообщенияОбОшибке, ДополнительноеСообщение); - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке,,,, Отказ); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Транспорт сообщений обмена'"), УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОбъект.СтрокаСообщенияОбОшибкеЖР); - - КонецЕсли; - -КонецПроцедуры - -Процедура ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ, СтруктураНастроек, ОшибкаПодключенияКомпоненты = Ложь) Экспорт - - СтрокаСообщенияОбОшибке = ""; - - // выполняем попытку установки внешнего соединения - ВнешнееСоединение = УстановитьВнешнееСоединение(СтруктураНастроек, СтрокаСообщенияОбОшибке, ОшибкаПодключенияКомпоненты); - - Если ВнешнееСоединение = Неопределено Тогда - - // Выводим сообщение об ошибке - Сообщение = НСтр("ru = 'Ошибка при установке подключения ко второй информационной базе: %1'"); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, СтрокаСообщенияОбОшибке); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение,,,, Отказ); - - КонецЕсли; - -КонецПроцедуры - -Функция УстановитьВнешнееСоединение(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", ОшибкаПодключенияКомпоненты = Ложь) Экспорт - - // выполняем попытку установки внешнего соединения - ВнешнееСоединение = ОбщегоНазначения.УстановитьВнешнееСоединение(ЗаполнитьПараметрыПодключенияВнешнегоСоединения(СтруктураНастроек), СтрокаСообщенияОбОшибке, ОшибкаПодключенияКомпоненты); - - Если ВнешнееСоединение = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - Попытка - - Если Не ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.РольДоступнаПолныеПрава() Тогда - - СтрокаСообщенияОбОшибке = НСтр("ru = 'Для пользователя внешнего соединения должна быть указана роль ""Полные права"".'"); - Возврат Неопределено; - КонецЕсли; - Исключение - - СтрокаСообщенияОбОшибке = НСтр("ru = 'Вторая информационная база не предназначена для обмена с текущей информационной базой.'"); - Возврат Неопределено; - КонецПопытки; - - Возврат ВнешнееСоединение; - -КонецФункции - -Функция ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке = "") Экспорт - - МестоположениеWSDL = "[URLВебСервиса]/ws/[ИмяСервиса]?wsdl"; - МестоположениеWSDL = СтрЗаменить(МестоположениеWSDL, "[URLВебСервиса]", СтруктураНастроек.WSURLВебСервиса); - МестоположениеWSDL = СтрЗаменить(МестоположениеWSDL, "[ИмяСервиса]", СтруктураНастроек.WSИмяСервиса); - - Попытка - Определение = Новый WSОпределения( - МестоположениеWSDL, - СтруктураНастроек.WSИмяПользователя, - СтруктураНастроек.WSПароль); - - WSПрокси = Новый WSПрокси( - Определение, - СтруктураНастроек.WSURLПространстваИменСервиса, - СтруктураНастроек.WSИмяСервиса, - СтруктураНастроек.WSИмяСервиса + "Soap"); - - WSПрокси.Пользователь = СтруктураНастроек.WSИмяПользователя; - WSПрокси.Пароль = СтруктураНастроек.WSПароль; - Исключение - СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); - Возврат Неопределено; - КонецПопытки; - - Возврат WSПрокси; -КонецФункции - -Функция СтруктураПараметровWS() Экспорт - - СтруктураПараметров = Новый Структура; - СтруктураПараметров.Вставить("WSURLВебСервиса"); - СтруктураПараметров.Вставить("WSURLПространстваИменСервиса"); - СтруктураПараметров.Вставить("WSИмяПользователя"); - СтруктураПараметров.Вставить("WSИмяСервиса"); - СтруктураПараметров.Вставить("WSПароль"); - - Возврат СтруктураПараметров; -КонецФункции - -// Выводит сообщение об ошибке и выставляет параметр Отказ в "Истина". -// -// Параметры: -// ТекстСообщения - строка, текст сообщения. -// Отказ - булево, признак отказа (необязательный). -// -Процедура СообщитьОбОшибке(ТекстСообщения, Отказ = Ложь) Экспорт - - Отказ = Истина; - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); - -КонецПроцедуры - -// Получает таблицу правил выборочной регистрации объектов из параметров сеанса. -// -// Параметры: -// Нет. -// +// ИдентификаторФайла - УникальныйИдентификатор - идентификатор получаемого файла. +// ПараметрыДоступаКСервису - Структура: АдресСервиса, ИмяПользователя, ПарольПользователя. +// РазмерЧасти - Число - размер части в килобайтах. Если значение равно 0, +// то разбивка на части не производится. // Возвращаемое значение: -// Таблица значений - таблица реквизитов регистрации для всех объектов метаданных +// Строка - путь к полученному файлу. // -Функция ПолучитьПравилаВыборочнойРегистрацииОбъектовПС() Экспорт - - Возврат ОбменДаннымиПовтИсп.ПолучитьПравилаВыборочнойРегистрацииОбъектовПС(); - -КонецФункции - -// Добавляет одну запись в регистр сведений по переданным значениям структуры -// -// Параметры: -// СтруктураЗаписи - Структура - структура, по значениям которой необходимо создать набор записей и заполнить этот набор -// ИмяРегистра - Строка - имя регистра сведений, в который необходимо добавить запись -// -Процедура ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, Знач ИмяРегистра, Загрузка = Ложь) Экспорт - - НаборЗаписей = СоздатьНаборЗаписейРегистраСведений(СтруктураЗаписи, ИмяРегистра); - - // добавляем только одну запись в новый набор записей - НоваяЗапись = НаборЗаписей.Добавить(); - - // заполняем значения свойств записи из переданной структуры - ЗаполнитьЗначенияСвойств(НоваяЗапись, СтруктураЗаписи); - - НаборЗаписей.ОбменДанными.Загрузка = Загрузка; - - // записываем набор записей - НаборЗаписей.Записать(); - -КонецПроцедуры - -// Обновляет запись в регистр сведений по переданным значениям структуры -// -// Параметры: -// СтруктураЗаписи - Структура - структура, по значениям которой необходимо создать менеджер записи и обновить запись -// ИмяРегистра - Строка - имя регистра сведений, в котором необходимо обновить запись -// -Процедура ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, Знач ИмяРегистра) Экспорт - - МетаданныеРегистра = Метаданные.РегистрыСведений[ИмяРегистра]; - - // создаем менеджер записи регистра - МенеджерЗаписи = РегистрыСведений[ИмяРегистра].СоздатьМенеджерЗаписи(); - - // устанавливаем отбор по измерениям регистра - Для Каждого Измерение ИЗ МетаданныеРегистра.Измерения Цикл - - // если задано значение в структуре, то отбор устанавливаем - Если СтруктураЗаписи.Свойство(Измерение.Имя) Тогда - - МенеджерЗаписи[Измерение.Имя] = СтруктураЗаписи[Измерение.Имя]; - - КонецЕсли; - - КонецЦикла; - - // считываем запись из базы данных - МенеджерЗаписи.Прочитать(); - - // заполняем значения свойств записи из переданной структуры - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, СтруктураЗаписи); - - // записываем менеджер записи - МенеджерЗаписи.Записать(); - -КонецПроцедуры - -// Удаляет набор записей в регистре по переданным значениям структуры -// -// Параметры: -// СтруктураЗаписи - Структура - структура, по значениям которой необходимо удалить набор записей -// ИмяРегистра - Строка - имя регистра сведений, в котором необходимо удалить набор записей -// -Процедура УдалитьНаборЗаписейВРегистреСведений(СтруктураЗаписи, ИмяРегистра, Загрузка = Ложь) Экспорт - - НаборЗаписей = СоздатьНаборЗаписейРегистраСведений(СтруктураЗаписи, ИмяРегистра); - - НаборЗаписей.ОбменДанными.Загрузка = Загрузка; - - // записываем набор записей - НаборЗаписей.Записать(); - -КонецПроцедуры - -// Выполняет загрузку правил для обмена данными (ПРО или ПКО) в ИБ. -// -Процедура ЗагрузитьПравилаДляОбменаДанными(Отказ, - Знач ИмяПланаОбмена, - Знач ВидПравил, - Знач ИмяМакетаПравил, - Знач ИспользоватьФильтрВыборочнойРегистрацииОбъектов = Истина) Экспорт - - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); - СтруктураЗаписи.Вставить("ВидПравил", Перечисления.ВидыПравилДляОбменаДанными[ВидПравил]); - СтруктураЗаписи.Вставить("ИмяМакетаПравил", ИмяМакетаПравил); - СтруктураЗаписи.Вставить("ИсточникПравил", Перечисления.ИсточникиПравилДляОбменаДанными.МакетКонфигурации); - СтруктураЗаписи.Вставить("ИспользоватьФильтрВыборочнойРегистрацииОбъектов", ИспользоватьФильтрВыборочнойРегистрацииОбъектов); - - // получаем набор записей регистра - НаборЗаписей = СоздатьНаборЗаписейРегистраСведений(СтруктураЗаписи, "ПравилаДляОбменаДанными"); - - // добавляем только одну запись в новый набор записей - НоваяЗапись = НаборЗаписей.Добавить(); - - // заполняем значения свойств записи из структуры - ЗаполнитьЗначенияСвойств(НоваяЗапись, СтруктураЗаписи); - - // Загружаем правила для обмена данными в ИБ - РегистрыСведений.ПравилаДляОбменаДанными.ЗагрузитьПравила(Отказ, НаборЗаписей[0]); - - Если Не Отказ Тогда - НаборЗаписей.Записать(); - КонецЕсли; - -КонецПроцедуры - -Процедура ВыполнитьОбновлениеВерсииТиповыхПравилДляОбменаДанными(Отказ, ВидПравил) - - ТекстЗапроса = " - |ВЫБРАТЬ - | ПравилаДляОбменаДанными.ИмяПланаОбмена, - | ПравилаДляОбменаДанными.ИмяМакетаПравил, - | ПравилаДляОбменаДанными.ИспользоватьФильтрВыборочнойРегистрацииОбъектов - |ИЗ - | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными - |ГДЕ - | ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.#ВидПравил#) - | И ПравилаДляОбменаДанными.ИсточникПравил = ЗНАЧЕНИЕ(Перечисление.ИсточникиПравилДляОбменаДанными.МакетКонфигурации) - | И ПравилаДляОбменаДанными.ПравилаЗагружены - |"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ВидПравил#", ВидПравил); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - - ЗагрузитьПравилаДляОбменаДанными(Отказ, Выборка.ИмяПланаОбмена, ВидПравил, Выборка.ИмяМакетаПравил, Выборка.ИспользоватьФильтрВыборочнойРегистрацииОбъектов); - - КонецЦикла; - -КонецПроцедуры - -// Создает набор записей регистра сведений по переданным значениям структуры. Добавляет одну запись в набор -// -// Параметры: -// СтруктураЗаписи - Структура - структура по значениям которой необходимо создать набор записей и заполнить этот набор -// ИмяРегистра - Строка - имя регистра сведений -// -Функция СоздатьНаборЗаписейРегистраСведений(СтруктураЗаписи, ИмяРегистра) Экспорт - - МетаданныеРегистра = Метаданные.РегистрыСведений[ИмяРегистра]; - - // создаем набор записей регистра - НаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); - - // устанавливаем отбор по измерениям регистра - Для Каждого Измерение ИЗ МетаданныеРегистра.Измерения Цикл - - // если задано значение в структуре, то отбор устанавливаем - Если СтруктураЗаписи.Свойство(Измерение.Имя) Тогда - - НаборЗаписей.Отбор[Измерение.Имя].Установить(СтруктураЗаписи[Измерение.Имя]); - - КонецЕсли; - - КонецЦикла; - - Возврат НаборЗаписей; -КонецФункции - -// Получает индекс картинки для вывода в таблице статистики сопоставления объектов -// -Функция ИндексКартинкиТаблицыИнформацииСтатистики(Знач КоличествоОбъектовНесопоставленных, Знач ДанныеУспешноЗагружены) Экспорт - - Возврат ?(КоличествоОбъектовНесопоставленных = 0, ?(ДанныеУспешноЗагружены = Истина, 2, 0), 1); - -КонецФункции - -// Проверяет признак того, что правила обмена загружены для заданного плана обмена -// -// Возвращаемое значение: -// Тип: Булево. Истина – привила обмена загружены в ИБ; Ложь – нет. -// -Функция ПравилаКонвертацииОбъектовДляПланаОбменаЗагружены(Знач ИмяПланаОбмена) Экспорт - - ТекстЗапроса = " - |ВЫБРАТЬ ПЕРВЫЕ 1 1 - |ИЗ - | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными - |ГДЕ - | ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) - | И ПравилаДляОбменаДанными.ПравилаЗагружены - | И ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); - - Возврат Не Запрос.Выполнить().Пустой(); -КонецФункции - -// Выполняет проверку того, что размер файла сообщения обмена превышает допустимый размер. -// -// Возвращаемое значение: -// Тип: Булево. Истина – размер файла больше допустимого; Ложь – размер файла не превышает допустимого размера. -// -Функция РазмерСообщенияОбменаПревышаетДопустимый(Знач ИмяФайла, Знач МаксимальныйДопустимыйРазмерСообщения) Экспорт +Функция ПолучитьФайлИзХранилищаВСервисе(Знач ИдентификаторФайла, Знач УзелИнформационнойБазы, Знач РазмерЧасти = 1024) Экспорт // возвращаемое значение функции - Результат = Ложь; + ИмяФайлаРезультата = ""; + + Прокси = ОбменДаннымиПовтИсп.ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы); + + ОбменВыполняетсяВОднойСети = ОбменДаннымиПовтИсп.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы); + + Если ОбменВыполняетсяВОднойСети Тогда + + ИмяФайлаИзХранилища = Прокси.GetFileFromStorage(ИдентификаторФайла); + + ИмяФайлаРезультата = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), ИмяФайлаИзХранилища); + + Иначе + + ИдентификаторСессии = Неопределено; + КоличествоЧастей = Неопределено; + + Прокси.PrepareGetFile(ИдентификаторФайла, РазмерЧасти, ИдентификаторСессии, КоличествоЧастей); + + ИменаФайлов = Новый Массив; + + КаталогСборки = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(КаталогСборки); + + ШаблонИмениФайла = "data.zip.[n]"; + + Для НомерЧасти = 1 По КоличествоЧастей Цикл + + ДанныеЧасти = Неопределено; + Прокси.GetFilePart(ИдентификаторСессии, НомерЧасти, ДанныеЧасти); + + ИмяФайла = СтрЗаменить(ШаблонИмениФайла, "[n]", Формат(НомерЧасти, "ЧГ=0")); + ИмяФайлаЧасти = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, ИмяФайла); + + ДанныеЧасти.Записать(ИмяФайлаЧасти); + ИменаФайлов.Добавить(ИмяФайлаЧасти); + КонецЦикла; + ДанныеЧасти = Неопределено; + + Прокси.ReleaseFile(ИдентификаторСессии); + + ИмяАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, "data.zip"); + + ОбъединитьФайлы(ИменаФайлов, ИмяАрхива); + + Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); + Если Разархиватор.Элементы.Количество() = 0 Тогда + Попытка + УдалитьФайлы(КаталогСборки); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); + КонецЕсли; + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, Разархиватор.Элементы[0].Имя); + + Разархиватор.Извлечь(Разархиватор.Элементы[0], КаталогСборки); + Разархиватор.Закрыть(); + + Файл = Новый Файл(ИмяФайла); + + ИмяФайлаРезультата = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов(), Файл.Имя); + ПереместитьФайл(ИмяФайла, ИмяФайлаРезультата); + + Попытка + УдалитьФайлы(КаталогСборки); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + КонецЕсли; + + Возврат ИмяФайлаРезультата; +КонецФункции + +// Функция передает указанный файл в сервис передачи файлов. +// +// Параметры: +// ИмяФайла - Строка - путь к передаваемому файлу. +// ПараметрыДоступаКСервису - Структура: АдресСервиса, ИмяПользователя, ПарольПользователя. +// РазмерЧасти - Число - размер части в килобайтах. Если значение равно 0, +// то разбивка на части не производится. +// Возвращаемое значение: +// УникальныйИдентификатор - идентификатор файла в сервисе передачи файлов. +// +Функция ПоместитьФайлВХранилищеВСервисе(Знач ИмяФайла, Знач УзелИнформационнойБазы, Знач РазмерЧасти = 1024) Экспорт + + // возвращаемое значение функции + ИдентификаторФайла = Неопределено; + + Прокси = ОбменДаннымиПовтИсп.ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы); + + ОбменВыполняетсяВОднойСети = ОбменДаннымиПовтИсп.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы); + + Если ОбменВыполняетсяВОднойСети Тогда + + ИмяФайлаВХранилище = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), УникальноеИмяФайлаСообщенияОбмена()); + + ПереместитьФайл(ИмяФайла, ИмяФайлаВХранилище); + + Прокси.PutFileIntoStorage(ИмяФайлаВХранилище, ИдентификаторФайла); + + Иначе + + КаталогФайлов = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(КаталогФайлов); + + // Архивирование файла + ИмяНеразделенногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогФайлов, "data.zip"); + Архиватор = Новый ЗаписьZipФайла(ИмяНеразделенногоФайла,,,, УровеньСжатияZIP.Максимальный); + Архиватор.Добавить(ИмяФайла); + Архиватор.Записать(); + + // Разделение файла на части + ИдентификаторСессии = Новый УникальныйИдентификатор; + + КоличествоЧастей = 1; + Если ЗначениеЗаполнено(РазмерЧасти) Тогда + ИменаФайлов = РазделитьФайл(ИмяНеразделенногоФайла, РазмерЧасти * 1024); + КоличествоЧастей = ИменаФайлов.Количество(); + Для НомерЧасти = 1 По КоличествоЧастей Цикл + ИмяФайлаЧасти = ИменаФайлов[НомерЧасти - 1]; + ДанныеФайла = Новый ДвоичныеДанные(ИмяФайлаЧасти); + Прокси.PutFilePart(ИдентификаторСессии, НомерЧасти, ДанныеФайла); + КонецЦикла; + Иначе + ДанныеФайла = Новый ДвоичныеДанные(ИмяНеразделенногоФайла); + Прокси.PutFilePart(ИдентификаторСессии, 1, ДанныеФайла); + КонецЕсли; + + Попытка + УдалитьФайлы(КаталогФайлов); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Прокси.SaveFileFromParts(ИдентификаторСессии, КоличествоЧастей, ИдентификаторФайла); + + КонецЕсли; + + Возврат ИдентификаторФайла; +КонецФункции + +// Получение файла по его идентификатору +// +// Параметры: +// ИдентификаторФайла - УникальныйИдентификатор - идентификатор получаемого файла. +// ИдентификаторХранилища - Строка - идентификатор хранилища, из которого необходимо получить файл. +// +// Возвращаемое значение: +// ИмяФайла - Строка - имя файла. +// +Функция ПолучитьФайлИзХранилища(Знач ИдентификаторФайла) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | СообщенияОбменаДанными.ИмяФайлаСообщения КАК ИмяФайла + |ИЗ + | РегистрСведений.СообщенияОбменаДанными КАК СообщенияОбменаДанными + |ГДЕ + | СообщенияОбменаДанными.ИдентификаторСообщения = &ИдентификаторСообщения"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИдентификаторСообщения", Строка(ИдентификаторФайла)); + Запрос.Текст = ТекстЗапроса; + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Описание = НСтр("ru = 'Файл с идентификатором %1 не обнаружен.'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Описание, Строка(ИдентификаторФайла)); + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + ИмяФайла = Выборка.ИмяФайла; + + // Удаляем информацию о файле сообщения обмена из хранилища + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("ИдентификаторСообщения", Строка(ИдентификаторФайла)); + РегистрыСведений.СообщенияОбменаДанными.УдалитьЗапись(СтруктураЗаписи); + + Возврат ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), ИмяФайла); +КонецФункции + +// Сохранение файла. +// +// Параметры: +// ИмяФайла - Строка - наименование файла. +// ИдентификаторХранилища - Строка - идентификатор хранилища, в которое необходимо сохранить файл. +// ИдентификаторФайла - УникальныйИдентификатор - идентификатор файла. Если задан, то при сохранении файла +// будет использоваться это значение, иначе - сгенерируется новое. +// +// Возвращаемое значение: +// УникальныйИдентификатор - идентификатор файла. +// +Функция ПоместитьФайлВХранилище(Знач ИмяФайла, Знач ИдентификаторФайла = Неопределено) Экспорт + + ИдентификаторФайла = ?(ИдентификаторФайла = Неопределено, Новый УникальныйИдентификатор, ИдентификаторФайла); Файл = Новый Файл(ИмяФайла); - Если Файл.Существует() И Файл.ЭтоФайл() Тогда - - Если МаксимальныйДопустимыйРазмерСообщения <> 0 Тогда - - РазмерПакета = Окр(Файл.Размер() / 1024, 0, РежимОкругления.Окр15как20); - - Если РазмерПакета > МаксимальныйДопустимыйРазмерСообщения Тогда - - СтрокаСообщения = НСтр("ru = 'Размер исходящего пакета составил %1 Кбайт, что превышает допустимое ограничение %2 Кбайт.'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(РазмерПакета), Строка(МаксимальныйДопустимыйРазмерСообщения)); - СообщитьОбОшибке(СтрокаСообщения, Результат); - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("ИдентификаторСообщения", Строка(ИдентификаторФайла)); + СтруктураЗаписи.Вставить("ИмяФайлаСообщения", Файл.Имя); + СтруктураЗаписи.Вставить("ДатаЗакладкиСообщения", ТекущаяДата()); + + РегистрыСведений.СообщенияОбменаДанными.ДобавитьЗапись(СтруктураЗаписи); + + Возврат ИдентификаторФайла; +КонецФункции + +Функция ОбменВыполняетсяВОднойЛокальнойСети(Знач УзелИнформационнойБазы) Экспорт + + Прокси = ОбменДаннымиПовтИсп.ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы); + + ИмяВременногоФайла = СтрЗаменить("test{GUID}.tmp", "GUID", Строка(Новый УникальныйИдентификатор)); + + ПолноеИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), ИмяВременногоФайла); + ЗаписьТекста = Новый ЗаписьТекста(ПолноеИмяВременногоФайла); + ЗаписьТекста.Закрыть(); + + Попытка + Результат = Прокси.FileExists(ИмяВременногоФайла); + Исключение + ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Попытка + УдалитьФайлы(ПолноеИмяВременногоФайла); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + ВызватьИсключение ПодробноеПредставлениеОшибки; + КонецПопытки; + + Попытка + УдалитьФайлы(ПолноеИмяВременногоФайла); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; Возврат Результат; - -КонецФункции - -Функция УстановленПризнакНачальнойВыгрузкиДанных(УзелИнформационнойБазы) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановленПризнакНачальнойВыгрузкиДанных(УзелИнформационнойБазы); - -КонецФункции - -Функция ИзмененияЗарегистрированы(УзелИнформационнойБазы) Экспорт - - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 1 - |ИЗ - | [Таблица].Изменения КАК ТаблицаИзменений - |ГДЕ - | ТаблицаИзменений.Узел = &Узел"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Узел", УзелИнформационнойБазы); - - УстановитьПривилегированныйРежим(Истина); - - СоставПланаОбмена = Метаданные.ПланыОбмена[ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы)].Состав; - - Для Каждого ЭлементСостава Из СоставПланаОбмена Цикл - - Запрос.Текст = СтрЗаменить(ТекстЗапроса, "[Таблица]", ЭлементСостава.Метаданные.ПолноеИмя()); - - РезультатЗапроса = Запрос.Выполнить(); - - Если Не РезультатЗапроса.Пустой() Тогда - Возврат Истина; - КонецЕсли; - - КонецЦикла; - - Возврат Ложь; КонецФункции //////////////////////////////////////////////////////////////////////////////// -// РЕГИСТРАЦИЯ ИЗМЕНЕНИЙ ДЛЯ НАЧАЛЬНОЙ ВЫГРУЗКИ ДАННЫХ +// Регистрация изменений для начальной выгрузки данных // Выполняет регистрацию изменений для начальной выгрузки данных с учетом даты начала выгрузки и списка организаций. // Процедура является универсальной и может быть использована для регистрации изменений данных по дате начала выгрузки @@ -2338,14 +2713,29 @@ // Список организаций, для которых необходимо выполнить регистрацию изменений данных. // Если параметр не задан, то организации не будут учитываться при регистрации изменений. // -Процедура ЗарегистрироватьДанныеПоДатеНачалаВыгрузкиИОрганизациям(Знач Получатель, ДатаНачалаВыгрузки, Организации = Неопределено) Экспорт +Процедура ЗарегистрироватьДанныеПоДатеНачалаВыгрузкиИОрганизациям(Знач Получатель, ДатаНачалаВыгрузки, + Организации = Неопределено, + Данные = Неопределено) Экспорт ОтборПоОрганизациям = (Организации <> Неопределено); ОтборПоДатеНачалаВыгрузки = ЗначениеЗаполнено(ДатаНачалаВыгрузки); Если Не ОтборПоОрганизациям И Не ОтборПоДатеНачалаВыгрузки Тогда - ПланыОбмена.ЗарегистрироватьИзменения(Получатель); + Если ТипЗнч(Данные) = Тип("Массив") Тогда + + Для Каждого ОбъектМетаданных Из Данные Цикл + + ПланыОбмена.ЗарегистрироватьИзменения(Получатель, ОбъектМетаданных); + + КонецЦикла; + + Иначе + + ПланыОбмена.ЗарегистрироватьИзменения(Получатель, Данные); + + КонецЕсли; + Возврат; КонецЕсли; @@ -2355,8 +2745,17 @@ СоставПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Состав; + ИспользоватьФильтрПоМетаданным = (ТипЗнч(Данные) = Тип("Массив")); + Для Каждого ЭлементСоставаПланаОбмена Из СоставПланаОбмена Цикл + Если ИспользоватьФильтрПоМетаданным + И Данные.Найти(ЭлементСоставаПланаОбмена.Метаданные) = Неопределено Тогда + + Продолжить; + + КонецЕсли; + ПолноеИмяОбъекта = ЭлементСоставаПланаОбмена.Метаданные.ПолноеИмя(); Если ЭлементСоставаПланаОбмена.АвтоРегистрация = АвтоРегистрацияИзменений.Запретить @@ -2587,7 +2986,10 @@ Возврат Запрос.Выполнить().Выбрать(); КонецФункции -Функция ВыборкаЗначенийОсновногоОтбораРегистраСведенийПоДатеНачалаВыгрузкиИОрганизациям(ОсновнойОтбор, ПолноеИмяОбъекта, ДатаНачалаВыгрузки, Организации) +Функция ВыборкаЗначенийОсновногоОтбораРегистраСведенийПоДатеНачалаВыгрузкиИОрганизациям(ОсновнойОтбор, + ПолноеИмяОбъекта, + ДатаНачалаВыгрузки, + Организации) ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ @@ -2674,7 +3076,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ВСПОМОГАТЕЛЬНЫЕ +// Вспомогательные служебные процедуры и функции Функция ТаблицаМонитораОбменаДанными(ПланыОбмена, Знач ДополнительныеСвойстваПланаОбмена = "") Экспорт @@ -2853,6 +3255,42 @@ Возврат Результат; КонецФункции +// Процедура удаляет неактуальные записи в регистре сведений. +// Запись считается неактуальной, если план обмена, для которого была создана запись, +// был переименован или удален. +// +// Параметры: +// Нет. +// +Процедура УдалитьНеактуальныеЗаписиВРегистреПравилДляОбменаДанными() + + СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); + + ТекстЗапроса = " + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПравилаДляОбменаДанными.ИмяПланаОбмена КАК ИмяПланаОбмена + |ИЗ + | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными + |"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + Если СписокПлановОбмена.НайтиПоЗначению(Выборка.ИмяПланаОбмена) = Неопределено Тогда + + НаборЗаписей = СоздатьНаборЗаписейРегистраСведений(Новый Структура("ИмяПланаОбмена", Выборка.ИмяПланаОбмена), "ПравилаДляОбменаДанными"); + НаборЗаписей.Записать(); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + Процедура ПолучитьТаблицуПлановОбменаДляМонитора(МенеджерВременныхТаблиц, ПланыОбменаМассив, Знач ДополнительныеСвойстваПланаОбмена) ПланыОбменаМетода = ФильтрПлановОбменаПоПризнакуРазделенияДанных(ПланыОбменаМассив); @@ -2906,14 +3344,36 @@ Иначе + ДополнительныеСвойстваБезИсточникаДанныхСтрокой = ""; + + Если Не ПустаяСтрока(ДополнительныеСвойстваПланаОбмена) Тогда + + ДополнительныеСвойства = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ДополнительныеСвойстваПланаОбмена); + + ДополнительныеСвойстваБезИсточникаДанных = Новый Массив; + + Для Каждого Свойство Из ДополнительныеСвойства Цикл + + ДополнительныеСвойстваБезИсточникаДанных.Добавить(СтрЗаменить("Неопределено КАК [Свойство]", "[Свойство]", Свойство)); + + КонецЦикла; + + ДополнительныеСвойстваБезИсточникаДанныхСтрокой = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(ДополнительныеСвойстваБезИсточникаДанных) + ", "; + + КонецЕсли; + ТекстЗапроса = " |ВЫБРАТЬ + | + | [ДополнительныеСвойстваБезИсточникаДанныхСтрокой] + | | Неопределено КАК УзелИнформационнойБазы, | ""[ИмяПланаОбмена]"" КАК Наименование, | ""[ИмяПланаОбмена]"" КАК ИмяПланаОбмена |"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", НСтр("ru = '<План обмена не определен>'")); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", НСтр("ru = '<Работа с обменом не поддерживается в текущем режиме>'")); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ДополнительныеСвойстваБезИсточникаДанныхСтрокой]", ДополнительныеСвойстваБезИсточникаДанныхСтрокой); КонецЕсли; @@ -2943,9 +3403,24 @@ КонецПроцедуры +Процедура ПроверитьИспользованиеОбменаДанными() Экспорт + + Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменДанными") <> Истина Тогда + + Сообщение = НСтр("ru = 'Выполнение обмена запрещено администратором.'"); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), УровеньЖурналаРегистрации.Ошибка,,, Сообщение); + + ВызватьИсключение Сообщение; + КонецЕсли; + +КонецПроцедуры + // Заполняет список значений доступными видами транспорта для узла плана обмена // -Процедура ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(УзелИнформационнойБазы, ЭлементФормы) Экспорт +Процедура ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(УзелИнформационнойБазы, ЭлементФормы, Отбор = Неопределено) Экспорт + + ОтборЗадан = (Отбор <> Неопределено); ИспользуемыеТранспорты = ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы); @@ -2953,7 +3428,19 @@ Для Каждого Элемент Из ИспользуемыеТранспорты Цикл - ЭлементФормы.СписокВыбора.Добавить(Элемент, Строка(Элемент)); + Если ОтборЗадан Тогда + + Если Отбор.Найти(Элемент) <> Неопределено Тогда + + ЭлементФормы.СписокВыбора.Добавить(Элемент, Строка(Элемент)); + + КонецЕсли; + + Иначе + + ЭлементФормы.СписокВыбора.Добавить(Элемент, Строка(Элемент)); + + КонецЕсли; КонецЦикла; @@ -2972,12 +3459,21 @@ КонецЕсли; // формируем итоговое сообщение для протокола - СтрокаСообщения = НСтр("ru = '%1, %2; Обработано %3 объектов'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, - СтруктураНастроекОбмена.РезультатВыполненияОбмена, - СтруктураНастроекОбмена.ДействиеПриОбмене, - СтруктураНастроекОбмена.КоличествоОбъектовОбработано); - // + Если СтруктураНастроекОбмена.ЭтоОбменВРИБ Тогда + СтрокаСообщения = НСтр("ru = '%1, %2'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, + СтруктураНастроекОбмена.РезультатВыполненияОбмена, + СтруктураНастроекОбмена.ДействиеПриОбмене + ); + Иначе + СтрокаСообщения = НСтр("ru = '%1, %2; Объектов обработано: %3'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, + СтруктураНастроекОбмена.РезультатВыполненияОбмена, + СтруктураНастроекОбмена.ДействиеПриОбмене, + СтруктураНастроекОбмена.КоличествоОбъектовОбработано + ); + КонецЕсли; + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); СтруктураНастроекОбмена.ДатаОкончания = ТекущаяДатаСеанса(); @@ -3076,6 +3572,10 @@ Ключ = НастройкаОтбора.Ключ; + Если Форма.Элементы.Найти(Ключ) = Неопределено Тогда + Продолжить; + КонецЕсли; + Если ТипЗнч(Форма[Ключ]) = Тип("ДанныеФормыКоллекция") Тогда Таблица = Новый ТаблицаЗначений; @@ -3291,9 +3791,9 @@ Функция ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, ДействиеПриОбмене) Экспорт ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); - КодУзлаПланаОбмена = ОбщегоНазначения.ПолучитьЗначениеРеквизита(УзелИнформационнойБазы, "Код"); + КодУзлаПланаОбмена = СокрЛП(ОбщегоНазначения.ПолучитьЗначениеРеквизита(УзелИнформационнойБазы, "Код")); - КлючСообщения = "Обмен данными.[ИмяПланаОбмена].Узел [КодУзла].[ДействиеПриОбмене]"; + КлючСообщения = НСтр("ru = 'Обмен данными.[ИмяПланаОбмена].Узел [КодУзла].[ДействиеПриОбмене]'"); КлючСообщения = СтрЗаменить(КлючСообщения, "[ИмяПланаОбмена]", ИмяПланаОбмена); КлючСообщения = СтрЗаменить(КлючСообщения, "[КодУзла]", КодУзлаПланаОбмена); @@ -3331,15 +3831,6 @@ Возврат Отбор; КонецФункции -// Возвращает признак доступности роли "ПолныеПрава" или "ДобавлениеИзменениеОбменовДанными" -// -Функция РольДоступнаДобавлениеИзменениеОбменовДанными() Экспорт - - Возврат РольДоступна(Метаданные.Роли.ПолныеПрава) - ИЛИ РольДоступна(Метаданные.Роли.ДобавлениеИзменениеОбменовДанными); - -КонецФункции - // Возвращает имя файла сообщения обмена данными по данным узла-отправителя и узла-получателя // Функция ИмяФайлаСообщенияОбмена(КодУзлаОтправителя, КодУзлаПолучателя) Экспорт @@ -3383,6 +3874,7 @@ Результат = Новый Массив; Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.COM); + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WS); Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); @@ -3485,6 +3977,17 @@ Возврат Значение; КонецФункции +Функция НомерОбластиИзКодаУзлаПланаОбмена(Знач КодУзла) Экспорт + + Если ТипЗнч(КодУзла) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Неправильный тип параметра номер [1].'"); + КонецЕсли; + + Результат = СтрЗаменить(КодУзла, "S0", ""); + + Возврат Число(Результат); +КонецФункции + Функция ЗначениеПоТипу(Значение, ИмяТипа) Экспорт Если ТипЗнч(Значение) <> Тип(ИмяТипа) Тогда @@ -3520,6 +4023,14 @@ Возврат ОбщегоНазначения.ПолучитьЗначениеРеквизита(ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена), "Наименование"); КонецФункции +// Только для внутреннего использования +Функция НаименованиеЭтогоУзлаПоУмолчанию() Экспорт + + Возврат ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); + +КонецФункции + +// Только для внутреннего использования Процедура ОбработчикПередОтправкойДанных(СтандартнаяОбработка, Знач Получатель, Знач ИмяФайлаСообщения, @@ -3540,6 +4051,7 @@ КонецПроцедуры +// Только для внутреннего использования Процедура ОбработчикПередПолучениемДанных(СтандартнаяОбработка, Знач Отправитель, Знач ИмяФайлаСообщения, @@ -3560,8 +4072,1265 @@ КонецПроцедуры +// Только для внутреннего использования +Процедура ЗафиксироватьЗавершениеОбменаСОшибкой(Знач УзелИнформационнойБазы, + Знач ДействиеПриОбмене, + Знач ДатаНачала, + Знач СтрокаСообщенияОбОшибке + ) Экспорт + + Если ТипЗнч(ДействиеПриОбмене) = Тип("Строка") Тогда + + ДействиеПриОбмене = Перечисления.ДействияПриОбмене[ДействиеПриОбмене]; + + КонецЕсли; + + СтруктураНастроекОбмена = Новый Структура; + СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); + СтруктураНастроекОбмена.Вставить("РезультатВыполненияОбмена", Перечисления.РезультатыВыполненияОбмена.Ошибка); + СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене", ДействиеПриОбмене); + СтруктураНастроекОбмена.Вставить("КоличествоОбъектовОбработано", 0); + СтруктураНастроекОбмена.Вставить("КлючСообщенияЖурналаРегистрации", ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, ДействиеПриОбмене)); + СтруктураНастроекОбмена.Вставить("ДатаНачала", ДатаНачала); + СтруктураНастроекОбмена.Вставить("ДатаОкончания", ТекущаяДатаСеанса()); + + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + +КонецПроцедуры + +// Только для внутреннего использования +Процедура ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Знач УзелИнформационнойБазы, Знач ДатаНачала) Экспорт + + ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; + + СтруктураНастроекОбмена = Новый Структура; + СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); + СтруктураНастроекОбмена.Вставить("РезультатВыполненияОбмена", Перечисления.РезультатыВыполненияОбмена.Выполнено); + СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене", ДействиеПриОбмене); + СтруктураНастроекОбмена.Вставить("КоличествоОбъектовОбработано", 0); + СтруктураНастроекОбмена.Вставить("КлючСообщенияЖурналаРегистрации", ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, ДействиеПриОбмене)); + СтруктураНастроекОбмена.Вставить("ДатаНачала", ДатаНачала); + СтруктураНастроекОбмена.Вставить("ДатаОкончания", ТекущаяДатаСеанса()); + СтруктураНастроекОбмена.Вставить("ЭтоОбменВРИБ", Ложь); + + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + +КонецПроцедуры + +Процедура ВыполнитьСравнениеИОбъединениеТаблицФормы(Форма, Отказ) + + ИмяПланаОбмена = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Форма.ИмяФормы, ".")[1]; + + ДанныеКорреспондента = ОбщиеДанныеУзловКорреспондента(ИмяПланаОбмена, Форма.Параметры.ПараметрыПодключения, Отказ); + + Если ДанныеКорреспондента = Неопределено Тогда + Возврат; + КонецЕсли; + + ДанныеЭтойИнформационнойБазы = ДанныеДляТабличныхЧастейУзловЭтойИнформационнойБазы(ИмяПланаОбмена); + + ТабличныеЧастиПланаОбмена = ОбменДаннымиПовтИсп.ТабличныеЧастиПланаОбмена(ИмяПланаОбмена); + + РеквизитыФормы = Форма.ПолучитьРеквизиты(); + ИменаРеквизитовФормы = Новый Массив; + Для Каждого РеквизитФормы Из РеквизитыФормы Цикл + + ИменаРеквизитовФормы.Добавить(РеквизитФормы.Имя); + + КонецЦикла; + + // Объединение таблиц Общих данных + Для Каждого ИмяТабличнойЧасти Из ТабличныеЧастиПланаОбмена["ТаблицыОбщие"] Цикл + + Если ИменаРеквизитовФормы.Найти(ИмяТабличнойЧасти) = Неопределено Тогда + Продолжить; + КонецЕсли; + + ОбщаяТаблица = Новый ТаблицаЗначений; + ОбщаяТаблица.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + ОбщаяТаблица.Колонки.Добавить("УникальныйИдентификаторСсылки", Новый ОписаниеТипов("Строка")); + + Для Каждого СтрокаТаблицы Из ДанныеЭтойИнформационнойБазы[ИмяТабличнойЧасти] Цикл + + ЗаполнитьЗначенияСвойств(ОбщаяТаблица.Добавить(), СтрокаТаблицы); + + КонецЦикла; + + Для Каждого СтрокаТаблицы Из ДанныеКорреспондента[ИмяТабличнойЧасти] Цикл + + ЗаполнитьЗначенияСвойств(ОбщаяТаблица.Добавить(), СтрокаТаблицы); + + КонецЦикла; + + ТаблицаРезультат = ОбщаяТаблица.Скопировать(, "УникальныйИдентификаторСсылки"); + ТаблицаРезультат.Свернуть("УникальныйИдентификаторСсылки"); + ТаблицаРезультат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + ТаблицаРезультат.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево")); + + Для Каждого СтрокаТаблицыРезультата Из ТаблицаРезультат Цикл + + СтрокаТаблицы = ОбщаяТаблица.Найти(СтрокаТаблицыРезультата.УникальныйИдентификаторСсылки, "УникальныйИдентификаторСсылки"); + + СтрокаТаблицыРезультата.Представление = СтрокаТаблицы.Представление; + + КонецЦикла; + + СинхронизироватьПризнакИспользованияВТаблицах(Форма[ИмяТабличнойЧасти], ТаблицаРезультат); + + ТаблицаРезультат.Сортировать("Представление"); + + Форма[ИмяТабличнойЧасти].Загрузить(ТаблицаРезультат); + + КонецЦикла; + + // Объединение таблиц данных Этой базы + Для Каждого ИмяТабличнойЧасти Из ТабличныеЧастиПланаОбмена["ТаблицыЭтойБазы"] Цикл + + Если ИменаРеквизитовФормы.Найти(ИмяТабличнойЧасти) = Неопределено Тогда + Продолжить; + КонецЕсли; + + ТаблицаРезультат = ДанныеЭтойИнформационнойБазы[ИмяТабличнойЧасти].Скопировать(); + ТаблицаРезультат.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево")); + + СинхронизироватьПризнакИспользованияВТаблицах(Форма[ИмяТабличнойЧасти], ТаблицаРезультат); + + Форма[ИмяТабличнойЧасти].Загрузить(ТаблицаРезультат); + + КонецЦикла; + + // Объединение таблиц данных Корреспондента + Для Каждого ИмяТабличнойЧасти Из ТабличныеЧастиПланаОбмена["ТаблицыКорреспондента"] Цикл + + Если ИменаРеквизитовФормы.Найти(ИмяТабличнойЧасти) = Неопределено Тогда + Продолжить; + КонецЕсли; + + ТаблицаРезультат = ДанныеКорреспондента[ИмяТабличнойЧасти].Скопировать(); + ТаблицаРезультат.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево")); + + СинхронизироватьПризнакИспользованияВТаблицах(Форма[ИмяТабличнойЧасти], ТаблицаРезультат); + + Форма[ИмяТабличнойЧасти].Загрузить(ТаблицаРезультат); + + КонецЦикла; + +КонецПроцедуры + +Процедура СинхронизироватьПризнакИспользованияВТаблицах(ТаблицаФормы, ТаблицаРезультат) + + Если ТаблицаФормы.Количество() = 0 Тогда + + // При первом обращении к таблице устанавливаем все флажки + ТаблицаРезультат.ЗаполнитьЗначения(Истина, "Использовать"); + + Иначе + + // Если имеется предыдущий контекст таблицы, то используем этот контекст для задания флажков. + ТаблицаПредыдущегоКонтекста = ТаблицаФормы.Выгрузить(Новый Структура("Использовать", Истина), "УникальныйИдентификаторСсылки"); + + ТаблицаРезультат.ЗаполнитьЗначения(Ложь, "Использовать"); + + Для Каждого СтрокаТаблицыКонтекста Из ТаблицаПредыдущегоКонтекста Цикл + + СтрокаТаблицы = ТаблицаРезультат.Найти(СтрокаТаблицыКонтекста.УникальныйИдентификаторСсылки, "УникальныйИдентификаторСсылки"); + + Если СтрокаТаблицы <> Неопределено Тогда + + СтрокаТаблицы.Использовать = Истина; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗагрузитьКонтекстВФорму(Форма, Контекст) + + // Заполняем форму данными + Реквизиты = Форма.ПолучитьРеквизиты(); + + Если Контекст <> Неопределено Тогда + + Для Каждого Реквизит Из Реквизиты Цикл + + Если Контекст.Свойство(Реквизит.Имя) Тогда + + Если ТипЗнч(Форма[Реквизит.Имя]) = Тип("ДанныеФормыКоллекция") Тогда + + Если Контекст[Реквизит.Имя].Количество() = 0 Тогда + + Форма[Реквизит.Имя].Очистить(); + + Иначе + + Таблица = Новый ТаблицаЗначений; + + Для Каждого Элемент Из Контекст[Реквизит.Имя][0] Цикл + + Таблица.Колонки.Добавить(Элемент.Ключ); + + КонецЦикла; + + Для Каждого СтрокаТаблицы Из Контекст[Реквизит.Имя] Цикл + + ЗаполнитьЗначенияСвойств(Таблица.Добавить(), СтрокаТаблицы); + + КонецЦикла; + + Форма[Реквизит.Имя].Загрузить(Таблица); + + КонецЕсли; + + Иначе + + Форма[Реквизит.Имя] = Контекст[Реквизит.Имя]; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + // Получаем описание структуры данных формы + РеквизитыСтрокой = Новый Массив; + + Для Каждого Реквизит Из Реквизиты Цикл + + Если ТипЗнч(Форма[Реквизит.Имя]) = Тип("ДанныеФормыКоллекция") Тогда + + Таблица = Форма[Реквизит.Имя].Выгрузить(); + + Колонки = Новый Массив; + Колонки.Добавить(Реквизит.Имя); + + Для Каждого Колонка Из Таблица.Колонки Цикл + + Колонки.Добавить(Колонка.Имя); + + КонецЦикла; + + РеквизитыСтрокой.Добавить(СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(Колонки, ".")); + + Иначе + + РеквизитыСтрокой.Добавить(Реквизит.Имя); + + КонецЕсли; + + КонецЦикла; + + Форма.Реквизиты = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(РеквизитыСтрокой); + +КонецПроцедуры + +Процедура ВнешнееСоединениеОбновитьНастройкиОбменаДанными(Знач ИмяПланаОбмена, Знач КодУзла, Знач ЗначенияПоУмолчаниюНаУзле) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла); + + Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + Сообщение = НСтр("ru = 'Не найден узел плана обмена; имя плана обмена %1; код узла %2'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ИмяПланаОбмена, КодУзла); + ВызватьИсключение Сообщение; + КонецЕсли; + + ПомощникСозданияОбменаДанными = Обработки.ПомощникСозданияОбменаДанными.Создать(); + ПомощникСозданияОбменаДанными.УзелИнформационнойБазы = УзелИнформационнойБазы; + ПомощникСозданияОбменаДанными.ВнешнееСоединениеОбновитьНастройкиОбменаДанными(ЗначенияПоУмолчаниюНаУзле); + +КонецПроцедуры + +// Только для внутреннего использования +Функция ДанныеДляТабличныхЧастейУзловЭтойИнформационнойБазы(Знач ИмяПланаОбмена) Экспорт + + Результат = Новый Структура; + + ОбщиеТаблицыУзлов = ОбменДаннымиПовтИсп.ТабличныеЧастиПланаОбмена(ИмяПланаОбмена)["ВсеТаблицыЭтойБазы"]; + + Для Каждого ИмяТабличнойЧасти Из ОбщиеТаблицыУзлов Цикл + + ДанныеТабличнойЧасти = Новый ТаблицаЗначений; + ДанныеТабличнойЧасти.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + ДанныеТабличнойЧасти.Колонки.Добавить("УникальныйИдентификаторСсылки", Новый ОписаниеТипов("Строка")); + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | Таблица.Ссылка КАК Ссылка, + | Таблица.Представление КАК Представление + |ИЗ + | [ИмяТаблицы] КАК Таблица + | + |ГДЕ + | НЕ Таблица.ПометкаУдаления + | + |УПОРЯДОЧИТЬ ПО + | Таблица.Представление"; + + ИмяТаблицы = ИмяТаблицыИзПервогоРеквизитаТабличнойЧастиПланаОбмена(ИмяПланаОбмена, ИмяТабличнойЧасти); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяТаблицы]", ИмяТаблицы); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + СтрокаТаблицы = ДанныеТабличнойЧасти.Добавить(); + СтрокаТаблицы.Представление = Выборка.Представление; + СтрокаТаблицы.УникальныйИдентификаторСсылки = Строка(Выборка.Ссылка.УникальныйИдентификатор()); + + КонецЦикла; + + Результат.Вставить(ИмяТабличнойЧасти, ДанныеТабличнойЧасти); + + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ОбщиеДанныеУзловКорреспондента(Знач ИмяПланаОбмена, Знач ПараметрыПодключения, Отказ) + + Если ПараметрыПодключения.ТипСоединения = "ВнешнееСоединение" Тогда + + СтрокаСообщенияОбОшибке = ""; + + ВнешнееСоединение = ОбменДаннымиПовтИсп.УстановитьВнешнееСоединение(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + + Если ВнешнееСоединение = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщенияОбОшибке,,,, Отказ); + Возврат Неопределено; + КонецЕсли; + + // ============================ {Начало} + Если ПараметрыПодключения.ВерсияКорреспондента_2_0_1_6 Тогда + + Возврат ОбщегоНазначения.ЗначениеИзСтрокиXML(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьОбщиеДанныеУзлов_2_0_1_6(ИмяПланаОбмена)); + + Иначе + + Возврат ЗначениеИзСтрокиВнутр(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьОбщиеДанныеУзлов(ИмяПланаОбмена)); + + КонецЕсли; + // ============================ {Окончание} + + ИначеЕсли ПараметрыПодключения.ТипСоединения = "ВебСервис" Тогда + + СтрокаСообщенияОбОшибке = ""; + + Если ПараметрыПодключения.ВерсияКорреспондента_2_0_1_6 Тогда + WSПрокси = ОбменДаннымиПовтИсп.ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + Иначе + WSПрокси = ОбменДаннымиПовтИсп.ПолучитьWSПрокси(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + КонецЕсли; + + Если WSПрокси = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщенияОбОшибке,,,, Отказ); + Возврат Неопределено; + КонецЕсли; + + Если ПараметрыПодключения.ВерсияКорреспондента_2_0_1_6 Тогда + + Возврат СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetCommonNodsData(ИмяПланаОбмена)); + Иначе + + Возврат ЗначениеИзСтрокиВнутр(WSПрокси.GetCommonNodsData(ИмяПланаОбмена)); + КонецЕсли; + + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +Функция ИмяТаблицыИзПервогоРеквизитаТабличнойЧастиПланаОбмена(Знач ИмяПланаОбмена, Знач ИмяТабличнойЧасти) + + ТабличнаяЧасть = Метаданные.ПланыОбмена[ИмяПланаОбмена].ТабличныеЧасти[ИмяТабличнойЧасти]; + + Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл + + Тип = Реквизит.Тип.Типы()[0]; + + Если ОбщегоНазначения.ЭтоСсылка(Тип) Тогда + + Возврат Метаданные.НайтиПоТипу(Тип).ПолноеИмя(); + + КонецЕсли; + + КонецЦикла; + + Возврат ""; +КонецФункции + +Функция СправочникиПланаОбмена(Знач ИмяПланаОбмена) Экспорт + + Результат = Новый Массив; + + СоставПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Состав; + + Для Каждого Элемент Из СоставПланаОбмена Цикл + + Если ОбщегоНазначения.ЭтоСправочник(Элемент.Метаданные) + ИЛИ ОбщегоНазначения.ЭтоПланВидовХарактеристик(Элемент.Метаданные) Тогда + + Результат.Добавить(Элемент.Метаданные); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ВсеДанныеПланаОбменаКромеСправочников(Знач ИмяПланаОбмена) Экспорт + + Результат = Новый Массив; + + СоставПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Состав; + + Для Каждого Элемент Из СоставПланаОбмена Цикл + + Если Не (ОбщегоНазначения.ЭтоСправочник(Элемент.Метаданные) + ИЛИ ОбщегоНазначения.ЭтоПланВидовХарактеристик(Элемент.Метаданные)) Тогда + + Результат.Добавить(Элемент.Метаданные); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция НастройкиПараметровУчетаВСистемеУстановлены(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке) Экспорт + + Если ПустаяСтрока(КодУзла) Тогда + Возврат Ложь; + КонецЕсли; + + УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла); + + Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + Сообщение = НСтр("ru = 'Не найден узел плана обмена; имя плана обмена %1; код узла %2'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ИмяПланаОбмена, КодУзла); + ВызватьИсключение Сообщение; + КонецЕсли; + + Отказ = Ложь; + + ПланыОбмена[ИмяПланаОбмена].ОбработчикПроверкиПараметровУчета(Отказ, УзелИнформационнойБазы, СообщениеОбОшибке); + + Возврат Не Отказ; +КонецФункции + +Функция ПолучитьПараметрыИнформационнойБазы(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке) Экспорт + + Возврат ЗначениеВСтрокуВнутр(ПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке)); + +КонецФункции + +Функция ПолучитьПараметрыИнформационнойБазы_2_0_1_6(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке) Экспорт + + Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(ПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке)); + +КонецФункции + +Функция СвойстваОбъектаМетаданных(Знач ПолноеИмяТаблицы) Экспорт + + Результат = Новый Структура("Синоним, Иерархический"); + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяТаблицы); + + ЗаполнитьЗначенияСвойств(Результат, ОбъектМетаданных); + + Возврат Результат; +КонецФункции + +Функция ПолучитьОбъектыТаблицы(Знач ПолноеИмяТаблицы) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяТаблицы); + + Если ОбщегоНазначения.ЭтоСправочник(ОбъектМетаданных) Тогда + + Если ОбъектМетаданных.Иерархический Тогда + + Если ОбъектМетаданных.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда + + Возврат ОбменДаннымиПовтИсп.ПолучитьЭлементыИерархическогоСправочникаИерархияГруппИЭлементов(ПолноеИмяТаблицы); + + Иначе + + Возврат ОбменДаннымиПовтИсп.ПолучитьЭлементыИерархическогоСправочникаИерархияЭлементов(ПолноеИмяТаблицы); + + КонецЕсли; + + Иначе + + Возврат ОбменДаннымиПовтИсп.ПолучитьЭлементыНеиерархическогоСправочника(ПолноеИмяТаблицы); + + КонецЕсли; + + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +Функция ПараметрыИнформационнойБазы(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Результат = Новый Структура("ПланОбменаСуществует, ПрефиксИнформационнойБазы, ПрефиксИнформационнойБазыПоУмолчанию, + |НаименованиеИнформационнойБазы, НаименованиеИнформационнойБазыПоУмолчанию, НастройкиПараметровУчетаЗаданы, КодЭтогоУзла" + ); + + Результат.ПланОбменаСуществует = (Метаданные.ПланыОбмена.Найти(ИмяПланаОбмена) <> Неопределено); + + Если Результат.ПланОбменаСуществует Тогда + + СвойстваЭтогоУзла = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ПланыОбмена[ИмяПланаОбмена].ЭтотУзел(), "Код, Наименование"); + + Результат.ПрефиксИнформационнойБазы = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); + Результат.ПрефиксИнформационнойБазыПоУмолчанию = ОбменДаннымиПереопределяемый.ПрефиксИнформационнойБазыПоУмолчанию(); + Результат.НаименованиеИнформационнойБазы = СвойстваЭтогоУзла.Наименование; + Результат.НаименованиеИнформационнойБазыПоУмолчанию = НаименованиеЭтогоУзлаПоУмолчанию(); + Результат.НастройкиПараметровУчетаЗаданы = НастройкиПараметровУчетаВСистемеУстановлены(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке); + Результат.КодЭтогоУзла = СвойстваЭтогоУзла.Код; + + Иначе + + Результат.ПрефиксИнформационнойБазы = ""; + Результат.ПрефиксИнформационнойБазыПоУмолчанию = ""; + Результат.НаименованиеИнформационнойБазы = ""; + Результат.НаименованиеИнформационнойБазыПоУмолчанию = ""; + Результат.НастройкиПараметровУчетаЗаданы = Ложь; + Результат.КодЭтогоУзла = ""; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ПолучитьДеревоИнформацииСтатистики(ИнформацияСтатистики) Экспорт + + ОтборМассив = ИнформацияСтатистики.ВыгрузитьКолонку("ИмяТаблицыПриемника"); + + ОтборСтрока = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(ОтборМассив); + + Отбор = Новый Структура("ПолноеИмя", ОтборСтрока); + + // получаем дерево объектов метаданных конфигурации + ДеревоИнформацииСтатистики = ОбменДаннымиПовтИсп.ПолучитьДеревоМетаданныхКонфигурации(Отбор).Скопировать(); + + // добавляем колонки + ДеревоИнформацииСтатистики.Колонки.Добавить("Ключ"); + ДеревоИнформацииСтатистики.Колонки.Добавить("КоличествоОбъектовВИсточнике"); + ДеревоИнформацииСтатистики.Колонки.Добавить("КоличествоОбъектовВПриемнике"); + ДеревоИнформацииСтатистики.Колонки.Добавить("КоличествоОбъектовНесопоставленных"); + ДеревоИнформацииСтатистики.Колонки.Добавить("ПроцентСопоставленияОбъектов"); + ДеревоИнформацииСтатистики.Колонки.Добавить("ИндексКартинки"); + ДеревоИнформацииСтатистики.Колонки.Добавить("ИспользоватьПредварительныйПросмотр"); + ДеревоИнформацииСтатистики.Колонки.Добавить("ИмяТаблицыПриемника"); + ДеревоИнформацииСтатистики.Колонки.Добавить("ТипОбъектаСтрокой"); + ДеревоИнформацииСтатистики.Колонки.Добавить("ПоляТаблицы"); + ДеревоИнформацииСтатистики.Колонки.Добавить("ПоляПоиска"); + ДеревоИнформацииСтатистики.Колонки.Добавить("ТипИсточникаСтрокой"); + ДеревоИнформацииСтатистики.Колонки.Добавить("ТипПриемникаСтрокой"); + ДеревоИнформацииСтатистики.Колонки.Добавить("ЭтоУдалениеОбъекта"); + ДеревоИнформацииСтатистики.Колонки.Добавить("ДанныеУспешноЗагружены"); + + ИнформацияСтатистикиОбычныеОбъекты = ИнформацияСтатистики.Скопировать(Новый Структура("ОдинКоМногим, ЭтоУдалениеОбъекта", Ложь, Ложь)); + + // заполняем обычные строки + Для Каждого СтрокаТаблицы Из ИнформацияСтатистикиОбычныеОбъекты Цикл + + СтрокаДерева = ДеревоИнформацииСтатистики.Строки.Найти(СтрокаТаблицы.ИмяТаблицыПриемника, "ПолноеИмя", Истина); + + ЗаполнитьЗначенияСвойств(СтрокаДерева, СтрокаТаблицы); + + КонецЦикла; + + // добавляем строки с типом "ОдинКоМногим" + Отбор = Новый Структура("ОдинКоМногим", Истина); + ЗаполнитьДеревоИнформацииСтатистикиОдинКоМногим(ДеревоИнформацииСтатистики, ИнформацияСтатистики, Отбор); + + // добавляем строки удаления объектов + Отбор = Новый Структура("ЭтоУдалениеОбъекта", Истина); + ЗаполнитьДеревоИнформацииСтатистикиОдинКоМногим(ДеревоИнформацииСтатистики, ИнформацияСтатистики, Отбор); + + Возврат ДеревоИнформацииСтатистики; +КонецФункции + +Процедура ЗаполнитьДеревоИнформацииСтатистикиОдинКоМногим(ДеревоИнформацииСтатистики, ИнформацияСтатистики, Отбор) + + ИнформацияСтатистикиОдинКоМногим = ИнформацияСтатистики.Скопировать(Отбор); + + Если ИнформацияСтатистикиОдинКоМногим.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ИнформацияСтатистикиОдинКоМногимВременная = ИнформацияСтатистикиОдинКоМногим.Скопировать(, "ИмяТаблицыПриемника"); + ИнформацияСтатистикиОдинКоМногимВременная.Свернуть("ИмяТаблицыПриемника"); + + Для Каждого СтрокаТаблицы Из ИнформацияСтатистикиОдинКоМногимВременная Цикл + + Строки = ИнформацияСтатистикиОдинКоМногим.НайтиСтроки(Новый Структура("ИмяТаблицыПриемника", СтрокаТаблицы.ИмяТаблицыПриемника)); + + СтрокаДерева = ДеревоИнформацииСтатистики.Строки.Найти(СтрокаТаблицы.ИмяТаблицыПриемника, "ПолноеИмя", Истина); + + Для Каждого Строка Из Строки Цикл + + НоваяСтрокаДерева = СтрокаДерева.Строки.Добавить(); + + ЗаполнитьЗначенияСвойств(НоваяСтрокаДерева, СтрокаДерева); + ЗаполнитьЗначенияСвойств(НоваяСтрокаДерева, Строка); + + Если Строка.ЭтоУдалениеОбъекта Тогда + + НоваяСтрокаДерева.Картинка = БиблиотекаКартинок.ПометитьНаУдаление; + + Иначе + + Синоним = "[СинонимТаблицыПриемника] ([ИмяТаблицыИсточника])"; + Синоним = СтрЗаменить(Синоним, "[СинонимТаблицыПриемника]", НоваяСтрокаДерева.Синоним); + Синоним = СтрЗаменить(Синоним, "[ИмяТаблицыИсточника]", УдалитьИмяКлассаИзИмениОбъекта(Строка.ТипИсточникаСтрокой)); + + НоваяСтрокаДерева.Синоним = Синоним; + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +Функция УдалитьИмяКлассаИзИмениОбъекта(Знач Результат) + + Результат = СтрЗаменить(Результат, "ДокументСсылка.", ""); + Результат = СтрЗаменить(Результат, "СправочникСсылка.", ""); + Результат = СтрЗаменить(Результат, "ПланВидовХарактеристикСсылка.", ""); + Результат = СтрЗаменить(Результат, "ПланСчетовСсылка.", ""); + Результат = СтрЗаменить(Результат, "ПланВидовРасчетаСсылка.", ""); + Результат = СтрЗаменить(Результат, "БизнесПроцессСсылка.", ""); + Результат = СтрЗаменить(Результат, "ЗадачаСсылка.", ""); + + Возврат Результат; +КонецФункции + +// Добавляет параметры работы клиентской логики для подсистемы обмена данными +// +Процедура ДобавитьПараметрыРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Параметры.Вставить("ЭтоПодчиненныйУзелРИБ", ЭтоПодчиненныйУзелРИБ()); + Параметры.Вставить("ИмяПланаОбменаРИБ", ?(Параметры.ЭтоПодчиненныйУзелРИБ, ПланыОбмена.ГлавныйУзел().Метаданные().Имя, "")); + Параметры.Вставить("НастройкаПодчиненногоУзлаРИБЗавершена", Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить()); + +КонецПроцедуры + +Процедура ВыполнитьПроверкуНаличияПравилОбменаЗагруженныхИзФайла(ПравилаОбменаЗагруженныеИзФайла, ПравилаРегистрацииЗагруженныеИзФайла) + + ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПравилаДляОбменаДанными.ИмяПланаОбмена КАК ИмяПланаОбмена, + | ПравилаДляОбменаДанными.ВидПравил КАК ВидПравил + |ИЗ + | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными + |ГДЕ + | ПравилаДляОбменаДанными.ИсточникПравил = ЗНАЧЕНИЕ(Перечисление.ИсточникиПравилДляОбменаДанными.Файл) + | И ПравилаДляОбменаДанными.ПравилаЗагружены"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + + ПланыОбменаМассив = Новый Массив; + + Выборка = Результат.Выбрать(); + + Пока Выборка.Следующий() Цикл + + Если Выборка.ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов Тогда + + ПравилаОбменаЗагруженныеИзФайла.Добавить(Выборка.ИмяПланаОбмена); + + ИначеЕсли Выборка.ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаРегистрацииОбъектов Тогда + + ПравилаРегистрацииЗагруженныеИзФайла.Добавить(Выборка.ИмяПланаОбмена); + + КонецЕсли; + + Если ПланыОбменаМассив.Найти(Выборка.ИмяПланаОбмена) = Неопределено Тогда + + ПланыОбменаМассив.Добавить(Выборка.ИмяПланаОбмена); + + КонецЕсли; + + КонецЦикла; + + СтрокаСообщения = НСтр("ru = 'Для плана(ов) обмена %1 используются правила обмена, загруженные из файла. + |Эти правила могут быть несовместимы с новой версией программы. + |Для предупреждения возможного возникновения ошибок при работе с программой рекомендуется актуализировать правила обмена из файла.'" + ); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(ПланыОбменаМассив)); + + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщения); + + КонецЕсли; + +КонецПроцедуры + +// Выполняет проверку подключения обработки транспорта по заданным настройкам. +// +Процедура ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, СтруктураНастроек, ВидТранспорта, СообщениеОбОшибке = "") Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // создаем экземпляр объекта обработки + ОбработкаОбъект = Обработки[ИмяОбработкиТранспортаСообщенийОбмена(ВидТранспорта)].Создать(); + + // инициализация свойств обработки переданными параметрами настроек + ЗаполнитьЗначенияСвойств(ОбработкаОбъект, СтруктураНастроек); + + // Инициализация транспорта обмена + ОбработкаОбъект.Инициализация(); + + // выполняем проверку подключения + Если Не ОбработкаОбъект.ПодключениеУстановлено() Тогда + + ШаблонСообщения = "%1 + |%2"; + // + + ДополнительноеСообщение = НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); + + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ОбработкаОбъект.СтрокаСообщенияОбОшибке, ДополнительноеСообщение); + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке,,,, Отказ); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Транспорт сообщений обмена'"), УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОбъект.СтрокаСообщенияОбОшибкеЖР); + + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ, СтруктураНастроек, ОшибкаПодключенияКомпоненты = Ложь) Экспорт + + СтрокаСообщенияОбОшибке = ""; + + // выполняем попытку установки внешнего соединения + ВнешнееСоединение = УстановитьВнешнееСоединение(СтруктураНастроек, СтрокаСообщенияОбОшибке, ОшибкаПодключенияКомпоненты); + + Если ВнешнееСоединение = Неопределено Тогда + + // Выводим сообщение об ошибке + Сообщение = НСтр("ru = 'Ошибка при установке подключения ко второй информационной базе: %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, СтрокаСообщенияОбОшибке); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение,,,, Отказ); + + КонецЕсли; + +КонецПроцедуры + +Функция УстановитьВнешнееСоединение(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", ОшибкаПодключенияКомпоненты = Ложь) Экспорт + + // выполняем попытку установки внешнего соединения + ВнешнееСоединение = ОбщегоНазначения.УстановитьВнешнееСоединение(ЗаполнитьПараметрыПодключенияВнешнегоСоединения(СтруктураНастроек), СтрокаСообщенияОбОшибке, ОшибкаПодключенияКомпоненты); + + Если ВнешнееСоединение = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Попытка + + Если Не ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.РольДоступнаПолныеПрава() Тогда + + СтрокаСообщенияОбОшибке = НСтр("ru = 'Для пользователя внешнего соединения должна быть указана роль ""Полные права"".'"); + Возврат Неопределено; + КонецЕсли; + Исключение + + СтрокаСообщенияОбОшибке = НСтр("ru = 'Вторая информационная база не предназначена для обмена с текущей информационной базой.'"); + Возврат Неопределено; + КонецПопытки; + + Возврат ВнешнееСоединение; + +КонецФункции + +Функция ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке = "") Экспорт + + МестоположениеWSDL = "[URLВебСервиса]/ws/[ИмяСервиса]?wsdl"; + МестоположениеWSDL = СтрЗаменить(МестоположениеWSDL, "[URLВебСервиса]", СтруктураНастроек.WSURLВебСервиса); + МестоположениеWSDL = СтрЗаменить(МестоположениеWSDL, "[ИмяСервиса]", СтруктураНастроек.WSИмяСервиса); + + Попытка + Определение = Новый WSОпределения( + МестоположениеWSDL, + СтруктураНастроек.WSИмяПользователя, + СтруктураНастроек.WSПароль); + + WSПрокси = Новый WSПрокси( + Определение, + СтруктураНастроек.WSURLПространстваИменСервиса, + СтруктураНастроек.WSИмяСервиса, + СтруктураНастроек.WSИмяСервиса + "Soap"); + + WSПрокси.Пользователь = СтруктураНастроек.WSИмяПользователя; + WSПрокси.Пароль = СтруктураНастроек.WSПароль; + Исключение + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + Возврат Неопределено; + КонецПопытки; + + Возврат WSПрокси; +КонецФункции + +Функция ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке = "") Экспорт + + СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/Exchange"); + СтруктураНастроек.Вставить("WSИмяСервиса", "Exchange"); + + Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке); +КонецФункции + +Функция ПолучитьWSПрокси_2_0_1_6(СтруктураНастроек, СтрокаСообщенияОбОшибке = "") Экспорт + + СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/Exchange_2_0_1_6"); + СтруктураНастроек.Вставить("WSИмяСервиса", "Exchange_2_0_1_6"); + + Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке); +КонецФункции + +Функция СтруктураПараметровWS() Экспорт + + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("WSURLВебСервиса"); + СтруктураПараметров.Вставить("WSИмяПользователя"); + СтруктураПараметров.Вставить("WSПароль"); + + Возврат СтруктураПараметров; +КонецФункции + +// Выводит сообщение об ошибке и выставляет параметр Отказ в "Истина". +// +// Параметры: +// ТекстСообщения - строка, текст сообщения. +// Отказ - булево, признак отказа (необязательный). +// +Процедура СообщитьОбОшибке(ТекстСообщения, Отказ = Ложь) Экспорт + + Отказ = Истина; + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + +КонецПроцедуры + +// Получает таблицу правил выборочной регистрации объектов из параметров сеанса. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// Таблица значений - таблица реквизитов регистрации для всех объектов метаданных +// +Функция ПолучитьПравилаВыборочнойРегистрацииОбъектовПС() Экспорт + + Возврат ОбменДаннымиПовтИсп.ПолучитьПравилаВыборочнойРегистрацииОбъектовПС(); + +КонецФункции + +// Добавляет одну запись в регистр сведений по переданным значениям структуры +// +// Параметры: +// СтруктураЗаписи - Структура - структура, по значениям которой необходимо создать набор записей и заполнить этот набор +// ИмяРегистра - Строка - имя регистра сведений, в который необходимо добавить запись +// +Процедура ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, Знач ИмяРегистра, Загрузка = Ложь) Экспорт + + НаборЗаписей = СоздатьНаборЗаписейРегистраСведений(СтруктураЗаписи, ИмяРегистра); + + // добавляем только одну запись в новый набор записей + НоваяЗапись = НаборЗаписей.Добавить(); + + // заполняем значения свойств записи из переданной структуры + ЗаполнитьЗначенияСвойств(НоваяЗапись, СтруктураЗаписи); + + НаборЗаписей.ОбменДанными.Загрузка = Загрузка; + + // записываем набор записей + НаборЗаписей.Записать(); + +КонецПроцедуры + +// Обновляет запись в регистр сведений по переданным значениям структуры +// +// Параметры: +// СтруктураЗаписи - Структура - структура, по значениям которой необходимо создать менеджер записи и обновить запись +// ИмяРегистра - Строка - имя регистра сведений, в котором необходимо обновить запись +// +Процедура ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, Знач ИмяРегистра) Экспорт + + МетаданныеРегистра = Метаданные.РегистрыСведений[ИмяРегистра]; + + // создаем менеджер записи регистра + МенеджерЗаписи = РегистрыСведений[ИмяРегистра].СоздатьМенеджерЗаписи(); + + // устанавливаем отбор по измерениям регистра + Для Каждого Измерение ИЗ МетаданныеРегистра.Измерения Цикл + + // если задано значение в структуре, то отбор устанавливаем + Если СтруктураЗаписи.Свойство(Измерение.Имя) Тогда + + МенеджерЗаписи[Измерение.Имя] = СтруктураЗаписи[Измерение.Имя]; + + КонецЕсли; + + КонецЦикла; + + // считываем запись из базы данных + МенеджерЗаписи.Прочитать(); + + // заполняем значения свойств записи из переданной структуры + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, СтруктураЗаписи); + + // записываем менеджер записи + МенеджерЗаписи.Записать(); + +КонецПроцедуры + +// Удаляет набор записей в регистре по переданным значениям структуры +// +// Параметры: +// СтруктураЗаписи - Структура - структура, по значениям которой необходимо удалить набор записей +// ИмяРегистра - Строка - имя регистра сведений, в котором необходимо удалить набор записей +// +Процедура УдалитьНаборЗаписейВРегистреСведений(СтруктураЗаписи, ИмяРегистра, Загрузка = Ложь) Экспорт + + НаборЗаписей = СоздатьНаборЗаписейРегистраСведений(СтруктураЗаписи, ИмяРегистра); + + НаборЗаписей.ОбменДанными.Загрузка = Загрузка; + + // записываем набор записей + НаборЗаписей.Записать(); + +КонецПроцедуры + +// Выполняет загрузку правил для обмена данными (ПРО или ПКО) в ИБ. +// +Процедура ЗагрузитьПравилаДляОбменаДанными(Отказ, + Знач ИмяПланаОбмена, + Знач ВидПравил, + Знач ИмяМакетаПравил + ) + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + СтруктураЗаписи.Вставить("ВидПравил", ВидПравил); + СтруктураЗаписи.Вставить("ИмяМакетаПравил", ИмяМакетаПравил); + СтруктураЗаписи.Вставить("ИсточникПравил", Перечисления.ИсточникиПравилДляОбменаДанными.МакетКонфигурации); + СтруктураЗаписи.Вставить("ИспользоватьФильтрВыборочнойРегистрацииОбъектов", Истина); + + // получаем набор записей регистра + НаборЗаписей = СоздатьНаборЗаписейРегистраСведений(СтруктураЗаписи, "ПравилаДляОбменаДанными"); + + // добавляем только одну запись в новый набор записей + НоваяЗапись = НаборЗаписей.Добавить(); + + // заполняем значения свойств записи из структуры + ЗаполнитьЗначенияСвойств(НоваяЗапись, СтруктураЗаписи); + + // Загружаем правила для обмена данными в ИБ + РегистрыСведений.ПравилаДляОбменаДанными.ЗагрузитьПравила(Отказ, НаборЗаписей[0]); + + Если Не Отказ Тогда + НаборЗаписей.Записать(); + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьОбновлениеВерсииТиповыхПравилДляОбменаДанными(Отказ, ПравилаОбменаЗагруженныеИзФайла, ПравилаРегистрацииЗагруженныеИзФайла) + + ПланыОбменаБСП = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); + + Для Каждого ИмяПланаОбмена Из ПланыОбменаБСП Цикл + + Если ПравилаОбменаЗагруженныеИзФайла.Найти(ИмяПланаОбмена) = Неопределено + И ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбмена") Тогда + + ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов, "ПравилаОбмена"); + + КонецЕсли; + + Если ПравилаРегистрацииЗагруженныеИзФайла.Найти(ИмяПланаОбмена) = Неопределено + И ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаРегистрации") Тогда + + ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, Перечисления.ВидыПравилДляОбменаДанными.ПравилаРегистрацииОбъектов, "ПравилаРегистрации"); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Создает набор записей регистра сведений по переданным значениям структуры. Добавляет одну запись в набор +// +// Параметры: +// СтруктураЗаписи - Структура - структура по значениям которой необходимо создать набор записей и заполнить этот набор +// ИмяРегистра - Строка - имя регистра сведений +// +Функция СоздатьНаборЗаписейРегистраСведений(СтруктураЗаписи, ИмяРегистра) Экспорт + + МетаданныеРегистра = Метаданные.РегистрыСведений[ИмяРегистра]; + + // создаем набор записей регистра + НаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); + + // устанавливаем отбор по измерениям регистра + Для Каждого Измерение ИЗ МетаданныеРегистра.Измерения Цикл + + // если задано значение в структуре, то отбор устанавливаем + Если СтруктураЗаписи.Свойство(Измерение.Имя) Тогда + + НаборЗаписей.Отбор[Измерение.Имя].Установить(СтруктураЗаписи[Измерение.Имя]); + + КонецЕсли; + + КонецЦикла; + + Возврат НаборЗаписей; +КонецФункции + +// Получает индекс картинки для вывода в таблице статистики сопоставления объектов +// +Функция ИндексКартинкиТаблицыИнформацииСтатистики(Знач КоличествоОбъектовНесопоставленных, Знач ДанныеУспешноЗагружены) Экспорт + + Возврат ?(КоличествоОбъектовНесопоставленных = 0, ?(ДанныеУспешноЗагружены = Истина, 2, 0), 1); + +КонецФункции + +// Проверяет признак того, что правила обмена загружены для заданного плана обмена +// +// Возвращаемое значение: +// Тип: Булево. Истина – привила обмена загружены в ИБ; Ложь – нет. +// +Функция ПравилаКонвертацииОбъектовДляПланаОбменаЗагружены(Знач ИмяПланаОбмена) Экспорт + + ТекстЗапроса = " + |ВЫБРАТЬ ПЕРВЫЕ 1 1 + |ИЗ + | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными + |ГДЕ + | ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) + | И ПравилаДляОбменаДанными.ПравилаЗагружены + | И ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена + |"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); + + Возврат Не Запрос.Выполнить().Пустой(); +КонецФункции + +// Выполняет проверку того, что размер файла сообщения обмена превышает допустимый размер. +// +// Возвращаемое значение: +// Тип: Булево. Истина – размер файла больше допустимого; Ложь – размер файла не превышает допустимого размера. +// +Функция РазмерСообщенияОбменаПревышаетДопустимый(Знач ИмяФайла, Знач МаксимальныйДопустимыйРазмерСообщения) Экспорт + + // возвращаемое значение функции + Результат = Ложь; + + Файл = Новый Файл(ИмяФайла); + + Если Файл.Существует() И Файл.ЭтоФайл() Тогда + + Если МаксимальныйДопустимыйРазмерСообщения <> 0 Тогда + + РазмерПакета = Окр(Файл.Размер() / 1024, 0, РежимОкругления.Окр15как20); + + Если РазмерПакета > МаксимальныйДопустимыйРазмерСообщения Тогда + + СтрокаСообщения = НСтр("ru = 'Размер исходящего пакета составил %1 Кбайт, что превышает допустимое ограничение %2 Кбайт.'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(РазмерПакета), Строка(МаксимальныйДопустимыйРазмерСообщения)); + СообщитьОбОшибке(СтрокаСообщения, Результат); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция УстановленПризнакНачальнойВыгрузкиДанных(УзелИнформационнойБазы) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановленПризнакНачальнойВыгрузкиДанных(УзелИнформационнойБазы); + +КонецФункции + +Функция ИзмененияЗарегистрированы(УзелИнформационнойБазы) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 1 + |ИЗ + | [Таблица].Изменения КАК ТаблицаИзменений + |ГДЕ + | ТаблицаИзменений.Узел = &Узел"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Узел", УзелИнформационнойБазы); + + УстановитьПривилегированныйРежим(Истина); + + СоставПланаОбмена = Метаданные.ПланыОбмена[ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы)].Состав; + + Для Каждого ЭлементСостава Из СоставПланаОбмена Цикл + + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "[Таблица]", ЭлементСостава.Метаданные.ПолноеИмя()); + + РезультатЗапроса = Запрос.Выполнить(); + + Если Не РезультатЗапроса.Пустой() Тогда + Возврат Истина; + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; +КонецФункции + +Процедура ЗарегистрироватьДанныеДляНачальнойВыгрузки(УзелИнформационнойБазы, Данные = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + СтандартнаяОбработка = Истина; + + ОбменДаннымиПереопределяемый.РегистрацияИзмененийНачальнойВыгрузкиДанных(УзелИнформационнойБазы, СтандартнаяОбработка, Данные); + + Если СтандартнаяОбработка Тогда + + Если ТипЗнч(Данные) = Тип("Массив") Тогда + + Для Каждого ОбъектМетаданных Из Данные Цикл + + ПланыОбмена.ЗарегистрироватьИзменения(УзелИнформационнойБазы, ОбъектМетаданных); + + КонецЦикла; + + Иначе + + ПланыОбмена.ЗарегистрироватьИзменения(УзелИнформационнойБазы, Данные); + + КонецЕсли; + + КонецЕсли; + + Если ОбменДаннымиПовтИсп.ПланОбменаСодержитОбъект(ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы), + Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ПолноеИмя()) Тогда + + ПланыОбмена.УдалитьРегистрациюИзменений(УзелИнформационнойБазы, Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз); + + КонецЕсли; + +КонецПроцедуры + +Функция СостояниеДлительнойОперации(Знач ИдентификаторОперации, + Знач URLВебСервиса, + Знач ИмяПользователя, + Знач Пароль, + СтрокаСообщенияОбОшибке = "" + ) Экспорт + + ПараметрыПодключения = СтруктураПараметровWS(); + ПараметрыПодключения.WSURLВебСервиса = URLВебСервиса; + ПараметрыПодключения.WSИмяПользователя = ИмяПользователя; + ПараметрыПодключения.WSПароль = Пароль; + + WSПрокси = ПолучитьWSПрокси(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + + Если WSПрокси = Неопределено Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + Возврат WSПрокси.GetContinuousOperationStatus(ИдентификаторОперации, СтрокаСообщенияОбОшибке); +КонецФункции + +Функция СостояниеДлительнойОперацииДляУзлаИнформационнойБазы(Знач УзелИнформационнойБазы, + Знач ИдентификаторОперации, + СтрокаСообщенияОбОшибке = "" + ) Экспорт + + WSПрокси = ОбменДаннымиПовтИсп.ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке); + + Если WSПрокси = Неопределено Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + Возврат WSПрокси.GetContinuousOperationStatus(ИдентификаторОперации, СтрокаСообщенияОбОшибке); +КонецФункции + +Функция КаталогВременногоХранилищаФайлов() + + Возврат ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(); + +КонецФункции + +Функция УникальноеИмяФайлаСообщенияОбмена() + + Результат = "Message{GUID}.xml"; + Результат = СтрЗаменить(Результат, "GUID", Строка(Новый УникальныйИдентификатор)); + + Возврат Результат; +КонецФункции + +Функция ЭтоПодчиненныйУзелРИБ() Экспорт + + Возврат ПланыОбмена.ГлавныйУзел() <> Неопределено; + +КонецФункции + +// Возвращает массив номеров версий, поддерживаемых интерфейсом корреспондента для подсистемы ОбменДанными. +// +// Параметры: +// ВнешнееСоединение - объект COM-соединение, которое используется для работы с корреспондентом. +// +// Возвращаемое значение: +// Массив номеров версий, поддерживаемых интерфейсом корреспондента. +// +Функция ВерсииКорреспондентаЧерезВнешнееСоединение(ВнешнееСоединение) Экспорт + + Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейсаЧерезВнешнееСоединение(ВнешнееСоединение, "ОбменДанными"); + +КонецФункции + +Функция ВсеСсылочныеТипыКонфигурации() Экспорт + + Возврат ОбменДаннымиПовтИсп.ВсеСсылочныеТипыКонфигурации(); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ИНИЦИАЛИЗАЦИИ СЕАНСА +// Инициализация сеанса // Получает массив всех планов обмена по которым выполняется обмен данными // Наличие обмена с каким либо планом обмена определяется по наличию у этого плана обмена узлов кроме предопределенного. @@ -3778,7 +5547,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ИНИЦИАЛИЗАЦИИ СТРУКТУРЫ НАСТРОЕК ОБМЕНА ДАННЫМИ +// Инициализация структуры настроек обмена данными // Выполняет инициализацию подсистемы обмена данными для выполнения процесса обмена // @@ -3787,7 +5556,9 @@ // Возвращаемое значение: // СтруктураНастроекОбмена - Структура - структура со всеми необходимыми данными и объектами для выполнения обмена // -Функция ПолучитьСтруктуруНастроекОбменаДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ДействиеПриОбмене, ВидТранспортаСообщенийОбмена, ИспользоватьНастройкиТранспорта = Истина) Экспорт +Функция ПолучитьСтруктуруНастроекОбменаДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ДействиеПриОбмене, + ВидТранспортаСообщенийОбмена, + ИспользоватьНастройкиТранспорта = Истина) Экспорт // возвращаемое значение функции СтруктураНастроекОбмена = СтруктураНастроекОбменаБазовая(); @@ -3956,8 +5727,6 @@ Возврат СтруктураНастроекОбмена; КонецФункции -// - Процедура ВыполнитьИнициализациюСтруктурыНастроекОбмена(СтруктураНастроекОбмена, НастройкаВыполненияОбмена, НомерСтроки) ТекстЗапроса = " @@ -3997,7 +5766,7 @@ СтруктураНастроекОбмена.ЭтоОбменВРИБ = ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(СтруктураНастроекОбмена.УзелИнформационнойБазы); - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = "Обмен данными"; + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = НСтр("ru = 'Обмен данными'"); // выполняем проверку задания основных полей структуры настроек обмена ВыполнитьПроверкуОсновныхПолейСтруктурыНастроекОбмена(СтруктураНастроекОбмена); @@ -4048,6 +5817,13 @@ КонецЕсли; + Если СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.Combi Тогда + + СтруктураНастроекОбмена.ВидТранспортаОбмена = СтруктураНастроекОбмена.НастройкиТранспорта.CombiВидТранспортаСообщенийОбмена; + СтруктураНастроекОбмена.ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений = Ложь; // Выгрузка и чтение файла сообщения обмена будет выполняться напрямую из каталога обмена + + КонецЕсли; + СтруктураНастроекОбмена.ИмяОбработкиТранспортаСообщенийОбмена = ИмяОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена.ВидТранспортаОбмена); КонецЕсли; @@ -4077,6 +5853,12 @@ // получаем ключ сообщения для ЖР СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ДействиеПриОбмене); + Если СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("WSИспользоватьПередачуБольшогоОбъемаДанных") Тогда + + СтруктураНастроекОбмена.ИспользоватьПередачуБольшогоОбъемаДанных = СтруктураНастроекОбмена.НастройкиТранспорта.WSИспользоватьПередачуБольшогоОбъемаДанных; + + КонецЕсли; + КонецПроцедуры Функция СтруктураНастроекОбменаБазовая() @@ -4100,6 +5882,7 @@ СтруктураНастроекОбмена.Вставить("РежимОтладки"); СтруктураНастроекОбмена.Вставить("ПроизводитьЗагрузкуДанных"); СтруктураНастроекОбмена.Вставить("ПроизводитьВыгрузкуДанных"); + СтруктураНастроекОбмена.Вставить("ИспользоватьПередачуБольшогоОбъемаДанных", Ложь); // структура настроек дополнительная СтруктураНастроекОбмена.Вставить("Отказ", Ложь); @@ -4217,8 +6000,6 @@ КонецПроцедуры -// - Процедура ВыполнитьИнициализациюОбработкиОбмена(СтруктураНастроекОбмена) // если настройки содержат ошибки, то не производим инициализацию @@ -4317,8 +6098,6 @@ КонецФункции -// - Процедура УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДанными, СтруктураНастроекОбмена) ОбработкаОбменаДанными.ВыводВОкноСообщенийИнформационныхСообщений = Ложь; @@ -4371,13 +6150,13 @@ УзелОтправитель = ?(ЭтоИсходящееСообщение, ТекущийУзелПланаОбмена, УзелИнформационнойБазы); УзелПолучатель = ?(ЭтоИсходящееСообщение, УзелИнформационнойБазы, ТекущийУзелПланаОбмена); - Возврат ИмяФайлаСообщенияОбмена(ОбщегоНазначения.ПолучитьЗначениеРеквизита(УзелОтправитель, "Код"), - ОбщегоНазначения.ПолучитьЗначениеРеквизита(УзелПолучатель, "Код")); + Возврат ИмяФайлаСообщенияОбмена(СокрЛП(ОбщегоНазначения.ПолучитьЗначениеРеквизита(УзелОтправитель, "Код")), + СокрЛП(ОбщегоНазначения.ПолучитьЗначениеРеквизита(УзелПолучатель, "Код"))); // КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ОБМЕНА ДАННЫМИ ПОД ПОЛНЫМИ ПРАВАМИ +// Обмен данными под полными правами // Обновляет/устанавливает повторно-используемые значения и параметры сеанса для подсистемы обмена данными // @@ -4437,7 +6216,7 @@ // Устанавливает значение константы ДатаОбновленияПовторноИспользуемыхЗначенийМРО // В качестве устанавливаемого значения используется текущая дата компьютера (сервера) // В момент изменения значения этой константы повторно-используемые значения -// для подсистемы обмена данными становятся не актуальными и требуют повторной инициализации. +// для подсистемы обмена данными становятся неактуальными и требуют повторной инициализации. // // Параметры: // Нет. @@ -4446,6 +6225,8 @@ УстановитьПривилегированныйРежим(Истина); // записываем дату и время компьютера сервера - ТекущаяДата() + // метод ТекущаяДатаСеанса() использовать нельзя. + // Текущая дата сервера в данном случае используется в качестве ключа уникальности кэша механизма регистрации объектов. Константы.ДатаОбновленияПовторноИспользуемыхЗначенийМРО.Установить(ТекущаяДата()); КонецПроцедуры @@ -4655,7 +6436,7 @@ // Функция ПолучитьЗначенияСвойствДляСсылки(Ссылка, СвойстваОбъекта, Знач СвойстваОбъектаСтрокой, Знач ОбъектМетаданныхИмя) Экспорт - ЗначенияСвойств = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(СвойстваОбъекта); + ЗначенияСвойств = ОбменДаннымиСобытия.СкопироватьСтруктуру(СвойстваОбъекта); Если ЗначенияСвойств.Количество() = 0 Тогда @@ -4808,7 +6589,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// КОНСТАНТЫ ПОДСИСТЕМЫ ОБМЕНА ДАННЫМИ +// Константы // Функция-свойство: возвращает литерал обозначения строки неограниченной длины. // @@ -4880,15 +6661,8 @@ КонецФункции -Функция WSURLПространстваИменСервиса() Экспорт +Функция СобытиеЖурналаРегистрацииСозданиеОбменаДанными() Экспорт - Возврат "http://www.1c.ru/SSL/Exchange"; + Возврат НСтр("ru = 'Обмен данными.Создание обмена данными'"); КонецФункции - -Функция WSИмяСервиса() Экспорт - - Возврат "Exchange"; - -КонецФункции - diff --git a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl index 98fb0ca8e..05ac3c454 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl @@ -1,5 +1,10 @@ //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ВНЕШНИЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Подсистема "Обмен данными" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Процедура предназначена для определения вида отправки выгружаемого элемента данных // Вызывается из обработчиков планов обмена: ПриОтправкеДанныхГлавному(), ПриОтправкеДанныхПодчиненному() @@ -83,7 +88,146 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции дли использования в обработчиках событий правил регистрации + +// Процедура дополняет список узлов-получателей объекта переданными значениями // +// Параметры: +// Объект – объект, для которого выполняется правило регистрации +// Узлы – Массив – узлы плана обмена, которые необходимо добавить в список узлов-получателей объекта +// +Процедура ДополнитьПолучателей(Объект, Узлы) Экспорт + + Для Каждого Элемент Из Узлы Цикл + + Попытка + + Объект.ОбменДанными.Получатели.Добавить(Элемент); + + Исключение + + // фиксируем ошибку в ЖР + ИмяПланаОбмена = Элемент.Метаданные().Имя; + + ОбъектМетаданных = Объект.Метаданные(); + + СтрокаСообщения = НСтр("ru = 'Для состава плана обмена [ИмяПланаОбмена] не указана регистрация объекта [ПолноеИмя]'"); + СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяПланаОбмена]", ИмяПланаОбмена); + СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ПолноеИмя]", ОбъектМетаданных.ПолноеИмя()); + + ЗаписьЖурналаРегистрацииПРО(СтрокаСообщения, ОбъектМетаданных); + + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +// Процедура вычитает из списка узлов-получателей объекта переданные значения +// +// Параметры: +// Объект – объект, для которого выполняется правило регистрации +// Узлы – Массив – узлы плана обмена, которые необходимо вычесть из списка узлов-получателей объекта +// +Процедура СократитьПолучателей(Объект, Узлы) Экспорт + + Получатели = СократитьМассив(Объект.ОбменДанными.Получатели, Узлы); + + // очищаем список получателей и заполняем его заново + Объект.ОбменДанными.Получатели.Очистить(); + + // добавляем узлы для регистрации объекта + ДополнитьПолучателей(Объект, Получатели); + +КонецПроцедуры + +// Определяет массив узлов-получателей для объекта при заданном плане обмена и выполняет регистрацию объекта на полученных узлах. +// +// Параметры: +// Объект - объект, для которого необходимо выполнить правила регистрации и выполнить регистрацию на узлах +// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе +// Отправитель (необязательный) – ПланОбменаСсылка – узел плана обмена от которого принимается сообщение обмена +// при загрузке данных: если задан, то регистрация объекта не этом узле выполнятся не будет. +// +Процедура ВыполнитьПравилаРегистрацииДляОбъекта(Объект, ИмяПланаОбмена, Отправитель = Неопределено) Экспорт + + Получатели = ОпределитьПолучателей(Объект, ИмяПланаОбмена); + + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Получатели, Отправитель); + + Если Получатели.Количество() > 0 Тогда + + ПланыОбмена.ЗарегистрироватьИзменения(Получатели, Объект); + + КонецЕсли; + +КонецПроцедуры + +// Вычитает один массив элементов из другого массива. Возвращает результат вычитания. +// +Функция СократитьМассив(Массив, МассивВычитания) Экспорт + + Возврат ОбщегоНазначенияКлиентСервер.СократитьМассив(Массив, МассивВычитания); + +КонецФункции + +// Функция возвращает список всех узлов заданного плана обмена кроме предопределенного узла +// +// Параметры: +// ИмяПланаОбмена – Строка – имя плана обмена, как оно задано в конфигураторе, список узлов для которого необходимо получить +// +// Возвращаемое значение: +// Массив – список всех узлов заданного плана обмена. +// +Функция ВсеУзлыПланаОбмена(ИмяПланаОбмена) Экспорт + + Возврат ОбменДаннымиСервер.ВсеУзлыПланаОбмена(ИмяПланаОбмена); + +КонецФункции + +// Функция определяет массив узлов-получателей для объекта при заданном плане обмена +// +// Параметры: +// Объект - объект, для которого необходимо выполнить правила регистрации и определить список узлов-получателей. +// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе +// +// Возвращаемое значение: +// МассивУзловРезультат - Массив - массив узлов-получателей для объекта +// +Функция ОпределитьПолучателей(Объект, ИмяПланаОбмена) Экспорт + + МассивУзловРезультат = Новый Массив; + + ОбъектМетаданных = Объект.Метаданные(); + + ЭтоРегистр = ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных); + + ВыполнитьПравилаРегистрацииОбъектовДляПланаОбмена(МассивУзловРезультат, Объект, ИмяПланаОбмена, ОбъектМетаданных, Ложь, ЭтоРегистр); + + Возврат МассивУзловРезультат; + +КонецФункции + +// Определяет признак авторегистрации объекта метаданных в составе плана обмена. +// +// Параметры: +// ОбъектМетаданных (обязательный) – объект метаданных, для которого требуется получить признак авторегистрации +// ИмяПланаОбмена (обязательный) – Строка – имя плана обмена, как оно задано в конфигураторе, в состав которого входит объект метаданных. +// +// Возвращаемое значение: +// Тип: Булево. Истина – объект метаданных имеет признак авторегистрации "Разрешена" в составе плана обмена; +// Ложь – объект метаданных имеет признак авторегистрации "Запрещена" в составе плана обмена +// или объект метаданных не входит в состав плана обмена. +// +Функция АвтоРегистрацияРазрешена(ОбъектМетаданных, ИмяПланаОбмена) Экспорт + + Возврат ОбменДаннымиПовтИсп.АвтоРегистрацияРазрешена(ИмяПланаОбмена, ОбъектМетаданных.ПолноеИмя()); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Механизм регистрации объектов (МРО) // Процедура-обработчик события "ПередЗаписью" документов для механизма регистрации объектов на узлах // @@ -152,7 +296,52 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ВНУТРЕННИЕ ПРОЦЕДУРЫ-ОБРАБОТЧИКИ СОБЫТИЙ ПОДПИСОК +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +Процедура ПередПроверкойЗапретаИзменения(Объект, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Экспорт + + Если Объект.ДополнительныеСвойства.Свойство("НеПроверятьДатыЗапретаИзмененияДанных") Тогда + + СтандартнаяОбработка = Ложь; + + ИначеЕсли Объект.ОбменДанными.Загрузка Тогда + + Отправитель = Объект.ОбменДанными.Отправитель; + + Если Отправитель = Неопределено Тогда + + Объект.ДополнительныеСвойства.Свойство("ОбменДанными_Отправитель", Отправитель); + + КонецЕсли; + + Если Отправитель <> Неопределено Тогда + + Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Отправитель) Тогда + + // Проверку на даты запрета изменения при обмене в РИБ не выполняем + СтандартнаяОбработка = Ложь; + + Иначе + + СтандартнаяОбработка = Ложь; + + УзелПланаОбмена = Отправитель; + + СообщитьОЗапрете = Ложь; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события // Только для внутреннего использования // @@ -162,6 +351,8 @@ Возврат; ИначеЕсли Источник.ДополнительныеСвойства.Свойство("ПолучениеСообщенияОбмена") Тогда Возврат; // запись узла при получении сообщения обмена (универсальный обмен данными) + ИначеЕсли Не ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) Тогда + Возврат; ИначеЕсли ОбменДаннымиПовтИсп.ЭтоПредопределенныйУзелПланаОбмена(Источник.Ссылка) Тогда Возврат; КонецЕсли; @@ -212,7 +403,7 @@ // Процедура ВключитьИспользованиеПланаОбмена(Источник, Отказ) Экспорт - Если Источник.ЭтоНовый() Тогда + Если Источник.ЭтоНовый() И ОбменДаннымиПовтИсп.ЭтоУзелРазделенногоОбменаДаннымиБСП(Источник.Ссылка) Тогда // кеш открытых сеансов для МРО стал неактуальным ОбменДаннымиСервер.УстановитьДатуОбновленияПовторноИспользуемыхЗначенийМРО(); @@ -225,8 +416,12 @@ // Процедура ОтключитьИспользованиеПланаОбмена(Источник, Отказ) Экспорт - // кеш открытых сеансов для МРО стал неактуальным - ОбменДаннымиСервер.УстановитьДатуОбновленияПовторноИспользуемыхЗначенийМРО(); + Если ОбменДаннымиПовтИсп.ЭтоУзелРазделенногоОбменаДаннымиБСП(Источник.Ссылка) Тогда + + // кеш открытых сеансов для МРО стал неактуальным + ОбменДаннымиСервер.УстановитьДатуОбновленияПовторноИспользуемыхЗначенийМРО(); + + КонецЕсли; КонецПроцедуры @@ -238,7 +433,7 @@ И Не Источник.ЭтоНовый() И Не ОбменДаннымиПовтИсп.ЭтоПредопределенныйУзелПланаОбмена(Источник.Ссылка) И ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) - И ОбщегоНазначения.ДанныеРазличаются(Источник, Источник.Ссылка.ПолучитьОбъект(),, "НомерОтправленного, НомерПринятого, ПометкаУдаления, Код, Наименование") + И ДанныеРазличаются(Источник, Источник.Ссылка.ПолучитьОбъект(),, "НомерОтправленного, НомерПринятого, ПометкаУдаления, Код, Наименование") И ОбменДаннымиСервер.ИзмененияЗарегистрированы(Источник.Ссылка) Тогда @@ -263,40 +458,73 @@ КонецПроцедуры +// Только для внутреннего использования // +Процедура ЗарегистрироватьИзмененияОбщихДанныхУзлов(Источник, Отказ) Экспорт + + Если Источник.ЭтоНовый() Тогда + Возврат; + ИначеЕсли Источник.ДополнительныеСвойства.Свойство("ПолучениеСообщенияОбмена") Тогда + Возврат; // запись узла при получении сообщения обмена (универсальный обмен данными) + ИначеЕсли Не ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) Тогда + Возврат; + КонецЕсли; + + ОбщиеДанныеУзлов = ОбменДаннымиПовтИсп.ОбщиеДанныеУзлов(Источник.Ссылка); + + Если ПустаяСтрока(ОбщиеДанныеУзлов) Тогда + Возврат; + КонецЕсли; + + Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Источник.Ссылка) Тогда + Возврат; + ИначеЕсли ОбменДаннымиПовтИсп.ЭтоПредопределенныйУзелПланаОбмена(Источник.Ссылка) Тогда + Возврат; + КонецЕсли; + + Если ДанныеРазличаются(Источник, Источник.Ссылка.ПолучитьОбъект(), ОбщиеДанныеУзлов) Тогда + + РегистрыСведений.ИзмененияОбщихДанныхУзлов.ЗарегистрироватьИзменения(Источник.Ссылка); + + КонецЕсли; + +КонецПроцедуры // Только для внутреннего использования // -Процедура ПередПроверкойЗапретаИзменения(Объект, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Экспорт +Процедура ПриОтправкеДанныхПодчиненному(Источник, ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза) Экспорт - Если Объект.ДополнительныеСвойства.Свойство("НеПроверятьДатыЗапретаИзмененияДанных") Тогда + Если ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) Тогда - СтандартнаяОбработка = Ложь; - - ИначеЕсли Объект.ОбменДанными.Загрузка Тогда - - Отправитель = Объект.ОбменДанными.Отправитель; - - Если Отправитель = Неопределено Тогда + Если ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ИспользоватьОбменДаннымиВЛокальномРежиме") Тогда - Объект.ДополнительныеСвойства.Свойство("ОбменДанными_Отправитель", Отправитель); + ЭлементДанных.Значение = Истина; + + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ИспользоватьОбменДаннымиВМоделиСервиса") Тогда + + ЭлементДанных.Значение = Ложь; КонецЕсли; - Если Отправитель <> Неопределено Тогда + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования +// +Процедура ПриПолученииДанныхОтПодчиненного(Источник, ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Экспорт + + Если ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) Тогда + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Отправитель) Тогда + Если ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ИспользоватьОбменДаннымиВЛокальномРежиме") Тогда - // Проверку на даты запрета изменения при обмене в РИБ не выполняем - СтандартнаяОбработка = Ложь; + ЭлементДанных.Значение = Ложь; - Иначе + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ИспользоватьОбменДаннымиВМоделиСервиса") Тогда - СтандартнаяОбработка = Ложь; - - УзелПланаОбмена = Отправитель; - - СообщитьОЗапрете = Ложь; + ЭлементДанных.Значение = Истина; КонецЕсли; @@ -307,7 +535,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МЕХАНИЗМА РЕГИСТРАЦИИ ОБЪЕКТОВ +// Механизм регистрации объектов (МРО) // Процедура механизма регистрации объектов. Предназначена для определения списка узлов получателей планов обмена // на которых необходимо выполнить регистрацию объекта для последующей его выгрузки @@ -401,7 +629,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МЕХАНИЗМА ВЫБОРОЧНОЙ РЕГИСТРАЦИИ ОБЪЕКТОВ (ВРО) +// Выборочная регистрация объектов (ВРО) Функция ОбъектМодифицированДляПланаОбмена(Источник, ОбъектМетаданных, ИмяПланаОбмена, РежимЗаписи, ЗарегистрироватьОбъектКВыгрузке) @@ -571,8 +799,8 @@ Функция ТаблицыРеквизитовРегистрацииОдинаковые(Таблица1, Таблица2, СтрокаТаблицыРеквизитовРегистрации) - ДобавитьИтераторТаблице(Таблица1, +1); - ДобавитьИтераторТаблице(Таблица2, -1); + ДобавитьКолонкуСоЗначениемВТаблицу(Таблица1, +1); + ДобавитьКолонкуСоЗначениемВТаблицу(Таблица2, -1); ТаблицаРезультат = Таблица1.Скопировать(); @@ -595,7 +823,7 @@ КонецФункции -Процедура ДобавитьИтераторТаблице(Таблица, ЗначениеИтератора) +Процедура ДобавитьКолонкуСоЗначениемВТаблицу(Таблица, ЗначениеИтератора) Таблица.Колонки.Добавить("ИтераторТаблицыРеквизитовРегистрации"); @@ -604,7 +832,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МЕХАНИЗМА РЕГИСТРАЦИИ ОБЪЕКТОВ (ПРО) +// Правила регистрации объектов (ПРО) Процедура ВыполнитьПравилаРегистрацииОбъектовДляПланаОбмена(МассивУзловРезультат, Объект, @@ -652,13 +880,13 @@ Выгрузка ) - ПравилаРегистрацииОбъекта = ПравилаРегистрацииОбъекта(ИмяПланаОбмена, ОбъектМетаданных.ПолноеИмя()).Скопировать(); + ПравилаРегистрацииОбъекта = Новый Массив; - Для Каждого ПРО Из ПравилаРегистрацииОбъекта Цикл + Правила = ПравилаРегистрацииОбъекта(ИмяПланаОбмена, ОбъектМетаданных.ПолноеИмя()); + + Для Каждого Правило Из Правила Цикл - ПРО.ОтборПоСвойствам = ПРО.ОтборПоСвойствам.Скопировать(); - ПРО.ОтборПоСвойствамОбъекта = ПРО.ОтборПоСвойствамОбъекта.Скопировать(); - ПРО.СвойстваОбъекта = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ПРО.СвойстваОбъекта); + ПравилаРегистрацииОбъекта.Добавить(ПравилоРегистрацииСтруктурой(Правило, Правила.Колонки)); КонецЦикла; @@ -731,7 +959,14 @@ КонецПроцедуры -Процедура ВыполнитьПравилоРегистрацииОбъектаДляНабораЗаписей(МассивУзловРезультат, ПРО, Объект, ОбъектМетаданных, ИмяПланаОбмена, Замещение, Выгрузка) +Процедура ВыполнитьПравилоРегистрацииОбъектаДляНабораЗаписей(МассивУзловРезультат, + ПРО, + Объект, + ОбъектМетаданных, + ИмяПланаОбмена, + Замещение, + Выгрузка + ) // определяем массив узлов-получателей по текущему набору записей ОпределитьМассивПолучателейПоНаборуЗаписей(МассивУзловРезультат, Объект, ПРО, ОбъектМетаданных, ИмяПланаОбмена, Ложь, Выгрузка); @@ -784,7 +1019,15 @@ КонецПроцедуры -Процедура ВыполнитьПравилоРегистрацииОбъектаДляСсылочногоТипа(МассивУзловРезультат, ПРО, Объект, ИмяПланаОбмена, ПроверятьСсылку, ЭтоУдалениеОбъекта, РежимЗаписи, Выгрузка) +Процедура ВыполнитьПравилоРегистрацииОбъектаДляСсылочногоТипа(МассивУзловРезультат, + ПРО, + Объект, + ИмяПланаОбмена, + ПроверятьСсылку, + ЭтоУдалениеОбъекта, + РежимЗаписи, + Выгрузка + ) // ПРОБ - Правила регистрации по свойствам Объекта // ПРОП - Правила регистрации по свойствам Плана обмена @@ -804,7 +1047,16 @@ КонецПроцедуры -Процедура ОпределитьПолучателейПоУсловию(МассивУзловРезультат, ПРО, Объект, ОбъектМетаданных, ИмяПланаОбмена, ПроверятьСсылку, ЭтоУдалениеОбъекта, РежимЗаписи, Выгрузка) +Процедура ОпределитьПолучателейПоУсловию(МассивУзловРезультат, + ПРО, + Объект, + ОбъектМетаданных, + ИмяПланаОбмена, + ПроверятьСсылку, + ЭтоУдалениеОбъекта, + РежимЗаписи, + Выгрузка + ) // {Обработчик: Перед обработкой} Начало Отказ = Ложь; @@ -834,7 +1086,14 @@ КонецПроцедуры -Процедура ОпределитьПолучателейПоУсловиюДляНабораЗаписей(МассивУзловРезультат, ПРО, Объект, ОбъектМетаданных, ИмяПланаОбмена, Замещение, Выгрузка) +Процедура ОпределитьПолучателейПоУсловиюДляНабораЗаписей(МассивУзловРезультат, + ПРО, + Объект, + ОбъектМетаданных, + ИмяПланаОбмена, + Замещение, + Выгрузка + ) // {Обработчик: Перед обработкой} Начало Отказ = Ложь; @@ -864,7 +1123,14 @@ КонецПроцедуры -Процедура ОпределитьМассивУзловДляОбъекта(МассивУзловРезультат, Источник, ИмяПланаОбмена, ПРО, ЭтоУдалениеОбъекта, ПроверятьСсылку, Выгрузка) +Процедура ОпределитьМассивУзловДляОбъекта(МассивУзловРезультат, + Источник, + ИмяПланаОбмена, + ПРО, + ЭтоУдалениеОбъекта, + ПроверятьСсылку, + Выгрузка + ) // получаем структуру значений свойств для объекта ЗначенияСвойствОбъекта = ПолучитьЗначенияСвойствДляОбъекта(Источник, ПРО); @@ -890,7 +1156,14 @@ КонецПроцедуры -Процедура ОпределитьМассивПолучателейПоНаборуЗаписей(МассивУзловРезультат, НаборЗаписей, ПРО, ОбъектМетаданных, ИмяПланаОбмена, ЭтоВерсияОбъектаДоИзменения, Выгрузка) +Процедура ОпределитьМассивПолучателейПоНаборуЗаписей(МассивУзловРезультат, + НаборЗаписей, + ПРО, + ОбъектМетаданных, + ИмяПланаОбмена, + ЭтоВерсияОбъектаДоИзменения, + Выгрузка + ) // получаем значение регистратора из отбора для набора записей Регистратор = Неопределено; @@ -913,6 +1186,8 @@ Пока ОбратныйИндекс >= 0 Цикл + ПРО_СтрокиНабора = СкопироватьСтруктуру(ПРО); + СтрокаНабора = НаборЗаписей[ОбратныйИндекс]; Если ЕстьРегистратор И СтрокаНабора["Регистратор"] = Неопределено Тогда @@ -926,16 +1201,16 @@ КонецЕсли; // ПРОБ - Если Не ОбъектПрошелФильтрПравилРегистрацииПоСвойствам(ПРО, СтрокаНабора, Ложь) Тогда + Если Не ОбъектПрошелФильтрПравилРегистрацииПоСвойствам(ПРО_СтрокиНабора, СтрокаНабора, Ложь) Тогда НаборЗаписей.Удалить(ОбратныйИндекс); Иначе // ПРОП - ЗначенияСвойствОбъекта = ПолучитьЗначенияСвойствДляОбъекта(СтрокаНабора, ПРО); + ЗначенияСвойствОбъекта = ПолучитьЗначенияСвойствДляОбъекта(СтрокаНабора, ПРО_СтрокиНабора); // определяем массив узлов для регистрации объекта - МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойств(ЗначенияСвойствОбъекта, ПРО, ИмяПланаОбмена, СтрокаНабора, Выгрузка); + МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойств(ЗначенияСвойствОбъекта, ПРО_СтрокиНабора, ИмяПланаОбмена, СтрокаНабора, Выгрузка); НомерВМассиве = МассивУзлов.Найти(УзелИнформационнойБазы); @@ -956,6 +1231,8 @@ Для Каждого СтрокаНабора ИЗ НаборЗаписей Цикл + ПРО_СтрокиНабора = СкопироватьСтруктуру(ПРО); + Если ЕстьРегистратор И СтрокаНабора["Регистратор"] = Неопределено Тогда Если Регистратор <> Неопределено Тогда @@ -967,7 +1244,7 @@ КонецЕсли; // ПРОБ - Если Не ОбъектПрошелФильтрПравилРегистрацииПоСвойствам(ПРО, СтрокаНабора, Ложь) Тогда + Если Не ОбъектПрошелФильтрПравилРегистрацииПоСвойствам(ПРО_СтрокиНабора, СтрокаНабора, Ложь) Тогда Продолжить; @@ -976,17 +1253,17 @@ // ПРОП // получаем структуру значений свойств для объекта - ЗначенияСвойствОбъекта = ПолучитьЗначенияСвойствДляОбъекта(СтрокаНабора, ПРО); + ЗначенияСвойствОбъекта = ПолучитьЗначенияСвойствДляОбъекта(СтрокаНабора, ПРО_СтрокиНабора); Если ЭтоВерсияОбъектаДоИзменения Тогда // определяем массив узлов для регистрации объекта - МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойствДополнительный(ЗначенияСвойствОбъекта, ПРО, ИмяПланаОбмена, СтрокаНабора); + МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойствДополнительный(ЗначенияСвойствОбъекта, ПРО_СтрокиНабора, ИмяПланаОбмена, СтрокаНабора); Иначе // определяем массив узлов для регистрации объекта - МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойств(ЗначенияСвойствОбъекта, ПРО, ИмяПланаОбмена, СтрокаНабора, Выгрузка); + МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойств(ЗначенияСвойствОбъекта, ПРО_СтрокиНабора, ИмяПланаОбмена, СтрокаНабора, Выгрузка); КонецЕсли; @@ -1100,145 +1377,40 @@ КонецФункции -// ПРОГРАММНЫЙ ИНТЕРФЕЙС ДЛЯ РАБОТЫ С РЕГИСТРАЦИЕЙ ОБЪЕКТОВ - -// Процедура дополняет список узлов-получателей объекта переданными значениями -// -// Параметры: -// Объект – объект, для которого выполняется правило регистрации -// Узлы – Массив – узлы плана обмена, которые необходимо добавить в список узлов-получателей объекта -// -Процедура ДополнитьПолучателей(Объект, Узлы) Экспорт +Функция ПравилоРегистрацииСтруктурой(Правило, Колонки) - Для Каждого Элемент Из Узлы Цикл + Результат = Новый Структура; + + Для Каждого Колонка Из Колонки Цикл - Попытка + Ключ = Колонка.Имя; + Значение = Правило[Ключ]; + + Если ТипЗнч(Значение) = Тип("ТаблицаЗначений") Тогда - Объект.ОбменДанными.Получатели.Добавить(Элемент); + Результат.Вставить(Ключ, Значение.Скопировать()); - Исключение + ИначеЕсли ТипЗнч(Значение) = Тип("ДеревоЗначений") Тогда - // фиксируем ошибку в ЖР - ИмяПланаОбмена = Элемент.Метаданные().Имя; + Результат.Вставить(Ключ, Значение.Скопировать()); - ОбъектМетаданных = Объект.Метаданные(); + ИначеЕсли ТипЗнч(Значение) = Тип("Структура") Тогда - СтрокаСообщения = НСтр("ru = 'Для состава плана обмена [ИмяПланаОбмена] не указана регистрация объекта [ПолноеИмя]'"); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяПланаОбмена]", ИмяПланаОбмена); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ПолноеИмя]", ОбъектМетаданных.ПолноеИмя()); + Результат.Вставить(Ключ, СкопироватьСтруктуру(Значение)); - ЗаписьЖурналаРегистрацииПРО(СтрокаСообщения, ОбъектМетаданных); + Иначе - КонецПопытки; + Результат.Вставить(Ключ, Значение); + + КонецЕсли; КонецЦикла; -КонецПроцедуры - -// Процедура вычитает из списка узлов-получателей объекта переданные значения -// -// Параметры: -// Объект – объект, для которого выполняется правило регистрации -// Узлы – Массив – узлы плана обмена, которые необходимо вычесть из списка узлов-получателей объекта -// -Процедура СократитьПолучателей(Объект, Узлы) Экспорт - - Получатели = СократитьМассив(Объект.ОбменДанными.Получатели, Узлы); - - // очищаем список получателей и заполняем его заново - Объект.ОбменДанными.Получатели.Очистить(); - - // добавляем узлы для регистрации объекта - ДополнитьПолучателей(Объект, Получатели); - -КонецПроцедуры - -// Определяет массив узлов-получателей для объекта при заданном плане обмена и выполняет регистрацию объекта на полученных узлах. -// -// Параметры: -// Объект - объект, для которого необходимо выполнить правила регистрации и выполнить регистрацию на узлах -// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе -// Отправитель (необязательный) – ПланОбменаСсылка – узел плана обмена от которого принимается сообщение обмена -// при загрузке данных: если задан, то регистрация объекта не этом узле выполнятся не будет. -// -Процедура ВыполнитьПравилаРегистрацииДляОбъекта(Объект, ИмяПланаОбмена, Отправитель = Неопределено) Экспорт - - Получатели = ОпределитьПолучателей(Объект, ИмяПланаОбмена); - - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Получатели, Отправитель); - - Если Получатели.Количество() > 0 Тогда - - ПланыОбмена.ЗарегистрироватьИзменения(Получатели, Объект); - - КонецЕсли; - -КонецПроцедуры - -// Вычитает один массив элементов из другого массива. Возвращает результат вычитания. -// -Функция СократитьМассив(Массив, МассивВычитания) Экспорт - - Возврат ОбщегоНазначенияКлиентСервер.СократитьМассив(Массив, МассивВычитания); - -КонецФункции - -// Функция возвращает список всех узлов заданного плана обмена кроме предопределенного узла -// -// Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, как оно задано в конфигураторе, список узлов для которого необходимо получить -// -// Возвращаемое значение: -// Массив – список всех узлов заданного плана обмена. -// -Функция ВсеУзлыПланаОбмена(ИмяПланаОбмена) Экспорт - - Возврат ОбменДаннымиСервер.ВсеУзлыПланаОбмена(ИмяПланаОбмена); - -КонецФункции - -// Функция определяет массив узлов-получателей для объекта при заданном плане обмена -// -// Параметры: -// Объект - объект, для которого необходимо выполнить правила регистрации и определить список узлов-получателей. -// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе -// -// Возвращаемое значение: -// МассивУзловРезультат - Массив - массив узлов-получателей для объекта -// -Функция ОпределитьПолучателей(Объект, ИмяПланаОбмена) Экспорт - - МассивУзловРезультат = Новый Массив; - - ОбъектМетаданных = Объект.Метаданные(); - - ЭтоРегистр = ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных); - - ВыполнитьПравилаРегистрацииОбъектовДляПланаОбмена(МассивУзловРезультат, Объект, ИмяПланаОбмена, ОбъектМетаданных, Ложь, ЭтоРегистр); - - Возврат МассивУзловРезультат; - -КонецФункции - -// Определяет признак авторегистрации объекта метаданных в составе плана обмена. -// -// Параметры: -// ОбъектМетаданных (обязательный) – объект метаданных, для которого требуется получить признак авторегистрации -// ИмяПланаОбмена (обязательный) – Строка – имя плана обмена, как оно задано в конфигураторе, в состав которого входит объект метаданных. -// -// Возвращаемое значение: -// Тип: Булево. Истина – объект метаданных имеет признак авторегистрации "Разрешена" в составе плана обмена; -// Ложь – объект метаданных имеет признак авторегистрации "Запрещена" в составе плана обмена -// или объект метаданных не входит в состав плана обмена. -// -Функция АвтоРегистрацияРазрешена(ОбъектМетаданных, ИмяПланаОбмена) Экспорт - - Возврат ОбменДаннымиПовтИсп.АвтоРегистрацияРазрешена(ИмяПланаОбмена, ОбъектМетаданных.ПолноеИмя()); - + Возврат Результат; КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ПРАВИЛ РЕГИСТРАЦИИ ПО СВОЙСТВАМ ОБЪЕКТА +// Правила регистрации по свойствам объектов Процедура ЗаполнитьЗначенияСвойствИзОбъекта(ДеревоЗначений, Объект) @@ -1504,18 +1676,18 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ РАБОТЫ С ЖУРНАЛОМ РЕГИСТРАЦИИ +// Работа с журналом регистрации // Добавляет одну запись в журнал регистрации для подсистемы правил регистрации объектов. // Процедура ЗаписьЖурналаРегистрацииПРО(Комментарий, ОбъектМетаданных = Неопределено) Экспорт - ЗаписьЖурналаРегистрации("Обмен данными.Правила регистрации объектов", УровеньЖурналаРегистрации.Ошибка, ОбъектМетаданных, , Комментарий); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными.Правила регистрации объектов'"), УровеньЖурналаРегистрации.Ошибка, ОбъектМетаданных, , Комментарий); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ-ОБРАБОТЧИКИ СОБЫТИЙ ПРО +// События правил регистрации объектов (события ПРО) Процедура ВыполнитьОбработчикПРОПередОбработкой(ПРО, Отказ, Объект, ОбъектМетаданных, Знач Выгрузка) @@ -1531,7 +1703,7 @@ СтрокаСообщения = НСтр("ru = 'Ошибка при выполнении обработчика: ""[ИмяОбработчика]""; План обмена: [ИмяПланаОбмена]; Объект метаданных: [ОбъектМетаданныхИмя] |Описание ошибки: [Описание]'"); // - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", "Перед обработкой"); + СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", НСтр("ru = 'Перед обработкой'")); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОбъектМетаданныхИмя]", ПРО.ОбъектМетаданныхИмя); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[Описание]", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -1560,7 +1732,7 @@ СтрокаСообщения = НСтр("ru = 'Ошибка при выполнении обработчика: ""[ИмяОбработчика]""; План обмена: [ИмяПланаОбмена]; Объект метаданных: [ОбъектМетаданныхИмя] |Описание ошибки: [Описание]'"); // - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", "При обработке"); + СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", НСтр("ru = 'При обработке'")); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОбъектМетаданныхИмя]", ПРО.ОбъектМетаданныхИмя); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[Описание]", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -1589,7 +1761,7 @@ СтрокаСообщения = НСтр("ru = 'Ошибка при выполнении обработчика: ""[ИмяОбработчика]""; План обмена: [ИмяПланаОбмена]; Объект метаданных: [ОбъектМетаданныхИмя] |Описание ошибки: [Описание]'"); // - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", "При обработке (дополнительный)"); + СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", НСтр("ru = 'При обработке (дополнительный)'")); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОбъектМетаданныхИмя]", ПРО.ОбъектМетаданныхИмя); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[Описание]", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -1618,7 +1790,7 @@ СтрокаСообщения = НСтр("ru = 'Ошибка при выполнении обработчика: ""[ИмяОбработчика]""; План обмена: [ИмяПланаОбмена]; Объект метаданных: [ОбъектМетаданныхИмя] |Описание ошибки: [Описание]'"); // - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", "После обработки"); + СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяОбработчика]", НСтр("ru = 'После обработки'")); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ИмяПланаОбмена]", ПРО.ИмяПланаОбмена); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОбъектМетаданныхИмя]", ПРО.ОбъектМетаданныхИмя); СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[Описание]", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -1634,7 +1806,101 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Вспомогательные процедуры и функции + +// Заполняет значения реквизитов и табличных частей однотипных объектов информационной базы. +// +// Параметры: +// Источник (обязательный) – объект информационной базы (СправочникОбъект, ДокументОбъект, ПланВидовХарактеристикОбъект и пр.) +// который является источником данных для заполнения. +// +// Приемник (обязательный) – объект информационной базы (СправочникОбъект, ДокументОбъект, ПланВидовХарактеристикОбъект и пр.) +// который будет заполнен данными источника. +// +// СписокСвойств (необязательный). Тип: Строка. +// Список свойств объекта и табличных частей, разделенных запятыми. +// Если параметр задан, то заполнение свойств объекта будет выполняться согласно +// заданным свойствам, при этом параметр ИсключаяСвойства будет проигнорирован. +// +// ИсключаяСвойства (необязательный). Тип: Строка. +// Список свойств объекта и табличных частей, разделенных запятыми. +// Если параметр задан, то заполнение свойств объекта будет выполняться +// для всех свойств и табличных частей, исключая заданные свойства. +// +Процедура ЗаполнитьЗначенияСвойствОбъекта(Приемник, Источник, Знач СписокСвойств = Неопределено, Знач ИсключаяСвойства = Неопределено) Экспорт + + Если СписокСвойств <> Неопределено Тогда + + СписокСвойств = СтрЗаменить(СписокСвойств, " ", ""); + + СписокСвойств = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СписокСвойств); + + ОбъектМетаданных = Приемник.Метаданные(); + + ТабличныеЧасти = ТабличныеЧастиОбъекта(ОбъектМетаданных); + + СписокСвойствШапки = Новый Массив; + ИспользуемыеТабличныеЧасти = Новый Массив; + + Для Каждого Свойство Из СписокСвойств Цикл + + Если ТабличныеЧасти.Найти(Свойство) <> Неопределено Тогда + + ИспользуемыеТабличныеЧасти.Добавить(Свойство); + + Иначе + + СписокСвойствШапки.Добавить(Свойство); + + КонецЕсли; + + КонецЦикла; + + СписокСвойствШапки = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(СписокСвойствШапки); + + ЗаполнитьЗначенияСвойств(Приемник, Источник, СписокСвойствШапки); + + Для Каждого ТабличнаяЧасть Из ИспользуемыеТабличныеЧасти Цикл + + Приемник[ТабличнаяЧасть].Загрузить(Источник[ТабличнаяЧасть].Выгрузить()); + + КонецЦикла; + + ИначеЕсли ИсключаяСвойства <> Неопределено Тогда + + ЗаполнитьЗначенияСвойств(Приемник, Источник,, ИсключаяСвойства); + + ОбъектМетаданных = Приемник.Метаданные(); + + ТабличныеЧасти = ТабличныеЧастиОбъекта(ОбъектМетаданных); + + Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл + + Если Найти(ИсключаяСвойства, ТабличнаяЧасть) <> 0 Тогда + Продолжить; + КонецЕсли; + + Приемник[ТабличнаяЧасть].Загрузить(Источник[ТабличнаяЧасть].Выгрузить()); + + КонецЦикла; + + Иначе + + ЗаполнитьЗначенияСвойств(Приемник, Источник); + + ОбъектМетаданных = Приемник.Метаданные(); + + ТабличныеЧасти = ТабличныеЧастиОбъекта(ОбъектМетаданных); + + Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл + + Приемник[ТабличнаяЧасть].Загрузить(Источник[ТабличнаяЧасть].Выгрузить()); + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры Процедура ВыполнитьРегистрациюОбъектовСсылочногоТипаПоСвойствамУзла(Объект, ТаблицаРеквизитовСсылочногоТипа) @@ -1702,8 +1968,8 @@ СтрокаТаблицы = Результат.Добавить(); СтрокаТаблицы.ИмяОбъекта = ОбъектМетаданныхПолноеИмя; СтрокаТаблицы.ИмяТабличнойЧасти = ""; - СтрокаТаблицы.РеквизитыРегистрации = ОбщегоНазначения.КлючиСтруктурыВСтроку(Реквизиты); - СтрокаТаблицы.СтруктураРеквизитовРегистрации = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(Реквизиты); + СтрокаТаблицы.РеквизитыРегистрации = КлючиСтруктурыВСтроку(Реквизиты); + СтрокаТаблицы.СтруктураРеквизитовРегистрации = СкопироватьСтруктуру(Реквизиты); КонецЕсли; @@ -1717,8 +1983,8 @@ СтрокаТаблицы = Результат.Добавить(); СтрокаТаблицы.ИмяОбъекта = ОбъектМетаданныхПолноеИмя; СтрокаТаблицы.ИмяТабличнойЧасти = ТабличнаяЧасть.Имя; - СтрокаТаблицы.РеквизитыРегистрации = ОбщегоНазначения.КлючиСтруктурыВСтроку(Реквизиты); - СтрокаТаблицы.СтруктураРеквизитовРегистрации = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(Реквизиты); + СтрокаТаблицы.РеквизитыРегистрации = КлючиСтруктурыВСтроку(Реквизиты); + СтрокаТаблицы.СтруктураРеквизитовРегистрации = СкопироватьСтруктуру(Реквизиты); КонецЕсли; @@ -1767,3 +2033,202 @@ Возврат Метаданные.ПланыОбмена[ИмяПланаОбмена].Состав.Содержит(Метаданные.НайтиПоТипу(Тип)); КонецФункции + +// Создает новый экземпляр объекта Структура, заполняет объект данными указанной структуры. +// +// Параметры: +// СтруктураИсточник – Структура – структура, копию которой необходимо получить +// +// Возвращаемое значение: +// Тип: Структура. +// +Функция СкопироватьСтруктуру(СтруктураИсточник) Экспорт + + СтруктураРезультат = Новый Структура; + + Для Каждого Элемент ИЗ СтруктураИсточник Цикл + + Если ТипЗнч(Элемент.Значение) = Тип("ТаблицаЗначений") Тогда + + СтруктураРезультат.Вставить(Элемент.Ключ, Элемент.Значение.Скопировать()); + + ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("ДеревоЗначений") Тогда + + СтруктураРезультат.Вставить(Элемент.Ключ, Элемент.Значение.Скопировать()); + + ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Структура") Тогда + + СтруктураРезультат.Вставить(Элемент.Ключ, СкопироватьСтруктуру(Элемент.Значение)); + + ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("СписокЗначений") Тогда + + СтруктураРезультат.Вставить(Элемент.Ключ, Элемент.Значение.Скопировать()); + + Иначе + + СтруктураРезультат.Вставить(Элемент.Ключ, Элемент.Значение); + + КонецЕсли; + + КонецЦикла; + + Возврат СтруктураРезультат; +КонецФункции + +// Получает строку, содержащую ключи структуры, разделенные символом разделителя. +// +// Параметры: +// Структура - Структура - Структура, ключи которой преобразуются в строку +// Разделитель - Строка - Разделитель, который вставляется в строку между ключами структуры +// +// Возвращаемое значение: +// Строка - Строка, содержащая ключи структуры разделенные резделителем +// +Функция КлючиСтруктурыВСтроку(Структура, Разделитель = ",") Экспорт + + Результат = ""; + + Для Каждого Элемент Из Структура Цикл + + СимволРазделителя = ?(ПустаяСтрока(Результат), "", Разделитель); + + Результат = Результат + СимволРазделителя + Элемент.Ключ; + + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Выполняет сравнение версий двух однотипных объектов. +// +// Параметры: +// Данные1 (обязательный). Тип: +// СправочникОбъект, +// ДокументОбъект, +// ПланВидовХарактеристикОбъект, +// ПланВидовРасчетаОбъект, +// ПланСчетовОбъект, +// ПланОбменаОбъект, +// БизнесПроцессОбъект, +// ЗадачаОбъект. +// Первая версия данных для сравнения. +// +// Данные2 (обязательный). Тип: см. тип параметра Данные1 +// Вторая версия данных для сравнения. +// +// СписокСвойств (необязательный). Тип: Строка. +// Список свойств объекта и табличных частей, разделенных запятыми. +// Если параметр задан, то сравнение версий данных будет выполняться согласно +// заданным свойствам, при этом параметр ИсключаяСвойства будет проигнорирован. +// +// ИсключаяСвойства (необязательный). Тип: Строка. +// Список свойств объекта и табличных частей, разделенных запятыми. +// Если параметр задан, то сравнение версий данных будет выполняться +// для всех свойств и табличных частей, исключая заданные свойства. +// +// Возвращаемое значение: +// Тип: Булево. +// Возвращает Истина, если версии данных различаются; Ложь, если версии совпадают. +// +Функция ДанныеРазличаются(Данные1, Данные2, СписокСвойств = Неопределено, ИсключаяСвойства = Неопределено) Экспорт + + Если ТипЗнч(Данные1) <> ТипЗнч(Данные2) Тогда + Возврат Истина; + КонецЕсли; + + ОбъектМетаданных = Данные1.Метаданные(); + + Если ОбщегоНазначения.ЭтоСправочник(ОбъектМетаданных) Тогда + + Если Данные1.ЭтоГруппа Тогда + Объект1 = Справочники[ОбъектМетаданных.Имя].СоздатьГруппу(); + Иначе + Объект1 = Справочники[ОбъектМетаданных.Имя].СоздатьЭлемент(); + КонецЕсли; + + Если Данные2.ЭтоГруппа Тогда + Объект2 = Справочники[ОбъектМетаданных.Имя].СоздатьГруппу(); + Иначе + Объект2 = Справочники[ОбъектМетаданных.Имя].СоздатьЭлемент(); + КонецЕсли; + + ИначеЕсли ОбщегоНазначения.ЭтоДокумент(ОбъектМетаданных) Тогда + + Объект1 = Документы[ОбъектМетаданных.Имя].СоздатьДокумент(); + Объект2 = Документы[ОбъектМетаданных.Имя].СоздатьДокумент(); + + ИначеЕсли ОбщегоНазначения.ЭтоПланВидовХарактеристик(ОбъектМетаданных) Тогда + + Если Данные1.ЭтоГруппа Тогда + Объект1 = ПланыВидовХарактеристик[ОбъектМетаданных.Имя].СоздатьГруппу(); + Иначе + Объект1 = ПланыВидовХарактеристик[ОбъектМетаданных.Имя].СоздатьЭлемент(); + КонецЕсли; + + Если Данные2.ЭтоГруппа Тогда + Объект2 = ПланыВидовХарактеристик[ОбъектМетаданных.Имя].СоздатьГруппу(); + Иначе + Объект2 = ПланыВидовХарактеристик[ОбъектМетаданных.Имя].СоздатьЭлемент(); + КонецЕсли; + + ИначеЕсли ОбщегоНазначения.ЭтоПланВидовРасчета(ОбъектМетаданных) Тогда + + Объект1 = ПланыВидовРасчета[ОбъектМетаданных.Имя].СоздатьВидРасчета(); + Объект2 = ПланыВидовРасчета[ОбъектМетаданных.Имя].СоздатьВидРасчета(); + + ИначеЕсли ОбщегоНазначения.ЭтоПланСчетов(ОбъектМетаданных) Тогда + + Объект1 = ПланыСчетов[ОбъектМетаданных.Имя].СоздатьСчет(); + Объект2 = ПланыСчетов[ОбъектМетаданных.Имя].СоздатьСчет(); + + ИначеЕсли ОбщегоНазначения.ЭтоПланОбмена(ОбъектМетаданных) Тогда + + Объект1 = ПланыОбмена[ОбъектМетаданных.Имя].СоздатьУзел(); + Объект2 = ПланыОбмена[ОбъектМетаданных.Имя].СоздатьУзел(); + + ИначеЕсли ОбщегоНазначения.ЭтоБизнесПроцесс(ОбъектМетаданных) Тогда + + Объект1 = БизнесПроцессы[ОбъектМетаданных.Имя].СоздатьБизнесПроцесс(); + Объект2 = БизнесПроцессы[ОбъектМетаданных.Имя].СоздатьБизнесПроцесс(); + + ИначеЕсли ОбщегоНазначения.ЭтоЗадача(ОбъектМетаданных) Тогда + + Объект1 = Задачи[ОбъектМетаданных.Имя].СоздатьЗадачу(); + Объект2 = Задачи[ОбъектМетаданных.Имя].СоздатьЗадачу(); + + Иначе + + ВызватьИсключение НСтр("ru = 'Задано недопустимое значение параметра [1] метода ОбщегоНазначения.ЗначенияСвойствИзменены.'"); + + КонецЕсли; + + ЗаполнитьЗначенияСвойствОбъекта(Объект1, Данные1, СписокСвойств, ИсключаяСвойства); + ЗаполнитьЗначенияСвойствОбъекта(Объект2, Данные2, СписокСвойств, ИсключаяСвойства); + + Возврат ДанныеИнформационнойБазыСтрокой(Объект1) <> ДанныеИнформационнойБазыСтрокой(Объект2); + +КонецФункции + +Функция ДанныеИнформационнойБазыСтрокой(Данные) + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(); + + ЗаписатьXML(ЗаписьXML, Данные, НазначениеТипаXML.Явное); + + Возврат ЗаписьXML.Закрыть(); + +КонецФункции + +Функция ТабличныеЧастиОбъекта(ОбъектМетаданных) + + Результат = Новый Массив; + + Для Каждого ТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл + + Результат.Добавить(ТабличнаяЧасть.Имя); + + КонецЦикла; + + Возврат Результат; +КонецФункции diff --git a/SSL/src/CommonModules/ОбменСообщениями/Module.bsl b/SSL/src/CommonModules/ОбменСообщениями/Module.bsl new file mode 100644 index 000000000..17600e409 --- /dev/null +++ b/SSL/src/CommonModules/ОбменСообщениями/Module.bsl @@ -0,0 +1,479 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОбменСообщениями: механизм обмена сообщениями. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Выполняет отправку сообщения в адресный канал сообщений. +// Соответствует типу отправки "Конечная точка/Конечная точка". +// +// Параметры: +// КаналСообщений – Строка. Идентификатор адресного канала сообщений. +// ТелоСообщения (необязательный) – Произвольный. Тело сообщения системы, которое необходимо отправить. +// Получатель (необязательный) – Неопределено; ПланОбменаСсылка.ОбменСообщениями; Массив. +// Неопределено – получатель сообщения не указан. Сообщение будет отправлено конечным точкам, +// которые определяются настройками текущей информационной системы: +// в обработчике ОбменСообщениямиПереопределяемый.ПолучателиСообщения (программно) +// и в регистре сведений НастройкиОтправителя (настройка системы). +// ПланОбменаСсылка.ОбменСообщениями - узел плана обмена, который соответствует конечной точке, +// для которой предназначено сообщение. Сообщение будет отправлено только этой конечной точке. +// Массив – массив получателей сообщения; элементы массива должны иметь тип ПланОбменаСсылка.ОбменСообщениями. +// Сообщение будет отправлено всем конечным точкам, указанным в массиве. +// Значение по умолчанию: Неопределено. +// +Процедура ОтправитьСообщение(КаналСообщений, ТелоСообщения = Неопределено, Получатель = Неопределено) Экспорт + + ОтправитьСообщениеВКаналСообщений(КаналСообщений, ТелоСообщения, Получатель); + +КонецПроцедуры + +// Выполняет отправку быстрого сообщения в адресный канал сообщений. +// Соответствует типу отправки "Конечная точка/Конечная точка". +// +// Параметры: +// КаналСообщений – Строка. Идентификатор адресного канала сообщений. +// ТелоСообщения (необязательный) – Произвольный. Тело сообщения системы, которое необходимо отправить. +// Получатель (необязательный) – Неопределено; ПланОбменаСсылка.ОбменСообщениями; Массив. +// Неопределено – получатель сообщения не указан. Сообщение будет отправлено конечным точкам, +// которые определяются настройками текущей информационной системы: +// в обработчике ОбменСообщениямиПереопределяемый.ПолучателиСообщения (программно) +// и в регистре сведений НастройкиОтправителя (настройка системы). +// ПланОбменаСсылка.ОбменСообщениями - узел плана обмена, который соответствует конечной точке, +// для которой предназначено сообщение. Сообщение будет отправлено только этой конечной точке. +// Массив – массив получателей сообщения; элементы массива должны иметь тип ПланОбменаСсылка.ОбменСообщениями. +// Сообщение будет отправлено всем конечным точкам, указанным в массиве. +// Значение по умолчанию: Неопределено. +// +Процедура ОтправитьСообщениеСейчас(КаналСообщений, ТелоСообщения = Неопределено, Получатель = Неопределено) Экспорт + + ОтправитьСообщениеВКаналСообщений(КаналСообщений, ТелоСообщения, Получатель, Истина); + +КонецПроцедуры + +// Выполняет отправку сообщения в широковещательный канал сообщений. +// Соответствует типу отправки "Публикация/Подписка". +// Сообщение будет доставлено конечным точкам, которые подписаны на широковещательный канал. +// Настройка подписок на широковещательный канал выполняется через регистр сведений ПодпискиПолучателей. +// +// Параметры: +// КаналСообщений – Строка. Идентификатор широковещательного канала сообщений. +// ТелоСообщения (необязательный) – Произвольный. Тело сообщения системы, которое необходимо отправить. +// +Процедура ОтправитьСообщениеПодписчикам(КаналСообщений, ТелоСообщения = Неопределено) Экспорт + + ОтправитьСообщениеПодписчикамВКаналСообщений(КаналСообщений, ТелоСообщения); + +КонецПроцедуры + +// Выполняет отправку быстрого сообщения в широковещательный канал сообщений. +// Соответствует типу отправки "Публикация/Подписка". +// Сообщение будет доставлено конечным точкам, которые подписаны на широковещательный канал. +// Настройка подписок на широковещательный канал выполняется через регистр сведений ПодпискиПолучателей. +// +// Параметры: +// КаналСообщений – Строка. Идентификатор широковещательного канала сообщений. +// ТелоСообщения (необязательный) – Произвольный. Тело сообщения системы, которое необходимо отправить. +// +Процедура ОтправитьСообщениеПодписчикамСейчас(КаналСообщений, ТелоСообщения = Неопределено) Экспорт + + ОтправитьСообщениеПодписчикамВКаналСообщений(КаналСообщений, ТелоСообщения, Истина); + +КонецПроцедуры + +// Выполняет немедленную отправку быстрых сообщений из общей очереди сообщений. +// Отправка сообщений выполняется в цикле до тех пор, пока из очереди сообщений не будут отправлены все быстрые сообщения. +// На время отправки сообщений блокируется немедленная отправка сообщений из других сеансов. +// +Процедура ДоставитьСообщения() Экспорт + + Если ТранзакцияАктивна() Тогда + ВызватьИсключение НСтр("ru = 'Доставка быстрых сообщений системы не может выполняться в активной транзакции.'"); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если Не НачатьОтправкуБыстрыхСообщений() Тогда + Возврат; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | СообщенияСистемыИзменения.Узел КАК КонечнаяТочка, + | СообщенияСистемыИзменения.Ссылка КАК Сообщение + |ИЗ + | Справочник.СообщенияСистемы.Изменения КАК СообщенияСистемыИзменения + |ГДЕ + | СообщенияСистемыИзменения.Ссылка.ЭтоБыстроеСообщение + | И СообщенияСистемыИзменения.НомерСообщения ЕСТЬ NULL + | И НЕ СообщенияСистемыИзменения.Узел В (&НедоступныеКонечныеТочки) + | + |УПОРЯДОЧИТЬ ПО + | СообщенияСистемыИзменения.Ссылка.Код + |ИТОГИ ПО + | КонечнаяТочка"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + НедоступныеКонечныеТочки = Новый Массив; + + Попытка + + Пока Истина Цикл + + Запрос.УстановитьПараметр("НедоступныеКонечныеТочки", НедоступныеКонечныеТочки); + + РезультатЗапроса = ОбменСообщениямиВнутренний.ПолучитьРезультатЗапроса(Запрос); + + Если РезультатЗапроса.Пустой() Тогда + Прервать; + КонецЕсли; + + Группы = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); + + Для Каждого Группа Из Группы.Строки Цикл + + Сообщения = Группа.Строки.ВыгрузитьКолонку("Сообщение"); + + Попытка + + ДоставитьСообщенияПолучателю(Группа.КонечнаяТочка, Сообщения); + + УдалитьРегистрациюИзменений(Группа.КонечнаяТочка, Сообщения); + + Исключение + + НедоступныеКонечныеТочки.Добавить(Группа.КонечнаяТочка); + + ЗаписьЖурналаРегистрации(ОбменСообщениямиВнутренний.СобытиеЖурналаРегистрацииЭтойПодсистемы(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + + КонецЦикла; + + КонецЦикла; + + Исключение + ОтменитьОтправкуБыстрыхСообщений(); + ВызватьИсключение; + КонецПопытки; + + ЗавершитьОтправкуБыстрыхСообщений(); + +КонецПроцедуры + +// Выполняет подключение конечной точки. +// Перед подключением конечной точки выполняется проверка установки соединения +// отправителя к получателю и получателя к отправителю. +// Также проверяется то, что настройки подключения получателя указывают на текущего отправителя. +// +// Параметры: +// Отказ (обязательный). Тип: Булево. Флаг выполнения операции; поднимается в случае ошибок при подключении конечной точки. +// URLВебСервисаПолучателя (обязательный). Тип: Строка. Веб-адрес подключаемой конечной точки. +// ИмяПользователяПолучателя (обязательный). Тип: Строка. Пользователь для аутентификации в подключаемой конечной точке +// при работе через web-сервис подсистемы обмена сообщениями. +// ПарольПолучателя (обязательный). Тип: Строка. Пароль пользователя в подключаемой конечной точке. +// URLВебСервисаОтправителя (обязательный). Тип: Строка. Веб-адрес этой информационной базы со стороны подключаемой конечной точки. +// ИмяПользователяОтправителя (обязательный). Тип: Строка. Пользователь для аутентификации в этой информационной базе +// при работе через web-сервис подсистемы обмена сообщениями. +// ПарольОтправителя (обязательный). Тип: Строка. Пароль пользователя в этой информационной базе. +// КонечнаяТочка (необязательный). Тип: ПланОбменаСсылка.ОбменСообщениями; Неопределено. Если подключение конечной точки завершилось успешно, +// то в этот параметр возвращается ссылка на узел плана обмена, который соответствует подключенной конечной точке. +// Если подключить конечную точку не удалось, то возвращается Неопределено. +// НаименованиеКонечнойТочкиПолучателя (необязательный). Тип: Строка (150). Наименование подключаемой конечной точки. Если значение не задано, +// то в качестве наименования используется синоним конфигурации подключаемой конечной точки. +// НаименованиеКонечнойТочкиОтправителя (необязательный). Тип: Строка (150). Наименование конечной точки, которая соответствует этой информационной базе. +// Если значение не задано, то в качестве наименования используется синоним конфигурации этой информационной базы. +// +Процедура ПодключитьКонечнуюТочку(Отказ, + URLВебСервисаПолучателя, + ИмяПользователяПолучателя, + ПарольПолучателя, + URLВебСервисаОтправителя, + ИмяПользователяОтправителя, + ПарольОтправителя, + КонечнаяТочка = Неопределено, + НаименованиеКонечнойТочкиПолучателя = "", + НаименованиеКонечнойТочкиОтправителя = "" + ) Экспорт + + НастройкиПодключенияОтправителя = ОбменДаннымиСервер.СтруктураПараметровWS(); + НастройкиПодключенияОтправителя.WSURLВебСервиса = URLВебСервисаПолучателя; + НастройкиПодключенияОтправителя.WSИмяПользователя = ИмяПользователяПолучателя; + НастройкиПодключенияОтправителя.WSПароль = ПарольПолучателя; + + НастройкиПодключенияПолучателя = ОбменДаннымиСервер.СтруктураПараметровWS(); + НастройкиПодключенияПолучателя.WSURLВебСервиса = URLВебСервисаОтправителя; + НастройкиПодключенияПолучателя.WSИмяПользователя = ИмяПользователяОтправителя; + НастройкиПодключенияПолучателя.WSПароль = ПарольОтправителя; + + ОбменСообщениямиВнутренний.ВыполнитьПодключениеКонечнойТочкиНаСторонеОтправителя(Отказ, + НастройкиПодключенияОтправителя, + НастройкиПодключенияПолучателя, + КонечнаяТочка, + НаименованиеКонечнойТочкиПолучателя, + НаименованиеКонечнойТочкиОтправителя + ); + +КонецПроцедуры + +// Выполняет обновление настроек подключения для конечной точки. +// Обновляются настройки подключения этой информационной базы к указанной конечной точке +// и настройки подключения конечной точки к этой информационной базе. +// Перед применением настроек выполняется проверка подключения на правильность задания настроек. +// Также проверяется то, что настройки подключения получателя указывают на текущего отправителя. +// +// Параметры: +// Отказ (обязательный). Тип: Булево. Флаг выполнения операции; поднимается в случае ошибок. +// КонечнаяТочка (обязательный). Тип: ПланОбменаСсылка.ОбменСообщениями. Ссылка на узел плана обмена, который соответствует конечной точке. +// URLВебСервисаПолучателя (обязательный). Тип: Строка. Веб-адрес конечной точки. +// ИмяПользователяПолучателя (обязательный). Тип: Строка. Пользователь для аутентификации в конечной точке +// при работе через web-сервис подсистемы обмена сообщениями. +// ПарольПолучателя (обязательный). Тип: Строка. Пароль пользователя в конечной точке. +// URLВебСервисаОтправителя (обязательный). Тип: Строка. Веб-адрес этой информационной базы со стороны конечной точки. +// ИмяПользователяОтправителя (обязательный). Тип: Строка. Пользователь для аутентификации в этой информационной базе +// при работе через web-сервис подсистемы обмена сообщениями. +// ПарольОтправителя (обязательный). Тип: Строка. Пароль пользователя в этой информационной базе. +// +Процедура ОбновитьНастройкиПодключенияКонечнойТочки(Отказ, + КонечнаяТочка, + URLВебСервисаПолучателя, + ИмяПользователяПолучателя, + ПарольПолучателя, + URLВебСервисаОтправителя, + ИмяПользователяОтправителя, + ПарольОтправителя + ) Экспорт + + НастройкиПодключенияОтправителя = ОбменДаннымиСервер.СтруктураПараметровWS(); + НастройкиПодключенияОтправителя.WSURLВебСервиса = URLВебСервисаПолучателя; + НастройкиПодключенияОтправителя.WSИмяПользователя = ИмяПользователяПолучателя; + НастройкиПодключенияОтправителя.WSПароль = ПарольПолучателя; + + НастройкиПодключенияПолучателя = ОбменДаннымиСервер.СтруктураПараметровWS(); + НастройкиПодключенияПолучателя.WSURLВебСервиса = URLВебСервисаОтправителя; + НастройкиПодключенияПолучателя.WSИмяПользователя = ИмяПользователяОтправителя; + НастройкиПодключенияПолучателя.WSПароль = ПарольОтправителя; + + ОбменСообщениямиВнутренний.ВыполнитьОбновлениеНастроекПодключенияКонечнойТочки(Отказ, КонечнаяТочка, НастройкиПодключенияОтправителя, НастройкиПодключенияПолучателя); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура ОтправитьСообщениеВКаналСообщений(КаналСообщений, ТелоСообщения, Получатель, ЭтоБыстроеСообщение = Ложь) + + Если ТипЗнч(Получатель) = Тип("ПланОбменаСсылка.ОбменСообщениями") Тогда + + ОтправитьСообщениеПолучателю(КаналСообщений, ТелоСообщения, Получатель, ЭтоБыстроеСообщение); + + ИначеЕсли ТипЗнч(Получатель) = Тип("Массив") Тогда + + Для Каждого Элемент Из Получатель Цикл + + Если ТипЗнч(Элемент) <> Тип("ПланОбменаСсылка.ОбменСообщениями") Тогда + + ВызватьИсключение НСтр("ru = 'Указан неправильный получатель для метода ОбменСообщениями.ОтправитьСообщение().'"); + + КонецЕсли; + + ОтправитьСообщениеПолучателю(КаналСообщений, ТелоСообщения, Элемент, ЭтоБыстроеСообщение); + + КонецЦикла; + + ИначеЕсли Получатель = Неопределено Тогда + + ОтправитьСообщениеПолучателям(КаналСообщений, ТелоСообщения, ЭтоБыстроеСообщение); + + Иначе + + ВызватьИсключение НСтр("ru = 'Указан неправильный получатель для метода ОбменСообщениями.ОтправитьСообщение().'"); + + КонецЕсли; + +КонецПроцедуры + +Процедура ОтправитьСообщениеПодписчикамВКаналСообщений(КаналСообщений, ТелоСообщения, ЭтоБыстроеСообщение = Ложь) + + УстановитьПривилегированныйРежим(Истина); + + Получатели = РегистрыСведений.ПодпискиПолучателей.ПодписчикиКаналаСообщений(КаналСообщений); + + // Отправка сообщения получателю (конечной точке) + Для Каждого Получатель Из Получатели Цикл + + ОтправитьСообщениеПолучателю(КаналСообщений, ТелоСообщения, Получатель, ЭтоБыстроеСообщение); + + КонецЦикла; + +КонецПроцедуры + +Процедура ОтправитьСообщениеПолучателям(КаналСообщений, ТелоСообщения, ЭтоБыстроеСообщение) + Перем ДинамическиПодключенныеПолучатели; + + УстановитьПривилегированныйРежим(Истина); + + // Получатели сообщения из регистра + Получатели = РегистрыСведений.НастройкиОтправителя.ПодписчикиКаналаСообщений(КаналСообщений); + + // Получатели сообщения из кода + ОбменСообщениямиПереопределяемый.ПолучателиСообщения(КаналСообщений, ДинамическиПодключенныеПолучатели); + + // Получаем массив уникальных получателей из двух массивов. + // Для этого используем временную таблицу значений. + ТаблицаПолучателей = Новый ТаблицаЗначений; + ТаблицаПолучателей.Колонки.Добавить("Получатель"); + Для Каждого Получатель Из Получатели Цикл + ТаблицаПолучателей.Добавить().Получатель = Получатель; + КонецЦикла; + + Если ТипЗнч(ДинамическиПодключенныеПолучатели) = Тип("Массив") Тогда + + Для Каждого Получатель Из ДинамическиПодключенныеПолучатели Цикл + ТаблицаПолучателей.Добавить().Получатель = Получатель; + КонецЦикла; + + КонецЕсли; + + ТаблицаПолучателей.Свернуть("Получатель"); + + Получатели = ТаблицаПолучателей.ВыгрузитьКолонку("Получатель"); + + // Отправка сообщения получателю (конечной точке) + Для Каждого Получатель Из Получатели Цикл + + ОтправитьСообщениеПолучателю(КаналСообщений, ТелоСообщения, Получатель, ЭтоБыстроеСообщение); + + КонецЦикла; + +КонецПроцедуры + +Процедура ОтправитьСообщениеПолучателю(КаналСообщений, ТелоСообщения, Получатель, ЭтоБыстроеСообщение) + + Если Не ТранзакцияАктивна() Тогда + + ВызватьИсключение НСтр("ru = 'Отправка сообщений может выполняться только в транзакции.'"); + + КонецЕсли; + + Если Не ЗначениеЗаполнено(КаналСообщений) Тогда + + ВызватьИсключение НСтр("ru = 'Не задано значение параметра ""КаналСообщений"" для метода ОбменСообщениями.ОтправитьСообщение.'"); + + ИначеЕсли СтрДлина(КаналСообщений) > 150 Тогда + + ВызватьИсключение НСтр("ru = 'Длина имени канала сообщений не должна превышать 150 символов.'"); + + ИначеЕсли Не ЗначениеЗаполнено(Получатель) Тогда + + ВызватьИсключение НСтр("ru = 'Не задано значение параметра ""Получатель"" для метода ОбменСообщениями.ОтправитьСообщение.'"); + + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + НовоеСообщение = Справочники.СообщенияСистемы.СоздатьЭлемент(); + НовоеСообщение.Наименование = КаналСообщений; + НовоеСообщение.Код = 0; + НовоеСообщение.КоличествоПопытокОбработкиСообщения = 0; + НовоеСообщение.Заблокировано = Ложь; + НовоеСообщение.ТелоСообщения = Новый ХранилищеЗначения(ТелоСообщения); + НовоеСообщение.Отправитель = ОбменСообщениямиВнутренний.ЭтотУзел(); + НовоеСообщение.ЭтоБыстроеСообщение = ЭтоБыстроеСообщение; + + Если Получатель = ОбменСообщениямиВнутренний.ЭтотУзел() Тогда + + НовоеСообщение.Получатель = ОбменСообщениямиВнутренний.ЭтотУзел(); + + Иначе + + НовоеСообщение.ОбменДанными.Получатели.Добавить(Получатель); + НовоеСообщение.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + + НовоеСообщение.Получатель = Получатель; + + КонецЕсли; + + НовоеСообщение.Записать(); + +КонецПроцедуры + +Функция НачатьОтправкуБыстрыхСообщений() + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Константа.БлокировкаОтправкиБыстрыхСообщений"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + БлокировкаОтправкиБыстрыхСообщений = Константы.БлокировкаОтправкиБыстрыхСообщений.Получить(); + + // метод ТекущаяДатаСеанса() использовать нельзя. + // Текущая дата сервера в данном случае используется в качестве ключа уникальности. + Если БлокировкаОтправкиБыстрыхСообщений >= ТекущаяДата() Тогда + ЗафиксироватьТранзакцию(); + Возврат Ложь; + КонецЕсли; + + Константы.БлокировкаОтправкиБыстрыхСообщений.Установить(ТекущаяДата() + 60 * 5); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Истина; +КонецФункции + +Процедура ЗавершитьОтправкуБыстрыхСообщений() + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Константа.БлокировкаОтправкиБыстрыхСообщений"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + Константы.БлокировкаОтправкиБыстрыхСообщений.Установить(Дата('00010101')); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура ОтменитьОтправкуБыстрыхСообщений() + + ЗавершитьОтправкуБыстрыхСообщений(); + +КонецПроцедуры + +Процедура УдалитьРегистрациюИзменений(КонечнаяТочка, Знач Сообщения) + + Для Каждого Сообщение Из Сообщения Цикл + + ПланыОбмена.УдалитьРегистрациюИзменений(КонечнаяТочка, Сообщение); + + КонецЦикла; + +КонецПроцедуры + +Процедура ДоставитьСообщенияПолучателю(КонечнаяТочка, Знач Сообщения) + + Поток = ""; + + ОбменСообщениямиВнутренний.СериализоватьДанныеВПоток(Сообщения, Поток); + + ОбменСообщениямиПовтИсп.WSПроксиКонечнойТочки(КонечнаяТочка).DeliverMessages(ОбменСообщениямиВнутренний.КодЭтогоУзла(), Новый ХранилищеЗначения(Поток, Новый СжатиеДанных(9))); + +КонецПроцедуры + + diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияВызовСервера/ДатыЗапретаИзмененияВызовСервера.mdo b/SSL/src/CommonModules/ОбменСообщениями/ОбменСообщениями.mdo similarity index 50% rename from SSL/src/CommonModules/ДатыЗапретаИзмененияВызовСервера/ДатыЗапретаИзмененияВызовСервера.mdo rename to SSL/src/CommonModules/ОбменСообщениями/ОбменСообщениями.mdo index 6a63d3c20..6e34d8659 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияВызовСервера/ДатыЗапретаИзмененияВызовСервера.mdo +++ b/SSL/src/CommonModules/ОбменСообщениями/ОбменСообщениями.mdo @@ -1,9 +1,9 @@ - - ДатыЗапретаИзмененияВызовСервера + + ОбменСообщениями ru - Даты запрета изменения вызов сервера + Обмен сообщениями true true diff --git a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl new file mode 100644 index 000000000..10b472484 --- /dev/null +++ b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl @@ -0,0 +1,1112 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОбменСообщениямиВнутренний. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий подсистемы Обмена данными + +// Обработчик события ПередОтправкойДанных подсистемы Обмена данными +// Описание обработчика см. ОбщийМодуль.ОбменДаннымиПереопределяемый.ПередОтправкойДанных() +// +Процедура ПередОтправкойДанных(СтандартнаяОбработка, + Получатель, + ИмяФайлаСообщения, + ДанныеСообщения, + КоличествоЭлементовВТранзакции, + ИмяСобытияЖурналаРегистрации, + КоличествоОтправленныхОбъектов + ) Экспорт + + Если ТипЗнч(Получатель) <> Тип("ПланОбменаСсылка.ОбменСообщениями") Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + + ТаблицаВыборкиДанных = Новый ТаблицаЗначений; + ТаблицаВыборкиДанных.Колонки.Добавить("Данные"); + ТаблицаВыборкиДанных.Колонки.Добавить("Порядок", Новый ОписаниеТипов("Число")); + + ЗаписьВФайл = Не ПустаяСтрока(ИмяФайлаСообщения); + + ЗаписьXML = Новый ЗаписьXML; + + Если ЗаписьВФайл Тогда + ЗаписьXML.ОткрытьФайл(ИмяФайлаСообщения); + Иначе + ЗаписьXML.УстановитьСтроку(); + КонецЕсли; + + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + // Создаем новое сообщение + ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); + + ЗаписьСообщения.НачатьЗапись(ЗаписьXML, Получатель); + + // считаем количество записанных объектов + КоличествоЗаписанныхОбъектов = 0; + КоличествоОтправленныхОбъектов = 0; + + ИспользоватьТранзакции = КоличествоЭлементовВТранзакции <> 1; + + Если ИспользоватьТранзакции Тогда + НачатьТранзакцию(); + КонецЕсли; + + Попытка + + // Получаем выборку изменённых данных + ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения); + + Пока ВыборкаИзменений.Следующий() Цикл + + СтрокаТаблицы = ТаблицаВыборкиДанных.Добавить(); + СтрокаТаблицы.Данные = ВыборкаИзменений.Получить(); + СтрокаТаблицы.Порядок = ?(ТипЗнч(СтрокаТаблицы.Данные) = Тип("СправочникОбъект.СообщенияСистемы"), СтрокаТаблицы.Данные.Код, 0); + + КонецЦикла; + + ТаблицаВыборкиДанных.Сортировать("Порядок Возр"); + + Для Каждого СтрокаТаблицы Из ТаблицаВыборкиДанных Цикл + + Если ТипЗнч(СтрокаТаблицы.Данные) = Тип("СправочникОбъект.СообщенияСистемы") Тогда + СтрокаТаблицы.Данные.Код = 0; + КонецЕсли; + + // Записываем данные в сообщение + ЗаписатьXML(ЗаписьXML, СтрокаТаблицы.Данные); + + КоличествоЗаписанныхОбъектов = КоличествоЗаписанныхОбъектов + 1; + КоличествоОтправленныхОбъектов = КоличествоОтправленныхОбъектов + 1; + + Если ИспользоватьТранзакции + И КоличествоЭлементовВТранзакции > 0 + И КоличествоЗаписанныхОбъектов = КоличествоЭлементовВТранзакции Тогда + + // промежуточную транзакцию закрываем и открываем новую + ЗафиксироватьТранзакцию(); + НачатьТранзакцию(); + + КоличествоЗаписанныхОбъектов = 0; + КонецЕсли; + + КонецЦикла; + + Если ИспользоватьТранзакции Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; + + // Завершаем запись сообщения + ЗаписьСообщения.ЗакончитьЗапись(); + + ДанныеСообщения = ЗаписьXML.Закрыть(); + + Исключение + + Если ИспользоватьТранзакции Тогда + ОтменитьТранзакцию(); + КонецЕсли; + + ЗаписьСообщения.ПрерватьЗапись(); + ЗаписьXML.Закрыть(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + +КонецПроцедуры + +// Обработчик события ПередПолучениемДанных подсистемы Обмена данными +// Описание обработчика см. ОбщийМодуль.ОбменДаннымиПереопределяемый.ПередПолучениемДанных() +// +Процедура ПередПолучениемДанных(СтандартнаяОбработка, + Отправитель, + ИмяФайлаСообщения, + ДанныеСообщения, + КоличествоЭлементовВТранзакции, + ИмяСобытияЖурналаРегистрации, + КоличествоПолученныхОбъектов + ) Экспорт + + Если ТипЗнч(Отправитель) <> Тип("ПланОбменаСсылка.ОбменСообщениями") Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + + ЧтениеXML = Новый ЧтениеXML; + + Если Не ПустаяСтрока(ДанныеСообщения) Тогда + ЧтениеXML.УстановитьСтроку(ДанныеСообщения); + Иначе + ЧтениеXML.ОткрытьФайл(ИмяФайлаСообщения); + КонецЕсли; + + ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); + ЧтениеСообщения.НачатьЧтение(ЧтениеXML, ДопустимыйНомерСообщения.Больший); + + // Удаляем регистрацию изменений для узла отправителя сообщения + ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + + // считаем сколько объектов прочитали + КоличествоЗаписанныхОбъектов = 0; + КоличествоПолученныхОбъектов = 0; + + ИспользоватьТранзакции = КоличествоЭлементовВТранзакции <> 1; + + Если ИспользоватьТранзакции Тогда + НачатьТранзакцию(); + КонецЕсли; + + Попытка + + // Читаем данные из сообщения + Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл + + // Читаем очередное значение + Данные = ПрочитатьXML(ЧтениеXML); + + КоличествоПолученныхОбъектов = КоличествоПолученныхОбъектов + 1; + + // В случае коллизии изменений приоритет отдаем текущей информационной базе + Если ПланыОбмена.ИзменениеЗарегистрировано(ЧтениеСообщения.Отправитель, Данные) Тогда + Продолжить; + КонецЕсли; + + Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель; + Данные.ОбменДанными.Загрузка = Истина; + + Если ТипЗнч(Данные) = Тип("СправочникОбъект.СообщенияСистемы") Тогда + + Данные.УстановитьНовыйКод(); + Данные.Отправитель = ЧтениеСообщения.Отправитель; + Данные.Получатель = ЭтотУзел(); + Данные.ДополнительныеСвойства.Вставить("НеПроверятьДатыЗапретаИзмененияДанных"); + + ИначеЕсли ТипЗнч(Данные) = Тип("РегистрСведенийНаборЗаписей.ПодпискиПолучателей") Тогда + + Данные.Отбор["Получатель"].Значение = ЧтениеСообщения.Отправитель; + + Для Каждого СтрокаНабораЗаписей Из Данные Цикл + + СтрокаНабораЗаписей.Получатель = ЧтениеСообщения.Отправитель; + + КонецЦикла; + + КонецЕсли; + + Данные.Записать(); + + КоличествоЗаписанныхОбъектов = КоличествоЗаписанныхОбъектов + 1; + + Если ИспользоватьТранзакции + И КоличествоЭлементовВТранзакции > 0 + И КоличествоЗаписанныхОбъектов = КоличествоЭлементовВТранзакции Тогда + + // промежуточную транзакцию закрываем и открываем новую + ЗафиксироватьТранзакцию(); + НачатьТранзакцию(); + + КоличествоЗаписанныхОбъектов = 0; + КонецЕсли; + + КонецЦикла; + + ЧтениеСообщения.ЗакончитьЧтение(); + ЧтениеXML.Закрыть(); + + Если ИспользоватьТранзакции Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; + + Исключение + Если ИспользоватьТранзакции Тогда + ОтменитьТранзакцию(); + КонецЕсли; + ЧтениеСообщения.ПрерватьЧтение(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.ОбщиеДанные = Истина; + Обработчик.Процедура = "ОбменСообщениямиВнутренний.УстановитьКодЭтойКонечнойТочки"; + +КонецПроцедуры + +// Устанавливает код этой конечной точки, если не установлен. +// +Процедура УстановитьКодЭтойКонечнойТочки() Экспорт + + Если ПустаяСтрока(КодЭтогоУзла()) Тогда + + ЭтаКонечнаяТочка = ЭтотУзел().ПолучитьОбъект(); + ЭтаКонечнаяТочка.Код = Строка(Новый УникальныйИдентификатор()); + ЭтаКонечнаяТочка.Записать(); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции + +// Обработчик регламентного задания для отправки и получения сообщений системы +// +Процедура ОтправитьИПолучитьСообщенияПоРегламентномуЗаданию() Экспорт + + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + ОтправитьИПолучитьСообщения(Ложь); + +КонецПроцедуры + +// Выполняет отправку и получение сообщений системы +// +// Параметры: +// Отказ – Булево. Флаг отказа. Поднимается в случае возникновения ошибок в процессе выполнения операции. +// +Процедура ОтправитьИПолучитьСообщения(Отказ) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ВыполнитьОтправкуИПолучениеСообщенийЧерезWebСервис(Отказ); + + ВыполнитьОтправкуИПолучениеСообщенийЧерезОбычныеКаналыСвязи(Отказ); + + ОбработатьОчередьСообщенийСистемы(); + +КонецПроцедуры + +// Только для внутреннего использования +Процедура ОбработатьОчередьСообщенийСистемы(Отбор = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ОбработчикиСообщений = ОбработчикиСообщений(); + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 100 + | СообщенияСистемы.Ссылка КАК Ссылка + |ИЗ + | Справочник.СообщенияСистемы КАК СообщенияСистемы + |ГДЕ + | СообщенияСистемы.Получатель = &Получатель + | И (НЕ СообщенияСистемы.Заблокировано) + | [Отбор] + | + |УПОРЯДОЧИТЬ ПО + | СообщенияСистемы.Код"; + + СтрокаОтбора = ?(Отбор = Неопределено, "", "И СообщенияСистемы.Ссылка В(&Отбор)"); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[Отбор]", СтрокаОтбора); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Получатель", ЭтотУзел()); + Запрос.УстановитьПараметр("Отбор", Отбор); + Запрос.Текст = ТекстЗапроса; + + РезультатЗапроса = ПолучитьРезультатЗапроса(Запрос); + + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + + ОбъектСообщения = Выборка.Ссылка.ПолучитьОбъект(); + + Попытка + ОбъектСообщения.Заблокировать(); + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЭтойПодсистемы(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + Продолжить; + КонецПопытки; + + Попытка + + ЗаголовокСообщения = Новый Структура("КаналСообщений, Отправитель", ОбъектСообщения.Наименование, ОбъектСообщения.Отправитель); + + НайденныеСтроки = ОбработчикиСообщений.НайтиСтроки(Новый Структура("Канал", ЗаголовокСообщения.КаналСообщений)); + + СообщениеОбработано = Истина; + + // Обрабатываем сообщение + Попытка + + Если НайденныеСтроки.Количество() = 0 Тогда + ОбъектСообщения.Заблокировано = Истина; + ВызватьИсключение НСтр("ru = 'Не назначен обработчик для сообщения.'"); + КонецЕсли; + + Для Каждого СтрокаТаблицы Из НайденныеСтроки Цикл + + СтрокаТаблицы.Обработчик.ОбработатьСообщение(ЗаголовокСообщения.КаналСообщений, ОбъектСообщения.ТелоСообщения.Получить(), ЗаголовокСообщения.Отправитель); + + КонецЦикла; + Исключение + + Пока ТранзакцияАктивна() Цикл + ОтменитьТранзакцию(); + КонецЦикла; + + СообщениеОбработано = Ложь; + + ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЭтойПодсистемы(), + УровеньЖурналаРегистрации.Ошибка,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка обработки сообщения %1: %2'"), + ЗаголовокСообщения.КаналСообщений, ПодробноеПредставлениеОшибки) + ); + КонецПопытки; + + Если СообщениеОбработано Тогда + + // Удаляем сообщение + Если ЗначениеЗаполнено(ОбъектСообщения.Отправитель) + И ОбъектСообщения.Отправитель <> ЭтотУзел() Тогда + + ОбъектСообщения.ОбменДанными.Получатели.Добавить(ОбъектСообщения.Отправитель); + ОбъектСообщения.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + + КонецЕсли; + + ОбъектСообщения.ОбменДанными.Загрузка = Истина; // Наличие ссылок на справочник не должно препятствовать или замедлять удаление элементов справочника. + ОбъектСообщения.Удалить(); + + Иначе + + + ОбъектСообщения.КоличествоПопытокОбработкиСообщения = ОбъектСообщения.КоличествоПопытокОбработкиСообщения + 1; + ОбъектСообщения.ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки; + + Если ОбъектСообщения.КоличествоПопытокОбработкиСообщения >= 3 Тогда + ОбъектСообщения.Заблокировано = Истина; + КонецЕсли; + + ОбъектСообщения.Записать(); + + КонецЕсли; + + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЭтойПодсистемы(), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +// Только для внутреннего использования +Процедура УстановитьВедущуюКонечнуюТочкуНаСторонеОтправителя(Отказ, НастройкиПодключенияОтправителя, КонечнаяТочка) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + СтрокаСообщенияОбОшибке = ""; + + WSПрокси = ПолучитьWSПрокси(НастройкиПодключенияОтправителя, СтрокаСообщенияОбОшибке); + + Если WSПрокси = Неопределено Тогда + Отказ = Истина; + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаВедущейКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + + КонечнаяТочкаОбъект = КонечнаяТочка.ПолучитьОбъект(); + КонечнаяТочкаОбъект.Ведущая = Ложь; + КонечнаяТочкаОбъект.Записать(); + + //обновляем настройки подключения + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Узел", КонечнаяТочка); + СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + + СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); + СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); + СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияОтправителя.WSПароль); + + // добавляем запись в РС + РегистрыСведений.НастройкиТранспортаОбмена.ДобавитьЗапись(СтруктураЗаписи); + + // Устанавливаем ведущую конечную точку на стороне получателя + WSПрокси.SetLeadingEndPoint(КонечнаяТочкаОбъект.Код, КодЭтогоУзла()); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Отказ = Истина; + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаВедущейКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + Возврат; + КонецПопытки; + +КонецПроцедуры + +// Только для внутреннего использования +Процедура УстановитьВедущуюКонечнуюТочкуНаСторонеПолучателя(КодЭтойКонечнойТочки, КодВедущейКонечнойТочки) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ПланыОбмена.ОбменСообщениями.НайтиПоКоду(КодЭтойКонечнойТочки) <> ЭтотУзел() Тогда + СтрокаСообщенияОбОшибке = НСтр("ru = 'Заданы неверные параметры подключения к конечной точке. Параметры подключения указывают на другую конечную точку.'"); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаВедущейКонечнойТочки(), + УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + + УзелКонечнойТочки = ПланыОбмена.ОбменСообщениями.НайтиПоКоду(КодВедущейКонечнойТочки); + + Если УзелКонечнойТочки.Пустая() Тогда + + ВызватьИсключение НСтр("ru = 'Конечная точка в базе-корреспонденте не обнаружена.'"); + + КонецЕсли; + УзелКонечнойТочкиОбъект = УзелКонечнойТочки.ПолучитьОбъект(); + УзелКонечнойТочкиОбъект.Ведущая = Истина; + УзелКонечнойТочкиОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаВедущейКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + +КонецПроцедуры + +// Только для внутреннего использования +Процедура ВыполнитьПодключениеКонечнойТочкиНаСторонеПолучателя(Отказ, Код, Наименование, НастройкиПодключенияПолучателя) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + + //создаем/обновляем узел плана обмена, который соответствует подключаемой конечной точке + УзелКонечнойТочки = ПланыОбмена.ОбменСообщениями.НайтиПоКоду(Код); + Если УзелКонечнойТочки.Пустая() Тогда + УзелКонечнойТочкиОбъект = ПланыОбмена.ОбменСообщениями.СоздатьУзел(); + УзелКонечнойТочкиОбъект.Код = Код; + Иначе + УзелКонечнойТочкиОбъект = УзелКонечнойТочки.ПолучитьОбъект(); + УзелКонечнойТочкиОбъект.НомерПринятого = 0; + КонецЕсли; + УзелКонечнойТочкиОбъект.Наименование = Наименование; + УзелКонечнойТочкиОбъект.Ведущая = Истина; + УзелКонечнойТочкиОбъект.Записать(); + + //обновляем настройки подключения + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Узел", УзелКонечнойТочкиОбъект.Ссылка); + СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + + СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", 0); + СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", 0); + + СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияПолучателя.WSURLВебСервиса); + СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияПолучателя.WSИмяПользователя); + СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияПолучателя.WSПароль); + + // добавляем запись в РС + РегистрыСведений.НастройкиТранспортаОбмена.ДобавитьЗапись(СтруктураЗаписи); + + Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменДанными") = Ложь Тогда + Константы.ИспользоватьОбменДанными.Установить(Истина); + КонецЕсли; + + // Устанавливаем признак использования регламентного задания + РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы); + Если Не РегламентноеЗадание.Использование Тогда + РегламентныеЗаданияСервер.УстановитьИспользованиеРегламентногоЗадания(Строка(РегламентноеЗадание.УникальныйИдентификатор), Истина); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Отказ = Истина; + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + +КонецПроцедуры + +// Только для внутреннего использования +Процедура ВыполнитьОбновлениеНастроекПодключенияКонечнойТочки(Отказ, КонечнаяТочка, НастройкиПодключенияОтправителя, НастройкиПодключенияПолучателя) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + СтрокаСообщенияОбОшибке = ""; + + ВерсииКорреспондента = ВерсииКорреспондента(НастройкиПодключенияОтправителя); + ВерсияКорреспондента_2_0_1_6 = (ВерсииКорреспондента.Найти("2.0.1.6") <> Неопределено); + + Если ВерсияКорреспондента_2_0_1_6 Тогда + WSПрокси = ПолучитьWSПрокси_2_0_1_6(НастройкиПодключенияОтправителя, СтрокаСообщенияОбОшибке); + Иначе + WSПрокси = ПолучитьWSПрокси(НастройкиПодключенияОтправителя, СтрокаСообщенияОбОшибке); + КонецЕсли; + + Если WSПрокси = Неопределено Тогда + Отказ = Истина; + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + Возврат; + КонецЕсли; + + Попытка + Если ВерсияКорреспондента_2_0_1_6 Тогда + WSПрокси.TestConnectionRecipient(СериализаторXDTO.ЗаписатьXDTO(НастройкиПодключенияПолучателя), КодЭтогоУзла()); + Иначе + WSПрокси.TestConnectionRecipient(ЗначениеВСтрокуВнутр(НастройкиПодключенияПолучателя), КодЭтогоУзла()); + КонецЕсли; + Исключение + Отказ = Истина; + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат; + КонецПопытки; + + НачатьТранзакцию(); + Попытка + + //обновляем настройки подключения + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Узел", КонечнаяТочка); + СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + + СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); + СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); + СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияОтправителя.WSПароль); + + // добавляем запись в РС + РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); + + Если ВерсияКорреспондента_2_0_1_6 Тогда + WSПрокси.UpdateConnectionSettings(КодЭтогоУзла(), СериализаторXDTO.ЗаписатьXDTO(НастройкиПодключенияПолучателя)); + Иначе + WSПрокси.UpdateConnectionSettings(КодЭтогоУзла(), ЗначениеВСтрокуВнутр(НастройкиПодключенияПолучателя)); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Отказ = Истина; + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + Возврат; + КонецПопытки; + +КонецПроцедуры + +// Только для внутреннего использования +Процедура ДобавитьОбработчикКаналаСообщений(Канал, ОбработчикКанала, Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Канал = Канал; + Обработчик.Обработчик = ОбработчикКанала; + +КонецПроцедуры + +// Только для внутреннего использования +Функция КодЭтогоУзла() Экспорт + + Возврат ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭтотУзел(), "Код"); + +КонецФункции + +// Только для внутреннего использования +Функция НаименованиеЭтогоУзла() Экспорт + + Возврат ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭтотУзел(), "Наименование"); + +КонецФункции + +// Только для внутреннего использования +Функция ЭтотУзел() Экспорт + + Возврат ПланыОбмена.ОбменСообщениями.ЭтотУзел(); + +КонецФункции + +// Только для внутреннего использования +Функция ВсеПолучатели() Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | ОбменСообщениями.Ссылка КАК Получатель + |ИЗ + | ПланОбмена.ОбменСообщениями КАК ОбменСообщениями + |ГДЕ + | ОбменСообщениями.Ссылка <> &ЭтотУзел"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ЭтотУзел", ЭтотУзел()); + Запрос.Текст = ТекстЗапроса; + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Получатель"); +КонецФункции + +// Только для внутреннего использования +Функция ПолучитьРезультатЗапроса(Запрос) Экспорт + + // возвращаемое значение функции + Результат = Неопределено; + + КоличествоПопыток = 0; + Пока КоличествоПопыток < 5 Цикл + Попытка + Результат = Запрос.Выполнить(); + Прервать; + Исключение + КоличествоПопыток = КоличествоПопыток + 1; + + Если КоличествоПопыток = 5 Тогда + + ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЭтойПодсистемы(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки + ); + ВызватьИсключение ПодробноеПредставлениеОшибки; + КонецЕсли; + + КонецПопытки; + КонецЦикла; + + Если Результат = Неопределено Тогда + + ВызватьИсключение(НСтр("ru = 'Ошибка при получении списка сообщений из очереди.'")); + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Только для внутреннего использования +Процедура СериализоватьДанныеВПоток(ВыборкаДанных, Поток) Экспорт + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + ЗаписьXML.ЗаписатьНачалоЭлемента("Root"); + + Для Каждого Ссылка Из ВыборкаДанных Цикл + + Данные = Ссылка.ПолучитьОбъект(); + Данные.Код = 0; + + ЗаписатьXML(ЗаписьXML, Данные); + + КонецЦикла; + ЗаписьXML.ЗаписатьКонецЭлемента(); + + Поток = ЗаписьXML.Закрыть(); + +КонецПроцедуры + +// Только для внутреннего использования +Процедура СериализоватьДанныеИзПотока(Отправитель, Поток, ЗагруженныеОбъекты = Неопределено) Экспорт + + ЗагруженныеОбъекты = Новый Массив; + + НачатьТранзакцию(); + Попытка + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(Поток); + ЧтениеXML.Прочитать(); // узел "Root" + ЧтениеXML.Прочитать(); // узел объекта + + Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл + + Данные = ПрочитатьXML(ЧтениеXML); + + // В случае коллизии изменений приоритет отдаем текущей информационной базе + Если ПланыОбмена.ИзменениеЗарегистрировано(Отправитель, Данные) Тогда + Продолжить; + КонецЕсли; + + Данные.ОбменДанными.Отправитель = Отправитель; + Данные.ОбменДанными.Загрузка = Истина; + + Если ТипЗнч(Данные) <> Тип("УдалениеОбъекта") Тогда + + Данные.УстановитьНовыйКод(); + Данные.Отправитель = Отправитель; + Данные.Получатель = ЭтотУзел(); + Данные.ДополнительныеСвойства.Вставить("НеПроверятьДатыЗапретаИзмененияДанных"); + КонецЕсли; + + Данные.Записать(); + + ЗагруженныеОбъекты.Добавить(Данные.Ссылка); + + КонецЦикла; + + ЧтениеXML.Закрыть(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Только для внутреннего использования +Функция ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке = "") Экспорт + + СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/MessageExchange"); + СтруктураНастроек.Вставить("WSИмяСервиса", "MessageExchange"); + + Возврат ОбменДаннымиСервер.ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке); +КонецФункции + +// Только для внутреннего использования +Функция ПолучитьWSПрокси_2_0_1_6(СтруктураНастроек, СтрокаСообщенияОбОшибке = "") Экспорт + + СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/MessageExchange_2_0_1_6"); + СтруктураНастроек.Вставить("WSИмяСервиса", "MessageExchange_2_0_1_6"); + + Возврат ОбменДаннымиСервер.ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке); +КонецФункции + +// Возвращает массив номеров версий, поддерживаемых интерфейсом корреспондента для подсистемы ОбменСообщениями. +// +// Параметры: +// Корреспондент – Структура, ПланОбменаСсылка. Узел плана обмена, который соответствует информационной базе-корреспонденту. +// +// Возвращаемое значение: +// Массив номеров версий, поддерживаемых интерфейсом корреспондента. +// +Функция ВерсииКорреспондента(Знач Корреспондент) Экспорт + + Если ТипЗнч(Корреспондент) = Тип("Структура") Тогда + СтруктураНастроек = Корреспондент; + Иначе + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(Корреспондент); + КонецЕсли; + + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("URL", СтруктураНастроек.WSURLВебСервиса); + ПараметрыПодключения.Вставить("UserName", СтруктураНастроек.WSИмяПользователя); + ПараметрыПодключения.Вставить("Password", СтруктураНастроек.WSПароль); + + Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "ОбменСообщениями"); +КонецФункции + +// Только для внутреннего использования +Функция СобытиеЖурналаРегистрацииПодключениеКонечнойТочки() Экспорт + + Возврат НСтр("ru = 'Обмен сообщениями.Подключение конечной точки'"); + +КонецФункции + +// Только для внутреннего использования +Функция СобытиеЖурналаРегистрацииУстановкаВедущейКонечнойТочки() Экспорт + + Возврат НСтр("ru = 'Обмен сообщениями.Установка ведущей конечной точки'"); + +КонецФункции + +// Только для внутреннего использования +Функция СобытиеЖурналаРегистрацииЭтойПодсистемы() Экспорт + + Возврат НСтр("ru = 'Обмен сообщениями'"); + +КонецФункции + +// Только для внутреннего использования +Функция НаименованиеЭтогоУзлаПоУмолчанию() Экспорт + + Возврат ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции + +// Только для внутреннего использования +Процедура ВыполнитьОтправкуИПолучениеСообщенийЧерезWebСервис(Отказ) + + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ОбменСообщениями.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.ОбменСообщениями КАК ОбменСообщениями + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиТранспортаОбмена КАК НастройкиТранспортаОбмена + | ПО ОбменСообщениями.Ссылка = НастройкиТранспортаОбмена.Узел + |ГДЕ + | ОбменСообщениями.Ссылка <> &ЭтотУзел + | И (НЕ ОбменСообщениями.Ведущая) + | И (НЕ ОбменСообщениями.ПометкаУдаления) + | И НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.WS)"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ЭтотУзел", ЭтотУзел()); + Запрос.Текст = ТекстЗапроса; + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + МассивУзлов = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка"); + + // Загрузка данных от всех конечных точек + Для Каждого Получатель Из МассивУзлов Цикл + + Отказ1 = Ложь; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ1, Получатель, Истина, Ложь, Перечисления.ВидыТранспортаСообщенийОбмена.WS); + + Отказ = Отказ ИЛИ Отказ1; + + КонецЦикла; + + // Выгрузка данных для всех конечных точек + Для Каждого Получатель Из МассивУзлов Цикл + + Отказ1 = Ложь; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ1, Получатель, Ложь, Истина, Перечисления.ВидыТранспортаСообщенийОбмена.WS); + + Отказ = Отказ ИЛИ Отказ1; + + КонецЦикла; + +КонецПроцедуры + +// Только для внутреннего использования +Процедура ВыполнитьОтправкуИПолучениеСообщенийЧерезОбычныеКаналыСвязи(Отказ) + + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ОбменСообщениями.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.ОбменСообщениями КАК ОбменСообщениями + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиТранспортаОбмена КАК НастройкиТранспортаОбмена + | ПО ОбменСообщениями.Ссылка = НастройкиТранспортаОбмена.Узел + |ГДЕ + | ОбменСообщениями.Ссылка <> &ЭтотУзел + | И (НЕ ОбменСообщениями.ПометкаУдаления) + | И НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию <> ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.WS)"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ЭтотУзел", ЭтотУзел()); + Запрос.Текст = ТекстЗапроса; + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + МассивУзлов = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка"); + + // Загрузка данных от всех конечных точек + Для Каждого Получатель Из МассивУзлов Цикл + + Отказ1 = Ложь; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ1, Получатель, Истина, Ложь); + + Отказ = Отказ ИЛИ Отказ1; + + КонецЦикла; + + // Выгрузка данных для всех конечных точек + Для Каждого Получатель Из МассивУзлов Цикл + + Отказ1 = Ложь; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ1, Получатель, Ложь, Истина); + + Отказ = Отказ ИЛИ Отказ1; + + КонецЦикла; + +КонецПроцедуры + +// Только для внутреннего использования +Процедура ВыполнитьПодключениеКонечнойТочкиНаСторонеОтправителя(Отказ, + НастройкиПодключенияОтправителя, + НастройкиПодключенияПолучателя, + КонечнаяТочка, + НаименованиеКонечнойТочкиПолучателя, + НаименованиеКонечнойТочкиОтправителя + ) Экспорт + + СтрокаСообщенияОбОшибке = ""; + + УстановитьПривилегированныйРежим(Истина); + + ВерсииКорреспондента = ВерсииКорреспондента(НастройкиПодключенияОтправителя); + ВерсияКорреспондента_2_0_1_6 = (ВерсииКорреспондента.Найти("2.0.1.6") <> Неопределено); + + Если ВерсияКорреспондента_2_0_1_6 Тогда + WSПрокси = ПолучитьWSПрокси_2_0_1_6(НастройкиПодключенияОтправителя, СтрокаСообщенияОбОшибке); + Иначе + WSПрокси = ПолучитьWSПрокси(НастройкиПодключенияОтправителя, СтрокаСообщенияОбОшибке); + КонецЕсли; + + Если WSПрокси = Неопределено Тогда + Отказ = Истина; + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + Возврат; + КонецЕсли; + + Попытка + + Если ВерсияКорреспондента_2_0_1_6 Тогда + WSПрокси.TestConnectionRecipient(СериализаторXDTO.ЗаписатьXDTO(НастройкиПодключенияПолучателя), КодЭтогоУзла()); + Иначе + WSПрокси.TestConnectionRecipient(ЗначениеВСтрокуВнутр(НастройкиПодключенияПолучателя), КодЭтогоУзла()); + КонецЕсли; + + Исключение + Отказ = Истина; + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат; + КонецПопытки; + + Если ВерсияКорреспондента_2_0_1_6 Тогда + ПараметрыКонечнойТочки = СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetIBParameters(НаименованиеКонечнойТочкиПолучателя)); + Иначе + ПараметрыКонечнойТочки = ЗначениеИзСтрокиВнутр(WSПрокси.GetIBParameters(НаименованиеКонечнойТочкиПолучателя)); + КонецЕсли; + + УзелКонечнойТочки = ПланыОбмена.ОбменСообщениями.НайтиПоКоду(ПараметрыКонечнойТочки.Код); + + Если Не УзелКонечнойТочки.Пустая() Тогда + Отказ = Истина; + СтрокаСообщенияОбОшибке = НСтр("ru = 'Конечная точка уже подключена к информационной базе; наименование точки: %1'"); + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, ОбщегоНазначения.ПолучитьЗначениеРеквизита(УзелКонечнойТочки, "Наименование")); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + + // устанавливаем наименование этой точки при необходимости + Если ПустаяСтрока(НаименованиеЭтогоУзла()) Тогда + + ЭтотУзелОбъект = ЭтотУзел().ПолучитьОбъект(); + ЭтотУзелОбъект.Наименование = ?(ПустаяСтрока(НаименованиеКонечнойТочкиОтправителя), НаименованиеЭтогоУзлаПоУмолчанию(), НаименованиеКонечнойТочкиОтправителя); + ЭтотУзелОбъект.Записать(); + + КонецЕсли; + + // создаем узел плана обмена, который соответствует подключаемой конечной точке + УзелКонечнойТочкиОбъект = ПланыОбмена.ОбменСообщениями.СоздатьУзел(); + УзелКонечнойТочкиОбъект.Код = ПараметрыКонечнойТочки.Код; + УзелКонечнойТочкиОбъект.Наименование = ПараметрыКонечнойТочки.Наименование; + УзелКонечнойТочкиОбъект.Записать(); + + // обновляем настройки подключения + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Узел", УзелКонечнойТочкиОбъект.Ссылка); + СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + + СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", 0); + СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", 0); + + СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); + СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); + СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияОтправителя.WSПароль); + + // добавляем запись в РС + РегистрыСведений.НастройкиТранспортаОбмена.ДобавитьЗапись(СтруктураЗаписи); + + ПараметрыЭтойТочки = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ЭтотУзел(), "Код, Наименование"); + + // Выполняем подключение конечной точки на стороне получателя + Если ВерсияКорреспондента_2_0_1_6 Тогда + WSПрокси.ConnectEndPoint(ПараметрыЭтойТочки.Код, ПараметрыЭтойТочки.Наименование, СериализаторXDTO.ЗаписатьXDTO(НастройкиПодключенияПолучателя)); + Иначе + WSПрокси.ConnectEndPoint(ПараметрыЭтойТочки.Код, ПараметрыЭтойТочки.Наименование, ЗначениеВСтрокуВнутр(НастройкиПодключенияПолучателя)); + КонецЕсли; + + Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменДанными") = Ложь Тогда + Константы.ИспользоватьОбменДанными.Установить(Истина); + КонецЕсли; + + // Устанавливаем признак использования регламентного задания + РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы); + Если Не РегламентноеЗадание.Использование Тогда + РегламентныеЗаданияСервер.УстановитьИспользованиеРегламентногоЗадания(Строка(РегламентноеЗадание.УникальныйИдентификатор), Истина); + КонецЕсли; + + КонечнаяТочка = УзелКонечнойТочкиОбъект.Ссылка; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Отказ = Истина; + КонечнаяТочка = Неопределено; + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПодключениеКонечнойТочки(), УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + Возврат; + КонецПопытки; + +КонецПроцедуры + +// Только для внутреннего использования +Функция ОбработчикиСообщений() + + Результат = НоваяТаблицаОбработчиковСообщений(); + + ОбменСообщениямиПереопределяемый.ПолучитьОбработчикиКаналовСообщений(Результат); + + Возврат Результат; +КонецФункции + +// Только для внутреннего использования +Функция НоваяТаблицаОбработчиковСообщений() + + Обработчики = Новый ТаблицаЗначений; + Обработчики.Колонки.Добавить("Канал"); + Обработчики.Колонки.Добавить("Обработчик"); + + Возврат Обработчики; +КонецФункции diff --git a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/ОбменСообщениямиВнутренний.mdo b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/ОбменСообщениямиВнутренний.mdo new file mode 100644 index 000000000..6e7c24bcd --- /dev/null +++ b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/ОбменСообщениямиВнутренний.mdo @@ -0,0 +1,10 @@ + + + ОбменСообщениямиВнутренний + + ru + Обмен сообщениями внутренний + + true + true + diff --git a/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl new file mode 100644 index 000000000..21790a88d --- /dev/null +++ b/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl @@ -0,0 +1,80 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОбменСообщениямиКлиент: механизм обмена сообщениями. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Выполняет отправку и получение сообщений системы +// +Процедура ОтправитьИПолучитьСообщения() Экспорт + + Состояние(НСтр("ru = 'Выполняется отправка и получение сообщений.'"),, + НСтр("ru = 'Пожалуйста, подождите...'"), БиблиотекаКартинок.Информация32 + ); + + Отказ = Ложь; + + ОбменСообщениямиВнутренний.ОтправитьИПолучитьСообщения(Отказ); + + Если Отказ Тогда + + Состояние(НСтр("ru = 'Возникли ошибки при отправке и получении сообщений!'"),, + НСтр("ru = 'Используйте журнал регистрации для диагностики ошибок.'"), БиблиотекаКартинок.Ошибка32 + ); + + Иначе + + Состояние(НСтр("ru = 'Отправка и получение сообщений успешно завершены.'"),,, БиблиотекаКартинок.Информация32); + + КонецЕсли; + + Оповестить(ИмяСобытияВыполненаОтправкаИПолучениеСообещений()); + +КонецПроцедуры + +// Только для внутреннего использования. +// +// Возвращаемое значение: +// Строка. +// +Функция ИмяСобытияДобавленаКонечнаяТочка() Экспорт + + Возврат "ОбменСообщениями.ДобавленаКонечнаяТочка"; + +КонецФункции + +// Только для внутреннего использования. +// +// Возвращаемое значение: +// Строка. +// +Функция ИмяСобытияВыполненаОтправкаИПолучениеСообещений() Экспорт + + Возврат "ОбменСообщениями.ВыполненаОтправкаИПолучение"; + +КонецФункции + +// Только для внутреннего использования. +// +// Возвращаемое значение: +// Строка. +// +Функция ИмяСобытияЗакрытаФормаКонечнойТочки() Экспорт + + Возврат "ОбменСообщениями.ЗакрытаФормаКонечнойТочки"; + +КонецФункции + +// Только для внутреннего использования. +// +// Возвращаемое значение: +// Строка. +// +Функция ИмяСобытияУстановленаВедущаяКонечнаяТочка() Экспорт + + Возврат "ОбменСообщениями.УстановленаВедущаяКонечнаяТочка"; + +КонецФункции + diff --git a/SSL/src/CommonModules/ОбменСообщениямиКлиент/ОбменСообщениямиКлиент.mdo b/SSL/src/CommonModules/ОбменСообщениямиКлиент/ОбменСообщениямиКлиент.mdo new file mode 100644 index 000000000..f255b2dc5 --- /dev/null +++ b/SSL/src/CommonModules/ОбменСообщениямиКлиент/ОбменСообщениямиКлиент.mdo @@ -0,0 +1,10 @@ + + + ОбменСообщениямиКлиент + + ru + Обмен сообщениями клиент + + true + true + diff --git a/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/Module.bsl new file mode 100644 index 000000000..91ee40423 --- /dev/null +++ b/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/Module.bsl @@ -0,0 +1,50 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОбменСообщениямиПереопределяемый: механизм обмена сообщениями. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Получает список обработчиков сообщений, которые обрабатывает +// данная информационная система. +// +// Параметры: +// Обработчики - ТаблицаЗначений - состав полей см. в ОбменСообщениями.НоваяТаблицаОбработчиковСообщений +// +Процедура ПолучитьОбработчикиКаналовСообщений(Обработчики) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса.ПолучитьОбработчикиКаналовСообщений(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + + + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.УдаленноеАдминистрирование + ОбработчикКаналовСообщенийУдаленногоАдминистрирования.ПолучитьОбработчикиКаналовСообщений(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УдаленноеАдминистрирование + +КонецПроцедуры + +// Обработчик получения динамического списка конечных точек сообщений +// +// Параметры: +// КаналСообщений – Строка. Идентификатор канала сообщений, для которого необходимо определить конечные точки. +// Получатели – Массив. Массив конечных точек, в которые следует адресовать сообщение. +// Массив должен быть заполнен элементами типа ПланОбменаСсылка.ОбменСообщениями. +// Этот параметр необходимо определить в теле обработчика. +// +Процедура ПолучателиСообщения(Знач КаналСообщений, Получатели) Экспорт + + + +КонецПроцедуры + + + + + + + + + diff --git a/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/ОбменСообщениямиПереопределяемый.mdo b/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/ОбменСообщениямиПереопределяемый.mdo new file mode 100644 index 000000000..c5297214e --- /dev/null +++ b/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/ОбменСообщениямиПереопределяемый.mdo @@ -0,0 +1,9 @@ + + + ОбменСообщениямиПереопределяемый + + ru + Обмен сообщениями переопределяемый + + true + diff --git a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl new file mode 100644 index 000000000..77201a2a8 --- /dev/null +++ b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl @@ -0,0 +1,27 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОбменСообщениямиПовтИсп: механизм обмена сообщениями. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Возвращает ссылку на объект WSПрокси для заданного узла обмена. +// +// Параметры: +// КонечнаяТочка - ПланОбменаСсылка. +// +Функция WSПроксиКонечнойТочки(КонечнаяТочка) Экспорт + + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(КонечнаяТочка); + + СтрокаСообщенияОбОшибке = ""; + + Результат = ОбменСообщениямиВнутренний.ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке); + + Если Результат = Неопределено Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + Возврат Результат; +КонецФункции diff --git a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/ОбменСообщениямиПовтИсп.mdo b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/ОбменСообщениямиПовтИсп.mdo new file mode 100644 index 000000000..9647cefbd --- /dev/null +++ b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/ОбменСообщениямиПовтИсп.mdo @@ -0,0 +1,10 @@ + + + ОбменСообщениямиПовтИсп + + ru + Обмен сообщениями повт исп + + true + DuringSession + diff --git a/SSL/src/CommonModules/ОбменФайламиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменФайламиВызовСервера/Module.bsl index 7f749cbd3..00b218283 100644 --- a/SSL/src/CommonModules/ОбменФайламиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбменФайламиВызовСервера/Module.bsl @@ -89,6 +89,7 @@ ИмяКаталогаФайлов = ПолучитьИмяВременногоФайла(); СоздатьКаталог(ИмяКаталогаФайлов); + // так сделано специально, для передачи пути каталога файлов в обработчик ПриОтправкеДанныхФайла ХранилищеОбщихНастроекСохранитьВПривилегированномРежиме("ОбменФайлами", "ВременныйКаталог", ИмяКаталогаФайлов); ZIP = Неопределено; @@ -192,6 +193,7 @@ ИмяКаталогаФайлов = ПолучитьИмяВременногоФайла(); СоздатьКаталог(ИмяКаталогаФайлов); + // так сделано специально, для передачи пути каталога файлов в обработчик ПриОтправкеДанныхФайла ХранилищеОбщихНастроекСохранитьВПривилегированномРежиме("ОбменФайлами", "ВременныйКаталог", ИмяКаталогаФайлов); ZIP = Неопределено; diff --git a/SSL/src/CommonModules/ОбменФайламиСобытия/Module.bsl b/SSL/src/CommonModules/ОбменФайламиСобытия/Module.bsl index 97b656a74..0d5fb0482 100644 --- a/SSL/src/CommonModules/ОбменФайламиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ОбменФайламиСобытия/Module.bsl @@ -10,7 +10,9 @@ Возврат; КонецЕсли; - Если ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ХранимыеФайлыВерсий") Тогда + ЭтоХранимыеФайлыВерсий = Ложь; + ФайловыеФункцииПереопределяемый.ЭтоЭлементХранимыеФайлыВерсий(ЭлементДанных, ЭтоХранимыеФайлыВерсий); + Если ЭтоХранимыеФайлыВерсий Тогда Если Не СозданиеНачальногоОбраза Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; @@ -30,6 +32,7 @@ Если НЕ ЭлементДанных.Том.Пустая() Тогда + // так сделано специально, для передачи пути каталога файлов из СоздатьФайловыйНачальныйОбразНаСервере ИмяКаталогаФайлов = ХранилищеОбщихНастроекЗагрузитьВПривилегированномРежиме("ОбменФайлами", "ВременныйКаталог"); ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(ЭлементДанных.Том) + ЭлементДанных.ПутьКФайлу; diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl index a88ac9bb6..33ba7bc36 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl @@ -1,5 +1,12 @@ //////////////////////////////////////////////////////////////////////////////// -// ОБНОВЛЕНИЕ ДАННЫХ ИНФОРМАЦИОННОЙ БАЗЫ ПРИ СМЕНЕ ВЕРСИИ КОНФИГУРАЦИИ +// Подсистема "Обновление версии ИБ" +// Серверные процедуры и функции обновления информационной базы +// при смене версии конфигурации. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Проверить необходимость обновления информационной базы при смене версии конфигурации. // @@ -13,16 +20,38 @@ // Функция ЕстьПраваНаОбновлениеИнформационнойБазы() - Возврат ПравоДоступа("МонопольныйРежим", Метаданные) И ПравоДоступа("Администрирование", Метаданные); + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + ИЛИ НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Возврат ПравоДоступа("МонопольныйРежим", Метаданные) И Пользователи.ЭтоПолноправныйПользователь(, Истина); + Иначе + Возврат Истина; + КонецЕсли; -КонецФункции +КонецФункции // Возвращает Истина, если требуется обновление ИБ и у текущего пользователя // для этого недостаточно прав. // Функция ПроверитьНевозможностьОбновленияИнформационнойБазы() Экспорт - Возврат НеобходимоОбновлениеИнформационнойБазы() И НЕ ЕстьПраваНаОбновлениеИнформационнойБазы(); + ВерсияМетаданных = Метаданные.Версия; + Если ПустаяСтрока(ВерсияМетаданных) Тогда + ВерсияМетаданных = "0.0.0.0"; + КонецЕсли; + + ТребуетсяОбновлениеОбщихДанных = Ложь; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + ВерсияОбщихДанных = ВерсияИБ(Метаданные.Имя, Истина); + Если НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияОбщихДанных) Тогда + ТребуетсяОбновлениеОбщихДанных = Истина; + КонецЕсли; + КонецЕсли; + + Возврат ТребуетсяОбновлениеОбщихДанных + ИЛИ НеобходимоОбновлениеИнформационнойБазы() И НЕ ЕстьПраваНаОбновлениеИнформационнойБазы(); КонецФункции @@ -35,19 +64,34 @@ // Выполнить неинтерактивное обновление данных ИБ. // +// Принудительно - Булево - если Истина, то обновление ИБ будет выполнено +// даже если версия конфигурации не менялась. +// // Результат: // Неопределено - обновление не выполнялось (не требуется) // Строка - адрес временного хранилища со списком выполненных обработчиков обновления // -Функция ВыполнитьОбновлениеИнформационнойБазы() Экспорт +Функция ВыполнитьОбновлениеИнформационнойБазы(Знач Принудительно = Ложь) Экспорт ВерсияМетаданных = Метаданные.Версия; - ВерсияДанных = ВерсияИБ(Метаданные.Имя); Если ПустаяСтрока(ВерсияМетаданных) Тогда - ВерсияМетаданных = "0.0.0.0"; + ВерсияМетаданных = "0.0.0.0"; КонецЕсли; - - Если НЕ НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияДанных) Тогда + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + ВерсияОбщихДанных = ВерсияИБ(Метаданные.Имя, Истина); + Если НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияОбщихДанных) Тогда + Сообщение = НСтр("ru = 'Не выполнена общая часть обновления информационной базы. + |Обратитесь к системному администратору.'"); + ЗаписатьОшибку(Сообщение); + ВызватьИсключение Сообщение; + КонецЕсли; + КонецЕсли; + + ВерсияДанных = ВерсияИБ(Метаданные.Имя); + Если НЕ Принудительно И НЕ НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияДанных) Тогда Возврат Неопределено; КонецЕсли; @@ -63,12 +107,35 @@ ВызватьИсключение Сообщение; КонецЕсли; - РежимОтладки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеВерсииИБ", "РежимОтладки", Ложь); + КлючЗаписи = Неопределено; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + ЗначенияКлюча = Новый Структура; + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ЗначенияКлюча.Вставить("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + Иначе + ЗначенияКлюча.Вставить("ОбластьДанных", -1); + КонецЕсли; + ЗначенияКлюча.Вставить("ИмяПодсистемы", ""); + КлючЗаписи = РегистрыСведений.ВерсииПодсистем.СоздатьКлючЗаписи(ЗначенияКлюча); + ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + РежимОтладки = Ложь; + Иначе + ЗначениеНастройки = ХранилищеОбщихНастроек.Загрузить("ОбновлениеВерсииИБ", "РежимОтладки"); + РежимОтладки = ЗначениеНастройки = Истина; + КонецЕсли; // Установка монопольного режима для обновления информационной базы. Если НЕ РежимОтладки Тогда Попытка - УстановитьМонопольныйРежим(Истина); + ОбщегоНазначения.ЗаблокироватьИБ(); Исключение Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Невозможно выполнить обновление информационной базы, так как к ней подключены другие сеансы. @@ -79,9 +146,14 @@ ЗаписатьОшибку(Сообщение); + Если КлючЗаписи <> Неопределено Тогда + РазблокироватьДанныеДляРедактирования(КлючЗаписи); + КонецЕсли; + ВызватьИсключение Сообщение; КонецПопытки; - КонецЕсли; + КонецЕсли; + Попытка СписокОбработчиковОбновления = ОбновлениеИнформационнойБазыПереопределяемый.ОбработчикиОбновления(); @@ -92,6 +164,9 @@ Обработчик.Версия = "*"; Обработчик.Приоритет = 1; Обработчик.Процедура = "СтандартныеПодсистемыСервер.ВыполнитьОбновлениеИнформационнойБазы"; + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Обработчик.ОбщиеДанные = Истина; + КонецЕсли; ВыполненныеОбработчики = ВыполнитьИтерациюОбновления(Метаданные.Имя, Метаданные.Версия, СписокОбработчиковОбновления); @@ -102,14 +177,28 @@ ЗаписатьОшибку(Сообщение); // Отключение монопольного режима. Если НЕ РежимОтладки Тогда - УстановитьМонопольныйРежим(Ложь); + + Если МонопольныйРежим() Тогда + Пока ТранзакцияАктивна() Цикл + ОтменитьТранзакцию(); + КонецЦикла; + КонецЕсли; + + ОбщегоНазначения.РазблокироватьИБ(); + + Если КлючЗаписи <> Неопределено Тогда + РазблокироватьДанныеДляРедактирования(КлючЗаписи); + КонецЕсли; КонецЕсли; ВызватьИсключение; КонецПопытки; // Отключение монопольного режима. Если НЕ РежимОтладки Тогда - УстановитьМонопольныйРежим(Ложь); + ОбщегоНазначения.РазблокироватьИБ(); + Если КлючЗаписи <> Неопределено Тогда + РазблокироватьДанныеДляРедактирования(КлючЗаписи); + КонецЕсли; КонецЕсли; Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -122,9 +211,13 @@ Адрес = ""; Если ВыводитьОписаниеОбновлений Тогда - Результат = Новый Структура("Обработчики,ВерсияОт,ВерсияПо", - ВыполненныеОбработчики, ВерсияДанных, ВерсияМетаданных); - Адрес = ПоместитьВоВременноеХранилище(Результат, Новый УникальныйИдентификатор); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + СохранитьИнформациюОбОбновленииДляПользователей(ВыполненныеОбработчики); + Иначе + Адрес = ПоместитьВоВременноеХранилище(ВыполненныеОбработчики, Новый УникальныйИдентификатор); + КонецЕсли; КонецЕсли; Возврат Адрес; @@ -216,13 +309,16 @@ // // Возвращаемое значение: // ТаблицаЗначений – таблица с колонками: -// Версия - номер версии конфигурации, при переходе на которую должна -// быть выполнена процедура-обработчик обновления -// Процедура - полное имя процедуры-обработчика обновления. -// Должна быть обязательно экспортной. -// Опциональный - если Истина, то обработчик не должен срабатывать -// при первом запуске на "пустой" базе. -// Приоритет - Число. Для внутреннего использования. +// Версия - номер версии конфигурации, при переходе на которую должна +// быть выполнена процедура-обработчик обновления +// Процедура - полное имя процедуры-обработчика обновления. +// Должна быть обязательно экспортной. +// Опциональный - если Истина, то обработчик не должен срабатывать +// при первом запуске на "пустой" базе. +// Приоритет - Число. Для внутреннего использования. +// ОбщиеДанные - если Истина, то обработчик должен срабатывать до +// выполнения любых обработчиков, использующих разделенные +// данные. // Функция НоваяТаблицаОбработчиковОбновления() Экспорт @@ -231,6 +327,7 @@ Обработчики.Колонки.Добавить("Процедура", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(0))); Обработчики.Колонки.Добавить("Опциональный"); Обработчики.Колонки.Добавить("Приоритет", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(2))); + Обработчики.Колонки.Добавить("ОбщиеДанные", Новый ОписаниеТипов("Булево")); Возврат Обработчики; КонецФункции @@ -247,18 +344,28 @@ // Пример использования: // ВерсияКонфигурацииИБ = ВерсияИБ(Метаданные.Имя); // -Функция ВерсияИБ(Знач ИдентификаторБиблиотеки) Экспорт +Функция ВерсияИБ(Знач ИдентификаторБиблиотеки, Знач ПолучитьВерсиюОбщихДанных = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ВерсииПодсистем.Версия КАК Версия - |ИЗ - | РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем - |ГДЕ - | ВерсииПодсистем.ИмяПодсистемы = &ИмяПодсистемы"); - Запрос.Параметры.Вставить("ИмяПодсистемы", ИдентификаторБиблиотеки); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииПодсистем.Версия КАК Версия + |ИЗ + | РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем + |ГДЕ + | ВерсииПодсистем.ИмяПодсистемы = &ИмяПодсистемы + | И ВерсииПодсистем.ОбластьДанных = &ОбластьДанных"; + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + ИЛИ ПолучитьВерсиюОбщихДанных Тогда + + ОбластьДанных = -1; + Иначе + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + КонецЕсли; + Запрос.УстановитьПараметр("ОбластьДанных", ОбластьДанных); + Запрос.УстановитьПараметр("ИмяПодсистемы", ИдентификаторБиблиотеки); ТаблицаЗначений = Запрос.Выполнить().Выгрузить(); Результат = ""; Если ТаблицаЗначений.Количество() > 0 Тогда @@ -275,18 +382,80 @@ УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос; + Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда + + Если НЕ Константы.ИспользоватьРазделениеПоОбластямДанных.Получить() + И НЕ Константы.НеИспользоватьРазделениеПоОбластямДанных.Получить() Тогда + + // Первый запуск ИБ + + Возврат Истина; + + Иначе + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | 1 + |ИЗ + | РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем + |ГДЕ + | ВерсииПодсистем.ОбластьДанных = &ОбластьДанных"; + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + Иначе + ОбластьДанных = -1; + КонецЕсли; + Запрос.УстановитьПараметр("ОбластьДанных", ОбластьДанных); + + Возврат Запрос.Выполнить().Пустой(); + + КонецЕсли; + + Иначе - Запрос.Текст = "ВЫБРАТЬ Версия ИЗ РегистрСведений.ВерсииПодсистем"; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | 1 + |ИЗ + | РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем"; + Возврат Запрос.Выполнить().Пустой(); + + КонецЕсли; - Возврат Запрос.Выполнить().Пустой() +КонецФункции + +// Возвращает Истина если у пользователя не отключен показ описания изменений +// системы после обновления и есть непоказанные изменения. +// +Функция ПоказатьОписаниеИзмененийСистемы() Экспорт + + НеПоказывать = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеИБ", + "НеПоказыватьОписаниеИзмененийСистемы"); + Если НеПоказывать = Истина Тогда + Возврат Ложь; + КонецЕсли; + + ВыполненныеОбработчики = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеИБ", + "ВыполненныеОбработчики"); + Если ВыполненныеОбработчики = Неопределено Тогда + Возврат Ложь; + Иначе + Возврат Истина; + КонецЕсли; КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция НеобходимоВыполнитьОбновление(Знач ВерсияМетаданных, Знач ВерсияДанных) +//////////////////////////////////////////////////////////////////////////////// +// Общего назначения + +// Для внутреннего использования. +// +Функция НеобходимоВыполнитьОбновление(Знач ВерсияМетаданных, Знач ВерсияДанных) Экспорт Возврат НЕ ПустаяСтрока(ВерсияМетаданных) И ВерсияДанных <> ВерсияМетаданных; @@ -294,11 +463,19 @@ Процедура УстановитьВерсиюИБ(Знач ИдентификаторБиблиотеки, Знач НомерВерсии) + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ОбластьДанных = -1; + Иначе + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + КонецЕсли; + НаборЗаписей = РегистрыСведений.ВерсииПодсистем.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ОбластьДанных.Установить(ОбластьДанных); НаборЗаписей.Отбор.ИмяПодсистемы.Установить(ИдентификаторБиблиотеки); НоваяЗапись = НаборЗаписей.Добавить(); + НоваяЗапись.ОбластьДанных = ОбластьДанных; НоваяЗапись.ИмяПодсистемы = ИдентификаторБиблиотеки; НоваяЗапись.Версия = НомерВерсии; @@ -316,6 +493,14 @@ ПостроительЗапроса.Выполнить(); ВыборкаИтоги = ПостроительЗапроса.Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + ФильтрОбщиеДанные = Новый Массив; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ФильтрОбщиеДанные.Добавить(НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных()); + Иначе + ФильтрОбщиеДанные.Добавить(Истина); + ФильтрОбщиеДанные.Добавить(Ложь); + КонецЕсли; + ВыполняемыеОбработчики = Новый ДеревоЗначений(); ВыполняемыеОбработчики.Колонки.Добавить("Версия"); ВыполняемыеОбработчики.Колонки.Добавить("Процедура"); @@ -323,8 +508,8 @@ Пока ВыборкаИтоги.Следующий() Цикл Если ВыборкаИтоги.Версия <> "*" И - НЕ (СтроковыеФункцииКлиентСервер.СравнитьВерсии(ВыборкаИтоги.Версия, ВерсияОт) > 0 - И СтроковыеФункцииКлиентСервер.СравнитьВерсии(ВыборкаИтоги.Версия, ВерсияДо) <= 0) Тогда + НЕ (ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВыборкаИтоги.Версия, ВерсияОт) > 0 + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВыборкаИтоги.Версия, ВерсияДо) <= 0) Тогда Продолжить; КонецЕсли; @@ -337,6 +522,11 @@ Если Выборка.Опциональный = Истина И ВерсияОт = "0.0.0.0" Тогда Продолжить; КонецЕсли; + + Если ФильтрОбщиеДанные.Найти(Выборка.ОбщиеДанные) = Неопределено Тогда + Продолжить; + КонецЕсли; + Если СтрокаВерсии = Неопределено Тогда СтрокаВерсии = ВыполняемыеОбработчики.Строки.Добавить(); СтрокаВерсии.Версия = ВыборкаИтоги.Версия; @@ -348,39 +538,100 @@ КонецЦикла; - // упорядочить обработчики по возрастанию версий - КоличествоСтрок = ВыполняемыеОбработчики.Строки.Количество(); - Для Инд1 = 2 По КоличествоСтрок Цикл - Для Инд2 = 0 По КоличествоСтрок - Инд1 Цикл - - Версия1 = ВыполняемыеОбработчики.Строки[Инд2].Версия; - Версия2 = ВыполняемыеОбработчики.Строки[Инд2+1].Версия; - Если Версия1 = "*" И Версия2 = "*" Тогда - Результат = ВыполняемыеОбработчики.Строки[Инд2].Приоритет - ВыполняемыеОбработчики.Строки[Инд2 + 1].Приоритет; - ИначеЕсли Версия1 = "*" Тогда - Результат = -1; - ИначеЕсли Версия2 = "*" Тогда - Результат = 1; - Иначе - Результат = СтроковыеФункцииКлиентСервер.СравнитьВерсии(Версия1, Версия2); - Если Результат = 0 Тогда - Результат = ВыполняемыеОбработчики.Строки[Инд2].Приоритет - ВыполняемыеОбработчики.Строки[Инд2 + 1].Приоритет; - КонецЕсли; - КонецЕсли; - - Если Результат > 0 Тогда - ВыполняемыеОбработчики.Строки.Сдвинуть(Инд2, 1); - КонецЕсли; - - КонецЦикла; - КонецЦикла; + УпорядочитьДеревоОбработчиковОбновления(ВыполняемыеОбработчики); Возврат ВыполняемыеОбработчики; КонецФункции +// Для внутреннего использования. +// +Процедура УпорядочитьДеревоОбработчиковОбновления(Знач ДеревоОбработчиков) Экспорт + + // упорядочить обработчики по возрастанию версий + КоличествоСтрок = ДеревоОбработчиков.Строки.Количество(); + Для Инд1 = 2 По КоличествоСтрок Цикл + Для Инд2 = 0 По КоличествоСтрок - Инд1 Цикл + + Версия1 = ДеревоОбработчиков.Строки[Инд2].Версия; + Версия2 = ДеревоОбработчиков.Строки[Инд2+1].Версия; + Если Версия1 = "*" И Версия2 = "*" Тогда + Результат = ДеревоОбработчиков.Строки[Инд2].Приоритет - ДеревоОбработчиков.Строки[Инд2 + 1].Приоритет; + ИначеЕсли Версия1 = "*" Тогда + Результат = -1; + ИначеЕсли Версия2 = "*" Тогда + Результат = 1; + Иначе + Результат = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Версия1, Версия2); + Если Результат = 0 Тогда + Результат = ДеревоОбработчиков.Строки[Инд2].Приоритет - ДеревоОбработчиков.Строки[Инд2 + 1].Приоритет; + КонецЕсли; + КонецЕсли; + + Если Результат > 0 Тогда + ДеревоОбработчиков.Строки.Сдвинуть(Инд2, 1); + КонецЕсли; + + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +Процедура СохранитьИнформациюОбОбновленииДляПользователей(Знач ВыполненныеОбработчики) + + СтруктураКолонок = ПолучитьСтруктуруКолонок(ВыполненныеОбработчики); + + Для каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл + ВыполненныеРанееОбработчики = ХранилищеОбщихНастроек.Загрузить("ОбновлениеИБ", + "ВыполненныеОбработчики", , ПользовательИБ.Имя); + + Если ВыполненныеРанееОбработчики = Неопределено Тогда + ДеревоОбработчиков = ВыполненныеОбработчики; + Иначе + ДеревоОбработчиков = ВыполненныеРанееОбработчики; + СкопироватьСтрокиВДерево(ДеревоОбработчиков.Строки, ВыполненныеРанееОбработчики.Строки, СтруктураКолонок); + УпорядочитьДеревоОбработчиковОбновления(ДеревоОбработчиков); + КонецЕсли; + + ОписаниеНастроек = Новый ОписаниеНастроек; + ОписаниеНастроек.Представление = НСтр("ru = 'Выполненные обработчики обновления информационной базы'"); + + ХранилищеОбщихНастроек.Сохранить("ОбновлениеИБ", "ВыполненныеОбработчики", ДеревоОбработчиков, + ОписаниеНастроек, ПользовательИБ.Имя); + + КонецЦикла; + +КонецПроцедуры + +Функция ПолучитьСтруктуруКолонок(Знач КоллекияИсточник) + + СтруктураКолонок = Новый Структура; + Для каждого Колонка Из КоллекияИсточник.Колонки Цикл + СтруктураКолонок.Вставить(Колонка.Имя); + КонецЦикла; + Возврат СтруктураКолонок; + +КонецФункции + +Процедура СкопироватьСтрокиВДерево(Знач СтрокиПриемника, Знач СтрокиИсточника, Знач СтруктураКолонок) + + Для каждого СтрокаИсточника Из СтрокиИсточника Цикл + ЗаполнитьЗначенияСвойств(СтруктураКолонок, СтрокаИсточника); + НайденныеСтроки = СтрокиПриемника.НайтиСтроки(СтруктураКолонок); + Если НайденныеСтроки.Количество() = 0 Тогда + СтрокаПриемника = СтрокиПриемника.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаПриемника, СтрокаИсточника); + Иначе + СтрокаПриемника = НайденныеСтроки[0]; + КонецЕсли; + + СкопироватьСтрокиВДерево(СтрокаПриемника.Строки, СтрокаИсточника.Строки, СтруктураКолонок); + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// ПРОТОКОЛИРОВАНИЕ ХОДА ОБНОВЛЕНИЯ +// Протоколирование хода обновелния // Возвращает строковую константу для формирования сообщений журнала регистрации. // @@ -406,7 +657,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОПИСАНИЕ ОБНОВЛЕНИЙ +// Описание обновлений // Формирует табличный документ с описанием изменений в версиях, // которые соответствуют переданному списку версий ОбработчикиОбновления. @@ -425,42 +676,14 @@ МакетОписаниеОбновлений = Новый ТабличныйДокумент(); КонецЕсли; - СписокВерсий = Новый Массив(); - ИдентификаторОбласти = "Версия"; - ДлинаИдентификатора = СтрДлина(ИдентификаторОбласти); - Для Каждого Область Из МакетОписаниеОбновлений.Области Цикл + Для Каждого Версия Из ОбработчикиОбновления.Строки Цикл - Если Лев(Область.Имя, ДлинаИдентификатора) <> ИдентификаторОбласти Тогда + Если Версия.Версия = "*" Тогда Продолжить; КонецЕсли; - - НомерВерсии = Сред(Область.Имя, ДлинаИдентификатора + 1); - НомерВерсии = СтрЗаменить(НомерВерсии, "_", "."); - НадоВыводитьВерсию = СтроковыеФункцииКлиентСервер.СравнитьВерсии(НомерВерсии, ОбработчикиОбновления.ВерсияОт) > 0; - Если НадоВыводитьВерсию Тогда - СписокВерсий.Добавить(НомерВерсии); - КонецЕсли; - - КонецЦикла; - - // Упорядочим по убыванию - КоличествоВерсий = СписокВерсий.Количество(); - Для Инд1 = 2 По КоличествоВерсий Цикл - Для Инд2 = 0 По КоличествоВерсий - Инд1 Цикл - - Меньше = СтроковыеФункцииКлиентСервер.СравнитьВерсии(СписокВерсий[Инд2], СписокВерсий[Инд2+1]) < 0; - Если Меньше Тогда - СписокВерсий.Вставить(Инд2+1, СписокВерсий[Инд2]); - СписокВерсий.Удалить(Инд2); - КонецЕсли; - - КонецЦикла; - КонецЦикла; - - // Выведем версии - Для Каждого НомерВерсии Из СписокВерсий Цикл - ВывестиОписаниеИзменений(НомерВерсии, ДокументОписаниеОбновлений, МакетОписаниеОбновлений); + ВывестиОписаниеИзменений(Версия.Версия, ДокументОписаниеОбновлений, МакетОписаниеОбновлений); + КонецЦикла; Возврат ДокументОписаниеОбновлений; @@ -489,3 +712,4 @@ ДокументОписаниеОбновлений.Вывести(МакетОписаниеОбновлений.ПолучитьОбласть("Отступ")); КонецПроцедуры + diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo index e3e13c946..5ec48ec41 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo @@ -5,6 +5,7 @@ ru Обновление информационной базы + Всегда на сервере true true diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВМоделиСервиса/Module.bsl new file mode 100644 index 000000000..45e0dc3a3 --- /dev/null +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВМоделиСервиса/Module.bsl @@ -0,0 +1,237 @@ +/////////////////////////////////////////////////////////////////////////////////// +// ОбновлениеИнформационнойБазыВМоделиСервиса: Обновление текущей области данных. +// +/////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обновление областей данных. + +// Выполняет обновление версии информационной базы в текущей области данных +// и снимает блокировку сеансов в области, в случае если она была установлена +// ранее. +// +Процедура ВыполнитьОбновлениеТекущейОбластиДанных() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(); + + ПараметрыБлокировки = СоединенияИБ.ПолучитьБлокировкуСеансовОбластиДанных(); + Если НЕ ПараметрыБлокировки.Установлена Тогда + Возврат; + КонецЕсли; + ПараметрыБлокировки.Установлена = Ложь; + СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(ПараметрыБлокировки); + +КонецПроцедуры + +// Выбирает все области данных с неакутальными версиями +// и при необходимости формирует фоновые задания по обновлению +// версии в них. +// +// Параметры: +// БлокироватьОбласти - Булево - устанавливать блокировку сеансов областей данных +// на время обновления областей +// +Процедура ЗапланироватьОбновлениеОбластейДанных(Знач БлокироватьОбласти = Истина, Знач СообщениеБлокировки = "") Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + Если ПустаяСтрока(СообщениеБлокировки) Тогда + СообщениеБлокировки = Константы.СообщениеБлокировкиПриОбновленииКонфигурации.Получить(); + Если ПустаяСтрока(СообщениеБлокировки) Тогда + СообщениеБлокировки = НСтр("ru = 'Система заблокирована для выполнения обновления.'"); + КонецЕсли; + КонецЕсли; + ПараметрыБлокировки = СоединенияИБ.НовыеПараметрыБлокировкиСоединений(); + ПараметрыБлокировки.Начало = ТекущаяУниверсальнаяДата(); + ПараметрыБлокировки.Сообщение = СообщениеБлокировки; + ПараметрыБлокировки.Установлена = Истина; + ПараметрыБлокировки.Эксклюзивная = Истина; + + ВерсияМетаданных = Метаданные.Версия; + Если ПустаяСтрока(ВерсияМетаданных) Тогда + Возврат; + КонецЕсли; + + ВерсияОбщихДанных = ОбновлениеИнформационнойБазы.ВерсияИБ(Метаданные.Имя, Истина); + Если ОбновлениеИнформационнойБазы.НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияОбщихДанных) Тогда + // Не выполнено обновление общих данных смысла планировать + // обновление областей нет + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбластиДанных.ОбластьДанных КАК ОбластьДанных + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем + | ПО ОбластиДанных.ОбластьДанных = ВерсииПодсистем.ОбластьДанных + | И (ВерсииПодсистем.ИмяПодсистемы = &ИмяПодсистемы) + |ГДЕ + | ОбластиДанных.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Используется)) + | И (ВерсииПодсистем.ОбластьДанных ЕСТЬ NULL + | ИЛИ ВерсииПодсистем.Версия <> &Версия) + | + |УПОРЯДОЧИТЬ ПО + | ОбластьДанных"; + Запрос.УстановитьПараметр("ИмяПодсистемы", Метаданные.Имя); + Запрос.УстановитьПараметр("Версия", ВерсияМетаданных); + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | 1 + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем + | ПО ОбластиДанных.ОбластьДанных = ВерсииПодсистем.ОбластьДанных + | И (ВерсииПодсистем.ИмяПодсистемы = &ИмяПодсистемы) + |ГДЕ + | ОбластиДанных.ОбластьДанных = &ОбластьДанных + | И ОбластиДанных.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Используется)) + | И (ВерсииПодсистем.ОбластьДанных ЕСТЬ NULL + | ИЛИ ВерсииПодсистем.Версия <> &Версия)"; + Запрос.УстановитьПараметр("ИмяПодсистемы", Метаданные.Имя); + Запрос.УстановитьПараметр("Версия", ВерсияМетаданных); + + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + ЗначенияКлюча = Новый Структура; + ЗначенияКлюча.Вставить("ОбластьДанных", Выборка.ОбластьДанных); + ЗначенияКлюча.Вставить("ИмяПодсистемы", ""); + КлючЗаписи = РегистрыСведений.ВерсииПодсистем.СоздатьКлючЗаписи(ЗначенияКлюча); + Попытка + ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); + Исключение + Продолжить; + КонецПопытки; + + Запрос.УстановитьПараметр("ОбластьДанных", Выборка.ОбластьДанных); + НачатьТранзакцию(); + Попытка + Результат = Запрос.Выполнить(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Планирование обновления области данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + Если Результат.Пустой() Тогда + РазблокироватьДанныеДляРедактирования(КлючЗаписи); + Продолжить; + КонецЕсли; + + ОтборЗадания = Новый Структура; + ОтборЗадания.Вставить("ИмяМетода", "ОбновлениеИнформационнойБазыВМоделиСервиса.ВыполнитьОбновлениеТекущейОбластиДанных"); + ОтборЗадания.Вставить("Ключ" , "1"); + ЗапланированноеЗадание = ОчередьЗаданий.ПолучитьЗадание(ОтборЗадания, Выборка.ОбластьДанных); + Если ЗапланированноеЗадание <> Неопределено Тогда + РазблокироватьДанныеДляРедактирования(КлючЗаписи); + Продолжить; + КонецЕсли; + + РазблокироватьДанныеДляРедактирования(КлючЗаписи); + + ОчередьЗаданий.ЗапланироватьВыполнениеЗадания( + "ОбновлениеИнформационнойБазыВМоделиСервиса.ВыполнитьОбновлениеТекущейОбластиДанных",, "1", Истина, Выборка.ОбластьДанных); + + Если БлокироватьОбласти Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Выборка.ОбластьДанных); + СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(ПараметрыБлокировки, Ложь); + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Обработчик регламентного задания ОбновлениеОбластейДанных +// Выбирает все области данных с неакутальными версиями +// и при необходимости формирует фоновые задания ОбновлениеИб +// в них. +// +Процедура ОбновлениеОбластейДанных() Экспорт + + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + ЗапланироватьОбновлениеОбластейДанных(Истина); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики обновления информационной базы. + +// Заменяет статусы областей данных УдалитьГотова на Используется в регистре ОбластиДанных +// +Процедура ЗаменитьСтатусОбластейГотова() Экспорт + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить("РегистрСведений.ОбластиДанных"); + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбластиДанных.ОбластьДанных КАК ОбластьДанных + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + |ГДЕ + | ОбластиДанных.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.УдалитьГотова)"; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = Выборка.ОбластьДанных; + МенеджерЗаписи.Прочитать(); + МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Используется; + МенеджерЗаписи.Записать(); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыВМоделиСервиса.ЗапланироватьОбновлениеОбластейДанных"; + Обработчик.ОбщиеДанные = Истина; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.0.1.6"; + Обработчик.Процедура = "ОбновлениеИнформационнойБазыВМоделиСервиса.ЗаменитьСтатусОбластейГотова"; + Обработчик.ОбщиеДанные = Истина; + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВМоделиСервиса/ОбновлениеИнформационнойБазыВМоделиСервиса.mdo b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВМоделиСервиса/ОбновлениеИнформационнойБазыВМоделиСервиса.mdo new file mode 100644 index 000000000..1e8d90add --- /dev/null +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВМоделиСервиса/ОбновлениеИнформационнойБазыВМоделиСервиса.mdo @@ -0,0 +1,10 @@ + + + ОбновлениеИнформационнойБазыВМоделиСервиса + + ru + Обновление информационной базы в модели сервиса + + true + true + diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl index affe3e62f..11ade0e19 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl @@ -1,5 +1,11 @@ -/////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ИНТЕРАКТИВНОГО ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обновление версии ИБ" +// Клиентские процедуры и функции интерактивного обновления информационной базы. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Проверить, есть ли необходимость выполнять обновление информационной базы, и // если необходимо - выполняется обновление. @@ -7,6 +13,10 @@ // Процедура ВыполнитьОбновлениеИнформационнойБазы() Экспорт + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + Если НЕ СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НеобходимоОбновлениеИнформационнойБазы Тогда Возврат; КонецЕсли; @@ -18,7 +28,7 @@ ВыполненныеОбработчикиОбновления = ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(); Исключение ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( - "ru = 'При обновлении информационной базы возникла ошибка: + "ru = 'При обновлении информационной базы возникла ошибка: | |%1 | @@ -33,6 +43,7 @@ Если ВыполненныеОбработчикиОбновления <> Неопределено Тогда ОбновитьИнтерфейс(); КонецЕсли; + Если ВыполненныеОбработчикиОбновления <> "" Тогда ОткрытьФорму("ОбщаяФорма.ОписаниеИзмененийСистемы", Новый Структура("ВыполненныеОбработчикиОбновления", ВыполненныеОбработчикиОбновления)); @@ -40,14 +51,33 @@ КонецПроцедуры +// Если есть непоказанные описания изменения и у пользователя не отключен +// показ - открыть форму ОписаниеИзмененийСистемы. +// +Процедура ПоказатьОписаниеИзмененийСистемы() Экспорт + + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + Если НЕ ПараметрыРаботыКлиента.Свойство("ПоказатьОписаниеИзмененийСистемы") + ИЛИ НЕ ПараметрыРаботыКлиента.ПоказатьОписаниеИзмененийСистемы Тогда + + Возврат; + КонецЕсли; + + ОткрытьФорму("ОбщаяФорма.ОписаниеИзмененийСистемы"); + +КонецПроцедуры + // Проверить, возможно ли выполнять обновление информационной базы. // Функция ВозможноВыполнитьОбновлениеИнформационнойБазы() Экспорт Результат = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаЗаблокированаДляОбновления; - Если Результат Тогда - Сообщение = НСтр("ru = 'Информационная база заблокирована в связи с обновлением версии конфигурации. Работа системы будет завершена. + Сообщение = НСтр("ru = 'Информационная база заблокирована в связи с обновлением версии конфигурации. Работа программы будет завершена. |Обратитесь к системному администратору за подробностями.'"); Предупреждение(Сообщение); КонецЕсли; diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl index 3aaa7aa5f..520535c42 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиентПереопределяемый/Module.bsl @@ -1,5 +1,10 @@ -/////////////////////////////////////////////////////////////////////////////// -// ИНТЕРФЕЙСНАЯ ЧАСТЬ ПЕРЕОПРЕДЕЛЯЕМОГО МОДУЛЯ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обновление версии ИБ" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Вызывается при нажатии на гиперссылку или двойном щелчке на ячейке // табличного документа с описанием изменений системы. diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl index 9e8af2920..fed20ca08 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl @@ -1,5 +1,10 @@ -/////////////////////////////////////////////////////////////////////////////// -// ИНТЕРФЕЙСНАЯ ЧАСТЬ ПЕРЕОПРЕДЕЛЯЕМОГО МОДУЛЯ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обновление версии ИБ" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Возвращает список процедур-обработчиков обновления ИБ для всех поддерживаемых версий ИБ. // diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/ОбновлениеИнформационнойБазыПереопределяемый.mdo b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/ОбновлениеИнформационнойБазыПереопределяемый.mdo index 261a04d8b..af773c5c3 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/ОбновлениеИнформационнойБазыПереопределяемый.mdo +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/ОбновлениеИнформационнойБазыПереопределяемый.mdo @@ -5,8 +5,6 @@ ru Обновление информационной базы переопределяемый + Всегда на сервере true - true - true - true diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl index 22fc336d4..7c94afba6 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl @@ -1,5 +1,10 @@ //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции +// Подсистема "Обновление конфигурации" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Проверить, что запуск программы выполнен от имени внешнего пользователя // и выбросить исключение в этом случае. @@ -17,7 +22,7 @@ УстановитьПривилегированныйРежим(Истина); - Если НЕ ЗначениеЗаполнено(ПараметрыСеанса.ТекущийПользователь) Тогда + Если НЕ ЗначениеЗаполнено(Пользователи.ТекущийПользователь()) Тогда ТекстИсключения = ТекстСообщения; @@ -304,14 +309,13 @@ // Проверка доступа к подсистеме ОбновлениеКонфигурации Функция ПроверитьДоступДляОбновления() - Возврат Пользователи.ЭтоПолноправныйПользовательИБ(); + Возврат Пользователи.ЭтоПолноправныйПользователь(,Истина); КонецФункции // Возвращает признак доступности проведения обновления текущим пользователем. Функция ПроверитьДоступДляПроверкиОбновления() Экспорт - Возврат ( РольДоступна("ПроверкаДоступныхОбновленийКонфигурации") ИЛИ - Пользователи.ЭтоПолноправныйПользовательИБ()) - И НЕ ОбщегоНазначения.ТекущийПользователь().Пустая(); + Возврат Пользователи.РолиДоступны("ПроверкаДоступныхОбновленийКонфигурации") + И ЗначениеЗаполнено(Пользователи.ТекущийПользователь()); КонецФункции Процедура ОтправитьУведомлениеОбОбновлении(Знач ИмяПользователя, Знач АдресНазначения, Знач УспешноеОбновление) @@ -344,7 +348,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ +// Обновление информационной базы // Добавляет в список Обработчики процедуры-обработчики обновления, // необходимые данной подсистеме. diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl index d112fe5ee..a9937e8e0 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl @@ -1,11 +1,22 @@ //////////////////////////////////////////////////////////////////////////////// -// Программный интерфейс подсистемы. +// Подсистема "Обновление конфигурации" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Проверяет наличие обновления конфигурации при запуске программы. // Процедура ПроверитьОбновлениеКонфигурации() Экспорт #Если НЕ ВебКлиент Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + ИЛИ НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Возврат; + КонецЕсли; + ДоступноеОбновлениеКонфигурации = Неопределено; НастройкиОбновления = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления; НаличиеОбновления = НастройкиОбновления.ПроверитьПрошлыеОбновленияБазы; @@ -81,12 +92,12 @@ // Надо завершить предыдущее обновление. ОткрытьФорму("Обработка.ОбновлениеКонфигурации.Форма.Форма"); КонецЕсли; -#КонецЕсли + #КонецЕсли КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Возвращает общие параметры обновления. // @@ -94,7 +105,6 @@ #Если НЕ ВебКлиент Тогда СтруктураПараметров = Новый Структура(); - СтруктураПараметров.Вставить("ДатаВремяОбновленияУстановлена" , Ложь); // Интернет @@ -114,7 +124,8 @@ // Определение каталога временных файлов. СтруктураПараметров.Вставить("КаталогФайловОбновления" , КаталогLocalAppData() + "1C\1Cv8Update\"); - СтруктураПараметров.Вставить("КаталогВременныхФайловОбновления" , КаталогВременныхФайлов() + "1Cv8Update." + Формат(ТекущаяДата(), "ДФ=ггММддЧЧммсс") + "\"); + КаталогВременныхФайловОбновления = КаталогВременныхФайлов() + "1Cv8Update." + Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДФ=ггММддЧЧммсс") + "\"; + СтруктураПараметров.Вставить("КаталогВременныхФайловОбновления" , КаталогВременныхФайловОбновления); // Определение каталога рекламы. СтруктураПараметров.Вставить("ИмяКаталогаРекламы" , СтруктураПараметров.КаталогФайловОбновления + "adv\"); @@ -145,7 +156,7 @@ Ложь, // ФлагАвтоПереходаНаСтраницуСОбновлением Неопределено, // ПараметрыФайлаПроверкиОбновления "", // ИмяСтраницы - ТекущаяДата(), // ВремяПолученияОбновления + ОбщегоНазначенияКлиент.ДатаСеанса(), // ВремяПолученияОбновления "" // ПоследняяВерсияКонфигурации ); КонецЕсли; @@ -254,7 +265,7 @@ Параметры = ПолучитьДоступноеОбновлениеКонфигурации(); Если Параметры.ИсточникОбновления <> -1 Тогда ВремяПолученияОбновления = Параметры.ВремяПолученияОбновления; - Если ВремяПолученияОбновления <> Неопределено И ТекущаяДата() - ВремяПолученияОбновления < 30 Тогда + Если ВремяПолученияОбновления <> Неопределено И ОбщегоНазначенияКлиент.ДатаСеанса() - ВремяПолученияОбновления < 30 Тогда Возврат; КонецЕсли; КонецЕсли; @@ -269,7 +280,7 @@ Параметры.ПоследняяВерсияКонфигурации = Параметры.ПараметрыФайлаПроверкиОбновления.Version; ВерсияКонфигурации = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ВерсияКонфигурации; - Если СтроковыеФункцииКлиентСервер.СравнитьВерсии(ВерсияКонфигурации, Параметры.ПоследняяВерсияКонфигурации) >= 0 Тогда + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияКонфигурации, Параметры.ПоследняяВерсияКонфигурации) >= 0 Тогда ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Информация", НСтр("ru = 'Обновление не требуется: последняя версия конфигурации уже установлена.'")); @@ -282,7 +293,7 @@ Параметры.ПоследняяВерсияКонфигурации + "."); Параметры.ИмяСтраницы = "ДоступноеОбновление"; - Параметры.ВремяПолученияОбновления = ТекущаяДата(); + Параметры.ВремяПолученияОбновления = ОбщегоНазначенияКлиент.ДатаСеанса(); КонецПроцедуры @@ -298,7 +309,7 @@ КонецЕсли; Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(РасписаниеПроверкиНаличияОбновления); - ДатаПроверки = ТекущаяДата(); + ДатаПроверки = ОбщегоНазначенияКлиент.ДатаСеанса(); Если НЕ Расписание.ТребуетсяВыполнение(ДатаПроверки, НастройкиОбновленияКонфигурации.ВремяПоследнейПроверкиОбновления) Тогда Возврат; КонецЕсли; @@ -354,9 +365,8 @@ СообщениеОбОшибке = НСтр("ru = 'Не удалось создать временный каталог для проверки наличия обновлений. |%1'"); ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, - ПодробноеПредставлениеОшибки(ИнфоОбОшибке)), - ТекущаяДата(), Истина); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ПодробноеПредставлениеОшибки(ИнфоОбОшибке)),, + Истина); СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, КраткоеПредставлениеОшибки(ИнфоОбОшибке)); diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентГлобальный/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентГлобальный/Module.bsl index b49db99c8..45db9837a 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентГлобальный/Module.bsl @@ -1,5 +1,10 @@ //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции +// Подсистема "Обновление конфигурации" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Процедура проверки обновления конфигурации по расписанию. Процедура ОбработатьПроверкуОбновленияПоРасписанию() Экспорт diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl index 93364c58d..81455752b 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентПереопределяемый/Module.bsl @@ -1,6 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ИНТЕРАКТИВНОЙ РАБОТЫ В ФОРМЕ ПОМОЩНИКА -// +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обновление конфигурации" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Обработчик события перехода по страница помощника обновления. // @@ -14,12 +18,12 @@ // Процедура ПриПереходеНаСтраницуПомощника(ПредыдущаяСтраница, СледующаяСтраница, Отказ) Экспорт - // ПроверкаЛегальностиПолученияОбновления + // СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления Если ПредыдущаяСтраница = "ФайлОбновления" И СледующаяСтраница <> "ФайлОбновления" И НЕ ПроверкаЛегальностиПолученияОбновленияКлиент.ПроверитьЛегальностьПолученияОбновления() Тогда Отказ = Истина; КонецЕсли; - // Конец ПроверкаЛегальностиПолученияОбновления + // Конец СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентСервер/Module.bsl index a4bbea989..15b804cf6 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентСервер/Module.bsl @@ -1,5 +1,10 @@ //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции +// Подсистема "Обновление конфигурации" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Возвращает структуру настроек обновления конфигурации и обновляет их. // @@ -39,12 +44,13 @@ Результат.Вставить("ЗапомнитьПарольСервераОбновлений", Истина); Результат.Вставить("ПроверятьНаличиеОбновленияПриЗапуске", Ложь); Результат.Вставить("ИсточникОбновления", 2); -#Если Сервер Тогда +#Если Сервер Или ВнешнееСоединение Тогда Результат.Вставить("РежимОбновления", ?(ОбщегоНазначения.ИнформационнаяБазаФайловая(), 0, 2)); + Результат.Вставить("ДатаВремяОбновления", ДобавитьДни(НачалоДня(ТекущаяДатаСеанса()), 1)); #Иначе - Результат.Вставить("РежимОбновления", ?(СтандартныеПодсистемыВызовСервераПереопределяемый.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая, 0, 2)); + Результат.Вставить("РежимОбновления", ?(СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая, 0, 2)); + Результат.Вставить("ДатаВремяОбновления", ДобавитьДни(НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()), 1)); #КонецЕсли - Результат.Вставить("ДатаВремяОбновления", ДобавитьДни(НачалоДня(ТекущаяДата()), 1)); Результат.Вставить("ВыслатьОтчетНаПочту", Ложь); Результат.Вставить("АдресЭлектроннойПочты", ""); Результат.Вставить("КодЗадачиПланировщика", 0); diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/Module.bsl index 2b08d4ca0..3cfcd0d8d 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/Module.bsl @@ -1,6 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ФУНКЦИИ ДЛЯ ПРОВЕРКИ НАЛИЧИЯ И ПОЛУЧЕНИЯ ОБНОВЛЕНИЙ -// +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обновление конфигурации" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Получить короткое имя (идентификатор) конфигурации. // diff --git a/SSL/src/CommonModules/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса/Module.bsl b/SSL/src/CommonModules/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса/Module.bsl new file mode 100644 index 000000000..0215ead7e --- /dev/null +++ b/SSL/src/CommonModules/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса/Module.bsl @@ -0,0 +1,326 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса. +// +//////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Получает список обработчиков сообщений, которые обрабатывает данная подсистема. +// +// Параметры: +// Обработчики - ТаблицаЗначений - состав полей см. в ОбменСообщениями.НоваяТаблицаОбработчиковСообщений +// +Процедура ПолучитьОбработчикиКаналовСообщений(Обработчики) Экспорт + + ДобавитьОбработчикКаналаСообщений("ОбменДанными\ПрикладноеПриложение\СозданиеОбмена", ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса, Обработчики); + ДобавитьОбработчикКаналаСообщений("ОбменДанными\ПрикладноеПриложение\УдалениеОбмена", ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса, Обработчики); + ДобавитьОбработчикКаналаСообщений("ОбменДанными\ПрикладноеПриложение\УстановитьПрефиксОбластиДанных", ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса, Обработчики); + +КонецПроцедуры + +// Выполняет обработку тела сообщения из канала в соответствии с алгоритмом текущего канала сообщений +// +// Параметры: +// КаналСообщений (обязательный) - Строка - Идентификатор канала сообщений, из которого получено сообщение. +// ТелоСообщения (обязательный) - Произвольный - Тело сообщения, полученное из канала, которое подлежит обработке. +// Отправитель (обязательный) - ПланОбменаСсылка.ОбменСообщениями - Конечная точка, которая является отправителем сообщения. +// +Процедура ОбработатьСообщение(КаналСообщений, ТелоСообщения, Отправитель) Экспорт + + УстановитьОбластьДанных(ТелоСообщения.ОбластьДанных); + + Если КаналСообщений = "ОбменДанными\ПрикладноеПриложение\СозданиеОбмена" Тогда + + СоздатьОбменДаннымиВИнформационнойБазе( + Отправитель, + ТелоСообщения.Настройки, + ТелоСообщения.НастройкаОтборовНаУзле, + ТелоСообщения.ЗначенияПоУмолчаниюНаУзле, + ТелоСообщения.КодЭтогоУзла, + ТелоСообщения.КодНовогоУзла + ); + + ИначеЕсли КаналСообщений = "ОбменДанными\ПрикладноеПриложение\УдалениеОбмена" Тогда + + УдалитьОбменДаннымиВИнформационнойБазе(Отправитель, ТелоСообщения.ИмяПланаОбмена, ТелоСообщения.КодУзла); + + ИначеЕсли КаналСообщений = "ОбменДанными\ПрикладноеПриложение\УстановитьПрефиксОбластиДанных" Тогда + + УстановитьПрефиксОбластиДанных(ТелоСообщения.Префикс); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура СоздатьОбменДаннымиВИнформационнойБазе(Отправитель, Настройки, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла) + + УстановитьПривилегированныйРежим(Истина); + + // Создаем каталог обмена сообщениями (при необходимости) + Каталог = Новый Файл(Настройки.FILEКаталогОбменаИнформацией); + + Если Не Каталог.Существует() Тогда + + Попытка + СоздатьКаталог(Каталог.ПолноеИмя); + Исключение + + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + // Отмечаем в управляющем приложении ошибку выполнения операции + ОтправитьСообщениеОшибкаПриСозданииОбмена(Число(КодЭтогоУзла), Число(КодНовогоУзла), СтрокаСообщенияОбОшибке, Отправитель); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + Возврат; + КонецПопытки; + КонецЕсли; + + Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменДанными") <> Истина Тогда + Константы.ИспользоватьОбменДанными.Установить(Истина); + КонецЕсли; + + Настройки.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.Combi); + Настройки.Вставить("CombiВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.FILE); + Настройки.Вставить("ВариантРаботыМастера", ""); + Настройки.Вставить("ПарольАрхиваСообщенияОбмена", ""); + Настройки.Вставить("ИспользоватьПараметрыТранспортаEMAIL", Ложь); + Настройки.Вставить("ИспользоватьПараметрыТранспортаFILE", Ложь); + Настройки.Вставить("ИспользоватьПараметрыТранспортаFTP", Ложь); + Настройки.Вставить("FILEСжиматьФайлИсходящегоСообщения", Ложь); + Настройки.Вставить("ПрефиксИнформационнойБазыИсточникаУстановлен", ЗначениеЗаполнено(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"))); + Настройки.Вставить("ЭтоНастройкаРаспределеннойИнформационнойБазы", Ложь); + + ПомощникСозданияОбменаДанными = Обработки.ПомощникСозданияОбменаДанными.Создать(); + + ЗаполнитьЗначенияСвойств(ПомощникСозданияОбменаДанными, Настройки); + + Отказ = Ложь; + + КодЭтогоУзлаВСервисе = ОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(Число(КодЭтогоУзла)); + КодНовогоУзлаВСервисе = ОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(Число(КодНовогоУзла)); + + ПомощникСозданияОбменаДанными.ВыполнитьДействияПоНастройкеНовогоОбменаДаннымиВСервисе( + Отказ, + НастройкаОтборовНаУзле, + ЗначенияПоУмолчаниюНаУзле, + КодЭтогоУзлаВСервисе, + КодНовогоУзлаВСервисе + ); + + Если Отказ Тогда + + СтрокаСообщенияОбОшибке = ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке(); + + // Отмечаем в управляющем приложении ошибку выполнения операции + ОтправитьСообщениеОшибкаПриСозданииОбмена(Число(КодЭтогоУзла), Число(КодНовогоУзла), СтрокаСообщенияОбОшибке, Отправитель); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + Возврат; + КонецЕсли; + + // Отмечаем успешное выполнение операции в управляющем приложении + ОтправитьСообщениеУспешноеВыполнениеОперации(Число(КодЭтогоУзла), Число(КодНовогоУзла), Отправитель); + +КонецПроцедуры + +Процедура УдалитьОбменДаннымиВИнформационнойБазе(Отправитель, ИмяПланаОбмена, КодУзла) + + УстановитьПривилегированныйРежим(Истина); + + // Поиск узла по формату кода узла "S00000123" + УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(ОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(Число(КодУзла))); + + Если УзелИнформационнойБазы.Пустая() Тогда + + // Поиск узла по формату кода узла "0000123" (старый формат) + УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла); + + КонецЕсли; + + КодЭтогоУзла = ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена); + КодЭтогоУзла = ОбменДаннымиСервер.НомерОбластиИзКодаУзлаПланаОбмена(КодЭтогоУзла); + + Если УзелИнформационнойБазы.Пустая() Тогда + + // Отмечаем успешное выполнение операции в управляющем приложении + ОтправитьСообщениеУспешноеВыполнениеОперации(КодЭтогоУзла, Число(КодУзла), Отправитель); + + Возврат; // настройка обмена не найдена (возможно, была удалена ранее) + КонецЕсли; + + // Удаляем ссылку на узел из всех сценариев обменов данными + ТекстЗапроса = " + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | СценарииОбменовДаннымиНастройкиОбмена.Ссылка КАК СценарийОбменаДанными + |ИЗ + | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК СценарииОбменовДаннымиНастройкиОбмена + |ГДЕ + | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы + |"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); + Запрос.Текст = ТекстЗапроса; + + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + + Выборка = Результат.Выбрать(); + + Пока Выборка.Следующий() Цикл + + СценарийОбменаДанными = Выборка.СценарийОбменаДанными.ПолучитьОбъект(); + + Справочники.СценарииОбменовДанными.УдалитьВыгрузкуВСценарииОбменаДанными(СценарийОбменаДанными, УзелИнформационнойБазы); + Справочники.СценарииОбменовДанными.УдалитьЗагрузкуВСценарииОбменаДанными(СценарийОбменаДанными, УзелИнформационнойБазы); + + Попытка + + СценарийОбменаДанными.Записать(); + + Если СценарийОбменаДанными.НастройкиОбмена.Количество() = 0 Тогда + + СценарийОбменаДанными.Удалить(); + + КонецЕсли; + + Исключение + + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + // Отмечаем в управляющем приложении ошибку выполнения операции + ОтправитьСообщениеОшибкаПриУдаленииОбмена(КодЭтогоУзла, Число(КодУзла), СтрокаСообщенияОбОшибке, Отправитель); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + Возврат; + КонецПопытки; + + КонецЦикла; + + КонецЕсли; + + // Удаляем каталог обмена + FILEКаталогОбменаИнформацией = РегистрыСведений.НастройкиТранспортаОбмена.ИмяКаталогаОбменаИнформацией(Перечисления.ВидыТранспортаСообщенийОбмена.FILE, УзелИнформационнойБазы); + + Попытка + УдалитьФайлы(FILEКаталогОбменаИнформацией); + Исключение + КонецПопытки; + + // Удаляем узел + Попытка + УзелИнформационнойБазы.ПолучитьОбъект().Удалить(); + Исключение + + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + // Отмечаем в управляющем приложении ошибку выполнения операции + ОтправитьСообщениеОшибкаПриУдаленииОбмена(КодЭтогоУзла, Число(КодУзла), СтрокаСообщенияОбОшибке, Отправитель); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + Возврат; + КонецПопытки; + + // Выключаем использование обмена данными, при необходимости + ОбменДаннымиИспользуется = ОбменДаннымиСервер.ПолучитьИспользуемыеПланыОбмена().Количество() > 0; + + Если Не ОбменДаннымиИспользуется Тогда + + Константы.ИспользоватьОбменДанными.Установить(Ложь); + + КонецЕсли; + + // Отмечаем успешное выполнение операции в управляющем приложении + ОтправитьСообщениеУспешноеВыполнениеОперации(КодЭтогоУзла, Число(КодУзла), Отправитель); + +КонецПроцедуры + +Процедура УстановитьПрефиксОбластиДанных(Знач Префикс) + + УстановитьПривилегированныйРежим(Истина); + + Если ПустаяСтрока(Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Получить()) Тогда + + Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Установить(Формат(Префикс, "ЧЦ=2; ЧВН=; ЧГ=0")); + + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьОбластьДанных(Знач ОбластьДанных) + + УстановитьПривилегированныйРежим(Истина); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОбластьДанных); + +КонецПроцедуры + +Процедура ОтправитьСообщениеУспешноеВыполнениеОперации(Код1, Код2, КонечнаяТочка) + + НачатьТранзакцию(); + Попытка + + ТелоСообщения = Новый Структура("Код1, Код2", Код1, Код2); + + ОбменСообщениями.ОтправитьСообщение("ОбменДанными\ПрикладноеПриложение\Ответ\УспешноеВыполнениеОперации", ТелоСообщения, КонечнаяТочка); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка сообщений'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура ОтправитьСообщениеОшибкаПриСозданииОбмена(Код1, Код2, СтрокаОшибки, КонечнаяТочка) + + НачатьТранзакцию(); + Попытка + + ТелоСообщения = Новый Структура("Код1, Код2, СтрокаОшибки", Код1, Код2, СтрокаОшибки); + + ОбменСообщениями.ОтправитьСообщение("ОбменДанными\ПрикладноеПриложение\Ответ\ОшибкаПриСозданииОбмена", ТелоСообщения, КонечнаяТочка); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка сообщений'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура ОтправитьСообщениеОшибкаПриУдаленииОбмена(Код1, Код2, СтрокаОшибки, КонечнаяТочка) + + НачатьТранзакцию(); + Попытка + + ТелоСообщения = Новый Структура("Код1, Код2, СтрокаОшибки", Код1, Код2, СтрокаОшибки); + + ОбменСообщениями.ОтправитьСообщение("ОбменДанными\ПрикладноеПриложение\Ответ\ОшибкаПриУдаленииОбмена", ТелоСообщения, КонечнаяТочка); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка сообщений'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура ДобавитьОбработчикКаналаСообщений(Канал, ОбработчикКанала, Обработчики) + + Обработчик = Обработчики.Добавить(); + Обработчик.Канал = Канал; + Обработчик.Обработчик = ОбработчикКанала; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса.mdo b/SSL/src/CommonModules/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса.mdo new file mode 100644 index 000000000..625325cd5 --- /dev/null +++ b/SSL/src/CommonModules/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса.mdo @@ -0,0 +1,9 @@ + + + ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса + + ru + Обработчик каналов сообщений обмена данными в режиме сервиса + + true + diff --git a/SSL/src/CommonModules/ОбработчикКаналовСообщенийУдаленногоАдминистрирования/Module.bsl b/SSL/src/CommonModules/ОбработчикКаналовСообщенийУдаленногоАдминистрирования/Module.bsl new file mode 100644 index 000000000..336af7278 --- /dev/null +++ b/SSL/src/CommonModules/ОбработчикКаналовСообщенийУдаленногоАдминистрирования/Module.bsl @@ -0,0 +1,721 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОбработчикКаналовСообщенийУдаленногоАдминистрирования. +// +//////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Получает список обработчиков сообщений, которые обрабатывает данная подсистема. +// +// Параметры: +// Обработчики - ТаблицаЗначений - состав полей см. в ОбменСообщениями.НоваяТаблицаОбработчиковСообщений +// +Процедура ПолучитьОбработчикиКаналовСообщений(Знач Обработчики) Экспорт + + ИменаКаналов = СообщенияУдаленногоАдминистрированияПовтИсп.ПолучитьКаналыПакета( + СообщенияУдаленногоАдминистрированияПовтИсп.ПакетУдаленноеАдминистрирование()); + + Для каждого ИмяКанала Из ИменаКаналов Цикл + Обработчик = Обработчики.Добавить(); + Обработчик.Канал = ИмяКанала; + Обработчик.Обработчик = ОбработчикКаналовСообщенийУдаленногоАдминистрирования; + КонецЦикла; + +КонецПроцедуры + +// Выполняет обработку тела сообщения из канала в соответствии с алгоритмом текущего канала сообщений +// +// Параметры: +// <КаналСообщений> (обязательный). Тип:Строка. Идентификатор канала сообщений, из которого получено сообщение. +// <ТелоСообщения> (обязательный). Тип: Произвольный. Тело сообщения, полученное из канала, которое подлежит обработке. +// <Отправитель> (обязательный). Тип: ПланОбменаСсылка.ОбменСообщениями. Конечная точка, которая является отправителем сообщения. +// +Процедура ОбработатьСообщение(Знач КаналСообщений, Знач ТелоСообщения, Знач Отправитель) Экспорт + + ТипСообщения = СообщенияУдаленногоАдминистрирования.ТипСообщенияПоИмениКанала(КаналСообщений); + + Содержимое = СообщенияУдаленногоАдминистрирования.ПолучитьСодержимоеСообщения(ТелоСообщения); + + Словарь = СообщенияУдаленногоАдминистрированияПовтИсп; + + Если ТипСообщения = Словарь.СообщениеОбновитьПользователя() Тогда + ОбновитьПользователя(Содержимое, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеПодготовитьОбластьДанных() Тогда + ПодготовитьОбластьДанных(Содержимое, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУдалитьОбластьДанных() Тогда + УдалитьОбластьДанных(Содержимое, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьДоступКОбластиДанных() Тогда + УстановитьДоступКОбластиДанных(Содержимое, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьКонечнуюТочкуМенеджераСервиса() Тогда + УстановитьКонечнуюТочкуМенеджераСервиса(Содержимое, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПараметрыИБ() Тогда + УстановитьПараметрыИБ(Содержимое, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПараметрыОбластиДанных() Тогда + УстановитьПараметрыОбластиДанных(Содержимое, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПолныеПраваОбластиДанных() Тогда + УстановитьПолныеПраваОбластиДанных(Содержимое, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПраваПользователяПоУмолчанию() Тогда + УстановитьПраваПользователяПоУмолчанию(Содержимое, Отправитель); + Иначе + + СообщенияУдаленногоАдминистрирования.ОшибкаНеизвестноеИмяКанала(КаналСообщений); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +/////////////////////////////////////////////////////////////////////////////////// +// Управление пользователями + +// Структура содержимого сообщения +// Имя +// ПолноеИмя +// СохраняемоеЗначениеПароля +// Язык +// Почта +// ОбластьДанных +// ИдентификаторПользователяСервиса +// ИдентификаторПользователяОбластиДанных +// +Процедура ОбновитьПользователя(Содержимое, Отправитель) + + ОписаниеПользователя = Содержимое; + + УстановитьПривилегированныйРежим(Истина); + + ЯзыкПользователя = ПолучитьЯзыкПоКоду(ОписаниеПользователя.Язык); + + Если ОписаниеПользователя.Установлено("Почта") Тогда + Почта = ОписаниеПользователя.Почта; + Иначе + Почта = ""; + КонецЕсли; + + СтруктураАдресаЭП = ПолучитьСтруктуруАдресаЭлектроннойПочты(Почта); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОписаниеПользователя.ОбластьДанных); + + НачатьТранзакцию(); + Попытка + Если ОписаниеПользователя.Установлено("ИдентификаторПользователяОбластиДанных") + И ЗначениеЗаполнено(ОписаниеПользователя.ИдентификаторПользователяОбластиДанных) Тогда + + ПользовательОбластиДанных = Справочники.Пользователи.ПолучитьСсылку(ОписаниеПользователя.ИдентификаторПользователяОбластиДанных); + + Блокировка = Новый БлокировкаДанных; + + ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи"); + + ЭлементБлокировки.УстановитьЗначение("Ссылка", ПользовательОбластиДанных); + + Блокировка.Заблокировать(); + + ИдентификаторПользователяИБ = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПользовательОбластиДанных, "ИдентификаторПользователяИБ"); + Иначе + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Ссылка, + | Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяИБ + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяСервиса = &ИдентификаторПользователяСервиса"; + Запрос.УстановитьПараметр("ИдентификаторПользователяСервиса", ОписаниеПользователя.ИдентификаторПользователяСервиса); + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + ИдентификаторПользователяИБ = Неопределено; + ПользовательОбластиДанных = Неопределено; + Иначе + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + ИдентификаторПользователяИБ = Выборка.ИдентификаторПользователяИБ; + ПользовательОбластиДанных = Выборка.Ссылка; + КонецЕсли; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ПользовательОбластиДанных) Тогда + ПользовательОбъект = Справочники.Пользователи.СоздатьЭлемент(); + ПользовательОбъект.ИдентификаторПользователяСервиса = ОписаниеПользователя.ИдентификаторПользователяСервиса; + Иначе + ПользовательОбъект = ПользовательОбластиДанных.ПолучитьОбъект(); + КонецЕсли; + + ПользовательОбъект.Наименование = ОписаниеПользователя.ПолноеИмя; + + ОбновитьАдресЭлектроннойПочты(ПользовательОбъект, Почта, СтруктураАдресаЭП); + + СтруктураПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(); + Если ЗначениеЗаполнено(ИдентификаторПользователяИБ) + И Пользователи.ПользовательПоИдентификаторуСуществует(ИдентификаторПользователяИБ) Тогда + СтруктураПользователяИБ.ПользовательИнфБазыУникальныйИдентификатор = ИдентификаторПользователяИБ; + КонецЕсли; + + СтруктураПользователяИБ.ПользовательИнфБазыИмя = ОписаниеПользователя.Имя; + + СтруктураПользователяИБ.ПользовательИнфБазыПолноеИмя = ОписаниеПользователя.ПолноеИмя; + + СтруктураПользователяИБ.ПользовательИнфБазыАутентификацияСтандартная = Истина; + СтруктураПользователяИБ.ПользовательИнфБазыПоказыватьВСпискеВыбора = Ложь; + + СтруктураПользователяИБ.ПользовательИнфБазыСохраняемоеЗначениеПароля = ОписаниеПользователя.СохраняемоеЗначениеПароля; + + СтруктураПользователяИБ.ПользовательИнфБазыЯзык = ЯзыкПользователя; + + ПользовательОбъект.ДополнительныеСвойства.Вставить("ДоступКИнформационнойБазеРазрешен", Истина); + ПользовательОбъект.ДополнительныеСвойства.Вставить("СтруктураОписанияПользователяИБ", СтруктураПользователяИБ); + + ПользовательОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление пользователя'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Функция ПолучитьСтруктуруАдресаЭлектроннойПочты(Знач АдресЭлектроннойПочты) + + Если ЗначениеЗаполнено(АдресЭлектроннойПочты) Тогда + + Попытка + СтруктураАдресаЭП = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(АдресЭлектроннойПочты); + Исключение + ШаблонСообщения = НСтр("ru = 'Указан некорректный адрес электронной почты: %1 + |Ошибка: %2'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, + АдресЭлектроннойПочты, ИнформацияОбОшибке().Описание); + ВызватьИсключение(ТекстСообщения); + КонецПопытки; + + Возврат СтруктураАдресаЭП; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +Процедура ОбновитьАдресЭлектроннойПочты(Знач ПользовательОбъект, Знач Адрес, Знач СтруктураАдресаЭП) + + ВидКИ = Справочники.ВидыКонтактнойИнформации.EmailПользователя; + + СтрокаТабличнойЧасти = ПользовательОбъект.КонтактнаяИнформация.Найти(ВидКИ, "Вид"); + Если СтруктураАдресаЭП = Неопределено Тогда + Если СтрокаТабличнойЧасти <> Неопределено Тогда + ПользовательОбъект.КонтактнаяИнформация.Удалить(СтрокаТабличнойЧасти); + КонецЕсли; + Иначе + Если СтрокаТабличнойЧасти = Неопределено Тогда + СтрокаТабличнойЧасти = ПользовательОбъект.КонтактнаяИнформация.Добавить(); + СтрокаТабличнойЧасти.Вид = ВидКИ; + КонецЕсли; + СтрокаТабличнойЧасти.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; + СтрокаТабличнойЧасти.Представление = Адрес; + + Если СтруктураАдресаЭП.Количество() > 0 Тогда + СтрокаТабличнойЧасти.АдресЭП = СтруктураАдресаЭП[0].Адрес; + + Поз = Найти(СтрокаТабличнойЧасти.АдресЭП, "@"); + Если Поз <> 0 Тогда + СтрокаТабличнойЧасти.ДоменноеИмяСервера = Сред(СтрокаТабличнойЧасти.АдресЭП, Поз + 1); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Структура содержимого сообщения +// ИдентификаторПользователяСервиса +// ОбластьДанных +// Значение +// +Процедура УстановитьПолныеПраваОбластиДанных(Содержимое, Отправитель) + + УстановитьПривилегированныйРежим(Истина); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Содержимое.ОбластьДанных); + + НачатьТранзакцию(); + Попытка + ПользовательОбластиДанных = ПолучитьПользователяОбластиПоИдентификаторуПользователяСервиса(Содержимое.ИдентификаторПользователяСервиса); + + Если ПользователиПереопределяемый.ЗапретРедактированияРолей() + И Метаданные.ОбщиеМодули.Найти("УправлениеДоступом") <> Неопределено Тогда + // Используется управление доступом + + ИмяСправочникка = "ГруппыДоступа"; + + ГруппаОбъект = Справочники.ГруппыДоступа.Администраторы.Ссылка.ПолучитьОбъект(); + + СтрокаПользователь = ГруппаОбъект.Пользователи.Найти(ПользовательОбластиДанных, "Пользователь"); + Если Содержимое.Значение Тогда + Если СтрокаПользователь = Неопределено Тогда + СтрокаПользователь = ГруппаОбъект.Пользователи.Добавить(); + СтрокаПользователь.Пользователь = ПользовательОбластиДанных; + КонецЕсли; + Иначе + Если СтрокаПользователь <> Неопределено Тогда + ГруппаОбъект.Пользователи.Удалить(СтрокаПользователь); + КонецЕсли; + КонецЕсли; + ГруппаОбъект.Записать(); + + Иначе + + ПользовательИБ = ПолучитьПользователяИБПоПользователюОбластиДанных(ПользовательОбластиДанных); + + РольПолныеПрава = Метаданные.Роли.ПолныеПрава; + Если Содержимое.Значение Тогда + Если НЕ ПользовательИБ.Роли.Содержит(РольПолныеПрава) Тогда + ПользовательИБ.Роли.Добавить(РольПолныеПрава); + КонецЕсли; + Иначе + Если ПользовательИБ.Роли.Содержит(РольПолныеПрава) Тогда + ПользовательИБ.Роли.Удалить(РольПолныеПрава); + КонецЕсли; + КонецЕсли; + + Пользователи.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ); + + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Установка полных прав области данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Функция ПолучитьПользователяОбластиПоИдентификаторуПользователяСервиса(Знач ИдентификаторПользователяСервиса) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Ссылка + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяСервиса = &ИдентификаторПользователяСервиса"; + Запрос.УстановитьПараметр("ИдентификаторПользователяСервиса", ИдентификаторПользователяСервиса); + + НачатьТранзакцию(); + Попытка + Результат = Запрос.Выполнить(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение пользователя области данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + Если Результат.Пустой() Тогда + ШаблонСообщения = НСтр("ru = 'Не найден пользователь с идентификатором пользователя сервиса %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ИдентификаторПользователяСервиса); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + Возврат Результат.Выгрузить()[0].Ссылка; + +КонецФункции + +Функция ПолучитьПользователяИБПоПользователюОбластиДанных(Знач ПользовательОбластиДанных) + + ИдентфиикаторПользователяИБ = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПользовательОбластиДанных, "ИдентификаторПользователяИБ"); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентфиикаторПользователяИБ); + Если ПользовательИБ = Неопределено Тогда + ШаблонСообщения = НСтр("ru = 'Для пользователя области данных с идентификатором %1 не существует пользователя информационной базы'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ПользовательОбластиДанных.УникальныйИдентификатор()); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + Возврат ПользовательИБ; + +КонецФункции + +Функция ПолучитьЯзыкПоКоду(Знач КодЯзыка) + + Если ЗначениеЗаполнено(КодЯзыка) Тогда + + Для каждого Язык Из Метаданные.Языки Цикл + Если Язык.КодЯзыка = КодЯзыка Тогда + Возврат Язык.Имя; + КонецЕсли; + КонецЦикла; + + ШаблонСообщения = НСтр("ru = 'Неподдерживаемый код языка: %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Язык); + ВызватьИсключение(ТекстСообщения); + + Иначе + + Возврат Неопределено; + + КонецЕсли; + +КонецФункции + +// Структура содержимого сообщения +// ИдентификаторПользователяСервиса +// Имя* +// СохраняемоеЗначениеПароля* +// Язык* +// ОбластьДанных +// Значение +// +Процедура УстановитьДоступКОбластиДанных(Содержимое, Отправитель) + + УстановитьПривилегированныйРежим(Истина); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Содержимое.ОбластьДанных); + + НачатьТранзакцию(); + Попытка + ПользовательОбластиДанных = ПолучитьПользователяОбластиПоИдентификаторуПользователяСервиса(Содержимое.ИдентификаторПользователяСервиса); + + ИдентфиикаторПользователяИБ = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПользовательОбластиДанных, "ИдентификаторПользователяИБ"); + + Если Содержимое.Значение Тогда + Если НЕ ЗначениеЗаполнено(ИдентфиикаторПользователяИБ) + ИЛИ ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентфиикаторПользователяИБ) = Неопределено Тогда + + ЯзыкПользователяИБ = ПолучитьЯзыкПоКоду(Содержимое.Язык); + + ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + ПользовательИБ.Имя = Содержимое.Имя; + ПользовательИБ.Язык = ЯзыкПользователяИБ; + ПользовательИБ.СохраняемоеЗначениеПароля = Содержимое.СохраняемоеЗначениеПароля; + ПользовательИБ.ПолноеИмя = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПользовательОбластиДанных, "Наименование"); + ПользовательИБ.Записать(); + + ПользовательОбъект = ПользовательОбластиДанных.ПолучитьОбъект(); + ПользовательОбъект.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор; + ПользовательОбъект.Записать(); + + КонецЕсли; + + Иначе + + Если ЗначениеЗаполнено(ИдентфиикаторПользователяИБ) Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентфиикаторПользователяИБ); + Если ПользовательИБ <> Неопределено Тогда + ПользовательИБ.Удалить(); + КонецЕсли; + + ПользовательОбъект = ПользовательОбластиДанных.ПолучитьОбъект(); + ПользовательОбъект.ИдентификаторПользователяИБ = Неопределено; + ПользовательОбъект.Записать(); + + КонецЕсли; + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Установка доступа к области данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура УстановитьПраваПользователяПоУмолчанию(Содержимое, Отправитель) + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Содержимое.ОбластьДанных); + + НачатьТранзакцию(); + Попытка + ПользовательОбластиДанных = ПолучитьПользователяОбластиПоИдентификаторуПользователяСервиса(Содержимое.ИдентификаторПользователяСервиса); + ПользователиПереопределяемый.УстановитьПраваПоУмолчанию(ПользовательОбластиДанных); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Установка прав пользователя'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////////// +// Управление областями данных + +// Структура содержимого сообщения +// ОбластьДанных +// ИдентификаторФайлаДанных +// +Процедура ПодготовитьОбластьДанных(Содержимое, Отправитель) + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + Если НЕ ЗначениеЗаполнено(Константы.РежимИспользованияИнформационнойБазы.Получить()) Тогда + ТекстСообщения = НСтр("ru = 'Не установлен режим работы конфигурации'"); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + Блокировка = Новый БлокировкаДанных; + Элемент = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); + Элемент.УстановитьЗначение("ОбластьДанных", Содержимое.ОбластьДанных); + Блокировка.Заблокировать(); + + МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = Содержимое.ОбластьДанных; + МенеджерЗаписи.Прочитать(); + Если МенеджерЗаписи.Выбран() Тогда + Если МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Удалена Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 удалена'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Содержимое.ОбластьДанных); + ВызватьИсключение(ТекстСообщения); + ИначеЕсли МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.КУдалению Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 в процессе удаления'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Содержимое.ОбластьДанных); + ВызватьИсключение(ТекстСообщения); + ИначеЕсли МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Новая Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 в процессе подготовки к использованию'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Содержимое.ОбластьДанных); + ВызватьИсключение(ТекстСообщения); + ИначеЕсли МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Используется Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 используется.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Содержимое.ОбластьДанных); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + КонецЕсли; + + МенеджерЗаписи.ОбластьДанных = Содержимое.ОбластьДанных; + МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Новая; + Если ЗначениеЗаполнено(Содержимое.ИдентификаторФайлаДанных) Тогда + МенеджерЗаписи.ИдентификаторВыгрузки = Содержимое.ИдентификаторФайлаДанных; + КонецЕсли; + МенеджерЗаписи.Повтор = 0; + + МенеджерЗаписи.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + ПараметрыМетода = Новый Массив; + ПараметрыМетода.Добавить(Содержимое.ОбластьДанных); + + Если ЗначениеЗаполнено(МенеджерЗаписи.ИдентификаторВыгрузки) Тогда + ПараметрыМетода.Добавить(МенеджерЗаписи.ИдентификаторВыгрузки); + КонецЕсли; + + ОчередьЗаданий.ЗапланироватьВыполнениеЗадания( + "РаботаВМоделиСервиса.ПодготовитьОбластьДанныхКИспользованию", ПараметрыМетода, "1",, Содержимое.ОбластьДанных); + +КонецПроцедуры + +// Структура содержимого сообщения +// ОбластьДанных +// +Процедура УдалитьОбластьДанных(Содержимое, Отправитель) + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + Элемент = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); + Элемент.УстановитьЗначение("ОбластьДанных", Содержимое.ОбластьДанных); + Блокировка.Заблокировать(); + + МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = Содержимое.ОбластьДанных; + МенеджерЗаписи.Прочитать(); + Если НЕ МенеджерЗаписи.Выбран() Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 не существует.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Содержимое.ОбластьДанных); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + МенеджерЗаписи.ОбластьДанных = Содержимое.ОбластьДанных; + МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.КУдалению; + МенеджерЗаписи.Повтор = 0; + + МенеджерЗаписи.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Удаление области данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + ПараметрыМетода = Новый Массив; + ПараметрыМетода.Добавить(Содержимое.ОбластьДанных); + + ОчередьЗаданий.ЗапланироватьВыполнениеЗадания( + "РаботаВМоделиСервиса.ОчиститьОбластьДанных", ПараметрыМетода, "1",, Содержимое.ОбластьДанных); + +КонецПроцедуры + +// Структура содержимого сообщения +// ОбластьДанных +// ЧасовойПояс +// Наименование +Процедура УстановитьПараметрыОбластиДанных(Содержимое, Отправитель) + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + Элемент = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); + Элемент.УстановитьЗначение("ОбластьДанных", Содержимое.ОбластьДанных); + Блокировка.Заблокировать(); + + МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = Содержимое.ОбластьДанных; + МенеджерЗаписи.Прочитать(); + Если НЕ МенеджерЗаписи.Выбран() Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 не существует.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Содержимое.ОбластьДанных); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + МенеджерЗаписи.Представление = Содержимое.Наименование; + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Содержимое.ОбластьДанных); + + Если ЗначениеЗаполнено(Содержимое.ЧасовойПояс) Тогда + УстановитьЧасовойПоясИнформационнойБазы(Содержимое.ЧасовойПояс); + Иначе + УстановитьЧасовойПоясИнформационнойБазы(); + КонецЕсли; + + МенеджерЗаписи.ЧасовойПояс = Содержимое.ЧасовойПояс; + МенеджерЗаписи.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Установка параметров области данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + Если Не ПустаяСтрока(Содержимое.Наименование) Тогда + + ОбновитьСвойстваПредопределенныхУзлов(Содержимое.Наименование); + + КонецЕсли; + +КонецПроцедуры + +Процедура ОбновитьСвойстваПредопределенныхУзлов(Знач Наименование) + + Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл + + ПланОбменаИспользуетсяВМоделиСервиса = Ложь; + + Попытка + ПланОбменаИспользуетсяВМоделиСервиса = ПланыОбмена[ПланОбмена.Имя].ПланОбменаИспользуетсяВМоделиСервиса(); + Исключение + ПланОбменаИспользуетсяВМоделиСервиса = Ложь; + КонецПопытки; + + Если ПланОбменаИспользуетсяВМоделиСервиса Тогда + + ЭтотУзел = ПланыОбмена[ПланОбмена.Имя].ЭтотУзел(); + + СвойстваУзла = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ЭтотУзел, "Код, Наименование"); + + Если ПустаяСтрока(СвойстваУзла.Код) Тогда + + ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); + ЭтотУзелОбъект.Код = ОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(РаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); + ЭтотУзелОбъект.Наименование = Наименование; + ЭтотУзелОбъект.Записать(); + + ИначеЕсли СвойстваУзла.Наименование <> Наименование Тогда + + ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); + ЭтотУзелОбъект.Наименование = Наименование; + ЭтотУзелОбъект.Записать(); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////////// +// Управление информационной базой + +// Структура содержимого сообщения +// Параметры +Процедура УстановитьПараметрыИБ(Содержимое, Отправитель) + + Параметры = СериализаторXDTO.ПрочитатьXDTO(Содержимое.Параметры); + + НачатьТранзакцию(); + Попытка + ТаблицаПараметров = РаботаВМоделиСервиса.ПолучитьТаблицуПараметровИБ(); + + ИзменяемыеПараметры = Новый Структура; + + // Проверка корректности списка параметров + Для каждого КлючИЗначение Из Параметры Цикл + + СтрокаПараметра = ТаблицаПараметров.Найти(КлючИЗначение.Ключ, "Имя"); + Если СтрокаПараметра = Неопределено Тогда + ШаблонСообщения = НСтр("ru = 'Не известное имя параметра %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, КлючИЗначение.Ключ); + ЗаписьЖурналаРегистрации("УдаленноеАдминистрирование.УстановитьПараметрыИБ", + УровеньЖурналаРегистрации.Предупреждение, , , ТекстСообщения); + Продолжить; + ИначеЕсли СтрокаПараметра.ЗапретЗаписи Тогда + ШаблонСообщения = НСтр("ru = 'Параметр %1 может использоваться только для чтения'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, КлючИЗначение.Ключ); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + ИзменяемыеПараметры.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + + КонецЦикла; + + СтандартныеПодсистемыПереопределяемый.ПриУстановкеЗначенийПараметровИБ(ИзменяемыеПараметры); + РаботаВМоделиСервисаПереопределяемый.ПриУстановкеЗначенийПараметровИБ(ИзменяемыеПараметры); + + Для каждого КлючИЗначение Из ИзменяемыеПараметры Цикл + + Константы[КлючИЗначение.Ключ].Установить(КлючИЗначение.Значение); + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Установка параметров ИБ'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура УстановитьКонечнуюТочкуМенеджераСервиса(Содержимое, Отправитель) + + Константы.КонечнаяТочкаМенеджераСервиса.Установить(Отправитель); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбработчикКаналовСообщенийУдаленногоАдминистрирования/ОбработчикКаналовСообщенийУдаленногоАдминистрирования.mdo b/SSL/src/CommonModules/ОбработчикКаналовСообщенийУдаленногоАдминистрирования/ОбработчикКаналовСообщенийУдаленногоАдминистрирования.mdo new file mode 100644 index 000000000..309a6055f --- /dev/null +++ b/SSL/src/CommonModules/ОбработчикКаналовСообщенийУдаленногоАдминистрирования/ОбработчикКаналовСообщенийУдаленногоАдминистрирования.mdo @@ -0,0 +1,9 @@ + + + ОбработчикКаналовСообщенийУдаленногоАдминистрирования + + ru + Обработчик каналов сообщений удаленного администрирования + + true + diff --git a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl index 1927405f7..f31e13fb3 100644 --- a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl @@ -1,57 +1,355 @@ //////////////////////////////////////////////////////////////////////////////// -// Общие процедуры и функции для работы с прикладными типами и коллекциями значений - -// Объединяет две таблицы значений по условию "И". -// Возвращает таблицу значений, полученную в результате объединения двух таблиц по условию "И". +// Подсистема "Базовая функциональность". +// Серверные процедуры и функции общего назначения: +// - для работы с данными в базе; +// - для работы с прикладными типами и коллекциями значений; +// - математические процедуры и функции; +// - для работы с внешним соединением; +// - для работы с формами; +// - для работы с типами, объектами метаданных и их строковыми представлениями; +// - функции определения типов объектов метаданных; +// - сохранение, чтение и удаление настроек из хранилищ; +// - для работы с табличными документами; +// - для работы с журналом регистрации; +// - для работы в режиме разделения данных; +// - версионирование программных интерфейсов; +// - вспомогательные процедуры и функции. // +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//////////////////////////////////////////////////////////////////////////////// +// Общие процедуры и функции для работы с данными в базе + +// Возвращает структуру, содержащую значения реквизитов прочитанные из информационной базы +// по ссылке на объект. +// +// Если доступа к одному из реквизитов нет, возникнет исключение прав доступа. +// Если необходимо зачитать реквизит независимо от прав текущего пользователя, +// то следует использовать предварительный переход в привилегированный режим. +// // Параметры: -// Таблица1 - ТаблицаЗначений - первая таблица значений для объединения -// Таблица2 - ТаблицаЗначений - вторая таблица значений для объединения -// ПоляТаблицы - Строка - поля таблицы, перечисленные через запятую, по которым будут выполнятся объединение -// ИмяПоляИтератора - Строка - имя служебной колонки таблицы значений. -// Это имя должно быть уникально во множестве имен колонок первой и второй таблиц. -// Переменная ПоляТаблицы не должна содержать этого имени. -// Значение по умолчанию "ИтераторПоляТаблицы" +// Ссылка - ссылка на объект, - элемент справочника, документ, ... +// ИменаРеквизитов - Строка или Структура - если Строка, то имена реквизитов, +// перечисленные через запятую, в формате требований к свойствам структуры. +// Например, "Код, Наименование, Родитель". +// Если Структура, то в качестве ключа передается псевдоним поля для +// возвращаемой структуры с результатом, а в качестве значения (опционально) +// - фактическое имя поля в таблице. +// Если значение не определено, то имя поля берется из ключа. // // Возвращаемое значение: -// ТаблицаЗначений - таблица значений, полученная в результате объединения двух таблиц по условию "И" -// -Функция ОбъединитьТаблицыПоУсловиюИ(Таблица1, Таблица2, Знач ПоляТаблицы, ИмяПоляИтератора = "ИтераторПоляТаблицы") Экспорт +// Структура - содержит список свойств, как список имен в строке +// ИменаРеквизитов, со значениям реквизитов, прочитанных +// из информационной базы. +// +Функция ПолучитьЗначенияРеквизитов(Ссылка, ИменаРеквизитов) Экспорт + + Если ТипЗнч(ИменаРеквизитов) = Тип("Структура") Тогда + СтруктураРеквизитов = ИменаРеквизитов; + ИначеЕсли ТипЗнч(ИменаРеквизитов) = Тип("Строка") Тогда + СтруктураРеквизитов = Новый Структура(ИменаРеквизитов);; + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверный тип второго параметра ИменаИлиСтруктураРеквизитов: %1'"), + Строка(ТипЗнч(ИменаРеквизитов))); + КонецЕсли; + + ТекстПолей = ""; + Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл + ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение), СокрЛП(КлючИЗначение.Значение), СокрЛП(КлючИЗначение.Ключ)); + Псевдоним = СокрЛП(КлючИЗначение.Ключ); + ТекстПолей = ТекстПолей + ?(ПустаяСтрока(ТекстПолей), "", ",") + " + | " + ИмяПоля + " КАК " + Псевдоним; + КонецЦикла; + + Запрос = Новый Запрос( + "ВЫБРАТЬ + |" + ТекстПолей + " + |ИЗ + | " + Ссылка.Метаданные().ПолноеИмя() + " КАК ПсевдонимЗаданнойТаблицы + |ГДЕ + | ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка + |"); + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Результат = Новый Структура; + Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл + Результат.Вставить(КлючИЗначение.Ключ); + КонецЦикла; + ЗаполнитьЗначенияСвойств(Результат, Выборка); + + Возврат Результат; +КонецФункции + +// Возвращает значение реквизита, прочитанного из информационной базы по ссылке на объект. +// +// Если доступа к реквизиту нет, возникнет исключение прав доступа. +// Если необходимо зачитать реквизит независимо от прав текущего пользователя, +// то следует использовать предварительный переход в привилегированный режим. +// +// Параметры: +// Ссылка - ссылка на объект, - элемент справочника, документ, ... +// ИмяРеквизита - Строка, например, "Код". +// +// Возвращаемое значение: +// Произвольный - зависит от типа значения прочитанного реквизита. +// +Функция ПолучитьЗначениеРеквизита(Ссылка, ИмяРеквизита) Экспорт - Таблица1.Свернуть(ПоляТаблицы); - Таблица2.Свернуть(ПоляТаблицы); + Результат = ПолучитьЗначенияРеквизитов(Ссылка, ИмяРеквизита); + Возврат Результат[ИмяРеквизита]; - ДобавитьИтераторТаблице(Таблица1, +1, ИмяПоляИтератора); - ДобавитьИтераторТаблице(Таблица2, -1, ИмяПоляИтератора); +КонецФункции + +// Возвращает структуру, содержащую значения реквизитов, прочитанные из информационной базы +// для нескольких объектов. +// +// Если доступа к одному из реквизитов нет, возникнет исключение прав доступа. +// Если необходимо зачитать реквизит независимо от прав текущего пользователя, +// то следует использовать предварительный переход в привилегированный режим. +// +// Параметры: +// МассивСсылок - массив ссылок на объекты одного типа +// ВАЖНО! значения массива должны быть ссылками на +// объекты одного типа! +// ИменаРеквизитов - Строка, имена реквизитов перечисленные через запятую, +// в формате требований к свойствам структуры. +// Например, "Код, Наименование, Родитель". +// +// Возвращаемое значение: +// Соответствие, где ключ - ссылка на объект, а Значение - структура, которая +// содержит список свойств, как список имен в строке +// ИменаРеквизитов, со значениям реквизитов, прочитанными +// из информационной базы. +// +Функция ЗначенияРеквизитовОбъектов(МассивСсылок, ИменаРеквизитов) Экспорт - ТаблицаРезультат = Таблица1.Скопировать(); + ЗначенияРеквизитов = Новый Соответствие; + Если МассивСсылок.Количество() = 0 Тогда + Возврат ЗначенияРеквизитов; + КонецЕсли; - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Таблица2, ТаблицаРезультат); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Ссылка, " + ИменаРеквизитов + " + |ИЗ + | " + МассивСсылок[0].Метаданные().ПолноеИмя() + " КАК Таблица + |ГДЕ + | Таблица.Ссылка В (&МассивСсылок)"; + Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок); - ТаблицаРезультат.Свернуть(ПоляТаблицы, ИмяПоляИтератора); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Результат = Новый Структура(ИменаРеквизитов); + ЗаполнитьЗначенияСвойств(Результат, Выборка); + ЗначенияРеквизитов[Выборка.Ссылка] = Результат; + КонецЦикла; - ТаблицаРезультат = ТаблицаРезультат.Скопировать(Новый Структура(ИмяПоляИтератора, 0)); - - ТаблицаРезультат.Колонки.Удалить(ИмяПоляИтератора); - - Возврат ТаблицаРезультат; + Возврат ЗначенияРеквизитов; КонецФункции -// Добавляет колонку в таблицу значений. Заполняет колонку переданным значением +// Возвращает значения реквизита, прочитанного из информационной базы для нескольких объектов. +// +// Если доступа к реквизиту нет, возникнет исключение прав доступа. +// Если необходимо зачитать реквизит независимо от прав текущего пользователя, +// то следует использовать предварительный переход в привилегированный режим. +// +// Параметры: +// МассивСсылок - массив ссылок на объекты одного типа +// ВАЖНО! значения массива должны быть ссылками на +// объекты одного типа! +// ИмяРеквизита - Строка, например, "Код". +// +// Возвращаемое значение: +// Соответствие, где ключ - ссылка на объект, Значение - значение прочитанного реквизита +// +Функция ЗначениеРеквизитаОбъектов(МассивСсылок, ИмяРеквизита) Экспорт + + ЗначенияРеквизитов = ЗначенияРеквизитовОбъектов(МассивСсылок, ИмяРеквизита); + Для Каждого Элемент Из ЗначенияРеквизитов Цикл + ЗначенияРеквизитов[Элемент.Ключ] = Элемент.Значение[ИмяРеквизита]; + КонецЦикла; + + Возврат ЗначенияРеквизитов; + +КонецФункции + +// Проверяет проведенность документов // // Параметры: -// Таблица - ТаблицаЗначений - таблица значений для добавления колонки -// ЗначениеИтератора - Произвольный - значение, которым будет заполнено новое поле таблицы -// ИмяПоляИтератора - Строка - имя добавляемого поля -// -Процедура ДобавитьИтераторТаблице(Таблица, ЗначениеИтератора, ИмяПоляИтератора) Экспорт +// Документы - Массив - документы, проведенность которых необходимо проверить +// +// Возвращаемое значение: +// Массив - непроведенные документы из массива Документы +// +Функция ПроверитьПроведенностьДокументов(знач Документы) Экспорт - Таблица.Колонки.Добавить(ИмяПоляИтератора); + Результат = Новый Массив; - Таблица.ЗаполнитьЗначения(ЗначениеИтератора, ИмяПоляИтератора); + ШаблонЗапроса = + "ВЫБРАТЬ + | Документ.Ссылка КАК Ссылка + |ИЗ + | &ИмяДокумента КАК Документ + |ГДЕ + | Документ.Ссылка В(&МассивДокументов) + | И (НЕ Документ.Проведен)"; -КонецПроцедуры + ТекстОбъединитьВсе = + " + | + |ОБЪЕДИНИТЬ ВСЕ + | + |"; + + ИменаДокументов = Новый Массив; + Для Каждого Документ Из Документы Цикл + ИмяДокумента = Документ.Метаданные().ПолноеИмя(); + Если ИменаДокументов.Найти(ИмяДокумента) = Неопределено + и Метаданные.Документы.Содержит(Метаданные.НайтиПоПолномуИмени(ИмяДокумента)) Тогда + ИменаДокументов.Добавить(ИмяДокумента); + КонецЕсли; + КонецЦикла; + + ТекстЗапроса = ""; + Для Каждого ИмяДокумента Из ИменаДокументов Цикл + Если Не ПустаяСтрока(ТекстЗапроса) Тогда + ТекстЗапроса = ТекстЗапроса + ТекстОбъединитьВсе; + КонецЕсли; + ТекстПодзапроса = СтрЗаменить(ШаблонЗапроса, "&ИмяДокумента", ИмяДокумента); + ТекстЗапроса = ТекстЗапроса + ТекстПодзапроса; + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("МассивДокументов", Документы); + + Если Не ПустаяСтрока(ТекстЗапроса) Тогда + Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Выполняет попытку проведения документов. +// +// Параметры: +// Документы - Массив - документы, которые необходимо провести. +// +// Возвращаемое значение: +// Массив - массив структур с полями: +// Ссылка - документ, который не удалось провести; +// ОписаниеОшибки - текст описания ошибки при проведении. +// +Функция ПровестиДокументы(Документы) Экспорт + + НепроведенныеДокументы = Новый Массив; + + Для Каждого ДокументСсылка Из Документы Цикл + + ВыполненоУспешно = Ложь; + ДокументОбъект = ДокументСсылка.ПолучитьОбъект(); + Если ДокументОбъект.ПроверитьЗаполнение() Тогда + Попытка + ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); + ВыполненоУспешно = Истина; + Исключение + ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстСообщенияОбОшибке = НСтр("ru = 'Ошибка при попытке проведения документа: %1'"); + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияОбОшибке, ПредставлениеОшибки); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Проведение документов при печати'"), + УровеньЖурналаРегистрации.Информация, ДокументОбъект.Метаданные(), ДокументСсылка, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Иначе + ПредставлениеОшибки = НСтр("ru = 'Поля документа не заполнены.'"); + КонецЕсли; + + Если Не ВыполненоУспешно Тогда + НепроведенныеДокументы.Добавить(Новый Структура("Ссылка,ОписаниеОшибки", ДокументСсылка, ПредставлениеОшибки)); + КонецЕсли; + + КонецЦикла; + + Возврат НепроведенныеДокументы; + +КонецФункции + +// Проверяет наличие ссылок на объект в базе данных. +// +// Параметры: +// Ссылка - ЛюбаяСсылка +// - Массив значений типа ЛюбаяСсылка +// +// ИскатьСредиСлужебныхОбъектов - Булево - начальное значение Ложь, +// когда установлено Истина, тогда не будет учитываться +// исключения поиска ссылок, заданные при разработке конфигурации. +// +// Возвращаемое значение: +// Булево. +// +Функция ОбъектИспользуютсяВБазеДанных(Знач СсылкаИлиМассивСсылок, Знач ИскатьСредиСлужебныхОбъектов = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(СсылкаИлиМассивСсылок) = Тип("Массив") Тогда + МассивСсылок = СсылкаИлиМассивСсылок; + Иначе + МассивСсылок = Новый Массив; + МассивСсылок.Добавить(СсылкаИлиМассивСсылок); + КонецЕсли; + + ТаблицаСсылок = НайтиПоСсылкам(МассивСсылок); + + Если НЕ ИскатьСредиСлужебныхОбъектов Тогда + + СлужебныеОбъекты = ПолучитьОбщийСписокИсключенийПоискаСсылок(); + Исключения = Новый Массив; + + Для каждого ОписаниеСсылки Из ТаблицаСсылок Цикл + Если СлужебныеОбъекты.Найти(ОписаниеСсылки.Метаданные.ПолноеИмя()) <> Неопределено Тогда + Исключения.Добавить(ОписаниеСсылки); + КонецЕсли; + КонецЦикла; + + Для Каждого СтрокаИсключение Из Исключения Цикл + ТаблицаСсылок.Удалить(СтрокаИсключение); + КонецЦикла; + КонецЕсли; + + + Возврат ТаблицаСсылок.Количество() > 0; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Общие процедуры и функции для работы с прикладными типами и коллекциями значений + +// Получает имя значения перечисления как объекта метаданных +// +// Параметры: +// Значение - значение перечисления для которого необходимо получить имя перечисления +// +// Возвращаемое значение: +// Строка - имя значения перечисления как объекта метаданных +// +Функция ИмяЗначенияПеречисления(Значение) Экспорт + + ОбъектМетаданных = Значение.Метаданные(); + + ИндексЗначения = Перечисления[ОбъектМетаданных.Имя].Индекс(Значение); + + Возврат ОбъектМетаданных.ЗначенияПеречисления[ИндексЗначения].Имя; + +КонецФункции // Заполняет массив-приемник уникальными значениями из массива-источника. // Если элемент в массиве-приемнике уже существует, то добавления нового элемента не происходит. @@ -62,14 +360,17 @@ // Процедура ЗаполнитьМассивУникальнымиЗначениями(МассивПриемник, МассивИсточник) Экспорт - Для Каждого Элемент Из МассивИсточник Цикл - - Если МассивПриемник.Найти(Элемент) = Неопределено Тогда - - МассивПриемник.Добавить(Элемент); - + УникальныеЗначения = Новый Соответствие; + + Для каждого Значение Из МассивПриемник Цикл + УникальныеЗначения.Вставить(Значение, Истина); + КонецЦикла; + + Для каждого Значение Из МассивИсточник Цикл + Если УникальныеЗначения[Значение] = Неопределено Тогда + МассивПриемник.Добавить(Значение); + УникальныеЗначения.Вставить(Значение, Истина); КонецЕсли; - КонецЦикла; КонецПроцедуры @@ -154,6 +455,21 @@ КонецФункции +Функция ПолучитьКлючиСтруктурыСтрокой(Структура, Разделитель = ",") Экспорт + + Результат = ""; + + Для Каждого Элемент Из Структура Цикл + + СимволРазделителя = ?(ПустаяСтрока(Результат), "", Разделитель); + + Результат = Результат + СимволРазделителя + Элемент.Ключ; + + КонецЦикла; + + Возврат Результат; +КонецФункции + // Получает строку, содержащую ключи структуры, разделенные символом разделителя. // // Параметры: @@ -178,6 +494,61 @@ Возврат Результат; КонецФункции +// Создает структуру аналогичную менеджеру записи регистра сведений +// +// Параметры: +// МенеджерЗаписи - РегистрСведенийМенеджерЗаписи, +// МетаданныеРегистра - метаданные регистра сведений +// +Функция СтруктураПоМенеджеруЗаписи(МенеджерЗаписи, МетаданныеРегистра) Экспорт + + ЗаписьКакСтруктура = Новый Структура; + + Если МетаданныеРегистра.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда + ЗаписьКакСтруктура.Вставить("Период", МенеджерЗаписи.Период); + КонецЕсли; + Для Каждого Поле Из МетаданныеРегистра.Измерения Цикл + ЗаписьКакСтруктура.Вставить(Поле.Имя, МенеджерЗаписи[Поле.Имя]); + КонецЦикла; + Для Каждого Поле Из МетаданныеРегистра.Ресурсы Цикл + ЗаписьКакСтруктура.Вставить(Поле.Имя, МенеджерЗаписи[Поле.Имя]); + КонецЦикла; + Для Каждого Поле Из МетаданныеРегистра.Реквизиты Цикл + ЗаписьКакСтруктура.Вставить(Поле.Имя, МенеджерЗаписи[Поле.Имя]); + КонецЦикла; + + Возврат ЗаписьКакСтруктура; + +КонецФункции + +// Создает массив и копирует в него значения, содержащиеся в колонке коллекции строк +// +// Параметры: +// КоллекцияСтрок - коллекция, для которой доступен обход посредством +// оператора Для каждого … Из … Цикл +// ИмяКолонки - строка с именем поля коллекции, значения которого нужно выгрузить +// ТолькоУникальныеЗначения - булево, необязательный, если истина, +// то в массив будут включены только различающиеся значения +// +Функция ВыгрузитьКолонку(КоллекцияСтрок, ИмяКолонки, ТолькоУникальныеЗначения = Ложь) Экспорт + + МассивЗначений = Новый Массив; + + УникальныеЗначения = Новый Соответствие; + + Для каждого СтрокаКоллекции Из КоллекцияСтрок Цикл + Значение = СтрокаКоллекции[ИмяКолонки]; + Если ТолькоУникальныеЗначения И УникальныеЗначения[Значение] <> Неопределено Тогда + Продолжить; + КонецЕсли; + МассивЗначений.Добавить(Значение); + УникальныеЗначения.Вставить(Значение, Истина); + КонецЦикла; + + Возврат МассивЗначений; + +КонецФункции + // Преобразует текст формата XML в таблицу значений, // при этом колонки таблицы формируются на основе описания в XML. // @@ -262,395 +633,212 @@ КонецФункции // ПрочитатьXMLВТаблицу() -// Возвращает признак того, что реквизит входит в подмножество стандартных реквизитов +// Функция выполняет сравнение двух коллекций строк, для которых доступен обход +// посредством оператора Для каждого … Из … Цикл. +// Сравниваемые коллекции должны отвечать следующим требованиям: +// - доступен обход посредством оператора Для каждого … Из … Цикл, +// - наличие в обеих коллекциях всех колонок, перечисленных в параметре ИменаКолонок +// (если ИменаКолонок не заполнен - всех колонок) // // Параметры: -// СтандартныеРеквизиты – ОписанияСтандартныхРеквизитов - тип и значение описывает коллекцию настроек различных стандартных реквизитов; -// ИмяРеквизита – Строка – реквизит который необходимо проверить на принадлежность множеству стандартных реквизитов; -// -// Возвращаемое значение: -// Тип: Булево. Истина - реквизит входит в подмножество стандартных реквизитов; Ложь – нет. +// КоллекцияСтрок1 - коллекция, отвечающая вышеописанным требованиям +// КоллекцияСтрок2 - коллекция, отвечающая вышеописанным требованиям +// ИменаКолонок - строка, разделенная запятыми - имена колонок, +// по которым производится сравнение. +// Не является обязательным для коллекций, +// состав колонок которых можно выявить: +// ТаблицаЗначений, СписокЗначений, Соответствие, Структура, +// если не указан - сравнение производится по всем колонкам. +// Для коллекций других типов является обязательным +// ИсключаяКолонки - имена колонок, которые игнорируются при сравнении, необязательный +// УчитыватьПоследовательностьСтрок - булево, если Истина, то коллекции признаются +// идентичными только если одинаковые строки размещены +// в коллекциях на одинаковых местах // -Функция ЭтоСтандартныйРеквизит(СтандартныеРеквизиты, ИмяРеквизита) Экспорт +Функция КоллекцииИдентичны(КоллекцияСтрок1, КоллекцияСтрок2, ИменаКолонок = "", ИсключаяКолонки = "", УчитыватьПоследовательностьСтрок = Ложь) Экспорт - Для Каждого Реквизит ИЗ СтандартныеРеквизиты Цикл - - Если Реквизит.Имя = ИмяРеквизита Тогда - - Возврат Истина; - - КонецЕсли; - - КонецЦикла; + // Типы коллекций, для которых доступен состав колонок, + // и можно выявить, если он не задан + ТипыОсобыхКоллекций = Новый Массив; + ТипыОсобыхКоллекций.Добавить(Тип("ТаблицаЗначений")); + ТипыОсобыхКоллекций.Добавить(Тип("СписокЗначений")); - Возврат Ложь; + ТипыКоллекцийКлючИЗначение = Новый Массив; + ТипыКоллекцийКлючИЗначение.Добавить(Тип("Соответствие")); + ТипыКоллекцийКлючИЗначение.Добавить(Тип("Структура")); + ТипыКоллекцийКлючИЗначение.Добавить(Тип("ФиксированноеСоответствие")); + ТипыКоллекцийКлючИЗначение.Добавить(Тип("ФиксированнаяСтруктура")); -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Общие процедуры и функции для работы с данными в базе - -// Проверяет проведенность документов -// -// Параметры: -// Документы - Массив - документы, проведенность которых необходимо проверить -// -// Возвращаемое значение: -// Массив - непроведенные документы из массива Документы -// -Функция ПроверитьПроведенностьДокументов(знач Документы) Экспорт - - Результат = Новый Массив; - - ШаблонЗапроса = - "ВЫБРАТЬ - | Документ.Ссылка КАК Ссылка - |ИЗ - | &ИмяДокумента КАК Документ - |ГДЕ - | Документ.Ссылка В(&МассивДокументов) - | И (НЕ Документ.Проведен)"; - - ТекстОбъединитьВсе = - " - | - |ОБЪЕДИНИТЬ ВСЕ - | - |"; - - ИменаДокументов = Новый Массив; - Для Каждого Документ Из Документы Цикл - ИмяДокумента = Документ.Метаданные().ПолноеИмя(); - Если ИменаДокументов.Найти(ИмяДокумента) = Неопределено - и Метаданные.Документы.Содержит(Метаданные.НайтиПоПолномуИмени(ИмяДокумента)) Тогда - ИменаДокументов.Добавить(ИмяДокумента); - КонецЕсли; - КонецЦикла; - - ТекстЗапроса = ""; - Для Каждого ИмяДокумента Из ИменаДокументов Цикл - Если Не ПустаяСтрока(ТекстЗапроса) Тогда - ТекстЗапроса = ТекстЗапроса + ТекстОбъединитьВсе; - КонецЕсли; - ТекстПодзапроса = СтрЗаменить(ШаблонЗапроса, "&ИмяДокумента", ИмяДокумента); - ТекстЗапроса = ТекстЗапроса + ТекстПодзапроса; - КонецЦикла; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("МассивДокументов", Документы); - - Если Не ПустаяСтрока(ТекстЗапроса) Тогда - Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Процедура выполняет проведение документов перед формированием печатной формы. -// -// Параметры: -// Документы - Массив - документы, которые необходимо провести -// ТипПроведенныхДокументов - Тип - возвращает тип документов в массиве -// -// Возвращаемое значение: -// Массив - документы, которые провести не удалось, и описания ошибок. -// -Функция ПровестиДокументы(Документы, ТипПроведенныхДокументов) Экспорт - - ИмяДокумента = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - Документы[0].Метаданные().ПолноеИмя(), ".")[1]; - ТипПроведенныхДокументов = ТипЗнч(Документы[0]); - НепроведенныеДокументы = Новый Массив; - - Для Каждого ДокументСсылка Из Документы Цикл - - ВыполненоУспешно = Ложь; - ДокументОбъект = ДокументСсылка.ПолучитьОбъект(); - Если ДокументОбъект.ПроверитьЗаполнение() Тогда - Попытка - ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); - ВыполненоУспешно = Истина; - Исключение - ПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ТекстСообщенияОбОшибке = НСтр("ru = 'Ошибка при попытке проведения документа: %1'"); - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияОбОшибке, ПредставлениеОшибки); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Проведение документов при печати'"), - УровеньЖурналаРегистрации.Информация, ДокументОбъект.Метаданные(), ДокументСсылка, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; + Если ПустаяСтрока(ИменаКолонок) Тогда + Если ТипыОсобыхКоллекций.Найти(ТипЗнч(КоллекцияСтрок1)) <> Неопределено + Или ТипыКоллекцийКлючИЗначение.Найти(ТипЗнч(КоллекцияСтрок1)) <> Неопределено Тогда + СравниваемыеКолонки = Новый Массив; + Если ТипЗнч(КоллекцияСтрок1) = Тип("ТаблицаЗначений") Тогда + Для Каждого Колонка Из КоллекцияСтрок1.Колонки Цикл + СравниваемыеКолонки.Добавить(Колонка.Имя); + КонецЦикла; + ИначеЕсли ТипЗнч(КоллекцияСтрок1) = Тип("СписокЗначений") Тогда + СравниваемыеКолонки.Добавить("Значение"); + СравниваемыеКолонки.Добавить("Картинка"); + СравниваемыеКолонки.Добавить("Пометка"); + СравниваемыеКолонки.Добавить("Представление"); + ИначеЕсли ТипыКоллекцийКлючИЗначение.Найти(ТипЗнч(КоллекцияСтрок1)) <> Неопределено Тогда + СравниваемыеКолонки.Добавить("Ключ"); + СравниваемыеКолонки.Добавить("Значение"); + КонецЕсли; Иначе - ПредставлениеОшибки = НСтр("ru = 'Поля документа не заполнены.'"); + ТекстИсключения = НСтр("ru = 'Для коллекции типа %1 необходимо указать имена полей, по которым производится сравнение'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, ТипЗнч(КоллекцияСтрок1)); КонецЕсли; - - Если Не ВыполненоУспешно Тогда - НепроведенныеДокументы.Добавить(Новый Структура("Ссылка,ОписаниеОшибки", ДокументСсылка, ПредставлениеОшибки)); - КонецЕсли; - - КонецЦикла; - - Возврат НепроведенныеДокументы; - -КонецФункции - -// Возвращает структуру, содержащую значения реквизитов прочитанные из информационной базы -// по ссылке на объект. -// -// Если доступа к одному из реквизитов нет, возникнет исключение прав доступа. -// Если необходимо зачитать реквизит независимо от прав текущего пользователя, -// то следует использовать предварительный переход в привилегированный режим. -// -// Параметры: -// Ссылка - ссылка на объект, - элемент справочника, документ, ... -// ИменаРеквизитов - Строка или Структура - если Строка, то имена реквизитов, -// перечисленные через запятую, в формате требований к свойствам структуры. -// Например, "Код, Наименование, Родитель". -// Если Структура, то в качестве ключа передается псевдоним поля для -// возвращаемой структуры с результатом, а в качестве значения (опционально) -// - фактическое имя поля в таблице. -// Если значение не определено, то имя поля берется из ключа. -// -// Возвращаемое значение: -// Структура - содержит список свойств, как список имен в строке -// ИменаРеквизитов, со значениям реквизитов, прочитанных -// из информационной базы. -// -Функция ПолучитьЗначенияРеквизитов(Ссылка, ИменаРеквизитов) Экспорт - - Если ТипЗнч(ИменаРеквизитов) = Тип("Структура") Тогда - СтруктураРеквизитов = ИменаРеквизитов; - ИначеЕсли ТипЗнч(ИменаРеквизитов) = Тип("Строка") Тогда - СтруктураРеквизитов = Новый Структура(ИменаРеквизитов);; Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный тип второго параметра ИменаИлиСтруктураРеквизитов: %1'"), - Строка(ТипЗнч(ИменаРеквизитов))); + СравниваемыеКолонки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаКолонок); КонецЕсли; - ТекстПолей = ""; - Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл - ИмяПоля = ?(ЗначениеЗаполнено(КлючИЗначение.Значение), СокрЛП(КлючИЗначение.Значение), СокрЛП(КлючИЗначение.Ключ)); - Псевдоним = СокрЛП(КлючИЗначение.Ключ); - ТекстПолей = ТекстПолей + ?(ПустаяСтрока(ТекстПолей), "", ",") + " - | " + ИмяПоля + " КАК " + Псевдоним; - КонецЦикла; - - Запрос = Новый Запрос( - "ВЫБРАТЬ - |" + ТекстПолей + " - |ИЗ - | " + Ссылка.Метаданные().ПолноеИмя() + " КАК ПсевдонимЗаданнойТаблицы - |ГДЕ - | ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка - |"); - Запрос.УстановитьПараметр("Ссылка", Ссылка); - Выборка = Запрос.Выполнить().Выбрать(); - Выборка.Следующий(); - - Результат = Новый Структура; - Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл - Результат.Вставить(КлючИЗначение.Ключ); - КонецЦикла; - ЗаполнитьЗначенияСвойств(Результат, Выборка); - - Возврат Результат; -КонецФункции - -// Функция ПолучитьЗначениеРеквизита возвращает значение -// реквизита, прочитанного из информационной базы по ссылке на объект. -// -// Если доступа к реквизиту нет, возникнет исключение прав доступа. -// Если необходимо зачитать реквизит независимо от прав текущего пользователя, -// то следует использовать предварительный переход в привилегированный режим. -// -// Параметры: -// Ссылка - ссылка на объект, - элемент справочника, документ, ... -// ИмяРеквизита - Строка, например, "Код". -// -// Возвращаемое значение: -// Произвольный - зависит от типа значения прочитанного реквизита. -// -Функция ПолучитьЗначениеРеквизита(Ссылка, ИмяРеквизита) Экспорт - - Результат = ПолучитьЗначенияРеквизитов(Ссылка, ИмяРеквизита); - Возврат Результат[ИмяРеквизита]; - -КонецФункции - -// Выполняет сравнение версий двух однотипных объектов. -// -// Параметры: -// Данные1 (обязательный). Тип: -// СправочникОбъект, -// ДокументОбъект, -// ПланВидовХарактеристикОбъект, -// ПланВидовРасчетаОбъект, -// ПланСчетовОбъект, -// ПланОбменаОбъект, -// БизнесПроцессОбъект, -// ЗадачаОбъект. -// Первая версия данных для сравнения. -// -// Данные2 (обязательный). Тип: см. тип параметра Данные1 -// Вторая версия данных для сравнения. -// -// СписокСвойств (необязательный). Тип: Строка. -// Список свойств объекта и табличных частей, разделенных запятыми. -// Если параметр задан, то сравнение версий данных будет выполняться согласно -// заданным свойствам, при этом параметр ИсключаяСвойства будет проигнорирован. -// -// ИсключаяСвойства (необязательный). Тип: Строка. -// Список свойств объекта и табличных частей, разделенных запятыми. -// Если параметр задан, то сравнение версий данных будет выполняться -// для всех свойств и табличных частей, исключая заданные свойства. -// -// Возвращаемое значение: -// Тип: Булево. -// Возвращает Истина, если версии данных различаются; Ложь, если версии совпадают. -// -Функция ДанныеРазличаются(Данные1, Данные2, СписокСвойств = Неопределено, ИсключаяСвойства = Неопределено) Экспорт - - Если ТипЗнч(Данные1) <> ТипЗнч(Данные2) Тогда - Возврат Истина; - КонецЕсли; - - ОбъектМетаданных = Данные1.Метаданные(); - - Если ЭтоСправочник(ОбъектМетаданных) Тогда + // Вычитаем исключаемые поля + СравниваемыеКолонки = ОбщегоНазначенияКлиентСервер.СократитьМассив(СравниваемыеКолонки, + СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИсключаяКолонки)); + + Если УчитыватьПоследовательностьСтрок Тогда - Если Данные1.ЭтоГруппа Тогда - Объект1 = Справочники[ОбъектМетаданных.Имя].СоздатьГруппу(); - Иначе - Объект1 = Справочники[ОбъектМетаданных.Имя].СоздатьЭлемент(); + // Параллельный обход обеих коллекций + НомерСтрокиКоллекции1 = 0; + Для Каждого СтрокаКоллекции1 Из КоллекцияСтрок1 Цикл + // Спозиционируемся на аналогичную строку второй коллекции + НомерСтрокиКоллекции2 = 0; + ЕстьСтрокиКоллекции2 = Ложь; + Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл + ЕстьСтрокиКоллекции2 = Истина; + Если НомерСтрокиКоллекции2 = НомерСтрокиКоллекции1 Тогда + Прервать; + КонецЕсли; + НомерСтрокиКоллекции2 = НомерСтрокиКоллекции2 + 1; + КонецЦикла; + Если Не ЕстьСтрокиКоллекции2 Тогда + // Во второй коллекции вообще нет строк + Возврат Ложь; + КонецЕсли; + // Сравниваем значения полей двух строк + Для Каждого ИмяКолонки Из СравниваемыеКолонки Цикл + Если СтрокаКоллекции1[ИмяКолонки] <> СтрокаКоллекции2[ИмяКолонки] Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + НомерСтрокиКоллекции1 = НомерСтрокиКоллекции1 + 1; + КонецЦикла; + + КоличествоСтрокКоллекции1 = НомерСтрокиКоллекции1; + + // Отдельно подсчитаем количество строк второй коллекции + КоличествоСтрокКоллекции2 = 0; + Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл + КоличествоСтрокКоллекции2 = КоличествоСтрокКоллекции2 + 1; + КонецЦикла; + + // Если в первой коллекции не оказалось строк, + // то их не должно быть и во второй + Если КоличествоСтрокКоллекции1 = 0 Тогда + Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл + Возврат Ложь; + КонецЦикла; + КоличествоСтрокКоллекции2 = 0; КонецЕсли; - Если Данные2.ЭтоГруппа Тогда - Объект2 = Справочники[ОбъектМетаданных.Имя].СоздатьГруппу(); - Иначе - Объект2 = Справочники[ОбъектМетаданных.Имя].СоздатьЭлемент(); + // Количество строк не должно отличаться + Если КоличествоСтрокКоллекции1 <> КоличествоСтрокКоллекции2 Тогда + Возврат Ложь; КонецЕсли; - ИначеЕсли ЭтоДокумент(ОбъектМетаданных) Тогда - - Объект1 = Документы[ОбъектМетаданных.Имя].СоздатьДокумент(); - Объект2 = Документы[ОбъектМетаданных.Имя].СоздатьДокумент(); - - ИначеЕсли ЭтоПланВидовХарактеристик(ОбъектМетаданных) Тогда - - Если Данные1.ЭтоГруппа Тогда - Объект1 = ПланыВидовХарактеристик[ОбъектМетаданных.Имя].СоздатьГруппу(); - Иначе - Объект1 = ПланыВидовХарактеристик[ОбъектМетаданных.Имя].СоздатьЭлемент(); - КонецЕсли; - - Если Данные2.ЭтоГруппа Тогда - Объект2 = ПланыВидовХарактеристик[ОбъектМетаданных.Имя].СоздатьГруппу(); - Иначе - Объект2 = ПланыВидовХарактеристик[ОбъектМетаданных.Имя].СоздатьЭлемент(); - КонецЕсли; - - ИначеЕсли ЭтоПланВидовРасчета(ОбъектМетаданных) Тогда - - Объект1 = ПланыВидовРасчета[ОбъектМетаданных.Имя].СоздатьВидРасчета(); - Объект2 = ПланыВидовРасчета[ОбъектМетаданных.Имя].СоздатьВидРасчета(); - - ИначеЕсли ЭтоПланСчетов(ОбъектМетаданных) Тогда - - Объект1 = ПланыСчетов[ОбъектМетаданных.Имя].СоздатьСчет(); - Объект2 = ПланыСчетов[ОбъектМетаданных.Имя].СоздатьСчет(); - - ИначеЕсли ЭтоПланОбмена(ОбъектМетаданных) Тогда - - Объект1 = ПланыОбмена[ОбъектМетаданных.Имя].СоздатьУзел(); - Объект2 = ПланыОбмена[ОбъектМетаданных.Имя].СоздатьУзел(); - - ИначеЕсли ЭтоБизнесПроцесс(ОбъектМетаданных) Тогда - - Объект1 = БизнесПроцессы[ОбъектМетаданных.Имя].СоздатьБизнесПроцесс(); - Объект2 = БизнесПроцессы[ОбъектМетаданных.Имя].СоздатьБизнесПроцесс(); - - ИначеЕсли ЭтоЗадача(ОбъектМетаданных) Тогда - - Объект1 = Задачи[ОбъектМетаданных.Имя].СоздатьЗадачу(); - Объект2 = Задачи[ОбъектМетаданных.Имя].СоздатьЗадачу(); - Иначе - - ВызватьИсключение НСтр("ru = 'Задано недопустимое значение параметра [1] метода ОбщегоНазначения.ЗначенияСвойствИзменены.'"); - - КонецЕсли; - ЗаполнитьЗначенияСвойств(Объект1, Данные1, СписокСвойств, ИсключаяСвойства); - ЗаполнитьЗначенияСвойств(Объект2, Данные2, СписокСвойств, ИсключаяСвойства); - - ТабличныеЧасти = ТабличныеЧастиОбъекта(ОбъектМетаданных); - - Если СписокСвойств <> Неопределено Тогда + // Проверяем идентичность состава одинаковых строк без учета их последовательности - Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл + // Строки отбора накапливаем по первой коллекции для того, чтобы: + // - повторно не искать одинаковые строки, + // - убедиться, что во второй коллекции ни одной такой строки, которой нет в накопленных + + СтрокиОтбора = Новый ТаблицаЗначений; + ПараметрыОтбора = Новый Структура; + Для Каждого ИмяКолонки Из СравниваемыеКолонки Цикл + СтрокиОтбора.Колонки.Добавить(ИмяКолонки); + ПараметрыОтбора.Вставить(ИмяКолонки); + КонецЦикла; + + ЕстьСтрокиКоллекции1 = Ложь; + Для Каждого СтрокаОтбора Из КоллекцияСтрок1 Цикл - Если Найти(СписокСвойств, ТабличнаяЧасть) = 0 Тогда + ЗаполнитьЗначенияСвойств(ПараметрыОтбора, СтрокаОтбора); + Если СтрокиОтбора.НайтиСтроки(ПараметрыОтбора).Количество() > 0 Тогда + // строку с такими полями уже искали Продолжить; КонецЕсли; + ЗаполнитьЗначенияСвойств(СтрокиОтбора.Добавить(), СтрокаОтбора); - Объект1[ТабличнаяЧасть].Загрузить(Данные1[ТабличнаяЧасть].Выгрузить()); - Объект2[ТабличнаяЧасть].Загрузить(Данные2[ТабличнаяЧасть].Выгрузить()); + // Подсчитаем количество таких строк в первой коллекции + НайденоСтрокКоллекции1 = 0; + Для Каждого СтрокаКоллекции1 Из КоллекцияСтрок1 Цикл + СтрокаПодходит = Истина; + Для Каждого ИмяКолонки Из СравниваемыеКолонки Цикл + Если СтрокаКоллекции1[ИмяКолонки] <> СтрокаОтбора[ИмяКолонки] Тогда + СтрокаПодходит = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + Если СтрокаПодходит Тогда + НайденоСтрокКоллекции1 = НайденоСтрокКоллекции1 + 1; + КонецЕсли; + КонецЦикла; - КонецЦикла; - - ИначеЕсли ИсключаяСвойства <> Неопределено Тогда - - Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл + // Подсчитаем количество таких строк во второй коллекции + НайденоСтрокКоллекции2 = 0; + Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл + СтрокаПодходит = Истина; + Для Каждого ИмяКолонки Из СравниваемыеКолонки Цикл + Если СтрокаКоллекции2[ИмяКолонки] <> СтрокаОтбора[ИмяКолонки] Тогда + СтрокаПодходит = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + Если СтрокаПодходит Тогда + НайденоСтрокКоллекции2 = НайденоСтрокКоллекции2 + 1; + // Если количество таких строк во второй коллекции превысило количество в первой, + // то уже можно сделать вывод, что коллекции не идентичны + Если НайденоСтрокКоллекции2 > НайденоСтрокКоллекции1 Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + КонецЦикла; - Если Найти(ИсключаяСвойства, ТабличнаяЧасть) <> 0 Тогда - Продолжить; + // Количество таких строк не должно отличаться + Если НайденоСтрокКоллекции1 <> НайденоСтрокКоллекции2 Тогда + Возврат Ложь; КонецЕсли; - Объект1[ТабличнаяЧасть].Загрузить(Данные1[ТабличнаяЧасть].Выгрузить()); - Объект2[ТабличнаяЧасть].Загрузить(Данные2[ТабличнаяЧасть].Выгрузить()); + ЕстьСтрокиКоллекции1 = Истина; КонецЦикла; - Иначе + // Если в первой коллекции не оказалось строк, + // то их не должно быть и во второй + Если Не ЕстьСтрокиКоллекции1 Тогда + Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл + Возврат Ложь; + КонецЦикла; + КонецЕсли; - Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл - - Объект1[ТабличнаяЧасть].Загрузить(Данные1[ТабличнаяЧасть].Выгрузить()); - Объект2[ТабличнаяЧасть].Загрузить(Данные2[ТабличнаяЧасть].Выгрузить()); - + // Проверим, что во второй коллекции нет ни одной такой строки, которой нет в накопленных + Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл + ЗаполнитьЗначенияСвойств(ПараметрыОтбора, СтрокаКоллекции2); + Если СтрокиОтбора.НайтиСтроки(ПараметрыОтбора).Количество() = 0 Тогда + Возврат Ложь; + КонецЕсли; КонецЦикла; - + КонецЕсли; - Возврат ДанныеИнформационнойБазыСтрокой(Объект1) <> ДанныеИнформационнойБазыСтрокой(Объект2); + Возврат Истина; КонецФункции -Функция ДанныеИнформационнойБазыСтрокой(Данные) - - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.УстановитьСтроку(); - - ЗаписатьXML(ЗаписьXML, Данные, НазначениеТипаXML.Явное); - - Возврат ЗаписьXML.Закрыть(); - -КонецФункции - -Функция ТабличныеЧастиОбъекта(ОбъектМетаданных) - - Результат = Новый Массив; - - Для Каждого ТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл - - Результат.Добавить(ТабличнаяЧасть.Имя); - - КонецЦикла; - - Возврат Результат; -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Математические процедуры и функции @@ -821,6 +1009,8 @@ Connection = COMConnector.Connect(СтрокаСоединения); Исключение + ОшибкаПодключенияКомпоненты = Истина; + ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); СтрокаСообщенияОбОшибке = НСтр("ru = 'При установке внешнего соединения произошла ошибка: %1'"); @@ -832,127 +1022,352 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Функции для работы с табличными документами +// Вспомогательные процедуры и функции -// Проверяет, умещаются ли переданные табличные документы на страницу при печати. +// Выполнить экспортную процедуру по имени. // // Параметры -// ТабДокумент – Табличный документ -// ВыводимыеОбласти – Массив из проверяемых таблиц или табличный документ -// РезультатПриОшибке - Какой возвращать результат при возникновении ошибки -// -// Возвращаемое значение: -// Булево – умещаются или нет переданные документы -// -Функция ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти, РезультатПриОшибке = Истина) Экспорт - - Попытка - Возврат ТабДокумент.ПроверитьВывод(ВыводимыеОбласти); - Исключение - Возврат РезультатПриОшибке; - КонецПопытки; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Функции для работы с журналом регистрации - -// Процедура пакетной записи сообщений в журнал регистрации +// ИмяЭкспортнойПроцедуры – Строка – имя экспортной процедуры в формате +// <имя объекта>.<имя процедуры>, где <имя объекта> - это +// общий модуль или модуль менеджера объекта. +// Параметры - Массив - параметры передаются в процедуру <ИмяЭкспортнойПроцедуры> +// в порядке расположения элементов массива. +// ОбластьДанных - Число - задает область данных, в которой необходимо выполнить процедуру. // -// Параметры: СобытияДляЖурналаРегистрации - массив структур, клиентская глобальная переменная -// Каждая структура - сообщение для журнала регистрации. -// После записи переменная очищается. -Процедура ЗаписатьСобытияВЖурналРегистрации(СобытияДляЖурналаРегистрации) Экспорт +// Пример: +// ВыполнитьБезопасно("МойОбщийМодуль.МояПроцедура"); +// +Процедура ВыполнитьБезопасно(ИмяЭкспортнойПроцедуры, Параметры = Неопределено, ОбластьДанных = Неопределено) Экспорт - Если ТипЗнч(СобытияДляЖурналаРегистрации) <> Тип("СписокЗначений") Тогда - Возврат; - КонецЕсли; - - Если СобытияДляЖурналаРегистрации.Количество() = 0 Тогда - Возврат; + // Проверка предусловий на формат ИмяЭкспортнойПроцедуры. + ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяЭкспортнойПроцедуры, "."); + Если ЧастиИмени.Количество() <> 2 И ЧастиИмени.Количество() <> 3 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1)'"), + ИмяЭкспортнойПроцедуры); + КонецЕсли; + + ИмяОбъекта = ЧастиИмени[0]; + Если ЧастиИмени.Количество() = 2 И Метаданные.ОбщиеМодули.Найти(ИмяОбъекта) = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1)'"), + ИмяЭкспортнойПроцедуры); + КонецЕсли; + + Если ЧастиИмени.Количество() = 3 Тогда + ДопустимыеИменаТипов = Новый Массив; + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаКонстанты())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыСведений())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыНакопления())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыБухгалтерии())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыРасчета())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаСправочники())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаДокументы())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаОтчеты())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаОбработки())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаБизнесПроцессы())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаЗадачи())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыСчетов())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыОбмена())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыВидовХарактеристик())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыВидовРасчета())); + ИмяТипа = ВРег(ЧастиИмени[0]); + Если ДопустимыеИменаТипов.Найти(ИмяТипа) = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1)'"), + ИмяЭкспортнойПроцедуры); + КонецЕсли; КонецЕсли; - Для Каждого СообщениеЖурнала Из СобытияДляЖурналаРегистрации Цикл - ЗначениеСообщения = СообщениеЖурнала.Значение; - ИмяСобытия = ЗначениеСообщения.ИмяСобытия; - УровеньСобытия = УровеньСобытияПоПредставлению(ЗначениеСообщения.ПредставлениеУровня); - Комментарий = ЗначениеСообщения.Комментарий; - ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньСобытия,,, Комментарий); - КонецЦикла; - СобытияДляЖурналаРегистрации.Очистить(); + ПараметрыСтрока = ""; + Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда + Для Индекс = 0 По Параметры.ВГраница() Цикл + ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],"; + КонецЦикла; + ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1); + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если Не ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + Если ОбластьДанных = Неопределено Тогда + ОбластьДанных = ЗначениеРазделителяСеанса(); + Иначе + Если ОбластьДанных <> ЗначениеРазделителяСеанса() Тогда + ВызватьИсключение(НСтр("ru = 'В данном сеансе недопустимо обращение к данным из другой области данных!'")); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если ОбластьДанных <> Неопределено + И (НЕ ИспользованиеРазделителяСеанса() ИЛИ ОбластьДанных <> ЗначениеРазделителяСеанса()) Тогда + УстановитьРазделениеСеанса(Истина, ОбластьДанных); + КонецЕсли; + КонецЕсли; + + Выполнить ИмяЭкспортнойПроцедуры + "(" + ПараметрыСтрока + ")"; КонецПроцедуры -// Процедура ведения в журнале регистрации событий +// Проверяет имя экспортной процедуры на валидность для использования +// в инструкции Выполнить встроенного языка. При некорректном имени +// вызывается исключение. // -// Параметры: СписокУровней - список значений, -// Наименования уровней регистрации событий, которые необходимо включить -Процедура ВключитьИспользованиеЖурналаРегистрации(СписокУровней = Неопределено) Экспорт - УстановитьПривилегированныйРежим(Истина); - Попытка - УстановитьМонопольныйРежим(Истина); - МассивУровней = Новый Массив(); - - Если СписокУровней = Неопределено Тогда - МассивУровней.Добавить(УровеньЖурналаРегистрации.Информация); - МассивУровней.Добавить(УровеньЖурналаРегистрации.Ошибка); - МассивУровней.Добавить(УровеньЖурналаРегистрации.Предупреждение); - МассивУровней.Добавить(УровеньЖурналаРегистрации.Примечание); - Иначе - МассивУровней = УровниСобытияЖурналаРегистрацииПоСтроке(СписокУровней); - КонецЕсли; - - УстановитьИспользованиеЖурналаРегистрации(МассивУровней); - УстановитьМонопольныйРежим(Ложь); - Исключение - УстановитьПривилегированныйРежим(Ложь); - ВызватьИсключение - КонецПопытки; - УстановитьПривилегированныйРежим(Ложь); -КонецПроцедуры +Функция ПроверитьИмяЭкспортнойПроцедуры(Знач ИмяЭкспортнойПроцедуры, ТекстСообщения) Экспорт + + // Проверка предусловий на формат ИмяЭкспортнойПроцедуры. + ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяЭкспортнойПроцедуры, "."); + Если ЧастиИмени.Количество() <> 2 И ЧастиИмени.Количество() <> 3 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1)'"), + ИмяЭкспортнойПроцедуры); + Возврат Ложь; + КонецЕсли; -// Проверяет, включена ли регистрация событий в журнале регистрации + ИмяОбъекта = ЧастиИмени[0]; + Если ЧастиИмени.Количество() = 2 И Метаданные.ОбщиеМодули.Найти(ИмяОбъекта) = Неопределено Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1)'"), + ИмяЭкспортнойПроцедуры); + Возврат Ложь; + КонецЕсли; + + Если ЧастиИмени.Количество() = 3 Тогда + ДопустимыеИменаТипов = Новый Массив; + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаКонстанты())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыСведений())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыНакопления())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыБухгалтерии())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыРасчета())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаСправочники())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаДокументы())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаБизнесПроцессы())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаЗадачи())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыСчетов())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыОбмена())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыВидовХарактеристик())); + ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыВидовРасчета())); + ИмяТипа = ВРег(ЧастиИмени[0]); + Если ДопустимыеИменаТипов.Найти(ИмяТипа) = Неопределено Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1)'"), + ИмяЭкспортнойПроцедуры); + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Функция ИнформационнаяБазаФайловая определяет режим эксплуатации +// информационной базы файловый (Истина) или Серверный (Ложь). +// При проверке используется СтрокаСоединенияИнформационнойБазы, которую +// можно указать явно. // +// Параметры: +// СтрокаСоединенияИнформационнойБазы - Строка - параметр используется, если +// нужно проверить строку соединения не текущей информационной базы. +// +// Возвращаемое значение: +// Булево. +// +Функция ИнформационнаяБазаФайловая(Знач СтрокаСоединенияИнформационнойБазы = "") Экспорт + + Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда + СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы(); + КонецЕсли; + Возврат Найти(Врег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1; + +КонецФункции + +// Переводит параметры сеанса в состояние "Не установлено". +// // Параметры: -// СписокПроверок - СписокЗначений, список строк-представлений режимов использования журнала регистрации, которые надо проверить на включение. -// Если Неопределено - тогда проверяются все режимы. +// ПараметрыДляОчистки - Строка - имена параметров сеанса для очистки, разделенные "," +// Исключения - Строка - имена параметров сеанса не предназначенные для очистки, разделенные "," // -// Возвращаемое значение: Истина, когда заданные режимы включены. Иначе - ложь. -Функция ПроверитьВключениеЖурналаРегистрации(СписокПроверок = Неопределено) Экспорт - МассивРежимов = ПолучитьИспользованиеЖурналаРегистрации(); - Если СписокПроверок = Неопределено Тогда - Возврат МассивРежимов.Количество() = 4 ; - Иначе - МассивНазванийРежимов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СписокПроверок); - Для Каждого Название Из МассивНазванийРежимов Цикл - ТекущийПроверяемыйРежим = УровеньСобытияПоПредставлению(Название); - Если МассивРежимов.Найти(ТекущийПроверяемыйРежим) = Неопределено Тогда - Возврат Ложь; +Процедура ОчиститьПараметрыСеанса(ПараметрыДляОчистки = "", Исключения = "") Экспорт + + МассивИсключений = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Исключения); + МассивПараметровДляОчистки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПараметрыДляОчистки); + + Если МассивПараметровДляОчистки.Количество() = 0 Тогда + Для Каждого ПараметрСеанса Из Метаданные.ПараметрыСеанса Цикл + Если МассивИсключений.Найти(ПараметрСеанса.Имя) = Неопределено Тогда + МассивПараметровДляОчистки.Добавить(ПараметрСеанса.Имя); КонецЕсли; КонецЦикла; КонецЕсли; - Возврат Истина; + ПараметрыСеанса.Очистить(МассивПараметровДляОчистки); + +КонецПроцедуры + +// Возвращает описание предмета в виде текстовой строки. +// +// Параметры +// СсылкаНаПредмет – ЛюбаяСсылка – объект ссылочного типа. +// +// Возвращаемое значение: +// Строка +// +Функция ПредметСтрокой(СсылкаНаПредмет) Экспорт + + Результат = ""; + СтандартныеПодсистемыПереопределяемый.УстановитьПредставлениеПредмета(СсылкаНаПредмет, Результат); + ОбщегоНазначенияПереопределяемый.УстановитьПредставлениеПредмета(СсылкаНаПредмет, Результат); + + Если ПустаяСтрока(Результат) Тогда + Если СсылкаНаПредмет = Неопределено или СсылкаНаПредмет.Пустая() Тогда + Результат = НСтр("ru = 'не задан'"); + ИначеЕсли Метаданные.Документы.Содержит(СсылкаНаПредмет.Метаданные()) Тогда + Результат = Строка(СсылкаНаПредмет); + Иначе + ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().ПредставлениеОбъекта; + Если ПустаяСтрока(ПредставлениеОбъекта) Тогда + ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().Представление(); + КонецЕсли; + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "%1 (%2)", Строка(СсылкаНаПредмет), ПредставлениеОбъекта); + КонецЕсли; + КонецЕсли; + + Возврат Результат; + КонецФункции -Функция УровеньСобытияПоПредставлению(ПредставлениеУровня) - Если ПредставлениеУровня = "Информация" Тогда - Возврат УровеньЖурналаРегистрации.Информация; - ИначеЕсли ПредставлениеУровня = "Ошибка" Тогда - Возврат УровеньЖурналаРегистрации.Ошибка; - ИначеЕсли ПредставлениеУровня = "Предупреждение" Тогда - Возврат УровеньЖурналаРегистрации.Предупреждение; - ИначеЕсли ПредставлениеУровня = "Примечание" Тогда - Возврат УровеньЖурналаРегистрации.Примечание; - КонецЕсли; +// Объединяет исключения поиска ссылок. +// +Функция ПолучитьОбщийСписокИсключенийПоискаСсылок() Экспорт + + ОбщийМассивИсключенийСсылок = Новый Массив; + + ЗаполнитьМассивУникальнымиЗначениями(ОбщийМассивИсключенийСсылок, СтандартныеПодсистемыПереопределяемый.ИсключенияПоискаСсылок()); + ЗаполнитьМассивУникальнымиЗначениями(ОбщийМассивИсключенийСсылок, ОбщегоНазначенияПереопределяемый.ПолучитьИсключенияПоискаСсылок()); + + Возврат ОбщийМассивИсключенийСсылок; + КонецФункции -Функция УровниСобытияЖурналаРегистрацииПоСтроке(СписокУровней) - МассивНазванийУровней = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СписокУровней); - МассивУровней = Новый Массив; - Для Каждого Название Из МассивНазванийУровней Цикл - МассивУровней.Добавить(УровеньСобытияПоПредставлению(Название)); +// Функция создает таблицу соответствия разделенных типов данных общим данным +// +// Возвращаемое значение: +// ТаблицаЗначений - соответствия типов данных +// +Функция ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим() Экспорт + + Результат = СтандартныеПодсистемыПереопределяемый.ТаблицаСоответствияРазделенныхДанныхОбщим(); + Если Результат = Неопределено Тогда + Возврат Новый ТаблицаЗначений; + Иначе + Возврат Результат; + КонецЕсли; + +КонецФункции + +// Возвращает значение в виде XML-строки. +// Преобразованы в XML-строку (сериализованы) могут быть только те объекты, +// для которых в описании указано, что они сериализуются. +// +// Параметры: +// Значение – Произвольный. Значение, которое необходимо сериализовать в XML-строку. +// +// Возвращаемое значение: +// XML-строка представления значения в сериализованном виде. +// +Функция ЗначениеВСтрокуXML(Значение) Экспорт + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(); + СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение, НазначениеТипаXML.Явное); + + Возврат ЗаписьXML.Закрыть(); +КонецФункции + +// Возвращает значение, полученное из XML-строки. +// Получены из XML-строки могут быть только те объекты, +// для которых в описании указано, что они сериализуются. +// +// Параметры: +// СтрокаXML – строка представления значения в сериализованном виде. +// +// Возвращаемое значение: +// Значение, полученное из переданной XML-строки. +// +Функция ЗначениеИзСтрокиXML(СтрокаXML) Экспорт + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(СтрокаXML); + + Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML); +КонецФункции + +// Формирует из исходной строки СтрокаПоиска строку для поиска данных в запросе +// +// Параметры: +// СтрокаПоиска - Строка - исходная строка, содержащая запрещенные символы +// +// Возвращаемое значение: +// Строка - строка подготовленная для поиска данных в запросе +// +Функция СформироватьСтрокуДляПоискаВЗапросе(Знач СтрокаПоиска) Экспорт + + ИтоговаяСтрокаДляПоиска = СтрокаПоиска; + ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "~", "~~"); + ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "%", "~%"); + ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "_", "~_"); + ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "[", "~["); + ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "-", "~-"); + + Возврат ИтоговаяСтрокаДляПоиска; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с формами + +// Процедура предназначена для заполнения реквизита формы типа «ДеревоЗначений» +// +// Параметры: +// КоллекцияЭлементовДерева – реквизит формы, который имеет тип «ДеревоЗначений»; +// реквизит заполняется значениями из второго параметра процедуры. +// ДеревоЗначений – ДеревоЗначений – параметр содержит данные для заполнения. +// +Процедура ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, ДеревоЗначений) Экспорт + + Для Каждого Строка Из ДеревоЗначений.Строки Цикл + + ЭлементДерева = КоллекцияЭлементовДерева.Добавить(); + + ЗаполнитьЗначенияСвойств(ЭлементДерева, Строка); + + Если Строка.Строки.Количество() > 0 Тогда + + ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(ЭлементДерева.ПолучитьЭлементы(), Строка); + + КонецЕсли; + КонецЦикла; - Возврат МассивУровней; + +КонецПроцедуры + +// Получает картинку для вывода на странице с комментарием в зависимости +// от наличия текста в комментарии. +// +// Параметры +// Комментарий - Строка - текст комментария +// +// Возвращаемое значение: +// Картинка - Картинка, которая должна отображаться на странице с комментарием. +// +Функция ПолучитьКартинкуКомментария(Комментарий) Экспорт + + Если НЕ ПустаяСтрока(Комментарий) Тогда + Картинка = БиблиотекаКартинок.Комментарий; + Иначе + Картинка = Новый Картинка; + КонецЕсли; + + Возврат Картинка; + КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -1080,15 +1495,70 @@ КонецФункции -Процедура НоваяСтрокаКоллекцииОбъектовМетаданных(Имя, Синоним, Картинка, КартинкаОбъекта, Таб) +// Возвращает подробную информацию о конфигурации (свойство метаданных +// конфигурации) +// +// Возвращаемое значение: +// Строка. +// Строка содержащая подробную информацию о конфигурации. +// +Функция ПолучитьПодробнуюИнформациюКонфигурации() Экспорт - НоваяСтрока = Таб.Добавить(); - НоваяСтрока.Имя = Имя; - НоваяСтрока.Синоним = Синоним; - НоваяСтрока.Картинка = Картинка; - НоваяСтрока.КартинкаОбъекта = КартинкаОбъекта; + Возврат Метаданные.ПодробнаяИнформация; -КонецПроцедуры +КонецФункции + +// Получить представление информационной базы для отображения пользователю. +// +// Возвращаемое значение: +// Строка - Представление информационной базы +// +// Пример возвращаемого результата: +// - для ИБ в файлом режиме: \\FileServer\1c_ib\ +// - для ИБ в серверном режиме: ServerName:1111 / information_base_name +// +Функция ПолучитьПредставлениеИнформационнойБазы() Экспорт + + СтрокаСоединенияСБД = СтрокаСоединенияИнформационнойБазы(); + + Если ИнформационнаяБазаФайловая(СтрокаСоединенияСБД) Тогда + ПутьКБД = Сред(СтрокаСоединенияСБД, 6, СтрДлина(СтрокаСоединенияСБД) - 6); + Иначе + // надо к имени сервера прибавить имя пути информационной базы + ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "SRVR="); + + Если ПозицияПоиска <> 1 Тогда + Возврат Неопределено; + КонецЕсли; + + ПозицияТочкиСЗапятой = Найти(СтрокаСоединенияСБД, ";"); + НачальнаяПозицияКопирования = 6 + 1; + КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2; + + ИмяСервера = Сред(СтрокаСоединенияСБД, НачальнаяПозицияКопирования, КонечнаяПозицияКопирования - НачальнаяПозицияКопирования + 1); + + СтрокаСоединенияСБД = Сред(СтрокаСоединенияСБД, ПозицияТочкиСЗапятой + 1); + + // позиция имени сервера + ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "REF="); + + Если ПозицияПоиска <> 1 Тогда + Возврат Неопределено; + КонецЕсли; + + НачальнаяПозицияКопирования = 6; + ПозицияТочкиСЗапятой = Найти(СтрокаСоединенияСБД, ";"); + КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2; + + ИмяИБНаСервере = Сред(СтрокаСоединенияСБД, НачальнаяПозицияКопирования, КонечнаяПозицияКопирования - НачальнаяПозицияКопирования + 1); + + ПутьКБД = ИмяСервера + "/ " + ИмяИБНаСервере; + + КонецЕсли; + + Возврат ПутьКБД; + +КонецФункции // Возвращает строку реквизитов объекта метаданных с заданным типом // @@ -1113,22 +1583,6 @@ Возврат Результат; КонецФункции -// Получает имя значения перечисления как объекта метаданных -// -// Параметры: -// Значение - значение перечисления для которого необходимо получить имя перечисления -// -// Возвращаемое значение: -// Строка - имя значения перечисления как объекта метаданных -// -Функция ИмяЗначенияПеречисления(Значение) Экспорт - - ОбъектМетаданных = Значение.Метаданные(); - ИндексЗначения = Перечисления[ОбъектМетаданных.Имя].Индекс(Значение); - Возврат ОбъектМетаданных.ЗначенияПеречисления[ИндексЗначения].Имя; - -КонецФункции - // Возвращает имя базового типа по переданному значению объекта метаданных // // Параметры: @@ -1323,13 +1777,13 @@ Функция СсылкаСуществует(ЛюбаяСсылка) Экспорт ТекстЗапроса = " - |ВЫБРАТЬ - | Ссылка - |ИЗ - | [ИмяТаблицы] - |ГДЕ - | Ссылка = &Ссылка - |"; + |ВЫБРАТЬ + | Ссылка + |ИЗ + | [ИмяТаблицы] + |ГДЕ + | Ссылка = &Ссылка + |"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяТаблицы]", ИмяТаблицыПоСсылке(ЛюбаяСсылка)); @@ -1420,61 +1874,7 @@ // Функция ИмяТаблицыПоСсылке(Ссылка) Экспорт - Возврат Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).ПолноеИмя(); - -КонецФункции - -// Возвращает строковое представление типа. -// Для ссылочных типов возвращает в формате "СправочникСсылка.ИмяОбъекта" или "ДокументСсылка.ИмяОбъекта" -// Для остальных типов приводит тип к строке, например "Число". -// -Функция СтроковоеПредставлениеТипа(Тип) Экспорт - - Представление = ""; - - Если ЭтоСсылка(Тип) Тогда - - ПолноеИмя = Метаданные.НайтиПоТипу(Тип).ПолноеИмя(); - ИмяОбъекта = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмя, ".")[1]; - - Если Справочники.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "СправочникСсылка"; - - ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ДокументСсылка"; - - ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "БизнесПроцессСсылка"; - - ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ПланВидовХарактеристикСсылка"; - - ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ПланСчетовСсылка"; - - ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ПланВидовРасчетаСсылка"; - - ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ЗадачаСсылка"; - - ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ПланОбменаСсылка"; - - ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(Тип) Тогда - Представление = "ПеречислениеСсылка"; - - КонецЕсли; - - Результат = ?(Представление = "", Представление, Представление + "." + ИмяОбъекта); - - Иначе - - Результат = Строка(Тип); - - КонецЕсли; - - Возврат Результат; + Возврат Ссылка.Метаданные().ПолноеИмя(); КонецФункции @@ -1579,6 +1979,413 @@ КонецФункции +// Возвращает ссылку, соответствующую объекту метаданных, для +// использования в базе данных. +// Например: +// Идентификатор = ОбщегоНазначения.ИнденификаторОбъектаМетаданных(ТипЗнч(Ссылка)); +// Идентификатор = ОбщегоНазначения.ИнденификаторОбъектаМетаданных(ОбъектМетаданных); +// Идентификатор = ОбщегоНазначения.ИнденификаторОбъектаМетаданных("Справочник.Организации"); +// +// Поддерживаемые объекты метаданных: +// - Подсистемы (вручную через предопределенные элементы) +// - Роли +// - ПланыОбмена +// - Справочники +// - Документы +// - ЖурналыДокументов +// - Отчеты +// - Обработки +// - ПланыВидовХарактеристик +// - ПланыСчетов +// - ПланыВидовРасчета +// - РегистрыСведений +// - РегистрыНакопления +// - РегистрыБухгалтерии +// - РегистрыРасчета +// - БизнесПроцессы +// - Задачи +// +// Подробнее см. в функции СвойстваКоллекцийОбъектовМетаданных() +// модуля менеджера справочника ИдентификаторыОбъектовМетаданных. +// +// Параметры: +// ОписаниеОбъектаМетаданных - ОбъектМетаданных +// - Тип, который можно успешно использовать +// в функции Метаданные.НайтиПоТипу() +// - Строка - полное имя объекта метаданных, +// которое можно успешно использовать +// в функции Метаданные.НайтиПоПолномуИмени() +// Возвращаемое значение: +// СправочникСсылка.ИдентификаторыОбъектовМетаданных +// +Функция ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ТипОписанияОбъектаМетаданных = ТипЗнч(ОписаниеОбъектаМетаданных); + Если ТипОписанияОбъектаМетаданных = Тип("Тип") Тогда + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ОписаниеОбъектаМетаданных); + Если ОбъектМетаданных = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). + | + |Объект метаданных не найден по типу: + |""%1"".'"), + ОписаниеОбъектаМетаданных); + Иначе + Таблица = ОбъектМетаданных.ПолноеИмя(); + КонецЕсли; + + ИначеЕсли ТипОписанияОбъектаМетаданных = Тип("Строка") Тогда + Таблица = ОписаниеОбъектаМетаданных; + Иначе + Таблица = ОписаниеОбъектаМетаданных.ПолноеИмя(); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПолноеИмя", Таблица); + Запрос.Текст = + "ВЫБРАТЬ + | Идентификаторы.Ссылка, + | Идентификаторы.КлючОбъектаМетаданных, + | Идентификаторы.ПолноеИмя + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы + |ГДЕ + | Идентификаторы.ПолноеИмя = &ПолноеИмя + | И Идентификаторы.Используется"; + + Выгрузка = Запрос.Выполнить().Выгрузить(); + Если Выгрузка.Количество() = 0 Тогда + // Если идентификатор не найден по полному имени, возможно что полное имя задано с ошибкой + Если ТипОписанияОбъектаМетаданных = Тип("Строка") + И Метаданные.НайтиПоПолномуИмени(ОписаниеОбъектаМетаданных) = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). + | + |Объект метаданнных не найден по полному имени: + |""%1"".'"), + ОписаниеОбъектаМетаданных); + КонецЕсли; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). + | + |Для объекта метаданных ""%1"" + |не найден идентификатор + |в справочнике ""Идентификаторы объектов метаданных"". + | + |Если справочник не был обновлен при обновлении информационной базы, + |следует выполнить обновление вручную: + |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> + |команда формы списка ""Обновить данные справочника"". + | + |Некоторые объекты метаданных могут быть добавлены в справочник только в виде + |предопределенных элементов, например, подсистемы.'"), + Таблица); + ИначеЕсли Выгрузка.Количество() > 1 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). + | + |Для объекта метаданных ""%1"" + |найдено несколько идентификаторов + |в справочнике ""Идентификаторы объектов метаданных"". + | + |Данные справочника некорректны. Если справочник не был обновлен + |при обновлении информационной базы, следует выполнить обновление вручную: + |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> + |команда формы списка ""Обновить данные справочника"".'"), + Таблица); + КонецЕсли; + + // Проверка соответствия ключа объекта метаданных полному имени объекта метаданных + РезультатПроверки = Справочники.ИдентификаторыОбъектовМетаданных.КлючОбъектаМетаданныхСоответствуетПолномуИмени(Выгрузка[0]); + Если РезультатПроверки.НеСоответствует Тогда + Если РезультатПроверки.ОбъектМетаданных = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). + | + |Для объекта метаданных ""%1"" + |найден идентификатор в справочнике ""Идентификаторы объектов метаданных"", + |которому соответствует удаленный объект метаданных. + | + |Данные справочника некорректны. Если справочник не был обновлен + |при обновлении информационной базы, следует выполнить обновление вручную: + |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> + |команда формы списка ""Обновить данные справочника"".'"), + Таблица); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). + | + |Для объекта метаданных ""%1"" + |найден идентификатор в справочнике ""Идентификаторы объектов метаданных"", + |который соответствует другому объекту метаданных ""%2"". + | + |Данные справочника некорректны. Если справочник не был обновлен + |при обновлении информационной базы, следует выполнить обновление вручную: + |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> + |команда формы списка ""Обновить данные справочника"".'"), + Таблица, + РезультатПроверки.ОбъектМетаданных); + КонецЕсли; + КонецЕсли; + + Возврат Выгрузка[0].Ссылка; + +КонецФункции + +// Возвращает объект метаданных, по переданному идентификатору +// +// Параметры: +// Идентификатор - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// +// Возвращаемое значение: +// ОбъектМетаданных +// +Функция ОбъектМетаданныхПоИдентификатору(Идентификатор) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Идентификатор); + Запрос.Текст = + "ВЫБРАТЬ + | Идентификаторы.Ссылка, + | Идентификаторы.КлючОбъектаМетаданных, + | Идентификаторы.ПолноеИмя, + | Идентификаторы.Используется + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы + |ГДЕ + | Идентификаторы.Ссылка = &Ссылка"; + + Выгрузка = Запрос.Выполнить().Выгрузить(); + + Если Выгрузка.Количество() = 0 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(). + | + |Идентификатор ""%1"" + |не найден в справочнике ""Идентификаторы объектов метаданных"". + | + |Если справочник не был обновлен при обновлении информационной базы, + |следует выполнить обновление вручную: + |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> + |команда формы списка ""Обновить данные справочника"". + | + |Некоторые объекты метаданных могут быть добавлены в справочник только в виде + |предопределенных элементов, например, подсистемы.'"), + Строка(Идентификатор)); + КонецЕсли; + + // Проверка соответствия ключа объекта метаданных полному имени объекта метаданных + РезультатПроверки = Справочники.ИдентификаторыОбъектовМетаданных.КлючОбъектаМетаданныхСоответствуетПолномуИмени(Выгрузка[0]); + Если РезультатПроверки.НеСоответствует Тогда + Если РезультатПроверки.ОбъектМетаданных = Неопределено Тогда + Если РезультатПроверки.КлючОбъектаМетаданных = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(). + | + |Идентификатору ""%1"" + |найденому в справочнике ""Идентификаторы объектов метаданных"", + |соответствует несуществующий объект метаданных + |""%2"". + | + |Если справочник не был обновлен при обновлении информационной базы, + |следует выполнить обновление вручную: + |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> + |команда формы списка ""Обновить данные справочника"".'"), + Строка(Идентификатор), + Выгрузка[0].ПолноеИмя); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(). + | + |Идентификатору ""%1"" + |найденому в справочнике ""Идентификаторы объектов метаданных"", + |соответствует удаленный объект метаданных. + | + |Данные справочника некорректны. Если справочник не был обновлен + |при обновлении информационной базы, следует выполнить обновление вручную: + |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> + |команда формы списка ""Обновить данные справочника"".'"), + Строка(Идентификатор)); + КонецЕсли; + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). + | + |Идентификатору ""%1"" + |найденому в справочнике ""Идентификаторы объектов метаданных"", + |соответствует объект метаданных ""%2"", + |полное имя которого отличается от заданного в идентификаторе. + | + |Если справочник не был обновлен при обновлении информационной базы, + |следует выполнить обновление вручную: + |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> + |команда формы списка ""Обновить данные справочника"".'"), + Строка(Идентификатор), + РезультатПроверки.ОбъектМетаданных.ПолноеИмя()); + КонецЕсли; + КонецЕсли; + + Если НЕ Выгрузка[0].Используется Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(). + | + |Идентификатор ""%1"" + |найден в справочнике ""Идентификаторы объектов метаданных"", + |но значение реквизита ""Используется"" установлено Ложь. + | + |Если справочник не был обновлен при обновлении информационной базы, + |следует выполнить обновление вручную: + |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> + |команда формы списка ""Обновить данные справочника"".'"), + Строка(Идентификатор)); + КонецЕсли; + + Возврат РезультатПроверки.ОбъектМетаданных; + +КонецФункции + +// Только для использования в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- +// ПредустановленныеИдентификаторыОбъектовМетаданных() для описания предустановленых идентификаторов +// +// Параметры: +// Идентификаторы - передается в процедуру подсистемой БазоваяФункциональность +// ИдентификаторВСтроке - Строка - уникальный идентификатор, назначаемый объекту метаданных +// ОбъектМетаданных - ОбъектМетаданных, для которого предустанавливается идентификатор +// +Процедура ДобавитьИдентификатор(Идентификаторы, ИдентификаторВСтроке, ОбъектМетаданных) Экспорт + + Попытка + Идентификатор = Справочники.ИдентификаторыОбъектовМетаданных.ПолучитьСсылку(Новый УникальныйИдентификатор(ИдентификаторВСтроке)); + Исключение + Идентификатор = Неопределено; + КонецПопытки; + + Если ТипЗнч(ОбъектМетаданных) <> Тип("ОбъектМетаданных") Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- + |ПредустановленныеИдентификаторыОбъектовМетаданных() + | + |Для идентификатора ""%1"" не заполнен объект метаданных.'"), + ИдентификаторВСтроке); + КонецЕсли; + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + + Если НЕ ЗначениеЗаполнено(Идентификатор) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- + |ПредустановленныеИдентификаторыОбъектовМетаданных() + | + |Ошбика в строке идентификатора ""%1"", + |заданного для объекта метаданных + |""%2"".'"), + ИдентификаторВСтроке, + ПолноеИмя); + КонецЕсли; + + Если Идентификаторы.Найти(ПолноеИмя, "ПолноеИмя") <> Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- + |ПредустановленныеИдентификаторыОбъектовМетаданных() + | + |Для объекта метаданных ""%1"" + |идентификатор уже задан.'"), + ПолноеИмя); + КонецЕсли; + + Если Идентификаторы.Найти(Идентификатор, "Идентификатор") <> Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- + |ПредустановленныеИдентификаторыОбъектовМетаданных() + | + |Идентификатор ""%1"" уже задан + |для объекта метаданных ""%2"".'"), + ИдентификаторВСтроке, + ПолноеИмя); + КонецЕсли; + + ОписаниеИдентификатора = Идентификаторы.Добавить(); + ОписаниеИдентификатора.ПолноеИмя = ПолноеИмя; + ОписаниеИдентификатора.Идентификатор = Идентификатор; + +КонецПроцедуры + +// Возвращает строковое представление типа. +// Для ссылочных типов возвращает в формате "СправочникСсылка.ИмяОбъекта" или "ДокументСсылка.ИмяОбъекта" +// Для остальных типов приводит тип к строке, например "Число". +// +Функция СтроковоеПредставлениеТипа(Тип) Экспорт + + Представление = ""; + + Если ЭтоСсылка(Тип) Тогда + + ПолноеИмя = Метаданные.НайтиПоТипу(Тип).ПолноеИмя(); + ИмяОбъекта = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмя, ".")[1]; + + Если Справочники.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "СправочникСсылка"; + + ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "ДокументСсылка"; + + ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "БизнесПроцессСсылка"; + + ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "ПланВидовХарактеристикСсылка"; + + ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "ПланСчетовСсылка"; + + ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "ПланВидовРасчетаСсылка"; + + ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "ЗадачаСсылка"; + + ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "ПланОбменаСсылка"; + + ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(Тип) Тогда + Представление = "ПеречислениеСсылка"; + + КонецЕсли; + + Результат = ?(Представление = "", Представление, Представление + "." + ИмяОбъекта); + + Иначе + + Результат = Строка(Тип); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Проверить, что описание типа состоит из единственного типа значения и +// совпадает с нужным типом. +// +// Возвращаемое значение: +// Булево - Совпадает или нет +// +Функция ОписаниеТипаСостоитИзТипа(ОписаниеТипа, ТипЗначения) Экспорт + + Если ОписаниеТипа.Типы().Количество() = 1 + И ОписаниеТипа.Типы().Получить(0) = ТипЗначения Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + // Проверяет наличие табличной части у справочника // //Параметры @@ -1593,45 +2400,12 @@ // Возврат; // КонецЕсли; // -Функция НаличиеТабличнойЧастиУСправочника(ИмяСправочника,ИмяТабличнойЧасти) Экспорт +Функция НаличиеТабличнойЧастиУСправочника(ИмяСправочника, ИмяТабличнойЧасти) Экспорт Возврат (Метаданные.Справочники[ИмяСправочника].ТабличныеЧасти.Найти(ИмяТабличнойЧасти) <> Неопределено); КонецФункции -// Возвращает описание предмета в виде текстовой строки. -// -// Параметры -// СсылкаНаПредмет – ЛюбаяСсылка – объект ссылочного типа. -// -// Возвращаемое значение: -// Строка -// -Функция ПредметСтрокой(СсылкаНаПредмет) Экспорт - - Результат = ""; - СтандартныеПодсистемыПереопределяемый.УстановитьПредставлениеПредмета(СсылкаНаПредмет, Результат); - ОбщегоНазначенияПереопределяемый.УстановитьПредставлениеПредмета(СсылкаНаПредмет, Результат); - - Если ПустаяСтрока(Результат) Тогда - Если СсылкаНаПредмет = Неопределено или СсылкаНаПредмет.Пустая() Тогда - Результат = НСтр("ru = 'не задан'"); - ИначеЕсли Метаданные.Документы.Содержит(СсылкаНаПредмет.Метаданные()) Тогда - Результат = Строка(СсылкаНаПредмет); - Иначе - ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().ПредставлениеОбъекта; - Если ПустаяСтрока(ПредставлениеОбъекта) Тогда - ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().Представление(); - КонецЕсли; - Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "%1 (%2)", Строка(СсылкаНаПредмет), ПредставлениеОбъекта); - КонецЕсли; - КонецЕсли; - - Возврат Результат; - -КонецФункции - // Формирует расширенное представление объекта. // Расширенное представление объекта складывается из представления объекта, кода и наименования. // Если для объекта не удалось получить расширенное представление, @@ -1696,6 +2470,119 @@ Возврат Результат; КонецФункции +// Возвращает признак того, что реквизит входит в подмножество стандартных реквизитов +// +// Параметры: +// СтандартныеРеквизиты – ОписанияСтандартныхРеквизитов - тип и значение описывает коллекцию настроек различных стандартных реквизитов; +// ИмяРеквизита – Строка – реквизит который необходимо проверить на принадлежность множеству стандартных реквизитов; +// +// Возвращаемое значение: +// Тип: Булево. Истина - реквизит входит в подмножество стандартных реквизитов; Ложь – нет. +// +Функция ЭтоСтандартныйРеквизит(СтандартныеРеквизиты, ИмяРеквизита) Экспорт + + Для Каждого Реквизит ИЗ СтандартныеРеквизиты Цикл + + Если Реквизит.Имя = ИмяРеквизита Тогда + + Возврат Истина; + + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Получает таблицу значений с описанием требуемых свойств всех реквизитов объекта метаданного +// Получает значения свойств стандартных реквизитов и пользовательских реквизитов (созданных в режиме конфигуратора) +// +// Параметры: +// ОбъектМетаданных - Объект метаданных конфигурации, для которого необходимо получить значение свойств реквизитов. +// Например: Метаданные.Документ.РеализацияТоваровИУслуг +// Свойства - Строка - свойства реквизитов, перечисленных через запятую, значение которых необходимо получить. +// Например: "Имя, Тип, Синоним, Подсказка" +// +// Возвращаемое значение: +// ТаблицаЗначений - таблица значений с описанием требуемых свойств всех реквизитов объекта метаданного +// +Функция ПолучитьТаблицуОписанияСвойствОбъекта(ОбъектМетаданных, Свойства) Экспорт + + МассивСвойств = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Свойства); + + // возвращаемое значение функции + ТаблицаОписанияСвойствОбъекта = Новый ТаблицаЗначений; + + // добавляем в таблицу поля согласно именам переданных свойств + Для Каждого ИмяСвойства ИЗ МассивСвойств Цикл + + ТаблицаОписанияСвойствОбъекта.Колонки.Добавить(СокрЛП(ИмяСвойства)); + + КонецЦикла; + + // заполняем строку таблицы свойствами реквизитов объекта метаданных + Для Каждого Реквизит ИЗ ОбъектМетаданных.Реквизиты Цикл + + ЗаполнитьЗначенияСвойств(ТаблицаОписанияСвойствОбъекта.Добавить(), Реквизит); + + КонецЦикла; + + // заполняем строку таблицы свойствами стандартных реквизитов объекта метаданных + Для Каждого Реквизит ИЗ ОбъектМетаданных.СтандартныеРеквизиты Цикл + + ЗаполнитьЗначенияСвойств(ТаблицаОписанияСвойствОбъекта.Добавить(), Реквизит); + + КонецЦикла; + + Возврат ТаблицаОписанияСвойствОбъекта; + +КонецФункции + +// Возвращает состояние использования элемента состава общего реквизита +// +// Параметры: +// ЭлементСостава - ОбъектМетаданных - элемент состава общего реквизита использование +// которого требуется проверить +// МетаданныеОбщегоРеквизита - ОбъектМетаданных - метаданные общего реквизита, +// которому принадлежит ЭлементСостава +// +// Возвращаемое значение: +// Булево - Истина, если элемент состава используется, иначе Ложь +// +Функция ЭлементСоставаОбщегоРеквизитаИспользуется(Знач ЭлементСостава, Знач МетаданныеОбщегоРеквизита) Экспорт + + Если ЭлементСостава.Использование = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.Использовать Тогда + Возврат Истина; + ИначеЕсли ЭлементСостава.Использование = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.НеИспользовать Тогда + Возврат Ложь; + Иначе + Возврат МетаданныеОбщегоРеквизита.АвтоИспользование = Метаданные.СвойстваОбъектов.АвтоИспользованиеОбщегоРеквизита.Использовать; + КонецЕсли; + +КонецФункции + +// Возвращает признак того, что объект метаданных используется в общих реквизитах-разделителях. +// +// Параметры: +// ОбъектМетаданных - Строка; ОбъектМетаданных - Если объект метаданных задан строкой, происходит обращение к модулю повторного использования. +// +// Возвращаемое значение: +// Булево - Истина, если объект метаданных используется хотя бы в одном общем разделителе. +// +Функция ЭтоРазделенныйОбъектМетаданных(Знач ОбъектМетаданных) Экспорт + + Если ТипЗнч(ОбъектМетаданных) = Тип("Строка") Тогда + ПолноеИмяОбъектаМетаданных = ОбъектМетаданных; + Иначе + ПолноеИмяОбъектаМетаданных = ОбъектМетаданных.ПолноеИмя(); + КонецЕсли; + + РазделенныеОбъектыМетаданных = ОбщегоНазначенияПовтИсп.РазделенныеОбъектыМетаданных(); + Возврат РазделенныеОбъектыМетаданных.Получить(ПолноеИмяОбъектаМетаданных) <> Неопределено; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Функции определения типов объектов метаданных @@ -2034,6 +2921,26 @@ КонецФункции +// Функция-свойство: возвращает значение для идентификации общего типа "Отчеты" +// +// Тип: Строка +// +Функция ИмяТипаОтчеты() Экспорт + + Возврат "Отчеты"; + +КонецФункции + +// Функция-свойство: возвращает значение для идентификации общего типа "Обработки" +// +// Тип: Строка +// +Функция ИмяТипаОбработки() Экспорт + + Возврат "Обработки"; + +КонецФункции + // Возвращает значение для идентификации общего типа "ПланыОбмена" // // Тип: Строка @@ -2115,7 +3022,66 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Сохранение и чтение настроек +// Сохранение, чтение и удаление настроек из хранилищ + +// Сохраняет настройку в хранилище общих настроек. +// +// Параметры: +// Соответствуют методу ХранилищеОбщихНастроекСохранить.Сохранить, +// подробнее - см. параметры процедуры ХранилищеСохранить() +// +Процедура ХранилищеОбщихНастроекСохранить(КлючОбъекта, КлючНастроек = "", Значение, + ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено, + НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт + + ХранилищеСохранить( + ХранилищеОбщихНастроек, + КлючОбъекта, + КлючНастроек, + Значение, + ОписаниеНастроек, + ИмяПользователя, + НужноОбновитьПовторноИспользуемыеЗначения + ); + +КонецПроцедуры + +// Загружает настройку из хранилища общих настроек. +// +// Параметры: +// Соответствуют методу ХранилищеОбщихНастроек.Загрузить, +// подробнее - см. параметры функции ХранилищеЗагрузить() +// +Функция ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек = "", ЗначениеПоУмолчанию = Неопределено, + ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт + + Возврат ХранилищеЗагрузить( + ХранилищеОбщихНастроек, + КлючОбъекта, + КлючНастроек, + ЗначениеПоУмолчанию, + ОписаниеНастроек, + ИмяПользователя + ); + +КонецФункции + +// Удаляет настройку из хранилища общих настроек. +// +// Параметры: +// Соответствуют методу ХранилищеОбщихНастроек.Удалить, +// подробнее - см. параметры функции ХранилищеУдалить() +// +Процедура ХранилищеОбщихНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт + + ХранилищеУдалить( + ХранилищеОбщихНастроек, + КлючОбъекта, + КлючНастроек, + ИмяПользователя + ); + +КонецПроцедуры // Сохраняет массив пользовательских настроек МассивСтруктур. // Может применяться для случаев вызова с клиента. @@ -2124,7 +3090,7 @@ // МассивСтруктур - Массив - массив структур с полями "Объект", "Настройка", "Значение". // НужноОбновитьПовторноИспользуемыеЗначения - Булево - требуется обновить повторно используемые значения // -Процедура ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур, +Процедура ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур, НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт Если Не ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда @@ -2141,9 +3107,8 @@ КонецПроцедуры -// Сохраняет массив пользовательских настроек МассивСтруктур и -// обновляет повторно используемые значения. -// Может применяться для случаев вызова с клиента. +// Сохраняет массив пользовательских настроек МассивСтруктур и обновляет повторно +// используемые значения. Может применяться для случаев вызова с клиента. // // Параметры: // МассивСтруктур - Массив - массив структур с полями "Объект", "Настройка", "Значение". @@ -2154,31 +3119,12 @@ КонецПроцедуры -// Сохраняет пользовательскую настройку по имени. +// Сохраняет настройку в хранилище общих настроек и обновляет повторно используемые +// значения. // // Параметры: -// соответствуют методу ХранилищеОбщихНастроек.Сохранить -// -Процедура ХранилищеОбщихНастроекСохранить(КлючОбъекта, КлючНастроек = Неопределено, Значение, - ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено, - НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт - - Если НЕ ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда - Возврат; - КонецЕсли; - - ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Значение, ОписаниеНастроек, ИмяПользователя); - Если НужноОбновитьПовторноИспользуемыеЗначения Тогда - ОбновитьПовторноИспользуемыеЗначения(); - КонецЕсли; - -КонецПроцедуры - -// Сохраняет пользовательскую настройку по имени и -// обновляет повторно используемые значения. -// -// Параметры: -// соответствуют методу ХранилищеОбщихНастроек.Сохранить +// Соответствуют методу ХранилищеОбщихНастроекСохранить.Сохранить, +// подробнее - см. параметры процедуры ХранилищеСохранить() // Процедура ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения(КлючОбъекта, КлючНастроек, Значение) Экспорт @@ -2186,33 +3132,72 @@ КонецПроцедуры -// Возвращает значение пользовательской настройки по имени. +// Сохраняет настройку в хранилище системных настроек. +// +// Параметры: +// Соответствуют методу ХранилищеСистемныхНастроек.Сохранить, +// подробнее - см. параметры процедуры ХранилищеСохранить() +// +Процедура ХранилищеСистемныхНастроекСохранить(КлючОбъекта, КлючНастроек = "", Значение, + ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено, + НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт + + ХранилищеСохранить( + ХранилищеСистемныхНастроек, + КлючОбъекта, + КлючНастроек, + Значение, + ОписаниеНастроек, + ИмяПользователя, + НужноОбновитьПовторноИспользуемыеЗначения + ); + +КонецПроцедуры + +// Загружает настройку из хранилища системных настроек. // // Параметры: -// соответствуют методу ХранилищеОбщихНастроек.Загрузить +// Соответствуют методу ХранилищеСистемныхНастроек.Загрузить, +// подробнее - см. параметры функции ХранилищеЗагрузить() // -Функция ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек = Неопределено, ЗначениеПоУмолчанию = Неопределено, - ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт +Функция ХранилищеСистемныхНастроекЗагрузить(КлючОбъекта, КлючНастроек = "", ЗначениеПоУмолчанию = Неопределено, + ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт - Результат = Неопределено; - Если ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда - Результат = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователя); - КонецЕсли; - - Если (Результат = Неопределено) И (ЗначениеПоУмолчанию <> Неопределено) Тогда - Результат = ЗначениеПоУмолчанию; - КонецЕсли; - - Возврат Результат; + Возврат ХранилищеЗагрузить( + ХранилищеСистемныхНастроек, + КлючОбъекта, + КлючНастроек, + ЗначениеПоУмолчанию, + ОписаниеНастроек, + ИмяПользователя + ); КонецФункции -// Сохраняет пользовательскую настройку по имени. +// Удаляет настройку из хранилища системных настроек. +// +// Параметры: +// Соответствуют методу ХранилищеСистемныхНастроек.Удалить, +// подробнее - см. параметры функции ХранилищеУдалить() +// +Процедура ХранилищеСистемныхНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт + + ХранилищеУдалить( + ХранилищеСистемныхНастроек, + КлючОбъекта, + КлючНастроек, + ИмяПользователя + ); + +КонецПроцедуры + +// Сохраняет настройку в хранилище настроек данных форм. // // Параметры: -// соответствуют методу ХранилищеНастроекДанныхФорм.Сохранить +// Соответствуют методу ХранилищеСистемныхНастроек.Сохранить, +// подробнее - см. параметры процедуры ХранилищеСохранить() // -Процедура ХранилищеНастроекДанныхФормСохранить(КлючОбъекта, КлючНастроек = Неопределено, Значение, +Процедура ХранилищеНастроекДанныхФормСохранить(КлючОбъекта, КлючНастроек = "", Значение, ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено, НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт @@ -2228,26 +3213,55 @@ КонецПроцедуры -// Возвращает значение пользовательской настройки по имени. +// Загружает настройку из хранилища настроек данных форм. // // Параметры: -// соответствуют методу ХранилищеНастроекДанныхФорм.Загрузить +// Соответствуют методу ХранилищеСистемныхНастроек.Загрузить, +// подробнее - см. параметры функции ХранилищеЗагрузить() // -Функция ХранилищеНастроекДанныхФормЗагрузить(КлючОбъекта, КлючНастроек = Неопределено, ЗначениеПоУмолчанию = Неопределено, - ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт +Функция ХранилищеНастроекДанныхФормЗагрузить(КлючОбъекта, КлючНастроек = "", ЗначениеПоУмолчанию = Неопределено, + ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт Возврат ХранилищеЗагрузить( ХранилищеНастроекДанныхФорм, КлючОбъекта, - КлючНастроек = Неопределено, - ЗначениеПоУмолчанию = Неопределено, - ОписаниеНастроек = Неопределено, - ИмяПользователя = Неопределено + КлючНастроек, + ЗначениеПоУмолчанию, + ОписаниеНастроек, + ИмяПользователя ); КонецФункции -// Сохраняет пользовательскую настройку по имени. +// Удаляет настройку из хранилища настроек данных форм. +// +// Параметры: +// Соответствуют методу ХранилищеНастроекДанныхФорм.Удалить, +// подробнее - см. параметры функции ХранилищеУдалить() +// +Процедура ХранилищеНастроекДанныхФормУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт + + ХранилищеУдалить( + ХранилищеНастроекДанныхФорм, + КлючОбъекта, + КлючНастроек, + ИмяПользователя + ); + +КонецПроцедуры + +// Сохраняет настройку в хранилище настроек через его менеджер. +// +// Параметры: +// МенеджерХранилища (СтандартноеХранилищеНастроекМенеджер) Хранилище, в котором сохраняется настройка +// КлючОбъекта (Строка) Ключ объекта настройки. +// Подробнее см. раздел справки "Настройки, автоматически сохраняемые в системном хранилище". +// КлючНастроек (Строка) Ключ сохраняемых настроек. +// Значение (*) Содержит настройки, которые нужно сохранить в хранилище. +// ОписаниеНастроек (ОписаниеНастроек) Содержит информацию об описании настройки. +// ИмяПользователя (Строка) Имя пользователя, настройки которого сохраняются. +// Если не указано, то сохраняются настройки текущего пользователя. +// НужноОбновитьПовторноИспользуемыеЗначения (Булево) // Процедура ХранилищеСохранить(МенеджерХранилища, КлючОбъекта, КлючНастроек, Значение, ОписаниеНастроек, ИмяПользователя, НужноОбновитьПовторноИспользуемыеЗначения) @@ -2264,12 +3278,26 @@ КонецПроцедуры -// Возвращает значение пользовательской настройки по имени. +// Загружает настройку из хранилища настроек через его менеджер. // -Функция ХранилищеЗагрузить(МенеджерХранилища, КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию, +// Параметры: +// МенеджерХранилища (СтандартноеХранилищеНастроекМенеджер) Хранилище, из которого загружается настройка +// КлючОбъекта (Строка) Ключ объекта настройки. +// Подробнее см. раздел справки "Настройки, автоматически сохраняемые в системном хранилище". +// КлючНастроек (Строка) Ключ сохраняемых настроек. +// ЗначениеПоУмолчанию (*) Значение, которое необходимо подставить если настройки не были загружены. +// ОписаниеНастроек (ОписаниеНастроек) Через данный параметр при загрузке можно получить описание настроек. +// ИмяПользователя (Строка) Имя пользователя, настройки которого загружается. +// Если не указано, то загружается настройки текущего пользователя. +// +// Возвращаемое значение: +// (*) Настройки, загруженные из хранилища. Неопределено, если настройки не найдены. +// +Функция ХранилищеЗагрузить(МенеджерХранилища, КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию, ОписаниеНастроек, ИмяПользователя) Результат = Неопределено; + Если ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда Результат = МенеджерХранилища.Загрузить(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователя); КонецЕсли; @@ -2282,266 +3310,561 @@ КонецФункции +// Удаляет настройку из хранилища настроек через его менеджер. +// +// Параметры: +// МенеджерХранилища (СтандартноеХранилищеНастроекМенеджер) Хранилище, из которого удаляется настройка +// КлючОбъекта (Строка) Ключ объекта настройки. +// (Неопределено) Удаляются настройки для всех объектов. +// КлючНастроек (Строка) Ключ сохраняемых настроек. +// (Неопределено) Удаляются настройки со всеми ключами. +// ИмяПользователя (Строка) Имя пользователя, настройки которого загружается. +// (Неопределено) Удаляются настройки всех пользователей. +// +// Возвращаемое значение: +// (*) Настройки, загруженные из хранилища. Неопределено, если настройки не найдены. +// +Процедура ХранилищеУдалить(МенеджерХранилища, КлючОбъекта, КлючНастроек, ИмяПользователя) + + Если ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда + МенеджерХранилища.Удалить(КлючОбъекта, КлючНастроек, ИмяПользователя); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// Общие процедуры и функции +// Функции для работы с табличными документами -// Функция возвращает ссылку на текущего пользователя базы данных, -// установленного по учетной записи пользователя конфигурации. -// -// Возвращаемое значение: -// СправочникСсылка.Пользователи -// -Функция ТекущийПользователь() Экспорт - - Возврат Пользователи.ТекущийПользователь(); - -КонецФункции - -// Выполнить экспортную процедуру без параметров по имени. +// Проверяет, умещаются ли переданные табличные документы на страницу при печати. // // Параметры -// ИмяЭкспортнойПроцедуры – Строка – имя экспортной процедуры в формате -// <имя объекта>.<имя процедуры>, где <имя объекта> - это -// общий модуль или модуль менеджера объекта. -// -// Пример -// ВыполнитьБезопасно("МойОбщийМодуль.МояПроцедура"); -// -Процедура ВыполнитьБезопасно(Знач ИмяЭкспортнойПроцедуры) Экспорт - - Перем ТекстСообщения; - - Если Не ПроверитьИмяЭкспортнойПроцедуры(ИмяЭкспортнойПроцедуры, ТекстСообщения) Тогда - ВызватьИсключение ТекстСообщения; - КонецЕсли; - - Выполнить ИмяЭкспортнойПроцедуры + "();"; - -КонецПроцедуры - -// Проверяет имя экспортной процедуры на валидность для использования -// в инструкции Выполнить встроенного языка. При некорректном имени -// вызывается исключение. -// -Функция ПроверитьИмяЭкспортнойПроцедуры(Знач ИмяЭкспортнойПроцедуры, ТекстСообщения) Экспорт - - // Проверка предусловий на формат ИмяЭкспортнойПроцедуры. - ЧастиИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяЭкспортнойПроцедуры, "."); - Если ЧастиИмени.Количество() <> 2 И ЧастиИмени.Количество() <> 3 Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1)'"), - ИмяЭкспортнойПроцедуры); - Возврат Ложь; - КонецЕсли; - - ИмяОбъекта = ЧастиИмени[0]; - Если ЧастиИмени.Количество() = 2 И Метаданные.ОбщиеМодули.Найти(ИмяОбъекта) = Неопределено Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1)'"), - ИмяЭкспортнойПроцедуры); - Возврат Ложь; - КонецЕсли; - - Если ЧастиИмени.Количество() = 3 Тогда - ДопустимыеИменаТипов = Новый Массив; - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаКонстанты())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыСведений())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыНакопления())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыБухгалтерии())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаРегистрыРасчета())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаСправочники())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаДокументы())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаБизнесПроцессы())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаЗадачи())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыСчетов())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыОбмена())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыВидовХарактеристик())); - ДопустимыеИменаТипов.Добавить(ВРег(ИмяТипаПланыВидовРасчета())); - ИмяТипа = ВРег(ЧастиИмени[0]); - Если ДопустимыеИменаТипов.Найти(ИмяТипа) = Неопределено Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Неправильный формат параметра ИмяЭкспортнойПроцедуры (%1)'"), - ИмяЭкспортнойПроцедуры); - Возврат Ложь; - КонецЕсли; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -// Объединяет исключения поиска ссылок. -// -Функция ПолучитьОбщийСписокИсключенийПоискаСсылок() Экспорт - - ОбщийМассивИсключенийСсылок = Новый Массив; - - ЗаполнитьМассивУникальнымиЗначениями(ОбщийМассивИсключенийСсылок, СтандартныеПодсистемыПереопределяемый.ИсключенияПоискаСсылок()); - ЗаполнитьМассивУникальнымиЗначениями(ОбщийМассивИсключенийСсылок, ОбщегоНазначенияПереопределяемый.ПолучитьИсключенияПоискаСсылок()); - - Возврат ОбщийМассивИсключенийСсылок; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции - -// Функция ИнформационнаяБазаФайловая определяет режим эксплуатации -// информационной базы файловый (Истина) или Серверный (Ложь). -// При проверке используется СтрокаСоединенияИнформационнойБазы, которую -// можно указать явно. -// -// Параметры: -// СтрокаСоединенияИнформационнойБазы - Строка - параметр используется, если -// нужно проверить строку соединения не текущей информационной базы. +// ТабДокумент – Табличный документ +// ВыводимыеОбласти – Массив из проверяемых таблиц или табличный документ +// РезультатПриОшибке - Какой возвращать результат при возникновении ошибки // // Возвращаемое значение: -// Булево. +// Булево – умещаются или нет переданные документы // -Функция ИнформационнаяБазаФайловая(Знач СтрокаСоединенияИнформационнойБазы = "") Экспорт - - Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда - СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы(); - КонецЕсли; - Возврат Найти(Врег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1; - +Функция ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти, РезультатПриОшибке = Истина) Экспорт + + Попытка + Возврат ТабДокумент.ПроверитьВывод(ВыводимыеОбласти); + Исключение + Возврат РезультатПриОшибке; + КонецПопытки; + КонецФункции -// Получить представление информационной базы для отображения пользователю. -// -// Возвращаемое значение: -// Строка - Представление информационной базы -// -// Пример возвращаемого результата: -// - для ИБ в файлом режиме: \\FileServer\1c_ib\ -// - для ИБ в серверном режиме: ServerName:1111 / information_base_name -// -Функция ПолучитьПредставлениеИнформационнойБазы() Экспорт - - СтрокаСоединенияСБД = СтрокаСоединенияИнформационнойБазы(); - - Если ИнформационнаяБазаФайловая(СтрокаСоединенияСБД) Тогда - ПутьКБД = Сред(СтрокаСоединенияСБД, 6, СтрДлина(СтрокаСоединенияСБД) - 6); - Иначе - // надо к имени сервера прибавить имя пути информационной базы - ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "SRVR="); - - Если ПозицияПоиска <> 1 Тогда - Возврат Неопределено; - КонецЕсли; - - ПозицияТочкиСЗапятой = Найти(СтрокаСоединенияСБД, ";"); - НачальнаяПозицияКопирования = 6 + 1; - КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2; - - ИмяСервера = Сред(СтрокаСоединенияСБД, НачальнаяПозицияКопирования, КонечнаяПозицияКопирования - НачальнаяПозицияКопирования + 1); - - СтрокаСоединенияСБД = Сред(СтрокаСоединенияСБД, ПозицияТочкиСЗапятой + 1); - - // позиция имени сервера - ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "REF="); - - Если ПозицияПоиска <> 1 Тогда - Возврат Неопределено; - КонецЕсли; - - НачальнаяПозицияКопирования = 6; - ПозицияТочкиСЗапятой = Найти(СтрокаСоединенияСБД, ";"); - КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2; - - ИмяИБНаСервере = Сред(СтрокаСоединенияСБД, НачальнаяПозицияКопирования, КонечнаяПозицияКопирования - НачальнаяПозицияКопирования + 1); - - ПутьКБД = ИмяСервера + "/ " + ИмяИБНаСервере; - - КонецЕсли; - - Возврат ПутьКБД; - -КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Функции для работы с журналом регистрации -// Проверить, что описание типа состоит из единственного типа значения и -// совпадает с нужным типом. -// -// Возвращаемое значение: -// Булево - Совпадает или нет -// -Функция ОписаниеТипаСостоитИзТипа(ОписаниеТипа, ТипЗначения) Экспорт - - Если ОписаниеТипа.Типы().Количество() = 1 - И ОписаниеТипа.Типы().Получить(0) = ТипЗначения Тогда - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Получает таблицу значений с описанием требуемых свойств всех реквизитов объекта метаданного -// Получает значения свойств стандартных реквизитов и пользовательских реквизитов (созданных в режиме конфигуратора) -// -// Параметры: -// ОбъектМетаданных - Объект метаданных конфигурации, для которого необходимо получить значение свойств реквизитов. -// Например: Метаданные.Документ.РеализацияТоваровИУслуг -// Свойства - Строка - свойства реквизитов, перечисленных через запятую, значение которых необходимо получить. -// Например: "Имя, Тип, Синоним, Подсказка" -// -// Возвращаемое значение: -// ТаблицаЗначений - таблица значений с описанием требуемых свойств всех реквизитов объекта метаданного -// -Функция ПолучитьТаблицуОписанияСвойствОбъекта(ОбъектМетаданных, Свойства) Экспорт - - МассивСвойств = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Свойства); - - // возвращаемое значение функции - ТаблицаОписанияСвойствОбъекта = Новый ТаблицаЗначений; - - // добавляем в таблицу поля согласно именам переданных свойств - Для Каждого ИмяСвойства ИЗ МассивСвойств Цикл - - ТаблицаОписанияСвойствОбъекта.Колонки.Добавить(СокрЛП(ИмяСвойства)); - - КонецЦикла; - - // заполняем строку таблицы свойствами реквизитов объекта метаданных - Для Каждого Реквизит ИЗ ОбъектМетаданных.Реквизиты Цикл - - ЗаполнитьЗначенияСвойств(ТаблицаОписанияСвойствОбъекта.Добавить(), Реквизит); - - КонецЦикла; - - // заполняем строку таблицы свойствами стандартных реквизитов объекта метаданных - Для Каждого Реквизит ИЗ ОбъектМетаданных.СтандартныеРеквизиты Цикл - - ЗаполнитьЗначенияСвойств(ТаблицаОписанияСвойствОбъекта.Добавить(), Реквизит); - - КонецЦикла; - - Возврат ТаблицаОписанияСвойствОбъекта; - -КонецФункции - -// Процедура предназначена для заполнения реквизита формы типа «ДеревоЗначений» -// -// Параметры: -// КоллекцияЭлементовДерева – реквизит формы, который имеет тип «ДеревоЗначений»; -// реквизит заполняется значениями из второго параметра процедуры. -// ДеревоЗначений – ДеревоЗначений – параметр содержит данные для заполнения. +// Процедура пакетной записи сообщений в журнал регистрации // -Процедура ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, ДеревоЗначений) Экспорт +// Параметры: СобытияДляЖурналаРегистрации - массив структур, клиентская глобальная переменная +// Каждая структура - сообщение для журнала регистрации. +// После записи переменная очищается. +Процедура ЗаписатьСобытияВЖурналРегистрации(СобытияДляЖурналаРегистрации) Экспорт - Для Каждого Строка Из ДеревоЗначений.Строки Цикл - - ЭлементДерева = КоллекцияЭлементовДерева.Добавить(); - - ЗаполнитьЗначенияСвойств(ЭлементДерева, Строка); - - Если Строка.Строки.Количество() > 0 Тогда - - ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(ЭлементДерева.ПолучитьЭлементы(), Строка); - + Если ТипЗнч(СобытияДляЖурналаРегистрации) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + Если СобытияДляЖурналаРегистрации.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого СообщениеЖурнала Из СобытияДляЖурналаРегистрации Цикл + ЗначениеСообщения = СообщениеЖурнала.Значение; + ИмяСобытия = ЗначениеСообщения.ИмяСобытия; + УровеньСобытия = УровеньСобытияПоПредставлению(ЗначениеСообщения.ПредставлениеУровня); + ДатаСобытия = ТекущаяДатаСеанса(); + Если ЗначениеСообщения.Свойство("ДатаСобытия") И ЗначениеЗаполнено(ЗначениеСообщения.ДатаСобытия) Тогда + ДатаСобытия = ЗначениеСообщения.ДатаСобытия; КонецЕсли; - + Комментарий = Строка(ДатаСобытия) + " " + ЗначениеСообщения.Комментарий; + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньСобытия,,, Комментарий); КонецЦикла; + СобытияДляЖурналаРегистрации.Очистить(); КонецПроцедуры +// Процедура ведения в журнале регистрации событий +// +// Параметры: СписокУровней - список значений, +// Наименования уровней регистрации событий, которые необходимо включить +Процедура ВключитьИспользованиеЖурналаРегистрации(СписокУровней = Неопределено) Экспорт + УстановитьПривилегированныйРежим(Истина); + Попытка + УстановитьМонопольныйРежим(Истина); + МассивУровней = Новый Массив(); + + Если СписокУровней = Неопределено Тогда + МассивУровней.Добавить(УровеньЖурналаРегистрации.Информация); + МассивУровней.Добавить(УровеньЖурналаРегистрации.Ошибка); + МассивУровней.Добавить(УровеньЖурналаРегистрации.Предупреждение); + МассивУровней.Добавить(УровеньЖурналаРегистрации.Примечание); + Иначе + МассивУровней = УровниСобытияЖурналаРегистрацииПоСтроке(СписокУровней); + КонецЕсли; + + УстановитьИспользованиеЖурналаРегистрации(МассивУровней); + УстановитьМонопольныйРежим(Ложь); + Исключение + УстановитьПривилегированныйРежим(Ложь); + ВызватьИсключение + КонецПопытки; + УстановитьПривилегированныйРежим(Ложь); +КонецПроцедуры + +// Проверяет, включена ли регистрация событий в журнале регистрации +// +// Параметры: +// СписокПроверок - СписокЗначений, список строк-представлений режимов использования журнала регистрации, которые надо проверить на включение. +// Если Неопределено - тогда проверяются все режимы. +// +// Возвращаемое значение: Истина, когда заданные режимы включены. Иначе - ложь. +Функция ПроверитьВключениеЖурналаРегистрации(СписокПроверок = Неопределено) Экспорт + МассивРежимов = ПолучитьИспользованиеЖурналаРегистрации(); + Если СписокПроверок = Неопределено Тогда + Возврат МассивРежимов.Количество() = 4 ; + Иначе + МассивНазванийРежимов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СписокПроверок); + Для Каждого Название Из МассивНазванийРежимов Цикл + ТекущийПроверяемыйРежим = УровеньСобытияПоПредставлению(Название); + Если МассивРежимов.Найти(ТекущийПроверяемыйРежим) = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Возврат Истина; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Общие процедуры и функции для работы в режиме разделения данных + +// Устанавливает монопольный доступ к информационной базе (области данных). +// +// При включенном использовании разделителей в сеансе +// начинает транзакцию и устанавливает исключительную управляемую блокировку +// на пространства блокировок всех объектов метаданных, входящих в состав разделителя ОбластьДанных. +// +// В других случаях (например, в локальном режиме работы) устанавливает монопольный режим. +// +Процедура ЗаблокироватьИБ() Экспорт + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + ИЛИ НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Если НЕ МонопольныйРежим() Тогда + УстановитьМонопольныйРежим(Истина); + КонецЕсли; + Иначе + СтандартныеПодсистемыПереопределяемый.ЗаблокироватьТекущуюОбластьДанных(); + КонецЕсли; + +КонецПроцедуры + +// Снимает монопольный доступ к информационной базе (области данных). +// +// При включенном использовании разделителей в сеансе, +// - если вызов делается внутри обработчика исключения (из секции Исключении...) +// отменяет транзакцию; +// - иначе фиксирует транзакцию. +// +// В других случаях (например, в локальном режиме работы) снимает монопольный режим. +// +Процедура РазблокироватьИБ() Экспорт + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + ИЛИ НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Если МонопольныйРежим() Тогда + УстановитьМонопольныйРежим(Ложь); + КонецЕсли; + Иначе + СтандартныеПодсистемыПереопределяемый.РазблокироватьТекущуюОбластьДанных(); + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьРазделениеСеанса(Знач Использование, Знач ОбластьДанных = Неопределено) Экспорт + + СтандартныеПодсистемыПереопределяемый.УстановитьРазделениеСеанса(Использование, ОбластьДанных); + +КонецПроцедуры + +// Возвращает значение разделителя текущей области данных. +// В случае если значение не установлено выдается ошибка. +// +// Возвращаемое значение: +// Тип значения разделителя. +// Значение разделителя текущей области данных. +// +Функция ЗначениеРазделителяСеанса() Экспорт + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат 0; + Иначе + Возврат СтандартныеПодсистемыПереопределяемый.ЗначениеРазделителяСеанса(); + КонецЕсли; + +КонецФункции + +Функция ИспользованиеРазделителяСеанса() Экспорт + + Возврат СтандартныеПодсистемыПереопределяемый.ИспользованиеРазделителяСеанса(); + +КонецФункции + +// Процедура инициализации разделенной информационной базы +// +// Параметры: +// ВключитьРазделение - Булево - признак включения разделения в +// информационной базе +// +Процедура УстановитьПараметрыРазделенияИнформационныйБазы(Знач ВключитьРазделение = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + Константы.ИспользоватьРазделениеПоОбластямДанных.Установить(ВключитьРазделение); + +КонецПроцедуры + +// Устанавливает значение двух дополнительных констант. +// Имена констант строго регламентированы и должны соответствовать шаблонам: +// <Имя основной константы>ВМоделиСервиса +// <Имя основной константы>ВЛокальномРежиме +// +// Параметры: +// Значение – Булево – значение основной константы. +// ИмяКонстанты – Строка – имя основной константы. +// +Процедура УстановитьЗначенияДополнительныхКонстант(Знач Значение, Знач ИмяКонстанты) Экспорт + + Если Значение = Истина Тогда + + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + + Константы[ИмяКонстанты + "ВМоделиСервиса"].Установить(РазделениеВключено); + Константы[ИмяКонстанты + "ВЛокальномРежиме"].Установить(Не РазделениеВключено); + + Иначе + + Константы[ИмяКонстанты + "ВМоделиСервиса"].Установить(Ложь); + Константы[ИмяКонстанты + "ВЛокальномРежиме"].Установить(Ложь); + + КонецЕсли; + +КонецПроцедуры + +///////////////////////////////////////////////////////////////////////////////// +// Версионирование программных интерфейсов +// + +// Возвращает массив номеров версий, поддерживаемых интерфейсом удаленной системы. +// +// Параметры: +// ПараметрыПодключения - Структура: +// - URL - Строка - URL сервиса. Обязательно должно присутствовать и быть заполненным. +// - UserName - Строка - Имя пользователя сервиса. +// - Password - Строка - Пароль пользователя сервиса. +// ИмяИнтерфейса - Строка. +// +// Возвращаемое значение: +// ФиксированныйМассив - Массив строк: +// - Каждая строка является представлением номера версии интерфейса. Например, "1.0.2.1". +// +// Пример использования: +// ПараметрыПодключения = Новый Структура; +// ПараметрыПодключения.Вставить("URL", "http://vsrvx/sm"); +// ПараметрыПодключения.Вставить("UserName", "ivanov"); +// МассивВерсий = ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "СервисПередачиФайлов"); +// +// Примечание: при получении версий используется кэш, время обновления которого составляется +// составляется одни сутки. Если для целей отладки требуется обновить +// значения в кэше, раньше этого времени, следует удалить из регистра сведений +// КэшПрограммныхИнтерфейсов соответствующие записи. +// +Функция ПолучитьВерсииИнтерфейса(Знач ПараметрыПодключения, Знач ИмяИнтерфейса) Экспорт + + Если Не ПараметрыПодключения.Свойство("URL") + Или Не ЗначениеЗаполнено(ПараметрыПодключения.URL) Тогда + + ВызватьИсключение(НСтр("ru = 'Не задан URL сервиса.'")); + КонецЕсли; + + ПараметрыПолучения = Новый Массив; + ПараметрыПолучения.Добавить(ПараметрыПодключения); + ПараметрыПолучения.Добавить(ИмяИнтерфейса); + + Возврат ОбщегоНазначенияПовтИсп.ПолучитьДанныеКэшаВерсий( + ИдентификаторЗаписиКэшаВерсий(ПараметрыПодключения.URL, ИмяИнтерфейса), + Перечисления.ТипыДанныхКэшаПрограммныхИнтерфейсов.ВерсииИнтерфейса, + ЗначениеВСтрокуXML(ПараметрыПолучения), + Истина); + +КонецФункции + +// Возвращает массив номеров версий, поддерживаемых интерфейсом системы, подключенной через внешнее соединение. +// +// Параметры: +// ВнешнееСоединение - объект COM-соединение, которое используется для работы с корреспондентом. +// ИмяИнтерфейса - Строка. +// +// Возвращаемое значение: +// ФиксированныйМассив - Массив строк: +// Каждая строка является представлением номера версии интерфейса. Например, "1.0.2.1". +// +// Пример использования: +// Параметры = ... +// ВнешнееСоединение = ОбщегоНазначения.УстановитьВнешнееСоединение(Параметры); +// МассивВерсий = ОбщегоНазначения.ПолучитьВерсииИнтерфейсаЧерезВнешнееСоединение(ВнешнееСоединение, "ОбменДанными"); +// +Функция ПолучитьВерсииИнтерфейсаЧерезВнешнееСоединение(ВнешнееСоединение, Знач ИмяИнтерфейса) Экспорт + + Попытка + ВерсииИнтерфейсаXML = ВнешнееСоединение.СтандартныеПодсистемыСервер.ПоддерживаемыеВерсии(ИмяИнтерфейса); + Исключение + СтрокаСообщения = НСтр("ru = 'Корреспондент не поддерживает версионирование интерфейсов подсистем. + |Описание ошибки: %1'" + ); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение версий интерфейса'"), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщения); + + Возврат Новый ФиксированныйМассив(Новый Массив); + КонецПопытки; + + Возврат Новый ФиксированныйМассив(ЗначениеИзСтрокиXML(ВерсииИнтерфейсаXML)); +КонецФункции + +// Удаляет записи кэша версий содержащих в идентификаторе указанную +// подстроку. В качестве подстроки может использоваться, например, +// имя интерфейса более не используемого в конфигурации. +// +// Параметры: +// ПодстрокаПоискаИдентификаторов - Строка - подстрока поиска +// идентификаторов. Строка не может содержать символов +// %, _ и [ +// +Процедура УдалитьЗаписиКэшаВерсий(Знач ПодстрокаПоискаИдентификаторов) Экспорт + + НачатьТранзакцию(); + + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить("РегистрСведений.КэшПрограммныхИнтерфейсов"); + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | КэшПрограммныхИнтерфейсов.Идентификатор КАК Идентификатор, + | КэшПрограммныхИнтерфейсов.ТипДанных КАК ТипДанных + |ИЗ + | РегистрСведений.КэшПрограммныхИнтерфейсов КАК КэшПрограммныхИнтерфейсов + |ГДЕ + | КэшПрограммныхИнтерфейсов.Идентификатор ПОДОБНО ""%" + СформироватьСтрокуДляПоискаВЗапросе(ПодстрокаПоискаИдентификаторов) + "%"" + | СПЕЦСИМВОЛ ""~"""; + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + Запись = РегистрыСведений.КэшПрограммныхИнтерфейсов.СоздатьМенеджерЗаписи(); + Запись.Идентификатор = Выборка.Идентификатор; + Запись.ТипДанных = Выборка.ТипДанных; + Запись.Удалить(); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция УровеньСобытияПоПредставлению(ПредставлениеУровня) + Если ПредставлениеУровня = "Информация" Тогда + Возврат УровеньЖурналаРегистрации.Информация; + ИначеЕсли ПредставлениеУровня = "Ошибка" Тогда + Возврат УровеньЖурналаРегистрации.Ошибка; + ИначеЕсли ПредставлениеУровня = "Предупреждение" Тогда + Возврат УровеньЖурналаРегистрации.Предупреждение; + ИначеЕсли ПредставлениеУровня = "Примечание" Тогда + Возврат УровеньЖурналаРегистрации.Примечание; + КонецЕсли; +КонецФункции + +Функция УровниСобытияЖурналаРегистрацииПоСтроке(СписокУровней) + МассивНазванийУровней = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СписокУровней); + МассивУровней = Новый Массив; + Для Каждого Название Из МассивНазванийУровней Цикл + МассивУровней.Добавить(УровеньСобытияПоПредставлению(Название)); + КонецЦикла; + Возврат МассивУровней; +КонецФункции + +Процедура НоваяСтрокаКоллекцииОбъектовМетаданных(Имя, Синоним, Картинка, КартинкаОбъекта, Таб) + + НоваяСтрока = Таб.Добавить(); + НоваяСтрока.Имя = Имя; + НоваяСтрока.Синоним = Синоним; + НоваяСтрока.Картинка = Картинка; + НоваяСтрока.КартинкаОбъекта = КартинкаОбъекта; + +КонецПроцедуры + +Процедура ОбновитьДанныеКэшаВерсий(Знач Идентификатор, Знач ТипДанных, Знач ПараметрыПолучения) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | КэшПрограммныхИнтерфейсов.ДатаОбновления КАК ДатаОбновления, + | КэшПрограммныхИнтерфейсов.Данные КАК Данные, + | КэшПрограммныхИнтерфейсов.ТипДанных КАК ТипДанных + |ИЗ + | РегистрСведений.КэшПрограммныхИнтерфейсов КАК КэшПрограммныхИнтерфейсов + |ГДЕ + | КэшПрограммныхИнтерфейсов.Идентификатор = &Идентификатор + | И КэшПрограммныхИнтерфейсов.ТипДанных = &ТипДанных"; + Идентификатор = Идентификатор; + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + Запрос.УстановитьПараметр("ТипДанных", ТипДанных); + + НачатьТранзакцию(); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КэшПрограммныхИнтерфейсов"); + ЭлементБлокировки.УстановитьЗначение("Идентификатор", Идентификатор); + ЭлементБлокировки.УстановитьЗначение("ТипДанных", ТипДанных); + Блокировка.Заблокировать(); + + Результат = Запрос.Выполнить(); + + // Убедимся что данные требуют обновления + Если НЕ Результат.Пустой() Тогда + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + Если НЕ ЗаписьКэшаВерсийУстарела(Выборка) Тогда + // Данные актуальны + ОтменитьТранзакцию(); + Возврат; + КонецЕсли; + КонецЕсли; + + Если ТипДанных = Перечисления.ТипыДанныхКэшаПрограммныхИнтерфейсов.ВерсииИнтерфейса Тогда + Данные = ПолучитьВерсииИнтерфейсаВКэш(ПараметрыПолучения[0], ПараметрыПолучения[1]); + ИначеЕсли ТипДанных = Перечисления.ТипыДанныхКэшаПрограммныхИнтерфейсов.ОписаниеWebСервиса Тогда + Данные = ПолучитьWSDL(ПараметрыПолучения[0], ПараметрыПолучения[1], ПараметрыПолучения[2]); + Иначе + ШаблонТекста = НСтр("ru = 'Не известный тип данных кэша версий: %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста, ТипДанных); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + МенеджерЗаписи = РегистрыСведений.КэшПрограммныхИнтерфейсов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Идентификатор = Идентификатор; + МенеджерЗаписи.ТипДанных = ТипДанных; + МенеджерЗаписи.ДатаОбновления = ТекущаяУниверсальнаяДата(); + МенеджерЗаписи.Данные = Новый ХранилищеЗначения(Данные); + МенеджерЗаписи.Записать(); + + ЗафиксироватьТранзакцию(); + +КонецПроцедуры + +Функция ЗаписьКэшаВерсийУстарела(Знач Запись) Экспорт + + Если Запись.ТипДанных = Перечисления.ТипыДанныхКэшаПрограммныхИнтерфейсов.ОписаниеWebСервиса Тогда + Возврат НЕ ЗначениеЗаполнено(Запись.ДатаОбновления) + Иначе + Возврат Запись.ДатаОбновления + 86400 < ТекущаяУниверсальнаяДата(); + КонецЕсли; + +КонецФункции + +Функция ИдентификаторЗаписиКэшаВерсий(Знач Адрес, Знач Имя) Экспорт + + Возврат Адрес + "|" + Имя; + +КонецФункции + +Функция ПолучитьВерсииИнтерфейсаВКэш(Знач ПараметрыПодключения, Знач ИмяИнтерфейса) + + СтандартныеПодсистемыПереопределяемый.ПреобразоватьПараметрыПодключенияКСервису(ПараметрыПодключения, ИмяИнтерфейса); + + Если Не ПараметрыПодключения.Свойство("URL") + Или Не ЗначениеЗаполнено(ПараметрыПодключения.URL) Тогда + + ВызватьИсключение(НСтр("ru = 'Не задан URL сервиса.'")); + КонецЕсли; + + Если ПараметрыПодключения.Свойство("UserName") + И ЗначениеЗаполнено(ПараметрыПодключения.UserName) Тогда + + ИмяПользователя = ПараметрыПодключения.UserName; + + Если ПараметрыПодключения.Свойство("Password") Тогда + ПарольПользователя = ПараметрыПодключения.Password; + Иначе + ПарольПользователя = Неопределено; + КонецЕсли; + + Иначе + ИмяПользователя = Неопределено; + ПарольПользователя = Неопределено; + КонецЕсли; + + АдресСервиса = ПараметрыПодключения.URL + "/ws/InterfaceVersion?wsdl"; + + ПроксиВерсионирования = ОбщегоНазначенияПовтИсп.ПолучитьWSПрокси(АдресСервиса, "http://www.1c.ru/SaaS/1.0/WS", + "InterfaceVersion", , ИмяПользователя, ПарольПользователя); + + МассивXDTO = ПроксиВерсионирования.GetVersions(ИмяИнтерфейса); + Если МассивXDTO = Неопределено Тогда + Возврат Новый ФиксированныйМассив(Новый Массив); + Иначе + Сериализатор = Новый СериализаторXDTO(ПроксиВерсионирования.ФабрикаXDTO); + Возврат Новый ФиксированныйМассив(Сериализатор.ПрочитатьXDTO(МассивXDTO)); + КонецЕсли; + +КонецФункции + +Функция ПолучитьWSDL(Знач Адрес, Знач ИмяПользователя, Знач Пароль) + + ПараметрыПолучения = Новый Структура; + Если НЕ ПустаяСтрока(ИмяПользователя) Тогда + ПараметрыПолучения.Вставить("Пользователь", ИмяПользователя); + ПараметрыПолучения.Вставить("Пароль", Пароль); + КонецЕсли; + + ОписаниеФайла = Неопределено; + СтандартныеПодсистемыПереопределяемый.СкачатьФайлНаСервере(Адрес, ПараметрыПолучения, ОписаниеФайла); + + Если НЕ ОписаниеФайла.Статус Тогда + ВызватьИсключение(НСтр("ru = 'Ошибка получения файла описания web-сервиса:'") + Символы.ПС + ОписаниеФайла.СообщениеОбОшибке) + КонецЕсли; + + // Попробуем создать WS определения на основе полученного файла + Определения = Новый WSОпределения(ОписаниеФайла.Путь); + Если Определения.Сервисы.Количество() = 0 Тогда + ШаблонСообщения = НСтр("ru = 'Ошибка получения файла описания web-сервиса: + |В полученном файле не содержится ни одного описания сервиса. + | + |Возможно, адрес файла описания указан неверно: + |%1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Адрес); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + Определения = Неопределено; + + ДанныеФайла = Новый ДвоичныеДанные(ОписаниеФайла.Путь); + + Попытка + УдалитьФайлы(ОписаниеФайла.Путь); + Исключение + ЗаписьЖурналаРегистрации("УдалениеВременныхФайлов", УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат ДанныеФайла; + +КонецФункции diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl index 2cf1385b0..5e8a803c7 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl @@ -1,3 +1,17 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Клиентские процедуры и функции общего назначения: +// - для работы со списками в формах; +// - для работы с журналом регистрации; +// - для обработки действий пользователя в процессе редактирования +// многострочного текста, например комментария в документах; +// - прочее. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + //////////////////////////////////////////////////////////////////////////////// // Функции работы со списками в формах @@ -47,20 +61,15 @@ //////////////////////////////////////////////////////////////////////////////// // Клиентские процедуры общего назначения -// Процедура ПреобразоватьЗимнееВремяКТекущему изменяет переданное -// значение времени в местное время из зимнего к текущему с учетом NTFS коррекции. +// Возвращает текущую дату, приведенную к часовому поясу сеанса. // -// Параметры: -// ДатаВремя - Дата, преобразуемое время. +// Функция возвращает время, близкое к результату функции ТекущаяДатаСеанса() в серверном контексте. +// Погрешность обусловлена временем выполнения серверного вызова. +// Предназначена для использования вместо функции ТекущаяДата(). // -// Возвращаемое значение: -// Дата - преобразованное время. -// -Процедура ПреобразоватьЗимнееВремяКТекущему(ДатаВремя) Экспорт - - ДатаВремя = МестноеВремя(ДатаВремя); - -КонецПроцедуры +Функция ДатаСеанса() Экспорт + Возврат ТекущаяДата() + СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПоправкаКВремениСеанса; +КонецФункции // Предлагает пользователю установить расширение работы с файлами в веб-клиенте. // При этом инициализирует параметр сеанса ПредлагатьУстановкуРасширенияРаботыСФайлами. @@ -93,16 +102,20 @@ Возврат "НеподдерживаемыйВебКлиент"; КонецЕсли; + СистемнаяИнформация = Новый СистемнаяИнформация(); + ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; + ПервоеОбращениеЗаСеанс = Ложь; Если ПредлагатьУстановкуРасширенияРаботыСФайлами = Неопределено Тогда ПервоеОбращениеЗаСеанс = Истина; - ПредлагатьУстановкуРасширенияРаботыСФайлами = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", - "ПредлагатьУстановкуРасширенияРаботыСФайлами"); + ПредлагатьУстановкуРасширенияРаботыСФайлами = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкиПрограммы/ПредлагатьУстановкуРасширенияРаботыСФайлами", ИдентификаторКлиента); Если ПредлагатьУстановкуРасширенияРаботыСФайлами = Неопределено Тогда ПредлагатьУстановкуРасширенияРаботыСФайлами = Истина; - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПредлагатьУстановкуРасширенияРаботыСФайлами", + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "НастройкиПрограммы/ПредлагатьУстановкуРасширенияРаботыСФайлами", ИдентификаторКлиента, ПредлагатьУстановкуРасширенияРаботыСФайлами); КонецЕсли; @@ -120,7 +133,8 @@ КонецЕсли; ПредлагатьУстановкуРасширенияРаботыСФайлами = КодВозврата; - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПредлагатьУстановкуРасширенияРаботыСФайлами", + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "НастройкиПрограммы/ПредлагатьУстановкуРасширенияРаботыСФайлами", ИдентификаторКлиента, ПредлагатьУстановкуРасширенияРаботыСФайлами); КонецЕсли; Возврат ?(ПодключитьРасширениеРаботыСФайлами(), "Подключено", "НеПодключено"); @@ -250,7 +264,7 @@ КонецПроцедуры -// Процедура позволяет выбрать время из выпадающего списка +// Процедура позволяет выбрать время из выпадающего списка. // Параметры: // Форма - управляемая форма / форма - форма, на которой располагается элемент, // для которого будет выбираться время @@ -312,19 +326,72 @@ КонецФункции +// Задает вопрос о продолжении действия, влекущего к потере изменений. +// +// Параметры: +// Отказ - Булево - возвращаемый параметр, признак отказа от выполняемого действия; +// Модифицированность - Булево - признак модифицированности формы, из которой вызывается данная процедура; +// ДействиеВыбрано - Булево - признак выбора пользователем действия, приводящего к закрытию формы; +// ТекстПредупреждения - Строка - текст диалога с пользователем. +// +Процедура ЗапроситьПодтверждениеЗакрытияФормы(Отказ, Модифицированность = Истина, ДействиеВыбрано = Ложь, ТекстПредупреждения = "") Экспорт + + Если ДействиеВыбрано = Истина Или Не Модифицированность Тогда + Возврат; + КонецЕсли; + + ТекстВопроса = ?(ПустаяСтрока(ТекстПредупреждения), + НСтр("ru = 'Данные были изменены, внесенные изменения будут отменены. + |Отменить и закрыть?'"), + ТекстПредупреждения); + Результат = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет, + НСтр("ru = 'Отмена изменений'")); + + Отказ = (Результат = КодВозвратаДиалога.Нет); + +КонецПроцедуры + +// Функция получает цвет стиля по имени элемента стиля +// +// Параметры: +// ИмяЦветаСтиля - строка с именем элемента +// +// Возвращаемое значение - цвет стиля +// +Функция ЦветСтиля(ИмяЦветаСтиля) Экспорт + + Возврат ОбщегоНазначенияПовтИсп.ЦветСтиля(ИмяЦветаСтиля); + +КонецФункции + +// Функция получает шрифт стиля по имени элемента стиля +// +// Параметры: +// ИмяШрифтаСтиля - строка с именем элемента +// +// Возвращаемое значение - шрифт стиля +// +Функция ШрифтСтиля(ИмяШрифтаСтиля) Экспорт + + Возврат ОбщегоНазначенияПовтИсп.ШрифтСтиля(ИмяШрифтаСтиля); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Функции для работы с журналом регистрации // Записывает очередное сообщение в глобальный массив сообщений. -// Параметры : -// ИмяСобытия - строка, имя события для журнала регистрации -// ПредставлениеУровня - строка, описание уровня события, по нему будет определен уровень события при записи на сервере -// ОбъектМетаданных - ОбъектМетаданных(подробнее см. синтакс-помощник по "ЗаписьЖурналаРегистрации") -// Данные - Произвольный, данные, с которыми связано событие (например, ссылки на объект) -// Комментарий - строка, комментарий для события журнала -// ПредставлениеРежима - строка, представление режима транзакции для данного события -// ДатаСобытия - дата, точная дата возникновения события, описанного в сообщении. Будет добавлена в начало комментария. -// ЗаписатьСобытия - булево, признак вызова процедуры непосредственной записи накопленных сообщений после добавления. +// +// Параметры : +// ИмяСобытия - Строка - имя события для журнала регистрации; +// ПредставлениеУровня - Строка - описание уровня события, по нему будет определен уровень события при записи на сервере; +// ОбъектМетаданных - ОбъектМетаданных - подробнее см. синтакс-помощник по "ЗаписьЖурналаРегистрации"; +// Данные - Произвольный - данные, с которыми связано событие (например, ссылки на объект); +// Комментарий - Строка - комментарий для события журнала; +// ПредставлениеРежима - Строка - представление режима транзакции для данного события; +// ДатаСобытия - Дата - точная дата возникновения события, описанного в сообщении. Будет добавлена в начало комментария; +// ЗаписатьСобытия - Булево - признак вызова процедуры непосредственной записи накопленных сообщений после добавления. +// Процедура ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия, ПредставлениеУровня = "Информация", Комментарий = "", ДатаСобытия = "", ЗаписатьСобытия = Ложь) Экспорт @@ -333,13 +400,9 @@ СообщенияДляЖурналаРегистрации = Новый СписокЗначений; КонецЕсли; - Если ДатаСобытия = "" Тогда - ДатаСобытия = ТекущаяДата(); - КонецЕсли; - - КомментарийСДатой = Строка(ДатаСобытия) +" " + Комментарий; - СтруктураСообщения = Новый Структура("ИмяСобытия, ПредставлениеУровня, Комментарий", - ИмяСобытия, ПредставлениеУровня, КомментарийСДатой); + СтруктураСообщения = Новый Структура("ИмяСобытия, ПредставлениеУровня, Комментарий, ДатаСобытия", + ИмяСобытия, ПредставлениеУровня, Комментарий, ДатаСобытия); + СообщенияДляЖурналаРегистрации.Добавить(СтруктураСообщения); Если ЗаписатьСобытия Тогда @@ -352,10 +415,12 @@ // Если регистрация изменений отключена - то предлагает полностью включить его. // // Параметры: -// СписокПроверок - СписокЗначений, список строковых представлений режимов журнала регистрации, которые необходимо проверить на включение. -// СпрашиватьОРегистрации - Булево, признак, отвечающий за вопрос о включении журнала в необходимых режимах. -// СообщениеОНеобходимостиВключенияЖурнала - Строка, сообщение, которое будет выведено пользователю в случае, когда проверка не прошла, и надо включить журнале регистрации. -Процедура ПроверитьВключениеЖурналаРегистрации(СписокПроверок = Неопределено, СпрашиватьОРегистрации = Истина, СообщениеОНеобходимостиВключенияЖурнала = "") Экспорт +// СписокПроверок - СписокЗначений - список строковых представлений режимов журнала регистрации, которые необходимо проверить на включение. +// СпрашиватьОРегистрации - Булево - признак, отвечающий за вопрос о включении журнала в необходимых режимах. +// СообщениеОНеобходимостиВключенияЖурнала - Строка - сообщение, которое будет выведено пользователю в случае, когда проверка не прошла, и надо включить журнале регистрации. +// +Процедура ПроверитьВключениеЖурналаРегистрации(СписокПроверок = Неопределено, + СпрашиватьОРегистрации = Истина, СообщениеОНеобходимостиВключенияЖурнала = "") Экспорт // регистрация данных видов событий уже включена Если ОбщегоНазначения.ПроверитьВключениеЖурналаРегистрации(СписокПроверок) Тогда @@ -410,18 +475,17 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Функции для обработки действий пользователя в процессе редактирования -// многострочного текста, например комментария в документах +// многострочного текста, например комментария в документах. -// Открывает форму редактирования произвольного многострочного текста модально +// Открывает форму редактирования произвольного многострочного текста модально. // // Параметры: -// МногострочныйТекст - Строка - произвольный текст, который необходимо отредактировать -// РезультатРедактирования - Строка - переменная, в которую будет помещен результат редактирования -// Модифицированность - Строка - флаг модифицированности формы -// Заголовок - Строка - текст, который необходимо отобразить в заголовке формы +// МногострочныйТекст - Строка - произвольный текст, который необходимо отредактировать; +// РезультатРедактирования - Строка - в этот параметр будет помещен результат редактирования; +// Модифицированность - Строка - флаг модифицированности формы; +// Заголовок - Строка - текст, который необходимо отобразить в заголовке формы. // Процедура ОткрытьФормуРедактированияМногострочногоТекста(Знач МногострочныйТекст, РезультатРедактирования, Модифицированность = Ложь, Знач Заголовок = Неопределено) Экспорт @@ -443,7 +507,7 @@ КонецПроцедуры -// Открывает форму редактирования многострочного комментария модально +// Открывает форму редактирования многострочного комментария модально. // // Параметры: // МногострочныйТекст - Строка - произвольный текст, который необходимо отредактировать @@ -459,4 +523,4 @@ ОткрытьФормуРедактированияМногострочногоТекста(МногострочныйТекст, РезультатРедактирования, Модифицированность, НСтр("ru='Комментарий'")); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl new file mode 100644 index 000000000..9027acd41 --- /dev/null +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl @@ -0,0 +1,40 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// В этом модуле содержится реализация обработчиков модуля приложения. +// +//////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Выполняется перед интерактивном началом работы пользователя с областью данных. +// Соответствует обработчику ПередНачаломРаботыСистемы +// +// Параметры: +// Отказ - Булево - отказ в от начала работы. Если параметр установить в Истина, +// начало работы с областью осуществлено не будет. +// +Процедура ПередНачаломРаботыСистемы(Отказ) Экспорт + +КонецПроцедуры + +// Выполняется при интерактивном начале работы пользователя с областью данных. +// Соответствует обработчику ПриНачалеРаботыСистемы +// +// Параметры +// ОбрабатыватьПараметрыЗапуска - Булево - Истина, если обработчик вызван при +// непосредсвенном входе пользователя в систему и должен обработать параметры +// запуска (если это предусмотрено его логикой). Иначе обработчика вызван +// при интерактивном входе неразделенного пользователя в область данных и +// обрабатывать параметры запуска не следует. +// +Процедура ПриНачалеРаботыСистемы(Знач ОбрабатыватьПараметрыЗапуска = Ложь) Экспорт + +КонецПроцедуры + +// Соответствует обработчику ПередЗавершениемРаботыСистемы. +// +Процедура ПередЗавершениемРаботыСистемы(Отказ) Экспорт + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/ОбщегоНазначенияКлиентПереопределяемый.mdo b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/ОбщегоНазначенияКлиентПереопределяемый.mdo new file mode 100644 index 000000000..dd7502650 --- /dev/null +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/ОбщегоНазначенияКлиентПереопределяемый.mdo @@ -0,0 +1,10 @@ + + + ОбщегоНазначенияКлиентПереопределяемый + + ru + Общего назначения клиент переопределяемый + + true + true + diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl index 4d2ee5e64..757555cf7 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПовтИсп/Module.bsl @@ -1,7 +1,13 @@ //////////////////////////////////////////////////////////////////////////////// -// Клиентские процедуры общего назначения +// Подсистема "Базовая функциональность". +// Клиентские процедуры и функции общего назначения. +// +//////////////////////////////////////////////////////////////////////////////// -// Возвращает Истина, если этот веб клиент не поддерживает расширение работы с файлами +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает Истина, если этот веб клиент не поддерживает расширение работы с файлами. Функция ЭтоВебКлиентБезПоддержкиРасширенияРаботыСФайлами() Экспорт СистемнаяИнфо = Новый СистемнаяИнформация; @@ -18,7 +24,7 @@ КонецФункции -// Возвращает Истина, если это веб клиент в Mac OS +// Возвращает Истина, если это веб клиент в Mac OS. Функция ЭтоВебКлиентПодMacOS() Экспорт #Если Не ВебКлиент Тогда @@ -34,9 +40,8 @@ КонецФункции -// Возвращает тип платформы клиента +// Возвращает тип платформы клиента. Функция ТипПлатформыКлиента() Экспорт СистемнаяИнфо = Новый СистемнаяИнформация; Возврат СистемнаяИнфо.ТипПлатформы; КонецФункции - diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl index 15ea84bd2..b4895ba02 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl @@ -1,5 +1,17 @@ //////////////////////////////////////////////////////////////////////////////// -// Клиентские и серверные процедуры общего назначения +// Подсистема "Базовая функциональность". +// Клиентские и серверные процедуры и функции общего назначения: +// - для поддержки формирования печатных форм; +// - для работы с файлами; +// - для работы с управляемыми формами; +// - для работы с почтовыми адресами; +// - для работы с отборами динамических списков; +// - прочее. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Формирует и выводит сообщение, которое может быть связано с элементом // управления формы. @@ -82,6 +94,95 @@ КонецПроцедуры +// Добавляет в список ошибок новую ошибку пользователя для дальнейшей отправки +// с помощью процедуры СообщитьОшибкиПользователю(). +// Используется в процедурах ОбработкаПроверкиЗаполнения. +// +// Параметры: +// Ошибки - Неопределено - будет создан новый список, +// - значение, установленное при первом вызове этой процедуры со значением Неопределено. +// +// ПолеОшибки - Строка - значение, которое задается в свойстве Поле объекта СообщениеПользователю. +// Для автоподстаноски номера строки должна содержать "%1". +// Например, "Объект.ИНН" или "Объект.Пользователи[%1].Пользователь". +// +// ТекстДляОднойОшибки - Строка - текст ошибки для случая, когда ГруппаОшибок в коллекции только одна, +// например, НСтр("ru = 'Пользователь не выбран.'"). +// +// ГруппаОшибок - Произвольный - используется для выбора либо текста для одной ошибки, +// либо текста для нескольких ошибок, например, имя "Объект.Пользователи". +// Если значение не заполнено, тогда используется текст для одной ошибки. +// +// НомерСтроки - Число - значение от 0 ... , определяющее номер строки, который нужно подставить +// в строку ПолеОшибки и в ТекстДляНесколькихОшибок (подставляется НомерСтроки + 1). +// +// ТекстДляНесколькихОшибок - Строка - текст ошибки для случая, когда добавлено несколько ошибок с одинаковым +// свойством ГруппаОшибок, например, НСтр("ru = 'Пользователь в строке %1 не выбран.'"). +// +Процедура ДобавитьОшибкуПользователю(Ошибки, Знач ПолеОшибки, Знач ТекстДляОднойОшибки, Знач ГруппаОшибок = "", Знач НомерСтроки = 0, Знач ТекстДляНесколькихОшибок = "") Экспорт + + Если Ошибки = Неопределено Тогда + Ошибки = Новый Структура; + Ошибки.Вставить("СписокОшибок", Новый Массив); + Ошибки.Вставить("ГруппыОшибок", Новый Соответствие); + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ГруппаОшибок) Тогда + // При незаполненной группе ошибок используется текст для одной ошибки. + Иначе + Если Ошибки.ГруппыОшибок[ГруппаОшибок] = Неопределено Тогда + // Группа ошибок использовалась один раз, используется текст для одной ошибки. + Ошибки.ГруппыОшибок.Вставить(ГруппаОшибок, Ложь); + Иначе + // Группа ошибок использовалась несколько раз, используется текст для нескольких ошибок. + Ошибки.ГруппыОшибок.Вставить(ГруппаОшибок, Истина); + КонецЕсли; + КонецЕсли; + + Ошибка = Новый Структура; + Ошибка.Вставить("ПолеОшибки", ПолеОшибки); + Ошибка.Вставить("ТекстДляОднойОшибки", ТекстДляОднойОшибки); + Ошибка.Вставить("ГруппаОшибок", ГруппаОшибок); + Ошибка.Вставить("НомерСтроки", НомерСтроки); + Ошибка.Вставить("ТекстДляНесколькихОшибок", ТекстДляНесколькихОшибок); + + Ошибки.СписокОшибок.Добавить(Ошибка); + +КонецПроцедуры + +// Сообщает ошибки добавленные с помощью процедуры ДобавитьОшибкуПользователю(). +// +// Параметры: +// Ошибки - Неопределено - возврат, +// значение, установленное при использовании процедуры ДобавитьОшибкуПользователю(). +// Отказ - Булево, устанавливается Истина, если ошибки сообщались. +// +Процедура СообщитьОшибкиПользователю(Знач Ошибки, Отказ = Ложь) Экспорт + + Если Ошибки = Неопределено Тогда + Возврат; + Иначе + Отказ = Истина; + КонецЕсли; + + Для каждого Ошибка Из Ошибки.СписокОшибок Цикл + + Если Ошибки.ГруппыОшибок[Ошибка.ГруппаОшибок] <> Истина Тогда + + СообщитьПользователю( + Ошибка.ТекстДляОднойОшибки, + , + СтрЗаменить(Ошибка.ПолеОшибки, "%1", Формат(Ошибка.НомерСтроки, "ЧН=0; ЧГ="))); + Иначе + СообщитьПользователю( + СтрЗаменить(Ошибка.ТекстДляНесколькихОшибок, "%1", Формат(Ошибка.НомерСтроки + 1, "ЧН=0; ЧГ=")), + , + СтрЗаменить(Ошибка.ПолеОшибки, "%1", Формат(Ошибка.НомерСтроки, "ЧН=0; ЧГ="))); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + // Формирует путь к заданной строке НомерСтроки и колонке ИмяРеквизита // табличной части ИмяТабличнойЧасти для выдачи сообщений в форме. // Для совместного использования с процедурой СообщитьПользователю @@ -93,7 +194,7 @@ // ИмяРеквизита - Строка - имя реквизита. // // Возвращаемое значение: -// Строка. +// Строка - путь к ячейке таблицы. // Функция ПутьКТабличнойЧасти(Знач ИмяТабличнойЧасти, Знач НомерСтроки, Знач ИмяРеквизита) Экспорт @@ -102,15 +203,15 @@ КонецФункции -// Дополняет таблицу значений-приемник данными из таблицы значений-источник +// Дополняет таблицу значений-приемник данными из таблицы значений-источник. // // Параметры: -// ТаблицаИсточник - Таблица значений - таблица из которой будут браться строки для заполнения -// ТаблицаПриемник - Таблица значений - таблица в которую будут добавлены строки из таблицы-источника +// ТаблицаИсточник - ТаблицаЗначений - таблица, из которой будут браться строки для заполнения; +// ТаблицаПриемник - ТаблицаЗначений - таблица, в которую будут добавлены строки из таблицы-источника. // Процедура ДополнитьТаблицу(ТаблицаИсточник, ТаблицаПриемник) Экспорт - Для каждого СтрокаТаблицыИсточник Из ТаблицаИсточник Цикл + Для Каждого СтрокаТаблицыИсточник Из ТаблицаИсточник Цикл ЗаполнитьЗначенияСвойств(ТаблицаПриемник.Добавить(), СтрокаТаблицыИсточник); @@ -121,9 +222,9 @@ // Дополняет таблицу значений Таблица значениями из массива Массив. // // Параметры: -// Таблица - ТаблицаЗначений - таблица, которую необходимо заполнить значениями из массива -// Массив - Массив - массив значений для заполнения таблицы -// ИмяПоля - Строка - имя поля таблицы значений, в которое необходимо загрузить значения из массива +// Таблица - ТаблицаЗначений - таблица, которую необходимо заполнить значениями из массива; +// Массив - Массив - массив значений для заполнения таблицы; +// ИмяПоля - Строка - имя поля таблицы значений, в которое необходимо загрузить значения из массива. // Процедура ДополнитьТаблицуИзМассива(Таблица, Массив, ИмяПоля) Экспорт @@ -135,11 +236,40 @@ КонецПроцедуры +// Дополняет массив МассивПриемник значениями из массива МассивИсточник. +// +// Параметры: +// МассивПриемник - Массив - массив, в который необходимо добавить значения. +// МассивИсточник - Массив - массив значений для заполнения, +// ТолькоУникальныеЗначения - булево, необязательный, если истина, +// то в массив будут включены только те значения, которых в нем еще нет, причем единожды +// +Процедура ДополнитьМассив(МассивПриемник, МассивИсточник, ТолькоУникальныеЗначения = Ложь) Экспорт + + УникальныеЗначения = Новый Соответствие; + + Если ТолькоУникальныеЗначения Тогда + Для каждого Значение Из МассивПриемник Цикл + УникальныеЗначения.Вставить(Значение, Истина); + КонецЦикла; + КонецЕсли; + + Для каждого Значение Из МассивИсточник Цикл + Если ТолькоУникальныеЗначения И УникальныеЗначения[Значение] <> Неопределено Тогда + Продолжить; + КонецЕсли; + МассивПриемник.Добавить(Значение); + УникальныеЗначения.Вставить(Значение, Истина); + КонецЦикла; + +КонецПроцедуры + // Снимает один элемент условного оформления, если это список значений. -// Параметры -// УсловноеОформление - условное оформление элемента формы -// ИдентификаторПользовательскойНастройки - строка - идентификатор настройки -// Значение - значение, которое требуется удалить из списка оформления +// +// Параметры: +// УсловноеОформление - условное оформление элемента формы; +// ИдентификаторПользовательскойНастройки - строка - идентификатор настройки; +// Значение - значение, которое требуется удалить из списка оформления. // Процедура СнятьУсловноеОформлениеСпискаЗначений( УсловноеОформление, @@ -166,29 +296,11 @@ КонецПроцедуры -// Удаляет одно значение из массива +// Удаляет все вхождения переданного значения из массива. // // Параметры: -// Массив - массив, из которого необходимо удалить значение -// Значение - удаляемое значение из массива -// -Процедура УдалитьЗначениеИзМассива(Массив, Значение) Экспорт - - Индекс = Массив.Найти(Значение); - - Если Индекс <> Неопределено Тогда - - Массив.Удалить(Индекс); - - КонецЕсли; - -КонецПроцедуры - -// Удаляет все вхождения переданного значения из массива -// -// Параметры: -// Массив - массив, из которого необходимо удалить значение -// Значение - удаляемое значение из массива +// Массив - массив, из которого необходимо удалить значение; +// Значение - удаляемое значение из массива. // Процедура УдалитьВсеВхожденияЗначенияИзМассива(Массив, Значение) Экспорт @@ -208,11 +320,11 @@ КонецПроцедуры -// Удаляет все вхождения значений указанного типа +// Удаляет все вхождения значений указанного типа. // // Параметры: -// Массив - массив, из которого необходимо удалить значения -// Тип – тип, значения которых следует удалить из коллекции +// Массив - массив, из которого необходимо удалить значения; +// Тип – тип значений, которые подлежат удалиению из массива. // Процедура УдалитьВсеВхожденияТипаИзМассива(Массив, Тип) Экспорт @@ -232,13 +344,31 @@ КонецПроцедуры +// Удаляет одно значение из массива. +// +// Параметры: +// Массив - массив, из которого необходимо удалить значение; +// Значение - удаляемое значение из массива. +// +Процедура УдалитьЗначениеИзМассива(Массив, Значение) Экспорт + + Индекс = Массив.Найти(Значение); + + Если Индекс <> Неопределено Тогда + + Массив.Удалить(Индекс); + + КонецЕсли; + +КонецПроцедуры + // Заполняет коллекцию-приемник значениями из коллекции-источник // В качестве коллекций источника и приемника могут выступать типы: // ТаблицаЗначений; ДеревоЗначений; СписокЗначений и пр. // // Параметры: -// КоллекцияИсточник - коллекция значений, которая является источником для заполнения данных -// КоллекцияПриемник - коллекция значений, которая является приемником для заполнения данных +// КоллекцияИсточник - коллекция значений, которая является источником для заполнения данных; +// КоллекцияПриемник - коллекция значений, которая является приемником для заполнения данных. // Процедура ЗаполнитьКоллекциюСвойств(КоллекцияИсточник, КоллекцияПриемник) Экспорт @@ -250,13 +380,13 @@ КонецПроцедуры -// Получает массив значений из отмеченных элементов списка значений +// Получает массив значений из отмеченных элементов списка значений. // // Параметры: -// Список - СписокЗначений - список значений из которого будет формироваться массив значений +// Список - СписокЗначений - список значений из которого будет формироваться массив значений; // // Возвращаемое значение: -// Массив - массив значений из отмеченных элементов списка значений +// Массив - массив значений из отмеченных элементов списка значений. // Функция ПолучитьМассивОтмеченныхЭлементовСписка(Список) Экспорт @@ -279,11 +409,11 @@ // Вычитает один массив элементов из другого массива. Возвращает результат вычитания. // // Параметры: -// Массив - массив элементов, из которого необходимо выполнить вычитание -// МассивВычитания - массив элементов, который будет вычитаться +// Массив - массив элементов, из которого необходимо выполнить вычитание; +// МассивВычитания - массив элементов, который будет вычитаться. // -// Возвращаемое значение: -// Массив – результат вычитания двух массивов +// Возвращаемое значение: +// Массив – результат вычитания двух массивов. // Функция СократитьМассив(Массив, МассивВычитания) Экспорт @@ -306,10 +436,10 @@ // Преобразует РасписаниеРегламентногоЗадания в структуру. // // Параметры: -// Расписание - РасписаниеРегламентногоЗадания +// Расписание - РасписаниеРегламентногоЗадания; // // Возвращаемое значение: -// Структура +// Структура. // Функция РасписаниеВСтруктуру(Знач Расписание) Экспорт @@ -333,10 +463,10 @@ // Преобразует структуру в РасписаниеРегламентногоЗадания. // // Параметры: -// СтруктураРасписания - Структура +// СтруктураРасписания - Структура; // // Возвращаемое значение: -// РасписаниеРегламентногоЗадания +// РасписаниеРегламентногоЗадания. // Функция СтруктураВРасписание(Знач СтруктураРасписания) Экспорт @@ -356,54 +486,125 @@ КонецФункции -// Создает новый экземпляр объекта Структура, заполняет объект данными указанной структуры. +// Создает копию экземпляра указанного объекта. // // Параметры: -// СтруктураИсточник – Структура – структура, копию которой необходимо получить +// Источник - Произвольный - объект, который необходимо скопировать. +// +// Возвращаемое значение: +// Произвольный - копия объекта, переданного в параметре Источник. +// +// Примечание: +// Функцию нельзя использовать для объектных типов (СправочникОбъект, ДокументОбъект и т.п.). +Функция СкопироватьРекурсивно(Источник) Экспорт + + Перем Приемник; + + ТипИсточника = ТипЗнч(Источник); + Если ТипИсточника = Тип("Структура") Тогда + Приемник = СкопироватьСтруктуру(Источник); + ИначеЕсли ТипИсточника = Тип("Соответствие") Тогда + Приемник = СкопироватьСоответствие(Источник); + ИначеЕсли ТипИсточника = Тип("Массив") Тогда + Приемник = СкопироватьМассив(Источник); + ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда + Приемник = СкопироватьСписокЗначений(Источник); + #Если Сервер Или ТолстыйКлиент Или ВнешнееСоединение Тогда + ИначеЕсли ТипИсточника = Тип("ТаблицаЗначений") Тогда + Приемник = Источник.Скопировать(); + #КонецЕсли + Иначе + Приемник = Источник; + КонецЕсли; + + Возврат Приемник; + +КонецФункции + +// Создает копию значения типа Структура. +// +// Параметры: +// СтруктураИсточник – Структура – копируемая структура. // -// Возвращаемое значение: -// Тип: Структура. +// Возвращаемое значение: +// Структура - копия исходной структуры. // Функция СкопироватьСтруктуру(СтруктураИсточник) Экспорт СтруктураРезультат = Новый Структура; - Для Каждого Элемент ИЗ СтруктураИсточник Цикл - - Если ТипЗнч(Элемент.Значение) = Тип("СписокЗначений") Тогда - СтруктураРезультат.Вставить(Элемент.Ключ, Элемент.Значение.Скопировать()); - Иначе - СтруктураРезультат.Вставить(Элемент.Ключ, Элемент.Значение); - КонецЕсли; - + Для Каждого КлючИЗначение ИЗ СтруктураИсточник Цикл + СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение)); КонецЦикла; Возврат СтруктураРезультат; КонецФункции -// Функция выполняет поиск элемента в коллекции: списке значений или массиве +// Создает копию значения типа Соответствие. // -Функция НайтиВСписке(Список, Элемент) +// Параметры: +// СоответствиеИсточник – Соответствие - соответствие, копию которого необходимо получить. +// +// Возвращаемое значение: +// Соответствие - копия исходного соответствия. +// +Функция СкопироватьСоответствие(СоответствиеИсточник) Экспорт - Перем ЭлементВСписке; + СоответствиеРезультат = Новый Соответствие; - Если ТипЗнч(Список) = Тип("СписокЗначений") Тогда - Если ТипЗнч(Элемент) = Тип("ЭлементСпискаЗначений") Тогда - ЭлементВСписке = Список.НайтиПоЗначению(Элемент.Значение); - Иначе - ЭлементВСписке = Список.НайтиПоЗначению(Элемент); - КонецЕсли; - КонецЕсли; + Для Каждого КлючИЗначение ИЗ СоответствиеИсточник Цикл + СоответствиеРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение)); + КонецЦикла; - Если ТипЗнч(Список) = Тип("Массив") Тогда - ЭлементВСписке = Список.Найти(Элемент); - КонецЕсли; - - Возврат ЭлементВСписке; - -КонецФункции // ЭлементПрисутствуетВСписке + Возврат СоответствиеРезультат; +КонецФункции + +// Создает копию значения типа Массив. +// +// Параметры: +// МассивИсточник – Массив - массив, копию которого необходимо получить. +// +// Возвращаемое значение: +// Массив - копия исходного массива. +// +Функция СкопироватьМассив(МассивИсточник) Экспорт + + МассивРезультат = Новый Массив; + + Для Каждого Элемент ИЗ МассивИсточник Цикл + МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент)); + КонецЦикла; + + Возврат МассивРезультат; + +КонецФункции + +// Создает копию значения типа СписокЗначений. +// +// Параметры: +// СписокИсточник – СписокЗначений - список значений, копию которого необходимо получить. +// +// Возвращаемое значение: +// СписокЗначений - копия исходного списка зачений. +// +Функция СкопироватьСписокЗначений(СписокИсточник) Экспорт + + СписокРезультат = Новый СписокЗначений; + + Для Каждого ЭлементСписка ИЗ СписокИсточник Цикл + СписокРезультат.Добавить( + СкопироватьРекурсивно(ЭлементСписка.Значение), + ЭлементСписка.Представление, + ЭлементСписка.Пометка, + ЭлементСписка.Картинка); + КонецЦикла; + + Возврат СписокРезультат; + +КонецФункции + // Сравнивает элементы списков значений или массивов по значениям // Функция СпискиЗначенийИдентичны(Список1, Список2) Экспорт @@ -430,190 +631,113 @@ КонецФункции // СпискиЗначенийИдентичны -// Возвращает шаблон структуры параметров для установки внешнего соединения. -// Параметрам необходимо задать требуемые значения и передать -// в метод ОбщегоНазначения.УстановитьВнешнееСоединение() +// Создает массив и помещает в него переданное значение // -Функция СтруктураПараметровДляУстановкиВнешнегоСоединения() Экспорт +Функция ЗначениеВМассиве(Значение) Экспорт - СтруктураПараметров = Новый Структура; - СтруктураПараметров.Вставить("ВариантРаботыИнформационнойБазы", 0); - СтруктураПараметров.Вставить("КаталогИнформационнойБазы", ""); - СтруктураПараметров.Вставить("ИмяСервера1СПредприятия", ""); - СтруктураПараметров.Вставить("ИмяИнформационнойБазыНаСервере1СПредприятия", ""); - СтруктураПараметров.Вставить("АутентификацияОперационнойСистемы", Ложь); - СтруктураПараметров.Вставить("ИмяПользователя", ""); - СтруктураПараметров.Вставить("ПарольПользователя", ""); + Массив = Новый Массив; + Массив.Добавить(Значение); + + Возврат Массив; - Возврат СтруктураПараметров; КонецФункции -// Извлекает из строки соединения с информационной базой параметры подключения -// и передает параметры в структуру для установки внешнего соединения. +// Процедура управляет состояние поля табличного документа // -Функция ПолучитьПараметрыПодключенияИзСтрокиСоединенияИнформационнойБазы(Знач СтрокаСоединения) Экспорт +//Параметры: +// ПолеТабличногоДокумента – ПолеФормы – поле формы с видом ПолеТабличногоДокумента, +// для которого необходимо установить состояние. +// Состояние – Строка – задает вид состояния. +// +Процедура УстановитьСостояниеПоляТабличногоДокумента(ПолеТабличногоДокумента, Состояние = "НеИспользовать") Экспорт - Результат = СтруктураПараметровДляУстановкиВнешнегоСоединения(); - - Параметры = СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(СтрокаСоединения); - - Параметры.Свойство("File", Результат.КаталогИнформационнойБазы); - Параметры.Свойство("Srvr", Результат.ИмяСервера1СПредприятия); - Параметры.Свойство("Ref", Результат.ИмяИнформационнойБазыНаСервере1СПредприятия); - - Результат.ВариантРаботыИнформационнойБазы = ?(Параметры.Свойство("File"), 0, 1); - - Возврат Результат; -КонецФункции - -// Получает идентификатор (метод ПолучитьИдентификатор()) строки дерева значений для заданного значения поля строки дерева. -// Используется для позиционирования курсора в иерархических списках. -// -Процедура ПолучитьИдентификаторСтрокиДереваПоЗначениюПоля(ИмяПоля, ИдентификаторСтроки, КоллекцияЭлементовДерева, КлючСтроки, ПрекратитьПоиск) Экспорт - - Для Каждого СтрокаДерева ИЗ КоллекцияЭлементовДерева Цикл - - Если ПрекратитьПоиск Тогда - Возврат; + Если ТипЗнч(ПолеТабличногоДокумента) = Тип("ПолеФормы") + И ПолеТабличногоДокумента.Вид = ВидПоляФормы.ПолеТабличногоДокумента Тогда + ОтображениеСостояния = ПолеТабличногоДокумента.ОтображениеСостояния; + Если ВРег(Состояние) = "НЕИСПОЛЬЗОВАТЬ" Тогда + ОтображениеСостояния.Видимость = Ложь; + ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать; + ОтображениеСостояния.Картинка = Новый Картинка; + ОтображениеСостояния.Текст = ""; + ИначеЕсли ВРег(Состояние) = "НЕАКТУАЛЬНОСТЬ" Тогда + ОтображениеСостояния.Видимость = Истина; + ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; + ОтображениеСостояния.Картинка = Новый Картинка; + ОтображениеСостояния.Текст = НСтр("ru = 'Отчет не сформирован. Нажмите ""Сформировать"" для получения отчета.'");; + ИначеЕсли ВРег(Состояние) = "ФОРМИРОВАНИЕОТЧЕТА" Тогда + ОтображениеСостояния.Видимость = Истина; + ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; + ОтображениеСостояния.Картинка = БиблиотекаКартинок.ДлительнаяОперация48; + ОтображениеСостояния.Текст = НСтр("ru = 'Отчет формируется...'"); + Иначе + ВызватьИсключение(НСтр("ru = 'Недопустимое значение параметра (параметр номер ''2'')'")); КонецЕсли; - - Если СтрокаДерева[ИмяПоля] = КлючСтроки Тогда - - ИдентификаторСтроки = СтрокаДерева.ПолучитьИдентификатор(); - - ПрекратитьПоиск = Истина; - - Возврат; - - КонецЕсли; - - КоллекцияЭлементов = СтрокаДерева.ПолучитьЭлементы(); - - Если КоллекцияЭлементов.Количество() > 0 Тогда - - ПолучитьИдентификаторСтрокиДереваПоЗначениюПоля(ИмяПоля, ИдентификаторСтроки, КоллекцияЭлементов, КлючСтроки, ПрекратитьПоиск); - - КонецЕсли; - - КонецЦикла; + Иначе + ВызватьИсключение(НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1'')'")); + КонецЕсли; КонецПроцедуры -// Заменяет недопустимые символы в XML-строке на заданные символы +// Получает номер версии конфигурации без номера сборки // // Параметры: -// Текст – Строка – строка, в которой требуется выполнить замену недопустимых символов. -// СимволЗамены – Строка – строка, на которую требуется выполнить замену недопустимого символа в XML-строке +// Версия - Строка - версия конфигурации в формате РР.ПП.ЗЗ.СС, +// где СС – номер сборки, который будет удален // // Возвращаемое значение: -// Строка - cтрока, полученная заменой недопустимых символов в XML-строке. +// Строка - номер версии конфигурации без номера сборки в формате РР.ПП.ЗЗ // -Функция ЗаменитьНедопустимыеСимволыXML(Знач Текст, СимволЗамены = " ") Экспорт +Функция ВерсияКонфигурацииБезНомераСборки(Знач Версия) Экспорт -#Если НЕ ВебКлиент Тогда - ПозицияНачала = 1; - Пока Истина Цикл - Позиция = НайтиНедопустимыеСимволыXML(Текст, ПозицияНачала); - Если Позиция = 0 Тогда - Прервать; - КонецЕсли; - // Если возращается позиция, больше чем должна быть, то корректируем ее. - Если Позиция > 1 Тогда - НедопустимыйСимвол = Сред(Текст, Позиция - 1, 1); - Если НайтиНедопустимыеСимволыXML(НедопустимыйСимвол) > 0 Тогда - Текст = СтрЗаменить(Текст, НедопустимыйСимвол, СимволЗамены); - КонецЕсли; - КонецЕсли; - НедопустимыйСимвол = Сред(Текст, Позиция, 1); - Если НайтиНедопустимыеСимволыXML(НедопустимыйСимвол) > 0 Тогда - Текст = СтрЗаменить(Текст, НедопустимыйСимвол, СимволЗамены); - КонецЕсли; - ПозицияНачала = Позиция + 1; - КонецЦикла; -#КонецЕсли - - Возврат Текст; -КонецФункции - -// Удаляет недопустимые символы в XML-строке. -// -// Параметры: -// Текст – Строка – строка, в которой требуется удалить недопустимые символы. -// -// Возвращаемое значение: -// Тип: Строка. Строка, полученная при удалении недопустимых символов в XML-строке. -// -Функция УдалитьНедопустимыеСимволыXML(Знач Текст) Экспорт + Массив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Версия, "."); - Возврат ЗаменитьНедопустимыеСимволыXML(Текст, ""); + Если Массив.Количество() < 3 Тогда + Возврат Версия; + КонецЕсли; -КонецФункции - -// Сравнивает расписания между собой. -// -// Параметры -// Расписание1, Расписание2 - РасписаниеРегламентногоЗадания -// -// Возвращаемое значение -// Булево - истина, если расписания идентичны, иначе ложь. -Функция РасписанияОдинаковые(Знач Расписание1, Знач Расписание2) Экспорт - Расписание1 = РасписаниеВСтруктуру(Расписание1); - Расписание2 = РасписаниеВСтруктуру(Расписание2); - - Для Каждого РеквизитРасписания Из Расписание1 Цикл - Если ТипЗнч(РеквизитРасписания.Значение) <> Тип("Массив") Тогда - Если РеквизитРасписания.Значение <> Расписание2[РеквизитРасписания.Ключ] Тогда - Возврат Ложь; - КонецЕсли; - Иначе - Если РеквизитРасписания.Значение.Количество() <> Расписание2[РеквизитРасписания.Ключ].Количество() Тогда - Возврат Ложь; - КонецЕсли; - - Для НомерЭлемента = 0 По РеквизитРасписания.Значение.Количество()-1 Цикл - Если РеквизитРасписания.Ключ = "ДетальныеРасписанияДня" Тогда - Если Не РасписанияОдинаковые(РеквизитРасписания.Значение[НомерЭлемента],Расписание2[РеквизитРасписания.Ключ][НомерЭлемента]) Тогда - Возврат Ложь; - КонецЕсли; - Иначе - Если РеквизитРасписания.Значение[НомерЭлемента] <> Расписание2[РеквизитРасписания.Ключ][НомерЭлемента] Тогда - Возврат Ложь; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЦикла; - - Возврат Истина; -КонецФункции - -// Удаляет заданный литерал (префикс) в именах ключей переданной структуры. -// Создает новую структуру. -// -// Параметры: -// Структура. Тип: Структура. -// Структура элементов, на основании которой необходимо создать новую структуру с ключами без заданного литерала. -// -// Литерал. Тип: Строка. -// Строка символов, которую необходимо исключить из имени ключей переданной структуры. -// -// Возвращающее значение: -// Тип. Структура. -// Возвращаемая структура получается на основании копирования исходной структуры. -// -Функция УдалитьПрефиксВКлючахКоллекции(Структура, Литерал) Экспорт - - Результат = Новый Структура; - - Для Каждого Элемент Из Структура Цикл - - Результат.Вставить(СтрЗаменить(Элемент.Ключ, Литерал, ""), Элемент.Значение); - - КонецЦикла; + Результат = "[Редакция].[Подредакция].[Релиз]"; + Результат = СтрЗаменить(Результат, "[Редакция]", Массив[0]); + Результат = СтрЗаменить(Результат, "[Подредакция]", Массив[1]); + Результат = СтрЗаменить(Результат, "[Релиз]", Массив[2]); Возврат Результат; КонецФункции +// Сравнить две строки версий. +// +// Параметры +// СтрокаВерсии1 – Строка – номер версии в формате РР.{П|ПП}.ЗЗ.СС +// СтрокаВерсии2 – Строка – второй сравниваемый номер версии +// +// Возвращаемое значение: +// Число – больше 0, если СтрокаВерсии1 > СтрокаВерсии2; 0, если версии равны. +// +Функция СравнитьВерсии(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Экспорт + + Строка1 = ?(ПустаяСтрока(СтрокаВерсии1), "0.0.0.0", СтрокаВерсии1); + Строка2 = ?(ПустаяСтрока(СтрокаВерсии2), "0.0.0.0", СтрокаВерсии2); + Версия1 = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка1, "."); + Если Версия1.Количество() <> 4 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неправильный формат строки версии: %1'"), СтрокаВерсии1); + КонецЕсли; + Версия2 = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка2, "."); + Если Версия2.Количество() <> 4 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неправильный формат строки версии: %1'"), СтрокаВерсии2); + КонецЕсли; + + Результат = 0; + Для Разряд = 0 По 3 Цикл + Результат = Число(Версия1[Разряд]) - Число(Версия2[Разряд]); + Если Результат <> 0 Тогда + Возврат Результат; + КонецЕсли; + КонецЦикла; + Возврат Результат; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Функции для поддержки формирования печатных форм // @@ -653,7 +777,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Функции для работы с файловой системой +// Функции для работы с файлами // // Процедура УдалитьКаталогСФайлами удаляет все файлы в заданном каталоге. @@ -672,40 +796,66 @@ КонецПроцедуры // УдалитьКаталогСФайлами() -// Добавляет к переданному пути каталога конечный символ-разделитель, -// если необходимо. +// Добавляет к переданному пути каталога конечный символ-разделитель, если он отсутствует. +// В случае, когда параметр "Платформа" не указан, разделитель выбирается, исходя из уже имеющихся +// разделителей в параметре "ПутьКаталога". // -// Параметры -// ПутьКаталога - Строка - путь к каталогу +// Параметры: +// ПутьКаталога - Строка - путь к каталогу; +// Платформа - ТипПлатформы - тип платформы, в рамках которой осуществляется работа (влияет на выбор разделителя). // // Возвращаемое значение: -// Строка - путь к каталогу с конечным символом-разделителем. +// Строка - путь к каталогу с конечным символом-разделителем. // // Примеры использования: -// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог"); // возвращает "C:\Мой каталог\" -// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог\"); // возвращает "C:\Мой каталог\" -// Результат = ДобавитьКонечныйРазделительПути("ftp://Мой каталог"); // возвращает "ftp://Мой каталог/" +// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог"); // возвращает "C:\Мой каталог\" +// Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог\"); // возвращает "C:\Мой каталог\" +// Результат = ДобавитьКонечныйРазделительПути("ftp://Мой каталог"); // возвращает "ftp://Мой каталог/" +// Результат = ДобавитьКонечныйРазделительПути("%APPDATA%", ТипПлатформы.Windows_x86_64); // возвращает "%APPDATA%\" // -Функция ДобавитьКонечныйРазделительПути(Знач ПутьКаталога) Экспорт +Функция ДобавитьКонечныйРазделительПути(Знач ПутьКаталога, Знач Платформа = Неопределено) Экспорт + Если ПустаяСтрока(ПутьКаталога) Тогда Возврат ПутьКаталога; КонецЕсли; ДобавляемыйСимвол = "\"; - Если Найти(ПутьКаталога, "/") > 0 Тогда - ДобавляемыйСимвол = "/"; + Если Платформа = Неопределено Тогда + Если Найти(ПутьКаталога, "/") > 0 Тогда + ДобавляемыйСимвол = "/"; + КонецЕсли; + Иначе + Если Платформа = ТипПлатформы.Linux_x86 Или Платформа = ТипПлатформы.Linux_x86_64 Тогда + ДобавляемыйСимвол = "/"; + КонецЕсли; КонецЕсли; - Длина = СтрДлина(ПутьКаталога); - Если Длина = 0 Тогда - Возврат ДобавляемыйСимвол; - ИначеЕсли Сред(ПутьКаталога, Длина, 1) <> ДобавляемыйСимвол Тогда + Если Прав(ПутьКаталога, 1) <> ДобавляемыйСимвол Тогда Возврат ПутьКаталога + ДобавляемыйСимвол; Иначе Возврат ПутьКаталога; КонецЕсли; + КонецФункции +// добавляет в конце "\" или "/" +Процедура ДобавитьСлешЕслиНужно(НовыйПуть, ТипПлатформыТекущий) Экспорт + + Если СтрДлина(НовыйПуть) = 0 Тогда + Возврат; + КонецЕсли; + + Если Прав(НовыйПуть, 1) <> "\" И Прав(НовыйПуть,1) <> "/" Тогда + + Если ТипПлатформыТекущий = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыТекущий = ТипПлатформы.Windows_x86_64 Тогда + НовыйПуть = НовыйПуть + "\"; + Иначе + НовыйПуть = НовыйПуть + "/"; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + // Составляет полное имя файла из имени каталога и имени файла. // // Параметры @@ -814,11 +964,12 @@ КонецФункции // Возвращает строку недопустимых символов +// Согласно http://en.wikipedia.org/wiki/Filename - в разделе "Reserved characters and words" // Возвращаемое значение: // Строка - строка недопустимых символов Функция ПолучитьНедопустимыеСимволыВИмениФайла() Экспорт - НедопустимыеСимволы = """/\[]:;|=,?*<>"; + НедопустимыеСимволы = """/\[]:;|=?*<>"; Возврат НедопустимыеСимволы; КонецФункции @@ -868,9 +1019,185 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Блок функций для работы с почтовыми адресами +// Функции для работы с почтовыми адресами // +// Разбирает строку с адресами электронной почты согласно стандарту RFC 5322 с ограничениями. +// +// Ограничения: +// 1. В адресе разрешаются только буквы, цифры, символ подчеркивания, дефис и символ "@". +// 2. Символы скобок "<>[]()" допускаются, но игнорируются путём замены на пробелы. +// 3. Группы запрещены. +// +// Параметры: +// Строка - Строка - Строка, содержащая электронные адреса (mailbox-list). +// +// Возвращаемое значение: +// Массив - содержит массив структур адресов. +// Поля структуры: +// Псевдоним - Строка - представление адресата. +// Адрес - Строка - найденный и соответствующий требованиям почтовый адрес; +// Если текст, похожий на адрес найден, но не соответствует требованиям +// стандартов, то такой текст записывается в поле "Псевдоним". +// ОписаниеОшибки - Строка - текстовое представление ошибки, либо пустая строка, если ошибок нет. +Функция АдресаЭлектроннойПочтыИзСтроки(Знач Строка) Экспорт + + Результат = Новый Массив; + + // заменяем скобки на пробелы + СимволыСкобок = "<>()[]"; + Строка = ЗаменитьСимволыВСтрокеНаПробелы(Строка, СимволыСкобок); + + // приводим разделители к одному виду + Строка = СтрЗаменить(Строка, ",", ";"); + + // раскладываем mailbox-list на mailbox'ы + МассивАдресов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка, ";", Истина); + + // допустимые символы для псевдонима (display-name) + Буквы = "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя"; + Цифры = "0123456789"; + ДополнительныеСимволы = "._- "; + + // выделяем из строки адреса (mailbox'а) псевдоним (display-name) и адрес (addr-spec) + Для Каждого СтрокаАдреса Из МассивАдресов Цикл + + Псевдоним = ""; + Адрес = ""; + ОписаниеОшибки = ""; + + Если СтрЧислоВхождений(СтрокаАдреса, "@") <> 1 Тогда + Псевдоним = СтрокаАдреса; + Иначе + // всё, что не подходит в качестве адреса, складываем в псевдоним + Для Каждого Подстрока Из СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаАдреса, " ") Цикл + Если ПустаяСтрока(Адрес) и АдресЭлектроннойПочтыСоответствуетТребованиям(Подстрока) Тогда + Адрес = Подстрока; + Иначе + Псевдоним = Псевдоним + " " + Подстрока; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Псевдоним = СокрЛП(Псевдоним); + + // проверки + ЕстьНедопустимыеСимволыВПсевдониме = Не СтрокаСодержитТолькоДопустимыеСимволы(НРег(Псевдоним), Буквы + Цифры + ДополнительныеСимволы); + АдресОпределен = Не ПустаяСтрока(Адрес); + ЕстьПризнакНаличияАдресаВСтроке = Найти(СтрокаАдреса, "@") > 0; + + Если АдресОпределен Тогда + Если ЕстьНедопустимыеСимволыВПсевдониме Тогда + ОписаниеОшибки = НСтр("ru = 'Представление содержит недопустимые символы'"); + КонецЕсли; + Иначе + Если ЕстьПризнакНаличияАдресаВСтроке Тогда + ОписаниеОшибки = НСтр("ru = 'Адрес электронной почты содержит ошибки'"); + Иначе + ОписаниеОшибки = НСтр("ru = 'Строка не содержит адреса электронной почты'"); + КонецЕсли; + КонецЕсли; + + СтруктураАдреса = Новый Структура("Псевдоним,Адрес,ОписаниеОшибки", Псевдоним, Адрес, ОписаниеОшибки); + Результат.Добавить(СтруктураАдреса); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Проверяет email адрес на соответствие требованиям стандартов RFC 5321, RFC 5322, +// а также RFC 5335, RFC 5336 и RFC 3696. +// Кроме того, функция ограничивает использование спецсимволов. +// +// Параметры: +// Адрес - Строка - проверяемый email. +// +// Возвращаемое значение: +// Булево - Истина, если ошибок нет. +// +Функция АдресЭлектроннойПочтыСоответствуетТребованиям(Знач Адрес) Экспорт + + // допустимые символы для email + Буквы = "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя"; + Цифры = "0123456789"; + СпецСимволы = ".@_-"; + + // проверяем любые сочетания спецсимволов + Если СтрДлина(СпецСимволы) > 1 Тогда + Для Позиция1 = 1 По СтрДлина(СпецСимволы)-1 Цикл + Символ1 = Сред(СпецСимволы, Позиция1, 1); + Для Позиция2 = Позиция1 + 1 По СтрДлина(СпецСимволы) Цикл + Символ2 = Сред(СпецСимволы, Позиция2, 1); + Комбинация1 = Символ1 + Символ2; + Комбинация2 = Символ2 + Символ1; + Если Найти(Адрес, Комбинация1) > 0 или Найти(Адрес, Комбинация2) > 0 Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЕсли; + + // проверяем символ @ + Если СтрЧислоВхождений(Адрес, "@") <> 1 Тогда + Возврат Ложь; + КонецЕсли; + + // проверяем две точки подряд + Если Найти(Адрес, "..") > 0 Тогда + Возврат Ложь; + КонецЕсли; + + // приводим строку адреса к нижнему регистру + Адрес = НРег(Адрес); + + // проверяем допустимые символы + Если Не СтрокаСодержитТолькоДопустимыеСимволы(Адрес, Буквы + Цифры + СпецСимволы) Тогда + Возврат Ложь; + КонецЕсли; + + // разбираем адрес на local-part и domain + Позиция = Найти(Адрес,"@"); + ЛокальноеИмя = Лев(Адрес, Позиция - 1); + Домен = Сред(Адрес, Позиция + 1); + + // проверяем на заполненность и допустимость длины + Если ПустаяСтрока(ЛокальноеИмя) + или ПустаяСтрока(Домен) + или СтрДлина(ЛокальноеИмя) > 64 + или СтрДлина(Домен) > 255 Тогда + + Возврат Ложь; + КонецЕсли; + + // проверяем наличие спецсимволов в начале и в конце частей адреса + Если ЕстьСимволыВНачалеВКонце(ЛокальноеИмя, СпецСимволы) или ЕстьСимволыВНачалеВКонце(Домен, СпецСимволы) Тогда + Возврат Ложь; + КонецЕсли; + + // в домене должна быть минимум одна точка + Если Найти(Домен,".") = 0 Тогда + Возврат Ложь; + КонецЕсли; + + // в домене не должно быть символа подчеркивания + Если Найти(Домен,"_") > 0 Тогда + Возврат Ложь; + КонецЕсли; + + // выделяем зону (TLD) из имени домена + Зона = Домен; + Позиция = Найти(Зона,"."); + Пока Позиция > 0 Цикл + Зона = Сред(Зона, Позиция + 1); + Позиция = Найти(Зона,"."); + КонецЦикла; + + // проверяем зону домена (минимум 2 символа, только буквы) + Возврат СтрДлина(Зона) >= 2 и СтрокаСодержитТолькоДопустимыеСимволы(Зона,Буквы); + +КонецФункции + // Функция проверяет что введенная строка с e-mail адресами введена правильно // // Формат строки: @@ -905,7 +1232,7 @@ СообщениеНедопустимыеСимволы = НСтр("ru = 'Недопустимый символ %1 в адресе электронной почты %2'"); СообщениеНеверныйФорматПочтовогоАдреса = НСтр("ru = 'Некорректный адрес электронной почты %1'"); - МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаПереданныхАдресов,";", Истина); + МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаПереданныхАдресов,";",Истина); МассивПодстрокКОбработке = Новый Массив; Для каждого ЭлементМассива Из МассивПодстрок Цикл @@ -1003,359 +1330,6 @@ КонецФункции -// Проверяет, что почтовый адрес не содержит символов обрамления -// если символы обрамления вставлены правильно убирает их -// Параметры: -// ПолноеИмяАдресата - строка - имя получателя -// ПочтовыйАдрес - строка - email адрес -// Возвращаемое значение: -// Структура: -// Ключ статус - булево - успех или неуспех операции -// СообщениеОбОшибке - в случае неуспеха операции содержит сообщение об ошибке -// Значение - структура - в случае успеха операции содержит записанную структуру почтового -// адреса: ключи - Адрес, Представление (строки) -// -Функция ПроверитьИПодготовитьПочтовыйАдрес(знач ПолноеИмяАдресата, знач ПочтовыйАдрес) - - НедопустимыйСимволВИмениАдресата = НСтр("ru = 'Недопустимый символ в имени адресата.'"); - НедопустимыйСимволВПочтовомАдресе = НСтр("ru = 'Недопустимый символ в почтовом адресе.'"); - СимволыОбрамления = "<>[]"; - - ПочтовыйАдрес = СокрЛП(ПочтовыйАдрес); - ПолноеИмяАдресата = СокрЛП(ПолноеИмяАдресата); - - Если Лев(ПолноеИмяАдресата, 1) = "<" Тогда - Если Прав(ПолноеИмяАдресата, 1) = ">" Тогда - ПолноеИмяАдресата = Сред(ПолноеИмяАдресата, 2, СтрДлина(ПолноеИмяАдресата)-2); - Иначе - ВызватьИсключение НедопустимыйСимволВИмениАдресата; - КонецЕсли; - ИначеЕсли Лев(ПолноеИмяАдресата, 1) = "[" Тогда - Если Прав(ПолноеИмяАдресата, 1) = "]" Тогда - ПолноеИмяАдресата = Сред(ПолноеИмяАдресата, 2, СтрДлина(ПолноеИмяАдресата)-2); - Иначе - ВызватьИсключение НедопустимыйСимволВИмениАдресата; - КонецЕсли; - КонецЕсли; - - Если Лев(ПочтовыйАдрес, 1) = "<" Тогда - Если Прав(ПочтовыйАдрес, 1) = ">" Тогда - ПочтовыйАдрес = Сред(ПочтовыйАдрес, 2, СтрДлина(ПочтовыйАдрес)-2); - Иначе - ВызватьИсключение НедопустимыйСимволВПочтовомАдресе; - КонецЕсли; - ИначеЕсли Лев(ПочтовыйАдрес, 1) = "[" Тогда - Если Прав(ПочтовыйАдрес, 1) = "]" Тогда - ПочтовыйАдрес = Сред(ПочтовыйАдрес, 2, СтрДлина(ПочтовыйАдрес)-2); - Иначе - ВызватьИсключение НедопустимыйСимволВПочтовомАдресе; - КонецЕсли; - КонецЕсли; - - Для Индекс = 1 По СтрДлина(СимволыОбрамления) Цикл - Если Найти(ПолноеИмяАдресата, Сред(СимволыОбрамления, Индекс, 1)) <> 0 - ИЛИ Найти(ПочтовыйАдрес, Сред(СимволыОбрамления, Индекс, 1)) <> 0 Тогда - ВызватьИсключение НедопустимыйСимволВПочтовомАдресе; - КонецЕсли; - КонецЦикла; - - Возврат Новый Структура("Адрес, Представление", ПочтовыйАдрес,ПолноеИмяАдресата); - -КонецФункции - -// Разбирает строку с адресами электронной почты согласно стандарту RFC 5322 с ограничениями. -// -// Ограничения: -// 1. В адресе разрешаются только буквы, цифры, символ подчеркивания, дефис и символ "@". -// 2. Символы скобок "<>[]()" допускаются, но игнорируются путём замены на пробелы. -// 3. Группы запрещены. -// -// Параметры: -// Строка - Строка - Строка, содержащая электронные адреса (mailbox-list). -// -// Возвращаемое значение: -// Массив - содержит массив структур адресов. -// Поля структуры: -// Псевдоним - Строка - представление адресата. -// Адрес - Строка - найденный и соответствующий требованиям почтовый адрес; -// Если текст, похожий на адрес найден, но не соответствует требованиям -// стандартов, то такой текст записывается в поле "Псевдоним". -// ОписаниеОшибки - Строка - текстовое представление ошибки, либо пустая строка, если ошибок нет. -Функция АдресаЭлектроннойПочтыИзСтроки(Знач Строка) Экспорт - - Результат = Новый Массив; - - // заменяем скобки на пробелы - СимволыСкобок = "<>()[]"; - Строка = ЗаменитьСимволыВСтрокеНаПробелы(Строка, СимволыСкобок); - - // приводим разделители к одному виду - Строка = СтрЗаменить(Строка, ",", ";"); - - // раскладываем mailbox-list на mailbox'ы - МассивАдресов = РазложитьСтрокуНаМассивПодстрок(Строка); - - // допустимые символы для псевдонима (display-name) - Буквы = "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя"; - Цифры = "0123456789"; - ДополнительныеСимволы = "._- "; - - // выделяем из строки адреса (mailbox'а) псевдоним (display-name) и адрес (addr-spec) - Для Каждого СтрокаАдреса Из МассивАдресов Цикл - - Псевдоним = ""; - Адрес = ""; - ОписаниеОшибки = ""; - - Если СтрЧислоВхождений(СтрокаАдреса, "@") <> 1 Тогда - Псевдоним = СтрокаАдреса; - Иначе - // всё, что не подходит в качестве адреса, складываем в псевдоним - Для Каждого Подстрока Из РазложитьСтрокуНаМассивПодстрок(СтрокаАдреса, " ") Цикл - Если ПустаяСтрока(Адрес) и АдресЭлектроннойПочтыСоответствуетТребованиям(Подстрока) Тогда - Адрес = Подстрока; - Иначе - Псевдоним = Псевдоним + " " + Подстрока; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Псевдоним = СокрЛП(Псевдоним); - - // проверки - Если ПустаяСтрока(ОписаниеОшибки) Тогда - ЕстьНедопустимыеСимволыВПсевдониме = Не СтрокаСодержитТолькоДопустимыеСимволы(НРег(Псевдоним), Буквы + Цифры + ДополнительныеСимволы); - АдресОпределен = Не ПустаяСтрока(Адрес); - ЕстьПризнакНаличияАдресаВСтроке = Найти(СтрокаАдреса, "@") > 0; - - Если АдресОпределен Тогда - Если ЕстьНедопустимыеСимволыВПсевдониме Тогда - ОписаниеОшибки = НСтр("ru = 'Представление содержит недопустимые символы'"); - КонецЕсли; - Иначе - Если ЕстьПризнакНаличияАдресаВСтроке Тогда - ОписаниеОшибки = НСтр("ru = 'Адрес электронной почты содержит ошибки'"); - Иначе - ОписаниеОшибки = НСтр("ru = 'Строка не содержит адреса электронной почты'"); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - СтруктураАдреса = Новый Структура("Псевдоним,Адрес,ОписаниеОшибки", Псевдоним, Адрес, ОписаниеОшибки); - Результат.Добавить(СтруктураАдреса); - КонецЦикла; - - Возврат Результат; - -КонецФункции - -Функция ЗаменитьСимволыВСтрокеНаПробелы(Строка, ЗаменяемыеСимволы) - Результат = Строка; - Для Позиция = 1 по СтрДлина(Символы) Цикл - Результат = СтрЗаменить(Результат, Сред(ЗаменяемыеСимволы, Позиция, 1), " "); - КонецЦикла; - Возврат Результат; -КонецФункции - -Функция РазложитьСтрокуНаМассивПодстрок(Знач Строка, Разделитель = ";", ПропускатьПустыеСтроки = Истина) - - Результат = Новый Массив; - - Позиция = Найти(Строка, Разделитель); - Пока Позиция > 0 Цикл - Подстрока = Лев(Строка, Позиция - 1); - Если Не ПустаяСтрока(Подстрока) или не ПропускатьПустыеСтроки Тогда - Результат.Добавить(Подстрока); - КонецЕсли; - Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); - Позиция = Найти(Строка, Разделитель); - КонецЦикла; - - Результат.Добавить(Строка); - - Возврат Результат; - -КонецФункции - -// Проверяет email адрес на соответствие требованиям стандартов RFC 5321, RFC 5322, -// а также RFC 5335, RFC 5336 и RFC 3696. -// Кроме того, функция ограничивает использование спецсимволов. -// -// Параметры: -// Адрес - Строка - проверяемый email. -// -// Возвращаемое значение: -// Булево - Истина, если ошибок нет. -// -Функция АдресЭлектроннойПочтыСоответствуетТребованиям(Знач Адрес) Экспорт - - // допустимые символы для email - Буквы = "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя"; - Цифры = "0123456789"; - СпецСимволы = ".@_-"; - - // проверяем любые сочетания спецсимволов - Если СтрДлина(СпецСимволы) > 1 Тогда - Для Позиция1 = 1 По СтрДлина(СпецСимволы)-1 Цикл - Символ1 = Сред(СпецСимволы, Позиция1, 1); - Для Позиция2 = Позиция1 + 1 По СтрДлина(СпецСимволы) Цикл - Символ2 = Сред(СпецСимволы, Позиция2, 1); - Комбинация1 = Символ1 + Символ2; - Комбинация2 = Символ2 + Символ1; - Если Найти(Адрес, Комбинация1) > 0 или Найти(Адрес, Комбинация2) > 0 Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЕсли; - - // проверяем символ @ - Если СтрЧислоВхождений(Адрес, "@") <> 1 Тогда - Возврат Ложь; - КонецЕсли; - - // проверяем две точки подряд - Если Найти(Адрес, "..") > 0 Тогда - Возврат Ложь; - КонецЕсли; - - // приводим строку адреса к нижнему регистру - Адрес = НРег(Адрес); - - // проверяем допустимые символы - Если Не СтрокаСодержитТолькоДопустимыеСимволы(Адрес, Буквы + Цифры + СпецСимволы) Тогда - Возврат Ложь; - КонецЕсли; - - // разбираем адрес на local-part и domain - Позиция = Найти(Адрес,"@"); - ЛокальноеИмя = Лев(Адрес, Позиция - 1); - Домен = Сред(Адрес, Позиция + 1); - - // проверяем на заполненность и допустимость длины - Если ПустаяСтрока(ЛокальноеИмя) - или ПустаяСтрока(Домен) - или СтрДлина(ЛокальноеИмя) > 64 - или СтрДлина(Домен) > 255 Тогда - - Возврат Ложь; - КонецЕсли; - - // проверяем наличие спецсимволов в начале и в конце частей адреса - Если ЕстьСимволыВНачалеВКонце(ЛокальноеИмя, СпецСимволы) или ЕстьСимволыВНачалеВКонце(Домен, СпецСимволы) Тогда - Возврат Ложь; - КонецЕсли; - - // в домене должна быть минимум одна точка - Если Найти(Домен,".") = 0 Тогда - Возврат Ложь; - КонецЕсли; - - // в домене не должно быть символа подчеркивания - Если Найти(Домен,"_") > 0 Тогда - Возврат Ложь; - КонецЕсли; - - // выделяем зону (TLD) из имени домена - Зона = Домен; - Позиция = Найти(Зона,"."); - Пока Позиция > 0 Цикл - Зона = Сред(Зона, Позиция + 1); - Позиция = Найти(Зона,"."); - КонецЦикла; - - // проверяем зону домена (минимум 2 символа, только буквы) - Возврат СтрДлина(Зона) >= 2 и СтрокаСодержитТолькоДопустимыеСимволы(Зона,Буквы); - -КонецФункции - -Функция ЕстьСимволыВНачалеВКонце(Строка, ПроверяемыеСимволы) - Для Позиция = 1 По СтрДлина(ПроверяемыеСимволы) Цикл - Символ = Сред(ПроверяемыеСимволы, Позиция, 1); - СимволНайден = (Лев(Строка,1) = Символ) или (Прав(Строка,1) = Символ); - Если СимволНайден Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - Возврат Ложь; -КонецФункции - -Функция СтрокаСодержитТолькоДопустимыеСимволы(Строка, ДопустимыеСимволы) - МассивСимволов = Новый Массив; - Для Позиция = 1 по СтрДлина(ДопустимыеСимволы) Цикл - МассивСимволов.Добавить(Сред(ДопустимыеСимволы,Позиция,1)); - КонецЦикла; - - Для Позиция = 1 по СтрДлина(Строка) Цикл - Если МассивСимволов.Найти(Сред(Строка, Позиция, 1)) = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - - Возврат Истина; -КонецФункции - -// Формирует структуру с ключами Статус (Истина) и Значение -// -Функция ЗаполнитьРезультат(знач Значение, знач Статус = Истина) Экспорт - - Если Статус Тогда - Возврат Новый Структура("Статус, Значение", Истина, Значение); - Иначе - Возврат Новый Структура("Статус, СообщениеОбОшибке", Ложь, Значение); - КонецЕсли; - -КонецФункции - -// Сдвигает маркер позиции пока встречается символ Символ -// возвращает номер позиции в строке, на которое установился маркер -// -Функция ПропуститьПробелы(знач Строка, - знач ТекущийИндекс, - знач ПропускаемыйСимвол) - - Результат = ТекущийИндекс; - - // убираем лишние пробелы если они есть - Пока ТекущийИндекс < СтрДлина(Строка) Цикл - Если Сред(Строка, ТекущийИндекс, 1) <> ПропускаемыйСимвол Тогда - Возврат ТекущийИндекс; - КонецЕсли; - ТекущийИндекс = ТекущийИндекс + 1; - КонецЦикла; - - Возврат ТекущийИндекс; - -КонецФункции - -#Если Не ВебКлиент Тогда -// Возвращает полный путь к новому каталогу в каталоге временных файлов. -// -// Параметры: -// Идентификатор - Строка, начальная часть имени каталога во временном каталоге. -// -// Возвращаемое значение: -// Строка - полное имя временного каталога, например "КаталогВременныхФайлов() + Обработка123\". -// -Функция ПолучитьИмяКаталога(знач Идентификатор) Экспорт - - Индекс = 0; - - Пока Истина Цикл - - ПутьККаталогу = КаталогВременныхФайлов () + Идентификатор + строка(Индекс) + "/"; - КаталогНаДиске = Новый Файл(ПутьККаталогу); - Если НЕ КаталогНаДиске.Существует() Тогда - СоздатьКаталог(ПутьККаталогу); - Возврат ПутьККаталогу; - КонецЕсли; - Индекс = Индекс + 1; - - КонецЦикла; - -КонецФункции // ПолучитьИмяКаталога() -#КонецЕсли - //////////////////////////////////////////////////////////////////////////////// // Функции для работы с отборами динамических списков // @@ -1664,6 +1638,167 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Прочие функции +// + +// Возвращает шаблон структуры параметров для установки внешнего соединения. +// Параметрам необходимо задать требуемые значения и передать +// в метод ОбщегоНазначения.УстановитьВнешнееСоединение() +// +Функция СтруктураПараметровДляУстановкиВнешнегоСоединения() Экспорт + + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("ВариантРаботыИнформационнойБазы", 0); + СтруктураПараметров.Вставить("КаталогИнформационнойБазы", ""); + СтруктураПараметров.Вставить("ИмяСервера1СПредприятия", ""); + СтруктураПараметров.Вставить("ИмяИнформационнойБазыНаСервере1СПредприятия", ""); + СтруктураПараметров.Вставить("АутентификацияОперационнойСистемы", Ложь); + СтруктураПараметров.Вставить("ИмяПользователя", ""); + СтруктураПараметров.Вставить("ПарольПользователя", ""); + + Возврат СтруктураПараметров; +КонецФункции + +// Извлекает из строки соединения с информационной базой параметры подключения +// и передает параметры в структуру для установки внешнего соединения. +// +Функция ПолучитьПараметрыПодключенияИзСтрокиСоединенияИнформационнойБазы(Знач СтрокаСоединения) Экспорт + + Результат = СтруктураПараметровДляУстановкиВнешнегоСоединения(); + + Параметры = СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(СтрокаСоединения); + + Параметры.Свойство("File", Результат.КаталогИнформационнойБазы); + Параметры.Свойство("Srvr", Результат.ИмяСервера1СПредприятия); + Параметры.Свойство("Ref", Результат.ИмяИнформационнойБазыНаСервере1СПредприятия); + + Результат.ВариантРаботыИнформационнойБазы = ?(Параметры.Свойство("File"), 0, 1); + + Возврат Результат; +КонецФункции + +// Получает идентификатор (метод ПолучитьИдентификатор()) строки дерева значений для заданного значения поля строки дерева. +// Используется для позиционирования курсора в иерархических списках. +// +Процедура ПолучитьИдентификаторСтрокиДереваПоЗначениюПоля(ИмяПоля, ИдентификаторСтроки, КоллекцияЭлементовДерева, КлючСтроки, ПрекратитьПоиск) Экспорт + + Для Каждого СтрокаДерева ИЗ КоллекцияЭлементовДерева Цикл + + Если ПрекратитьПоиск Тогда + Возврат; + КонецЕсли; + + Если СтрокаДерева[ИмяПоля] = КлючСтроки Тогда + + ИдентификаторСтроки = СтрокаДерева.ПолучитьИдентификатор(); + + ПрекратитьПоиск = Истина; + + Возврат; + + КонецЕсли; + + КоллекцияЭлементов = СтрокаДерева.ПолучитьЭлементы(); + + Если КоллекцияЭлементов.Количество() > 0 Тогда + + ПолучитьИдентификаторСтрокиДереваПоЗначениюПоля(ИмяПоля, ИдентификаторСтроки, КоллекцияЭлементов, КлючСтроки, ПрекратитьПоиск); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Заменяет недопустимые символы в XML-строке на заданные символы +// +// Параметры: +// Текст – Строка – строка, в которой требуется выполнить замену недопустимых символов. +// СимволЗамены – Строка – строка, на которую требуется выполнить замену недопустимого символа в XML-строке +// +// Возвращаемое значение: +// Строка - cтрока, полученная заменой недопустимых символов в XML-строке. +// +Функция ЗаменитьНедопустимыеСимволыXML(Знач Текст, СимволЗамены = " ") Экспорт + +#Если НЕ ВебКлиент Тогда + ПозицияНачала = 1; + Пока Истина Цикл + Позиция = НайтиНедопустимыеСимволыXML(Текст, ПозицияНачала); + Если Позиция = 0 Тогда + Прервать; + КонецЕсли; + // Если возращается позиция, больше чем должна быть, то корректируем ее. + Если Позиция > 1 Тогда + НедопустимыйСимвол = Сред(Текст, Позиция - 1, 1); + Если НайтиНедопустимыеСимволыXML(НедопустимыйСимвол) > 0 Тогда + Текст = СтрЗаменить(Текст, НедопустимыйСимвол, СимволЗамены); + КонецЕсли; + КонецЕсли; + НедопустимыйСимвол = Сред(Текст, Позиция, 1); + Если НайтиНедопустимыеСимволыXML(НедопустимыйСимвол) > 0 Тогда + Текст = СтрЗаменить(Текст, НедопустимыйСимвол, СимволЗамены); + КонецЕсли; + ПозицияНачала = Позиция + 1; + КонецЦикла; +#КонецЕсли + + Возврат Текст; +КонецФункции + +// Удаляет недопустимые символы в XML-строке. +// +// Параметры: +// Текст – Строка – строка, в которой требуется удалить недопустимые символы. +// +// Возвращаемое значение: +// Тип: Строка. Строка, полученная при удалении недопустимых символов в XML-строке. +// +Функция УдалитьНедопустимыеСимволыXML(Знач Текст) Экспорт + + Возврат ЗаменитьНедопустимыеСимволыXML(Текст, ""); + +КонецФункции + +// Сравнивает расписания между собой. +// +// Параметры +// Расписание1, Расписание2 - РасписаниеРегламентногоЗадания +// +// Возвращаемое значение +// Булево - истина, если расписания идентичны, иначе ложь. +Функция РасписанияОдинаковые(Знач Расписание1, Знач Расписание2) Экспорт + Расписание1 = РасписаниеВСтруктуру(Расписание1); + Расписание2 = РасписаниеВСтруктуру(Расписание2); + + Для Каждого РеквизитРасписания Из Расписание1 Цикл + Если ТипЗнч(РеквизитРасписания.Значение) <> Тип("Массив") Тогда + Если РеквизитРасписания.Значение <> Расписание2[РеквизитРасписания.Ключ] Тогда + Возврат Ложь; + КонецЕсли; + Иначе + Если РеквизитРасписания.Значение.Количество() <> Расписание2[РеквизитРасписания.Ключ].Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для НомерЭлемента = 0 По РеквизитРасписания.Значение.Количество()-1 Цикл + Если РеквизитРасписания.Ключ = "ДетальныеРасписанияДня" Тогда + Если Не РасписанияОдинаковые(РеквизитРасписания.Значение[НомерЭлемента],Расписание2[РеквизитРасписания.Ключ][НомерЭлемента]) Тогда + Возврат Ложь; + КонецЕсли; + Иначе + Если РеквизитРасписания.Значение[НомерЭлемента] <> Расписание2[РеквизитРасписания.Ключ][НомерЭлемента] Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + Возврат Истина; +КонецФункции + // Устанавливает свойство ИмяСвойства элемента формы с именем ИмяЭлемента в значение Значение. // Применяется в тех случаях, когда элемент формы может не быть на форме из-за отсутствия прав у пользователя // на объект, реквизит объекта или команду. @@ -1703,8 +1838,110 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Служебные и вспомогательные функции +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Функция выполняет поиск элемента в коллекции: списке значений или массиве // +Функция НайтиВСписке(Список, Элемент) + + Перем ЭлементВСписке; + + Если ТипЗнч(Список) = Тип("СписокЗначений") Тогда + Если ТипЗнч(Элемент) = Тип("ЭлементСпискаЗначений") Тогда + ЭлементВСписке = Список.НайтиПоЗначению(Элемент.Значение); + Иначе + ЭлементВСписке = Список.НайтиПоЗначению(Элемент); + КонецЕсли; + КонецЕсли; + + Если ТипЗнч(Список) = Тип("Массив") Тогда + ЭлементВСписке = Список.Найти(Элемент); + КонецЕсли; + + Возврат ЭлементВСписке; + +КонецФункции // ЭлементПрисутствуетВСписке + +// Проверяет, что почтовый адрес не содержит символов обрамления +// если символы обрамления вставлены правильно убирает их +// Параметры: +// ПолноеИмяАдресата - строка - имя получателя +// ПочтовыйАдрес - строка - email адрес +// Возвращаемое значение: +// Структура: +// Ключ статус - булево - успех или неуспех операции +// СообщениеОбОшибке - в случае неуспеха операции содержит сообщение об ошибке +// Значение - структура - в случае успеха операции содержит записанную структуру почтового +// адреса: ключи - Адрес, Представление (строки) +// +Функция ПроверитьИПодготовитьПочтовыйАдрес(знач ПолноеИмяАдресата, знач ПочтовыйАдрес) + + НедопустимыйСимволВИмениАдресата = НСтр("ru = 'Недопустимый символ в имени адресата.'"); + НедопустимыйСимволВПочтовомАдресе = НСтр("ru = 'Недопустимый символ в почтовом адресе.'"); + СимволыОбрамления = "<>[]"; + + ПочтовыйАдрес = СокрЛП(ПочтовыйАдрес); + ПолноеИмяАдресата = СокрЛП(ПолноеИмяАдресата); + + Если Лев(ПолноеИмяАдресата, 1) = "<" Тогда + Если Прав(ПолноеИмяАдресата, 1) = ">" Тогда + ПолноеИмяАдресата = Сред(ПолноеИмяАдресата, 2, СтрДлина(ПолноеИмяАдресата)-2); + Иначе + ВызватьИсключение НедопустимыйСимволВИмениАдресата; + КонецЕсли; + ИначеЕсли Лев(ПолноеИмяАдресата, 1) = "[" Тогда + Если Прав(ПолноеИмяАдресата, 1) = "]" Тогда + ПолноеИмяАдресата = Сред(ПолноеИмяАдресата, 2, СтрДлина(ПолноеИмяАдресата)-2); + Иначе + ВызватьИсключение НедопустимыйСимволВИмениАдресата; + КонецЕсли; + КонецЕсли; + + Если Лев(ПочтовыйАдрес, 1) = "<" Тогда + Если Прав(ПочтовыйАдрес, 1) = ">" Тогда + ПочтовыйАдрес = Сред(ПочтовыйАдрес, 2, СтрДлина(ПочтовыйАдрес)-2); + Иначе + ВызватьИсключение НедопустимыйСимволВПочтовомАдресе; + КонецЕсли; + ИначеЕсли Лев(ПочтовыйАдрес, 1) = "[" Тогда + Если Прав(ПочтовыйАдрес, 1) = "]" Тогда + ПочтовыйАдрес = Сред(ПочтовыйАдрес, 2, СтрДлина(ПочтовыйАдрес)-2); + Иначе + ВызватьИсключение НедопустимыйСимволВПочтовомАдресе; + КонецЕсли; + КонецЕсли; + + Для Индекс = 1 По СтрДлина(СимволыОбрамления) Цикл + Если Найти(ПолноеИмяАдресата, Сред(СимволыОбрамления, Индекс, 1)) <> 0 + ИЛИ Найти(ПочтовыйАдрес, Сред(СимволыОбрамления, Индекс, 1)) <> 0 Тогда + ВызватьИсключение НедопустимыйСимволВПочтовомАдресе; + КонецЕсли; + КонецЦикла; + + Возврат Новый Структура("Адрес, Представление", ПочтовыйАдрес,ПолноеИмяАдресата); + +КонецФункции + +// Сдвигает маркер позиции пока встречается символ Символ +// возвращает номер позиции в строке, на которое установился маркер +// +Функция ПропуститьПробелы(знач Строка, + знач ТекущийИндекс, + знач ПропускаемыйСимвол) + + Результат = ТекущийИндекс; + + // убираем лишние пробелы если они есть + Пока ТекущийИндекс < СтрДлина(Строка) Цикл + Если Сред(Строка, ТекущийИндекс, 1) <> ПропускаемыйСимвол Тогда + Возврат ТекущийИндекс; + КонецЕсли; + ТекущийИндекс = ТекущийИндекс + 1; + КонецЦикла; + + Возврат ТекущийИндекс; + +КонецФункции Процедура НайтиРекурсивно(КоллекцияЭлементов, МассивЭлементов, СпособПоиска, ЗначениеПоиска) @@ -1735,21 +1972,36 @@ КонецПроцедуры -// добавляет в конце "\" или "/" -Процедура ДобавитьСлешЕслиНужно(НовыйПуть, ТипПлатформыТекущий) Экспорт - - Если СтрДлина(НовыйПуть) = 0 Тогда - Возврат; - КонецЕсли; - - Если Прав(НовыйПуть, 1) <> "\" И Прав(НовыйПуть,1) <> "/" Тогда - - Если ТипПлатформыТекущий = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыТекущий = ТипПлатформы.Windows_x86_64 Тогда - НовыйПуть = НовыйПуть + "\"; - Иначе - НовыйПуть = НовыйПуть + "/"; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры +Функция ЗаменитьСимволыВСтрокеНаПробелы(Строка, ЗаменяемыеСимволы) + Результат = Строка; + Для Позиция = 1 по СтрДлина(Символы) Цикл + Результат = СтрЗаменить(Результат, Сред(ЗаменяемыеСимволы, Позиция, 1), " "); + КонецЦикла; + Возврат Результат; +КонецФункции +Функция ЕстьСимволыВНачалеВКонце(Строка, ПроверяемыеСимволы) + Для Позиция = 1 По СтрДлина(ПроверяемыеСимволы) Цикл + Символ = Сред(ПроверяемыеСимволы, Позиция, 1); + СимволНайден = (Лев(Строка,1) = Символ) или (Прав(Строка,1) = Символ); + Если СимволНайден Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + Возврат Ложь; +КонецФункции + +Функция СтрокаСодержитТолькоДопустимыеСимволы(Строка, ДопустимыеСимволы) + МассивСимволов = Новый Массив; + Для Позиция = 1 по СтрДлина(ДопустимыеСимволы) Цикл + МассивСимволов.Добавить(Сред(ДопустимыеСимволы,Позиция,1)); + КонецЦикла; + + Для Позиция = 1 по СтрДлина(Строка) Цикл + Если МассивСимволов.Найти(Сред(Строка, Позиция, 1)) = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; +КонецФункции diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl index a23008b7f..d378fa9e2 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl @@ -1,3 +1,10 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Возвращает список имен объектов метаданных, данные которых могут содержать ссылки на различные объекты метаданных, // но при этом эти ссылки не должны учитываться в бизнес-логике приложения. @@ -23,6 +30,29 @@ КонецФункции +// Обработчик события, возникающего при обновлении +// данных справочника ИдентификаторыОбъектовМетаданных +// +// Параметры: +// ВидСобытия - Строка - "Добавление", "Изменение", "Удаление" +// Свойства - Структура: +// Старые - Структура - основные поля и значения старого элемента справочника +// Новые - Структура - основные поля и значения нового элемента справочника +// СтандартнаяЗаменаСсылок +// - Булево - если свойство задано Истина, +// тогда в информационной базе будет произведена замена +// "Свойства.Старые.Ссылка" на "Свойства.Новые.Ссылка". Можно +// установить значение Ложь, тогда замена произведена не будет. +// Замена происходит, когда вместо обычного элемента был +// добавлен предопределенный элемент или при замене одного +// объекта метаданных на другой для безошибочной реструктуризации. +// +Процедура ПриИзмененииИдентификатораОбъектаМетаданных(ВидСобытия, Свойства) Экспорт + + + +КонецПроцедуры + // Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. // Функция ОбработчикиИнициализацииПараметровСеанса() Экспорт @@ -48,4 +78,15 @@ // Представление - Строка - сюда необходимо поместить текстовое описание. Процедура УстановитьПредставлениеПредмета(СсылкаНаПредмет, Представление) Экспорт +КонецПроцедуры + +// Заполняет идентификакторы тех объектов метаданных, которые невозможно +// автоматически найти по типу, но которые требуется сохранять в базе данных (например, подсистемы). +// +// Подробнее: см. ОбщегоНазначения.ДобавитьИдентификатор +// +Процедура ЗаполнитьПредустановленныеИдентификаторыОбъектовМетаданных(Идентификаторы) Экспорт + + + КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl index 55356314d..4e84f7403 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl @@ -1,17 +1,125 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Серверные процедуры и функции общего назначения. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Возвращает признак наличия в конфигурации общих реквизитов-разделителей. // +// Возвращаемое значение: +// Булево. +// Функция ЭтоРазделеннаяКонфигурация() Экспорт - Возврат Ложь; + ЕстьРазделители = Ложь; + Для каждого ОбщийРеквизит Из Метаданные.ОбщиеРеквизиты Цикл + Если ОбщийРеквизит.РазделениеДанных = Метаданные.СвойстваОбъектов.РазделениеДанныхОбщегоРеквизита.Разделять Тогда + ЕстьРазделители = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат ЕстьРазделители; + +КонецФункции + +// Возвращает список полных имен всех объектов метаданных, использующихся в общих реквизитах-разделителях. +// Для последовательностей и журналов документов определяет разделенность по входящим документам: любому из. +// +// Возвращаемое значение: +// ФиксированноеСоответствие. +// +Функция РазделенныеОбъектыМетаданных() Экспорт + + Результат = Новый Соответствие; + + // I. Перебрать состав всех общих реквизитов. + + Для Каждого МетаданныеОбщегоРеквизита Из Метаданные.ОбщиеРеквизиты Цикл + Если МетаданныеОбщегоРеквизита.РазделениеДанных = Метаданные.СвойстваОбъектов.РазделениеДанныхОбщегоРеквизита.Разделять Тогда + СоставОбщегоРеквизита = ОбщегоНазначенияПовтИсп.СоставОбщегоРеквизита(МетаданныеОбщегоРеквизита.Имя); + + Для Каждого ЭлементСостава Из СоставОбщегоРеквизита Цикл + + Если ОбщегоНазначения.ЭлементСоставаОбщегоРеквизитаИспользуется(ЭлементСостава, МетаданныеОбщегоРеквизита) Тогда + Результат.Вставить(ЭлементСостава.Метаданные.ПолноеИмя(), Истина); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + КонецЦикла; + + // II. Для последовательностей и журналов определять разделенность по входящим документам. + + // 1) Последовательности. Перебор с проверкой первого входящего документа. Если документов нет, считаем разделенной. + Для Каждого МетаданныеПоследовательности Из Метаданные.Последовательности Цикл + Если МетаданныеПоследовательности.Документы.Количество() = 0 Тогда + ШаблонСообщения = НСтр("ru = 'В последовательность %1 не включено ни одного документа.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, МетаданныеПоследовательности.Имя); + ЗаписьЖурналаРегистрации("ОбщегоНазначенияПовтИсп.РазделенныеОбъектыМетаданных", УровеньЖурналаРегистрации.Ошибка, + МетаданныеПоследовательности, , ТекстСообщения); + Результат.Вставить(МетаданныеПоследовательности.ПолноеИмя(), Истина); + Иначе + Для Каждого МетаданныеДокумента Из МетаданныеПоследовательности.Документы Цикл + Если Результат.Получить(МетаданныеДокумента.ПолноеИмя()) <> Неопределено Тогда + Результат.Вставить(МетаданныеПоследовательности.ПолноеИмя(), Истина); + КонецЕсли; + Прервать; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + // 2) Журналы. Перебор с проверкой первого входящего документа. Если документов нет, считаем разделенным. + Для Каждого МетаданныеЖурналаДокументов Из Метаданные.ЖурналыДокументов Цикл + Если МетаданныеЖурналаДокументов.РегистрируемыеДокументы.Количество() = 0 Тогда + ШаблонСообщения = НСтр("ru = 'В журнал %1 не включено ни одного документа.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, МетаданныеЖурналаДокументов.Имя); + ЗаписьЖурналаРегистрации("ОбщегоНазначенияПовтИсп.РазделенныеОбъектыМетаданных", УровеньЖурналаРегистрации.Ошибка, + МетаданныеЖурналаДокументов, , ТекстСообщения); + Результат.Вставить(МетаданныеЖурналаДокументов.ПолноеИмя(), Истина); + Иначе + Для Каждого МетаданныеДокумента Из МетаданныеЖурналаДокументов.РегистрируемыеДокументы Цикл + Если Результат.Получить(МетаданныеДокумента.ПолноеИмя()) <> Неопределено Тогда + Результат.Вставить(МетаданныеЖурналаДокументов.ПолноеИмя(), Истина); + КонецЕсли; + Прервать; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(Результат); + +КонецФункции + +// Возвращает состав общего реквизита с заданным именем. +// +// Параметры: +// Имя - Строка - Имя общего реквизита. +// +// Возвращаемое значение: +// СоставОбщегоРеквизита. +// +Функция СоставОбщегоРеквизита(Знач Имя) Экспорт + + Возврат Метаданные.ОбщиеРеквизиты[Имя].Состав; КонецФункции // Возвращает признак того, что объект метаданных используется в общих реквизитах-разделителях. // -Функция ЭтоРазделенныйОбъектМетаданных(ИмяОбъектаМетаданных) Экспорт +// Параметры: +// ИмяОбъектаМетаданных - Строка. +// +// Возвращаемое значение: +// Булево. +// +Функция ЭтоРазделенныйОбъектМетаданных(Знач ИмяОбъектаМетаданных) Экспорт - Возврат Ложь; + Возврат ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(ИмяОбъектаМетаданных); КонецФункции @@ -20,21 +128,352 @@ // Функция РазделениеВключено() Экспорт - Возврат Ложь; + Если НЕ ЭтоРазделеннаяКонфигурация() Тогда + Возврат Ложь; + Иначе + Возврат ПолучитьФункциональнуюОпцию("ИспользоватьРазделениеПоОбластямДанных"); + КонецЕсли; КонецФункции // Возвращает признак возможности обращения к разделенным данным из текущего сеанса. // В случае вызова в неразделенной конфигурации возвращает Истина. // +// Возвращаемое значение: +// Булево. +// Функция ДоступноИспользованиеРазделенныхДанных() Экспорт - Возврат Истина; + Если НЕ РазделениеВключено() Тогда + + Возврат Истина; + Иначе + + УстановитьПривилегированныйРежим(Истина); + Возврат ОбщегоНазначения.ИспользованиеРазделителяСеанса(); + + КонецЕсли; КонецФункции -// Возвращает тип платформы сервера +// Функция возвращает объект WSОпределения созданный с переданными параметрами. +// +// Параметры соответствуют конструктору объекта. +// +// +// Примечание: при получении определения используется кэш, обновление которого осуществляется +// при смене версии конфигурации. Если для целей отладки требуется обновить +// значения в кэше, раньше этого времени, следует удалить из регистра сведений +// КэшПрограммныхИнтерфейсов соответствующие записи. +// +Функция ПолучитьWSОпределения(Знач АдресWSDL, Знач ИмяПользователя, Знач Пароль) Экспорт + + ДоступноПолучениеФайловИзИнтернета = Неопределено; + СтандартныеПодсистемыПереопределяемый.ДоступноПолучениеФайловИзИнтернета(ДоступноПолучениеФайловИзИнтернета); + Если ДоступноПолучениеФайловИзИнтернета = Истина Тогда + + ПараметрыПолучения = Новый Массив; + ПараметрыПолучения.Добавить(АдресWSDL); + ПараметрыПолучения.Добавить(ИмяПользователя); + ПараметрыПолучения.Добавить(Пароль); + + ДанныеWSDL = ОбщегоНазначенияПовтИсп.ПолучитьДанныеКэшаВерсий( + АдресWSDL, + Перечисления.ТипыДанныхКэшаПрограммныхИнтерфейсов.ОписаниеWebСервиса, + ОбщегоНазначения.ЗначениеВСтрокуXML(ПараметрыПолучения), + Ложь); + + ИмяФайлаWSDL = ПолучитьИмяВременногоФайла("wsdl"); + + ДанныеWSDL.Записать(ИмяФайлаWSDL); + + Определения = Новый WSОпределения(ИмяФайлаWSDL); + + Попытка + УдалитьФайлы(ИмяФайлаWSDL); + Исключение + ЗаписьЖурналаРегистрации("УдалениеВременныхФайлов", УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат Определения; + + Иначе + + Возврат Новый WSОпределения(АдресWSDL, ИмяПользователя, Пароль); + + КонецЕсли; + +КонецФункции + +// Функция возвращает объект WSПрокси созданный с переданными параметрами. +// +// Параметры соответствуют конструктору объекта. См. синтакс-помощник. +// +Функция ПолучитьWSПрокси(Знач АдресWSDL, Знач URIПространстваИмен, Знач ИмяСервиса, + Знач ИмяТочкиПодключения = "", Знач ИмяПользователя, Знач Пароль) Экспорт + + WSОпределения = ОбщегоНазначенияПовтИсп.ПолучитьWSОпределения(АдресWSDL, ИмяПользователя, Пароль); + + Если ПустаяСтрока(ИмяТочкиПодключения) Тогда + ИмяТочкиПодключения = ИмяСервиса + "Soap"; + КонецЕсли; + + Прокси = Новый WSПрокси(WSОпределения, URIПространстваИмен, ИмяСервиса, ИмяТочкиПодключения); + Прокси.Пользователь = ИмяПользователя; + Прокси.Пароль = Пароль; + + Возврат Прокси; + +КонецФункции + +// Возвращает объект ПреобразованиеXSL созданный из общего макета с переданным +// именем. +// +// Параметры: +// ИмяОбщегоМакет - Строка - имя общего макета типа ДвоичныеДанные содержащего +// файл преобразования XSL. +// +// Возвращаемое значение: +// ПреобразвоаниеXSL - объект ПреобразвоаниеXSL с загруженным п +// +Функция ПолучитьПреобразованиеXSLИзОбщегоМакета(Знач ИмяОбщегоМакета) Экспорт + + ДанныеМакета = ПолучитьОбщийМакет(ИмяОбщегоМакета); + ИмяФайлаПреобразования = ПолучитьИмяВременногоФайла("xsl"); + ДанныеМакета.Записать(ИмяФайлаПреобразования); + + Преобразование = Новый ПреобразованиеXSL; + Преобразование.ЗагрузитьИзФайла(ИмяФайлаПреобразования); + + Попытка + УдалитьФайлы(ИмяФайлаПреобразования); + Исключение + + КонецПопытки; + + Возврат Преобразование; + +КонецФункции + +// Определяет, сеанс запущен с разделителями или без. +// +// Возвращаемое значение: +// Булево. +// +Функция СеансЗапущенБезРазделителей() Экспорт + + Возврат ПользователиИнформационнойБазы.ТекущийПользователь().РазделениеДанных.Количество() = 0; + +КонецФункции + +// Возвращает тип платформы сервера. +// +// Возвращаемое значение: +// ТипПлатформы; Неопределено. +// Функция ТипПлатформыСервера() Экспорт + СистемнаяИнфо = Новый СистемнаяИнформация; Возврат СистемнаяИнфо.ТипПлатформы; + КонецФункции + +// Функция получает цвет стиля по имени элемента стиля +// +// Параметры: +// ИмяЦветаСтиля - Строка - Имя элемента стиля. +// +// Возвращаемое значение: +// Цвет. +// +Функция ЦветСтиля(ИмяЦветаСтиля) Экспорт + + Возврат ЦветаСтиля[ИмяЦветаСтиля]; + +КонецФункции + +// Функция получает шрифт стиля по имени элемента стиля. +// +// Параметры: +// ИмяШрифтаСтиля - Строка - Имя шрифта стиля. +// +// Возвращаемое значение: +// Шрифт. +// +Функция ШрифтСтиля(ИмяШрифтаСтиля) Экспорт + + Возврат ШрифтыСтиля[ИмяШрифтаСтиля]; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Функция получает данные кеша версий из ресурса типа ХранилищеЗначения регистра КэшПрограммныхИнтерфейсов. +// +// Параметры: +// Идентификатор - Строка - идентификатор записи кэша +// ТипДанных - ПеречислениеСсылка.ТипыДанныхКэшаПрограммныхИнтерфейсов. +// ПараметрыПолучения - Строка - массив параметров сериализованный в XML для передачи в метод +// обновления кэша +// ВозвращатьУстаревшиеДанные - Булево - флаг определяющий необходимость ожидания обновления +// данных в кэше перед возвратом значения, в случае обнаружения факта их устаревания. +// Истина - всегда использовать данные из кэша, если они там есть. Ложь - ожидать +// обновления данных кэша, в случае обнаружения факта устаревания данных. +// +// Возвращаемое значение: +// Произвольный. +// +Функция ПолучитьДанныеКэшаВерсий(Знач Идентификатор, Знач ТипДанных, + Знач ПараметрыПолучения, Знач ИспользоватьУстаревшиеДанные = Истина) Экспорт + + ПараметрыПолучения = ОбщегоНазначения.ЗначениеИзСтрокиXML(ПараметрыПолучения); + + УстановитьПривилегированныйРежим(Истина); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() + И ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + + ВосстановитьРазделение = Истина; + + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + + Иначе + + ВосстановитьРазделение = Ложь; + + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | КэшПрограммныхИнтерфейсов.ДатаОбновления КАК ДатаОбновления, + | КэшПрограммныхИнтерфейсов.Данные КАК Данные, + | КэшПрограммныхИнтерфейсов.ТипДанных КАК ТипДанных + |ИЗ + | РегистрСведений.КэшПрограммныхИнтерфейсов КАК КэшПрограммныхИнтерфейсов + |ГДЕ + | КэшПрограммныхИнтерфейсов.Идентификатор = &Идентификатор + | И КэшПрограммныхИнтерфейсов.ТипДанных = &ТипДанных"; + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + Запрос.УстановитьПараметр("ТипДанных", ТипДанных); + + НачатьТранзакцию(); + // Не устанавливаем управляемую блокировку что бы другие сеансы могли изменять значение пока эта транзакция активна + Результат = Запрос.Выполнить(); + ЗафиксироватьТранзакцию(); + + ИмяМетодаЗадания = "ОбщегоНазначения.ОбновитьДанныеКэшаВерсий"; + КлючЗадания = Идентификатор + "|" + XMLСтрока(ТипДанных); + ПараметрыЗадания = Новый Массив; + ПараметрыЗадания.Добавить(Идентификатор); + ПараметрыЗадания.Добавить(ТипДанных); + ПараметрыЗадания.Добавить(ПараметрыПолучения); + + ОтборЗаданий = Новый Структура; + ОтборЗаданий.Вставить("ИмяМетода", ИмяМетодаЗадания); + ОтборЗаданий.Вставить("Ключ", КлючЗадания); + ОтборЗаданий.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + + Выборка = Неопределено; + + Если Результат.Пустой() Тогда + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ОбщегоНазначения.ОбновитьДанныеКэшаВерсий(Идентификатор, ТипДанных, ПараметрыПолучения); + Иначе + Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(ОтборЗаданий); + Если Задания.Количество() = 0 Тогда + // Запустим новое + Задание = ФоновыеЗадания.Выполнить(ИмяМетодаЗадания, ПараметрыЗадания, КлючЗадания); + Иначе + Задание = Задания[0]; + КонецЕсли; + + Попытка + // Дождемся завершения + Задание.ОжидатьЗавершения(); + Исключение + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Задание.УникальныйИдентификатор); + Если Задание.ИнформацияОбОшибке <> Неопределено Тогда + ЗаписьЖурналаРегистрации("ОбновлениеКэшаВерсий", УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); + ВызватьИсключение(КраткоеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); + Иначе + ЗаписьЖурналаРегистрации("ОбновлениеКэшаВерсий", УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + КонецЕсли; + + НачатьТранзакцию(); + Результат = Запрос.Выполнить(); + ЗафиксироватьТранзакцию(); + + Если Результат.Пустой() Тогда + ШаблонСообщения = НСтр("ru = 'Ошибка при обновлении данных кэша версий. + |Идентификатор записи: %1 + |ТипДанных информации: %2'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСообщения, Идентификатор, ТипДанных); + + Если ВосстановитьРазделение Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина); + КонецЕсли; + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + Иначе + + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + Если ОбщегоНазначения.ЗаписьКэшаВерсийУстарела(Выборка) Тогда + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ОбщегоНазначения.ОбновитьДанныеКэшаВерсий(Идентификатор, ТипДанных, ПараметрыПолучения); + Выборка = Неопределено; + Иначе + // Данные устарели + Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(ОтборЗаданий); + Если Задания.Количество() = 0 Тогда + // Запустим новое + Задание = ФоновыеЗадания.Выполнить(ИмяМетодаЗадания, ПараметрыЗадания, КлючЗадания); + Иначе + Задание = Задания[0]; + КонецЕсли; + + Если НЕ ИспользоватьУстаревшиеДанные Тогда + Попытка + // Дождемся завершения + Задание.ОжидатьЗавершения(); + Исключение + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Задание.УникальныйИдентификатор); + Если Задание.ИнформацияОбОшибке <> Неопределено Тогда + ЗаписьЖурналаРегистрации("ОбновлениеКэшаВерсий", УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); + ВызватьИсключение(КраткоеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); + Иначе + ЗаписьЖурналаРегистрации("ОбновлениеКэшаВерсий", УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + Если Выборка = Неопределено Тогда + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + КонецЕсли; + + Если ВосстановитьРазделение Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина); + КонецЕсли; + + Возврат Выборка.Данные.Получить(); + +КонецФункции diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl deleted file mode 100644 index d820f97f1..000000000 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl +++ /dev/null @@ -1,383 +0,0 @@ - -/////////////////////////////////////////////////////////////////////////////// -// ОСНОВНЫЕ ФУНКЦИИ - -// Функция время начала замера -// -// Параметры: -// КлючеваяОперация - ПеречислениеСсылка.КлючевыеОперации, замер этой ключевой операции начинается -// ВызовСКлиента - Булево, указывает откуда был произведен вызов функции -// -// Возвращаемое значение: -// Число - время начала замера -// 0 - если замер этой ключевой операции уже начат -// -Функция ЗафиксироватьВремяНачала(КлючеваяОперация, ВызовСКлиента) Экспорт - - Если Не ВыполнятьЗамерыПроизводительности() Тогда - Возврат 0; - КонецЕсли; - - ВремяНачала = ТочноеВремя(); - Соответствие = ПолучитьПараметрСеанса(); - - Если ВызовСКлиента Тогда - Для Каждого КлючИЗначение Из Соответствие Цикл - - Если КлючИЗначение.Значение.АвтоЗавершение Тогда - ТекстСообщения = "Замер интерактивной ключевой операции """ + КлючеваяОперация + """ не был начат, - |т.к. начат замер интерактивной ключевой операции """ + КлючИЗначение.Ключ + """."; - ЗаписатьВЖурналРегистрации("ЗафиксироватьВремяНачала", - УровеньЖурналаРегистрации.Предупреждение, - ТекстСообщения); - Возврат 0; - КонецЕсли; - - КонецЦикла; - КонецЕсли; - - // Проверка, если замер времени выполнения ключевой операции уже начат, - // то игнорировать повторный замер - Если Соответствие.Получить(КлючеваяОперация) = Неопределено Тогда - ПараметрыКО = Новый Структура("ВремяНачала, АвтоЗавершение", ВремяНачала, ВызовСКлиента); - Соответствие.Вставить(КлючеваяОперация, ПараметрыКО); - УстановитьПараметрСеанса(Соответствие); - Иначе - ВремяНачала = 0; - КонецЕсли; - - Возврат ВремяНачала; - -КонецФункции - -// Процедура фиксирует время окончания замер -// -// Параметры: -// КлючеваяОперация - ПеречислениеСсылка.КлючевыеОперации, замер этой ключевой операции заканчивается, -// если параметр не указан, то предполагается, что начата замер только одной ключевой операции -// ВызовИзОбработчикаОжидания - Булево, указывает откуда был произведен вызов функции -// -// Возвращаемое значение: -// Число - время окончания замера -// 0 - если ни один замер не начат -// -Функция ЗафиксироватьВремяОкончания(КлючеваяОперация = Неопределено, ВызовИзОбработчикаОжидания) Экспорт - - Если Не ВыполнятьЗамерыПроизводительности() Тогда - Возврат 0; - КонецЕсли; - - ВремяОкончания = ТочноеВремя(); - Соответствие = ПолучитьПараметрСеанса(); - - // Если не начат ни один замер - Если Соответствие.Количество() = 0 Тогда - Возврат 0; - КонецЕсли; - - ВремяНачала = Неопределено; - // Завершается замер начатый на клиенте - Если КлючеваяОперация = Неопределено И ВызовИзОбработчикаОжидания Тогда - - Для Каждого КлючИЗначение Из Соответствие Цикл - // Замер начат на сервере - Если Не КлючИЗначение.Значение.АвтоЗавершение Тогда - Продолжить; - КонецЕсли; - - КлючеваяОперация = КлючИЗначение.Ключ; - ВремяНачала = КлючИЗначение.Значение.ВремяНачала; - // Прерываем т.к. такой замер где АвтоЗавершение=Истина может быть только один - Прервать; - КонецЦикла; - - // Завершается замер начатый на сервере - ИначеЕсли Не ВызовИзОбработчикаОжидания Тогда - - Если КлючеваяОперация = Неопределено Тогда - // В такой ситуации может быть максимум 2 замера, один с клиента, другой с сервера - Если Соответствие.Количество() > 2 Тогда - Соответствие.Очистить(); - УстановитьПараметрСеанса(Соответствие); - ВызватьИсключение "Начато несколько различных замеров на сервере. - |В таких случаях необходимо указывать какая ключевая операция завершилась."; - КонецЕсли; - - Для Каждого КлючИЗначение Из Соответствие Цикл - // Замер начат на клиенте - Если КлючИЗначение.Значение.АвтоЗавершение Тогда - Продолжить; - КонецЕсли; - - КлючеваяОперация = КлючИЗначение.Ключ; - ВремяНачала = КлючИЗначение.Значение.ВремяНачала; - // Прерываем т.к. если замер начат на серере и не указана ключевая операция может быть только один такой замер - Прервать; - КонецЦикла; - Иначе - ПараметрыКО = Соответствие.Получить(КлючеваяОперация); - // Если замер этой ключевой операции начинался - Если Не ПараметрыКО = Неопределено Тогда - ВремяНачала = ПараметрыКО.ВремяНачала; - КонецЕсли; - КонецЕсли; - - КонецЕсли; - - // Не удалось найти время начала указаной ключевой операции - Если ВремяНачала = Неопределено Тогда - Возврат 0; - КонецЕсли; - - Соответствие.Удалить(КлючеваяОперация); - УстановитьПараметрСеанса(Соответствие); - - УстановитьПривилегированныйРежим(Истина); - - Запись = РегистрыСведений.ЗамерыВремени.СоздатьМенеджерЗаписи(); - Запись.ДатаЗамера = ТекущаяДата(); - Запись.КлючеваяОперация = КлючеваяОперация; - Запись.НомерСеанса = НомерСеансаИнформационнойБазы(); - Запись.ВремяВыполнения = (ВремяОкончания - ВремяНачала - ?(ВызовИзОбработчикаОжидания, 100, 0)) / 1000; - Запись.ИмяПользователя = ИмяПользователя(); - Попытка - Запись.Записать(Ложь); - Исключение - ЗаписатьВЖурналРегистрации("ЗафиксироватьВремяОкончания", - УровеньЖурналаРегистрации.Ошибка, - ОписаниеОшибки()); - КонецПопытки; - - Возврат ВремяОкончания; - -КонецФункции - -// Функция получает значение параметра сеанса ТекущийЗамерВремени -// -// Возвращаемое занчение: -// Соответствие - параметр сеанса установлен -// -Функция ПолучитьПараметрСеанса() - - УстановитьПривилегированныйРежим(Истина); - - Возврат ПараметрыСеанса.ТекущийЗамерВремени.Получить(); - -КонецФункции - -// Процедура устанавливает значение параметра сеанса ТекущийЗамерВремени -// Параметры: -// Соответствие - Произвольный тип данных, значение которое будет помещенов в параметр сеанса ТекущийЗамерВремени -// -Процедура УстановитьПараметрСеанса(Соответствие) - - УстановитьПривилегированныйРежим(Истина); - ХранилищеЗначения = Новый ХранилищеЗначения(Соответствие); - ПараметрыСеанса.ТекущийЗамерВремени = ХранилищеЗначения; - -КонецПроцедуры - -// Функция получает точное время -// -// Возвращаемое значение: -// Число - время с точностью до миллисекунд -Функция ТочноеВремя() - - Инструменты = ПолучитьИнструменты(); - - Возврат ЗначениеТаймера(Инструменты); - -КонецФункции - -// Процедура записывает данные в журнал регистрации -// -// Параметры: -// ИмяСобытия - Строка -// Уровень - УровеньЖурналаРегистрации -// ТекстСообщения - Строка -// -Процедура ЗаписатьВЖурналРегистрации(ИмяСобытия, Уровень, ТекстСообщения) - - УстановитьПривилегированныйРежим(Истина); - ЗаписьЖурналаРегистрации(ИмяСобытия, - Уровень, - , - "Оценка производительности", - ТекстСообщения); - -КонецПроцедуры - -// Функция получает занчение перечисления ОбщаяПроизводительностьСистемы -// -// Возвращаемое значение: -// ПеречилсениеСсылка - значение перечисления -// Неопределено - значение перечисления отсутствует -// -Функция ПолучитьПредопределенный() Экспорт - - Попытка - Возврат Перечисления.КлючевыеОперации.ОбщаяПроизводительностьСистемы; - Исключение - Возврат Перечисления.КлючевыеОперации.ПустаяСсылка(); - КонецПопытки; - -КонецФункции - -// Функция определяет необходимость выполнения замеров -// -// Возвращаемое значение: -// Булево - Истина выполнять, Ложь не выполнять -// -Функция ВыполнятьЗамерыПроизводительности() - - УстановитьПривилегированныйРежим(Истина); - Возврат Константы.ВыполнятьЗамерыПроизводительности.Получить(); - -КонецФункции - - -/////////////////////////////////////////////////////////////////////////////// -// РАБОТА С ВНЕШНЕЙ КОМПОНЕНТОЙ - -// Получить объект инструментов -// -// Возвращаемое значение: -// Объект "Addin.ETP.Tools" -// -Функция ПолучитьИнструменты() - - ПодключитьВнешнийКомпонент(); - Возврат СоздатьИнструменты(); - -КонецФункции // ПолучитьИнструменты() - -// Создать объект инструментов -// -// Возвращаемое значение: -// Объект "Addin.ETP.Tools" -// -Функция СоздатьИнструменты() - - Возврат Новый("Addin.ETP.Tools"); - -КонецФункции // СоздатьИнструменты() - -// Подключить внешнюю компоненту КИП -// -Процедура ПодключитьВнешнийКомпонент() - - ИмяКомпонента = "ОбщийМакет.ОценкаПроизводительностиВнешнийКомпонент"; - - Если Не ПодключитьВнешнююКомпоненту(ИмяКомпонента, "ETP") Тогда - #Если Клиент Тогда - УстановитьВнешнююКомпоненту(ИмяКомпонента); - #КонецЕсли - - Если Не ПодключитьВнешнююКомпоненту(ИмяКомпонента, "ETP") Тогда - ВызватьИсключение "Ошибка подключения внешнего компонента."; - КонецЕсли; - КонецЕсли; - - Инструменты = СоздатьИнструменты(); - ПодключеннаяВерсия = ВерсияКомпонента(Инструменты); - ТребуемаяВерсия = "2.0.4.52"; - - Если ПодключеннаяВерсия <> ТребуемаяВерсия Тогда - ВызватьИсключение - "Версия подключенного внешнего компонента (" - + ПодключеннаяВерсия - + ") не совпадает с требуемой версией (" - + ТребуемаяВерсия - + "). Для устранения несоответствия версий, выгрузите всех клиентов" - " и перезагрузите сервер 1С:Предприятия этой информационной базы."; - КонецЕсли; - -КонецПроцедуры // ПодключитьВнешнийКомпонент() - -// Выполнить метод внешнего компонента -// -// Параметры: -// Объект - "Addin.ETP.*", экземпляр класса внешнего компонента -// Имя - Строка, имя выполняемого метода -// Параметры - Структура, содержит имена и значения параметров -// -// Возвращаемое значение: -// Произвольный - результат, возвращаемый методом -// -Функция ВыполнитьМетод(Объект, Имя, Параметры = Неопределено) - - ИменаПараметров = ""; - - Если Параметры <> Неопределено Тогда - Для каждого Параметр Из Параметры Цикл - Если Не ПустаяСтрока(ИменаПараметров) Тогда - ИменаПараметров = ИменаПараметров + ", "; - КонецЕсли; - - ИменаПараметров = ИменаПараметров + "Параметры." + Параметр.Ключ; - КонецЦикла; - КонецЕсли; - - Попытка - Возврат Вычислить("Объект." + Имя + "(" + ИменаПараметров + ")"); - Исключение - Если Объект <> Неопределено И Объект.ЕстьОшибка() Тогда - ВызватьИсключение Объект.ОписаниеОшибки(); - Иначе - ВызватьИсключение; - КонецЕсли; - КонецПопытки; - -КонецФункции // ВыполнитьМетод() - -// Получить значение таймера для замера интервала времени -// -// Параметры: -// Инструменты - Объект внешнего компонента -// -// Возвращаемое значение: -// Число - текущее значение таймера в миллисекундах -// -Функция ЗначениеТаймера(Инструменты) - - Возврат ВыполнитьМетод(Инструменты, "ЗначениеТаймера"); - -КонецФункции // ЗначениеТаймера() - -// Получить версию текущего компонента. -// Реализована из-за невозможности получения имени компьютера стандартным -// способом на веб-клиенте -// -// Возвращаемое значение: -// Строка - имя текущего компьютера -// -Функция ВерсияКомпонента(Инструменты) - - Возврат ВыполнитьМетод(Инструменты, "ПолучитьВерсию"); - -КонецФункции // ВерсияКомпонента() - - -/////////////////////////////////////////////////////////////////////////////// -// ИНИЦИАЛИЗАЦИЯ ПАРАМЕТРОВ СЕАНСА - -// Устанавливает параметры сеанса подсистемы оценка производительности -// -// Параметры: -// ИмяПараметра - Строка - имя параметра сеанса, значение которого необходимо установить -// УстановленныеПараметры - массив - в данный параметр помещается информация об установленных параметрах сеанса -// -Процедура УстановкаПараметровСеанса(Знач ИмяПараметра, УстановленныеПараметры) Экспорт - - Если ИмяПараметра <> "ТекущийЗамерВремени" Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - ПараметрыСеанса.ТекущийЗамерВремени = Новый ХранилищеЗначения(Новый Соответствие); - - УстановленныеПараметры.Добавить(ИмяПараметра); - -КонецПроцедуры - diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl new file mode 100644 index 000000000..e1874eca8 --- /dev/null +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl @@ -0,0 +1,537 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Оценка производительности". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Функция время начала замера +// +// Возвращаемое значение: +// Число - время начала замера +// +Функция ЗафиксироватьВремяНачала() Экспорт + + Возврат ТочноеВремя(); + +КонецФункции + +// Процедура фиксирует время окончания замер +// +// Параметры: +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, замер этой ключевой операции заканчивается +// ВремяНачалаКлючевойОперации - Число, время начала ключевой операции полученное функцией ЗафиксироватьВремяНачала() +// +// Возвращаемое значение: +// Число - время окончания замера +// 0 - если ни один замер не начат +// +Функция ЗафиксироватьВремяОкончания(КлючеваяОперация, ВремяНачалаКлючевойОперации, ВызовИзОбработчикаОжидания = Ложь) Экспорт + + ВремяОкончания = ТочноеВремя(); + + Запись = РегистрыСведений.ЗамерыВремени.СоздатьМенеджерЗаписи(); + Запись.ДатаЗамера = ТекущаяДатаСеанса(); + Запись.КлючеваяОперация = КлючеваяОперация; + Запись.УникальныйИдентификатор = Строка(Новый УникальныйИдентификатор); + Запись.ВремяВыполнения = (ВремяОкончания - ВремяНачалаКлючевойОперации - ?(ВызовИзОбработчикаОжидания, 100, 0)) / 1000; + Запись.ИмяПользователя = ИмяПользователя(); + Запись.Записать(Ложь); + + Возврат ВремяОкончания; + +КонецФункции + +// Функция получает точное время +// +// Возвращаемое значение: +// Число - время с точностью до миллисекунд +Функция ТочноеВремя() + + Инструменты = ПолучитьИнструменты(); + + Возврат ЗначениеТаймера(Инструменты); + +КонецФункции + +// Функция получает предопределенное занчение справочника ОбщаяПроизводительностьСистемы +// +// Возвращаемое значение: +// СправочникСсылка.КлючевыеОперации - элемент справочника +// СправочникСсылка.КлючевыеОперации.ПустаяСсылка - элемент отсутствует +// +Функция ПолучитьПредопределенный() Экспорт + + Попытка + Возврат Справочники.КлючевыеОперации.ОбщаяПроизводительностьСистемы; + Исключение + Возврат Справочники.КлючевыеОперации.ПустаяСсылка(); + КонецПопытки; + +КонецФункции + + +/////////////////////////////////////////////////////////////////////////////// +// Работа с внешней компонентой + +// Получить объект инструментов +// +// Возвращаемое значение: +// Объект "Addin.ETP.Tools" +// +Функция ПолучитьИнструменты() + + ПодключитьВнешнийКомпонент(); + Возврат СоздатьИнструменты(); + +КонецФункции + +// Создать объект инструментов +// +// Возвращаемое значение: +// Объект "Addin.ETP.Tools" +// +Функция СоздатьИнструменты() + + Возврат Новый("Addin.SSLPerfAssessment.Tools"); + +КонецФункции + +// Подключить внешнюю компоненту ОценкаПроизводительностиВнешнийКомпонент +// +Процедура ПодключитьВнешнийКомпонент() + + ИмяКомпонента = "ОбщийМакет.ОценкаПроизводительностиВнешнийКомпонент"; + + Если Не ПодключитьВнешнююКомпоненту(ИмяКомпонента, "SSLPerfAssessment") Тогда + #Если Клиент Тогда + УстановитьВнешнююКомпоненту(ИмяКомпонента); + #КонецЕсли + + Если Не ПодключитьВнешнююКомпоненту(ИмяКомпонента, "SSLPerfAssessment") Тогда + ВызватьИсключение НСтр("ru = 'Ошибка подключения внешнего компонента.'"); + КонецЕсли; + КонецЕсли; + + Инструменты = СоздатьИнструменты(); + ПодключеннаяВерсия = ВерсияКомпонента(Инструменты); + ТребуемаяВерсия = "2.0.4.52"; + + Если ПодключеннаяВерсия <> ТребуемаяВерсия Тогда + ТекстИсключения = НСтр("ru = 'Версия подключенного внешнего компонента (%1) не совпадает с требуемой версией (%2). + |Для устранения несоответствия версий, выгрузите всех клиентов и перезагрузите сервер 1С:Предприятия этой информационной базы.'"); + ТекстИсключения = СтрЗаменить(ТекстИсключения, "%1", ПодключеннаяВерсия); + ТекстИсключения = СтрЗаменить(ТекстИсключения, "%2", ТребуемаяВерсия); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + +КонецПроцедуры + +// Выполнить метод внешнего компонента +// +// Параметры: +// Объект - "Addin.ETP.*", экземпляр класса внешнего компонента +// Имя - Строка, имя выполняемого метода +// Параметры - Структура, содержит имена и значения параметров +// +// Возвращаемое значение: +// Произвольный - результат, возвращаемый методом +// +Функция ВыполнитьМетод(Объект, Имя, Параметры = Неопределено) + + ИменаПараметров = ""; + + Если Параметры <> Неопределено Тогда + Для каждого Параметр Из Параметры Цикл + Если Не ПустаяСтрока(ИменаПараметров) Тогда + ИменаПараметров = ИменаПараметров + ", "; + КонецЕсли; + + ИменаПараметров = ИменаПараметров + "Параметры." + Параметр.Ключ; + КонецЦикла; + КонецЕсли; + + Попытка + Возврат Вычислить("Объект." + Имя + "(" + ИменаПараметров + ")"); + Исключение + Если Объект <> Неопределено И Объект.ЕстьОшибка() Тогда + ВызватьИсключение Объект.ОписаниеОшибки(); + Иначе + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + +КонецФункции + +// Получить значение таймера для замера интервала времени +// +// Параметры: +// Инструменты - Объект внешнего компонента +// +// Возвращаемое значение: +// Число - текущее значение таймера в миллисекундах +// +Функция ЗначениеТаймера(Инструменты) + + Возврат ВыполнитьМетод(Инструменты, "ЗначениеТаймера"); + +КонецФункции + +// Получить версию текущего компонента. +// Реализована из-за невозможности получения имени компьютера стандартным +// способом на веб-клиенте +// +// Возвращаемое значение: +// Строка - имя текущего компьютера +// +Функция ВерсияКомпонента(Инструменты) + + Возврат ВыполнитьМетод(Инструменты, "ПолучитьВерсию"); + +КонецФункции + + +/////////////////////////////////////////////////////////////////////////////// +// Регламентное задание + +// Процедура обработки регламентного задания по выгрузке данных APDEX +// +// Параметры: +// КаталогЭкспорта - Строка, каталог сохранения данных +// +Процедура ЭкспортОценкиПроизводительности(КаталогЭкспорта) Экспорт + + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + // Если система отключена, то выгрузку данных делать не будем. + Если не ОценкаПроизводительностиПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда + Возврат; + КонецЕсли; + + ДатаЗамера = ТекущаяДатаСеанса(); + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ДатаЗамера", ДатаЗамера); + СформироватьЗапросРассчетаAPDEX(Запрос); + + Выборка = Запрос.Выполнить().Выбрать(); + ВыгрузитьРезультаты(КаталогЭкспорта, ДатаЗамера, Выборка); + +КонецПроцедуры + +// Формирет запрос для рассчета индекса APDEX и устанавливает значения необходимых параметров +// +// Параметры: +// Запрос - Запрос, процедура заполняет текст и параметры переданного запроса +// +Процедура СформироватьЗапросРассчетаAPDEX(Запрос) + + ПолучениеЗамеров = + "ВЫБРАТЬ + | &КлючеваяОперация%НомерКО% КАК КлючеваяОперация, + | Замеры.ВремяВыполнения КАК ВремяВыполнения + |%ИмяВременнойТаблицы% + |ИЗ + | (ВЫБРАТЬ ПЕРВЫЕ 100 + | Замеры.КлючеваяОперация КАК КлючеваяОперация, + | Замеры.ВремяВыполнения КАК ВремяВыполнения + | ИЗ + | РегистрСведений.ЗамерыВремени КАК Замеры + | ГДЕ + | Замеры.ДатаЗамера < &ДатаЗамера + | И Замеры.КлючеваяОперация = &КлючеваяОперация%НомерКО% + | + | УПОРЯДОЧИТЬ ПО + | Замеры.ДатаЗамера УБЫВ) КАК Замеры"; + + ОбъединитьВсе = + " + | + |ОБЪЕДИНИТЬ ВСЕ + | + |"; + + ИндексироватьПо = + " + | + |ИНДЕКСИРОВАТЬ ПО + | КлючеваяОперация"; + + РазделительВременныхТаблиц = + " + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |"; + + ПустаяВыборка = + "ВЫБРАТЬ + | ЗНАЧЕНИЕ(Справочник.КлючевыеОперации.ПустаяСсылка), + | 0"; + + + ТекстЗапроса = + "ВЫБРАТЬ + | КлючевыеОперации.Ссылка КАК КлючеваяОперация, + | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, + | КлючевыеОперации.МинимальноДопустимыйУровень КАК ДопустимыйУровень + |ПОМЕСТИТЬ ВТ_КлючевыеОперации + |ИЗ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ГДЕ + | КлючевыеОперации.ПометкаУдаления = ЛОЖЬ + | И КлючевыеОперации.Ссылка <> ЗНАЧЕНИЕ(Справочник.КлючевыеОперации.ОбщаяПроизводительностьСистемы)"; + + ТекстЗапроса = ТекстЗапроса + ИндексироватьПо + РазделительВременныхТаблиц; + + Выборка = Справочники.КлючевыеОперации.Выбрать(); + + нет_ключевых_операций = Истина; + НомерКО = 1; + Пока Выборка.Следующий() Цикл + + Если Выборка.ПометкаУдаления Или Выборка.Ссылка = ПолучитьПредопределенный() Тогда + Продолжить; + КонецЕсли; + + Запрос.УстановитьПараметр("КлючеваяОперация" + НомерКО, Выборка.Ссылка); + + Врем = СтрЗаменить(ПолучениеЗамеров, "%НомерКО%", Строка(НомерКО)); + Врем = СтрЗаменить(Врем, "%ИмяВременнойТаблицы%", ?(НомерКО = 1, "ПОМЕСТИТЬ ВТ_Замеры", "")); + ТекстЗапроса = ТекстЗапроса + Врем + ОбъединитьВсе; + + НомерКО = НомерКО + 1; + нет_ключевых_операций = Ложь; + КонецЦикла; + // Если нет ключевых операций, то и не будем заморачиваться, вернём пустую выборку. + Если нет_ключевых_операций Тогда + Запрос.Текст = "Выбрать 1 ГДЕ 1 < 0;"; + Возврат; + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + ПустаяВыборка + ИндексироватьПо + РазделительВременныхТаблиц; + + ТекстЗапроса = ТекстЗапроса + + "ВЫБРАТЬ + | ВТ_КлючевыеОперации.КлючеваяОперация КАК КлючеваяОперация, + | ВЫБОР + | КОГДА СУММА(ЕСТЬNULL(ВТ_Замеры.ВремяВыполнения, 0)) = 0 + | ТОГДА 0 + | ИНАЧЕ ВЫРАЗИТЬ((СУММА(ВЫБОР + | КОГДА ВТ_Замеры.ВремяВыполнения <= ВТ_КлючевыеОперации.ЦелевоеВремя + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) + СУММА(ВЫБОР + | КОГДА ВТ_Замеры.ВремяВыполнения > ВТ_КлючевыеОперации.ЦелевоеВремя + | И ВТ_Замеры.ВремяВыполнения <= ВТ_КлючевыеОперации.ЦелевоеВремя * 4 + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) / 2) / СУММА(1) + 0.001 КАК ЧИСЛО(6, 3)) + | КОНЕЦ КАК ТекущийAPDEX, + | ВЫБОР + | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Идеально) + | ТОГДА 1 + | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Отлично) + | ТОГДА 0.94 + | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Хорошо) + | ТОГДА 0.85 + | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Удовлетворительно) + | ТОГДА 0.7 + | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Плохо) + | ТОГДА 0.5 + | КОНЕЦ КАК МинимальныйAPDEX + |ИЗ + | ВТ_КлючевыеОперации КАК ВТ_КлючевыеОперации + | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Замеры КАК ВТ_Замеры + | ПО ВТ_КлючевыеОперации.КлючеваяОперация = ВТ_Замеры.КлючеваяОперация + | + |СГРУППИРОВАТЬ ПО + | ВТ_КлючевыеОперации.КлючеваяОперация, + | ВЫБОР + | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Идеально) + | ТОГДА 1 + | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Отлично) + | ТОГДА 0.94 + | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Хорошо) + | ТОГДА 0.85 + | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Удовлетворительно) + | ТОГДА 0.7 + | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Плохо) + | ТОГДА 0.5 + | КОНЕЦ + | + |ИМЕЮЩИЕ + | ВЫБОР + | КОГДА СУММА(ЕСТЬNULL(ВТ_Замеры.ВремяВыполнения, 0)) = 0 + | ТОГДА 0 + | ИНАЧЕ ВЫРАЗИТЬ((СУММА(ВЫБОР + | КОГДА ВТ_Замеры.ВремяВыполнения <= ВТ_КлючевыеОперации.ЦелевоеВремя + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) + СУММА(ВЫБОР + | КОГДА ВТ_Замеры.ВремяВыполнения > ВТ_КлючевыеОперации.ЦелевоеВремя + | И ВТ_Замеры.ВремяВыполнения <= ВТ_КлючевыеОперации.ЦелевоеВремя * 4 + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) / 2) / СУММА(1) + 0.001 КАК ЧИСЛО(6, 3)) + | КОНЕЦ > 0"; + + Запрос.Текст = ТекстЗапроса; + +КонецПроцедуры + +// Сохраняет результаты вычисления APDEX в файл +// +// Параметры: +// КаталогЭкспорта - Строка, каталог сохранения файла +// ДатаЗамера - Дата, дата выполнения экспорта +// ВыборкаРезультатов - ВыборкаИзРезультатаЗапроса, выборка с результатами которые необходимо сохранить +// +Процедура ВыгрузитьРезультаты(КаталогЭкспорта, ДатаЗамера, ВыборкаРезультатов) + + ПространствоИмен = "www.v8.1c.ru/ssl/performace-assessment/apdexExport"; + СоздатьКаталог(КаталогЭкспорта); + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.ОткрытьФайл(ПолучитьПолноеИмяФайлаЭкспорта(КаталогЭкспорта, ДатаЗамера), "UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + ЗаписьXML.ЗаписатьНачалоЭлемента("Performance", ПространствоИмен); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("prf", ПространствоИмен); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema"); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); + + ЗаписьXML.ЗаписатьАтрибут("version", ПространствоИмен, "1.0.0.0"); + ЗаписьXML.ЗаписатьАтрибут("period", ПространствоИмен, Строка(ДатаЗамера)); + + ТипКлючеваяОперация = ФабрикаXDTO.Тип(ПространствоИмен, "KeyOperation"); + КлючеваяОперация = ФабрикаXDTO.Создать(ТипКлючеваяОперация); + + Пока ВыборкаРезультатов.Следующий() Цикл + + КлючеваяОперация.name = Строка(ВыборкаРезультатов.КлючеваяОперация); + КлючеваяОперация.currentApdexValue = ВыборкаРезультатов.ТекущийAPDEX; + КлючеваяОперация.minimalApdexValue = ВыборкаРезультатов.МинимальныйAPDEX; + ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, КлючеваяОперация); + + КонецЦикла; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + ЗаписьXML.Закрыть(); + +КонецПроцедуры + +// Генерирует имя файла для экспорта +// +// Параметры: +// КаталогЭкспорта - Строка, +// ДатаЗамера - Дата, дата и время выполнения замера +// +// Возвращаемое значение: +// Строка - полный путь к файлу экспорта +// +Функция ПолучитьПолноеИмяФайлаЭкспорта(КаталогЭкспорта, ДатаЗамера) + + ПоследнийСимвол = Прав(КаталогЭкспорта, 1); + ЕстьРазделитель = Ложь; + Если ПоследнийСимвол = "\" Или ПоследнийСимвол = "/" Тогда + ЕстьРазделитель = Истина; + КонецЕсли; + + Возврат КаталогЭкспорта + ?(ЕстьРазделитель, "", "/") + Формат(ДатаЗамера, "ДФ=""гггг-ММ-дд ЧЧ-мм-сс""") + ".xml"; + +КонецФункции + + +/////////////////////////////////////////////////////////////////////////////// +// Блокировки объектов при изменении + +// Устанавливает исключительную управляемую блокировку на ссылку +// +Процедура ЗаблокироватьСсылку(Ссылка) + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировки = БлокировкаДанных.Добавить(Ссылка.Метаданные().ПолноеИмя()); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); + БлокировкаДанных.Заблокировать(); + +КонецПроцедуры + +// Начинает транзакцию и устанавливает исключительную +// управляемую блокировку по значению ссылки +// +// Параметры: +// Ссылка - ЛюбаяСсылка, ссылка, которую надо заблокировать +// +// Возвращаемое значение: +// Объект - объект полученный из ссылки +// +Функция НачатьИзменениеОбъекта(Ссылка) Экспорт + + НачатьТранзакцию(); + + ЗаблокироватьСсылку(Ссылка); + + Объект = Ссылка.ПолучитьОбъект(); + + Возврат Объект; + +КонецФункции + +// Фиксирует транзакцию и записывает объект +// +// Параметры: +// Объект - ЛюбойОбъект, объект, изменения которого следует зафиксировать +// Записывать - Булево, необходимость записи объекта перед фиксацией транзакции +// +Процедура ЗафиксироватьИзменениеОбъекта(Объект, Записывать = Истина) Экспорт + + Если Записывать Тогда + Объект.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + +КонецПроцедуры + +// Отменяет транзакцию, изменения объекта не фиксируются +// +Процедура ОтменитьИзменениеОбъекта() Экспорт + + ОтменитьТранзакцию(); + +КонецПроцедуры + + +/////////////////////////////////////////////////////////////////////// +// Прочие процедуры и функции + +// Процедура записывает данные в журнал регистрации +// +// Параметры: +// ИмяСобытия - Строка +// Уровень - УровеньЖурналаРегистрации +// ТекстСообщения - Строка +// +Процедура ЗаписатьВЖурналРегистрации(ИмяСобытия, Уровень, ТекстСообщения) Экспорт + + ЗаписьЖурналаРегистрации(ИмяСобытия, + Уровень, + , + "Оценка производительности", + ТекстСообщения); + +КонецПроцедуры + +// Получает имя дополнительного свойства не проверять приоритеты при записи ключевой операции +// +// Возвращаемое значение: +// Строка - имя дополнительного свойства +// +Функция НеПроверятьПриоритет() Экспорт + + Возврат "НеПровеятьПриоритет"; + +КонецФункции diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/ОценкаПроизводительностиВызовСервера.mdo b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/ОценкаПроизводительностиВызовСервераПолныеПрава.mdo similarity index 75% rename from SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/ОценкаПроизводительностиВызовСервера.mdo rename to SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/ОценкаПроизводительностиВызовСервераПолныеПрава.mdo index c489420b8..c55a688c4 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/ОценкаПроизводительностиВызовСервера.mdo +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/ОценкаПроизводительностиВызовСервераПолныеПрава.mdo @@ -1,10 +1,11 @@ - ОценкаПроизводительностиВызовСервера + ОценкаПроизводительностиВызовСервераПолныеПрава ru - Оценка производительности вызов сервера + Оценка производительности вызов сервера полные права true true + true diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl new file mode 100644 index 000000000..fa3000a7f --- /dev/null +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl @@ -0,0 +1,172 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Оценка производительности". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Выполняет работу с ДиалогРаботыСФайлами с учетом веб-клиента. +// +// Параметры: +// РежимДиалога - РежимДиалогаВыбораФайла, режим, в котором следует открыть диалог +// РезультатВыбора - +// Строка, результат выбора +// Неопределено, пользователь не выбрал каталог, но и не отказался от выполнения действий +// МестоХранения - Строка, если действие выполняется в веб-клиенте необходим для запроса разрешения на действие +// Расширение - Строка, расширение сохраняемого/загружаемого файла +// +// Возвращаемое значение: +// Булево - +// Истина, диалог был вызван и пользователь выоплнил необходимые действия +// Ложь, пользователь отказался от выполнения каких-либо действий +// +Функция ВызватьДиалогРаботыСФайлами(Знач РежимДиалога, РезультатВыбора, Знач МестоХранения = "", Знач Расширение = "") Экспорт + + РасширениеПодключено = Ложь; + Результат = ОбработатьРасширениеРаботыСФайлами(РасширениеПодключено); + + Если РасширениеПодключено Тогда + + ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалога); + Если Не ПустаяСтрока(Расширение) Тогда + ДиалогВыбора.Фильтр = "*." + Расширение + "| *." + Расширение; + ДиалогВыбора.Расширение = Расширение; + КонецЕсли; + + Если ДиалогВыбора.Выбрать() Тогда + Если РежимДиалога = РежимДиалогаВыбораФайла.ВыборКаталога Тогда + РезультатВыбора = ДиалогВыбора.Каталог; + Иначе + РезультатВыбора = ДиалогВыбора.ПолноеИмяФайла; + КонецЕсли; + Иначе + Результат = Ложь; + КонецЕсли; + + Иначе + РезультатВыбора = Неопределено; + КонецЕсли; + + #Если ВебКлиент Тогда + Если РасширениеПодключено И Результат Тогда + Если РежимДиалога = РежимДиалогаВыбораФайла.Сохранение Тогда + Результат = ЗапроситьРазрешениеНаПолучениеФайла(МестоХранения, РезультатВыбора); + ИначеЕсли РежимДиалога = РежимДиалогаВыбораФайла.Открытие Тогда + + КонецЕсли; + КонецЕсли; + #КонецЕсли + + Возврат Результат; + +КонецФункции + +// Выполняет попытку подключения расширения рабоыт с файлами +// +// Параметры: +// РасширениеПодключено - Булево: +// Истина, расширение подключено +// Ложь, расширение не подключено +// +// Возвращаемое значение: +// Булево - +// Истина, расширение было или небыло подключено, пользователь не отказался от выполнения операции +// Ложь, пользователь отказался от выполнения операции +// +Функция ОбработатьРасширениеРаботыСФайлами(РасширениеПодключено) + + // Повторения строк: + // + // РасширениеПодключено = Ложь; + // Результат = Истина; + // + // для очевидности и понятности логики. + + РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); + Результат = РасширениеПодключено; + + Если Не РасширениеПодключено Тогда + + КодВозврата = Вопрос(НСтр("ru = 'Расширение работы с файлами не установлено, установить? + |""Да"" - Выполнить попытку установки расширения + |""Нет"" - Экспорт будет выполнен стандартными средствами браузера + |""Отмена"" - Отменить экспорт'"), РежимДиалогаВопрос.ДаНетОтмена); + + Если КодВозврата = КодВозвратаДиалога.Да Тогда + + УстановитьРасширениеРаботыСФайлами(); + Если Не ПодключитьРасширениеРаботыСФайлами() Тогда + + КодВозврата = Вопрос(НСтр("ru = 'Выполнить стандартными средствами браузера?'"), РежимДиалогаВопрос.ДаНет); + Если КодВозврата = КодВозвратаДиалога.Да Тогда + РасширениеПодключено = Ложь; + Результат = Истина; + ИначеЕсли КодВозврата = КодВозвратаДиалога.Нет Тогда + РасширениеПодключено = Ложь; + Результат = Ложь; + КонецЕсли; + + Иначе + РасширениеПодключено = Истина; + Результат = Истина; + КонецЕсли; + + ИначеЕсли КодВозврата = КодВозвратаДиалога.Нет Тогда + РасширениеПодключено = Ложь; + Результат = Истина; + ИначеЕсли КодВозврата = КодВозвратаДиалога.Отмена Тогда + РасширениеПодключено = Ложь; + Результат = Ложь; + КонецЕсли; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Запрашивает разрешение у пользователя на получение файла +// +// Параметры: +// Хранение - Строка, содержит положение файла на сервере +// Имя - Строка, содержит положение файла на клиенте +// +// Возвращаемое значение: +// Булево - +// Истина, разрешение получено +// Ложь, разрешение не получено +// +Функция ЗапроситьРазрешениеНаПолучениеФайла(Хранение, Имя) + + ОписаниеПередаваемогоФайла = Новый ОписаниеПередаваемогоФайла; + ОписаниеПередаваемогоФайла.Хранение = Хранение; + ОписаниеПередаваемогоФайла.Имя = Имя; + + МассивФайлов = Новый Массив; + МассивФайлов.Добавить(ОписаниеПередаваемогоФайла); + + ОписаниеВызова = Новый Массив; + ОписаниеВызова.Добавить("ПолучитьФайлы"); + ОписаниеВызова.Добавить(МассивФайлов); + ОписаниеВызова.Добавить(""); + ОписаниеВызова.Добавить(""); + ОписаниеВызова.Добавить(Ложь); + + Вызовы = Новый Массив; + Вызовы.Добавить(ОписаниеВызова); + + + Возврат ЗапроситьРазрешениеПользователя(Вызовы); + +КонецФункции + +Процедура ЗакончитьЗамерВремениАвтоНеГлобальный() Экспорт + + ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьВремяОкончания( + ОценкаПроизводительностиЗамерВремени.Получить("КлючеваяОперация"), + ОценкаПроизводительностиЗамерВремени.Получить("ВремяНачала"), + Истина + ); + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/ОценкаПроизводительностиКлиент.mdo b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/ОценкаПроизводительностиКлиент.mdo new file mode 100644 index 000000000..20c455902 --- /dev/null +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/ОценкаПроизводительностиКлиент.mdo @@ -0,0 +1,10 @@ + + + ОценкаПроизводительностиКлиент + + ru + Оценка производительности клиент + + true + true + diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/Module.bsl index 40e0b0ba5..0158d6b58 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/Module.bsl @@ -1,8 +1,15 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Оценка производительности". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Процедура заканчивает замер времени выполнения ключевой операции // Процедура ЗакончитьЗамерВремениАвто() Экспорт - ОценкаПроизводительностиВызовСервера.ЗафиксироватьВремяОкончания(, Истина); + ОценкаПроизводительностиКлиент.ЗакончитьЗамерВремениАвтоНеГлобальный(); КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl index c2ae589ba..888d6a176 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl @@ -1,36 +1,57 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Оценка производительности". +// +//////////////////////////////////////////////////////////////////////////////// -// Начать замер времени выполнения ключевой операции +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Активизирует замер времени выполнения ключевой операции. // // Параметры: -// КодКлючевойОперации - Строка, код элемента справочника "КлючевыеОперации" +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция. // // Возвращаемое значение: -// Число - время начала замера +// Число - время начала замера. // -Функция НачатьЗамерВремени(КлючеваяОперация) Экспорт - - #Если Клиент Тогда - ВызовСКлиента = Истина; - ПодключитьОбработчикОжидания("ЗакончитьЗамерВремениАвто", 0.1, Истина); - #Иначе - ВызовСКлиента = Ложь; - #КонецЕсли - - ВремяНачала = ОценкаПроизводительностиВызовСервера.ЗафиксироватьВремяНачала(КлючеваяОперация, ВызовСКлиента); +Функция НачатьЗамерВремени(КлючеваяОперация = Неопределено) Экспорт + ВремяНачала = 0; + Если ОценкаПроизводительностиПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда + ВремяНачала = ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьВремяНачала(); + #Если Клиент Тогда + Если КлючеваяОперация = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Не указана ключевая операция.'"); + КонецЕсли; + ОценкаПроизводительностиЗамерВремени = Новый Соответствие; + ОценкаПроизводительностиЗамерВремени.Вставить("КлючеваяОперация", КлючеваяОперация); + ОценкаПроизводительностиЗамерВремени.Вставить("ВремяНачала", ВремяНачала); + ПодключитьОбработчикОжидания("ЗакончитьЗамерВремениАвто", 0.1, Истина); + #КонецЕсли + КонецЕсли; + Возврат ВремяНачала; КонецФункции #Если Сервер Тогда -// Закончить замер времени выполнения ключевой операции +// Закончить замер времени выполнения ключевой операции. +// +// Параметры: +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации - операция, для которой надо зафиксировать время завершения; +// ВремяНачалаКлючевойОперации - Число - время начала ключевой операции, полученное функцией НачатьЗамерВремени(). // // Возвращаемое значение: -// Число - время окончания замера +// Число - время окончания замера. // -Функция ЗакончитьЗамерВремени(КлючеваяОперация = Неопределено) Экспорт +Функция ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачалаКлючевойОперации) Экспорт - Возврат ОценкаПроизводительностиВызовСервера.ЗафиксироватьВремяОкончания(КлючеваяОперация, Ложь); + ВремяОкончания = 0; + Если ОценкаПроизводительностиПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда + ВремяОкончания = ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьВремяОкончания(КлючеваяОперация, ВремяНачалаКлючевойОперации); + КонецЕсли; + + Возврат ВремяОкончания; КонецФункции -#КонецЕсли \ No newline at end of file +#КонецЕсли diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/ОценкаПроизводительностиКлиентСервер.mdo b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/ОценкаПроизводительностиКлиентСервер.mdo index c478a1213..0cbfcd050 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/ОценкаПроизводительностиКлиентСервер.mdo +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/ОценкаПроизводительностиКлиентСервер.mdo @@ -7,5 +7,6 @@ true true + true true diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl new file mode 100644 index 000000000..176d7d2c9 --- /dev/null +++ b/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl @@ -0,0 +1,19 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Оценка производительности". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Функция определяет необходимость выполнения замеров. +// +// Возвращаемое значение: +// Булево - Истина выполнять, Ложь не выполнять. +// +Функция ВыполнятьЗамерыПроизводительности() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Возврат Константы.ВыполнятьЗамерыПроизводительности.Получить(); + +КонецФункции diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/ОценкаПроизводительностиПовтИсп.mdo b/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/ОценкаПроизводительностиПовтИсп.mdo new file mode 100644 index 000000000..7b30e7762 --- /dev/null +++ b/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/ОценкаПроизводительностиПовтИсп.mdo @@ -0,0 +1,13 @@ + + + ОценкаПроизводительностиПовтИсп + + ru + Оценка производительности повт исп + + true + true + true + true + DuringSession + diff --git a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl new file mode 100644 index 000000000..5e01189a8 --- /dev/null +++ b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl @@ -0,0 +1,1424 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОчередьЗаданий: Работа с неразделенными регламентными заданиями. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции + +// Производит планирование выполнения заданий из РС ОчередьЗаданий +// +Процедура ПланированиеОбработкиЗаданий() Экспорт + + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОчередьЗаданий.ОбластьДанных, + | ОчередьЗаданий.Задание, + | ОчередьЗаданий.Использование, + | ОчередьЗаданий.ЗапланированныйМоментЗапуска, + | ОчередьЗаданий.СостояниеЗадания, + | ОчередьЗаданий.ИсполняющееФоновоеЗадание, + | ОчередьЗаданий.ЭксклюзивноеВыполнение, + | ОчередьЗаданий.НомерПопытки, + | ОчередьЗаданий.РегламентноеЗадание, + | ОчередьЗаданий.ИмяМетода, + | ОчередьЗаданий.Параметры, + | ОчередьЗаданий.ДатаНачалаПоследнегоЗапуска, + | ОбластиДанных.ЧасовойПояс + |ИЗ + | РегистрСведений.ОчередьЗаданий КАК ОчередьЗаданий + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ОбластиДанных КАК ОбластиДанных + | ПО ОчередьЗаданий.ОбластьДанных = ОбластиДанных.ОбластьДанных + |ГДЕ + | ОчередьЗаданий.СостояниеЗадания В (ЗНАЧЕНИЕ(Перечисление.СостоянияЗаданий.Выполняется), ЗНАЧЕНИЕ(Перечисление.СостоянияЗаданий.Завершено), ЗНАЧЕНИЕ(Перечисление.СостоянияЗаданий.НеЗапланировано))"; + + КоличествоПопыток = 0; + Результат = Неопределено; + Пока КоличествоПопыток < 5 Цикл + Попытка + Результат = Запрос.Выполнить(); + Прервать; + Исключение + КоличествоПопыток = КоличествоПопыток + 1; + Если КоличествоПопыток = 5 Тогда + ЗаписьЖурналаРегистрации(НСтр("Очередь заданий.Планирование обработки заданий"), УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + КонецЦикла; + + Выборка = Результат.Выбрать(); + + СоответствиеРегламентныеЗадания = Новый Соответствие; + + Пока Выборка.Следующий() Цикл + Если ЗначениеЗаполнено(Выборка.ЧасовойПояс) Тогда + ЧасовойПояс = Выборка.ЧасовойПояс; + Иначе + ЧасовойПояс = Неопределено; + КонецЕсли; + + Попытка + КлючЗаписи = РегистрыСведений.ОчередьЗаданий.СоздатьКлючЗаписи(Новый Структура("ОбластьДанных, Задание", Выборка.ОбластьДанных, Выборка.Задание)); + ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); + Исключение + // Запись заблокирована, перейти к следующей + Продолжить; + КонецПопытки; + + НаборЗаписей = РегистрыСведений.ОчередьЗаданий.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ОбластьДанных.Установить(Выборка.ОбластьДанных); + НаборЗаписей.Отбор.Задание.Установить(Выборка.Задание); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() = 0 Тогда + РазблокироватьДанныеДляРедактирования(КлючЗаписи); + Продолжить; + КонецЕсли; + + Запись = НаборЗаписей[0]; + + Если ЗначениеЗаполнено(Запись.РегламентноеЗадание) Тогда + Если СоответствиеРегламентныеЗадания[Запись.РегламентноеЗадание] = Неопределено Тогда + РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Запись.РегламентноеЗадание); + Если РегламентноеЗадание <> Неопределено Тогда + СоответствиеРегламентныеЗадания.Вставить(Запись.РегламентноеЗадание, РегламентноеЗадание); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Запись.СостояниеЗадания = Перечисления.СостоянияЗаданий.Выполняется Тогда + ЗаписьКонтроляВыполнения("ОчередьРегламентныхЗаданий.ЗавершеноСОшибками", Запись); + КонецЕсли; + + Если ЗначениеЗаполнено(Запись.РегламентноеЗадание)Тогда + РегламентноеЗадание = СоответствиеРегламентныеЗадания[Запись.РегламентноеЗадание]; + Если РегламентноеЗадание <> Неопределено Тогда + + НомерПопытки = Запись.НомерПопытки + 1; + Если Запись.СостояниеЗадания = Перечисления.СостоянияЗаданий.Выполняется + И НомерПопытки < РегламентноеЗадание.КоличествоПовторовПриАварийномЗавершении Тогда + + Запись.ЗапланированныйМоментЗапуска = ТекущаяУниверсальнаяДата(); + Запись.НомерПопытки = НомерПопытки; + Запись.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано; + Запись.ИсполняющееФоновоеЗадание = Неопределено; + Иначе + Запись.ЗапланированныйМоментЗапуска = ПолучитьЗапланированныйМоментЗапускаЗадания( + РегламентноеЗадание.Расписание, ЧасовойПояс, Запись.ДатаНачалаПоследнегоЗапуска); + Запись.НомерПопытки = 0; + Если ЗначениеЗаполнено(Запись.ЗапланированныйМоментЗапуска) Тогда + Запись.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано; + Иначе + Запись.СостояниеЗадания = Перечисления.СостоянияЗаданий.НеЗапланировано; + КонецЕсли; + Запись.ИсполняющееФоновоеЗадание = Неопределено; + КонецЕсли; + КонецЕсли; + Иначе + // Это фоновое задание, после выполнения подлежит удалению + НаборЗаписей.Очистить(); + КонецЕсли; + НаборЗаписей.Записать(); + РазблокироватьДанныеДляРедактирования(КлючЗаписи); + КонецЦикла; + + // Вычисление количество требуемых исполняющих фоновых заданий + КоличествоЗапускаемыхФоновыхЗаданий = КоличествоИсполняющихФоновыхЗаданийКЗапуску(); + + // Запуск исполняющих фоновых заданий + ЗапуститьИсполняющееФоновоеЗадание(КоличествоЗапускаемыхФоновыхЗаданий); + +КонецПроцедуры + +// Возвращает текст ошибки при попытке выполнить одновременно два задания с одним ключом. +// +// Возвращаемое значение: +// Строка. +// +Функция ПолучитьТекстИсключенияДублированиеЗаданийСОдинаковымКлючом() Экспорт + + Возврат НСтр("ru = 'Дублирование заданий с одинаковым значения поля ''Ключ'' не допустимо.'"); + +КонецФункции + +// Процедура выполняет задания из РС ОчередьЗаданий +// +// Параметры: +// КлючФоновогоЗадания - УникальныйИдентификатор - ключь необходим +// для поиска текущего фонового задания. +// +Процедура ОбработатьОчередьЗаданий(КлючФоновогоЗадания) Экспорт + + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + НайденноеФоновоеЗадание = ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("Ключ", КлючФоновогоЗадания)); + Если НайденноеФоновоеЗадание.Количество() = 1 Тогда + ИсполняющееФоновоеЗадание = НайденноеФоновоеЗадание[0]; + Иначе + Возврат; + КонецЕсли; + + МожноВыполнять = Истина; + НачалоВыполнения = ТекущаяУниверсальнаяДата(); + + Пока МожноВыполнять Цикл + // Выбор задания для исполнения + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 111 + | ОчередьЗаданий.ОбластьДанных, + | ОчередьЗаданий.Задание КАК Задание, + | ОчередьЗаданий.Использование, + | ОчередьЗаданий.ЗапланированныйМоментЗапуска КАК ЗапланированныйМоментЗапуска, + | ОчередьЗаданий.СостояниеЗадания, + | ОчередьЗаданий.ИсполняющееФоновоеЗадание, + | ОчередьЗаданий.ЭксклюзивноеВыполнение КАК ЭксклюзивноеВыполнение, + | ОчередьЗаданий.НомерПопытки, + | ОчередьЗаданий.РегламентноеЗадание, + | ОчередьЗаданий.ИмяМетода, + | ОчередьЗаданий.Параметры, + | ОчередьЗаданий.ДатаНачалаПоследнегоЗапуска + |ИЗ + | РегистрСведений.ОчередьЗаданий КАК ОчередьЗаданий + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.БлокировкиСеансовОбластиДанных КАК БлокировкиСеансов + | ПО ОчередьЗаданий.ОбластьДанных = БлокировкиСеансов.ОбластьДанных + |ГДЕ + | ОчередьЗаданий.Использование + | И ОчередьЗаданий.ЗапланированныйМоментЗапуска <= &ТекущаяУниверсальнаяДата + | И ОчередьЗаданий.СостояниеЗадания = ЗНАЧЕНИЕ(Перечисление.СостоянияЗаданий.Запланировано) + | И (ОчередьЗаданий.ЭксклюзивноеВыполнение + | ИЛИ БлокировкиСеансов.ОбластьДанных ЕСТЬ NULL + | ИЛИ БлокировкиСеансов.НачалоБлокировки > &ТекущаяУниверсальнаяДата + | ИЛИ БлокировкиСеансов.КонецБлокировки < &ТекущаяУниверсальнаяДата) + | + |УПОРЯДОЧИТЬ ПО + | ЭксклюзивноеВыполнение УБЫВ, + | ЗапланированныйМоментЗапуска УБЫВ, + | Задание"; + Запрос.УстановитьПараметр("ТекущаяУниверсальнаяДата", ТекущаяУниверсальнаяДата()); + + РазмерВыборкиТекст = Формат(Константы.МаксимальноеКоличествоИсполняющихФоновыхЗаданий.Получить(), "ЧН=; ЧГ="); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "111", РазмерВыборкиТекст); + + КоличествоПопыток = 0; + Выборка = Неопределено; + Пока КоличествоПопыток < 5 Цикл + Попытка + Выборка = Запрос.Выполнить().Выбрать(); + Прервать; + Исключение + КоличествоПопыток = КоличествоПопыток + 1; + Если КоличествоПопыток = 5 Тогда + ЗаписьЖурналаРегистрации(НСтр("Очередь заданий.Исполнение заданий"), УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + КонецЦикла; + + БлокировкаУстановлена = Ложь; + Пока Выборка.Следующий() Цикл + Попытка + КлючЗаписи = РегистрыСведений.ОчередьЗаданий.СоздатьКлючЗаписи(Новый Структура("ОбластьДанных, Задание", Выборка.ОбластьДанных, Выборка.Задание)); + ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); + БлокировкаУстановлена = Истина; + + Задание = Выборка.Задание; + ОбластьДанных = Выборка.ОбластьДанных; + Прервать; + Исключение + КонецПопытки; + КонецЦикла; + + Если Не БлокировкаУстановлена Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОчередьЗаданий"); + ЭлементБлокировки.УстановитьЗначение("ОбластьДанных", ОбластьДанных); + ЭлементБлокировки.УстановитьЗначение("Задание" , Задание); + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОчередьЗаданий.ОбластьДанных, + | ОчередьЗаданий.Задание, + | ОчередьЗаданий.Использование, + | ОчередьЗаданий.ЗапланированныйМоментЗапуска, + | ОчередьЗаданий.СостояниеЗадания, + | ОчередьЗаданий.ИсполняющееФоновоеЗадание, + | ОчередьЗаданий.ЭксклюзивноеВыполнение, + | ОчередьЗаданий.НомерПопытки, + | ОчередьЗаданий.РегламентноеЗадание, + | ОчередьЗаданий.ИмяМетода, + | ОчередьЗаданий.Параметры, + | ОчередьЗаданий.ДатаНачалаПоследнегоЗапуска + |ИЗ + | РегистрСведений.ОчередьЗаданий КАК ОчередьЗаданий + |ГДЕ + | ОчередьЗаданий.ОбластьДанных = &ОбластьДанных + | И ОчередьЗаданий.Задание = &Задание + | И ОчередьЗаданий.СостояниеЗадания = ЗНАЧЕНИЕ(Перечисление.СостоянияЗаданий.Запланировано) + | И ОчередьЗаданий.Использование + | И ОчередьЗаданий.ЗапланированныйМоментЗапуска <= &ТекущаяУниверсальнаяДата"; + + Запрос.УстановитьПараметр("ОбластьДанных" , ОбластьДанных); + Запрос.УстановитьПараметр("Задание" , Задание); + Запрос.УстановитьПараметр("ТекущаяУниверсальнаяДата", ТекущаяУниверсальнаяДата()); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + НаборЗаписей = РегистрыСведений.ОчередьЗаданий.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ОбластьДанных.Установить(ОбластьДанных); + НаборЗаписей.Отбор.Задание.Установить(Задание); + + НоваяЗапись = НаборЗаписей.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяЗапись, Выборка); + НоваяЗапись.СостояниеЗадания = Перечисления.СостоянияЗаданий.Выполняется; + НоваяЗапись.ИсполняющееФоновоеЗадание = ИсполняющееФоновоеЗадание.УникальныйИдентификатор; + НоваяЗапись.ДатаНачалаПоследнегоЗапуска = ТекущаяУниверсальнаяДата(); + + НаборЗаписей.Записать(); + Иначе + Возврат; + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обработка очереди заданий'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + УстановитьПривилегированныйРежим(Истина); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОбластьДанных); + + УстановитьПривилегированныйРежим(Ложь); + + // Выполнение задания + Попытка + ЗаписьКонтроляВыполнения("ОчередьРегламентныхЗаданий.Старт", НаборЗаписей[0]); + + ВыполнитьЗадание(Выборка.ИмяМетода, Выборка.Параметры.Получить()); + + ЗаписьКонтроляВыполнения("ОчередьРегламентныхЗаданий.ЗавершеноУспешно", НаборЗаписей[0]); + Исключение + ЗаписьКонтроляВыполнения("ОчередьРегламентныхЗаданий.ЗавершеноСОшибками", НаборЗаписей[0]); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Фоновое задание. Ошибка выполнения'"), УровеньЖурналаРегистрации.Ошибка, , + ИсполняющееФоновоеЗадание, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + Пока ТранзакцияАктивна() Цикл + ОтменитьТранзакцию(); + КонецЦикла; + КонецПопытки; + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + УстановитьПривилегированныйРежим(Ложь); + + НаборЗаписей[0].СостояниеЗадания = Перечисления.СостоянияЗаданий.Завершено; + НаборЗаписей.Записать(); + + РазблокироватьДанныеДляРедактирования(КлючЗаписи); + + // Проверка возможности дальнейшего выполения + КоличествоРаботающихФоновыхЗаданий = КоличествоИсполняющихФоновыхЗаданий(); + + ДлительностьВыполнения = ТекущаяУниверсальнаяДата() - НачалоВыполнения; + Если ДлительностьВыполнения > Константы.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания.Получить() + ИЛИ КоличествоРаботающихФоновыхЗаданий > Константы.МаксимальноеКоличествоИсполняющихФоновыхЗаданий.Получить() Тогда + + МожноВыполнять = Ложь; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Заполняет РС "РазделенныеРегламентныеЗадания" списком разделенных регламентных заданий, +// а также принудительно снимает признак Использования для этих заданий в системной таблице регламентных заданий. +// +Процедура ОбновитьРазделенныеРегламентныеЗадания() Экспорт + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + // Регламентные задание необходимо получать в неразделенном режиме. + // Сохранение текущего состояния. + ТекущееСостояние = ОбщегоНазначения.ИспользованиеРазделителяСеанса(); + Если ТекущееСостояние Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + КонецЕсли; + + НачатьТранзакцию(); + Попытка + ТаблицаИспользованияРегламентныхЗаданий = ПолучитьТаблицуИспользованияРегламентныхЗаданий(); + + Для Каждого Строка Из ТаблицаИспользованияРегламентныхЗаданий Цикл + + Отбор = Новый Структура("Метаданные", Метаданные.РегламентныеЗадания[Строка.РегламентноеЗадание]); + НайденныеРегламентыеЗадания = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор); + + Для каждого РегламентноеЗадание Из НайденныеРегламентыеЗадания Цикл + РегламентноеЗадание.Использование = Строка.Использование; + РегламентноеЗадание.Записать(); + КонецЦикла; + + КонецЦикла; + + // Если включено разделение, необходимо отключить разделенные регламентные задания + // и заполнить регистр РазделенныеРегламентныеЗадания. + ТаблицаНеразделенныхРегламентныхЗаданий = Новый ТаблицаЗначений; + ТаблицаНеразделенныхРегламентныхЗаданий.Колонки.Добавить("РегламентноеЗадание" , Новый ОписаниеТипов("УникальныйИдентификатор")); + ТаблицаНеразделенныхРегламентныхЗаданий.Колонки.Добавить("Использование" , Новый ОписаниеТипов("Булево")); + ТаблицаНеразделенныхРегламентныхЗаданий.Колонки.Добавить("ИндивидуальнаяНастройка", Новый ОписаниеТипов("Булево")); + + СписокРазделенныхРегламентныхЗаданий = ПолучитьСписокРазделенныхРегламентныхЗаданий(); + + Задания = РегламентныеЗадания.ПолучитьРегламентныеЗадания(); + Для Каждого Задание Из Задания Цикл + Если СписокРазделенныхРегламентныхЗаданий.Найти(Задание.Метаданные.Имя) <> Неопределено Тогда + НоваяСтрока = ТаблицаНеразделенныхРегламентныхЗаданий.Добавить(); + НоваяСтрока.РегламентноеЗадание = Задание.УникальныйИдентификатор; + НоваяСтрока.Использование = Задание.Метаданные.Использование; + + Задание.Использование = Ложь; + Задание.Записать(); + КонецЕсли; + КонецЦикла; + + НаборЗаписей = РегистрыСведений.РазделенныеРегламентныеЗадания.СоздатьНаборЗаписей(); + НаборЗаписей.Прочитать(); + ИсходнаяТаблицаЗаданий = НаборЗаписей.Выгрузить(); + Для каждого СтрокаТаблицы Из ТаблицаНеразделенныхРегламентныхЗаданий Цикл + ИсходнаяСтрокаЗадания = ИсходнаяТаблицаЗаданий.Найти(СтрокаТаблицы.РегламентноеЗадание, "РегламентноеЗадание"); + Если ИсходнаяСтрокаЗадания <> Неопределено Тогда + СтрокаТаблицы.Использование = ИсходнаяСтрокаЗадания.Использование; + СтрокаТаблицы.ИндивидуальнаяНастройка = ИсходнаяСтрокаЗадания.ИндивидуальнаяНастройка; + КонецЕсли; + КонецЦикла; + НаборЗаписей.Загрузить(ТаблицаНеразделенныхРегламентныхЗаданий); + НаборЗаписей.Записать(); + + // Восставновление состояния параметра сеанса + Если ТекущееСостояние <> ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(ТекущееСостояние); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление разделенных регламентных заданий'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Синхронизирует РС "ОчередьЗаданий" с заданиями в РС "РазделенныеРегламентныеЗадания". +// Если в РС "РазделенныеРегламентныеЗадания" добавлено регламентное задание, +// то производится добавление этого задания в РС "ОчередьЗаданий". +// Если регламентное задание удалено, то из РС "ОчередьЗаданий" задание также удалется. +// Также синхронизуется признак Использования задания. +// Функция производит синхронизацию в текущей области данных. +// +// Параметры: +// ОбластьДанных - Число - Если параметр задан, +// то обновление производится в соответствующей ему области данных, +// иначе в текущей области данных. +// +Процедура ОбновитьОчередьЗаданий(ОбластьДанных = Неопределено) Экспорт + + Если НЕ ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда + Возврат; + КонецЕсли; + + Если ОбластьДанных = Неопределено Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + КонецЕсли; + + ЧасовойПояс = ПолучитьЧасовойПоясОбластиДанных(ОбластьДанных); + + СписокРегламентныхЗаданийИндивидуальнаяНастройка = Новый Массив; + + // Регламентные задание необходимо получать в неразделенном режиме + ТекущееСостояние = ОбщегоНазначения.ИспользованиеРазделителяСеанса(); + Если ТекущееСостояние Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + КонецЕсли; + + СписокРегламентныхЗаданий = Новый СписокЗначений; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | РазделенныеРегламентныеЗадания.РегламентноеЗадание, + | РазделенныеРегламентныеЗадания.Использование, + | РазделенныеРегламентныеЗадания.ИндивидуальнаяНастройка + |ИЗ + | РегистрСведений.РазделенныеРегламентныеЗадания КАК РазделенныеРегламентныеЗадания"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Выборка.РегламентноеЗадание); + Если РегламентноеЗадание <> Неопределено Тогда + СписокРегламентныхЗаданий.Добавить(РегламентноеЗадание,, Выборка.Использование); + + Если Выборка.ИндивидуальнаяНастройка Тогда + СписокРегламентныхЗаданийИндивидуальнаяНастройка.Добавить(Выборка.РегламентноеЗадание); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + НачатьТранзакцию(); + Попытка + // Удаление существующих регламентных заданий в РС ОчередьЗаданий + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОчередьЗаданий.ОбластьДанных, + | ОчередьЗаданий.Задание, + | ОчередьЗаданий.РегламентноеЗадание + |ИЗ + | РегистрСведений.ОчередьЗаданий КАК ОчередьЗаданий + |ГДЕ + | ОчередьЗаданий.РегламентноеЗадание <> &ПустойУникальныйИдентификатор + | И ОчередьЗаданий.ОбластьДанных = &ОбластьДанных"; + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + Запрос.УстановитьПараметр("ОбластьДанных" , ОбластьДанных); + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + МенеджерЗаписи = РегистрыСведений.ОчередьЗаданий.СоздатьМенеджерЗаписи(); + + Пока Выборка.Следующий() Цикл + КлючЗаписи = РегистрыСведений.ОчередьЗаданий.СоздатьКлючЗаписи(Новый Структура("ОбластьДанных, Задание", + Выборка.ОбластьДанных, Выборка.Задание)); + ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); + КонецЦикла; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОчередьЗаданий"); + ЭлементБлокировки.ИсточникДанных = Результат; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("ОбластьДанных", "ОбластьДанных"); + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Задание" , "Задание"); + Блокировка.Заблокировать(); + + Выборка.Сбросить(); + Пока Выборка.Следующий() Цикл + Если СписокРегламентныхЗаданийИндивидуальнаяНастройка.Найти(Выборка.РегламентноеЗадание) = Неопределено Тогда + МенеджерЗаписи.ОбластьДанных = Выборка.ОбластьДанных; + МенеджерЗаписи.Задание = Выборка.Задание; + МенеджерЗаписи.Удалить(); + КонецЕсли; + КонецЦикла; + + // Добавление заданий в РС ОчередьЗаданий в соответствии со списком регламентных заданий из РС РазделенныеРегламентныеЗадания + Для Каждого РегламентноеЗадание Из СписокРегламентныхЗаданий Цикл + Расписание = РегламентноеЗадание.Значение.Расписание; + Если РегламентноеЗадание <> Неопределено + И СписокРегламентныхЗаданийИндивидуальнаяНастройка.Найти(РегламентноеЗадание.Значение.УникальныйИдентификатор) = Неопределено Тогда + Задание = Новый УникальныйИдентификатор; + + НовыйНаборЗаписей = РегистрыСведений.ОчередьЗаданий.СоздатьНаборЗаписей(); + НовыйНаборЗаписей.Отбор.ОбластьДанных.Установить(ОбластьДанных); + НовыйНаборЗаписей.Отбор.Задание.Установить(Задание); + + НоваяЗапись = НовыйНаборЗаписей.Добавить(); + НоваяЗапись.ОбластьДанных = ОбластьДанных; + НоваяЗапись.Задание = Задание; + НоваяЗапись.Использование = РегламентноеЗадание.Пометка; + НоваяЗапись.РегламентноеЗадание = РегламентноеЗадание.Значение.УникальныйИдентификатор; + НоваяЗапись.Ключ = РегламентноеЗадание.Значение.Ключ; + НоваяЗапись.Параметры = Новый ХранилищеЗначения(РегламентноеЗадание.Значение.Параметры); + НоваяЗапись.ИмяМетода = РегламентноеЗадание.Значение.Метаданные.ИмяМетода; + НоваяЗапись.ЗапланированныйМоментЗапуска = ПолучитьЗапланированныйМоментЗапускаЗадания(Расписание, ЧасовойПояс); + + // Если запланированный момент запуска не задан, то задание считается не запланированным (выполняться не будет). + Если ЗначениеЗаполнено(НоваяЗапись.ЗапланированныйМоментЗапуска) Тогда + НоваяЗапись.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано; + Иначе + НоваяЗапись.СостояниеЗадания = Перечисления.СостоянияЗаданий.НеЗапланировано; + КонецЕсли; + + КлючЗаписи = РегистрыСведений.ОчередьЗаданий.СоздатьКлючЗаписи(Новый Структура("ОбластьДанных, Задание", + НоваяЗапись.ОбластьДанных, НоваяЗапись.Задание)); + ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); + + НовыйНаборЗаписей.Записать(); + КонецЕсли; + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление очереди заданий'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + // Восставновление состояния параметра сеанса + Если ТекущееСостояние Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(ТекущееСостояние); + КонецЕсли; + +КонецПроцедуры + +// Получает задание по заданному отбору. +// +// Параметры: +// Отбор - Структура - Структура, задающая отбор. +// Значениями структуры могут быть: +// ИмяМетода, Задание, СостояниеЗадания, РегламентноеЗадание, Ключ +// ОбластьДанных - Число - задает область данных, +// для которой необходимо добавить новое задание. +// +// Возвращаемое значение: +// Массив, Строка, Неопределено. +// Строка - Идентификатор задания если задание найдено, +// Массив - заданий несколько +// Неопределено - задание не найдено. +// +Функция ПолучитьЗадание(Отбор, ОбластьДанных = Неопределено) Экспорт + + Если ТипЗнч(Отбор) <> Тип("Структура") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1'')'"); + КонецЕсли; + Если Отбор.Свойство("Ключ") Тогда + Если ТипЗнч(Отбор.Ключ) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''Ключ'')'"); + КонецЕсли; + КонецЕсли; + Если Отбор.Свойство("Метаданные") Тогда + Если ТипЗнч(Отбор.Метаданные) <> Тип("Строка") + И ТипЗнч(Отбор.Метаданные) <> Тип("ОбъектМетаданных") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''Метаданные'')'"); + КонецЕсли; + КонецЕсли; + Если Отбор.Свойство("РегламентноеЗадание") Тогда + Если ТипЗнч(Отбор.РегламентноеЗадание) <> Тип("УникальныйИдентификатор") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''РегламентноеЗадание'')'"); + КонецЕсли; + КонецЕсли; + Если Отбор.Свойство("ИмяМетода") Тогда + Если ТипЗнч(Отбор.ИмяМетода) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''ИмяМетода'')'"); + КонецЕсли; + КонецЕсли; + Если Отбор.Свойство("Задание") Тогда + Если ТипЗнч(Отбор.Наименование) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''Задание'')'"); + КонецЕсли; + КонецЕсли; + + Если ОбластьДанных = Неопределено Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + КонецЕсли; + + Задания = Неопределено; + + УстановитьПривилегированныйРежим(Истина); + + Если Отбор.Свойство("ИмяМетода") И ЗначениеЗаполнено(Отбор.ИмяМетода) + ИЛИ Отбор.Свойство("РегламентноеЗадание") И ЗначениеЗаполнено(Отбор.РегламентноеЗадание) Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОчередьЗаданий.Задание + |ИЗ + | РегистрСведений.ОчередьЗаданий КАК ОчередьЗаданий + |ГДЕ + | ОчередьЗаданий.ОбластьДанных = &ОбластьДанных"; + Запрос.УстановитьПараметр("ОбластьДанных", ОбластьДанных); + + Если Отбор.Свойство("ИмяМетода") И ЗначениеЗаполнено(Отбор.ИмяМетода) Тогда + Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.ИмяМетода = &ИмяМетода "; + Запрос.УстановитьПараметр("ИмяМетода", Отбор.ИмяМетода); + КонецЕсли; + Если Отбор.Свойство("СостояниеЗадания") И ЗначениеЗаполнено(Отбор.СостояниеЗадания) Тогда + Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.СостояниеЗадания = &СостояниеЗадания "; + Запрос.УстановитьПараметр("СостояниеЗадания", Отбор.СостояниеЗадания); + КонецЕсли; + Если Отбор.Свойство("РегламентноеЗадание") И ЗначениеЗаполнено(Отбор.РегламентноеЗадание) Тогда + Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.РегламентноеЗадание = &РегламентноеЗадание "; + Запрос.УстановитьПараметр("РегламентноеЗадание", Отбор.РегламентноеЗадание); + КонецЕсли; + Если Отбор.Свойство("Ключ") И ЗначениеЗаполнено(Отбор.Ключ) Тогда + Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.Ключ = &Ключ "; + Запрос.УстановитьПараметр("Ключ", Отбор.Ключ); + КонецЕсли; + Если Отбор.Свойство("Задание") И ЗначениеЗаполнено(Отбор.Задание) Тогда + Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.Задание = &Задание "; + Запрос.УстановитьПараметр("Задание", Отбор.Задание); + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + Если Не РезультатЗапроса.Пустой() Тогда + СписокЗаданий = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Задание"); + Если СписокЗаданий.Количество() = 1 Тогда + Задания = СписокЗаданий[0]; + Иначе + Задания = СписокЗаданий; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Задания; + +КонецФункции + +// Добавляет новое задание в РС ОчередьЗаданий. +// +// Параметры: +// ПараметрыЗадания - Структура - Параметры добавляемого задания: +// Использование, ЗапланированныйМоментЗапуска, ИмяМетода, +// Параметры, ЭксклюзивноеВыполнение, РегламентноеЗадание +// ОбластьДанных - Число - задает область данных, +// для которой необходимо добавить новое задание. +// +// Возвращаемое значение: +// Строка. +// Идентификатор добавленого задания. +// +Функция ДобавитьЗадание(ПараметрыЗадания, ОбластьДанных = Неопределено) Экспорт + + Если ТипЗнч(ПараметрыЗадания) <> Тип("Структура") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1'')'"); + КонецЕсли; + Если ПараметрыЗадания.Свойство("Использование") Тогда + Если ТипЗнч(ПараметрыЗадания.Использование) <> Тип("Булево") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''Использование'')'"); + Иначе + Использование = ПараметрыЗадания.Использование; + КонецЕсли; + Иначе + Использование = Истина; + КонецЕсли; + Если ПараметрыЗадания.Свойство("ЭксклюзивноеВыполнение") Тогда + Если ТипЗнч(ПараметрыЗадания.ЭксклюзивноеВыполнение) <> Тип("Булево") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''ЭксклюзивноеВыполнение'')'"); + КонецЕсли; + КонецЕсли; + Если ПараметрыЗадания.Свойство("Ключ") Тогда + Если ТипЗнч(ПараметрыЗадания.Ключ) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''Ключ'')'"); + КонецЕсли; + КонецЕсли; + Если ПараметрыЗадания.Свойство("РегламентноеЗадание") Тогда + Если ТипЗнч(ПараметрыЗадания.РегламентноеЗадание) <> Тип("УникальныйИдентификатор") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''РегламентноеЗадание'')'"); + КонецЕсли; + КонецЕсли; + Если ПараметрыЗадания.Свойство("ИмяМетода") Тогда + Если ТипЗнч(ПараметрыЗадания.ИмяМетода) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''ИмяМетода'')'"); + КонецЕсли; + КонецЕсли; + Если ПараметрыЗадания.Свойство("ЗапланированныйМоментЗапуска") Тогда + Если ТипЗнч(ПараметрыЗадания.ЗапланированныйМоментЗапуска) <> Тип("Дата") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''ЗапланированныйМоментЗапуска'')'"); + КонецЕсли; + КонецЕсли; + + Если ОбластьДанных = Неопределено Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + Иначе + Если Не ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() + И ОбластьДанных <> ОбщегоНазначения.ЗначениеРазделителяСеанса() Тогда + ВызватьИсключение(НСтр("ru = 'В данном сеансе недопустимо обращение к данным из другой области данных!'")); + КонецЕсли; + КонецЕсли; + + Если ПараметрыЗадания.Свойство("Ключ") И ЗначениеЗаполнено(ПараметрыЗадания.Ключ) Тогда + Если ПолучитьЗадание(ПараметрыЗадания, ОбластьДанных) <> Неопределено Тогда + ВызватьИсключение ПолучитьТекстИсключенияДублированиеЗаданийСОдинаковымКлючом(); + КонецЕсли; + КонецЕсли; + + Параметры = Новый ХранилищеЗначения(Новый Массив); + Если ПараметрыЗадания.Свойство("Параметры") Тогда + Если ТипЗнч(ПараметрыЗадания.Параметры) = Тип("ХранилищеЗначения") Тогда + Параметры = ПараметрыЗадания.Параметры; + ИначеЕсли ТипЗнч(ПараметрыЗадания.Параметры) = Тип("Массив") Тогда + Параметры = Новый ХранилищеЗначения(ПараметрыЗадания.Параметры); + КонецЕсли; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписи = РегистрыСведений.ОчередьЗаданий.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ПараметрыЗадания); + МенеджерЗаписи.ОбластьДанных = ОбластьДанных; + МенеджерЗаписи.Задание = Новый УникальныйИдентификатор; + + ЧасовойПояс = ПолучитьЧасовойПоясОбластиДанных(ОбластьДанных); + Если ЗначениеЗаполнено(МенеджерЗаписи.ЗапланированныйМоментЗапуска) Тогда + МенеджерЗаписи.ЗапланированныйМоментЗапуска = УниверсальноеВремя(МенеджерЗаписи.ЗапланированныйМоментЗапуска, ЧасовойПояс); + КонецЕсли; + + Если ЗначениеЗаполнено(МенеджерЗаписи.ЗапланированныйМоментЗапуска) Тогда + МенеджерЗаписи.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано; + Иначе + Если ЗначениеЗаполнено(МенеджерЗаписи.РегламентноеЗадание) Тогда + МенеджерЗаписи.СостояниеЗадания = Перечисления.СостоянияЗаданий.НеЗапланировано; + Иначе + МенеджерЗаписи.ЗапланированныйМоментЗапуска = ТекущаяУниверсальнаяДата(); + МенеджерЗаписи.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано; + КонецЕсли; + КонецЕсли; + МенеджерЗаписи.Параметры = Параметры; + МенеджерЗаписи.Использование = Использование; + МенеджерЗаписи.Записать(); + + Возврат МенеджерЗаписи.Задание; + +КонецФункции + +// Добавляет новое задание в РС ОчередьЗаданий. +// +// Параметры: +// Задание - Строка - Идентификатор задания +// ПараметрыЗадания - Структура - Параметры, которые следует установить заданию: +// Использование, ЗапланированныйМоментЗапуска, ИмяМетода, +// Параметры, ЭксклюзивноеВыполнение, РегламентноеЗадание +// ОбластьДанных - Число - задает область данных, +// для которой необходимо добавить новое задание. +// +// Возвращаемое значение: +// Строка. +// Идентификатор добавленого задания. +// +Процедура ИзменитьЗадание(Задание, ПараметрыЗадания, ОбластьДанных = Неопределено) Экспорт + + Если Не ЗначениеЗаполнено(Задание) ИЛИ ТипЗнч(Задание) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1'')'"); + КонецЕсли; + + Если ТипЗнч(ПараметрыЗадания) <> Тип("Структура") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра (параметр номер ''2'')'"); + КонецЕсли; + Если ПараметрыЗадания.Свойство("Использование") Тогда + Если ТипЗнч(ПараметрыЗадания.Использование) <> Тип("Булево") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''2'', свойство ''Использование'')'"); + КонецЕсли; + КонецЕсли; + Если ПараметрыЗадания.Свойство("ЭксклюзивноеВыполнение") Тогда + Если ТипЗнч(ПараметрыЗадания.ЭксклюзивноеВыполнение) <> Тип("Булево") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''2'', свойство ''ЭксклюзивноеВыполнение'')'"); + КонецЕсли; + КонецЕсли; + Если ПараметрыЗадания.Свойство("Ключ") Тогда + Если ТипЗнч(ПараметрыЗадания.Ключ) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''2'', свойство ''Ключ'')'"); + КонецЕсли; + КонецЕсли; + Если ПараметрыЗадания.Свойство("РегламентноеЗадание") Тогда + Если ТипЗнч(ПараметрыЗадания.РегламентноеЗадание) <> Тип("УникальныйИдентификатор") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''2'', свойство ''РегламентноеЗадание'')'"); + КонецЕсли; + КонецЕсли; + Если ПараметрыЗадания.Свойство("ИмяМетода") Тогда + Если ТипЗнч(ПараметрыЗадания.ИмяМетода) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''2'', свойство ''ИмяМетода'')'"); + КонецЕсли; + КонецЕсли; + Если ПараметрыЗадания.Свойство("ЗапланированныйМоментЗапуска") Тогда + Если ТипЗнч(ПараметрыЗадания.ЗапланированныйМоментЗапуска) <> Тип("Дата") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''2'', свойство ''ЗапланированныйМоментЗапуска'')'"); + КонецЕсли; + КонецЕсли; + + Если ОбластьДанных = Неопределено Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + КонецЕсли; + + Если ПараметрыЗадания.Свойство("Ключ") И ЗначениеЗаполнено(ПараметрыЗадания.Ключ) Тогда + Если ПолучитьЗадание(ПараметрыЗадания, ОбластьДанных) <> Неопределено Тогда + ВызватьИсключение "Дублирование заданий с одинаковым значения поля 'Ключ' не допустимо"; + КонецЕсли; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + КлючЗаписи = РегистрыСведений.ОчередьЗаданий.СоздатьКлючЗаписи(Новый Структура("ОбластьДанных, Задание", ОбластьДанных, Задание)); + ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); + + МенеджерЗаписи = РегистрыСведений.ОчередьЗаданий.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ПараметрыЗадания); + МенеджерЗаписи.ОбластьДанных = ОбластьДанных; + МенеджерЗаписи.Задание = Задание; + МенеджерЗаписи.Прочитать(); + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ПараметрыЗадания); + + Если ЗначениеЗаполнено(МенеджерЗаписи.ЗапланированныйМоментЗапуска) Тогда + МенеджерЗаписи.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано; + Иначе + Если ЗначениеЗаполнено(МенеджерЗаписи.РегламентноеЗадание) Тогда + МенеджерЗаписи.СостояниеЗадания = Перечисления.СостоянияЗаданий.НеЗапланировано; + Иначе + МенеджерЗаписи.ЗапланированныйМоментЗапуска = ТекущаяУниверсальнаяДата(); + МенеджерЗаписи.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано; + КонецЕсли; + КонецЕсли; + + МенеджерЗаписи.Записать(); + +КонецПроцедуры + +// Удаляет задания из РС ОчередьЗаданий. +// +// Параметры: +// Задание - Строка - Идентификатор задания +// ОбластьДанных - Число - задает область данных, +// для которой необходимо добавить новое задание. +// +Процедура УдалитьЗадание(Задание, ОбластьДанных = Неопределено) Экспорт + + Если Не ЗначениеЗаполнено(Задание) ИЛИ ТипЗнч(Задание) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1'')'"); + КонецЕсли; + + Если ОбластьДанных = Неопределено Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + КлючЗаписи = РегистрыСведений.ОчередьЗаданий.СоздатьКлючЗаписи(Новый Структура("ОбластьДанных, Задание", ОбластьДанных, Задание)); + ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); + + МенеджерЗаписи = РегистрыСведений.ОчередьЗаданий.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = ОбластьДанных; + МенеджерЗаписи.Задание = Задание; + МенеджерЗаписи.Удалить(); + +КонецПроцедуры + +// Осуществляет поиск регламентного задания по уникальному идентификатору. +// В разделенном режиме +// +// Параметры: +// Идентификатор - УникальныйИдентификатор - Идентификатор +// регламентного задания. +// +// Возвращаемое значение: +// РегламентноеЗадание, Структура, Неопределено. +// Для разделеного режима возвращается структура +// со свойствами регламентного задания. +// +Функция НайтиПоУникальномуИдентификатору(Идентификатор) Экспорт + + Если ТипЗнч(Идентификатор) <> Тип("УникальныйИдентификатор") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1'')'"); + КонецЕсли; + + РегламентноеЗадание = Неопределено; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + Отбор = Новый Структура("УникальныйИдентификатор", Идентификатор); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ОчередьЗаданий.ОбластьДанных, + | ОчередьЗаданий.Задание, + | ОчередьЗаданий.Использование, + | ОчередьЗаданий.ЗапланированныйМоментЗапуска, + | ОчередьЗаданий.СостояниеЗадания, + | ОчередьЗаданий.ИсполняющееФоновоеЗадание, + | ОчередьЗаданий.ЭксклюзивноеВыполнение, + | ОчередьЗаданий.НомерПопытки, + | ОчередьЗаданий.РегламентноеЗадание, + | ОчередьЗаданий.ИмяМетода, + | ОчередьЗаданий.Параметры, + | ОчередьЗаданий.ДатаНачалаПоследнегоЗапуска, + | ОчередьЗаданий.Ключ + |ИЗ + | РегистрСведений.ОчередьЗаданий КАК ОчередьЗаданий + |ГДЕ + | ОчередьЗаданий.ОбластьДанных = &ОбластьДанных + | И ОчередьЗаданий.РегламентноеЗадание = &РегламентноеЗадание"; + Запрос.УстановитьПараметр("РегламентноеЗадание", Идентификатор); + Запрос.УстановитьПараметр("ОбластьДанных" , ОбластьДанных); + Результат = Запрос.Выполнить(); + Если Не Результат.Пустой() Тогда + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + РегламентноеЗадание = Новый Структура; + РегламентноеЗадание.Вставить("Задание" , Выборка.Задание); + РегламентноеЗадание.Вставить("Использование" , Выборка.Использование); + РегламентноеЗадание.Вставить("УникальныйИдентфикатор", Выборка.РегламентноеЗадание); + РегламентноеЗадание.Вставить("ИмяМетода" , Выборка.ИмяМетода); + РегламентноеЗадание.Вставить("Ключ" , Выборка.Ключ); + Если ТипЗнч(Выборка.Параметры) = Тип("ХранилищеЗначения") Тогда + РегламентноеЗадание.Вставить("Параметры", Выборка.Параметры.Получить()); + Иначе + РегламентноеЗадание.Вставить("Параметры", Новый Массив); + КонецЕсли; + КонецЕсли; + Иначе + РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор); + КонецЕсли; + + Возврат РегламентноеЗадание; + +КонецФункции + +// Возвращает Истина, если разделенное регламентное задание с ключом РегламентноеЗаданиеGUID используется. +// +Функция РазделенноеРегламентноеЗаданиеИспользуется(РегламентноеЗаданиеGUID) Экспорт + + НаборЗаписей = РегистрыСведений.РазделенныеРегламентныеЗадания.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.РегламентноеЗадание.Установить(РегламентноеЗаданиеGUID); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() = 0 Тогда + Возврат Ложь; + Иначе + Возврат НаборЗаписей[0].Использование; + КонецЕсли; + +КонецФункции + +// Получает массив регламентных заданий по заданному отбору. +// +// Параметры: +// Отбор - Структура - Структура, задающая отбор. +// Значениями структуры могут быть: УникальныйИдентификатор, Ключ, +// Использование, Задание. +// Если отбор не задан, получаются все регламентные задания. +// +// Возвращаемое значение: +// Массив. +// +Функция ПолучитьРегламентныеЗадания(Отбор) Экспорт + + Если Отбор <> Неопределено Тогда + Если ТипЗнч(Отбор) <> Тип("Структура") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1'')'"); + КонецЕсли; + Если Отбор.Свойство("Использование") Тогда + Если ТипЗнч(Отбор.Использование) <> Тип("Булево") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''Использование'')'"); + КонецЕсли; + КонецЕсли; + Если Отбор.Свойство("Ключ") Тогда + Если ТипЗнч(Отбор.Ключ) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''Ключ'')'"); + КонецЕсли; + КонецЕсли; + Если Отбор.Свойство("УникальныйИдентификатор") Тогда + Если ТипЗнч(Отбор.УникальныйИдентификатор) <> Тип("УникальныйИдентификатор") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''УникальныйИдентификатор'')'"); + КонецЕсли; + КонецЕсли; + Если Отбор.Свойство("Задание") Тогда + Если ТипЗнч(Отбор.Задание) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''Задание'')'"); + КонецЕсли; + КонецЕсли; + Если Отбор.Свойство("ИмяМетода") Тогда + Если ТипЗнч(Отбор.ИмяМетода) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''ИмяМетода'')'"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + НайденныеРегламентныеЗадания = Новый Массив; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + РазделенныеРегламентныеЗадания = Новый Массив; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОчередьЗаданий.ОбластьДанных, + | ОчередьЗаданий.Задание, + | ОчередьЗаданий.Использование, + | ОчередьЗаданий.ЗапланированныйМоментЗапуска, + | ОчередьЗаданий.СостояниеЗадания, + | ОчередьЗаданий.ИсполняющееФоновоеЗадание, + | ОчередьЗаданий.ЭксклюзивноеВыполнение, + | ОчередьЗаданий.НомерПопытки, + | ОчередьЗаданий.РегламентноеЗадание, + | ОчередьЗаданий.ИмяМетода, + | ОчередьЗаданий.Параметры, + | ОчередьЗаданий.ДатаНачалаПоследнегоЗапуска, + | ОчередьЗаданий.Ключ + |ИЗ + | РегистрСведений.ОчередьЗаданий КАК ОчередьЗаданий + |ГДЕ + | ОчередьЗаданий.ОбластьДанных = &ОбластьДанных"; + Запрос.УстановитьПараметр("ОбластьДанных", ОбластьДанных); + + Если Отбор.Свойство("Использование") + ИЛИ Отбор.Свойство("Ключ") + ИЛИ Отбор.Свойство("УникальныйИдентификатор") + ИЛИ Отбор.Свойство("Задание") + ИЛИ Отбор.Свойство("ИмяМетода") Тогда + МассивСвойств = Новый Массив; + МассивСвойств.Добавить("Использование"); + МассивСвойств.Добавить("Ключ"); + МассивСвойств.Добавить("УникальныйИдентификатор"); + МассивСвойств.Добавить("Задание"); + МассивСвойств.Добавить("ИмяМетода"); + Для Каждого Свойство Из МассивСвойств Цикл + Если Отбор.Свойство(Свойство) Тогда + Если Свойство = "УникальныйИдентификатор" Тогда + Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.РегламентноеЗадание = &УникальныйИдентификатор "; + Иначе + Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий." + Свойство + " = &" + Свойство; + КонецЕсли; + Запрос.УстановитьПараметр(Свойство, Отбор[Свойство]); + КонецЕсли; + КонецЦикла; + КонецЕсли; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + РегламентноеЗадание = Новый Структура; + РегламентноеЗадание.Вставить("Задание" , Выборка.Задание); + РегламентноеЗадание.Вставить("Использование" , Выборка.Использование); + РегламентноеЗадание.Вставить("УникальныйИдентфикатор", Выборка.РегламентноеЗадание); + РегламентноеЗадание.Вставить("ИмяМетода" , Выборка.ИмяМетода); + РегламентноеЗадание.Вставить("Ключ" , Выборка.Ключ); + Если ТипЗнч(Выборка.Параметры) = Тип("ХранилищеЗначения") Тогда + РегламентноеЗадание.Вставить("Параметры", Выборка.Параметры.Получить()); + Иначе + РегламентноеЗадание.Вставить("Параметры", Новый Массив); + КонецЕсли; + НайденныеРегламентныеЗадания.Добавить(РегламентноеЗадание); + КонецЦикла; + Иначе + Если Не Отбор.Свойство("ИмяМетода") Тогда + ВызватьИсключение НСтр("ru = 'Поиск регламентных заданий возможен только по ИмяМетода'"); + КонецЕсли; + + Для Каждого РегламентноеЗаданиеМетаданные Из Метаданные.РегламентныеЗадания Цикл + Если ВРег(РегламентноеЗаданиеМетаданные.ИмяМетода) = ВРег(Отбор.ИмяМетода) Тогда + НайденныеРегламентныеЗадания = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Новый Структура("Метаданные", РегламентноеЗаданиеМетаданные)); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат НайденныеРегламентныеЗадания; + +КонецФункции + +// Записать регламентное задание в базу данных. +// +// Параметры: +// РегламетноеЗадание - РегламентноеЗадание, Структура. +// +Процедура Записать(РегламентноеЗадание) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ТипЗнч(РегламентноеЗадание) <> Тип("Структура") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1'')'"); + КонецЕсли; + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + Если Не РегламентноеЗадание.Свойство("Задание") + ИЛИ Не ЗначениеЗаполнено(РегламентноеЗадание.Задание) + ИЛИ ТипЗнч(РегламентноеЗадание.Задание) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1, свойство ''Задание'')'"); + КонецЕсли; + ИзменитьЗадание(РегламентноеЗадание.Задание, РегламентноеЗадание, ОбластьДанных); + Иначе + Если ТипЗнч(РегламентноеЗадание) <> Тип("РегламентноеЗадание") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1'')'"); + КонецЕсли; + + РегламентноеЗадание.Записать(); + КонецЕсли; + +КонецПроцедуры + +// Удаляет регламентное задание из базы данных. +// +// Параметры: +// РегламетноеЗадание - РегламентноеЗадание, Структура. +// +Процедура Удалить(РегламентноеЗадание) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ТипЗнч(РегламентноеЗадание) <> Тип("Структура") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1'')'"); + КонецЕсли; + + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + Если Не РегламентноеЗадание.Свойство("Задание") + ИЛИ Не ЗначениеЗаполнено(РегламентноеЗадание.Задание) + ИЛИ ТипЗнч(РегламентноеЗадание.Задание) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1, свойство ''Задание'')'"); + КонецЕсли; + УдалитьЗадание(РегламентноеЗадание.Задание, ОбластьДанных); + Иначе + Если ТипЗнч(РегламентноеЗадание) <> Тип("РегламентноеЗадание") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1'')'"); + КонецЕсли; + + РегламентноеЗадание.Удалить(); + КонецЕсли; + +КонецПроцедуры + +// Добавляет новое задание в РС ОчередьЗаданий. +// +// Параметры: +// ИмяМетода - Строка - Имя метода из не глобального +// общего модуля в форме ИмяМодуля.ИмяМетода. +// Параметры - Массив - Массив параметров, передаваемых в метод. +// Количество и типы параметров должны соответствовать +// параметрам метода. +// Ключ - Строка - Ключ задания. Если ключ задан, +// то он должен быть уникальным среди ключей заданий, +// имеющих такое же имя метода, что и у данного фонового задания. +// ЭксклюзивноеВыполнение - Булево - Признак эксклюзивного выполнения задания. +// ОбластьДанных - Число - задает область данных, +// для которой необходимо добавить новое задание. +// +// Возвращаемое значение: +// Строка. +// Идентификатор добавленого задания. +// +Функция ЗапланироватьВыполнениеЗадания(ИмяМетода, Параметры = Неопределено, Ключ = "", ЭксклюзивноеВыполнение = Ложь, ОбластьДанных = Неопределено) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ИмяМетода" , ИмяМетода); + ПараметрыЗадания.Вставить("Параметры" , Параметры); + ПараметрыЗадания.Вставить("Ключ" , Ключ); + ПараметрыЗадания.Вставить("Использование", Истина); + + Возврат ДобавитьЗадание(ПараметрыЗадания, ОбластьДанных); + + КонецЕсли; + +КонецФункции + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "ОчередьЗаданий.ОбновитьОчередьЗаданий"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "ОчередьЗаданий.ОбновитьРазделенныеРегламентныеЗадания"; + Обработчик.ОбщиеДанные = Истина; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции + +Функция ПолучитьСписокРазделенныхРегламентныхЗаданий() + + СписокРазделенныхРегламентныхЗаданий = Новый Массив; + СтандартныеПодсистемыПереопределяемый.ЗаполнитьСписокРазделенныхРегламентныхЗаданий(СписокРазделенныхРегламентныхЗаданий); + ОчередьЗаданийПереопределяемый.ЗаполнитьСписокРазделенныхРегламентныхЗаданий(СписокРазделенныхРегламентныхЗаданий); + + Возврат СписокРазделенныхРегламентныхЗаданий; + +КонецФункции + +Функция ПолучитьТаблицуИспользованияРегламентныхЗаданий() + + ТаблицаИспользования = Новый ТаблицаЗначений; + + ТаблицаИспользования.Колонки.Добавить("РегламентноеЗадание", Новый ОписаниеТипов("Строка")); + ТаблицаИспользования.Колонки.Добавить("Использование", Новый ОписаниеТипов("Булево")); + + СтандартныеПодсистемыПереопределяемый.ЗаполнитьТаблицуИспользованияРегламентныхЗаданий(ТаблицаИспользования); + ОчередьЗаданийПереопределяемый.ЗаполнитьТаблицуИспользованияРегламентныхЗаданий(ТаблицаИспользования); + + Возврат ТаблицаИспользования; + +КонецФункции + +Функция ПолучитьЧасовойПоясОбластиДанных(ОбластьДанных) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбластиДанных.ЧасовойПояс + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + |ГДЕ + | ОбластиДанных.ОбластьДанных = &ОбластьДанных"; + Запрос.УстановитьПараметр("ОбластьДанных", ОбластьДанных); + РезультатЗапроса = Запрос.Выполнить(); + + ЧасовойПояс = ""; + Если Не РезультатЗапроса.Пустой() Тогда + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + ЧасовойПояс = Выборка.ЧасовойПояс; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ЧасовойПояс) Тогда + ЧасовойПояс = Неопределено; + КонецЕсли; + + Возврат ЧасовойПояс; + +КонецФункции + +Функция КоличествоИсполняющихФоновыхЗаданий() + + Отбор = Новый Структура("Наименование, Состояние", ПолучитьНаименованиеИсполняющегоФоновогоЗадания(), СостояниеФоновогоЗадания.Активно); + ИсполняющиеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + + КоличествоРаботающихФоновыхЗаданий = ИсполняющиеФоновыеЗадания.Количество(); + + Возврат КоличествоРаботающихФоновыхЗаданий; + +КонецФункции + +// Рассчитывает необходимое количество исполняющих фоновых заданий +// +Функция КоличествоИсполняющихФоновыхЗаданийКЗапуску() + + КоличествоРаботающихФоновыхЗаданий = КоличествоИсполняющихФоновыхЗаданий(); + + КоличествоИсполняющихФоновыхЗаданийКЗапуску = Константы.МаксимальноеКоличествоИсполняющихФоновыхЗаданий.Получить() - КоличествоРаботающихФоновыхЗаданий; + Если КоличествоИсполняющихФоновыхЗаданийКЗапуску < 0 Тогда + КоличествоИсполняющихФоновыхЗаданийКЗапуску = 0; + КонецЕсли; + + Возврат КоличествоИсполняющихФоновыхЗаданийКЗапуску; + +КонецФункции + +// Запускает заданое количество фоновых заданий +// +// Параметры: +// КоличествоЗапускаемыхФоновыхЗаданий - Число - количество фоновых заданий, +// которых необходимо запустить. +// +Процедура ЗапуститьИсполняющееФоновоеЗадание(КоличествоЗапускаемыхФоновыхЗаданий) + + Для Индекс = 1 По КоличествоЗапускаемыхФоновыхЗаданий Цикл + Ключ = Новый УникальныйИдентификатор; + Параметры = Новый Массив; + Параметры.Добавить(Ключ); + ФоновыеЗадания.Выполнить("ОчередьЗаданий.ОбработатьОчередьЗаданий", Параметры, Ключ, ПолучитьНаименованиеИсполняющегоФоновогоЗадания()); + КонецЦикла; + +КонецПроцедуры + +Функция ПолучитьНаименованиеИсполняющегоФоновогоЗадания() + + Возврат "ИсполняющееФоновоеЗадание_5340185be5b240538bc73d9f18ef8df1"; + +КонецФункции + +Процедура ЗаписьКонтроляВыполнения(Знач ИмяСобытия, Знач ЗаписьЗадания) + + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация, , + ЗаписьЗадания.Задание, ЗаписьЗадания.ИмяМетода + ";" + Формат(ЗаписьЗадания.ОбластьДанных, "ЧН=0; ЧГ=")); + +КонецПроцедуры + +// Выполняет метод по его строковому представлению +// Рассчитывает следующий момент запуска задания. +// +// Параметры: +// ИмяМетода - Строка - имя метода, который необходимо выполнить. +// Параметры - Массив - параметры передаются в ИмяМетода +// в порядке расположения элементов массива. +// +Процедура ВыполнитьЗадание(ИмяМетода, Параметры = Неопределено) + + Если ОчередьЗаданийПовтИсп.ПолучитьРазрешенныеМетоды().Найти(ВРег(ИмяМетода)) = Неопределено Тогда + ШаблонСообщения = НСтр("ru = 'Метод %1 не разрешен к вызову через очередь заданий.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ИмяМетода); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + ПараметрыСтрока = ""; + Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда + Для Индекс = 0 По Параметры.ВГраница() Цикл + ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + Индекс + "],"; + КонецЦикла; + ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1); + КонецЕсли; + + Выполнить(ИмяМетода + "(" + ПараметрыСтрока + ")"); + +КонецПроцедуры + +// Рассчитывает следующий момент запуска задания. +// +// Параметры: +// Расписание - РасписаниеРегламентногоЗадания - расписание, +// для которого требуется рассчитать момент следующего запуска. +// ЧасовойПояс - Строка. +// ДатаНачалаПоследнегоЗапуска - Дата - Дата начала последнего запуска регламентного задания. +// Если дата задана, то используется для проверки таких условий как +// ПериодПовтораДней, ПериодНедель, ПериодПовтораВТечениеДня. +// Если дата не задана, то считается, +// что задание не выполнялось ни разу и проверка этих условий не производится. +// +// Возвращаемое значение: +// Дата - Рассчитанный следующий момент запуска задания. +// +Функция ПолучитьЗапланированныйМоментЗапускаЗадания(Знач Расписание, Знач ЧасовойПояс, Знач ДатаНачалаПоследнегоЗапуска = '00010101') + + Если ЗначениеЗаполнено(ДатаНачалаПоследнегоЗапуска) Тогда + ДатаНачалаПоследнегоЗапуска = МестноеВремя(ДатаНачалаПоследнегоЗапуска, ЧасовойПояс); + КонецЕсли; + + ДатаРасчета = МестноеВремя(ТекущаяУниверсальнаяДата(), ЧасовойПояс); + + ТочностьРасчета = 5; // Точность расчета момента запуска - 5 сек. + ПределРасчета = 367 * 86400; // В пределах 367 дней + Приращение = 0; + + // Если задание не требуется выполнять в пределах интервала [ТекущаяДата; ТекущаяДата + ПределРасчета], + // возвращается пустая дата. + Если Не Расписание.ТребуетсяВыполнение(ДатаРасчета + ПределРасчета, ДатаНачалаПоследнегоЗапуска) Тогда + Возврат '00010101'; + Иначе + НачалоИнтервала = 0; + КонецИнтервала = ПределРасчета; + Пока (КонецИнтервала - НачалоИнтервала) > ТочностьРасчета Цикл + Приращение = Окр((КонецИнтервала - НачалоИнтервала) / 2); + Если Расписание.ТребуетсяВыполнение(ДатаРасчета + НачалоИнтервала + Приращение, ДатаНачалаПоследнегоЗапуска) Тогда + КонецИнтервала = НачалоИнтервала + Приращение; + Иначе + НачалоИнтервала = НачалоИнтервала + Приращение + 1; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + НайденнаяДата = ДатаРасчета + НачалоИнтервала + Приращение; + + Возврат УниверсальноеВремя(НайденнаяДата, ЧасовойПояс); + +КонецФункции + diff --git a/SSL/src/CommonModules/ОчередьЗаданий/ОчередьЗаданий.mdo b/SSL/src/CommonModules/ОчередьЗаданий/ОчередьЗаданий.mdo new file mode 100644 index 000000000..60b1f63f6 --- /dev/null +++ b/SSL/src/CommonModules/ОчередьЗаданий/ОчередьЗаданий.mdo @@ -0,0 +1,11 @@ + + + ОчередьЗаданий + + ru + Очередь заданий + + true + true + true + diff --git a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl new file mode 100644 index 000000000..664d6b713 --- /dev/null +++ b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////////// +// ОчередьЗаданийПереопределяемый: Работа с неразделенными регламентными заданиями. +// +/////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Заполняет список имен неразделенных регламентных заданий, которые +// должны выполняться в разделенном режиме. +// +// Параметры: +// СписокРазделенныхРегламентныхЗаданий - Массив - Массив с именами неразделенных +// регламентных заданий, которые будут +// выполняться механизмом подсистемы "Регламентные задания" +// в областях данных. +// +Процедура ЗаполнитьСписокРазделенныхРегламентныхЗаданий(СписокРазделенныхРегламентныхЗаданий) Экспорт + + + +КонецПроцедуры + +// Процедура формирует таблицу регламентных заданий +// с признаком использования +// +// Параметры: +// ТаблицаИспользования - ТаблицаЗначений - таблица, которую необходимо +// заполнить регламентными заданиями и признаком использования +// +Процедура ЗаполнитьТаблицуИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт + + // СтандартныеПодсистемы.РегламентныеЗадания + НоваяСтрока = ТаблицаИспользования.Добавить(); + НоваяСтрока.РегламентноеЗадание = "ПланированиеОбработкиЗаданий"; + НоваяСтрока.Использование = Истина; + // Конец СтандартныеПодсистемы.РегламентныеЗадания + +КонецПроцедуры + +// Формирует список методов разрешенных к вызову через механизм очереди заданий +// +// Параметры: +// РазрешенныеМетоды - Массив - имена методов, разрешенных к вызову через +// механизм очереди заданий +// +Процедура ПолучитьРазрешенныеМетодыОчередиЗаданий(Знач РазрешенныеМетоды) Экспорт + + + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/ОчередьЗаданийПереопределяемый.mdo b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/ОчередьЗаданийПереопределяемый.mdo new file mode 100644 index 000000000..9f41fba4c --- /dev/null +++ b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/ОчередьЗаданийПереопределяемый.mdo @@ -0,0 +1,11 @@ + + + ОчередьЗаданийПереопределяемый + + ru + Очередь заданий переопределяемый + + true + true + true + diff --git a/SSL/src/CommonModules/ОчередьЗаданийПовтИсп/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийПовтИсп/Module.bsl new file mode 100644 index 000000000..0c5ab2572 --- /dev/null +++ b/SSL/src/CommonModules/ОчередьЗаданийПовтИсп/Module.bsl @@ -0,0 +1,31 @@ +/////////////////////////////////////////////////////////////////////////////////// +// ОчередьЗаданийПовтИсп: Работа с неразделенными регламентными заданиями. +// +/////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Возвращает список методов разрешенных к вызову через механизм очереди заданий +// +// Возвращаемое значение: +// Массив - имена методов, разрешенных к вызову через механизм очереди заданий +// +Функция ПолучитьРазрешенныеМетоды() Экспорт + + РазрешенныеМетоды = Новый Массив; + СтандартныеПодсистемыПереопределяемый.ПолучитьРазрешенныеМетодыОчередиЗаданий(РазрешенныеМетоды); + ОчередьЗаданийПереопределяемый.ПолучитьРазрешенныеМетодыОчередиЗаданий(РазрешенныеМетоды); + + Для каждого МетаданныеРегламентногоЗадания Из Метаданные.РегламентныеЗадания Цикл + РазрешенныеМетоды.Добавить(МетаданныеРегламентногоЗадания.ИмяМетода); + КонецЦикла; + + Результат = Новый Массив; + Для каждого ИмяМетода Из РазрешенныеМетоды Цикл + Результат.Добавить(ВРег(ИмяМетода)); + КонецЦикла; + + Возврат Новый ФиксированныйМассив(Результат); + +КонецФункции diff --git a/SSL/src/CommonModules/ОчередьЗаданийПовтИсп/ОчередьЗаданийПовтИсп.mdo b/SSL/src/CommonModules/ОчередьЗаданийПовтИсп/ОчередьЗаданийПовтИсп.mdo new file mode 100644 index 000000000..4a8333ad6 --- /dev/null +++ b/SSL/src/CommonModules/ОчередьЗаданийПовтИсп/ОчередьЗаданийПовтИсп.mdo @@ -0,0 +1,12 @@ + + + ОчередьЗаданийПовтИсп + + ru + Очередь заданий повт исп + + true + true + true + DuringSession + diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискКлиентПереопределяемый/Module.bsl index 4e3faa65e..1bf81619d 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискКлиентПереопределяемый/Module.bsl @@ -21,12 +21,12 @@ // Процедура ПриОткрытииОбъекта(Значение, СтандартнаяОбработка) Экспорт - // БизнесПроцессыИЗадачи + // СтандартныеПодсистемы.БизнесПроцессыИЗадачи Если ТипЗнч(Значение) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда Если БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Значение) Тогда СтандартнаяОбработка = Ложь; КонецЕсли; КонецЕсли; - // Конец БизнесПроцессыИЗадачи + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи КонецПроцедуры diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl index 01cfaff0b..f85e9155d 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl @@ -4,6 +4,10 @@ // Обновляет индекс полнотекстового поиска Процедура ОбновлениеИндексаППД() Экспорт + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + РазрешитьПолнотекстовыйПоиск = ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить; Если РазрешитьПолнотекстовыйПоиск = Ложь Тогда Возврат; @@ -33,6 +37,10 @@ // Выполняет слияние индексов полнотекстового поиска Процедура СлияниеИндексаППД() Экспорт + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + РазрешитьПолнотекстовыйПоиск = ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить; Если РазрешитьПолнотекстовыйПоиск = Ложь Тогда Возврат; @@ -79,6 +87,7 @@ Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.0.3.10"; Обработчик.Процедура = "ПолнотекстовыйПоискСервер.ИнициализироватьФункциональнуюОпциюПолнотекстовыйПоиск"; + Обработчик.ОбщиеДанные = Истина; КонецПроцедуры @@ -90,3 +99,30 @@ КонецПроцедуры +// Возвращает, актуален ли индекс полнотекстового поиска. +// Если индекс обновлялся менее 5 минут назад, считаем что он актуален +// Проверка функциональной опции, например "ИспользоватьПолнотекстовыйПоиск" - выполняется в вызывающем коде +Функция ИндексПоискаАктуален() Экспорт + + ИспользоватьПолнотекстовыйПоиск = + (ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить); + + Если ИспользоватьПолнотекстовыйПоиск Тогда + + ИндексПолнотекстовогоПоискаАктуален = ПолнотекстовыйПоиск.ИндексАктуален(); + Если Не ИндексПолнотекстовогоПоискаАктуален Тогда + + // Если индекс обновлялся менее 5 минут назад, считаем что он актуален + Если ТекущаяДата() - ПолнотекстовыйПоиск.ДатаАктуальности() < 300 Тогда + ИндексПолнотекстовогоПоискаАктуален = Истина; + КонецЕсли; + + КонецЕсли; + + Возврат ИндексПолнотекстовогоПоискаАктуален; + + КонецЕсли; + + Возврат Истина; + +КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl index 885548c93..8c38895fd 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl @@ -1,3 +1,10 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Получение файлов из интернета" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Получить файл из Интернета по протоколу http(s), либо ftp и сохранить его во временный файл. // @@ -207,6 +214,9 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Записывает событие-ошибку в журнал регистрации. Имя события // "Получение файлов из Интернета". // Параметры @@ -214,8 +224,11 @@ // Процедура ЗаписатьОшибкуВЖурналРегистрации(знач СообщениеОбОшибке) Экспорт - ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение файлов из Интернета'"), УровеньЖурналаРегистрации.Ошибка, - , , СообщениеОбОшибке); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Получение файлов из Интернета'"), + УровеньЖурналаРегистрации.Ошибка, , , + СообщениеОбОшибке + ); КонецПроцедуры @@ -289,3 +302,4 @@ КонецЕсли; КонецПроцедуры + diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl index be4a8ffaa..a94e6636d 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Получение файлов из интернета" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Общая интерфейсная функция для получения файла из Интернет по протоколу http(s) // либо ftp и сохранения его во временное хранилище. // @@ -25,14 +33,12 @@ // если статус Истина // СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь // -Функция СкачатьФайлНаКлиенте(знач URL, - знач ПараметрыПолучения = Неопределено) Экспорт +Функция СкачатьФайлНаКлиенте(знач URL, знач ПараметрыПолучения = Неопределено) Экспорт // Объявление переменных перед первым использованием в качестве // параметра метода Свойство, при анализе параметров получения файлов // из ПараметрыПолучения. Содержат значения переданных параметров получения файла - Перем ПутьДляСохранения, Пользователь, Пароль, Порт, - ЗащищенноеСоединение, ПассивноеСоединение; + Перем ПутьДляСохранения, Пользователь, Пароль, Порт, ЗащищенноеСоединение, ПассивноеСоединение; // Получаем параметры получения файла @@ -40,42 +46,26 @@ ПараметрыПолучения = Новый Структура; КонецЕсли; - Если Не ПараметрыПолучения.Свойство("ПутьДляСохранения", ПутьДляСохранения) Тогда - ПутьДляСохранения = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("Пользователь", Пользователь) Тогда - Пользователь = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("Пароль", Пароль) Тогда - Пароль = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("Порт", Порт) Тогда - Порт = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("ЗащищенноеСоединение", ЗащищенноеСоединение) Тогда - ЗащищенноеПассивноеСоединение = Неопределено; - КонецЕсли; - - Если Не ПараметрыПолучения.Свойство("ПассивноеСоединение", ПассивноеСоединение) Тогда - ЗащищенноеПассивноеСоединение = Неопределено; - КонецЕсли; + ПараметрыПолучения.Свойство("ПутьДляСохранения", ПутьДляСохранения); + ПараметрыПолучения.Свойство("Пользователь", Пользователь); + ПараметрыПолучения.Свойство("Пароль", Пароль); + ПараметрыПолучения.Свойство("Порт", Порт); + ПараметрыПолучения.Свойство("ЗащищенноеСоединение", ЗащищенноеСоединение); + ПараметрыПолучения.Свойство("ПассивноеСоединение", ПассивноеСоединение); НастройкаСохранения = Новый Соответствие; НастройкаСохранения.Вставить("МестоХранения", "Клиент"); НастройкаСохранения.Вставить("Путь", ПутьДляСохранения); Результат = ПолучениеФайловИзИнтернетаКлиентСервер.ПодготовитьПолучениеФайла( - URL, - Пользователь, - Пароль, - Порт, - ЗащищенноеСоединение, - ПассивноеСоединение, - НастройкаСохранения); + URL, + Пользователь, + Пароль, + Порт, + ЗащищенноеСоединение, + ПассивноеСоединение, + НастройкаСохранения + ); Возврат Результат; diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl index d80281e0e..74bba2735 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl @@ -1,3 +1,14 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Получение файлов из интернета" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции + // Функция для получения файла из интернета. // // Параметры: @@ -25,18 +36,14 @@ // либо адрес во временном хранилище // в случае неуспеха сообщение об ошибке // -Функция ПодготовитьПолучениеФайла( знач URL, - знач Пользователь = Неопределено, - знач Пароль = Неопределено, - знач Порт = Неопределено, - знач ЗащищенноеСоединение = Ложь, - знач ПассивноеСоединение = Ложь, - знач НастройкаСохранения) Экспорт +Функция ПодготовитьПолучениеФайла(знач URL, знач Пользователь = Неопределено, знач Пароль = Неопределено, + знач Порт = Неопределено, знач ЗащищенноеСоединение = Ложь, знач ПассивноеСоединение = Ложь, + знач НастройкаСохранения) Экспорт НастройкаСоединения = Новый Соответствие; - НастройкаСоединения.Вставить("Пользователь", Пользователь); - НастройкаСоединения.Вставить("Пароль", Пароль); - НастройкаСоединения.Вставить("Порт", Порт); + НастройкаСоединения.Вставить("Пользователь", Пользователь); + НастройкаСоединения.Вставить("Пароль", Пароль); + НастройкаСоединения.Вставить("Порт", Порт); Протокол = РазделитьURL(URL).Протокол; @@ -46,16 +53,14 @@ НастройкаСоединения.Вставить("ЗащищенноеСоединение", ЗащищенноеСоединение); КонецЕсли; -#Если НаКлиенте Тогда - НастройкаПроксиСервера = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиПроксиСервера; -#Иначе - НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.ПолучитьНастройкиПроксиНаСервере1СПредприятие(); -#КонецЕсли + #Если Клиент Тогда + НастройкаПроксиСервера = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиПроксиСервера; + #Иначе + НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.ПолучитьНастройкиПроксиНаСервере1СПредприятие(); + #КонецЕсли Если НастройкаПроксиСервера = Неопределено ИЛИ НастройкаПроксиСервера.Получить("ИспользоватьПрокси") <> Истина Тогда - НастройкаПроксиСервера = ПолучитьПустыеНастройкиПроксиСервера(); - КонецЕсли; Результат = ПолучитьФайлИзИнтернет(URL, НастройкаСохранения, НастройкаСоединения, НастройкаПроксиСервера); @@ -64,6 +69,9 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции + // Функция для получения файла из интернета. // // Параметры: @@ -101,10 +109,8 @@ // либо адрес во временном хранилище // в случае неуспеха сообщение об ошибке // -Функция ПолучитьФайлИзИнтернет(знач URL, - знач НастройкаСохранения, - знач НастройкаСоединения = Неопределено, - знач НастройкиПрокси = Неопределено) +Функция ПолучитьФайлИзИнтернет(знач URL, знач НастройкаСохранения, знач НастройкаСоединения = Неопределено, + знач НастройкиПрокси = Неопределено) // Объявление переменных перед первым использованием в качестве // параметра метода Свойство, при анализе параметров получения файлов @@ -126,6 +132,15 @@ ПарольПользователя = НастройкаСоединения.Получить("Пароль"); Порт = НастройкаСоединения.Получить("Порт"); + Если Порт = Неопределено Тогда + ПолнаяСтруктураURL = СтруктураURI(URL); + + Если НЕ ПустаяСтрока(ПолнаяСтруктураURL.Порт) Тогда + ИмяСервера = ПолнаяСтруктураURL.Хост; + Порт = ПолнаяСтруктураURL.Порт; + КонецЕсли; + КонецЕсли; + НастройкиПрокси = ?(НастройкиПрокси = Неопределено, ПолучитьПустыеНастройкиПроксиСервера(), НастройкиПрокси); Прокси = СформироватьПрокси(НастройкиПрокси, Протокол); @@ -160,9 +175,9 @@ Если НастройкаСохранения["Путь"] <> Неопределено Тогда ПутьДляСохранения = НастройкаСохранения["Путь"]; Иначе -#Если НЕ ВебКлиент Тогда - ПутьДляСохранения = ПолучитьИмяВременногоФайла(); -#КонецЕсли + #Если НЕ ВебКлиент Тогда + ПутьДляСохранения = ПолучитьИмяВременногоФайла(); + #КонецЕсли КонецЕсли; Попытка diff --git a/SSL/src/CommonModules/Пользователи/Module.bsl b/SSL/src/CommonModules/Пользователи/Module.bsl index 51a96e0cd..1a59e4f95 100644 --- a/SSL/src/CommonModules/Пользователи/Module.bsl +++ b/SSL/src/CommonModules/Пользователи/Module.bsl @@ -1,9 +1,15 @@ //////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции программного интерфейса +// Подсистема "Пользователи". +// +//////////////////////////////////////////////////////////////////////////////// -// Функция АвторизованныйПользователь возвращает -// текущего пользователя сеанса. -// +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает текущего пользователя или текущего внешнего пользователя, +// соответствующего пользователю информационной базы, +// который авторизовался в 1С:Предприятии 8. +// // Возвращаемое значение: // СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи. // @@ -15,7 +21,12 @@ КонецФункции -// Получает значение параметра сеанса "Текущий пользователь" +// Возвращает текущего обычного пользователя, +// соответствующего пользователю информационной базы, +// который авторизовался в 1С:Предприятии 8. +// +// Если авторизованному пользователю информационной базы +// соответствует внешний пользователь, тогда возвращается пустая ссылка. // // Возвращаемое значение: // СправочникСсылка.Пользователи @@ -28,114 +39,214 @@ КонецФункции -// Функция ЭтоПолноправныйПользовательИБ проверяет, -// является ли полноправным текущий пользователь ИБ или -// пользователь ИБ заданного пользователя (обычного или внешнего). -// -// Полноправными считается: -// а) пользователь ИБ при пустом списке пользователей ИБ, -// если основная роль не задана или ПолныеПрава, -// б) пользователь ИБ с ролью ПолныеПрава. -// +// Проверяет, является ли текущий или указанный пользователь полноправным. +// +// Полноправным считается пользователь, который +// а) при непустом списке пользователей информационной базы: +// - в локальном режиме работы (без разделения данных) имеет роль ПолныеПрава и +// роль для администрирования системы, +// - в модели сервиса (с разделением данных) имеет роль ПолныеПрава; +// б) при пустом списке пользователей информационной базы +// основная роль конфигурации не задана или ПолныеПрава. // // Параметры: -// Пользователь - Неопределено (проверяется текущий пользователь ИБ), -// Справочник.Пользователи, Справочник.ВнешниеПользователи -// (осуществляется поиск пользователя ИБ по уникальному -// идентификатору, заданному в реквизите ИдентификаторПользователяИБ, -// если пользователь ИБ не найден, возвращается Ложь). +// Пользователь - Неопределено - проверяется текущий пользователь ИБ; +// СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи - осуществляется поиск +// пользователя ИБ по уникальному идентификатору, +// заданному в реквизите ИдентификаторПользователяИБ. +// Прим.: если пользователь ИБ не найден, возвращается Ложь. +// ПользовательИнформационнойБазы - проверяется указанный +// пользователь ИБ. +// +// ПроверятьПраваАдминистрированияСистемы - Булево - если задано Истина, тогда +// проверяется наличие роли для администрирования системы. +// Начальное значение: Ложь. +// +// УчитыватьПривилегированныйРежим - Булево - если задано Истина, тогда +// функция возвращает Истина, когда установлен привилегированный режим. +// Начальное значение: Истина. // // Возвращаемое значение: // Булево. // -Функция ЭтоПолноправныйПользовательИБ(Пользователь = Неопределено) Экспорт +Функция ЭтоПолноправныйПользователь(Пользователь = Неопределено, + ПроверятьПраваАдминистрированияСистемы = Ложь, + УчитыватьПривилегированныйРежим = Истина) Экспорт + + Если УчитыватьПривилегированныйРежим И ПривилегированныйРежим() Тогда + Возврат Истина; + КонецЕсли; УстановитьПривилегированныйРежим(Истина); - Если ЗначениеЗаполнено(Пользователь) И Пользователь <> АвторизованныйПользователь() Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ОбщегоНазначения.ПолучитьЗначениеРеквизита(Пользователь, "ИдентификаторПользователяИБ")); + Если Пользователь = Неопределено ИЛИ Пользователь = АвторизованныйПользователь() Тогда + ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); + + ИначеЕсли ТипЗнч(Пользователь) = Тип("ПользовательИнформационнойБазы") Тогда + ПользовательИБ = Пользователь; + + Иначе + // Задан не текущий пользователь + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ОбщегоНазначения.ПолучитьЗначениеРеквизита(Пользователь, "ИдентификаторПользователяИБ")); + Если ПользовательИБ = Неопределено Тогда Возврат Ложь; КонецЕсли; - Иначе - ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); КонецЕсли; - Если ПользовательИБ.УникальныйИдентификатор = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор Тогда + Если ПользовательИБ.УникальныйИдентификатор <> ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор Тогда + // Для не текущего пользователя ИБ проверяются роли в записанном пользователе ИБ. + Если ПроверятьПраваАдминистрированияСистемы Тогда + Возврат ПользовательИБ.Роли.Содержит(РольАдминистратораСистемы()) + Иначе + Возврат ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) + КонецЕсли; + Иначе Если ЗначениеЗаполнено(ПользовательИБ.Имя) Тогда - Возврат РольДоступна("ПолныеПрава") ИЛИ ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор).Роли.Содержит(Метаданные.Роли.ПолныеПрава); + // Для текущего пользователя ИБ проверяются роли не в записанном пользователе ИБ, + // а роли в текущем сеансе. + Если ПроверятьПраваАдминистрированияСистемы Тогда + Возврат РольДоступна(РольАдминистратораСистемы()) + Иначе + Возврат РольДоступна(Метаданные.Роли.ПолныеПрава) + КонецЕсли; Иначе - // Авторизован пустой пользователь - список пользователей пуст, - // если основная роль пустая - все права разрешены. + // Для неуказанного пользователя ИБ проверяется основная роль конфигурации: + // должна быть роль ПолныеПрава или не указана (привилегированный режим). Если Метаданные.ОсновнаяРоль = Неопределено ИЛИ Метаданные.ОсновнаяРоль = Метаданные.Роли.ПолныеПрава Тогда - Возврат Истина; Иначе Возврат Ложь; КонецЕсли; КонецЕсли; - Иначе - Возврат ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава); КонецЕсли; КонецФункции -// Функция ПолноеИмяНеУказанногоПользователя возвращает -// представление не указанного пользователя, т.е. когда -// список пользователей пуст. -// -// Возвращаемое значение: -// Строка. +// Возвращает доступность хотя бы одной из указанных ролей или полноправность +// пользователя (текущего или указанного). // -Функция ПолноеИмяНеУказанногоПользователя() Экспорт +// Параметры: +// ИменаРолей - Строка - имена ролей, разделенные запятыми, доступность которых проверяется. +// +// Пользователь - Неопределено - проверяется текущий пользователь ИБ; +// СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи - осуществляется поиск +// пользователя ИБ по уникальному идентификатору, +// заданному в реквизите ИдентификаторПользователяИБ +// Прим.: если пользователь ИБ не найден, возвращается Ложь. +// ПользовательИнформационнойБазы - проверяется указанный +// пользователь ИБ +// +// Возвращаемое значение: +// Булево - Истина, если хотя бы одна из указанных ролей доступна, +// или функция ЭтоПолноправныйПользователь(Пользователь) возвращает Истина. +// +Функция РолиДоступны(Знач ИменаРолей, Пользователь = Неопределено) Экспорт - Возврат НСтр("ru = '<Не указан>'"); + Если ЭтоПолноправныйПользователь(Пользователь) Тогда + Возврат Истина; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если Пользователь = Неопределено ИЛИ Пользователь = АвторизованныйПользователь() Тогда + ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); + + ИначеЕсли ТипЗнч(Пользователь) = Тип("ПользовательИнформационнойБазы") Тогда + ПользовательИБ = Пользователь; + + Иначе + // Указан не текущий пользователь. + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ОбщегоНазначения.ПолучитьЗначениеРеквизита(Пользователь, "ИдентификаторПользователяИБ")); + + Если ПользовательИБ = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + УказанТекущийПользовательИБ = ПользовательИБ.УникальныйИдентификатор = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор; + + МассивИменРолей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаРолей); + Для каждого ИмяРоли Из МассивИменРолей Цикл + + Если УказанТекущийПользовательИБ Тогда + Если РольДоступна(СокрЛП(ИмяРоли)) Тогда + Возврат Истина; + КонецЕсли; + Иначе + Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.Найти(СокрЛП(ИмяРоли))) Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; КонецФункции -// Функция СоздатьПервогоАдминистратора используется -// при обновлении и начальном заполнении информационной базы -// При использовании подсистемы УправлениеДоступом -// первый администратор будет автоматически включен -// в группу доступа Администраторы (если действие встроено) +// Используется при обновлении и начальном заполнении информационной базы. +// 1) Создает первого администратора и связывает его с новым или существующим +// пользователем в справочнике Пользователи. +// 2) Связывает администратора, указанного в параметре УчетнаяЗапись с новым или +// существующим пользователем в справочнике Пользователи. // // Параметры: -// УчетнаяЗапись - ПользовательИнформационнойБазы - используется -// когда нужно создать первого администратора из уже имеющегося -// пользователя ИБ (см. функцию Пользователи.ОшибкаАвторизации()) +// УчетнаяЗапись - ПользовательИнформационнойБазы - используется, когда нужно связать +// существующего администратора с новым или существующим пользователем +// в справочнике Пользователи. // // Возвращаемое значение: -// Неопределено - пользователь связанный с пользователем ИБ с административными правами уже существует, -// СправочникСсылка.Пользователи - пользователь с которым связан администратор +// Неопределено - пользователь, связанный с пользователем ИБ с административными +// правами уже существует. +// СправочникСсылка.Пользователи - пользователь, который был связан с первым администратором или +// администратором, указанным в параметре УчетнаяЗапись. // Функция СоздатьПервогоАдминистратора(УчетнаяЗапись = Неопределено) Экспорт // Добавление администратора (администратор системы - полные права). - Если УчетнаяЗапись = Неопределено Тогда + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат Неопределено; + КонецЕсли; + // Если существует пользователь с правом администрирование, // тогда первый администратор уже создан и его не требуется создавать. УчетнаяЗапись = Неопределено; - Для каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл - Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда + + УстановитьПривилегированныйРежим(Истина); + ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + УстановитьПривилегированныйРежим(Ложь); + Для каждого ПользовательИБ Из ПользователиИБ Цикл + Если ЭтоПолноправныйПользователь(ПользовательИБ) Тогда Возврат Неопределено; КонецЕсли; КонецЦикла; Если УчетнаяЗапись = Неопределено Тогда + УстановитьПривилегированныйРежим(Истина); УчетнаяЗапись = ПользователиИнформационнойБазы.СоздатьПользователя(); УчетнаяЗапись.Имя = "Администратор"; УчетнаяЗапись.ПолноеИмя = УчетнаяЗапись.Имя; УчетнаяЗапись.Роли.Очистить(); УчетнаяЗапись.Роли.Добавить(Метаданные.Роли.ПолныеПрава); - РольАдминистратораСистемы = ПользователиПереопределяемый.РольАдминистратораСистемы(); - Если НЕ УчетнаяЗапись.Роли.Содержит(РольАдминистратораСистемы) Тогда - УчетнаяЗапись.Роли.Добавить(РольАдминистратораСистемы); + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + РольАдминистратораСистемы = РольАдминистратораСистемы(); + Если НЕ УчетнаяЗапись.Роли.Содержит(РольАдминистратораСистемы) Тогда + УчетнаяЗапись.Роли.Добавить(РольАдминистратораСистемы); + КонецЕсли; КонецЕсли; УчетнаяЗапись.Записать(); + УстановитьПривилегированныйРежим(Ложь); КонецЕсли; + Иначе + НайтиНеоднозначныхПользователейИБ(, УчетнаяЗапись.УникальныйИдентификатор); КонецЕсли; Если ПользовательПоИдентификаторуСуществует(УчетнаяЗапись.УникальныйИдентификатор) Тогда @@ -180,19 +291,36 @@ КонецФункции -// Функция выполняет поиск элемента справочника Пользователи -// по имени пользователя информационной базы -// Параметры -// ИмяПользователя - строка - имя пользователя информационной базы -// Возвращаемое значение -// ссылка на пользователя типа СправочникСсылка.Пользователи, -// если элемент справочника не найден, возвращается пустая ссылка, -// если пользователь ИБ не найден, возвращается Неопределено. +// Возвращает роль, предоставляющую права администрирования системы. // -// Примечание: В случае, если пользователь имеет административные права, -// то допускается поиск любого пользователя. Если пользователь не имеет -// административных прав, то допускается поиск только того пользователя, -// под которым данный пользователь авторизовался. +// Возвращаемое значение: +// ОбъектМетаданных: Роль. +// +Функция РольАдминистратораСистемы() Экспорт + + РольАдминистратораСистемы = Метаданные.Роли.АдминистраторСистемы; + + Если СтандартныеПодсистемыПереопределяемый.ЭтоБазоваяВерсияКонфигурации() Тогда + РольАдминистратораСистемы = Метаданные.Роли.ПолныеПрава; + КонецЕсли; + + ПользователиПереопределяемый.ИзменитьРольАдминистратораСистемы(РольАдминистратораСистемы); + + Возврат РольАдминистратораСистемы; + +КонецФункции + +// Возвращает пользователя справочника Пользователи, соответствующего пользователю ИБ с указанным именем. +// Для поиска любого пользователя требуются административные права. +// Если административных прав нет, допустимо искать только пользователя для текущего пользователя ИБ. +// +// Параметры: +// ИмяПользователя - Строка - имя пользователя информационной базы +// +// Возвращаемое значение: +// СправочникСсылка.Пользователи - если пользователь найден. +// Справочники.Пользователи.ПустаяСсылка() - если пользователь ИБ найден. +// Неопределено - если пользователь ИБ не найден. // Функция НайтиПоИмени(знач ИмяПользователяИБ) Экспорт @@ -201,22 +329,25 @@ Если ПользовательИБ = Неопределено Тогда Возврат Неопределено; Иначе + НайтиНеоднозначныхПользователейИБ(, ПользовательИБ.УникальныйИдентификатор); Возврат Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); КонецЕсли; КонецФункции -// Функция СформироватьДанныеВыбораПользователя возвращает список -// пользователей, групп пользователей, внешних пользователей и групп внешних пользователей +// Возвращает список пользователей, групп пользователей, внешних пользователей и групп внешних пользователей // не помеченных на удаление. // Используется в обработчиках событий ОкончаниеВводаТекста и АвтоПодбор. // // Параметры: -// Текст - Строка, символы введенные пользователем. +// Текст - Строка, символы введенные пользователем. +// // ВключаяГруппы - Булево, если Истина, включать группы пользователей и внешних пользователей. // Если ФО ИспользоватьГруппыПользователей отключена, параметр игнорируется. -// ВключаяВнешнихПользователей - Неопределено, Ложь, Истина, -// когда Неопределено, взять значение ВнешниеПользователи.ИспользоватьВнешнихПользователей(). +// +// ВключаяВнешнихПользователей - Неопределено, Булево, когда Неопределено, используется значение, +// возвращаемое функцией ВнешниеПользователи.ИспользоватьВнешнихПользователей(). +// // БезПользователей - Булево, если Истина, то элементы справочника Пользователи исключаются из результата. // Функция СформироватьДанныеВыбораПользователя(Знач Текст, Знач ВключаяГруппы = Истина, Знач ВключаяВнешнихПользователей = Неопределено, БезПользователей = Ложь) Экспорт @@ -302,11 +433,11 @@ | И ГруппыВнешнихПользователей.Наименование ПОДОБНО &Текст"; КонецЕсли; + Выборка = Запрос.Выполнить().Выбрать(); + ДанныеВыбора = Новый СписокЗначений; - Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - ДанныеВыбора.Добавить(Выборка.Ссылка, Выборка.Наименование, , БиблиотекаКартинок["СостояниеПользователя" + Формат(Выборка.НомерКартинки + 1, "ЧЦ=2; ЧВН=; ЧГ=")]); КонецЦикла; @@ -439,10 +570,10 @@ КонецПроцедуры -// Процедура ПриНаличииГруппПользователейУстановитьИспользование -// используется, как процедура обновления в прикладном решении. -// При наличии групп пользователей или групп внешних пользователей -// устанавливается константа/функциональная опция ИспользоватьГруппыПользователей. +// Устанавливает константу ИспользоватьГруппыПользователей в Истина, +// если существует хотя бы одна группа пользователей в справочнике. +// +// Используется при обновлении информационной базы. // Процедура ПриНаличииГруппПользователейУстановитьИспользование() Экспорт @@ -471,52 +602,39 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции подсистемы для внутренних нужд - -// Функция ПрочитатьПользователяИБ считывает свойства пользователя -// информационной базы по строковому или уникальному идентификатору. -// -// Параметры: -// Идентификатор - Неопределено, Строка, УникальныйИдентификатор (идентификатор пользователя). -// Свойства - Структура: -// ПользовательИнфБазыУникальныйИдентификатор - УникальныйИдентификатор -// ПользовательИнфБазыИмя - Строка -// ПользовательИнфБазыПолноеИмя - Строка -// -// ПользовательИнфБазыАутентификацияСтандартная - Булево -// ПользовательИнфБазыПоказыватьВСпискеВыбора - Булево -// ПользовательИнфБазыПароль - Неопределено -// ПользовательИнфБазыСохраняемоеЗначениеПароля - Строка -// ПользовательИнфБазыПарольУстановлен - Булево -// ПользовательИнфБазыЗапрещеноИзменятьПароль - Булево -// -// ПользовательИнфБазыАутентификацияОС - Булево -// ПользовательИнфБазыПользовательОС - Строка -// -// ПользовательИнфБазыОсновнойИнтерфейс - Строка (имя интерфейса из коллекции Метаданные.Интерфейсы) -// ПользовательИнфБазыРежимЗапуска - Строка (значения: "Авто", "ОбычноеПриложение", "УправляемоеПриложение") -// ПользовательИнфБазыЯзык - Строка (имя языка из коллекции Метаданные.Языки) -// -// Роли - Массив значений типа Строка (имена ролей из коллекции Метаданные.Роли) -// -// ОписаниеОшибки - Строка, содержит описание ошибки, если чтение не удалось. +// Возвращает пустую структуру описания пользователя ИБ. // // Возвращаемое значение: -// Булево, -// если Истина - успех, иначе отказ, см. ОписаниеОшибки. +// Структура. +// ПользовательИнфБазыУникальныйИдентификатор - УникальныйИдентификатор +// ПользовательИнфБазыИмя - Строка +// ПользовательИнфБазыПолноеИмя - Строка // -Функция ПрочитатьПользователяИБ(Знач Идентификатор, Свойства = Неопределено, Роли = Неопределено, ОписаниеОшибки = "", ПользовательИБ = Неопределено) Экспорт +// ПользовательИнфБазыАутентификацияСтандартная - Булево +// ПользовательИнфБазыПоказыватьВСпискеВыбора - Булево +// ПользовательИнфБазыПароль - Неопределено +// ПользовательИнфБазыСохраняемоеЗначениеПароля - Неопределено +// ПользовательИнфБазыПарольУстановлен - Булево +// ПользовательИнфБазыЗапрещеноИзменятьПароль - Булево +// +// ПользовательИнфБазыАутентификацияОС - Булево +// ПользовательИнфБазыПользовательОС - Строка +// +// ПользовательИнфБазыОсновнойИнтерфейс - Строка (имя интерфейса из коллекции Метаданные.Интерфейсы) +// ПользовательИнфБазыРежимЗапуска - Строка (значения: "Авто", "ОбычноеПриложение", "УправляемоеПриложение") +// ПользовательИнфБазыЯзык - Строка (имя языка из коллекции Метаданные.Языки) +// +Функция НовоеОписаниеПользователяИБ() Экспорт // Подготовка структур возвращаемых данных Свойства = Новый Структура; - Свойства.Вставить("ПользовательИнфБазыУникальныйИдентификатор", Новый УникальныйИдентификатор); + Свойства.Вставить("ПользовательИнфБазыУникальныйИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); Свойства.Вставить("ПользовательИнфБазыИмя", ""); Свойства.Вставить("ПользовательИнфБазыПолноеИмя", ""); Свойства.Вставить("ПользовательИнфБазыАутентификацияСтандартная", Ложь); Свойства.Вставить("ПользовательИнфБазыПоказыватьВСпискеВыбора", Ложь); Свойства.Вставить("ПользовательИнфБазыПароль", Неопределено); - Свойства.Вставить("ПользовательИнфБазыСохраняемоеЗначениеПароля", ""); + Свойства.Вставить("ПользовательИнфБазыСохраняемоеЗначениеПароля", Неопределено); Свойства.Вставить("ПользовательИнфБазыПарольУстановлен", Ложь); Свойства.Вставить("ПользовательИнфБазыЗапрещеноИзменятьПароль", Ложь); Свойства.Вставить("ПользовательИнфБазыАутентификацияОС", Ложь); @@ -525,297 +643,192 @@ Свойства.Вставить("ПользовательИнфБазыРежимЗапуска", "Авто"); Свойства.Вставить("ПользовательИнфБазыЯзык", ?(Метаданные.ОсновнойЯзык = Неопределено, "", Метаданные.ОсновнойЯзык.Имя)); - Роли = Новый Массив; - - Если ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Идентификатор); - ИначеЕсли ТипЗнч(Идентификатор) = Тип("Строка") Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Идентификатор); - Иначе - ПользовательИБ = Неопределено; - КонецЕсли; - - Если ПользовательИБ = Неопределено Тогда - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Пользователь информационной базы ""%1""' не найден."), Идентификатор); - Возврат Ложь; - КонецЕсли; - - Свойства.ПользовательИнфБазыУникальныйИдентификатор = ПользовательИБ.УникальныйИдентификатор; - Свойства.ПользовательИнфБазыИмя = ПользовательИБ.Имя; - Свойства.ПользовательИнфБазыПолноеИмя = ПользовательИБ.ПолноеИмя; - Свойства.ПользовательИнфБазыАутентификацияСтандартная = ПользовательИБ.АутентификацияСтандартная; - Свойства.ПользовательИнфБазыПоказыватьВСпискеВыбора = ПользовательИБ.ПоказыватьВСпискеВыбора; - Свойства.ПользовательИнфБазыСохраняемоеЗначениеПароля = ПользовательИБ.СохраняемоеЗначениеПароля; - Свойства.ПользовательИнфБазыПарольУстановлен = ПользовательИБ.ПарольУстановлен; - Свойства.ПользовательИнфБазыЗапрещеноИзменятьПароль = ПользовательИБ.ЗапрещеноИзменятьПароль; - Свойства.ПользовательИнфБазыАутентификацияОС = ПользовательИБ.АутентификацияОС; - Свойства.ПользовательИнфБазыПользовательОС = ПользовательИБ.ПользовательОС; - Свойства.ПользовательИнфБазыОсновнойИнтерфейс = ?(ПользовательИБ.ОсновнойИнтерфейс = Неопределено, "", ПользовательИБ.ОсновнойИнтерфейс.Имя); - Свойства.ПользовательИнфБазыРежимЗапуска = ?(ПользовательИБ.РежимЗапуска = РежимЗапускаКлиентскогоПриложения.ОбычноеПриложение, - "ОбычноеПриложение", - ?(ПользовательИБ.РежимЗапуска = РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение, - "УправляемоеПриложение", - "Авто")); - Свойства.ПользовательИнфБазыЯзык = ?(ПользовательИБ.Язык = Неопределено, "", ПользовательИБ.Язык.Имя); - - Для каждого Роль Из ПользовательИБ.Роли Цикл - Роли.Добавить(Роль.Имя); - КонецЦикла; - - Возврат Истина; + Возврат Свойства; КонецФункции -// Функция ЗаписатьПользователяИБ -// либо перезаписывает свойства пользователяИБ, -// найденного по строковому или уникальному идентификатору, -// либо создает нового пользователяИБ, когда задано создать, -// при этом, если пользовательИБ найден будет ошибка +// Выполняет поиск идентификаторов пользователей ИБ используемых более одного раза и +// либо вызывает исключение, либо возвращает найденных для произвольной обработки // // Параметры: -// Идентификатор - Строка, УникальныйИдентификатор (идентификатор пользователя). -// НовыеСвойства - Структура (свойство может быть не задано, -// тогда используется прочитанное или начальное значение) -// ПользовательИнфБазыУникальныйИдентификатор - Неопределено (задается после записи пользователя ИБ) -// ПользовательИнфБазыИмя - Неопределено, Строка -// ПользовательИнфБазыПолноеИмя - Неопределено, Строка +// Пользователь - Неопределено - проверка для всех пользователей и внешних пользователей. +// СправочникСсылка.Пользователи или +// СправочникСсылка.ВнешниеПользователи - проверка только для указанной ссылки. // -// ПользовательИнфБазыАутентификацияСтандартная - Неопределено, Булево -// ПользовательИнфБазыПоказыватьВСпискеВыбора - Неопределено, Булево -// ПользовательИнфБазыПароль - Неопределено, Строка -// ПользовательИнфБазыСохраняемоеЗначениеПароля - Неопределено, Строка -// ПользовательИнфБазыПарольУстановлен - Неопределено, Булево -// ПользовательИнфБазыЗапрещеноИзменятьПароль - Неопределено, Булево +// ИдентификаторПользователяИБ +// - Неопределено - проверка всех заданных идентификаторов пользователей ИБ. +// - УникальныйИдентификатор - проверка только для заданного идентификатора. // -// ПользовательИнфБазыАутентификацияОС - Неопределено, Булево -// ПользовательИнфБазыПользовательОС - Неопределено, Строка +// НайденныеИдентификаторы - Неопределено - при нахождении ошибок вызвается исключение. +// Соответствие - при нахождении ошибок исключение не вызвается, +// а вместо этого заполняется переданное соответствие: +// Ключ - неоднозначный идентификатор пользователя ИБ. +// Значение - массив пользователей и внешних пользователей. // -// ПользовательИнфБазыОсновнойИнтерфейс - Неопределено, Строка (имя интерфейса из коллекции Метаданные.Интерфейсы) -// ПользовательИнфБазыРежимЗапуска - Неопределено, Строка (значения: "Авто", "ОбычноеПриложение", "УправляемоеПриложение") -// ПользовательИнфБазыЯзык - Неопределено, Строка (имя языка из коллекции Метаданные.Языки) -// -// НовыеРоли - Неопределено, Массив значений типа Строка (имена ролей из коллекции Метаданные.Роли) -// -// ОписаниеОшибки - Строка, содержит описание ошибки, если чтение не удалось. -// -// Возвращаемое значение: -// Булево, -// если Истина - успех, иначе отказ, см. ОписаниеОшибки. -// -Функция ЗаписатьПользователяИБ(Знач Идентификатор, Знач НовыеСвойства, Знач НовыеРоли, Знач СоздатьНового = Ложь, ОписаниеОшибки = "") Экспорт - - ПользовательИБ = Неопределено; - СтарыеСвойства = Неопределено; - СтарыеРоли = Неопределено; - Свойства = Неопределено; - Роли = Неопределено; - - ПредварительноеЧтение = ПрочитатьПользователяИБ(Идентификатор, СтарыеСвойства, СтарыеРоли, ОписаниеОшибки); - - Если НЕ ПрочитатьПользователяИБ(Идентификатор, Свойства, Роли, ОписаниеОшибки, ПользовательИБ) ИЛИ НЕ ПредварительноеЧтение Тогда - - Если СоздатьНового Тогда - ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); - Иначе - Возврат Ложь; - КонецЕсли; - ИначеЕсли СоздатьНового Тогда - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Невозможно создать пользователя информационной базы ""%1"", - |так как он уже существует.'"), - Идентификатор); - Возврат Ложь; - КонецЕсли; - - // Подготовка новых значений свойств - Для каждого КлючИЗначение Из Свойства Цикл - Если НовыеСвойства.Свойство(КлючИЗначение.Ключ) И НовыеСвойства[КлючИЗначение.Ключ] <> Неопределено Тогда - Свойства[КлючИЗначение.Ключ] = НовыеСвойства[КлючИЗначение.Ключ]; - КонецЕсли; - КонецЦикла; - - Если НовыеРоли <> Неопределено Тогда - Роли = НовыеРоли; - КонецЕсли; - - // Установка новых значений свойств - - ПользовательИБ.Имя = Свойства.ПользовательИнфБазыИмя; - ПользовательИБ.ПолноеИмя = Свойства.ПользовательИнфБазыПолноеИмя; - ПользовательИБ.АутентификацияСтандартная = Свойства.ПользовательИнфБазыАутентификацияСтандартная; - ПользовательИБ.ПоказыватьВСпискеВыбора = Свойства.ПользовательИнфБазыПоказыватьВСпискеВыбора; - Если Свойства.ПользовательИнфБазыПароль <> Неопределено Тогда - ПользовательИБ.Пароль = Свойства.ПользовательИнфБазыПароль; - КонецЕсли; - ПользовательИБ.ЗапрещеноИзменятьПароль = Свойства.ПользовательИнфБазыЗапрещеноИзменятьПароль; - ПользовательИБ.АутентификацияОС = Свойства.ПользовательИнфБазыАутентификацияОС; - ПользовательИБ.ПользовательОС = Свойства.ПользовательИнфБазыПользовательОС; - Если ЗначениеЗаполнено(Свойства.ПользовательИнфБазыОсновнойИнтерфейс) Тогда - ПользовательИБ.ОсновнойИнтерфейс = Метаданные.Интерфейсы[Свойства.ПользовательИнфБазыОсновнойИнтерфейс]; - Иначе - ПользовательИБ.ОсновнойИнтерфейс = Неопределено; - КонецЕсли; - Если ЗначениеЗаполнено(Свойства.ПользовательИнфБазыРежимЗапуска) Тогда - ПользовательИБ.РежимЗапуска = РежимЗапускаКлиентскогоПриложения[Свойства.ПользовательИнфБазыРежимЗапуска]; - КонецЕсли; - Если ЗначениеЗаполнено(Свойства.ПользовательИнфБазыЯзык) Тогда - ПользовательИБ.Язык = Метаданные.Языки[Свойства.ПользовательИнфБазыЯзык]; - Иначе - ПользовательИБ.Язык = Неопределено; - КонецЕсли; - - ПользовательИБ.Роли.Очистить(); - Для каждого Роль Из Роли Цикл - ПользовательИБ.Роли.Добавить(Метаданные.Роли[Роль]); - КонецЦикла; - - // Добавление роли ПолныеПрава, при попытке создать первого пользователя с пустым списком ролей - Если ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() = 0 Тогда - - Если НЕ ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда - ПользовательИБ.Роли.Добавить(Метаданные.Роли.ПолныеПрава); - КонецЕсли; - - Если НЕ ПользовательИБ.Роли.Содержит(ПользователиПереопределяемый.РольАдминистратораСистемы()) Тогда - ПользовательИБ.Роли.Добавить(ПользователиПереопределяемый.РольАдминистратораСистемы()); - КонецЕсли; - КонецЕсли; - - // Попытка записи нового или измененного пользователяИБ - Попытка - ПользовательИБ.Записать(); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - Если ИнформацияОбОшибке.Причина = Неопределено Тогда - ОписаниеОшибки = ИнформацияОбОшибке.Описание; - Иначе - ОписаниеОшибки = ИнформацияОбОшибке.Причина.Описание; - КонецЕсли; - ОписаниеОшибки = НСтр("ru = 'Ошибка при записи пользователя информационной базы:'") + Символы.ПС + ОписаниеОшибки; - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Пользователи'"), УровеньЖурналаРегистрации.Ошибка, , , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - - Возврат Ложь; - КонецПопытки; - - НовыеСвойства.ПользовательИнфБазыУникальныйИдентификатор = ПользовательИБ.УникальныйИдентификатор; - - ПользователиПереопределяемый.ПриЗаписиПользователяИнформационнойБазы(СтарыеСвойства, Свойства); - - Возврат Истина; - -КонецФункции - -// Функция удаляет пользователя информационной базы -// по строковому или уникальному идентификатору. -// -// Параметры: -// ОписаниеОшибки - Строка, содержит описание ошибки, если чтение не удалось. -// -// Возвращаемое значение: -// Булево, -// если Истина - успех, иначе отказ, см. ОписаниеОшибки. -// -Функция УдалитьПользователяИБ(Знач Идентификатор, ОписаниеОшибки = "") Экспорт - - ПользовательИБ = Неопределено; - Свойства = Неопределено; - Роли = Неопределено; - - Если НЕ ПрочитатьПользователяИБ(Идентификатор, Свойства, Роли, ОписаниеОшибки, ПользовательИБ) Тогда - Возврат Ложь; - Иначе - Попытка - ПользовательИБ.Удалить(); - Исключение - ОписаниеОшибки = НСтр("ru = 'Ошибка при удалении пользователя информационной базы:'") + Символы.ПС + ИнформацияОбОшибке().Причина.Описание; - Возврат Ложь; - КонецПопытки; - КонецЕсли; - - ПользователиПереопределяемый.ПослеУдаленияПользователяИнформационнойБазы(Свойства); - - Возврат Истина; - -КонецФункции - -// Функция проверяет существования пользователя информационной базы -// Параметры -// Идентификатор - УникальныйИдентификатор, Строка -// УИД пользователяИБ или Имя пользователяИБ -// -// Возвращаемое значение: -// Булево -// -Функция ПользовательИБСуществует(Знач Идентификатор) Экспорт +Процедура НайтиНеоднозначныхПользователейИБ(Знач Пользователь = Неопределено, Знач ИдентификаторПользователяИБ = Неопределено, Знач НайденныеИдентификаторы = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); - Если ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Идентификатор); - Иначе - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Идентификатор); + Если ТипЗнч(ИдентификаторПользователяИБ) <> Тип("УникальныйИдентификатор") Тогда + ИдентификаторПользователяИБ = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); КонецЕсли; - Если ПользовательИБ = Неопределено Тогда - Возврат Ложь; - Иначе - Возврат Истина; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Пользователь", Пользователь); + Запрос.УстановитьПараметр("ИдентификаторПользователяИБ", ИдентификаторПользователяИБ); + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + Запрос.Текст = + "ВЫБРАТЬ + | ИдентификаторыПользователей.ИдентификаторПользователяИБ, + | ИдентификаторыПользователей.Пользователь + |ИЗ + | (ВЫБРАТЬ + | Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяИБ, + | Пользователи.Ссылка КАК Пользователь + | ИЗ + | Справочник.Пользователи КАК Пользователи + | + | ОБЪЕДИНИТЬ + | + | ВЫБРАТЬ + | ВнешниеПользователи.ИдентификаторПользователяИБ, + | ВнешниеПользователи.Ссылка + | ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи) КАК ИдентификаторыПользователей + |ГДЕ + | ИдентификаторыПользователей.ИдентификаторПользователяИБ В + | (ВЫБРАТЬ + | ИдентификаторыПользователей.ИдентификаторПользователяИБ + | ИЗ + | (ВЫБРАТЬ + | Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяИБ, + | Пользователи.Ссылка КАК Пользователь + | ИЗ + | Справочник.Пользователи КАК Пользователи + | ГДЕ + | Пользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор + | И НЕ(&Пользователь <> НЕОПРЕДЕЛЕНО + | И Пользователи.Ссылка <> &Пользователь) + | И НЕ(&ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор + | И Пользователи.ИдентификаторПользователяИБ <> &ИдентификаторПользователяИБ) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ВнешниеПользователи.ИдентификаторПользователяИБ, + | ВнешниеПользователи.Ссылка + | ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + | ГДЕ + | ВнешниеПользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор + | И НЕ(&Пользователь <> НЕОПРЕДЕЛЕНО + | И ВнешниеПользователи.Ссылка <> &Пользователь) + | И НЕ(&ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор + | И ВнешниеПользователи.ИдентификаторПользователяИБ <> &ИдентификаторПользователяИБ) + | ) КАК ИдентификаторыПользователей + | СГРУППИРОВАТЬ ПО + | ИдентификаторыПользователей.ИдентификаторПользователяИБ + | ИМЕЮЩИЕ + | КОЛИЧЕСТВО(ИдентификаторыПользователей.Пользователь) > 1) + | + |УПОРЯДОЧИТЬ ПО + | ИдентификаторыПользователей.ИдентификаторПользователяИБ"; + + Выгрузка = Запрос.Выполнить().Выгрузить(); + + Если Выгрузка.Количество() = 0 Тогда + Возврат; КонецЕсли; -КонецФункции + ОписаниеОшибки = НСтр("ru = 'Ошибка в базе данных:'") + Символы.ПС; + ТекущийНеоднозначныйИдентификатор = Неопределено; + + Для каждого Строка Из Выгрузка Цикл + НовыйИдентификаторПользователяИБ = Ложь; + Если Строка.ИдентификаторПользователяИБ <> ТекущийНеоднозначныйИдентификатор Тогда + НовыйИдентификаторПользователяИБ = Истина; + ТекущийНеоднозначныйИдентификатор = Строка.ИдентификаторПользователяИБ; + Если ТипЗнч(НайденныеИдентификаторы) = Тип("Соответствие") Тогда + ТекущиеПользователи = Новый Массив; + НайденныеИдентификаторы.Вставить(ТекущийНеоднозначныйИдентификатор, ТекущиеПользователи); + Иначе + ТекущийПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ТекущийНеоднозначныйИдентификатор); + Если ТекущийПользовательИБ = Неопределено Тогда + ИмяПользователяИБ = НСтр("ru = '<не найден>'"); + Иначе + ИмяПользователяИБ = ТекущийПользовательИБ.Имя; + КонецЕсли; + ОписаниеОшибки = ОписаниеОшибки + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пользователю ИБ ""%1"" с идентификатором %2 + |соответствует более одного пользователя базы данных:'"), + ИмяПользователяИБ, + ТекущийНеоднозначныйИдентификатор); + КонецЕсли; + КонецЕсли; + Если ТипЗнч(НайденныеИдентификаторы) = Тип("Соответствие") Тогда + ТекущиеПользователи.Добавить(Строка.Пользователь); + Иначе + Если НЕ НовыйИдентификаторПользователяИБ Тогда + ОписаниеОшибки = ОписаниеОшибки + ","; + КонецЕсли; + ОписаниеОшибки = ОписаниеОшибки + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = ' + | ""%1"" с идентификатором ссылки %2'"), + Строка.Пользователь, + Строка.Пользователь.УникальныйИдентификатор()); + КонецЕсли; + КонецЦикла; + + Если ТипЗнч(НайденныеИдентификаторы) <> Тип("Соответствие") Тогда + ОписаниеОшибки = ОписаниеОшибки + "." + Символы.ПС; + ВызватьИсключение ОписаниеОшибки; + КонецЕсли; + +КонецПроцедуры -// Процедура, определяет пользователя, под которым запущен сеанс и пытается -// найти соответсвие ему в справочнике Пользователи. Если соответствие -// не найдено - создается новый элемент. Параметр сеанса ТекущийПользователь -// устанавливается как ссылка на найденный (созданный) элемент справочника. -// +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Заполняет параметр сеанса ТекущийПользователь или ТекущийВнешнийПользователь +// значением пользователя, найденному по пользователю информационной базы +// под которым запущен сеанс. +// Если пользователь не найден, то при наличии административных прав +// создается новый пользователь в справочнике, иначе вызывается исключение. +// Процедура УстановкаПараметровСеанса(Знач ИмяПараметра, УстановленныеПараметры) Экспорт УстановитьПривилегированныйРежим(Истина); ПользовательНеНайден = Ложь; СоздатьПользователя = Ложь; + СсылкаНового = Неопределено; Если ПустаяСтрока(ПользователиИнформационнойБазы.ТекущийПользователь().Имя) Тогда - Если ЭтоПолноправныйПользовательИБ() Тогда - ПараметрыСеанса.ТекущийВнешнийПользователь = Справочники.ВнешниеПользователи.ПустаяСсылка(); - - ИмяПользователя = ПолноеИмяНеУказанногоПользователя(); - ПолноеИмяПользователя = ПолноеИмяНеУказанногоПользователя(); - - Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ ПЕРВЫЕ 1 - | Пользователи.Ссылка КАК Ссылка - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.Наименование = &ПолноеИмяПользователя"; - - Запрос.Параметры.Вставить("ПолноеИмяПользователя", ПолноеИмяПользователя); - - Результат = Запрос.Выполнить(); - - Если Результат.Пустой() Тогда - ПользовательНеНайден = Истина; - СоздатьПользователя = Истина; - ИдентификаторПользователяИБ = ""; - Иначе - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - ПараметрыСеанса.ТекущийПользователь = Выборка.Ссылка; - КонецЕсли; - Иначе + ПараметрыСеанса.ТекущийВнешнийПользователь = Справочники.ВнешниеПользователи.ПустаяСсылка(); + + СвойстваНеуказанногоПользователя = СвойстваНеуказанногоПользователя(); + + ИмяПользователя = СвойстваНеуказанногоПользователя.ПолноеИмя; + ПолноеИмяПользователя = СвойстваНеуказанногоПользователя.ПолноеИмя; + СсылкаНового = СвойстваНеуказанногоПользователя.СтандартнаяСсылка; + + Если СвойстваНеуказанногоПользователя.Ссылка = Неопределено Тогда ПользовательНеНайден = Истина; + СоздатьПользователя = Истина; + ИдентификаторПользователяИБ = ""; + Иначе + ПараметрыСеанса.ТекущийПользователь = СвойстваНеуказанногоПользователя.Ссылка; КонецЕсли; Иначе ИдентификаторПользователяИБ = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор; + НайтиНеоднозначныхПользователейИБ(, ИдентификаторПользователяИБ); + Запрос = Новый Запрос; - Запрос.Параметры.Вставить("ИдентификаторПользователяИБ ", ИдентификаторПользователяИБ); + Запрос.Параметры.Вставить("ИдентификаторПользователяИБ", ИдентификаторПользователяИБ); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 @@ -851,7 +864,7 @@ ПараметрыСеанса.ТекущийВнешнийПользователь = Справочники.ВнешниеПользователи.ПустаяСсылка(); Если РезультатПользователи.Пустой() Тогда - Если ЭтоПолноправныйПользовательИБ() Тогда + Если ЭтоПолноправныйПользователь(,,Ложь) Тогда ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); ИмяПользователя = ТекущийПользователь.Имя; @@ -877,7 +890,14 @@ КонецЕсли; Если СоздатьПользователя Тогда - СсылкаНового = Справочники.Пользователи.ПолучитьСсылку(); + + НачатьТранзакцию(); + + СтандартныеПодсистемыПереопределяемый.ЗарегистрироватьНеразделенногоПользователя(); + + Если СсылкаНового = Неопределено Тогда + СсылкаНового = Справочники.Пользователи.ПолучитьСсылку(); + КонецЕсли; ПараметрыСеанса.ТекущийПользователь = СсылкаНового; НовыйПользователь = Справочники.Пользователи.СоздатьЭлемент(); @@ -899,6 +919,8 @@ КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) ); ВызватьИсключение ТекстСообщенияОбОшибке; КонецПопытки; + + ЗафиксироватьТранзакцию(); ИначеЕсли ПользовательНеНайден Тогда ВызватьИсключение ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя); @@ -908,19 +930,724 @@ КонецПроцедуры -// Функция определяет наличие элемента в справочнике Пользователи -// или ВнешниеПользователи по уникальному идентификатору +// Вызывается при начале работы системы, чтобы проверить возможность выполнения авторизации и +// вызвать заполнение значений параметров сеанса ТекущийПользователь и ТекущийВнешнийПользователь. +// +// Возвращаемое значение: +// Строка - если не пустая строка, значит ошибка авторизации, +// следует завершить работу 1С:Предприятия. +// +Функция АвторизоватьТекущегоПользователя() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + ПроверитьПраваПользователя(ТекущийПользователь); + + СтандартныеПодсистемыПереопределяемый.ЗарегистрироватьНеразделенногоПользователя(); + + Если ПустаяСтрока(ТекущийПользователь.Имя) + ИЛИ ПользовательПоИдентификаторуСуществует(ТекущийПользователь.УникальныйИдентификатор) Тогда + // Авторизуется пользователь по умолчанию + // или пользовательИБ найден в справочнике. + Возврат ""; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ТекущийПользователь.РазделениеДанных.Количество() = 0 Тогда + + + НачатьТранзакцию(); + + // Это неразделенный пользователь, требуется создать элемент в текущей области. + ПользовательОбъект = Справочники.Пользователи.СоздатьЭлемент(); + ПользовательОбъект.Наименование = ТекущийПользователь.Имя; + ПользовательОбъект.ИдентификаторПользователяИБ = ТекущийПользователь.УникальныйИдентификатор; + ПользовательОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + УстановитьПривилегированныйРежим(Ложь); + + Возврат ""; + КонецЕсли; + + // Требуется либо создать администратора, либо сообщить об отказе авторизации. + ТекстСообщенияОбОшибке = ""; + ТребуетсяСоздатьАдминистратора = Ложь; + + ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + + Если ПользователиИБ.Количество() = 1 Или ЭтоПолноправныйПользователь(, Истина, Ложь) Тогда + // Авторизуется администратор, созданный в конфигураторе. + ТребуетсяСоздатьАдминистратора = Истина; + Иначе + // Авторизуется обычный пользователь, созданный в конфигураторе. + ТекстСообщенияОбОшибке = ТекстСообщенияПользовательНеНайденВСправочнике(ТекущийПользователь.Имя); + КонецЕсли; + + Если ТребуетсяСоздатьАдминистратора Тогда + // + Если РольДоступна(Метаданные.Роли.ПолныеПрава) + И РольДоступна(РольАдминистратораСистемы()) Тогда + // + Пользователь = СоздатьПервогоАдминистратора(ТекущийПользователь); + // + Комментарий = НСтр("ru = 'Выполняется запуск от имени пользователя с ролью ""Полные права"", + |который не зарегистрирован в списке пользователей. + |Выполнена автоматическая регистрация в списке пользователей. + | + |Для ведения списка и настройки прав пользователей предназначен список Пользователи, + |режим конфигурирования 1С:Предприятия для этого использовать не следует.'"); + ПользователиПереопределяемый.ПослеЗаписиАдминистратораПриАвторизации(Комментарий); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Администратор зарегистрирован в справочнике Пользователи'"), + УровеньЖурналаРегистрации.Предупреждение, + Метаданные.Справочники.Пользователи, + Пользователь, + Комментарий); + Иначе + ТекстСообщенияОбОшибке = НСтр("ru = 'Запуск от имени пользователя с правом Администрирование невозможен, + |так как он не зарегистрирован в списке пользователей. + | + |Для ведения списка и настройки прав пользователей предназначен список Пользователи, + |режим конфигурирования 1С:Предприятия для этого использовать не следует.'"); + КонецЕсли; + КонецЕсли; + + Возврат ТекстСообщенияОбОшибке; + +КонецФункции + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.5.2"; + Обработчик.Процедура = "Пользователи.ЗаполнитьИдентификаторыПользователей"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.5.15"; + Обработчик.Процедура = "Пользователи.ЗаполнениеРегистраСоставыГруппПользователей"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.6.5"; + Обработчик.Процедура = "ВнешниеПользователи.ЗаполнитьСоставГруппВнешнихПользователей"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.6.5"; + Обработчик.Процедура = "ВнешниеПользователи.ДляВнешнихПользователейСоздатьПользователейИБ"; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция ТребуетсяСоздатьПервогоАдминистратора(Знач СтруктураОписанияПользователяИБ, ТекстВопроса = Неопределено) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Возврат Ложь; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() = 0 Тогда + + Если СтруктураОписанияПользователяИБ.Свойство("ПользовательИнфБазыРоли") Тогда + Роли = СтруктураОписанияПользователяИБ.ПользовательИнфБазыРоли; + Иначе + Роли = Новый Массив; + КонецЕсли; + + Если ПользователиПереопределяемый.ЗапретРедактированияРолей() + ИЛИ Роли.Найти("ПолныеПрава") = Неопределено + ИЛИ Роли.Найти(РольАдминистратораСистемы().Имя) = Неопределено Тогда + + // Подготовка текста вопроса при записи первого администратора + ТекстВопроса = НСтр("ru = 'В список пользователей программы добавляется первый пользователь, + |поэтому ему автоматически будет назначена роль ""Полные права"". + |Продолжить?'"); + ПользователиПереопределяемый.ТекстВопросаПередЗаписьюПервогоАдминистратора(ТекстВопроса); + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Возвращет текущий уровень доступа на изменение свойств пользователя. +// +// Возвращаемое значение: +// Строка. +// Возможные значения: +// "ПолныйДоступ" - любое изменение свойств пользователя +// "УправлениеСписком" - управление списком пользователей, без возможности +// изменения прав +// "ИзменениеТекущего" - изменение свойств текущего пользователя "Имя", +// "Пароль" и "Язык" +// "НетДоступа" - права на изменение пользователей отсутствуют +// +Функция ПолучитьУровеньДоступаНаИзменениеСвойствПользователяИБ() Экспорт + + Если ЭтоПолноправныйПользователь() Тогда + Возврат "ПолныйДоступ"; + + ИначеЕсли РольДоступна(Метаданные.Роли.ДобавлениеИзменениеПользователей) Тогда + Возврат "УправлениеСписком"; + + ИначеЕсли РольДоступна(Метаданные.Роли.ИзменениеТекущегоПользователя) Тогда + Возврат "ИзменениеТекущего"; + Иначе + Возврат "НетДоступа"; + КонецЕсли; + +КонецФункции + +// Только для внутреннего использования +Функция ПолноеИмяНеуказанногоПользователя() Экспорт + + Возврат НСтр("ru = '<Не указан>'"); + +КонецФункции + +// Только для внутреннего использования +Функция СвойстваНеуказанногоПользователя() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Свойства = Новый Структура; + + // Ссылка на найденный элемент справочника + // соответствующий неуказанному пользователю + Свойства.Вставить("Ссылка", Неопределено); + + // Ссылка, используемая для поиска и создания + // неуказанного пользователя в справочнике Пользователи + Свойства.Вставить("СтандартнаяСсылка", Справочники.Пользователи.ПолучитьСсылку( + Новый УникальныйИдентификатор("aa00559e-ad84-4494-88fd-f0826edc46f0"))); + + // Полное имя, которое устанавливается в элемент справочника Пользователи + // при создании несуществующего неуказанного пользователя + Свойства.Вставить("ПолноеИмя", ПолноеИмяНеуказанногоПользователя()); + + // Полное имя, которое используется для поиска неуказанного пользователя + // старым способом, необходимым для поддержки старых версий + // неуказанного пользователя. Это имя не требуется изменять. + Свойства.Вставить("ПолноеИмяДляПоиска", НСтр("ru = '<Не указан>'")); + + // Поиск по уникальному идентификатору + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Свойства.СтандартнаяСсылка); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.Ссылка = &Ссылка"; + + Если Запрос.Выполнить().Пустой() Тогда + Запрос.УстановитьПараметр("ПолноеИмя", Свойства.ПолноеИмяДляПоиска); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Пользователи.Ссылка + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.Наименование = &ПолноеИмя"; + Результат = Запрос.Выполнить(); + + Если НЕ Результат.Пустой() Тогда + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + Свойства.Ссылка = Выборка.Ссылка; + КонецЕсли; + Иначе + Свойства.Ссылка = Свойства.СтандартнаяСсылка; + КонецЕсли; + + Возврат Свойства; + +КонецФункции + +// Функция ПрочитатьПользователяИБ считывает свойства пользователя +// информационной базы по строковому или уникальному идентификатору. +// +// Параметры: +// Идентификатор - Неопределено, Строка, УникальныйИдентификатор (идентификатор пользователя). +// Свойства - Структура: +// ПользовательИнфБазыУникальныйИдентификатор - УникальныйИдентификатор +// ПользовательИнфБазыИмя - Строка +// ПользовательИнфБазыПолноеИмя - Строка +// +// ПользовательИнфБазыАутентификацияСтандартная - Булево +// ПользовательИнфБазыПоказыватьВСпискеВыбора - Булево +// ПользовательИнфБазыПароль - Неопределено +// ПользовательИнфБазыСохраняемоеЗначениеПароля - Строка +// ПользовательИнфБазыПарольУстановлен - Булево +// ПользовательИнфБазыЗапрещеноИзменятьПароль - Булево +// +// ПользовательИнфБазыАутентификацияОС - Булево +// ПользовательИнфБазыПользовательОС - Строка +// +// ПользовательИнфБазыОсновнойИнтерфейс - Строка (имя интерфейса из коллекции Метаданные.Интерфейсы) +// ПользовательИнфБазыРежимЗапуска - Строка (значения: "Авто", "ОбычноеПриложение", "УправляемоеПриложение") +// ПользовательИнфБазыЯзык - Строка (имя языка из коллекции Метаданные.Языки) +// +// Роли - Массив значений типа Строка (имена ролей из коллекции Метаданные.Роли) +// +// ОписаниеОшибки - Строка, содержит описание ошибки, если чтение не удалось. +// +// Возвращаемое значение: +// Булево, +// если Истина - успех, иначе отказ, см. ОписаниеОшибки. +// +Функция ПрочитатьПользователяИБ(Знач Идентификатор, Свойства = Неопределено, Роли = Неопределено, ОписаниеОшибки = "", ПользовательИБ = Неопределено) Экспорт + + Свойства = НовоеОписаниеПользователяИБ(); + + Роли = Новый Массив; + + Если ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Идентификатор); + ИначеЕсли ТипЗнч(Идентификатор) = Тип("Строка") Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Идентификатор); + Иначе + ПользовательИБ = Неопределено; + КонецЕсли; + + Если ПользовательИБ = Неопределено Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Пользователь информационной базы ""%1""' не найден."), Идентификатор); + Возврат Ложь; + КонецЕсли; + + Свойства.ПользовательИнфБазыУникальныйИдентификатор = ПользовательИБ.УникальныйИдентификатор; + Свойства.ПользовательИнфБазыИмя = ПользовательИБ.Имя; + Свойства.ПользовательИнфБазыПолноеИмя = ПользовательИБ.ПолноеИмя; + Свойства.ПользовательИнфБазыАутентификацияСтандартная = ПользовательИБ.АутентификацияСтандартная; + Свойства.ПользовательИнфБазыПоказыватьВСпискеВыбора = ПользовательИБ.ПоказыватьВСпискеВыбора; + Свойства.ПользовательИнфБазыСохраняемоеЗначениеПароля = ПользовательИБ.СохраняемоеЗначениеПароля; + Свойства.ПользовательИнфБазыПарольУстановлен = ПользовательИБ.ПарольУстановлен; + Свойства.ПользовательИнфБазыЗапрещеноИзменятьПароль = ПользовательИБ.ЗапрещеноИзменятьПароль; + Свойства.ПользовательИнфБазыАутентификацияОС = ПользовательИБ.АутентификацияОС; + Свойства.ПользовательИнфБазыПользовательОС = ПользовательИБ.ПользовательОС; + Свойства.ПользовательИнфБазыОсновнойИнтерфейс = ?(ПользовательИБ.ОсновнойИнтерфейс = Неопределено, "", ПользовательИБ.ОсновнойИнтерфейс.Имя); + ПолноеИмяЗначенияРежимЗапуска = ПолучитьПолноеИмяПредопределенногоЗначения(ПользовательИБ.РежимЗапуска); + Свойства.ПользовательИнфБазыРежимЗапуска = Сред(ПолноеИмяЗначенияРежимЗапуска, Найти(ПолноеИмяЗначенияРежимЗапуска, ".") + 1); + Свойства.ПользовательИнфБазыЯзык = ?(ПользовательИБ.Язык = Неопределено, "", ПользовательИБ.Язык.Имя); + + Для каждого Роль Из ПользовательИБ.Роли Цикл + Роли.Добавить(Роль.Имя); + КонецЦикла; + + Возврат Истина; + +КонецФункции + +// Проверяет корректность заполнения структуры описания пользователя ИБ. +// В случае нахождения ошибок устанавливает параметр Отказ в Истина и +// отправляет сообщения об ошибках. +// +// Параметры: +// СтруктураОписанияПользователяИБ - Структура - описание пользователя ИБ +// заполнение которого требуется проверить. +// +// Отказ - Булево - флаг отказа от выполнения операции. +// Устанавливается в случае ошибки. +// +// Возвращаемое значение: +// Булево - если Истина, ошибок не найдено. +// +Функция ПроверитьЗаполнениеСтруктурыОписанияПользователяИБ(Знач СтруктураОписанияПользователяИБ, Отказ) Экспорт + + Если СтруктураОписанияПользователяИБ.Свойство("ПользовательИнфБазыИмя") Тогда + + Если ПустаяСтрока(СтруктураОписанияПользователяИБ.ПользовательИнфБазыИмя) Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не заполнено имя пользователя информационной базы.'"), + , + "ПользовательИнфБазыИмя", + , + Отказ); + КонецЕсли; + + КонецЕсли; + + Если СтруктураОписанияПользователяИБ.Свойство("ПользовательИнфБазыПароль") Тогда + + Если СтруктураОписанияПользователяИБ.ПользовательИнфБазыПароль <> Неопределено + И СтруктураОписанияПользователяИБ.ПользовательИнфБазыПароль <> СтруктураОписанияПользователяИБ.ПодтверждениеПароля Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Пароль и подтверждение пароля не совпадают.'"), + , + "Пароль", + , + Отказ); + КонецЕсли; + + КонецЕсли; + + Если СтруктураОписанияПользователяИБ.Свойство("ПользовательИнфБазыПользовательОС") Тогда + + Если НЕ ПустаяСтрока(СтруктураОписанияПользователяИБ.ПользовательИнфБазыПользовательОС) Тогда + + УстановитьПривилегированныйРежим(Истина); + Попытка + ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + ПользовательИБ.ПользовательОС = СтруктураОписанияПользователяИБ.ПользовательИнфБазыПользовательОС; + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Пользователь ОС должен быть в формате + |""\\ИмяДомена\ИмяПользователя"".'"), + , + "ПользовательИнфБазыПользовательОС", + , + Отказ); + КонецПопытки; + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + КонецЕсли; + + Возврат НЕ Отказ; + +КонецФункции + +// Перезаписывает свойства пользователя ИБ, найденного по строковому или уникальному идентификатору, +// либо создает нового пользователя ИБ (если задано создать существующего пользователя - будет ошибка). +// +// Параметры: +// Идентификатор - Строка, УникальныйИдентификатор (идентификатор пользователя). +// ИзмененныеСвойства - Структура (свойство может быть не задано, +// тогда используется прочитанное или начальное значение): +// +// ПользовательИнфБазыУникальныйИдентификатор - Неопределено (возвращаемое значение, устанавливается после записи пользователя ИБ) +// ПользовательИнфБазыИмя - Неопределено, Строка +// ПользовательИнфБазыПолноеИмя - Неопределено, Строка +// +// ПользовательИнфБазыАутентификацияСтандартная - Неопределено, Булево +// ПользовательИнфБазыПоказыватьВСпискеВыбора - Неопределено, Булево +// ПользовательИнфБазыПароль - Неопределено, Строка +// ПользовательИнфБазыСохраняемоеЗначениеПароля - Неопределено, Строка +// ПользовательИнфБазыПарольУстановлен - Неопределено, Булево +// ПользовательИнфБазыЗапрещеноИзменятьПароль - Неопределено, Булево +// +// ПользовательИнфБазыАутентификацияОС - Неопределено, Булево +// ПользовательИнфБазыПользовательОС - Неопределено, Строка +// +// ПользовательИнфБазыОсновнойИнтерфейс - Неопределено, Строка (имя интерфейса из коллекции Метаданные.Интерфейсы) +// ПользовательИнфБазыРежимЗапуска - Неопределено, Строка (значения: "Авто", "ОбычноеПриложение", "УправляемоеПриложение") +// ПользовательИнфБазыЯзык - Неопределено, Строка (имя языка из коллекции Метаданные.Языки) +// +// НовыеРоли - Неопределено, Массив значений типа Строка (имена ролей из коллекции Метаданные.Роли) +// +// ОписаниеОшибки - Строка, содержит описание ошибки, если чтение не удалось. +// +// Возвращаемое значение: +// Булево, если Истина - успех, иначе отказ, см. ОписаниеОшибки. +// +Функция ЗаписатьПользователяИБ(Знач Идентификатор, Знач ИзмененныеСвойства, Знач НовыеРоли, Знач СоздатьНового = Ложь, ОписаниеОшибки = "") Экспорт + + ПользовательИБ = Неопределено; + СтарыеСвойства = Неопределено; + + ПредварительноеЧтение = ПрочитатьПользователяИБ(Идентификатор, СтарыеСвойства, , ОписаниеОшибки, ПользовательИБ); + + Если НЕ ПредварительноеЧтение Тогда + + Если СоздатьНового = Неопределено ИЛИ СоздатьНового = Истина Тогда + ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + Иначе + Возврат Ложь; + КонецЕсли; + ИначеЕсли СоздатьНового = Истина Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно создать пользователя информационной базы ""%1"", + |так как он уже существует.'"), + Идентификатор); + Возврат Ложь; + КонецЕсли; + + // Подготовка новых значений свойств + НовыеСвойства = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(СтарыеСвойства); + + Для каждого КлючИЗначение Из НовыеСвойства Цикл + Если ИзмененныеСвойства.Свойство(КлючИЗначение.Ключ) И ИзмененныеСвойства[КлючИЗначение.Ключ] <> Неопределено Тогда + НовыеСвойства[КлючИЗначение.Ключ] = ИзмененныеСвойства[КлючИЗначение.Ключ]; + КонецЕсли; + КонецЦикла; + + Если НовыеРоли <> Неопределено Тогда + Роли = НовыеРоли; + КонецЕсли; + + // Установка новых значений свойств + ПользовательИБ.Имя = НовыеСвойства.ПользовательИнфБазыИмя; + ПользовательИБ.ПолноеИмя = НовыеСвойства.ПользовательИнфБазыПолноеИмя; + ПользовательИБ.АутентификацияСтандартная = НовыеСвойства.ПользовательИнфБазыАутентификацияСтандартная; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПользовательИБ.ПоказыватьВСпискеВыбора = Ложь; + Иначе + ПользовательИБ.ПоказыватьВСпискеВыбора = НовыеСвойства.ПользовательИнфБазыПоказыватьВСпискеВыбора; + КонецЕсли; + + Если НовыеСвойства.ПользовательИнфБазыПароль <> Неопределено Тогда + ПользовательИБ.Пароль = НовыеСвойства.ПользовательИнфБазыПароль; + ИначеЕсли НовыеСвойства.ПользовательИнфБазыСохраняемоеЗначениеПароля <> Неопределено Тогда + ПользовательИБ.СохраняемоеЗначениеПароля = НовыеСвойства.ПользовательИнфБазыСохраняемоеЗначениеПароля + КонецЕсли; + + ПользовательИБ.ЗапрещеноИзменятьПароль = НовыеСвойства.ПользовательИнфБазыЗапрещеноИзменятьПароль; + ПользовательИБ.АутентификацияОС = НовыеСвойства.ПользовательИнфБазыАутентификацияОС; + ПользовательИБ.ПользовательОС = НовыеСвойства.ПользовательИнфБазыПользовательОС; + + Если ЗначениеЗаполнено(НовыеСвойства.ПользовательИнфБазыОсновнойИнтерфейс) Тогда + ПользовательИБ.ОсновнойИнтерфейс = Метаданные.Интерфейсы[НовыеСвойства.ПользовательИнфБазыОсновнойИнтерфейс]; + Иначе + ПользовательИБ.ОсновнойИнтерфейс = Неопределено; + КонецЕсли; + + Если ЗначениеЗаполнено(НовыеСвойства.ПользовательИнфБазыРежимЗапуска) Тогда + ПользовательИБ.РежимЗапуска = РежимЗапускаКлиентскогоПриложения[НовыеСвойства.ПользовательИнфБазыРежимЗапуска]; + КонецЕсли; + + Если ЗначениеЗаполнено(НовыеСвойства.ПользовательИнфБазыЯзык) Тогда + ПользовательИБ.Язык = Метаданные.Языки[НовыеСвойства.ПользовательИнфБазыЯзык]; + Иначе + ПользовательИБ.Язык = Неопределено; + КонецЕсли; + + Если НовыеРоли <> Неопределено Тогда + ПользовательИБ.Роли.Очистить(); + Для каждого Роль Из НовыеРоли Цикл + ПользовательИБ.Роли.Добавить(Метаданные.Роли[Роль]); + КонецЦикла; + КонецЕсли; + + // Добавление роли ПолныеПрава, при попытке создать первого пользователя с пустым списком ролей + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() = 0 Тогда + + Если НЕ ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда + + ПользовательИБ.Роли.Добавить(Метаданные.Роли.ПолныеПрава); + КонецЕсли; + + Если НЕ ПользовательИБ.Роли.Содержит(РольАдминистратораСистемы()) Тогда + + ПользовательИБ.Роли.Добавить(РольАдминистратораСистемы()); + КонецЕсли; + КонецЕсли; + + // Попытка записи нового или измененного пользователяИБ + Попытка + ЗаписатьПользователяИнформационнойБазы(ПользовательИБ); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Если ИнформацияОбОшибке.Причина = Неопределено Тогда + ОписаниеОшибки = ИнформацияОбОшибке.Описание; + Иначе + ОписаниеОшибки = ИнформацияОбОшибке.Причина.Описание; + КонецЕсли; + ОписаниеОшибки = НСтр("ru = 'Ошибка при записи пользователя информационной базы:'") + Символы.ПС + ОписаниеОшибки; + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Пользователи'"), УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + Возврат Ложь; + КонецПопытки; + + ПользователиПереопределяемый.ПриЗаписиПользователяИнформационнойБазы(СтарыеСвойства, НовыеСвойства); + + ИзмененныеСвойства.Вставить("ПользовательИнфБазыУникальныйИдентификатор", ПользовательИБ.УникальныйИдентификатор); + Возврат Истина; + +КонецФункции + +// Записывает указанного Пользователя ИБ с учетом режима разделения данных. +// Если режим разделения данных включен, тогда перед записью проверяются +// права записываемого пользователя. +// +// Параметры: +// ПользовательИБ - ПользовательИнформационнойБазы - объект, который требуется записать. +// +Процедура ЗаписатьПользователяИнформационнойБазы(ПользовательИБ) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если СтандартныеПодсистемыПереопределяемый.ЭтоНеразделенныйПользовательИБ(ПользовательИБ.УникальныйИдентификатор) Тогда + ВызватьИсключение(НСтр("ru = 'Запись неразделенных пользователей + |при включенном использовании разделителей запрещена.'")) + КонецЕсли; + + КонецЕсли; + + ПроверитьПраваПользователя(ПользовательИБ); + + ПользовательИБ.Записать(); + +КонецПроцедуры + +// Проверяет права указанного Пользователя ИБ в режиме разделения данных. +// +// Параметры: +// ПользовательИБ - ПользовательИнформационнойБазы. +// +Процедура ПроверитьПраваПользователя(ПользовательИБ) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если ПользовательИБ.РазделениеДанных.Количество() > 0 Тогда + + НедоступныеПрава = ПользователиСерверПовтИсп.НедоступныеПраваПоТипуПользователя( + Перечисления.ТипыПользователей.ПользовательОбластиДанных); + + НедоступнаяРоль = Неопределено; + + Для каждого Роль Из ПользовательИБ.Роли Цикл + + ДоступныеДляИзмененияОбщиеДанные = ПользователиСерверПовтИсп.ОбщиеДанныеДоступныеДляИзменения(Роль.Имя); + + Если ДоступныеДляИзмененияОбщиеДанные.Количество() > 0 Тогда + НедоступнаяРоль = Роль; + + Запись = Новый ЗаписьXML; + Запись.УстановитьСтроку(); + СериализаторXDTO.ЗаписатьXML(Запись, ДоступныеДляИзмененияОбщиеДанные); + ТаблицаСтрокой = Запись.Закрыть(); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Запись'"), + УровеньЖурналаРегистрации.Ошибка, + , + ПользовательИБ, + НСтр("ru = 'Разделенному пользователю назначена роль, + |предоставляющая права на изменение общих данных: + |'") + ТаблицаСтрокой); + КонецЕсли; + + Для каждого Право Из НедоступныеПрава Цикл + + Если ПравоДоступа(Право, Метаданные, Роль) Тогда + НедоступнаяРоль = Роль; + + ШаблонСообщения = НСтр("ru = 'Разделенному пользователю назначена роль, + |предоставляющая право %1.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Право); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Запись'"), + УровеньЖурналаРегистрации.Ошибка, + , + ПользовательИБ, + ТекстСообщения); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Если НедоступнаяРоль <> Неопределено Тогда + ШаблонСообщения = НСтр("ru = 'Разделенным пользователям не может быть назначена + |роль %1.'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НедоступнаяРоль.Представление()); + КонецЕсли; + + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Удаляет указанного пользователя информационной базы. +// +// Параметры: +// Идентификатор - Строка - имя пользователя ИБ, +// УникальныйИдентификатор - идентификатор пользователя ИБ. +// +// ОписаниеОшибки - Строка, содержит описание ошибки, если удаление не удалось. +// +// Возвращаемое значение: +// Булево, если Истина - успех, иначе отказ, см. ОписаниеОшибки. +// +Функция УдалитьПользователяИБ(Знач Идентификатор, ОписаниеОшибки = "") Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И СтандартныеПодсистемыПереопределяемый.ЭтоНеразделенныйПользовательИБ(Идентификатор) Тогда + + ВызватьИсключение(НСтр("ru = 'Удаление неразделенных пользователей + |при включенном использовании разделителей запрещено.'")); + КонецЕсли; + + ПользовательИБ = Неопределено; + Свойства = Неопределено; + Роли = Неопределено; + + Если НЕ ПрочитатьПользователяИБ(Идентификатор, Свойства, Роли, ОписаниеОшибки, ПользовательИБ) Тогда + Возврат Ложь; + Иначе + Попытка + ПользовательИБ.Удалить(); + Исключение + ОписаниеОшибки = НСтр("ru = 'Ошибка при удалении пользователя информационной базы:'") + Символы.ПС + ИнформацияОбОшибке().Причина.Описание; + Возврат Ложь; + КонецПопытки; + КонецЕсли; + + ПользователиПереопределяемый.ПослеУдаленияПользователяИнформационнойБазы(Свойства); + + Возврат Истина; + +КонецФункции + +// Проверяет существование пользователя информационной базы. +// +// Параметры: +// Идентификатор - Строка - имя пользователя ИБ, +// УникальныйИдентификатор - идентификатор пользователя ИБ. +// +// Возвращаемое значение: +// Булево. +// +Функция ПользовательИБСуществует(Знач Идентификатор) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Идентификатор); + Иначе + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Идентификатор); + КонецЕсли; + + Если ПользовательИБ = Неопределено Тогда + Возврат Ложь; + Иначе + Возврат Истина; + КонецЕсли; + +КонецФункции + +// Определяет наличие элемента в справочнике Пользователи +// или справочнике ВнешниеПользователи по уникальному идентификатору // пользователя информационной. -// Функция используется для проверки связи пользователяИБ только +// Функция используется для проверки наличия связи пользователяИБ только // с одним элементом справочников Пользователи, ВнешниеПользователи. // // Параметры: -// УникальныйИдентификатор - УникальныйИдентификатор пользователя ИБ -// СсылкаНаТекущего - СправочникСсылка.Пользователи -// СправочникСсылка.ВнешниеПользователи -// Неопределено, - когда параметр задан -// указанная ссылка исключается из поиска, -// т.е. может быть найден только другой элемент. +// УникальныйИдентификатор - идентификатор пользователя ИБ. +// +// СсылкаНаТекущего - СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи - исключить +// указанную ссылку из поиска. +// Неопределено - искать среди всех элементов справочников. // // Возвращаемое значение: // Булево. @@ -930,42 +1657,46 @@ УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.ИдентификаторПользователяИБ = &УникальныйИдентификатор - | И Пользователи.Ссылка <> &СсылкаНаТекущего - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ИСТИНА - |ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - |ГДЕ - | ВнешниеПользователи.ИдентификаторПользователяИБ = &УникальныйИдентификатор - | И ВнешниеПользователи.Ссылка <> &СсылкаНаТекущего"; + Запрос.Текст = + "ВЫБРАТЬ + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяИБ = &УникальныйИдентификатор + | И Пользователи.Ссылка <> &СсылкаНаТекущего + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ИСТИНА + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |ГДЕ + | ВнешниеПользователи.ИдентификаторПользователяИБ = &УникальныйИдентификатор + | И ВнешниеПользователи.Ссылка <> &СсылкаНаТекущего"; Запрос.УстановитьПараметр("СсылкаНаТекущего", СсылкаНаТекущего); Запрос.УстановитьПараметр("УникальныйИдентификатор", УникальныйИдентификатор); - Возврат НЕ Запрос.Выполнить().Пустой(); + Если НЕ Запрос.Выполнить().Пустой() Тогда + НайтиНеоднозначныхПользователейИБ(, УникальныйИдентификатор); + Возврат Истина; + КонецЕсли; + + Возврат Ложь; КонецФункции -// Функция проверяет связан ли пользовательИБ с указанным -// именем с элементом справочника Пользователи или -// элементом справочника ВнешниеПользователи -// Если пользователь не найден, значит тоже не связан +// Проверяет связан ли пользовательИБ с элементом справочника Пользователи или +// элементом справочника ВнешниеПользователи. // // Параметры: -// ИмяПользователя - Строка +// ИмяПользователя - Строка - имя пользователя ИБ. // // Возвращаемое значение: // Булево. // -Функция ПользовательИБНеЗанят(знач ИмяПользователя) Экспорт +Функция ПользовательИБНеЗанят(Знач ИмяПользователя) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -983,15 +1714,47 @@ КонецФункции -// Процедура ОбновитьСоставыГруппПользователей обновляет в регистре сведений -// "Состав групп пользователей" соответствие групп пользователей и пользователей -// с учетом иерархии групп пользователей (родитель включает пользователей порожденных групп). -// Эти данные требуются для формы списка и формы выбора пользователей. -// Данные регистра могут быть применены в других целях для повышения производительности, -// т.к. не требуется работать с иерархией на языке запросов. +// Используется в процедурах ОбновитьСоставыГруппПользователей, +// ОбновитьСоставГруппВнешнихПользователей. // // Параметры: -// ГруппаПользователей - СправочникСсылка.ГруппыПользователей +// Таблица - полное имя объекта метаданных. +// +// Возвращаемое значение: +// ТаблицаЗначений (Ссылка, Родитель) +// +Функция ТаблицаГруппРодителей(Таблица) Экспорт + + // Подготовка состава групп родителей. + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ГруппыТаблицы.Ссылка, + | ГруппыТаблицы.Родитель + |ИЗ + | " + Таблица + " КАК ГруппыТаблицы"); + ТаблицаЭлементов = Запрос.Выполнить().Выгрузить(); + ТаблицаЭлементов.Индексы.Добавить("Родитель"); + ТаблицаГруппРодителей = ТаблицаЭлементов.Скопировать(Новый Массив); + + Для каждого ОписаниеЭлемента Из ТаблицаЭлементов Цикл + ОписаниеГруппыРодителя = ТаблицаГруппРодителей.Добавить(); + ОписаниеГруппыРодителя.Родитель = ОписаниеЭлемента.Ссылка; + ОписаниеГруппыРодителя.Ссылка = ОписаниеЭлемента.Ссылка; + ЗаполнитьГруппыРодителя(ОписаниеЭлемента.Ссылка, ОписаниеЭлемента.Ссылка, ТаблицаЭлементов, ТаблицаГруппРодителей); + КонецЦикла; + + Возврат ТаблицаГруппРодителей; + +КонецФункции + +// Обновляет состав пользователей группы пользователей с учетом иерархии +// в регистре сведений "Состав групп пользователей". +// Данные регистра используются в форме списка и формы выбора пользователей. +// Данные регистра могут быть использованы для повышения производительности запросов, +// т.к. не требуется работать с иерархией. +// +// Параметры: +// ГруппаПользователей - СправочникСсылка.ГруппыПользователей. // Процедура ОбновитьСоставыГруппПользователей(Знач ГруппаПользователей) Экспорт @@ -1097,116 +1860,30 @@ КонецПроцедуры -// Функция ТаблицаГруппРодителей используется в процедурах ОбновитьСоставыГруппПользователей, -// ОбновитьСоставГруппВнешнихПользователей. -// -Функция ТаблицаГруппРодителей(Таблица) Экспорт - - // Подготовка состава групп родителей. - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ГруппыТаблицы.Ссылка, - | ГруппыТаблицы.Родитель - |ИЗ - | " + Таблица + " КАК ГруппыТаблицы"); - ТаблицаЭлементов = Запрос.Выполнить().Выгрузить(); - ТаблицаЭлементов.Индексы.Добавить("Родитель"); - ТаблицаГруппРодителей = ТаблицаЭлементов.Скопировать(Новый Массив); - - Для каждого ОписаниеЭлемента Из ТаблицаЭлементов Цикл - ОписаниеГруппыРодителя = ТаблицаГруппРодителей.Добавить(); - ОписаниеГруппыРодителя.Родитель = ОписаниеЭлемента.Ссылка; - ОписаниеГруппыРодителя.Ссылка = ОписаниеЭлемента.Ссылка; - ЗаполнитьГруппыРодителя(ОписаниеЭлемента.Ссылка, ОписаниеЭлемента.Ссылка, ТаблицаЭлементов, ТаблицаГруппРодителей); - КонецЦикла; - - Возврат ТаблицаГруппРодителей; - -КонецФункции - -Процедура ЗаполнитьГруппыРодителя(Знач Родитель, Знач ТекущийРодитель, Знач ТаблицаЭлементов, Знач ТаблицаРодителей) - - ОписанияГруппРодителя = ТаблицаЭлементов.НайтиСтроки(Новый Структура("Родитель", ТекущийРодитель)); - Для каждого ОписаниеГруппы Из ОписанияГруппРодителя Цикл - ОписаниеГруппыРодителя = ТаблицаРодителей.Добавить(); - ОписаниеГруппыРодителя.Родитель = Родитель; - ОписаниеГруппыРодителя.Ссылка = ОписаниеГруппы.Ссылка; - ЗаполнитьГруппыРодителя(Родитель, ОписаниеГруппы.Ссылка, ТаблицаЭлементов, ТаблицаРодителей); - КонецЦикла; - -КонецПроцедуры - -// Процедура вызывается при начале работы системы -// чтобы проверить возможность выполнения авторизации -// и вызвать заполнение значений параметров сеанса -// ТекущийПользователь и ВнешнийПользователь -// -// Возвращаемое значение: -// Строка - если не пустая строка, значит ошибка авторизации, следует завершить работу 1С:Предприятия -// -Функция ОшибкаАвторизации() Экспорт +// Только для внутреннего использования +Функция ПолучитьСохраняемоеЗначениеПароляПоПаролю(Знач Пароль) Экспорт УстановитьПривилегированныйРежим(Истина); - Если ПустаяСтрока(ПользователиИнформационнойБазы.ТекущийПользователь().Имя) - ИЛИ ПользовательПоИдентификаторуСуществует(ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор) Тогда - // Авторизуется пользователь по умолчанию - // или пользовательИБ найден в справочнике - Возврат ""; - КонецЕсли; + НачатьТранзакцию(); + ВременныйПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + ВременныйПользовательИБ.АутентификацияСтандартная = Истина; + ВременныйПользовательИБ.Имя = Новый УникальныйИдентификатор; + ВременныйПользовательИБ.Пароль = Пароль; + ВременныйПользовательИБ.Записать(); - // Требуется, либо создать администратора, либо сообщить об отказе авторизации + ВременныйПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ВременныйПользовательИБ.УникальныйИдентификатор); - ТекстСообщенияОбОшибке = ""; - ТребуетсяСоздатьАдминистратора = Ложь; + СохраняемоеЗначениеПароля = ВременныйПользовательИБ.СохраняемоеЗначениеПароля; + ОтменитьТранзакцию(); - ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); - - Если ПользователиИБ.Количество() = 1 - ИЛИ ПравоДоступа("Администрирование", Метаданные, ПользователиИнформационнойБазы.ТекущийПользователь()) Тогда - // Авторизуется администратор, созданный в конфигураторе - ТребуетсяСоздатьАдминистратора = Истина; - Иначе - // Авторизуется обычный пользователь, созданный в конфигураторе - ТекстСообщенияОбОшибке = ТекстСообщенияПользовательНеНайденВСправочнике(ПользователиИнформационнойБазы.ТекущийПользователь().Имя); - КонецЕсли; - - Если ТребуетсяСоздатьАдминистратора Тогда - // - Если РольДоступна("ПолныеПрава") Тогда - // - Пользователь = СоздатьПервогоАдминистратора(ПользователиИнформационнойБазы.ТекущийПользователь()); - // - Комментарий = НСтр("ru = 'Обнаружено, что пользователь информационной базы - |с ролью ""Полные права"" был создан в Конфигураторе: - | - |- пользователь не найден в справочнике Пользователи, - |- пользователь зарегистрирован в справочнике Пользователи. - | - |Пользователей информационной базы следует создавать в режиме 1С:Предприятия.'"); - ПользователиПереопределяемый.ПослеЗаписиАдминистратораПриАвторизации(Комментарий); - ЗаписьЖурналаРегистрации( - "Пользователи.Администратор зарегистрирован в справочнике Пользователи", - УровеньЖурналаРегистрации.Предупреждение, - Метаданные.Справочники.Пользователи, - Пользователь, - Комментарий); - Иначе - ТекстСообщенияОбОшибке = НСтр("ru = 'Обнаружено, что пользователь информационной базы - |с правом Администрирование был создан в Конфигураторе. - | - |Для входа администратору требуется роль ""Полные права"". - | - |Пользователей информационной базы следует создавать в режиме 1С:Предприятия. - | - |Работа системы будет завершена.'"); - КонецЕсли; - КонецЕсли; - - Возврат ТекстСообщенияОбОшибке; + Возврат СохраняемоеЗначениеПароля; КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + Функция ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя) Если ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда @@ -1230,39 +1907,17 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры-обработчики обновления данных подсистемы - -// Добавляет в список Обработчики процедуры-обработчики обновления, -// необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт +Процедура ЗаполнитьГруппыРодителя(Знач Родитель, Знач ТекущийРодитель, Знач ТаблицаЭлементов, Знач ТаблицаРодителей) - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.5.2"; - Обработчик.Процедура = "Пользователи.ЗаполнитьИдентификаторыПользователей"; + ОписанияГруппРодителя = ТаблицаЭлементов.НайтиСтроки(Новый Структура("Родитель", ТекущийРодитель)); + Для каждого ОписаниеГруппы Из ОписанияГруппРодителя Цикл + ОписаниеГруппыРодителя = ТаблицаРодителей.Добавить(); + ОписаниеГруппыРодителя.Родитель = Родитель; + ОписаниеГруппыРодителя.Ссылка = ОписаниеГруппы.Ссылка; + ЗаполнитьГруппыРодителя(Родитель, ОписаниеГруппы.Ссылка, ТаблицаЭлементов, ТаблицаРодителей); + КонецЦикла; - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.5.15"; - Обработчик.Процедура = "Пользователи.ЗаполнениеРегистраСоставыГруппПользователей"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.6.5"; - Обработчик.Процедура = "ВнешниеПользователи.ЗаполнитьСоставГруппВнешнихПользователей"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.6.5"; - Обработчик.Процедура = "ВнешниеПользователи.ДляВнешнихПользователейСоздатьПользователейИБ"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.2.3.2"; - Обработчик.Процедура = "Пользователи.ДобавитьРольАдминистраторСистемы"; - -КонецПроцедуры +КонецПроцедуры Функция СсылкаПользователяПоПолномуНаименованию(ПолноеИмя) @@ -1295,6 +1950,9 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы + // Процедура вызывается при обновлении конфигурации на версию 1.0.5.2 // Выполняет попытку сопоставления / заполнения реквизита "ИдентификаторПользователяИБ" // для каждого элемента справочника Пользователи. @@ -1303,14 +1961,19 @@ УстановитьПривилегированныйРежим(Истина); + НайтиНеоднозначныхПользователейИБ(); + СписокПользователей = Справочники.Пользователи.Выбрать(); ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + СвойстваНеуказанногоПользователя = СвойстваНеуказанногоПользователя(); Пока СписокПользователей.Следующий() Цикл Пользователь = СписокПользователей.Ссылка; - Если Не ЗначениеЗаполнено(Пользователь.ИдентификаторПользователяИБ) - И НРег(СокрЛП(Пользователь.Наименование)) <> НРег(ПолноеИмяНеУказанногоПользователя()) Тогда + + Если НЕ ЗначениеЗаполнено(Пользователь.ИдентификаторПользователяИБ) + И Пользователь <> СвойстваНеуказанногоПользователя.Ссылка Тогда + ПолноеИмяПользователя = СокрЛП(Пользователь.Наименование); Для Каждого ПользовательИБ Из ПользователиИБ Цикл Если ПолноеИмяПользователя = СокрЛП(Лев(ПользовательИБ.ПолноеИмя, Метаданные.Справочники.Пользователи.ДлинаНаименования)) @@ -1343,28 +2006,3 @@ КонецЦикла; КонецПроцедуры - -// Процедура вызывается при обновлении конфигурации на версию 1.2.3.2 -// Добавляет всем пользователям с ролью ПолныеПрава роль администратора -// системы. -// -Процедура ДобавитьРольАдминистраторСистемы() Экспорт - - Если ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Для каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл - Если ПользовательИБ.Роли.Содержит(ПользователиПереопределяемый.РольАдминистратораСистемы()) - ИЛИ НЕ ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда - - Продолжить; - КонецЕсли; - - ПользовательИБ.Роли.Добавить(ПользователиПереопределяемый.РольАдминистратораСистемы()); - ПользовательИБ.Записать(); - КонецЦикла; - -КонецПроцедуры diff --git a/SSL/src/CommonModules/ПользователиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ПользователиВМоделиСервиса/Module.bsl new file mode 100644 index 000000000..608222771 --- /dev/null +++ b/SSL/src/CommonModules/ПользователиВМоделиСервиса/Module.bsl @@ -0,0 +1,324 @@ +/////////////////////////////////////////////////////////////////////////////////// +// ПользователиВМоделиСервиса: Работа с пользователями в модели сервиса. +// +/////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Проверяет содержится ли пользователь ИБ с заданным идентификатором +// в списке неразделенных пользователей. +// +// Параметры: +// ИдентификаторПользователяИБ - УникальныйИдентификатор - идентификатор +// пользователя ИБ принадлежность которого к неразделенным пользователям +// требуется проверить. +// +Функция ЭтоНеразделенныйПользовательИБ(Знач ИдентификаторПользователяИБ) Экспорт + + Если НЕ ЗначениеЗаполнено(ИдентификаторПользователяИБ) Тогда + Возврат Ложь; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ИДНеразделенныхПользователей.ИдентификаторПользователяИБ + |ИЗ + | РегистрСведений.НеразделенныеПользователи КАК ИДНеразделенныхПользователей + |ГДЕ + | ИДНеразделенныхПользователей.ИдентификаторПользователяИБ = &ИдентификаторПользователяИБ"; + Запрос.УстановитьПараметр("ИдентификаторПользователяИБ", ИдентификаторПользователяИБ); + Результат = Запрос.Выполнить(); + + Возврат НЕ Результат.Пустой(); + +КонецФункции + +// При работе в модели сервиса, заносит текущего пользователя в список неразделенных, +// если у него не установлено использование разделителей. +// +Процедура ЗарегистрироватьНеразделенногоПользователя() Экспорт + + Если НЕ ПустаяСтрока(ПользователиИнформационнойБазы.ТекущийПользователь().Имя) + И ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ПользователиИнформационнойБазы.ТекущийПользователь().РазделениеДанных.Количество() = 0 Тогда + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НеразделенныеПользователи"); + ЭлементБлокировки.УстановитьЗначение("ИдентификаторПользователяИБ", + ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); + Блокировка.Заблокировать(); + + МенеджерЗаписи = РегистрыСведений.НеразделенныеПользователи.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ИдентификаторПользователяИБ = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор; + МенеджерЗаписи.Прочитать(); + Если НЕ МенеджерЗаписи.Выбран() Тогда + МенеджерЗаписи.ИдентификаторПользователяИБ = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор; + МенеджерЗаписи.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Регистрация неразделенного пользователя'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры + +// Возвращает флаг доступности действий изменения пользователей. +// +// Возвращаемое значение: +// Булево - Истина, если изменение пользователей доступно, иначе Ложь. +// +Функция ДоступноИзменениеПользователей() Экспорт + + Возврат Константы.РежимИспользованияИнформационнойБазы.Получить() + <> Перечисления.РежимыИспользованияИнформационнойБазы.Демонстрационный; + +КонецФункции + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.0.1.14"; + Обработчик.Процедура = "ПользователиВМоделиСервиса.ЗаменитьУдалитьПолныеПраваОбластиДанныхНаПолныеПрава"; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция ПолучитьКодЯзыкаПоИмени(Знач ИмяЯзыка) + + Если ПустаяСтрока(ИмяЯзыка) Тогда + Возврат ""; + Иначе + Возврат Метаданные.Языки[ИмяЯзыка].КодЯзыка; + КонецЕсли; + +КонецФункции + +// Только для внутреннего использования +Процедура ПередЗаписьюПользователя(ПользовательОбъект) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + УстановитьПривилегированныйРежим(Истина); + // Кэш должен быть заполнен до записи пользователя ИБ + РаботаВМоделиСервиса.ПолучитьПроксиМенеджераСервиса(); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования +Процедура ПриЗаписиПользователя(ПользовательОбъект, ОписаниеПользователя, ПользовательСуществует, ДоступРазрешен, СоздатьПользователяСервиса) Экспорт + + Имя = ОписаниеПользователя.Имя; + ПолноеИмя = ОписаниеПользователя.ПолноеИмя; + Язык = ОписаниеПользователя.Язык; + + Если СоздатьПользователяСервиса Тогда + + УстановитьПривилегированныйРежим(Истина); + + Прокси = РаботаВМоделиСервиса.ПолучитьПроксиМенеджераСервиса(); + + ТекущаяОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ПользовательОбъект.ИдентификаторПользователяИБ); + + СохраняемоеЗначениеПароля = ПользовательИБ.СохраняемоеЗначениеПароля; + + УстановитьПривилегированныйРежим(Ложь); + + СообщениеОбОшибке = ""; + + ТипИнформацииОПользователе = Прокси.ФабрикаXDTO.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageApplication", + "UserInfo"); + ИнформацияОПользователе = Прокси.ФабрикаXDTO.Создать(ТипИнформацииОПользователе); + ИнформацияОПользователе.Name = Имя; + ИнформацияОПользователе.FullName = ПолноеИмя; + ИнформацияОПользователе.StoredPasswordValue = СохраняемоеЗначениеПароля; + ИнформацияОПользователе.Language = ПолучитьКодЯзыкаПоИмени(Язык); + ИнформацияОПользователе.UserID = ПользовательОбъект.ИдентификаторПользователяСервиса; + + Результат = Прокси.CreateUser(ТекущаяОбластьДанных, ИнформацияОПользователе, СообщениеОбОшибке); + Если Результат <> Истина Тогда + ШаблонСообщения = НСтр("ru = 'Ошибка при создании пользователя сервиса: + |%1'"); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, СообщениеОбОшибке)); + КонецЕсли; + + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ЗначениеЗаполнено(ПользовательОбъект.ИдентификаторПользователяСервиса) Тогда + + // Нужно обновить информацию в сервисе + УстановитьПривилегированныйРежим(Истина); + Прокси = РаботаВМоделиСервиса.ПолучитьПроксиМенеджераСервиса(); + + ТекущаяОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + УстановитьПривилегированныйРежим(Ложь); + + СообщениеОбОшибке = ""; + СписокПользователей = Неопределено; + + Результат = Прокси.GetUserList(ТекущаяОбластьДанных, СписокПользователей, СообщениеОбОшибке); + + Если НЕ Результат Тогда + ШаблонСообщения = НСтр("ru = 'Ошибка при попытке получения списка пользователей сервиса: + |%1'"); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, СообщениеОбОшибке)); + КонецЕсли; + + ИнформацияОТекущемПользователе = Неопределено; + Для каждого ИнформацияОПользователе Из СписокПользователей.User Цикл + Если ПользовательОбъект.ИдентификаторПользователяСервиса = ИнформацияОПользователе.UserID Тогда + + ИнформацияОТекущемПользователе = ИнформацияОПользователе; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ИнформацияОТекущемПользователе = Неопределено Тогда + ШаблонСообщения = НСтр("ru = 'Пользователь с идентификатором %1 области данных %2 не найден в списке пользователей сервиса'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, + ПользовательОбъект.ИдентификаторПользователяСервиса, + ТекущаяОбластьДанных); + + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + Если ПользовательСуществует <> ДоступРазрешен Тогда + + Если ИнформацияОТекущемПользователе.HasAccess <> ДоступРазрешен Тогда + Если ДоступРазрешен Тогда + СообщениеОбОшибке = ""; + Результат = Прокси.GrantUserAccess(ПользовательОбъект.ИдентификаторПользователяСервиса, + ТекущаяОбластьДанных, "User", СообщениеОбОшибке); + + Если НЕ Результат Тогда + ШаблонСообщения = НСтр("ru = 'Ошибка при попытке предоставления доступа пользователю в сервис: + |%1'"); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, СообщениеОбОшибке)); + КонецЕсли; + Иначе + СообщениеОбОшибке = ""; + Результат = Прокси.DeleteUserAccess(ПользовательОбъект.ИдентификаторПользователяСервиса, + ТекущаяОбластьДанных, СообщениеОбОшибке); + + Если НЕ Результат Тогда + ШаблонСообщения = НСтр("ru = 'Ошибка при попытке снятия доступа пользователю в сервис: + |%1'"); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, СообщениеОбОшибке)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ДоступРазрешен Тогда + + ТипОписаниеПользователя = Прокси.ФабрикаXDTO.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ManageApplication", "UserInfo"); + ОписаниеПользователя = Прокси.ФабрикаXDTO.Создать(ТипОписаниеПользователя); + ОписаниеПользователя.Name = Имя; + ОписаниеПользователя.FullName = ПолноеИмя; + + УстановитьПривилегированныйРежим(Истина); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ПользовательОбъект.ИдентификаторПользователяИБ); + + ОписаниеПользователя.StoredPasswordValue = ПользовательИБ.СохраняемоеЗначениеПароля; + + УстановитьПривилегированныйРежим(Ложь); + + ОписаниеПользователя.Language = ПолучитьКодЯзыкаПоИмени(Язык); + + СообщениеОбОшибке = ""; + Результат = Прокси.SetUserInfo(ПользовательОбъект.ИдентификаторПользователяСервиса, ОписаниеПользователя, СообщениеОбОшибке); + + Если НЕ Результат Тогда + ШаблонСообщения = НСтр("ru = 'Ошибка при попытке синхронизации информации о пользователя с менеджером сервиса: + |%1'"); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, СообщениеОбОшибке)); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования +Процедура ОбработкаПолученияФормыПользователя(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + Если ВидФормы = "ФормаОбъекта" + И Параметры.Свойство("Ключ") И НЕ Параметры.Ключ.Пустая() Тогда + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | 1 + |ИЗ + | РегистрСведений.НеразделенныеПользователи КАК НеразделенныеПользователи + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи + | ПО НеразделенныеПользователи.ИдентификаторПользователяИБ = Пользователи.ИдентификаторПользователяИБ + | И (Пользователи.Ссылка = &Ссылка)"; + Запрос.УстановитьПараметр("Ссылка", Параметры.Ключ); + Если НЕ Запрос.Выполнить().Пустой() Тогда + СтандартнаяОбработка = Ложь; + ВыбраннаяФорма = Метаданные.ОбщиеФормы.ИнформацияНеразделенногоПользователя; + Возврат; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы + +// Процедура вызывается при обновлении конфигурации на версию 2.0.1.14 +// Добавляет всем пользователям с ролью УдалитьПолныеПраваОбластиДанных +// роль ПолныеПрава. +// +Процедура ЗаменитьУдалитьПолныеПраваОбластиДанныхНаПолныеПрава() Экспорт + + Если ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Для каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл + Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) + ИЛИ НЕ ПользовательИБ.Роли.Содержит(Метаданные.Роли.УдалитьПолныеПраваОбластиДанных) Тогда + + Продолжить; + КонецЕсли; + + ПользовательИБ.Роли.Добавить(Метаданные.Роли.ПолныеПрава); + ПользовательИБ.Роли.Удалить(Метаданные.Роли.УдалитьПолныеПраваОбластиДанных); + ПользовательИБ.Записать(); + КонецЦикла; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ПользователиВМоделиСервиса/ПользователиВМоделиСервиса.mdo b/SSL/src/CommonModules/ПользователиВМоделиСервиса/ПользователиВМоделиСервиса.mdo new file mode 100644 index 000000000..395194497 --- /dev/null +++ b/SSL/src/CommonModules/ПользователиВМоделиСервиса/ПользователиВМоделиСервиса.mdo @@ -0,0 +1,11 @@ + + + ПользователиВМоделиСервиса + + ru + Пользователи в модели сервиса + + true + true + true + diff --git a/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl index 2a6ce5316..9540d18e1 100644 --- a/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl @@ -1,30 +1,44 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Пользователи". +// +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Функция ЗапретРедактированияРолей используется для -// управления поведением подсистем Пользователи и ВнешниеПользователи, -// когда требуется переключится в режим автоустановки ролей пользователей ИБ, -// например, при встраивании подсистемы УправлениеДоступом. +// Отключает стандартный способ установки ролей пользователям ИБ. +// Если возвращает Истина, изменение ролей блокируется (в том числе для администратора). // // Возвращаемое значение: // Булево. // Функция ЗапретРедактированияРолей() Экспорт - // УправлениеДоступом + // СтандартныеПодсистемы.УправлениеДоступом // Роли устанавливаются автоматически по данным групп доступа // через связь: ПользователиГруппыДоступа -> Профиль -> РолиПрофиля Возврат Истина; - // Конец УправлениеДоступом + // Конец СтандартныеПодсистемы.УправлениеДоступом Возврат Ложь; КонецФункции -// Процедура ИзменитьДействияВФорме позволяет переопределить -// поведение форм пользователя, внешнего пользователя, группы внешних пользователей -// когда это требуется, например, при встараивании подсистемы "Управление доступом". +// Переопределяет роль, предоставляющую права администрирования системы. +// +// Параметры: +// Роль - ОбъектМетаданных: Роль. +// +Процедура ИзменитьРольАдминистратораСистемы(Роль) Экспорт + + + +КонецПроцедуры + +// Переопределяет поведение форм пользователя, внешнего пользователя, +// группы внешних пользователей. // // Параметры: // Ссылка - СправочникСсылка.Пользователи, @@ -43,15 +57,14 @@ // Процедура ИзменитьДействияВФорме(Знач Ссылка = Неопределено, Знач ДействияВФорме) Экспорт - // УправлениеДоступом + // СтандартныеПодсистемы.УправлениеДоступом ДействияВФорме.Роли = ""; - // Конец УправлениеДоступом + // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры -// Обработчик события ПриЗаписи пользователя информационной базы -// вызывается из процедуры ЗаписатьПользователяИБ(), если пользователь -// был действительно записан. +// Доопределяет действия при записи пользователя информационной базы. +// Вызывается из процедуры ЗаписатьПользователяИБ(), если пользователь был действительно изменен. // // Параметры: // СтарыеСвойства - Структура, см. параметры возвращаемые функцией Пользователи.ПрочитатьПользователяИБ() @@ -59,20 +72,19 @@ // Процедура ПриЗаписиПользователяИнформационнойБазы(Знач СтарыеСвойства, Знач НовыеСвойства) Экспорт - // ФайловыеФункции + // СтандартныеПодсистемы.ФайловыеФункции Если ЗначениеЗаполнено(СтарыеСвойства.ПользовательИнфБазыИмя) И ВРег(СтарыеСвойства.ПользовательИнфБазыИмя) <> ВРег(НовыеСвойства.ПользовательИнфБазыИмя) Тогда ФайловыеФункции.ПеренестиНастройкиПриСменеИмениПользователя( СтарыеСвойства.ПользовательИнфБазыИмя, НовыеСвойства.ПользовательИнфБазыИмя); КонецЕсли; - // Конец ФайловыеФункции + // Конец СтандартныеПодсистемы.ФайловыеФункции КонецПроцедуры -// Обработчик события ПослеУдаления пользователя информационной базы -// вызывается из процедуры УдалитьПользователяИБ(), если пользователь -// был действительно удален. +// Доопределяет действия после удаления пользователя информационной базы. +// Вызывается из процедуры УдалитьПользователяИБ(), если пользователь был удален. // // Параметры: // СтарыеСвойства - Структура, см. параметры возвращаемые функцией Пользователи.ПрочитатьПользователяИБ() @@ -83,52 +95,35 @@ КонецПроцедуры -// Возвращает роль предоставляющую права администрироваия системы. -// -// Возвращаемое значение: -// Метаданные.Роль -Функция РольАдминистратораСистемы() Экспорт - - Если СтандартныеПодсистемыПереопределяемый.ЭтоБазоваяВерсияКонфигурации() Тогда - Возврат Метаданные.Роли.ПолныеПрава; - Иначе - Возврат Метаданные.Роли.АдминистраторСистемы; - КонецЕсли; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Обработчики записи первого администратора -// Обработчик события ТекстВопросаПередЗаписьюПервогоАдминистратора вызывается -// из формы пользователя в обработчике перед записью, -// чтобы изменить текст вопроса пользователю, -// например, для подсистемы УправлениеДоступом. -// Вызов происходит, если установлен ЗапретРедактированияРолей -// и количество пользователей информационной базы равно нулю. +// Переопределяет текст вопроса перед записью первого администратора. +// Вызывается из обработчика ПередЗаписью формы пользователя. +// Вызов выполняется если установлен ЗапретРедактированияРолей() и +// количество пользователей информационной базы равно нулю. // Процедура ТекстВопросаПередЗаписьюПервогоАдминистратора(ТекстВопроса) Экспорт - // УправлениеДоступом - ТекстВопроса = НСтр("ru = 'Первый пользователь информационной базы должен иметь полные права. - |Пользователь будет добавлен в группу доступа Администраторы. Продолжить?'") - // Конец УправлениеДоступом + // СтандартныеПодсистемы.УправлениеДоступом + ТекстВопроса = НСтр("ru = 'В список пользователей программы добавляется первый пользователь, + |поэтому он будет автоматически включен в группу доступа Администраторы. + |Продолжить?'") + // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры -// Обработчик события ПриЗаписиПервогоАдминистратора вызывается -// из формы пользователя в обработчике ПриЗаписиНаСервере, -// из функции Пользователи.ОшибкаАвторизации() при авторизации администратора, -// когда нет ни одного администратора зарегистрированного в справочнике Пользователи -// Это нужно, например, для подсистемы УправлениеДоступом, -// чтобы добавить первого администратора в группу доступа Администраторы +// Доопределяет действия при записи администратора. +// Вызывается при записи администратора в процедуре авторизации, +// обычно при записи первого администратора, но также и при связывании +// пользователя ИБ с элементом справочника пользователи. // // Параметры: -// Пользователь - СправочникСсылка.Пользователи (изменение объекта запрещено) +// Пользователь - СправочникСсылка.Пользователи (изменение объекта запрещено). // Процедура ПриЗаписиПервогоАдминистратора(Пользователь) Экспорт - // УправлениеДоступом + // СтандартныеПодсистемы.УправлениеДоступом // Первый администратор автоматически добавляется в группу доступа Администраторы Объект = Справочники.ГруппыДоступа.Администраторы.ПолучитьОбъект(); @@ -138,23 +133,21 @@ Объект.Записать(); КонецЕсли; - // Конец УправлениеДоступом + // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры -// Обработчик события ПослеЗаписиАдминистратораПриАвторизации вызывается -// из функции Пользователи.ОшибкаАвторизации() при авторизации администратора, -// когда администратор не зарегистрированн в справочнике Пользователи -// Обработчик нужен, например, для подсистемы УправлениеДоступом, -// чтобы сообщить, что первый администратор добавлен в группу доступа Администраторы +// Переопределяет текст комментария при авторизации пользователя ИБ, +// созданного в конфигураторе с административными правами. +// Вызывается из Пользователи.АвторизоватьТекущегоПользователя(). +// Комментарий записывается в журнал регистрации. // // Параметры: -// Комментарий - Строка - начальное значение задано, можно переустановить, -// комментарий записывается в журнал регистрации. +// Комментарий - Строка - начальное значение задано. // Процедура ПослеЗаписиАдминистратораПриАвторизации(Комментарий) Экспорт - // УправлениеДоступом + // СтандартныеПодсистемы.УправлениеДоступом Комментарий = НСтр("ru = 'Обнаружено, что пользователь информационной базы |с ролью ""Полные права"" был создан в Конфигураторе: | @@ -163,7 +156,23 @@ |- пользователь добавлен в группу доступа Администраторы. | |Пользователей информационной базы следует создавать в режиме 1С:Предприятия.'"); - // Конец УправлениеДоступом + // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Работа в модели сервиса + +// Устанавливает пользователю права по умолчанию. +// Вызывается при работе в модели сервиса, в случае обновления в менеджере +// сервиса прав пользователя без прав администрирования. +// +// Параметры: +// Пользователь - СправочникСсылка.Пользователи - пользователь, которому +// требуется установить права по умолчанию +// +Процедура УстановитьПраваПоУмолчанию(Пользователь) Экспорт + + + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ПользователиСерверПовтИсп/Module.bsl b/SSL/src/CommonModules/ПользователиСерверПовтИсп/Module.bsl index 2cf6524ec..43ed9491d 100644 --- a/SSL/src/CommonModules/ПользователиСерверПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСерверПовтИсп/Module.bsl @@ -1,14 +1,18 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Пользователи". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Функция ВсеРоли() возвращает таблицу значений имен всех ролей конфигурации. +// Возвращает таблицу значений имен всех ролей конфигурации. // // Параметры: // // Возвращаемое значение: -// ТаблицаЗначений -// Имя - Строка. +// ТаблицаЗначений с колонками: +// Имя - Строка. // Функция ВсеРоли() Экспорт @@ -23,14 +27,13 @@ КонецФункции -// Функция СинонимыРолей возвращает таблицу значений -// с колонками Роль и РольСиноним, которая формируется -// из метаданных +// Возвращает таблицу значений с колонками Роль и РольСиноним, +// которая формируется из метаданных. // // Возвращаемое значение: -// ТаблицаЗначений. -// Роль - Строка(150) -// СинонимРоли - Строка(1000) +// ТаблицаЗначений с колонками: +// Роль - Строка(150), +// СинонимРоли - Строка(1000). // Функция СинонимыРолей() Экспорт @@ -50,33 +53,48 @@ КонецФункции -// Функция ДеревоРолей возвращает дерево -// ролей с/без подсистем -// Если роль не принадлежит ни одной подсистеме -// она добавляется "в корень" +// Возвращает дерево ролей с подсистемами или без них. +// Если роль не принадлежит ни одной подсистеме она добавляется "в корень". // // Параметры: -// ПоПодсистемам - Булево, если ложь, все роли добавляются в "корень" +// ПоПодсистемам - Булево, если Ложь, все роли добавляются в "корень". // // Возвращаемое значение: -// ДеревоЗначений -// ЭтоРоль - Булево -// Имя - Строка - имя роли или подсистемы -// Синоним - Строка - синоним роли или подсистемы +// ДеревоЗначений с колонками: +// ЭтоРоль - Булево +// Имя - Строка - имя роли или подсистемы +// Синоним - Строка - синоним роли или подсистемы // -Функция ДеревоРолей(ПоПодсистемам = Истина) Экспорт +Функция ДеревоРолей(ПоПодсистемам = Истина, Знач ТипПользователя = Неопределено) Экспорт + + Если ТипПользователя = Неопределено Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ТипПользователя = Перечисления.ТипыПользователей.ПользовательОбластиДанных; + Иначе + ТипПользователя = Перечисления.ТипыПользователей.ПользовательЛокальногоРешения; + КонецЕсли; + КонецЕсли; Дерево = Новый ДеревоЗначений; - Дерево.Колонки.Добавить("ЭтоРоль", Новый ОписаниеТипов("Булево")); - Дерево.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); - Дерево.Колонки.Добавить("Синоним", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(1000))); + Дерево.Колонки.Добавить("ЭтоРоль", Новый ОписаниеТипов("Булево")); + Дерево.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); + Дерево.Колонки.Добавить("Синоним", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(1000))); Если ПоПодсистемам Тогда - ЗаполнитьПодсистемыИРоли(Дерево.Строки); + ЗаполнитьПодсистемыИРоли(Дерево.Строки, , ТипПользователя); КонецЕсли; + НедоступныеРоли = ПользователиСерверПовтИсп.НедоступныеРолиПоТипуПользователя(ТипПользователя); + // Добавление ненайденных ролей Для каждого Роль Из Метаданные.Роли Цикл + + Если НедоступныеРоли.Получить(Роль) <> Неопределено + ИЛИ ВРег(Лев(Роль.Имя, СтрДлина("Удалить"))) = ВРег("Удалить") Тогда + + Продолжить; + КонецЕсли; + Если Дерево.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, Роль.Имя), Истина).Количество() = 0 Тогда СтрокаДерева = Дерево.Строки.Добавить(); СтрокаДерева.ЭтоРоль = Истина; @@ -91,10 +109,168 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры модуля +Функция НедоступныеПраваПоТипуПользователя(Знач ТипПользователя) Экспорт + + Если ТипПользователя = Перечисления.ТипыПользователей.ВнешнийПользователь Тогда + Результат = Новый Массив; + Результат.Добавить("Администрирование"); + Результат.Добавить("АдминистрированиеДанных"); + ИначеЕсли ТипПользователя = Перечисления.ТипыПользователей.ПользовательЛокальногоРешения Тогда + Результат = Новый Массив; + ИначеЕсли ТипПользователя = Перечисления.ТипыПользователей.ПользовательОбластиДанных Тогда + Результат = Новый Массив; + Результат.Добавить("Администрирование"); + Результат.Добавить("ОбновлениеКонфигурацииБазыДанных"); + Результат.Добавить("МонопольныйРежим"); + Результат.Добавить("ТолстыйКлиент"); + Результат.Добавить("ВнешнееСоединение"); + Результат.Добавить("Automation"); + Результат.Добавить("ИнтерактивноеОткрытиеВнешнихОбработок"); + Результат.Добавить("ИнтерактивноеОткрытиеВнешнихОтчетов"); + Результат.Добавить("РежимВсеФункции"); + Иначе + ШаблонСсобщения = НСтр("ru = 'Неизвестный тип пользователя %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСсобщения, ТипПользователя); + ВызватьИсключение(Сообщение); + КонецЕсли; + + Возврат Результат; + +КонецФункции -Процедура ЗаполнитьПодсистемыИРоли(КоллекцияСтрокДерева, Подсистемы = Неопределено) +Функция РазрешеноИзменениеОбщихДанных(Знач ТипПользователя) Экспорт + + Если ТипПользователя = Перечисления.ТипыПользователей.ВнешнийПользователь Тогда + Возврат Истина; + ИначеЕсли ТипПользователя = Перечисления.ТипыПользователей.ПользовательЛокальногоРешения Тогда + Возврат Истина; + ИначеЕсли ТипПользователя = Перечисления.ТипыПользователей.ПользовательОбластиДанных Тогда + Возврат Ложь; + Иначе + ШаблонСсобщения = НСтр("ru = 'Неизвестный тип пользователя %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСсобщения, ТипПользователя); + ВызватьИсключение(Сообщение); + КонецЕсли; + +КонецФункции + +Функция ДоступноИзменениеОбщихДанных(Знач ИмяРоли) Экспорт + + Возврат ПользователиСерверПовтИсп.ОбщиеДанныеДоступныеДляИзменения(ИмяРоли).Количество() > 0; + +КонецФункции + +// Возвращает таблицу полных имен неразделенных объектов метаданных и +// соответствующих им наборов прав доступа. +// +// Параметры: +// ИмяРоли - Строка. +// +// Возвращаемое значение: +// ТаблицаЗначений с колонками: +// Имя - Строка - Полное имя объекта метаданных. +// Право - Строка - Имя права доступа. +// +Функция ОбщиеДанныеДоступныеДляИзменения(Знач ИмяРоли) Экспорт + + Роль = Метаданные.Роли[ИмяРоли]; + + ВидыМетаданных = Новый Массив; + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.ПланыОбмена, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.Константы, Ложь)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.Справочники, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.Последовательности, Ложь)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.Документы, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.ПланыВидовХарактеристик, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.ПланыСчетов, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.ПланыВидовРасчета, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.БизнесПроцессы, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.Задачи, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.РегистрыСведений, Ложь)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.РегистрыНакопления, Ложь)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.РегистрыБухгалтерии, Ложь)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.РегистрыРасчета, Ложь)); + + УстановитьПривилегированныйРежим(Истина); + + ТаблицаОбъектов = Новый ТаблицаЗначений; + ТаблицаОбъектов.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная))); + ТаблицаОбъектов.Колонки.Добавить("Право", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная))); + + ПроверяемыеПрава = Новый Массив; + ПроверяемыеПрава.Добавить(Новый Структура("Имя, Ссылочное", "Изменение", Ложь)); + ПроверяемыеПрава.Добавить(Новый Структура("Имя, Ссылочное", "Добавление", Истина)); + ПроверяемыеПрава.Добавить(Новый Структура("Имя, Ссылочное", "Удаление", Истина)); + + РазделенныеОбъектыМетаданных = ОбщегоНазначенияПовтИсп.РазделенныеОбъектыМетаданных(); + + Для Каждого ОписаниеВида Из ВидыМетаданных Цикл // По видам метаданных + Для Каждого ОбъектМетаданных Из ОписаниеВида.Вид Цикл // По объектам вида + ПолноеИмяОбъектаМетаданных = ОбъектМетаданных.ПолноеИмя(); + Если РазделенныеОбъектыМетаданных.Получить(ПолноеИмяОбъектаМетаданных) = Неопределено Тогда + + Для каждого ОписаниеПрава Из ПроверяемыеПрава Цикл + Если НЕ ОписаниеПрава.Ссылочное + ИЛИ ОписаниеВида.Ссылочный Тогда + + Если ПравоДоступа(ОписаниеПрава.Имя, ОбъектМетаданных, Роль) Тогда + СтрокаПрава = ТаблицаОбъектов.Добавить(); + СтрокаПрава.Имя = ПолноеИмяОбъектаМетаданных; + СтрокаПрава.Право = ОписаниеПрава.Имя; + КонецЕсли; + + КонецЕсли; + КонецЦикла; + + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат ТаблицаОбъектов; + +КонецФункции + +Функция НедоступныеРолиПоТипуПользователя(Знач ТипПользователя) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Результат = Новый Соответствие; + + НедоступныеПрава = НедоступныеПраваПоТипуПользователя(ТипПользователя); + + ПроверятьОбщиеДанные = НЕ РазрешеноИзменениеОбщихДанных(ТипПользователя); + + Для каждого Роль Из Метаданные.Роли Цикл + НайденыНедоступныеПрава = Ложь; + Для каждого Право Из НедоступныеПрава Цикл + Если ПравоДоступа(Право, Метаданные, Роль) Тогда + НайденыНедоступныеПрава = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ПроверятьОбщиеДанные + И НЕ НайденыНедоступныеПрава Тогда + + НайденыНедоступныеПрава = ДоступноИзменениеОбщихДанных(Роль.Имя); + КонецЕсли; + + Если НайденыНедоступныеПрава Тогда + Результат.Вставить(Роль, Истина); + КонецЕсли; + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(Результат); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +Процедура ЗаполнитьПодсистемыИРоли(КоллекцияСтрокДерева, Подсистемы = Неопределено, ТипПользователя) + + НедоступныеРоли = + ПользователиСерверПовтИсп.НедоступныеРолиПоТипуПользователя(ТипПользователя); Если Подсистемы = Неопределено Тогда Подсистемы = Метаданные.Подсистемы; @@ -106,9 +282,15 @@ ОписаниеПодсистемы.Имя = Подсистема.Имя; ОписаниеПодсистемы.Синоним = ?(ЗначениеЗаполнено(Подсистема.Синоним), Подсистема.Синоним, Подсистема.Имя); - ЗаполнитьПодсистемыИРоли(ОписаниеПодсистемы.Строки, Подсистема.Подсистемы); + ЗаполнитьПодсистемыИРоли(ОписаниеПодсистемы.Строки, Подсистема.Подсистемы, ТипПользователя); Для каждого Роль Из Метаданные.Роли Цикл + Если НедоступныеРоли.Получить(Роль) <> Неопределено + ИЛИ ВРег(Лев(Роль.Имя, СтрДлина("Удалить"))) = ВРег("Удалить") Тогда + + Продолжить; + КонецЕсли; + Если Подсистема.Состав.Содержит(Роль) Тогда ОписаниеРоли = ОписаниеПодсистемы.Строки.Добавить(); ОписаниеРоли.ЭтоРоль = Истина; @@ -123,3 +305,4 @@ КонецЦикла; КонецПроцедуры + diff --git a/SSL/src/CommonModules/ПользователиСобытия/Module.bsl b/SSL/src/CommonModules/ПользователиСобытия/Module.bsl index 0d31b8e91..88352942d 100644 --- a/SSL/src/CommonModules/ПользователиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСобытия/Module.bsl @@ -1,3 +1,10 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Пользователи". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС //////////////////////////////////////////////////////////////////////////////// // Процедуры используемые при обмене данными @@ -33,15 +40,18 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ПОДПИСОК НА СОБЫТИЯ -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Обработчик ОбновитьПредставлениеВнешнегоПользователя события ПриЗаписи подписки на события -// "ОбновитьПредставлениеВнешнегоПользователя" вызывает метод записи представления внешнего пользователя. -// Тип СправочникСсылка.ВнешниеПользователи используется для целей поставки непустого списка типов в -// подписке на событие. -// В состав подписки следует включить типы объектов авторизации, -// например, Справочник.ФизическиеЛица, Справочник.Контрагенты +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события + +// Обработчик подписки ОбновитьПредставлениеВнешнегоПользователя на событие ПриЗаписи +// вызывает обновление представления внешнего пользователя при изменении +// представления его объекта авторизации. +// +// В состав подписки следует включить типы объектов авторизации: +// Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип. +// Например: Справочник.ФизическиеЛица, Справочник.Контрагенты // Процедура ОбновитьПредставлениеВнешнегоПользователя(Знач Объект, Отказ) Экспорт diff --git a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl new file mode 100644 index 000000000..18fac45f8 --- /dev/null +++ b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl @@ -0,0 +1,1682 @@ +/////////////////////////////////////////////////////////////////////////////////// +// ПоставляемыеДанные: Механизм сервиса поставляемых данных. +// +/////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Функция возвращает прокси web-сервиса для обновления общих поставляемых данных +// +// Возвращаемое значение: +// WSПрокси. +// Прокси сервиса поставляемых данных. +// +Функция ПолучитьПроксиСервисаПоставляемыхДанных() Экспорт + + АдресСервисаПоставляемыхДанных = Константы.АдресСервисаПоставляемыхДанных.Получить(); + Если Не ЗначениеЗаполнено(АдресСервисаПоставляемыхДанных) Тогда + ВызватьИсключение(НСтр("ru = 'Не установлены параметры связи с сервисом поставляемых данных.'")); + КонецЕсли; + + АдресСервиса = АдресСервисаПоставляемыхДанных + "/ws/SuppliedData?wsdl"; + + ИмяПользователя = Константы.ИмяСлужебногоПользователяСервисаПоставляемыхДанных.Получить(); + ПарольПользователя = Константы.ПарольСлужебногоПользователяСервисаПоставляемыхДанных.Получить(); + + Прокси = ОбщегоНазначенияПовтИсп.ПолучитьWSПрокси(АдресСервиса, "http://www.1c.ru/supplieddata", + "SuppliedData", , ИмяПользователя, ПарольПользователя); + + Возврат Прокси; + +КонецФункции + +// Процедура регламетного задания обновляет общие данные из сервиса поставляемых данных +// +Процедура ОбновлениеОбщихПоставляемыхДанных() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Прокси = ПолучитьПроксиСервисаПоставляемыхДанных(); + + FilterТип = Прокси.ФабрикаXDTO.Тип("http://www.1c.ru/supplieddata", "Filter"); + Filter = Прокси.ФабрикаXDTO.Создать(FilterТип); + + FilterItemТип = Прокси.ФабрикаXDTO.Тип("http://www.1c.ru/supplieddata", "FilterItem"); + + ТаблицаСоответствия = ОбщегоНазначения.ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(); + Для Каждого Строка Из ТаблицаСоответствия Цикл + Версия = ПолучитьВерсиюПоставляемыхДанных(Строка.ТипОбщихДанных); + + FilterItem = Прокси.ФабрикаXDTO.Создать(FilterItemТип); + FilterItem.Type = XMLСтрока(Строка.ВидПоставляемыхДанных); + FilterItem.Version = Версия; + Filter.FilterItem.Добавить(FilterItem); + + КонецЦикла; + + Results = Прокси.GetSuppliedData(Filter); + + НомерЗагрузки = Константы.НомерЗагрузкиПоставляемыхДанных.Получить() + 1; + + ЗагрузитьДанные(Results, НомерЗагрузки); + + Константы.НомерЗагрузкиПоставляемыхДанных.Установить(НомерЗагрузки); + + КонтрольОбновленияРазделенныхПоставляемыхДанных(); + +КонецПроцедуры + +// Процедура фонового задания обновляет разделенные данные из общих +// запускается из фоновых заданий +// +Процедура ОбновитьПоставляемыеДанные(ОбластьДанных, НомерСообщения) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + Ключ = РегистрыСведений.ОбластиДляОбновленияПоставляемыхДанных.СоздатьКлючЗаписи( + Новый Структура("ОбластьДанных, НомерСообщения", ОбластьДанных, НомерСообщения)); + + ЗаблокироватьДанныеДляРедактирования(Ключ); + + Для Каждого ЭлементСостава Из Метаданные.ПланыОбмена.ИзмененияПоставляемыхДанных.Состав Цикл + + ОбъектМД = ЭлементСостава.Метаданные; + + Если Метаданные.РегистрыСведений.Содержит(ОбъектМД) Тогда + ЭтоРегистрСведений = Истина; + ТипИсточника = Тип("РегистрСведенийКлючЗаписи." + ОбъектМД.Имя); + ТипПриемника = ПолучитьТипРазделенныхДанныхПоОбщему(ТипИсточника); + МДПриемника = Метаданные.НайтиПоТипу(ТипПриемника); + Менеджер = РегистрыСведений[МДПриемника.Имя]; + Иначе + ЭтоРегистрСведений = Ложь; + ТипИсточника = Тип("СправочникСсылка." + ОбъектМД.Имя); + ТипПриемника = ПолучитьТипРазделенныхДанныхПоОбщему(ТипИсточника); + МДПриемника = Метаданные.НайтиПоТипу(ТипПриемника); + Менеджер = Справочники[МДПриемника.Имя]; + КонецЕсли; + + ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения( + ПоставляемыеДанныеПовтИсп.ПолучитьУзелОбластиДанных(ОбластьДанных), 0, ОбъектМД); + + Пока ВыборкаИзменений.Следующий() Цикл + + ОбъектПриемник = Неопределено; + + Эталон = ВыборкаИзменений.Получить(); + + СтандартаяОбработка = Истина; + + Если ЭтоРегистрСведений Тогда + + СтандартныеПодсистемыПереопределяемый.ПередКопированиемНабораЗаписейИзЭталона(Эталон, + ОбъектМД, Менеджер, ТипИсточника, ТипПриемника, ОбъектПриемник, СтандартаяОбработка); + + ПоставляемыеДанныеПереопределяемый.ПередКопированиемНабораЗаписейИзЭталона(Эталон, + ОбъектМД, Менеджер, ТипИсточника, ТипПриемника, ОбъектПриемник, СтандартаяОбработка); + + Если СтандартаяОбработка Тогда + СкопироватьНаборЗаписейИзЭталона(Эталон, + ОбъектМД, Менеджер, ТипИсточника, ТипПриемника, ОбъектПриемник); + КонецЕсли; + Иначе + + СтандартныеПодсистемыПереопределяемый.ПередКопированиемОбъектаИзЭталона(Эталон, + ОбъектМД, Менеджер, ТипИсточника, ТипПриемника, ОбъектПриемник, СтандартаяОбработка); + + ПоставляемыеДанныеПереопределяемый.ПередКопированиемОбъектаИзЭталона(Эталон, + ОбъектМД, Менеджер, ТипИсточника, ТипПриемника, ОбъектПриемник, СтандартаяОбработка); + + Если СтандартаяОбработка Тогда + СкопироватьОбъектИзЭталона(Эталон, + ОбъектМД, Менеджер, ТипИсточника, ТипПриемника, ОбъектПриемник); + КонецЕсли; + КонецЕсли; + ОбъектПриемник.Записать(); + КонецЦикла; + + ПланыОбмена.УдалитьРегистрациюИзменений(ПоставляемыеДанныеПовтИсп.ПолучитьУзелОбластиДанных(ОбластьДанных), 0); + + КонецЦикла; + + Менеджер = РегистрыСведений.ОбластиДляОбновленияПоставляемыхДанных.СоздатьМенеджерЗаписи(); + Менеджер.ОбластьДанных = ОбластьДанных; + Менеджер.НомерСообщения = НомерСообщения; + Менеджер.Удалить(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление поставляемых данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Процедура регламетного задания контролирует РС ОбластиДляОбновленияПоставляемыхДанных +// и в случае некорректного завершения фоновых заданий запускает их повторно +// +Процедура КонтрольОбновленияРазделенныхПоставляемыхДанных() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбластиДляОбновленияПоставляемыхДанных.ОбластьДанных, + | ОбластиДляОбновленияПоставляемыхДанных.НомерСообщения + |ИЗ + | РегистрСведений.ОбластиДляОбновленияПоставляемыхДанных КАК ОбластиДляОбновленияПоставляемыхДанных"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + Ключ = РегистрыСведений.ОбластиДляОбновленияПоставляемыхДанных.СоздатьКлючЗаписи( + Новый Структура("ОбластьДанных, НомерСообщения", Выборка.ОбластьДанных, Выборка.НомерСообщения)); + + Попытка + ЗаблокироватьДанныеДляРедактирования(Ключ); + Исключение + Продолжить; + КонецПопытки; + + Менеджер = РегистрыСведений.ОбластиДляОбновленияПоставляемыхДанных.СоздатьМенеджерЗаписи(); + Менеджер.ОбластьДанных = Выборка.ОбластьДанных; + Менеджер.НомерСообщения = Выборка.НомерСообщения; + + НачатьТранзакцию(); + Попытка + Менеджер.Прочитать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Контроль обновления поставляемых данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + Если Не Менеджер.Выбран() Тогда + РазблокироватьДанныеДляРедактирования(Ключ); + Продолжить; + КонецЕсли; + + ОтборЗадания = Новый Структура; + ОтборЗадания.Вставить("ИмяМетода", "ПоставляемыеДанные.ОбновитьПоставляемыеДанные"); + ОтборЗадания.Вставить("Ключ", Формат(Выборка.НомерСообщения, "ЧГ=")); + ЗапланированноеЗадание = ОчередьЗаданий.ПолучитьЗадание(ОтборЗадания, Выборка.ОбластьДанных); + Если ЗапланированноеЗадание <> Неопределено Тогда + РазблокироватьДанныеДляРедактирования(Ключ); + Продолжить; + КонецЕсли; + + ПараметрыМетода = Новый Массив; + ПараметрыМетода.Добавить(Выборка.ОбластьДанных); + ПараметрыМетода.Добавить(Выборка.НомерСообщения); + + ОчередьЗаданий.ЗапланироватьВыполнениеЗадания("ПоставляемыеДанные.ОбновитьПоставляемыеДанные", + ПараметрыМетода, Формат(Выборка.НомерСообщения, "ЧГ="),, Выборка.ОбластьДанных); + + РазблокироватьДанныеДляРедактирования(Ключ); + + КонецЦикла; + +КонецПроцедуры + +// Процедура обработчик подписки на событие "Перед записью" справочника общих данных: +// регистрирует получателей в плане обмена для источника +// пишет уникальные узлы в РС ОбластиДляОбновленияПоставляемыхДанных +// +Процедура СправочникиОбщихПоставляемыхДанныхПередЗаписью(Источник, Отказ) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ТекущаяСсылка = Источник.Ссылка; + ТипИсточника = ТипЗнч(Источник.Ссылка); + ВыборкаУзлов = Неопределено; + + Если Источник.ЭтоНовый() Тогда + + Если ПоставляемыеДанныеПовтИсп.НеобходимоДобавитьЭлементВОбласти(Новый(ТипИсточника)) Тогда + + ТекущаяСсылка = Источник.ПолучитьСсылкуНового(); + + Если НЕ ЗначениеЗаполнено(ТекущаяСсылка) Тогда + + МенеджерОбъектаИсточника = ПоставляемыеДанныеПовтИсп.ПолучитьМенеджерПоПустойСсылкеТипа(Новый(ТипИсточника)); + ТекущаяСсылка = МенеджерОбъектаИсточника.ПолучитьСсылку(); + Источник.УстановитьСсылкуНового(ТекущаяСсылка); + + КонецЕсли; + + Параметры = Новый Массив(); + Параметры.Добавить(ТекущаяСсылка.УникальныйИдентификатор()); + + ТипПриемника = ПолучитьТипРазделенныхДанныхПоОбщему(ТипИсточника); + + РазделеннаяСсылка = Новый(ТипПриемника, Параметры); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ИзмененияПоставляемыхДанных.ОбластьДанных, + | ИзмененияПоставляемыхДанных.Ссылка КАК Узел + |ИЗ + | ПланОбмена.ИзмененияПоставляемыхДанных КАК ИзмененияПоставляемыхДанных + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ОбластиДанных КАК ОбластиДанных + | ПО ИзмененияПоставляемыхДанных.ОбластьДанных = ОбластиДанных.ОбластьДанных + |ГДЕ + | ОбластиДанных.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Используется))"; + + ВыборкаУзлов = Запрос.Выполнить().Выбрать(); + Пока ВыборкаУзлов.Следующий() Цикл + + МенеджерЗаписи = РегистрыСведений.СвязиПоставляемыхДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = ВыборкаУзлов.ОбластьДанных; + МенеджерЗаписи.ЭлементОбщихДанных = ТекущаяСсылка; + МенеджерЗаписи.ЭлементРазделенныхДанных = РазделеннаяСсылка; + МенеджерЗаписи.РучноеИзменение = Ложь; + МенеджерЗаписи.Записать(); + + КонецЦикла; + ВыборкаУзлов.Сбросить(); + КонецЕсли; + ПоставляемыеДанныеПереопределяемый.ПриРегистрацииНовогоОбъектаПоставляемыхДанных(Источник); + + КонецЕсли; + + Если ВыборкаУзлов = Неопределено Тогда + ВыборкаУзлов = ПолучитьМассивУзловИспользованияЭлементаДанных(ТекущаяСсылка); + КонецЕсли; + + Если Источник.ДополнительныеСвойства.Свойство("НомерЗагрузки") Тогда + НомерЗагрузки = Источник.ДополнительныеСвойства.НомерЗагрузки; + Иначе + НомерЗагрузки = Константы.НомерЗагрузкиПоставляемыхДанных.Получить(); + КонецЕсли; + + Источник.ОбменДанными.Получатели.Очистить(); + Пока ВыборкаУзлов.Следующий() Цикл + Источник.ОбменДанными.Получатели.Добавить(ВыборкаУзлов.Узел); + + Если ДобавитьОбластьДанныхВСписокУзлов(ВыборкаУзлов.ОбластьДанных, НомерЗагрузки) Тогда + Менеджер = РегистрыСведений.ОбластиДляОбновленияПоставляемыхДанных.СоздатьМенеджерЗаписи(); + Менеджер.ОбластьДанных = ВыборкаУзлов.ОбластьДанных; + Менеджер.НомерСообщения = НомерЗагрузки; + Менеджер.Записать(); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Процедура обработчик подписки на событие "Перед удалением" справочника разделенных данных: +// удаляет связи в текущей области для разделенных элементов +// +Процедура СправочникиРазделенныхПоставляемыхДанныхПередУдалением(Источник, Отказ) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СвязиПоставляемыхДанных.ЭлементОбщихДанных КАК Ссылка + |ИЗ + | РегистрСведений.СвязиПоставляемыхДанных КАК СвязиПоставляемыхДанных + |ГДЕ + | СвязиПоставляемыхДанных.ОбластьДанных = &ОбластьДанных + | И СвязиПоставляемыхДанных.ЭлементРазделенныхДанных = &ЭлементРазделенныхДанных"; + Запрос.УстановитьПараметр("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + Запрос.УстановитьПараметр("ЭлементРазделенныхДанных", Источник.Ссылка); + + УстановитьПривилегированныйРежим(Истина); + Результат = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); + + Если Не Результат.Пустой() Тогда + Менеджер = РегистрыСведений.СвязиПоставляемыхДанных.СоздатьМенеджерЗаписи(); + Менеджер.ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + Менеджер.ЭлементОбщихДанных = Результат.Выгрузить()[0].Ссылка; + Менеджер.ЭлементРазделенныхДанных = Источник.Ссылка; + Менеджер.Удалить(); + КонецЕсли; + +КонецПроцедуры + +// Процедура осуществляет копирование общих данных в разделенные +// +Процедура ПодобратьИзКлассификатора(Знач Ссылки, Знач ИгнорироватьРучноеИзменение = Ложь) Экспорт + + Если Ссылки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если Ссылки[0].Метаданные().Иерархический Тогда + Ссылки = ДополнитьМассивРодителямиСсылок(Ссылки); + КонецЕсли; + + Ключ = РегистрыСведений.СвязиПоставляемыхДанных.СоздатьКлючЗаписи( + Новый Структура("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса())); + + ЗаблокироватьДанныеДляРедактирования(Ключ); + + НачатьТранзакцию(); + Попытка + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СвязиПоставляемыхДанных.ЭлементОбщихДанных, + | СвязиПоставляемыхДанных.ЭлементРазделенныхДанных, + | СвязиПоставляемыхДанных.РучноеИзменение + |ИЗ + | РегистрСведений.СвязиПоставляемыхДанных КАК СвязиПоставляемыхДанных + |ГДЕ + | СвязиПоставляемыхДанных.ОбластьДанных = &ОбластьДанных + | И СвязиПоставляемыхДанных.ЭлементОбщихДанных В(&Ссылки)"; + Запрос.УстановитьПараметр("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + Запрос.УстановитьПараметр("Ссылки", Ссылки); + + УстановитьПривилегированныйРежим(Истина); + ТаблицаСоответствия = Запрос.Выполнить().Выгрузить(); + УстановитьПривилегированныйРежим(Ложь); + + ТаблицаСоответствия.Индексы.Добавить("ЭлементОбщихДанных"); + Для Каждого Ссылка Из Ссылки Цикл + + ТипПриемника = ПолучитьТипРазделенныхДанныхПоОбщему(ТипЗнч(Ссылка)); + + СтрокаСоответствия = ТаблицаСоответствия.Найти(Ссылка, "ЭлементОбщихДанных"); + Если СтрокаСоответствия = Неопределено Тогда + СтрокаСоответствия = ТаблицаСоответствия.Добавить(); + СтрокаСоответствия.ЭлементОбщихДанных = Ссылка; + КонецЕсли; + Если НЕ ЗначениеЗаполнено(СтрокаСоответствия.ЭлементРазделенныхДанных) Тогда + Параметры = Новый Массив; + Параметры.Добавить(Ссылка.УникальныйИдентификатор()); + СтрокаСоответствия.ЭлементРазделенныхДанных = Новый(ТипПриемника, Параметры); + КонецЕсли; + + Если СтрокаСоответствия.РучноеИзменение = Истина + И НЕ ИгнорироватьРучноеИзменение Тогда + + Продолжить; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписи = РегистрыСведений.СвязиПоставляемыхДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + МенеджерЗаписи.ЭлементОбщихДанных = Ссылка; + МенеджерЗаписи.ЭлементРазделенныхДанных = СтрокаСоответствия.ЭлементРазделенныхДанных; + МенеджерЗаписи.РучноеИзменение = СтрокаСоответствия.РучноеИзменение; + МенеджерЗаписи.Записать(); + + ПланыОбмена.ЗарегистрироватьИзменения(ПоставляемыеДанныеПовтИсп.ПолучитьУзелОбластиДанных( + ОбщегоНазначения.ЗначениеРазделителяСеанса()), Ссылка); + + УстановитьПривилегированныйРежим(Ложь); + + СтандартныеПодсистемыПереопределяемый.ПриПодбореПоставляемыхДанныхВОбласть(Ссылка); + ПоставляемыеДанныеПереопределяемый.ПриПодбореПоставляемыхДанныхВОбласть(Ссылка); + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Подбор из классификатора'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + РазблокироватьДанныеДляРедактирования(Ключ); + + ОбновитьПоставляемыеДанные(ОбщегоНазначения.ЗначениеРазделителяСеанса(), 0); + +КонецПроцедуры + +// Функция получает по общей ссылке перечень узлов плана обмена +// +// Параметры: +// СсылкаЭлементаДанных - ссылка, по которой определяются узлы +// +// Возвращаемое значение: +// Выборка результата запроса - список узлов и областей +// +Функция ПолучитьМассивУзловИспользованияЭлементаДанных(СсылкаЭлементаДанных) Экспорт + + // Определим список областей данных в которых используется элемент данных + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ИзмененияПоставляемыхДанных.Ссылка КАК Узел, + | ИзмененияПоставляемыхДанных.ОбластьДанных + |ИЗ + | РегистрСведений.СвязиПоставляемыхДанных КАК СвязиПоставляемыхДанных + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланОбмена.ИзмененияПоставляемыхДанных КАК ИзмененияПоставляемыхДанных + | ПО СвязиПоставляемыхДанных.ОбластьДанных = ИзмененияПоставляемыхДанных.ОбластьДанных + |ГДЕ + | СвязиПоставляемыхДанных.ЭлементОбщихДанных = &ЭлементОбщихДанных + | И СвязиПоставляемыхДанных.РучноеИзменение = ЛОЖЬ"; + Запрос.УстановитьПараметр("ЭлементОбщихДанных", СсылкаЭлементаДанных); + Выборка = Запрос.Выполнить().Выбрать(); + + Возврат Выборка; + +КонецФункции + +// Функция получает по общей ссылке перечень узлов плана обмена +// +// Параметры: +// СписокЭлементовДанных -Массив- список элементов, для которых определяются узлы +// +// Возвращаемое значение: +// Выборка результата запроса - список узлов и областей +// +Функция ПолучитьМассивУзловИспользованияСпискаЭлементовДанных(СписокЭлементовДанных) Экспорт + + // Определим список областей данных в которых используются элементы данных + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ИзмененияПоставляемыхДанных.Ссылка КАК Узел, + | ИзмененияПоставляемыхДанных.ОбластьДанных + |ИЗ + | РегистрСведений.СвязиПоставляемыхДанных КАК СвязиПоставляемыхДанных + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланОбмена.ИзмененияПоставляемыхДанных КАК ИзмененияПоставляемыхДанных + | ПО СвязиПоставляемыхДанных.ОбластьДанных = ИзмененияПоставляемыхДанных.ОбластьДанных + |ГДЕ + | СвязиПоставляемыхДанных.ЭлементОбщихДанных В(&СписокЭлементовДанных) + | И СвязиПоставляемыхДанных.РучноеИзменение = ЛОЖЬ"; + Запрос.УстановитьПараметр("СписокЭлементовДанных", СписокЭлементовДанных); + Выборка = Запрос.Выполнить().Выбрать(); + + Возврат Выборка; + +КонецФункции + +// Возвращает общую ссылку соответствующую переданной разделенной +// +// Параметры: +// РазделеннаяСсылка - СправочникСсылка - разделенная ссылка для +// которой требуется получить соответствующую общую +// +// Возвращаемое значение: +// СправочникСсылка - общая ссылка, соответствующая разделенной. +// +Функция ОбщаяСсылкаПоРазделенной(РазделеннаяСсылка) Экспорт + + Если РазделеннаяСсылка.Пустая() Тогда + Возврат Новый(ПолучитьТипОбщихДанныхПоРазделенному(ТипЗнч(РазделеннаяСсылка))); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СвязиПоставляемыхДанных.ЭлементОбщихДанных КАК Ссылка + |ИЗ + | РегистрСведений.СвязиПоставляемыхДанных КАК СвязиПоставляемыхДанных + |ГДЕ + | СвязиПоставляемыхДанных.ОбластьДанных = &ОбластьДанных + | И СвязиПоставляемыхДанных.ЭлементРазделенныхДанных = &ЭлементРазделенныхДанных"; + Запрос.УстановитьПараметр("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + Запрос.УстановитьПараметр("ЭлементРазделенныхДанных", РазделеннаяСсылка); + + УстановитьПривилегированныйРежим(Истина); + Результат = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); + + Если Результат.Пустой() Тогда + Текст = НСтр("ru = 'Не найдена общая ссылка соответствующая разделенной: %РазделеннаяСсылка%'"); + Текст = СтрЗаменить(Текст, "%РазделеннаяСсылка%", РазделеннаяСсылка); + ВызватьИсключение(Текст); + КонецЕсли; + + Возврат Результат.Выгрузить()[0].Ссылка; + +КонецФункции + +// Возвращает разделенную ссылку соответствующую переданной разделенной +// в текущей области данных. +// +// Параметры: +// ОбщаяСсылка - СправочникСсылка - общая ссылка для +// которой требуется получить соответствующую разделенную +// +// Возвращаемое значение: +// СправочникСсылка - разделенной ссылка, соответствующая общей. +// +Функция РазделеннаяСсылкаПоОбщей(ОбщаяСсылка) Экспорт + + Если ОбщаяСсылка.Пустая() Тогда + Возврат Новый(ПолучитьТипРазделенныхДанныхПоОбщему(ТипЗнч(ОбщаяСсылка))); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СвязиПоставляемыхДанных.ЭлементРазделенныхДанных КАК Ссылка + |ИЗ + | РегистрСведений.СвязиПоставляемыхДанных КАК СвязиПоставляемыхДанных + |ГДЕ + | СвязиПоставляемыхДанных.ОбластьДанных = &ОбластьДанных + | И СвязиПоставляемыхДанных.ЭлементОбщихДанных = &ЭлементОбщихДанных"; + Запрос.УстановитьПараметр("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + Запрос.УстановитьПараметр("ЭлементОбщихДанных", ОбщаяСсылка); + + УстановитьПривилегированныйРежим(Истина); + Результат = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); + + Если Результат.Пустой() Тогда + Текст = НСтр("ru = 'Не найдена разделенная ссылка соответствующая общей: %ОбщаяСсылка%'"); + Текст = СтрЗаменить(Текст, "%ОбщаяСсылка%", ОбщаяСсылка); + ВызватьИсключение(Текст); + КонецЕсли; + + Возврат Результат.Выгрузить()[0].Ссылка; + +КонецФункции + +Функция ПреобразоватьОбщееЗначениеВРазделенное(Знач ИсходноеЗначение) Экспорт + + ТипИсходногоЗначения = ТипЗнч(ИсходноеЗначение); + + СоответствиеТипов = ПоставляемыеДанныеПовтИсп.СоответствиеТиповРазделенныхДанныхОбщим(); + Если СоответствиеТипов.Получить(ТипИсходногоЗначения) <> Неопределено Тогда + Возврат РазделеннаяСсылкаПоОбщей(ИсходноеЗначение); + Иначе + Возврат ИсходноеЗначение; + КонецЕсли; + +КонецФункции + +Функция ЗаменитьОбщиеСсылкиРазделеннымиВТаблице(Знач ИсходнаяТаблица) Экспорт + + РезультирующаяТаблица = Новый ТаблицаЗначений; + Для каждого КолонкаТаблицы Из ИсходнаяТаблица.Колонки Цикл + РезультирующаяТаблица.Колонки.Добавить(КолонкаТаблицы.Имя); + КонецЦикла; + + Для каждого ИсходнаяСтрока Из ИсходнаяТаблица Цикл + РезультирующаяСтрока = РезультирующаяТаблица.Добавить(); + Для каждого КолонкаТаблицы Из ИсходнаяТаблица.Колонки Цикл + РезультирующаяСтрока[КолонкаТаблицы.Имя] = + ПреобразоватьОбщееЗначениеВРазделенное(ИсходнаяСтрока[КолонкаТаблицы.Имя]); + КонецЦикла; + КонецЦикла; + + Возврат РезультирующаяТаблица; + +КонецФункции + +// Функция проверяет необходимость добавления области данных в РС +// ОбластиДляОбновленияПоставляемыхДанных для формирования фоновых заданий +// +// Параметры: +// ОбластьДанных - Число – область данных для добавления в РС +// НомерЗагрузки - Число - номер загрузки общих данных +// +// Возвращаемое значение: +// Булево - необходимость добавления узла +// +Функция ДобавитьОбластьДанныхВСписокУзлов(ОбластьДанных, НомерЗагрузки) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписи = РегистрыСведений.ОбластиДляОбновленияПоставляемыхДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = ОбластьДанных; + МенеджерЗаписи.НомерСообщения = НомерЗагрузки; + МенеджерЗаписи.Прочитать(); + + Возврат Не МенеджерЗаписи.Выбран(); + +КонецФункции + +// Функция получает вид поставляемых данных по типу +// +// Параметры: +// Тип - тип, по которому определяется вид +// +// Возвращаемое значение: +// Вид поставляемых данных +// +Функция ПолучитьВидПоставляемыхДанныхПоОбщему(Тип) Экспорт + + ТаблицаСоответствия = ОбщегоНазначения.ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(); + + НайденнаяСтрока = ТаблицаСоответствия.Найти(Тип, "ТипОбщихДанных"); + Если НайденнаяСтрока = Неопределено Тогда + ШаблонСообщения = НСтр("ru = 'Не найдена строка соответствия для типа поставляемых данных %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Тип); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + ВидПоставляемыхДанных = НайденнаяСтрока.ВидПоставляемыхДанных; + + Возврат ВидПоставляемыхДанных; + +КонецФункции + +// Функция получает тип разделенных данных по типу +// +// Параметры: +// Тип - тип общих данных +// +// Возвращаемое значение: +// Тип - тип разделенных данных +// +Функция ПолучитьТипРазделенныхДанныхПоОбщему(Тип) Экспорт + + ТаблицаСоответствия = ОбщегоНазначения.ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(); + + НайденнаяСтрока = ТаблицаСоответствия.Найти(Тип, "ТипОбщихДанных"); + Если НайденнаяСтрока = Неопределено Тогда + ШаблонСообщения = НСтр("ru = 'Не найдена строка соответствия для типа поставляемых данных %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Тип); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + ТипПриемник = НайденнаяСтрока.ТипРазделенныхДанных; + + Возврат ТипПриемник; + +КонецФункции + +// Функция получает тип разделенных данных по типу +// +// Параметры: +// Тип - тип разделенных данных +// +// Возвращаемое значение: +// Тип - тип общих данных +// +Функция ПолучитьТипОбщихДанныхПоРазделенному(Тип) Экспорт + + ТаблицаСоответствия = ОбщегоНазначения.ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(); + + НайденнаяСтрока = ТаблицаСоответствия.Найти(Тип, "ТипРазделенныхДанных"); + Если НайденнаяСтрока = Неопределено Тогда + ШаблонСообщения = НСтр("ru = 'Не найдена строка соответствия для типа поставляемых данных %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Тип); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + ТипПриемник = НайденнаяСтрока.ТипОбщихДанных; + + Возврат ТипПриемник; + +КонецФункции + +// Функция получает версию поставляемых данных +// +// Параметры: +// Тип - тип общих данных +// +// Возвращаемое значение: +// ВерсияПоставляемыхДанных - версия Поставляемых данных +// +Функция ПолучитьВерсиюПоставляемыхДанных(Тип) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииПоставляемыхДанных.ВерсияПоставляемыхДанных + |ИЗ + | РегистрСведений.ВерсииПоставляемыхДанных КАК ВерсииПоставляемыхДанных + |ГДЕ + | ВерсииПоставляемыхДанных.ВидПоставляемыхДанных = &ВидПоставляемыхДанных"; + + Запрос.УстановитьПараметр("ВидПоставляемыхДанных", ПолучитьВидПоставляемыхДанныхПоОбщему(Тип)); + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат 0; + КонецЕсли; + + Возврат РезультатЗапроса.Выгрузить()[0].ВерсияПоставляемыхДанных; + +КонецФункции + +// Процедура копирует список элементов общего справочника в новую область данных +// +// Параметры: +// СписокКодовСправочника - массив - массив кодов справочника +// ТипИсточника - тип - тип общего справочника, +// откуда будут скопированы элементы +// +Процедура СкопироватьЭлементыСправочника(СписокКодовСправочника, ТипИсточника) Экспорт + + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипИсточника); + + Если МетаданныеОбъекта = Неопределено Тогда + ШаблонСообщения = НСтр("ru = 'Не найден объект метаданных для справочника: %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ТипИсточника); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + Запрос = Новый Запрос; + Текст = + "ВЫБРАТЬ + | СправочникИсточник.Ссылка, + | СправочникИсточник.Код + |ИЗ + | Справочник." + МетаданныеОбъекта.Имя + " КАК СправочникИсточник"; + + Если ЗначениеЗаполнено(СписокКодовСправочника) Тогда + Текст = Текст + " + |ГДЕ + | СправочникИсточник.Код В(&СписокКодовСправочника)"; + + Запрос.УстановитьПараметр("СписокКодовСправочника", СписокКодовСправочника); + КонецЕсли; + Запрос.Текст = Текст; + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + + МассивКодовСправочника = РезультатЗапроса.ВыгрузитьКолонку("Код"); + + Если ЗначениеЗаполнено(СписокКодовСправочника) + И СписокКодовСправочника.Количество() <> МассивКодовСправочника.Количество() Тогда + Если НЕ ЗначениеЗаполнено(МассивКодовСправочника) Тогда + + ШаблонСообщения = + НСтр("ru = 'Поставляемые данные. При копировании по списку кодов не найдено ни одного элемента в справочнике: %1.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСообщения, МетаданныеОбъекта.Представление()); + ВызватьИсключение(ТекстСообщения); + + Иначе + МассивНеНайденныхКодовСправочника = Новый Массив; + Счетчик = 0; + Для Каждого Код Из СписокКодовСправочника Цикл + Если МассивКодовСправочника.Найти(Код) = Неопределено Тогда + Если Счетчик <= 20 Тогда + МассивНеНайденныхКодовСправочника.Добавить(Код); + КонецЕсли; + Счетчик = Счетчик + 1; + КонецЕсли; + КонецЦикла; + Если Счетчик > 20 Тогда + МассивНеНайденныхКодовСправочника.Добавить("..."); + КонецЕсли; + + СтрокаРезультат = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(МассивНеНайденныхКодовСправочника); + + ШаблонСообщения = + НСтр("ru = 'Поставляемые данные. При копировании по списку кодов не найдены элементы (%3) с кодами %2 в справочнике: %1.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСообщения, МетаданныеОбъекта.Представление(), СтрокаРезультат, Счетчик); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + КонецЕсли; + + МассивЭлементовСправочника = РезультатЗапроса.ВыгрузитьКолонку("Ссылка"); + ПодобратьИзКлассификатора(МассивЭлементовСправочника); + +КонецПроцедуры + +// При необходимости создает узел для области данных с переданным значеним +// разделителя. +// +// Параметры: +// ОбластьДанных - Число - значение разделеителя области данных для которой +// требуется создать узел. +// +Процедура СоздатьУзелОбластиДанных(Знач ОбластьДанных) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ИзмененияПоставляемыхДанных.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.ИзмененияПоставляемыхДанных КАК ИзмененияПоставляемыхДанных + |ГДЕ + | ИзмененияПоставляемыхДанных.ОбластьДанных = &ОбластьДанных"; + Запрос.УстановитьПараметр("ОбластьДанных", ОбластьДанных); + + Результат = Запрос.Выполнить(); + + Если Результат.Пустой() Тогда + УзелОбъект = ПланыОбмена.ИзмененияПоставляемыхДанных.СоздатьУзел(); + УзелОбъект.ОбластьДанных = ОбластьДанных; + УзелОбъект.Код = Формат(ОбластьДанных, "ЧН=0; ЧГ="); + УзелОбъект.Записать(); + КонецЕсли; + +КонецПроцедуры + +// Процедура регистрирует изменения для данных регистра сведений в плане обмена +// +// Параметры: +// ЭлементОбщихДанных - искомый элемент общих данных, для данных которого регистрируем изменения +// ИмяРегистраСведений - имя регистра сведений, содержащего измененные данные +// ИмяЭлементаОбщихДанных - имя поля, содержащего ссылку на элемент общих данных +// СтрокаКлючей - перечисленные через запятую имена ключей набора записей +// +Процедура ЗарегистрироватьИзмененияДанныхРегистраСведений(ЭлементОбщихДанных, ИмяРегистраСведений, ИмяЭлементаОбщихДанных, СтрокаКлючей = "") Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | " + СтрокаКлючей + " + |ИЗ + | РегистрСведений." + ИмяРегистраСведений + " + |ГДЕ + | " + ИмяЭлементаОбщихДанных + " = &" + ИмяЭлементаОбщихДанных; + + Запрос.УстановитьПараметр(ИмяЭлементаОбщихДанных, ЭлементОбщихДанных); + Результат = Запрос.Выполнить(); + + НаборЗаписей = РегистрыСведений[ИмяРегистраСведений].СоздатьНаборЗаписей(); + НаборЗаписей.Отбор[ИмяЭлементаОбщихДанных].Установить(ЭлементОбщихДанных); + + Выборка = Результат.Выбрать(); + + ИменаКлючей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаКлючей); + + Пока Выборка.Следующий() Цикл + Для Каждого ИмяКлюча Из ИменаКлючей Цикл + НаборЗаписей.Отбор[ИмяКлюча].Установить(Выборка[ИмяКлюча]); + КонецЦикла; + ПланыОбмена.ЗарегистрироватьИзменения(ПоставляемыеДанныеПовтИсп.ПолучитьУзелОбластиДанных( + ОбщегоНазначения.ЗначениеРазделителяСеанса()), НаборЗаписей); + КонецЦикла; + +КонецПроцедуры + +// Процедура обновляет флаг ручного изменения в регистре СвязиПоставляемыхДанных +// +Процедура ОбновитьЗаписьРучногоИзмененияЭлемента(Ссылка, Флаг) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписи = РегистрыСведений.СвязиПоставляемыхДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + МенеджерЗаписи.ЭлементОбщихДанных = ОбщаяСсылкаПоРазделенной(Ссылка); + МенеджерЗаписи.ЭлементРазделенныхДанных = Ссылка; + МенеджерЗаписи.РучноеИзменение = Флаг; + МенеджерЗаписи.Записать(); + +КонецПроцедуры + +// Процедура принудительно обновляет разделенный элемент справочника данными из общего +// +// Параметры: +// Ссылка - ссылка на элемент разделенных данных, который необходимо обновить +// +Процедура ОбновитьЭлементСправочникаИзОбщихДанных(Ссылка) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПланыОбмена.ЗарегистрироватьИзменения( + ПоставляемыеДанныеПовтИсп.ПолучитьУзелОбластиДанных(ОбщегоНазначения.ЗначениеРазделителяСеанса()), + ОбщаяСсылкаПоРазделенной(Ссылка)); + + ОбновитьПоставляемыеДанные(ОбщегоНазначения.ЗначениеРазделителяСеанса(), 0); + +КонецПроцедуры + +// Процедура формирует в переданном объекте Запрос временную таблицу ВТ_СтарыеКлючи, +// содержащую данные набора записей +// +// Параметры: +// Запрос - объект запрос, в менеджере временных таблиц которого формируется таблица данных регистра +// НаборЗаписей - набор записей регистра сведений +// СтрокаКлючей - перечисленные через запятую имена ключей набора записей +// +Процедура СформироватьВременнуюТаблицуДанныхНабораЗаписей(Запрос, НаборЗаписей, СтрокаКлючей = "") Экспорт + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + Запрос.Текст = + "ВЫБРАТЬ + | " + СтрокаКлючей + " + |ПОМЕСТИТЬ ВТ_СтарыеКлючи + |ИЗ + | РегистрСведений." + НаборЗаписей.Метаданные().Имя; + + ТекстУсловия = ""; + Для каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл + Если НЕ ЭлементОтбора.Использование Тогда + Продолжить; + КонецЕсли; + + Если НЕ ПустаяСтрока(ТекстУсловия) Тогда + ТекстУсловия = ТекстУсловия + Символы.ПС + Символы.Таб + "И "; + КонецЕсли; + + ТекстУсловия = ТекстУсловия + ЭлементОтбора.Имя + " = &" + ЭлементОтбора.Имя; + Запрос.УстановитьПараметр(ЭлементОтбора.Имя, ЭлементОтбора.Значение); + КонецЦикла; + + Если НЕ ПустаяСтрока(ТекстУсловия) Тогда + Запрос.Текст = Запрос.Текст + " + |ГДЕ + | " + ТекстУсловия; + КонецЕсли; + + Запрос.Выполнить(); + +КонецПроцедуры + +// Процедура регистрирует изменения данных набора записей регистра сведений в плане обмена +// +// Запрос - объект запрос, в менеджере временных таблиц которого сформирована временная таблица данных регистра до изменения +// НаборЗаписей - набор записей регистра сведений +// ИмяЭлементаОбщихДанных - имя поля, содержащего ссылку на элемент общих данных +// СтрокаКлючей - перечисленные через запятую имена ключей набора записей +// ИгнорироватьРучныеИзменения - признак необходимости регистрировать изменения для данных, подчиненных измененному вручную объекту +// +Процедура ЗарегистрироватьИзмененияДанныхНабораЗаписей(Запрос, НаборЗаписей, ИмяЭлементаОбщихДанных, СтрокаКлючей = "", ИгнорироватьРучныеИзменения = Ложь) Экспорт + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВТ_СтарыеКлючи", "ВТ_НовыеКлючи"); + Запрос.Выполнить(); + + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | " + СтрокаКлючей + " + |ПОМЕСТИТЬ Ключи + |ИЗ + | ВТ_СтарыеКлючи + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | " + СтрокаКлючей + " + |ИЗ + | ВТ_НовыеКлючи + | + |ИНДЕКСИРОВАТЬ ПО + | " + СтрокаКлючей + " + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | Ключи.*, + | ИзмененияПоставляемыхДанных.Ссылка КАК Узел, + | СвязиПоставляемыхДанных.ОбластьДанных КАК ОбластьДанных + |ИЗ + | РегистрСведений.СвязиПоставляемыхДанных КАК СвязиПоставляемыхДанных + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Ключи КАК Ключи + | ПО СвязиПоставляемыхДанных.ЭлементОбщихДанных = Ключи." + ИмяЭлементаОбщихДанных + " + | И (&ИгнорироватьРучныеИзменения ИЛИ НЕ СвязиПоставляемыхДанных.РучноеИзменение) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланОбмена.ИзмененияПоставляемыхДанных КАК ИзмененияПоставляемыхДанных + | ПО СвязиПоставляемыхДанных.ОбластьДанных = ИзмененияПоставляемыхДанных.ОбластьДанных + | + |УПОРЯДОЧИТЬ ПО + | " + СтрокаКлючей; + + Если НаборЗаписей.ДополнительныеСвойства.Свойство("НомерЗагрузки") Тогда + НомерЗагрузки = НаборЗаписей.ДополнительныеСвойства.НомерЗагрузки; + Иначе + НомерЗагрузки = Константы.НомерЗагрузкиПоставляемыхДанных.Получить(); + КонецЕсли; + + Области = Новый Соответствие; + + Запрос.УстановитьПараметр("ИгнорироватьРучныеИзменения", ИгнорироватьРучныеИзменения); + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + + ТекущийКлюч = Новый Структура(СтрокаКлючей); + НакопленныеУзлы = Новый Массив; + + НаборДляРегистрации = РегистрыСведений[НаборЗаписей.Метаданные().Имя].СоздатьНаборЗаписей(); + + Пока Выборка.Следующий() Цикл + Если Области.Получить(Выборка.ОбластьДанных) = Неопределено Тогда + Области.Вставить(Выборка.ОбластьДанных, Истина); + + Если ДобавитьОбластьДанныхВСписокУзлов(Выборка.ОбластьДанных, НомерЗагрузки) Тогда + Менеджер = РегистрыСведений.ОбластиДляОбновленияПоставляемыхДанных.СоздатьМенеджерЗаписи(); + Менеджер.ОбластьДанных = Выборка.ОбластьДанных; + Менеджер.НомерСообщения = НомерЗагрузки; + Менеджер.Записать(); + КонецЕсли; + КонецЕсли; + + ОтличаетсяКлюч = Ложь; + Для каждого КлючИЗначение Из ТекущийКлюч Цикл + Если Выборка[КлючИЗначение.Ключ] <> КлючИЗначение.Значение Тогда + ОтличаетсяКлюч = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ОтличаетсяКлюч Тогда + Если НакопленныеУзлы.Количество() > 0 Тогда + Для каждого КлючИЗначение Из ТекущийКлюч Цикл + НаборДляРегистрации.Отбор[КлючИЗначение.Ключ].Установить(КлючИЗначение.Значение); + КонецЦикла; + ПланыОбмена.ЗарегистрироватьИзменения(НакопленныеУзлы, НаборДляРегистрации); + КонецЕсли; + ЗаполнитьЗначенияСвойств(ТекущийКлюч, Выборка); + НакопленныеУзлы = Новый Массив; + КонецЕсли; + + НакопленныеУзлы.Добавить(Выборка.Узел); + + КонецЦикла; + + Если НакопленныеУзлы.Количество() > 0 Тогда + Для каждого КлючИЗначение Из ТекущийКлюч Цикл + НаборДляРегистрации.Отбор[КлючИЗначение.Ключ].Установить(КлючИЗначение.Значение); + КонецЦикла; + ПланыОбмена.ЗарегистрироватьИзменения(НакопленныеУзлы, НаборДляРегистрации); + КонецЕсли; + +КонецПроцедуры + +///////////////////////////////////////////////////////////////////////////////////////// +// Процедуры обслуживания флага РучноеИзменение в формах разделенных поставляемых данных +// +// Единственным параметром всех процедур является Форма - УправляемаяФорма элемента. +// В форме должны присутствовать следующие реквизиты: +// Объект - объект разделнный поставляемых данных +// РучноеИзменение - Произвольный - состяние разделенного объекта +// относительно общего. Реквизит не должен выводиться на форму. +// ТекстРучногоИзменения - Строка, 0 - текст надписи отображающей +// состояние разделенного объекта относительно общего. +// В форме должны присутствовать следующие кнопки: +// ОбновитьИзКлассификатора +// Изменить +// + +// Считывает текущее состояние разделенного объекта и приводит форму +// в соответстие с ним +// +Процедура СчитатьФлагРучногоИзменения(Знач Форма) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СвязиПоставляемыхДанных.РучноеИзменение + |ИЗ + | РегистрСведений.СвязиПоставляемыхДанных КАК СвязиПоставляемыхДанных + |ГДЕ + | СвязиПоставляемыхДанных.ОбластьДанных = &ОбластьДанных + | И СвязиПоставляемыхДанных.ЭлементРазделенныхДанных = &ЭлементРазделенныхДанных"; + Запрос.УстановитьПараметр("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + Запрос.УстановитьПараметр("ЭлементРазделенныхДанных", Форма.Объект.Ссылка); + + УстановитьПривилегированныйРежим(Истина); + РезультатЗапроса = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); + + Если РезультатЗапроса.Пустой() Тогда + + Форма.РучноеИзменение = Неопределено; + + Иначе + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Форма.РучноеИзменение = Выборка.РучноеИзменение; + + КонецЕсли; + + ПоставляемыеДанныеКлиентСервер.ОбработатьФлагРучногоИзменения(Форма); + + КонецЕсли; + +КонецПроцедуры + +// Записывает состояние разделенного объекта +// +Процедура ЗаписатьФлагРучногоИзменение(Знач Форма) Экспорт + + Если Форма.РучноеИзменение = Истина Тогда + ОбновитьЗаписьРучногоИзмененияЭлемента(Форма.Объект.Ссылка, Истина); + КонецЕсли; + +КонецПроцедуры + +// Копирует данные общего объекта в разделенный и изменяет +// состояние разделенного объекта +// +Процедура ВосстановитьЭлементИзОбщихДанных(Знач Форма) Экспорт + + НачатьТранзакцию(); + Попытка + Ссылки = Новый Массив; + Ссылки.Добавить(ОбщаяСсылкаПоРазделенной(Форма.Объект.Ссылка)); + ПодобратьИзКлассификатора(Ссылки, Истина); + + ОбновитьЗаписьРучногоИзмененияЭлемента(Форма.Объект.Ссылка, Ложь); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Восстановление из общих данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + Форма.Прочитать(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция ДополнитьМассивРодителямиСсылок(Знач Ссылки) + + ИмяТаблицы = Ссылки[0].Метаданные().ПолноеИмя(); + + МассивСсылок = Новый Массив; + Для каждого Ссылка Из Ссылки Цикл + МассивСсылок.Добавить(Ссылка); + КонецЦикла; + + ТекущиеСсылки = Ссылки; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | Таблица.Родитель КАК Ссылка + |ИЗ + | " + ИмяТаблицы + " КАК Таблица + |ГДЕ + | Таблица.Ссылка В (&Ссылки) + | И Таблица.Родитель <> ЗНАЧЕНИЕ(" + ИмяТаблицы + ".ПустаяСсылка)"; + + Пока Истина Цикл + Запрос.УстановитьПараметр("Ссылки", ТекущиеСсылки); + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Прервать; + КонецЕсли; + + ТекущиеСсылки = Новый Массив; + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + ТекущиеСсылки.Добавить(Выборка.Ссылка); + МассивСсылок.Добавить(Выборка.Ссылка); + КонецЦикла; + КонецЦикла; + + Возврат МассивСсылок; + +КонецФункции + +Процедура СкопироватьОбъектИзЭталона(Эталон, МетаданныеИсточника, Менеджер, ТипИсточника, ТипПриемника, ОбъектПриемник) + + СсылкаРезультата = РазделеннаяСсылкаПоОбщей(Эталон.Ссылка); + + МетаданныеПриемника = СсылкаРезультата.Метаданные(); + + ИерархическийСправочник = МетаданныеПриемника.Иерархический И МетаданныеИсточника.Иерархический; + + Результат = СсылкаРезультата.ПолучитьОбъект(); + Если Результат = Неопределено Тогда + Если ИерархическийСправочник И Эталон.ЭтоГруппа Тогда + Результат = Менеджер.СоздатьГруппу(); + Иначе + Результат = Менеджер.СоздатьЭлемент(); + КонецЕсли; + Результат.УстановитьСсылкуНового(СсылкаРезультата); + КонецЕсли; + Результат.ОбменДанными.Загрузка = Истина; + + Если МетаданныеПриемника.ДлинаНаименования > 0 + И МетаданныеИсточника.ДлинаНаименования > 0 Тогда + Результат.Наименование = Эталон.Наименование; + КонецЕсли; + + Если МетаданныеПриемника.ДлинаКода > 0 + И МетаданныеИсточника.ДлинаКода > 0 Тогда + Результат.Код = Эталон.Код; + КонецЕсли; + + Если ИерархическийСправочник Тогда + Результат.Родитель = ПреобразоватьОбщееЗначениеВРазделенное(Эталон.Родитель); + КонецЕсли; + + ИерархияГрупп = МетаданныеПриемника.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов; + + Для Каждого МДРеквизита Из МетаданныеПриемника.Реквизиты Цикл + Если НЕ ИерархияГрупп + ИЛИ МДРеквизита.Использование = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппыИЭлемента + ИЛИ МДРеквизита.Использование = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппы + И Эталон.ЭтоГруппа + ИЛИ МДРеквизита.Использование = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляЭлемента + И НЕ Эталон.ЭтоГруппа Тогда + + Если МетаданныеИсточника.Реквизиты.Найти(МДРеквизита.Имя) <> Неопределено Тогда + Результат[МДРеквизита.Имя] = ПреобразоватьОбщееЗначениеВРазделенное(Эталон[МДРеквизита.Имя]); + Иначе + Результат[МДРеквизита.Имя] = Неопределено; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Для Каждого МДТабличнойЧасти Из МетаданныеПриемника.ТабличныеЧасти Цикл + Если НЕ ИерархияГрупп + ИЛИ МДТабличнойЧасти.Использование = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппыИЭлемента + ИЛИ МДТабличнойЧасти.Использование = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппы + И Эталон.ЭтоГруппа + ИЛИ МДТабличнойЧасти.Использование = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляЭлемента + И НЕ Эталон.ЭтоГруппа Тогда + + Если МетаданныеИсточника.ТабличныеЧасти.Найти(МДТабличнойЧасти.Имя) <> Неопределено Тогда + Результат[МДТабличнойЧасти.Имя].Загрузить( + ЗаменитьОбщиеСсылкиРазделеннымиВТаблице(Эталон[МДТабличнойЧасти.Имя].Выгрузить())); + Иначе + Результат[МДТабличнойЧасти.Имя].Очистить(); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ОбъектПриемник = Результат; + +КонецПроцедуры + +Процедура СкопироватьНаборЗаписейИзЭталона(Эталон, МетаданныеОбъекта, Менеджер, ТипИсточника, ТипПриемника, ОбъектПриемник) + + Результат = Менеджер.СоздатьНаборЗаписей(); + + Для Каждого ЭлементОтбора Из Эталон.Отбор Цикл + Если НЕ ЭлементОтбора.Использование Тогда + Продолжить; + КонецЕсли; + + Результат.Отбор[ЭлементОтбора.Имя].Установить(ПреобразоватьОбщееЗначениеВРазделенное(ЭлементОтбора.Значение)); + КонецЦикла; + + Результат.ОбменДанными.Загрузка = Истина; + + Результат.Загрузить(ЗаменитьОбщиеСсылкиРазделеннымиВТаблице(Эталон.Выгрузить())); + + ОбъектПриемник = Результат; + +КонецПроцедуры + +Процедура ЗагрузитьДанные(Results, НомерЗагрузки) + + ДвоичныеДанные = Results.Data; + СоответствиеВерсийПоставляемыхДанных = ПолучитьСоответствиеВерсийПоставляемыхДанных(Results.SuppliedData); + + ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); + ДвоичныеДанные.Записать(ИмяАрхива); + + ПутьКФайлу = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(ПутьКФайлу); + + Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); + Разархиватор.Извлечь(Разархиватор.Элементы[0], ПутьКФайлу); + Разархиватор.Закрыть(); + + Файлы = НайтиФайлы(ПутьКФайлу, "*"); + Если Файлы.Количество() > 0 Тогда + ЧтениеXML = Новый ЧтениеFastInfoset; + Попытка + ЧтениеXML.ОткрытьФайл(Файлы[0].ПолноеИмя); + + СтароеИмяУзла = ""; + Пока ЧтениеXML.Прочитать() Цикл + ИмяУзла = ЧтениеXML.ЛокальноеИмя; + + Если Найти(ИмяУзла, "CatalogObject.") = 1 Тогда + ЗагрузитьЭлементСправочника(ЧтениеXML, НомерЗагрузки); + ИначеЕсли Найти(ИмяУзла, "InformationRegisterRecordSet.") = 1 Тогда + ЗагрузитьНаборЗаписейРегистраСведений(ЧтениеXML, НомерЗагрузки); + КонецЕсли; + + Если Найти(ИмяУзла, "CatalogObject.") = 1 ИЛИ Найти(ИмяУзла, "InformationRegisterRecordSet.") = 1 Тогда + Если ИмяУзла <> СтароеИмяУзла Тогда + ЗаписатьВерсиюПоставляемыхДанных(СтароеИмяУзла, СоответствиеВерсийПоставляемыхДанных); + СтароеИмяУзла = ИмяУзла; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ЗаписатьВерсиюПоставляемыхДанных(СтароеИмяУзла, СоответствиеВерсийПоставляемыхДанных); + + ЧтениеXML.Закрыть(); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Загрузка поставляемых данных'"), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Попытка + ЧтениеXML.Закрыть(); + УдалитьФайлы(ИмяАрхива); + УдалитьФайлы(ПутьКФайлу); + Исключение + КонецПопытки; + ВызватьИсключение(ТекстОшибки); + КонецПопытки; + КонецЕсли; + + Попытка + УдалитьФайлы(ИмяАрхива); + УдалитьФайлы(ПутьКФайлу); + Исключение + КонецПопытки; + +КонецПроцедуры + +Процедура ЗагрузитьЭлементСправочника(ДанныеДляЧтения, НомерЗагрузки) + + ИмяУзла = ДанныеДляЧтения.ЛокальноеИмя; + + ИмяСправочника = ПоставляемыеДанныеПовтИсп.ПолучитьИмяСправочникаПоИмениУзла(ИмяУзла); + + ЗначенияРеквизитов = Новый Структура; + ТипыРеквизитов = ПоставляемыеДанныеПовтИсп.ПолучитьТипыРеквизитовСправочникаПоИмениУзла(ИмяУзла); + Для Каждого СтрокаСписка Из ТипыРеквизитов Цикл + Если ТипЗнч(СтрокаСписка.Значение.Тип) = Тип("Соответствие") Тогда + ТаблицаЗначенийВложенногоРеквизита = Новый ТаблицаЗначений; + Для Каждого СтрокаВложенногоСписка Из СтрокаСписка.Значение.Тип Цикл + ТаблицаЗначенийВложенногоРеквизита.Колонки.Добавить(СтрокаВложенногоСписка.Ключ); + КонецЦикла; + ЗначенияРеквизитов.Вставить(СтрокаСписка.Ключ, ТаблицаЗначенийВложенногоРеквизита); + Иначе + ЗначенияРеквизитов.Вставить(СтрокаСписка.Ключ); + КонецЕсли; + КонецЦикла; + + ДанныеДляЧтения.Прочитать(); + Пока ДанныеДляЧтения.ЛокальноеИмя <> ИмяУзла Цикл + Если ДанныеДляЧтения.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ТипЗначения = ДанныеДляЧтения.ЗначениеАтрибута("xsi:type"); + ЛокальноеИмя = ДанныеДляЧтения.ЛокальноеИмя; + + ДанныеДляЧтения.Прочитать(); + Если ЗначенияРеквизитов.Свойство(ЛокальноеИмя) Тогда + Если ТипЗнч(ЗначенияРеквизитов[ЛокальноеИмя]) <> Тип("ТаблицаЗначений") Тогда + Если ДанныеДляЧтения.ИмеетЗначение Тогда + Если ЗначенияРеквизитов.Свойство(ЛокальноеИмя) Тогда + Если ТипЗначения = Неопределено Тогда + Значение = XMLЗначение(ТипыРеквизитов[ЛокальноеИмя].Тип, ДанныеДляЧтения.Значение); + Иначе + Значение = XMLЗначение(ИзXMLТипа(ТипЗначения), ДанныеДляЧтения.Значение); + КонецЕсли; + ЗначенияРеквизитов[ЛокальноеИмя] = Значение; + КонецЕсли; + КонецЕсли; + Иначе + ИмяТаблицы = ЛокальноеИмя; + Пока ДанныеДляЧтения.ЛокальноеИмя <> ИмяТаблицы Цикл + Если ДанныеДляЧтения.ТипУзла = ТипУзлаXML.НачалоЭлемента + И ДанныеДляЧтения.ЛокальноеИмя = "Row" Тогда + НоваяСтрока = ЗначенияРеквизитов[ИмяТаблицы].Добавить(); + ДанныеДляЧтения.Прочитать(); + КонецЕсли; + Пока ДанныеДляЧтения.ЛокальноеИмя <> "Row" Цикл + ТипЗначения = ДанныеДляЧтения.ЗначениеАтрибута("xsi:type"); + ЛокальноеИмя = ДанныеДляЧтения.ЛокальноеИмя; + + ДанныеДляЧтения.Прочитать(); + Если ДанныеДляЧтения.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда + ДанныеДляЧтения.Прочитать(); + Продолжить; + КонецЕсли; + Если ТипЗначения = Неопределено Тогда + Значение = XMLЗначение(ТипыРеквизитов[ИмяТаблицы].Тип[ЛокальноеИмя], ДанныеДляЧтения.Значение); + Иначе + Значение = XMLЗначение(ИзXMLТипа(ТипЗначения), ДанныеДляЧтения.Значение); + КонецЕсли; + НоваяСтрока[ЛокальноеИмя] = Значение; + ДанныеДляЧтения.Прочитать(); + ДанныеДляЧтения.Прочитать(); + КонецЦикла; + ДанныеДляЧтения.Прочитать(); + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЕсли; + ДанныеДляЧтения.Прочитать(); + КонецЦикла; + + СправочникОбъект = ЗначенияРеквизитов["Ссылка"].ПолучитьОбъект(); + Если СправочникОбъект = Неопределено Тогда + Если ЗначенияРеквизитов.Свойство("ЭтоГруппа") И ЗначенияРеквизитов.ЭтоГруппа Тогда + СправочникОбъект = Справочники[ИмяСправочника].СоздатьГруппу(); + Иначе + СправочникОбъект = Справочники[ИмяСправочника].СоздатьЭлемент(); + КонецЕсли; + СправочникОбъект.УстановитьСсылкуНового(ЗначенияРеквизитов["Ссылка"]); + КонецЕсли; + Для Каждого ЗначениеРеквизита Из ЗначенияРеквизитов Цикл + Если ЗначениеРеквизита.Ключ = "ЭтоГруппа" + ИЛИ ЗначениеРеквизита.Ключ = "Предопределенный" + ИЛИ ЗначениеРеквизита.Ключ = "Ссылка" Тогда + Продолжить; + КонецЕсли; + Если ТипЗнч(ЗначениеРеквизита.Значение) = Тип("ТаблицаЗначений") Тогда + Если ТипыРеквизитов[ЗначениеРеквизита.Ключ].ИспользованиеРеквизита = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппыИЭлемента + ИЛИ ЗначенияРеквизитов.ЭтоГруппа + И ТипыРеквизитов[ЗначениеРеквизита.Ключ].ИспользованиеРеквизита = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппы + ИЛИ Не ЗначенияРеквизитов.ЭтоГруппа + И ТипыРеквизитов[ЗначениеРеквизита.Ключ].ИспользованиеРеквизита = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляЭлемента Тогда + СправочникОбъект[ЗначениеРеквизита.Ключ].Загрузить(ЗначениеРеквизита.Значение); + КонецЕсли; + Иначе + Если Не ЗначенияРеквизитов.Свойство("ЭтоГруппа") Тогда + СправочникОбъект[ЗначениеРеквизита.Ключ] = ЗначениеРеквизита.Значение; + Иначе + Если ТипыРеквизитов[ЗначениеРеквизита.Ключ].ИспользованиеРеквизита = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппыИЭлемента + ИЛИ ЗначенияРеквизитов.ЭтоГруппа + И ТипыРеквизитов[ЗначениеРеквизита.Ключ].ИспользованиеРеквизита = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппы + ИЛИ Не ЗначенияРеквизитов.ЭтоГруппа + И ТипыРеквизитов[ЗначениеРеквизита.Ключ].ИспользованиеРеквизита = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляЭлемента Тогда + СправочникОбъект[ЗначениеРеквизита.Ключ] = ЗначениеРеквизита.Значение; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + СправочникОбъект.ДополнительныеСвойства.Вставить("НомерЗагрузки", НомерЗагрузки); + СправочникОбъект.Записать(); + +КонецПроцедуры + +Процедура ЗагрузитьНаборЗаписейРегистраСведений(ДанныеДляЧтения, НомерЗагрузки) + + ИмяУзлаНабора = ДанныеДляЧтения.ЛокальноеИмя; + + ИмяРегистра = ПоставляемыеДанныеПовтИсп.ПолучитьИмяРегистраСведенийПоИмениУзла(ИмяУзлаНабора); + ЗначенияРеквизитов = Новый Структура; + ТипыРеквизитов = ПоставляемыеДанныеПовтИсп.ПолучитьТипыРеквизитовРегистраСведенийПоИмениУзла(ИмяУзлаНабора); + Для Каждого СтрокаСписка Из ТипыРеквизитов Цикл + ЗначенияРеквизитов.Вставить(СтрокаСписка.Ключ); + ТипыРеквизитов.Вставить(СтрокаСписка.Ключ, СтрокаСписка.Значение); + КонецЦикла; + + ДанныеДляЧтения.Прочитать(); + НовыйНаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); + Пока ДанныеДляЧтения.ЛокальноеИмя <> ИмяУзлаНабора Цикл + Если ДанныеДляЧтения.ЛокальноеИмя = "Filter" Тогда + ИмяУзла = ДанныеДляЧтения.ЛокальноеИмя; + ДанныеДляЧтения.Прочитать(); + Пока ДанныеДляЧтения.ЛокальноеИмя <> ИмяУзла Цикл + Если ДанныеДляЧтения.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ТипЗначения = ДанныеДляЧтения.ЗначениеАтрибута("xsi:type"); + ЛокальноеИмя = ДанныеДляЧтения.ЛокальноеИмя; + ДанныеДляЧтения.Прочитать(); + Если ТипЗначения = Неопределено Тогда + Значение = XMLЗначение(ТипыРеквизитов[ЛокальноеИмя], ДанныеДляЧтения.Значение); + Иначе + Значение = XMLЗначение(ИзXMLТипа(ТипЗначения), ДанныеДляЧтения.Значение); + КонецЕсли; + Если НовыйНаборЗаписей.Отбор.Найти(ЛокальноеИмя) <> Неопределено Тогда + НовыйНаборЗаписей.Отбор[ЛокальноеИмя].Установить(Значение); + КонецЕсли; + КонецЕсли; + ДанныеДляЧтения.Прочитать(); + КонецЦикла; + ДанныеДляЧтения.Прочитать(); + КонецЕсли; + Если Найти(ДанныеДляЧтения.ЛокальноеИмя, "InformationRegisterRecord.") = 1 Тогда + ИмяУзла = ДанныеДляЧтения.ЛокальноеИмя; + ДанныеДляЧтения.Прочитать(); + Пока ДанныеДляЧтения.ЛокальноеИмя <> ИмяУзла Цикл + Если ДанныеДляЧтения.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ТипЗначения = ДанныеДляЧтения.ЗначениеАтрибута("xsi:type"); + ЛокальноеИмя = ДанныеДляЧтения.ЛокальноеИмя; + ДанныеДляЧтения.Прочитать(); + Если ТипЗначения = Неопределено Тогда + ТипДанных = ТипыРеквизитов[ЛокальноеИмя]; + Значение = XMLЗначение(ТипДанных, ДанныеДляЧтения.Значение); + Иначе + Значение = XMLЗначение(ИзXMLТипа(ТипЗначения), ДанныеДляЧтения.Значение); + КонецЕсли; + Если ЗначенияРеквизитов.Свойство(ЛокальноеИмя) Тогда + ЗначенияРеквизитов[ЛокальноеИмя] = Значение; + КонецЕсли; + КонецЕсли; + ДанныеДляЧтения.Прочитать(); + КонецЦикла; + ДанныеДляЧтения.Прочитать(); + + НоваяЗапись = НовыйНаборЗаписей.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяЗапись, ЗначенияРеквизитов); + Иначе + ДанныеДляЧтения.Прочитать(); + КонецЕсли; + КонецЦикла; + + НовыйНаборЗаписей.ДополнительныеСвойства.Вставить("НомерЗагрузки", НомерЗагрузки); + НовыйНаборЗаписей.Записать(); + +КонецПроцедуры + +Функция ПолучитьСоответствиеВерсийПоставляемыхДанных(TableSuppliedData) + + СоответствиеВерсийПоставляемыхДанных = Новый Соответствие; + + Для каждого SuppliedData Из TableSuppliedData Цикл + СоответствиеВерсийПоставляемыхДанных.Вставить(SuppliedData.Type, SuppliedData.Version); + КонецЦикла; + + Возврат СоответствиеВерсийПоставляемыхДанных; + +КонецФункции + +Процедура ЗаписатьВерсиюПоставляемыхДанных(СтароеИмяУзла, СоответствиеВерсийПоставляемыхДанных) + + Если СтароеИмяУзла = "" Тогда + Возврат; + КонецЕсли; + + РазложенноеИмяУзла = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтароеИмяУзла, "."); + + Если РазложенноеИмяУзла[0] = "CatalogObject" Тогда + ВидПоставляемыхДанных = "Справочник_" + РазложенноеИмяУзла[1]; + ИначеЕсли РазложенноеИмяУзла[0] = "InformationRegisterRecordSet" Тогда + ВидПоставляемыхДанных = "РегистрСведений_" + РазложенноеИмяУзла[1]; + КонецЕсли; + + Если ВидПоставляемыхДанных = Неопределено Тогда + ШаблонСообщения = НСтр("ru = 'При загрузке поставляемых данных из сервиса не определен вид для объекта: %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, РазложенноеИмяУзла[1]); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + МенеджерЗаписи = РегистрыСведений.ВерсииПоставляемыхДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных[ВидПоставляемыхДанных]; + МенеджерЗаписи.ВерсияПоставляемыхДанных = СоответствиеВерсийПоставляемыхДанных.Получить(ВидПоставляемыхДанных); + МенеджерЗаписи.Записать(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы. + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.3.6"; + Обработчик.Процедура = "ПоставляемыеДанные.ИнициализацияПоставляемыхДанныхОбщиеДанные"; + Обработчик.ОбщиеДанные = Истина; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.3.6"; + Обработчик.Процедура = "ПоставляемыеДанные.ИнициализацияПоставляемыхДанных"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.0.1.10"; + Обработчик.Процедура = "ПоставляемыеДанные.ЗаполнитьНаименованияПоКодам"; + Обработчик.ОбщиеДанные = Истина; + +КонецПроцедуры + +// Процедура инициализирует поставляемые данные +// +Процедура ИнициализацияПоставляемыхДанных() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + СоздатьУзелОбластиДанных(ОбластьДанных); + + ТаблицаСоответствия = ОбщегоНазначения.ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(); + Для каждого Строка Из ТаблицаСоответствия Цикл + + Если Строка.КопироватьВоВсеОбластиДанных = Истина Тогда + СписокЭлементов = Новый Массив; + СкопироватьЭлементыСправочника(СписокЭлементов, Строка.ТипОбщихДанных); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +// Процедура инициализирует поставляемые данные +// +Процедура ИнициализацияПоставляемыхДанныхОбщиеДанные() Экспорт + + ЭтотУзел = ПланыОбмена.ИзмененияПоставляемыхДанных.ЭтотУзел().ПолучитьОбъект(); + ЭтотУзел.ОбластьДанных = -1; + ЭтотУзел.Код = "-1"; + ЭтотУзел.Записать(); + +КонецПроцедуры + +// Процедура обновления для плана обмена ИзмененияПоставляемыхДанных. +// Копирует значения стандартного реквизита Код в Наименование, если последний не заполнен. +// +Процедура ЗаполнитьНаименованияПоКодам() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ИзмененияПоставляемыхДанных.Ссылка, + | ИзмененияПоставляемыхДанных.Код + |ИЗ + | ПланОбмена.ИзмененияПоставляемыхДанных КАК ИзмененияПоставляемыхДанных + |ГДЕ + | ИзмененияПоставляемыхДанных.Наименование = """""; + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + ПланОбменаОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ПланОбменаОбъект.Наименование = ПланОбменаОбъект.Код; + ПланОбменаОбъект.Записать(); + КонецЦикла; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ПоставляемыеДанные/ПоставляемыеДанные.mdo b/SSL/src/CommonModules/ПоставляемыеДанные/ПоставляемыеДанные.mdo new file mode 100644 index 000000000..e89557b55 --- /dev/null +++ b/SSL/src/CommonModules/ПоставляемыеДанные/ПоставляемыеДанные.mdo @@ -0,0 +1,12 @@ + + + ПоставляемыеДанные + + ru + Поставляемые данные + + true + true + true + true + diff --git a/SSL/src/CommonModules/ПоставляемыеДанныеКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанныеКлиентСервер/Module.bsl new file mode 100644 index 000000000..468728592 --- /dev/null +++ b/SSL/src/CommonModules/ПоставляемыеДанныеКлиентСервер/Module.bsl @@ -0,0 +1,98 @@ +/////////////////////////////////////////////////////////////////////////////////// +// ПоставляемыеДанныеКлиентСервер: Механизм сервиса поставляемых данных. +// +/////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// Методы обслуживания флага РучноеИзменение в формах разделенных +// поставляемых данных +// +// Единственным параметром всех процедур является +// Форма - УправляемаяФорма элемента +// В форме должны присутствовать следующие реквизиты: +// Объект - объект разделнный поставляемых данных +// РучноеИзменение - Произвольный - состяние разделенного объекта +// относительно общего. Реквизит не должен выводиться на форму. +// ТекстРучногоИзменения - Строка, 0 - текст надписи отображающей +// состояние разделенного объекта относительно общего. +// В форме должны присутствовать следующие кнопки: +// ОбновитьИзКлассификатора +// Изменить +// + +/////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Задает текст состояние разделнного объекта, устанавливает доступность +// кнопок управления состоянием и флага ТолькоПросмотр формы +// +Процедура ОбработатьФлагРучногоИзменения(Знач Форма) Экспорт + + Элементы = Форма.Элементы; + + Если Форма.РучноеИзменение = Неопределено Тогда + Форма.ТекстРучногоИзменения = НСтр("ru = 'Элемент создан вручную. Автоматическое обновление не возможно.'"); + + Элементы.ОбновитьИзКлассификатора.Доступность = Ложь; + Элементы.Изменить.Доступность = Ложь; + Форма.ТолькоПросмотр = Ложь; + ИначеЕсли Форма.РучноеИзменение = Истина Тогда + Форма.ТекстРучногоИзменения = НСтр("ru = 'Автоматическое обновление элемента отключено.'"); + + Элементы.ОбновитьИзКлассификатора.Доступность = Истина; + Элементы.Изменить.Доступность = Ложь; + Форма.ТолькоПросмотр = Ложь; + Иначе + Форма.ТекстРучногоИзменения = НСтр("ru = 'Элемент обновляется автоматически.'"); + + Элементы.ОбновитьИзКлассификатора.Доступность = Ложь; + Элементы.Изменить.Доступность = Истина; + Форма.ТолькоПросмотр = Истина; + КонецЕсли; + +КонецПроцедуры + +#Если Клиент Тогда +// Выдает пользователю вопрос об обновлении из общих данных. +// В случае утвердительного ответа, возвращает Истина. +// +Функция ОбновитьЭлементИзОбщихДанных(Знач Форма) Экспорт + + Текст = НСтр("ru = 'Данные элемента поставляемых данных будут заменены общими данными. + |Все ручные изменения будут потеряны. Продолжить?'"); + Результат = Вопрос(Текст, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + + Если Результат = КодВозвратаДиалога.Да Тогда + Форма.ЗаблокироватьДанныеФормыДляРедактирования(); + Форма.Модифицированность = Истина; + + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +// Выдает пользователю вопрос об отказе от обновлении из общих данных. +// В случае утвердительного ответа, изменяет состояние объекта. +// +Процедура ИзменитьРазделенныйЭлемент(Знач Форма) Экспорт + + Текст = НСтр("ru = 'Поставляемые данные обновляются автоматически. + |После ручного изменения автоматическое обновление этого элемента производиться не будет. + |Продолжить с изменением?'"); + Результат = Вопрос(Текст, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + + Если Результат = КодВозвратаДиалога.Да Тогда + + Форма.ЗаблокироватьДанныеФормыДляРедактирования(); + Форма.Модифицированность = Истина; + + Форма.РучноеИзменение = Истина; + + ОбработатьФлагРучногоИзменения(Форма); + + КонецЕсли; + +КонецПроцедуры +#КонецЕсли diff --git a/SSL/src/CommonModules/ПоставляемыеДанныеКлиентСервер/ПоставляемыеДанныеКлиентСервер.mdo b/SSL/src/CommonModules/ПоставляемыеДанныеКлиентСервер/ПоставляемыеДанныеКлиентСервер.mdo new file mode 100644 index 000000000..bbf9186d3 --- /dev/null +++ b/SSL/src/CommonModules/ПоставляемыеДанныеКлиентСервер/ПоставляемыеДанныеКлиентСервер.mdo @@ -0,0 +1,12 @@ + + + ПоставляемыеДанныеКлиентСервер + + ru + Поставляемые данные клиент сервер + + true + true + true + true + diff --git a/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/Module.bsl new file mode 100644 index 000000000..4a98544dd --- /dev/null +++ b/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/Module.bsl @@ -0,0 +1,77 @@ +/////////////////////////////////////////////////////////////////////////////////// +// ПоставляемыеДанныеПереопределяемый: Механизм сервиса поставляемых данных. +// +/////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Процедура формирует таблицу соответствия разделенных типов данных общим данным +// Рекомендуется использовать процедуру через одноименную функцию в модуле ПоставляемыеДанные +// +// Параметры: +// ТаблицаСоответствия - ТаблицаЗначений - таблица, которую необходимо заполнить соответствиями типов +// +Процедура ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(ТаблицаСоответствия) Экспорт + +КонецПроцедуры + +// Процедура переопределяет действия при подборе поставляемых данных в область данных +// +// Параметры: +// СсылкаОбщихДанных - Ссылка - ссылка на элемент подбираемый в область данных +// +Процедура ПриПодбореПоставляемыхДанныхВОбласть(СсылкаОбщихДанных) Экспорт + +КонецПроцедуры + +// Процедура переопределяет действия при записи нового элемента поставляемых данных +// +// Параметры: +// СсылкаОбщихДанных - Ссылка - ссылка на элемент подбираемый в область данных +// +Процедура ПриРегистрацииНовогоОбъектаПоставляемыхДанных(ЭлементОбщихДанных) Экспорт + +КонецПроцедуры + +// Вызывается при необходимости обновления разделенного набора записей из неразделенного. +// +// Параметры: +// Эталон - РегистрСведенийНаборЗаписей - неразделенный набор записей по которому необходимо +// обновить разделенный. +// ОбъектМД - ОбъектМетаданных - метаданные неразделенного регистра сведений +// Менеджер - РегистрСведенийМенеджер - менджер разделенного регистра сведений +// ТипИсточника - Тип - тип ключа записи неразделенного регистра +// ТипПриемник - Тип - тип ключа записи разделенного регистра +// ОбъектПриемник - РегистрСведенийНаборЗаписей - в случае если в процедуре выполнено +// переопределение стандартного поведения обновления, необходимо присвоить незаписанный +// набор записей этому параметру. +// СтандартнаяОбработка - Булево - в случае если в процедуре выполнено +// переопределение стандартного поведения обновления, необходимо присвоить этому +// параметру значение Ложь. +// +Процедура ПередКопированиемНабораЗаписейИзЭталона(Эталон, ОбъектМД, Менеджер, ТипИсточника, + ТипПриемника, ОбъектПриемник, СтандартаяОбработка) Экспорт + +КонецПроцедуры + +// Вызывается при необходимости обновления разделенного элемента из неразделенного. +// +// Параметры: +// Эталон - СправочникОбъект - неразделенный объект по которому необходимо +// обновить разделенный. +// ОбъектМД - ОбъектМетаданных - метаданные неразделенного справочника +// Менеджер - СправочникМенеджер - менджер разделенного регистра сведений +// ТипИсточника - Тип - тип ссылки неразделенного справочника +// ТипПриемник - Тип - тип ссылки разделенного справочника +// ОбъектПриемник - СправочникОбъект - в случае если в процедуре выполнено +// переопределение стандартного поведения обновления, необходимо присвоить незаписанный +// объект этому параметру. +// СтандартнаяОбработка - Булево - в случае если в процедуре выполнено +// переопределение стандартного поведения обновления, необходимо присвоить этому +// параметру значение Ложь. +// +Процедура ПередКопированиемОбъектаИзЭталона(Эталон, ОбъектМД, Менеджер, ТипИсточника, + ТипПриемника, ОбъектПриемник, СтандартаяОбработка) Экспорт + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/ПоставляемыеДанныеПереопределяемый.mdo b/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/ПоставляемыеДанныеПереопределяемый.mdo new file mode 100644 index 000000000..3191041a5 --- /dev/null +++ b/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/ПоставляемыеДанныеПереопределяемый.mdo @@ -0,0 +1,11 @@ + + + ПоставляемыеДанныеПереопределяемый + + ru + Поставляемые данные переопределяемый + + true + true + true + diff --git a/SSL/src/CommonModules/ПоставляемыеДанныеПовтИсп/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанныеПовтИсп/Module.bsl new file mode 100644 index 000000000..5d4a8efbc --- /dev/null +++ b/SSL/src/CommonModules/ПоставляемыеДанныеПовтИсп/Module.bsl @@ -0,0 +1,232 @@ +/////////////////////////////////////////////////////////////////////////////////// +// ПоставляемыеДанныеПовтИсп: Механизм сервиса поставляемых данных. +// +/////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Функция получает соответствующий узел для области данных +// +// Параметры: +// ОбластьДанных - Число – область данных, для которой необходимо определить узел +// +// Возвращаемое значение: +// Ссылка на узел плана обмена +// +Функция ПолучитьУзелОбластиДанных(ОбластьДанных) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ИзмененияПоставляемыхДанных.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.ИзмененияПоставляемыхДанных КАК ИзмененияПоставляемыхДанных + |ГДЕ + | ИзмененияПоставляемыхДанных.ОбластьДанных = &ОбластьДанных"; + Запрос.УстановитьПараметр("ОбластьДанных", ОбластьДанных); + + УстановитьПривилегированныйРежим(Истина); + Результат = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); + + Если Результат.Пустой() Тогда + ШаблонСообщения = НСтр("ru = 'Не найден узел соответствующий области данных %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ОбластьДанных); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + Возврат Результат.Выгрузить()[0].Ссылка; + +КонецФункции + +// Функция определяет необходимость добавления элемента в области данных +// +// Параметры: +// ПустаяСсылкаТипа – ссылка элемента для копирования +// +// Возвращаемое значение: +// Добавить +// Булево - показатель необходимости добавления элемента в области данных +// +Функция НеобходимоДобавитьЭлементВОбласти(ПустаяСсылкаТипа) Экспорт + + Тип = ТипЗнч(ПустаяСсылкаТипа); + + ТаблицаСоответствия = ОбщегоНазначения.ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(); + + НайденнаяСтрока = ТаблицаСоответствия.Найти(Тип, "ТипОбщихДанных"); + Если НайденнаяСтрока = Неопределено Тогда + ШаблонСообщения = НСтр("ru = 'Не найдена строка соответствия для типа поставляемых данных %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Тип); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + Добавить = НайденнаяСтрока.КопироватьВоВсеОбластиДанных; + + Возврат Добавить; + +КонецФункции + +// Функция получает менеджер объекта +// +// Параметры: +// ПустаяСсылкаТипа – ссылка, по которой определяется менеджер объекта +// +// Возвращаемое значение: +// МенеджерОбъекта +// +Функция ПолучитьМенеджерПоПустойСсылкеТипа(ПустаяСсылкаТипа) Экспорт + + Тип = ТипЗнч(ПустаяСсылкаТипа); + + МетаданныеТипа = Метаданные.НайтиПоТипу(Тип); + + Если Метаданные.Справочники.Содержит(МетаданныеТипа) Тогда + Возврат Справочники[МетаданныеТипа.Имя]; + ИначеЕсли Метаданные.РегистрыСведений.Содержит(МетаданныеТипа) Тогда + Возврат РегистрыСведений[МетаданныеТипа.Имя]; + Иначе + ШаблонСообщения = НСтр("ru='Неподдерживаемый тип: %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Тип); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + +КонецФункции + +// Функция получает тип общих данных по пустой ссылке +// +// Параметры: +// ВидПоставляемыхДанных – значение перечисления, по которому определяется тип общих данных +// +Функция ПолучитьТипОбщихДанныхПоВиду(ВидПоставляемыхДанных) Экспорт + + ТаблицаСоответствия = ОбщегоНазначения.ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(); + + НайденнаяСтрока = ТаблицаСоответствия.Найти(ВидПоставляемыхДанных, "ВидПоставляемыхДанных"); + Если НайденнаяСтрока = Неопределено Тогда + ШаблонСообщения = НСтр("ru = 'Не найден тип поставляемых данных соответствующий виду данных %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ВидПоставляемыхДанных); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + ТипОбщихДанных = НайденнаяСтрока.ТипОбщихДанных; + + Возврат ТипОбщихДанных; + +КонецФункции + +// Возвращает соответствие разделенных типов данных общим +// +// Возвращаемое значение: +// ФиксированноеСоответствие +// Ключ - Тип общих данных +// Значение - Тип Разделенных данных +// +Функция СоответствиеТиповРазделенныхДанныхОбщим() Экспорт + + ТипыПодлежащиеЗамене = Новый Соответствие; + Для каждого СтрокаСоответствия Из ОбщегоНазначения.ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим() Цикл + Если СтрокаСоответствия.ТипРазделенныхДанных <> Неопределено Тогда + ТипыПодлежащиеЗамене.Вставить(СтрокаСоответствия.ТипОбщихДанных, + СтрокаСоответствия.ТипРазделенныхДанных); + КонецЕсли; + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(ТипыПодлежащиеЗамене); + +КонецФункции + +Функция ПолучитьТипыРеквизитовСправочникаПоИмениУзла(ИмяУзла) Экспорт + + ТипыРеквизитов = Новый Структура; + + ТипДанных = ПоставляемыеДанныеПовтИсп.ПолучитьТипОбщихДанныхПоВиду( + XMLЗначение(Тип("ПеречислениеСсылка.ВидыПоставляемыхДанных"), + "Справочник_" + Сред(ИмяУзла,Найти(ИмяУзла, ".")+1))); + Если ТипДанных <> Неопределено Тогда + МетаданныеСправочника = Метаданные.НайтиПоТипу(ТипДанных); + Иначе + МетаданныеСправочника = Метаданные.НайтиПоТипу(ИзXMLТипа(ИмяУзла, "")); + КонецЕсли; + + ИмяСправочника = МетаданныеСправочника.Имя; + Для Каждого Реквизит Из МетаданныеСправочника.СтандартныеРеквизиты Цикл + ТипыРеквизитов.Вставить(Реквизит.Имя, Новый Структура("Тип, ИспользованиеРеквизита", Реквизит.Тип.Типы()[0], Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппыИЭлемента)); + КонецЦикла; + Для Каждого Реквизит Из МетаданныеСправочника.Реквизиты Цикл + ТипыРеквизитов.Вставить(Реквизит.Имя, Новый Структура("Тип, ИспользованиеРеквизита", Реквизит.Тип.Типы()[0], Реквизит.Использование)); + КонецЦикла; + Для Каждого ТабличнаяЧасть Из МетаданныеСправочника.ТабличныеЧасти Цикл + СписокТиповРеквизитовТабличнойЧасти = Новый Соответствие; + Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл + СписокТиповРеквизитовТабличнойЧасти.Вставить(Реквизит.Имя, Реквизит.Тип.Типы()[0]); + КонецЦикла; + ТипыРеквизитов.Вставить(ТабличнаяЧасть.Имя, Новый Структура("Тип, ИспользованиеРеквизита", СписокТиповРеквизитовТабличнойЧасти, ТабличнаяЧасть.Использование)); + КонецЦикла; + + Возврат ТипыРеквизитов; + +КонецФункции + +Функция ПолучитьТипыРеквизитовРегистраСведенийПоИмениУзла(ИмяУзла) Экспорт + + ТипыРеквизитов = Новый Структура; + + ТипДанных = ПоставляемыеДанныеПовтИсп.ПолучитьТипОбщихДанныхПоВиду( + XMLЗначение(Тип("ПеречислениеСсылка.ВидыПоставляемыхДанных"), + "РегистрСведений_" + Метаданные.НайтиПоТипу(ИзXMLТипа(ИмяУзла, "")).Имя)); + Если ТипДанных <> Неопределено Тогда + МетаданныеРегистраСведений = Метаданные.НайтиПоТипу(ТипДанных); + Иначе + МетаданныеРегистраСведений = Метаданные.НайтиПоТипу(ИзXMLТипа(ИмяУзла, "")); + КонецЕсли; + + ИмяРегистраСведений = ПолучитьИмяРегистраСведенийПоИмениУзла(ИмяУзла); + Для Каждого Реквизит Из МетаданныеРегистраСведений.СтандартныеРеквизиты Цикл + ТипыРеквизитов.Вставить(Реквизит.Имя, Реквизит.Тип.Типы()[0]); + КонецЦикла; + Для Каждого Реквизит Из МетаданныеРегистраСведений.Измерения Цикл + ТипыРеквизитов.Вставить(Реквизит.Имя, Реквизит.Тип.Типы()[0]); + КонецЦикла; + Для Каждого Реквизит Из МетаданныеРегистраСведений.Ресурсы Цикл + ТипыРеквизитов.Вставить(Реквизит.Имя, Реквизит.Тип.Типы()[0]); + КонецЦикла; + Для Каждого Реквизит Из МетаданныеРегистраСведений.Реквизиты Цикл + ТипыРеквизитов.Вставить(Реквизит.Имя, Реквизит.Тип.Типы()[0]); + КонецЦикла; + + Возврат ТипыРеквизитов; + +КонецФункции + +Функция ПолучитьИмяСправочникаПоИмениУзла(ИмяУзла) Экспорт + + ТипДанных = ПоставляемыеДанныеПовтИсп.ПолучитьТипОбщихДанныхПоВиду( + XMLЗначение(Тип("ПеречислениеСсылка.ВидыПоставляемыхДанных"), + "Справочник_" + Сред(ИмяУзла,Найти(ИмяУзла, ".")+1))); + Если ТипДанных <> Неопределено Тогда + МетаданныеСправочника = Метаданные.НайтиПоТипу(ТипДанных); + Иначе + МетаданныеСправочника = Метаданные.НайтиПоТипу(ИзXMLТипа(ИмяУзла, "")); + КонецЕсли; + + Возврат МетаданныеСправочника.Имя; + +КонецФункции + +Функция ПолучитьИмяРегистраСведенийПоИмениУзла(ИмяУзла) Экспорт + + ТипДанных = ПоставляемыеДанныеПовтИсп.ПолучитьТипОбщихДанныхПоВиду( + XMLЗначение(Тип("ПеречислениеСсылка.ВидыПоставляемыхДанных"), + "РегистрСведений_" + Метаданные.НайтиПоТипу(ИзXMLТипа(ИмяУзла, "")).Имя)); + Если ТипДанных <> Неопределено Тогда + МетаданныеРегистраСведений = Метаданные.НайтиПоТипу(ТипДанных); + Иначе + МетаданныеРегистраСведений = Метаданные.НайтиПоТипу(ИзXMLТипа(ИмяУзла, "")); + КонецЕсли; + + Возврат МетаданныеРегистраСведений.Имя; + +КонецФункции + diff --git a/SSL/src/CommonModules/ПоставляемыеДанныеПовтИсп/ПоставляемыеДанныеПовтИсп.mdo b/SSL/src/CommonModules/ПоставляемыеДанныеПовтИсп/ПоставляемыеДанныеПовтИсп.mdo new file mode 100644 index 000000000..47da5b014 --- /dev/null +++ b/SSL/src/CommonModules/ПоставляемыеДанныеПовтИсп/ПоставляемыеДанныеПовтИсп.mdo @@ -0,0 +1,12 @@ + + + ПоставляемыеДанныеПовтИсп + + ru + Поставляемые данные повт исп + + true + true + true + DuringRequest + diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектов/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектов/Module.bsl index f5bc989d7..f99930907 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектов/Module.bsl @@ -1,3 +1,13 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Префиксация объектов" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции // Возвращает признак изменения организации или даты объекта // @@ -120,7 +130,8 @@ КонецФункции -// +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции Функция ПериодичностьНомераДокументаГод(МетаданныеОбъекта) diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl index d7a3397c4..c25470fab 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСервер/Module.bsl @@ -1,5 +1,10 @@ //////////////////////////////////////////////////////////////////////////////// -// ФУНКЦИИ ФОРМИРОВАНИЯ НОМЕРА/КОДА ОБЪЕКТА ДЛЯ ВЫВОДА В ПЕЧАТНЫХ ФОРМАХ +// Подсистема "Префиксация объектов" +// Формирование номера/кода объекта для вывода в печатных формах. +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Удаляет префикс информационной базы и префикс организации из переданной строки НомерОбъекта // Переменная НомерОбъекта должна соответствовать шаблону: ООГГ-ХХХ...ХХ или ГГ-ХХХ...ХХ, где @@ -22,6 +27,10 @@ // Функция УдалитьПрефиксыИзНомераОбъекта(Знач НомерОбъекта, УдалитьПрефиксОрганизации = Ложь, УдалитьПрефиксИнформационнойБазы = Ложь) Экспорт + Если Не НомерСодержитСтандартныйПрефикс(НомерОбъекта) Тогда + Возврат НомерОбъекта; + КонецЕсли; + // изначально пустая строка префикса номера объекта ПрефиксОбъекта = ""; @@ -75,12 +84,21 @@ ПользовательскийПрефикс = ПолучитьПользовательскийПрефикс(НомерОбъекта); - Если НомерСодержитПятизначныйПрефикс(НомерОбъекта) Тогда - Префикс = Лев(НомерОбъекта, 5); - Номер = Сред(НомерОбъекта, 6 + СтрДлина(ПользовательскийПрефикс)); + Если НомерСодержитСтандартныйПрефикс(НомерОбъекта) Тогда + + Если НомерСодержитПятизначныйПрефикс(НомерОбъекта) Тогда + Префикс = Лев(НомерОбъекта, 5); + Номер = Сред(НомерОбъекта, 6 + СтрДлина(ПользовательскийПрефикс)); + Иначе + Префикс = Лев(НомерОбъекта, 3); + Номер = Сред(НомерОбъекта, 4 + СтрДлина(ПользовательскийПрефикс)); + КонецЕсли; + Иначе - Префикс = Лев(НомерОбъекта, 3); - Номер = Сред(НомерОбъекта, 4 + СтрДлина(ПользовательскийПрефикс)); + + Префикс = ""; + Номер = Сред(НомерОбъекта, 1 + СтрДлина(ПользовательскийПрефикс)); + КонецЕсли; // удаляем лидирующие нули слева в номере @@ -103,12 +121,21 @@ СтрокаЦифровыхСимволов = "0123456789"; - Если НомерСодержитПятизначныйПрефикс(НомерОбъекта) Тогда - Префикс = Лев(НомерОбъекта, 5); - НомерПолный = Сред(НомерОбъекта, 6); + Если НомерСодержитСтандартныйПрефикс(НомерОбъекта) Тогда + + Если НомерСодержитПятизначныйПрефикс(НомерОбъекта) Тогда + Префикс = Лев(НомерОбъекта, 5); + НомерПолный = Сред(НомерОбъекта, 6); + Иначе + Префикс = Лев(НомерОбъекта, 3); + НомерПолный = Сред(НомерОбъекта, 4); + КонецЕсли; + Иначе - Префикс = Лев(НомерОбъекта, 3); - НомерПолный = Сред(НомерОбъекта, 4); + + Префикс = ""; + НомерПолный = НомерОбъекта; + КонецЕсли; Номер = ""; @@ -144,10 +171,14 @@ // возвращаемое значение функции (пользовательский префикс) Результат = ""; - Если НомерСодержитПятизначныйПрефикс(НомерОбъекта) Тогда - НомерОбъекта = Сред(НомерОбъекта, 6); - Иначе - НомерОбъекта = Сред(НомерОбъекта, 4); + Если НомерСодержитСтандартныйПрефикс(НомерОбъекта) Тогда + + Если НомерСодержитПятизначныйПрефикс(НомерОбъекта) Тогда + НомерОбъекта = Сред(НомерОбъекта, 6); + Иначе + НомерОбъекта = Сред(НомерОбъекта, 4); + КонецЕсли; + КонецЕсли; СтрокаЦифровыхСимволов = "0123456789"; @@ -202,11 +233,20 @@ Возврат НомерОбъекта; КонецФункции -// +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция НомерСодержитПятизначныйПрефикс(НомерОбъекта) +Функция НомерСодержитСтандартныйПрефикс(Знач НомерОбъекта) + + ПозицияРазделителя = Найти(НомерОбъекта, "-"); + + Возврат ПозицияРазделителя = 3 + ИЛИ ПозицияРазделителя = 5 + ; +КонецФункции + +Функция НомерСодержитПятизначныйПрефикс(Знач НомерОбъекта) Возврат Найти(НомерОбъекта, "-") = 5; КонецФункции - diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСерверПереопределяемый/Module.bsl index 711eaddea..ff0328f07 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСерверПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовКлиентСерверПереопределяемый/Module.bsl @@ -1,3 +1,10 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Префиксация объектов" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Обработчик события "При получении номера на печать". // Событие возникает перед стандартной обработкой получения номера. diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl index 1313c602b..710b6e112 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Префиксация объектов" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Возвращает признак наличия в конфигурации функциональной опции ПрефиксыОрганизаций. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl index 24cdd777c..a28359391 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl @@ -1,5 +1,10 @@ //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ВНЕШНИЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Подсистема "Префиксация объектов" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Устанавливает префикс источника подписки в соответствии с префиксом организации. // Источник подписки должен содержать @@ -48,7 +53,8 @@ КонецПроцедуры -// для справочников +//////////////////////////////////////////////////////////////////////////////// +// Для справочников // Выполняет проверку модифицированности реквизита Организация элемента справочника // Если реквизит Организация изменен, то Код элемента обнуляется. @@ -64,7 +70,8 @@ КонецПроцедуры -// для бизнес процессов +//////////////////////////////////////////////////////////////////////////////// +// Для бизнес-процессов // Выполняет проверку модифицированности Даты бизнес процесса // Если дата не входит в предыдущий период, то номер бизнес процесса обнуляется. @@ -94,7 +101,8 @@ КонецПроцедуры -// для документов +//////////////////////////////////////////////////////////////////////////////// +// Для документов // Выполняет проверку модифицированности Даты документа // Если дата не входит в предыдущий период, то номер документа обнуляется. @@ -125,7 +133,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ Процедура УстановитьПрефикс(Источник, Префикс, УстановитьПрефиксИнформационнойБазы, УстановитьПрефиксОрганизации) diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl index 19288c60a..03473685e 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl @@ -1,34 +1,163 @@ //////////////////////////////////////////////////////////////////////////////// -// Экспортные процедуры и функции модуля +// Подсистема "Присоединенные файлы". +// +//////////////////////////////////////////////////////////////////////////////// -// Используется для получения данных файла в различных командах работы с файлами. -// Список получаемых данных можно уточнить в процедуре. -// Параметры -// ПрисоединенныйФайл - ссылка на файл -// УникальныйИдентификатор - уникальный идентификатор формы, используется при получении двоичных данных файла -// ПолучатьСсылкуНаДвоичныеДанные - булево - требуется ли получить ссылку на двоичные данные файла, -// т.к. получение двоичных данных может быть ресурсоемкой операцией, -// необходимо уточнять, нужны ли эти данные на клиенте -// Возвращаемое значение -// Структура с данными файла +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Настраивает форму присоединенного файла ПриСозданииНаСервере. +Процедура ПриСозданииНаСервереПрисоединенныйФайл(Знач Форма) Экспорт + + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Форма.Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если НЕ Форма.Параметры.Свойство("Ключ", Форма.Ключ) Тогда + Форма.Ключ = Форма.Параметры.Key; + КонецЕсли; + + Форма.АвтоЗаголовок = Ложь; + Форма.Заголовок = НСтр("ru = 'Присоединенный файл'"); + + Команда = Форма.Команды.Добавить("ПерейтиКФормеФайла"); + Команда.Действие = "Подключаемый_ПерейтиКФормеФайла"; + + Декорация = Форма.Элементы.Добавить("ПоясняющийТекст", Тип("ДекорацияФормы")); + Декорация.Заголовок = НСтр("ru = 'Для того, чтобы перейти к карточке файла, нажмите на гиперссылку'"); + + Кнопка = Форма.Элементы.Добавить("ПерейтиКФормеФайла1", Тип("КнопкаФормы")); + Кнопка.Вид = ВидКнопкиФормы.Гиперссылка; + Кнопка.Заголовок = НСтр("ru = 'Перейти к форме файла'"); + Кнопка.ИмяКоманды = "ПерейтиКФормеФайла"; + +КонецПроцедуры + +// Возвращает двоичные данные присоединенного файла. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. +// +// Возвращаемое значение: +// ДвоичныеДанные. +// +Функция ПолучитьДвоичныеДанныеФайла(Знач ПрисоединенныйФайл) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + + Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПрисоединенныеФайлы.ПрисоединенныйФайл, + | ПрисоединенныеФайлы.ХранимыйФайл + |ИЗ + | РегистрСведений.ПрисоединенныеФайлы КАК ПрисоединенныеФайлы + |ГДЕ + | ПрисоединенныеФайлы.ПрисоединенныйФайл = &ПрисоединенныйФайл"; + + Запрос.УстановитьПараметр("ПрисоединенныйФайл", ПрисоединенныйФайл); + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + Возврат Выборка.ХранимыйФайл.Получить(); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка открытия файла: файл не найден в информационной базе. + |Обратитесь к администратору. + | + |Файл: ""%1.%2"".'"), + ФайлОбъект.Наименование, + ФайлОбъект.Расширение); + КонецЕсли; + Иначе + ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; + + Попытка + Возврат Новый ДвоичныеДанные(ПолныйПуть) + Исключение + // Запись в журнал регистрации. + СообщениеОбОшибке = ТекстОшибкиПриПолученииФайла(ИнформацияОбОшибке(), ПрисоединенныйФайл); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Получение файла из тома'"), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники[ПрисоединенныйФайл.Метаданные().Имя], + ПрисоединенныйФайл, + СообщениеОбОшибке); + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка открытия файла: файл не найден на сервере. + |Обратитесь к администратору. + | + |Файл: ""%1.%2"".'"), + ФайлОбъект.Наименование, + ФайлОбъект.Расширение); + КонецПопытки; + КонецЕсли; + +КонецФункции + +// Возвращает структуру данных файла. +// Используется в различных командах работы с файлами, +// и как значение параметра ДанныеФайла других процедур и функций. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. +// +// ИдентификаторФормы - УникальныйИдентификатор формы, +// используется при получении двоичных данных файла. +// +// ПолучатьСсылкуНаДвоичныеДанные - Булево - начальное значение Истина, +// если передать Ложь, то ссылка на двоичные данные не будет получена, +// что существенно ускорит выполнение для больших двоичных данных. +// +// Возвращаемое значение: +// Структура со свойствами: +// СсылкаНаДвоичныеДанныеФайла - Строка - адрес во временном хранилище. +// ОтносительныйПуть - Строка. +// ДатаМодификацииУниверсальная - Дата. +// ИмяФайла - Строка. +// Наименование - Строка. +// Расширение - Строка. +// Размер - Число. +// Редактирует - СправочникСсылка.Пользователи. +// ПодписанЭЦП - Булево. +// Зашифрован - Булево. +// ФайлРедактируется - Булево. +// ФайлРедактируетТекущийПользователь - Булево. // -Функция ПолучитьДанныеФайла(ПрисоединенныйФайл, УникальныйИдентификатор = Неопределено, ПолучатьСсылкуНаДвоичныеДанные = Истина) Экспорт +Функция ПолучитьДанныеФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено, Знач ПолучатьСсылкуНаДвоичныеДанные = Истина) Экспорт УстановитьПривилегированныйРежим(Истина); СсылкаНаДвоичныеДанныеФайла = Неопределено; - ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); Если ПолучатьСсылкуНаДвоичныеДанные Тогда Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - МенеджерЗаписи = РегистрыСведений.ПрисоединенныеФайлы.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ПрисоединенныйФайл = ПрисоединенныйФайл; - МенеджерЗаписи.Прочитать(); - ДвоичныеДанные = МенеджерЗаписи.ХранимыйФайл.Получить(); - Если ТипЗнч(УникальныйИдентификатор) = Тип("УникальныйИдентификатор") Тогда - СсылкаНаДвоичныеДанныеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор); + ТекстЗапроса = + "ВЫБРАТЬ + | ПрисоединенныеФайлы.ХранимыйФайл + |ИЗ + | РегистрСведений.ПрисоединенныеФайлы КАК ПрисоединенныеФайлы + |ГДЕ + | ПрисоединенныеФайлы.ПрисоединенныйФайл = &ПрисоединенныйФайл"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ПрисоединенныйФайл", ПрисоединенныйФайл); + + Выборка = Запрос.Выполнить().Выбрать(); + ДвоичныеДанные = Неопределено; + Если Выборка.Следующий() Тогда + ДвоичныеДанные = Выборка.ХранимыйФайл.Получить(); + КонецЕсли; + + Если ТипЗнч(ИдентификаторФормы) = Тип("УникальныйИдентификатор") Тогда + СсылкаНаДвоичныеДанныеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); Иначе СсылкаНаДвоичныеДанныеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные); КонецЕсли; @@ -37,8 +166,8 @@ Попытка ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); - Если ТипЗнч(УникальныйИдентификатор) = Тип("УникальныйИдентификатор") Тогда - СсылкаНаДвоичныеДанныеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор); + Если ТипЗнч(ИдентификаторФормы) = Тип("УникальныйИдентификатор") Тогда + СсылкаНаДвоичныеДанныеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); Иначе СсылкаНаДвоичныеДанныеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные); КонецЕсли; @@ -51,31 +180,32 @@ СообщениеОбОшибке); ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка открытия файла - файл не найден на сервере. Возможно он удален антивирусной программой. Обратитесь к администратору. - | Файл: ""%1.%2""'"), - ФайлОбъект.Наименование, - ФайлОбъект.Расширение); + НСтр("ru = 'Ошибка открытия файла: файл не найден на сервере. + |Возможно файл удален антивирусной программой. + |Обратитесь к администратору. + | + |Файл: ""%1.%2"".'"), + ФайлОбъект.Наименование, + ФайлОбъект.Расширение); КонецПопытки; КонецЕсли; КонецЕсли; - ДополнительнаяИнформация = Новый Структура("СсылкаНаДвоичныеДанныеФайла, ОтносительныйПуть, ДатаМодификацииУниверсальная, ИмяФайла, Наименование, Расширение, Размер, ФайлРедактируется, ФайлРедактируетТекущийПользователь, Зашифрован, Редактирует, ПодписанЭЦП, Зашифрован"); - ДополнительнаяИнформация.СсылкаНаДвоичныеДанныеФайла = СсылкаНаДвоичныеДанныеФайла; - ДополнительнаяИнформация.ОтносительныйПуть = ПолучитьИдентификаторОбъекта(ФайлОбъект.ВладелецФайла) + "\"; - ДополнительнаяИнформация.ДатаМодификацииУниверсальная = ФайлОбъект.ДатаМодификацииУниверсальная; - ДополнительнаяИнформация.ИмяФайла = ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение; - ДополнительнаяИнформация.Наименование = ФайлОбъект.Наименование; - ДополнительнаяИнформация.Расширение = ФайлОбъект.Расширение; - ДополнительнаяИнформация.Размер = ФайлОбъект.Размер; - ДополнительнаяИнформация.Редактирует = ФайлОбъект.Редактирует; - ДополнительнаяИнформация.ПодписанЭЦП = ФайлОбъект.ПодписанЭЦП; - ДополнительнаяИнформация.Зашифрован = ФайлОбъект.Зашифрован; - ДополнительнаяИнформация.ФайлРедактируется = НЕ (ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка()); - ДополнительнаяИнформация.ФайлРедактируетТекущийПользователь = - ?(ДополнительнаяИнформация.ФайлРедактируется, - ФайлОбъект.Редактирует = ОбщегоНазначения.ТекущийПользователь(), - Ложь); + ДополнительнаяИнформация = Новый Структура; + ДополнительнаяИнформация.Вставить("СсылкаНаДвоичныеДанныеФайла", СсылкаНаДвоичныеДанныеФайла); + ДополнительнаяИнформация.Вставить("ОтносительныйПуть", ПолучитьИдентификаторОбъекта(ФайлОбъект.ВладелецФайла) + "\"); + ДополнительнаяИнформация.Вставить("ДатаМодификацииУниверсальная", ФайлОбъект.ДатаМодификацииУниверсальная); + ДополнительнаяИнформация.Вставить("ИмяФайла", ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение); + ДополнительнаяИнформация.Вставить("Наименование", ФайлОбъект.Наименование); + ДополнительнаяИнформация.Вставить("Расширение", ФайлОбъект.Расширение); + ДополнительнаяИнформация.Вставить("Размер", ФайлОбъект.Размер); + ДополнительнаяИнформация.Вставить("Редактирует", ФайлОбъект.Редактирует); + ДополнительнаяИнформация.Вставить("ПодписанЭЦП", ФайлОбъект.ПодписанЭЦП); + ДополнительнаяИнформация.Вставить("Зашифрован", ФайлОбъект.Зашифрован); + ДополнительнаяИнформация.Вставить("ФайлРедактируется", ФайлОбъект.Редактирует <> Справочники.Пользователи.ПустаяСсылка() ); + ДополнительнаяИнформация.Вставить("ФайлРедактируетТекущийПользователь", + ?(ДополнительнаяИнформация.ФайлРедактируется, ФайлОбъект.Редактирует = Пользователи.ТекущийПользователь(), Ложь) ); Если ФайлОбъект.Зашифрован Тогда МассивСертификатовШифрования = Новый Массив; @@ -89,116 +219,177 @@ КонецФункции -// Функция получает последний идентификатор объекта из регистра НаличиеПрисоединенныхФайлов -// инкрементирует его значение на одну единицу и возвращает в качестве результата. -// Возвращаемое значение -// строка (10) - очередной идентификатор объекта +// Заполняет массив ссылками на файлы объекта. // -Функция ПолучитьОчереднойИдентификаторОбъекта() Экспорт +// Параметры: +// Объект - Ссылка на объект, который может содержать присоединенные файлы. +// МассивФайлов - Массив, в который будут добавлены ссылки на файлы объекта. +// +Процедура ПолучитьПрикрепленныеФайлыКОбъекту(Знач Объект, Знач МассивФайлов) Экспорт - ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 - | НаличиеПрисоединенныхФайлов.ИдентификаторОбъекта КАК ИдентификаторОбъекта - |ИЗ - | РегистрСведений.НаличиеПрисоединенныхФайлов КАК НаличиеПрисоединенныхФайлов - |УПОРЯДОЧИТЬ ПО - | ИдентификаторОбъекта УБЫВ"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - РезультатВыполненияЗапроса = Запрос.Выполнить(); - - Если РезультатВыполненияЗапроса.Пустой() Тогда - Возврат "0000000000"; // по длине ресурса ИдентификаторОбъекта - Иначе - Выборка = РезультатВыполненияЗапроса.Выбрать(); - Выборка.Следующий(); - Возврат Инкремент(Выборка.ИдентификаторОбъекта); + ТипыВладельцев = Метаданные.ОбщиеКоманды.ПрисоединенныеФайлыКОбъекту.ТипПараметраКоманды.Типы(); + Если ТипыВладельцев.Найти(ТипЗнч(Объект)) <> Неопределено Тогда + + МассивФайловЛокальный = ПолучитьВсеПодчиненныеФайлы(Объект); + Для Каждого СсылкаНаФайл Из МассивФайловЛокальный Цикл + МассивФайлов.Добавить(СсылкаНаФайл); + КонецЦикла; + КонецЕсли; -КонецФункции +КонецПроцедуры -// Функция возвращает идентификатор владельца присоединенного файла. +// Создает объект в справочнике для хранения файла и заполняет его реквизиты переданными свойствами. // -Функция ПолучитьИдентификаторОбъекта(ВладелецФайлов) Экспорт +// Параметры: +// ВладелецФайла - Ссылка на владелеца файла. +// ИмяБезРасширения - Строка - имя файла без расширения. +// РасширениеБезТочки - Строка - расширение файла (без точки вначале). +// ВремяИзменения - Дата - дата и время изменения файла (местное время). +// ВремяИзмененияУниверсальное - Дата - дата и время изменения файла (UTC+0:00). +// АдресФайлаВоВременномХранилище - Строка - адрес, указывающий на двоичные данные во временном хранилище. +// АдресВременногоХранилищаТекста - Строка - адрес, указывающий на извлеченный текст из файла во временном хранилище. +// +// Возвращаемое значение: +// Ссылка - ссылка на созданный объект. +// +Функция ДобавитьФайл(Знач ВладелецФайла, + Знач ИмяБезРасширения, + Знач РасширениеБезТочки, + Знач ВремяИзменения = Неопределено, + Знач ВремяИзмененияУниверсальное = Неопределено, + Знач АдресФайлаВоВременномХранилище, + Знач АдресВременногоХранилищаТекста = "") Экспорт - ТекстЗапроса = "ВЫБРАТЬ - | ИдентификаторОбъекта - |ИЗ - | РегистрСведений.НаличиеПрисоединенныхФайлов - |ГДЕ - | ОбъектСФайлами = &ОбъектСФайлами"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ОбъектСФайлами", ВладелецФайлов); - РезультатВыполнения = Запрос.Выполнить(); - - Если РезультатВыполнения.Пустой() Тогда - Возврат ""; + Если Не ЗначениеЗаполнено(ВремяИзменения) Тогда + ВремяИзменения = ТекущаяДатаСеанса(); + ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДатаСеанса()); КонецЕсли; - Выборка = РезультатВыполнения.Выбрать(); - Выборка.Следующий(); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилище); - Возврат Выборка.ИдентификаторОбъекта; + ПолноеИмяСправочника = ВладелецФайла.Метаданные().Имя + "ПрисоединенныеФайлы"; + СсылкаНового = Справочники[ПолноеИмяСправочника].ПолучитьСсылку(); + ПрисоединенныйФайл = Справочники[ПолноеИмяСправочника].СоздатьЭлемент(); + ПрисоединенныйФайл.УстановитьСсылкуНового(СсылкаНового); -КонецФункции - -// Используется для инкремента идентификатора. -// Правила инкремента как в обычном сложении - при -// заполнении текущего разряда следующий разряд увеличивается -// на единицу, при этом в текущем разряде значение становится -// равным нулю. Значениями разрядов выступают символы -// [0..9] и [a..z]. Таким образом один разряд может содержать -// 34 значения. -// -Функция Инкремент(знач Строка) + ПрисоединенныйФайл.ВладелецФайла = ВладелецФайла; + ПрисоединенныйФайл.ДатаМодификацииУниверсальная = ВремяИзмененияУниверсальное; + ПрисоединенныйФайл.ДатаСоздания = ТекущаяДатаСеанса(); + ПрисоединенныйФайл.Описание = ""; + ПрисоединенныйФайл.ПодписанЭЦП = Ложь; + ПрисоединенныйФайл.Наименование = ИмяБезРасширения; + ПрисоединенныйФайл.Расширение = РасширениеБезТочки; + ПрисоединенныйФайл.ТипХраненияФайла = ФайловыеФункции.ПолучитьТипХраненияФайлов(); + ПрисоединенныйФайл.Размер = ДвоичныеДанные.Размер(); - Позиция = 10; // 9- индекс 10-го символа + СвояТранзакцияОткрыта = Ложь; + ОперацияЗаписиФайла = Ложь; - Пока Позиция > 0 Цикл - - Символ = Сред(Строка, Позиция, 1); - - Если Символ = "z" Тогда - Строка = Лев(Строка, Позиция-1) + "0" + Прав(Строка, 10 - Позиция); - Позиция = Позиция - 1; - Продолжить; - ИначеЕсли Символ = "9" Тогда - НовыйСимвол = "a"; + Попытка + Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + НачатьТранзакцию(); + СвояТранзакцияОткрыта = Истина; + ЗаписатьФайлВИнформационнуюБазу(СсылкаНового, ДвоичныеДанные); + ПрисоединенныйФайл.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + ПрисоединенныйФайл.ПутьКФайлу = ""; Иначе - НовыйСимвол = Символ(КодСимвола(Символ)+1); + // Добавление в один из томов (где есть свободное место). + ФайловыеФункции.ДобавитьНаДиск( + ДвоичныеДанные, + ПрисоединенныйФайл.ПутьКФайлу, + ПрисоединенныйФайл.Том, + ВремяИзменения, + "", + ИмяБезРасширения, + РасширениеБезТочки, + ПрисоединенныйФайл.Размер, + ПрисоединенныйФайл.Зашифрован); КонецЕсли; - Строка = Лев(Строка, Позиция-1) + НовыйСимвол + Прав(Строка, 10 - Позиция); + СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + ИзвлеченныйТекст = ""; - Прервать; + Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда + ИзвлеченныйТекст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); + СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + + ИначеЕсли НЕ ФайловыеФункции.ФоновоеИзвлечениеТекстовФайловНаСервере() Тогда + // Тексты извлекаются сразу, а не в фоновом задании. + СтатусИзвлеченияТекста = ИзвлечьТекст(ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); + КонецЕсли; - КонецЦикла; + ПрисоединенныйФайл.СтатусИзвлеченияТекста = СтатусИзвлеченияТекста; + ПрисоединенныйФайл.ТекстХранилище = Новый ХранилищеЗначения(ИзвлеченныйТекст); + + ОперацияЗаписиФайла = Истина; + ПрисоединенныйФайл.Записать(); + ОперацияЗаписиФайла = Ложь; + + Если СвояТранзакцияОткрыта Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; - Возврат Строка; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + Если СвояТранзакцияОткрыта Тогда + ОтменитьТранзакцию(); + КонецЕсли; + + ШаблонСообщения = НСтр("ru = 'Ошибка при добавлении присоединенного файла ""%1"": + |%2'"); + КомментарийЖурналаРегистрации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСообщения, + ИмяБезРасширения + "." + РасширениеБезТочки, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Добавление присоединенного файла'"), + УровеньЖурналаРегистрации.Ошибка, , , КомментарийЖурналаРегистрации); + + Если ОперацияЗаписиФайла Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСообщения, + ИмяБезРасширения + "." + РасширениеБезТочки, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Иначе + ВызватьИсключение КомментарийЖурналаРегистрации; + КонецЕсли; + КонецПопытки; + + Возврат ПрисоединенныйФайл.Ссылка; КонецФункции -// Обновляет данные в файле, используется при обновлении двоичных данных. -// Помимо обновления двоичных данных обновляется текст файла, дата модификации, -// и другие, опциональные реквизиты. +// Обновляет свойства файла - двоичные данные, текст, дату изменения, +// а также другие необязательные свойства. // -// Параметры -// ИнформацияОФайле - структура - обязательные поля: -// АдресФайлаВоВременномХранилище -// АдресВременногоХранилищаТекста -// ДатаМодификацииУниверсальная -// необязательные поля: -// Расширение -// Редактирует +// Параметры: +// ИнформацияОФайле - Структура со свойствами: +// <обязательные> +// АдресФайлаВоВременномХранилище - Строка - адрес новых двоичных данных файла. +// АдресВременногоХранилищаТекста - Строка - адрес новых двоичных данных текста, +// извлеченного из файла. +// <необязательные> +// ДатаМодификацииУниверсальная - Дата - дата последнего изменения файла, если +// свойство не указано или не заполнено, тогда будет +// установлена текущая дата сеанса. +// Расширение - Строка - новое расширение файла. +// Редактирует - Ссылка - новый пользователь, редактирующий файл. // -Процедура ОбновитьПрисоединенныйФайл(ПрисоединенныйФайл, ИнформацияОФайле) Экспорт +Процедура ОбновитьПрисоединенныйФайл(Знач ПрисоединенныйФайл, Знач ИнформацияОФайле) Экспорт Перем Отказ; РеквизитыЗначения = Новый Структура; - РеквизитыЗначения.Вставить("ДатаМодификацииУниверсальная", ИнформацияОФайле.ДатаМодификацииУниверсальная); + + Если НЕ ИнформацияОФайле.Свойство("ДатаМодификацииУниверсальная") + ИЛИ НЕ ЗначениеЗаполнено(ИнформацияОФайле.ДатаМодификацииУниверсальная) Тогда + // Заполнение текущей даты в формате универсального времени. + РеквизитыЗначения.Вставить("ДатаМодификацииУниверсальная", УниверсальноеВремя(ТекущаяДатаСеанса())); + Иначе + РеквизитыЗначения.Вставить("ДатаМодификацииУниверсальная", ИнформацияОФайле.ДатаМодификацииУниверсальная); + КонецЕсли; Если ИнформацияОФайле.Свойство("Редактирует") Тогда РеквизитыЗначения.Вставить("Редактирует", ИнформацияОФайле.Редактирует); @@ -216,7 +407,7 @@ Если ЭтоАдресВременногоХранилища(ИнформацияОФайле.АдресВременногоХранилищаТекста) Тогда ИзвлеченныйТекст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(ИнформацияОФайле.АдресВременногоХранилищаТекста); РеквизитыЗначения.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - // + ИначеЕсли НЕ ФайловыеФункции.ФоновоеИзвлечениеТекстовФайловНаСервере() Тогда // Тексты извлекаются сразу, а не в фоновом задании РеквизитыЗначения.СтатусИзвлеченияТекста = ИзвлечьТекст(ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); @@ -228,36 +419,154 @@ КонецПроцедуры -// Обновляет двоичные данные и реквизиты присоединенного файла при окончании редактирования +// Возвращает имя формы объекта присоединенных файлов по владельцу. +Функция ПолучитьИмяФормыОбъектаПрисоединенныхФайловПоВладельцу(Знач ВладелецФайлов) Экспорт + + ПолноеИмяОМ = "Справочник." + ВладелецФайлов.Метаданные().Имя + "ПрисоединенныеФайлы"; + + МетаданныеПрисоединенныхФайлов = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОМ); + + Если МетаданныеПрисоединенныхФайлов.ОсновнаяФормаОбъекта = Неопределено Тогда + ИмяФормы = ПолноеИмяОМ + ".ФормаОбъекта"; + Иначе + ИмяФормы = МетаданныеПрисоединенныхФайлов.ОсновнаяФормаОбъекта.ПолноеИмя(); + КонецЕсли; + + Возврат ИмяФормы; + +КонецФункции + +// Конвертирует файлы из подсистемы Работа с файлами в подсистему Присоединенные файлы. +// +// Для использования в процедурах обновления ИБ, если выполняется переход от использования +// одной подсистемы к другой в каком-либо объекте-владельце файлов. +// Выполняется последовательно для каждого элемента объекта-владельца файлов +// (элемента справочника, ПВХ, документа и т.п.). +// // Параметры: -// ПрисоединенныйФайл - справочник ссылка - ссылка на присоединенный файл -// ИнформацияОФайле - структура, с полями: -// ДатаМодификацииУниверсальная - дата - универсальная дата модификации файла -// АдресФайлаВоВременномХранилище - адрес двоичных данных файла -// АдресВременногоХранилищаТекста - адрес двоичных данных извлеченного текста во временном хранилище +// ВладелецФайлов - Ссылка на владелеца файлов. // -Процедура ПоместитьФайлВХранилищеИОсвободить(ПрисоединенныйФайл, ИнформацияОФайле) Экспорт +Функция СконвертироватьФайлыВПрисоединенные(Знач ВладелецФайлов) Экспорт - ИнформацияОФайле.Вставить("Редактирует", Справочники.Пользователи.ПустаяСсылка()); + УстановитьПривилегированныйРежим(Истина); - ОбновитьПрисоединенныйФайл(ПрисоединенныйФайл, ИнформацияОФайле) + ТекстЗапроса = + "ВЫБРАТЬ + | Файл.Ссылка КАК Ссылка + |ИЗ + | Справочник.Файлы КАК Файл + |ГДЕ + | Файл.ВладелецФайла = &ВладелецФайлов"; -КонецПроцедуры + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.Параметры.Вставить("ВладелецФайлов", ВладелецФайлов); + ФайлыИсточник = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + ПолноеИмяОМ = ВладелецФайлов.Метаданные().ПолноеИмя(); + КраткоеИмяОМ = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмяОМ, ".")[1]; + МенеджерПрисоединенныхФайлов = Справочники[КраткоеИмяОМ + "ПрисоединенныеФайлы"]; + + НачатьТранзакцию(); + + Попытка + + Для Каждого ФайлИсточник Из ФайлыИсточник Цикл + ФайлИсточникОбъект = ФайлИсточник.ПолучитьОбъект(); + ТекущаяВерсияОбъект = ФайлИсточникОбъект.ТекущаяВерсия.ПолучитьОбъект(); + + СсылкаНового = МенеджерПрисоединенныхФайлов.ПолучитьСсылку(); + ПрисоединенныйФайл = МенеджерПрисоединенныхФайлов.СоздатьЭлемент(); + ПрисоединенныйФайл.УстановитьСсылкуНового(СсылкаНового); + + ПрисоединенныйФайл.ВладелецФайла = ВладелецФайлов; + ПрисоединенныйФайл.Наименование = ФайлИсточникОбъект.Наименование; + ПрисоединенныйФайл.Автор = ФайлИсточникОбъект.Автор; + ПрисоединенныйФайл.ДатаМодификацииУниверсальная = ТекущаяВерсияОбъект.ДатаМодификацииУниверсальная; + ПрисоединенныйФайл.ДатаСоздания = ФайлИсточникОбъект.ДатаСоздания; + + ПрисоединенныйФайл.Зашифрован = ФайлИсточникОбъект.Зашифрован; + ПрисоединенныйФайл.Изменил = ТекущаяВерсияОбъект.Автор; + ПрисоединенныйФайл.Описание = ФайлИсточникОбъект.Описание; + ПрисоединенныйФайл.ПодписанЭЦП = ФайлИсточникОбъект.ПодписанЭЦП; + ПрисоединенныйФайл.Размер = ТекущаяВерсияОбъект.Размер; + + ПрисоединенныйФайл.Расширение = ТекущаяВерсияОбъект.Расширение; + ПрисоединенныйФайл.Редактирует = ФайлИсточникОбъект.Редактирует; + ПрисоединенныйФайл.ТекстХранилище = ФайлИсточникОбъект.ТекстХранилище; + ПрисоединенныйФайл.ТипХраненияФайла = ТекущаяВерсияОбъект.ТипХраненияФайла; + ПрисоединенныйФайл.ПометкаУдаления = ФайлИсточникОбъект.ПометкаУдаления; + + // Если файл хранится на томе - делается ссылка на существующий файл. + ПрисоединенныйФайл.Том = ТекущаяВерсияОбъект.Том; + ПрисоединенныйФайл.ПутьКФайлу = ТекущаяВерсияОбъект.ПутьКФайлу; + + Для Каждого СертификатШифрованияСтрока Из ФайлИсточникОбъект.СертификатыШифрования Цикл + НоваяСтрока = ПрисоединенныйФайл.СертификатыШифрования.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СертификатШифрованияСтрока); + КонецЦикла; + + Для Каждого ЭЦПСтрока Из ТекущаяВерсияОбъект.ЭлектронныеЦифровыеПодписи Цикл + НоваяСтрока = ПрисоединенныйФайл.ЭлектронныеЦифровыеПодписи.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭЦПСтрока); + КонецЦикла; + + ПрисоединенныйФайл.Записать(); + + Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + + // "Вычислить" применяется для случая, когда подсистема РаботаСФайлами отсутствует в конфигурации. + ХранилищеФайла = Вычислить("РаботаСФайламиВызовСервера.ПолучитьХранилищеФайлаИзИнформационнойБазы(ТекущаяВерсияОбъект.Ссылка)"); + ДвоичныеДанные = ХранилищеФайла.Получить(); + + МенеджерЗаписи = РегистрыСведений.ПрисоединенныеФайлы.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ПрисоединенныйФайл = СсылкаНового; + МенеджерЗаписи.Прочитать(); + МенеджерЗаписи.ПрисоединенныйФайл = СсылкаНового; + МенеджерЗаписи.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); + МенеджерЗаписи.Записать(); + КонецЕсли; + + ТекущаяВерсияОбъект.ПометкаУдаления = Истина; + ФайлИсточникОбъект.ПометкаУдаления = Истина; + + // Удаление ссылок на том в старом файле, что бы при удалении, файлы остались на месте. + Если ТекущаяВерсияОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + ТекущаяВерсияОбъект.ПутьКФайлу = ""; + ТекущаяВерсияОбъект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + ФайлИсточникОбъект.ТекущаяВерсияПутьКФайлу = ""; + ФайлИсточникОбъект.ТекущаяВерсияТом = ""; + ПометитьНаУдалениеВерсииФайла(ФайлИсточникОбъект.Ссылка, ТекущаяВерсияОбъект.Ссылка); + КонецЕсли; + + ТекущаяВерсияОбъект.ДополнительныеСвойства.Вставить("КонвертацияФайлов", Истина); + ТекущаяВерсияОбъект.Записать(); + + ФайлИсточникОбъект.ДополнительныеСвойства.Вставить("КонвертацияФайлов", Истина); + ФайлИсточникОбъект.Записать(); + + КонецЦикла; + + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ОтменитьТранзакцию(); + ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + + ЗафиксироватьТранзакцию(); + +КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Экспортные функции поддержки согласованного изменения файлов +// Операции с ЭЦП -//////////////////////////////////////////////////////////////////////////////// -// ЭЦП - -// Заносит информацию о одной ЭЦП +// Заносит информацию о одной ЭЦП. // -// Параметры -// ПрисоединенныйФайл - ссылка на файл или файл - объект -// ДанныеПодписи - Структура - информация для занесения в табличную часть -// ЭлектронныеЦифровыеПодписи +// Параметры: +// ПрисоединенныйФайл - Ссылка или Объект присоединенного файла. +// ДанныеПодписи - Структура для заполнения в табличной части ЭлектронныеЦифровыеПодписи. // -Процедура ЗанестиИнформациюОднойПодписи(ПрисоединенныйФайл, ДанныеПодписи) Экспорт +Процедура ЗанестиИнформациюОднойПодписи(Знач ПрисоединенныйФайл, Знач ДанныеПодписи) Экспорт Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ПрисоединенныйФайл)) Тогда СтруктураРеквизитов = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ПрисоединенныйФайл, "Редактирует, Зашифрован"); @@ -278,24 +587,24 @@ КонецЕсли; ЭлектроннаяЦифроваяПодпись.ЗанестиИнформациюОПодписи( - ПрисоединенныйФайл, - ДанныеПодписи.НоваяПодписьДвоичныеДанные, - ДанныеПодписи.Отпечаток, - ДанныеПодписи.ДатаПодписи, - ДанныеПодписи.Комментарий, - ДанныеПодписи.ИмяФайлаПодписи, - ДанныеПодписи.КомуВыданСертификат, - ДанныеПодписи.ДвоичныеДанныеСертификата); + ПрисоединенныйФайл, + ДанныеПодписи.НоваяПодписьДвоичныеДанные, + ДанныеПодписи.Отпечаток, + ДанныеПодписи.ДатаПодписи, + ДанныеПодписи.Комментарий, + ДанныеПодписи.ИмяФайлаПодписи, + ДанныеПодписи.КомуВыданСертификат, + ДанныеПодписи.ДвоичныеДанныеСертификата); КонецПроцедуры -// Заносит информацию о массиве ЭЦП +// Заносит информацию о массиве ЭЦП. // -// Параметры -// МассивПодписей - Массив Структур - информация для занесения в табличную часть -// ЭлектронныеЦифровыеПодписи -// УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы -Процедура ЗанестиИнформациюОПодписях(ПрисоединенныйФайл, МассивПодписей, УникальныйИдентификатор = Неопределено) Экспорт +// Параметры: +// ПрисоединенныйФайл - Ссылка или Объект присоединенного файла. +// МассивПодписей - Массив Структур данных подписей для заполнения в табличной части ЭлектронныеЦифровыеПодписи. +// +Процедура ЗанестиИнформациюОПодписях(Знач ПрисоединенныйФайл, Знач МассивПодписей, Знач ИдентификаторФормы = Неопределено) Экспорт Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ПрисоединенныйФайл)) Тогда ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); @@ -322,30 +631,187 @@ Для Каждого ДанныеПодписи Из МассивПодписей Цикл ЭлектроннаяЦифроваяПодпись.ЗанестиИнформациюОПодписи( - ФайлОбъект, - ДанныеПодписи.НоваяПодписьДвоичныеДанные, - ДанныеПодписи.Отпечаток, - ДанныеПодписи.ДатаПодписи, - ДанныеПодписи.Комментарий, - ДанныеПодписи.ИмяФайлаПодписи, - ДанныеПодписи.КомуВыданСертификат, - ДанныеПодписи.ДвоичныеДанныеСертификата); + ФайлОбъект, + ДанныеПодписи.НоваяПодписьДвоичныеДанные, + ДанныеПодписи.Отпечаток, + ДанныеПодписи.ДатаПодписи, + ДанныеПодписи.Комментарий, + ДанныеПодписи.ИмяФайлаПодписи, + ДанныеПодписи.КомуВыданСертификат, + ДанныеПодписи.ДвоичныеДанныеСертификата); КонецЦикла; - - ФайлОбъект.Записать(); + + ФайлОбъект.Записать(); КонецПроцедуры -// Помещает шифрованные файлы в базу и ставит признак Зашифрован файлу -// Параметры -// ПрисоединенныйФайл - ссылка на файл -// ЗашифрованныеДанные - зашифрованные данные (адрес зашифрованных данных во временном хранилище) -// МассивОтпечатков - массив отпечатков по сертификатам +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Возвращает новый идентификатор объекта. +// Для получения нового идентификатора выбирает последний идентификатор объекта +// из регистра НаличиеПрисоединенныхФайлов увеличивает его значение +// на одну единицу и возвращает полученный результат. +// +// Возвращаемое значение: +// Строка (10) - новый идентификатор объекта. +// +Функция ПолучитьОчереднойИдентификаторОбъекта() + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | НаличиеПрисоединенныхФайлов.ИдентификаторОбъекта КАК ИдентификаторОбъекта + |ИЗ + | РегистрСведений.НаличиеПрисоединенныхФайлов КАК НаличиеПрисоединенныхФайлов + | + |УПОРЯДОЧИТЬ ПО + | ИдентификаторОбъекта УБЫВ"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + РезультатВыполненияЗапроса = Запрос.Выполнить(); + + // Вычисление нового идентификатора объекта. + + Если РезультатВыполненияЗапроса.Пустой() Тогда + Строка = "0000000000"; // По длине ресурса ИдентификаторОбъекта. + Иначе + Выборка = РезультатВыполненияЗапроса.Выбрать(); + Выборка.Следующий(); + Строка = Выборка.ИдентификаторОбъекта; + + // Правила вычисления, как в обычном сложении - при + // заполнении текущего разряда следующий разряд увеличивается + // на единицу, при этом в текущем разряде значение становится + // равным нулю. Значениями разрядов выступают символы + // [0..9] и [a..z]. Таким образом один разряд может содержать + // 34 значения. + + Позиция = 10; // 9- индекс 10-го символа + Пока Позиция > 0 Цикл + + Символ = Сред(Строка, Позиция, 1); + + Если Символ = "z" Тогда + Строка = Лев(Строка, Позиция-1) + "0" + Прав(Строка, 10 - Позиция); + Позиция = Позиция - 1; + Продолжить; + + ИначеЕсли Символ = "9" Тогда + НовыйСимвол = "a"; + Иначе + НовыйСимвол = Символ(КодСимвола(Символ)+1); + КонецЕсли; + + Строка = Лев(Строка, Позиция-1) + НовыйСимвол + Прав(Строка, 10 - Позиция); + Прервать; + КонецЦикла; + КонецЕсли; + + Возврат Строка; + +КонецФункции + +// Возвращает идентификатор владельца присоединенного файла. +Функция ПолучитьИдентификаторОбъекта(Знач ВладелецФайлов) + + ТекстЗапроса = + "ВЫБРАТЬ + | НаличиеПрисоединенныхФайлов.ИдентификаторОбъекта + |ИЗ + | РегистрСведений.НаличиеПрисоединенныхФайлов КАК НаличиеПрисоединенныхФайлов + |ГДЕ + | НаличиеПрисоединенныхФайлов.ОбъектСФайлами = &ОбъектСФайлами"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("ОбъектСФайлами", ВладелецФайлов); + РезультатВыполнения = Запрос.Выполнить(); + + Если РезультатВыполнения.Пустой() Тогда + Возврат ""; + КонецЕсли; + + Выборка = РезультатВыполнения.Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.ИдентификаторОбъекта; + +КонецФункции + +// Обновляет свойства файла при окончании редактирования. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. +// ИнформацияОФайле - Структура со свойствами: +// <обязательные> +// АдресФайлаВоВременномХранилище - Строка - адрес новых двоичных данных файла. +// АдресВременногоХранилищаТекста - Строка - адрес новых двоичных данных текста, +// извлеченного из файла. +// <необязательные> +// ДатаМодификацииУниверсальная - Дата - дата последнего изменения файла, если +// свойство не указано или не заполнено, тогда будет +// установлена текущая дата сеанса. +// Расширение - Строка - новое расширение файла. +// +Процедура ПоместитьФайлВХранилищеИОсвободить(Знач ПрисоединенныйФайл, Знач ИнформацияОФайле) Экспорт + + ИнформацияОФайле.Вставить("Редактирует", Справочники.Пользователи.ПустаяСсылка()); + + ОбновитьПрисоединенныйФайл(ПрисоединенныйФайл, ИнформацияОФайле) + +КонецПроцедуры + +// Отменяет редактирование файла. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка или Объект присоединенного файла, который требуется освободить. +// +Процедура ОсвободитьФайл(Знач ПрисоединенныйФайл) Экспорт + + Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда + ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + ФайлОбъект.Заблокировать(); + Иначе + ФайлОбъект = ПрисоединенныйФайл; + КонецЕсли; + + Если НЕ ФайлОбъект.Редактирует.Пустая() Тогда + ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка(); + ФайлОбъект.Записать(); + Конецесли; + +КонецПроцедуры + +// Отмечает файл, как редактируемый. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка или Объект присоединенного файла, который требуется отметить. +// +Процедура ЗанятьФайлДляРедактированияСервер(Знач ПрисоединенныйФайл) Экспорт + + Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда + ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + ФайлОбъект.Заблокировать(); + Иначе + ФайлОбъект = ПрисоединенныйФайл; + КонецЕсли; + + ФайлОбъект.Редактирует = Пользователи.ТекущийПользователь(); + ФайлОбъект.Записать(); + +КонецПроцедуры + +// Помещает зашифрованные данные файла в хранилище и устанавливает файлу признак Зашифрован. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. +// ЗашифрованныеДанные - Структура со свойством: +// АдресВременногоХранилища - Строка - адрес зашифрованных двоичных данных. +// МассивОтпечатков - Массив Структур отпечатков по сертификатам. // -Процедура Зашифровать(ПрисоединенныйФайл, - ЗашифрованныеДанные, - МассивОтпечатков) Экспорт +Процедура Зашифровать(Знач ПрисоединенныйФайл, Знач ЗашифрованныеДанные, Знач МассивОтпечатков) Экспорт Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); @@ -373,12 +839,14 @@ КонецПроцедуры -// Помещает расшифрованные данные в хранилище и сбрасывает признак Зашифрован к файла. -// Параметры -// ПрисоединенныйФайл - ссылка на присоединенный файл -// РасшифрованныеДанные - адрес расшифрованных данных и извлеченного текста во временном хранилище +// Помещает расшифрованные данные файла в хранилище и снимает файлу признак Зашифрован. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. +// ЗашифрованныеДанные - Структура со свойством: +// АдресВременногоХранилища - Строка - адрес расшифрованных двоичных данных. // -Процедура Расшифровать(ПрисоединенныйФайл, РасшифрованныеДанные) Экспорт +Процедура Расшифровать(Знач ПрисоединенныйФайл, Знач РасшифрованныеДанные) Экспорт Перем Отказ; @@ -401,9 +869,9 @@ Если ЭтоАдресВременногоХранилища(РасшифрованныеДанные.АдресВременногоХранилищаТекста) Тогда ИзвлеченныйТекст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(РасшифрованныеДанные.АдресВременногоХранилищаТекста); СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - // + ИначеЕсли НЕ ФайловыеФункции.ФоновоеИзвлечениеТекстовФайловНаСервере() Тогда - // Тексты извлекаются сразу, а не в фоновом задании + // Тексты извлекаются сразу, а не в фоновом задании. СтатусИзвлеченияТекста = ИзвлечьТекст(ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); КонецЕсли; @@ -420,264 +888,20 @@ КонецПроцедуры -// Используется для отмены редактирования файла. -// Параметры -// ПрисоединенныйФайл - ссылка на файл или файл - объект, который требуется освободить -// -Процедура ОсвободитьФайл(ПрисоединенныйФайл) Экспорт - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда - ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ФайлОбъект.Заблокировать(); - Иначе - ФайлОбъект = ПрисоединенныйФайл; - КонецЕсли; - - Если НЕ ФайлОбъект.Редактирует.Пустая() Тогда - ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка(); - ФайлОбъект.Записать(); - Конецесли; - -КонецПроцедуры - -// Используется для отметки файла как редактируемого. -// Параметры -// ПрисоединенныйФайл - ссылка на файл или файл - объект, который требуется освободить -// -Процедура ЗанятьФайлДляРедактированияСервер(ПрисоединенныйФайл) Экспорт - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда - ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ФайлОбъект.Заблокировать(); - Иначе - ФайлОбъект = ПрисоединенныйФайл; - КонецЕсли; - - ФайлОбъект.Редактирует = ОбщегоНазначения.ТекущийПользователь(); - ФайлОбъект.Записать(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Экспортные процедуры и функции модуля - -// Получает имя формы объекта присоединенных файлов по владельцу файла -// -Функция ПолучитьИмяФормыОбъектаПрисоединенныхФайловПоВладельцу(ВладелецФайла) Экспорт - - ИмяОбъекта = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ВладелецФайла.Метаданные().ПолноеИмя(), ".")[1]; - - ПолноеИмяОМ = "Справочник." + ИмяОбъекта + "ПрисоединенныеФайлы"; - - МетаданныеПрисоединенныхФайлов = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОМ); - - Если МетаданныеПрисоединенныхФайлов.ОсновнаяФормаОбъекта = Неопределено Тогда - ИмяФормы = ПолноеИмяОМ + ".ФормаОбъекта"; - Иначе - ИмяФормы = МетаданныеПрисоединенныхФайлов.ОсновнаяФормаОбъекта.ПолноеИмя(); - КонецЕсли; - - Возврат ИмяФормы; - -КонецФункции - -// Создает объект в справочнике для хранения файлов и заполняет его реквизиты по переданным параметрам. -// -// Параметры: -// ВладелецФайла - ЛюбаяСсылка - владелец файла; -// ИмяБезРасширения - Строка - имя файла без расширения; -// РасширениеБезТочки - Строка - расширение файла (без точки вначале); -// ВремяИзменения - Дата - дата и время изменения файла (местное время); -// ВремяИзмененияУниверсальное - Дата - дата и время изменения файла (UTC+0:00); -// АдресФайлаВоВременномХранилище - Строка - адрес, указывающий на двоичные данные во временном хранилище; -// АдресВременногоХранилищаТекста - Строка - адрес, указывающий на извлеченный текст из файла во временном хранилище. -// -// Возвращаемое значение: -// Ссылка - ссылка на созданный объект. -Функция ДобавитьФайл( - ВладелецФайла, - ИмяБезРасширения, - РасширениеБезТочки, - ВремяИзменения, - ВремяИзмененияУниверсальное, - АдресФайлаВоВременномХранилище, - АдресВременногоХранилищаТекста = "") Экспорт - - ИмяОбъекта = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ВладелецФайла.Метаданные().ПолноеИмя(), ".")[1]; - ПолноеИмяСправочника = ИмяОбъекта+"ПрисоединенныеФайлы"; - СсылкаНового = Справочники[ПолноеИмяСправочника].ПолучитьСсылку(); - ПрисоединенныйФайл = Справочники[ПолноеИмяСправочника].СоздатьЭлемент(); - ПрисоединенныйФайл.УстановитьСсылкуНового(СсылкаНового); - - ПрисоединенныйФайл.ВладелецФайла = ВладелецФайла; - - ПрисоединенныйФайл.ДатаМодификацииУниверсальная = ВремяИзмененияУниверсальное; - ПрисоединенныйФайл.ДатаСоздания = ТекущаяДатаСеанса(); - ПрисоединенныйФайл.Описание = ""; - ПрисоединенныйФайл.ПодписанЭЦП = Ложь; - ПрисоединенныйФайл.Наименование = ИмяБезРасширения; - ПрисоединенныйФайл.Расширение = РасширениеБезТочки; - - - ПрисоединенныйФайл.ТипХраненияФайла = ФайловыеФункции.ПолучитьТипХраненияФайлов(); - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилище); - - ПрисоединенныйФайл.Размер = ДвоичныеДанные.Размер(); - - ТранзакцияАктивна = Ложь; - - Попытка - Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - НачатьТранзакцию(); - ТранзакцияАктивна = Истина; - ЗаписатьФайлВИнформационнуюБазу(СсылкаНового, ДвоичныеДанные); - ПрисоединенныйФайл.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - ПрисоединенныйФайл.ПутьКФайлу = ""; - Иначе - - // добавить в один из томов (где есть свободное место) - ФайловыеФункции.ДобавитьНаДиск(ДвоичныеДанные, ПрисоединенныйФайл.ПутьКФайлу, ПрисоединенныйФайл.Том, ВремяИзменения, "", - ИмяБезРасширения, РасширениеБезТочки, ПрисоединенныйФайл.Размер, ПрисоединенныйФайл.Зашифрован); - - КонецЕсли; - - СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - ИзвлеченныйТекст = ""; - - Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда - ИзвлеченныйТекст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); - СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - // - ИначеЕсли НЕ ФайловыеФункции.ФоновоеИзвлечениеТекстовФайловНаСервере() Тогда - // Тексты извлекаются сразу, а не в фоновом задании - СтатусИзвлеченияТекста = ИзвлечьТекст(ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); - КонецЕсли; - - ПрисоединенныйФайл.СтатусИзвлеченияТекста = СтатусИзвлеченияТекста; - ПрисоединенныйФайл.ТекстХранилище = Новый ХранилищеЗначения(ИзвлеченныйТекст); - - Попытка - ПрисоединенныйФайл.Записать(); - Исключение - - КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ТекстСообщения = НСтр("ru = 'Ошибка при добавлении файла ""%1"": '") + КраткоеПредставлениеОшибки; - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ИмяБезРасширения + "." + РасширениеБезТочки); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); - - Если ТранзакцияАктивна Тогда - ОтменитьТранзакцию(); - КонецЕсли; - - Возврат Неопределено; - КонецПопытки; - - Если ТранзакцияАктивна Тогда - ЗафиксироватьТранзакцию(); - КонецЕсли; - - Исключение - Если ТранзакцияАктивна Тогда - ОтменитьТранзакцию(); - КонецЕсли; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Добавление присоединенного файла'"), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - - Возврат ПрисоединенныйФайл.Ссылка; - -КонецФункции - -// Обновляет сведения о файле -// Параметры -// ПрисоединенныйФайл - файл, сведения о котором необходимо обновить -// Свойства - соответствие - где ключ - свойства файла, значение - новое значение -// -Процедура ОбновитьДанныеФайла(ПрисоединенныйФайл, Свойства) Экспорт - - ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - - Для Каждого ЭлементСвойство Из Свойства Цикл - ПрисоединенныйФайлОбъект[ЭлементСвойство.Ключ] = ЭлементСвойство.Значение; - КонецЦикла; - - ПрисоединенныйФайлОбъект.Записать(); - -КонецПроцедуры - -// Используется в основной форме объекта присоединенного файла -// -Процедура ПриСозданииНаСервереПрисоединенныйФайл(Форма) Экспорт - - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". - Если Форма.Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - Если НЕ Форма.Параметры.Свойство("Ключ", Форма.Ключ) Тогда - Форма.Ключ = Форма.Параметры.Key; - КонецЕсли; - - Форма.АвтоЗаголовок = Ложь; - Форма.Заголовок = НСтр("ru = 'Присоединенный файл'"); - - Команда = Форма.Команды.Добавить("ПерейтиКФормеФайла"); - Команда.Действие = "Подключаемый_ПерейтиКФормеФайла"; - - Декорация = Форма.Элементы.Добавить("ПоясняющийТекст", Тип("ДекорацияФормы")); - Декорация.Заголовок = НСтр("ru = 'Для того, чтобы перейти к карточке файла нажмите на гиперссылку'"); - - Кнопка = Форма.Элементы.Добавить("ПерейтиКФормеФайла1", Тип("КнопкаФормы")); - Кнопка.Вид = ВидКнопкиФормы.Гиперссылка; - Кнопка.Заголовок = НСтр("ru = 'Перейти к форме файла'"); - Кнопка.ИмяКоманды = "ПерейтиКФормеФайла"; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Поддержка функциональности записи информации о наличии (отсутствии) -// присоединенных файлов - -// Используется для установки флага наличия файлов по владельцу -// -Процедура УстановитьФлагНаличияФайла(ВладелецФайла) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - МенеджерЗаписи = РегистрыСведений.НаличиеПрисоединенныхФайлов.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ОбъектСФайлами = ВладелецФайла; - МенеджерЗаписи.Прочитать(); - - Если МенеджерЗаписи.ЕстьФайлы Тогда - Возврат; - КонецЕсли; - - МенеджерЗаписи.ОбъектСФайлами = ВладелецФайла; - МенеджерЗаписи.ЕстьФайлы = Истина; - МенеджерЗаписи.Записать(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Служебные экспортные функции - -// Используется в стандартной форме списка справочника присоединенных файлов -// +// Вызывает исключение в стандартной форме списка справочника присоединенных файлов. Процедура ВызватьИсключениеОткрытияФормы(Форма) Экспорт - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Форма.Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - ВызватьИсключение НСтр("ru = 'Самостоятельное использование формы не предусмотрено'"); + ВызватьИсключение НСтр("ru = 'Самостоятельное использование формы не предусмотрено.'"); КонецПроцедуры -// Используется при размещении файлов из сформированного образа -// -Процедура ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ТипХраненияФайлов, ПрисоединяемыеФайлы) Экспорт +// Размещает файлы из сформированного образа. +Процедура ДобавитьФайлыВТомаПриРазмещении(Знач СоответствиеПутейФайлов, Знач ТипХраненияФайлов, Знач Файлы) Экспорт Для Каждого ЭлементСоответствия Из СоответствиеПутейФайлов Цикл @@ -708,11 +932,11 @@ Продолжить; КонецЕсли; - Если ПрисоединяемыеФайлы.Найти(ТипЗнч(Объект)) = Неопределено Тогда - ПрисоединяемыеФайлы.Добавить(ТипЗнч(Объект)); + Если Файлы.Найти(ТипЗнч(Объект)) = Неопределено Тогда + Файлы.Добавить(ТипЗнч(Объект)); КонецЕсли; - // в базе-приемнике файлы должны храниться в информационной базе - значит там их и разместим (даже если в исходной базе они были в томах) + // Размещение файлов в базе-приемнике внутри базы, независимо от хранения в базе-источнике. Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; @@ -723,7 +947,7 @@ ОбновитьДвоичныеДанныеФайлаНаСервере(Объект, ПоместитьВоВременноеХранилище(ДвоичныеДанные)); - Иначе // в базе-приемнике файлы должны храниться в томах на диске - переместим разархивированный файл на том + Иначе // Размещение файлов в базе-приемнике внутри тома, независимо от хранения в базе-источнике. ФайлИсх = Новый Файл(ПолныйПутьФайлаНаДиске); РазмерФайла = ФайлИсх.Размер(); @@ -739,11 +963,18 @@ ПутьКФайлуНаТоме = ""; СсылкаНаТом = Неопределено; - // добавить в один из томов (где есть свободное место) + // Добавление файла в один из томов (где есть свободное место). - ФайловыеФункции.ДобавитьНаДиск(ПолныйПутьНовый, ПутьКФайлуНаТоме, СсылкаНаТом, - ВремяИзменения, "", - ИмяБезРасширения, Расширение, РазмерФайла, Зашифрован); + ФайловыеФункции.ДобавитьНаДиск( + ПолныйПутьНовый, + ПутьКФайлуНаТоме, + СсылкаНаТом, + ВремяИзменения, + "", + ИмяБезРасширения, + Расширение, + РазмерФайла, + Зашифрован); Объект.ПутьКФайлу = ПутьКФайлуНаТоме; Объект.Том = СсылкаНаТом.Ссылка; @@ -760,53 +991,60 @@ КонецПроцедуры -// Используется при обмене файлами для удаления регистрации изменений в плане обмена. -// Параметры -// ПланОбменаСсылка - ссылка - ссылка на план обмена -// ПрисоединяемыеФайлы - массив типов справочников с присоединенными файлами +// Удаляет регистрацию в плане обмена при обмене файлами. // -Процедура УдалитьРегистрациюИзменений(ПланОбменаСсылка, ПрисоединяемыеФайлы) Экспорт +// Параметры: +// ПланОбменаСсылка - Ссылка на план обмена. +// ТипыФайлов - Массив Типов справочников с присоединенными файлами. +// +Процедура УдалитьРегистрациюИзменений(ПланОбменаСсылка, ТипыФайлов) Экспорт - Для Каждого Тип Из ПрисоединяемыеФайлы Цикл + Для Каждого Тип Из ТипыФайлов Цикл ПланыОбмена.УдалитьРегистрациюИзменений(ПланОбменаСсылка, Метаданные.НайтиПоТипу(Тип)); КонецЦикла; КонецПроцедуры -// Получает двоичные данные файла по ссылке и двоичные подписи из временного хранилища. +// Возвращает свойства присоедиеннного файла - двоичные данные и подпись. // -// Параметры -// ПрисоединенныйФайл - ссылка на присоединенный файл -// АдресПодписи - строка - адрес во временном хранилище подписи +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. +// АдресПодписи - Строка - адрес подписи во временном хранилище. // -// Возвращаемое значение -// структура с полями -// ДвоичныеДанные - двоичные данные присоединенного файла -// ДвоичныеДанныеПодписи - двоичные данные подписи +// Возвращаемое значение: +// Структура со свойствами: +// ДвоичныеДанные - ДвоичныеДанные присоединенного файла. +// ДвоичныеДанныеПодписи - ДвоичныеДанные подписи. // -Функция ПолучитьДвоичныеДанныеФайлаИПодписи(ПрисоединенныйФайл, АдресПодписи) Экспорт +Функция ПолучитьДвоичныеДанныеФайлаИПодписи(Знач ПрисоединенныйФайл, Знач АдресПодписи) Экспорт - СтруктураВозврата = Новый Структура("ДвоичныеДанные, ДвоичныеДанныеПодписи", - ПолучитьДвоичныеДанныеФайла(ПрисоединенныйФайл), - ПолучитьИзВременногоХранилища(АдресПодписи)); + Свойства = Новый Структура; + Свойства.Вставить("ДвоичныеДанные", ПолучитьДвоичныеДанныеФайла(ПрисоединенныйФайл)); + Свойства.Вставить("ДвоичныеДанныеПодписи", ПолучитьИзВременногоХранилища(АдресПодписи)); - Возврат СтруктураВозврата; + Возврат Свойства; КонецФункции -// Используется при для получения запроса к присоединенным файлам с неизвлеченным текстом. -// Запрос формируется по всем справочникам присоединенных файлов. -// При этом в качестве параметра может прийти другой запрос, с которым следует сделать объединение. +// Заполняет текст запроса для получения присоединенных файлов у которых не извлечен текст. +// Текст запроса формируется по всем справочникам присоединенных файлов. В качестве параметра +// может прийти другой запрос, с которым следует сделать объединение. // -// Параметры -// ТекстЗапроса - строка - заполняется добавочный запрос +// Параметры: +// ТекстЗапроса - Строка (возвращаемое значение), варианты передаваемых значений: +// Пустая строка - будет возвращен требуемый текст запроса. +// Непустая строка - будет возвращен требуемый текст запроса, добавленный +// к переданному тексту посредством "ОБЪЕДИНИТЬ ВСЕ". +// +// ПолучитьВсеФайлы - Булево - начальное значение Ложь. Позволяет отключить выборку присоединенных +// файлов по частям, если передать Истина. // -Процедура ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса = Неопределено) Экспорт +Процедура ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса = "", ПолучитьВсеФайлы = Ложь) Экспорт - Если ТекстЗапроса = Неопределено Тогда - ТекстЗапроса = ""; - ИначеЕсли НЕ ПустаяСтрока(ТекстЗапроса) Тогда - ТекстЗапроса = ТекстЗапроса + " + Если НЕ ПустаяСтрока(ТекстЗапроса) Тогда + ТекстЗапроса = ТекстЗапроса + + " + | |ОБЪЕДИНИТЬ ВСЕ |"; КонецЕсли; @@ -818,10 +1056,18 @@ Индекс = 1; Для Каждого Тип Из ТипыВладельцев Цикл + ИмяСправочникаПрисоединенныхФайлов = Метаданные.НайтиПоТипу(Тип).Имя + "ПрисоединенныеФайлы"; - ТекстЗапроса = ТекстЗапроса + ТекстЗапросаДляФайловСНеизвлеченнымТекстом(ИмяСправочникаПрисоединенныхФайлов, ЧислоФайловВВыборке); + + ТекстЗапроса = ТекстЗапроса + ТекстЗапросаДляФайловСНеизвлеченнымТекстом( + ИмяСправочникаПрисоединенныхФайлов, + ЧислоФайловВВыборке, + ПолучитьВсеФайлы); + Если Индекс < ТипыВладельцев.Количество() Тогда - ТекстЗапроса = ТекстЗапроса + " + ТекстЗапроса = ТекстЗапроса + + " + | |ОБЪЕДИНИТЬ ВСЕ |"; КонецЕсли; @@ -830,33 +1076,48 @@ КонецПроцедуры -// Возвращает путь к файлу на диске. Ели файл хранится в информационной базе, +// Возвращает путь к файлу на диске. Если файл хранится в информационной базе, // предварительно сохраняет его. // -// Параметры -// ФайлСсылка - присоединенный файл (ссылка) +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. // -Функция ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлСсылка) Экспорт +// Возвращаемое значение: +// Строка - полный путь к файлу на диске. +// +Функция ПолучитьИмяФайлаСПутемКДвоичнымДанным(Знач ПрисоединенныйФайл) Экспорт - ИмяФайлаСПутем = ""; + ИмяФайлаСПутем = ПолучитьИмяВременногоФайла(ПрисоединенныйФайл.Расширение); - Если ФайлСсылка.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - МенеджерЗаписи = РегистрыСведений.ПрисоединенныеФайлы.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ПрисоединенныйФайл = ФайлСсылка.Ссылка; - МенеджерЗаписи.Прочитать(); - Если Не ЗначениеЗаполнено(МенеджерЗаписи.ПрисоединенныйФайл) Тогда + Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПрисоединенныеФайлы.ПрисоединенныйФайл, + | ПрисоединенныеФайлы.ХранимыйФайл + |ИЗ + | РегистрСведений.ПрисоединенныеФайлы КАК ПрисоединенныеФайлы + |ГДЕ + | ПрисоединенныеФайлы.ПрисоединенныйФайл = &ПрисоединенныйФайл"; + + Запрос.УстановитьПараметр("ПрисоединенныйФайл", ПрисоединенныйФайл.Ссылка); + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + ДвоичныеДанные = Выборка.ХранимыйФайл.Получить(); + ДвоичныеДанные.Записать(ИмяФайлаСПутем); + Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка открытия файла - файл не найден в информационной базе. Обратитесь к администратору. - | Файл: ""%1.%2""'"), - ФайлСсылка.Наименование, - ФайлСсылка.Расширение); + НСтр("ru = 'Ошибка открытия файла: файл не найден в информационной базе. + |Обратитесь к администратору. + | + |Файл: ""%1.%2"".'"), + ПрисоединенныйФайл.Наименование, + ПрисоединенныйФайл.Расширение); КонецЕсли; - ДвоичныеДанные = МенеджерЗаписи.ХранимыйФайл.Получить(); - ИмяФайлаСПутем = ПолучитьИмяВременногоФайла(ФайлСсылка.Расширение); - ДвоичныеДанные.Записать(ИмяФайлаСПутем); Иначе - Если НЕ ФайлСсылка.Том.Пустая() Тогда - ИмяФайлаСПутем = ФайловыеФункции.ПолныйПутьТома(ФайлСсылка.Том) + ФайлСсылка.ПутьКФайлу; + Если НЕ ПрисоединенныйФайл.Том.Пустая() Тогда + ИмяФайлаСПутем = ФайловыеФункции.ПолныйПутьТома(ПрисоединенныйФайл.Том) + ПрисоединенныйФайл.ПутьКФайлу; КонецЕсли; КонецЕсли; @@ -864,10 +1125,10 @@ КонецФункции -// Используется как часть универсального интерфейса при записи -// извлеченного текста в объект -// Параметры -// ФайлОбъект - присоединенный файл (объект) +// Записывает присоединеннный файл в привилегированном режиме. +// +// Параметры: +// ФайлОбъект - Объект присоединенного файла. // Процедура ЗаписатьИзвлеченныйТекст(ФайлОбъект) Экспорт @@ -875,24 +1136,24 @@ Попытка ФайлОбъект.Записать(); - УстановитьПривилегированныйРежим(Ложь); Исключение - УстановитьПривилегированныйРежим(Ложь); ВызватьИсключение; КонецПопытки; КонецПроцедуры -// Возвращает в параметре КоличествоФайловВТомах количество файлов в томах -// +// Заполняет параметр КоличествоФайловВТомах. Процедура ПолучитьКоличествоФайловВТомах(КоличествоФайловВТомах) Экспорт ТипыВладельцев = Метаданные.ОбщиеКоманды.ПрисоединенныеФайлыКОбъекту.ТипПараметраКоманды.Типы(); Для Каждого Тип Из ТипыВладельцев Цикл + ИмяСправочникаПрисоединенныхФайлов = Метаданные.НайтиПоТипу(Тип).Имя + "ПрисоединенныеФайлы"; + Запрос = Новый Запрос; Запрос.Текст = ТекстЗапросаДляФайловВТомах(ИмяСправочникаПрисоединенныхФайлов); + Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда КоличествоФайловВТомах = КоличествоФайловВТомах + Выборка.КоличествоФайлов; @@ -901,9 +1162,39 @@ КонецПроцедуры +// Возвращает количество версий с неизвлеченным текстом. +Функция ПолучитьКоличествоВерсийСНеизвлеченнымТекстом() Экспорт + + КоличествоФайлов = 0; + + ТипыВладельцев = Метаданные.ОбщиеКоманды.ПрисоединенныеФайлыКОбъекту.ТипПараметраКоманды.Типы(); + + Для Каждого Тип Из ТипыВладельцев Цикл + ИмяСправочникаПрисоединенныхФайлов = Метаданные.НайтиПоТипу(Тип).Имя + "ПрисоединенныеФайлы"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапросаДляЧислаФайловСНеизвлеченнымТекстом(ИмяСправочникаПрисоединенныхФайлов); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + КоличествоФайлов = КоличествоФайлов + Выборка.КоличествоФайлов; + КонецЕсли + КонецЦикла; + + Возврат КоличествоФайлов; + +КонецФункции + // Возвращает Истина в параметре ЕстьХранимыеФайлы, если есть хранимые файлы к объекту ВнешнийОбъект. +// Определяет есть ли хранимые файлы у внешнего объекта. +// +// Параметры: +// ВнешнийОбъект - Ссылка на внешний объект. +// ЕстьХранимыеФайлы - Булево (возвращаемое значение), варианты значений параметра: +// Истина - возврат, +// Ложь - устанавливает Истина, если объект имеет хранимые файлы. // -Процедура ОпределитьНаличиеХранимыхФайлов(ВнешнийОбъект, ЕстьХранимыеФайлы) Экспорт +Процедура ОпределитьНаличиеХранимыхФайлов(Знач ВнешнийОбъект, ЕстьХранимыеФайлы) Экспорт Если ЕстьХранимыеФайлы = Истина Тогда Возврат; @@ -916,9 +1207,8 @@ КонецПроцедуры -// Возвращает в параметре ХранимыеФайлы массив хранимых файлов к объекту ВнешнийОбъект. -// -Процедура ПолучитьХранимыеФайлы(ВнешнийОбъект, ХранимыеФайлы) Экспорт +// Заполняет массив ХранимыеФайлы данными хранимых файлов объекта ВнешнийОбъект. +Процедура ПолучитьХранимыеФайлы(Знач ВнешнийОбъект, Знач ХранимыеФайлы) Экспорт ТипыВладельцев = Метаданные.ОбщиеКоманды.ПрисоединенныеФайлыКОбъекту.ТипПараметраКоманды.Типы(); Если ТипыВладельцев.Найти(ТипЗнч(ВнешнийОбъект)) = Неопределено Тогда @@ -927,67 +1217,84 @@ МассивФайлов = ПолучитьВсеПодчиненныеФайлы(ВнешнийОбъект); Для Каждого Файл Из МассивФайлов Цикл - ДанныеФайла = Новый Структура("ДатаМодификацииУниверсальная, Размер, Наименование, Расширение, ДвоичныеДанныеФайла, Текст"); - ДанныеФайла.ДатаМодификацииУниверсальная = Файл.ДатаМодификацииУниверсальная; - ДанныеФайла.Размер = Файл.Размер; - ДанныеФайла.Наименование = Файл.Наименование; - ДанныеФайла.Расширение = Файл.Расширение; - - ДанныеФайла.ДвоичныеДанныеФайла = ПолучитьДанныеФайла(Файл, Неопределено).СсылкаНаДвоичныеДанныеФайла; - ДанныеФайла.Текст = Файл.ТекстХранилище.Получить(); + ДанныеФайла = Новый Структура; + ДанныеФайла.Вставить("ДатаМодификацииУниверсальная", Файл.ДатаМодификацииУниверсальная); + ДанныеФайла.Вставить("Размер", Файл.Размер); + ДанныеФайла.Вставить("Наименование", Файл.Наименование); + ДанныеФайла.Вставить("Расширение", Файл.Расширение); + ДанныеФайла.Вставить("ДвоичныеДанныеФайла", ПолучитьДанныеФайла(Файл, Неопределено).СсылкаНаДвоичныеДанныеФайла); + ДанныеФайла.Вставить("Текст", Файл.ТекстХранилище.Получить()); ХранимыеФайлы.Добавить(ДанныеФайла); - КонецЦикла; + КонецЦикла; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Служебные функции - -Функция ТекстЗапросаДляФайловСНеизвлеченнымТекстом(ИмяСправочника, ЧислоФайловВВыборке) +Функция ТекстЗапросаДляФайловСНеизвлеченнымТекстом(Знач ИмяСправочника, Знач ЧислоФайловВВыборке, Знач ПолучитьВсеФайлы = Ложь) ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ [n] - | ПрисоединенныеФайлы.Ссылка КАК Ссылка, - | ПрисоединенныеФайлы.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, - | ПрисоединенныеФайлы.ТипХраненияФайла КАК ТипХраненияФайла, - | ПрисоединенныеФайлы.Расширение КАК Расширение, - | ПрисоединенныеФайлы.Наименование КАК Наименование - |ИЗ - | Справочник.[ИмяСправочника] КАК ПрисоединенныеФайлы - |ГДЕ - | (ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) - | ИЛИ ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) - | И НЕ ПрисоединенныеФайлы.Зашифрован"; + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ПрисоединенныеФайлы.Ссылка КАК Ссылка, + | ПрисоединенныеФайлы.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, + | ПрисоединенныеФайлы.ТипХраненияФайла КАК ТипХраненияФайла, + | ПрисоединенныеФайлы.Расширение КАК Расширение, + | ПрисоединенныеФайлы.Наименование КАК Наименование + |ИЗ + | &ИмяСправочника КАК ПрисоединенныеФайлы + |ГДЕ + | (ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) + | ИЛИ ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) + | И НЕ ПрисоединенныеФайлы.Зашифрован"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[n]", ЧислоФайловВВыборке); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяСправочника]", ИмяСправочника); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 1", ?( + ПолучитьВсеФайлы, + "", + "ПЕРВЫЕ " + Формат(ЧислоФайловВВыборке, "ЧГ=; ЧН=")) ); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); Возврат ТекстЗапроса; КонецФункции -Функция ТекстЗапросаДляФайловВТомах(ИмяСправочника) +Функция ТекстЗапросаДляФайловВТомах(Знач ИмяСправочника) ТекстЗапроса = - "ВЫБРАТЬ - | ЕСТЬNULL(КОЛИЧЕСТВО(ПрисоединенныеФайлы.Ссылка), 0) КАК КоличествоФайлов - |ИЗ - | Справочник.[ИмяСправочника] КАК ПрисоединенныеФайлы - |ГДЕ - | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске)"; + "ВЫБРАТЬ + | ЕСТЬNULL(КОЛИЧЕСТВО(ПрисоединенныеФайлы.Ссылка), 0) КАК КоличествоФайлов + |ИЗ + | &ИмяСправочника КАК ПрисоединенныеФайлы + |ГДЕ + | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске)"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяСправочника]", ИмяСправочника); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); Возврат ТекстЗапроса; КонецФункции -Процедура ОбновитьДвоичныеДанныеФайлаНаСервере( - ПрисоединенныйФайл, - АдресФайлаВоВременномХранилищеДвоичныеДанные, - РеквизитыЗначения = Неопределено) Экспорт +Функция ТекстЗапросаДляЧислаФайловСНеизвлеченнымТекстом(Знач ИмяСправочника) + + ТекстЗапроса = + "ВЫБРАТЬ + | ЕСТЬNULL(КОЛИЧЕСТВО(ПрисоединенныеФайлы.Ссылка), 0) КАК КоличествоФайлов + |ИЗ + | &ИмяСправочника КАК ПрисоединенныеФайлы + |ГДЕ + | (ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) + | ИЛИ ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) + | И НЕ ПрисоединенныеФайлы.Зашифрован"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); + + Возврат ТекстЗапроса; + +КонецФункции + +Процедура ОбновитьДвоичныеДанныеФайлаНаСервере(Знач ПрисоединенныйФайл, + Знач АдресФайлаВоВременномХранилищеДвоичныеДанные, + Знач РеквизитыЗначения = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -1006,12 +1313,10 @@ ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилищеДвоичныеДанные); КонецЕсли; - ФайлОбъект.Изменил = ОбщегоНазначения.ТекущийПользователь(); + ФайлОбъект.Изменил = Пользователи.ТекущийПользователь(); - Если РеквизитыЗначения <> Неопределено Тогда - Для Каждого КлючЗначение Из РеквизитыЗначения Цикл - ФайлОбъект[КлючЗначение.Ключ] = КлючЗначение.Значение; - КонецЦикла; + Если ТипЗнч(РеквизитыЗначения) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(ФайлОбъект, РеквизитыЗначения); КонецЕсли; ТранзакцияАктивна = Ложь; @@ -1034,17 +1339,26 @@ ФайлНаДиске.УстановитьТолькоЧтение(Ложь); УдалитьФайлы(ПолныйПуть); - ФайловыеФункции.ДобавитьНаДиск(ДвоичныеДанные, ФайлОбъект.ПутьКФайлу, ФайлОбъект.Том, - ФайлОбъект.ДатаМодификацииУниверсальная, "", - ФайлОбъект.Наименование, ФайлОбъект.Расширение, ДвоичныеДанные.Размер(), ФайлОбъект.Зашифрован); + ФайловыеФункции.ДобавитьНаДиск( + ДвоичныеДанные, + ФайлОбъект.ПутьКФайлу, + ФайлОбъект.Том, + ФайлОбъект.ДатаМодификацииУниверсальная, + "", + ФайлОбъект.Наименование, + ФайлОбъект.Расширение, + ДвоичныеДанные.Размер(), + ФайлОбъект.Зашифрован); Исключение - Инфо = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации("Запись файла на диске", - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники[ФайлСсылка.Метаданные().Имя], - ФайлСсылка, - ТекстОшибкиПриСохраненииФайлаВТоме(ПодробноеПредставлениеОшибки(Инфо), ФайлСсылка)); - ВызватьИсключение ТекстОшибкиПриСохраненииФайлаВТоме(КраткоеПредставлениеОшибки(Инфо), ФайлСсылка); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Запись файла на диске'"), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники[ФайлСсылка.Метаданные().Имя], + ФайлСсылка, + ТекстОшибкиПриСохраненииФайлаВТоме(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке), ФайлСсылка)); + + ВызватьИсключение ТекстОшибкиПриСохраненииФайлаВТоме(КраткоеПредставлениеОшибки(ИнформацияОбОшибке), ФайлСсылка); КонецПопытки; КонецЕсли; @@ -1065,98 +1379,56 @@ Если ТранзакцияАктивна Тогда ОтменитьТранзакцию(); КонецЕсли; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление данных присоединенного файла на сервере'"), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Обновление данных присоединенного файла на сервере'"), + УровеньЖурналаРегистрации.Ошибка, + , + , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; КонецПроцедуры -// Записывает двоичные данные файла в информационную базу +// Записывает двоичные данные файла в информационную базу. // -// Параметры -// ПрисоединенныйФайлСсылка - ссылка на присоединенный файл -// ДвоичныеДанные - двоичные данные, которые требуется записать +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. +// ДвоичныеДанные - ДвоичныеДанные, которые требуется записать. // -Процедура ЗаписатьФайлВИнформационнуюБазу(ПрисоединенныйФайлСсылка, ДвоичныеДанные) Экспорт +Процедура ЗаписатьФайлВИнформационнуюБазу(Знач ПрисоединенныйФайл, Знач ДвоичныеДанные) Экспорт УстановитьПривилегированныйРежим(Истина); МенеджерЗаписи = РегистрыСведений.ПрисоединенныеФайлы.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ПрисоединенныйФайл = ПрисоединенныйФайлСсылка; + МенеджерЗаписи.ПрисоединенныйФайл = ПрисоединенныйФайл; МенеджерЗаписи.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); МенеджерЗаписи.Записать(Истина); КонецПроцедуры -// Возвращает двоичные данные присоединенного файла по ссылке -// Параметры -// ПрисоединенныйФайлСсылка - ссылка на присоединенный файл -// -Функция ПолучитьДвоичныеДанныеФайла(ПрисоединенныйФайлСсылка) Экспорт +// Определяет, что к объекту присоединен по крайней мере один файл. +Функция ОбъектИмеетФайлы(Знач ВладелецФайла, Знач ФайлИсключение = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); - ФайлОбъект = ПрисоединенныйФайлСсылка.ПолучитьОбъект(); + ИмяСправочника = ВладелецФайла.Метаданные().Имя + "ПрисоединенныеФайлы"; - Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - МенеджерЗаписи = РегистрыСведений.ПрисоединенныеФайлы.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ПрисоединенныйФайл = ПрисоединенныйФайлСсылка; - МенеджерЗаписи.Прочитать(); - Если Не ЗначениеЗаполнено(МенеджерЗаписи.ПрисоединенныйФайл) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка открытия файла - файл не найден в информационной базе. Обратитесь к администратору. - | Файл: ""%1.%2""'"), - ФайлОбъект.Наименование, - ФайлОбъект.Расширение); - КонецЕсли; - Возврат МенеджерЗаписи.ХранимыйФайл.Получить(); - Иначе - ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; - - Попытка - Возврат Новый ДвоичныеДанные(ПолныйПуть) - Исключение - // запись в журнал регистрации - СообщениеОбОшибке = ТекстОшибкиПриПолученииФайла(ИнформацияОбОшибке(), ПрисоединенныйФайлСсылка); - ЗаписьЖурналаРегистрации("Получение файла из тома", - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники[ПрисоединенныйФайлСсылка.Метаданные().Имя], - ПрисоединенныйФайлСсылка, - СообщениеОбОшибке); - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка открытия файла - файл не найден на сервере. Возможно он удален антивирусной программой. Обратитесь к администратору. - | Файл: ""%1.%2""'"), - ФайлОбъект.Наименование, - ФайлОбъект.Расширение); - КонецПопытки; - КонецЕсли; + ТекстЗапроса = + "ВЫБРАТЬ + | ПрисоединенныеФайлы.Ссылка + |ИЗ + | &ИмяСправочника КАК ПрисоединенныеФайлы + |ГДЕ + | ПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла"; -КонецФункции - -// Проверяет, что к объекту с файлами присоединен по крайней мере один файл -// -Функция ОбъектИмеетФайлы(ВладелецФайла, ФайлИсключение = Неопределено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ИмяОбъекта = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ВладелецФайла.Метаданные().ПолноеИмя(), ".")[1]; - ИмяСправочника = ИмяОбъекта + "ПрисоединенныеФайлы"; - - ТекстЗапроса = - "ВЫБРАТЬ - | Ссылка - |ИЗ - | Справочник.[ИмяСправочникаСФайлами] КАК ПрисоединенныеФайлы - |ГДЕ - | ПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла"; - Если ФайлИсключение <> Неопределено Тогда - ТекстЗапроса = ТекстЗапроса + " - | И ПрисоединенныеФайлы.Ссылка <> &Ссылка"; + ТекстЗапроса = ТекстЗапроса + + " + | И ПрисоединенныеФайлы.Ссылка <> &Ссылка"; КонецЕсли; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяСправочникаСФайлами]", ИмяСправочника); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; @@ -1174,87 +1446,82 @@ КонецФункции -// Получает все присоединенные к владельцу файлы +// Возвращает массив присоединенных файлов для указанного владельца. // -Функция ПолучитьВсеПодчиненныеФайлы(ВладелецФайла) Экспорт +// Параметры: +// ВладелецФайла - Ссылка на владельца присоединенных файлов. +// +// Возвращаемое значение: +// Массив ссылок на присоединенные файлы. +// +Функция ПолучитьВсеПодчиненныеФайлы(Знач ВладелецФайла) Экспорт УстановитьПривилегированныйРежим(Истина); - ИмяОбъекта = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ВладелецФайла.Метаданные().ПолноеИмя(), ".")[1]; - ИмяСправочника = ИмяОбъекта + "ПрисоединенныеФайлы"; + ТекстЗапроса = + "ВЫБРАТЬ + | ПрисоединенныеФайлы.Ссылка + |ИЗ + | &ИмяСправочника КАК ПрисоединенныеФайлы + |ГДЕ + | ПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла"; - ТекстЗапроса = - "ВЫБРАТЬ - | Ссылка - |ИЗ - | Справочник.[ИмяСправочникаСФайлами] КАК ПрисоединенныеФайлы - |ГДЕ - | ПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяСправочникаСФайлами]", ИмяСправочника); + ИмяСправочника = ВладелецФайла.Метаданные().Имя + "ПрисоединенныеФайлы"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.Параметры.Вставить("ВладелецФайла", ВладелецФайла); + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); - Таблица = Запрос.Выполнить().Выгрузить(); - МассивВозврата = Таблица.ВыгрузитьКолонку("Ссылка"); - - Возврат МассивВозврата; + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); КонецФункции -// Возвращает массив ссылок на файлы -Процедура ПолучитьПрикрепленныеФайлыКОбъекту(Объект, МассивФайлов) Экспорт - - ТипыВладельцев = Метаданные.ОбщиеКоманды.ПрисоединенныеФайлыКОбъекту.ТипПараметраКоманды.Типы(); - Если ТипыВладельцев.Найти(ТипЗнч(Объект)) <> Неопределено Тогда - - МассивФайловЛокальный = ПолучитьВсеПодчиненныеФайлы(Объект); - Для Каждого Строка Из МассивФайловЛокальный Цикл - МассивФайлов.Добавить(Строка); - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры - -// Формирует текст сообщения об ошибке, добавляя к нему ссылку на элемент -// справочника - хранимого файла +// Возвращает текст сообщения об ошибке, добавляя к нему ссылку на элемент +// справочника хранимого файла. // -Функция ТекстОшибкиПриПолученииФайла(ИнформацияОбОшибкеФункции, Файл) +Функция ТекстОшибкиПриПолученииФайла(Знач ИнформацияОбОшибке, Знач Файл) - СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибкеФункции); + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); Если Файл <> Неопределено Тогда - СообщениеОбОшибке = СообщениеОбОшибке + Символы.ПС + Нстр("ru = 'Ссылка на файл: '"); - СообщениеОбОшибке = СообщениеОбОшибке + ПолучитьНавигационнуюСсылку(Файл); + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Ссылка на файл: ""%2"".'"), + СообщениеОбОшибке, + ПолучитьНавигационнуюСсылку(Файл) ); КонецЕсли; Возврат СообщениеОбОшибке; КонецФункции -// Формирует текст сообщения об ошибке, добавляя к нему ссылку на элемент -// справочника - хранимого файла +// Возвращает текст сообщения об ошибке, добавляя к нему ссылку на элемент +// справочника хранимого файла. // -Функция ТекстОшибкиПриСохраненииФайлаВТоме(СообщениеОбОшибке, Файл) +Функция ТекстОшибкиПриСохраненииФайлаВТоме(Знач СообщениеОбОшибке, Знач Файл) - СообщениеОбОшибке = Нстр("ru = 'Ошибка, при сохранении файла в томе:'") + " " + СообщениеОбОшибке - + Символы.ПС + Нстр("ru = 'Ссылка на файл: '") + ПолучитьНавигационнуюСсылку(Файл); - - Возврат СообщениеОбОшибке; + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка, при сохранении файла в томе: + |%1 + | + |Ссылка на файл: ""%2"".'"), + СообщениеОбОшибке, + ПолучитьНавигационнуюСсылку(Файл) ); КонецФункции -Функция ИзвлечьТекст(ДвоичныеДанные, Расширение, ИзвлеченныйТекст) +Функция ИзвлечьТекст(Знач ДвоичныеДанные, Знач Расширение, ИзвлеченныйТекст) - Перем Отказ; - - Если ФайловыеФункции.ЭтоПлатформаWindows() И ФайловыеФункции.ФоновоеИзвлечениеТекстовФайловНаСервере() Тогда + Если ФайловыеФункции.ЭтоПлатформаWindows() + И ФайловыеФункции.ФоновоеИзвлечениеТекстовФайловНаСервере() Тогда + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Расширение); ДвоичныеДанные.Записать(ИмяВременногоФайла); + + Отказ = Ложь; ИзвлеченныйТекст = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище(ИмяВременногоФайла, , Отказ); + УдалитьФайлы(ИмяВременногоФайла); Если Отказ Тогда @@ -1269,12 +1536,8 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Служебные экспортные функции поддержки обработчиков событий - -// Обработчик подписки "перед удалением" присоединенного файла -// -Процедура ПередУдалениемПрисоединенногоФайлаСервер(Ссылка, ВладелецФайла, Том, ТипХраненияФайла, ПутьКФайлу) Экспорт +// Обработчик подписки на событие "Перед удалением" присоединенного файла. +Процедура ПередУдалениемПрисоединенногоФайлаСервер(Знач Ссылка, Знач ВладелецФайла, Знач Том, Знач ТипХраненияФайла, Знач ПутьКФайлу) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -1300,7 +1563,7 @@ УдалитьФайлы(ПутьСПодкаталогом); КонецЕсли; Исключение - // если файл не удален, считаем что ошибки не было + // Если файл не удален - ошибки не было. КонецПопытки; КонецЕсли; КонецЕсли; @@ -1340,144 +1603,72 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////// -// Конвертация файлов из подсистемы Работа с файлами в подсистему Присоединенные файлы. - -// Конвертирует файлы из подсистемы Работа с файлами в подсистему Присоединенные файлы. -// -// Для использования в процедурах обновления ИБ, если выполняется переход от использования -// одной подсистемы к другой в каком-либо объекте-владельце файлов. -// Выполняется последовательно для каждого элемента объекта-владельца файлов -// (элемента справочника, ПВХ, документа и т.п.). +// Создает у Получателя копии всех присоединенных файлов Источника. +// Источник и Получатель должны быть объектами одного типа. // // Параметры: -// ВладелецФайловСсылка - ЛюбаяСсылка - ссылка на объект-владелец файлов. +// Источник - Ссылка - объект, имеющий присоединенные файлы для копирования. +// Получатель - Ссылка - объект, к которому копируются присоединенные файлы. // -Функция СконвертироватьФайлыВПрисоединенные(ВладелецФайловСсылка) Экспорт +Процедура СкопироватьПрисоединенныеФайлы(Знач Источник, Знач Получатель) Экспорт - УстановитьПривилегированныйРежим(Истина); - - ТекстЗапроса = "ВЫБРАТЬ - | Файл.Ссылка КАК Ссылка - |ИЗ - | Справочник.Файлы КАК Файл - |ГДЕ - | Файл.ВладелецФайла = &ВладелецФайла"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.Параметры.Вставить("ВладелецФайла", ВладелецФайловСсылка); - ФайлыИсточник = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - - ПолноеИмяОМ = ВладелецФайловСсылка.Метаданные().ПолноеИмя(); - КраткоеИмяОМ = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмяОМ, ".")[1]; - МенеджерПрисоединенныхФайлов = Справочники[КраткоеИмяОМ + "ПрисоединенныеФайлы"]; - - НачатьТранзакцию(); - - Попытка + КопируемыеФайлы = ПолучитьВсеПодчиненныеФайлы(Источник.Ссылка); + Для Каждого КопируемыйФайл Из КопируемыеФайлы Цикл + Если КопируемыйФайл.ПометкаУдаления Тогда + Продолжить; + КонецЕсли; + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(КопируемыйФайл); + КопияФайла = КопируемыйФайл.Скопировать(); + КопияФайлаСсылка = МенеджерОбъекта.ПолучитьСсылку(); + КопияФайла.УстановитьСсылкуНового(КопияФайлаСсылка); + КопияФайла.ВладелецФайла = Получатель.Ссылка; + КопияФайла.Редактирует = Справочники.Пользователи.ПустаяСсылка(); - Для Каждого ФайлИсточник Из ФайлыИсточник Цикл - ФайлИсточникОбъект = ФайлИсточник.ПолучитьОбъект(); - ТекущаяВерсияОбъект = ФайлИсточникОбъект.ТекущаяВерсия.ПолучитьОбъект(); - - СсылкаНового = МенеджерПрисоединенныхФайлов.ПолучитьСсылку(); - ПрисоединенныйФайл = МенеджерПрисоединенныхФайлов.СоздатьЭлемент(); - ПрисоединенныйФайл.УстановитьСсылкуНового(СсылкаНового); - - ПрисоединенныйФайл.ВладелецФайла = ВладелецФайловСсылка; - ПрисоединенныйФайл.Наименование = ФайлИсточникОбъект.Наименование; - ПрисоединенныйФайл.Автор = ФайлИсточникОбъект.Автор; - ПрисоединенныйФайл.ДатаМодификацииУниверсальная = ТекущаяВерсияОбъект.ДатаМодификацииУниверсальная; - ПрисоединенныйФайл.ДатаСоздания = ФайлИсточникОбъект.ДатаСоздания; - - ПрисоединенныйФайл.Зашифрован = ФайлИсточникОбъект.Зашифрован; - ПрисоединенныйФайл.Изменил = ТекущаяВерсияОбъект.Автор; - ПрисоединенныйФайл.Описание = ФайлИсточникОбъект.Описание; - ПрисоединенныйФайл.ПодписанЭЦП = ФайлИсточникОбъект.ПодписанЭЦП; - ПрисоединенныйФайл.Размер = ТекущаяВерсияОбъект.Размер; - - ПрисоединенныйФайл.Расширение = ТекущаяВерсияОбъект.Расширение; - ПрисоединенныйФайл.Редактирует = ФайлИсточникОбъект.Редактирует; - ПрисоединенныйФайл.ТекстХранилище = ФайлИсточникОбъект.ТекстХранилище; - ПрисоединенныйФайл.ТипХраненияФайла = ТекущаяВерсияОбъект.ТипХраненияФайла; - ПрисоединенныйФайл.ПометкаУдаления = ФайлИсточникОбъект.ПометкаУдаления; - - // Если файл хранится на томе - сошлемся на существующий файл - ПрисоединенныйФайл.Том = ТекущаяВерсияОбъект.Том; - ПрисоединенныйФайл.ПутьКФайлу = ТекущаяВерсияОбъект.ПутьКФайлу; - - Для Каждого СертификатШифрованияСтрока Из ФайлИсточникОбъект.СертификатыШифрования Цикл - НоваяСтрока = ПрисоединенныйФайл.СертификатыШифрования.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, СертификатШифрованияСтрока); - КонецЦикла; - - Для Каждого ЭЦПСтрока Из ТекущаяВерсияОбъект.ЭлектронныеЦифровыеПодписи Цикл - НоваяСтрока = ПрисоединенныйФайл.ЭлектронныеЦифровыеПодписи.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭЦПСтрока); - КонецЦикла; - - ПрисоединенныйФайл.Записать(); - - Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - - // "Вычислить" применяется для случая, когда подсистема РаботаСФайлами отсутствует в конфигурации. - ХранилищеФайла = Вычислить("РаботаСФайламиВызовСервера.ПолучитьХранилищеФайлаИзИнформационнойБазы(ТекущаяВерсияОбъект.Ссылка)"); - ДвоичныеДанные = ХранилищеФайла.Получить(); - - МенеджерЗаписи = РегистрыСведений.ПрисоединенныеФайлы.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ПрисоединенныйФайл = СсылкаНового; - МенеджерЗаписи.Прочитать(); - МенеджерЗаписи.ПрисоединенныйФайл = СсылкаНового; - МенеджерЗаписи.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); - МенеджерЗаписи.Записать(); - КонецЕсли; - - ТекущаяВерсияОбъект.ПометкаУдаления = Истина; - ФайлИсточникОбъект.ПометкаУдаления = Истина; - - // Удалим ссылки в старом файле на том, что бы при удалении, - // файлы остались на месте. - Если ТекущаяВерсияОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - ТекущаяВерсияОбъект.ПутьКФайлу = ""; - ТекущаяВерсияОбъект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - ФайлИсточникОбъект.ТекущаяВерсияПутьКФайлу = ""; - ФайлИсточникОбъект.ТекущаяВерсияТом = ""; - ПометитьНаУдалениеВерсииФайла(ФайлИсточникОбъект.Ссылка, ТекущаяВерсияОбъект.Ссылка); - КонецЕсли; - - ТекущаяВерсияОбъект.ДополнительныеСвойства.Вставить("КонвертацияФайлов", Истина); - ТекущаяВерсияОбъект.Записать(); - - ФайлИсточникОбъект.ДополнительныеСвойства.Вставить("КонвертацияФайлов", Истина); - ФайлИсточникОбъект.Записать(); - + КопияФайла.ТекстХранилище = Новый ХранилищеЗначения(КопируемыйФайл.ТекстХранилище.Получить()); + КопияФайла.ФайлХранилище = Новый ХранилищеЗначения(КопируемыйФайл.ФайлХранилище.Получить()); + + КопияФайла.ЭлектронныеЦифровыеПодписи.Очистить(); + Для Каждого КопируемаяСтрокаТаблицы Из КопируемыйФайл.ЭлектронныеЦифровыеПодписи Цикл + КопияСтрокиТаблицы = КопияФайла.ЭлектронныеЦифровыеПодписи.Добавить(); + ЗаполнитьЗначенияСвойств(КопияСтрокиТаблицы, КопируемаяСтрокаТаблицы); + КопияСтрокиТаблицы.Подпись = КопируемаяСтрокаТаблицы.Подпись; + КопияСтрокиТаблицы.Сертификат = КопируемаяСтрокаТаблицы.Сертификат; КонецЦикла; - Исключение - Инфо = ИнформацияОбОшибке(); - ОтменитьТранзакцию(); - УстановитьПривилегированныйРежим(Ложь); - ВызватьИсключение ПодробноеПредставлениеОшибки(Инфо); - КонецПопытки; + КопияФайла.СертификатыШифрования.Очистить(); + Для Каждого КопируемаяСтрокаТаблицы Из КопируемыйФайл.СертификатыШифрования Цикл + КопияСтрокиТаблицы = КопияФайла.СертификатыШифрования.Добавить(); + ЗаполнитьЗначенияСвойств(КопияСтрокиТаблицы, КопируемаяСтрокаТаблицы); + КопияСтрокиТаблицы.Сертификат = КопируемаяСтрокаТаблицы.Сертификат; + КонецЦикла; + + ДвоичныеДанные = ПолучитьДвоичныеДанныеФайла(КопируемыйФайл); + КопияФайла.ТипХраненияФайла = ФайловыеФункции.ПолучитьТипХраненияФайлов(); + Если ФайловыеФункции.ПолучитьТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + ЗаписатьФайлВИнформационнуюБазу(КопияФайлаСсылка, ДвоичныеДанные); + Иначе + // добавить в один из томов (где есть свободное место) + ФайловыеФункции.ДобавитьНаДиск(ДвоичныеДанные, КопияФайла.ПутьКФайлу, КопияФайла.Том, + КопияФайла.ДатаМодификацииУниверсальная, "", + КопияФайла.Наименование, КопияФайла.Расширение, КопияФайла.Размер); + КонецЕсли; + КопияФайла.Записать(); + КонецЦикла; - ЗафиксироватьТранзакцию(); - - УстановитьПривилегированныйРежим(Ложь); - -КонецФункции +КонецПроцедуры -Процедура ПометитьНаУдалениеВерсииФайла(ФайлСсылка, ВерсияИсключение) +// Переносит файлы из "Работы с файлами" в "Присоединенные файлы". +Процедура ПометитьНаУдалениеВерсииФайла(Знач ФайлСсылка, Знач ВерсияИсключение) - ТекстЗапроса = " - |ВЫБРАТЬ - | ВерсииФайлов.Ссылка КАК Ссылка - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.Владелец = &Владелец - | И НЕ ВерсииФайлов.ПометкаУдаления - | И ВерсииФайлов.Ссылка <> &Исключение"; + ТекстЗапроса = + "ВЫБРАТЬ + | ВерсииФайлов.Ссылка КАК Ссылка + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | ВерсииФайлов.Владелец = &Владелец + | И НЕ ВерсииФайлов.ПометкаУдаления + | И ВерсииФайлов.Ссылка <> &Исключение"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; @@ -1495,4 +1686,3 @@ КонецЦикла; КонецПроцедуры - diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl index 75fc6c513..e5f124253 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl @@ -1,188 +1,23 @@ //////////////////////////////////////////////////////////////////////////////// -// Интерфейсные функции модуля, реализующие основные функции -// для пользователя при работе со списком присоединенных файлов. -// Это прежде всего команды (такие как Добавить файлы, Открыть, Редактировать). +// Подсистема "Присоединенные файлы". // +//////////////////////////////////////////////////////////////////////////////// -// Процедура для обработки команды добавления файлов. Пользователь выбирает -// файлы в диалоге выбора файлов и система пытается поместить их в хранилище файлов, -// если это возможно (если удовлетворяются: условия максимально допустимого размера, -// имеет допустимое расширение, наличие свободного места в томе, при хранении файлов -// в томах, а так же возможны другие условия). +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Открывает файл для просмотра или редактирования. +// Если файл открывается для просмотра, тогда получает файл в рабочий каталог пользователя, +// при этом ищет файл в рабочем каталоге и предлагает открыть существующий или +// получить файл с сервера. +// Если файл открывается для редактирования, тогда открывает файл в рабочем каталоге (если есть) или +// получает его с сервера. // // Параметры: -// ВладелецФайла - любая ссылка - владелец файла -// УникальныйИдентификатор - уникальный идентификатор формы -// Фильтр - Строка - необязательный параметр, -// позволяет задать фильтр выбираемого файла, -// например, картинки для номенклатуры +// ДанныеФайла - Структура - данные файла. +// ДляРедактирования - Булево - истина, если файл открывается для редактирования, иначе ложь. // -Процедура ДобавитьФайлы(ВладелецФайла, УникальныйИдентификатор, Фильтр = "") Экспорт - - ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); - - НастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); - - Если ПодключитьРасширениеРаботыСФайлами() Тогда - - ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - ВыборФайла.МножественныйВыбор = Истина; - ВыборФайла.Заголовок = НСтр("ru = 'Выбор файла'"); - ВыборФайла.Фильтр = ?(ЗначениеЗаполнено(Фильтр), Фильтр, НСтр("ru = 'Все файлы (*.*)|*.*'")); - - Если ВыборФайла.Выбрать() Тогда - ПрисоединенныеФайлыМассив = Новый Массив; - ПоместитьВыбранныеФайлыВХранилище(ВыборФайла.ВыбранныеФайлы, ВладелецФайла, - НастройкиРаботыСФайлами, - ПрисоединенныеФайлыМассив, - УникальныйИдентификатор); - - Если ПрисоединенныеФайлыМассив.Количество() = 1 Тогда - ПрисоединенныйФайл = ПрисоединенныеФайлыМассив[0]; - - ПоказатьОповещениеПользователя( - НСтр("ru = 'Создание:'"), - ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл), - ПрисоединенныйФайл, - БиблиотекаКартинок.Информация32); - - ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", - Новый Структура("ПрисоединенныйФайл, ЭтоНовый", ПрисоединенныйФайл, Истина),, - ПрисоединенныйФайл); - КонецЕсли; - - Если ПрисоединенныеФайлыМассив.Количество() > 0 Тогда - ОповеститьОбИзменении(ПрисоединенныеФайлыМассив[0]); - Оповестить("Запись_ПрисоединенныйФайл", Новый Структура("ЭтоНовый", Истина), - ПрисоединенныеФайлыМассив); - КонецЕсли; - - КонецЕсли; - - Иначе // Если веб-клиент без подключенного расширения -#Если ВебКлиент Тогда - ПрисоединенныйФайл = ПоместитьВыбранныеФайлыВХранилищеВеб(ВладелецФайла, НастройкиРаботыСФайлами, УникальныйИдентификатор); - - Если ПрисоединенныйФайл <> Неопределено Тогда - ПоказатьОповещениеПользователя( - НСтр("ru = 'Создание'"), - ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл), - ПрисоединенныйФайл, - БиблиотекаКартинок.Информация32); - ОповеститьОбИзменении(ПрисоединенныйФайл); - ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", - Новый Структура("ПрисоединенныйФайл", ПрисоединенныйФайл),, ПрисоединенныйФайл); - КонецЕсли; -#КонецЕсли - КонецЕсли; - -КонецПроцедуры - -// Процедура для обработки перетаскивания в список файлов. -// Передаваемые параметры: -// ВладелецФайла - любая ссылка - владелец файла -// УникальныйИдентификатор - уникальный идентификатор формы -// МассивИменФайлов - массив строк - путей к файлам -// -Процедура ДобавитьФайлыПеретаскиванием(ВладелецФайла, УникальныйИдентификатор, МассивИменФайлов) Экспорт - - НастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); - - ПрисоединенныеФайлыМассив = Новый Массив; - ПоместитьВыбранныеФайлыВХранилище(МассивИменФайлов, ВладелецФайла, - НастройкиРаботыСФайлами, - ПрисоединенныеФайлыМассив, - УникальныйИдентификатор); - - Если ПрисоединенныеФайлыМассив.Количество() = 1 Тогда - ПрисоединенныйФайл = ПрисоединенныеФайлыМассив[0]; - - ПоказатьОповещениеПользователя( - НСтр("ru = 'Создание'"), - ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл), - ПрисоединенныйФайл, - БиблиотекаКартинок.Информация32); - - ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", - Новый Структура("ПрисоединенныйФайл, ЭтоНовый", ПрисоединенныйФайл, Истина),, - ПрисоединенныйФайл); - КонецЕсли; - - Если ПрисоединенныеФайлыМассив.Количество() > 0 Тогда - ОповеститьОбИзменении(ПрисоединенныеФайлыМассив[0]); - Оповестить("Запись_ПрисоединенныйФайл", Новый Структура("ЭтоНовый", Истина), - ПрисоединенныеФайлыМассив); - КонецЕсли; - -КонецПроцедуры - -#Если ВебКлиент Тогда -// Веб-клиент. -// Функция для помещения файла с диска в хранилище присоединенных файлов. -// -// Параметры: -// ВладелецФайла - любая ссылка - владелец файла -// УникальныйИдентификатор - уникальный идентификатор формы -// -// Возвращаемое значение: -// ссылка на файл -// -Функция ПоместитьВыбранныеФайлыВХранилищеВеб(ВладелецФайла, НастройкиРаботыСФайлами, УникальныйИдентификатор) - - ВремяИзменения = ТекущаяДата(); // Т.к. не можем получить дату модификации файла на диске - ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДата()); - - АдресВременногоХранилищаФайла = ""; - ИмяФайла = ""; - Если НЕ ПоместитьФайл(АдресВременногоХранилищаФайла, ИмяФайла, ИмяФайла, Истина, УникальныйИдентификатор) Тогда - Возврат Неопределено; - КонецЕсли; - - СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); - - Если СтрокиПути.Количество() >= 2 Тогда - Расширение = СтрокиПути[СтрокиПути.Количество()-1]; - ИмяБезРасширения = СтрокиПути[СтрокиПути.Количество()-2]; - Иначе - ВызватьИсключение - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при помещении файла в хранилище: %1'"),ИмяФайла); - КонецЕсли; - - ЗапретЗагрузкиФайловПоРасширению = НастройкиРаботыСФайлами.ЗапретЗагрузкиФайловПоРасширению; - СписокЗапрещенныхРасширений = НастройкиРаботыСФайлами.СписокЗапрещенныхРасширений; - - Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки(ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, Расширение) Тогда - ВызватьИсключение - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. Обратитесь к администратору системы.'"), - Расширение); - КонецЕсли; - - // Создадим карточку Файла в БД - ПрисоединенныйФайл = ПрисоединенныеФайлы.ДобавитьФайл( - ВладелецФайла, - ИмяБезРасширения, - Расширение, - ВремяИзменения, - ВремяИзмененияУниверсальное, - АдресВременногоХранилищаФайла, - ""); - - Возврат ПрисоединенныйФайл; - -КонецФункции -#КонецЕсли - -// Процедура для обработки команды открытия файла. Если файл открывается для чтения, -// Получает файл в рабочий каталог пользователя, при этом ищет файл в рабочем каталоге -// и предлагает получить файл с сервера или открыть существующий. Если файл редактируется -// безусловно открывает файл в рабочем каталоге (если есть) или получает его сервера. -// Параметры: -// ДанныеФайла - структура - данные файла -// ФайлРедактируется - булево - истина, если файл открывается для редактирования, иначе ложь -// -Процедура ОткрытьФайл(ДанныеФайла, ДляРедактирования = Истина) Экспорт +Процедура ОткрытьФайл(Знач ДанныеФайла, Знач ДляРедактирования = Истина) Экспорт ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); @@ -195,11 +30,13 @@ ФайлНаДиске = Новый Файл(ПолноеИмяФайлаНаКлиенте); - Если ЗначениеЗаполнено(ДанныеФайла.Редактирует) // файл уже редактируется + Если ЗначениеЗаполнено(ДанныеФайла.Редактирует) // Файл уже редактируется. И ДляРедактирования И ФайлНаДиске.Существует() Тогда + ФайлНаДиске.УстановитьТолькоЧтение(Ложь); ПолучитьФайл = Ложь; + ИначеЕсли ФайлНаДиске.Существует() Тогда ПолучитьФайл = ДиалогНужноПолучитьФайлССервера(ПолноеИмяФайлаНаКлиенте, ДанныеФайла, ДляРедактирования, Отказ); Если Отказ Тогда @@ -213,13 +50,13 @@ Если ПолучитьФайл Тогда ПолноеИмяФайлаНаКлиенте = ""; - ФайлМожноОткрывать = - ПолучитьФайлВРабочийКаталог(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла, - ДанныеФайла.ОтносительныйПуть, - ДанныеФайла.ДатаМодификацииУниверсальная, - ДанныеФайла.ИмяФайла, - РабочийКаталогПользователя, - ПолноеИмяФайлаНаКлиенте); + ФайлМожноОткрывать = ПолучитьФайлВРабочийКаталог( + ДанныеФайла.СсылкаНаДвоичныеДанныеФайла, + ДанныеФайла.ОтносительныйПуть, + ДанныеФайла.ДатаМодификацииУниверсальная, + ДанныеФайла.ИмяФайла, + РабочийКаталогПользователя, + ПолноеИмяФайлаНаКлиенте); КонецЕсли; Если ФайлМожноОткрывать Тогда @@ -240,14 +77,280 @@ КонецПроцедуры -// Функция для обработки команды сохранения файла в каталог на диске. -// Так же используется как вспомогательная функция при сохранении файла с ЭЦП. -// Параметры: -// ДанныеФайла - структура - данные файла -// Возвращаемое значение -// имя сохраненного файла +// Обработчик команды добавления файлов. +// Предлагает пользователю выбирать файлы в диалоге выбора файлов и +// пытается поместить выбранные файлы в хранилище файлов, когда: +// - размер файла не превышает максимально допустимый, +// - файл имеет допустимое расширение, +// - имеется свободное место в томе (при хранении файлов в томах), +// - прочие условия. // -Функция СохранитьФайлКак(ДанныеФайла) Экспорт +// Параметры: +// ВладелецФайла - Ссылка - владелец файла. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// Фильтр - Строка - необязательный параметр, +// позволяет задать фильтр выбираемого файла, +// например, картинки для номенклатуры. +// +Процедура ДобавитьФайлы(Знач ВладелецФайла, Знач ИдентификаторФормы, Знач Фильтр = "") Экспорт + + ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); + + НастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); + + Если ПодключитьРасширениеРаботыСФайлами() Тогда + + ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + ВыборФайла.МножественныйВыбор = Истина; + ВыборФайла.Заголовок = НСтр("ru = 'Выбор файла'"); + ВыборФайла.Фильтр = ?(ЗначениеЗаполнено(Фильтр), Фильтр, НСтр("ru = 'Все файлы'") + " (*.*)|*.*"); + + Если ВыборФайла.Выбрать() Тогда + ПрисоединенныеФайлыМассив = Новый Массив; + ПоместитьВыбранныеФайлыВХранилище( + ВыборФайла.ВыбранныеФайлы, + ВладелецФайла, + НастройкиРаботыСФайлами, + ПрисоединенныеФайлыМассив, + ИдентификаторФормы); + + Если ПрисоединенныеФайлыМассив.Количество() = 1 Тогда + ПрисоединенныйФайл = ПрисоединенныеФайлыМассив[0]; + + ПоказатьОповещениеПользователя( + НСтр("ru = 'Создание:'"), + ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл), + ПрисоединенныйФайл, + БиблиотекаКартинок.Информация32); + + ПараметрыФормы = Новый Структура("ПрисоединенныйФайл, ЭтоНовый", ПрисоединенныйФайл, Истина); + ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы, , ПрисоединенныйФайл); + КонецЕсли; + + Если ПрисоединенныеФайлыМассив.Количество() > 0 Тогда + ОповеститьОбИзменении(ПрисоединенныеФайлыМассив[0]); + Оповестить("Запись_ПрисоединенныйФайл", Новый Структура("ЭтоНовый", Истина), ПрисоединенныеФайлыМассив); + КонецЕсли; + + КонецЕсли; + + Иначе // Если веб-клиент без подключенного расширения. +#Если ВебКлиент Тогда + ПрисоединенныйФайл = ПоместитьВыбранныеФайлыВХранилищеВеб(ВладелецФайла, НастройкиРаботыСФайлами, ИдентификаторФормы); + + Если ПрисоединенныйФайл <> Неопределено Тогда + ПоказатьОповещениеПользователя( + НСтр("ru = 'Создание'"), + ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл), + ПрисоединенныйФайл, + БиблиотекаКартинок.Информация32); + + ОповеститьОбИзменении(ПрисоединенныйФайл); + + ПараметрыФормы = Новый Структура("ПрисоединенныйФайл", ПрисоединенныйФайл); + ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы, , ПрисоединенныйФайл); + КонецЕсли; +#КонецЕсли + КонецЕсли; + +КонецПроцедуры + +// Сохраняет файл вместе вместе с ЭЦП. +// Используется в обработчике команды сохранения файла. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. +// ДанныеФайла - Структура - данные файла. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +Процедура СохранитьВместеСЭЦП(Знач ПрисоединенныйФайл, Знач ДанныеФайла, Знач ИдентификаторФормы) Экспорт + + ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); + + Если ПодключитьРасширениеРаботыСФайлами() Тогда + + ПолноеИмяФайла = СохранитьФайлКак(ДанныеФайла); + + Если ПолноеИмяФайла = "" Тогда + Возврат; // Пользователь нажал Отмена или это веб клиент без расширения. + КонецЕсли; + + Настройка = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьПерсональныеНастройкиРаботыСЭЦП().ДействияПриСохраненииСЭЦП; + + Если Настройка = "Спрашивать" Тогда + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Объект", ПрисоединенныйФайл); + ПараметрыФормы.Вставить("УникальныйИдентификатор", ИдентификаторФормы); + + МассивСтруктурПодписей = ОткрытьФормуМодально("ОбщаяФорма.ВыборПодписей", ПараметрыФормы); + + ИначеЕсли Настройка = "СохранятьВсеПодписи" Тогда + МассивСтруктурПодписей = ЭлектроннаяЦифроваяПодпись.ПолучитьВсеПодписи(ПрисоединенныйФайл, ИдентификаторФормы); + КонецЕсли; + + Если ТипЗнч(МассивСтруктурПодписей) = Тип("Массив") И МассивСтруктурПодписей.Количество() > 0 Тогда + ЭлектроннаяЦифроваяПодписьКлиент.СохранитьПодписи( + ПрисоединенныйФайл, + ПолноеИмяФайла, + ИдентификаторФормы, + МассивСтруктурПодписей); + КонецЕсли; + + Иначе +#Если ВебКлиент Тогда + Предупреждение(НСтр("ru = 'Для выполнения данной операции необходимо + |установить расширение работы с файлами.'")); +#КонецЕсли + КонецЕсли; + +КонецПроцедуры + +// Помещает данные файла с сервера в рабочий каталог на диске. +// +// ОСОБЫЕ УСЛОВИЯ. +// Требуется наличие подключенного расширения для работы с файлами. +// +// Параметры: +// АдресДвоичныхДанныхФайла - Строка - адрес во временном хранилище с двоичными данными, +// либо навигационная ссылка на данные файла в ИБ. +// ОтносительныйПуть - Строка - путь к файлу относительно рабочего каталога. +// ДатаМодификацииУниверсальная - Дата - универсальная дата модификации файла. +// ИмяФайла - Строка - имя файла (с расширением). +// РабочийКаталогПользователя - Строка - путь к рабочему каталогу. +// ПолноеИмяФайлаНаКлиенте - Строка (возращаемое значение) - устанавливается при успешном выполнении. +// +// Возвращаемое значение: булево +// Истина - файл получен и сохранен успешно, иначе Ложь. +// +Функция ПолучитьФайлВРабочийКаталог(Знач АдресДвоичныхДанныхФайла, + Знач ОтносительныйПуть, + Знач ДатаМодификацииУниверсальная, + Знач ИмяФайла, + Знач РабочийКаталогПользователя = "", + ПолноеИмяФайлаНаКлиенте) Экспорт + + Если РабочийКаталогПользователя = Неопределено + ИЛИ ПустаяСтрока(РабочийКаталогПользователя) Тогда + + Возврат Ложь; + КонецЕсли; + + КаталогСохранения = РабочийКаталогПользователя + ОтносительныйПуть; + + Попытка + СоздатьКаталог(КаталогСохранения); + Исключение + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + СообщениеОбОшибке = НСтр("ru = 'Ошибка создания каталога на диске:'") + " " + СообщениеОбОшибке; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + Возврат Ложь; + КонецПопытки; + + Файл = Новый Файл(КаталогСохранения + ИмяФайла); + Если Файл.Существует() Тогда + Файл.УстановитьТолькоЧтение(Ложь); + УдалитьФайлы(КаталогСохранения + ИмяФайла); + КонецЕсли; + + ПолучаемыйФайл = Новый ОписаниеПередаваемогоФайла(КаталогСохранения + ИмяФайла, АдресДвоичныхДанныхФайла); + ПолучаемыеФайлы = Новый Массив; + ПолучаемыеФайлы.Добавить(ПолучаемыйФайл); + + ПолученныеФайлы = Новый Массив; + + Если ПолучитьФайлы(ПолучаемыеФайлы, ПолученныеФайлы, , Ложь) Тогда + ПолноеИмяФайлаНаКлиенте = ПолученныеФайлы[0].Имя; + Файл = Новый Файл(ПолноеИмяФайлаНаКлиенте); + Файл.УстановитьУниверсальноеВремяИзменения(ДатаМодификацииУниверсальная); + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Помещает файл с диска клиента во временное хранилище. +// +// Параметры: +// ДанныеФайла - Структура с данными файла. +// ИнформацияОФайле - Структура (возвращаемое значение) с информацией о файле. +// ПолноеИмяФайлаНаКлиенте - Строка - имя файла на диске клиента. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +// Возвращаемое значение: +// Булево - Истина - файл успешно помещен в хранилище, иначе Ложь. +// +Функция ПоместитьФайлНаДискеВХранилище(Знач ДанныеФайла, ИнформацияОФайле, Знач ПолноеИмяФайлаНаКлиенте, Знач ИдентификаторФормы) Экспорт + + НастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); + + МаксРазмерФайла = НастройкиРаботыСФайлами.МаксимальныйРазмерФайла; + ЗапретЗагрузкиФайловПоРасширению = НастройкиРаботыСФайлами.ЗапретЗагрузкиФайловПоРасширению; + СписокЗапрещенныхРасширений = НастройкиРаботыСФайлами.СписокЗапрещенныхРасширений; + + Файл = Новый Файл(ПолноеИмяФайлаНаКлиенте); + + Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки( + ЗапретЗагрузкиФайловПоРасширению, + СписокЗапрещенныхРасширений, + Файл.Расширение) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. + |Обратитесь к администратору.'"), + Файл.Расширение); + КонецЕсли; + + Если Файл.Размер() > МаксРазмерФайла Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СообщениеОПревышенииМаксимальноДопустимогоРазмераФайла(Файл.Размер(), МаксРазмерФайла, Файл.Имя)); + Возврат Ложь; + КонецЕсли; + + ИзвлекатьТекстыФайловНаСервере = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере; + + Если ИзвлекатьТекстыФайловНаСервере Тогда + АдресВременногоХранилищаТекста = ""; + Иначе + АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище(ПолноеИмяФайлаНаКлиенте, ИдентификаторФормы); + КонецЕсли; + + Описание = Новый ОписаниеПередаваемогоФайла(ПолноеИмяФайлаНаКлиенте, ""); + ПомещаемыеФайлы = Новый Массив; + ПомещаемыеФайлы.Добавить(Описание); + ПомещенныеФайлы = Новый Массив; + + Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, ИдентификаторФормы) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка передачи файла на сервер: + |""%1"".'"), + ПолноеИмяФайлаНаКлиенте) ); + Возврат Ложь; + КонецЕсли; + + АдресФайлаВоВременномХранилище = ПомещенныеФайлы[0].Хранение; + + ИнформацияОФайле = Новый Структура; + ИнформацияОФайле.Вставить("ДатаМодификацииУниверсальная", Файл.ПолучитьУниверсальноеВремяИзменения()); + ИнформацияОФайле.Вставить("АдресФайлаВоВременномХранилище", АдресФайлаВоВременномХранилище); + ИнформацияОФайле.Вставить("АдресВременногоХранилищаТекста", АдресВременногоХранилищаТекста); + ИнформацияОФайле.Вставить("Расширение", Прав(Файл.Расширение, СтрДлина(Файл.Расширение)-1) ); + + Возврат Истина; + +КонецФункции + +// Сохраняет файл в каталог на диске. +// Так же используется, как вспомогательная функция при сохранении файла с ЭЦП. +// +// Параметры: +// ДанныеФайла - Структура - данные файла. +// +// Возвращаемое значение: +// Строка - имя сохраненного файла. +// +Функция СохранитьФайлКак(Знач ДанныеФайла) Экспорт ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); @@ -258,7 +361,7 @@ ВыборФайла.ПолноеИмяФайла = ДанныеФайла.ИмяФайла; ВыборФайла.Расширение = ДанныеФайла.Расширение; ВыборФайла.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Все файлы (*.%1)|*.%1'"), ДанныеФайла.Расширение, ДанныеФайла.Расширение); + НСтр("ru = 'Все файлы (*.%1)|*.%1'"), ДанныеФайла.Расширение); Если НЕ ВыборФайла.Выбрать() Тогда Возврат ""; @@ -268,8 +371,8 @@ ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выполняется сохранение файла ""%1"" (%2 Мб)... - |Пожалуйста, подождите.'"), + НСтр("ru = 'Сохраняется файл ""%1"" (%2 Мб) + |Пожалуйста, подождите...'"), ДанныеФайла.ИмяФайла, ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб) ); @@ -282,7 +385,7 @@ ПолученныеФайлы = Новый Массив; Если ПолучитьФайлы(ПолучаемыеФайлы, ПолученныеФайлы, , Ложь) Тогда - Состояние(НСтр("ru = 'Файл успешно сохранен'"), , ВыборФайла.ПолноеИмяФайла); + Состояние(НСтр("ru = 'Файл успешно сохранен.'"), , ВыборФайла.ПолноеИмяФайла); КонецЕсли; Возврат ВыборФайла.ПолноеИмяФайла; @@ -295,287 +398,13 @@ КонецФункции -// Обработчик команды обновления присоединенного файла из другого файла. -// При этом пользователю предлагается выбрать файл, из которого следует обновить двоичные данные. -// Параметры -// ПрисоединенныйФайл - ссылка на файл -// ДанныеФайла - структура - данные файла -// УникальныйИдентификатор - уникальный идентификатор формы -// Возвращаемое значение -// Истинна - файл успешно обновлен в хранилище, ложь - файл не обновлен в хранилище -// -Функция ОбновитьПрисоединенныйФайл(ПрисоединенныйФайл, ДанныеФайла, УникальныйИдентификатор) Экспорт - - ИнформацияОФайле = Новый Структура; - - Если ВыбратьФайлНаДискеИПоместитьВХранилище(ДанныеФайла, ИнформацияОФайле, УникальныйИдентификатор) Тогда - ПрисоединенныеФайлы.ОбновитьПрисоединенныйФайл(ПрисоединенныйФайл, ИнформацияОФайле); - Возврат Истина; - Иначе - Возврат Ложь; - КонецЕсли; - -КонецФункции - -// Обработчик команды окончания редактирования файлов, с помещением -// отредактированных файлов в хранилище. -// Параметры -// ДанныеФайла - структура с данными файла -// ИнформацияОФайле - структура с информацией о файле -// УникальныйИдентификатор - уникальный идентификатор формы -// Возвращаемое значение -// Истина - файл успешно помещен во временное хранилище -Функция ПоместитьРедактируемыйФайлНаДискеВХранилище(ДанныеФайла, ИнформацияОФайле, УникальныйИдентификатор) Экспорт - - ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); - - Если ПодключитьРасширениеРаботыСФайлами()Тогда - - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - РабочийКаталогПользователя = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; - - ПолноеИмяФайлаНаКлиенте = РабочийКаталогПользователя + ДанныеФайла.ОтносительныйПуть + ДанныеФайла.ИмяФайла; - - Файл = Новый Файл(ПолноеИмяФайлаНаКлиенте); - Если НЕ Файл.Существует() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не найден файл в рабочем каталоге'")); - Возврат Ложь; - КонецЕсли; - - Возврат ПоместитьФайлНаДискеВХранилище(ДанныеФайла, ИнформацияОФайле, ПолноеИмяФайлаНаКлиенте, УникальныйИдентификатор); - - Иначе -#Если ВебКлиент Тогда - Результат = ПоместитьФайлНаДискеВХранилищеВеб(ДанныеФайла, ИнформацияОФайле, УникальныйИдентификатор); - - Если НЕ Результат Тогда - Возврат Ложь; - КонецЕсли; - - Если ДанныеФайла.ИмяФайла <> ИнформацияОФайле.ИмяФайла Тогда - ТекстВопроса = НСтр("ru = 'Имя выбранного файла (%1) отличается от имени файла в хранилище (%2), продолжить?'"); - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ИнформацияОФайле.ИмяФайла, ДанныеФайла.ИмяФайла); - КодВозврата = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ОКОтмена); - Если КодВозврата <> КодВозвратаДиалога.ОК Тогда - Возврат Ложь; - КонецЕсли; - КонецЕсли; - - Возврат Результат; -#КонецЕсли - КонецЕсли; - -КонецФункции - -// Используется как вспомогательная процедура для выбора файла с диска -// и помещения его во временное хранилище на сервере. +// Открывает общую форму присоединенного файла из формы элемента +// справочника присоедиенных файлов. Форма элемента закрывается. +// // Параметры: -// ДанныеФайла - структура с данными файла -// ИнформацияОФайле - структура с информацией о файле -// УникальныйИдентификатор - уникальный идентификатор формы -// Возвращаемое значение -// Истина - файл успешно выбран и помещен во временное хранилище, иначе Ложь +// Форма - форма справочника присоединенных файлов. // -Функция ВыбратьФайлНаДискеИПоместитьВХранилище(ДанныеФайла, ИнформацияОФайле, УникальныйИдентификатор) Экспорт - - ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); - - Если ПодключитьРасширениеРаботыСФайлами()Тогда - - ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - ВыборФайла.МножественныйВыбор = Ложь; - ВыборФайла.ПолноеИмяФайла = ДанныеФайла.Наименование + "." + ДанныеФайла.Расширение; - ВыборФайла.Расширение = ДанныеФайла.Расширение; - ВыборФайла.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Все файлы (*.%1)|*.%1'"), ДанныеФайла.Расширение, ДанныеФайла.Расширение); - Если НЕ ВыборФайла.Выбрать() Тогда - Возврат Ложь; - КонецЕсли; - - Возврат ПоместитьФайлНаДискеВХранилище(ДанныеФайла, ИнформацияОФайле, ВыборФайла.ПолноеИмяФайла, УникальныйИдентификатор); - - Иначе -#Если ВебКлиент Тогда - Возврат ПоместитьФайлНаДискеВХранилищеВеб(ДанныеФайла, ИнформацияОФайле, УникальныйИдентификатор); -#КонецЕсли - КонецЕсли; - -КонецФункции - -// Функция используется для помещения файла на диске с именем -// ПолноеИмяФайлаНаКлиенте во временное хранилище. -// Параметры -// ДанныеФайла - структура с данными файла -// ИнформацияОФайле (устанавливается в функции)- структура с информацией о файле -// ПолноеИмяФайлаНаКлиенте - строка - имя файла на клиенте -// УникальныйИдентификатор - уникальный идентификатор формы -// Возвращаемое значение -// Булево - истина - файл успешно помещен в хранилище, иначе Ложь -// -Функция ПоместитьФайлНаДискеВХранилище(ДанныеФайла, ИнформацияОФайле, ПолноеИмяФайлаНаКлиенте, УникальныйИдентификатор) Экспорт - - НастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); - - МаксРазмерФайла = НастройкиРаботыСФайлами.МаксимальныйРазмерФайла; - ЗапретЗагрузкиФайловПоРасширению = НастройкиРаботыСФайлами.ЗапретЗагрузкиФайловПоРасширению; - СписокЗапрещенныхРасширений = НастройкиРаботыСФайлами.СписокЗапрещенныхРасширений; - - Файл = Новый Файл(ПолноеИмяФайлаНаКлиенте); - - Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки(ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, Файл.Расширение) Тогда - ВызватьИсключение - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. Обратитесь к администратору системы.'"), - Файл.Расширение); - КонецЕсли; - - Если Файл.Размер() > МаксРазмерФайла Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОПревышенииМаксимальноДопустимогоРазмераФайла(Файл.Размер(), МаксРазмерФайла, Файл.Имя)); - Возврат Ложь; - КонецЕсли; - - ИзвлекатьТекстыФайловНаСервере = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере; - - Если ИзвлекатьТекстыФайловНаСервере Тогда - АдресВременногоХранилищаТекста = ""; - Иначе - АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище(ПолноеИмяФайлаНаКлиенте, УникальныйИдентификатор); - КонецЕсли; - - Описание = Новый ОписаниеПередаваемогоФайла(ПолноеИмяФайлаНаКлиенте, ""); - ПомещаемыеФайлы = Новый Массив; - ПомещаемыеФайлы.Добавить(Описание); - ПомещенныеФайлы = Новый Массив; - - Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, УникальныйИдентификатор) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка передачи файла на сервер: %1'"), ПолноеИмяФайлаНаКлиенте) ); - Возврат Ложь; - КонецЕсли; - - АдресФайлаВоВременномХранилище = ПомещенныеФайлы[0].Хранение; - - ИнформацияОФайле = Новый Структура("ДатаМодификацииУниверсальная, АдресФайлаВоВременномХранилище, АдресВременногоХранилищаТекста, Расширение", - Файл.ПолучитьУниверсальноеВремяИзменения(), - АдресФайлаВоВременномХранилище, - АдресВременногоХранилищаТекста, - Прав(Файл.Расширение, СтрДлина(Файл.Расширение)-1)); - - Возврат Истина; - - -КонецФункции - -#Если ВебКлиент Тогда -// Аналог функции ПоместитьФайлНаДискеВХранилище для веб-клиента (без расширения для работы с файлами). -// Помещает файл с диска во временное хранилище. -// ДанныеФайла - структура с данными файла -// ИнформацияОФайле (устанавливается в функции)- структура с информацией о файле -// УникальныйИдентификатор - уникальный идентификатор формы -// -Функция ПоместитьФайлНаДискеВХранилищеВеб(ДанныеФайла, ИнформацияОФайле, УникальныйИдентификатор) - - НастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); - - АдресВременногоХранилищаФайла = ""; - ВыбранноеИмяФайла = ""; - - Если Не ПоместитьФайл(АдресВременногоХранилищаФайла, ДанныеФайла.ИмяФайла, ВыбранноеИмяФайла, Истина, УникальныйИдентификатор) Тогда - Возврат Ложь; - КонецЕсли; - - СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ВыбранноеИмяФайла); - - Если СтрокиПути.Количество() >= 2 Тогда - НовоеИмя = СтрокиПути[СтрокиПути.Количество()-2]; - НовоеРасширение = СтрокиПути[СтрокиПути.Количество()-1]; - ИмяФайла = НовоеИмя + "." + НовоеРасширение; - ИначеЕсли СтрокиПути.Количество() = 1 Тогда - НовоеИмя = СтрокиПути[0]; - НовоеРасширение = ""; - ИмяФайла = НовоеИмя; - КонецЕсли; - - ЗапретЗагрузкиФайловПоРасширению = НастройкиРаботыСФайлами.ЗапретЗагрузкиФайловПоРасширению; - СписокЗапрещенныхРасширений = НастройкиРаботыСФайлами.СписокЗапрещенныхРасширений; - - Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки(ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, НовоеРасширение) Тогда - ВызватьИсключение - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. Обратитесь к администратору системы.'"), - НовоеРасширение); - КонецЕсли; - - ИнформацияОФайле = Новый Структура("ДатаМодификацииУниверсальная, АдресФайлаВоВременномХранилище, АдресВременногоХранилищаТекста, ИмяФайла,Расширение", - УниверсальноеВремя(ТекущаяДата()), - АдресВременногоХранилищаФайла, - "", - ИмяФайла, - НовоеРасширение); - - Возврат Истина; - -КонецФункции -#КонецЕсли - -// Обработчик команды открытия каталога с файлом. Если файла в каталоге нет, -// он получается в него из хранилища. -// Параметры -// ДанныеФайла - структура с данными файла -// -Процедура ОткрытьКаталогСФайлом(ДанныеФайла) Экспорт - - Перем ПолноеИмяФайла; - - ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); - - Если ПодключитьРасширениеРаботыСФайлами() Тогда - - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - РабочийКаталогПользователя = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; - - Если ПустаяСтрока(РабочийКаталогПользователя) Тогда - Предупреждение(НСтр("ru = 'Не задан путь к локальному кэшу файлов'")); - Возврат; - КонецЕсли; - - ПолныйПуть = РабочийКаталогПользователя + ДанныеФайла.ОтносительныйПуть + ДанныеФайла.ИмяФайла; - - Файл = Новый Файл(ПолныйПуть); - - Если НЕ Файл.Существует() Тогда - КодВозврата = Вопрос(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл ""%1"" отсутствует в рабочем каталоге. Получить файл с сервера?'"), Файл.Имя), - РежимДиалогаВопрос.ДаНет); - - Если КодВозврата <> КодВозвратаДиалога.Да Тогда - Возврат; - КонецЕсли; - - ПолноеИмяФайлаНаКлиенте = ""; - ПолучитьФайлВРабочийКаталог(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла, ДанныеФайла.ОтносительныйПуть, ДанныеФайла.ДатаМодификацииУниверсальная, ДанныеФайла.ИмяФайла, РабочийКаталогПользователя, ПолноеИмяФайлаНаКлиенте); - - КонецЕсли; - - ФайловыеФункцииКлиент.ОткрытьПроводникСФайлом(ПолныйПуть); - Иначе -#Если ВебКлиент Тогда - Предупреждение(НСтр("ru = 'Для выполнения данной операции вам нужно установить расширение работы с файлами.'")); -#КонецЕсли - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Работа с формами - -// Используется для открытия формы присоединенного файла, из "естественной" -// формы присоединенного файла (формы элемента справочника). -// Параметры -// Форма - форма справочника присоединенных файлов (будет закрыта) -// -Процедура ПерейтиКФормеПрисоединенногоФайла(Форма) Экспорт +Процедура ПерейтиКФормеПрисоединенногоФайла(Знач Форма) Экспорт ПрисоединенныйФайл = Форма.Ключ; @@ -603,33 +432,378 @@ КонецПроцедуры -// Обработчик события выбора файла - функция вызывается для переопределения -// стандартного поведения. -// Параметры -// ВладелецФайлов - ссылка на объект с файлами -// Элемент - элемент формы, которому будет послано оповещение о выборе -// СтандартнаяОбработка - булево, всегда устанавливается в Ложь +// Открывает форму выбора файлов. +// Используется в обработчике выбора для переопределения стандартного поведения. // -Процедура ОткрытьФормуВыбораФайлов(ВладелецФайлов, Элемент, СтандартнаяОбработка = Ложь) Экспорт +// Параметры: +// ВладелецФайлов - Ссылка на объект с файлами. +// ЭлементФормы - элемент формы, которому будет отправлено оповещение о выборе. +// СтандартнаяОбработка - Булево (возвращаемое значение), всегда устанавливается в Ложь. +// +Процедура ОткрытьФормуВыбораФайлов(Знач ВладелецФайлов, Знач ЭлементФормы, СтандартнаяОбработка = Ложь) Экспорт СтандартнаяОбработка = Ложь; - ПараметрыВыбора = Новый Структура("ВладелецФайла, ЗакрыватьПриВыборе", ВладелецФайлов, Истина); - ОткрытьФорму("ОбщаяФорма.ВыборПрисоединенныхФайлов", ПараметрыВыбора, Элемент); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ВладелецФайла", ВладелецФайлов); + ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина); + + ОткрытьФорму("ОбщаяФорма.ВыборПрисоединенныхФайлов", ПараметрыФормы, ЭлементФормы); КонецПроцедуры -// Открывает форму присоединенного файла. Может использоваться как обработчик открытия -// присоединенного файла. -// Параметры -// ПрисоединенныйФайл - ссылка на файл, карточку которого нужно открыть -// СтандартнаяОбработка - булево, всегда устанавливается в Ложь +// Открывает форму присоединенного файла. +// Может использоваться как обработчик открытия присоединенного файла. // -Процедура ОткрытьФормуПрисоединенногоФайла(ПрисоединенныйФайл, СтандартнаяОбработка = Ложь) Экспорт +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл, карточку которого нужно открыть. +// СтандартнаяОбработка - Булево (возвращаемое значение), всегда устанавливается в Ложь. +// +Процедура ОткрытьФормуПрисоединенногоФайла(Знач ПрисоединенныйФайл, СтандартнаяОбработка = Ложь) Экспорт СтандартнаяОбработка = Ложь; + Если ЗначениеЗаполнено(ПрисоединенныйФайл) Тогда - ПараметрыОткрытия = Новый Структура("ПрисоединенныйФайл", ПрисоединенныйФайл); - ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыОткрытия,, ПрисоединенныйФайл); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПрисоединенныйФайл", ПрисоединенныйФайл); + + ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы, , ПрисоединенныйФайл); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Добавляет файлы перетаскиваением в список файлов. +// +// Параметры: +// ВладелецФайла - Ссылка - владелец файла. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// МассивИменФайлов - Массив Строк - путей к файлам. +// +Процедура ДобавитьФайлыПеретаскиванием(Знач ВладелецФайла, Знач ИдентификаторФормы, Знач МассивИменФайлов) Экспорт + + НастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); + + ПрисоединенныеФайлыМассив = Новый Массив; + ПоместитьВыбранныеФайлыВХранилище( + МассивИменФайлов, + ВладелецФайла, + НастройкиРаботыСФайлами, + ПрисоединенныеФайлыМассив, + ИдентификаторФормы); + + Если ПрисоединенныеФайлыМассив.Количество() = 1 Тогда + ПрисоединенныйФайл = ПрисоединенныеФайлыМассив[0]; + + ПоказатьОповещениеПользователя( + НСтр("ru = 'Создание'"), + ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл), + ПрисоединенныйФайл, + БиблиотекаКартинок.Информация32); + + ПараметрыФормы = Новый Структура("ПрисоединенныйФайл, ЭтоНовый", ПрисоединенныйФайл, Истина); + ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы, , ПрисоединенныйФайл); + КонецЕсли; + + Если ПрисоединенныеФайлыМассив.Количество() > 0 Тогда + ОповеститьОбИзменении(ПрисоединенныеФайлыМассив[0]); + Оповестить("Запись_ПрисоединенныйФайл", Новый Структура("ЭтоНовый", Истина), ПрисоединенныеФайлыМассив); + КонецЕсли; + +КонецПроцедуры + +#Если ВебКлиент Тогда +// Помещает файл с диска в хранилище присоединенных файлов (веб-клиент). +// +// Параметры: +// ВладелецФайла - Ссылка на владельца файла. +// НастройкиРаботыСФайлами - Структура. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +// Возвращаемое значение: +// Ссылка на файл. +// +Функция ПоместитьВыбранныеФайлыВХранилищеВеб(Знач ВладелецФайла, Знач НастройкиРаботыСФайлами, Знач ИдентификаторФормы) + + АдресВременногоХранилищаФайла = ""; + ИмяФайла = ""; + Если НЕ ПоместитьФайл(АдресВременногоХранилищаФайла, ИмяФайла, ИмяФайла, Истина, ИдентификаторФормы) Тогда + Возврат Неопределено; + КонецЕсли; + + СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); + + Если СтрокиПути.Количество() >= 2 Тогда + Расширение = СтрокиПути[СтрокиПути.Количество()-1]; + ИмяБезРасширения = СтрокиПути[СтрокиПути.Количество()-2]; + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при помещении файла в хранилище: + |""%1"".'"), + ИмяФайла); + КонецЕсли; + + ЗапретЗагрузкиФайловПоРасширению = НастройкиРаботыСФайлами.ЗапретЗагрузкиФайловПоРасширению; + СписокЗапрещенныхРасширений = НастройкиРаботыСФайлами.СписокЗапрещенныхРасширений; + + Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки( + ЗапретЗагрузкиФайловПоРасширению, + СписокЗапрещенныхРасширений, + Расширение) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. + |Обратитесь к администратору.'"), + Расширение); + КонецЕсли; + + // Создание карточки Файла в базе данных. + ПрисоединенныйФайл = ПрисоединенныеФайлы.ДобавитьФайл( + ВладелецФайла, + ИмяБезРасширения, + Расширение, + , + , + АдресВременногоХранилищаФайла, + ""); + + Возврат ПрисоединенныйФайл; + +КонецФункции +#КонецЕсли + +// Обновляет данные файла из файла, выбранного пользователем. +// Используется, как обработчик команды обновления присоединенного файла из другого файла. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл. +// ДанныеФайла - Структура - данные файла. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +// Возвращаемое значение: +// Булево - Истина, если файл успешно обновлен в хранилище. +// Ложь, если файл не обновлен в хранилище. +// +Функция ОбновитьПрисоединенныйФайл(Знач ПрисоединенныйФайл, Знач ДанныеФайла, Знач ИдентификаторФормы) Экспорт + + ИнформацияОФайле = Новый Структура; + + Если ВыбратьФайлНаДискеИПоместитьВХранилище(ДанныеФайла, ИнформацияОФайле, ИдентификаторФормы) Тогда + ПрисоединенныеФайлы.ОбновитьПрисоединенныйФайл(ПрисоединенныйФайл, ИнформацияОФайле); + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + + +// Помещает отредактированные файлы в хранилище. +// Используется, как обработчик команды окончания редактирования файлов. +// +// Параметры +// ДанныеФайла - Структура с данными файла. +// ИнформацияОФайле - Структура (возвращаемое значение) - информация о файле. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +// Возвращаемое значение: +// Истина - файл успешно помещен во временное хранилище. +// +Функция ПоместитьРедактируемыйФайлНаДискеВХранилище(Знач ДанныеФайла, ИнформацияОФайле, Знач ИдентификаторФормы) Экспорт + + ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); + + Если ПодключитьРасширениеРаботыСФайлами()Тогда + + ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); + РабочийКаталогПользователя = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + + ПолноеИмяФайлаНаКлиенте = РабочийКаталогПользователя + ДанныеФайла.ОтносительныйПуть + ДанныеФайла.ИмяФайла; + + Файл = Новый Файл(ПолноеИмяФайлаНаКлиенте); + Если НЕ Файл.Существует() Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Файл не найден в рабочем каталоге.'")); + Возврат Ложь; + КонецЕсли; + + Возврат ПоместитьФайлНаДискеВХранилище(ДанныеФайла, ИнформацияОФайле, ПолноеИмяФайлаНаКлиенте, ИдентификаторФормы); + + Иначе +#Если ВебКлиент Тогда + Результат = ПоместитьФайлНаДискеВХранилищеВеб(ДанныеФайла, ИнформацияОФайле, ИдентификаторФормы); + + Если НЕ Результат Тогда + Возврат Ложь; + КонецЕсли; + + Если ДанныеФайла.ИмяФайла <> ИнформацияОФайле.ИмяФайла Тогда + ТекстВопроса = НСтр("ru = 'Имя выбранного файла + |""%1"" + |отличается от имени файла в хранилище + |""%2"", + |продолжить?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ИнформацияОФайле.ИмяФайла, ДанныеФайла.ИмяФайла); + КодВозврата = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ОКОтмена); + Если КодВозврата <> КодВозвратаДиалога.ОК Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Результат; +#КонецЕсли + КонецЕсли; + +КонецФункции + +// Выбирает файл с диска и помещает его во временное хранилище на сервере. +// +// Параметры: +// ДанныеФайла - Структура с данными файла. +// ИнформацияОФайле - Структура (возвращаемое значение) - информация о файле. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +// Возвращаемое значение: +// Истина - файл успешно выбран и помещен во временное хранилище, иначе Ложь. +// +Функция ВыбратьФайлНаДискеИПоместитьВХранилище(Знач ДанныеФайла, ИнформацияОФайле, Знач ИдентификаторФормы) Экспорт + + ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); + + Если ПодключитьРасширениеРаботыСФайлами()Тогда + + ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + ВыборФайла.МножественныйВыбор = Ложь; + ВыборФайла.ПолноеИмяФайла = ДанныеФайла.Наименование + "." + ДанныеФайла.Расширение; + ВыборФайла.Расширение = ДанныеФайла.Расширение; + ВыборФайла.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Все файлы (*.%1)|*.%1'"), ДанныеФайла.Расширение); + + Если НЕ ВыборФайла.Выбрать() Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ПоместитьФайлНаДискеВХранилище(ДанныеФайла, ИнформацияОФайле, ВыборФайла.ПолноеИмяФайла, ИдентификаторФормы); + + Иначе +#Если ВебКлиент Тогда + Возврат ПоместитьФайлНаДискеВХранилищеВеб(ДанныеФайла, ИнформацияОФайле, ИдентификаторФормы); +#КонецЕсли + КонецЕсли; + +КонецФункции + +#Если ВебКлиент Тогда +// Помещает файл с диска клиента во временное хранилище. +// Аналог функции ПоместитьФайлНаДискеВХранилище +// для веб-клиента без расширения для работы с файлами. +// +// Параметры: +// ДанныеФайла - Структура с данными файла. +// ИнформацияОФайле - Структура (возвращаемое значение) с информацией о файле. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +// Возвращаемое значение: +// Булево - Истина - файл успешно помещен в хранилище, иначе Ложь. +// +Функция ПоместитьФайлНаДискеВХранилищеВеб(Знач ДанныеФайла, ИнформацияОФайле, Знач ИдентификаторФормы) + + НастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); + + АдресВременногоХранилищаФайла = ""; + ВыбранноеИмяФайла = ""; + + Если Не ПоместитьФайл(АдресВременногоХранилищаФайла, ДанныеФайла.ИмяФайла, ВыбранноеИмяФайла, Истина, ИдентификаторФормы) Тогда + Возврат Ложь; + КонецЕсли; + + СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ВыбранноеИмяФайла); + + Если СтрокиПути.Количество() >= 2 Тогда + НовоеИмя = СтрокиПути[СтрокиПути.Количество()-2]; + НовоеРасширение = СтрокиПути[СтрокиПути.Количество()-1]; + ИмяФайла = НовоеИмя + "." + НовоеРасширение; + ИначеЕсли СтрокиПути.Количество() = 1 Тогда + НовоеИмя = СтрокиПути[0]; + НовоеРасширение = ""; + ИмяФайла = НовоеИмя; + КонецЕсли; + + ЗапретЗагрузкиФайловПоРасширению = НастройкиРаботыСФайлами.ЗапретЗагрузкиФайловПоРасширению; + СписокЗапрещенныхРасширений = НастройкиРаботыСФайлами.СписокЗапрещенныхРасширений; + + Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки( + ЗапретЗагрузкиФайловПоРасширению, + СписокЗапрещенныхРасширений, + НовоеРасширение) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. + |Обратитесь к администратору.'"), + НовоеРасширение); + КонецЕсли; + + ИнформацияОФайле = Новый Структура; + ИнформацияОФайле.Вставить("ДатаМодификацииУниверсальная", Неопределено); + ИнформацияОФайле.Вставить("АдресФайлаВоВременномХранилище", АдресВременногоХранилищаФайла); + ИнформацияОФайле.Вставить("АдресВременногоХранилищаТекста", ""); + ИнформацияОФайле.Вставить("ИмяФайла", ИмяФайла); + ИнформацияОФайле.Вставить("Расширение", НовоеРасширение); + + Возврат Истина; + +КонецФункции +#КонецЕсли + +// Открывает каталог с файлом (при необходимости получает файл из хранилища). +// Используется, как обработчик команды открытия каталога с файлом. +// +// Параметры: +// ДанныеФайла - Структура с данными файла. +// +Процедура ОткрытьКаталогСФайлом(Знач ДанныеФайла) Экспорт + + Перем ПолноеИмяФайла; + + ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); + + Если ПодключитьРасширениеРаботыСФайлами() Тогда + + ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); + РабочийКаталогПользователя = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + + Если ПустаяСтрока(РабочийКаталогПользователя) Тогда + Предупреждение(НСтр("ru = 'Не задан путь к локальному кэшу файлов'")); + Возврат; + КонецЕсли; + + ПолныйПуть = РабочийКаталогПользователя + ДанныеФайла.ОтносительныйПуть + ДанныеФайла.ИмяФайла; + + Файл = Новый Файл(ПолныйПуть); + + Если НЕ Файл.Существует() Тогда + КодВозврата = Вопрос(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Файл ""%1"" + |отсутствует в рабочем каталоге. Получить файл с сервера?'"), Файл.Имя), + РежимДиалогаВопрос.ДаНет); + + Если КодВозврата <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + ПолноеИмяФайлаНаКлиенте = ""; + ПолучитьФайлВРабочийКаталог(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла, ДанныеФайла.ОтносительныйПуть, ДанныеФайла.ДатаМодификацииУниверсальная, ДанныеФайла.ИмяФайла, РабочийКаталогПользователя, ПолноеИмяФайлаНаКлиенте); + + КонецЕсли; + + ФайловыеФункцииКлиент.ОткрытьПроводникСФайлом(ПолныйПуть); + Иначе +#Если ВебКлиент Тогда + Предупреждение(НСтр("ru = 'Для выполнения операции требуется + |установить расширение работы с файлами.'")); +#КонецЕсли КонецЕсли; КонецПроцедуры @@ -637,15 +811,20 @@ //////////////////////////////////////////////////////////////////////////////// // ЭЦП -// Обработчик команды подписать формы списка. Предлагает пользователю выбрать -// ЭЦП для подписания, получает данные подписи и записывает файл с эцп в хранилище. -// Параметры -// ПрисоединенныйФайл - присоединенный файл -// ДанныеФайла - структура с данными файла -// Возвращаемое значение -// Истина - файл успешно подписан и сохранен в хранилище, Ложь - ошибки или отказ во время работы +// Подписывает присоединенный файл: +// - предлагает пользователю выбрать ЭЦП для подписания и получает данные подписи, +// - записывает файл с эцп в хранилище. +// Используется в обработчике команды "Подписать" формы списка. // -Функция СформироватьПодписьФайла(ПрисоединенныйФайл, ДанныеФайла) Экспорт +// Параметры: +// ПрисоединенныйФайл - Ссылка присоединенный файл. +// ДанныеФайла - Структура с данными файла. +// +// Возвращаемое значение: +// Булево - Истина - файл успешно подписан и сохранен в хранилище, +// Ложь - ошибки или отказ во время работы. +// +Функция СформироватьПодписьФайла(Знач ПрисоединенныйФайл, Знач ДанныеФайла) Экспорт ДанныеПодписи = Неопределено; @@ -658,21 +837,25 @@ КонецФункции -// Предлагает пользователю диалог выбора сертификатов ЭЦП, подписывает двоичные данные -// присоединенного файла. Передает в вызывающую процедуру данные подписи. -// Параметры -// ПрисоединенныйФайл - ссылка на файл -// ДанныеФайла - структура с данными файла -// ДанныеПодписи - структура с данными подписи -// Возвращаемое значение -// Истина - данные присоединенного файла успешно подписаны -// Ложь - пользователь отказался от подписания или произошла ошибка +// Формирует подпись для двоичных данных файла: +// - предлагает пользователю диалог выбора сертификатов ЭЦП, +// - подписывает двоичные данные присоединенного файла с целью получения подписи. // -Функция ВыбратьСертификатыЭЦПИСформироватьДанныеПодписи(ПрисоединенныйФайл, ДанныеФайла, ДанныеПодписи) Экспорт +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл. +// ДанныеФайла - Структура с данными файла. +// ДанныеПодписи - Структура (возвращаемое значение) - сформированная подпись. +// +// Возвращаемое значение: +// Булево - Истина, если данные присоединенного файла успешно подписаны, +// Ложь, если пользователь отказался от подписания или произошла ошибка. +// +Функция ВыбратьСертификатыЭЦПИСформироватьДанныеПодписи(Знач ПрисоединенныйФайл, Знач ДанныеФайла, ДанныеПодписи) Экспорт #Если ВебКлиент Тогда Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда - Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, операция прервана.'")); + Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, + |операция прервана.'")); Возврат Ложь; КонецЕсли; #КонецЕсли @@ -696,60 +879,27 @@ КонецЕсли; ДанныеПодписи = ЭлектроннаяЦифроваяПодписьКлиент.СформироватьДанныеПодписи( - МенеджерКриптографии, - ПрисоединенныйФайл, - ДвоичныеДанные, - СтруктураПараметровПодписи); + МенеджерКриптографии, + ПрисоединенныйФайл, + ДвоичныеДанные, + СтруктураПараметровПодписи); Возврат Истина; КонецФункции -// Реализация команды сохранения файла вместе с ЭЦП +// Добавляет ЭЦП из файла(ов) на диске. // -Процедура СохранитьВместеСЭЦП(ПрисоединенныйФайл, ДанныеФайла, УникальныйИдентификатор) Экспорт - - ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); - - Если ПодключитьРасширениеРаботыСФайлами() Тогда - - ПолноеИмяФайла = СохранитьФайлКак(ДанныеФайла); - - Если ПолноеИмяФайла = "" Тогда - Возврат; // пользователь нажал Отмена или это веб клиент без расширения - КонецЕсли; - - Настройка = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьПерсональныеНастройкиРаботыСЭЦП().ДействияПриСохраненииСЭЦП; - - Если Настройка = "Спрашивать" Тогда - ПараметрыФормы = Новый Структура("Объект, УникальныйИдентификатор", ПрисоединенныйФайл, УникальныйИдентификатор); - МассивСтруктурПодписей = ОткрытьФормуМодально("ОбщаяФорма.ВыборПодписей", ПараметрыФормы); - ИначеЕсли Настройка = "СохранятьВсеПодписи" Тогда - МассивСтруктурПодписей = ЭлектроннаяЦифроваяПодпись.ПолучитьВсеПодписи(ПрисоединенныйФайл, УникальныйИдентификатор); - КонецЕсли; - - Если ТипЗнч(МассивСтруктурПодписей) = Тип("Массив") И МассивСтруктурПодписей.Количество() > 0 Тогда - ЭлектроннаяЦифроваяПодписьКлиент.СохранитьПодписи(ПрисоединенныйФайл, ПолноеИмяФайла, УникальныйИдентификатор, МассивСтруктурПодписей); - КонецЕсли; - - Иначе -#Если ВебКлиент Тогда - Предупреждение(НСтр("ru = 'Для выполнения данной операции вам нужно установить расширение работы с файлами.'")); -#КонецЕсли - КонецЕсли; - -КонецПроцедуры - -// Добавить ЭЦП из файла(ов) на диске. -// Параметры -// ПрисоединенныйФайл - ссылка на файл, которому требуется добавить подпись -// УникальныйИдентификатор - уникальный идентификатор формы +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл, которому требуется добавить подпись. +// ИдентификаторФормы - УникальныйИдентификатор формы. // -Процедура ДобавитьЭЦПИзФайла(ПрисоединенныйФайл, УникальныйИдентификатор = Неопределено) Экспорт +Процедура ДобавитьЭЦПИзФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено) Экспорт #Если ВебКлиент Тогда Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда - Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, операция прервана.'")); + Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, + |операция прервана.'")); Возврат; КонецЕсли; #КонецЕсли @@ -757,30 +907,35 @@ ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); Если ПодключитьРасширениеРаботыСФайлами() Тогда - МассивПодписей = ПолучитьМассивПодписей(ПрисоединенныйФайл, УникальныйИдентификатор); + МассивПодписей = ПолучитьМассивПодписей(ПрисоединенныйФайл, ИдентификаторФормы); Если МассивПодписей.Количество() > 0 Тогда - ПрисоединенныеФайлы.ЗанестиИнформациюОПодписях(ПрисоединенныйФайл, МассивПодписей, УникальныйИдентификатор); + ПрисоединенныеФайлы.ЗанестиИнформациюОПодписях(ПрисоединенныйФайл, МассивПодписей, ИдентификаторФормы); ОповеститьОДобавленииПодписиИзФайла(ПрисоединенныйФайл, МассивПодписей.Количество()); КонецЕсли; Иначе #Если ВебКлиент Тогда - Предупреждение(НСтр("ru = 'Для выполнения данной операции вам нужно установить расширение работы с файлами.'")); + Предупреждение(НСтр("ru = 'Для выполнения операции требуется + |установить расширение работы с файлами.'")); #КонецЕсли КонецЕсли; КонецПроцедуры -// Функция вызывает диалог добавления подписей и создает структуру с подписями. -// Параметры -// ПрисоединенныйФайл - ссылка на файл -// УникальныйИдентификатор - уникальный идентификатор формы +// Возвращает подписи, для чего вызывает диалог добавления подписей. // // ОСОБЫЕ УСЛОВИЯ // Требуется наличие подключенного расширения для работы с файлами // и расширения для работы со средствами криптографии. // -Функция ПолучитьМассивПодписей(ПрисоединенныйФайл, УникальныйИдентификатор) Экспорт +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +// Возвращаемое значение: +// Массив Структур подписей. +// +Функция ПолучитьМассивПодписей(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено) Экспорт МассивФайловПодписей = ОткрытьФормуМодально("ОбщаяФорма.ДобавлениеПодписиИзФайла"); @@ -788,7 +943,8 @@ Возврат Новый Массив; КонецЕсли; - Возврат ЭлектроннаяЦифроваяПодписьКлиент.СформироватьПодписиДляЗанесениюВБазу(ПрисоединенныйФайл, МассивФайловПодписей, УникальныйИдентификатор); + Возврат ЭлектроннаяЦифроваяПодписьКлиент.СформироватьПодписиДляЗанесениюВБазу( + ПрисоединенныйФайл, МассивФайловПодписей, ИдентификаторФормы); КонецФункции @@ -804,11 +960,11 @@ Если КоличествоПодписей = 1 Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Добавлена подпись из файла для ""%1""'"), + НСтр("ru = 'Добавлена подпись из файла для ""%1"".'"), ПрисоединенныйФайл); Иначе ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Добавлены подписи из файлов для ""%1""'"), + НСтр("ru = 'Добавлены подписи из файлов для ""%1"".'"), ПрисоединенныйФайл); КонецЕсли; @@ -817,23 +973,30 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Шифрование +// Шифрование. -// Обработчик команды шифрования файла. Выполняет шифрование файла, предварительно -// предлагает пользователю выбрать сертификаты для шифрования. Записывает зашифрованные -// данные вместе с отпечатками в хранилище и оповещает систему и пользователя об изменениях. +// Шифрует файл в хранилище: +// - предлагает пользователю выбрать сертификаты для шифрования, +// - выполняет шифрование файла, +// - записывает зашифрованные данные вместе с отпечатками в хранилище, +// - оповещает систему и пользователя об изменениях. +// Используется в обработчике команды шифрования файла. // -// Параметры -// ПрисоединенныйФайл - ссылка на файл, который требуется зашифровать -// ДанныеФайла - структура с данными файла -// УникальныйИдентификатор - уникальный идентификатор формы +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл, который требуется зашифровать. +// ДанныеФайла - Структура с данными файла. +// ИдентификаторФормы - УникальныйИдентификатор формы. // -Процедура Зашифровать(ПрисоединенныйФайл, ДанныеФайла, УникальныйИдентификатор) Экспорт +Процедура Зашифровать(Знач ПрисоединенныйФайл, Знач ДанныеФайла, Знач ИдентификаторФормы) Экспорт ЗашифрованныеДанные = Неопределено; МассивОтпечатков = Новый Массив; - Если НЕ ПолучитьЗашифрованныеДанные(ПрисоединенныйФайл, ДанныеФайла, УникальныйИдентификатор, ЗашифрованныеДанные, МассивОтпечатков) Тогда + Если НЕ ПолучитьЗашифрованныеДанные(ПрисоединенныйФайл, + ДанныеФайла, + ИдентификаторФормы, + ЗашифрованныеДанные, + МассивОтпечатков) Тогда Возврат; КонецЕсли; @@ -843,30 +1006,36 @@ КонецПроцедуры -// Служебная функция используется для шифрования двоичных данных файла -// с помощью выбранных пользователем сертификатов шифрования. -// После шифрования возвращает зашифрованные данные и массив отпечатков. -// Параметры -// ПрисоединенныйФайл - ссылка на файл -// ДанныеФайла - структура с данными файла -// УникальныйИдентификатор - уникальный идентификатор формы -// ЗашифрованныеДанные - структура с зашифрованными данными (для записи) -// МассивОтпечатков - массив отпечатков -// Возвращаемое значение -// Истина, если данные успешно зашифрованы, Ложь - иначе +// Шифрует двоичные данные файла с помощью сертификатов, выбранных пользователем. // -Функция ПолучитьЗашифрованныеДанные(ПрисоединенныйФайл, ДанныеФайла, УникальныйИдентификатор, ЗашифрованныеДанные, МассивОтпечатков) Экспорт +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл. +// ДанныеФайла - Структура с данными файла. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// ЗашифрованныеДанные - Структура (возвращаемое значение) - содержит зашифрованные данные файла (для записи). +// МассивОтпечатков - Массив (возвращаемое значение) - содержит отпечатки. +// +// Возвращаемое значение: +// Истина, если данные успешно зашифрованы, Ложь - иначе. +// +Функция ПолучитьЗашифрованныеДанные(Знач ПрисоединенныйФайл, + Знач ДанныеФайла, + Знач ИдентификаторФормы, + ЗашифрованныеДанные, + МассивОтпечатков) Экспорт #Если ВебКлиент Тогда Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда - Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, операция прервана.'")); + Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, + |операция прервана.'")); Возврат Ложь; КонецЕсли; #КонецЕсли Если ДанныеФайла.Зашифрован Тогда Предупреждение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл ""%1"" уже зашифрован.'"), Строка(ПрисоединенныйФайл))); + НСтр("ru = 'Файл ""%1"" + |уже зашифрован.'"), Строка(ПрисоединенныйФайл))); Возврат Ложь; КонецЕсли; @@ -879,7 +1048,7 @@ ОтпечатокЛичногоСертификатаДляШифрования = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ОтпечатокЛичногоСертификатаДляШифрования; - // отпечаток сохраненный в ХранилищеНастроек мог устареть - сертификат могли уже удалить + // Отпечаток сохраненный в ХранилищеНастроек мог устареть - сертификат могли уже удалить. Если ОтпечатокЛичногоСертификатаДляШифрования <> Неопределено И НЕ ПустаяСтрока(ОтпечатокЛичногоСертификатаДляШифрования) Тогда Сертификат = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьСертификатПоОтпечатку(ОтпечатокЛичногоСертификатаДляШифрования, Истина); // ТолькоЛичные Если Сертификат = Неопределено Тогда @@ -887,7 +1056,8 @@ КонецЕсли; КонецЕсли; - Если ОтпечатокЛичногоСертификатаДляШифрования = Неопределено ИЛИ ПустаяСтрока(ОтпечатокЛичногоСертификатаДляШифрования) Тогда + Если ОтпечатокЛичногоСертификатаДляШифрования = Неопределено + ИЛИ ПустаяСтрока(ОтпечатокЛичногоСертификатаДляШифрования) Тогда МассивСтруктурЛичныхСертификатов = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМассивСтруктурСертификатов(Истина); // ТолькоЛичные @@ -895,52 +1065,53 @@ СтруктураВозврата = ОткрытьФормуМодально("ОбщаяФорма.ВыборСертификата", ПараметрыФормы); Если ТипЗнч(СтруктураВозврата) = Тип("Структура") Тогда ОтпечатокЛичногоСертификатаДляШифрования = СтруктураВозврата.Отпечаток; - ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения("ЭЦП", "ОтпечатокЛичногоСертификатаДляШифрования", ОтпечатокЛичногоСертификатаДляШифрования); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения( + "ЭЦП", + "ОтпечатокЛичногоСертификатаДляШифрования", + ОтпечатокЛичногоСертификатаДляШифрования); Иначе Предупреждение(НСтр("ru = 'Не выбран персональный сертификат для шифрования.'")); Возврат Ложь; КонецЕсли; КонецЕсли; - ПараметрыФормы = Новый Структура("МассивСтруктурСертификатов, ФайлСсылка, ОтпечатокЛичногоСертификатаДляШифрования", - МассивСтруктурСертификатов, - ПрисоединенныйФайл, - ОтпечатокЛичногоСертификатаДляШифрования); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("МассивСтруктурСертификатов", МассивСтруктурСертификатов); + ПараметрыФормы.Вставить("ФайлСсылка", ПрисоединенныйФайл); + ПараметрыФормы.Вставить("ОтпечатокЛичногоСертификатаДляШифрования", ОтпечатокЛичногоСертификатаДляШифрования); МассивСертификатов = ОткрытьФормуМодально("ОбщаяФорма.ВыборСертификатовШифрования", ПараметрыФормы); Если ТипЗнч(МассивСертификатов) = Тип("Массив") Тогда Возврат ВыполнитьШифрованиеПоПараметрам(МассивСертификатов, - ДанныеФайла, - УникальныйИдентификатор, - ЗашифрованныеДанные, - МассивОтпечатков); - + ДанныеФайла, + ИдентификаторФормы, + ЗашифрованныеДанные, + МассивОтпечатков); КонецЕсли; Возврат Ложь; КонецФункции -// Служебная функция выполняет шифрование двоичных данных файла -// по переданному массиву сертификатов. Выполняет шифрование и возвращает -// структуру с зашифрованными данными. -// Параметры -// МассивСертификатов - массив сертификатов для шифрования -// ДанныеФайла - данные файла -// УникальныйИдентификатор - уникальный идентификатор формы -// ЗашифрованныеДанные - зашифрованные данные -// МассивОтпечатков - массив отпечатков -// Возвращаемое значение -// Истина - шифрование выполнено успешно, иначе Ложь +// Шифрует двоичные данные файла по указанному массиву сертификатов. // -Функция ВыполнитьШифрованиеПоПараметрам( - МассивСертификатов, - ДанныеФайла, - УникальныйИдентификатор, - ЗашифрованныеДанные, - МассивОтпечатков) +// Параметры: +// МассивСертификатов - Массив сертификатов для шифрования. +// ДанныеФайла - Структура данных файла. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// ЗашифрованныеДанные - Структура (возвращаемое значение) - содержит зашифрованные данные файла. +// МассивОтпечатков - Массив (возвращаемое значение) - содержит отпечатки. +// +// Возвращаемое значение: +// Истина - шифрование выполнено успешно, иначе Ложь. +// +Функция ВыполнитьШифрованиеПоПараметрам(Знач МассивСертификатов, + Знач ДанныеФайла, + Знач ИдентификаторФормы, + ЗашифрованныеДанные, + МассивОтпечатков) МассивОтпечатков = Новый Массив; @@ -958,33 +1129,30 @@ Отказ = Ложь; МенеджерКриптографии = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМенеджерКриптографии(Отказ); Если Отказ Тогда - Возврат Ложь + Возврат Ложь; КонецЕсли; ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла); ШифрованныйФайлДвоичныеДанные = МенеджерКриптографии.Зашифровать(ДвоичныеДанные, МассивСертификатов); - АдресВременногоХранилища = ПоместитьВоВременноеХранилище(ШифрованныйФайлДвоичныеДанные, УникальныйИдентификатор); + АдресВременногоХранилища = ПоместитьВоВременноеХранилище(ШифрованныйФайлДвоичныеДанные, ИдентификаторФормы); - ЗашифрованныеДанные = Новый Структура("АдресВременногоХранилища", АдресВременногоХранилища); + ЗашифрованныеДанные = Новый Структура; + ЗашифрованныеДанные.Вставить("АдресВременногоХранилища", АдресВременногоХранилища); - Состояние(); + Состояние(НСтр("ru = 'Шифрование завершено.'")); Возврат Истина; КонецФункции -// Служебная функция используется для оповещения системы и пользователя об -// успешном шифровании файла. -// Параметры -// ПрисоединенныйФайл - ссылка на файл -// ДанныеФайла - структура с данными файла -// -Процедура ОповеститьОбИзмененииИУдалитьФайлВРабочемКаталоге(ПрисоединенныйФайл, ДанныеФайла) Экспорт +Процедура ОповеститьОбИзмененииИУдалитьФайлВРабочемКаталоге(Знач ПрисоединенныйФайл, Знач ДанныеФайла) Экспорт ОповеститьОбИзменении(ПрисоединенныйФайл); + Состояние(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл ""%1"" зашифрован'"), - ПрисоединенныйФайл) ); + НСтр("ru = 'Файл ""%1"" + |зашифрован.'"), + ПрисоединенныйФайл) ); ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); @@ -1001,50 +1169,56 @@ Файл.УстановитьТолькоЧтение(Ложь); УдалитьФайлы(ПолныйПутьКФайлу); Исключение - // пытаемся удалить файл с диска + // Попытка удалить файл с диска. КонецПопытки; КонецЕсли; КонецЕсли; КонецПроцедуры -// Обработчик команды расшифровки файла. Показывает пользователю диалог с предложением -// расшифровать файл, далее получает двоичные данные и массив отпечатков и производит расшифровку. -// Далее расшифрованные данные записываются в хранилище. +// Расшифровывает файл в хранилище: +// - показывает пользователю диалог с предложением расшифровать файл, +// - получает двоичные данные и массив отпечатков, +// - производит расшифровку, +// - записывает расшифрованные данные файла в хранилище. +// Используется как обработчик команды расшифровки файла. // -// Параметры -// ПрисоединенныйФайл - ссылка на файл -// ДанныеФайла - структура с данными файла -// УникальныйИдентификатор - уникальный идентификатор формы +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл. +// ДанныеФайла - Структура с данными файла. +// ИдентификаторФормы - УникальныйИдентификатор формы. // -Процедура Расшифровать(ПрисоединенныйФайл, ДанныеФайла, УникальныйИдентификатор) Экспорт +Процедура Расшифровать(Знач ПрисоединенныйФайл, Знач ДанныеФайла, Знач ИдентификаторФормы) Экспорт РасшифрованныеДанные = Неопределено; - Если НЕ ПолучитьРасшифрованныеДанные(ПрисоединенныйФайл, ДанныеФайла, РасшифрованныеДанные, УникальныйИдентификатор) Тогда + Если НЕ ПолучитьРасшифрованныеДанные(ПрисоединенныйФайл, ДанныеФайла, РасшифрованныеДанные, ИдентификаторФормы) Тогда Возврат; КонецЕсли; ПрисоединенныеФайлы.Расшифровать(ПрисоединенныйФайл, РасшифрованныеДанные); - ОповеститьОРасшифровкеФайла(ПрисоединенныйФайл, ДанныеФайла) + ОповеститьОРасшифровкеФайла(ПрисоединенныйФайл); КонецПроцедуры -// Служебная функция, получает расшифрованные данные файла. -// Параметры -// ПрисоединенныйФайл - ссылка на файл -// ДанныеФайла - структура с данными файла -// РасшифрованныеДанные - структура с расшифрованными данными, заполняется в процедуре -// УникальныйИдентификатор - уникальный идентификатор формы -// Возвращаемое значение -// Истина - данные успешно расшифрованы, Ложь - данные не расшифрованы +// Получает расшифрованные данные файла. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл. +// ДанныеФайла - Структура с данными файла. +// РасшифрованныеДанные - Структура (возвращаемое значение) - содержит расшифрованные данные. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +// Возвращаемое значение: +// Истина - данные успешно расшифрованы, Ложь - данные не расшифрованы. // -Функция ПолучитьРасшифрованныеДанные(ПрисоединенныйФайл, ДанныеФайла, РасшифрованныеДанные, УникальныйИдентификатор) Экспорт +Функция ПолучитьРасшифрованныеДанные(Знач ПрисоединенныйФайл, Знач ДанныеФайла, РасшифрованныеДанные, Знач ИдентификаторФормы) Экспорт #Если ВебКлиент Тогда Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда - Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, операция прервана.'")); + Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, + |операция прервана.'")); Возврат Ложь; КонецЕсли; #КонецЕсли @@ -1063,10 +1237,10 @@ КонецЕсли; КонецЦикла; - ПараметрыФормы = Новый Структура("Заголовок, ПредставленияСертификатов, Файл", - НСтр("ru = 'Введите пароль для расшифровки'"), - ПредставленияСертификатов, - ПрисоединенныйФайл); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Введите пароль для расшифровки'")); + ПараметрыФормы.Вставить("ПредставленияСертификатов", ПредставленияСертификатов); + ПараметрыФормы.Вставить("Файл", ПрисоединенныйФайл); КодВозврата = ОткрытьФормуМодально("ОбщаяФорма.ВводПароляСОписаниями", ПараметрыФормы); @@ -1088,7 +1262,7 @@ МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Пароль; ДвоичныеДанныеРасшифрованные = МенеджерКриптографии.Расшифровать(ДвоичныеДанные); - АдресВременногоХранилищаРасшифрованныхДанных = ПоместитьВоВременноеХранилище(ДвоичныеДанныеРасшифрованные, УникальныйИдентификатор); + АдресВременногоХранилищаРасшифрованныхДанных = ПоместитьВоВременноеХранилище(ДвоичныеДанныеРасшифрованные, ИдентификаторФормы); #Если ВебКлиент Тогда АдресВременногоХранилищаТекста = ""; @@ -1097,122 +1271,67 @@ Если НЕ ИзвлекатьТекстыФайловНаСервере Тогда ПолныйПутьКФайлу = ПолучитьИмяВременногоФайла(ДанныеФайла.Расширение); ДвоичныеДанныеРасшифрованные.Записать(ПолныйПутьКФайлу); - АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище(ПолныйПутьКФайлу, УникальныйИдентификатор); + АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище(ПолныйПутьКФайлу, ИдентификаторФормы); УдалитьФайлы(ПолныйПутьКФайлу); Иначе АдресВременногоХранилищаТекста = ""; КонецЕсли; #КонецЕсли - РасшифрованныеДанные = Новый Структура("АдресВременногоХранилища, АдресВременногоХранилищаТекста", - АдресВременногоХранилищаРасшифрованныхДанных, - АдресВременногоХранилищаТекста); + РасшифрованныеДанные = Новый Структура; + РасшифрованныеДанные.Вставить("АдресВременногоХранилища", АдресВременногоХранилищаРасшифрованныхДанных); + РасшифрованныеДанные.Вставить("АдресВременногоХранилищаТекста", АдресВременногоХранилищаТекста); - Состояние(""); + Состояние(НСтр("ru = 'Расшифровка завершена.'")); Возврат Истина; КонецФункции -// Оповещает систему и пользователя о расшифровке файла -// Параметры -// ПрисоединенныйФайл - ссылка на файл -// ДанныеФайла - структура с данными файла +// Оповещает систему и пользователя о расшифровке файла. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл. // -Процедура ОповеститьОРасшифровкеФайла(ПрисоединенныйФайл, ДанныеФайла) Экспорт +Процедура ОповеститьОРасшифровкеФайла(Знач ПрисоединенныйФайл) Экспорт ОповеститьОбИзменении(ПрисоединенныйФайл); - Состояние(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл ""%1"" расшифрован'"), ПрисоединенныйФайл) ); + + Состояние(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Файл ""%1"" + |расшифрован.'"), + ПрисоединенныйФайл) ); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Служебные -// +// Вспомогательные процедуры и функции -// Получает данные файла с сервера и записывает их в каталог на диске +// Помещает файлы с диска в хранилище присоединенных файлов. +// // Параметры: -// СсылкаНаДвоичныеДанныеФайла - адрес во временном хранилище с двоичными данными, либо навигационная ссылка на данные файла в ИБ -// ОтносительныйПуть - путь к файлу относительно рабочего каталога -// ДатаМодификацииУниверсальная - Дата - универсальная дата модификации файла -// ИмяФайла - Строка - имя файла (с расширением) +// ВыбранныеФайлы - Массив - пути к файлам на диске. +// ВладелецФайла - Ссылка на владельца файла. +// НастройкиРаботыСФайлами - Структура. +// ПрисоединенныеФайлыМассив - Массив (возвращаемое значение) - заполняется ссылками +// на добавленные файлы. +// ИдентификаторФормы - УникальныйИдентификатор формы. // -// Возвращаемое значение: булево -// Истина - файл получен и сохранен успешно, иначе Ложь -// -// ОСОБЫЕ УСЛОВИЯ -// Требуется наличие подключенного расширения для работы с файлами. -// -Функция ПолучитьФайлВРабочийКаталог(СсылкаНаДвоичныеДанныеФайла, - ОтносительныйПуть, - ДатаМодификацииУниверсальная, - ИмяФайла, - РабочийКаталогПользователя = "", - ПолноеИмяФайлаНаКлиенте) Экспорт +Процедура ПоместитьВыбранныеФайлыВХранилище(Знач ВыбранныеФайлы, + Знач ВладелецФайла, + Знач НастройкиРаботыСФайлами, + ПрисоединенныеФайлыМассив, + Знач ИдентификаторФормы) - - Если РабочийКаталогПользователя = Неопределено Или ПустаяСтрока(РабочийКаталогПользователя) Тогда - Возврат Ложь; - КонецЕсли; - - КаталогСохранения = РабочийКаталогПользователя + ОтносительныйПуть; - - Попытка - СоздатьКаталог(КаталогСохранения); - Исключение - СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - СообщениеОбОшибке = НСтр("ru = 'Ошибка создания каталога на диске:'") + " " + СообщениеОбОшибке; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); - Возврат Ложь; - КонецПопытки; - - Файл = Новый Файл(КаталогСохранения + ИмяФайла); - Если Файл.Существует() Тогда - Файл.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(КаталогСохранения + ИмяФайла); - КонецЕсли; - - ПолучаемыйФайл = Новый ОписаниеПередаваемогоФайла(КаталогСохранения + ИмяФайла, СсылкаНаДвоичныеДанныеФайла); - ПолучаемыеФайлы = Новый Массив; - ПолучаемыеФайлы.Добавить(ПолучаемыйФайл); - - ПолученныеФайлы = Новый Массив; - - Если ПолучитьФайлы(ПолучаемыеФайлы, ПолученныеФайлы, , Ложь) Тогда - ПолноеИмяФайлаНаКлиенте = ПолученныеФайлы[0].Имя; - Файл = Новый Файл(ПолноеИмяФайлаНаКлиенте); - Файл.УстановитьУниверсальноеВремяИзменения(ДатаМодификацииУниверсальная); - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Процедура для помещения файлов с диска в хранилище присоединенных файлов -// Параметры: -// ВыбранныеФайлы - массив - пути к файлам на диске -// ВладелецФайла - любая ссылка - владелец файла -// МаксРазмерФайла - число - максимальный размер файла -// ИзвлекатьТекстыФайловНаСервере - булево - извлекать тексты файлов на сервере -// УникальныйИдентификатор - уникальный идентификатор формы -// -// ПрисоединенныеФайлыМассив - массив добавленных в хранилище файлов (ссылки) -// -Процедура ПоместитьВыбранныеФайлыВХранилище( - ВыбранныеФайлы, - ВладелецФайла, - НастройкиРаботыСФайлами, - ПрисоединенныеФайлыМассив, - УникальныйИдентификатор) - - МаксРазмерФайла = НастройкиРаботыСФайлами.МаксимальныйРазмерФайла; - ИзвлекатьТекстыФайловНаСервере = НастройкиРаботыСФайлами.ИзвлекатьТекстыФайловНаСервере; - ЗапретЗагрузкиФайловПоРасширению = НастройкиРаботыСФайлами.ЗапретЗагрузкиФайловПоРасширению; - СписокЗапрещенныхРасширений = НастройкиРаботыСФайлами.СписокЗапрещенныхРасширений; + МаксРазмерФайла = НастройкиРаботыСФайлами.МаксимальныйРазмерФайла; + ИзвлекатьТекстыФайловНаСервере = НастройкиРаботыСФайлами.ИзвлекатьТекстыФайловНаСервере; + ЗапретЗагрузкиФайловПоРасширению = НастройкиРаботыСФайлами.ЗапретЗагрузкиФайловПоРасширению; + СписокЗапрещенныхРасширений = НастройкиРаботыСФайлами.СписокЗапрещенныхРасширений; ТекущаяПозиция = 0; + ПоследнийСохраненныйФайл = Неопределено; + Для Каждого ПолноеИмяФайла Из ВыбранныеФайлы Цикл ТекущаяПозиция = ТекущаяПозиция + 1; @@ -1220,31 +1339,34 @@ Файл = Новый Файл(ПолноеИмяФайла); Если Файл.Размер() > МаксРазмерФайла Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОПревышенииМаксимальноДопустимогоРазмераФайла(Файл.Размер(), МаксРазмерФайла, Файл.Имя)); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СообщениеОПревышенииМаксимальноДопустимогоРазмераФайла(Файл.Размер(), МаксРазмерФайла, Файл.Имя)); Продолжить; КонецЕсли; - Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки(ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, Файл.Расширение) Тогда - ВызватьИсключение - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. Обратитесь к администратору системы.'"), - Файл.Расширение); + Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки( + ЗапретЗагрузкиФайловПоРасширению, + СписокЗапрещенныхРасширений, + Файл.Расширение) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. + |Обратитесь к администратору.'"), + Файл.Расширение); КонецЕсли; Если ИзвлекатьТекстыФайловНаСервере Тогда АдресВременногоХранилищаТекста = ""; Иначе - АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище(ПолноеИмяФайла, УникальныйИдентификатор); + АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище( + ПолноеИмяФайла, ИдентификаторФормы); КонецЕсли; - ВремяИзменения = ТекущаяДата(); + ВремяИзменения = ОбщегоНазначенияКлиент.ДатаСеанса(); ВремяИзмененияУниверсальное = Файл.ПолучитьУниверсальноеВремяИзменения(); - Если ВыбранныеФайлы.Количество() >1 Тогда - ОбновитьИндикаторПрогресса(ВыбранныеФайлы.Количество(), ТекущаяПозиция, Файл.Имя, Файл.Размер()); - Иначе - ИнформироватьПользователяОСохраненииФайла(Файл.Имя, Файл.Размер()); - КонецЕсли; + ОбновитьСостояниеОСохраненииФайлов(ВыбранныеФайлы, Файл, ТекущаяПозиция); + ПоследнийСохраненныйФайл = Файл; ПомещаемыеФайлы = Новый Массив; Описание = Новый ОписаниеПередаваемогоФайла(Файл.ПолноеИмя, ""); @@ -1252,16 +1374,18 @@ ПомещенныеФайлы = Новый Массив; - Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, УникальныйИдентификатор) Тогда + Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, ИдентификаторФормы) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при помещении файла в хранилище: %1'"), Файл.ПолноеИмя) ); + НСтр("ru = 'Ошибка при помещении файла в хранилище: + |""%1"".'"), + Файл.ПолноеИмя) ); Продолжить; КонецЕсли; АдресВременногоХранилищаФайла = ПомещенныеФайлы[0].Хранение; - // Создадим карточку Файла в БД + // Создание карточки Файла в базе данных. ПрисоединенныйФайл = ПрисоединенныеФайлы.ДобавитьФайл( ВладелецФайла, Файл.ИмяБезРасширения, @@ -1279,29 +1403,29 @@ КонецЦикла; - Состояние(""); + ОбновитьСостояниеОСохраненииФайлов(ВыбранныеФайлы, ПоследнийСохраненныйФайл); КонецПроцедуры -Функция ДиалогНужноПолучитьФайлССервера(ПолноеИмяФайлаНаКлиенте, ДанныеФайла, ФайлРедактируется, Отказ = Ложь) +Функция ДиалогНужноПолучитьФайлССервера(Знач ПолноеИмяФайлаНаКлиенте, Знач ДанныеФайла, Знач ФайлРедактируется, Отказ = Ложь) ФайлНаДиске = Новый Файл(ПолноеИмяФайлаНаКлиенте); - ДатаФайлаВБазе = МестноеВремя(ДанныеФайла.ДатаМодификацииУниверсальная); + ДатаФайлаВБазе = МестноеВремя(ДанныеФайла.ДатаМодификацииУниверсальная); ДатаФайлаНаДиске = МестноеВремя(ФайлНаДиске.ПолучитьУниверсальноеВремяИзменения()); Если (ДатаФайлаНаДиске - ДатаФайлаВБазе) > 1 Тогда ПараметрыОткрытияФормы = Новый Структура; - ПараметрыОткрытияФормы.Вставить("Файл", ПолноеИмяФайлаНаКлиенте); - ПараметрыОткрытияФормы.Вставить("ВремяИзмененияНаСервере", ДатаФайлаВБазе); - ПараметрыОткрытияФормы.Вставить("ВРабочемКаталоге", ДатаФайлаНаДиске); - ПараметрыОткрытияФормы.Вставить("Заголовок", НСтр("ru = 'В рабочем каталоге более новый файл'")); + ПараметрыОткрытияФормы.Вставить("Файл", ПолноеИмяФайлаНаКлиенте); + ПараметрыОткрытияФормы.Вставить("ВремяИзмененияНаСервере", ДатаФайлаВБазе); + ПараметрыОткрытияФормы.Вставить("ВРабочемКаталоге", ДатаФайлаНаДиске); + ПараметрыОткрытияФормы.Вставить("Заголовок", НСтр("ru = 'В рабочем каталоге более новый файл'")); Если ФайлРедактируется Тогда - Сообщение = НСтр("ru = 'Файл на локальном компьютере, отмеченный как взятый на редактирование, имеет более позднюю дату изменения. Открыть файл из локального каталога или взять из информационной базы и перезаписать?'"); + Сообщение = НСтр("ru = 'Файл, отмеченный как взятый на редактирование, имеет на локальном компьютере более позднюю дату изменения. Открыть существующий файл или взять с сервера и перезаписать существующий?'"); Иначе - Сообщение = НСтр("ru = 'Файл на локальном компьютере имеет более позднюю дату, возможно, он был изменен. Открыть существующий или взять с сервера и перезаписать?'"); + Сообщение = НСтр("ru = 'Файл на локальном компьютере имеет более позднюю дату, возможно, он был изменен. Открыть существующий файл или взять с сервера и перезаписать существующий?'"); КонецЕсли; ПараметрыОткрытияФормы.Вставить("Сообщение", Сообщение); @@ -1317,29 +1441,30 @@ Возврат Неопределено; КонецЕсли; - ИначеЕсли (ДатаФайлаВБазе - ДатаФайлаНаДиске) > 1 Тогда // в базе более новый - Если ФайлРедактируется Тогда // В рабочем каталоге на редактирование + ИначеЕсли (ДатаФайлаВБазе - ДатаФайлаНаДиске) > 1 Тогда // В базе более новый. + Если ФайлРедактируется Тогда // В рабочем каталоге на редактирование. ПараметрыОткрытияФормы = Новый Структура; - ПараметрыОткрытияФормы.Вставить("Файл", ДатаФайлаВБазе); - ПараметрыОткрытияФормы.Вставить("ВремяИзмененияНаСервере", ДатаФайлаВБазе); - ПараметрыОткрытияФормы.Вставить("ВРабочемКаталоге", ДатаФайлаНаДиске); - ПараметрыОткрытияФормы.Вставить("Заголовок", НСтр("ru = 'В рабочем каталоге более старый файл'")); + ПараметрыОткрытияФормы.Вставить("Файл", ДатаФайлаВБазе); + ПараметрыОткрытияФормы.Вставить("ВремяИзмененияНаСервере", ДатаФайлаВБазе); + ПараметрыОткрытияФормы.Вставить("ВРабочемКаталоге", ДатаФайлаНаДиске); + ПараметрыОткрытияФормы.Вставить("Заголовок", НСтр("ru = 'В рабочем каталоге более старый файл'")); + + Сообщение = НСтр("ru = 'Файл, отмеченный как взятый на редактирование, имеет на локальном компьютере более раннюю дату изменения, чем на сервере. Открыть существующий файл или взять с сервера и перезаписать существующий?'"); - Сообщение = НСтр("ru = 'Файл на локальном компьютере, отмеченный как взятый на редактирование, имеет более раннюю дату изменения, чем на сервере. Открыть файл из локального каталога или взять из информационной базы и перезаписать?'"); ПараметрыОткрытияФормы.Вставить("Сообщение", Сообщение); Ответ = ОткрытьФормуМодально("ОбщаяФорма.ВыборДействияПриОбнаруженииБолееНовогоФайла", ПараметрыОткрытияФормы); - Если Ответ = КодВозвратаДиалога.Да Тогда // Открыть существующий + Если Ответ = КодВозвратаДиалога.Да Тогда // Открыть существующий. Возврат Ложь; - ИначеЕсли Ответ = КодВозвратаДиалога.Отмена Тогда // Выйти ничего не делая + ИначеЕсли Ответ = КодВозвратаДиалога.Отмена Тогда // Выйти ничего не делая. Отказ = Истина; Возврат Ложь; - ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда // Перезаписать + ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда // Перезаписать. УдалитьФайл(ПолноеИмяФайлаНаКлиенте); Возврат Истина; КонецЕсли; - Иначе // В рабочем каталоге на чтение + Иначе // В рабочем каталоге на чтение. УдалитьФайл(ПолноеИмяФайлаНаКлиенте); Возврат Истина; КонецЕсли; @@ -1349,11 +1474,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные -// - -Процедура УдалитьФайл(ПолноеИмяФайла) +Процедура УдалитьФайл(Знач ПолноеИмяФайла) Файл = Новый Файл(ПолноеИмяФайла); Файл.УстановитьТолькоЧтение(Ложь); @@ -1361,69 +1482,78 @@ КонецПроцедуры -Функция СообщениеОПревышенииМаксимальноДопустимогоРазмераФайла(РазмерФайла, МаксимальныйРазмерФайла, ИмяФайла) +Функция СообщениеОПревышенииМаксимальноДопустимогоРазмераФайла(Знач РазмерФайла, Знач МаксимальныйРазмерФайла, Знач ИмяФайла) - РазмерВМб = РазмерФайла / (1024 * 1024); + РазмерВМб = РазмерФайла / (1024 * 1024); РазмерВМбМакс = МаксимальныйРазмерФайла / (1024 * 1024); - Возврат - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Размер файла ""%1"" (%2 Мб) превышает максимально допустимый размер файла (%3 Мб).'"), - ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Размер файла ""%1"" (%2 Мб) + |превышает максимально допустимый размер файла (%3 Мб).'"), + ИмяФайла, + ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), + ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс) ); КонецФункции -Процедура ОткрытьФайлПриложением(ИмяОткрываемогоФайла) +Процедура ОткрытьФайлПриложением(Знач ИмяОткрываемогоФайла) РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); Если РасширениеПодключено Тогда - // Открыть Файл + // Открытие Файла. Попытка ЗапуститьПриложение(ИмяОткрываемогоФайла); Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); - Инфо = ИнформацияОбОшибке(); Предупреждение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Описание=""%1""'"), - Инфо.Описание)); - + НСтр("ru = 'При открытии файла + |""%1"" + |произошла ошибка: + |""%2"".'"), + ИмяОткрываемогоФайла, + ИнформацияОбОшибке.Описание)); КонецПопытки; КонецЕсли; КонецПроцедуры -Процедура ОбновитьИндикаторПрогресса(КоличествоФайлов, ТекущаяПозиция, ИмяФайла, РазмерФайла) +Процедура ОбновитьСостояниеОСохраненииФайлов(Знач ВыбранныеФайлы, Знач Файл, Знач ТекущаяПозиция = Неопределено); - ИндикаторПроцент = ТекущаяПозиция * 100 / КоличествоФайлов; + Если Файл = Неопределено Тогда + Возврат; + КонецЕсли; - РазмерВМб = РазмерФайла / (1024 * 1024); + РазмерВМб = ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(Файл.Размер() / (1024 * 1024)); - НадписьПодробнее = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Обрабатывается файл ""%1"" (%2 Мб)...'"), - ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + Если ВыбранныеФайлы.Количество() > 1 Тогда - ТекстСостояния = НСтр("ru = 'Импорт файлов с диска...'"); - - Состояние(ТекстСостояния, ИндикаторПроцент, НадписьПодробнее, БиблиотекаКартинок.Информация32); - -КонецПроцедуры - -Процедура ИнформироватьПользователяОСохраненииФайла(ИмяФайла, РазмерФайла) - - ТекстПояснения = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Идет сохранение файла ""%1"" (%2 Мб). - |Пожалуйста, подождите...'"), - ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерФайла)); - - Состояние(ТекстПояснения); + Если ТекущаяПозиция = Неопределено Тогда + Состояние(НСтр("ru = 'Сохранение файлов завершено.'")); + Иначе + ИндикаторПроцент = ТекущаяПозиция * 100 / ВыбранныеФайлы.Количество(); + + НадписьПодробнее = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сохраняется файл ""%1"" (%2 Мб) ...'"), Файл.Имя, РазмерВМб); + + ТекстСостояния = НСтр("ru = 'Сохранение нескольких файлов.'"); + + Состояние(ТекстСостояния, ИндикаторПроцент, НадписьПодробнее, БиблиотекаКартинок.Информация32); + КонецЕсли; + Иначе + Если ТекущаяПозиция = Неопределено Тогда + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сохранение файла ""%1"" (%2 Мб) + |завершено.'"), Файл.Имя, РазмерВМб); + Иначе + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сохраняется файл ""%1"" (%2 Мб). + |Пожалуйста, подождите...'"), Файл.Имя, РазмерВМб); + КонецЕсли; + Состояние(ТекстПояснения); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСобытия/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыСобытия/Module.bsl index 02909ff92..91fee10e3 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыСобытия/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыСобытия/Module.bsl @@ -1,8 +1,12 @@ //////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок - -// Обработчик подписки "перед записью" присоединенного файла +// Подсистема "Присоединенные файлы". // +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Обработчик подписки присоединенного файла на событие "Перед записью". Процедура ПередЗаписьюПрисоединенногоФайла(Источник, Отказ) Экспорт Если Источник.ОбменДанными.Загрузка Тогда @@ -12,13 +16,12 @@ Источник.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Источник.Расширение); Если Источник.ЭтоНовый() Тогда - Источник.Автор = ОбщегоНазначения.ТекущийПользователь(); + Источник.Автор = Пользователи.ТекущийПользователь(); КонецЕсли; КонецПроцедуры -// Обработчик подписки "перед удалением" присоединенного файла -// +// Обработчик подписки присоединенного файла на событие "Перед удалением". Процедура ПередУдалениемПрисоединенногоФайла(Источник, Отказ) Экспорт Если Источник.ОбменДанными.Загрузка Тогда @@ -29,8 +32,7 @@ КонецПроцедуры -// Обработчик подписки "при записи" присоединенного файла -// +// Обработчик подписки присоединенного файла на событие "При записи". Процедура ПриЗаписиПрисоединенногоФайла(Источник, Отказ) Экспорт Если Источник.ОбменДанными.Загрузка Тогда @@ -42,12 +44,25 @@ КонецПроцедуры -// Обработчик подписки "перед записью" владельца присоединенного файла +// Обработчик подписки присоединенного файла на событие "Обработка получения формы". +Процедура ОбработкаПолученияФормыПрисоединенногоФайла(Источник, ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт + + Если ВидФормы = "ФормаОбъекта" Тогда + ВыбраннаяФорма = "ОбщаяФорма.ПрисоединенныйФайл"; + СтандартнаяОбработка = Ложь; + + ИначеЕсли ВидФормы = "ФормаСписка" Тогда + ВыбраннаяФорма = "ОбщаяФорма.ПрисоединенныеФайлы"; + СтандартнаяОбработка = Ложь; + КонецЕсли; +КонецПроцедуры + +// Обработчик подписки владельца присоединенного файла на событие "Перед записью". // Помечает на удаление связанные файлы. // // Параметры: -// Источник - объект - владелец присоединенного файла -// Отказ - булево - признак отказа от записи +// Источник - Объект - владелец присоединенного файла, кроме ДокументОбъект. +// Отказ - Булево - признак отказа от записи. // Процедура УстановитьПометкуУдаленияПрисоединенныхФайлов(Источник, Отказ) Экспорт @@ -59,12 +74,12 @@ КонецПроцедуры -// Обработчик подписки "перед записью" владельца присоединенного файла документа +// Обработчик подписки владельца-документа присоединенного файла на событие "Перед записью". // Помечает на удаление связанные файлы. // // Параметры: -// Источник - объект - владелец присоединенного файла документа -// Отказ - булево - признак отказа от записи +// Источник - ДокументОбъект - владелец присоединенного файла. +// Отказ - Булево - признак отказа от записи. // Процедура УстановитьПометкуУдаленияПрисоединенныхФайловДокументов(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт @@ -76,8 +91,22 @@ КонецПроцедуры +// Обработчик подписки владельца присоединенного файла на событие "При записи на сервере". +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи, Параметры) Экспорт + + Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда + ПрисоединенныеФайлы.СкопироватьПрисоединенныеФайлы(Параметры.ЗначениеКопирования, ТекущийОбъект); + КонецЕсли; + +КонецПроцедуры -Процедура ПометитьНаУдалениеПриложенныеФайлы(Источник) +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок + +Процедура ПометитьНаУдалениеПриложенныеФайлы(Знач Источник) Если Источник.ЭтоНовый() ТОгда Возврат; @@ -91,19 +120,17 @@ Возврат; КонецЕсли; - ИмяОбъекта = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Источник.Метаданные().ПолноеИмя(), ".")[1]; - ПолноеИмяОМ = "Справочник." + ИмяОбъекта + "ПрисоединенныеФайлы"; - ТекстЗапроса = "ВЫБРАТЬ | Файлы.Ссылка КАК Ссылка, | Файлы.Редактирует КАК Редактирует |ИЗ - | [ПолноеИмяОМ] КАК Файлы + | &ИмяСправочника КАК Файлы |ГДЕ | Файлы.ВладелецФайла = &ВладелецФайла"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ПолноеИмяОМ]", ПолноеИмяОМ); + ПолноеИмяСправочника = "Справочник." + Источник.Метаданные().Имя + "ПрисоединенныеФайлы"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", ПолноеИмяСправочника); Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; @@ -114,7 +141,9 @@ Пока Выборка.Следующий() Цикл Если Источник.ПометкаУдаления И Не Выборка.Редактирует.Пустая() Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '""%1"" не может быть удален, т.к. содержит файл ""%2"", занятый для редактирования.'"), + НСтр("ru = '""%1"" не может быть удален, + |т.к. содержит файл ""%2"", + |занятый для редактирования.'"), Строка(Источник.Ссылка), Строка(Выборка.Ссылка)); КонецЕсли; @@ -125,7 +154,7 @@ КонецПроцедуры -Процедура ЗаписатьДанныеФайлаВРегистрПриОбмене(Источник) +Процедура ЗаписатьДанныеФайлаВРегистрПриОбмене(Знач Источник) Перем ДвоичныеДанныеФайла; @@ -149,30 +178,25 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий обмена -// Проверяет, что переданный элемент данных - это объект присоединенного файла -// -Процедура ЭтоЭлементФайл(ЭлементДанных, ЭтоФайл) Экспорт +// Проверяет, что переданный элемент данных - это объект присоединенного файла. +Процедура ЭтоЭлементФайл(Знач ЭлементДанных, ЭтоФайл) Экспорт ЭтоФайл = ЭтоФайл Или ЭтоЭлементПрисоединенныеФайлы(ЭлементДанных); КонецПроцедуры -// Проверяет, что переданный элемент данных - это объект присоединенного файла -// -Функция ЭтоЭлементПрисоединенныеФайлы(ЭлементДанных) Экспорт +// Проверяет, что переданный элемент данных - это объект присоединенного файла. +Функция ЭтоЭлементПрисоединенныеФайлы(Знач ЭлементДанных) Экспорт - Подстроки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЭлементДанных.Метаданные().ПолноеИмя(), "."); - Если (Подстроки[0] = "Справочник" ИЛИ Подстроки[0] = "Catalog") И Прав(Подстроки[1], 19) = "ПрисоединенныеФайлы" Тогда - Возврат Истина; - КонецЕсли; + МетаданныеЭлемента = ЭлементДанных.Метаданные(); - Возврат Ложь; + Возврат ОбщегоНазначения.ЭтоСправочник(МетаданныеЭлемента) + И ВРег(Прав(МетаданныеЭлемента.Имя, СтрДлина("ПрисоединенныеФайлы"))) = ВРег("ПрисоединенныеФайлы"); КонецФункции -// Используется при создании начального образа работы с файлами -// -Процедура УстановитьИмяФайлаПриОтправкеДанныхФайла(ЭлементДанных, ИмяКаталогаФайлов, УникальныйИдентификатор, ПутьФайла) Экспорт +// Создает начальный образ работы с файлами. +Процедура УстановитьИмяФайлаПриОтправкеДанныхФайла(Знач ЭлементДанных, Знач ИмяКаталогаФайлов, Знач УникальныйИдентификатор, ПутьФайла) Экспорт Если ПутьФайла <> Неопределено Тогда Возврат; @@ -185,21 +209,38 @@ КонецПроцедуры -// Используется в обмене при получении данных -// -Процедура ДобавитьНаДискПриПолученииДанныхФайла(ЭлементДанных, ДвоичныеДанные, ПутьКФайлуНаТоме, СсылкаНаТом, ВремяИзменения, ИмяБезРасширения, Расширение, РазмерФайла, Зашифрован) Экспорт +// Используется в обмене при получении данных. +Процедура ДобавитьНаДискПриПолученииДанныхФайла(Знач ЭлементДанных, + Знач ДвоичныеДанные, + ПутьКФайлуНаТоме, + СсылкаНаТом, + Знач ВремяИзменения, + Знач ИмяБезРасширения, + Знач Расширение, + Знач РазмерФайла, + Знач Зашифрован) Экспорт Если ЭтоЭлементПрисоединенныеФайлы(ЭлементДанных) Тогда - ФайловыеФункции.ДобавитьНаДиск(ДвоичныеДанные, ПутьКФайлуНаТоме, СсылкаНаТом, ВремяИзменения, "", ИмяБезРасширения, Расширение, РазмерФайла, Зашифрован); + + ФайловыеФункции.ДобавитьНаДиск( + ДвоичныеДанные, + ПутьКФайлуНаТоме, + СсылкаНаТом, + ВремяИзменения, + "", + ИмяБезРасширения, + Расширение, + РазмерФайла, + Зашифрован); КонецЕсли; КонецПроцедуры // Выполняет дополнительную обработку при отправке данных обмена. -// Помещает данные присоединенного файла из регистра во временное хранилище, адрес которого -// запоминается в реквизите ФайлХранилище. +// Помещает данные присоединенного файла из регистра во временное хранилище, +// адрес которого запоминается в реквизите ФайлХранилище. // -Процедура ВыполнитьДополнительнуюОбработкуПриОтправкеДанных(ЭлементДанных) Экспорт +Процедура ВыполнитьДополнительнуюОбработкуПриОтправкеДанных(Знач ЭлементДанных) Экспорт Если Не ЭтоЭлементПрисоединенныеФайлы(ЭлементДанных) Тогда Возврат; @@ -215,9 +256,9 @@ КонецПроцедуры // Выполняет дополнительную обработку при получении данных обмена. -// Размещает присоединенные файлы в регистре. +// Размещает присоединенные файлы в регистре. // -Процедура ВыполнитьДополнительнуюОбработкуПриПолученииДанных(ЭлементДанных) Экспорт +Процедура ВыполнитьДополнительнуюОбработкуПриПолученииДанных(Знач ЭлементДанных) Экспорт Если Не ЭтоЭлементПрисоединенныеФайлы(ЭлементДанных) Тогда Возврат; diff --git a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl index abdacb075..e2a7224b3 100644 --- a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Запрашивает у пользователя диалог с подтверждением легальности полученного // обновления и завершает работу системы если обновление получено не легально // (см. параметр ЗавершатьРаботуСистемы). @@ -38,6 +41,10 @@ // Функция ПодтвердитьЛегальностьПолученияОбновления() Экспорт + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат Истина; + КонецЕсли; + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); Если ПараметрыРаботыКлиента.ПервыйЗапуск diff --git a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl new file mode 100644 index 000000000..fc78db7d6 --- /dev/null +++ b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl @@ -0,0 +1,1757 @@ +/////////////////////////////////////////////////////////////////////////////////// +// РаботаВМоделиСервиса. +// +/////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Очищает все параметры сеанса, кроме связанных с общим +// реквизитом ОбластьДанных. +// +Процедура ОчиститьВсеПараметрыСеансаКромеРазделителей() Экспорт + + ОбщегоНазначения.ОчиститьПараметрыСеанса(, "ОбластьДанныхЗначение,ОбластьДанныхИспользование"); + +КонецПроцедуры + +// Устанавливает управляемую блокировку на пространства блокировок всех +// объектов, входящих в состав разделителя и неразделенные регистры сведений +// хранящие разделенные данные (по текущему значению разделителя). +// Опционально проверяется наличие других пользовательских сеансов +// в текущей области данных. +// Может использоваться только в транзакции. +// Может использоваться только при включенном разделении и установленном +// значении разделителя. +// +// Параметры: +// ПроверитьОтсутствиеДругихСеансов - Булево - проверить отсутствие других +// пользовательских сеансов со значением разделителя равным текущему. +// В случае обнаружения других сеансов будет выдано исключение. +// РазделяемаяБлокировка - Булеов - установить разделяемую блокировку +// вместо исключительной. +// +Процедура ЗаблокироватьТекущуюОбластьДанных(Знач ПроверитьОтсутствиеДругихСеансов = Ложь, Знач РазделяемаяБлокировка = Ложь) Экспорт + + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ВызватьИсключение(НСтр("ru = 'Блокировка области может быть установлена только при включенном использовании разделителей'")); + КонецЕсли; + + Если РазделяемаяБлокировка Тогда + РежимБлокировки = РежимБлокировкиДанных.Разделяемый; + Иначе + РежимБлокировки = РежимБлокировкиДанных.Исключительный; + КонецЕсли; + + Блокировка = Новый БлокировкаДанных; + + МДОбщегоРеквизита = Метаданные.ОбщиеРеквизиты.ОбластьДанных; + + // Константы + Для каждого МетаданныеКонстанты Из Метаданные.Константы Цикл + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МетаданныеКонстанты) Тогда + Продолжить; + КонецЕсли; + + ЭлементБлокировки = Блокировка.Добавить(МетаданныеКонстанты.ПолноеИмя()); + ЭлементБлокировки.Режим = РежимБлокировки; + КонецЦикла; + + // Ссылочные типы + + ВидыОбъектов = Новый Массив; + ВидыОбъектов.Добавить("Справочники"); + ВидыОбъектов.Добавить("Документы"); + ВидыОбъектов.Добавить("ПланыВидовХарактеристик"); + ВидыОбъектов.Добавить("ПланыСчетов"); + ВидыОбъектов.Добавить("ПланыВидовРасчета"); + ВидыОбъектов.Добавить("БизнесПроцессы"); + ВидыОбъектов.Добавить("Задачи"); + ВидыОбъектов.Добавить("ПланыОбмена"); + + Для каждого ВидОбъекта Из ВидыОбъектов Цикл + МетаданныеКоллекция = Метаданные[ВидОбъекта]; + Для каждого МДОбъекта Из МетаданныеКоллекция Цикл + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МДОбъекта) Тогда + Продолжить; + КонецЕсли; + + ЭлементБлокировки = Блокировка.Добавить(МДОбъекта.ПолноеИмя()); + ЭлементБлокировки.Режим = РежимБлокировки; + КонецЦикла; + КонецЦикла; + + // Регистры и последовательности + ВидыТаблиц = Новый Массив; + ВидыТаблиц.Добавить("РегистрыНакопления"); + ВидыТаблиц.Добавить("РегистрыРасчета"); + ВидыТаблиц.Добавить("РегистрыБухгалтерии"); + ВидыТаблиц.Добавить("РегистрыСведений"); + ВидыТаблиц.Добавить("Последовательности"); + Для каждого ВидТаблицы Из ВидыТаблиц Цикл + МетаданныеКоллекция = Метаданные[ВидТаблицы]; + МенеджерВида = Вычислить(ВидТаблицы); + Для каждого МДРегистра Из МетаданныеКоллекция Цикл + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МДРегистра) Тогда + Продолжить; + КонецЕсли; + + БлокироватьНаборы = Истина; + Если ВидТаблицы = "РегистрыСведений" + И МДРегистра.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда + + БлокироватьНаборы = Ложь; + КонецЕсли; + + Если БлокироватьНаборы Тогда + ЭлементБлокировки = Блокировка.Добавить(МДРегистра.ПолноеИмя() + ".НаборЗаписей"); + Иначе + ЭлементБлокировки = Блокировка.Добавить(МДРегистра.ПолноеИмя()); + КонецЕсли; + ЭлементБлокировки.Режим = РежимБлокировки; + + Если ВидТаблицы = "Последовательности" Тогда + ЭлементБлокировки = Блокировка.Добавить(МДРегистра.ПолноеИмя() + ".Записи"); + ЭлементБлокировки.Режим = РежимБлокировки; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + ЗначениеРазделителя = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + // Планы обмен + Для каждого МДОбъекта Из Метаданные.ПланыОбмена Цикл + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МДОбъекта) Тогда + Продолжить; + КонецЕсли; + + ЭлементБлокировки = Блокировка.Добавить(МДОбъекта.ПолноеИмя()); + ЭлементБлокировки.Режим = РежимБлокировки; + КонецЦикла; + + // Общие регистры сведений с разделенными данными + ОбщиеРегистры = ОбщиеРегистрыСведенийСРазделеннымиДанными(); + + Для каждого ИмяРегистра Из ОбщиеРегистры Цикл + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений." + ИмяРегистра); + ЭлементБлокировки.УстановитьЗначение("ОбластьДанных", ЗначениеРазделителя); + ЭлементБлокировки.Режим = РежимБлокировки; + КонецЦикла; + + Блокировка.Заблокировать(); + + Если ПроверитьОтсутствиеДругихСеансов Тогда + Для каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл + Если Сеанс.НомерСеанса = НомерСеансаИнформационнойБазы() Тогда + Продолжить; + КонецЕсли; + + КлиентскиеПриложения = Новый Массив; + КлиентскиеПриложения.Добавить(ВРег("1CV8")); + КлиентскиеПриложения.Добавить(ВРег("1CV8C")); + КлиентскиеПриложения.Добавить(ВРег("WebClient")); + КлиентскиеПриложения.Добавить(ВРег("COMConnection")); + КлиентскиеПриложения.Добавить(ВРег("WSConnection")); + КлиентскиеПриложения.Добавить(ВРег("BackgroundJob")); + Если КлиентскиеПриложения.Найти(ВРег(Сеанс.ИмяПриложения)) = Неопределено Тогда + Продолжить; + КонецЕсли; + + // Есть другие пользователи + ВызватьИсключение(НСтр("ru = 'Ошибка разделенного доступа к базе данных'")); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Возвращает имена неразделенных регистров сведений, хранящих +// разделенные (относящиеся к определенной области данных) данные +// +// Возвращаемое значение: +// Массив строк. +// Имена неразделенных регистров сведений с разделенными данными. +// +Функция ОбщиеРегистрыСведенийСРазделеннымиДанными() Экспорт + + ОбщиеРегистры = Новый Массив; + + СтандартныеПодсистемыПереопределяемый.ПолучитьОбщиеРегистрыСведенийСРазделеннымиДанными(ОбщиеРегистры); + РаботаВМоделиСервисаПереопределяемый.ПолучитьОбщиеРегистрыСведенийСРазделеннымиДанными(ОбщиеРегистры); + + Возврат ОбщиеРегистры; + +КонецФункции + +// Подготавливает область данных к использованию. Запускает +// процедура обновления ИБ, при необходимости заполняет демонстрационными +// данными, устанавливает новый статус в регистре ОбластиДанных. +// +// Параметры: +// ОбластьДанных - Тип значения разделителя - значение разделителя +// области данных, которую необходимо подготовить к использованию. +// +Процедура ПодготовитьОбластьДанныхКИспользованию(Знач ОбластьДанных, Знач ИДФайлаВыгрузки = Неопределено) Экспорт + + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ВызватьИсключение(НСтр("ru = 'Недостаточно прав для выполнения операции'")); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + КлючОбласти = РегистрыСведений.ОбластиДанных.СоздатьКлючЗаписи(Новый Структура("ОбластьДанных", ОбластьДанных)); + ЗаблокироватьДанныеДляРедактирования(КлючОбласти); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + Элемент = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); + Элемент.УстановитьЗначение("ОбластьДанных", ОбластьДанных); + Элемент.Режим = РежимБлокировкиДанных.Разделяемый; + Блокировка.Заблокировать(); + + МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = ОбластьДанных; + МенеджерЗаписи.Прочитать(); + + Если НЕ МенеджерЗаписи.Выбран() Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 не найдена'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ОбластьДанных); + ВызватьИсключение(ТекстСообщения); + ИначеЕсли МенеджерЗаписи.Статус <> Перечисления.СтатусыОбластейДанных.Новая Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 не является новой'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ОбластьДанных); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОбластьДанных); + + Пользователи.АвторизоватьТекущегоПользователя(); + + Если ИДФайлаВыгрузки <> Неопределено Тогда + ИмяФайлаВыгрузки = ПолучитьФайлИзХранилищаМенеджераСервиса(ИДФайлаВыгрузки); + + ВыгрузкаЗагрузкаДанных.ЗагрузитьТекущуюОбластьИзАрхива(ИмяФайлаВыгрузки); + Попытка + УдалитьФайлы(ИмяФайлаВыгрузки); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'"), + УровеньЖурналаРегистрации.Предупреждение, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Иначе + Если Константы.РежимИспользованияИнформационнойБазы.Получить() = Перечисления.РежимыИспользованияИнформационнойБазы.Демонстрационный + ИЛИ Константы.КопироватьОбластиДанныхИзЭталонной.Получить() Тогда + + СкопироватьДанныеОбласти(0, ОбластьДанных); + КонецЕсли; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(ИДФайлаВыгрузки <> Неопределено); + + МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Используется; + + // Отправить соообщение о готовности области в менеджер сервиса + Сообщение = СообщенияУдаленногоАдминистрирования.НовоеСообщение( + СообщенияУдаленногоАдминистрированияПовтИсп.СообщениеОбластьДанныхПодготовлена()); + Сообщение.ОбластьДанных = ОбластьДанных; + + НачатьТранзакцию(); + Попытка + СообщенияУдаленногоАдминистрирования.ОтправитьСообщение( + Сообщение, + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + + МенеджерЗаписи.Записать(); + + РазблокироватьДанныеДляРедактирования(КлючОбласти); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Копирует данные области данных в другую область данных. +// +// Параметры: +// ОбластьИсточник - Тип значения разделителя - значение разделителя +// области данных - источника данных +// ОбластьПриемник - Тип значения разделителя - значение разделителя +// области данных - приемника данных +// +Процедура СкопироватьДанныеОбласти(Знач ОбластьИсточник, Знач ОбластьПриемник) Экспорт + + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ВызватьИсключение(НСтр("ru = 'Недостаточно прав для выполнения операции'")); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОбластьИсточник); + + ИмяФайлаВыгрузки = Неопределено; + + НачатьТранзакцию(); + Попытка + ЗаблокироватьТекущуюОбластьДанных(, Истина); + ИмяФайлаВыгрузки = ВыгрузкаЗагрузкаДанных.ВыгрузитьТекущуюОбластьВАрхив(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Если ИмяФайлаВыгрузки <> Неопределено Тогда + Попытка + УдалитьФайлы(ИмяФайлаВыгрузки); + Исключение + КонецПопытки; + КонецЕсли; + ВызватьИсключение; + КонецПопытки; + + ОбщегоНазначения.УстановитьРазделениеСеанса(, ОбластьПриемник); + + НачатьТранзакцию(); + Попытка + ЗаблокироватьТекущуюОбластьДанных(); + ВыгрузкаЗагрузкаДанных.ЗагрузитьТекущуюОбластьИзАрхива(ИмяФайлаВыгрузки); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Копирование области данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Попытка + УдалитьФайлы(ИмяФайлаВыгрузки); + Исключение + КонецПопытки; + ВызватьИсключение; + КонецПопытки; + + Попытка + УдалитьФайлы(ИмяФайлаВыгрузки); + Исключение + КонецПопытки; + +КонецПроцедуры + +// Удаляет все данные области данных, кроме предопределенных. +// Так же удаляет пользователей области данных и данные неразделенных +// регистров сведений, относящиеся к области. +// +// Параметры: +// ОбластьДанных - Тип значения разделителя - значение разделителя +// области данных которую требуется очистить +// +Процедура ОчиститьОбластьДанных(Знач ОбластьДанных) Экспорт + + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ВызватьИсключение(НСтр("ru = 'Недостаточно прав для выполнения операции'")); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + КлючОбласти = РегистрыСведений.ОбластиДанных.СоздатьКлючЗаписи(Новый Структура("ОбластьДанных", ОбластьДанных)); + ЗаблокироватьДанныеДляРедактирования(КлючОбласти); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + Элемент = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); + Элемент.УстановитьЗначение("ОбластьДанных", ОбластьДанных); + Элемент.Режим = РежимБлокировкиДанных.Разделяемый; + Блокировка.Заблокировать(); + + МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных= ОбластьДанных; + МенеджерЗаписи.Прочитать(); + Если НЕ МенеджерЗаписи.Выбран() Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 не найдена'"); + ВызватьИсключение(ШаблонСообщения); + ИначеЕсли МенеджерЗаписи.Статус <> Перечисления.СтатусыОбластейДанных.КУдалению Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 не помечена к удалению'"); + ВызватьИсключение(ШаблонСообщения); + КонецЕсли; + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОбластьДанных); + + СтандартныеПодсистемыПереопределяемый.ПриУдаленииОбластиДанных(ОбластьДанных); + РаботаВМоделиСервисаПереопределяемый.ПриУдаленииОбластиДанных(ОбластьДанных); + + МДОбщегоРеквизита = Метаданные.ОбщиеРеквизиты.ОбластьДанных; + + // Переберем все метаданные + + // Константы + Для каждого МетаданныеКонстанты Из Метаданные.Константы Цикл + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МетаданныеКонстанты) Тогда + Продолжить; + КонецЕсли; + + МенеджерЗначения = Константы[МетаданныеКонстанты.Имя].СоздатьМенеджерЗначения(); + МенеджерЗначения.ОбменДанными.Загрузка = Истина; + МенеджерЗначения.Значение = МетаданныеКонстанты.Тип.ПривестиЗначение(); + МенеджерЗначения.Записать(); + КонецЦикла; + + // Ссылочные типы + + ВидыОбъектов = Новый Массив; + ВидыОбъектов.Добавить("Справочники"); + ВидыОбъектов.Добавить("Документы"); + ВидыОбъектов.Добавить("ПланыВидовХарактеристик"); + ВидыОбъектов.Добавить("ПланыСчетов"); + ВидыОбъектов.Добавить("ПланыВидовРасчета"); + ВидыОбъектов.Добавить("БизнесПроцессы"); + ВидыОбъектов.Добавить("Задачи"); + + Для каждого ВидОбъекта Из ВидыОбъектов Цикл + МетаданныеКоллекция = Метаданные[ВидОбъекта]; + Для каждого МДОбъекта Из МетаданныеКоллекция Цикл + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МДОбъекта) Тогда + Продолжить; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | _XMLВыгрузка_Таблица.Ссылка КАК Ссылка + |ИЗ + | " + МДОбъекта.ПолноеИмя() + " КАК _XMLВыгрузка_Таблица"; + Если ВидОбъекта = "Справочники" + ИЛИ ВидОбъекта = "ПланыВидовХарактеристик" + ИЛИ ВидОбъекта = "ПланыСчетов" + ИЛИ ВидОбъекта = "ПланыВидовРасчета" Тогда + + Запрос.Текст = Запрос.Текст + " + |ГДЕ + | _XMLВыгрузка_Таблица.Предопределенный = ЛОЖЬ"; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + Удаление = Новый УдалениеОбъекта(Выборка.Ссылка); + Удаление.ОбменДанными.Загрузка = Истина; + Удаление.Записать(); + КонецЦикла; + КонецЦикла; + КонецЦикла; + + // Регистры кроме независимых регистров сведений и последовательности + ВидыТаблиц = Новый Массив; + ВидыТаблиц.Добавить("РегистрыНакопления"); + ВидыТаблиц.Добавить("РегистрыРасчета"); + ВидыТаблиц.Добавить("РегистрыБухгалтерии"); + ВидыТаблиц.Добавить("РегистрыСведений"); + ВидыТаблиц.Добавить("Последовательности"); + Для каждого ВидТаблицы Из ВидыТаблиц Цикл + МетаданныеКоллекция = Метаданные[ВидТаблицы]; + МенеджерВида = Вычислить(ВидТаблицы); + Для каждого МДРегистра Из МетаданныеКоллекция Цикл + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МДРегистра) Тогда + Продолжить; + КонецЕсли; + + Если ВидТаблицы = "РегистрыСведений" + И МДРегистра.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда + + Продолжить; + КонецЕсли; + + МенеджерТипа = МенеджерВида[МДРегистра.Имя]; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | _XMLВыгрузка_Таблица.Регистратор КАК Регистратор + |ИЗ + | " + МДРегистра.ПолноеИмя() + " КАК _XMLВыгрузка_Таблица"; + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + НаборЗаписей = МенеджерТипа.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор); + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.Записать(); + КонецЦикла; + КонецЦикла; + КонецЦикла; + + // Независимые регистры сведений + Для каждого МДРегистра Из Метаданные.РегистрыСведений Цикл + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МДРегистра) Тогда + Продолжить; + КонецЕсли; + + Если МДРегистра.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда + + Продолжить; + КонецЕсли; + + МенеджерТипа = РегистрыСведений[МДРегистра.Имя]; + + НаборЗаписей = МенеджерТипа.СоздатьНаборЗаписей(); + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.Записать(); + КонецЦикла; + + // Планы обмена + + Для каждого МДПланаОбмена Из Метаданные.ПланыОбмена Цикл + Если НЕ ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(МДПланаОбмена) Тогда + Продолжить; + КонецЕсли; + + МенеджерТипа = ПланыОбмена[МДПланаОбмена.Имя]; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | _XMLВыгрузка_Таблица.Ссылка КАК Ссылка + |ИЗ + | " + МДПланаОбмена.ПолноеИмя() + " КАК _XMLВыгрузка_Таблица + |ГДЕ + | _XMLВыгрузка_Таблица.Ссылка <> &ЭтотУзел"; + Запрос.УстановитьПараметр("ЭтотУзел", МенеджерТипа.ЭтотУзел()); + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + Удаление = Новый УдалениеОбъекта(Выборка.Ссылка); + Удаление.ОбменДанными.Загрузка = Истина; + Удаление.Записать(); + КонецЦикла; + КонецЦикла; + + // Общие регистры сведений с разделенными данными + ОбщиеРегистры = ОбщиеРегистрыСведенийСРазделеннымиДанными(); + + Для каждого ИмяРегистра Из ОбщиеРегистры Цикл + МенеджерТипа = РегистрыСведений[ИмяРегистра]; + + НаборЗаписей = МенеджерТипа.СоздатьНаборЗаписей(); + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.Отбор.ОбластьДанных.Установить(ОбластьДанных); + НаборЗаписей.Записать(); + КонецЦикла; + + // Пользователи + Для каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл + ПользовательИБ.Удалить(); + КонецЦикла; + + МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Удалена; + + // Отправить соообщение об удалении области в менеджер сервиса + Сообщение = СообщенияУдаленногоАдминистрирования.НовоеСообщение( + СообщенияУдаленногоАдминистрированияПовтИсп.СообщениеОбластьДанныхУдалена()); + Сообщение.ОбластьДанных = ОбластьДанных; + СообщенияУдаленногоАдминистрирования.ОтправитьСообщение( + Сообщение, + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + + МенеджерЗаписи.Записать(); + + РазблокироватьДанныеДляРедактирования(КлючОбласти); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Очистка области данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Процедура однименного регламентного задания. +// Находит все области данных со статусами, требующими обработки +// прикладным приложением и при необходимости планирует запуск ФЗ +// по их обслуживанию. +// +Процедура ОбслуживаниеОбластейДанных() Экспорт + + МаксимальноеКоличествоПовторов = 3; + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбластиДанных.ОбластьДанных КАК ОбластьДанных, + | ОбластиДанных.Статус КАК Статус, + | ОбластиДанных.ИдентификаторВыгрузки КАК ИдентификаторВыгрузки + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + |ГДЕ + | ОбластиДанных.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Новая), ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.КУдалению)) + | И ОбластиДанных.ОшибкаОбработки = ЛОЖЬ + | + |УПОРЯДОЧИТЬ ПО + | ОбластьДанных"; + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + + Выполняется = 0; + + Пока Выборка.Следующий() Цикл + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Выборка.ОбластьДанных); + + Ключ = РегистрыСведений.ОбластиДанных.СоздатьКлючЗаписи(Новый Структура("ОбластьДанных", Выборка.ОбластьДанных)); + + Попытка + ЗаблокироватьДанныеДляРедактирования(Ключ); + Исключение + Продолжить; + КонецПопытки; + + Менеджер = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + Менеджер.ОбластьДанных = Выборка.ОбластьДанных; + Менеджер.Прочитать(); + + Если Менеджер.Статус = Перечисления.СтатусыОбластейДанных.Новая Тогда + ИмяМетода = "РаботаВМоделиСервиса.ПодготовитьОбластьДанныхКИспользованию"; + ИначеЕсли Менеджер.Статус = Перечисления.СтатусыОбластейДанных.КУдалению Тогда + ИмяМетода = "РаботаВМоделиСервиса.ОчиститьОбластьДанных"; + Иначе + РазблокироватьДанныеДляРедактирования(Ключ); + Продолжить; + КонецЕсли; + + Если Менеджер.Повтор < МаксимальноеКоличествоПовторов Тогда + + ОтборЗадания = Новый Структура; + ОтборЗадания.Вставить("ИмяМетода", ИмяМетода); + ОтборЗадания.Вставить("Ключ" , "1"); + ЗапланированноеЗадание = ОчередьЗаданий.ПолучитьЗадание(ОтборЗадания, Выборка.ОбластьДанных); + Если ЗапланированноеЗадание <> Неопределено Тогда + РазблокироватьДанныеДляРедактирования(Ключ); + Продолжить; + КонецЕсли; + + Менеджер.Повтор = Менеджер.Повтор + 1; + Менеджер.Записать(); + + ПараметрыМетода = Новый Массив; + ПараметрыМетода.Добавить(Выборка.ОбластьДанных); + + Если Выборка.Статус = Перечисления.СтатусыОбластейДанных.Новая + И ЗначениеЗаполнено(Выборка.ИдентификаторВыгрузки) Тогда + + ПараметрыМетода.Добавить(Выборка.ИдентификаторВыгрузки); + КонецЕсли; + + РазблокироватьДанныеДляРедактирования(Ключ); + + ОчередьЗаданий.ЗапланироватьВыполнениеЗадания(ИмяМетода, ПараметрыМетода, "1",, Выборка.ОбластьДанных); + Иначе + + // Отправить соообщение о готовности области в менеджер сервиса + Если Менеджер.Статус = Перечисления.СтатусыОбластейДанных.Новая Тогда + Сообщение = СообщенияУдаленногоАдминистрирования.НовоеСообщение( + СообщенияУдаленногоАдминистрированияПовтИсп.СообщениеОшибкаПодготовкиОбластиДанных()); + Иначе + Сообщение = СообщенияУдаленногоАдминистрирования.НовоеСообщение( + СообщенияУдаленногоАдминистрированияПовтИсп.СообщениеОшибкаУдаленияОбластиДанных()); + КонецЕсли; + Сообщение.ОбластьДанных = Менеджер.ОбластьДанных; + Сообщение.ОписаниеОшибки = ""; + + НачатьТранзакцию(); + Попытка + Менеджер.ОшибкаОбработки = Истина; + Менеджер.Записать(); + + СообщенияУдаленногоАдминистрирования.ОтправитьСообщение( + Сообщение, + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + + РазблокироватьДанныеДляРедактирования(Ключ); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обслуживание областей данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Возвращает прокси web-сервиса для синхронизации адинистративных действи +// в сервисе. +// +// Возвращаемое значение: +// WSПрокси. +// Прокси менеджера сервиса. +// +Функция ПолучитьПроксиМенеджераСервиса() Экспорт + + АдресМенеджераСервиса = Константы.ВнутреннийАдресМенеджераСервиса.Получить(); + Если Не ЗначениеЗаполнено(АдресМенеджераСервиса) Тогда + ВызватьИсключение(НСтр("ru = 'Не установлены параметры связи с менеджером сервиса.'")); + КонецЕсли; + + АдресСервиса = АдресМенеджераСервиса + "/ws/ManageApplication?wsdl"; + ИмяПользователя = Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(); + ПарольПользователя = Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(); + + Прокси = ОбщегоНазначенияПовтИсп.ПолучитьWSПрокси(АдресСервиса, "http://www.1c.ru/SaaS/1.0/WS", + "ManageApplication", , ИмяПользователя, ПарольПользователя); + + Возврат Прокси; + +КонецФункции + +// Устанавливает разделение сеанса. +// +// Параметры: +// Использование - Булево - Использование разделителя ОбластьДанных в сеансе +// ОбластьДанных - Число - Значение разделителя ОбластьДанных +// +Процедура УстановитьРазделениеСеанса(Знач Использование = Неопределено, Знач ОбластьДанных = Неопределено) Экспорт + + Если НЕ ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + ВызватьИсключение(НСтр("ru = 'Изменить разделение сеанса возможно только из сеанса запущенного без указания разделителей'")); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если Использование <> Неопределено Тогда + ПараметрыСеанса.ОбластьДанныхИспользование = Использование; + КонецЕсли; + + Если ОбластьДанных <> Неопределено Тогда + ПараметрыСеанса.ОбластьДанныхЗначение = ОбластьДанных; + КонецЕсли; + + СтандартныеПодсистемыПереопределяемый.ПриИзмененииОбластиДанных(); + +КонецПроцедуры + +// Возвращает значение разделителя текущей области данных. +// В случае если значение не установлено выдается ошибка. +// +// Возвращаемое значение: +// Тип значения разделителя. +// Значение разделителя текущей области данных. +// +Функция ЗначениеРазделителяСеанса() Экспорт + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат 0; + Иначе + Если НЕ ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + ВызватьИсключение(НСтр("ru = 'Не установлено значение разделителя'")); + КонецЕсли; + + // Получим значение разделителя текущей области данных + УстановитьПривилегированныйРежим(Истина); + Возврат ПараметрыСеанса.ОбластьДанныхЗначение; + КонецЕсли; + +КонецФункции + +// Возвращает флаг использования разделителя ОбластьДанных для текущего сеанса. +// +// Возвращаемое значение: +// Булево - Истина разделение используется, иначе нет. +// +Функция ИспользованиеРазделителяСеанса() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Возврат ПараметрыСеанса.ОбластьДанныхИспользование; + +КонецФункции + +// Добавляет дополнительные параметры в структуру параметров работы клиента +// при работе в модели сервиса. +// +// Параметры: +// Параметры - Структура - структура параметров работы клиента +// +Процедура ДобавитьПараметрыРаботыКлиентаВМоделиСервиса(Знач Параметры) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Параметры.Вставить("ПоказатьОписаниеИзмененийСистемы", + ОбновлениеИнформационнойБазы.ПоказатьОписаниеИзмененийСистемы()); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбластиДанных.Представление КАК Представление + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + |ГДЕ + | ОбластиДанных.ОбластьДанных = &ОбластьДанных"; + УстановитьПривилегированныйРежим(Истина); + Запрос.УстановитьПараметр("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + Результат = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); + Если НЕ Результат.Пустой() Тогда + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + Если НЕ ПустаяСтрока(Выборка.Представление) Тогда + Параметры.Вставить("ПредставлениеОбластиДанных", Выборка.Представление); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Добавляет описание параметра по имени константы в таблицу параметров. +// Возвращает добавленный параметр. +// +// Параметры: +// ТаблицаПараметров - Таблица значений - таблица описания параметров ИБ +// ИмяКонстанты - Строка - имя константы, которую необходимо добавить в +// параметры ИБ +// +// Возвращаемое значение: +// Строка таблицы значений. +// Строка содержащая описание добавленного параметра. +// +Функция ДобавитьКонстантуВТаблицуПараметровИБ(Знач ТаблицаПараметров, Знач ИмяКонстанты) Экспорт + + МетаданныеКонстанты = Метаданные.Константы[ИмяКонстанты]; + + СтрокаПараметра = ТаблицаПараметров.Добавить(); + СтрокаПараметра.Имя = МетаданныеКонстанты.Имя; + СтрокаПараметра.Описание = МетаданныеКонстанты.Представление(); + СтрокаПараметра.Тип = МетаданныеКонстанты.Тип; + + Возврат СтрокаПараметра; + +КонецФункции + +// Возвращает таблицу описания параметров ИБ +// +// Возвращаемое значение: +// Таблица значений. +// Таблица описывающая параметры ИБ. +// Колонки: +// Имя - Строка - имя параметра. +// Описание - Строка - описание параметра для отображения в пользовательском интерфейсе +// ЗапретЧтения - Булево - признак невозможности считывания параметра ИБ. Может установлен +// например для паролей. +// ЗапретЗаписи - Булево - признак невозможности изменения параметра ИБ. +// Тип - Описание типов - тип значения параметра. Допускается использовать только примитивные +// типы и перечисления присутствующие в управляющем приложении. +// +Функция ПолучитьТаблицуПараметровИБ() Экспорт + + ТаблицаПараметров = ПолучитьПустуюТаблицуПараметровИБ(); + + СтандартныеПодсистемыПереопределяемый.ПолучитьТаблицуПараметровИБ(ТаблицаПараметров); + + РаботаВМоделиСервисаПереопределяемый.ПолучитьТаблицуПараметровИБ(ТаблицаПараметров); + + Возврат ТаблицаПараметров; + +КонецФункции + +// Получает описание файла по его идентификатору в регистре Файлы. +// Если хранение на диске и ПутьВместоДанных = Истина, +// в выходной структуре Данные = Неопределено, ПолноеИмя = Полное имя файла, +// иначе Данные - двоичные данные файла, ПолноеИмя - Неопределено. +// Значение ключа Имя всегда содержит имя в хранилище. +// +// Параметры: +// ИдентификаторФайла - УникальныйИдентификатор. +// ПараметрыПодключения - Структура: +// - URL - Строка - URL сервиса. Обязательно должно присутствовать и быть заполненным. +// - UserName - Строка - Имя пользователя сервиса. +// - Password - Строка - Пароль пользователя сервиса. +// ПутьВместоДанных - Булево - Что возвращать. +// +// Возвращаемое значение: +// ОписаниеФайла - Структура: +// Имя - Строка - имя файла в хранилище. +// Данные - ДвоичныеДанные - данные файла. +// ПолноеИмя - Строка - полное имя файла. +// - Файл будет удален автоматически по истечении срока хранения временных файлов. +// +Функция ПолучитьФайлИзХранилища(Знач ИдентификаторФайла, Знач ПараметрыПодключения, Знач ПутьВместоДанных = Ложь) Экспорт + + // Учесть версионирование. + МассивПоддерживаемыхВерсий = ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "СервисПередачиФайлов"); + Если МассивПоддерживаемыхВерсий.Найти("1.0.2.1") = Неопределено Тогда + ЕстьПоддержка2йВерсии = Ложь; + Прокси = ПолучитьПроксиДляПодключенияКСервису(ПараметрыПодключения, "FilesTransfer", "1.0.1.1"); + Иначе + ЕстьПоддержка2йВерсии = Истина; + Прокси = ПолучитьПроксиДляПодключенияКСервису(ПараметрыПодключения, "FilesTransfer", "1.0.2.1"); + КонецЕсли; + + ОбменЧерезФС = МожноПередаватьЧерезФСССервера(Прокси, ЕстьПоддержка2йВерсии); + + Если ОбменЧерезФС Тогда + + Попытка + ИмяФайла = Прокси.WriteFileToFS(ИдентификаторФайла); + СвойстваФайла = Новый Файл(ПолучитьОбщийКаталогВременныхФайлов() + ИмяФайла); + Если СвойстваФайла.Существует() Тогда + ОписаниеФайла = СоздатьОписаниеФайла(); + ОписаниеФайла.Имя = СвойстваФайла.Имя; + + Если ПутьВместоДанных Тогда + ОписаниеФайла.Данные = Неопределено; + ОписаниеФайла.ПолноеИмя = СвойстваФайла.ПолноеИмя; + Иначе + ОписаниеФайла.Данные = Новый ДвоичныеДанные(СвойстваФайла.ПолноеИмя); + ОписаниеФайла.ПолноеИмя = Неопределено; + Попытка + УдалитьФайлы(СвойстваФайла.ПолноеИмя); + Исключение + КонецПопытки; + КонецЕсли; + + Возврат ОписаниеФайла; + Иначе + ОбменЧерезФС = Ложь; + КонецЕсли; + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение файла из хранилища'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбменЧерезФС = Ложь; + КонецПопытки; + + КонецЕсли; // ОбменЧерезФС + + КоличествоЧастей = Неопределено; + ИмяФайлаВСправочнике = Неопределено; + РазмерБлокаПередачиФайла = ПолучитьРазмерБлокаПередачиФайла(); + Если ЕстьПоддержка2йВерсии Тогда + ИдентификаторПередачи = Прокси.PrepareGetFile(ИдентификаторФайла, РазмерБлокаПередачиФайла * 1024, КоличествоЧастей); + Иначе + ИдентификаторПередачи = Неопределено; + Прокси.PrepareGetFile(ИдентификаторФайла, РазмерБлокаПередачиФайла * 1024, ИдентификаторПередачи, КоличествоЧастей); + КонецЕсли; + + ИменаФайлов = Новый Массив; + + КаталогСборки = СоздатьКаталогСборки(); + + Если ЕстьПоддержка2йВерсии Тогда + Для НомерЧасти = 1 По КоличествоЧастей Цикл + ДанныеЧасти = Прокси.GetFilePart(ИдентификаторПередачи, НомерЧасти, КоличествоЧастей); + ИмяФайлаЧасти = КаталогСборки + "part" + Формат(НомерЧасти, "ЧЦ=4; ЧВН=; ЧГ="); + ДанныеЧасти.Записать(ИмяФайлаЧасти); + ИменаФайлов.Добавить(ИмяФайлаЧасти); + КонецЦикла; + Иначе // 1-я версия. + Для НомерЧасти = 1 По КоличествоЧастей Цикл + ДанныеЧасти = Неопределено; + Прокси.GetFilePart(ИдентификаторПередачи, НомерЧасти, ДанныеЧасти); + ИмяФайлаЧасти = КаталогСборки + "part" + Формат(НомерЧасти, "ЧЦ=4; ЧВН=; ЧГ="); + ДанныеЧасти.Записать(ИмяФайлаЧасти); + ИменаФайлов.Добавить(ИмяФайлаЧасти); + КонецЦикла; + КонецЕсли; + ДанныеЧасти = Неопределено; + + Прокси.ReleaseFile(ИдентификаторПередачи); + + ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); + + ОбъединитьФайлы(ИменаФайлов, ИмяАрхива); + + Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); + Если Разархиватор.Элементы.Количество() > 1 Тогда + ВызватьИсключение(НСтр("ru = 'В полученном архиве содержится более одного файла'")); + КонецЕсли; + + ИмяФайла = КаталогСборки + Разархиватор.Элементы[0].Имя; + Разархиватор.Извлечь(Разархиватор.Элементы[0], КаталогСборки); + Разархиватор.Закрыть(); + + ФайлРезультата = Новый Файл(ПолучитьИмяВременногоФайла()); + ПереместитьФайл(ИмяФайла, ФайлРезультата.ПолноеИмя); + + ОписаниеФайла = СоздатьОписаниеФайла(); + ОписаниеФайла.Имя = ФайлРезультата.Имя; + + Если ПутьВместоДанных Тогда + ОписаниеФайла.Данные = Неопределено; + ОписаниеФайла.ПолноеИмя = ФайлРезультата.ПолноеИмя; + Иначе + ОписаниеФайла.Данные = Новый ДвоичныеДанные(ФайлРезультата.ПолноеИмя); + ОписаниеФайла.ПолноеИмя = Неопределено; + Попытка + УдалитьФайлы(ФайлРезультата.ПолноеИмя); + Исключение + КонецПопытки; + КонецЕсли; + + Попытка + УдалитьФайлы(ИмяАрхива); + УдалитьФайлы(КаталогСборки); + Исключение + КонецПопытки; + + Возврат ОписаниеФайла; + +КонецФункции + +// Получает имя приложения, так как его задал Абонент. +// +// Возвращаемое значение - Строка - имя приложения. +// +Функция ПолучитьИмяПриложения() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ОбластиДанных.Представление + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + |ГДЕ + | ОбластиДанных.ОбластьДанных = &ОбластьДанных"; + Запрос.УстановитьПараметр("ОбластьДанных", ПараметрыСеанса.ОбластьДанныхЗначение); + + ТаблицаОбластейДанных = Запрос.Выполнить().Выгрузить(); + + Возврат ?(ТаблицаОбластейДанных.Количество() = 0, "", ТаблицаОбластейДанных.Получить(0).Получить(0)); + +КонецФункции + +// Возвращает полный путь к каталогу временных файлов. +// +// Возвращаемое значение: +// Строка - Полный путь к каталогу временных файлов. +// +Функция ПолучитьОбщийКаталогВременныхФайлов() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ИнформацияОСистеме = Новый СистемнаяИнформация; + Если ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Linux_x86 + ИЛИ ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда + + ОбщийВременныйКаталог = Константы.ОбщийКаталогВременныхФайловLinux.Получить(); + РазделительПути = "/"; + Иначе + ОбщийВременныйКаталог = Константы.ОбщийКаталогВременныхФайлов.Получить(); + РазделительПути = "\"; + КонецЕсли; + + Если ПустаяСтрока(ОбщийВременныйКаталог) Тогда + ОбщийВременныйКаталог = СокрЛП(КаталогВременныхФайлов()); + Иначе + ОбщийВременныйКаталог = СокрЛП(ОбщийВременныйКаталог); + КонецЕсли; + + Если Прав(ОбщийВременныйКаталог, 1) <> РазделительПути Тогда + ОбщийВременныйКаталог = ОбщийВременныйКаталог + РазделительПути; + КонецЕсли; + + Возврат ОбщийВременныйКаталог; + +КонецФункции + +// Возвращает размер блоков в Мб для передачи больших файлов частями. +// +Функция ПолучитьРазмерБлокаПередачиФайла() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + РазмерБлокаПередачиФайла = Константы.РазмерБлокаПередачиФайла.Получить(); // Мб + Если Не ЗначениеЗаполнено(РазмерБлокаПередачиФайла) Тогда + РазмерБлокаПередачиФайла = 20; + КонецЕсли; + Возврат РазмерБлокаПередачиФайла; + +КонецФункции + +// Возвращает разделитель пути файловой системы в зависимости от типа платформы: Windows/Linux. +// +// Возвращаемое значение: +// Строка. +// +Функция ПолучитьРазделительПутиФайловойСистемы() Экспорт + + ИнформацияОСистеме = Новый СистемнаяИнформация; + + Если ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Linux_x86 + ИЛИ ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда + + Возврат "/"; + Иначе + Возврат "\"; + КонецЕсли; + +КонецФункции + +// Получает объект WSПрокси Web-сервиса передачи файлов. +// +// Параметры: +// ПараметрыПодключения - Структура: +// - URL - Строка - URL сервиса. Обязательно должно присутствовать и быть заполненным. +// - UserName - Строка - Имя пользователя сервиса. +// - Password - Строка - Пароль пользователя сервиса. +// БазовоеИмяСервиса - Строка - Имя базовой версии Web-сервиса. Примеры: "FilesTransfer", "ManageAgent". +// ВерсияИнтерфейса - Строка - Номер версии сервиса, к которому надо получить доступ. +// +// Возвращаемое значение: +// WSПрокси. +// +Функция ПолучитьПроксиДляПодключенияКСервису(Знач ПараметрыПодключения, Знач БазовоеИмяСервиса, Знач ВерсияИнтерфейса) Экспорт + + Если Не ПараметрыПодключения.Свойство("URL") + Или Не ЗначениеЗаполнено(ПараметрыПодключения.URL) Тогда + + ВызватьИсключение(НСтр("ru = 'Не задан адрес агента сервиса.'")); + КонецЕсли; + + Если ПараметрыПодключения.Свойство("UserName") + И ЗначениеЗаполнено(ПараметрыПодключения.UserName) Тогда + + ИмяПользователя = ПараметрыПодключения.UserName; + ПарольПользователя = ПараметрыПодключения.Password; + Иначе + ИмяПользователя = Неопределено; + ПарольПользователя = Неопределено; + КонецЕсли; + + Если ВерсияИнтерфейса = Неопределено Или ВерсияИнтерфейса = "1.0.1.1" Тогда // 1-я версия. + ИмяСервиса = БазовоеИмяСервиса; + Иначе // Версии 2 и выше. + ИмяСервиса = БазовоеИмяСервиса + "_" + СтрЗаменить(ВерсияИнтерфейса, ".", "_"); + КонецЕсли; + + // Получить прокси работы с файлами. + + АдресСервиса = ПараметрыПодключения.URL + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("/ws/%1?wsdl", ИмяСервиса); + + Возврат ОбщегоНазначенияПовтИсп.ПолучитьWSПрокси(АдресСервиса, + "http://www.1c.ru/SaaS/1.0/WS", ИмяСервиса, , ИмяПользователя, ПарольПользователя); + +КонецФункции + +// Сериализует объект структурного типа. +// +// Параметры: +// ЗначениеСтруктурногоТипа - Массив, Структура, Соответствие или их фиксированные аналоги. +// +// Возвращаемое значение: +// Строка - Сериализованное значение объекта структурного типа. +// +Функция ЗаписатьСтруктурныйОбъектXDTOВСтроку(Знач ЗначениеСтруктурногоТипа) Экспорт + + ОбъектXDTO = СтруктурныйОбъектВОбъектXDTO(ЗначениеСтруктурногоТипа); + + Возврат ЗаписатьЗначениеВСтроку(ОбъектXDTO); + +КонецФункции + +// Кодирует строковое значение по алгоритму base64 +// +// Параметры: +// Строка - Строка. +// +// Возвращаемое значение: +// Строка - base64-представление. +// +Функция СтрокаВBase64(Знач Строка) Экспорт + + Хранилище = Новый ХранилищеЗначения(Строка, Новый СжатиеДанных(9)); + + Возврат XMLСтрока(Хранилище); + +КонецФункции + +// Декодирует base64-представление строки в исходное значение. +// +// Параметры: +// СтрокаBase64 - Строка. +// +// Возвращаемое значение: +// Строка. +// +Функция Base64ВСтроку(Знач СтрокаBase64) Экспорт + + Хранилище = XMLЗначение(Тип("ХранилищеЗначения"), СтрокаBase64); + + Возврат Хранилище.Получить(); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Для текущей ИБ удаляет заданные сеансы и разрывает соединения через Агент сервиса. +// Сеансы задаются своими номерами во входном массиве либо одним номером. +// +// Параметры: +// СеансыКУдалению - Массив; Число - Числовой массив номеров сеансов или один номер сеанса. +// ПараметрыАдминистрированияИБ - Структура с полями +// ИмяАдминистратораИБ - Строка. +// ПарольАдминистратораИБ - Строка. +// ИмяАдминистратораКластера - Строка. +// ПарольАдминистратораКластера - Строка. +// ПортКластераСерверов - Число. +// ПортАгентаСервера - Число. +// +// Возвращаемое значение: +// Булево - Истина, если успешно. +// +Функция УдалитьСеансыИРазорватьСоединенияЧерезАгентСервиса(Знач СеансыКУдалению, Знач ПараметрыАдминистрированияИБ) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат Ложь; + КонецЕсли; + + Если ТипЗнч(СеансыКУдалению) = Тип("Массив") Тогда + СписокСеансов = СеансыКУдалению; + ИначеЕсли ТипЗнч(СеансыКУдалению) = Тип("Число") Тогда + СписокСеансов = Новый Массив; + СписокСеансов.Добавить(СеансыКУдалению); + Иначе + ВызватьИсключение(НСтр("ru = 'Неверный тип параметра ""СеансыКУдалению"".'")); + КонецЕсли; + + Если СписокСеансов.Количество() = 0 Тогда + Возврат Истина; + КонецЕсли; + + // Создать структуру параметров подключения к агенту сервиса. + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("URL", Константы.АдресАгентаСервиса.Получить()); + ПараметрыПодключения.Вставить("UserName", Константы.ИмяПользователяАгентаСервиса.Получить()); + ПараметрыПодключения.Вставить("Password", Константы.ПарольПользователяАгентаСервиса.Получить()); + + // Проверить с помощью версионирования, поддерживается ли нужный интерфейс. + МассивПоддерживаемыхВерсий = ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "УправлениеАгентом"); + Если МассивПоддерживаемыхВерсий.Найти("1.0.2.1") = Неопределено Тогда + ВызватьИсключение(НСтр("ru = 'Агент сервиса. Выборочное удаление сеансов не поддерживается в этой версии.'")); + КонецЕсли; + + // Сформировать XDTO-строку входных параметров для обращения к операциям сервиса. + + ЗначенияПараметров = Новый Структура; + + // Получить для текущей ИБ параметры соединения. + ПараметрыСоединения = СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(СтрокаСоединенияИнформационнойБазы()); + Если Не ПараметрыСоединения.Свойство("Srvr") Или Не ПараметрыСоединения.Свойство("Ref") Тогда + ВызватьИсключение(НСтр("ru = 'Для файловой ИБ данная операция недоступна.'")); + КонецЕсли; + ЗначенияПараметров.Вставить("ИнформационнаяБаза", ПараметрыСоединения.Ref); + + ТипПараметрыАдминистрирования = ФабрикаXDTO.Тип("http://v8.1c.ru/agent/scripts/1.0", "ClusterAdministrationInfo"); + ПараметрыАдминистрированияКластера = ФабрикаXDTO.Создать(ТипПараметрыАдминистрирования); + ПараметрыАдминистрированияКластера.AgentConnectionString = + "tcp://" + ПараметрыСоединения.Srvr + ":" + + Формат(ПараметрыАдминистрированияИБ.ПортАгентаСервера, "ЧГ="); + ПараметрыАдминистрированияКластера.WorkServerUserName = ПараметрыАдминистрированияИБ.ИмяАдминистратораКластера; + ПараметрыАдминистрированияКластера.WorkServerPassword = СтрокаВBase64(ПараметрыАдминистрированияИБ.ПарольАдминистратораКластера); + ПараметрыАдминистрированияКластера.ClusterPort = ПараметрыАдминистрированияИБ.ПортКластераСерверов; + ПараметрыАдминистрированияКластера.ClusterUserName = ПараметрыАдминистрированияИБ.ИмяАдминистратораКластера; + ПараметрыАдминистрированияКластера.ClusterPassword = СтрокаВBase64(ПараметрыАдминистрированияИБ.ПарольАдминистратораКластера); + ПараметрыАдминистрированияКластера.IBUserName = ПараметрыАдминистрированияИБ.ИмяАдминистратораИБ; + ПараметрыАдминистрированияКластера.IBPassword = СтрокаВBase64(ПараметрыАдминистрированияИБ.ПарольАдминистратораИБ); + + ЗначенияПараметров.Вставить("ПараметрыАдминистрированияКластера", ПараметрыАдминистрированияКластера); + ЗначенияПараметров.Вставить("СписокСеансов", СписокСеансов); + + ПараметрыXDTO = ЗаписатьСтруктурныйОбъектXDTOВСтроку(ЗначенияПараметров); + + // Есть поддержка 2-й версии, в которой реализовано выборочное удаление сеансов. + Прокси = ПолучитьПроксиДляПодключенияКСервису(ПараметрыПодключения, "ManageAgent", "1.0.2.1"); + // Выполнить действие с помощью операции Web-сервиса. + СостояниеЗавершения = Неопределено; + Прокси.DoAction("УдалитьСеансыПоСписку", ПараметрыXDTO, СостояниеЗавершения); + + Возврат СостояниеЗавершения = "ДействиеВыполнено" Или СостояниеЗавершения = "Истина"; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Работа с параметрами ИБ + +// Возвращает пустую таблицу параметров ИБ +// +Функция ПолучитьПустуюТаблицуПараметровИБ() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная))); + Результат.Колонки.Добавить("Описание", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная))); + Результат.Колонки.Добавить("ЗапретЧтения", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ЗапретЗаписи", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("Тип", Новый ОписаниеТипов("ОписаниеТипов")); + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Работа с файлами + +// Возвращает полное имя файла, полученного из файлового хранилища МС по его идентификатору. +// +// Параметры: +// ИДФайла - УникальныйИдентификатор - Идентификатор файла в файловом хранилище МС. +// +// Возвращаемое значение: +// Строка - Полное имя извлеченного файла. +// +Функция ПолучитьФайлИзХранилищаМенеджераСервиса(Знач ИДФайла) + + АдресМенеджераСервиса = Константы.ВнутреннийАдресМенеджераСервиса.Получить(); + Если Не ЗначениеЗаполнено(АдресМенеджераСервиса) Тогда + ВызватьИсключение(НСтр("ru = 'Не установлены параметры связи с менеджером сервиса.'")); + КонецЕсли; + + ПараметрыДоступаКХранилищу = Новый Структура; + ПараметрыДоступаКХранилищу.Вставить("URL", АдресМенеджераСервиса); + ПараметрыДоступаКХранилищу.Вставить("UserName", Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить()); + ПараметрыДоступаКХранилищу.Вставить("Password", Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить()); + + ОписаниеФайла = ПолучитьФайлИзХранилища(ИДФайла, ПараметрыДоступаКХранилищу, Истина); + + СвойстваФайла = Новый Файл(ОписаниеФайла.ПолноеИмя); + Если Не СвойстваФайла.Существует() Тогда + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл %1 не найден.'"), ОписаниеФайла.ПолноеИмя)); + КонецЕсли; + + Возврат СвойстваФайла.ПолноеИмя; + +КонецФункции + +// Проверяет, возможна ли передача файла через файловую систему с сервера на клиент. +// +// Параметры: +// Прокси - WSПрокси - Прокси сервиса FilesTransfer*. +// ЕстьПоддержка2йВерсии - Булево. +// +// Возвращаемое значение: +// Булево. +// +Функция МожноПередаватьЧерезФСССервера(Знач Прокси, Знач ЕстьПоддержка2йВерсии) + + Если Не ЕстьПоддержка2йВерсии Тогда + Возврат Ложь; + КонецЕсли; + + ИмяФайла = Прокси.WriteTestFile(); + Если ИмяФайла = "" Тогда + Возврат Ложь; + КонецЕсли; + + Результат = ПрочитатьПробныйФайл(ИмяФайла); + + Прокси.DeleteTestFile(ИмяФайла); + + Возврат Результат; + +КонецФункции + +// Создать каталог с уникальным именем для размещения частей разделяемого файла. +// +// Возвращаемое значение: +// Строка - Имя каталога. +// +Функция СоздатьКаталогСборки() + + КаталогСборки = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(КаталогСборки); + Возврат КаталогСборки + ПолучитьРазделительПутиФайловойСистемы(); + +КонецФункции + +// Читает тестовый файл с диска, сравнивая содержимое и имя: они должны совпадать. +// Файл должна удалять вызывающая сторона. +// +// Параметры: +// ИмяФайла - Строка - Без пути. +// +// Возвращаемое значение: +// Булево - Истина, если файл успешно прочтен и содержимое совпадает с его именем. +// +Функция ПрочитатьПробныйФайл(Знач ИмяФайла) + + СвойстваФайла = Новый Файл(ПолучитьОбщийКаталогВременныхФайлов() + ИмяФайла); + Если СвойстваФайла.Существует() Тогда + Текст = Новый ЧтениеТекста(СвойстваФайла.ПолноеИмя, КодировкаТекста.ANSI); + ТестовыйИД = Текст.Прочитать(); + Текст.Закрыть(); + Возврат ТестовыйИД = СвойстваФайла.ИмяБезРасширения; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +// Создает незаполненную структуру нужного формата. +// +// Возвращаемое значение: +// Структура: +// Имя - Строка - Имя файла в хранилище. +// Данные - ДвоичныеДанные - Данные файла. +// ПолноеИмя - Строка - Имя файла с путем. +// +Функция СоздатьОписаниеФайла() + + ОписаниеФайла = Новый Структура; + ОписаниеФайла.Вставить("Имя"); + ОписаниеФайла.Вставить("Данные"); + ОписаниеФайла.Вставить("ПолноеИмя"); + ОписаниеФайла.Вставить("ОбязательныеПараметры", "Имя"); // Обязательные к заполнению параметры. + Возврат ОписаниеФайла; + +КонецФункции + +///////////////////////////////////////////////////////////////////////////////// +// Сериализация + +Функция ЗаписатьЗначениеВСтроку(Знач Значение) + + Запись = Новый ЗаписьXML; + Запись.УстановитьСтроку(); + + Если ТипЗнч(Значение) = Тип("ОбъектXDTO") Тогда + ФабрикаXDTO.ЗаписатьXML(Запись, Значение, , , , НазначениеТипаXML.Явное); + Иначе + СериализаторXDTO.ЗаписатьXML(Запись, Значение, НазначениеТипаXML.Явное); + КонецЕсли; + + Возврат Запись.Закрыть(); + +КонецФункции + +// Отражает, является ли данный тип сериализуемым. +// +// Параметры: +// СтруктурныйТип - Тип. +// +// Возвращаемое значение: +// Булево. +// +Функция СериализуемыйСтруктурныйТип(СтруктурныйТип); + + МассивСериализуемыхТипов = РаботаВМоделиСервисаПовтИсп.СериализуемыеСтруктурныеТипы(); + + Для Каждого СериализуемыйТип Из МассивСериализуемыхТипов Цикл + Если СтруктурныйТип = СериализуемыйТип Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Получает XDTO-представление объекта структурного типа. +// +// Параметры: +// ЗначениеСтруктурногоТипа - Массив, Структура, Соответствие или их фиксированные аналоги. +// +// Возвращаемое значение: +// Структурный объект XDTO - XDTO-представление объекта структурного типа. +// +Функция СтруктурныйОбъектВОбъектXDTO(Знач ЗначениеСтруктурногоТипа) + + СтруктурныйТип = ТипЗнч(ЗначениеСтруктурногоТипа); + + Если Не СериализуемыйСтруктурныйТип(СтруктурныйТип) Тогда + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Тип %1 не является структурным или его сериализация в настоящее время не поддерживается.'"), + СтруктурныйТип); + ВызватьИсключение(СообщениеОбОшибке); + КонецЕсли; + + XMLТипЗначения = СериализаторXDTO.XMLТипЗнч(ЗначениеСтруктурногоТипа); + ТипСтруктура = ФабрикаXDTO.Тип(XMLТипЗначения); + СтруктураXDTO = ФабрикаXDTO.Создать(ТипСтруктура); + + // Перебор допустимых структурных типов. + + Если СтруктурныйТип = Тип("Структура") Или СтруктурныйТип = Тип("ФиксированнаяСтруктура") Тогда + + ТипСвойство = ТипСтруктура.Свойства.Получить("Property").Тип; + + Для Каждого КлючИЗначение Из ЗначениеСтруктурногоТипа Цикл + Свойство = ФабрикаXDTO.Создать(ТипСвойство); + Свойство.name = КлючИЗначение.Ключ; + Свойство.Value = ЗначениеТипаВЗначениеXDTO(КлючИЗначение.Значение); + СтруктураXDTO.Property.Добавить(Свойство); + КонецЦикла; + + ИначеЕсли СтруктурныйТип = Тип("Массив") Или СтруктурныйТип = Тип("ФиксированныйМассив") Тогда + + Для Каждого ЗначениеЭлемента Из ЗначениеСтруктурногоТипа Цикл + СтруктураXDTO.Value.Добавить(ЗначениеТипаВЗначениеXDTO(ЗначениеЭлемента)); + КонецЦикла; + + ИначеЕсли СтруктурныйТип = Тип("Соответствие") Или СтруктурныйТип = Тип("ФиксированноеСоответствие") Тогда + + Для Каждого КлючИЗначение Из ЗначениеСтруктурногоТипа Цикл + СтруктураXDTO.pair.Добавить(СтруктурныйОбъектВОбъектXDTO(КлючИЗначение)); + КонецЦикла; + + ИначеЕсли СтруктурныйТип = Тип("КлючИЗначение") Тогда + + СтруктураXDTO.key = ЗначениеТипаВЗначениеXDTO(ЗначениеСтруктурногоТипа.Ключ); + СтруктураXDTO.value = ЗначениеТипаВЗначениеXDTO(ЗначениеСтруктурногоТипа.Значение); + + ИначеЕсли СтруктурныйТип = Тип("ТаблицаЗначений") Тогда + + XDTOТипКолонкаТЗ = ТипСтруктура.Свойства.Получить("column").Тип; + + Для Каждого Колонка Из ЗначениеСтруктурногоТипа.Колонки Цикл + + КолонкаXDTO = ФабрикаXDTO.Создать(XDTOТипКолонкаТЗ); + + КолонкаXDTO.Name = ЗначениеТипаВЗначениеXDTO(Колонка.Имя); + КолонкаXDTO.ValueType = СериализаторXDTO.ЗаписатьXDTO(Колонка.ТипЗначения); + КолонкаXDTO.Title = ЗначениеТипаВЗначениеXDTO(Колонка.Заголовок); + КолонкаXDTO.Width = ЗначениеТипаВЗначениеXDTO(Колонка.Ширина); + + СтруктураXDTO.column.Добавить(КолонкаXDTO); + + КонецЦикла; + + XDTOТипИндексТЗ = ТипСтруктура.Свойства.Получить("index").Тип; + + Для Каждого Индекс Из ЗначениеСтруктурногоТипа.Индексы Цикл + + ИндексXDTO = ФабрикаXDTO.Создать(XDTOТипИндексТЗ); + + Для Каждого ПолеИндекса Из Индекс Цикл + ИндексXDTO.column.Добавить(ЗначениеТипаВЗначениеXDTO(ПолеИндекса)); + КонецЦикла; + + СтруктураXDTO.index.Добавить(ИндексXDTO); + + КонецЦикла; + + XDTOТипСтрокаТЗ = ТипСтруктура.Свойства.Получить("row").Тип; + + Для Каждого СтрокаТЗ Из ЗначениеСтруктурногоТипа Цикл + + СтрокаXDTO = ФабрикаXDTO.Создать(XDTOТипСтрокаТЗ); + + Для Каждого ЗначениеКолонки Из СтрокаТЗ Цикл + СтрокаXDTO.value.Добавить(ЗначениеТипаВЗначениеXDTO(ЗначениеКолонки)); + КонецЦикла; + + СтруктураXDTO.row.Добавить(СтрокаXDTO); + + КонецЦикла; + + КонецЕсли; + + Возврат СтруктураXDTO; + +КонецФункции + +// Получает объект структурного типа из XDTO-объекта. +// +// Параметры: +// ОбъектXDTO - Объект XDTO. +// +// Возвращаемое значение: +// Структурный тип ( Массив, Структура, Соответствие или их фиксированные аналоги) +// +Функция ОбъектXDTOВСтруктурныйОбъект(ОбъектXDTO) + + ТипДанныхXML = Новый ТипДанныхXML(ОбъектXDTO.Тип().Имя, ОбъектXDTO.Тип().UriПространстваИмен); + Если ВозможностьЧтенияТипаДанныхXML(ТипДанныхXML) Тогда + СтруктурныйТип = СериализаторXDTO.ИзXMLТипа(ТипДанныхXML); + Иначе + Возврат ОбъектXDTO; + КонецЕсли; + + Если СтруктурныйТип = Тип("Строка") Тогда + Возврат ""; + КонецЕсли; + + Если Не СериализуемыйСтруктурныйТип(СтруктурныйТип) Тогда + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Тип %1 не является структурным или его сериализация в настоящее время не поддерживается.'"), + СтруктурныйТип); + ВызватьИсключение(СообщениеОбОшибке); + КонецЕсли; + + Если СтруктурныйТип = Тип("Структура") Или СтруктурныйТип = Тип("ФиксированнаяСтруктура") Тогда + + СтруктурныйОбъект = Новый Структура; + + Для Каждого Свойство Из ОбъектXDTO.Property Цикл + СтруктурныйОбъект.Вставить(Свойство.name, ЗначениеXDTOВЗначениеТипа(Свойство.Value)); + КонецЦикла; + + Если СтруктурныйТип = Тип("Структура") Тогда + Возврат СтруктурныйОбъект; + Иначе + Возврат Новый ФиксированнаяСтруктура(СтруктурныйОбъект); + КонецЕсли; + + ИначеЕсли СтруктурныйТип = Тип("Массив") Или СтруктурныйТип = Тип("ФиксированныйМассив") Тогда + + СтруктурныйОбъект = Новый Массив; + + Для Каждого ЭлементМассива Из ОбъектXDTO.Value Цикл + СтруктурныйОбъект.Добавить(ЗначениеXDTOВЗначениеТипа(ЭлементМассива)); + КонецЦикла; + + Если СтруктурныйТип = Тип("Массив") Тогда + Возврат СтруктурныйОбъект; + Иначе + Возврат Новый ФиксированныйМассив(СтруктурныйОбъект); + КонецЕсли; + + ИначеЕсли СтруктурныйТип = Тип("Соответствие") Или СтруктурныйТип = Тип("ФиксированноеСоответствие") Тогда + + СтруктурныйОбъект = Новый Соответствие; + + Для Каждого КлючИЗначениеXDTO Из ОбъектXDTO.pair Цикл + КлючИЗначение = ОбъектXDTOВСтруктурныйОбъект(КлючИЗначениеXDTO); + СтруктурныйОбъект.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + + Если СтруктурныйТип = Тип("Соответствие") Тогда + Возврат СтруктурныйОбъект; + Иначе + Возврат Новый ФиксированноеСоответствие(СтруктурныйОбъект); + КонецЕсли; + + ИначеЕсли СтруктурныйТип = Тип("КлючИЗначение") Тогда + + СтруктурныйОбъект = Новый Структура("Ключ, Значение"); + СтруктурныйОбъект.Ключ = ЗначениеXDTOВЗначениеТипа(ОбъектXDTO.key); + СтруктурныйОбъект.Значение = ЗначениеXDTOВЗначениеТипа(ОбъектXDTO.value); + + Возврат СтруктурныйОбъект; + + ИначеЕсли СтруктурныйТип = Тип("ТаблицаЗначений") Тогда + + СтруктурныйОбъект = Новый ТаблицаЗначений; + + Для Каждого Колонка Из ОбъектXDTO.column Цикл + + СтруктурныйОбъект.Колонки.Добавить( + ЗначениеXDTOВЗначениеТипа(Колонка.Name), + СериализаторXDTO.ПрочитатьXDTO(Колонка.ValueType), + ЗначениеXDTOВЗначениеТипа(Колонка.Title), + ЗначениеXDTOВЗначениеТипа(Колонка.Width)); + + КонецЦикла; + Для Каждого Индекс Из ОбъектXDTO.index Цикл + + ИндексСтрокой = ""; + Для Каждого ПолеИндекса Из Индекс.column Цикл + ИндексСтрокой = ИндексСтрокой + ПолеИндекса + ", "; + КонецЦикла; + ИндексСтрокой = СокрЛП(ИндексСтрокой); + Если СтрДлина(ИндексСтрокой) > 0 Тогда + ИндексСтрокой = Лев(ИндексСтрокой, СтрДлина(ИндексСтрокой) - 1); + КонецЕсли; + + СтруктурныйОбъект.Индексы.Добавить(ИндексСтрокой); + КонецЦикла; + Для Каждого СтрокаXDTO Из ОбъектXDTO.row Цикл + + СтрокаТЗ = СтруктурныйОбъект.Добавить(); + + ЧислоКолонок = СтруктурныйОбъект.Колонки.Количество(); + Для Индекс = 0 По ЧислоКолонок - 1 Цикл + СтрокаТЗ[СтруктурныйОбъект.Колонки[Индекс].Имя] = ЗначениеXDTOВЗначениеТипа(СтрокаXDTO.value[Индекс]); + КонецЦикла; + + КонецЦикла; + + Возврат СтруктурныйОбъект; + + КонецЕсли; + +КонецФункции + +Функция ВозможностьЧтенияТипаДанныхXML(Знач ТипДанныхXML) + + Запись = Новый ЗаписьXML; + Запись.УстановитьСтроку(); + Запись.ЗаписатьНачалоЭлемента("Dummy"); + Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); + Запись.ЗаписатьСоответствиеПространстваИмен("ns1", ТипДанныхXML.URIПространстваИмен); + Запись.ЗаписатьАтрибут("xsi:type", "ns1:" + ТипДанныхXML.ИмяТипа); + Запись.ЗаписатьКонецЭлемента(); + + Строка = Запись.Закрыть(); + + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(Строка); + Чтение.ПерейтиКСодержимому(); + + Возврат СериализаторXDTO.ВозможностьЧтенияXML(Чтение); + +КонецФункции + +// Получает значение простейшего типа в контексте XDTO. +// +// Параметры: +// ЗначениеТипа - Значение произвольного типа. +// +// Возвращаемое значение: +// Произвольный тип. +// +Функция ЗначениеТипаВЗначениеXDTO(Знач ЗначениеТипа) + + Если ЗначениеТипа = Неопределено + Или ТипЗнч(ЗначениеТипа) = Тип("ОбъектXDTO") + Или ТипЗнч(ЗначениеТипа) = Тип("ЗначениеXDTO") Тогда + + Возврат ЗначениеТипа; + + Иначе + + Если ТипЗнч(ЗначениеТипа) = Тип("Строка") Тогда + ТипXDTO = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "string") + Иначе + ТипXML = СериализаторXDTO.XMLТипЗнч(ЗначениеТипа); + ТипXDTO = ФабрикаXDTO.Тип(ТипXML); + КонецЕсли; + + Если ТипЗнч(ТипXDTO) = Тип("ТипОбъектаXDTO") Тогда // Значение структурного типа. + Возврат СтруктурныйОбъектВОбъектXDTO(ЗначениеТипа); + Иначе + Возврат ФабрикаXDTO.Создать(ТипXDTO, ЗначениеТипа); // Например, UUID. + КонецЕсли; + + КонецЕсли; + +КонецФункции + +// Получает платформенный аналог значения XDTO-типа. +// +// Параметры: +// ЗначениеXDTO - Значение произвольного XDTO-типа. +// +// Возвращаемое значение: +// Произвольный тип. +// +Функция ЗначениеXDTOВЗначениеТипа(ЗначениеXDTO) + + Если ТипЗнч(ЗначениеXDTO) = Тип("ЗначениеXDTO") Тогда + Возврат ЗначениеXDTO.Значение; + ИначеЕсли ТипЗнч(ЗначениеXDTO) = Тип("ОбъектXDTO") Тогда + Возврат ОбъектXDTOВСтруктурныйОбъект(ЗначениеXDTO); + Иначе + Возврат ЗначениеXDTO; + КонецЕсли; + +КонецФункции diff --git a/SSL/src/CommonModules/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo b/SSL/src/CommonModules/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo new file mode 100644 index 000000000..b00350c2a --- /dev/null +++ b/SSL/src/CommonModules/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo @@ -0,0 +1,11 @@ + + + РаботаВМоделиСервиса + + ru + Работа в модели сервиса + + true + true + true + diff --git a/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/Module.bsl new file mode 100644 index 000000000..b0c3344f4 --- /dev/null +++ b/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/Module.bsl @@ -0,0 +1,86 @@ +/////////////////////////////////////////////////////////////////////////////////// +// РаботаВМоделиСервисаПереопределяемый. +// +/////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Формирует список имен неразделенных регистров сведений, хранящих разделенные данные. +// +// Параметры: +// ОбщиеРегистры - Массив - массив строк. +// +Процедура ПолучитьОбщиеРегистрыСведенийСРазделеннымиДанными(Знач ОбщиеРегистры) Экспорт + +КонецПроцедуры + +// Формирует список типов данных которые не могут быть скопированы между областями +// +// Параметры: +// ОбщиеРегистры - Массив - массив типов. +// +Процедура ПолучитьНезагружаемыеВОбластиДанныхТипы(Знач Типы) Экспорт + +КонецПроцедуры + +// Вызывается при удалении области данных. +// В процедуре необходимо удалить данные области данных, которые не +// могут быть удалены стандартным механизмом +// +// Параметры: +// ОбластьДанных - Тип значения разделителя - значение разделителя +// удаляемой области данных. +// +Процедура ПриУдаленииОбластиДанных(Знач ОбластьДанных) Экспорт + +КонецПроцедуры + +// Формирует список параметров ИБ. +// +// Параметры: +// ТаблицаПараметров - ТаблицаЗначений - таблица описания параметров. +// Описание состав колонок - см. РаботаВМоделиСервиса.ПолучитьТаблицуПараметровИБ() +// +Процедура ПолучитьТаблицуПараметровИБ(Знач ТаблицаПараметров) Экспорт + +КонецПроцедуры + +// Вызывается перед попыткой получения значений параметров ИБ из одноименных +// констант. +// +// Параметры: +// ИменаПараметров - Массив строк - имена параметров, значения которых необходимо получить. +// В случае если значение параметра получается в данной процедуре, необходимо удалить +// имя обработанного параметра из массива. +// ЗначенияПараметров - Структура - значения параметров. +// +Процедура ПриПолученииЗначенийПараметровИБ(Знач ИменаПараметров, Знач ЗначенияПараметров) Экспорт + +КонецПроцедуры + +// Вызывается перед попыткой записи значений параметров ИБ в одноименные +// константы. +// +// Параметры: +// ЗначенияПараметров - Структура - значения параметров которые требуется установить. +// В случае если значение параметра устанавливается в данной процедуре из структуры +// необходимо удалить соответствую пару КлючИЗначение +// +Процедура ПриУстановкеЗначенийПараметровИБ(Знач ЗначенияПараметров) Экспорт + +КонецПроцедуры + +// Вызывается при включении разделения данных по областям данных, +// при первом запуске конфигурации с параметром "ИнициализироватьРазделеннуюИБ" ("InitializeSeparatedIB"). +// +// В частности, здесь следует размещать код по включению регламентных заданий, +// используемых только при включенном разделении данных, +// и соответственно, по выключению заданий, используемых только при выключенном разделении данных. +// +// См. пример в процедуре ПриВключенииРазделенияПоОбластямДанных общего модуля СтандартныеПодсистемыПереопределяемый. +// +Процедура ПриВключенииРазделенияПоОбластямДанных() Экспорт + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/РаботаВМоделиСервисаПереопределяемый.mdo b/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/РаботаВМоделиСервисаПереопределяемый.mdo new file mode 100644 index 000000000..3b6acc1c3 --- /dev/null +++ b/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/РаботаВМоделиСервисаПереопределяемый.mdo @@ -0,0 +1,11 @@ + + + РаботаВМоделиСервисаПереопределяемый + + ru + Работа в модели сервиса переопределяемый + + true + true + true + diff --git a/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl new file mode 100644 index 000000000..f62a76822 --- /dev/null +++ b/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl @@ -0,0 +1,40 @@ +/////////////////////////////////////////////////////////////////////////////////// +// РаботаВМоделиСервисаПовтИсп. +// +/////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает конечную точку для отправки сообщений в менеджер сервиса. +// +// Возвращаемое значение: +// ПланОбменСсылка.ОбменСообщениями - узел соответствующий менеджеру сервиса +// +Функция КонечнаяТочкаМенеджераСервиса() Экспорт + + Возврат Константы.КонечнаяТочкаМенеджераСервиса.Получить(); + +КонецФункции + +// Возвращает массив сериализуемых структурных типов, поддерживаемых в настоящее время. +// +// Возвращаемое значение: +// Фиксированный массив элементов типа Тип +// +Функция СериализуемыеСтруктурныеТипы() Экспорт + + МассивТипов = Новый Массив; + + МассивТипов.Добавить(Тип("Структура")); + МассивТипов.Добавить(Тип("ФиксированнаяСтруктура")); + МассивТипов.Добавить(Тип("Массив")); + МассивТипов.Добавить(Тип("ФиксированныйМассив")); + МассивТипов.Добавить(Тип("Соответствие")); + МассивТипов.Добавить(Тип("ФиксированноеСоответствие")); + МассивТипов.Добавить(Тип("КлючИЗначение")); + МассивТипов.Добавить(Тип("ТаблицаЗначений")); + + Возврат Новый ФиксированныйМассив(МассивТипов); + +КонецФункции diff --git a/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/РаботаВМоделиСервисаПовтИсп.mdo b/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/РаботаВМоделиСервисаПовтИсп.mdo new file mode 100644 index 000000000..5b6c36dc2 --- /dev/null +++ b/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/РаботаВМоделиСервисаПовтИсп.mdo @@ -0,0 +1,12 @@ + + + РаботаВМоделиСервисаПовтИсп + + ru + Работа в модели сервиса повт исп + + true + true + true + DuringSession + diff --git a/SSL/src/CommonModules/РаботаС1СДокументооборотВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаС1СДокументооборотВызовСервера/Module.bsl index 953ffe2c5..c97335f1d 100644 --- a/SSL/src/CommonModules/РаботаС1СДокументооборотВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаС1СДокументооборотВызовСервера/Module.bsl @@ -19,16 +19,28 @@ ВызватьИсключение НСтр("ru = 'Не заполнены параметры авторизации в 1С:Документооборот'"); КонецЕсли; - Определение = Новый WSОпределения( - МестоположениеWSDL, - ИмяПользователя, - Пароль); - - Прокси = Новый WSПрокси( - Определение, - "http://www.1c.ru/dm", - "DMService", - "DMServiceSoap"); + Попытка + Определение = Новый WSОпределения( + МестоположениеWSDL, + ИмяПользователя, + Пароль); + + Прокси = Новый WSПрокси( + Определение, + "http://www.1c.ru/dm", + "DMService", + "DMServiceSoap"); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа с 1С:Документооборот'"), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ВызватьИсключение НСтр("ru = 'Не удалось подключиться к веб сервису 1С:Документооборота. + |Возможно указан неверный адрес веб-сервиса или база 1С:Документооборота не опубликована на веб сервере. + |Подробности в журнале регистрации. + |Обратитесь к администратору системы.'"); + + КонецПопытки; Прокси.Пользователь = ИмяПользователя; Прокси.Пароль = Пароль; @@ -434,8 +446,19 @@ Файл.binaryData = ПолучитьИзВременногоХранилища(ПараметрыСоздания.АдресВременногоХранилищаФайла); Файл.extension = ПараметрыСоздания.Расширение; - Файл.modificationDate = ПараметрыСоздания.ВремяИзменения; - Файл.modificationDateUniversal = ПараметрыСоздания.ВремяИзмененияУниверсальное; + + Если ПараметрыСоздания.ВремяИзменения <> '00000000' Тогда + Файл.modificationDate = ПараметрыСоздания.ВремяИзменения; + Иначе + Файл.modificationDate = ТекущаяДатаСеанса(); + КонецЕсли; + + Если ПараметрыСоздания.ВремяИзменения <> '00000000' Тогда + Файл.modificationDateUniversal = ПараметрыСоздания.ВремяИзмененияУниверсальное; + Иначе + Файл.modificationDateUniversal = УниверсальноеВремя(ТекущаяДатаСеанса()); + КонецЕсли; + Файл.size = ПараметрыСоздания.Размер; Если НЕ ПустаяСтрока(ПараметрыСоздания.Текст) Тогда diff --git a/SSL/src/CommonModules/РаботаС1СДокументооборотКлиент/Module.bsl b/SSL/src/CommonModules/РаботаС1СДокументооборотКлиент/Module.bsl index c7a5c713c..830f4a2a8 100644 --- a/SSL/src/CommonModules/РаботаС1СДокументооборотКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаС1СДокументооборотКлиент/Module.bsl @@ -207,8 +207,12 @@ КонецЕсли; ИмяВременногоФайла = КаталогДляСохраненияДанных; - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ИмяВременногоФайла, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременногоФайла, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + + // ТекущаяДата() используется только для генерации случайного числа (т.к. ГенераторСлучайныхЧисел не доступен на веб клиенте) + // поэтому приведение к ТекущаяДатаСеанса не нужно СлучайноеИмяФайла = Имя + " (" + Секунда(ТекущаяДата()) + ")"; + ИмяВременногоФайла = ИмяВременногоФайла + СлучайноеИмяФайла + "." + Расширение; #КонецЕсли @@ -219,7 +223,7 @@ Файл = Новый Файл(ИмяВременногоФайла); ПутьКФайлу = Файл.Путь; - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); ИмяФайла = ПолучитьИмяСРасширением(Имя, Расширение); РазмерВМб = Размер / (1024 * 1024); @@ -239,7 +243,7 @@ Состояние(); ДатаСоздаваемогоФайлаНаДиске = ДатаМодификацииУниверсальная; - ОбщегоНазначенияКлиент.ПреобразоватьЗимнееВремяКТекущему(ДатаСоздаваемогоФайлаНаДиске); + ДатаСоздаваемогоФайлаНаДиске = МестноеВремя(ДатаСоздаваемогоФайлаНаДиске); Файл.УстановитьВремяИзменения(ДатаСоздаваемогоФайлаНаДиске); ОткрытьФайлПриложением(ИмяВременногоФайла); @@ -355,7 +359,7 @@ ПередаваемыеФайлы.Добавить(Описание); ПутьКФайлу = Файл.Путь; - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); // Сохраним Файл из БД на диск Если ПолучитьФайлы(ПередаваемыеФайлы,, ПутьКФайлу, Ложь) Тогда @@ -368,7 +372,7 @@ НовыйФайл = Новый Файл(ВыборФайла.ПолноеИмяФайла); ДатаСоздаваемогоФайлаНаДиске = ДатаМодификацииУниверсальная; - ОбщегоНазначенияКлиент.ПреобразоватьЗимнееВремяКТекущему(ДатаСоздаваемогоФайлаНаДиске); + ДатаСоздаваемогоФайлаНаДиске = МестноеВремя(ДатаСоздаваемогоФайлаНаДиске); НовыйФайл.УстановитьВремяИзменения(ДатаСоздаваемогоФайлаНаДиске); @@ -434,8 +438,8 @@ ПараметрыСоздания = Новый Структура("Имя, Расширение, Размер, ВремяИзменения, ВремяИзмененияУниверсальное, АдресВременногоХранилищаФайла, Текст, ВебКлиент, ИдентификаторФайла"); - ВремяИзменения = ТекущаяДата(); // Т.к. не можем получить дату модификации файла на диске - ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДата()); + ВремяИзменения = '00000000'; // Т.к. не можем получить дату модификации файла на диске + ВремяИзмененияУниверсальное = '00000000'; Размер = 0; // Т.к. не можем получить размер файла на диске ИмяБезРасширения = ""; Расширение = ""; diff --git a/SSL/src/CommonModules/РаботаСБанками/Module.bsl b/SSL/src/CommonModules/РаботаСБанками/Module.bsl index 7a07d567e..2b41d1fe4 100644 --- a/SSL/src/CommonModules/РаботаСБанками/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанками/Module.bsl @@ -46,6 +46,10 @@ // Процедура ЗагрузитьКлассификаторБанков() Экспорт + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + ПараметрыЗагрузкиКлассификатора = Новый Соответствие; ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", 0); ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", 0); @@ -93,7 +97,7 @@ Пока СтрокаТекстаБИКРБК <> Неопределено Цикл Строка = СтрокаТекстаБИКРБК; - + Если ПустаяСтрока(СокрЛП(Строка)) Тогда Продолжить; КонецЕсли; @@ -369,10 +373,8 @@ Загружено = ПараметрыЗагрузкиДанных["Загружено"]; Обновлено = ПараметрыЗагрузкиДанных["Обновлено"]; - СправочникКлассификаторБанковРФ = Справочники.КлассификаторБанковРФ; - Если Не ПустаяСтрока(СтруктураБанк.КодРегиона) Тогда - ТекущийРегион = СправочникКлассификаторБанковРФ.НайтиПоКоду(СтруктураБанк.КодРегиона); + ТекущийРегион = Справочники.КлассификаторБанковРФ.НайтиПоКоду(СтруктураБанк.КодРегиона); Если ТекущийРегион.Пустая() Тогда Регион = Справочники.КлассификаторБанковРФ.СоздатьГруппу(); Иначе @@ -396,7 +398,7 @@ КонецЕсли; КонецЕсли; - ЗаписываемыйЭлементСправочникаКлассификаторБанковРФ = СправочникКлассификаторБанковРФ.НайтиПоКоду(СтруктураБанк.БИК); + ЗаписываемыйЭлементСправочникаКлассификаторБанковРФ = Справочники.КлассификаторБанковРФ.НайтиПоКоду(СтруктураБанк.БИК); Если ЗаписываемыйЭлементСправочникаКлассификаторБанковРФ.Пустая() Тогда КлассификаторБанковОбъект = Справочники.КлассификаторБанковРФ.СоздатьЭлемент(); @@ -511,27 +513,6 @@ //////////////////////////////////////////////////////////////////////////////// // Технологические процедуры и фунцкии -// Формирует структуру полей для банка. -// Параметры: -// ФорматируемоеЧисло - Число - Число, которое необходимо преобразовать в строку: количество - цифрой, -// предмет исчисления - прописью -// ФорматнаяСтрока - Строка - Параметры форматирования -// ПараметрыПредметаИсчисления - Строка - Параметры предмета исчисления -// ПредметИсчисления - Строка - корень наименования предмета исчисления -// Возвращаемое значение: -// КоличествоПрописью - Структура - Реквизиты банка -// -Функция ОтформатироватьЧислоПрописью(ФорматируемоеЧисло, ФорматнаяСтрока, - ПараметрыПредметаИсчисления, ПредметИсчисления) Экспорт - КоличествоПрописью = ЧислоПрописью(ФорматируемоеЧисло, ФорматнаяСтрока, ПараметрыПредметаИсчисления); - Позиция = Найти(КоличествоПрописью, ПредметИсчисления); - Если Позиция <> 0 Тогда - КоличествоПрописью = Сред(КоличествоПрописью, Позиция); - КонецЕсли; - КоличествоПрописью = Строка(ФорматируемоеЧисло) + " " + НРег(КоличествоПрописью); - Возврат КоличествоПрописью; -КонецФункции - // Проверяет существование каталога // Параметры: // ИмяКаталога - Строка - путь к каталогу @@ -565,4 +546,7 @@ КонецЦикла; УдалитьФайлы(ИмяКаталога, МаскаИмениФайла); КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + + + diff --git a/SSL/src/CommonModules/РаботаСБанкамиВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСБанкамиВызовСервера/Module.bsl index c7483c896..31cc27cf3 100644 --- a/SSL/src/CommonModules/РаботаСБанкамиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанкамиВызовСервера/Module.bsl @@ -24,22 +24,18 @@ Если ПараметрыЗагрузкиКлассификатора["Загружено"] > 0 Тогда - КоличествоЗаписейПрописью = РаботаСБанками.ОтформатироватьЧислоПрописью(ПараметрыЗагрузкиКлассификатора["Загружено"], - "Л = ru_RU; НП = Истина; НД = Ложь; ДП = Ложь;", - НСтр("ru = 'запись,записи,записей,ж,,,,,0'"), НСтр("ru = 'запис'")); - ТекстСообщения = ТекстСообщения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru ='Загружено %1.'"), КоличествоЗаписейПрописью); + НСтр("ru =' + |Загружено новых: %1.'"), ПараметрыЗагрузкиКлассификатора["Загружено"]); + КонецЕсли; Если ПараметрыЗагрузкиКлассификатора["Обновлено"] > 0 Тогда - КоличествоЗаписейПрописью = РаботаСБанками.ОтформатироватьЧислоПрописью(ПараметрыЗагрузкиКлассификатора["Обновлено"], - "Л = ru_RU; НП = Истина; НД = Ложь; ДП = Ложь;", - НСтр("ru = 'запись,записи,записей,ж,,,,,0'"), НСтр("ru = 'запис'")); - ТекстСообщения = ТекстСообщения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru ='Обновлено %1.'"), КоличествоЗаписейПрописью); + НСтр("ru =' + |Обновлено записей: %1.'"), ПараметрыЗагрузкиКлассификатора["Обновлено"]); + КонецЕсли; ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); diff --git a/SSL/src/CommonModules/РаботаСБиблиотекойФайловКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСБиблиотекойФайловКлиент/Module.bsl index e0d24017b..20c37c0a5 100644 --- a/SSL/src/CommonModules/РаботаСБиблиотекойФайловКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБиблиотекойФайловКлиент/Module.bsl @@ -13,7 +13,7 @@ Файл = Новый Файл(ИмяВременногоФайла); ПутьКФайлу = Файл.Путь; - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); ИмяФайла = ПолучитьИмяСРасширением(Имя, Расширение); РазмерВМб = Размер / (1024 * 1024); diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl index 316ad9667..56f41b963 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl @@ -1,21 +1,118 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Валюты" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Возвращает курс валюты на дату -// +// // Параметры: -// Валюта - Валюта (элемент справочника "Валюты") -// ДатаКурса - Дата, на которую следует получить курс -// +// Валюта (СправочникСсылка.Валюты) Валюта, для которой получается курс +// ДатаКурса (Дата) Дата, на которую получается курс +// // Возвращаемое значение: -// Структура, содержащая: -// Курс - курс валюты -// Кратность - кратность валюты -// +// (Структура) +// |- Валюта (СправочникСсылка.Валюты) +// |- Курс (Число) +// |- Кратность (Число) +// |- ДатаКурса (Дата) +// Функция ПолучитьКурсВалюты(Валюта, ДатаКурса) Экспорт - - Возврат РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ДатаКурса, Новый Структура("Валюта", Валюта)); + + Результат = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ДатаКурса, Новый Структура("Валюта", Валюта)); + + Результат.Вставить("Валюта", Валюта); + Результат.Вставить("ДатаКурса", ДатаКурса); + + Возврат Результат; КонецФункции +// Формирует представление суммы прописью в указанной валюте +// +// Параметры: +// СуммаЧислом (Число) Сумма, которую надо представить прописью +// Валюта (СправочникСсылка.Валюты) Валюта, в которой нужно представить сумму +// ВыводитьСуммуБезКопеек (Булево) Флаг представления суммы без копеек +// +// Возвращаемое значение: +// (Строка) Сумма прописью +// +Функция СформироватьСуммуПрописью(СуммаЧислом, Валюта, ВыводитьСуммуБезКопеек = Ложь) Экспорт + + Сумма = ?(СуммаЧислом < 0, -СуммаЧислом, СуммаЧислом); + ПараметрыПредмета = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(Валюта, "ПараметрыПрописиНаРусском"); + + Результат = ЧислоПрописью(Сумма, "Л=ru_RU;ДП=Ложь", ПараметрыПредмета.ПараметрыПрописиНаРусском); + + Если ВыводитьСуммуБезКопеек И Цел(Сумма) = Сумма Тогда + Результат = Лев(Результат, Найти(Результат, "0") - 1); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Выполнение регламентных заданий + +// Загружает курсы валют на текущую дату +// +Процедура ЗагрузитьАктуальныйКурс() Экспорт + + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + ИмяСобытия = НСтр("ru = 'Валюты.Загрузка курсов валют'"); + + ЗаписьЖурналаРегистрации( + ИмяСобытия, + УровеньЖурналаРегистрации.Информация, + , + , + НСтр("ru = 'Начата регламентная загрузка курсов валют'") + ); + + ТекущаяДата = ТекущаяДатаСеанса(); + + СостояниеЗагрузки = Неопределено; + ПриЗагрузкеВозниклиОшибки = Неопределено; + + ОбработкаЗагрузкиКурсовВалют = Обработки.ЗагрузкаКурсовВалют.Создать(); + ОбработкаЗагрузкиКурсовВалют.НачалоПериодаЗагрузки = ТекущаяДата; + ОбработкаЗагрузкиКурсовВалют.ОкончаниеПериодаЗагрузки = ТекущаяДата; + ОбработкаЗагрузкиКурсовВалют.ЗаполнитьСписокВалют(); + ОбработкаЗагрузкиКурсовВалют.ЗагрузитьКурсыВалют(ПриЗагрузкеВозниклиОшибки); + + Если ПриЗагрузкеВозниклиОшибки Тогда + ЗаписьЖурналаРегистрации( + ИмяСобытия, + УровеньЖурналаРегистрации.Ошибка, + , + , + НСтр("ru = 'Во время регламентного задания загрузки курсов валют возникли ошибки'") + ); + Иначе + ЗаписьЖурналаРегистрации( + ИмяСобытия, + УровеньЖурналаРегистрации.Информация, + , + , + НСтр("ru = 'Завершена регламентная загрузка курсов валют.'") + ); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции + // Копирует в регистр сведений подчиненной валюты всю информацию из регистра // сведений базовой валюты (период, курс, кратность). // @@ -86,10 +183,7 @@ // сведений курсов валют. При этом файл с курсами разбирается, и записываются // только те данные, которые удовлетворяют периоду (НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки). // -Функция ЗагрузитьКурсВалютыИзФайла(знач Валюта, - знач ПутьКФайлу, - знач НачалоПериодаЗагрузки, - знач ОкончаниеПериодаЗагрузки) Экспорт +Функция ЗагрузитьКурсВалютыИзФайла(знач Валюта, знач ПутьКФайлу, знач НачалоПериодаЗагрузки, знач ОкончаниеПериодаЗагрузки) Экспорт СтатусЗагрузки = 1; @@ -170,32 +264,6 @@ КонецФункции -// Выделяет из переданной строки первое значение - // до символа "TAB" - // - // Параметры: - // ИсходнаяСтрока - Строка - строка для разбора - // - // Возвращаемое значение: - // подстроку до символа "TAB" - // -Функция ВыделитьПодСтроку(ИсходнаяСтрока) - - Перем ПодСтрока; - - Поз = Найти(ИсходнаяСтрока,Символы.Таб); - Если Поз > 0 Тогда - ПодСтрока = Лев(ИсходнаяСтрока,Поз-1); - ИсходнаяСтрока = Сред(ИсходнаяСтрока,Поз + 1); - Иначе - ПодСтрока = ИсходнаяСтрока; - ИсходнаяСтрока = ""; - КонецЕсли; - - Возврат ПодСтрока; - -КонецФункции - // Возвращает массив валют, курсы которых загружаются с сайта РБК // Функция ПолучитьМассивЗагружаемыхВалют() Экспорт @@ -267,48 +335,8 @@ КонецФункции -// Формирует представление суммы прописью в указанной валюте -// -// Параметры: -// Сумма - Число - сумма, которую надо представить прописью -// Валюта - СправочникСсылка.Валюты - валюта, в которой нужно представить сумму. -// ВыводитьСуммуБезКопеек - Булево - флаг представления суммы без копеек. -// -// Возвращаемое значение: -// Строка - сумма прописью -// -Функция СформироватьСуммуПрописью(Знач Сумма, Валюта, ВыводитьСуммуБезКопеек = Ложь) Экспорт - - Результат = ?(Сумма < 0, -Сумма, Сумма); - ЦелаяЧасть = Цел(Результат); - ФорматСтрока = "Л=ru_RU;ДП=Ложь"; - ПараметрыПредмета = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(Валюта, "ПараметрыПрописиНаРусском"); - - Если Результат = ЦелаяЧасть Тогда - - Если ВыводитьСуммуБезКопеек Тогда - - Результат = ЧислоПрописью(Результат, ФорматСтрока, ПараметрыПредмета.ПараметрыПрописиНаРусском); - Результат = Лев(Результат, Найти(Результат, "0") - 1); - - Иначе - - Результат = ЧислоПрописью(Результат, ФорматСтрока, ПараметрыПредмета.ПараметрыПрописиНаРусском); - - КонецЕсли; - - Иначе - - Результат = ЧислоПрописью(Результат, ФорматСтрока, ПараметрыПредмета.ПараметрыПрописиНаРусском); - - КонецЕсли; - - Возврат Результат; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ +// Обновление информационной базы // Добавляет в список Обработчики процедуры-обработчики обновления, // необходимые данной подсистеме. @@ -350,3 +378,32 @@ КонецЦикла; КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции + +// Выделяет из переданной строки первое значение + // до символа "TAB" + // + // Параметры: + // ИсходнаяСтрока - Строка - строка для разбора + // + // Возвращаемое значение: + // подстроку до символа "TAB" + // +Функция ВыделитьПодСтроку(ИсходнаяСтрока) + + Перем ПодСтрока; + + Поз = Найти(ИсходнаяСтрока,Символы.Таб); + Если Поз > 0 Тогда + ПодСтрока = Лев(ИсходнаяСтрока,Поз-1); + ИсходнаяСтрока = Сред(ИсходнаяСтрока,Поз + 1); + Иначе + ПодСтрока = ИсходнаяСтрока; + ИсходнаяСтрока = ""; + КонецЕсли; + + Возврат ПодСтрока; + +КонецФункции diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl index 6c99a75de..db8eedd75 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl @@ -1,3 +1,91 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Валюты" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Пересчитывает Сумму из Текущей валюты в Новую валюту по параметрам их курсов. +// Параметры курсов валют можно получить воспользовавшись функцией +// РаботаСКурсамиВалют.ПолучитьКурсВалюты(Валюта, ДатаКурса). +// +// Параметры: +// Сумма (Число) Сумма, которую следует пересчитать +// ПараметрыТекущегоКурса (Структура) Параметры курса валюты, из которой надо пересчитать +// |- Валюта (СправочникСсылка.Валюты) +// |- Курс (Число) +// |- Кратность (Число) +// ПараметрыНовогоКурса (Структура) Параметры курса валюты, в которую надо пересчитать +// |- Валюта (СправочникСсылка.Валюты) +// |- Курс (Число) +// |- Кратность (Число) +// +// Возвращаемое значение: +// (Число) Сумма, пересчитанная в другую валюту +// +Функция ПересчитатьПоКурсу(Сумма, ПараметрыТекущегоКурса, ПараметрыНовогоКурса) Экспорт + Если ПараметрыТекущегоКурса.Валюта = ПараметрыНовогоКурса.Валюта + ИЛИ ( + ПараметрыТекущегоКурса.Курс = ПараметрыНовогоКурса.Курс + И ПараметрыТекущегоКурса.Кратность = ПараметрыНовогоКурса.Кратность + ) Тогда + + Возврат Сумма; + + КонецЕсли; + + Если ПараметрыТекущегоКурса.Курс = 0 + ИЛИ ПараметрыТекущегоКурса.Кратность = 0 + ИЛИ ПараметрыНовогоКурса.Курс = 0 + ИЛИ ПараметрыНовогоКурса.Кратность = 0 Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При пересчете в валюту %1 сумма %2 установлена в нулевое значение, т.к. курс валюты не задан.'"), + ПараметрыНовогоКурса.Валюта, + Формат(Сумма, "ЧДЦ=2; ЧН=0") + ) + ); + + Возврат 0; + + КонецЕсли; + + Возврат Окр((Сумма * ПараметрыТекущегоКурса.Курс * ПараметрыНовогоКурса.Кратность) / (ПараметрыНовогоКурса.Курс * ПараметрыТекущегоКурса.Кратность), 2); +КонецФункции + +// Устарела: Следует использовать функцию ПересчитатьПоКурсу +// +// Пересчитывает сумму из валюты ВалютаНач по курсу ПоКурсуНач +// в валюту ВалютаКон по курсу ПоКурсуКон. +// +// Параметры: +// Сумма (Число) Сумма, которую следует пересчитать +// ВалютаНач (СправочникСсылка.Валюты) Валюта, из которой надо пересчитать +// ВалютаКон (СправочникСсылка.Валюты) Валюта, в которую надо пересчитать +// ПоКурсуНач (Число) Курс, из которого надо пересчитать +// ПоКурсуКон (Число) Курс, в который надо пересчитать +// ПоКратностьНач (Число) Кратность, из которой надо пересчитать (по умолчанию = 1) +// ПоКратностьКон (Число) Кратность, в которую надо пересчитать (по умолчанию = 1) +// +// Возвращаемое значение: +// (Число) Сумма, пересчитанная в другую валюту +// +Функция ПересчитатьИзВалютыВВалюту(Сумма, ВалютаНач, ВалютаКон, ПоКурсуНач, ПоКурсуКон, + ПоКратностьНач = 1, ПоКратностьКон = 1) Экспорт + + Возврат ПересчитатьПоКурсу( + Сумма, + Новый Структура("Валюта, Курс, Кратность", ВалютаНач, ПоКурсуНач, ПоКратностьНач), + Новый Структура("Валюта, Курс, Кратность", ВалютаКон, ПоКурсуКон, ПоКратностьКон) + ); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Процедура для загрузки курсов валют по определенному периоду. // // Параметры @@ -13,10 +101,8 @@ // СтатусОперации - завершилась ли загрузка успешно // Сообщение - пояснение о загрузке (текст сообщения об ошибке или поясняющее сообщение) // -Функция ЗагрузитьКурсыВалютПоПараметрам(знач Валюты, - знач НачалоПериодаЗагрузки, - знач ОкончаниеПериодаЗагрузки, - ПриЗагрузкеВозниклиОшибки = Ложь) Экспорт +Функция ЗагрузитьКурсыВалютПоПараметрам(знач Валюты, знач НачалоПериодаЗагрузки, знач ОкончаниеПериодаЗагрузки, + ПриЗагрузкеВозниклиОшибки = Ложь) Экспорт СостояниеЗагрузки = Новый Массив; @@ -26,7 +112,7 @@ Если НачалоПериодаЗагрузки = ОкончаниеПериодаЗагрузки Тогда Адрес = "tsv/"; - ТМП = "/"+Формат(Год(ОкончаниеПериодаЗагрузки),"ЧРГ=; ЧГ=0")+"/"+Формат(Месяц(ОкончаниеПериодаЗагрузки),"ЧЦ=2;ЧДЦ=0;ЧВН=")+"/"+Формат(День(ОкончаниеПериодаЗагрузки),"ЧЦ=2;ЧДЦ=0;ЧВН="); + ТМП = Формат(ОкончаниеПериодаЗагрузки, "ДФ=/yyyy/MM/dd"); // Не локализуется - путь к файлу на сервере Иначе Адрес = "tsv/cb/"; ТМП = ""; @@ -35,32 +121,31 @@ Для Каждого Валюта из Валюты Цикл ФайлНаВебСервере = "http://" + СерверИсточник + "/" + Адрес + Прав(Валюта.КодВалюты, 3) + ТМП + ".tsv"; -#Если НаКлиенте Тогда - Результат = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте(ФайлНаВебСервере); -#Иначе - Результат = ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(ФайлНаВебСервере); -#КонецЕсли + #Если Клиент Тогда + Результат = ПолучениеФайловИзИнтернетаКлиент.СкачатьФайлНаКлиенте(ФайлНаВебСервере); + #Иначе + Результат = ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(ФайлНаВебСервере); + #КонецЕсли Если Результат.Статус Тогда -#Если НаКлиенте Тогда - ДвоичныеДанные = Новый ДвоичныеДанные (Результат.Путь); - АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные); - ПоясняющееСообщение = РаботаСКурсамиВалют.ЗагрузитьКурсВалютыИзФайла(Валюта.Валюта, АдресВоВременномХранилище, НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки) + Символы.ПС; -#Иначе - ПоясняющееСообщение = РаботаСКурсамиВалют.ЗагрузитьКурсВалютыИзФайла(Валюта.Валюта, Результат.Путь, НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки) + Символы.ПС; -#КонецЕсли + #Если Клиент Тогда + ДвоичныеДанные = Новый ДвоичныеДанные(Результат.Путь); + АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные); + ПоясняющееСообщение = РаботаСКурсамиВалют.ЗагрузитьКурсВалютыИзФайла(Валюта.Валюта, АдресВоВременномХранилище, НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки) + Символы.ПС; + #Иначе + ПоясняющееСообщение = РаботаСКурсамиВалют.ЗагрузитьКурсВалютыИзФайла(Валюта.Валюта, Результат.Путь, НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки) + Символы.ПС; + #КонецЕсли УдалитьФайлы(Результат.Путь); СтатусОперации = Истина; Иначе - ПоясняющееСообщение= НСтр("ru = 'Невозможно получить файл данных с курсами валюты (%1 - %2): - |%3 - |Возможно, нет доступа к веб сайту с курсами валют, либо указана несуществующая валюта.'"); - ПоясняющееСообщение = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ПоясняющееСообщение, - Валюта.КодВалюты, - Валюта.Валюта, - Результат.СообщениеОбОшибке); + ПоясняющееСообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно получить файл данных с курсами валюты (%1 - %2): + |%3 + |Возможно, нет доступа к веб сайту с курсами валют, либо указана несуществующая валюта.'"), + Валюта.КодВалюты, + Валюта.Валюта, + Результат.СообщениеОбОшибке + ); СтатусОперации = Ложь; ПриЗагрузкеВозниклиОшибки = Истина; КонецЕсли; @@ -74,45 +159,3 @@ КонецФункции -// Пересчитывает сумму из валюты ВалютаНач по курсу ПоКурсуНач -// в валюту ВалютаКон по курсу ПоКурсуКон. -// -// Параметры: -// Сумма - сумма, которую следует пересчитать; -// ВалютаНач - ссылка на элемент справочника Валют; -// определяет валюты из которой надо пересчитвать; -// ВалютаКон - ссылка на элемент справочника Валют; -// определяет валюты в которую надо пересчитвать; -// ПоКурсуНач - курс из которого надо пересчитать; -// ПоКурсуКон - курс в который надо пересчитать; -// ПоКратностьНач - кратность из которого надо пересчитать (по умолчанию = 1); -// ПоКратностьКон - кратность в который надо пересчитать (по умолчанию = 1); -// -// Возвращаемое значение: -// Сумма, пересчитанная в другую валюту -// -Функция ПересчитатьИзВалютыВВалюту(Сумма, ВалютаНач, ВалютаКон, ПоКурсуНач, ПоКурсуКон, - ПоКратностьНач = 1, ПоКратностьКон = 1) Экспорт - - Если (ВалютаНач = ВалютаКон) Тогда - Возврат Сумма; - КонецЕсли; - - Если (ПоКурсуНач = ПоКурсуКон) - И (ПоКратностьНач = ПоКратностьКон) Тогда - Возврат Сумма; - КонецЕсли; - - Если ПоКурсуНач = 0 - Или ПоКурсуКон = 0 - Или ПоКратностьНач = 0 - Или ПоКратностьКон = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При пересчете в валюту %1 сумма %2 установлена в нулевое значение, т.к. курс валюты не задан.'"), - ВалютаКон, Сумма)); - Возврат 0; - КонецЕсли; - - Возврат Окр((Сумма * ПоКурсуНач * ПоКратностьКон) / (ПоКурсуКон * ПоКратностьНач), 2); - -КонецФункции diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютСобытия/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютСобытия/Module.bsl deleted file mode 100644 index 0cb5b9003..000000000 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютСобытия/Module.bsl +++ /dev/null @@ -1,39 +0,0 @@ - -// Обработчик регламентного задания по загрузке курса валют -// -Процедура ЗагрузитьАктуальныйКурс() Экспорт - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Начата регламентная загрузка курсов валют'")); - - ТекущаяДата = ТекущаяДатаСеанса(); - - СообщениеОбОшибке = ""; - - СостояниеЗагрузки = Неопределено; - ПриЗагрузкеВозниклиОшибки = Неопределено; - - ОбработкаЗагрузкиКурсовВалют = Обработки.ЗагрузкаКурсовВалют.Создать(); - ОбработкаЗагрузкиКурсовВалют.НачалоПериодаЗагрузки = ТекущаяДата; - ОбработкаЗагрузкиКурсовВалют.ОкончаниеПериодаЗагрузки = ТекущаяДата; - ОбработкаЗагрузкиКурсовВалют.ЗаполнитьСписокВалют(); - ОбработкаЗагрузкиКурсовВалют.ЗагрузитьКурсыВалют(ПриЗагрузкеВозниклиОшибки); - - Если ПриЗагрузкеВозниклиОшибки Тогда - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - НСтр("ru = 'Во время регламентного задания загрузки курсов валют возникли ошибки'")); - Иначе - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Завершена регламентная загрузка курсов валют.'")); - КонецЕсли; - -КонецПроцедуры - -Функция СобытиеЖурналаРегистрации() - - Возврат НСтр("ru = 'Валюты.Загрузка курсов валют'"); - -КонецФункции diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl index 7cd7638ce..44298d349 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl @@ -1,6 +1,10 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с почтовыми сообщениями". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// Модуль "РаботаСПочтовымиСообщениямиИнтерфейсы", содержит функции-интерфейсы, +// Модуль "РаботаСПочтовымиСообщениями", содержит функции-интерфейсы, // для работы с почтовыми сообщениями. Должен присутствовать в любой // конфигурации, которая содержит почтовую подсистему. // @@ -10,17 +14,13 @@ // //////////////////////////////////////////////////////////////////////////////// -// -// Блок переопределяемых функций-интерфейсов (для вызова из вне) -// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Получает ссылку на учетную запись по виду назначения учетной записи -// Параметры: -// ВидНазначенияУчетнойЗаписи - Перечисления.ВидыНазначенияУчетныхЗаписей - -// вид назначения учетной записи +// Получает ссылку на учетную запись по виду назначения учетной записи. +// // Возвращаемое значение: -// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - ссылка -// на описание учетной записи +// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - ссылка +// на описание учетной записи. // Функция ПолучитьСистемнуюУчетнуюЗапись() Экспорт @@ -28,8 +28,7 @@ КонецФункции -// Проверяет, что системная учетная запись доступна -// (может быть использована) +// Проверяет, что системная учетная запись доступна (может быть использована). // Функция ПроверитьСистемнаяУчетнаяЗаписьДоступна() Экспорт @@ -37,7 +36,7 @@ КонецФункции -// Получить доступные учетные записи электронной почты +// Возвращает доступные учетные записи электронной почты. // Параметры: // ДляОтправки - Булево - Если установлено Истина, то будут выбирать только записи, с которых можно отправлять почту // ДляПриема - Булево - Если установлено Истина, то будут выбирать только записи, по которым можно получать почту @@ -53,7 +52,7 @@ КонецФункции -// Функция реализующая механику отправки сообщения электронной почты +// Производит отправку сообщения электронной почты. // // Параметры: // УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - ссылка на diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl index 99349743b..5d681561e 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl @@ -1,5 +1,12 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с почтовыми сообщениями". +// +//////////////////////////////////////////////////////////////////////////////// -// Интерфейсная клиентская функция поддерживающая упрощенный вызов формы редактирования +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Интерфейсная клиентская функция, поддерживающая упрощенный вызов формы редактирования // нового письма. // Параметры // Отправитель* - СписокЗначений, СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - @@ -47,7 +54,10 @@ КонецПроцедуры -// Интерфейсная клиентская функция поддерживающая упрощенный вызов простой +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Интерфейсная клиентская функция, поддерживающая упрощенный вызов простой // формы редактирования нового письма. При отправке письма через простую // форму сообщения не сохраняются в информационной базе. // @@ -69,11 +79,11 @@ КонецПроцедуры -// Выполняет проверку учетной записи +// Выполняет проверку учетной записи. // // Параметры // УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись, -// которую нужно проверить +// которую нужно проверить. // Процедура ПроверитьУчетнуюЗапись(знач УчетнаяЗапись) Экспорт diff --git a/SSL/src/CommonModules/РаботаСФайламиВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиВызовСервера/Module.bsl index 5d0e9e861..3421cd06b 100644 --- a/SSL/src/CommonModules/РаботаСФайламиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиВызовСервера/Module.bsl @@ -2,6 +2,59 @@ // МОДУЛЬ СОДЕРЖИТ РЕАЛИЗАЦИЮ МЕХАНИКИ РАБОТЫ С ФАЙЛАМИ // + +//////////////////////////////////////////////////////////////////////////////// +// Интерфейсные функции +// + +// Создает карточку Файла в БД вместе с версией +// Параметры +// Владелец - владелец файла - будет установлен в реквизит ВладелецФайла у созданного файла +// ПутьКФайлуНаДиске - Строка - полный путь (включающий имя и расширение) к файлу на диске (файл должен находиться на сервере) +// +// Возвращаемое значение: +// СправочникСсылка.Файлы - созданный файл +Функция СоздатьФайлНаОсновеФайлаНаДиске(Владелец, ПутьКФайлуНаДиске) Экспорт + + Файл = Новый Файл(ПутьКФайлуНаДиске); + + ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлуНаДиске); + АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные); + + АдресВременногоХранилищаТекста = ""; + + ИзвлекатьТекстыФайловНаСервере = ПолучитьИзвлекатьТекстыФайловНаСервере(); + Если ИзвлекатьТекстыФайловНаСервере = Ложь Тогда + + // сами пытаемся извлечь текст - если сервер под Windows + Если ФайловыеФункции.ЭтоПлатформаWindows() Тогда + Текст = ФайловыеФункцииКлиентСервер.ИзвлечьТекст(ПутьКФайлуНаДиске); + АдресВременногоХранилищаТекста = Новый ХранилищеЗначения(Текст); + КонецЕсли; + + Иначе + АдресВременногоХранилищаТекста = ""; // фоновое задание извлечения текста извлечет текст + КонецЕсли; + + ФайлСсылка = СоздатьФайлСВерсией( + Владелец, + Файл.ИмяБезРасширения, + Файл.Расширение, + Файл.ПолучитьВремяИзменения(), + Файл.ПолучитьУниверсальноеВремяИзменения(), + Файл.Размер(), + АдресВременногоХранилищаФайла, + АдресВременногоХранилищаТекста, + Ложь); + + Возврат ФайлСсылка; + +КонецФункции + + +//////////////////////////////////////////////////////////////////////////////// +// Служебные функции + // Освобождает файл // Параметры: // ДанныеФайла - структура, содержащая сведения о Файле @@ -32,7 +85,7 @@ // // Возвращаемое значение: // Булево - успешно ли выполнена операция -Функция ЗанятьФайл(ДанныеФайла, СтрокаОшибки = "", ДатаЗаема, УникальныйИдентификатор = Неопределено) Экспорт +Функция ЗанятьФайл(ДанныеФайла, СтрокаОшибки = "", УникальныйИдентификатор = Неопределено) Экспорт Если Не РаботаСФайламиПереопределяемый.ВозможноЗанятьФайл(ДанныеФайла, СтрокаОшибки) Тогда Возврат Ложь; @@ -41,8 +94,8 @@ ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); - ФайлОбъект.Редактирует = ОбщегоНазначения.ТекущийПользователь(); - ФайлОбъект.ДатаЗаема = ДатаЗаема; + ФайлОбъект.Редактирует = Пользователи.ТекущийПользователь(); + ФайлОбъект.ДатаЗаема = ТекущаяДатаСеанса(); ФайлОбъект.Записать(); РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); @@ -113,12 +166,12 @@ Файл.ПолноеНаименование = ИмяБезРасширения; Если Пользователь = Неопределено Тогда - Файл.Автор = ОбщегоНазначения.ТекущийПользователь(); + Файл.Автор = Пользователи.ТекущийПользователь(); Иначе Файл.Автор = Пользователь; КонецЕсли; - Файл.ДатаСоздания = ТекущаяДата(); + Файл.ДатаСоздания = ТекущаяДатаСеанса(); Файл.Описание = Комментарий; Файл.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Неопределено); Файл.ХранитьВерсии = ХранитьВерсии; @@ -253,6 +306,13 @@ УстановитьПривилегированныйРежим(Истина); + Если ВремяИзменения = Дата('00010101') Тогда + ВремяИзменения = ТекущаяДатаСеанса(); + КонецЕсли; + Если ВремяИзмененияУниверсальное = Дата('00010101') Тогда + ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДатаСеанса()); + КонецЕсли; + ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункции.ПолучитьЗапретЗагрузкиФайловПоРасширению(); СписокЗапрещенныхРасширений = ФайловыеФункции.ПолучитьСписокЗапрещенныхРасширений(); РасширениеФайла = Расширение; @@ -279,13 +339,13 @@ Версия.Комментарий = НоваяВерсияКомментарий; Если НоваяВерсияАвтор = Неопределено Тогда - Версия.Автор = ОбщегоНазначения.ТекущийПользователь(); + Версия.Автор = Пользователи.ТекущийПользователь(); Иначе Версия.Автор = НоваяВерсияАвтор; КонецЕсли; Если НоваяВерсияДатаСоздания = Неопределено Тогда - Версия.ДатаСоздания = ТекущаяДата(); + Версия.ДатаСоздания = ТекущаяДатаСеанса(); Иначе Версия.ДатаСоздания = НоваяВерсияДатаСоздания; КонецЕсли; @@ -523,6 +583,13 @@ УстановитьПривилегированныйРежим(Истина); + Если ВремяИзменения = Дата('00010101') Тогда + ВремяИзменения = ТекущаяДатаСеанса(); + КонецЕсли; + Если ВремяИзмененияУниверсальное = Дата('00010101') Тогда + ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДатаСеанса()); + КонецЕсли; + ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункции.ПолучитьЗапретЗагрузкиФайловПоРасширению(); СписокЗапрещенныхРасширений = ФайловыеФункции.ПолучитьСписокЗапрещенныхРасширений(); @@ -549,6 +616,8 @@ ВерсияСсылкаДляСравненияРазмера = Файл.ТекущаяВерсия; КонецЕсли; + КодировкаПредВерсии = ПолучитьКодировкуВерсииФайла(ВерсияСсылкаДляСравненияРазмера); + СтруктураРеквизитов = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ВерсияСсылкаДляСравненияРазмера, "Размер, ТипХраненияФайла, Том, ПутьКФайлу"); ТекущаяВерсияРазмер = СтруктураРеквизитов.Размер; @@ -624,10 +693,10 @@ КонецЕсли; Версия.Владелец = Файл.Ссылка; - Версия.Автор = ОбщегоНазначения.ТекущийПользователь(); + Версия.Автор = Пользователи.ТекущийПользователь(); Версия.ДатаМодификацииУниверсальная = ВремяИзмененияУниверсальное; Версия.ДатаМодификацииФайла = ВремяИзменения; - Версия.ДатаСоздания = ТекущаяДата(); + Версия.ДатаСоздания = ТекущаяДатаСеанса(); Версия.Размер = Размер; Версия.ПолноеНаименование = ИмяБезРасширения; Версия.Комментарий = Комментарий; @@ -707,6 +776,7 @@ Если ИзвлекатьТекстыФайловНаСервере = Ложь Тогда Текст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); Версия.ТекстХранилище = Новый ХранилищеЗначения(Текст); + Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; Иначе Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; КонецЕсли; @@ -739,6 +809,8 @@ РазблокироватьДанныеДляРедактирования(Версия.Ссылка, УникальныйИдентификатор); КонецЕсли; + ЗаписатьКодировкуВерсииФайла(Версия.Ссылка, КодировкаПредВерсии); + НавигационнаяСсылкаФайла = ПолучитьНавигационнуюСсылку(Файл); ИсторияРаботыПользователя.Добавить(НавигационнаяСсылкаФайла); @@ -783,7 +855,8 @@ ТекстНеИзвлеченНаКлиенте, ВРабочемКаталогеВладельца, НеМенятьЗаписьВРабочемКаталоге, - УникальныйИдентификатор = Неопределено) Экспорт + УникальныйИдентификатор = Неопределено, + Кодировка = Неопределено) Экспорт ДанныеФайлаТекущие = ПолучитьДанныеФайла(ДанныеФайла.Ссылка); Если Не ДанныеФайлаТекущие.РедактируетТекущийПользователь Тогда @@ -831,6 +904,12 @@ ОсвободитьФайл(ДанныеФайла, УникальныйИдентификатор); + Если Кодировка <> Неопределено Тогда + Если Не ЗначениеЗаполнено(ПолучитьКодировкуВерсииФайла(ДанныеФайла.ТекущаяВерсия)) Тогда + ЗаписатьКодировкуВерсииФайла(ДанныеФайла.ТекущаяВерсия, Кодировка); + КонецЕсли; + КонецЕсли; + Если Не ВерсияНеСоздана Тогда Если НЕ ЭтоВебКлиент И Не НеМенятьЗаписьВРабочемКаталоге Тогда ИмяКаталога = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов"); @@ -999,7 +1078,8 @@ ТекстНеИзвлеченНаКлиенте, ВРабочемКаталогеВладельца, НеМенятьЗаписьВРабочемКаталоге, - УникальныйИдентификатор = Неопределено) Экспорт + УникальныйИдентификатор = Неопределено, + Кодировка = Неопределено) Экспорт ДанныеФайлаТекущие = ПолучитьДанныеФайла(Файл); Если Не ДанныеФайлаТекущие.РедактируетТекущийПользователь Тогда @@ -1007,6 +1087,7 @@ КонецЕсли; ВерсияНеСоздана = Ложь; + ТекущаяВерсия = ДанныеФайлаТекущие.ТекущаяВерсия; НачатьТранзакцию(); Попытка @@ -1035,6 +1116,7 @@ ВерсияНеСоздана = Истина; Иначе НоваяВерсия = КодВозвратаОбновитьВерсию; + ТекущаяВерсия = НоваяВерсия; КонецЕсли; Если Не ВерсияНеСоздана Тогда @@ -1051,6 +1133,12 @@ КонецЕсли; КонецЕсли; + Если Кодировка <> Неопределено Тогда + Если Не ЗначениеЗаполнено(ПолучитьКодировкуВерсииФайла(ТекущаяВерсия)) Тогда + ЗаписатьКодировкуВерсииФайла(ТекущаяВерсия, Кодировка); + КонецЕсли; + КонецЕсли; + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); @@ -1087,7 +1175,7 @@ Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда - РедактируетТекущийПользователь = (Выборка.Редактирует = ОбщегоНазначения.ТекущийПользователь()); + РедактируетТекущийПользователь = (Выборка.Редактирует = Пользователи.ТекущийПользователь()); Возврат РедактируетТекущийПользователь; КонецЕсли; @@ -1233,6 +1321,9 @@ НавигационнаяСсылкаТекущейВерсии = ПолучитьНавигационнуюСсылку(КлючЗаписи, "ХранимыйФайл"); ДанныеФайла.Вставить("НавигационнаяСсылкаТекущейВерсии", НавигационнаяСсылкаТекущейВерсии); + КодировкаТекущейВерсии = ПолучитьКодировкуВерсииФайла(ДанныеФайла.ТекущаяВерсия); + ДанныеФайла.Вставить("КодировкаТекущейВерсии", КодировкаТекущейВерсии); + ДанныеФайла.Вставить("Размер", Выборка.Размер); ДанныеФайла.Вставить("НомерВерсии", Выборка.НомерВерсии); ДанныеФайла.Вставить("ДатаМодификацииУниверсальная", Выборка.ДатаМодификацииУниверсальная); @@ -1249,7 +1340,7 @@ ДанныеФайла.Вставить("МассивСертификатовШифрования", МассивСертификатовШифрования); КонецЕсли; - НаЧтение = ДанныеФайла.Редактирует <> ОбщегоНазначения.ТекущийПользователь(); + НаЧтение = ДанныеФайла.Редактирует <> Пользователи.ТекущийПользователь(); ДанныеФайла.Вставить("НаЧтение", НаЧтение); ВРабочемКаталогеНаЧтение = Истина; @@ -1269,7 +1360,7 @@ ДанныеФайла.Вставить("ВРабочемКаталогеНаЧтение", ВРабочемКаталогеНаЧтение); ДанныеФайла.Вставить("РабочийКаталогВладельца", ""); - РедактируетТекущийПользователь = (ДанныеФайла.Редактирует = ОбщегоНазначения.ТекущийПользователь()); + РедактируетТекущийПользователь = (ДанныеФайла.Редактирует = Пользователи.ТекущийПользователь()); ДанныеФайла.Вставить("РедактируетТекущийПользователь", РедактируетТекущийПользователь); СтатусИзвлеченияТекстаСтрока = "НеИзвлечен"; @@ -1327,7 +1418,8 @@ ЭтоВебКлиент, Пользователь = Неопределено, Комментарий = "", - ЗаписатьВИсторию = Ложь) Экспорт + ЗаписатьВИсторию = Ложь, + Кодировка = Неопределено) Экспорт НачатьТранзакцию(); Попытка @@ -1359,6 +1451,10 @@ // Подставим ссылку на версию в карточку Файла ОбновитьВерсиюВФайле(Док, Версия, АдресВременногоХранилищаТекста); + Если Кодировка <> Неопределено Тогда + ЗаписатьКодировкуВерсииФайла(Версия, Кодировка); + КонецЕсли; + ЗафиксироватьТранзакцию(); Если ЗаписатьВИсторию Тогда @@ -1387,7 +1483,7 @@ // // Возвращаемое значение: // Булево - успешно ли выполнена операция -Функция ПолучитьДанныеФайлаИЗанятьФайл(ФайлСсылка, ДанныеФайла, СтрокаОшибки, ДатаЗаема, УникальныйИдентификатор = Неопределено) Экспорт +Функция ПолучитьДанныеФайлаИЗанятьФайл(ФайлСсылка, ДанныеФайла, СтрокаОшибки, УникальныйИдентификатор = Неопределено) Экспорт ДанныеФайла = ПолучитьДанныеФайла(ФайлСсылка); @@ -1399,7 +1495,7 @@ Если ДанныеФайла.Редактирует.Пустая() Тогда СтрокаОшибки = ""; - Если Не ЗанятьФайл(ДанныеФайла, СтрокаОшибки, ДатаЗаема, УникальныйИдентификатор) Тогда + Если Не ЗанятьФайл(ДанныеФайла, СтрокаОшибки, УникальныйИдентификатор) Тогда Возврат Ложь; КонецЕсли; КонецЕсли; @@ -1433,7 +1529,7 @@ // Возвращаемое значение: // Булево - успешно ли выполнена операция Функция ПолучитьДанныеФайлаДляОткрытияИЗанятьФайл(ФайлСсылка, ДанныеФайла, СтрокаОшибки, - ДатаЗаема, УникальныйИдентификатор = Неопределено, РабочийКаталогВладельца = Неопределено) Экспорт + УникальныйИдентификатор = Неопределено, РабочийКаталогВладельца = Неопределено) Экспорт ДанныеФайла = ПолучитьДанныеФайлаДляОткрытия(ФайлСсылка, Неопределено, УникальныйИдентификатор, РабочийКаталогВладельца); @@ -1445,7 +1541,7 @@ Если ДанныеФайла.Редактирует.Пустая() Тогда СтрокаОшибки = ""; - Если Не ЗанятьФайл(ДанныеФайла, СтрокаОшибки, ДатаЗаема, УникальныйИдентификатор) Тогда + Если Не ЗанятьФайл(ДанныеФайла, СтрокаОшибки, УникальныйИдентификатор) Тогда Возврат Ложь; КонецЕсли; КонецЕсли; @@ -1750,7 +1846,7 @@ СтруктураОтбора = Новый Структура; СтруктураОтбора.Вставить("Папка", СсылкаПапки); - СтруктураОтбора.Вставить("Пользователь", ОбщегоНазначения.ТекущийПользователь()); + СтруктураОтбора.Вставить("Пользователь", Пользователи.ТекущийПользователь()); // Получить структуру с данными ресурсов записи СтруктураРесурсов = РегистрыСведений.РабочиеКаталогиФайлов.Получить(СтруктураОтбора); @@ -1760,7 +1856,7 @@ Если НЕ ПустаяСтрока(РабочийКаталог) Тогда // Добавляем слэш в конце, если его нет - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(РабочийКаталог, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + РабочийКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РабочийКаталог, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); КонецЕсли; Возврат РабочийКаталог; @@ -1777,11 +1873,11 @@ НаборЗаписей = РегистрыСведений.РабочиеКаталогиФайлов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Папка.Установить(СсылкаПапки); - НаборЗаписей.Отбор.Пользователь.Установить(ОбщегоНазначения.ТекущийПользователь()); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.ТекущийПользователь()); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Папка = СсылкаПапки; - НоваяЗапись.Пользователь = ОбщегоНазначения.ТекущийПользователь(); + НоваяЗапись.Пользователь = Пользователи.ТекущийПользователь(); НоваяЗапись.Путь = РабочийКаталогВладельца; НаборЗаписей.Записать(); @@ -1801,7 +1897,7 @@ УстановитьПривилегированныйРежим(Истина); СписокДляЗамены = Новый Массив; - ТекущийПользователь = ОбщегоНазначения.ТекущийПользователь(); + ТекущийПользователь = Пользователи.ТекущийПользователь(); // для каждой нашей записи находим запись в регистре сведений - оттуда берем поле Версия и Редактирует ЗапросВРегистр = Новый Запрос; @@ -1861,14 +1957,14 @@ НаборЗаписей = РегистрыСведений.ФайлыВРабочемКаталоге.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Версия.Установить(Версия); - НаборЗаписей.Отбор.Пользователь.Установить(ОбщегоНазначения.ТекущийПользователь()); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.ТекущийПользователь()); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Версия = Версия; НоваяЗапись.Путь = Путь; НоваяЗапись.Размер = Размер; НоваяЗапись.ДатаПомещенияВРабочийКаталог = ДатаПомещенияВРабочийКаталог; - НоваяЗапись.Пользователь = ОбщегоНазначения.ТекущийПользователь(); + НоваяЗапись.Пользователь = Пользователи.ТекущийПользователь(); НоваяЗапись.НаЧтение = НаЧтение; НоваяЗапись.ВРабочемКаталогеВладельца = ВРабочемКаталогеВладельца; @@ -1885,7 +1981,7 @@ НаборЗаписей = РегистрыСведений.РабочиеКаталогиФайлов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Папка.Установить(СсылкаПапки); - НаборЗаписей.Отбор.Пользователь.Установить(ОбщегоНазначения.ТекущийПользователь()); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.ТекущийПользователь()); // не добавляем записи в набор - чтобы все стереть НаборЗаписей.Записать(); @@ -1931,7 +2027,7 @@ // Версия и Размер и ДатаПомещенияВРабочийКаталог ЗапросВРегистр = Новый Запрос; ЗапросВРегистр.УстановитьПараметр("Имяфайла", Имяфайла); - ЗапросВРегистр.УстановитьПараметр("Пользователь", ОбщегоНазначения.ТекущийПользователь()); + ЗапросВРегистр.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); ЗапросВРегистр.Текст = "ВЫБРАТЬ | ФайлыВРабочемКаталоге.Версия КАК Версия, | ФайлыВРабочемКаталоге.ДатаПомещенияВРабочийКаталог КАК ДатаПомещенияВРабочийКаталог, @@ -1966,7 +2062,7 @@ // Возвращаемое значение: // УникальныйИдентификатор - Уникальный идентификатор текущего пользователя Функция ПараметрыСеансаИдентификаторТекущегоПользователя() Экспорт - Возврат ОбщегоНазначения.ТекущийПользователь().УникальныйИдентификатор(); + Возврат Пользователи.ТекущийПользователь().УникальныйИдентификатор(); КонецФункции // Находит в регистре сведений ФайлыВРабочемКаталоге информацию о ВерсииФайла (путь к файлу версии в рабочем каталоге, и статус - на чтение или на редактирование) @@ -1984,7 +2080,7 @@ // Подготовить структуру отбора по измерениям СтруктураОтбора = Новый Структура; СтруктураОтбора.Вставить("Версия", Версия.Ссылка); - СтруктураОтбора.Вставить("Пользователь", ОбщегоНазначения.ТекущийПользователь()); + СтруктураОтбора.Вставить("Пользователь", Пользователи.ТекущийПользователь()); // Получить структуру с данными ресурсов записи СтруктураРесурсов = РегистрыСведений.ФайлыВРабочемКаталоге.Получить(СтруктураОтбора); @@ -2015,7 +2111,7 @@ // Подготовить структуру отбора по измерениям СтруктураОтбора = Новый Структура; СтруктураОтбора.Вставить("Версия", Ссылка); - СтруктураОтбора.Вставить("Пользователь", ОбщегоНазначения.ТекущийПользователь()); + СтруктураОтбора.Вставить("Пользователь", Пользователи.ТекущийПользователь()); // Получить структуру с данными ресурсов записи СтруктураРесурсов = РегистрыСведений.ФайлыВРабочемКаталоге.Получить(СтруктураОтбора); @@ -2040,14 +2136,14 @@ НаборЗаписей = РегистрыСведений.ФайлыВРабочемКаталоге.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Версия.Установить(ТекущаяВерсия.Ссылка); - НаборЗаписей.Отбор.Пользователь.Установить(ОбщегоНазначения.ТекущийПользователь()); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.ТекущийПользователь()); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Версия = ТекущаяВерсия.Ссылка; НоваяЗапись.Путь = ИмяФайлаСПутем; НоваяЗапись.Размер = ТекущаяВерсия.Размер; - НоваяЗапись.ДатаПомещенияВРабочийКаталог = ТекущаяДата(); - НоваяЗапись.Пользователь = ОбщегоНазначения.ТекущийПользователь(); + НоваяЗапись.ДатаПомещенияВРабочийКаталог = ТекущаяДатаСеанса(); + НоваяЗапись.Пользователь = Пользователи.ТекущийПользователь(); НоваяЗапись.НаЧтение = НаЧтение; НоваяЗапись.ВРабочемКаталогеВладельца = ВРабочемКаталогеВладельца; @@ -2065,7 +2161,7 @@ НаборЗаписей = РегистрыСведений.ФайлыВРабочемКаталоге.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Версия.Установить(Версия); - НаборЗаписей.Отбор.Пользователь.Установить(ОбщегоНазначения.ТекущийПользователь()); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.ТекущийПользователь()); НаборЗаписей.Записать(); КонецПроцедуры @@ -2078,7 +2174,7 @@ УстановитьПривилегированныйРежим(Истина); СписокУдалить = Новый Массив; - ТекущийПользователь = ОбщегоНазначения.ТекущийПользователь(); + ТекущийПользователь = Пользователи.ТекущийПользователь(); // для каждой нашей записи находим запись в регистре сведений - оттуда берем поле Версия и Редактирует ЗапросВРегистр = Новый Запрос; @@ -2153,7 +2249,7 @@ НаборЗаписей = РегистрыСведений.ФайлыВРабочемКаталоге.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Версия.Установить(Версия.Ссылка); - НаборЗаписей.Отбор.Пользователь.Установить(ОбщегоНазначения.ТекущийПользователь()); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.ТекущийПользователь()); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Версия = Версия.Ссылка; @@ -2165,8 +2261,8 @@ НоваяЗапись.Размер = Версия.Размер; КонецЕсли; - НоваяЗапись.ДатаПомещенияВРабочийКаталог = ТекущаяДата(); - НоваяЗапись.Пользователь = ОбщегоНазначения.ТекущийПользователь(); + НоваяЗапись.ДатаПомещенияВРабочийКаталог = ТекущаяДатаСеанса(); + НоваяЗапись.Пользователь = Пользователи.ТекущийПользователь(); НоваяЗапись.НаЧтение = НаЧтение; НоваяЗапись.ВРабочемКаталогеВладельца = ВРабочемКаталогеВладельца; @@ -2181,7 +2277,7 @@ УстановитьПривилегированныйРежим(Истина); СписокФайлов = Новый Массив; - ТекущийПользователь = ОбщегоНазначения.ТекущийПользователь(); + ТекущийПользователь = Пользователи.ТекущийПользователь(); // Для каждой нашей записи находим запись в регистре сведений - оттуда берем поле Версия и Редактирует ЗапросВРегистр = Новый Запрос; @@ -2236,10 +2332,10 @@ Папка = Справочники.ПапкиФайлов.СоздатьЭлемент(); Папка.Наименование = Имя; Папка.Родитель = Родитель; - Папка.ДатаСоздания = ТекущаяДата(); + Папка.ДатаСоздания = ТекущаяДатаСеанса(); Если Пользователь = Неопределено Тогда - Папка.Ответственный = ОбщегоНазначения.ТекущийПользователь(); + Папка.Ответственный = Пользователи.ТекущийПользователь(); Иначе Папка.Ответственный = Пользователь; КонецЕсли; @@ -2370,7 +2466,7 @@ // Число - количество занятых файлов Функция КоличествоФайловЗанятыхТекущимПользователем(ВладелецФайла) Экспорт - КоличествоЗанятыхФайлов = ПолучитьКоличествоЗанятыхФайлов(ВладелецФайла, ОбщегоНазначения.ТекущийПользователь()); + КоличествоЗанятыхФайлов = ПолучитьКоличествоЗанятыхФайлов(ВладелецФайла, Пользователи.ТекущийПользователь()); Возврат КоличествоЗанятыхФайлов; КонецФункции @@ -2565,12 +2661,15 @@ // Версия - СправочникСсылка.ВерсииФайлов - версия файла // СтароеНаименование - Строка - старое наименование // НовоеНаименование - Строка - новое наименование -Процедура ПереименоватьФайлВерсииНаДиске(Версия, СтароеНаименование, НовоеНаименование) Экспорт +Процедура ПереименоватьФайлВерсииНаДиске(Версия, СтароеНаименование, НовоеНаименование, + УникальныйИдентификатор = Неопределено) Экспорт + + ффф = ""; Если НЕ Версия.Том.Пустая() Тогда Попытка ВерсияОбъект = Версия.ПолучитьОбъект(); - ВерсияОбъект.Заблокировать(); + ЗаблокироватьДанныеДляРедактирования(Версия, , УникальныйИдентификатор); СтарыйПолныйПуть = ФайловыеФункции.ПолныйПутьТома(Версия.Том) + Версия.ПутьКФайлу; @@ -2581,15 +2680,19 @@ НовоеИмяБезРасширения = СтрЗаменить(ИмяБезРасширения, СтароеНаименование, НовоеНаименование); НовыйПолныйПуть = ПолныйПуть + НовоеИмяБезРасширения + Расширение; - НовыйЧастичныйПуть = Прав(НовыйПолныйПуть, СтрДлина(НовыйПолныйПуть) - ФайловыеФункции.ПолныйПутьТома(Версия.Том)); + ПолныйПутьКТому = ФайловыеФункции.ПолныйПутьТома(Версия.Том); + НовыйЧастичныйПуть = Прав(НовыйПолныйПуть, СтрДлина(НовыйПолныйПуть) - СтрДлина(ПолныйПутьКТому)); ПереместитьФайл(СтарыйПолныйПуть, НовыйПолныйПуть); ВерсияОбъект.ПутьКФайлу = НовыйЧастичныйПуть; ВерсияОбъект.Записать(); - ВерсияОбъект.Разблокировать(); + РазблокироватьДанныеДляРедактирования(Версия, УникальныйИдентификатор); Исключение + ффф = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; + КонецЕсли; + КонецПроцедуры // Возвращает количество занятых файлов @@ -2716,8 +2819,8 @@ КонецЕсли; Версия = СоздатьВерсию( - ТекущаяДата(), - УниверсальноеВремя(ТекущаяДата()), + ТекущаяДатаСеанса(), + УниверсальноеВремя(ТекущаяДатаСеанса()), Приемник, Приемник.Наименование, Источник.ТекущаяВерсия.Размер, @@ -2779,8 +2882,8 @@ КонецЕсли; Версия = СоздатьВерсию( - ТекущаяДата(), - УниверсальноеВремя(ТекущаяДата()), + ТекущаяДатаСеанса(), + УниверсальноеВремя(ТекущаяДатаСеанса()), Приемник, Приемник.Наименование, Источник.ТекущаяВерсия.Размер, @@ -2896,7 +2999,7 @@ Отбор.Использование = Истина; Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Редактирует"); - Отбор.ПравоеЗначение = ОбщегоНазначения.ТекущийПользователь(); + Отбор.ПравоеЗначение = Пользователи.ТекущийПользователь(); Если ЕстьДублирующийсяЭлемент(Список.УсловноеОформление.Элементы, Элемент) Тогда Список.УсловноеОформление.Элементы.Удалить(Элемент); КонецЕсли; @@ -3334,10 +3437,8 @@ | Файлы.ВладелецФайла = &ВладелецФайла"; Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); - Таблица = Запрос.Выполнить().Выгрузить(); - МассивВозврата = Таблица.ВыгрузитьКолонку("Ссылка"); - Возврат МассивВозврата; + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); КонецФункции @@ -3833,13 +3934,14 @@ Процедура ПолучитьПерсональныеНастройкиФайловыхФункций(Настройки) Экспорт УстановитьПривилегированныйРежим(Истина); - Настройки.Вставить("ДействиеПоДвойномуЩелчкуМыши", ДействиеПоДвойномуЩелчкуМыши()); Настройки.Вставить("СпрашиватьРежимРедактированияПриОткрытииФайла", СпрашиватьРежимРедактированияПриОткрытииФайла()); Настройки.Вставить("СпособСравненияВерсийФайлов", СпособСравненияВерсийФайлов()); - Настройки.Вставить("ЭтоПолноправныйПользовательИБ", Пользователи.ЭтоПолноправныйПользовательИБ()); + УстановитьПривилегированныйРежим(Ложь); - // ПоказыватьЗанятыеФайлыПриЗавершенииРаботы + Настройки.Вставить("ЭтоПолноправныйПользователь", Пользователи.ЭтоПолноправныйПользователь()); + + УстановитьПривилегированныйРежим(Истина); ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы"); Если ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = Неопределено Тогда ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = Истина; @@ -3876,10 +3978,21 @@ Процедура УдалитьФайлыПриПолученииДанныхФайла(Ссылка, ПутьСПодкаталогом) Экспорт Если РаботаСФайламиСобытия.ЭтоЭлементРаботаСФайлами(Ссылка) Тогда - МассивФайловВКаталоге = НайтиФайлы(ПутьСПодкаталогом, "*.*"); - Если МассивФайловВКаталоге.Количество() = 0 Тогда - УдалитьФайлы(ПутьСПодкаталогом); - КонецЕсли; + + Попытка + МассивФайловВКаталоге = НайтиФайлы(ПутьСПодкаталогом, "*.*"); + Если МассивФайловВКаталоге.Количество() = 0 Тогда + УдалитьФайлы(ПутьСПодкаталогом); + КонецЕсли; + Исключение + + ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Удаление файлов в томе при обмене'"), + УровеньЖурналаРегистрации.Ошибка,,, + ОписаниеОшибки); + + КонецПопытки; + КонецЕсли; КонецПроцедуры @@ -3974,10 +4087,10 @@ // Получает текст запроса для извлечения текста // Параметры // ТекстЗапроса - Строка - текст запроса для извлечения текста -Процедура ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса) Экспорт +Процедура ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса, ПолучитьВсеФайлы = Ложь) Экспорт ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 100 + "ВЫБРАТЬ {КоличествоФайловВПорции} | ВерсииФайлов.Ссылка КАК Ссылка, | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, | ВерсииФайлов.ТипХраненияФайла КАК ТипХраненияФайла, @@ -3989,7 +4102,13 @@ | (ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) | ИЛИ ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) | И (НЕ ВерсииФайлов.Зашифрован)"; - + + Если Не ПолучитьВсеФайлы Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "{КоличествоФайловВПорции}", "ПЕРВЫЕ 100"); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "{КоличествоФайловВПорции}", ""); + КонецЕсли; + КонецПроцедуры // Получает полный путь к файлу на диске @@ -4413,8 +4532,8 @@ КонецЕсли; Версия = СоздатьВерсию( - ТекущаяДата(), - УниверсальноеВремя(ТекущаяДата()), + ТекущаяДатаСеанса(), + УниверсальноеВремя(ТекущаяДатаСеанса()), НовыйФайл, НовыйФайл.ПолноеНаименование, ИсходныйФайл.ТекущаяВерсия.Размер, @@ -4635,7 +4754,7 @@ УстановитьПривилегированныйРежим(Истина); - ДатаЗаема = ТекущаяДата(); + ДатаЗаема = ТекущаяДатаСеанса(); Запрос = Новый Запрос; Запрос.Текст = @@ -4723,3 +4842,182 @@ КонецПопытки; КонецПроцедуры + +Функция ПолучитьИзвлекатьТекстыФайловНаСервере() + + УстановитьПривилегированныйРежим(Истина); + ИзвлекатьТекстыФайловНаСервере = Константы.ИзвлекатьТекстыФайловНаСервере.Получить(); + Возврат ИзвлекатьТекстыФайловНаСервере; + +КонецФункции + +// Получает количество версий с неизвлеченным текстом +Функция ПолучитьКоличествоВерсийСНеизвлеченнымТекстом() Экспорт + + Запрос = Новый Запрос; + + Запрос.Текст = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК ЧислоВерсий + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | (ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) + | ИЛИ ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) + | И (НЕ ВерсииФайлов.Зашифрован)"; + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Результат = Выборка.ЧислоВерсий; + + Возврат Результат; + +КонецФункции + +// Вернет размер файлов на томе - в байтах +Функция ПодсчитатьРазмерФайловНаТоме(СсылкаТома) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ЕСТЬNULL(СУММА(Версии.Размер), 0) КАК РазмерФайлов + |ИЗ + | Справочник.ВерсииФайлов КАК Версии + |ГДЕ + | Версии.Том = &Том"; + + Запрос.Параметры.Вставить("Том", СсылкаТома); + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + Возврат Число(Выборка.РазмерФайлов); + КонецЕсли; + + Возврат 0; + +КонецФункции + +// Читает кодировку версии файла +// +// Параметры +// ВерсияСсылка - ссылка на версию файла +// +// Возвращаемое значение: +// Строка кодировки +Функция ПолучитьКодировкуВерсииФайла(ВерсияСсылка) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписи = РегистрыСведений.КодировкиВерсийФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ВерсияФайла = ВерсияСсылка; + МенеджерЗаписи.Прочитать(); + + Возврат МенеджерЗаписи.Кодировка; + +КонецФункции + +// Записывает кодировку версии файла +// +// Параметры +// ВерсияСсылка - ссылка на версию файла +// Кодировка - Строка кодировки +// +Процедура ЗаписатьКодировкуВерсииФайла(ВерсияСсылка, Кодировка) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписи = РегистрыСведений.КодировкиВерсийФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ВерсияФайла = ВерсияСсылка; + МенеджерЗаписи.Кодировка = Кодировка; + МенеджерЗаписи.Записать(Истина); + +КонецПроцедуры + +// Записывает кодировку версии файла +// +// Параметры +// ВерсияСсылка - ссылка на версию файла +// Кодировка - Строка кодировки +// ИзвлеченныйТекст - текст, извлеченный из файла +// +Процедура ЗаписатьКодировкуВерсииФайлаИИзвлеченныйТекст(ВерсияСсылка, Кодировка, ИзвлеченныйТекст) Экспорт + + ЗаписатьКодировкуВерсииФайла(ВерсияСсылка, Кодировка); + ЗаписатьРезультатИзвлеченияТекста(ВерсияСсылка, Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен, + ИзвлеченныйТекст); + +КонецПроцедуры + +// Записывает на сервер результат извлечения текста - извлеченный текст и СтатусИзвлеченияТекста +Процедура ЗаписатьРезультатИзвлеченияТекста(ВерсияСсылка, РезультатИзвлечения, АдресВременногоХранилищаТекста) Экспорт + + ФайлЗаблокирован = Ложь; + Файл = ВерсияСсылка.Владелец; + + Если Файл.ТекущаяВерсия = ВерсияСсылка Тогда + + Попытка + ЗаблокироватьДанныеДляРедактирования(Файл); + ФайлЗаблокирован = Истина; + Исключение + Возврат; // ничего не сообщаем + КонецПопытки; + + КонецЕсли; + + Текст = ""; + + ВерсияОбъект = ВерсияСсылка.ПолучитьОбъект(); + + Если Не ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда + + Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда + Текст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); + Иначе + Текст = АдресВременногоХранилищаТекста; + КонецЕсли; + + ВерсияОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); + ВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + + КонецЕсли; + + Если РезультатИзвлечения = "НеИзвлечен" Тогда + ВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + ИначеЕсли РезультатИзвлечения = "Извлечен" Тогда + ВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + ИначеЕсли РезультатИзвлечения = "ИзвлечьНеУдалось" Тогда + ВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; + КонецЕсли; + + Попытка + НачатьТранзакцию(); + + ВерсияОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); // чтобы прошла запись ранее подписанного объекта + ВерсияОбъект.Записать(); + + Если Файл.ТекущаяВерсия = ВерсияСсылка Тогда + ФайлОбъект = Файл.ПолучитьОбъект(); + ФайлОбъект.ТекстХранилище = ВерсияОбъект.ТекстХранилище; + ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); // чтобы прошла запись ранее подписанного объекта + ФайлОбъект.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + Если ФайлЗаблокирован Тогда + РазблокироватьДанныеДляРедактирования(Файл); + КонецЕсли; + + Исключение + ОтменитьТранзакцию(); + + Если ФайлЗаблокирован Тогда + РазблокироватьДанныеДляРедактирования(Файл); + КонецЕсли; + + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl index b6031dafd..6535ae03a 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl @@ -16,7 +16,7 @@ НСтр("ru = 'Нельзя освободить файл ""%1"" т.к. он никем не занят.'"), Строка(ОбъектСсылка)); Возврат Ложь; Иначе - Если ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ЭтоПолноправныйПользовательИБ Тогда + Если ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ЭтоПолноправныйПользователь Тогда Возврат Истина; КонецЕсли; @@ -46,9 +46,8 @@ РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); СтрокаОшибки = ""; - ДатаЗаема = ТекущаяДата(); Если НЕ РаботаСФайламиВызовСервера.ПолучитьДанныеФайлаИЗанятьФайл(ОбъектСсылка, ДанныеФайла, - СтрокаОшибки, ДатаЗаема, УникальныйИдентификатор) Тогда + СтрокаОшибки, УникальныйИдентификатор) Тогда // Если занять нельзя, то сообщаем об ошибке Предупреждение(СтрокаОшибки); @@ -100,11 +99,10 @@ // Занять файлы КоличествоЗанятых = 0; - ДатаЗаема = ТекущаяДата(); Для Каждого ДанныеФайла Из ДанныеФайлов Цикл - Если Не РаботаСФайламиВызовСервера.ЗанятьФайл(ДанныеФайла, "", ДатаЗаема) Тогда + Если Не РаботаСФайламиВызовСервера.ЗанятьФайл(ДанныеФайла, "") Тогда Продолжить; КонецЕсли; @@ -145,9 +143,8 @@ РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); СтрокаОшибки = ""; - ДатаЗаема = ТекущаяДата(); Если НЕ РаботаСФайламиВызовСервера.ПолучитьДанныеФайлаДляОткрытияИЗанятьФайл(ОбъектСсылка, ДанныеФайла, - СтрокаОшибки, ДатаЗаема, УникальныйИдентификатор, РабочийКаталогВладельца) Тогда + СтрокаОшибки, УникальныйИдентификатор, РабочийКаталогВладельца) Тогда СтандартнаяОбработка = Истина; РаботаСФайламиКлиентПереопределяемый.ПриОшибкеЗахватаФайла(ДанныеФайла, СтандартнаяОбработка); @@ -500,8 +497,8 @@ Иначе // Если веб-клиент - ВремяИзменения = ТекущаяДата(); // Т.к. не можем получить дату модификации файла на диске - ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДата()); + ВремяИзменения = Дата('00010101'); // Т.к. не можем получить дату модификации файла на диске + ВремяИзмененияУниверсальное = Дата('00010101'); Размер = 0; // Т.к. не можем получить размер файла на диске ИмяБезРасширения = ""; Расширение = ""; @@ -687,12 +684,12 @@ КомментарийКВерсии = Неопределено, ПоказыватьОповещение = Истина, ПрименитьКоВсем = Ложь, - ОсвобождатьФайлы = Истина) Экспорт + ОсвобождатьФайлы = Истина, + Кодировка = Неопределено) Экспорт + Перем ДанныеФайла; - ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); - РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); Если РасширениеПодключено Тогда // код для тонкого (или толстого) клиента (или веб с подключенным расширением) @@ -896,9 +893,10 @@ ИмяБезРасширения = ФайлНовойВерсии.ИмяБезРасширения; Расширение = ФайлНовойВерсии.Расширение; + Отказ = Ложь; Если НЕ ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере Тогда АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище( - ПолныйПутьКФайлу, ИдентификаторФормы); + ПолныйПутьКФайлу, ИдентификаторФормы, Отказ, Кодировка); Иначе АдресВременногоХранилищаТекста = ""; КонецЕсли; @@ -1009,6 +1007,7 @@ РедактируетТекущийПользователь = ДанныеФайла.РедактируетТекущийПользователь; Редактирует = ДанныеФайла.Редактирует; АвторТекущейВерсии = ДанныеФайла.АвторТекущейВерсии; + Кодировка = ДанныеФайла.КодировкаТекущейВерсии; КонецЕсли; // Проверяем возможность освобождения @@ -1092,8 +1091,8 @@ ТекстНеИзвлеченНаКлиенте = Истина; #КонецЕсли - ВремяИзменения = ТекущаяДата(); // Т.к. не можем получить дату модификации файла на диске - ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДата()); + ВремяИзменения = Дата('00010101'); // Т.к. не можем получить дату модификации файла на диске + ВремяИзмененияУниверсальное = Дата('00010101'); Размер = 0; // Т.к. не можем получить размер файла на диске СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ВыбранныйПутьКФайлу); @@ -1849,8 +1848,8 @@ ИмяБезРасширения = ""; Расширение = ""; - ВремяИзменения = ТекущаяДата(); // Т.к. не можем получить дату модификации файла на диске - ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДата()); + ВремяИзменения = Дата('00010101'); // Т.к. не можем получить дату модификации файла на диске + ВремяИзмененияУниверсальное = Дата('00010101'); РазмерФайла = 0; // Т.к. не можем получить размер файла на диске ОтносительныйПутьКФайлу = ""; @@ -2047,7 +2046,7 @@ НаЧтение = Истина; ДатаФайлаВБазе = ДанныеФайла.ДатаМодификацииУниверсальная; - ОбщегоНазначенияКлиент.ПреобразоватьЗимнееВремяКТекущему(ДатаФайлаВБазе); + ДатаФайлаВБазе = МестноеВремя(ДатаФайлаВБазе); ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); @@ -2185,7 +2184,7 @@ НаЧтение = Ложь; ДатаФайлаВБазе = ДанныеФайла.ДатаМодификацииУниверсальная; - ОбщегоНазначенияКлиент.ПреобразоватьЗимнееВремяКТекущему(ДатаФайлаВБазе); + ДатаФайлаВБазе = МестноеВремя(ДатаФайлаВБазе); РазмерФайлаВБазе = ДанныеФайла.Размер; ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); @@ -2345,7 +2344,7 @@ Оболочка = Новый COMОбъект("WScript.Shell"); ПутьКаталогаПользователя = Оболочка.ExpandEnvironmentStrings("%APPDATA%"); - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ПутьКаталогаПользователя, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПутьКаталогаПользователя = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКаталогаПользователя, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); МаксимальнаяДлинаИмениФайла = МаксимальнаяДлинаПолногоПути - СтрДлина(ПутьКаталогаПользователя); // если имя файла плюс 5 превышает 260 - пишем "Измените имя файла на более короткое. ОК" и выходим. @@ -2427,7 +2426,7 @@ ВРабочемКаталогеВладельца = Истина; ДатаФайлаВБазе = ДанныеФайла.ДатаМодификацииУниверсальная; - ОбщегоНазначенияКлиент.ПреобразоватьЗимнееВремяКТекущему(ДатаФайлаВБазе); + ДатаФайлаВБазе = МестноеВремя(ДатаФайлаВБазе); ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); @@ -2472,7 +2471,7 @@ Если ФайлНаДиске.Существует() Тогда ДатаФайлаВБазе = ДанныеФайла.ДатаМодификацииУниверсальная; - ОбщегоНазначенияКлиент.ПреобразоватьЗимнееВремяКТекущему(ДатаФайлаВБазе); + ДатаФайлаВБазе = МестноеВремя(ДатаФайлаВБазе); РазмерФайлаВБазе = ДанныеФайла.Размер; ДатаФайлаНаДиске = ФайлНаДиске.ПолучитьВремяИзменения(); @@ -2706,7 +2705,7 @@ ВРабочемКаталогеВладельца = Истина; ДатаФайлаВБазе = ДанныеФайла.ДатаМодификацииУниверсальная; - ОбщегоНазначенияКлиент.ПреобразоватьЗимнееВремяКТекущему(ДатаФайлаВБазе); + ДатаФайлаВБазе = МестноеВремя(ДатаФайлаВБазе); ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); @@ -2751,7 +2750,7 @@ Если ФайлНаДиске.Существует() Тогда ДатаФайлаВБазе = ДанныеФайла.ДатаМодификацииУниверсальная; - ОбщегоНазначенияКлиент.ПреобразоватьЗимнееВремяКТекущему(ДатаФайлаВБазе); + ДатаФайлаВБазе = МестноеВремя(ДатаФайлаВБазе); РазмерФайлаВБазе = ДанныеФайла.Размер; ДатаФайлаНаДиске = ФайлНаДиске.ПолучитьВремяИзменения(); @@ -3031,7 +3030,7 @@ ПолноеИмяФайла = ""; ДатаФайлаВБазе = ДанныеФайла.ДатаМодификацииУниверсальная; - ОбщегоНазначенияКлиент.ПреобразоватьЗимнееВремяКТекущему(ДатаФайлаВБазе); + ДатаФайлаВБазе = МестноеВремя(ДатаФайлаВБазе); ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); @@ -3155,6 +3154,36 @@ РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); Если РасширениеПодключено Тогда + + ПерсональныеНастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); + + ТекстовыеФайлыСпособОткрытия = ПерсональныеНастройкиРаботыСФайлами.ТекстовыеФайлыСпособОткрытия; + Если ТекстовыеФайлыСпособОткрытия = ПредопределенноеЗначение("Перечисление.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе") Тогда + + ТекстовыеФайлыРасширение = ПерсональныеНастройкиРаботыСФайлами.ТекстовыеФайлыРасширение; + Если ФайловыеФункцииКлиентСервер.РасширениеФайлаВСписке(ТекстовыеФайлыРасширение, ДанныеФайла.Расширение) Тогда + + ПараметрыФормы = Новый Структура("Файл, ДанныеФайла, ИмяОткрываемогоФайла", + ДанныеФайла.Ссылка, ДанныеФайла, ИмяОткрываемогоФайла); + + ОткрытьФорму("Справочник.Файлы.Форма.РедактированиеТекстовогоФайла", + ПараметрыФормы, , ДанныеФайла.КодФайла); + Возврат; + + КонецЕсли; + + КонецЕсли; + + Если НРег(ДанныеФайла.Расширение) = НРег("grs") Тогда + + Схема = Новый ГрафическаяСхема; + Схема.Прочитать(ИмяОткрываемогоФайла); + ЗаголовокСтрока = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + Схема.Показать(ЗаголовокСтрока, ИмяОткрываемогоФайла); + Возврат; + + КонецЕсли; + // Открыть Файл Попытка @@ -3197,7 +3226,7 @@ Если ФайлВРабочемКаталоге = Истина Тогда ДатаФайлаВБазе = ДанныеФайла.ДатаМодификацииУниверсальная; - ОбщегоНазначенияКлиент.ПреобразоватьЗимнееВремяКТекущему(ДатаФайлаВБазе); + ДатаФайлаВБазе = МестноеВремя(ДатаФайлаВБазе); ФайлВерсии = Новый Файл(ПолноеИмяФайла); ДатаФайлаНаДиске = ФайлВерсии.ПолучитьВремяИзменения(); @@ -3346,7 +3375,7 @@ ПередаваемыеФайлы.Добавить(Описание); ПутьКФайлу = Файл.Путь; - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); // Сохраним Файл из БД на диск Если ПолучитьФайлы(ПередаваемыеФайлы,, ПутьКФайлу, Ложь) Тогда @@ -3378,7 +3407,7 @@ НовыйФайл = Новый Файл(ВыборФайла.ПолноеИмяФайла); ДатаСоздаваемогоФайлаНаДиске = ДанныеФайла.ДатаМодификацииУниверсальная; - ОбщегоНазначенияКлиент.ПреобразоватьЗимнееВремяКТекущему(ДатаСоздаваемогоФайлаНаДиске); + ДатаСоздаваемогоФайлаНаДиске = МестноеВремя(ДатаСоздаваемогоФайлаНаДиске); НовыйФайл.УстановитьВремяИзменения(ДатаСоздаваемогоФайлаНаДиске); @@ -3696,7 +3725,7 @@ РедактируетТекущийПользователь = ДанныеФайла.РедактируетТекущийПользователь; ДатаФайлаВБазе = ДанныеФайла.ДатаМодификацииУниверсальная; - ОбщегоНазначенияКлиент.ПреобразоватьЗимнееВремяКТекущему(ДатаФайлаВБазе); + ДатаФайлаВБазе = МестноеВремя(ДатаФайлаВБазе); Если ВремяИзмененияВыбранное < ДатаФайлаВБазе Тогда // в кеше более новый СтрокаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -3773,8 +3802,7 @@ КонецЕсли; СтрокаОшибки = ""; - ДатаЗаема = ТекущаяДата(); - Если Не РаботаСФайламиВызовСервера.ЗанятьФайл(ДанныеФайла, СтрокаОшибки, ДатаЗаема, ИдентификаторФормы) Тогда + Если Не РаботаСФайламиВызовСервера.ЗанятьФайл(ДанныеФайла, СтрокаОшибки, ИдентификаторФормы) Тогда Предупреждение(СтрокаОшибки); Возврат; КонецЕсли; @@ -4578,8 +4606,7 @@ РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); СтрокаОшибки = ""; - ДатаЗаема = ТекущаяДата(); - Если Не РаботаСФайламиВызовСервера.ЗанятьФайл(ДанныеФайла, СтрокаОшибки, ДатаЗаема) Тогда + Если Не РаботаСФайламиВызовСервера.ЗанятьФайл(ДанныеФайла, СтрокаОшибки) Тогда Предупреждение(СтрокаОшибки); Возврат; КонецЕсли; @@ -4712,7 +4739,7 @@ Если ДиалогОткрытияФайла.Выбрать() Тогда ИмяКаталога = ДиалогОткрытияФайла.Каталог; - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ИмяКаталога, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ИмяКаталога = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталога, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); // Создать каталог для файлов Попытка @@ -4764,9 +4791,9 @@ СкопированныеФайлыИПапки, ОригинальныеФайлыИПапки) ТекущийПутьНазначения = ИмяКаталога; - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ТекущийПутьНазначения, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ТекущийПутьНазначения = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ТекущийПутьНазначения, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); ТекущийПутьИсточника = ИмяКаталогаПрежнееЗначение; - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ТекущийПутьИсточника, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ТекущийПутьИсточника = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ТекущийПутьИсточника, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); МассивФайловВКаталоге = НайтиФайлы(ТекущийПутьИсточника, "*.*"); @@ -4990,7 +5017,7 @@ Оболочка = Новый COMОбъект("WScript.Shell"); ПутьКаталогаПользователя = Оболочка.ExpandEnvironmentStrings("%APPDATA%"); - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ПутьКаталогаПользователя, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПутьКаталогаПользователя = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКаталогаПользователя, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); МаксимальнаяДлинаИмениФайла = МаксимальнаяДлинаПолногоПути - СтрДлина(ПутьКаталогаПользователя); // если имя файла плюс 5 превышает 260 - пишем "Измените имя файла на более короткое. ОК" и выходим. @@ -5073,7 +5100,7 @@ КонецЕсли; //ПутьКФайлу = ФайлНаДискеПоИмени.Путь; - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); ИмяФайлаСПутем = ПутьКФайлу + ИмяФайла; // могло смениться расширение ТекстПояснения = @@ -5265,7 +5292,8 @@ Знач ПсевдоФайловаяСистема, ДобавленныеФайлы, МассивВсехПапок, - РежимЗагрузки = Ложь) Экспорт + РежимЗагрузки = Ложь, + Кодировка = Неопределено) Экспорт Перем ПерваяПапкаСТакимЖеИменем; Перем ДокГруппаСсылка; @@ -5287,7 +5315,7 @@ Если Рекурсивно = Истина Тогда НовыйПуть = Строка(ВыбранныйФайл.Путь); - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(НовыйПуть, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(НовыйПуть, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); НовыйПуть = НовыйПуть + Строка(ВыбранныйФайл.Имя); МассивФайлов = ФайловыеФункцииКлиентСервер.НайтиФайлыПсевдо(ПсевдоФайловаяСистема, НовыйПуть); @@ -5336,7 +5364,8 @@ ПсевдоФайловаяСистема, ДобавленныеФайлы, МассивВсехПапок, - РежимЗагрузки); + РежимЗагрузки, + Кодировка); МассивВсехПапок.Добавить(НовыйПуть); КонецЕсли; @@ -5405,7 +5434,9 @@ Если НЕ ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере Тогда АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище( ВыбранныйФайл.ПолноеИмя, - ИдентификаторФормы); + ИдентификаторФормы, + Ложь, + Кодировка); Иначе АдресВременногоХранилищаТекста = ""; КонецЕсли; @@ -5413,7 +5444,9 @@ // Создаем элемент справочника Файлы РаботаСФайламиКлиентСервер.СоздатьЭлементСправочникаФайлы(ВыбранныйФайл, МассивСтруктурВсехФайлов, Владелец, ИдентификаторФормы, Комментарий, ХранитьВерсии, ДобавленныеФайлы, - АдресВременногоХранилищаФайла, АдресВременногоХранилищаТекста); + АдресВременногоХранилищаФайла, АдресВременногоХранилищаТекста, + Неопределено, + Кодировка); Иначе Запись = Новый Структура; @@ -5469,7 +5502,8 @@ ИдентификаторФормы, Знач ПсевдоФайловаяСистема, ДобавленныеФайлы, - РежимЗагрузки = Ложь) Экспорт + РежимЗагрузки = Ложь, + Кодировка = Неопределено) Экспорт Перем ПерваяПапкаСТакимЖеИменем; Перем ПапкаДляДобавленияТекущая; @@ -5561,7 +5595,8 @@ ПсевдоФайловаяСистема, ДобавленныеФайлы, МассивВсехПапок, - РежимЗагрузки); + РежимЗагрузки, + Кодировка); МассивВсехПапок.Добавить(Путь); Иначе @@ -5591,7 +5626,8 @@ ПсевдоФайловаяСистема, ДобавленныеФайлы, МассивВсехПапок, - РежимЗагрузки); + РежимЗагрузки, + Кодировка); КонецЕсли; Если МассивСтруктурВсехФайлов.Количество() > 1 Тогда @@ -5753,7 +5789,7 @@ Если Рекурсивно Тогда НовыйПуть = Строка(ВыбранныйФайл.Путь); - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(НовыйПуть, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(НовыйПуть, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); НовыйПуть = НовыйПуть + Строка(ВыбранныйФайл.Имя); МассивФайловВКаталоге = ФайловыеФункцииКлиентСервер.НайтиФайлыПсевдо(ПсевдоФайловаяСистема, НовыйПуть); @@ -5955,3 +5991,173 @@ Предупреждения.Добавить(ПредупреждениеПользователю); КонецПроцедуры +// Выбрать режим открытия файла и начать редактирование +Функция ВыбратьРежимИРедактироватьФайл(ДанныеФайла, ДоступностьКомандыРедактировать) Экспорт + + РедактированиеВоВстроенномРедакторе = Ложь; + ПерсональныеНастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); + + ТекстовыеФайлыСпособОткрытия = ПерсональныеНастройкиРаботыСФайлами.ТекстовыеФайлыСпособОткрытия; + Если ТекстовыеФайлыСпособОткрытия = ПредопределенноеЗначение("Перечисление.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе") Тогда + + ТекстовыеФайлыРасширение = ПерсональныеНастройкиРаботыСФайлами.ТекстовыеФайлыРасширение; + Если ФайловыеФункцииКлиентСервер.РасширениеФайлаВСписке(ТекстовыеФайлыРасширение, ДанныеФайла.Расширение) Тогда + РедактированиеВоВстроенномРедакторе = Истина; + КонецЕсли; + + КонецЕсли; + + ГрафическиеСхемыСпособОткрытия = ПерсональныеНастройкиРаботыСФайлами.ГрафическиеСхемыСпособОткрытия; + Если ГрафическиеСхемыСпособОткрытия = ПредопределенноеЗначение("Перечисление.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе") Тогда + + ГрафическиеСхемыРасширение = ПерсональныеНастройкиРаботыСФайлами.ГрафическиеСхемыРасширение; + Если ФайловыеФункцииКлиентСервер.РасширениеФайлаВСписке(ГрафическиеСхемыРасширение, ДанныеФайла.Расширение) Тогда + РедактированиеВоВстроенномРедакторе = Истина; + КонецЕсли; + + КонецЕсли; + + Если РедактированиеВоВстроенномРедакторе Тогда + Возврат "Открыть"; + КонецЕсли; + + // Если уже занят для редактирования, то не спрашивать - сразу открывать + Если ДанныеФайла.Редактирует.Пустая() Тогда + СпрашиватьРежимРедактированияПриОткрытииФайла = ПерсональныеНастройкиРаботыСФайлами.СпрашиватьРежимРедактированияПриОткрытииФайла; + Если СпрашиватьРежимРедактированияПриОткрытииФайла = Истина Тогда + + КакОткрывать = Неопределено; + + Если Не ДоступностьКомандыРедактировать Тогда + КакОткрывать = 0; // Просмотр + Иначе + + Результат = ОткрытьФормуМодально("Справочник.Файлы.Форма.ФормаВыбораРежимаОткрытия"); + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Возврат "Отмена"; + КонецЕсли; + + БольшеНеСпрашивать = Результат.БольшеНеСпрашивать; + Если БольшеНеСпрашивать = Истина Тогда + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиОткрытияФайлов", "СпрашиватьРежимРедактированияПриОткрытииФайла", Ложь); + ОбновитьПовторноИспользуемыеЗначения(); + КонецЕсли; + + КакОткрывать = Результат.КакОткрывать; + КонецЕсли; + + Если КакОткрывать = 1 Тогда + РедактироватьФайл(ДанныеФайла); + ОповеститьОбИзменении(ДанныеФайла.Ссылка); + Возврат "Редактировать"; + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + Возврат "Открыть"; + +КонецФункции + +// Функция предназначена для открытия файла соответствующим приложением +// +// Параметры +// ИмяОткрываемогоФайла - Строка - полное имя файла +Процедура ВыполнитьЗапускПриложения(ИмяОткрываемогоФайла) Экспорт + + РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); + Если РасширениеПодключено Тогда + // Открыть Файл + Попытка + + СистемнаяИнфо = Новый СистемнаяИнформация; + Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 ИЛИ СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + ИмяОткрываемогоФайла = СтрЗаменить(ИмяОткрываемогоФайла, "/", "\"); + КонецЕсли; + + ЗапуститьПриложение(ИмяОткрываемогоФайла); + + Исключение + + Инфо = ИнформацияОбОшибке(); + Предупреждение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Описание=""%1""'"), + Инфо.Описание)); + + КонецПопытки; + КонецЕсли; + +КонецПроцедуры // ВыполнитьЗапускПриложения() + +// Сравнивает 2 файла (txt doc doc odt) с помощью MS Office или OpenOffice +Процедура СравнитьФайлы(ПутьКФайлу1, ПутьКФайлу2, СпособСравненияВерсийФайлов) Экспорт + + Попытка + + Если СпособСравненияВерсийФайлов = "MicrosoftOfficeWord" Тогда + ОбъектWord = Новый COMОбъект("Word.Application"); + ОбъектWord.Visible = 0; + + Документ = ОбъектWord.Documents.Open(ПутьКФайлу1); + + Документ.Merge(ПутьКФайлу2, 0, 0, 0); // MergeTarget:=wdMergeTargetSelected, DetectFormatChanges:=False, UseFormattingFrom:=wdFormattingFromCurrent + + ОбъектWord.Visible = 1; + ОбъектWord.Activate(); + + Документ.Close(); + ИначеЕсли СпособСравненияВерсийФайлов = "OpenOfficeOrgWriter" Тогда + + // снимем readonly - иначе не сработает + Файл1 = Новый Файл(ПутьКФайлу1); + Файл1.УстановитьТолькоЧтение(Ложь); + + Файл2 = Новый Файл(ПутьКФайлу2); + Файл2.УстановитьТолькоЧтение(Ложь); + + // Открыть OpenOffice + ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); + Reflection = ServiceManager.createInstance("com.sun.star.reflection.CoreReflection"); + Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop"); + Dispatcher = ServiceManager.createInstance("com.sun.star.frame.DispatchHelper"); + + // Открыть документ OpenOffice + Args = Новый COMSafeArray("VT_DISPATCH", 1); + OOДокумент = Desktop.loadComponentFromURL(ПреобразоватьВURL(ПутьКФайлу2), "_blank", 0, Args); + + frame = Desktop.getCurrentFrame(); + + // установить показ изменений + ПараметрыСравнения = Новый COMSafeArray("VT_VARIANT", 1); + ПараметрыСравнения.SetValue(0, ПрисвоитьЗначениеСвойству(ServiceManager, "ShowTrackedChanges", Истина)); + dispatcher.executeDispatch(frame, ".uno:ShowTrackedChanges", "", 0, ПараметрыСравнения); + + // сравнить с документом + ПараметрыВызова = Новый COMSafeArray("VT_VARIANT", 1); + ПараметрыВызова.SetValue(0, ПрисвоитьЗначениеСвойству(ServiceManager, "URL", ПреобразоватьВURL(ПутьКФайлу1))); + dispatcher.executeDispatch(frame, ".uno:CompareDocuments", "", 0, ПараметрыВызова); + + OOДокумент = Неопределено; + КонецЕсли; + + Исключение + Информация = ИнформацияОбОшибке(); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Информация.Описание); + КонецПопытки; + +КонецПроцедуры + +// Функция преобразует Windows имя файла в URL OpenOffice +Функция ПреобразоватьВURL(ИмяФайла) + Возврат "file:///" + СтрЗаменить(ИмяФайла, "\", "/"); +КонецФункции + +// создание структуры для параметров OpenOffice +Функция ПрисвоитьЗначениеСвойству(Объект, ИмяСвойства, ЗначениеСвойства) + Свойства = Объект.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); + Свойства.Name = ИмяСвойства; + Свойства.Value = ЗначениеСвойства; + + Возврат Свойства; +КонецФункции + diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl index 3686af643..c7a7dbd10 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl @@ -36,7 +36,8 @@ Функция СоздатьЭлементСправочникаФайлы(ВыбранныйФайл, МассивСтруктурВсехФайлов, Владелец, ИдентификаторФормы, Комментарий, ХранитьВерсии, ДобавленныеФайлы, АдресВременногоХранилищаФайла, АдресВременногоХранилищаТекста, - Пользователь = Неопределено) Экспорт + Пользователь = Неопределено, + Кодировка = Неопределено) Экспорт ИмяБезРасширения = ВыбранныйФайл.ИмяБезРасширения; Расширение = ВыбранныйФайл.Расширение; @@ -58,7 +59,9 @@ АдресВременногоХранилищаТекста, Ложь, // это не веб клиент Пользователь, - Комментарий); + Комментарий, + Ложь, + Кодировка); УдалитьИзВременногоХранилища(АдресВременногоХранилищаФайла); Если Не ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда @@ -87,4 +90,42 @@ Возврат ИмяФайла; -КонецФункции \ No newline at end of file +КонецФункции + +///////////////////////////////////////////////////////////////////////////////////////// +// РАБОТА С КОДИРОВКАМИ + +// Функция возвращает таблицу имен кодировок +// Возвращаемое значение: +// Результат (СписокЗначений) +// - Значение (Строка) - например "ibm852" +// - Представление (Строка) - например "ibm852 (Центральноевропейская DOS)" +// +Функция ПолучитьСписокКодировок() Экспорт + + СписокКодировок = Новый СписокЗначений; + + СписокКодировок.Добавить("ibm852", "IBM852 (Центральноевропейская DOS)"); + СписокКодировок.Добавить("ibm866", "IBM866 (Кириллица DOS)"); + СписокКодировок.Добавить("iso-8859-1", "ISO-8859-1 (Западноевропейская ISO)"); + СписокКодировок.Добавить("iso-8859-2", "ISO-8859-2 (Центральноевропейская ISO)"); + СписокКодировок.Добавить("iso-8859-3", "ISO-8859-3 (Латиница 3 ISO)"); + СписокКодировок.Добавить("iso-8859-4", "ISO-8859-4 (Балтийская ISO)"); + СписокКодировок.Добавить("iso-8859-5", "ISO-8859-5 (Кириллица ISO)"); + СписокКодировок.Добавить("iso-8859-7", "ISO-8859-7 (Греческая ISO)"); + СписокКодировок.Добавить("iso-8859-9", "ISO-8859-9 (Турецкая ISO)"); + СписокКодировок.Добавить("iso-8859-15", "ISO-8859-15 (Латиница 9 ISO)"); + СписокКодировок.Добавить("koi8-r", "KOI8-R (Кириллица KOI8-R)"); + СписокКодировок.Добавить("koi8-u", "KOI8-U (Кириллица KOI8-U)"); + СписокКодировок.Добавить("us-ascii", "US-ASCII США"); + СписокКодировок.Добавить("utf-8", "UTF-8 (Юникод UTF-8)"); + СписокКодировок.Добавить("windows-1250", "Windows-1250 (Центральноевропейская Windows)"); + СписокКодировок.Добавить("windows-1251", "windows-1251 (Кириллица Windows)"); + СписокКодировок.Добавить("windows-1252", "Windows-1252 (Западноевропейская Windows)"); + СписокКодировок.Добавить("windows-1253", "Windows-1253 (Греческая Windows)"); + СписокКодировок.Добавить("windows-1254", "Windows-1254 (Турецкая Windows)"); + СписокКодировок.Добавить("windows-1257", "Windows-1257 (Балтийская Windows)"); + + Возврат СписокКодировок; + +КонецФункции diff --git a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl index 687bf16f9..311e60f1c 100644 --- a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl @@ -29,12 +29,12 @@ // Функция ПометкаУдаленияРазрешена(Ссылка) Экспорт - // УправлениеДоступом + // СтандартныеПодсистемы.УправлениеДоступом // Проверка права Удаление Если ТипЗнч(Ссылка) = Тип("СправочникСсылка.ПапкиФайлов") Тогда Возврат УправлениеДоступом.ЕстьПравоПоЗначениюДоступа("ПометкаУдаленияПапокИФайлов", Ссылка); КонецЕсли; - // Конец УправлениеДоступом + // Конец СтандартныеПодсистемы.УправлениеДоступом Возврат Истина; diff --git a/SSL/src/CommonModules/РаботаСФайламиСобытия/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСобытия/Module.bsl index 5035cc9a0..c556b068c 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСобытия/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСобытия/Module.bsl @@ -15,6 +15,14 @@ КонецПроцедуры +// Возвращает Истина в параметре ЭтоФайл, если это элемент данных, относящийся к подсистеме РаботаСФайлами +// +Процедура ЭтоЭлементХранимыеФайлыВерсий(ЭлементДанных, ЭтоФайл) Экспорт + + ЭтоФайл = ЭтоФайл Или (ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ХранимыеФайлыВерсий")); + +КонецПроцедуры + // Возвращает Истина в параметре Значение, если элемент данных (справочник Файл) запрещен к загрузке // Процедура ЭлементЗапрещенКЗагрузке(ЭлементДанных, ПолучениеЭлемента, Значение) Экспорт @@ -168,6 +176,10 @@ Возврат; КонецЕсли; + Если Источник.ДополнительныеСвойства.Свойство("ПереименованиеФайла") Тогда + Возврат; + КонецЕсли; + Если Источник.ДополнительныеСвойства.Свойство("КонвертацияФайлов") Тогда Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl new file mode 100644 index 000000000..42661ed24 --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl @@ -0,0 +1,2781 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Рассылка отчетов" (сервер) +// +// Выполняется на сервере. +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Подготавливает параметры для функции ВыполнитьРассылку и выполняет ее +// +// Параметры: +// Рассылка (СправочникСсылка.РассылкиОтчетов) Рассылка, параметры которой будут подготовлены +// ПараметрыЖурнала (Структура) Необязательный. Параметры записи в журнал регистрации +// |- ИмяСобытия (Строка) Имя события (или группы событий) +// |- Метаданные (ОбъектМетаданных) Метаданные для привязки события журнала регистрации +// |- Данные (*) Данные для привязки события журнала регистрации +// ПредварительныеНастройки (Структура) Необязательный. Настройки, которые не требуется формировать из рассылки. +// |- Получатели (Соответствие) Набор получателей и их e-mail адресов +// |- Ключ (СправочникСсылка.*) Получатель +// |- Значение (Строка) Набор e-mail адресов получателя в строке с разделителями +// +// Возвращаемое значение: +// Истина - Рассылка выполнена +// Ложь - Рассылка не выполнена +// +Функция ПодготовитьПараметрыИВыполнитьРассылку(Рассылка, ПараметрыЖурнала = Неопределено, ПредварительныеНастройки = Неопределено) Экспорт + + // Параметры записи в журнал регистрации + Если ПараметрыЖурнала = Неопределено Тогда + ПараметрыЖурнала = Новый Структура; + КонецЕсли; + + Если НЕ ПараметрыЖурнала.Свойство("ИмяСобытия") Тогда + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Запуск по требованию'")); + КонецЕсли; + + Если НЕ ПараметрыЖурнала.Свойство("Данные") Тогда + ПараметрыЖурнала.Вставить("Данные", Рассылка); + КонецЕсли; + + Если НЕ ПараметрыЖурнала.Свойство("Метаданные") Тогда + ПараметрыЖурнала.Вставить("Метаданные", ПараметрыЖурнала.Данные.Метаданные()); + КонецЕсли; + + // Проверка прав доступа + Если НЕ ПравоВывода(ПараметрыЖурнала) Тогда + Возврат Ложь; + КонецЕсли; + + // Проверка базовых реквизитов рассылки + Если НЕ Рассылка.Подготовлена + ИЛИ Рассылка.ПометкаУдаления Тогда + + Причина = ""; + Если НЕ Рассылка.Подготовлена Тогда + Причина = Причина + Символы.ПС + НСтр("ru = 'Рассылка не подготовлена'"); + КонецЕсли; + Если Рассылка.ПометкаУдаления Тогда + Причина = Причина + Символы.ПС + НСтр("ru = 'Рассылка помечена на удаление'"); + КонецЕсли; + + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, + НСтр("ru = 'Завершение'"), СокрЛП(Причина) + ); + Возврат Ложь; + + КонецЕсли; + + // Регистрация запуска (запущена, но не выполнена) + РегистрыСведений.СостоянияРассылокОтчетов.ЗафиксироватьЗапускРассылки(Рассылка); + + // Таблица отчетов + ТаблицаОтчетов = Новый ТаблицаЗначений; + ТаблицаОтчетов.Колонки.Добавить("Отчет", Метаданные.Справочники.РассылкиОтчетов.ТабличныеЧасти.Отчеты.Реквизиты.Отчет.Тип); + ТаблицаОтчетов.Колонки.Добавить("ОтправлятьЕслиПустой", Новый ОписаниеТипов("Булево")); + + МассивТиповНастроек = Новый Массив; + МассивТиповНастроек.Добавить(Тип("Неопределено")); + МассивТиповНастроек.Добавить(Тип("ПользовательскиеНастройкиКомпоновкиДанных")); + МассивТиповНастроек.Добавить(Тип("Структура")); + + ТаблицаОтчетов.Колонки.Добавить("Настройки", Новый ОписаниеТипов(МассивТиповНастроек)); + ТаблицаОтчетов.Колонки.Добавить("Форматы", Новый ОписаниеТипов("Массив")); + + // Форматы по умолчанию + ФорматыПоУмолчанию = Новый Массив; + Найденные = Рассылка.ФорматыОтчетов.НайтиСтроки(Новый Структура("Отчет", РассылкаОтчетовПовтИсп.ПустоеЗначениеОтчета())); + Для Каждого СтрокаФормат Из Найденные Цикл + ФорматыПоУмолчанию.Добавить(СтрокаФормат.Формат); + КонецЦикла; + Если ФорматыПоУмолчанию.Количество() = 0 Тогда + СписокФорматов = РассылкаОтчетовПовтИсп.СписокФорматов(); + Для Каждого ЗначениеСписка Из СписокФорматов Цикл + Если ЗначениеСписка.Пометка Тогда + ФорматыПоУмолчанию.Добавить(ЗначениеСписка.Значение); + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если ФорматыПоУмолчанию.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не установлены форматы по умолчанию.'"); + КонецЕсли; + + // Заполнение таблицы отчетов + Для Каждого СтрокаОтчет Из Рассылка.Отчеты Цикл + Стр = ТаблицаОтчетов.Добавить(); + Стр.Отчет = СтрокаОтчет.Отчет; + Стр.ОтправлятьЕслиПустой = СтрокаОтчет.ОтправлятьЕслиПустой; + + // Настройки + Настройки = СтрокаОтчет.Настройки.Получить(); + Если ТипЗнч(Настройки) = Тип("ТаблицаЗначений") Тогда + Стр.Настройки = Новый Структура; + Найденные = Настройки.НайтиСтроки(Новый Структура("Использование", Истина)); + Для Каждого СтрокаНастройка Из Найденные Цикл + Стр.Настройки.Вставить(СтрокаНастройка.Реквизит, СтрокаНастройка.Значение); + КонецЦикла; + Иначе + Стр.Настройки = Настройки; + КонецЕсли; + + // Форматы + Найденные = Рассылка.ФорматыОтчетов.НайтиСтроки(Новый Структура("Отчет", СтрокаОтчет.Отчет)); + Если Найденные.Количество() = 0 Тогда + Стр.Форматы = ФорматыПоУмолчанию; + Иначе + Для Каждого СтрокаФормат Из Найденные Цикл + Стр.Форматы.Добавить(СтрокаФормат.Формат); + КонецЦикла; + КонецЕсли; + КонецЦикла; + + // Подготовка параметров доставки + ПараметрыДоставки = Новый Структура; + ПараметрыДоставки.Вставить("ЗапускЗафиксирован", Истина); + ПараметрыДоставки.Вставить("Автор", Пользователи.ТекущийПользователь()); + ПараметрыДоставки.Вставить("ИспользоватьПапку", Рассылка.ИспользоватьПапку); + ПараметрыДоставки.Вставить("ИспользоватьСетевойКаталог", Рассылка.ИспользоватьСетевойКаталог); + ПараметрыДоставки.Вставить("ИспользоватьFTPРесурс", Рассылка.ИспользоватьFTPРесурс); + ПараметрыДоставки.Вставить("ИспользоватьЭлектроннуюПочту", Рассылка.ИспользоватьЭлектроннуюПочту); + + // Проверки отмеченных спсобов доставки + Если НЕ ПараметрыДоставки.ИспользоватьПапку + И НЕ ПараметрыДоставки.ИспользоватьСетевойКаталог + И НЕ ПараметрыДоставки.ИспользоватьFTPРесурс + И НЕ ПараметрыДоставки.ИспользоватьЭлектроннуюПочту + Тогда + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, + НСтр("ru = 'Не выбран способ доставки.'") + ); + Возврат Ложь; + КонецЕсли; + + ПараметрыДоставки.Вставить("Персонализирована", Рассылка.Персонализирована); + ПараметрыДоставки.Вставить("Архивировать", Рассылка.Архивировать); + ПараметрыДоставки.Вставить("ИмяАрхива", Рассылка.ИмяАрхива); + ПараметрыДоставки.Вставить("ПарольАрхива", Рассылка.ПарольАрхива); + + // Подготовка параметров доставки в папку + Если ПараметрыДоставки.ИспользоватьПапку Тогда + ПараметрыДоставки.Вставить("Папка", Рассылка.Папка); + КонецЕсли; + + // Подготовка параметров доставки в сетевой каталог + Если ПараметрыДоставки.ИспользоватьСетевойКаталог Тогда + ПараметрыДоставки.Вставить("СетевойКаталогWindows", Рассылка.СетевойКаталогWindows); + ПараметрыДоставки.Вставить("СетевойКаталогLinux", Рассылка.СетевойКаталогLinux); + КонецЕсли; + + // Подготовка параметров доставки на FTP ресурс + Если ПараметрыДоставки.ИспользоватьFTPРесурс Тогда + ПараметрыДоставки.Вставить("Сервер", Рассылка.FTPСервер); + ПараметрыДоставки.Вставить("Порт", Рассылка.FTPПорт); + ПараметрыДоставки.Вставить("Логин", Рассылка.FTPЛогин); + ПараметрыДоставки.Вставить("Пароль", Рассылка.FTPПароль); + ПараметрыДоставки.Вставить("Каталог", Рассылка.FTPКаталог); + ПараметрыДоставки.Вставить("ПассивноеСоединение", Рассылка.FTPПассивноеСоединение); + КонецЕсли; + + // Подготовка параметров доставки по электронной почте + Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда + ПараметрыДоставки.Вставить("УчетнаяЗапись", Рассылка.УчетнаяЗапись); + ПараметрыДоставки.Вставить("ТолькоУведомить", Рассылка.ТолькоУведомить); + ПараметрыДоставки.Вставить("СкрытыеКопии", Рассылка.СкрытыеКопии); + ПараметрыДоставки.Вставить("ШаблонТемы", Рассылка.ТемаПисьма); + ПараметрыДоставки.Вставить("ШаблонТекста", + ?( + Рассылка.ПисьмоВФорматеHTML, + Рассылка.ТекстПисьмаВФорматеHTML, + Рассылка.ТекстПисьма + ) + ); + + // Получатели + Если ПредварительныеНастройки <> Неопределено И ПредварительныеНастройки.Свойство("Получатели") Тогда + + ПараметрыДоставки.Вставить("Получатели", ПредварительныеНастройки.Получатели); + + Иначе + + Получатели = СформироватьСписокПолучателейРассылки(ПараметрыЖурнала, Рассылка); + + Если Получатели.Количество() = 0 Тогда + + ПараметрыДоставки.ИспользоватьЭлектроннуюПочту = Ложь; + + Если НЕ ПараметрыДоставки.ИспользоватьПапку + И НЕ ПараметрыДоставки.ИспользоватьСетевойКаталог + И НЕ ПараметрыДоставки.ИспользоватьFTPРесурс Тогда + + Возврат Ложь; + + КонецЕсли; + + КонецЕсли; + + ПараметрыДоставки.Вставить("Получатели", Получатели); + + КонецЕсли; + + // Дополнительные параметры + ПараметрыДоставки.Вставить("ПараметрыПисьма", Новый Структура); + + // Адрес ответа + Если ЗначениеЗаполнено(Рассылка.АдресОтвета) Тогда + ПараметрыДоставки.ПараметрыПисьма.Вставить("АдресОтвета", Рассылка.АдресОтвета); + КонецЕсли; + + // Вложения + ПараметрыДоставки.ПараметрыПисьма.Вставить("ТипТекста", ?(Рассылка.ПисьмоВФорматеHTML, "HTML", "ПростойТекст")); + ПараметрыДоставки.ПараметрыПисьма.Вставить("Вложения", Новый Соответствие); + Если Рассылка.ПисьмоВФорматеHTML Тогда + СтруктураКартинок = Рассылка.КартинкиПисьмаВФорматеHTML.Получить(); + Если ТипЗнч(СтруктураКартинок) = Тип("Структура") Тогда + Для Каждого КлючИЗначение Из СтруктураКартинок Цикл + ПараметрыДоставки.ПараметрыПисьма.Вложения.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + КонецЕсли; + КонецЕсли; // Рассылка.ПисьмоВФорматеHTML + КонецЕсли; // ПараметрыДоставки.ИспользоватьЭлектроннуюПочту + + Возврат ВыполнитьРассылку(ТаблицаОтчетов, ПараметрыДоставки, Рассылка, ПараметрыЖурнала); + +КонецФункции // ПодготовитьПараметрыИВыполнитьРассылку() + +// Формирует отчеты и отправляет согласно настройкам транспорта (Папка, FILE, EMAIL, FTP); +// Позволяет выполнить рассылку не создавая элемент справочника "Рассылки отчетов". +// +//////////////////////////////////////////////////////////////////////////////// +// Параметры: +// +// ТаблицаОтчетов (ТаблицаЗначений) Набор выгружаемых отчетов. Колонки: +// |- Отчет (...) Отчет, который необходимо сформировать +// |- (СправочникСсылка.ВариантыОтчетов) +// |- (СправочникСсылка.ДополнительныеОтчетыИОбработки) +// |- ОтправлятьЕслиПустой (Булево) Флаг отправки отчета даже если он пустой +// |- Настройки (...) Настройки, с которыми должен сформироваться отчет +// Дополнительно используется для определения принадлежности отчета к СКД. +// |- (Неопределено) Настройки по умолчанию. Для определения принадлежности к СКД +// будет использован реквизит объекта "СхемаКомпоновкиДанных". +// |- (ПользовательскиеНастройкиКомпоновкиДанных) Табличный документ сформируется механизмами СКД. +// |- (Структура) Табличный документ сформируется при помощи метода "Сформировать()". +// |- Ключ (Строка) Имя реквизита объекта отчета +// |- Значение (*) Значение реквизита объекта отчета +// |- Форматы (Массив) из (ПеречислениеСсылка.ФорматыСохраненияОтчетов) Форматы, +// в которых необходимо сохранить и отправить отчет +// +// ПараметрыДоставки (Структура) Настройки транспорта (способа доставки) отчетов. +// Набор реквизитов может отличаться для разных способов доставки: +// --- Обязательные реквизиты --- +// +// |- Автор (СправочникСсылка.Пользователи) Автор рассылки +// +// |- ИспользоватьПапку (Булево) Доставка отчетов в папку подсистемы "Работа с файлами" +// |- ИспользоватьСетевойКаталог (Булево) Доставка отчетов в папку файловой системы +// |- ИспользоватьFTPРесурс (Булево) Доставка отчетов на FTP +// |- ИспользоватьЭлектроннуюПочту (Булево) Доставка отчетов по электронной почте +// +// --- Обязательные реквизиты когда { ИспользоватьПапку = Истина } --- +// +// |- Папка (СправочникСсылка.ПапкиФайлов) - Папка подсистемы "Работа с файлами" +// +// --- Обязательные реквизиты когда { ИспользоватьСетевойКаталог = Истина } --- +// +// |- СетевойКаталогWindows (Строка) Каталог файловой системы (локальный на сервере или сетевой) +// |- СетевойКаталогLinux (Строка) Каталог файловой системы (локальный на сервере или сетевой) +// +// --- Обязательные реквизиты когда { ИспользоватьFTPРесурс = Истина } --- +// +// |- Сервер (Строка) +// |- Порт (Число) +// |- Логин (Строка) +// |- Пароль (Строка) +// |- Каталог (Строка) +// |- ПассивноеСоединение (Булево) +// +// --- Обязательные реквизиты когда { ИспользоватьЭлектроннуюПочту = Истина } --- +// +// |- УчетнаяЗапись (СправочникСсылка.УчетныеЗаписиЭлектроннойПочты) - Учетная запись для отправки почтового сообщения +// |- Получатели (Соответствие) Набор получателей и их e-mail адресов +// |- Ключ (СправочникСсылка.*) Получатель +// |- Значение (Строка) Набор e-mail адресов получателя в строке с разделителями +// +// --- Необязательные реквизиты --- +// +// |- Персонализирована (Булево, Ложь) Рассылка персонализирована получателями +// |- Архивировать (Булево, Ложь) Архивировать все файлы сформированных отчетов в один архив +// |- ИмяАрхива (Строка) Архивация может потребоваться для отчетов, которые при сохранении +// |- ПарольАрхива (Строка) в формат создают каталоги (например html) +// +// --- Необязательные реквизиты когда { ИспользоватьЭлектроннуюПочту = Истина } --- +// +// |- ТолькоУведомить (Булево, Ложь) Отправлять только уведомления (не присоединять сформированные отчеты) +// |- СкрытыеКопии (Булево, Ложь) Если "Истина", то при отправке вместо "Кому" заполняется "СлепыеКопии". +// |- ШаблонТемы (Строка) Тема письма +// |- ШаблонТекста (Строка) Тело письма +// |- ПараметрыПисьма (Структура) Параметры сообщения, которые будут переданы подсистеме "РаботаСПочтовымиСообщениями" напрямую. +// Их обработку можно увидеть в модуле "ЭлектроннаяПочта", процедура "ОтправитьСообщение". +// Подсистемой "РассылкаОтчетов" могут использоваться: +// |- ТипТекста (ТипТекстаПочтовогоСообщения, Строка, ПеречислениеСсылка.ТипыТекстовЭлектронныхПисем) +// |- Вложения (Соответствие) +// |- Ключ (Строка) - наименование вложения +// |- Значение (...) - АдресФайлаВложения (Текст) / ДвоичныеДанные (ДвоичныеДанные) / ИнтернетПочтовоеСообщение +// |- АдресОтвета (Строка) - e-mail адрес ответа +// +// --- Подчиненность значений различных параметров --- +// +// { Персонализирована = Истина } => +// { ИспользоватьПапку = Ложь } +// { ИспользоватьСетевойКаталог = Ложь } +// { ИспользоватьFTPРесурс = Ложь } +// { ТолькоУведомить = Ложь } +// +// Рассылка (*) - Используется как объект-инициатор для отображения ошибок и в шаблонах темы и сообщения +// +// ПараметрыЖурнала (Структура) Необязательный. Параметры записи в журнал регистрации +// |- ИмяСобытия (Строка) Имя события (или группы событий) +// |- Метаданные (ОбъектМетаданных) Метаданные для привязки события журнала регистрации +// |- Данные (*) Данные для привязки события журнала регистрации +// +//////////////////////////////////////////////////////////////////////////////// +// Возвращаемое значение: +// Истина - Рассылка выполнена +// Ложь - Рассылка не выполнена +// +Функция ВыполнитьРассылку(ТаблицаОтчетов, ПараметрыДоставки, Рассылка, ПараметрыЖурнала = Неопределено) Экспорт + РассылкаВыполнена = Ложь; + + Если НЕ ПараметрыДоставки.Свойство("ЗапускЗафиксирован") ИЛИ НЕ ПараметрыДоставки.ЗапускЗафиксирован Тогда + РегистрыСведений.СостоянияРассылокОтчетов.ЗафиксироватьЗапускРассылки(Рассылка); + КонецЕсли; + + // Добавление дерева сформированных отчетов - табличных документов и отчетов, сохраненных в форматы (файлов) + ДеревоОтчетов = СоздатьДеревоОтчетов(); + + // Заполнение параметрами по умолчанию и проверка на заполненность ключевых параметров доставки + Если НЕ ЗаполнитьПараметрыРассылкиПараметрамиПоУмолчанию(ТаблицаОтчетов, ПараметрыДоставки, Рассылка, ПараметрыЖурнала) Тогда + Возврат Ложь; + КонецЕсли; + + // Строка дерева общих (не персонализированных по получателям) отчетов + ПараметрыДоставки.Вставить("СтрокаОбщихОтчетов", ОпределитьСтрокуДереваДляПолучателя(ДеревоОтчетов, Неопределено, ПараметрыДоставки)); + + ЗаписьЖурнала(ПараметрыЖурнала, , + НСтр("ru = 'Инициализирована рассылка %1, автор: %2'"), , + "'"+ Строка(Рассылка) +"'", + "'"+ Строка(ПараметрыДоставки.Автор) +"'" + ); + + // Формирование и сохранение отчетов + НомерОтчета = 1; + Для Каждого СтрокаОтчет Из ТаблицаОтчетов Цикл + ТекстЖурнала = НСтр("ru = 'Отчет %1 формируется'"); + Если СтрокаОтчет.Настройки = Неопределено Тогда + ТекстЖурнала = ТекстЖурнала + Символы.ПС + НСтр("ru = '(пользовательские настройки не заданы)'"); + КонецЕсли; + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Примечание, + ТекстЖурнала, , + "'"+ Строка(СтрокаОтчет.Отчет) +"'" + ); + + // Инициализация отчета + ПараметрыОтчета = Новый Структура("Отчет, Настройки, Форматы, ОтправлятьЕслиПустой"); + ЗаполнитьЗначенияСвойств(ПараметрыОтчета, СтрокаОтчет); + Если НЕ ИнициализироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, ПараметрыДоставки.Персонализирована) Тогда + Продолжить; + КонецЕсли; + + // Формирование табличных документов и сохранение в форматы + Попытка + Если ПараметрыОтчета.Персонализирован Тогда + // В разрезе получателей + Для Каждого КлючИЗначение Из ПараметрыДоставки.Получатели Цикл + СформироватьИСохранитьОтчет( + ПараметрыЖурнала, + ПараметрыОтчета, + ДеревоОтчетов, + ПараметрыДоставки, + КлючИЗначение.Ключ // Получатель + ); + КонецЦикла; + Иначе + // Без персонализации + СформироватьИСохранитьОтчет( + ПараметрыЖурнала, + ПараметрыОтчета, + ДеревоОтчетов, + ПараметрыДоставки, + Неопределено // Получатель + ); + КонецЕсли; + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Примечание, + НСтр("ru = 'Отчет %1 успешно сформирован'"), , + "'"+ Строка(СтрокаОтчет.Отчет) +"'" + ); + НомерОтчета = НомерОтчета + 1; + Исключение + ЗаписьЖурнала(ПараметрыЖурнала, , + НСтр("ru = 'Отчет %1 не сформирован:'"), ИнформацияОбОшибке(), + "'"+ Строка(СтрокаОтчет.Отчет) +"'" + ); + КонецПопытки; + КонецЦикла; + + // Проверка на количество сохраненных отчетов + Если ДеревоОтчетов.Строки.Найти(3, "Уровень", Истина) = Неопределено Тогда + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, + НСтр("ru = 'Не сохранено ни одного отчета'"), , + ); + УдалитьВременныеФайлы(ПараметрыЖурнала, ПараметрыДоставки); + Возврат Ложь; + КонецЕсли; + + // Общие отчеты + ОбщиеВложения = ПараметрыДоставки.СтрокаОбщихОтчетов.Строки.НайтиСтроки(Новый Структура("Уровень", 3), Истина); + + // Отправка личных отчетов + Для Каждого СтрокаПолучатель Из ДеревоОтчетов.Строки Цикл + // Пропустить строку дерева общих отчетов + Если СтрокаПолучатель = ПараметрыДоставки.СтрокаОбщихОтчетов Тогда + Продолжить; + КонецЕсли; + + // Личные вложения + ЛичныеВложения = СтрокаПолучатель.Строки.НайтиСтроки(Новый Структура("Уровень", 3), Истина); + + // Проверка на количество сохраненных персональных отчетов + Если ЛичныеВложения.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + // Объединение общих и личных вложений + ВложенияПолучателя = ОбъединитьМассивы(ОбщиеВложения, ЛичныеВложения); + + // Формирование представления отчетов + СформироватьПредставлениеОтчетовДляПолучателя(ПараметрыДоставки, СтрокаПолучатель); + + // + АрхивацияВложений(ВложенияПолучателя, ПараметрыДоставки, СтрокаПолучатель.Значение); + + // Отправить отчеты получателю + Попытка + ОтправитьОтчетыПолучателю( + ВложенияПолучателя, + ПараметрыДоставки, + СтрокаПолучатель + ); + РассылкаВыполнена = Истина; + ПараметрыДоставки.ВыполненаПоЭлектроннойПочте = Истина; + Исключение + ЗаписьЖурнала(ПараметрыЖурнала, , + НСтр("ru = 'Ошибка отправки отчетов получателю %1:'"), ИнформацияОбОшибке(), + "'"+ Строка(СтрокаПолучатель.Ключ) +"'" + ); + КонецПопытки; + + // + Если РассылкаВыполнена Тогда + ПараметрыДоставки.Получатели.Удалить(СтрокаПолучатель.Ключ); + КонецЕсли; + КонецЦикла; + + // Отправка общих отчетов + Если ОбщиеВложения.Количество() > 0 Тогда + // Представление отчетов + СформироватьПредставлениеОтчетовДляПолучателя(ПараметрыДоставки, СтрокаПолучатель); + + // + АрхивацияВложений(ОбщиеВложения, ПараметрыДоставки, ПараметрыДоставки.КаталогВременныхФайлов); + + // + Если ВыполнитьДоставку(ПараметрыЖурнала, ПараметрыДоставки, ОбщиеВложения) Тогда + РассылкаВыполнена = Истина; + КонецЕсли; + КонецЕсли; // ЕстьОбщиеОтчеты + + Если РассылкаВыполнена Тогда + ЗаписьЖурнала(ПараметрыЖурнала, , НСтр("ru = 'Рассылка выполнена'")); + Иначе + ЗаписьЖурнала(ПараметрыЖурнала, , НСтр("ru = 'Рассылка не выполнена'")); + КонецЕсли; + + УдалитьВременныеФайлы(ПараметрыЖурнала, ПараметрыДоставки); + + // + Если ПараметрыЖурнала.Свойство("БылиОшибки") Тогда + ПараметрыДоставки.БылиОшибки = ПараметрыЖурнала.БылиОшибки; + КонецЕсли; + Если ПараметрыЖурнала.Свойство("БылиПредупреждения") Тогда + ПараметрыДоставки.БылиПредупреждения = ПараметрыЖурнала.БылиПредупреждения; + КонецЕсли; + РегистрыСведений.СостоянияРассылокОтчетов.ЗафиксироватьРезультатВыполненияРассылки(Рассылка, ПараметрыДоставки); + + Возврат РассылкаВыполнена; +КонецФункции // ВыполнитьРассылку + +// Для вызова из модулей "РассылкаОтчетовПереопределяемый" и "РассылкаОтчетовПовтИсп". +// Добавляет формат (в случае его отсутствия) и устанавливает его параметры (если переданы). +// +Процедура УстановитьПараметрыФормата(СписокФорматов, ФорматСсылка, Картинка = Неопределено, ИспользоватьПоУмолчанию = Неопределено) Экспорт + Если ТипЗнч(ФорматСсылка) = Тип("Строка") Тогда + ФорматСсылка = Перечисления.ФорматыСохраненияОтчетов[ФорматСсылка]; + КонецЕсли; + ЭлементСписка = СписокФорматов.НайтиПоЗначению(ФорматСсылка); + Если ЭлементСписка = Неопределено Тогда + ЭлементСписка = СписокФорматов.Добавить(ФорматСсылка, Строка(ФорматСсылка), Ложь, БиблиотекаКартинок.ФорматПустой); + КонецЕсли; + Если Картинка <> Неопределено Тогда + ЭлементСписка.Картинка = Картинка; + КонецЕсли; + Если ИспользоватьПоУмолчанию <> Неопределено Тогда + ЭлементСписка.Пометка = ИспользоватьПоУмолчанию; + КонецЕсли; +КонецПроцедуры + +// Для вызова из модулей "РассылкаОтчетовПереопределяемый" и "РассылкаОтчетовПовтИсп". +// Добавляет описание типа получателей в соответствующую таблицу. +// +// Параметры: +// ТаблицаТипов (ТаблицаЗначений) Таблица, в которой будет зарегистрирован результат +// ДоступныеТипы (Массив) Использованные типы удаляются из этого массива +// Настройки (Структура) Предустановленные настройки основного типа +// +Процедура ДобавитьЭлементВТаблицуТиповПолучателей(ТаблицаТипов, ДоступныеТипы, Настройки) Экспорт + УстановитьПривилегированныйРежим(Истина); + + МетаданныеОсновногоТипа = Метаданные.НайтиПоТипу(Настройки.ОсновнойТип); + + // Регистрирация использования основного типа + ИндексТипа = ДоступныеТипы.Найти(Настройки.ОсновнойТип); + Если ИндексТипа <> Неопределено Тогда + ДоступныеТипы.Удалить(ИндексТипа); + КонецЕсли; + + // Идентификаторы объектов метаданных + ИОМД = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Настройки.ОсновнойТип); + СтрокаТаблицы = ТаблицаТипов.Найти(ИОМД, "ИОМД"); + Если СтрокаТаблицы = Неопределено Тогда + СтрокаТаблицы = ТаблицаТипов.Добавить(); + СтрокаТаблицы.ИОМД = ИОМД; + КонецЕсли; + + // Тип получателей + МассивТипов = Новый Массив; + МассивТипов.Добавить(Настройки.ОсновнойТип); + + // Тип получателей: Основной + СтрокаТаблицы.ОсновнойТип = Новый ОписаниеТипов(МассивТипов); + + // Тип получателей: Дополнительный + Если Настройки.Свойство("ДополнительныйТип") Тогда + МассивТипов.Добавить(Настройки.ДополнительныйТип); + + // Регистрирация использования дополнительного типа + ИндексТипа = ДоступныеТипы.Найти(Настройки.ДополнительныйТип); + Если ИндексТипа <> Неопределено Тогда + ДоступныеТипы.Удалить(ИндексТипа); + КонецЕсли; + КонецЕсли; + СтрокаТаблицы.ТипПолучателей = Новый ОписаниеТипов(МассивТипов); + + // Представление + Если Настройки.Свойство("Представление") Тогда + СтрокаТаблицы.Представление = Настройки.Представление; + Иначе + СтрокаТаблицы.Представление = МетаданныеОсновногоТипа.Синоним; + КонецЕсли; + + // Основной вид контактной информации "E-mail" для объекта + Если Настройки.Свойство("ВидКИ") И НЕ Настройки.ВидКИ.ЭтоГруппа Тогда + СтрокаТаблицы.ОсновнойВидКИ = Настройки.ВидКИ; + СтрокаТаблицы.ГруппаКИ = Настройки.ВидКИ.Родитель; + Иначе + Если Настройки.Свойство("ВидКИ") Тогда + СтрокаТаблицы.ГруппаКИ = Настройки.ВидКИ; + Иначе + ИмяГруппыКИ = СтрЗаменить(МетаданныеОсновногоТипа.ПолноеИмя(), ".", ""); + СтрокаТаблицы.ГруппаКИ = Справочники.ВидыКонтактнойИнформации[ИмяГруппыКИ]; + КонецЕсли; + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 Ссылка ИЗ Справочник.ВидыКонтактнойИнформации ГДЕ Родитель = &Родитель И Тип = &Тип"; + Запрос.УстановитьПараметр("Родитель", СтрокаТаблицы.ГруппаКИ); + Запрос.Параметры.Вставить("Тип", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + СтрокаТаблицы.ОсновнойВидКИ = Выборка.Ссылка; + КонецЕсли; + КонецЕсли; + + // Полный путь к форме выбора этого объекта + Если Настройки.Свойство("ПутьФормыВыбора") Тогда + СтрокаТаблицы.ПутьФормыВыбора = Настройки.ПутьФормыВыбора; + Иначе + СтрокаТаблицы.ПутьФормыВыбора = МетаданныеОсновногоТипа.ПолноеИмя() +".ФормаВыбора"; + КонецЕсли; +КонецПроцедуры + +// Выполняет массив рассылок и размещает результат по адресу АдресРезультата. В файловом +// режиме вызывается напрямую, в клиент-серверном - через фоновое задание. +// +// Параметры: +// ПараметрыВыполнения (Структура) Выполняемые рассылки и их параметры +// |- МассивРассылок (Массив) из (СправочникСсылка.Рассылки.Отчетов) +// |- ПредварительныеНастройки (Структура) см. функцию ПодготовитьПараметрыИВыполнитьРассылку() +// АдресРезультата (Строка) Адрес, по которому будет размещен результат +// |- (Структура) +// +Процедура ВыполнитьРассылкиВФоновомЗадании(ПараметрыВыполнения, АдресРезультата) Экспорт + МассивРассылок = ПараметрыВыполнения.МассивРассылок; + ПредварительныеНастройки = ПараметрыВыполнения.ПредварительныеНастройки; + + // Выбираем все рассылки, включая вложенные, исключая группы + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | РассылкиОтчетов.Ссылка КАК Рассылка, + | РассылкиОтчетов.Представление КАК Представление, + | ВЫБОР + | КОГДА РассылкиОтчетов.Подготовлена = ИСТИНА + | И РассылкиОтчетов.ПометкаУдаления = ЛОЖЬ + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК Подготовлена, + | ЛОЖЬ КАК Выполнена, + | ЛОЖЬ КАК СОшибками + |ИЗ + | Справочник.РассылкиОтчетов КАК РассылкиОтчетов + |ГДЕ + | РассылкиОтчетов.Ссылка В ИЕРАРХИИ(&МассивРассылок) + | И РассылкиОтчетов.ЭтоГруппа = ЛОЖЬ"; + + Запрос.УстановитьПараметр("МассивРассылок", МассивРассылок); + ТаблицаРассылок = Запрос.Выполнить().Выгрузить(); + Подготовленные = ТаблицаРассылок.НайтиСтроки(Новый Структура("Подготовлена", Истина)); + Выполнено = 0; + СОшибками = 0; + + МассивСообщений = Новый Массив; + Для Каждого СтрокаТаблицы Из Подготовленные Цикл + + ПараметрыЖурнала = Новый Структура("МассивОшибок", Новый Массив); + + СтрокаТаблицы.Выполнена = ПодготовитьПараметрыИВыполнитьРассылку( + СтрокаТаблицы.Рассылка, + ПараметрыЖурнала, + ПредварительныеНастройки + ); + СтрокаТаблицы.СОшибками = (ПараметрыЖурнала.МассивОшибок.Количество() > 0); + + Если СтрокаТаблицы.СОшибками Тогда + МассивСообщений.Добавить("---" + Символы.ПС + Символы.ПС + СтрокаТаблицы.Представление + ":"); // Заголовок + Для Каждого Сообщение Из ПараметрыЖурнала.МассивОшибок Цикл + МассивСообщений.Добавить(Сообщение); + КонецЦикла; + КонецЕсли; + + Если СтрокаТаблицы.Выполнена Тогда + Выполнено = Выполнено + 1; + Если СтрокаТаблицы.СОшибками Тогда + СОшибками = СОшибками + 1; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Результат = Новый Структура("Оповестить, Заголовок, Текст, ТекстОшибок"); + + Всего = ТаблицаРассылок.Количество(); + Подготовлено = Подготовленные.Количество(); + НеВыполнено = Подготовлено - Выполнено; + + Если Всего <= 5 Тогда + Результат.Текст = ""; + Для Каждого СтрокаТаблицы Из ТаблицаРассылок Цикл + Если НЕ СтрокаТаблицы.Подготовлена Тогда + ШаблонСообщения = НСтр("ru = 'Рассылка %1 не подготовлена'"); + ИначеЕсли НЕ СтрокаТаблицы.Выполнена Тогда + ШаблонСообщения = НСтр("ru = 'Рассылка %1 не выполнена'"); + ИначеЕсли СтрокаТаблицы.СОшибками Тогда + ШаблонСообщения = НСтр("ru = 'Рассылка %1 выполнена с ошибками'"); + Иначе + ШаблонСообщения = НСтр("ru = 'Рассылка %1 выполнена'"); + КонецЕсли; + + Результат.Текст = Результат.Текст + + ?(Результат.Текст= "", "", Символы.ПС + Символы.ПС) + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСообщения, + "'"+ СтрокаТаблицы.Представление +"'" + ); + КонецЦикла; + Иначе + Результат.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Подготовлено рассылок: %1 из %2 + |Выполнено: %3 + |С ошибками: %4 + |Не выполнено: %5'"), + Формат(Подготовлено, "ЧН=0; ЧГ=0"), Формат(Всего, "ЧН=0; ЧГ=0"), + Формат(Выполнено, "ЧН=0; ЧГ=0"), + Формат(СОшибками, "ЧН=0; ЧГ=0"), + Формат(НеВыполнено, "ЧН=0; ЧГ=0") + ); + КонецЕсли; + + Результат.Оповестить = Ложь; + Результат.ТекстОшибок = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(МассивСообщений); + Результат.Вставить("ТипДляОбновления", ?(Всего = 1, ТаблицаРассылок[0].Рассылка, Тип("СправочникСсылка.РассылкиОтчетов"))); + + ПоместитьВоВременноеХранилище(Результат, АдресРезультата); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Выполнение регламентных заданий + +// Запускает рассылку и контролирует результат +// +// Параметры: +// Рассылка (СправочникСсылка.РассылкиОтчетов) Рассылка, которая должна быть выполнена +// +Процедура ВыполнитьРассылкуПоРасписанию(Рассылка) Экспорт + + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + // Проверки + Если НЕ Рассылка.ВыполнятьПоРасписанию Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У рассылки отчетов ""%1"" отключен флажок ""Выполнять по расписанию""'"), + Строка(Рассылка) + ); + КонецЕсли; + + // Параметры записи в журнал регистрации + ПараметрыЖурнала = Новый Структура("ИмяСобытия, Метаданные, Данные"); + ПараметрыЖурнала.ИмяСобытия = НСтр("ru = 'Рассылка отчетов. Запуск по расписанию'"); + ПараметрыЖурнала.Метаданные = Рассылка.Метаданные(); + ПараметрыЖурнала.Данные = Рассылка; + + // Рассылка + ПодготовитьПараметрыИВыполнитьРассылку(Рассылка, ПараметрыЖурнала); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции + +// Формирует список получателей из табличной части "Получатели" рассылки +// +// Параметры: +// Рассылка (СправочникСсылка.РассылкиОтчетов, Структура) - Элемент справочника, для которого необходимо сформировать список получателей +// +// Возвращаемое значение: +// Результат (Структура) +// |- Получатели (Соответствие) - см. функцию ВыполнитьРассылку, параметр ПараметрыДоставки.Получатели +// |- Ошибки (Строка) - Ошибки, которые возникли в процессе +// +Функция СформироватьСписокПолучателейРассылки(ПараметрыЖурнала, Рассылка) Экспорт + + ВидКИ = Рассылка.ВидПочтовогоАдресаПолучателей; + + Если Рассылка.Личная Тогда + + РеквизитыТЧ = Метаданные.Справочники.РассылкиОтчетов.ТабличныеЧасти.Получатели.Реквизиты; + + ТипПолучателей = ТипЗнч(Рассылка.Автор); + ТаблицаПолучателей = Новый ТаблицаЗначений; + Для Каждого Реквизит Из РеквизитыТЧ Цикл + ТаблицаПолучателей.Колонки.Добавить(Реквизит.Имя, Реквизит.Тип); + КонецЦикла; + ТаблицаПолучателей.Добавить().Получатель = Рассылка.Автор; + + Иначе + + ТипПолучателей = Рассылка.ТипПолучателейРассылки.КлючОбъектаМетаданных.Получить(); + ТаблицаПолучателей = Рассылка.Получатели.Выгрузить(); + + КонецЕсли; + + СписокПолучателей = Новый Соответствие; + + ШаблонСообщенияОбОшибке = НСтр("ru = 'При формировании списка получателей %1 возникла ошибка:'"); + + Если ТипПолучателей = Тип("СправочникСсылка.Пользователи") Тогда + + ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаПолучателей.Получатель, + | ТаблицаПолучателей.Исключен + |ПОМЕСТИТЬ втТаблицаПолучателей + |ИЗ + | &ТаблицаПолучателей КАК ТаблицаПолучателей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | МАКСИМУМ(РассылкиОтчетовПолучатели.Исключен) КАК Исключен, + | СоставыГруппПользователей.Пользователь + |ПОМЕСТИТЬ втПолучатели + |ИЗ + | втТаблицаПолучателей КАК РассылкиОтчетовПолучатели + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО РассылкиОтчетовПолучатели.Получатель = СоставыГруппПользователей.ГруппаПользователей + | И (СоставыГруппПользователей.ГруппаПользователей.ПометкаУдаления = ЛОЖЬ) + |ГДЕ + | СоставыГруппПользователей.Пользователь ССЫЛКА Справочник.Пользователи + | И СоставыГруппПользователей.Пользователь.ПометкаУдаления = ЛОЖЬ + | + |СГРУППИРОВАТЬ ПО + | СоставыГруппПользователей.Пользователь + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | втПолучатели.Пользователь КАК Получатель, + | тчКонтактнаяИнформация.Представление КАК EMail + |ИЗ + | втПолучатели КАК втПолучатели + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК тчКонтактнаяИнформация + | ПО втПолучатели.Пользователь = тчКонтактнаяИнформация.Ссылка + |ГДЕ + | втПолучатели.Исключен = ЛОЖЬ + | И тчКонтактнаяИнформация.Вид = &ВидКИ"; + + Иначе + + ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаПолучателей.Получатель, + | ТаблицаПолучателей.Исключен + |ПОМЕСТИТЬ втТаблицаПолучателей + |ИЗ + | &ТаблицаПолучателей КАК ТаблицаПолучателей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | СпрПолучателей.Ссылка КАК Получатель, + | тчКонтактнаяИнформация.Представление КАК EMail + |ИЗ + | Справочник.Пользователи КАК СпрПолучателей + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК тчКонтактнаяИнформация + | ПО (тчКонтактнаяИнформация.Ссылка = СпрПолучателей.Ссылка) + | И (тчКонтактнаяИнформация.Вид = &ВидКИ) + |ГДЕ + | СпрПолучателей.Ссылка В ИЕРАРХИИ + | (ВЫБРАТЬ + | Получатели.Получатель + | ИЗ + | втТаблицаПолучателей КАК Получатели + | ГДЕ + | Получатели.Исключен = ЛОЖЬ) + | И (НЕ СпрПолучателей.Ссылка В ИЕРАРХИИ + | (ВЫБРАТЬ + | ИсключенияПолучателей.Получатель + | ИЗ + | втТаблицаПолучателей КАК ИсключенияПолучателей + | ГДЕ + | ИсключенияПолучателей.Исключен = ИСТИНА)) + | И СпрПолучателей.ПометкаУдаления = ЛОЖЬ + | И &ЭтоНеГруппа"; + + УстановитьПривилегированныйРежим(Истина); + ПолучателиМД = Метаданные.НайтиПоТипу(ТипПолучателей); + УстановитьПривилегированныйРежим(Ложь); + + Если НЕ ПолучателиМД.Иерархический Тогда + // Не иерархический + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "В ИЕРАРХИИ", "В"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ЭтоНеГруппа", ""); + ИначеЕсли ПолучателиМД.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияЭлементов Тогда + // Иерархия элементов + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ЭтоНеГруппа", ""); + Иначе + // Иерархия групп + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ЭтоНеГруппа", "И СпрПолучателей.ЭтоГруппа = ЛОЖЬ"); + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Пользователи", ПолучателиМД.Имя); + + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТаблицаПолучателей", ТаблицаПолучателей); + Если ЗначениеЗаполнено(ВидКИ) Тогда + Запрос.УстановитьПараметр("ВидКИ", ВидКИ); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".Вид = &ВидКИ", ".Тип = &ТипКИ"); + Запрос.УстановитьПараметр("ТипКИ", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); + КонецЕсли; + Запрос.Текст = ТекстЗапроса; + + // Механизм расширения + Попытка + СтандартнаяОбработка = Истина; + РассылкаОтчетовПереопределяемый.ПередФормированиемСпискаПолучателейРассылки(Рассылка, Запрос, СтандартнаяОбработка, СписокПолучателей); + Если СтандартнаяОбработка <> Истина Тогда + Возврат СписокПолучателей; + КонецЕсли; + Исключение + ЗаписьЖурнала(ПараметрыЖурнала, , + ШаблонСообщенияОбОшибке, ИнформацияОбОшибке(), + "'"+ Строка(ТипПолучателей) +"'" + ); + Возврат СписокПолучателей; + КонецПопытки; + + // Стандартная обработка + Попытка + ТЗИтог = Запрос.Выполнить().Выгрузить(); + Исключение + ЗаписьЖурнала(ПараметрыЖурнала, , + ШаблонСообщенияОбОшибке, ИнформацияОбОшибке(), + "'"+ Строка(ТипПолучателей) +"'" + ); + Возврат СписокПолучателей; + КонецПопытки; + + Для Каждого СтрИтог Из ТЗИтог Цикл + Если НЕ ЗначениеЗаполнено(СтрИтог.EMail) Тогда + Продолжить; + КонецЕсли; + + ТекущийАдрес = СписокПолучателей.Получить(СтрИтог.Получатель); + Если ТекущийАдрес = Неопределено Тогда + СписокПолучателей.Вставить(СтрИтог.Получатель, СтрИтог.EMail); + Иначе + Если Найти(ВРег(ТекущийАдрес), ВРег(СтрИтог.EMail)) = 0 Тогда + СписокПолучателей.Вставить(СтрИтог.Получатель, ТекущийАдрес +"; "+ СтрИтог.EMail); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если СписокПолучателей.Количество() = 0 Тогда + ТекстОшибок = НСтр("ru = 'Не удалось сформировать список получателей %1 рассылки %2 по одной из возможных причин: + | - У получателей не заполнен почтовый адрес %3 + | - Не заполнен список получателей + | - Выбраны пустые группы получателей + | - Получатели помечены на удаление + | - Недостаточно прав доступа к справочнику'"); + + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + ТекстОшибок, "", + "'"+ Строка(ТипПолучателей) +"'", + "'"+ Строка(ПараметрыЖурнала.Данные) +"'", + "'"+ Строка(ВидКИ) +"'" + ); + КонецЕсли; + + Возврат СписокПолучателей; +КонецФункции // СформироватьСписокПолучателейРассылки() + +// Подключает, проверяет и инициализирует отчет по ссылке, используется перед формированием или редактированием параметров +// +// Параметры: +// ПараметрыОтчета (Структура) - Начальные параметры +// - Отчет и его Настройки (см. Возвращаемое значение) +// ПерсонализацияВозможна (Булево) - Возможность персонализации отчета +// Истина - отчет может быть персонализирован +// Ложь - отчет не может быть персонализирован +// УникальныйИдентификаторФормы (УникальныйИдентификатор) +// - Если заполнен, то схема компоновки данных будет помещена во временное хранилище вплоть до закрытия формы +// +// Изменяемые параметры: +// ПараметрыОтчета (Структура) - Набор параметров, получаемый в процессе проверки и подключения отчета +// Начальные параметры: +// |- Отчет (СправочникСсылка.ВариантыОтчетов, СправочникСсылка.ДополнительныеОтчетыИОбработки) +// | Отчет, который необходимо инициализировать +// |- Настройки (Неопределено, ПользовательскиеНастройкиКомпоновкиДанных, ТаблицаЗначений) +// | Настройки отчета, которые необходимо использовать, +// | подробнее см. процедуру "ЗаписатьНастройкиСтрокиОтчеты" модуля "Справочник.РассылкиОтчетов.ФормаОбъекта" +// +// Общие параметры: +// |- Имя (Строка) - Имя объекта метаданных отчета +// |- ЭтоВариант (Булево) - Истина - используется справочник "ВариантыОтчетов", +// Ложь - "ДополнительныеОтчетыИОбработки" +// |- СКД (Булево) - Истина - отчет принадлежит Системе Компоновки Данных, +// Ложь - это произвольный отчет +// |- Метаданные (ОбъектМетаданных) - Метаданные отчета +// |- Объект (ОтчетОбъект.*) - Объект отчета +// +// Параметры, которые заполняеются для СКД отчетов: +// |- СхемаКД (СхемаКомпоновкиДанных) - ... +// |- КомпоновщикНастроекКД (КомпоновщикНастроекКомпоновкиДанных) - ... +// |- АдресСхемыКД (Строка) - Адрес схемы компоновки данных во временном хранилище, +// используется только если передано значение УникальныйИдентификаторФормы +// |- НастройкиКД (НастройкиКомпоновкиДанных) - ... +// +// Параметры, которые заполняеются для произвольных отчетов: +// |- ДоступныеРеквизиты (Структура) - Набор доступных реквизитов +// |- Ключ (Строка) - Имя реквизита +// |- Значение (Структура) - Представление и тип реквизита +// |- Представление (Строка) +// |- Тип (ОписаниеТипов) +// +// Результат работы: +// |- Инициализирован (Булево) - Истина, если инициализация прошла успешно +// |- Ошибки (Строка) - ... +// +Функция ИнициализироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, ПерсонализацияВозможна, УникальныйИдентификаторФормы = Неопределено) Экспорт + + // Проверка повторной инициализации + Если ПараметрыОтчета.Свойство("Инициализирован") Тогда + Возврат ПараметрыОтчета.Инициализирован; + КонецЕсли; + + ПараметрыОтчета.Вставить("Инициализирован", Ложь); + ПараметрыОтчета.Вставить("Ошибки", ""); + ПараметрыОтчета.Вставить("Персонализирован", Ложь); + ПараметрыОтчета.Вставить("ПерсональныеОтборы", Новый Соответствие); + + // Определение структуры настроек + МассивРеквизитов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( + "Имя, ЭтоВариант, СКД, Метаданные, Объект, " + // общие параметры + "СхемаКД, КомпоновщикНастроекКД, АдресСхемыКД, НастройкиКД, " + // параметры СКД отчетов + "ДоступныеРеквизиты", // параметры произвольных отчетов + ); + Для Каждого ИмяРеквизита Из МассивРеквизитов Цикл + ИмяРеквизита = СокрЛП(ИмяРеквизита); + Если НЕ ПараметрыОтчета.Свойство(ИмяРеквизита) Тогда + ПараметрыОтчета.Вставить(ИмяРеквизита); + КонецЕсли; + КонецЦикла; + + // Безовые проверки и настройки отчета + ПараметрыОтчета.ЭтоВариант = (ТипЗнч(ПараметрыОтчета.Отчет) = Тип("СправочникСсылка.ВариантыОтчетов")); + Если ПараметрыОтчета.ЭтоВариант Тогда + + ПараметрыОтчета.Имя = СокрЛП(СтрЗаменить(ПараметрыОтчета.Отчет.КлючОбъекта, "Отчет.", "")); + ПараметрыОтчета.Метаданные = Метаданные.Отчеты.Найти(ПараметрыОтчета.Имя); + Если ПараметрыОтчета.Метаданные = Неопределено Тогда + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + НСтр("ru = 'Для варианта %1 отчет %2 не найден в системе'"), , + "'"+ Строка(ПараметрыОтчета.Отчет) +"'", + "'"+ ПараметрыОтчета.Имя +"'" + ); + Возврат ПараметрыОтчета.Инициализирован; + КонецЕсли; + + ПараметрыОтчета.Объект = Отчеты[ПараметрыОтчета.Имя].Создать(); + + Иначе + + ЗаголовокСообщенияОбОшибке = НСтр("ru = 'Ошибка подключения дополнительного отчета %1:'"); + + Результат = Неопределено; + СведенияОВнешнейОбработке = Неопределено; + Попытка + РассылкаОтчетовПереопределяемый.ПодключитьДополнительныйОтчет(ПараметрыОтчета.Отчет, ПараметрыОтчета, Результат); + СведенияОВнешнейОбработке = ПараметрыОтчета.Объект.СведенияОВнешнейОбработке(); + Исключение + ЗаписьЖурнала(ПараметрыЖурнала, , + ЗаголовокСообщенияОбОшибке, ИнформацияОбОшибке(), + "'"+ Строка(ПараметрыОтчета.Отчет) +"'" + ); + КонецПопытки; + + Если Результат <> Истина Тогда + Если Результат = Неопределено Тогда + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + ЗаголовокСообщенияОбОшибке, НСтр("ru = 'Подсистема ''Дополнительные отчеты и обработки'' недоступна.'"), + "'"+ Строка(ПараметрыОтчета.Отчет) +"'" + ); + КонецЕсли; + Возврат ПараметрыОтчета.Инициализирован; + КонецЕсли; + + // Проверки на соответствия требованиям подсистемы + Если ТипЗнч(СведенияОВнешнейОбработке) <> Тип("Структура") Тогда + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + ЗаголовокСообщенияОбОшибке, НСтр("ru = 'Неверно заполнены сведения о внешней обработке.'"), + "'"+ Строка(ПараметрыОтчета.Отчет) +"'" + ); + Возврат ПараметрыОтчета.Инициализирован; + КонецЕсли; + + Если НЕ СведенияОВнешнейОбработке.Свойство("РассылкаОтчетов") ИЛИ СведенияОВнешнейОбработке.РассылкаОтчетов <> Истина Тогда + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + ЗаголовокСообщенияОбОшибке, НСтр("ru = 'Не указаны сведения о внешней обработке, необходимые для рассылки.'"), + "'"+ Строка(ПараметрыОтчета.Отчет) +"'" + ); + Возврат ПараметрыОтчета.Инициализирован; + КонецЕсли; + + КонецЕсли; + + // Определение принадлежности отчета к Системе Компоновки Данных + Если ТипЗнч(ПараметрыОтчета.Настройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда + ПараметрыОтчета.СКД = Истина; + ИначеЕсли ТипЗнч(ПараметрыОтчета.Настройки) = Тип("ТаблицаЗначений") Тогда + ПараметрыОтчета.СКД = Ложь; + ИначеЕсли ТипЗнч(ПараметрыОтчета.Настройки) = Тип("Структура") Тогда + ПараметрыОтчета.СКД = Ложь; + Иначе + ПараметрыОтчета.СКД = (ПараметрыОтчета.Объект.СхемаКомпоновкиДанных <> Неопределено); + КонецЕсли; + + // Инициализация отчета и заполнение его параметров + Если ПараметрыОтчета.СКД Тогда + // + ОпределенИдентификаторФормы = (ТипЗнч(УникальныйИдентификаторФормы) = Тип("УникальныйИдентификатор")); + + // Схема компоновки, на основании которой будет выполняться отчет. + ПараметрыОтчета.СхемаКД = ПараметрыОтчета.Объект.СхемаКомпоновкиДанных; + + // Если передан идентификатор формы, то схема должна хранится пока живет форма (особенность СКД) + Если ОпределенИдентификаторФормы Тогда + ПараметрыОтчета.АдресСхемыКД = ПоместитьВоВременноеХранилище( + ПараметрыОтчета.Объект.СхемаКомпоновкиДанных, + УникальныйИдентификаторФормы + ); + КонецЕсли; + + // Описывает связь настроек компоновки данных и схемы компоновки данных. + ПараметрыОтчета.КомпоновщикНастроекКД = ПараметрыОтчета.Объект.КомпоновщикНастроек; + + // Краткий синоним + КомпоновщикНастроекКД = ПараметрыОтчета.КомпоновщикНастроекКД; + + // Выполняет инициализацию компоновщика и его настроек (Настройки) источником доступных настроек. + КомпоновщикНастроекКД.Инициализировать( + Новый ИсточникДоступныхНастроекКомпоновкиДанных( + ?(ОпределенИдентификаторФормы, ПараметрыОтчета.АдресСхемыКД, ПараметрыОтчета.СхемаКД) + ) + ); + + // Настройка компоновки данных в целом. + Если ПараметрыОтчета.ЭтоВариант Тогда + ПараметрыОтчета.НастройкиКД = ПараметрыОтчета.Отчет.ХранилищеЗначений.Получить(); + Если ПараметрыОтчета.НастройкиКД = Неопределено Тогда + ВариантыНастроекКД = ПараметрыОтчета.СхемаКД.ВариантыНастроек; + КлючВарианта = ПараметрыОтчета.Отчет.КлючВарианта; + ВариантНастроекКД = ВариантыНастроекКД.Найти(КлючВарианта); + Если ВариантНастроекКД = Неопределено Тогда + ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Вариант %1 не найден для отчета %2'"), + "'"+ Строка(ПараметрыОтчета.Отчет) +"'", + "'"+ ПараметрыОтчета.Имя +"'" + ); + Возврат ПараметрыОтчета.Инициализирован; + КонецЕсли; + ПараметрыОтчета.НастройкиКД = ВариантНастроекКД.Настройки; + КонецЕсли; + Иначе + ПараметрыОтчета.НастройкиКД = ПараметрыОтчета.СхемаКД.НастройкиПоУмолчанию; + КонецЕсли; + + // Загружает настройки в компоновщик. + КомпоновщикНастроекКД.ЗагрузитьНастройки(ПараметрыОтчета.НастройкиКД); + + // Восстановление сохраненных значений + Если ТипЗнч(ПараметрыОтчета.Настройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда + КомпоновщикНастроекКД.ЗагрузитьПользовательскиеНастройки(ПараметрыОтчета.Настройки); + КонецЕсли; + + //// Восстановление работоспособности настроек + //КомпоновщикНастроекКД.Восстановить(); + + // Персональные отборы + Если ПерсонализацияВозможна Тогда + ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; + + Для Каждого Настройка Из ПользовательскиеНастройкиКД.Элементы Цикл + Если ТипЗнч(Настройка) = Тип("ЭлементОтбораКомпоновкиДанных") + И Настройка.Использование + И ТипЗнч(Настройка.ПравоеЗначение) = Тип("Строка") Тогда + + ЗначениеНастройки = Настройка.ПравоеЗначение; + + ИначеЕсли ТипЗнч(Настройка) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") + И Настройка.Использование + И ТипЗнч(Настройка.Значение) = Тип("Строка")Тогда + + ЗначениеНастройки = Настройка.Значение; + + Иначе + + Продолжить; + + КонецЕсли; + + Если ЗначениеНастройки = "[Получатель]" Тогда + ПараметрыОтчета.ПерсональныеОтборы.Вставить(ПользовательскиеНастройкиКД.ПолучитьИдентификаторПоОбъекту(Настройка)); + КонецЕсли; + КонецЦикла; + КонецЕсли; // ПерсонализацияВозможна + + Иначе // НЕ ПараметрыОтчета.СКД + + // Доступные реквизиты отчета + ПараметрыОтчета.ДоступныеРеквизиты = Новый Структура; + Для Каждого Реквизит Из ПараметрыОтчета.Метаданные.Реквизиты Цикл + ПараметрыОтчета.ДоступныеРеквизиты.Вставить(Реквизит.Имя, + Новый Структура("Представление, Тип", Реквизит.Представление(), Реквизит.Тип) + ); + КонецЦикла; + + Если ЗначениеЗаполнено(ПараметрыОтчета.Настройки) Тогда + + // Проверка наличия реквизитов + // Подготовка соответствий персональных отборов + // Установка статичных значений реквизитов + Для Каждого КлючИЗначение Из ПараметрыОтчета.Настройки Цикл + Настройка = КлючИЗначение.Ключ; + ЗначениеНастройки = КлючИЗначение.Значение; + + // Доступность реквизита + Если НЕ ПараметрыОтчета.ДоступныеРеквизиты.Свойство(Настройка) Тогда + Продолжить; + КонецЕсли; + + // Принадлежность к механизму персонализации + Если ПерсонализацияВозможна И ЗначениеНастройки = "[Получатель]" Тогда + // Регистрация поля персонального отбора + ПараметрыОтчета.ПерсональныеОтборы.Вставить(Настройка); + Иначе + // Установка значения реквизита объекта отчета + ПараметрыОтчета.Объект[Настройка] = ЗначениеНастройки; + КонецЕсли; + + КонецЦикла; // Для Каждого КлючИЗначение Из ПараметрыОтчета.Настройки Цикл + + КонецЕсли; // ЗначениеЗаполнено(ПараметрыОтчета.Настройки) + + КонецЕсли; // Если ПараметрыОтчета.СКД Тогда + + // + ПараметрыОтчета.Персонализирован = (ПараметрыОтчета.ПерсональныеОтборы.Количество() > 0); + + // + ПараметрыОтчета.Инициализирован = Истина; + + // + Возврат ПараметрыОтчета.Инициализирован; +КонецФункции + +// Формирует отчет, проверяя что результат пустой +// +// Параметры: +// ПараметрыЖурнала (Структура) - Параметры записи в журнал регистрации. См. описание к процедуре "ЗаписьЖурнала". +// ПараметрыОтчета (Структура) - См. возвращаемое значение функции "ИнициализироватьОтчет" +// Получатель (СправочникСсылка.*) - ... +// +// Возвращаемое значение: +// Результат (Структура) +// |- ТабДок (ТабличныйДокумент) - результат формирования отчета +// |- Пустой (Булево) - Истина, если отчет не содержал ни одного значения параметра +// +Функция СформироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, Получатель = Неопределено) Экспорт + Результат = Новый Структура("ТабДок, СФормирован, Пустой", Новый ТабличныйДокумент, Ложь, Истина); + + Если НЕ ПараметрыОтчета.Свойство("Инициализирован") Тогда + ЗаписьЖурнала(ПараметрыЖурнала, , + НСтр("ru = 'Отчет ''%1'' не инициализирован'"), , + Строка(ПараметрыОтчета.Отчет) + ); + Возврат Результат; + КонецЕсли; + + ОтчетОбъект = ПараметрыОтчета.Объект; + + Если ПараметрыОтчета.СКД Тогда + + КомпоновщикНастроекКД = ПараметрыОтчета.КомпоновщикНастроекКД; + СхемаКД = ПараметрыОтчета.СхемаКД; + + // Заполнение персонализированных данных получателей. + Если Получатель <> Неопределено И ПараметрыОтчета.Свойство("ПерсональныеОтборы") Тогда + ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; + БылиОшибки = Ложь; + Для Каждого КлючИЗначение Из ПараметрыОтчета.ПерсональныеОтборы Цикл + Настройка = ПользовательскиеНастройкиКД.ПолучитьОбъектПоИдентификатору(КлючИЗначение.Ключ); + Если ТипЗнч(Настройка) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Настройка.ПравоеЗначение = Получатель; + ИначеЕсли ТипЗнч(Настройка) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Настройка.Значение = Получатель; + КонецЕсли; + КонецЦикла; + Если БылиОшибки Тогда + Возврат Результат; + КонецЕсли; + КонецЕсли; + + ИсходныеСообщенияПользователю = ПолучитьСообщенияПользователю(Истина); + Если НЕ ОтчетОбъект.ПроверитьЗаполнение() Тогда + ТекстИсключения = ""; + СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); + Для Каждого Сообщение Из СообщенияПользователю Цикл + ТекстИсключения = ТекстИсключения + Символы.ПС + Сообщение.Текст; + КонецЦикла; + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + НСтр("ru = 'Отчет ''%1'' не прошел проверку заполнения:'"), СокрЛ(ТекстИсключения), + Строка(ПараметрыОтчета.Отчет) + ); + Результат.ТабДок = Неопределено; + Возврат Результат; + КонецЕсли; + Для Каждого Сообщение Из ИсходныеСообщенияПользователю Цикл + Сообщение.Сообщить(); + КонецЦикла; + + // Формирование табличного документа. + ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабДок); + Результат.Сформирован = Истина; + + // Пропуск проверки на то, что отчет пустой. + Если ПараметрыОтчета.ОтправлятьЕслиПустой Тогда + Результат.Пустой = Ложь; + Возврат Результат; + КонецЕсли; + + // Передача флажка "ОтчетПустой" из отчета. + Если ОтчетОбъект.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("ОтчетПустой") Тогда + Результат.Пустой = ОтчетОбъект.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.ОтчетПустой; + Возврат Результат; + ИначеЕсли ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Свойство("ОтчетПустой") Тогда + Результат.Пустой = ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.ОтчетПустой; + Возврат Результат; + КонецЕсли; + + // Объект для создания макета компоновки данных. + КомпоновщикМакетаКД = Новый КомпоновщикМакетаКомпоновкиДанных; + + // Выполняет компоновку макета. + МакетКД = КомпоновщикМакетаКД.Выполнить(СхемаКД, КомпоновщикНастроекКД.ПолучитьНастройки()); + + // Пропуск проверки на то, что отчет пустой. + Если ЕстьВнешнийНаборДанных(МакетКД.НаборыДанных) Тогда + Результат.Пустой = Ложь; + Возврат Результат; + КонецЕсли; + + // Объект, выполняющий компоновку данных. + ПроцессорКД = Новый ПроцессорКомпоновкиДанных; + + // Инициализировать объект. + ПроцессорКД.Инициализировать(МакетКД, , , Истина); + + // Объект для вывода результата компоновки в табличный документ. + ПроцессорВыводаРезультатаКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + + // Устанавливает табличный документ, в который нужно выводить результат. + ПроцессорВыводаРезультатаКД.УстановитьДокумент(Новый ТабличныйДокумент); + + // Последовательный вывод + ПроцессорВыводаРезультатаКД.НачатьВывод(); + + // Получает следующий элемент результата компоновки. + ЭлементРезультатаКД = ПроцессорКД.Следующий(); + Пока ЭлементРезультатаКД <> Неопределено Цикл + + // Вывести элемент результата компоновки отчета в документ. + ПроцессорВыводаРезультатаКД.ВывестиЭлемент(ЭлементРезультатаКД); + + // Определить не пустой результат + Если Результат.Пустой Тогда + Для Каждого ЗначениеПараметраМакетаКД Из ЭлементРезультатаКД.ЗначенияПараметров Цикл + Если ЗначениеЗаполнено(ЗначениеПараметраМакетаКД.Значение) Тогда + ПроцессорВыводаРезультатаКД.ЗакончитьВывод(); + Результат.Пустой = Ложь; + Возврат Результат; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + // Получает следующий элемент результата компоновки. + ЭлементРезультатаКД = ПроцессорКД.Следующий(); + КонецЦикла; + + // Указание объекту о том, что вывод результата завершен. + ПроцессорВыводаРезультатаКД.ЗакончитьВывод(); + + Иначе + + // Заполнение значения персонализированных отборов произвольных отчетов + Если Получатель <> Неопределено И ПараметрыОтчета.Свойство("ПерсональныеОтборы") Тогда + БылиОшибки = Ложь; + Для Каждого КлючИЗначение Из ПараметрыОтчета.ПерсональныеОтборы Цикл + ОтчетОбъект[КлючИЗначение.Ключ] = Получатель; + КонецЦикла; + Если БылиОшибки Тогда + Возврат Результат; + КонецЕсли; + КонецЕсли; + + // Формирование произвольного отчета + Результат.ТабДок = ОтчетОбъект.Сформировать(); + Результат.Сформирован = Истина; + + Если ТипЗнч(Результат.ТабДок) = Тип("ТабличныйДокумент") Тогда + Результат.Пустой = Ложь; + Иначе + Результат.ТабДок = Новый ТабличныйДокумент; + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Выполняет транспортировку вложений для всех способов доставки +// +// Параметры: +// Автор (СправочникСсылка.*) - Автор рассылки +// ПараметрыДоставки (Структура) - см. функцию ВыполнитьРассылку +// Вложения (Соответствие) - см. функцию ДобавитьОтчетыВоВложения +// +// Возвращаемое значение: +// Результат (Структура) +// |- Доставка (Строка) - Представление способа доставки +// |- Выполнена (Булево) - Флаг того, что доставка выполнена как минимум одним из способов +// +Функция ВыполнитьДоставку(ПараметрыЖурнала, ПараметрыДоставки, Вложения) Экспорт + Результат = Ложь; + ШаблонСообщенияОбОшибке = НСтр("ru = 'Ошибка доставки отчетов'"); + + Если ПараметрыДоставки.ИспользоватьСетевойКаталог Тогда + + СетевойКаталогСервера = ПараметрыДоставки.СетевойКаталогWindows; + СистемнаяИнформация = Новый СистемнаяИнформация; + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 + ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда + СетевойКаталогСервера = ПараметрыДоставки.СетевойКаталогLinux; + КонецЕсли; + + Попытка + Для Каждого Вложение Из Вложения Цикл + КопироватьФайл(Вложение.Значение, СетевойКаталогСервера + Вложение.Ключ); + Если ПараметрыДоставки.ДобавлятьСсылки <> "" Тогда + ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СтрЗаменить( + ПараметрыДоставки.ПредставлениеОтчетовПолучателя, + Вложение.Значение, + ПараметрыДоставки.СетевойКаталогWindows + Вложение.Ключ + ); + КонецЕсли; + КонецЦикла; + Результат = Истина; + ПараметрыДоставки.ВыполненаВСетевойКаталог = Истина; + Исключение + ЗаписьЖурнала(ПараметрыЖурнала, , + ШаблонСообщенияОбОшибке, ИнформацияОбОшибке() + ); + КонецПопытки; + + КонецЕсли; // ПараметрыДоставки.ИспользоватьСетевойКаталог + + Если ПараметрыДоставки.ИспользоватьFTPРесурс Тогда + + Цель = "ftp://"+ ПараметрыДоставки.Сервер +":"+ Формат(ПараметрыДоставки.Порт, "ЧН=0; ЧГ=0") + ПараметрыДоставки.Каталог; + + Попытка + Прокси = Неопределено; + РассылкаОтчетовПереопределяемый.НастройкиПроксиНаСервере(Прокси); + Соединение = Новый FTPСоединение( + ПараметрыДоставки.Сервер, + ПараметрыДоставки.Порт, + ПараметрыДоставки.Логин, + ПараметрыДоставки.Пароль, + Прокси, + ПараметрыДоставки.ПассивноеСоединение, + 15 + ); + Соединение.УстановитьТекущийКаталог(ПараметрыДоставки.Каталог); + Для Каждого Вложение Из Вложения Цикл + Соединение.Записать(Вложение.Значение, ПараметрыДоставки.Каталог + Вложение.Ключ); + Если ПараметрыДоставки.ДобавлятьСсылки <> "" Тогда + ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СтрЗаменить( + ПараметрыДоставки.ПредставлениеОтчетовПолучателя, + Вложение.Значение, + Цель + Вложение.Ключ + ); + КонецЕсли; + КонецЦикла; + + Результат = Истина; + ПараметрыДоставки.ВыполненаНаFTP = Истина; + Исключение + ЗаписьЖурнала(ПараметрыЖурнала, , + ШаблонСообщенияОбОшибке, ИнформацияОбОшибке(), + ); + КонецПопытки; + + КонецЕсли; // ПараметрыДоставки.ИспользоватьFTPРесурс + + Если ПараметрыДоставки.ИспользоватьПапку Тогда + + Попытка + РассылкаОтчетовПереопределяемый.ВыполнитьДоставкуВПапку(ПараметрыДоставки, Вложения); + Результат = Истина; + ПараметрыДоставки.ВыполненаВПапку = Истина; + Исключение + ЗаписьЖурнала(ПараметрыЖурнала, , + ШаблонСообщенияОбОшибке, ИнформацияОбОшибке() + ); + КонецПопытки; + + КонецЕсли; // ПараметрыДоставки.ИспользоватьПапку + + Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда + + Если ПараметрыДоставки.ТолькоУведомить Тогда + ШаблонСообщенияОбОшибке = НСтр("ru = 'Ошибка отправки уведомлений по электронной почте:'"); + ВложенияПисьма = Новый Соответствие; + Иначе + ШаблонСообщенияОбОшибке = НСтр("ru = 'Ошибка отправки отчетов по электронной почте:'"); + ВложенияПисьма = Вложения; + КонецЕсли; + + Попытка + ОтправитьОтчетыПолучателю(ВложенияПисьма, ПараметрыДоставки); + Если НЕ ПараметрыДоставки.ТолькоУведомить Тогда + Результат = Истина; + КонецЕсли; + Если Результат = Истина Тогда + ПараметрыДоставки.ВыполненаПоЭлектроннойПочте = Истина; + КонецЕсли; + Исключение + ЗаписьЖурнала(ПараметрыЖурнала, , + ШаблонСообщенияОбОшибке, ИнформацияОбОшибке() + ); + КонецПопытки; + + КонецЕсли; // ПараметрыДоставки.ИспользоватьЭлектроннуюПочту + + Возврат Результат; +КонецФункции + +// Получает имя пользователя базы данных по ссылке справочника "Пользователи" +// +// Параметры: +// Пользователь - (СправочникСсылка.Пользователи) +// +// Возвращаемое значение: (Строка) Имя пользователя +// +Функция ПолучитьИмяПользователяИБ(Пользователь) Экспорт + Если НЕ ЗначениеЗаполнено(Пользователь) Тогда + Возврат Неопределено; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ОбщегоНазначения.ПолучитьЗначениеРеквизита(Пользователь, "ИдентификаторПользователяИБ") + ); + Если ПользовательИБ = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат ПользовательИБ.Имя; +КонецФункции // ПолучитьИмяПользователяИБ + +// Создает запись в журнале регистрации и сообщениях пользователю, +// Поддерживает до 4х параметров в комментарии при помощи функции +// СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку +// Поддерживает передачу информации об обшибке, подробное представление +// ошибки добавляется в комментарий записи в журнал регистрации +// +// Параметры: +// ПараметрыЖурнала (Структура) Параметры записи в журнал регистрации +// |- ИмяСобытия (Строка) Имя события (или группы событий) +// |- Метаданные (ОбъектМетаданных) Метаданные для привязки события журнала регистрации +// |- Данные (*) Данные для привязки события журнала регистрации +// УровеньЖурнала (УровеньЖурналаРегистрации) Уровень важности события +// КомментарийСПараметрами (Строка) Комментарий, можно передавать с параметрами %1, %2, %3 и %4 +// ИнформацияОбОшибке (...) Информация об ошибке, которая будет размещена +// |- (ИнформацияОбОшибке) в комментарии к записи журнала регистрации +// |- (Строка) +// Параметр1 (Строка) Для подстановки в комментарий вместо %1 +// Параметр2 (Строка) Для подстановки в комментарий вместо %2 +// Параметр3 (Строка) Для подстановки в комментарий вместо %3 +// Параметр4 (Строка) Для подстановки в комментарий вместо %4 +// +Процедура ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурнала = Неопределено, КомментарийСПараметрами = "", + ИнформацияОбОшибке = Неопределено, + Параметр1 = Неопределено, + Параметр2 = Неопределено, + Параметр3 = Неопределено, + Параметр4 = Неопределено) Экспорт + + // Определение уровня журнала регистрации на основе типа переданного сообщения об ошибке + Если ТипЗнч(УровеньЖурнала) <> Тип("УровеньЖурналаРегистрации") Тогда + Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда + УровеньЖурнала = УровеньЖурналаРегистрации.Ошибка; + ИначеЕсли ТипЗнч(ИнформацияОбОшибке) = Тип("Строка") Тогда + УровеньЖурнала = УровеньЖурналаРегистрации.Предупреждение; + Иначе + УровеньЖурнала = УровеньЖурналаРегистрации.Информация; + КонецЕсли; + КонецЕсли; + + ЗаписатьВЖурнал = ЗначениеЗаполнено(ПараметрыЖурнала.Данные); + СообщитьПользователю = ПараметрыЖурнала.Свойство("МассивОшибок") И ( + УровеньЖурнала = УровеньЖурналаРегистрации.Ошибка + ИЛИ УровеньЖурнала = УровеньЖурналаРегистрации.Предупреждение + ); + + // Комментарий для журнала регистрации и пользователя + Если Параметр1 <> Неопределено Тогда + КомментарийСПараметрами = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + КомментарийСПараметрами, Параметр1, Параметр2, Параметр3, Параметр4 + ); + КонецЕсли; + + ТекстДляЖурнала = КомментарийСПараметрами; + ТекстДляПользователя = КомментарийСПараметрами; + Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда + ТекстДляЖурнала = ТекстДляЖурнала + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ТекстДляПользователя = ТекстДляПользователя + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + ИначеЕсли ТипЗнч(ИнформацияОбОшибке) = Тип("Строка") Тогда + ТекстДляЖурнала = ТекстДляЖурнала + Символы.ПС + ИнформацияОбОшибке; + ТекстДляПользователя = ТекстДляПользователя + Символы.ПС + ИнформацияОбОшибке; + КонецЕсли; + ТекстДляЖурнала = СокрЛП(ТекстДляЖурнала); + ТекстДляПользователя = СокрЛП(ТекстДляПользователя); + + // Журнал регистрации + Если ЗаписатьВЖурнал Тогда + УстановитьПривилегированныйРежим(Истина); + ЗаписьЖурналаРегистрации( + ПараметрыЖурнала.ИмяСобытия, + УровеньЖурнала, + ПараметрыЖурнала.Метаданные, + ПараметрыЖурнала.Данные, + ТекстДляЖурнала + ); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + Если СообщитьПользователю Тогда + Если УровеньЖурнала = УровеньЖурналаРегистрации.Ошибка Тогда + ПараметрыЖурнала.Вставить("БылиОшибки", Истина); + Иначе + ПараметрыЖурнала.Вставить("БылиПредупреждения", Истина); + КонецЕсли; + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ТекстДляПользователя; + Сообщение.УстановитьДанные(ПараметрыЖурнала.Данные); + Если ПараметрыЖурнала.Свойство("МассивОшибок") Тогда + ПараметрыЖурнала.МассивОшибок.Добавить(Сообщение); + Иначе + Сообщение.Сообщить(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции + +// Помимо формирования отчетов выполняет персонализацию отчетов по списку получателей +// и формирует отчеты в разрезах получателей (если это необходимо) +// +// Параметры: +// ПараметрыЖурнала (Структура) - Параметры записи в журнал регистрации +// |- Префикс (Строка) - Префикс для имени события журнала регистрации +// |- Метаданные (ОбъектМетаданных) - Метаданные для записи в журнал регистрации +// |- Данные (*) - Данные для записи в журнал регистрации +// ПараметрыОтчета (Структура) - см. функцию ВыполнитьРассылку, параметр ТаблицаОтчетов +// ДеревоОтчетов (ТаблицаЗначений) - Список отчетов с результатом формирования в виде табличных документов +// ПараметрыДоставки (Структура) - см. функцию ВыполнитьРассылку +// Получатель (СправочникСсылка.*) - ... +// +// Результат выполнения записывается в ДеревоОтчетов +// Ошибки записываются в журнал регистрации и в сообщения сеанса пользователя +// +Процедура СформироватьИСохранитьОтчет(ПараметрыЖурнала, ПараметрыОтчета, ДеревоОтчетов, ПараметрыДоставки, ПолучательСсылка) + + // Определение корневой строки дерева, соответствующей получателю + // 1 - Получатели + // Ключ - Ссылка + // Значение - каталог получателя + // Настройки - представление сформированных отчетов + СтрокаПолучатель = ОпределитьСтрокуДереваДляПолучателя(ДеревоОтчетов, ПолучательСсылка, ПараметрыДоставки); + КаталогПолучателя = СтрокаПолучатель.Значение; + + // Формирование отчета для получателя + Результат = СформироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, ПолучательСсылка); + + // Проверка результата + Если НЕ Результат.Сформирован ИЛИ (Результат.Пустой И НЕ ПараметрыОтчета.ОтправлятьЕслиПустой) Тогда + Возврат; + КонецЕсли; + + // Регистрация промежуточного результата + // 2 - Табличные документы получателей + // Ключ - Имя отчета + // Значение - Табличный документ + // Настройки - ............. все параметры отчета ................. + СтрокаОтчет = СтрокаПолучатель.Строки.Добавить(); + СтрокаОтчет.Уровень = 2; + СтрокаОтчет.Ключ = Строка(ПараметрыОтчета.Отчет); + СтрокаОтчет.Значение = Результат.ТабДок; + СтрокаОтчет.Настройки = ПараметрыОтчета; + + ПредставлениеОтчета = СокрЛП(СтрокаОтчет.Ключ) + " ([ПредставлениеФорматов])"; + + // Сохранение табличного документа в форматы + ПредставлениеФорматов = ""; + Для Каждого Формат Из ПараметрыОтчета.Форматы Цикл + + ПараметрыФормата = ПараметрыДоставки.ПараметрыФорматов.Получить(Формат); + + Если ПараметрыФормата = Неопределено Тогда + Продолжить; + КонецЕсли; + + ПолноеИмяФайла = КаталогПолучателя + ПривестиИмяФайла( + СтрокаОтчет.Ключ + + " (" + + ПараметрыФормата.Имя + + ")" + + ?(ПараметрыФормата.Расширение = Неопределено, "", ПараметрыФормата.Расширение) + ); + + НайтиСвободноеИмяФайла(ПолноеИмяФайла); + + СтандартнаяОбработка = Истина; + + // Передача управления в переопределяемый модуль + РассылкаОтчетовПереопределяемый.ПередСохранениемТабличногоДокументаВФормат( + СтандартнаяОбработка, + СтрокаОтчет.Значение, + Формат, + ПолноеИмяФайла + ); + + // Сохранение отчета встроенными средствами подсистемы + Если СтандартнаяОбработка = Истина Тогда + ЗаголовокОшибки = НСтр("ru = 'Ошибка записи отчета %1 в формат %2:'"); + + Если ПараметрыФормата.ТипФайла = Неопределено Тогда + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + ЗаголовокОшибки, НСтр("ru = 'Формат не поддерживается'"), + "'"+ СтрокаОтчет.Ключ +"'", + "'"+ ПараметрыФормата.Имя +"'" + ); + Продолжить; + КонецЕсли; + + Попытка + СтрокаОтчет.Значение.Записать(ПолноеИмяФайла, ПараметрыФормата.ТипФайла); + Исключение + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + ЗаголовокОшибки, ИнформацияОбОшибке(), + "'"+ СтрокаОтчет.Ключ +"'", + "'"+ ПараметрыФормата.Имя +"'" + ); + Продолжить; + КонецПопытки; + КонецЕсли; // СтандартнаяОбработка + + // Проверки и регистрация результата + ВременныйФайл = Новый Файл(ПолноеИмяФайла); + Если НЕ ВременныйФайл.Существует() Тогда + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + ЗаголовокОшибки + Символы.ПС + НСтр("ru = 'Файл %3 не найден.'"), , + "'"+ СтрокаОтчет.Ключ +"'", + "'"+ ПараметрыФормата.Имя +"'", + "'"+ ВременныйФайл.ПолноеИмя +"'" + ); + Продолжить; + КонецЕсли; + + // Регистрация конечного результата - сохраненного отчета во временном каталоге + // 3 - Файлы получателей + // Ключ - имя файла + // Значение - полный путь к файлу + // Настройки - настройки файла + СтрокаФайл = СтрокаОтчет.Строки.Добавить(); + СтрокаФайл.Уровень = 3; + СтрокаФайл.Ключ = ВременныйФайл.Имя; + СтрокаФайл.Значение = ВременныйФайл.ПолноеИмя; + + СтрокаФайл.Настройки = Новый Структура("ФайлСКаталогом, ИмяФайла, ПолноеИмяФайла, ИмяКаталога, ПолноеИмяКаталога, + |Формат, Имя, Расширение, ТипФайла, Ссылка"); + + СтрокаФайл.Настройки.Формат = Формат; + ЗаполнитьЗначенияСвойств(СтрокаФайл.Настройки, ПараметрыФормата, "Имя, Расширение, ТипФайла"); + + СтрокаФайл.Настройки.ИмяФайла = ВременныйФайл.Имя; + СтрокаФайл.Настройки.ПолноеИмяФайла = ВременныйФайл.ПолноеИмя; + СтрокаФайл.Настройки.ИмяКаталога = ВременныйФайл.ИмяБезРасширения + "_files"; + СтрокаФайл.Настройки.ПолноеИмяКаталога = ВременныйФайл.Путь + СтрокаФайл.Настройки.ИмяКаталога + "\"; + + КаталогФайла = Новый Файл(СтрокаФайл.Настройки.ПолноеИмяКаталога); + + СтрокаФайл.Настройки.ФайлСКаталогом = (КаталогФайла.Существует() И КаталогФайла.ЭтоКаталог()); + + Если СтрокаФайл.Настройки.ФайлСКаталогом И НЕ ПараметрыДоставки.Архивировать Тогда + // Каталог вместе с файлом архивируются, а вместо файла отправляется архив файла с каталогом + ИмяАрхива = ВременныйФайл.ИмяБезРасширения + ".zip"; + ПолноеИмяАрхива = КаталогПолучателя + ИмяАрхива; + + РежимСохранения = РежимСохраненияПутейZIP.СохранятьОтносительныеПути; + РежимОбработки = РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно; + + ЗаписьZipФайла = Новый ЗаписьZipФайла(ПолноеИмяАрхива); + ЗаписьZipФайла.Добавить(СтрокаФайл.Настройки.ПолноеИмяФайла, РежимСохранения, РежимОбработки); + ЗаписьZipФайла.Добавить(СтрокаФайл.Настройки.ПолноеИмяКаталога, РежимСохранения, РежимОбработки); + ЗаписьZipФайла.Записать(); + + СтрокаФайл.Ключ = ИмяАрхива; + СтрокаФайл.Значение = ПолноеИмяАрхива; + КонецЕсли; + + КаталогФайла = Неопределено; + ВременныйФайл = Неопределено; + + ПредставлениеФорматов = ПредставлениеФорматов + + ?(ПредставлениеФорматов = "", "", ", ") + // открывающий тег для ссылок (позже полные пути к файлам будут заменены на ссылки на конечных ресурсах) + + ?(ПараметрыДоставки.ДобавлятьСсылки = "КФорматам", "", "") + // имя формата + + ПараметрыФормата.Имя + // закрывающий тег для ссылок + + ?(ПараметрыДоставки.ДобавлятьСсылки = "КФорматам", "", ""); + + // + Если ПараметрыДоставки.ДобавлятьСсылки = "ПослеОтчетов" Тогда + ПредставлениеОтчета = ПредставлениеОтчета + Символы.ПС + "<" + СтрокаФайл.Значение + ">"; + КонецЕсли; + + КонецЦикла; // Для Каждого Формат Из ПараметрыОтчета.Форматы Цикл + + // Представление конкретного отчета + ПредставлениеОтчета = СтрЗаменить(ПредставлениеОтчета, "[ПредставлениеФорматов]", ПредставлениеФорматов); + СтрокаОтчет.Настройки.Вставить("ПредставлениеВПисьме", ПредставлениеОтчета); + +КонецПроцедуры // СформироватьИСохранитьОтчет() + +// Вспомогательная процедура функции "ВыполнитьРассылку" - заполняет значения по умолчанию для параметров, +// которые не были переданы явно. +// Так же подготавливает и заполняет параметры, необходимые для рассылки +// +// Параметры +// см. функцию ВыполнитьРассылку +// +Функция ЗаполнитьПараметрыРассылкиПараметрамиПоУмолчанию(ТаблицаОтчетов, ПараметрыДоставки, Рассылка, ПараметрыЖурнала) + + // Параметры записи в журнал регистрации + Если ТипЗнч(ПараметрыЖурнала) <> Тип("Структура") Тогда + ПараметрыЖурнала = Новый Структура; + КонецЕсли; + + Если НЕ ПараметрыЖурнала.Свойство("ИмяСобытия") Тогда + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Запуск по требованию'")); + КонецЕсли; + + Если НЕ ПараметрыЖурнала.Свойство("Данные") Тогда + ПараметрыЖурнала.Вставить("Данные", Рассылка); + КонецЕсли; + + Если НЕ ПараметрыЖурнала.Свойство("Метаданные") Тогда + ПараметрыЖурнала.Вставить("Метаданные", ПараметрыЖурнала.Данные.Метаданные()); + КонецЕсли; + + // Проверка прав доступа + Если НЕ ПравоВывода(ПараметрыЖурнала) Тогда + Возврат Ложь; + КонецЕсли; + + ПараметрыДоставки.Вставить("Рассылка", СокрЛП(Строка(Рассылка))); + ПараметрыДоставки.Вставить("ДатаВыполнения", ТекущаяДатаСеанса()); + ПараметрыДоставки.Вставить("БылиОшибки", Ложь); + ПараметрыДоставки.Вставить("БылиПредупреждения", Ложь); + ПараметрыДоставки.Вставить("ВыполненаВПапку", Ложь); + ПараметрыДоставки.Вставить("ВыполненаВСетевойКаталог", Ложь); + ПараметрыДоставки.Вставить("ВыполненаНаFTP", Ложь); + ПараметрыДоставки.Вставить("ВыполненаПоЭлектроннойПочте", Ложь); + ПараметрыДоставки.Вставить("ВыполненныеСпособыПубликации", ""); + + Если ПараметрыДоставки.ИспользоватьПапку Тогда + Если НЕ ЗначениеЗаполнено(ПараметрыДоставки.Папка) Тогда + ПараметрыДоставки.ИспользоватьПапку = Ложь; + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, + НСтр("ru = 'Папка не заполнена, доставка в папку отключена'"), , + ); + Иначе + ПравоДоступа = Истина; + РассылкаОтчетовПереопределяемый.ПравоИзмененияПапкиИФайлов(ПараметрыДоставки.Папка, ПравоДоступа); + Если НЕ ПравоДоступа Тогда + ПараметрыДоставки.ИспользоватьПапку = Ложь; + УстановитьПривилегированныйРежим(Истина); + ПредставлениеПапки = Строка(ПараметрыДоставки.Папка); + УстановитьПривилегированныйРежим(Ложь); + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + НСтр("ru = 'Недостаточно прав на изменение файлов папки %1, доставка в папку отключена'"), , + "'"+ ПредставлениеПапки +"'" + ); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ПараметрыДоставки.ИспользоватьСетевойКаталог Тогда + Если НЕ ЗначениеЗаполнено(ПараметрыДоставки.СетевойКаталогWindows) + ИЛИ НЕ ЗначениеЗаполнено(ПараметрыДоставки.СетевойКаталогLinux) Тогда + + Если ЗначениеЗаполнено(ПараметрыДоставки.СетевойКаталогWindows) Тогда + ЗначениеПодстановки = НСтр("ru = 'Linux'"); + ИначеЕсли ЗначениеЗаполнено(ПараметрыДоставки.СетевойКаталогLinux) Тогда + ЗначениеПодстановки = НСтр("ru = 'Windows'"); + Иначе + ЗначениеПодстановки = НСтр("ru = 'Windows и Linux'"); + КонецЕсли; + + ПараметрыДоставки.ИспользоватьСетевойКаталог = Ложь; + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + НСтр("ru = 'Сетевой каталог %1 не выбран, доставка в сетевой каталог отключена'"), , + ЗначениеПодстановки + ); + + Иначе + + ПараметрыДоставки.СетевойКаталогWindows = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( + ПараметрыДоставки.СетевойКаталогWindows + ); + ПараметрыДоставки.СетевойКаталогLinux = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( + ПараметрыДоставки.СетевойКаталогLinux + ); + + КонецЕсли; + КонецЕсли; + + Если ПараметрыДоставки.ИспользоватьFTPРесурс И НЕ ЗначениеЗаполнено(ПараметрыДоставки.Сервер) Тогда + ПараметрыДоставки.ИспользоватьFTPРесурс = Ложь; + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + НСтр("ru = 'FTP сервер не заполнен, доставка в папку на FTP ресурс отключена'") + ); + КонецЕсли; + + Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту И НЕ ЗначениеЗаполнено(ПараметрыДоставки.УчетнаяЗапись) Тогда + ПараметрыДоставки.ИспользоватьЭлектроннуюПочту = Ложь; + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + НСтр("ru = 'Учетная запись не выбрана, доставка по электронной почте отключена'") + ); + КонецЕсли; + + Если НЕ ПараметрыДоставки.Свойство("Персонализирована") Тогда + ПараметрыДоставки.Вставить("Персонализирована", Ложь); + КонецЕсли; + + Если ПараметрыДоставки.Персонализирована Тогда + Если НЕ ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + НСтр("ru = 'Персонализированная рассылка может быть отправлена только по электронной почте'") + ); + Возврат Ложь; + КонецЕсли; + ПараметрыДоставки.ИспользоватьПапку = Ложь; + ПараметрыДоставки.ИспользоватьСетевойКаталог = Ложь; + ПараметрыДоставки.ИспользоватьFTPРесурс = Ложь; + ПараметрыДоставки.Вставить("ТолькоУведомить", Ложь); + КонецЕсли; + + Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда + // Соединение с почтовым сервером поднимается дольше всего + Если НЕ ПараметрыДоставки.Свойство("Соединение") Тогда + ПараметрыДоставки.Вставить("Соединение", Неопределено); + КонецЕсли; + + // Уведомления о доставке по электронной почте + Если НЕ ПараметрыДоставки.Свойство("ТолькоУведомить") Тогда + ПараметрыДоставки.Вставить("ТолькоУведомить", Ложь); + КонецЕсли; + + Если ПараметрыДоставки.ТолькоУведомить + И НЕ (ПараметрыДоставки.ИспользоватьПапку + ИЛИ ПараметрыДоставки.ИспользоватьСетевойКаталог + ИЛИ ПараметрыДоставки.ИспользоватьFTPРесурс) + Тогда + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, + НСтр("ru = 'Использование уведомлений по электронной почте возможно только совместно с другими способами доставки'") + ); + Возврат Ложь; + КонецЕсли; + + // + Если НЕ ПараметрыДоставки.Свойство("СкрытыеКопии") Тогда + ПараметрыДоставки.Вставить("СкрытыеКопии", Ложь); + КонецЕсли; + + // Параметры письма + Если НЕ ПараметрыДоставки.Свойство("ПараметрыПисьма") Тогда + ПараметрыДоставки.Вставить("ПараметрыПисьма", Новый Структура); + КонецЕсли; + + ПараметрыПисьма = ПараметрыДоставки.ПараметрыПисьма; + + ПараметрыПисьма.Вставить("ОбрабатыватьТексты", Ложь); + + // Тип текста почтового сообщения + Если НЕ ПараметрыПисьма.Свойство("ТипТекста") ИЛИ НЕ ЗначениеЗаполнено(ПараметрыПисьма.ТипТекста) Тогда + ПараметрыПисьма.Вставить("ТипТекста", ТипТекстаПочтовогоСообщения.ПростойТекст); + КонецЕсли; + + ПараметрыДоставки.Вставить("ПисьмоВФорматеHTML", ПараметрыПисьма.ТипТекста = "HTML" ИЛИ ПараметрыПисьма.ТипТекста = ТипТекстаПочтовогоСообщения.HTML); + + // Тип текста почтового сообщения + Если ПараметрыПисьма.Свойство("Вложения") Тогда + ПараметрыПисьма.Вставить("ПредустановленныеВложения", ПараметрыПисьма.Вложения); + + // Приведение кода HTML документа к "правильным" ссылкам на вложенные картинки + Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда + Для Каждого КлючИЗначение Из ПараметрыПисьма.ПредустановленныеВложения Цикл + Если ТипЗнч(КлючИЗначение.Значение) = Тип("Картинка") И Найти(КлючИЗначение.Ключ, ".") = 0 Тогда + ФорматЭтойКартинки = КлючИЗначение.Значение.Формат(); + Если ФорматЭтойКартинки <> ФорматКартинки.НеизвестныйФормат Тогда + НовыйКлюч = КлючИЗначение.Ключ +"."+ НРег(Строка(ФорматЭтойКартинки)); + ПараметрыДоставки.ШаблонТекста = СтрЗаменить( + ПараметрыДоставки.ШаблонТекста, + ""+ ПараметрыДоставки.ИмяАрхива +"" + ); + Иначе + ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СокрЛП( + ПараметрыДоставки.ПредставлениеОтчетовПолучателя + +""""+ ПараметрыДоставки.ИмяАрхива +""":"+ Символы.ПС +"<"+ ПолноеИмяФайла +">" + ); + КонецЕсли; + ИначеЕсли ПараметрыДоставки.ЗаполнитьСформированныеОтчетыВШаблонеСообщения Тогда + // Доставка только по почте + ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СокрЛП( + ПараметрыДоставки.ПредставлениеОтчетовПолучателя + +""""+ ПараметрыДоставки.ИмяАрхива +"""" + ); + КонецЕсли; + +КонецПроцедуры + +// Возвращает параметры, которые можно использовать для сохранения табличного документа в формат +// +// Параметры: +// Формат (ПеречислениеСсылка.ФорматыСохраненияОтчетов) - Формат, для которого необходимо получить параметры +// +// Возвращаемое значение: +// Результат (Структура) - параметры записи +// |- Расширение (Строка) - расширение, с которым можно сохранить файл +// |- ТипФайла (ТипФайлаТабличногоДокумента) - тип, который необходимо передать табличному документу для сохранения +// +Функция ПараметрыЗаписиТабличногоДокументаВФормат(Формат) + Результат = Новый Структура("Расширение, ТипФайла"); + Если Формат = Перечисления.ФорматыСохраненияОтчетов.XLSX Тогда + Результат.Расширение = ".xlsx"; + Результат.ТипФайла = ТипФайлаТабличногоДокумента.XLSX; + + ИначеЕсли Формат = Перечисления.ФорматыСохраненияОтчетов.XLS Тогда + Результат.Расширение = ".xls"; + Результат.ТипФайла = ТипФайлаТабличногоДокумента.XLS; + + ИначеЕсли Формат = Перечисления.ФорматыСохраненияОтчетов.ODS Тогда + Результат.Расширение = ".ods"; + Результат.ТипФайла = ТипФайлаТабличногоДокумента.ODS; + + ИначеЕсли Формат = Перечисления.ФорматыСохраненияОтчетов.MXL Тогда + Результат.Расширение = ".mxl"; + Результат.ТипФайла = ТипФайлаТабличногоДокумента.MXL; + + ИначеЕсли Формат = Перечисления.ФорматыСохраненияОтчетов.PDF Тогда + Результат.Расширение = ".pdf"; + Результат.ТипФайла = ТипФайлаТабличногоДокумента.PDF; + + ИначеЕсли Формат = Перечисления.ФорматыСохраненияОтчетов.HTML4 Тогда + Результат.Расширение = ".html"; + Результат.ТипФайла = ТипФайлаТабличногоДокумента.HTML4; + + ИначеЕсли Формат = Перечисления.ФорматыСохраненияОтчетов.DOCX Тогда + Результат.Расширение = ".docx"; + Результат.ТипФайла = ТипФайлаТабличногоДокумента.DOCX; + + ИначеЕсли Формат = Перечисления.ФорматыСохраненияОтчетов.TXT Тогда + Результат.Расширение = ".txt"; + Результат.ТипФайла = ТипФайлаТабличногоДокумента.TXT; + + ИначеЕсли Формат = Перечисления.ФорматыСохраненияОтчетов.ANSITXT Тогда + Результат.Расширение = ".txt"; + Результат.ТипФайла = ТипФайлаТабличногоДокумента.ANSITXT; + + Иначе + // "Рыба" для всех форматов, добавленных при внедрении, обработчик сохранения + // которых должен находиться в переопределяемом модуле + Результат.Расширение = Неопределено; + Результат.ТипФайла = Неопределено; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Очистка временных файлов, которые использовались в рассылке +// +// Параметры +// ПараметрыЖурнала (Структура) - Параметры записи в журнал регистрации, +// см. комментарий к процедуре ЗаписьЖурнала, параметр называется так же +// ПараметрыДоставки (Структура) - ... +// |- КаталогВременныхФайлов (Строка) - Каталог, который использовался рассылкой для хранения временных файлов +Процедура УдалитьВременныеФайлы(ПараметрыЖурнала, ПараметрыДоставки) + Попытка + УдалитьФайлы(ПараметрыДоставки.КаталогВременныхФайлов, "*"); + Исключение + ЗаписьЖурнала(ПараметрыЖурнала, , + НСтр("ru = 'Ошибка очистки каталога временных файлов %1:'"), ИнформацияОбОшибке(), + "'"+ ПараметрыДоставки.КаталогВременныхФайлов +"'" + ); + КонецПопытки; +КонецПроцедуры + +// Преобразует недопустимые символы файлов в похожие допустимые +// Работает только с именем файла, путь не поддерживается. +// +// Параметры: +// ИсходноеИмяФайла (Строка) +// +// Возвращаемое значение: +// Результат (Строка) - Результат преобразования +// +Функция ПривестиИмяФайла(ИсходноеИмяФайла) + + Результат = Лев(СокрЛП(ИсходноеИмяФайла), 255); + + СоответствиеЗамен = Новый Соответствие; + СоответствиеЗамен.Вставить("""", "'"); + СоответствиеЗамен.Вставить("/", "_"); + СоответствиеЗамен.Вставить("\", "_"); + СоответствиеЗамен.Вставить(":", "_"); + СоответствиеЗамен.Вставить(";", "_"); + СоответствиеЗамен.Вставить("|", "_"); + СоответствиеЗамен.Вставить("=", "_"); + СоответствиеЗамен.Вставить("?", "_"); + СоответствиеЗамен.Вставить("*", "_"); + СоответствиеЗамен.Вставить("<", "_"); + СоответствиеЗамен.Вставить(">", "_"); + + // Символы, не поддерживаемые + СоответствиеЗамен.Вставить("[", ""); + СоответствиеЗамен.Вставить("]", ""); + СоответствиеЗамен.Вставить(",", ""); + СоответствиеЗамен.Вставить("{", ""); + СоответствиеЗамен.Вставить("}", ""); + + Для Каждого КлюИЗначение Из СоответствиеЗамен Цикл + Результат = СтрЗаменить(Результат, КлюИЗначение.Ключ, КлюИЗначение.Значение); + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Возвращает дерево значений, необходимое для формирования и доставки отчетов +// +Функция СоздатьДеревоОтчетов() + // Уровень (вложенности): + // + // 1 - Получатели + // Ключ - Ссылка + // Значение - каталог получателя + // + // 2 - Табличные документы получателей + // Ключ - Имя отчета + // Значение - Табличный документ + // Настройки - ............. все параметры отчета ................. + // + // 3 - Файлы получателей + // Ключ - имя файла + // Значение - полный путь к файлу + // Настройки - ФайлСКаталогом, ИмяФайла, ПолноеИмяФайла, ИмяКаталога, ПолноеИмяКаталога, Формат, Имя, Расширение, ТипФайла + // + + ДеревоОтчетов = Новый ДеревоЗначений; + ДеревоОтчетов.Колонки.Добавить("Уровень", Новый ОписаниеТипов("Число")); + ДеревоОтчетов.Колонки.Добавить("Ключ", ); + ДеревоОтчетов.Колонки.Добавить("Значение", ); + ДеревоОтчетов.Колонки.Добавить("Настройки", Новый ОписаниеТипов("Структура")); + + Возврат ДеревоОтчетов; +КонецФункции + +// Проверяет права текущего пользователя на вывод информации, +// если прав нет - производится запись в журнал регистрации +// +Функция ПравоВывода(ПараметрыЖурнала) + ПравоВывода = ПравоДоступа("Вывод", Метаданные); + Если НЕ ПравоВывода Тогда + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + НСтр("ru = 'У пользователя %1 недостаточно прав на вывод информации'"), , + "'"+ Строка(Пользователи.ТекущийПользователь()) +"'" + ); + КонецЕсли; + Возврат ПравоВывода; +КонецФункции + +// Формирует представленеи способов доставки в соответствии с параметрами доставки +// +// Параметры: +// ПараметрыДоставки (Структура) - см. функцию ВыполнитьРассылку +// +// Возвращаемое значение: +// ТекстПредставления - (Строка) описание +// +Функция ПредставлениеСпособовДоставки(ПараметрыДоставки) + Префикс = НСтр("ru = 'Результат'"); + ТекстПредставления = ""; + Суффикс = ""; + + Если НЕ ПараметрыДоставки.ТолькоУведомить Тогда + + ТекстПредставления = ТекстПредставления + + ?(ТекстПредставления = "", Префикс, " " + НСтр("ru = 'и'")) + + " " + + НСтр("ru = 'отправлен по почте (см. вложения)'"); + + КонецЕсли; // ПараметрыДоставки.ТолькоУведомить + + Если ПараметрыДоставки.ВыполненаВПапку Тогда + + ТекстПредставления = ТекстПредставления + + ?(ТекстПредставления = "", Префикс, " " + НСтр("ru = 'и'")) + + " " + + НСтр("ru = 'доставлен в папку'") + + " "; + + Ссылка = ПолучитьНавигационнуюСсылкуИнформационнойБазы() +"#"+ ПолучитьНавигационнуюСсылку(ПараметрыДоставки.Папка); + + Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда + ТекстПредставления = ТекстПредставления + + "" + + Строка(ПараметрыДоставки.Папка) + + ""; + Иначе + ТекстПредставления = ТекстПредставления + + """" + + Строка(ПараметрыДоставки.Папка) + + """"; + Суффикс = Суффикс + ":" + Символы.ПС + "<" + Ссылка + ">"; + КонецЕсли; + + КонецЕсли; // ПараметрыДоставки.ВыполненаВПапку + + Если ПараметрыДоставки.ВыполненаВСетевойКаталог Тогда + + ТекстПредставления = ТекстПредставления + + ?(ТекстПредставления = "", Префикс, " " + НСтр("ru = 'и'")) + + " " + + НСтр("ru = 'доставлен в сетевой каталог'") + + " "; + + Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда + ТекстПредставления = ТекстПредставления + + "" + + ПараметрыДоставки.СетевойКаталогWindows + + ""; + Иначе + ТекстПредставления = ТекстПредставления + + "<" + + ПараметрыДоставки.СетевойКаталогWindows + + ">"; + КонецЕсли; + + КонецЕсли; // ПараметрыДоставки.ВыполненаВСетевойКаталог + + Если ПараметрыДоставки.ВыполненаНаFTP Тогда + + ТекстПредставления = ТекстПредставления + + ?(ТекстПредставления = "", Префикс, " " + НСтр("ru = 'и'")) + + " " + + НСтр("ru = 'доставлен на FTP ресурс'") + + " "; + + Ссылка = "ftp://" + + ПараметрыДоставки.Сервер + + ":" + + Формат(ПараметрыДоставки.Порт, "ЧН=0; ЧГ=0") + + ПараметрыДоставки.Каталог; + + Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда + ТекстПредставления = ТекстПредставления + + "" + + Ссылка + + ""; + Иначе + ТекстПредставления = ТекстПредставления + + "<" + + Ссылка + + ">"; + КонецЕсли; + + КонецЕсли; // ПараметрыДоставки.ВыполненаНаFTP + + ТекстПредставления = ТекстПредставления + ?(Суффикс = "", ".", Суффикс); + + Возврат ТекстПредставления; +КонецФункции + +// Если файл существует - добавляет суффикс в имя файла +// +// Параметры: +// ПолноеИмяФайла - (Строка) +// +Процедура НайтиСвободноеИмяФайла(ПолноеИмяФайла) + Файл = Новый Файл(ПолноеИмяФайла); + + Если НЕ Файл.Существует() Тогда + Возврат; + КонецЕсли; + + // Установить шаблон имени файла для подстановки различных суффиксов + ШаблонИмени = ""; + ДлинаИмени = СтрДлина(ПолноеИмяФайла); + КодСлеша = КодСимвола("/"); + КодОбратногоСлеша = КодСимвола("\"); + КодТочки = КодСимвола("."); + Для ОбратныйИндекс = 1 По ДлинаИмени Цикл + Индекс = ДлинаИмени - ОбратныйИндекс + 1; + Код = КодСимвола(ПолноеИмяФайла, Индекс); + Если Код = КодТочки Тогда + ШаблонИмени = Лев(ПолноеИмяФайла, Индекс - 1) + "<шаблон>" + Сред(ПолноеИмяФайла, Индекс); + Прервать; + ИначеЕсли Код = КодСлеша ИЛИ Код = КодОбратногоСлеша Тогда + Прервать; + КонецЕсли; + КонецЦикла; + Если ШаблонИмени = "" Тогда + ШаблонИмени = ПолноеИмяФайла + "<шаблон>"; + КонецЕсли; + + Индекс = 0; + Пока Файл.Существует() Цикл + Индекс = Индекс + 1; + ПолноеИмяФайла = СтрЗаменить(ШаблонИмени, "<шаблон>", " ("+ Формат(Индекс, "ЧГ=") +")"); + Файл = Новый Файл(ПолноеИмяФайла); + КонецЦикла; +КонецПроцедуры // НайтиСвободноеИмяФайла + +// Создает корневую строку дерева для получателя (в случае ее отсутствия) и заполнет ее свойства параметрами по умолчанию +// +// Параметры: +// ДеревоОтчетов - (ДеревоЗначений) +// ПолучательСсылка - (СправочникСсылка.*, Неопределено) +// ПараметрыДоставки - (Структура) +// +// Возвращаемое значение: +// СтрокаПолучатель - (СтрокаДереваЗначений) +// +Функция ОпределитьСтрокуДереваДляПолучателя(ДеревоОтчетов, ПолучательСсылка, ПараметрыДоставки) + + СтрокаПолучатель = ДеревоОтчетов.Строки.Найти(ПолучательСсылка, "Ключ", Ложь); + Если СтрокаПолучатель = Неопределено Тогда + + КаталогПолучателя = ПараметрыДоставки.КаталогВременныхФайлов; + Если ПолучательСсылка <> Неопределено Тогда + КаталогПолучателя = КаталогПолучателя + + ПривестиИмяФайла(Строка(ПолучательСсылка)) + + " (" + + Строка(ПолучательСсылка.УникальныйИдентификатор()) + + ")\"; + СоздатьКаталог(КаталогПолучателя); + КонецЕсли; + + СтрокаПолучатель = ДеревоОтчетов.Строки.Добавить(); + СтрокаПолучатель.Уровень = 1; + СтрокаПолучатель.Ключ = ПолучательСсылка; + СтрокаПолучатель.Значение = КаталогПолучателя; + + КонецЕсли; + + Возврат СтрокаПолучатель; + +КонецФункции // ОпределитьСтрокуДереваДляПолучателя + +// Формирует представление отчетов для получателя +// +Процедура СформироватьПредставлениеОтчетовДляПолучателя(ПараметрыДоставки, СтрокаПолучатель) + + СформированныеОтчеты = ""; + + Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту И ПараметрыДоставки.ЗаполнитьСформированныеОтчетыВШаблонеСообщения Тогда + + Разделитель = Символы.ПС; + Если ПараметрыДоставки.ДобавлятьСсылки = "ПослеОтчетов" Тогда + Разделитель = Разделитель + Символы.ПС; + КонецЕсли; + + Индекс = 0; + + Для Каждого СтрокаОтчет Из ПараметрыДоставки.СтрокаОбщихОтчетов.Строки Цикл + Индекс = Индекс + 1; + СформированныеОтчеты = СформированныеОтчеты + + Разделитель + + Формат(Индекс, "ЧГ=") + + ". " + + СтрокаОтчет.Настройки.ПредставлениеВПисьме; + КонецЦикла; + + Если СтрокаПолучатель <> Неопределено И СтрокаПолучатель <> ПараметрыДоставки.СтрокаОбщихОтчетов Тогда + Для Каждого СтрокаОтчет Из СтрокаПолучатель.Строки Цикл + Индекс = Индекс + 1; + СформированныеОтчеты = СформированныеОтчеты + + Разделитель + + Формат(Индекс, "ЧГ=") + + ". " + + СтрокаОтчет.Настройки.ПредставлениеВПисьме; + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + ПараметрыДоставки.Вставить("ПредставлениеОтчетовПолучателя", СокрЛП(СформированныеОтчеты)); + +КонецПроцедуры // СформироватьПредставлениеОтчетовДляПолучателя + +// Проверяет наличие внешних наборов данных. +// +// Параметры: +// НаборыДанных (НаборыДанныхМакетаКомпоновкиДанных) +// +// Возвращаемое значение: +// (Булево) +// +Функция ЕстьВнешнийНаборДанных(НаборыДанных) + + Для Каждого НаборДанных Из НаборыДанных Цикл + + Если ТипЗнч(НаборДанных) = Тип("НаборДанныхОбъектМакетаКомпоновкиДанных") Тогда + + Возврат Истина; + + ИначеЕсли ТипЗнч(НаборДанных) = Тип("НаборДанныхОбъединениеМакетаКомпоновкиДанных") Тогда + + Если ЕстьВнешнийНаборДанных(НаборДанных.Элементы) Тогда + + Возврат Истина; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; + +КонецФункции diff --git a/SSL/src/CommonModules/РассылкаОтчетов/РассылкаОтчетов.mdo b/SSL/src/CommonModules/РассылкаОтчетов/РассылкаОтчетов.mdo new file mode 100644 index 000000000..76b91e4f6 --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетов/РассылкаОтчетов.mdo @@ -0,0 +1,11 @@ + + + РассылкаОтчетов + + ru + Рассылка отчетов + + true + true + true + diff --git a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl new file mode 100644 index 000000000..98ec66b85 --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl @@ -0,0 +1,46 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Рассылка отчетов" (вызов сервера) +// +// Выполняется на сервере, но может вызываться с клиента. +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Для внутреннего использования +// +Функция СформироватьСписокПолучателейРассылки(Знач Параметры) Экспорт + ПараметрыЖурнала = Новый Структура("ИмяСобытия, Метаданные, Данные, МассивОшибок, БылиОшибки"); + ПараметрыЖурнала.ИмяСобытия = НСтр("ru = 'Рассылка отчетов. Формирование списка получателей'"); + ПараметрыЖурнала.МассивОшибок = Новый Массив; + ПараметрыЖурнала.БылиОшибки = Ложь; + ПараметрыЖурнала.Данные = Параметры.Ссылка; + ПараметрыЖурнала.Метаданные = Метаданные.Справочники.РассылкиОтчетов; + + Результат = Новый Структура("Получатели, ТекстОшибок", , ""); + Результат.Получатели = РассылкаОтчетов.СформироватьСписокПолучателейРассылки(ПараметрыЖурнала, Параметры); + + Если ПараметрыЖурнала.БылиОшибки = Истина Тогда + Результат.ТекстОшибок = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок, Ложь); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Обновляет состояние фонового задания и получает результат его выполняния из +// временного хранилища. +// +Функция ПроверитьВыполнениеФоновогоЗадания(ИдентификаторЗадания, АдресХранилища) Экспорт + Результат = Новый Структура("Статус, Детали"); + Попытка + Если ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + Результат.Статус = "ВыполненоУспешно"; // Не локализуется + Результат.Детали = ПолучитьИзВременногоХранилища(АдресХранилища); + Иначе + Результат.Статус = "Выполняется"; // Не локализуется + КонецЕсли; + Исключение + Результат.Статус = "Исключение"; // Не локализуется + КонецПопытки; + Возврат Результат; +КонецФункции diff --git a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/РассылкаОтчетовВызовСервера.mdo b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/РассылкаОтчетовВызовСервера.mdo new file mode 100644 index 000000000..aedf746f0 --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/РассылкаОтчетовВызовСервера.mdo @@ -0,0 +1,10 @@ + + + РассылкаОтчетовВызовСервера + + ru + Рассылка отчетов вызов сервера + + true + true + diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl new file mode 100644 index 000000000..f3288a926 --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl @@ -0,0 +1,139 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Рассылка отчетов" (клиент) +// +// Выполняется на клиенте. +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Формирует список получателей рассылки, предлагает пользователю выбрать +// конкретного получателя или всех получателей рассылки и возвращает +// результат выбора пользователя. +// +Функция ВыбратьПолучателя(Объект, МножественныйВыбор = Истина, ВозвращатьСоответствие = Истина, ЗаголовокДляОшибок = "") Экспорт + + Если Объект.Личная = Истина Тогда + НаборПараметров = "Ссылка, ВидПочтовогоАдресаПолучателей, Личная, Автор"; + Иначе + НаборПараметров = "Ссылка, ВидПочтовогоАдресаПолучателей, Личная, ТипПолучателейРассылки, Получатели"; + КонецЕсли; + + ПараметрыПолучателей = Новый Структура(НаборПараметров); + ЗаполнитьЗначенияСвойств(ПараметрыПолучателей, Объект); + РезультатРаботыСервера = РассылкаОтчетовВызовСервера.СформироватьСписокПолучателейРассылки(ПараметрыПолучателей); + + Получатели = РезультатРаботыСервера.Получатели; + ТекстОшибок = РезультатРаботыСервера.ТекстОшибок; + Заголовок = НСтр("ru = 'Выбор получателя'"); + + Если Получатели.Количество() = 0 Тогда + Результат = Новый Структура("Оповестить, Заголовок, Текст, ТекстОшибок"); + Результат.Оповестить = Ложь; + Результат.ТекстОшибок = ТекстОшибок; + Результат.Заголовок = Заголовок; + Результат.Текст = НСтр("ru = 'Не удалось сформировать список получателей'"); + ПоказатьРезультат(Результат); + Возврат Неопределено; + КонецЕсли; + + ВозможныеПолучатели = Новый СписокЗначений; + Если МножественныйВыбор Тогда + ВозможныеПолучатели.Добавить(Неопределено, НСтр("ru = 'Всем получателям'")); + КонецЕсли; + Для Каждого КлючИЗначение Из Получатели Цикл + ВозможныеПолучатели.Добавить(КлючИЗначение.Ключ, Строка(КлючИЗначение.Ключ) +" <"+ КлючИЗначение.Значение +">"); + КонецЦикла; + + Если Объект.Личная И ВозможныеПолучатели.Количество() = 1 Тогда + ВыбранноеЗначение = ВозможныеПолучатели[0]; + Иначе + ВыбранноеЗначение = ВозможныеПолучатели.ВыбратьЭлемент(Заголовок); + Если ВыбранноеЗначение = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + КонецЕсли; + + Если ВозвращатьСоответствие Тогда + Если ВыбранноеЗначение.Значение = Неопределено Тогда + Результат = Получатели; + Иначе + Результат = Новый Соответствие; + Результат.Вставить(ВыбранноеЗначение.Значение, Получатели[ВыбранноеЗначение.Значение]); + КонецЕсли; + Иначе + Результат = Новый Структура("Получатель, ПочтовыйАдрес", ВыбранноеЗначение.Значение, Получатели[ВыбранноеЗначение.Значение]); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Выводит пользователю результат выполнения какой-либо операции, при необходимости +// оповещает об изменении типа или ссылки. +// +Процедура ПоказатьРезультат(Результат) Экспорт + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + Оповестить = ?(Результат.Свойство("Оповестить"), Результат.Оповестить, Истина); + Заголовок = ?(Результат.Свойство("Заголовок"), Результат.Заголовок, ""); + Текст = ?(Результат.Свойство("Текст"), Результат.Текст, ""); + Картинка = ?(Результат.Свойство("Картинка"), Результат.Картинка, БиблиотекаКартинок.ВыполнитьЗадачу); + ТекстОшибок = ?(Результат.Свойство("ТекстОшибок"), Результат.ТекстОшибок, ""); + + Если Оповестить = Истина Тогда + ПоказатьОповещениеПользователя(Заголовок, , Текст, Картинка); + Иначе + Если ЗначениеЗаполнено(ТекстОшибок) Тогда + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(1, НСтр("ru = 'Показать ошибки'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + + Ответ = Вопрос(Текст, Кнопки, , 1, Заголовок); + + Если Ответ = 1 Тогда + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(ТекстОшибок); + Если ЗначениеЗаполнено(Заголовок) Тогда + ТекстовыйДокумент.Показать(Заголовок); + Иначе + ТекстовыйДокумент.Показать(); + КонецЕсли; + КонецЕсли; + Иначе + Предупреждение(Текст); + КонецЕсли; + КонецЕсли; + + Если Результат.Свойство("ТипДляОбновления") Тогда + ОповеститьОбИзменении(Результат.ТипДляОбновления); + КонецЕсли; + +КонецПроцедуры + +// Контролирует состояние фонового задания и выводит пользователю его результат +// +Процедура ПроверитьВыполнениеФоновогоЗадания(ЭтаФорма) Экспорт + + ИдентификаторЗадания = ЭтаФорма.ПараметрыФоновогоЗадания[0].Значение; + АдресХранилища = ЭтаФорма.ПараметрыФоновогоЗадания[1].Значение; + ПараметрыОбработчика = ЭтаФорма.ПараметрыФоновогоЗадания[2].Значение; + ФормаДлительнойОперации = ЭтаФорма.ПараметрыФоновогоЗадания[3].Значение; + + Результат = РассылкаОтчетовВызовСервера.ПроверитьВыполнениеФоновогоЗадания(ИдентификаторЗадания, АдресХранилища); + Если Результат.Статус = "ВыполненоУспешно" Тогда + ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации); + ПоказатьРезультат(Результат.Детали); + ИначеЕсли Результат.Статус = "Исключение" Тогда + Предупреждение( + НСтр("ru = 'Рассылки не выполнены из-за ошибки, + |Подробности см. в журнале регистрации.'") + ); + ИначеЕсли Результат.Статус = "Выполняется" Тогда + ЭтаФорма.ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеФоновогоЗадания", ПараметрыОбработчика.ТекущийИнтервал, Истина); + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ЭтаФорма.ПараметрыФоновогоЗадания[2].Значение); + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиент/РассылкаОтчетовКлиент.mdo b/SSL/src/CommonModules/РассылкаОтчетовКлиент/РассылкаОтчетовКлиент.mdo new file mode 100644 index 000000000..65e9f43f0 --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиент/РассылкаОтчетовКлиент.mdo @@ -0,0 +1,10 @@ + + + РассылкаОтчетовКлиент + + ru + Рассылка отчетов клиент + + true + true + diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/Module.bsl new file mode 100644 index 000000000..c51cfd0a6 --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/Module.bsl @@ -0,0 +1,52 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Рассылка отчетов" (клиент, переопределяемый) +// +// Выполняется на клиенте, изменяется под специфику прикладной конфигурации, +// но предназначен для использования только данной подсистемой. +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//////////////////////////////////////////////////////////////////////////////// +// Опциональные связи с другими подсистемами + +// Если подсистема "Дополнительные отчеты и обработки" недоступна, то содержимое +// процедуры необходимо удалить или закомментировать. +// Открывает форму подбора дополнительных отчетов. +// +Процедура ПодборДопОтчетов(ЭлементФормы) Экспорт + + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + ДополнительныйОтчет = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет"); + Отчет = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.Отчет"); + + ОтборПоВиду = Новый СписокЗначений; + ОтборПоВиду.Добавить(ДополнительныйОтчет, ДополнительныйОтчет); + ОтборПоВиду.Добавить(Отчет, Отчет); + + ПараметрыФормыВыбора = Новый Структура; + ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.Независимый); + ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь); + ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина); + ПараметрыФормыВыбора.Вставить("Отбор", Новый Структура("Вид", ОтборПоВиду)); + + ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.ФормаВыбора", ПараметрыФормыВыбора, ЭлементФормы); + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + +КонецПроцедуры // ОткрытьПодборДопОтчетов + +// Если подсистема "Работа с файлами" недоступна, то содержимое процедуры +// необходимо удалить или закомментировать. +// Открывает форму папки со списком файлов. +// +Процедура ОткрытьФормуПапки(СтандартнаяОбработка, Папка) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + СтандартнаяОбработка = Ложь; + ПараметрыФормы = Новый Структура("Папка", Папка); + ОткрытьФорму("Справочник.Файлы.Форма.ХранилищеФайлов", ПараметрыФормы, , Папка); + // Конец СтандартныеПодсистемы.РаботаСФайлами + +КонецПроцедуры // ОткрытьФормуПапки diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/РассылкаОтчетовКлиентПереопределяемый.mdo b/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/РассылкаОтчетовКлиентПереопределяемый.mdo new file mode 100644 index 000000000..414ce6d89 --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/РассылкаОтчетовКлиентПереопределяемый.mdo @@ -0,0 +1,10 @@ + + + РассылкаОтчетовКлиентПереопределяемый + + ru + Рассылка отчетов клиент переопределяемый + + true + true + diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl new file mode 100644 index 000000000..b51b271c6 --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl @@ -0,0 +1,211 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Рассылка отчетов" (клиент, сервер) +// +// Выполняется на клиенте и на сервере. +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Разбирает строку FTP адреса на Логин, Пароль, Сервер, Порт и Каталог +// Подробнее - см. RFC 1738 (http://tools.ietf.org/html/rfc1738#section-3.1) +// Шаблон: ftp://:@:/ +// +// Параметры: +// FTPАдрес (Строка) +// +// Возвращаемое значение: +// Результат (Структура) +// |- Логин (Строка) +// |- Пароль (Строка) +// |- Сервер (Строка) +// |- Порт (Число) - По умолчанию 21 +// |- Каталог (Строка) - Первый символ всегда "/" +// +Функция РазобратьFTPАдрес(ПолныйFTPАдрес) Экспорт + Результат = Новый Структура("Логин, Пароль, Сервер, Порт, Каталог", "", "", "", 21, "/"); + FTPАдрес = ПолныйFTPАдрес; + + // Вырезать 'ftp://' + Поз = Найти(FTPАдрес, "://"); + Если Поз > 0 Тогда + FTPАдрес = Сред(FTPАдрес, Поз + 3); + КонецЕсли; + + // Каталог + Поз = Найти(FTPАдрес, "/"); + Если Поз > 0 Тогда + Результат.Каталог = Сред(FTPАдрес, Поз); + FTPАдрес = Лев(FTPАдрес, Поз - 1); + КонецЕсли; + + // Логин и пароль + Поз = Найти(FTPАдрес, "@"); + Если Поз > 0 Тогда + ЛогинПароль = Лев(FTPАдрес, Поз - 1); + FTPАдрес = Сред(FTPАдрес, Поз + 1); + + Поз = Найти(ЛогинПароль, ":"); + Если Поз > 0 Тогда + Результат.Логин = Лев(ЛогинПароль, Поз - 1); + Результат.Пароль = Сред(ЛогинПароль, Поз + 1); + Иначе + Результат.Логин = ЛогинПароль; + КонецЕсли; + КонецЕсли; + + // Сервер и порт + Поз = Найти(FTPАдрес, ":"); + Если Поз > 0 Тогда + Результат.Сервер = Лев(FTPАдрес, Поз - 1); + Результат.Порт = СтрокуВЧисло(Сред(FTPАдрес, Поз + 1), Результат.Порт); + Иначе + Результат.Сервер = FTPАдрес; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Заполняет шаблон из структуры параметров, поддерживает форматирование, может оставлять обрамление шаблона +// Ограничение: должны присутствовать и левый и правый элементы обрамления +// +// Параметры: +// Шаблон (Строка) - Исходный шаблон +// Параметры (Структура) - Набор параметров, которые необходимо подставить в шаблон +// Левый (Строка) - Начало обрамления параметра +// Правый (Строка) - Конец обрамления параметра +// ФорматЛевый (Строка) - Начало обрамления формата параметра +// ФорматПравый (Строка) - Конец обрамления формата параметра +// ВырезатьОбрамление (Булево) - Ложь означает, что обрамление параметра будет убрано из результата +// +// Возвращаемое значение: +// Результат (Строка) - Результат заполнения +// +Функция ЗаполнитьШаблон(Шаблон, Параметры, Левый = "[", Правый = "]", ФорматЛевый = "(", ФорматПравый = ")", ВырезатьОбрамление = Истина) Экспорт + Результат = Шаблон; + Для Каждого КлючИЗначение Из Параметры Цикл + // Замена [ключ] на [значение] + Результат = СтрЗаменить( + Результат, + Левый + КлючИЗначение.Ключ + Правый, + ?(ВырезатьОбрамление, "", Левый) + КлючИЗначение.Значение + ?(ВырезатьОбрамление, "", Правый) + ); + ДлинаФорматЛевый = СтрДлина(Левый + КлючИЗначение.Ключ + ФорматЛевый); + // Замена [ключ(формат)] на [значение] в формате + Поз1 = Найти(Результат, Левый + КлючИЗначение.Ключ + ФорматЛевый); + Пока Поз1 > 0 Цикл + Поз2 = Найти(Результат, ФорматПравый + Правый); + Если Поз2 = 0 Тогда + Прервать; + КонецЕсли; + ФорматнаяСтрока = Сред(Результат, Поз1 + ДлинаФорматЛевый, Поз2 - Поз1 - ДлинаФорматЛевый); + Попытка + НаЧтоЗаменить = ?(ВырезатьОбрамление, "", Левый) + Формат(КлючИЗначение.Значение, ФорматнаяСтрока) + ?(ВырезатьОбрамление, "", Правый); + Исключение + НаЧтоЗаменить = ?(ВырезатьОбрамление, "", Левый) + КлючИЗначение.Значение + ?(ВырезатьОбрамление, "", Правый); + КонецПопытки; + Результат = СтрЗаменить( + Результат, + Левый + КлючИЗначение.Ключ + ФорматЛевый + ФорматнаяСтрока + ФорматПравый + Правый, + НаЧтоЗаменить + ); + Поз1 = Найти(Результат, Левый + КлючИЗначение.Ключ + ФорматЛевый); + КонецЦикла; + КонецЦикла; + Возврат Результат; +КонецФункции + +// Возвращает шаблон темы по умолчанию для доставки по электронной почте +// +Функция ШаблонТемы() Экспорт + Возврат НСтр("ru = '[НаименованиеРассылки] от [ДатаВыполнения(ДЛФ=''D'')]'"); +КонецФункции + +// Возвращает шаблон тела сообщения по умолчанию для доставки по электронной почте +// +Функция ШаблонТекста() Экспорт + Возврат НСтр("ru = 'Сформированы отчеты: + | + |[СформированныеОтчеты] + | + |[СпособДоставки] + | + |[ЗаголовокСистемы] + |[ДатаВыполнения(ДЛФ=''DD'')]'"); + // +КонецФункции + +// Возвращает шаблон наименования архива по умолчанию +// +Функция ШаблонИмениАрхива() Экспорт + Возврат НСтр("ru = '[НаименованиеРассылки]_[ДатаВыполнения(ДФ=''yyyy-MM-dd'')]'"); // Формат даты не локализуется +КонецФункции + +// Возвращает набор шаблонов заполнения расписаний регламентного задания +// +Функция СписокВариантовЗаполненияРасписаний() Экспорт + + СписокВариантов = Новый СписокЗначений; + СписокВариантов.Добавить(1, НСтр("ru = 'Каждый день'")); + СписокВариантов.Добавить(2, НСтр("ru = 'Каждый второй день'")); + СписокВариантов.Добавить(3, НСтр("ru = 'Каждый четвертый день'")); + СписокВариантов.Добавить(4, НСтр("ru = 'По будням'")); + СписокВариантов.Добавить(5, НСтр("ru = 'По выходным'")); + СписокВариантов.Добавить(6, НСтр("ru = 'По понедельникам'")); + СписокВариантов.Добавить(7, НСтр("ru = 'По пятницам'")); + СписокВариантов.Добавить(8, НСтр("ru = 'По воскресеньям'")); + СписокВариантов.Добавить(9, НСтр("ru = 'В первый день месяца'")); + СписокВариантов.Добавить(10, НСтр("ru = 'В последний день месяца'")); + СписокВариантов.Добавить(11, НСтр("ru = 'Каждый квартал десятого числа'")); + СписокВариантов.Добавить(12, НСтр("ru = 'Другое...'")); + + Возврат СписокВариантов; +КонецФункции + +// Преобразует массив сообщений пользователю в одну строку +// +Функция СтрокаСообщенийПользователю(МассивОшибок = Неопределено, ДобавитьДежурнуюФразу = Истина) Экспорт + Если МассивОшибок = Неопределено Тогда + МассивОшибокПолучен = Ложь; + #Если Сервер ИЛИ ТолстыйКлиент Тогда + МассивОшибок = ПолучитьСообщенияПользователю(Истина); + МассивОшибокПолучен = Истина; + #КонецЕсли + Если НЕ МассивОшибокПолучен Тогда + Возврат ""; + КонецЕсли; + КонецЕсли; + + Отступ = Символы.ПС + Символы.ПС; + + ВсеОшибки = ""; + Для Каждого Ошибка Из МассивОшибок Цикл + ВсеОшибки = СокрЛП(ВсеОшибки + Отступ + ?(ТипЗнч(Ошибка) = Тип("Строка"), Ошибка, Ошибка.Текст)); + КонецЦикла; + Если ВсеОшибки <> "" И ДобавитьДежурнуюФразу Тогда + ВсеОшибки = ВсеОшибки + Отступ + "---" + Отступ + НСтр("ru = 'Подробности см. в журнале регистрации.'"); + КонецЕсли; + + Возврат ВсеОшибки; +КонецФункции + +// Превращает строку в число без вызова исключений. Стандартная функция преобразования +// Число() строго контролирует отсутствие каких либо символов кроме числовых. +// +Функция СтрокуВЧисло(ИсходнаяСтрока, ЗначениеПоУмолчанию = 0) + СтрокаВЧисло = Новый Соответствие; + Для Значение = 0 По 9 Цикл + СтрокаВЧисло.Вставить(Строка(Значение), Значение); + КонецЦикла; + + Результат = 0; + Для Индекс = 1 По СтрДлина(ИсходнаяСтрока) Цикл + ПоследнийРазряд = СтрокаВЧисло.Получить(Сред(ИсходнаяСтрока, Индекс, 1)); + Если ПоследнийРазряд <> Неопределено Тогда + Результат = Результат * 10 + ПоследнийРазряд; + КонецЕсли; + КонецЦикла; + + Возврат ?(Результат = 0, ЗначениеПоУмолчанию, Результат); +КонецФункции + diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/РассылкаОтчетовКлиентСервер.mdo b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/РассылкаОтчетовКлиентСервер.mdo new file mode 100644 index 000000000..5f9ae581b --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/РассылкаОтчетовКлиентСервер.mdo @@ -0,0 +1,12 @@ + + + РассылкаОтчетовКлиентСервер + + ru + Рассылка отчетов клиент сервер + + true + true + true + true + diff --git a/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl new file mode 100644 index 000000000..d29a02ff0 --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl @@ -0,0 +1,314 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Рассылка отчетов" (сервер, переопределяемый) +// +// Выполняется на клиенте, изменяется под специфику прикладной конфигурации, +// но предназначен для использования только данной подсистемой. +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//////////////////////////////////////////////////////////////////////////////// +// Механизмы расширения + +// Позволяет изменить форматы по умолчанию и установить картинки +// +// Параметры: +// СписокФорматов - (СписокЗначений) список форматов +// |- Значение - (ПеречислениеСсылка.ФорматыСохраненияОтчетов) Формат +// |- Представление - (Строка) Представление формата +// |- Пометка - (Булево) Признак того, что формат используется по умолчанию +// |- Картинка - (Картинка) Картинка формата +// +// Изменить настройки формата можно при помощи процедуры "РассылкаОтчетов.УстановитьПараметрыФормата": +// +// РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, ФорматСсылка, Картинка, ИспользоватьПоУмолчанию); +// Обязательные параметры: +// |- СписокФорматов (...) Передается из параметров процедуры "как есть" +// |- ФорматСсылка (Строка, ПеречислениеСсылка.ФорматыСохраненияОтчетов) Формат +// Необязательные параметры: +// |- Картинка (Картинка) Картинка формата +// |- ИспользоватьПоУмолчанию (Булево) Признак того, что формат используется по умолчанию. +// +// Например: +// +// РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "HTML4", , Ложь); +// РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "XLS" , , Истина); +// +// Пример использования - см. РассылкаОтчетовПовтИсп.СписокФорматов(): +// +Процедура ПереопределитьПараметрыФорматов(СписокФорматов) Экспорт + + + +КонецПроцедуры + +// Позволяет добавить описание кросс объектной связи типов для получателей рассылки. +// +// Использовать данный механизм требуется только в том случае, если: +// 1. Требуется описать и представить несколько типов как один (как в справочнике Пользователи и Группы пользователей). +// 2. Требуется изменить представление типа без изменения синонима метаданных. +// 3. Требуется указать вид контактной информации E-Mail по умолчанию. +// 4. Требуется определить группу контактной информации. +// +// Зарегистрировать тип можно при помощи процедуры: +// +// РассылкаОтчетов.ДобавитьЭлементВТаблицуТиповПолучателей(ТаблицаТипов, ДоступныеТипы, Настройки); +// Параметры: +// ТаблицаТипов (ТаблицаЗначений) - Не меняется +// ДоступныеТипы (Массив) - Не меняется +// Настройки (Структура) - Предустановленные настройки основного типа +// Обязательные параметры: +// |- ОсновнойТип - (Тип) Тип, который будет выступать как основной для +// описываемых получателей +// Необязательные параметры: +// |- ДополнительныйТип - (Тип) Дополнительный тип для описываемых получателей +// |- Представление - (Строка) Представление получателей +// |- ВидКИ - (СправочникСсылка.ВидыКонтактнойИнформации) Основной +// вид или группа контактной информации E-Mail +// |- ПутьФормыВыбора - (Строка) Путь к форме выбора +// +// Например: +// +// РассылкаОтчетов.ДобавитьЭлементВТаблицуТиповПолучателей(ТаблицаТипов, ДоступныеТипы, +// Новый Структура("ОсновнойТип, ВидКИ", +// Тип("СправочникСсылка.Контрагенты"), Справочники.ВидыКонтактнойИнформации.EmailКонтрагента +// ) +// ); +// +// Пример использования - см. РассылкаОтчетовПовтИсп.ТаблицаТиповПолучателей(): +// +Процедура ПереопределитьТаблицуТиповПолучателей(ТаблицаТипов, ДоступныеТипы) Экспорт + + +КонецПроцедуры + +// Позволяет определить свой обработчик для сохранения табличного документа в формат +// +// Параметры: +// СтандартнаяОбработка - (Булево) Признак использования стандартных механизом подсистемы для сохранения в формат +// ТабличныйДокумент - (...) Исходный табличный документ, который неоходимо сохранить +// Формат - (ПеречислениеСсылка.ФорматыСохраненияОтчетов) Формат, в котором предполагается сохранение +// ПолноеИмяФайла - (Строка) Полное имя файла, передается БЕЗ расширения, если +// +// Если используется нестандартная обработка (СтандартнаяОбработка меняется на Ложь), то +// ПолноеИмяФайла должно содержать полное имя файла с расширением +// +// Например: +// +// Если Формат = Перечисления.ФорматыСохраненияОтчетов.HTML4 Тогда +// СтандартнаяОбработка = Ложь; +// ПолноеИмяФайла = ПолноеИмяФайла +".html"; +// ТабличныйДокумент.Записать(ПолноеИмяФайла, ТипФайлаТабличногоДокумента.HTML4); +// КонецЕсли; +// +Процедура ПередСохранениемТабличногоДокументаВФормат(СтандартнаяОбработка, ТабличныйДокумент, Формат, ПолноеИмяФайла) Экспорт + + + +КонецПроцедуры + +// Позволяет определить свой обработчик разузлования списка получателей +// +// Параметры: +// ПараметрыПолучателей - (Структура) Параметры разузлования получателей рассылки +// Запрос - (Запрос) Запрос, который будет использован, если значение параметра СтандартнаяОбработка останется Истина +// СтандартнаяОбработка - (Булево) Признак использования стандартных механизмов +// Результат - (Соответствие) Получатели с их E-mail адресами +// |- Ключ - (СправочникСсылка.*) Получатель +// |- Значение - (Строка) Набор E-mail адресов в строке с разделителями +// +Процедура ПередФормированиемСпискаПолучателейРассылки(ПараметрыПолучателей, Запрос, СтандартнаяОбработка, Результат) Экспорт + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Опциональные связи с другими подсистемами + +// Если подсистема "Дополнительные отчеты и обработки" недоступна, то содержимое +// процедуры необходимо удалить или закомментировать. +// Обработка исключений производится управляющим кодом. +// +// Параметры: +// ДопОтчет (СправочникСсылка.ДополнительныеОтчетыИОбработки) Отчет, который необходимо инициализировать +// ПараметрыОтчета (Структура) Набор параметров, получаемый в процессе проверки и подключения отчета +// см. описание функции "ИнициализироватьОтчет" модуля "РассылкаОтчетов" +// Результат (Булево, Неопределено) +// |- Истина - Удалось подключить дополнительный отчет +// |- Ложь - Не удалось подключить дополнительный отчет +// |- Неопределено - По умолчанию. Подсистема доп. отчетов недоступна. +// +Процедура ПодключитьДополнительныйОтчет(ДопОтчет, ПараметрыОтчета, Результат) Экспорт + + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + Если ДопОтчет.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет + ИЛИ ДопОтчет.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда + + ПараметрыОтчета.Имя = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(ДопОтчет); + ПараметрыОтчета.Объект = ВнешниеОтчеты.Создать(ПараметрыОтчета.Имя); + ПараметрыОтчета.Метаданные = ПараметрыОтчета.Объект.Метаданные(); + + Результат = Истина; + + Иначе + + ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Элемент %1 не является дополнительным отчетом'"), + "'"+ Строка(ДопОтчет) +"'" + ); + + Результат = Ложь; + + КонецЕсли; + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + +КонецПроцедуры + +// Если подсистема "Работа с файлами" недоступна, то содержимое процедуры +// необходимо удалить или закомментировать, +// +// Параметры: см. описание процедуры "ВыполнитьДоставку" модуля "РассылкаОтчетов" +// +Процедура ВыполнитьДоставкуВПапку(ПараметрыДоставки, Вложения) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + + // Перенос вложений в таблицу + УстановитьПривилегированныйРежим(Истина); + + ТаблицаВложений = Новый ТаблицаЗначений; + ТаблицаВложений.Колонки.Добавить("ИмяФайла", Новый ОписаниеТипов("Строка")); + ТаблицаВложений.Колонки.Добавить("ПолныйПутьКФайлу", Новый ОписаниеТипов("Строка")); + ТаблицаВложений.Колонки.Добавить("Файл", Новый ОписаниеТипов("Файл")); + ТаблицаВложений.Колонки.Добавить("ФайлСсылка", Новый ОписаниеТипов("СправочникСсылка.Файлы")); + ТаблицаВложений.Колонки.Добавить("ИмяФайлаБезРасширения", Метаданные.Справочники.Файлы.Реквизиты.ПолноеНаименование.Тип); + + УстановитьПривилегированныйРежим(Ложь); + + Для Каждого Вложение Из Вложения Цикл + СтрокаТаблицы = ТаблицаВложений.Добавить(); + СтрокаТаблицы.ИмяФайла = Вложение.Ключ; + СтрокаТаблицы.ПолныйПутьКФайлу = Вложение.Значение; + СтрокаТаблицы.Файл = Новый Файл(СтрокаТаблицы.ПолныйПутьКФайлу); + СтрокаТаблицы.ИмяФайлаБезРасширения = СтрокаТаблицы.Файл.ИмяБезРасширения; + КонецЦикла; + + // Поиск существующих файлов + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | Файлы.Ссылка, + | Файлы.ПолноеНаименование + |ИЗ + | Справочник.Файлы КАК Файлы + |ГДЕ + | Файлы.ВладелецФайла = &ВладелецФайла + | И Файлы.ПолноеНаименование В(&МассивИменФайлов)"; + + Запрос.УстановитьПараметр("ВладелецФайла", ПараметрыДоставки.Папка); + Запрос.УстановитьПараметр("МассивИменФайлов", ТаблицаВложений.ВыгрузитьКолонку("ИмяФайлаБезРасширения")); + + СуществующиеФайлы = Запрос.Выполнить().Выгрузить(); + Для Каждого Файл Из СуществующиеФайлы Цикл + СтрокаТаблицы = ТаблицаВложений.Найти(Файл.ПолноеНаименование, "ИмяФайлаБезРасширения"); + СтрокаТаблицы.ФайлСсылка = Файл.Ссылка; + КонецЦикла; + + // Постоянные переменные + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Рассылка отчетов %1 от %2'"), + "'"+ ПараметрыДоставки.Рассылка +"'", + Формат(ПараметрыДоставки.ДатаВыполнения, "ДЛФ=DT") + ); + ХранитьВерсии = Истина; + ЭтоВебКлиент = Ложь; + АдресВременногоХранилищаТекста = ""; + Пользователь = Пользователи.ТекущийПользователь(); + ЗаписатьВИсторию = Истина; + ВладелецФайла = ПараметрыДоставки.Папка; + + Для Каждого Вложение Из ТаблицаВложений Цикл + // Временные переменные + АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Вложение.ПолныйПутьКФайлу)); + ВремяИзменения = Вложение.Файл.ПолучитьВремяИзменения(); + ВремяИзмененияУниверсальное = Вложение.Файл.ПолучитьУниверсальноеВремяИзменения(); + Размер = Вложение.Файл.Размер(); + РасширениеБезТочки = СтрЗаменить(Вложение.Файл.Расширение, ".", ""); + ИмяБезРасширения = Вложение.ИмяФайлаБезРасширения; + + // Запись + Если ЗначениеЗаполнено(Вложение.ФайлСсылка) Тогда + РаботаСФайламиВызовСервера.СоздатьВерсиюИОбновитьВерсиюВФайле( + ВремяИзменения, + ВремяИзмененияУниверсальное, + Вложение.ФайлСсылка, + ИмяБезРасширения, + Размер, + РасширениеБезТочки, + АдресВременногоХранилищаФайла, + АдресВременногоХранилищаТекста, + ЭтоВебКлиент, + Пользователь + ); + Иначе + Вложение.ФайлСсылка = РаботаСФайламиВызовСервера.СоздатьФайлСВерсией( + ВладелецФайла, + ИмяБезРасширения, + РасширениеБезТочки, + ВремяИзменения, + ВремяИзмененияУниверсальное, + Размер, + АдресВременногоХранилищаФайла, + АдресВременногоХранилищаТекста, + ЭтоВебКлиент, + Пользователь, + Комментарий, + ЗаписатьВИсторию + ); + КонецЕсли; + + // Заполнение ссылки на файл + Если ПараметрыДоставки.ДобавлятьСсылки <> "" Тогда + ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СтрЗаменить( + ПараметрыДоставки.ПредставлениеОтчетовПолучателя, + Вложение.ПолныйПутьКФайлу, + ПолучитьНавигационнуюСсылкуИнформационнойБазы() +"#"+ ПолучитьНавигационнуюСсылку(Вложение.ФайлСсылка) + ); + КонецЕсли; + + // Очистка + УдалитьИзВременногоХранилища(АдресВременногоХранилищаФайла); + КонецЦикла; + + // Конец СтандартныеПодсистемы.РаботаСФайлами + +КонецПроцедуры + +// Если подсистемы "Управление доступом" или "Работа с файлами" недоступны, то +// содержимое процедуры необходимо удалить или закомментировать, +// +// Параметры: см. описание процедуры "ВыполнитьДоставку" модуля "РассылкаОтчетов" +// +Процедура ПравоИзмененияПапкиИФайлов(Папка, Результат) Экспорт + + // СтандартныеПодсистемы.УправлениеДоступом + Результат = УправлениеДоступом.ЕстьПравоПоЗначениюДоступа("ИзменениеПапокИФайлов", Папка); + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + +// Если подсистема "Получение файлов из Интернета" недоступна, то содержимое +// процедуры необходимо удалить или закомментировать, +// +Процедура НастройкиПроксиНаСервере(Прокси) Экспорт + + // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.ПолучитьНастройкиПроксиНаСервере1СПредприятие(); + Если НастройкаПроксиСервера <> Неопределено Тогда + Прокси = Новый ИнтернетПрокси(); + Прокси.Установить("ftp", НастройкаПроксиСервера["Сервер"], НастройкаПроксиСервера["Порт"]); + ЗаполнитьЗначенияСвойств(Прокси, НастройкаПроксиСервера); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + +КонецПроцедуры diff --git a/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/РассылкаОтчетовПереопределяемый.mdo b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/РассылкаОтчетовПереопределяемый.mdo new file mode 100644 index 000000000..9b546aa8f --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/РассылкаОтчетовПереопределяемый.mdo @@ -0,0 +1,11 @@ + + + РассылкаОтчетовПереопределяемый + + ru + Рассылка отчетов переопределяемый + + true + true + true + diff --git a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl new file mode 100644 index 000000000..e6735f4ae --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl @@ -0,0 +1,122 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Рассылка отчетов" (сервер, повт. исп.) +// +// Выполняется на сервере, возвращаемые значения кэшируются на время сеанса. +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Возвращает список значений перечисления "ФорматыСохраненияОтчетов" +// +// Возвращаемое значение: +// СписокФорматов - (СписокЗначений) Список форматов, с пометками на системных форматах по умолчанию +// |- Значение - (ПеречислениеСсылка.ФорматыСохраненияОтчетов) Ссылка на описываемый формат +// |- Представление - (Строка) Пользовательское представление описываемого формата +// |- Пометка - (Булево) Признак использования как формата по умолчанию +// |- Картинка - (Картинка) Картинка формата +// +Функция СписокФорматов() Экспорт + СписокФорматов = Новый СписокЗначений; + + РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "HTML4", БиблиотекаКартинок.ФорматHTML, Истина); + РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "PDF" , БиблиотекаКартинок.ФорматPDF); + РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "XLSX" , БиблиотекаКартинок.ФорматExcel2007); + РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "XLS" , БиблиотекаКартинок.ФорматExcel); + РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "ODS" , БиблиотекаКартинок.ФорматOpenOfficeCalc); + РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "MXL" , БиблиотекаКартинок.ФорматMXL); + РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "DOCX" , БиблиотекаКартинок.ФорматWord2007); + РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "TXT" , БиблиотекаКартинок.ФорматTXT); + РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "ANSITXT", БиблиотекаКартинок.ФорматTXT); + + РассылкаОтчетовПереопределяемый.ПереопределитьПараметрыФорматов(СписокФорматов); + + // Оставшиеся форматы + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Форматы.Ссылка + |ИЗ + | Перечисление.ФорматыСохраненияОтчетов КАК Форматы + |ГДЕ + | (НЕ Форматы.Ссылка В (&МассивФорматов))"; + Запрос.УстановитьПараметр("МассивФорматов", СписокФорматов.ВыгрузитьЗначения()); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, Выборка.Ссылка); + КонецЦикла; + + Возврат СписокФорматов; +КонецФункции + +// Возвращает типы получателей в разрезах хранения и пользовательского представления этих типов +// +// Возвращаемое значение: +// ТаблицаТипов - (ТаблицаЗначений) Таблица типов получателей +// |- ИОМД - (СправочникСсылка.ИдентификаторыОбъектовМетаданных) Ссылка, которая хранится в базе данных +// |- ТипПолучателей - (ОписаниеТипов) Тип, которым ограничиваются значения списков получателей и исключенных +// |- Представление - (Строка) Представление типа для пользователей +// |- ОсновнойВидКИ - (СправочникСсылка.ВидыКонтактнойИнформации) вид контактной информации: e-mail, по умолчанию +// |- ГруппаКИ - (СправочникСсылка.ВидыКонтактнойИнформации) группа вида контактной информации +// |- ПутьФормыВыбора - (Строка) +// +Функция ТаблицаТиповПолучателей() Экспорт + ТаблицаТипов = Новый ТаблицаЗначений; + ТаблицаТипов.Колонки.Добавить("ИОМД", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + ТаблицаТипов.Колонки.Добавить("ТипПолучателей", Новый ОписаниеТипов("ОписаниеТипов")); + ТаблицаТипов.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + ТаблицаТипов.Колонки.Добавить("ОсновнойВидКИ", Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации")); + ТаблицаТипов.Колонки.Добавить("ГруппаКИ", Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации")); + ТаблицаТипов.Колонки.Добавить("ПутьФормыВыбора", Новый ОписаниеТипов("Строка")); + ТаблицаТипов.Колонки.Добавить("ОсновнойТип", Новый ОписаниеТипов("ОписаниеТипов")); + + ТаблицаТипов.Индексы.Добавить("ИОМД"); + ТаблицаТипов.Индексы.Добавить("ТипПолучателей"); + + ДоступныеТипы = Метаданные.Справочники.РассылкиОтчетов.ТабличныеЧасти.Получатели.Реквизиты.Получатель.Тип.Типы(); + + // Параметры справочников "Пользователи" + "Группы пользователей" + РассылкаОтчетов.ДобавитьЭлементВТаблицуТиповПолучателей(ТаблицаТипов, ДоступныеТипы, + Новый Структура("ОсновнойТип, ДополнительныйТип", + Тип("СправочникСсылка.Пользователи"), + Тип("СправочникСсылка.ГруппыПользователей") + ) + ); + + // Вызов переопределяемого модуля + РассылкаОтчетовПереопределяемый.ПереопределитьТаблицуТиповПолучателей(ТаблицаТипов, ДоступныеТипы); + + // Параметры остальных справочников + ПустойМассив = Новый Массив; + Для Каждого НеиспользованныйТип Из ДоступныеТипы Цикл + РассылкаОтчетов.ДобавитьЭлементВТаблицуТиповПолучателей(ТаблицаТипов, ПустойМассив, + Новый Структура("ОсновнойТип", НеиспользованныйТип) + ); + КонецЦикла; + + Возврат ТаблицаТипов; +КонецФункции + +// Получает пустое значение для поиска по таблице "Отчеты" или "ФорматыОтчетов" справочника "РассылкиОтчетов" +// +Функция ПустоеЗначениеОтчета() Экспорт + УстановитьПривилегированныйРежим(Истина); + Возврат Метаданные.Справочники.РассылкиОтчетов.ТабличныеЧасти.ФорматыОтчетов.Реквизиты.Отчет.Тип.ПривестиЗначение(); +КонецФункции + +// Получает заголовок системы, а если он не задан - синоним метаданных конфигурации +// +Функция ИмяЭтойИнформационнойБазы() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Результат = Константы.ЗаголовокСистемы.Получить(); + + Если ПустаяСтрока(Результат) Тогда + + Результат = Метаданные.Синоним; + + КонецЕсли; + + Возврат Результат; +КонецФункции diff --git a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/РассылкаОтчетовПовтИсп.mdo b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/РассылкаОтчетовПовтИсп.mdo new file mode 100644 index 000000000..3b1e0fc47 --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/РассылкаОтчетовПовтИсп.mdo @@ -0,0 +1,12 @@ + + + РассылкаОтчетовПовтИсп + + ru + Рассылка отчетов повт исп + + true + true + true + DuringSession + diff --git a/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl b/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl index 5c636846d..dbcb38888 100644 --- a/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl @@ -1,6 +1,11 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ПРОВЕРКИ КОРРЕКТНОСТИ ЗАПОЛНЕНИЯ РЕГЛАМЕНТИРОВАННЫХ ДАННЫХ -// +// Подсистема "Базовая функциональность". +// Процедуры и функции проверки корректности заполнения регламентированных данных +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Проверяет соответствие ИНН требованиям. // diff --git a/SSL/src/CommonModules/РегламентныеЗаданияГлобальный/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияГлобальный/Module.bsl index 0b5721684..8faca4146 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияГлобальный/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияГлобальный/Module.bsl @@ -1,11 +1,17 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ОБРАБОТКИ СИСТЕМНЫХ СОБЫТИЙ +// Подсистема "Регламентные задания". +// +//////////////////////////////////////////////////////////////////////////////// -// Процедура УведомлятьОНекорректномВыполненииРегламентныхЗаданий уведомляет -// пользователей о невыполнении регламентных заданий и "зависании" фоновых заданий. -// Процедура работает только если информационная база файловая. Для серверной ИБ -// ответственность за выполнение регламентных заданий лежит на администраторе сервера 1С. -// Подключает в процедуре РегламентныеЗаданияКлиент.ПриНачалеРаботыСистемы(). +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Уведомляет пользователей о невыполнении регламентных заданий и "зависании" фоновых заданий. +// +// Процедура работает только если информационная база файловая. +// Для серверной ИБ регламентные задания выполняются сервером 1С:Предприятия. +// +// Подключается в процедуре РегламентныеЗаданияКлиент.ПриНачалеРаботыСистемы(). // Процедура УведомлятьОНекорректномВыполненииРегламентныхЗаданий() Экспорт @@ -22,9 +28,11 @@ КонецПроцедуры -// Процедура ВыполнениеРегламентныхЗаданийВОсновномСеансе() вызывается -// обработчиком ожидания, который подключается в +// Выполняет очередное регламентное задание в основном сеансе. +// +// Вызывается обработчиком ожидания, который подключается в // РегламентныеЗаданияКлиент.ПриНачалеРаботыСистемы(). +// // Для выполнения в отдельном сеансе применяется форма // Обработки.РегламентныеИФоновыеЗадания.Форма.ВыполнениеРегламентныхЗаданий. // @@ -37,7 +45,6 @@ КонецПроцедуры -// Процедура предназначена для внутреннего использования Процедура ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданийЧерезОбработчикОжидания() Экспорт Результат = РегламентныеЗаданияКлиент.ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий(); @@ -52,7 +59,6 @@ КонецПроцедуры -// Процедура предназначена для внутреннего использования Процедура АктивизироватьГлавноеОкноТекущегоСеансаПослеЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий() Экспорт ОсновноеОкно = РегламентныеЗаданияКлиент.ОсновноеОкно(); diff --git a/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl index 0388bccf4..410473599 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl @@ -1,13 +1,71 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Регламентные задания". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ОБРАБОТКИ СИСТЕМНЫХ СОБЫТИЙ +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Запускает новый сеанс, выполняющий регламентные задания. +// Только для тонкого и обычного клиентов (Web не поддерживается). // +// Возвращаемое значение: +// Структура +// Отказ - Булево. +// ОписаниеОшибки - Строка. +// +Функция ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий() Экспорт + + Параметры = РегламентныеЗаданияСервер.ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий(Ложь); + + Если НЕ Параметры.Отказ И Параметры.ТребуетсяОткрытьОтдельныйСеанс Тогда + ПопыткаЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий(Параметры); + КонецЕсли; + + Возврат Параметры; + +КонецФункции + +// Возвращает расписание регламентного задания по идентификатору. +// +// Параметры: +// Идентификатор - Строка уникального идентификатора РегламентногоЗадания +// +// Возвращаемое значение: +// РасписаниеРегламентногоЗадания. +// +Функция ПолучитьРасписаниеРегламентногоЗадания(Знач Идентификатор) Экспорт + + Возврат ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(РегламентныеЗаданияСервер.ПолучитьРасписаниеРегламентногоЗаданияВСтруктуре(Идентификатор)); + +КонецФункции + +// Устанавливает расписание регламентного задания по идентификатору. +// +// Параметры: +// Идентификатор - Строка уникального идентификатора РегламентногоЗадания. +// Расписание - РасписаниеРегламентногоЗадания. +// +Процедура УстановитьРасписаниеРегламентногоЗадания(Знач Идентификатор, Знач Расписание) Экспорт + + РегламентныеЗаданияСервер.УстановитьРасписаниеРегламентногоЗаданияИзСтруктуры(Идентификатор, ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Расписание)); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Обработчик события ПриНачалеРаботыСистемы вызывается // для выполнения действий, требуемых для подсистемы РегламентныеЗадания. // Процедура ПриНачалеРаботыСистемы() Экспорт - + + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + ИЛИ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Возврат; + КонецЕсли; + Если Найти(ПараметрЗапуска, "DoScheduledJobs") <> 0 Тогда Предупреждать = (Найти(ПараметрЗапуска, "SkipMessageBox") = 0); ОтдельныйСеанс = (Найти(ПараметрЗапуска, "AloneIBSession") <> 0); @@ -90,66 +148,7 @@ КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ПРИКЛАДНОГО РАЗРАБОТЧИКА -// - -// Функция ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий() запускает новый сеанс, -// выполняющий регламентные задания. -// Только для тонкого и обычного клиентов (Web не поддерживается). -// -// Возвращаемое значение: -// Структура -// Отказ - Булево. -// ОписаниеОшибки - Строка. -// -Функция ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий() Экспорт - - Параметры = РегламентныеЗаданияСервер.ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий(Ложь); - - Если НЕ Параметры.Отказ И Параметры.ТребуетсяОткрытьОтдельныйСеанс Тогда - ПопыткаЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий(Параметры); - КонецЕсли; - - Возврат Параметры; - -КонецФункции - -// Функция ПолучитьРасписаниеРегламентногоЗадания возвращает -// расписание регламентного задания по идентификатору -// -// Параметры: -// Идентификатор - Строка уникального идентификатора РегламентногоЗадания -// -// Возвращаемое значение: -// РасписаниеРегламентногоЗадания -// -Функция ПолучитьРасписаниеРегламентногоЗадания(Знач Идентификатор) Экспорт - - Возврат ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(РегламентныеЗаданияСервер.ПолучитьРасписаниеРегламентногоЗаданияВСтруктуре(Идентификатор)); - -КонецФункции - -// Функция УстановитьРасписаниеРегламентногоЗадания устанавливает -// расписание регламентного задания по идентификатору -// -// Параметры: -// Идентификатор - Строка уникального идентификатора РегламентногоЗадания -// Расписание - РасписаниеРегламентногоЗадания -// -Процедура УстановитьРасписаниеРегламентногоЗадания(Знач Идентификатор, Знач Расписание) Экспорт - - РегламентныеЗаданияСервер.УстановитьРасписаниеРегламентногоЗаданияИзСтруктуры(Идентификатор, ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Расписание)); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЧИЕ ПРОЦЕДУРЫ -// - -// Процедура ПопыткаЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий() -// делает попытку открытия нового сеанса, обрабатывающего регламентные задания. +// Выполняет попытку открытия нового сеанса, обрабатывающего регламентные задания. // // Параметры: // Параметры - Структура, используемые свойства: @@ -187,14 +186,16 @@ КонецПроцедуры -// Процедура ПриОшибкеВыполненияРегламентныхЗаданий вызывается -// из процедуры РегламентныеЗаданияГлобальный.УведомлятьОНекорректномВыполненииРегламентныхЗаданий() -// и РегламентныеЗаданияКлиент.ПриНачалеРаботыСистемы(). -// Вызов происходит, если обнаружено, что что-то не так в выполнении регламентных заданий: -// нет сеанса выполнения или сеанс есть, но "висит" (долго "не работает"). +// Оповещает пользователя об ошибке выполнения регламентных заданий. +// +// Вызывается из процедуры РегламентныеЗаданияГлобальный.УведомлятьОНекорректномВыполненииРегламентныхЗаданий() и +// РегламентныеЗаданияКлиент.ПриНачалеРаботыСистемы(). +// +// Вызов происходит, если обнаружено, что нет сеанса выполнения или +// сеанс есть, но "висит" (долго "не работает"). // // Параметры: -// ОписаниеОшибки - Строка +// ОписаниеОшибки - Строка. // Процедура ПриОшибкеВыполненияРегламентныхЗаданий(ОписаниеОшибки) Экспорт @@ -212,28 +213,22 @@ БиблиотекаКартинок.ОшибкаВыполненияРегламентныхЗаданий); КонецЕсли; - КонецПроцедуры -// Процедура ПодключитьГлобальныйОбработчикОжидания() применяется -// из экранных форм, т.к. в модуле формы метод переопределен. -// +// Подключает глобальный обработчик ожидания в форме. Процедура ПодключитьГлобальныйОбработчикОжидания(ИмяПроцедуры, Интервал, Однократно = Ложь) Экспорт - + ПодключитьОбработчикОжидания(ИмяПроцедуры, Интервал, Однократно); КонецПроцедуры -// Процедура ОтключитьГлобальныйОбработчикОжидания() применяется -// из экранных форм, т.к. в модуле формы метод переопределен. -// +// Отключает глобальный обработчик ожидания в форме. Процедура ОтключитьГлобальныйОбработчикОжидания(ИмяПроцедуры) Экспорт ОтключитьОбработчикОжидания(ИмяПроцедуры); - + КонецПроцедуры -// Процедура предназначена для внутреннего использования Функция ОсновноеОкно() Экспорт ОсновноеОкно = Неопределено; diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl index 30d701855..7c7de2d58 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl @@ -1,19 +1,32 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Регламентные задания". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ВНУТРЕННЕГО ИСПОЛЬЗОВАНИЯ -// Общего назначения -// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Вызывает исключение, если у пользователя нет права администрирования. +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. // -Процедура ВызватьИсключениеЕслиНетПраваАдминистрирования() +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт - Если НЕ ПривилегированныйРежим() Тогда - ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); - КонецЕсли; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.2.2.2"; + Обработчик.Процедура = "РегламентныеЗаданияСервер.КонвертироватьНастройкиВыполненияРегламентныхЗаданий_1_2_2_2"; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для контроля выполнения + // Определяет, что текущий сеанс выполняет регламентные задания, // если это не так и указано установить текущий сеанс в этом качестве, // то производится попытка установки. @@ -160,45 +173,71 @@ КонецФункции -// Добавляет в список Обработчики процедуры-обработчики обновления, -// необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.2.2.2"; - Обработчик.Процедура = "РегламентныеЗаданияСервер.КонвертироватьНастройкиВыполненияРегламентныхЗаданий_1_2_2_2"; - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с регламентными заданиями -// Обработчик обновления настроек выполнения регламентных заданий в новом размещении -Процедура КонвертироватьНастройкиВыполненияРегламентныхЗаданий_1_2_2_2() Экспорт +Процедура УстановитьИспользованиеРегламентногоЗадания(Знач Идентификатор, Знач Использование) Экспорт УстановитьПривилегированныйРежим(Истина); - Настройки = ХранилищеОбщихНастроек.Загрузить("НастройкиВыполненияРегламентныхЗаданий", , , ""); - Настройки = ?(ТипЗнч(Настройки) = Тип("ХранилищеЗначения"), Настройки.Получить(), Неопределено); - - Если Настройки <> Неопределено Тогда - Настройки = ПроверитьНастройки(Настройки); - Константы.НастройкиВыполненияРегламентныхЗаданий.Установить(Настройки); - КонецЕсли; - - ХранилищеОбщихНастроек.Удалить("НастройкиВыполненияРегламентныхЗаданий", Неопределено, ""); + Задание = ПолучитьРегламентноеЗадание(Идентификатор); + Задание.Использование = Использование; + Задание.Записать(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ВНУТРЕННЕГО ИСПОЛЬЗОВАНИЯ -// Для работы с регламентными заданиями -// +Функция ПолучитьРасписаниеРегламентногоЗаданияВСтруктуре(Знач Идентификатор) Экспорт + + ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + Возврат ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(ПолучитьРегламентноеЗадание(Идентификатор).Расписание); + +КонецФункции -// Эмулирует в тонком клиенте системную процедуру ВыполнитьОбработкуЗаданий(), но может применяться и -// в толстом клиенте. +Процедура УстановитьРасписаниеРегламентногоЗаданияИзСтруктуры(Знач Идентификатор, Знач РасписаниеВСтруктуре) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Задание = ПолучитьРегламентноеЗадание(Идентификатор); + Задание.Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(РасписаниеВСтруктуре); + Задание.Записать(); + +КонецПроцедуры + +// Возвращает настройки выполнения регламентных заданий для файлового режима. +// +// Возвращаемое значение: +// Настройки - Структура. +// +Функция ПолучитьНастройкиВыполненияРегламентныхЗаданий() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Настройки = Константы.НастройкиВыполненияРегламентныхЗаданий.Получить(); + Настройки = ?(ТипЗнч(Настройки) = Тип("ХранилищеЗначения"), Настройки.Получить(), Неопределено); + + Возврат ПроверитьНастройки(Настройки); + +КонецФункции + +// Устанавливает настройки выполнения регламентных заданий для файлового режима. +// +// Параметры: +// Настройки - Структура. +// +Процедура УстановитьНастройкиВыполненияРегламентныхЗаданий(Настройки) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Настройки = ПроверитьНастройки(Настройки); + + Константы.НастройкиВыполненияРегламентныхЗаданий.Установить(Новый ХранилищеЗначения(Настройки)); + +КонецПроцедуры + +// Эмулирует в тонком клиенте системную процедуру ВыполнитьОбработкуЗаданий(), +// но может применяться и в толстом клиенте. // // Место хранения экземпляров фоновых заданий - ВременноеХранилище. // Время хранения экземпляров - до закрытия сеанса клиента, выполняющего регламентные задания. @@ -327,86 +366,7 @@ КонецПроцедуры -// Устанавливает настройки выполнения регламентных заданий для файлового режима. -// -// Параметры: -// Настройки - Структура. -// -Процедура УстановитьНастройкиВыполненияРегламентныхЗаданий(Настройки) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Настройки = ПроверитьНастройки(Настройки); - - Константы.НастройкиВыполненияРегламентныхЗаданий.Установить(Новый ХранилищеЗначения(Настройки)); - -КонецПроцедуры - -// Получает настройки выполнения регламентных заданий для файлового режима. -// -// Возвращаемое значение: -// Настройки - Структура. -// -Функция ПолучитьНастройкиВыполненияРегламентныхЗаданий() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Настройки = Константы.НастройкиВыполненияРегламентныхЗаданий.Получить(); - Настройки = ?(ТипЗнч(Настройки) = Тип("ХранилищеЗначения"), Настройки.Получить(), Неопределено); - - Возврат ПроверитьНастройки(Настройки); - -КонецФункции - -// Возвращает представление регламентного задания, -// это по порядку исключения незаполненных реквизитов: -// Наименование, Метаданные.Синоним, Метаданные.Имя. -// -// Параметры: -// Задание - РегламентноеЗадание, Строка - если строка, тогда УникальныйИдентификатор строкой. -// -// Возвращаемое значение: -// Строка. -// -Функция ПредставлениеРегламентногоЗадания(Знач Задание) Экспорт - - ВызватьИсключениеЕслиНетПраваАдминистрирования(); - УстановитьПривилегированныйРежим(Истина); - - Если ТипЗнч(Задание) = Тип("РегламентноеЗадание") Тогда - РегламентноеЗадание = Задание; - Иначе - РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(Задание)); - КонецЕсли; - - Если РегламентноеЗадание <> Неопределено Тогда - Представление = РегламентноеЗадание.Наименование; - Если ПустаяСтрока(РегламентноеЗадание.Наименование) Тогда - // Применим синоним вместо наименования - Представление = РегламентноеЗадание.Метаданные.Синоним; - Если ПустаяСтрока(Представление) Тогда - // Применим имя вместо синонима - Представление = РегламентноеЗадание.Метаданные.Имя; - КонецЕсли - КонецЕсли; - Иначе - Представление = ТекстНеОпределено(); - КонецЕсли; - - Возврат Представление; - -КонецФункции - -// Служебная функция, возвращающая текст "<не определено>" с локализацией. -// Используется для целей локализации -// -Функция ТекстНеОпределено() Экспорт - - Возврат НСтр("ru = '<не определено>'"); - -КонецФункции - -// Получает РегламентноеЗадание из информационной +// Возвращает РегламентноеЗадание из информационной // базы по строке уникального идентификатора. // // Параметры: @@ -494,6 +454,52 @@ КонецФункции +// Возвращает представление регламентного задания, +// это по порядку исключения незаполненных реквизитов: +// Наименование, Метаданные.Синоним, Метаданные.Имя. +// +// Параметры: +// Задание - РегламентноеЗадание, Строка - если строка, тогда УникальныйИдентификатор строкой. +// +// Возвращаемое значение: +// Строка. +// +Функция ПредставлениеРегламентногоЗадания(Знач Задание) Экспорт + + ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(Задание) = Тип("РегламентноеЗадание") Тогда + РегламентноеЗадание = Задание; + Иначе + РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(Задание)); + КонецЕсли; + + Если РегламентноеЗадание <> Неопределено Тогда + Представление = РегламентноеЗадание.Наименование; + + Если ПустаяСтрока(РегламентноеЗадание.Наименование) Тогда + Представление = РегламентноеЗадание.Метаданные.Синоним; + + Если ПустаяСтрока(Представление) Тогда + Представление = РегламентноеЗадание.Метаданные.Имя; + КонецЕсли + КонецЕсли; + Иначе + Представление = ТекстНеОпределено(); + КонецЕсли; + + Возврат Представление; + +КонецФункции + +// Возвращает текст "<не определено>". +Функция ТекстНеОпределено() Экспорт + + Возврат НСтр("ru = '<не определено>'"); + +КонецФункции + // Возвращает значение флажка настройки выполнения регламентных заданий. // // Возвращаемое значение: @@ -550,19 +556,17 @@ // сеанс уже не открыт. В других случаях устанавливается Отказ. // // Возвращаемое значение: -// Структура - ТребуетсяОткрытьОтдельныйСеанс - Булево - Истина. -// ДополнительныеПараметрыКоманднойСтроки - Строка - дополнительные параметры командной строки для -// запуска сеанса выполнения регламентных заданий. -// ВыполненаПопыткаОткрытия - Булево - Ложь, для использования в вызывающей процедуре. -// УведомлятьОНекорректномВыполнении - Булево. -// ПериодУведомления - Число. -// Отказ - Булево. -// ОписаниеОшибки - Строка. +// Структура - ТребуетсяОткрытьОтдельныйСеанс - Булево - Истина. +// ДополнительныеПараметрыКоманднойСтроки - Строка - дополнительные параметры командной строки для +// запуска сеанса выполнения регламентных заданий. +// ВыполненаПопыткаОткрытия - Булево - Ложь, для использования в вызывающей процедуре. +// УведомлятьОНекорректномВыполнении - Булево. +// ПериодУведомления - Число. +// Отказ - Булево. +// ОписаниеОшибки - Строка. // Функция ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий(Знач ПоНастройкеАвтоОткрытия = Ложь) Экспорт - УстановитьПривилегированныйРежим(Истина); - Результат = Новый Структура; Результат.Вставить("ТребуетсяОткрытьОтдельныйСеанс", Ложь); Результат.Вставить("ВыполненаПопыткаОткрытия", Ложь); @@ -573,9 +577,10 @@ Результат.Вставить("ОписаниеОшибки", ""); Если ПоНастройкеАвтоОткрытия Тогда - Результат.Вставить("ТекущийПользовательАдминистратор", ПравоДоступа("Администрирование", Метаданные, ПользователиИнформационнойБазы.ТекущийПользователь())); + Результат.Вставить("ТекущийПользовательАдминистратор", Пользователи.ЭтоПолноправныйПользователь(, Истина)); КонецЕсли; + УстановитьПривилегированныйРежим(Истина); Результат.УведомлятьОНекорректномВыполнении = НужноУведомлятьОНекорректномВыполненииРегламентныхЗаданий(Результат.ПериодУведомления); Настройки = ПолучитьНастройкиВыполненияРегламентныхЗаданий(); @@ -625,44 +630,41 @@ КонецФункции -// Предназначена для внутреннего использования -Функция ПолучитьРасписаниеРегламентногоЗаданияВСтруктуре(Знач Идентификатор) Экспорт +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с фоновыми заданиями + +// Отменяет фоновое задание, если это возможно, а именно, если оно выполняется на сервере, и активно. +// +// Параметры: +// Идентификатор - Строка уникального идентификатора ФоновогоЗадания. +// +Процедура ОтменитьФоновоеЗадание(Идентификатор) Экспорт + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ВызватьИсключение( НСтр("ru ='Фоновые задания не используются + |в файловой информационной базе.'")); + КонецЕсли; ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); - Возврат ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(ПолучитьРегламентноеЗадание(Идентификатор).Расписание); + Отбор = Новый Структура("УникальныйИдентификатор", Новый УникальныйИдентификатор(Идентификатор)); + МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + Если МассивФоновыхЗаданий.Количество() = 1 Тогда + ФоновоеЗадание = МассивФоновыхЗаданий[0]; + Иначе + ВызватьИсключение( НСтр("ru = 'Фоновое задание не найдено на сервере.'") ); + КонецЕсли; -КонецФункции - -// Предназначена для внутреннего использования -Процедура УстановитьРасписаниеРегламентногоЗаданияИзСтруктуры(Знач Идентификатор, Знач РасписаниеВСтруктуре) Экспорт + Если ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда + ВызватьИсключение( НСтр("ru = 'Задание не выполняется, его нельзя отменить.'") ); + КонецЕсли; - УстановитьПривилегированныйРежим(Истина); - - Задание = ПолучитьРегламентноеЗадание(Идентификатор); - Задание.Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(РасписаниеВСтруктуре); - Задание.Записать(); + ФоновоеЗадание.Отменить(); КонецПроцедуры -// Предназначена для внутреннего использования -Процедура УстановитьИспользованиеРегламентногоЗадания(Знач Идентификатор, Знач Использование) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Задание = ПолучитьРегламентноеЗадание(Идентификатор); - Задание.Использование = Использование; - Задание.Записать(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ВНУТРЕННЕГО ИСПОЛЬЗОВАНИЯ -// Для работы с фоновыми заданиями -// - -// "Эмулирует" функцию ФоновыеЗадания.ПолучитьФоновыеЗадания() для серверной и файловой ИБ. +// "Эмулирует" функцию ФоновыеЗадания.ПолучитьФоновыеЗадания() для файловой ИБ. // Структуру таблицы смотри в функции ПустаяТаблицаСвойствФоновыхЗаданий(). // // Параметры: @@ -899,40 +901,6 @@ КонецФункции -// Отменяет фоновое задание, если это возможно, а именно, если оно выполняется на сервере, и активно. -// -// Параметры: -// Идентификатор - Строка уникального идентификатора ФоновогоЗадания. -// -// Возвращаемое значение: -// Булево - НЕ Отказ. -// -Процедура ОтменитьФоновоеЗадание(Идентификатор) Экспорт - - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ВызватьИсключение( НСтр("ru ='Фоновые задания не используются - |в файловой информационной базе.'")); - КонецЕсли; - - ВызватьИсключениеЕслиНетПраваАдминистрирования(); - УстановитьПривилегированныйРежим(Истина); - - Отбор = Новый Структура("УникальныйИдентификатор", Новый УникальныйИдентификатор(Идентификатор)); - МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); - Если МассивФоновыхЗаданий.Количество() = 1 Тогда - ФоновоеЗадание = МассивФоновыхЗаданий[0]; - Иначе - ВызватьИсключение( НСтр("ru = 'Фоновое задание не найдено на сервере.'") ); - КонецЕсли; - - Если ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда - ВызватьИсключение( НСтр("ru = 'Задание не выполняется, его нельзя отменить.'") ); - КонецЕсли; - - ФоновоеЗадание.Отменить(); - -КонецПроцедуры - // Возвращает многострочную Строку содержащую Сообщения и ОписаниеИнформацииОбОшибке, // если фоновое задание найдено по идентификатору и сообщения/ошибки есть. // @@ -974,8 +942,16 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ -// +// Вспомогательные процедуры и функции + +// Вызывает исключение, если у пользователя нет права администрирования. +Процедура ВызватьИсключениеЕслиНетПраваАдминистрирования() + + Если НЕ ПривилегированныйРежим() Тогда + ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + КонецЕсли; + +КонецПроцедуры // Возвращает новую таблицу свойств фоновых заданий. // @@ -1047,7 +1023,6 @@ КонецФункции // Возвращает структуру, описывающую состояние выполнения регламентных заданий. -// Функция ПолучитьСостояниеВыполненияРегламентныхЗаданий(Заблокировать = Ложь) // Подготовка данных для проверки или начальной установки свойств прочитанного состояния. @@ -1083,12 +1058,11 @@ // Сохраняет в структуре СостояниеВыполненияРегламентныхЗаданий переданное состояние. // // Параметры: -// Состояние - Структура - изменённое значение функции -// ПолучитьСостояниеВыполненияРегламентныхЗаданий(). -// ИзмененныеСвойства - Неопределено, Строка; -// Неопределено - требуется записать состояние, иначе сохранить только указанные свойства +// Состояние - Структура - изменённое значение функции ПолучитьСостояниеВыполненияРегламентныхЗаданий(). +// +// ИзмененныеСвойства - Неопределено - требуется записать состояние, иначе сохранить только указанные свойства. // Строка - список имен свойств, разделенный запятыми, -// которые необходимо сохранить +// которые необходимо сохранить. // Процедура СохранитьСостояниеВыполненияРегламентныхЗаданий(Состояние, Знач ИзмененныеСвойства = Неопределено) @@ -1102,18 +1076,18 @@ КонецПроцедуры -// Предназначена только для режима "файл-сервер", используется в процедуре -// ВыполнитьРегламентныеЗадания() +// Выполняет регламентное задание в режиме файловой информационной базе. +// Используется в процедуре ВыполнитьРегламентныеЗадания(). // // Параметры: // Состояние - Структура. // Задание - РегламентноеЗадание. // ЗапускВручную - Булево. -// МоментЗапуска - Неопределено, Дата - Устанавливает момент запуска или возвращает момент запуска -// МоментОкончания - Неопределено, Дата - Возвращает момент окончание +// МоментЗапуска - Неопределено, Дата - устанавливает момент запуска или возвращает момент запуска. +// МоментОкончания - Неопределено, Дата - возвращает момент окончание. // // Возвращаемое значение -// Булево. Если Ложь, значит процедура регламентного задания уже выполняется +// Булево. Если Ложь, значит процедура регламентного задания уже выполняется. // Функция ВыполнитьРегламентноеЗадание(Знач Задание, Знач ЗапускВручную = Ложь, @@ -1121,12 +1095,12 @@ МоментОкончания = Неопределено, НомерСеанса = Неопределено, НачалоСеанса = Неопределено) - + СвойстваПоследнегоФоновогоЗадания = ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); Если СвойстваПоследнегоФоновогоЗадания <> Неопределено И СвойстваПоследнегоФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.Активно Тогда - // + НомерСеанса = СвойстваПоследнегоФоновогоЗадания.НомерСеанса; НачалоСеанса = СвойстваПоследнегоФоновогоЗадания.НачалоСеанса; Возврат Ложь; @@ -1141,13 +1115,14 @@ МоментЗапуска = ?(ТипЗнч(МоментЗапуска) <> Тип("Дата") ИЛИ НЕ ЗначениеЗаполнено(МоментЗапуска), ТекущаяДатаСеанса(), МоментЗапуска); - // Создание свойств нового фонового псевдо задания + // Создание свойств нового фонового псевдо-задания. СвойстваФоновогоЗадания = ПустаяТаблицаСвойствФоновыхЗаданий().Добавить(); СвойстваФоновогоЗадания.Идентификатор = Строка(Новый УникальныйИдентификатор()); - СвойстваФоновогоЗадания.ПопыткаЗапуска = ?(СвойстваПоследнегоФоновогоЗадания <> Неопределено И - СвойстваПоследнегоФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно, - СвойстваПоследнегоФоновогоЗадания.ПопыткаЗапуска + 1, - 1); + СвойстваФоновогоЗадания.ПопыткаЗапуска = ?( + СвойстваПоследнегоФоновогоЗадания <> Неопределено + И СвойстваПоследнегоФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно, + СвойстваПоследнегоФоновогоЗадания.ПопыткаЗапуска + 1, + 1); СвойстваФоновогоЗадания.Наименование = НаименованиеФоновогоЗадания; СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания = Строка(Задание.УникальныйИдентификатор); СвойстваФоновогоЗадания.Расположение = "\\" + ИмяКомпьютера(); @@ -1155,12 +1130,14 @@ СвойстваФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.Активно; СвойстваФоновогоЗадания.Начало = МоментЗапуска; СвойстваФоновогоЗадания.НомерСеанса = НомерСеансаИнформационнойБазы(); + Для каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл Если Сеанс.НомерСеанса = СвойстваФоновогоЗадания.НомерСеанса Тогда СвойстваФоновогоЗадания.НачалоСеанса = Сеанс.НачалоСеанса; Прервать; КонецЕсли; КонецЦикла; + // Подготовка команды для выполнения метода вместо фонового задания. СтрокаПараметров = ""; Индекс = 0; @@ -1172,7 +1149,7 @@ Индекс = Индекс + 1; КонецЦикла; - // Сохранение информации о запуске + // Сохранение информации о запуске. СохраняемоеЗначение = Новый ХранилищеЗначения(ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СвойстваФоновогоЗадания)); ХранилищеОбщихНастроек.Сохранить("СостояниеРегламентногоЗадания_" + Строка(Задание.УникальныйИдентификатор), , СохраняемоеЗначение, , ""); @@ -1199,7 +1176,7 @@ Если Свойства.НомерСеанса = СвойстваФоновогоЗадания.НомерСеанса И Свойства.НачалоСеанса = СвойстваФоновогоЗадания.НачалоСеанса Тогда - // Маловероятной перезаписи из-за отсутствия блокировки не произошло, поэтому можно записать свойства + // Маловероятной перезаписи из-за отсутствия блокировки не произошло, поэтому можно записать свойства. СохраняемоеЗначение = Новый ХранилищеЗначения(ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СвойстваФоновогоЗадания)); ХранилищеОбщихНастроек.Сохранить("СостояниеРегламентногоЗадания_" + Строка(Задание.УникальныйИдентификатор), , СохраняемоеЗначение, , ""); КонецЕсли; @@ -1218,15 +1195,44 @@ Строка.НаСервере = Истина; Строка.Идентификатор = ФоновоеЗадание.УникальныйИдентификатор; РегламентноеЗадание = ФоновоеЗадание.РегламентноеЗадание; + Если РегламентноеЗадание = Неопределено И СтроковыеФункцииКлиентСервер.ЭтоУникальныйИдентификатор(ФоновоеЗадание.Ключ) Тогда - // + РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(ФоновоеЗадание.Ключ)); КонецЕсли; - Строка.ИдентификаторРегламентногоЗадания = ?(РегламентноеЗадание = Неопределено, "", РегламентноеЗадание.УникальныйИдентификатор); - Строка.ОписаниеИнформацииОбОшибке = ?(ФоновоеЗадание.ИнформацияОбОшибке = Неопределено, "", ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке)); + Строка.ИдентификаторРегламентногоЗадания = ?( + РегламентноеЗадание = Неопределено, + "", + РегламентноеЗадание.УникальныйИдентификатор); + + Строка.ОписаниеИнформацииОбОшибке = ?( + ФоновоеЗадание.ИнформацияОбОшибке = Неопределено, + "", + ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке)); + Индекс = Индекс - 1; КонецЦикла; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы + +// Обработчик обновления настроек выполнения регламентных заданий в новом размещении. +Процедура КонвертироватьНастройкиВыполненияРегламентныхЗаданий_1_2_2_2() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Настройки = ХранилищеОбщихНастроек.Загрузить("НастройкиВыполненияРегламентныхЗаданий", , , ""); + Настройки = ?(ТипЗнч(Настройки) = Тип("ХранилищеЗначения"), Настройки.Получить(), Неопределено); + + Если Настройки <> Неопределено Тогда + Настройки = ПроверитьНастройки(Настройки); + Константы.НастройкиВыполненияРегламентныхЗаданий.Установить(Настройки); + КонецЕсли; + + ХранилищеОбщихНастроек.Удалить("НастройкиВыполненияРегламентныхЗаданий", Неопределено, ""); + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl index 32cf7263d..b44f39826 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Резервное копирование ИБ". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Процедура проверяет необходимость проведения резервного копирования // или показа пользователю необходимого информационного сообщения. Процедура ПриНачалеРаботыСистемы() Экспорт @@ -38,15 +46,16 @@ КонецПроцедуры -// Процедура запускает выполнение резервного копирования -// при завершении работы системы при выборе соответствующего -// пункта настройки помощника. -Процедура ВыполнитьКопированиеПередЗавершениемРаботыСистемы() Экспорт - ПараметрыФормы = Новый Структура("ТипВызова, ТекущаяСтраница", 2, "СтраницаИнформацииИВыполненияРезервногоКопирования"); - ФормаОбработки = ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеИнформационнойБазы", ПараметрыФормы); +// Подключает обработчик ожидания начала резервного копирования. +Процедура ПодключитьОжиданиеРезервногоКопирования() Экспорт + РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки("ОтложенноеРезервноеКопирование", Истина, ПараметрыРезервногоКопированияИБ); КонецПроцедуры -// Запускает резервное копирование по расписанию. + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Запускает резервное копирование по расписанию. // Состоит из двух этапов: 1 - очистка каталога с копиями, 2 - непосредственно резервное копирование. Процедура ПровестиРезервноеКопирование() Экспорт @@ -67,16 +76,15 @@ // Удаление резервных копий. Если НастройкиУдаления.УдалятьПоПериоду Тогда - Для Каждого ЭлементФайл Из МассивФайлов Цикл - ПараметрУдаления = ?((ТекущаяДата() - НастройкиУдаления.ЗначениеПараметра) > ЭлементФайл.ПолучитьВремяИзменения(), Истина, Ложь); + Для Каждого ЭлементФайл Из МассивФайлов Цикл + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); + ПараметрУдаления = ?((ТекущаяДата - НастройкиУдаления.ЗначениеПараметра) > ЭлементФайл.ПолучитьВремяИзменения(), Истина, Ложь); Если ПараметрУдаления Тогда СписокУдаляемыхФайлов.Добавить(ЭлементФайл); КонецЕсли; КонецЦикла; - ИначеЕсли МассивФайлов.Количество() < НастройкиУдаления.ЗначениеПараметра Тогда - Возврат; - Иначе + ИначеЕсли МассивФайлов.Количество() >= НастройкиУдаления.ЗначениеПараметра Тогда СписокФайлов = Новый СписокЗначений; СписокФайлов.ЗагрузитьЗначения(МассивФайлов); @@ -120,6 +128,10 @@ // При старте системы проверяет, первый ли это запуск после проведения резервного копирования. // Если да - выводит форму обработчика с результатами резервного копирования. +// +// Параметры: +// ПараметрыРезервногоКопирования - Структура - параметры резервного копирования. +// Процедура ПроверитьРезервноеКопированиеИБ(ПараметрыРезервногоКопирования) Экспорт ЗначениеНастройкиРезервногоКопирования = ПараметрыРезервногоКопирования; @@ -146,7 +158,7 @@ КонецЕсли; КонецПроцедуры -// По результатам анализа параметров резервного копирования выдает соответствующее оповещение. + // По результатам анализа параметров резервного копирования выдает соответствующее оповещение. // // Параметры: // ВариантОповещения - Строка - результат проверки на посылку оповещения @@ -178,20 +190,17 @@ ТекстПояснения = НСтр("ru = 'Рекомендуется настроить резервное копирование информационной базы.'"); ПоказатьОповещениеПользователя(НСтр("ru = 'Резервное копирование.'"), "e1cib/app/Обработка.НастройкаРезервногоКопированияИБ", ТекстПояснения, БиблиотекаКартинок.Предупреждение32); - РезервноеКопированиеИБСервер.УстановитьДатуПоследнегоНапоминания(ТекущаяДата()); + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); + РезервноеКопированиеИБСервер.УстановитьДатуПоследнегоНапоминания(ТекущаяДата); КонецЕсли; КонецПроцедуры -// Подключает обработчик ожидания начала резервного копирования. -Процедура ПодключитьОжиданиеРезервногоКопирования() Экспорт - РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки("ОтложенноеРезервноеКопирование", Истина, ПараметрыРезервногоКопированияИБ); -КонецПроцедуры - // Получает каталог файла по его имени // // Параметры: ПутьКФайлу - Строка, путь к указанному файлу. // // Возвращаемое значение: Строка, путь к каталогу с указанным файлом. +// Функция ПолучитьКаталогФайла(Знач ПутьКФайлу) Экспорт ПозицияСимвола = ПолучитьНомерПоследнегоСимвола(ПутьКФайлу, "\"); Если ПозицияСимвола > 1 Тогда @@ -224,17 +233,29 @@ // Возвращает значение глобальной переменной модуля приложения. // Используется для обработчиков ожидания из глобального клиентского модуля. +// +// Возвращаемое значение - Дата - дата отложенного резервного копирования. +// Функция ПолучитьДатуКопирования() Экспорт + Возврат ДатаОтложенногоРезервногоКопирования; + КонецФункции // Возвращает тип события журнала регистрации для данной подсистемы. +// +// Возвращаемое значение - Строка - тип события журнала регистрации. +// Функция СобытиеЖурналаРегистрации() Экспорт + Возврат НСтр("ru = 'Резервное копирование информационной базы'"); + КонецФункции // Возвращает параметры скрипта резервного копирования. // +// Возвращаемое значение - Структура - стурктура скрипта резервного копирования. +// Функция КлиентскиеПараметрыРезервногоКопирования() Экспорт #Если НЕ ВебКлиент Тогда @@ -257,13 +278,17 @@ СтруктураПараметров.Вставить("СобытиеЖурналаРегистрации", НСтр("ru = 'Резервное копирование ИБ'")); // Определение каталога временных файлов. - СтруктураПараметров.Вставить("КаталогВременныхФайловОбновления" , КаталогВременныхФайлов() + "1Cv8Backup." + Формат(ТекущаяДата(), "ДФ=ггММддЧЧммсс") + "\"); + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); + СтруктураПараметров.Вставить("КаталогВременныхФайловОбновления" , КаталогВременныхФайлов() + "1Cv8Backup." + Формат(ТекущаяДата, "ДФ=ггММддЧЧммсс") + "\"); Возврат СтруктураПараметров; #КонецЕсли КонецФункции -// Возвращает параметры резеврного копирования. +// Возвращает параметры резеврного копирования +// из глобальной переменной "ПараметрыРезервногоКопированияИБ". +// +// Возвращаемое значение - Структура - параметры резервного копирования ИБ. // Функция ПолучитьПараметрыРезервногоКопированияИБ() Экспорт @@ -291,7 +316,7 @@ КонецЕсли; КонецЕсли; - ДатаПроверки = ТекущаяДата(); + ДатаПроверки = ОбщегоНазначенияКлиент.ДатаСеанса(); Если Параметры.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования > ДатаПроверки Тогда Возврат Ложь; КонецЕсли; @@ -312,11 +337,12 @@ КонецПроцедуры -// Функция проверяет настройки резервного копирования -// Возвращает пользователю: -// Неопределено - если нет резервного копирования. -// "Дату" - если имеется отложенное резервное копирование. -// Истина - если имеется резервное копирование при завершении работы. +// Функция проверяет настройки резервного копирования. +// +// Возвращаемое значение: +// Неопределено - если нет резервного копирования, +// Дата - если имеется отложенное резервное копирование, +// Булево - если имеется резервное копирование при завершении работы. // Функция ПроверитьНаличиеРезервногоКопирования() #Если ВебКлиент Тогда @@ -338,7 +364,8 @@ Если ДатаОтложенногоРезервногоКопирования = Неопределено Тогда ДатаОтложенногоРезервногоКопирования = Дата('00010101'); КонецЕсли; - Если ДатаОтложенногоРезервногоКопирования > ТекущаяДата() Тогда + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); + Если ДатаОтложенногоРезервногоКопирования > ТекущаяДата Тогда Возврат ДатаОтложенногоРезервногоКопирования; КонецЕсли; КонецЕсли; @@ -350,7 +377,7 @@ // Формирует вопросы при завершении работы системы. // // Параметры: -// Вопросы - список знаячений вопросов. +// Предупреждения - Массив - список предупреждений. // Процедура ПриЗавершенииРаботыСистемы(Предупреждения) Экспорт @@ -362,7 +389,7 @@ ТипОтвета = ТипЗнч(Ответ); ИмеетсяРезервноеКопирование = Ложь; Если ТипОтвета = Тип("Дата") Тогда - ТекстФлажка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отложить завершение работы системы на после резервного копирования (%1)'"), Ответ); + ТекстФлажка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Завершить работу системы после резервного копирования %1'"), Ответ); МассивПараметров = Новый Массив; МассивПараметров.Добавить(Ответ); @@ -382,10 +409,9 @@ КонецЕсли; Если ИмеетсяРезервноеКопирование Тогда - ДействиеПриУстановленномФлажке = Новый Структура("Форма, ПараметрыФормы", - ФормаОбработки, ПараметрыФормы); - СтруктураПредупреждения = Новый Структура("ТекстФлажка, ДействиеПриУстановленномФлажке", - ТекстФлажка, ДействиеПриУстановленномФлажке); + ДействиеПриУстановленномФлажке = Новый Структура("Форма, ПараметрыФормы", ФормаОбработки, ПараметрыФормы); + СтруктураПредупреждения = Новый Структура("ТекстФлажка, ДействиеПриУстановленномФлажке", ТекстФлажка, ДействиеПриУстановленномФлажке); Предупреждения.Добавить(СтруктураПредупреждения); - КонецЕсли; + КонецЕсли; + КонецПроцедуры diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl index 10e066ca8..0b5262baf 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl @@ -1,42 +1,16 @@ -// Обработчик ожидания выполнения резервного копирования. +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Резервное копирование ИБ". // -Процедура ОтложенноеИнтерактивноеРезервноеКопирование(ПараметрыКопирования, КоличествоПользователей) Экспорт - ДатаКопирования = РезервноеКопированиеИБКлиент.ПолучитьДатуКопирования(); - Если ТекущаяДата() > ДатаКопирования Тогда - ПараметрыРезервногоКопированияИБНаКлиенте = РезервноеКопированиеИБКлиент.ПолучитьПараметрыРезервногоКопированияИБ(); - РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки("ОтложенноеРезервноеКопирование", Ложь, ПараметрыРезервногоКопированияИБНаКлиенте); - РезервноеКопированиеИБКлиент.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопированияИБНаКлиенте); +//////////////////////////////////////////////////////////////////////////////// - НачатьРезервноеКопирование(Ложь); - Иначе - - Если КоличествоПользователей = 1 Тогда - - ТекстВопроса = НСтр("ru = 'В данный момент с базой больше никто не работает. Выполнить резервное копирование?'"); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 30, КодВозвратаДиалога.Да, - Нстр("ru = 'Провести резервное копирование прямо сейчас'"), КодВозвратаДиалога.Да); - - Если Ответ = КодВозвратаДиалога.Да ИЛИ Ответ = КодВозвратаДиалога.Таймаут Тогда - ПараметрыРезервногоКопированияИБНаКлиенте = РезервноеКопированиеИБКлиент.ПолучитьПараметрыРезервногоКопированияИБ(); - РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки("ОтложенноеРезервноеКопирование", Ложь, ПараметрыРезервногоКопированияИБНаКлиенте); - РезервноеКопированиеИБКлиент.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопированияИБНаКлиенте); - - НачатьРезервноеКопирование(Истина); - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура НачатьРезервноеКопирование(ПараметрОтключенияПользователей) - ПараметрыФормы = Новый Структура("ТипВызова, ТекущаяСтраница, ЗаголовокНадписи", 1, "СтраницаИнформацииИВыполненияРезервногоКопирования", ""); - ФормаОбработки = ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеИнформационнойБазы", ПараметрыФормы); -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Выполняет обработчик ожидания старта автоматического резервного копирования // в процессе работы пользователя, а также повторного оповещения после игнорировании первоначального. // Процедура ОбработчикДействийРезервногоКопирования() Экспорт + ПараметрыРезервногоКопированияИБНаКлиенте = РезервноеКопированиеИБКлиент.ПолучитьПараметрыРезервногоКопированияИБ(); ПроводитьАвтоматическоеРезервноеКопирование = РезервноеКопированиеИБКлиент.НеобходимостьАвтоматическогоРезервногоКопирования(); @@ -55,3 +29,53 @@ КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Обработчик ожидания выполнения резервного копирования. +// +// Параметры: +// ПараметрыКопирования - Структура - параметры резервного копирования. +// КоличествоПользователей - Число - количество активных пользователей. +// +Процедура ОтложенноеИнтерактивноеРезервноеКопирование(ПараметрыКопирования, КоличествоПользователей) Экспорт + + ДатаКопирования = РезервноеКопированиеИБКлиент.ПолучитьДатуКопирования(); + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); + Если ТекущаяДата > ДатаКопирования Тогда + ПараметрыРезервногоКопированияИБНаКлиенте = РезервноеКопированиеИБКлиент.ПолучитьПараметрыРезервногоКопированияИБ(); + РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки("ОтложенноеРезервноеКопирование", Ложь, ПараметрыРезервногоКопированияИБНаКлиенте); + РезервноеКопированиеИБКлиент.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопированияИБНаКлиенте); + + НачатьРезервноеКопирование(); + Иначе + + Если КоличествоПользователей = 1 Тогда + + ТекстВопроса = НСтр("ru = 'В данный момент с базой больше никто не работает. Выполнить резервное копирование?'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 30, КодВозвратаДиалога.Да, + Нстр("ru = 'Провести резервное копирование прямо сейчас'"), КодВозвратаДиалога.Да); + + Если Ответ = КодВозвратаДиалога.Да ИЛИ Ответ = КодВозвратаДиалога.Таймаут Тогда + ПараметрыРезервногоКопированияИБНаКлиенте = РезервноеКопированиеИБКлиент.ПолучитьПараметрыРезервногоКопированияИБ(); + РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки("ОтложенноеРезервноеКопирование", Ложь, ПараметрыРезервногоКопированияИБНаКлиенте); + РезервноеКопированиеИБКлиент.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопированияИБНаКлиенте); + + НачатьРезервноеКопирование(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Откывает форму выполнения резервного копирования. +// +Процедура НачатьРезервноеКопирование() + + ПараметрыФормы = Новый Структура("ТипВызова, ТекущаяСтраница, ЗаголовокНадписи", 1, "СтраницаИнформацииИВыполненияРезервногоКопирования", ""); + ФормаОбработки = ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеИнформационнойБазы", ПараметрыФормы); + +КонецПроцедуры + + diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl index 9a0a80ff3..110e22f78 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl @@ -1,14 +1,27 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Резервное копирование ИБ". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Возвращает коэффициент, позволяющий вычислить количество секунд в каждом интервале. // +// Параметры: +// ТипПериодаСтрока - Строка - имя интервала. +// +// Возвращаемое значение - Число - количество секунд интервала. +// Функция ПолучитьВременнойПараметрПоСтроке(ТипПериодаСтрока) Экспорт Если ТипПериодаСтрока = "Минута" Тогда Возврат 60; ИначеЕсли ТипПериодаСтрока = "Час" Тогда Возврат 3600; ИначеЕсли ТипПериодаСтрока = "День" Тогда - Возврат 3600*24; + Возврат 3600 * 24; ИначеЕсли ТипПериодаСтрока = "Неделя" Тогда - Возврат 3600*24*7; + Возврат 3600 * 24 * 7; КонецЕсли; КонецФункции @@ -59,6 +72,8 @@ // Возвращает сохраненные параметры резервного копирования. // +// Возвращаемое значение - Структура - параметры резервного копирования. +// Функция ПолучитьПараметрыРезервногоКопирования() Экспорт Параметры = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПараметрыРезервногоКопирования"); Если Параметры = Неопределено ИЛИ Не Параметры.Свойство("ОтложенноеРезервноеКопирование") Тогда @@ -69,6 +84,9 @@ // Сохраняет параметры резервного копирования. // +// Параметры: +// СтруктураПараметров - Структура - параметры резервного копирования. +// Процедура УстановитьПараметрыРезервногоКопирования(СтруктураПараметров) Экспорт ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПараметрыРезервногоКопирования", , СтруктураПараметров); КонецПроцедуры @@ -79,6 +97,7 @@ // Булево - Истина, если настал момент проведения резервного копирования. // Функция НеобходимостьАвтоматическогоРезервногоКопирования() Экспорт + Параметры = ПолучитьПараметрыРезервногоКопирования(); Если Параметры = Неопределено Тогда Возврат Ложь; @@ -102,11 +121,17 @@ ДатаНачалаПроверки = Параметры.ДатаПоследнегоРезервногоКопирования; РасписаниеЗначение = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(Расписание); Возврат РасписаниеЗначение.ТребуетсяВыполнение(ДатаПроверки, ДатаНачалаПроверки); + КонецФункции // Устанавливает значение ближайшего следующего автоматического резервного копирования в соответствии с расписанием. // +// Параметры: +// НачальнаяНастройка - Булево - признак начальной настройки. +// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. +// Процедура УстановитьДатуСледующегоАвтоматическогоКопирования(НачальнаяНастройка = Ложь, ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт + Параметры = ПолучитьНастройкиРезервногоКопирования(); ТекущаяДата = ТекущаяДатаСеанса(); Если НачальнаяНастройка Тогда @@ -128,11 +153,15 @@ КонецЕсли; ПараметрыРезервногоКопированияИБНаКлиенте = Параметры; УстановитьПараметрыРезервногоКопирования(Параметры); + КонецПроцедуры // Возвращает значение настройки "Статус резервного копирования" в части результата. // Используется при начале работы системы для показа формы с результатами резервного копирования. // +// Параметры: +// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. +// Процедура УстановитьРезультатРезервногоКопирования(ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт СтруктураПараметров = ПолучитьНастройкиРезервногоКопирования(); СтруктураПараметров.ПроведеноКопирование = Ложь; @@ -153,8 +182,11 @@ // Возвращает количество работающих с ИБ пользователей. // -// Параметры: ТолькоАдминистраторы - булево, -// признак того, что учитываются только работающие пользователи с административными правами. +// Параметры: +// ТолькоАдминистраторы - Булево - признак того, что учитываются только работающие пользователи с административными правами. +// +// Возвращаемое значение - Число - количество работающих пользователей. +// Функция ПолучитьКоличествоАктивныхПользователей(ТолькоАдминистраторы = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -182,13 +214,13 @@ КонецЦикла; Возврат КоличествоАдминистраторов; + КонецФункции // Устанавливает дату последнего оповещения пользователя. // // Параметры: -// ДатаНапоминания - дата и время последнего оповещения пользователя -// о необходимости проведения резервного копирования. +// ДатаНапоминания - Дата - дата и время последнего оповещения пользователя о необходимости проведения резервного копирования. // Процедура УстановитьДатуПоследнегоНапоминания(ДатаНапоминания) Экспорт ПараметрыОповещений = ПолучитьПараметрыРезервногоКопирования(); @@ -199,19 +231,25 @@ // Останавливает механизм автоматического резервного копирования. // Устанавливает пустое расписание и минимальную дату копирования в будущее время. // +// Параметры: +// ПроводитьПриЗавершении - Булево - признак проведения резервного копирования при завершении работы. +// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. +// Процедура ОстановитьАвтоматическоеРезервноеКопирование(ПроводитьПриЗавершении = Ложь, ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт + ПараметрыАвтоматическогоКопирования = ПолучитьНастройкиРезервногоКопирования(); ПараметрыАвтоматическогоКопирования.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = Дата(2100, 12, 31); ПараметрыАвтоматическогоКопирования.ПроводитьРезервноеКопированиеПриЗавершенииРаботы = ПроводитьПриЗавершении; ПараметрыРезервногоКопированияИБНаКлиенте = ПараметрыАвтоматическогоКопирования; УстановитьПараметрыРезервногоКопирования(ПараметрыАвтоматическогоКопирования); + КонецПроцедуры // Устанавливает настройку в параметры резервного копирования. // // Параметры: -// ИмяЭлемента - имя параметра. -// ЗначениеЭлемента - значение параметра. +// ИмяЭлемента - Строка - имя параметра. +// ЗначениеЭлемента - Произвольный тип - значение параметра. // Процедура УстановитьЗначениеНастройки(ИмяЭлемента, ЗначениеЭлемента, ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт СтруктураНастроек = ПолучитьПараметрыРезервногоКопирования(); @@ -222,7 +260,11 @@ // Возвращает структуру с параметрами для работы приложения. // -// Параметры : НаКлиент - булево, признак передачи параметров на клиент +// Параметры: +// НаКлиент - Булево - признак передачи параметров на клиент. +// +// Возвращаемое значение - Структура - параметры резервного копирования. +// Функция ПолучитьНастройкиРезервногоКопирования(НаКлиент = Ложь) Экспорт Если Не ПолучитьДоступностьРолейОповещения() Тогда Возврат Неопределено; @@ -260,16 +302,16 @@ // Возвращает клиентскую структуру с параметрами для работы приложения. // // Параметры: -// ИсходнаяСтруктура - Структура - структура параметров резервного копирования. +// ИсходнаяСтруктура - Структура - структура параметров резервного копирования. // -// Возвращаемое значение: -// Структура. -// Скопированная структура параметров резервного копирования. +// Возвращаемое значение - Структура - скопированная структура параметров резервного копирования. // Функция СформироватьКлиентскуюСтруктуру(ИсходнаяСтруктура) + КлиентскаяСтруктура = Новый Структура("ДатаПоследнегоОповещения, ОтложенноеРезервноеКопирование, ПараметрОповещения, КоличествоПользователей, ДатаПоследнегоРезервногоКопирования"); ЗаполнитьЗначенияСвойств(КлиентскаяСтруктура, ИсходнаяСтруктура); Возврат КлиентскаяСтруктура; + КонецФункции // Обновляет результат восстановления и обновляет структуру параметров резервного копирования. @@ -314,7 +356,9 @@ Возврат Результат; КонецФункции -// Выполняет начальное заполнение настроек автоматического резервного копирования. +// Возвращает начальное заполнение настроек автоматического резервного копирования. +// +// Возвращаемое значение - Структура - начальное заполнение параметров резервного копирования. // Функция НачальноеЗаполнениеНастроекРезервногоКопирования() Экспорт ТекущаяДата = ТекущаяДатаСеанса(); @@ -349,15 +393,19 @@ Возврат Параметры; КонецФункции -// Возвращает признак доступности ролей "Полные права", "Получатель напоминания о резервном копировании" -// или ПолноправныйПользовательИБ(). +// Возвращает признак доступности роли "ПолучениеНапоминанийОРезервномКопировании". +// +// Возвращаемое значение - Булево - доступность роли. +// Функция ПолучитьДоступностьРолейОповещения() Экспорт - Возврат РольДоступна("ПолучениеНапоминанийОРезервномКопировании") - ИЛИ РольДоступна("ПолныеПрава") - ИЛИ Пользователи.ЭтоПолноправныйПользовательИБ(); + Возврат Пользователи.РолиДоступны("ПолучениеНапоминанийОРезервномКопировании"); КонецФункции // Останавливает оповещения о резервном копировании. +// +// Параметры: +// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервногот копирования. +// Процедура ОстановитьСервисОповещения(ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт Настройка = ПолучитьНастройкиРезервногоКопирования(); Настройка.ПериодОповещения = 0; @@ -369,7 +417,10 @@ // Устанавливает элемент "Код выбора" настроек резервного копирования. // -// Параметры: КодПереключателя - число. +// Параметры: +// КодПереключателя - Число - код переключателя. +// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. +// Процедура УстановитьКодВыбора(КодПереключателя, ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт Структура = ПолучитьНастройкиРезервногоКопирования(); Структура.ВыборПунктаНастройки = КодПереключателя; @@ -384,6 +435,11 @@ // Процедура, вызываемая из скрипта через com-соединение. // Записывает результат проведенного копирования в настройки. +// +// Параметры: +// Результат - Булево - результат копирования. +// ИмяФайлаРезервнойКопии - Строка - имя файла резервной копии. +// Процедура ЗавершитьРезервноеКопирование(Результат, ИмяФайлаРезервнойКопии = "") Экспорт СтруктураРезультата = ПолучитьНастройкиРезервногоКопирования(); СтруктураРезультата.ПроведеноКопирование = Истина; @@ -396,6 +452,9 @@ // Вызывается из скрипта через com-соединение для // записи результата проведенного восстановления ИБ в настройки. // +// Параметры: +// Результат - Булево - результат восстановления. +// Процедура ЗавершитьВосстановление(Результат) Экспорт СтруктураРезультата = ПолучитьНастройкиРезервногоКопирования(); СтруктураРезультата.ПроведеноВосстановление = Истина; @@ -404,6 +463,8 @@ // Возвращает настройки обработчиков ожидания. // +// Возвращаемое значение - Структура - параметры резервного копирования. +// Функция ПолучитьНастройкиОбработчиковОжидания() Экспорт СтруктураВозврата = Новый Структура; ПараметрыКопирования = ПолучитьНастройкиРезервногоКопирования(); @@ -417,9 +478,13 @@ Возврат СтруктураВозврата; КонецФункции -// Возвращает размер файла в килобайтах +// Возвращает размер файла в килобайтах. +// +// Параметры: +// ПутьКФайлу - Строка - полный путь к файлу. +// +// Возвращаемое значение - Чмсло - размер файла в килобайтах. // -// Параметры: ПутьКФайлу - строка, полный путь к файлу Функция ОпределитьРазмерФайлаСКопией(ПутьКФайлу) Экспорт ИсследуемыйФайл = Новый Файл(ПутьКФайлу); Если Не ИсследуемыйФайл.Существует() Тогда diff --git a/SSL/src/CommonModules/СоединенияИБ/Module.bsl b/SSL/src/CommonModules/СоединенияИБ/Module.bsl index ddf6002e8..7023d59fa 100644 --- a/SSL/src/CommonModules/СоединенияИБ/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБ/Module.bsl @@ -1,7 +1,17 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ БЛОКИРОВКИ И ЗАВЕРШЕНИЯ СОЕДИНЕНИЙ С ИБ +// Подсистема "Завершение работы пользователей". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//////////////////////////////////////////////////////////////////////////////// +// Блокировка и завершение соединений с ИБ. // Устанавливает блокировку соединений ИБ. +// Если вызывается из сеанса с установленными значениями разделителей, +// то устанавливает блокировку сеансов области данных. // // Параметры // ТекстСообщения – Строка – текст, который будет частью сообщения об ошибке @@ -12,49 +22,93 @@ // командной строки "/uc" или к параметру строки // соединения "uc", чтобы установить соединение с // информационной базой несмотря на блокировку. +// Не применимо для блокировки сеансов области данных. // // Возвращаемое значение: // Булево – Истина, если блокировка установлена успешно. // Ложь, если для выполнения блокировки недостаточно прав. // Функция УстановитьБлокировкуСоединений(Знач ТекстСообщения = "", - Знач КодРазрешения = "КодРазрешения") Экспорт + Знач КодРазрешения = "КодРазрешения") Экспорт - Если НЕ ПравоДоступа("Администрирование", Метаданные) Тогда - Возврат Ложь; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + Возврат Ложь; + КонецЕсли; + + Блокировка = НовыеПараметрыБлокировкиСоединений(); + Блокировка.Установлена = Истина; + Блокировка.Начало = ТекущаяДатаСеанса(); + Блокировка.Сообщение = СформироватьСообщениеБлокировки(ТекстСообщения, КодРазрешения); + Блокировка.Эксклюзивная = Пользователи.ЭтоПолноправныйПользователь(, Истина); + УстановитьБлокировкуСеансовОбластиДанных(Блокировка); + Возврат Истина; + Иначе + Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Возврат Ложь; + КонецЕсли; + + Блокировка = Новый БлокировкаСеансов; + Блокировка.Установлена = Истина; + Блокировка.Начало = ТекущаяДатаСеанса(); + Блокировка.КодРазрешения = КодРазрешения; + Блокировка.Сообщение = СформироватьСообщениеБлокировки(ТекстСообщения, КодРазрешения); + УстановитьБлокировкуСеансов(Блокировка); + Возврат Истина; КонецЕсли; - Блокировка = Новый БлокировкаСеансов; - Блокировка.Установлена = Истина; - Блокировка.Начало = ТекущаяДатаСеанса(); - Блокировка.КодРазрешения = КодРазрешения; - Блокировка.Сообщение = СформироватьСообщениеБлокировки(ТекстСообщения, КодРазрешения); - УстановитьБлокировкуСеансов(Блокировка); - Возврат Истина; - КонецФункции -// Определяет, установлена ли блокировка соединений при пакетном +// Определить, установлена ли блокировка соединений при пакетном // обновлении конфигурации информационной базы // +// Возвращаемое значение: +// Булево - Истина, если установлена, ложь - Иначе. +// Функция УстановленаБлокировкаСоединений() Экспорт - ТекущийРежим = ПолучитьБлокировкуСеансов(); - Возврат ТекущийРежим.Установлена; - + УстановитьПривилегированныйРежим(Истина); + ТекущийРежимОбластиДанных = ПолучитьБлокировкуСеансовОбластиДанных(); + ТекущийРежимИБ = ПолучитьБлокировкуСеансов(); + ТекущаяДата = ТекущаяДатаСеанса(); + Возврат УстановленаБлокировкаСоединенийНаДату(ТекущийРежимОбластиДанных, ТекущаяДата) + Или УстановленаБлокировкаСоединенийНаДату(ТекущийРежимИБ, ТекущаяДата); + КонецФункции -// Возвращает параметры блокировки соединений ИБ. +// Получить параметры блокировки соединений ИБ для использования на стороне клиента. // // Параметры: // ПолучитьКоличествоСеансов - Булево - если Истина, то в возвращаемой структуре // заполняется поле КоличествоСеансов. // +// Возвращаемое значение: +// Структура – с полями: +// Установлена - Булево - Истина, если установлена блокировка, Ложь - Иначе. +// Начало - Дата - дата начала блокировки. +// Конец - Дата - дата окончания блокировки. +// Сообщение - Строка - сообщение пользователю. +// ИнтервалОжиданияЗавершенияРаботыПользователей - Число - интервал в секундах. +// КоличествоСеансов - 0, если параметр ПолучитьКоличествоСеансов = Ложь +// ТекущаяДатаСеанса - Дата - текщая дата сеанса. +// Функция ПараметрыБлокировкиСеансов(Знач ПолучитьКоличествоСеансов = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); - - ТекущийРежим = ПолучитьБлокировкуСеансов(); + ТекущийРежимОбластиДанных = ПолучитьБлокировкуСеансовОбластиДанных(); + ТекущийРежимИБ = ПолучитьБлокировкуСеансов(); + ТекущаяДата = ТекущаяДатаСеанса(); + ТекущийРежим = НовыеПараметрыБлокировкиСоединений(); + Если УстановленаБлокировкаСоединенийНаДату(ТекущийРежимИБ, ТекущаяДата) Тогда + ТекущийРежим = ТекущийРежимИБ; + ИначеЕсли УстановленаБлокировкаСоединенийНаДату(ТекущийРежимОбластиДанных, ТекущаяДата) Тогда + ТекущийРежим = ТекущийРежимОбластиДанных; + ИначеЕсли ТекущийРежимИБ.Установлена Тогда + ТекущийРежим = ТекущийРежимИБ; + Иначе + ТекущийРежим = ТекущийРежимОбластиДанных; + КонецЕсли; Возврат Новый Структура( "Установлена,Начало,Конец,Сообщение,ИнтервалОжиданияЗавершенияРаботыПользователей,КоличествоСеансов,ТекущаяДатаСеанса", @@ -78,48 +132,287 @@ // Функция РазрешитьРаботуПользователей() Экспорт - Если НЕ ПравоДоступа("Администрирование", Метаданные) Тогда - Возврат Ложь; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + Возврат Ложь; + КонецЕсли; + + ТекущийРежим = ПолучитьБлокировкуСеансовОбластиДанных(); + Если ТекущийРежим.Установлена Тогда + НовыйРежим = НовыеПараметрыБлокировкиСоединений(); + НовыйРежим.Установлена = Ложь; + УстановитьБлокировкуСеансовОбластиДанных(НовыйРежим); + КонецЕсли; + Возврат Истина; + + Иначе + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Возврат Ложь; + КонецЕсли; + + ТекущийРежим = ПолучитьБлокировкуСеансов(); + Если ТекущийРежим.Установлена Тогда + НовыйРежим = Новый БлокировкаСеансов; + НовыйРежим.Установлена = Ложь; + УстановитьБлокировкуСеансов(НовыйРежим); + КонецЕсли; + Возврат Истина; КонецЕсли; - ТекущийРежим = ПолучитьБлокировкуСеансов(); - Если ТекущийРежим.Установлена Тогда - НовыйРежим = Новый БлокировкаСеансов; - НовыйРежим.Установлена = Ложь; - УстановитьБлокировкуСеансов(НовыйРежим); - КонецЕсли; - Возврат Истина; - КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ПРИНУДИТЕЛЬНОГО ОТКЛЮЧЕНИЯ СЕАНСОВ ИБ +// Блокировка регламентных заданий. -// Отключает сеанс по номеру сеанса +// Установить или снять блокировку регламентных заданий. +// +// Параметры +// Значение – Булево - Истина, если устанавливать, Ложь - Иначе. +// +Процедура УстановитьБлокировкуРегламентныхЗаданий(Значение) Экспорт + + Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + СоединенияИБКлиентСервер.УстановитьБлокировкуРегламентныхЗаданий(Значение); + +КонецПроцедуры + +// Получить текущее состояние блокировки регламентных заданий. +// +// Возвращаемое значение: +// Булево – Истина, если блокировка установлена. +// +Функция БлокировкаРегламентныхЗаданийУстановлена() Экспорт + + Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + Возврат СоединенияИБКлиентСервер.БлокировкаРегламентныхЗаданийУстановлена(); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Блокировка сеансов областей данных. + +// Получить пустую структуру с параметрами блокировки сеансов области данных. +// +// Возвращаемое значение: +// Структура – с полями: +// Начало - Дата - время начала действия блокировки +// Конец - Дата - время завершения действия блокировки +// Сообщение - Строка - сообщения для пользователей, выполняющих вход в заблокированную область данных +// Установлена - Булево - признак того, что блокировка установлена +// Эксклюзивная - Булево - блокировка не может быть изменена администратором приложения +// +Функция НовыеПараметрыБлокировкиСоединений() Экспорт + + Возврат Новый Структура("Конец,Начало,Сообщение,Установлена,Эксклюзивная", + Дата(1,1,1), Дата(1,1,1), "", Ложь, Ложь); + +КонецФункции + +// Установить блокировку сеансов области данных. +// +// Параметры: +// Параметры – Структура – см. НовыеПараметрыБлокировкиСоединений +// ПоМестномуВремени - Булево - время начала и окончания блокировки указаны в местном (поясном) времени сеанса. +// Если Ложь, то в универсальном времени. +// +Процедура УстановитьБлокировкуСеансовОбластиДанных(Параметры, Знач ПоМестномуВремени = Истина) Экспорт + + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + КонецЕсли; + + Эксклюзивная = Ложь; + Если Не Параметры.Свойство("Эксклюзивная", Эксклюзивная) Тогда + Эксклюзивная = Ложь; + КонецЕсли; + Если Эксклюзивная И Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + КонецЕсли; + + СтруктураНастроек = Параметры; + Если ТипЗнч(Параметры) = Тип("БлокировкаСеансов") Тогда + СтруктураНастроек = НовыеПараметрыБлокировкиСоединений(); + ЗаполнитьЗначенияСвойств(СтруктураНастроек, Параметры); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + НаборБлокировок = РегистрыСведений.БлокировкиСеансовОбластиДанных.СоздатьНаборЗаписей(); + НаборБлокировок.Отбор.ОбластьДанных.Установить(ОбщегоНазначения.ЗначениеРазделителяСеанса()); + НаборБлокировок.Прочитать(); + НаборБлокировок.Очистить(); + Если Параметры.Установлена Тогда + Блокировка = НаборБлокировок.Добавить(); + Блокировка.ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + Блокировка.НачалоБлокировки = ?(ПоМестномуВремени И ЗначениеЗаполнено(СтруктураНастроек.Начало), + УниверсальноеВремя(СтруктураНастроек.Начало), СтруктураНастроек.Начало); + Блокировка.КонецБлокировки = ?(ПоМестномуВремени И ЗначениеЗаполнено(СтруктураНастроек.Конец), + УниверсальноеВремя(СтруктураНастроек.Конец), СтруктураНастроек.Конец); + Блокировка.СообщениеБлокировки = СтруктураНастроек.Сообщение; + Блокировка.Эксклюзивная = СтруктураНастроек.Эксклюзивная; + КонецЕсли; + НаборБлокировок.Записать(); + +КонецПроцедуры + +// Получить информацию о блокировке сеансов области данных. +// +// Параметры: +// ПоМестномуВремени - Булево - время начала и окончания блокировки необходимо вернуть +// в местном (поясном) времени сеанса. Если Ложь, то +// возвращается в универсальном времени. +// +// Возвращаемое значение: +// Структура – см. НовыеПараметрыБлокировкиСоединений +// +Функция ПолучитьБлокировкуСеансовОбластиДанных(Знач ПоМестномуВремени = Истина) Экспорт + + Результат = НовыеПараметрыБлокировкиСоединений(); + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат Результат; + КонецЕсли; + + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + НаборБлокировок = РегистрыСведений.БлокировкиСеансовОбластиДанных.СоздатьНаборЗаписей(); + НаборБлокировок.Отбор.ОбластьДанных.Установить(ОбщегоНазначения.ЗначениеРазделителяСеанса()); + НаборБлокировок.Прочитать(); + Если НаборБлокировок.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + Блокировка = НаборБлокировок[0]; + Результат.Начало = ?(ПоМестномуВремени И ЗначениеЗаполнено(Блокировка.НачалоБлокировки), + МестноеВремя(Блокировка.НачалоБлокировки), Блокировка.НачалоБлокировки); + Результат.Конец = ?(ПоМестномуВремени И ЗначениеЗаполнено(Блокировка.КонецБлокировки), + МестноеВремя(Блокировка.КонецБлокировки), Блокировка.КонецБлокировки); + Результат.Сообщение = Блокировка.СообщениеБлокировки; + Результат.Эксклюзивная = Блокировка.Эксклюзивная; + ТекущаяДата = ТекущаяДатаСеанса(); + Результат.Установлена = Истина; + // уточняем результат по периоду блокировки + Результат.Установлена = Не ЗначениеЗаполнено(Блокировка.КонецБлокировки) + Или Блокировка.КонецБлокировки >= ТекущаяДата + Или УстановленаБлокировкаСоединенийНаДату(Результат, ТекущаяДата); + Возврат Результат; + +КонецФункции + +// Заполнить структуру параметров, необходимых для работы клиентского кода +// данной подсистемы при запуске конфигурации, т.е. в обработчиках событий +// - ПередНачаломРаботыСистемы, +// - ПриНачалеРаботыСистемы +// +// Параметры: +// Параметры - Структура - структура параметров запуска. +// +Процедура ПроверитьБлокировкуСоединенийОбластиДанных(Параметры) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + Если Не УстановленаБлокировкаСоединений() Тогда + Возврат; + КонецЕсли; + + ТекущийРежим = ПолучитьБлокировкуСеансовОбластиДанных(); + УстановитьПривилегированныйРежим(Ложь); + + Если ЗначениеЗаполнено(ТекущийРежим.Конец) Тогда + ПериодБлокировки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'на период с %1 по %2'"), + ТекущийРежим.Начало, ТекущийРежим.Конец); + Иначе + ПериодБлокировки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'с %1'"), ТекущийРежим.Начало); + КонецЕсли; + Если ЗначениеЗаполнено(ТекущийРежим.Сообщение) Тогда + ПричинаБлокировки = НСтр("ru = 'по причине:'") + Символы.ПС + ТекущийРежим.Сообщение; + Иначе + ПричинаБлокировки = НСтр("ru = 'для проведения регламентных работ'"); + КонецЕсли; + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Администратором приложения установлена блокировка работы пользователей %1 %2. + | + |Приложение временно недоступно.'"), + ПериодБлокировки, ПричинаБлокировки); + Параметры.Вставить("СеансыОбластиДанныхЗаблокированы", ТекстСообщения); + ТекстСообщения = ""; + Если (Пользователи.ЭтоПолноправныйПользователь() И Не ТекущийРежим.Эксклюзивная) + Или Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Администратором приложения установлена блокировка работы пользователей %1 %2. + | + |Войти в заблокированное приложение?'"), + ПериодБлокировки, ПричинаБлокировки); + КонецЕсли; + Параметры.Вставить("ПредложениеСнятьБлокировку", ТекстСообщения); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Принудительное отключение сеансов. + +// Отключает сеанс по номеру сеанса. // // Параметры -// ПараметрыАдминистрированияИБ – Структура – параметры администрирования ИБ // НомерСеанса - Число - номер сеанса для отключения +// СообщениеОбОшибке - Строка - в этом параметре возвращается текст сообщения об ошибке в случае неудачи // // Возвращаемое значение: // Булево – результат отключения сеанса. // -Функция ОтключитьСеанс(НомерСеанса, Сообщение) Экспорт +Функция ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке) Экспорт - Возврат СоединенияИБКлиентСервер.ОтключитьСеанс(НомерСеанса, Сообщение); + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + КонецЕсли; + + СтандартнаяОбработка = Истина; + Результат = Истина; + СтандартныеПодсистемыПереопределяемый.ПриОтключенииСеанса(НомерСеанса, Результат, СообщениеОбОшибке, СтандартнаяОбработка); + Если Не СтандартнаяОбработка Тогда + Возврат Результат; + КонецЕсли; + Если СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда + УстановитьПривилегированныйРежим(Истина); + Возврат СоединенияИБКлиентСервер.ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке); + Иначе // Для Linux + СообщениеОбОшибке = НСтр("Невозможно принудительно завершить сеансы при работе через веб-сервер, + | так как на сервере не установлена ОС Microsoft Windows"); + ЗаписатьНазванияСоединенийИБ(СообщениеОбОшибке); + Возврат Ложь; + КонецЕсли; КонецФункции // Отключить все активные соединения ИБ (кроме текущего сеанса). // // Параметры -// ПараметрыАдминистрированияИБ – Структура – параметры администрирования ИБ. +// ПараметрыАдминистрированияИБ – Структура – параметры администрирования ИБ. // // Возвращаемое значение: // Булево – результат отключения соединений. // Функция ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ) Экспорт + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); Возврат СоединенияИБКлиентСервер.ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ); КонецФункции @@ -132,24 +425,31 @@ // ВыдаватьСообщения – Булево – разрешить вывод интерактивных сообщений. // // Возвращаемое значение: -// Булево – Истина, если проверка завершена успешно. +// Булево – Истина, если проверка завершена успешно. // Процедура ПроверитьПараметрыАдминистрированияИБ(ПараметрыАдминистрированияИБ, Знач ПодробноеСообщениеОбОшибке = Ложь) Экспорт + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); СоединенияИБКлиентСервер.ПроверитьПараметрыАдминистрированияИБ(ПараметрыАдминистрированияИБ, ПодробноеСообщениеОбОшибке); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СЕРВИСНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// +// Прочее. // Возвращает текст сообщения блокировки сеансов. // +// Параметры: +// Сообщение - Строка - сообщение для блокировки. +// КодРазрешения - Строка - код разрешения для входа в информационную базу. +// // Возвращаемое значение: -// Строка +// Строка - сообщение блокировки. // Функция СформироватьСообщениеБлокировки(Знач Сообщение, Знач КодРазрешения) Экспорт @@ -163,13 +463,20 @@ ТекстСообщения = Сообщение + Символы.ПС + Символы.ПС; КонецЕсли; - ТекстСообщения = ТекстСообщения + - НСтр("ru = '%1 - |Для того чтобы принудительно разблокировать информационную базу, воспользуйтесь консолью кластера серверов или запустите ""1С:Предприятие"" с параметрами: - |ENTERPRISE %2 /CРазрешитьРаботуПользователей /UC%3'"); - + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ТекстСообщения = ТекстСообщения + + НСтр("ru = '%1 + |Для разрешения работы пользователей можно открыть приложение с параметром РазрешитьРаботуПользователей. Например: + |http://<веб-адрес сервера>/?C=РазрешитьРаботуПользователей'"); + Иначе + ТекстСообщения = ТекстСообщения + + НСтр("ru = '%1 + |Для того чтобы разрешить работу пользователей, воспользуйтесь консолью кластера серверов или запустите ""1С:Предприятие"" с параметрами: + |ENTERPRISE %2 /CРазрешитьРаботуПользователей /UC%3'"); + КонецЕсли; ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, - СоединенияИБКлиентСервер.ТекстДляАдминистратора(), СтрокаПутиКИнформационнойБазе, НСтр("ru = '<код разрешения>'")); + СоединенияИБКлиентСервер.ТекстДляАдминистратора(), СтрокаПутиКИнформационнойБазе, + НСтр("ru = '<код разрешения>'")); Возврат ТекстСообщения; @@ -178,8 +485,11 @@ // Возвращает текстовую строку со списком активных соединений ИБ. // Названия соединений разделены символом переноса строки. // +// Параметры: +// Сообщение - Строка - передаваемая строка. +// // Возвращаемое значение: -// Строка +// Строка - названия сорединений. // Функция ПолучитьНазванияСоединенийИБ(Знач Сообщение) Экспорт @@ -201,10 +511,18 @@ // Функция ПолучитьПараметрыАдминистрированияИБ() Экспорт + Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ВызватьИсключение НСтр("ru ='Недостаточно прав для выполнения операции'"); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); Результат = СоединенияИБКлиентСервер.НовыеПараметрыАдминистрированияИБ(); - СтруктураНастроек = Константы.ПараметрыАдминистрированияИБ.Получить().Получить(); - Если ТипЗнч(СтруктураНастроек) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(Результат, СтруктураНастроек); + СтруктураНастроек = Константы.ПараметрыАдминистрированияИБ.Получить(); + Если СтруктураНастроек <> Неопределено Тогда + СтруктураНастроек = СтруктураНастроек.Получить(); + Если ТипЗнч(СтруктураНастроек) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(Результат, СтруктураНастроек); + КонецЕсли; КонецЕсли; Возврат Результат; @@ -276,6 +594,14 @@ УровеньЖурналаРегистрации.Предупреждение, , , Сообщение); КонецПроцедуры +// Возвращает текст о неудачном завершении работы пользователей. +// +// Параметры: +// Сообщение - Строка - передаваемая строка. +// +// Возвращаемое значение: +// Строка - сообщение о неудаче завершения работы пользователей. +// Функция ТекстНеУдалосьЗавершитьРаботуПользователей(Знач Сообщение) Если Не ПустаяСтрока(Сообщение) Тогда @@ -289,3 +615,19 @@ КонецФункции +// Возвращает установлена ли блокировка соединений на конкретную дату. +// +// Параметры: +// ТекущийРежим - БлокировкаСеансов - блокировка сеансов. +// ТекущаяДата - Дата - дата, на которую необходимо проверить. +// +// Возвращаемое значение: +// Булево - Истина, если установлена. +// +Функция УстановленаБлокировкаСоединенийНаДату(ТекущийРежим, ТекущаяДата) + + Возврат (ТекущийРежим.Установлена И ТекущийРежим.Начало <= ТекущаяДата + И (Не ЗначениеЗаполнено(ТекущийРежим.Конец) Или ТекущаяДата <= ТекущийРежим.Конец)); + +КонецФункции + diff --git a/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl b/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl index 0f991b7b1..b15395a93 100644 --- a/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl @@ -1,5 +1,10 @@ -/////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ ОЖИДАНИЯ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Завершение работы пользователей". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Выполнить завершение текущего сеанса, если установлена блокировка соединений // с информационной базой. @@ -21,30 +26,34 @@ ИнтервалЗакрытьСЗапросом = 0; ИнтервалЗакрытьБезЗапроса = - ИнтервалПредупреждения / 5; ИнтервалПрекратить = - ИнтервалПредупреждения / 2.5; - ТекущийМомент = ТекущаяДата(); + ТекущийМомент = ОбщегоНазначенияКлиент.ДатаСеанса(); Если ВремяОкончанияБлокировки <> '00010101' И ТекущийМомент > ВремяОкончанияБлокировки Тогда Возврат; КонецЕсли; ТекстСообщения = СоединенияИБКлиентСервер.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Рекомендуется завершить текущую работу и сохранить все свои данные. Работа системы будет завершена в %1. + |%2'"), + ВремяНачалаБлокировки, ТекстСообщения); Если НЕ ЗначениеЗаполнено(ВремяНачалаБлокировки) ИЛИ ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалПрекратить Тогда - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; + СтандартныеПодсистемыКлиент.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы(); ЗавершитьРаботуСистемы(Истина, Истина); ИначеЕсли ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалЗакрытьБезЗапроса Тогда - Предупреждение(НСтр("ru = 'Работа системы завершается.'"), 30); - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; + Предупреждение(ТекстСообщения, 30); + СтандартныеПодсистемыКлиент.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы(); ЗавершитьРаботуСистемы(Ложь, Истина); ИначеЕсли ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалЗакрытьСЗапросом Тогда - Предупреждение(НСтр("ru = 'Работа системы завершается.'"), 30); - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; + Предупреждение(ТекстСообщения, 30); + СтандартныеПодсистемыКлиент.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы(); ЗавершитьРаботуСистемы(Истина, Истина); ИначеЕсли ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалПредупреждения Тогда @@ -69,10 +78,11 @@ КоличествоСеансов = ТекущийРежим.КоличествоСеансов; Если КоличествоСеансов <= 1 Тогда // Отключены все пользователи, кроме текущего сеанса - // В последнюю очередь завершается сеанс, запущенный с параметром "ЗавершитьРаботуПользователей". + // В последнюю очередь предлагаем завершить сеанс, запущенный с параметром "ЗавершитьРаботуПользователей". // Такой порядок отключений необходим для обновления конфигурации с помощью пакетного файла - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; - ЗавершитьРаботуСистемы(Ложь); + СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Ложь); + Оповестить("ЗавершениеРаботыПользователей", Новый Структура("Статус,КоличествоСеансов", "Готово", КоличествоСеансов)); + ЗавершитьРаботуЭтогоСеанса(); Возврат; КонецЕсли; @@ -83,7 +93,7 @@ ВремяНачалаБлокировки = ТекущийРежим.Начало; ИнтервалОтключения = - ТекущийРежим.ИнтервалОжиданияЗавершенияРаботыПользователей; - ТекущийМомент = ТекущаяДата(); + ТекущийМомент = ОбщегоНазначенияКлиент.ДатаСеанса(); ПринудительноеЗавершение = НЕ ЗначениеЗаполнено(ВремяНачалаБлокировки) ИЛИ ВремяНачалаБлокировки - ТекущийМомент <= ИнтервалОтключения; @@ -93,9 +103,10 @@ |Следующая проверка сеансов будет выполнена через минуту.'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ТекстСообщения, КоличествоСеансов); - Состояние(НСтр("ru = 'Выполняется завершение сеансов'"), , + ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), + "e1cib/app/Обработка.БлокировкаРаботыПользователей", ТекстСообщения, БиблиотекаКартинок.Информация32); - + Оповестить("ЗавершениеРаботыПользователей", Новый Структура("Статус,КоличествоСеансов", "Выполняется", КоличествоСеансов)); Возврат; КонецЕсли; @@ -103,16 +114,33 @@ // если этого не произошло пробуем принудительно прервать соединения ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей"); - Результат = СоединенияИБКлиентСервер.ОтключитьСоединенияИБПоПараметрамЗапуска(ПараметрЗапуска); + Результат = СоединенияИБКлиентСервер.ОтключитьСоединенияИБ(); Если Результат Тогда - Состояние(НСтр("ru = 'Завершение сеансов выполнено успешно'"), , - НСтр("ru = 'Работа системы завершается...'"), БиблиотекаКартинок.Информация32); - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; - ЗавершитьРаботуСистемы(Ложь); + СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Ложь); + ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), + "e1cib/app/Обработка.БлокировкаРаботыПользователей", + НСтр("ru = 'Завершение сеансов выполнено успешно'"), БиблиотекаКартинок.Информация32); + Оповестить("ЗавершениеРаботыПользователей", Новый Структура("Статус,КоличествоСеансов", "Готово", КоличествоСеансов)); + ЗавершитьРаботуЭтогоСеанса(); Иначе - Состояние(НСтр("ru = 'Завершение сеансов не выполнено.'"), , - НСтр("ru = 'Подробности см. в Журнале регистрации.'"), - БиблиотекаКартинок.Предупреждение32); + СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Ложь); + ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), + "e1cib/app/Обработка.БлокировкаРаботыПользователей", + НСтр("ru = 'Завершение сеансов не выполнено! Подробности см. в Журнале регистрации.'"), БиблиотекаКартинок.Предупреждение32); + Оповестить("ЗавершениеРаботыПользователей", Новый Структура("Статус,КоличествоСеансов", "Ошибка", КоличествоСеансов)); + КонецЕсли; + +КонецПроцедуры + +// Завершает работу (последнего) сеанса администратора, который инициировал завершение работы пользователей. +// +Процедура ЗавершитьРаботуЭтогоСеанса() + + СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(Ложь); + ТекстСообщения = НСтр("ru = 'Работа пользователей с программой запрещена. Завершить работу этого сеанса?'"); + Если Вопрос(ТекстСообщения, РежимДиалогаВопрос.ОКОтмена, 60) = КодВозвратаДиалога.OK Тогда + СтандартныеПодсистемыКлиент.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы(); + ЗавершитьРаботуСистемы(Ложь); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl index abb47c1ef..24a52dd56 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl @@ -1,6 +1,52 @@ -// Процедура подключает обработчик ожидания КонтрольРежимаЗавершенияРаботыПользователей +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Завершение работы пользователей". // -Процедура УстановитьКонтрольРежимаЗавершенияРаботыПользователей() Экспорт +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Выполняет действия перед началом работы системы. +// +Процедура ПередНачаломРаботыСистемы(Отказ) Экспорт + + ПараметрыРаботыКлиентаПриЗапуске = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + ТекстСообщения = ""; + Если Не ПараметрыРаботыКлиентаПриЗапуске.Свойство("СеансыОбластиДанныхЗаблокированы", ТекстСообщения) Тогда + Возврат; + КонецЕсли; + + ТекстВопроса = ПараметрыРаботыКлиентаПриЗапуске.ПредложениеСнятьБлокировку; + Если Не ПустаяСтрока(ТекстВопроса) Тогда + Кнопки = Новый СписокЗначений(); + Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Войти'")); + Кнопки.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Снять блокировку и войти'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'")); + Ответ = Вопрос(ТекстВопроса, Кнопки, 15, КодВозвратаДиалога.Отмена,, КодВозвратаДиалога.Отмена); + Если Ответ = КодВозвратаДиалога.Да Тогда // входим в заблокированное приложение + Возврат; + ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда // снимаем блокировку и входим в приложение + СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(Новый Структура("Установлена", Ложь)); + Возврат; + Иначе + ЗавершитьРаботуСистемы(Ложь); // выход без перезапуска + КонецЕсли; + Иначе + Предупреждение(ТекстСообщения, 15); + ЗавершитьРаботуСистемы(Ложь); // выход без перезапуска + КонецЕсли; + + Отказ = Истина; + +КонецПроцедуры + +// Выполняет действия при начале работы системы. +// +Процедура ПриНачалеРаботыСистемы() Экспорт + + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; Если ПолучитьСкоростьКлиентскогоСоединения() <> СкоростьКлиентскогоСоединения.Обычная Тогда Возврат; @@ -32,6 +78,10 @@ // Функция ОбработатьПараметрыЗапуска(Знач ЗначениеПараметраЗапуска, Знач ПараметрыЗапуска) Экспорт + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Ложь; + КонецЕсли; + // Обработка параметров запуска программы - // ЗапретитьРаботуПользователей и РазрешитьРаботуПользователей Если ЗначениеПараметраЗапуска = Врег("РазрешитьРаботуПользователей") Тогда @@ -80,6 +130,7 @@ // Процедура УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(Знач УстановитьБлокировкуСоединений) Экспорт + УстановитьПризнакРаботаПользователейЗавершается(УстановитьБлокировкуСоединений); Если УстановитьБлокировкуСоединений Тогда // поскольку блокировка еще не установлена, то при входе в систему // для данного пользователя был подключен обработчик ожидания завершения работы. @@ -90,17 +141,23 @@ ОтключитьОбработчикОжидания("КонтрольРежимаЗавершенияРаботыПользователей"); ПодключитьОбработчикОжидания("ЗавершитьРаботуПользователей", 60); ЗавершитьРаботуПользователей(); - ПоказатьОповещениеПользователя(НСтр("ru = 'Режим блокировки'"), - "e1cib/app/Обработка.БлокировкаСоединенийСИнформационнойБазой", - НСтр("ru = 'Установлена блокировка соединений с информационной базой.'"), - БиблиотекаКартинок.Информация32); Иначе ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей"); ПодключитьОбработчикОжидания("КонтрольРежимаЗавершенияРаботыПользователей", 60); - ПоказатьОповещениеПользователя(НСтр("ru = 'Режим блокировки'"), - "e1cib/app/Обработка.БлокировкаСоединенийСИнформационнойБазой", - НСтр("ru = 'Снята блокировка соединений с информационной базой.'"), - БиблиотекаКартинок.Информация32); КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Устанавливает значение переменной РаботаПользователейЗавершается в значение Значение. +// +// Параметры +// Значение - Булево - устанавливаемое значение. +// +Процедура УстановитьПризнакРаботаПользователейЗавершается(Значение) Экспорт + + РаботаПользователейЗавершается = Значение; + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl index 6b71c1e34..47ea95c86 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl @@ -1,62 +1,61 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ПРИНУДИТЕЛЬНОГО ОТКЛЮЧЕНИЯ СЕАНСОВ ИБ +// Подсистема "Завершение работы пользователей". +// +//////////////////////////////////////////////////////////////////////////////// -// Отключает сеанс по номеру сеанса +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//////////////////////////////////////////////////////////////////////////////// +// Принудительное отключение сеансов. + +// Отключает сеанс по номеру сеанса. // // Параметры -// ПараметрыАдминистрированияИБ – Структура – параметры администрирования ИБ // НомерСеанса - Число - номер сеанса для отключения +// СообщениеОбОшибке - Строка - в этом параметре возвращается текст сообщения об ошибке в случае неудачи // // Возвращаемое значение: // Булево – результат отключения сеанса. // -Функция ОтключитьСеанс(НомерСеанса, Сообщение) Экспорт +Функция ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке) Экспорт - Если СоединенияИБ.КоличествоСеансовИнформационнойБазы(Ложь) <= 1 Тогда + Если СоединенияИБ.КоличествоСеансовИнформационнойБазы() <= 1 Тогда Возврат Истина; // Отключены все пользователи, кроме текущего сеанса КонецЕсли; // Невозможно принудительно отсоединить сеансы в файловом режиме работы Если ИнформационнаяБазаФайловая() Тогда - СоединенияИБ.ЗаписатьНазванияСоединенийИБ(НСтр("Невозможно принудительно отсоединить сеанс в файловом режиме работы")); + Сообщение = НСтр("ru = 'Невозможно принудительно завершить сеанс в файловом режиме работы'"); + СоединенияИБ.ЗаписатьНазванияСоединенийИБ(СообщениеОбОшибке); Возврат Ложь; КонецЕсли; #Если НаКлиенте Тогда Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда - Если СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда - // Передаем управление на сервер - Возврат СоединенияИБ.ОтключитьСеанс(НомерСеанса, Сообщение); - КонецЕсли; - СоединенияИБ.ЗаписатьНазванияСоединенийИБ(НСтр("Невозможно принудительно отсоединить сеанс при работе с клиента через веб-сервер, - | если на сервере не установлена ОС Microsoft Windows")); - Возврат Ложь; + // Передаем управление на Windows-сервер + Возврат СоединенияИБ.ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке); КонецЕсли; #КонецЕсли Попытка - Возврат ЗавершитьСеанс(СоединенияИБПовтИсп.ПолучитьПараметрыАдминистрированияИБ(), НомерСеанса); + Возврат ЗавершитьСеанс(НомерСеанса); Исключение - Сообщение = НСтр("ru = 'Сеанс не завершен. Причина отказа в Журнале регистрации.'"); - ЗаписатьСобытие(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), "Ошибка"); + СообщениеОбОшибке = НСтр("ru = 'Невозможно принудительно завершить сеанс + |по причине: + |%1 + | + |Возможно не настроены параметры администрирования ИБ. + |Технические подробности об ошибке см. в Журнале регистрации.'"); + ИнфоОбОшибке = ИнформацияОбОшибке(); + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, + КраткоеПредставлениеОшибки(ИнфоОбОшибке)); + ЗаписатьСобытие(ПодробноеПредставлениеОшибки(ИнфоОбОшибке), "Ошибка"); Возврат Ложь; КонецПопытки; КонецФункции -// Выполнить завершение активных сеансов. -// -// Возвращаемое значение: -// Булево - строковый код ошибки; пустая строка - в случае успешного завершения. -// -Функция ОтключитьСоединенияИБПоПараметрамЗапуска(Знач ПараметрЗапуска) Экспорт - - ПараметрыАдминистрированияИБ = СоединенияИБПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); - Результат = ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ); - Возврат Результат; - -КонецФункции - // Отключить все активные соединения ИБ (кроме текущего сеанса). // // Параметры @@ -65,15 +64,15 @@ // Возвращаемое значение: // Булево – результат отключения соединений. // -Функция ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ) Экспорт +Функция ОтключитьСоединенияИБ(Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт - Если СоединенияИБ.КоличествоСеансовИнформационнойБазы(Ложь) <= 1 Тогда + Если СоединенияИБ.КоличествоСеансовИнформационнойБазы() <= 1 Тогда Возврат Истина; // Отключены все пользователи, кроме текущего сеанса КонецЕсли; // Невозможно принудительно отсоединить сеансы в файловом режиме работы Если ИнформационнаяБазаФайловая() Тогда - СоединенияИБ.ЗаписатьНазванияСоединенийИБ(НСтр("Невозможно принудительно отсоединить сеансы в файловом режиме работы")); + СоединенияИБ.ЗаписатьНазванияСоединенийИБ(НСтр("ru = 'Невозможно принудительно завершить сеансы в файловом режиме работы'")); Возврат Ложь; КонецЕсли; @@ -83,18 +82,18 @@ // Передаем управление на сервер Возврат СоединенияИБ.ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ); КонецЕсли; - СоединенияИБ.ЗаписатьНазванияСоединенийИБ(НСтр("Невозможно принудительно отсоединить сеансы при работе с клиента через веб-сервер, - | если на сервере не установлена ОС Microsoft Windows")); + СоединенияИБ.ЗаписатьНазванияСоединенийИБ(НСтр("ru = 'Невозможно принудительно завершить сеансы при работе с клиента через веб-сервер, + | если на сервере не установлена ОС Microsoft Windows'")); Возврат Ложь; КонецЕсли; #КонецЕсли Попытка - Сеансы = ПолучитьАктивныеСеансыИБ(ПараметрыАдминистрированияИБ); + Сеансы = ПолучитьАктивныеСеансыИБ(Истина, ПараметрыАдминистрированияИБ); Для каждого Сеанс Из Сеансы.Сеансы Цикл // Разрываем сеансы с ИБ Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Разрывается сеанс: Пользователь %1, компьютер %2, установлено %3, режим %4'"), + НСтр("ru = 'Завершается сеанс: %1, компьютер %2, начат %3, режим %4'"), Сеанс.UserName, Сеанс.Host, Сеанс.StartedAt, @@ -109,7 +108,7 @@ #Иначе КлиентскиеСообщения = Неопределено; #КонецЕсли - Возврат СоединенияИБ.КоличествоСеансовИнформационнойБазы(Ложь, КлиентскиеСообщения) <= 1; + Возврат СоединенияИБ.КоличествоСеансовИнформационнойБазы(КлиентскиеСообщения) <= 1; Исключение ЗаписатьСобытие(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), "Ошибка"); Возврат Ложь; @@ -117,12 +116,13 @@ КонецФункции -// Осуществляет попытку подключиться к кластеру серверов и получить список -// активных соединений к ИБ и использованием указанных параметров администрирования. +// Подключается к кластеру серверов и получает список +// активных сеансов с использованием указанных параметров администрирования. // // Параметры // ПараметрыАдминистрированияИБ – Структура – параметры администрирования ИБ -// ВыдаватьСообщения – Булево – разрешить вывод интерактивных сообщений. +// ПодробноеСообщениеОбОшибке – Булево – в случае ошибки в текст исключения включается +// дополнительная информация об ошибке. // // Возвращаемое значение: // Булево – Истина, если проверка завершена успешно. @@ -147,7 +147,7 @@ КонецЕсли; #КонецЕсли - Сеансы = ПолучитьАктивныеСеансыИБ(ПараметрыАдминистрированияИБ); + Сеансы = ПолучитьАктивныеСеансыИБ(Истина, ПараметрыАдминистрированияИБ); Исключение Сообщение = НСтр("ru = 'Не удалось подключиться к кластеру серверов.'"); ЗаписатьСобытие(Сообщение + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), "Ошибка"); @@ -160,8 +160,64 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СЕРВИСНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Блокировка регламентных заданий. + +// Установить или снять блокировку регламентных заданий. // +// Параметры +// Значение – Булево - если Истина, то будет установлена блокировка регламентных заданий +// +Процедура УстановитьБлокировкуРегламентныхЗаданий(Значение) Экспорт + + Если ИнформационнаяБазаФайловая() Тогда + ВызватьИсключение НСтр("ru = 'Невозможно установить блокировку регламентных и фоновых заданий в файловом режиме работы'"); + КонецЕсли; + +#Если НаКлиенте Тогда + Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда + Если СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда + // Передаем управление на сервер + СоединенияИБ.УстановитьБлокировкуРегламентныхЗаданий(Значение); + КонецЕсли; + ВызватьИсключение НСтр("ru = 'Невозможно установить блокировку регламентных и фоновых заданий при работе с клиента через веб-сервер, + | если на сервере не установлена ОС Microsoft Windows'"); + КонецЕсли; +#КонецЕсли + + Подключение = ПодключитьсяКТекущейИБ(); + Подключение.ТекущаяБаза.ScheduledJobsDenied = Значение; + Подключение.РабочийПроцесс.UpdateInfoBase(Подключение.ТекущаяБаза); + +КонецПроцедуры + +// Получить текущее состояние блокировки регламентных заданий. +// +// Возвращаемое значение: +// Булево – Истина, если блокировка установлена. +// +Функция БлокировкаРегламентныхЗаданийУстановлена() Экспорт + + Если ИнформационнаяБазаФайловая() Тогда + Возврат Ложь; + КонецЕсли; + +#Если НаКлиенте Тогда + Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда + Если СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда + // Передаем управление на сервер + Возврат СоединенияИБ.БлокировкаРегламентныхЗаданийУстановлена(); + КонецЕсли; + Возврат Ложь; + КонецЕсли; +#КонецЕсли + + Подключение = ПодключитьсяКТекущейИБ(); + Возврат Подключение.ТекущаяБаза.ScheduledJobsDenied; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Получить строку соединения ИБ, если задан нестандартный порт кластера серверов. // @@ -258,21 +314,25 @@ // Получить пустую структуру параметров администрирования кластера серверов. // -// Возвращаемое значение: -// Структура – с полями: -// ИмяАдминистратораКластера -// ПарольАдминистратораКластера -// ПортКластераСерверов -// ПортАгентаСервера +// Параметры: +// ИмяАдминистратораИБ - Строка - имя администратора информационной базы. +// ПарольАдминистратораИБ - Строка - пароль администратора информационной базы. +// ИмяАдминистратораКластера - Строка - имя администратора кластера. +// ПарольАдминистратораКластера - Строка - пароль администратора кластера. +// ПортКластераСерверов - Число - порт кластера серверов. +// ПортАгентаСервера - Число - порт агента серверов. // -Функция НовыеПараметрыАдминистрированияИБ(Знач ИмяАдминистратораКластера = "", - Знач ПарольАдминистратораКластера = "", Знач ПортКластераСерверов = 0, - Знач ПортАгентаСервера = 0) Экспорт +// Возвращаемое значение: +// Структура – струкутра с полями входящих параметров данной функции. +// +Функция НовыеПараметрыАдминистрированияИБ(Знач ИмяАдминистратораИБ = "", Знач ПарольАдминистратораИБ = "", + Знач ИмяАдминистратораКластера = "", Знач ПарольАдминистратораКластера = "", + Знач ПортКластераСерверов = 0, Знач ПортАгентаСервера = 0) Экспорт - Возврат Новый Структура("ИмяАдминистратораКластера, - |ПарольАдминистратораКластера, - |ПортКластераСерверов, - |ПортАгентаСервера", + Возврат Новый Структура("ИмяАдминистратораИБ,ПарольАдминистратораИБ,ИмяАдминистратораКластера, + |ПарольАдминистратораКластера,ПортКластераСерверов,ПортАгентаСервера", + ИмяАдминистратораИБ, + ПарольАдминистратораИБ, ИмяАдминистратораКластера, ПарольАдминистратораКластера, ПортКластераСерверов, @@ -283,6 +343,9 @@ // Возвращает текстовую константу для формирования сообщений. // Используется в целях локализации. // +// Возвращаемое значение: +// Строка - текст для администратора. +// Функция ТекстДляАдминистратора() Экспорт Возврат НСтр("ru = 'Для администратора:'"); @@ -291,6 +354,12 @@ // Возвращает пользовательский текст сообщения блокировки сеансов. // +// Параметры: +// Сообщение - Строка - полное сообщение. +// +// Возвращаемое значение: +// Строка - сообщение блокировки. +// Функция ИзвлечьСообщениеБлокировки(Знач Сообщение) Экспорт ИндексМаркера = Найти(Сообщение, ТекстДляАдминистратора()); @@ -301,13 +370,13 @@ Иначе Возврат ""; КонецЕсли; - + КонецФункции // Возвращает строковую константу для формирования сообщений журнала регистрации. // // Возвращаемое значение: -// Строка +// Строка - наименование события для журнала регистрации. // Функция СобытиеЖурналаРегистрации() @@ -315,81 +384,20 @@ КонецФункции -Функция ПолучитьАктивныеСеансыИБ(НастройкаБлокировки, знач ВсеКромеТекущего = Истина) - - Результат = Новый Структура("АгентСервера,КластерСерверов,Сеансы", Неопределено, Неопределено, Новый Массив); - - ПодстрокиСтрокиСоединения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( - СтрокаСоединенияИнформационнойБазы(), ";"); - - ИмяСервера = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[0], 7)); - ИмяИБ = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[1], 6)); - - COMСоединитель = Новый COMОбъект(ОбщегоНазначения.ИмяCOMСоединителя()); - - РазделительПорта = Найти(ИмяСервера, ":"); - Если РазделительПорта > 0 Тогда - ИмяИПортСервера = ИмяСервера; - ИмяСервера = Сред(ИмяИПортСервера, 1, РазделительПорта - 1); - НомерПортаКластера = Число(Сред(ИмяИПортСервера, РазделительПорта + 1)); - ИначеЕсли НастройкаБлокировки.ПортКластераСерверов <> 0 Тогда - НомерПортаКластера = НастройкаБлокировки.ПортКластераСерверов; - Иначе - НомерПортаКластера = COMСоединитель.RMngrPortDefault; - КонецЕсли; - - ИдентификаторАгентаСервера = ИмяСервера; - Если НастройкаБлокировки.ПортАгентаСервера <> 0 Тогда - ИдентификаторАгентаСервера = ИдентификаторАгентаСервера + ":" + - Формат(НастройкаБлокировки.ПортАгентаСервера, "ЧГ=0"); - КонецЕсли; - - // Подключение к агенту сервера - АгентСервера = COMСоединитель.ConnectAgent(ИдентификаторАгентаСервера); - Результат.АгентСервера = АгентСервера; - - // Найдем необходимый нам кластер - Для каждого Кластер Из АгентСервера.GetClusters() Цикл - - Если Кластер.MainPort <> НомерПортаКластера Тогда - Продолжить; - КонецЕсли; - - Результат.КластерСерверов = Кластер; - АгентСервера.Authenticate(Кластер, НастройкаБлокировки.ИмяАдминистратораКластера, - НастройкаБлокировки.ПарольАдминистратораКластера); - - // Получаем список сеансов - НомерТекущегоСеанса = СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().НомерСеансаИнформационнойБазы; - СписокСеансов = АгентСервера.GetSessions(Кластер); - Для Каждого Сеанс из СписокСеансов Цикл - Если ВРег(Сеанс.InfoBase.Name) <> ВРег(ИмяИБ) Тогда - Продолжить; - КонецЕсли; - Если НЕ ВсеКромеТекущего ИЛИ (НомерТекущегоСеанса <> Сеанс.SessionID) Тогда - Результат.Сеансы.Добавить(Сеанс); - КонецЕсли; - КонецЦикла; - - КонецЦикла; - - Возврат Результат; - -КонецФункции - -Функция ЗавершитьСеанс(ПараметрыСоединенияССервером1СПредприятие, Знач НомерСеансаДляЗавершения) - - Результат = Новый Структура("СоединениеСРабочимПроцессом, Соединения", Неопределено, Новый Массив); - - Если ИнформационнаяБазаФайловая() Тогда - ВызватьИсключение НСтр("ru = 'Невозможно получить список активных соединений в файловом режиме работы'"); - КонецЕсли; - -#Если НаКлиенте Тогда - Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда - ВызватьИсключение НСтр("ru = 'Невозможно получить список активных соединений при работе через веб-сервер'"); - КонецЕсли; -#КонецЕсли +// Подключается к агенту сервера. +// +// Параметры: +// ПараметрыСоединенияССервером1СПредприятие - Структура - параметры соединения с сервером 1С:Предприятие. +// +// Возвращаемое значение - Структура с полями: +// COMСоединитель - COMОбъект - COMОбъект Com-соединителя. +// ИмяСервера - Строка - имя сервера. +// ИмяИБ - Строка - имя информационнй базы. +// АгентСервера - Строка - агент сервера. +// НомерПортаКластера - Число - номер порта кластера. +// ИдентификаторАгентаСервера - Строка - идентификатор агента сервера. +// +Функция ПодключитьсяКАгентуСервера(ПараметрыСоединенияССервером1СПредприятие) ПодстрокиСтрокиСоединения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( СтрокаСоединенияИнформационнойБазы(), ";"); @@ -418,20 +426,198 @@ // Подключение к агенту сервера АгентСервера = COMСоединитель.ConnectAgent(ИдентификаторАгентаСервера); + Результат = Новый Структура("COMСоединитель,ИмяСервера,ИмяИБ,АгентСервера,НомерПортаКластера,ИдентификаторАгентаСервера"); + Результат.COMСоединитель = COMСоединитель; + Результат.ИмяСервера = ИмяСервера; + Результат.ИмяИБ = ИмяИБ; + Результат.АгентСервера = АгентСервера; + Результат.НомерПортаКластера = НомерПортаКластера; + Результат.ИдентификаторАгентаСервера = ИдентификаторАгентаСервера; + Возврат Результат; + +КонецФункции + +// Подключается к рабочему процессу. +// +// Параметры: +// ПараметрыСоединенияССервером1СПредприятие - Структура - параметры соединения с сервером 1С:Предприятие. +// +// Возвращаемое значение - Структура с полями: +// COMСоединитель - COMОбъект - COMОбъект Com-соединителя. +// ИмяСервера - Строка - имя сервера. +// ИмяИБ - Строка - имя информационнй базы. +// АгентСервера - COMОбъект - агент сервера. +// НомерПортаКластера - Число - номер порта кластера. +// ИдентификаторАгентаСервера - Строка - идентификатор агента сервера. +// РабочийПроцесс - РабочийПроцесс - рабочий процесс. +// +Функция ПодключитьсяКРабочемуПроцессу(ПараметрыСоединенияССервером1СПредприятие) + + // Подключение к агенту сервера + Подключение = ПодключитьсяКАгентуСервера(ПараметрыСоединенияССервером1СПредприятие); // Найдем необходимый нам кластер - Для Каждого Кластер Из АгентСервера.GetClusters() Цикл + Для каждого Кластер Из Подключение.АгентСервера.GetClusters() Цикл - Если Кластер.MainPort = НомерПортаКластера Тогда + Если Кластер.MainPort <> Подключение.НомерПортаКластера Тогда + Продолжить; + КонецЕсли; + + ПортРабочегоПроцесса = -1; + Подключение.АгентСервера.Authenticate(Кластер, + ПараметрыСоединенияССервером1СПредприятие.ИмяАдминистратораКластера, + ПараметрыСоединенияССервером1СПредприятие.ПарольАдминистратораКластера); + РабочиеПроцессы = Подключение.АгентСервера.GetWorkingProcesses(Кластер); + Для Каждого РабочийПроцесс Из РабочиеПроцессы Цикл + Если РабочийПроцесс.Running = 1 Тогда + ПортРабочегоПроцесса = РабочийПроцесс.MainPort; + ИмяСервераРабочегоПроцесса = РабочийПроцесс.HostName; + Прервать; + КонецЕсли; + КонецЦикла; + Если ПортРабочегоПроцесса = -1 Тогда + ВызватьИсключение НСтр("ru = 'Нет ни одного активного рабочего процесса'"); + КонецЕсли; + Прервать; + + КонецЦикла; + + ИдентификаторРабочегоПроцесса = ИмяСервераРабочегоПроцесса + ":" + Формат(ПортРабочегоПроцесса, "ЧГ=0"); + + // Подключение к рабочему процессу + РабочийПроцесс = Подключение.COMСоединитель.ConnectWorkingProcess(ИдентификаторРабочегоПроцесса); + Подключение.Вставить("РабочийПроцесс", РабочийПроцесс); + Возврат Подключение; + +КонецФункции + +// Подключиться к рабочему процессу текущей информационной базы. +// +// Возвращаемое значение - Структура с полями: +// COMСоединитель - COMОбъект - COMОбъект Com-соединителя. +// ИмяСервера - Строка - имя сервера. +// ИмяИБ - Строка - имя информационнй базы. +// АгентСервера - COMОбъект - агент сервера. +// НомерПортаКластера - Число - номер порта кластера. +// ИдентификаторАгентаСервера - Строка - идентификатор агента сервера. +// ТекущаяБаза - IInfoBaseInfo - информационная база. +// +Функция ПодключитьсяКТекущейИБ() + + ПараметрыАдминистрированияИБ = СоединенияИБПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); + Подключение = ПодключитьсяКРабочемуПроцессу(ПараметрыАдминистрированияИБ); + Подключение.РабочийПроцесс.AddAuthentication(ПараметрыАдминистрированияИБ.ИмяАдминистратораИБ, + ПараметрыАдминистрированияИБ.ПарольАдминистратораИБ); + + Базы = Подключение.РабочийПроцесс.GetInfoBases(); + ТекущаяБаза = Неопределено; + Для Каждого База Из Базы Цикл + Если База.Name = Подключение.ИмяИБ Тогда + ТекущаяБаза = База; + Прервать; + КонецЕсли; + КонецЦикла; + Если ТекущаяБаза = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'База ""%1"" не зарегистрирована в кластере сервером'"), Подключение.ИмяИБ); + КонецЕсли; + Подключение.Вставить("ТекущаяБаза", ТекущаяБаза); + Возврат Подключение; + +КонецФункции + +// Возвращает активные сеансы информационной базы. +// +// Параметры: +// ВсеКромеТекущего - Булево - Истина, если не считать текущий сеанс. +// ПараметрыАдминистрированияИБ - Структура - см. НовыеПараметрыАдминистрированияИБ. +// +// Возвращаемое значение - Структура с полями: +// АгентСервера - COMОбъект - агент сервера. +// КластерСерверов - COMОбъект - кластер серверов. +// Сеансы - Массив - активные сеансы. +// +Функция ПолучитьАктивныеСеансыИБ(Знач ВсеКромеТекущего = Истина, Знач ПараметрыАдминистрированияИБ = Неопределено) + + Результат = Новый Структура("АгентСервера,КластерСерверов,Сеансы", Неопределено, Неопределено, Новый Массив); + + // Подключение к агенту сервера + Параметры = ПараметрыАдминистрированияИБ; + Если Параметры = Неопределено Тогда + Параметры = СоединенияИБПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); + КонецЕсли; + Подключение = ПодключитьсяКАгентуСервера(Параметры); + Результат.АгентСервера = Подключение.АгентСервера; + + // Найдем необходимый нам кластер + Для каждого Кластер Из Подключение.АгентСервера.GetClusters() Цикл + + Если Кластер.MainPort <> Подключение.НомерПортаКластера Тогда + Продолжить; + КонецЕсли; + + Результат.КластерСерверов = Кластер; + Подключение.АгентСервера.Authenticate(Кластер, + Параметры.ИмяАдминистратораКластера, + Параметры.ПарольАдминистратораКластера); + + // Получаем список сеансов + НомерТекущегоСеанса = СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().НомерСеансаИнформационнойБазы; + СписокСеансов = Подключение.АгентСервера.GetSessions(Кластер); + Для Каждого Сеанс из СписокСеансов Цикл + Если ВРег(Сеанс.InfoBase.Name) <> ВРег(Подключение.ИмяИБ) Тогда + Продолжить; + КонецЕсли; + Если НЕ ВсеКромеТекущего ИЛИ (НомерТекущегоСеанса <> Сеанс.SessionID) Тогда + Результат.Сеансы.Добавить(Сеанс); + КонецЕсли; + КонецЦикла; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Возвращает активные сеансы информационной базы. +// +// Параметры: +// НомерСеансаДляЗавершения - Число - номер сеанса. +// +// Возвращаемое значение: +// Булево - Истина, если сеанс удалось завершить. +// +Функция ЗавершитьСеанс(Знач НомерСеансаДляЗавершения) + + Результат = Новый Структура("СоединениеСРабочимПроцессом, Соединения", Неопределено, Новый Массив); + + Если ИнформационнаяБазаФайловая() Тогда + ВызватьИсключение НСтр("ru = 'Невозможно получить список активных соединений в файловом режиме работы'"); + КонецЕсли; + +#Если НаКлиенте Тогда + Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда + ВызватьИсключение НСтр("ru = 'Невозможно получить список активных соединений при работе через веб-сервер'"); + КонецЕсли; +#КонецЕсли + + // Подключение к агенту сервера + ПараметрыАдминистрированияИБ = СоединенияИБПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); + Подключение = ПодключитьсяКАгентуСервера(ПараметрыАдминистрированияИБ); + + // Найдем необходимый нам кластер + Для Каждого Кластер Из Подключение.АгентСервера.GetClusters() Цикл + + Если Кластер.MainPort = Подключение.НомерПортаКластера Тогда - АгентСервера.Authenticate(Кластер, - ПараметрыСоединенияССервером1СПредприятие.ИмяАдминистратораКластера, - ПараметрыСоединенияССервером1СПредприятие.ПарольАдминистратораКластера); - СписокСеансов = АгентСервера.GetSessions(Кластер); + Подключение.АгентСервера.Authenticate(Кластер, + ПараметрыАдминистрированияИБ.ИмяАдминистратораКластера, + ПараметрыАдминистрированияИБ.ПарольАдминистратораКластера); + СписокСеансов = Подключение.АгентСервера.GetSessions(Кластер); Для Каждого Сеанс из СписокСеансов Цикл - Если ВРег(Сеанс.InfoBase.Name) = ВРег(ИмяИБ) Тогда + Если ВРег(Сеанс.InfoBase.Name) = ВРег(Подключение.ИмяИБ) Тогда Если Сеанс.SessionID = НомерСеансаДляЗавершения Тогда - АгентСервера.TerminateSession(Кластер, Сеанс); + Подключение.АгентСервера.TerminateSession(Кластер, Сеанс); Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Разорван сеанс: Пользователь %1, компьютер %2, начат %3, режим %4'"), Сеанс.UserName, @@ -452,15 +638,31 @@ КонецФункции +// Возвращает является ли информационная база файловой. +// +// Возвращаемое значение: +// Булево - Истина, если информационная база файловая. +// Функция ИнформационнаяБазаФайловая() #Если НаКлиенте Тогда - Результат = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая; + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Результат = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая; + Иначе + Результат = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + КонецЕсли; #Иначе Результат = ОбщегоНазначения.ИнформационнаяБазаФайловая(); #КонецЕсли Возврат Результат; КонецФункции +// Записывает событие в журнал регистрации. +// +// Параметры: +// ТекстСобытия - Строка - текст события. +// ПредставлениеУровня - Строка - представление уровня. +// Записать - Булево - Истина, если сразу записать в журнал регистрации. +// Процедура ЗаписатьСобытие(Знач ТекстСобытия, ПредставлениеУровня = "Информация", Записать = Истина) #Если НаКлиенте Тогда ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), diff --git a/SSL/src/CommonModules/СоединенияИБПовтИсп/Module.bsl b/SSL/src/CommonModules/СоединенияИБПовтИсп/Module.bsl index 484d780d4..97b3847dc 100644 --- a/SSL/src/CommonModules/СоединенияИБПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБПовтИсп/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Завершение работы пользователей". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Получить сохраненные параметры администрирования кластера серверов. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрирования/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрирования/Module.bsl new file mode 100644 index 000000000..5cc722d9d --- /dev/null +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрирования/Module.bsl @@ -0,0 +1,110 @@ +/////////////////////////////////////////////////////////////////////////////////// +// СообщенияУдаленногоАдминистрирования. +// +/////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает новое сообщение удаленного администрирования для отправки в менеджер сервиса. +// +// Параметры: +// ТипСообщения - ТипОбъектаXDTO - тип сообщения которое требуется создать +// +// Возвращаемое значение: +// ОбъектXDTO - объект требуемого типа +Функция НовоеСообщение(Знач ТипСообщения) Экспорт + + Возврат ФабрикаXDTO.Создать(ТипСообщения); + +КонецФункции + +// Отправвляет сообщение удаленного администрирования +// +// Параметры: +// Содержимое - ОбъектXDTO - содержимое сообщения +// Получатель - ПланОбменаСсылка.ОбменСообщениями - получатель сообщения +// Сейчас - Булево - отправить сообщений через механизм быстрых сообщений +// +Процедура ОтправитьСообщение(Знач Содержимое, Знач Получатель = Неопределено, Знач Сейчас = Ложь) Экспорт + + Запись = Новый ЗаписьXML; + Запись.УстановитьСтроку(); + + ФабрикаXDTO.ЗаписатьXML(Запись, Содержимое, , , , НазначениеТипаXML.Явное); + + КаналСообщений = ИмяКаналаПоТипуСообщения(Содержимое.Тип()); + + Если Сейчас Тогда + ОбменСообщениями.ОтправитьСообщениеСейчас(КаналСообщений, Запись.Закрыть(), Получатель); + Иначе + ОбменСообщениями.ОтправитьСообщение(КаналСообщений, Запись.Закрыть(), Получатель); + КонецЕсли; + +КонецПроцедуры + +// Получате содержимое сообщения удаленного администрирования из тела +// сообщения +// +// Параметры: +// ТелоСообщения - ХранилищеЗначения - тело сообщения +// +// Возвращаемое значение: +// ОбъектXDTO - содержимое сообщения удаленного администрирования +// полученное из тело сообщения +// +Функция ПолучитьСодержимоеСообщения(Знач ТелоСообщения) Экспорт + + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(ТелоСообщения); + + Содержимое = ФабрикаXDTO.ПрочитатьXML(Чтение); + + Чтение.Закрыть(); + + Возврат Содержимое; + +КонецФункции + +// Возвращает имя канала сообщений удаленного администрирования соответствующего +// типу сообщения. +// +// Параметры: +// ТипСообщения - ТипОбъектаXDTO - тип сообщения удаленного администрирования +// +// Возвращаемое значение: +// Строка - имя канала сообщений соответствующее переданному типу сообщения +// +Функция ИмяКаналаПоТипуСообщения(Знач ТипСообщения) Экспорт + + Возврат СериализаторXDTO.XMLСтрока(Новый РасширенноеИмяXML(ТипСообщения.URIПространстваИмен, ТипСообщения.Имя)); + +КонецФункции + +// Возвращает тип сообщений удаленного администрирования по +// имени канала сообщений +// +// Параметры: +// ИмяКанала - Строка - имя канала сообщений соответствующее переданному типу сообщения +// +// Возвращаемое значение: +// ТипОбъектаXDTO - тип сообщения удаленного администрирования +// +Функция ТипСообщенияПоИмениКанала(Знач ИмяКанала) Экспорт + + Возврат ФабрикаXDTO.Тип(СериализаторXDTO.XMLЗначение(Тип("РасширенноеИмяXML"), ИмяКанала)); + +КонецФункции + +// Вызывает исключение при получении сообщения в неизвестный канал. +// +// Параметры: +// КаналСообщений - Строка - имя неизвестного канала сообщений. +// +Процедура ОшибкаНеизвестноеИмяКанала(Знач КаналСообщений) Экспорт + + ШаблонСообщения = НСтр("ru = 'Неизвестное имя канала сообщений %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, КаналСообщений); + ВызватьИсключение(ТекстСообщения); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрирования/СообщенияУдаленногоАдминистрирования.mdo b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрирования/СообщенияУдаленногоАдминистрирования.mdo new file mode 100644 index 000000000..667ee9528 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрирования/СообщенияУдаленногоАдминистрирования.mdo @@ -0,0 +1,11 @@ + + + СообщенияУдаленногоАдминистрирования + + ru + Сообщения удаленного администрирования + + true + true + true + diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияПовтИсп/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияПовтИсп/Module.bsl new file mode 100644 index 000000000..9abac3d60 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияПовтИсп/Module.bsl @@ -0,0 +1,255 @@ +/////////////////////////////////////////////////////////////////////////////////// +// СообщенияУдаленногоАдминистрированияПовтИсп. +// +/////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возврвщает тип, являющийся базовым для всех типов сообщений +// удаленного администрирования +// +// Возвращаемое значение: +// ТипОбъектаXDTO - базовый тип сообщений удаленного администрирования +// +Функция АбстрактноеСообщение() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетСообщенияУдаленногоАдминистрирования(), "Сообщение"); + +КонецФункции + +// Возвращает типы объектов XDTO содержащихся в заданном +// пакете, являющиеся типа сообщений удаленного администрирования +// +// Параметры: +// URIПакета - Строка - URI пакета XDTO, типы сообщений из которого +// требуется получить +// +// Возвращаемое значение: +// ФиксированныйМассив(ТипОбъектаXDTO) - типы сообщений найденные в пакете +// +Функция ПолучитьТипыСообщенийПакета(Знач URIПакета) Экспорт + + Результат = Новый Массив; + + МоделиПакетов = ФабрикаXDTO.ЭкспортМоделиXDTO(URIПакета); + + БазовыйТип = АбстрактноеСообщение(); + + Для каждого МодельПакета Из МоделиПакетов.package Цикл + Для каждого МодельОбъектногоТипа из МодельПакета.objectType Цикл + ТипОбъекта = ФабрикаXDTO.Тип(URIПакета, МодельОбъектногоТипа.name); + Если НЕ ТипОбъекта.Абстрактный + И БазовыйТип.ЭтоПотомок(ТипОбъекта) Тогда + + Результат.Добавить(ТипОбъекта); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Новый ФиксированныйМассив(Результат); + +КонецФункции + +// Возвращает имена каналов сообщений из заданного пакета +// +// Параметры: +// URIПакета - Строка - URI пакета XDTO, типы сообщений из которого +// требуется получить +// +// Возвращаемое значение: +// ФиксированныйМассив(Строка) - имена каналов найденные в пакете +// +Функция ПолучитьКаналыПакета(Знач URIПакета) Экспорт + + Результат = Новый Массив; + + ТипыСообщенийПакета = + СообщенияУдаленногоАдминистрированияПовтИсп.ПолучитьТипыСообщенийПакета(URIПакета); + + Для каждого ТипСообщения Из ТипыСообщенийПакета Цикл + Результат.Добавить(СообщенияУдаленногоАдминистрирования.ИмяКаналаПоТипуСообщения(ТипСообщения)); + КонецЦикла; + + Возврат Новый ФиксированныйМассив(Результат); + +КонецФункции + +/////////////////////////////////////////////////////////////////////////////////// +// Функции, возвращающие типы сообщений и имена содержащих их пакетов + +// Возвращает имя пакета удаленного администрирования. +// +// Возвращаемое значение: +// Строка. +// +Функция ПакетУдаленноеАдминистрирование() Экспорт + + Возврат "http://www.1c.ru/SaaS/RemoteAdministration/App"; + +КонецФункции + +// Возвращает имя пакета контроля удаленного администрирования. +// +// Возвращаемое значение: +// Строка. +// +Функция ПакетКонтрольУдаленногоАдминистрирования() Экспорт + + Возврат "http://www.1c.ru/SaaS/RemoteAdministration/Control"; + +КонецФункции + +// Возвращает имя пакета сообщения удаленного администрирования. +// +// Возвращаемое значение: +// Строка. +// +Функция ПакетСообщенияУдаленногоАдминистрирования() Экспорт + + Возврат "http://www.1c.ru/SaaS/RemoteAdministration/Messages"; + +КонецФункции + +// Возвращает тип сообщения ОбновитьПользователя. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.ОбновитьПользователя +// +Функция СообщениеОбновитьПользователя() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "ОбновитьПользователя"); + +КонецФункции + +// Возвращает тип сообщения УстановитьПолныеПраваОбластиДанных. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьПолныеПраваОбластиДанных +// +Функция СообщениеУстановитьПолныеПраваОбластиДанных() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "УстановитьПолныеПраваОбластиДанных"); + +КонецФункции + +// Возвращает тип сообщения УстановитьДоступКОбластиДанных. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьДоступКОбластиДанных +// +Функция СообщениеУстановитьДоступКОбластиДанных() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "УстановитьДоступКОбластиДанных"); + +КонецФункции + +// Возвращает тип сообщения УстановитьПраваПользователяПоУмолчанию. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьПраваПользователяПоУмолчанию +// +Функция СообщениеУстановитьПраваПользователяПоУмолчанию() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "УстановитьПраваПользователяПоУмолчанию"); + +КонецФункции + +// Возвращает тип сообщения ПодготовитьОбластьДанных. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.ПодготовитьОбластьДанных +// +Функция СообщениеПодготовитьОбластьДанных() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "ПодготовитьОбластьДанных"); + +КонецФункции + +// Возвращает тип сообщения УдалитьОбластьДанных. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УдалитьОбластьДанных +// +Функция СообщениеУдалитьОбластьДанных() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "УдалитьОбластьДанных"); + +КонецФункции + +// Возвращает тип сообщения УстановитьПараметрыОбластиДанных. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьПараметрыОбластиДанных +// +Функция СообщениеУстановитьПараметрыОбластиДанных() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "УстановитьПараметрыОбластиДанных"); + +КонецФункции + +// Возвращает тип сообщения ОбластьДанныхПодготовлена. +// +// Возвращаемое значение: +// XDTO-пакеты.КонтрольУдаленногоАдминистрирования.ОбластьДанныхПодготовлена +// +Функция СообщениеОбластьДанныхПодготовлена() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетКонтрольУдаленногоАдминистрирования(), "ОбластьДанныхПодготовлена"); + +КонецФункции + +// Возвращает тип сообщения ОбластьДанныхУдалена. +// +// Возвращаемое значение: +// XDTO-пакеты.КонтрольУдаленногоАдминистрирования.ОбластьДанныхУдалена +// +Функция СообщениеОбластьДанныхУдалена() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетКонтрольУдаленногоАдминистрирования(), "ОбластьДанныхУдалена"); + +КонецФункции + +// Возвращает тип сообщения ОшибкаПодготовкиОбластиДанных.ОшибкаПодготовкиОбластиДанных +// +// Возвращаемое значение: +// XDTO-пакеты.КонтрольУдаленногоАдминистрирования. +// +Функция СообщениеОшибкаПодготовкиОбластиДанных() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетКонтрольУдаленногоАдминистрирования(), "ОшибкаПодготовкиОбластиДанных"); + +КонецФункции + +// Возвращает тип сообщения ОшибкаУдаленияОбластиДанных. +// +// Возвращаемое значение: +// XDTO-пакеты.КонтрольУдаленногоАдминистрирования.ОшибкаУдаленияОбластиДанных +// +Функция СообщениеОшибкаУдаленияОбластиДанных() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетКонтрольУдаленногоАдминистрирования(), "ОшибкаУдаленияОбластиДанных"); + +КонецФункции + +// Возвращает тип сообщения УстановитьПараметрыИБ. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьПараметрыИБ +// +Функция СообщениеУстановитьПараметрыИБ() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "УстановитьПараметрыИБ"); + +КонецФункции + +// Возвращает тип сообщения УстановитьКонечнуюТочкуМенеджераСервиса. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьКонечнуюТочкуМенеджераСервиса +// +Функция СообщениеУстановитьКонечнуюТочкуМенеджераСервиса() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "УстановитьКонечнуюТочкуМенеджераСервиса"); + +КонецФункции diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияПовтИсп/СообщенияУдаленногоАдминистрированияПовтИсп.mdo b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияПовтИсп/СообщенияУдаленногоАдминистрированияПовтИсп.mdo new file mode 100644 index 000000000..3175ec96e --- /dev/null +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияПовтИсп/СообщенияУдаленногоАдминистрированияПовтИсп.mdo @@ -0,0 +1,12 @@ + + + СообщенияУдаленногоАдминистрированияПовтИсп + + ru + Сообщения удаленного администрирования повт исп + + true + true + true + DuringSession + diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl index 2d11a03d7..ab3649b09 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl @@ -1,7 +1,10 @@ -///////////////////////////////////////////////////////////////////////////////// -// Внутренние процедуры и функции подсистемы "Базовая функциональность", -// предназначенные для вызова из клиентского кода -// +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Записать настройку подтверждения завершения работы программы // для текущего пользователя. diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервераПереопределяемый/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервераПереопределяемый/Module.bsl index 8b5352161..079b46d7f 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервераПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервераПереопределяемый/Module.bsl @@ -1,6 +1,10 @@ -///////////////////////////////////////////////////////////////////////////////// -// БазоваяФункциональность -// +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Возвращает структуру параметров, необходимых для работы клиентского кода // при запуске конфигурации, т.е. в обработчиках событий @@ -91,11 +95,15 @@ // Функция ДобавитьПараметрыРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) - // БазоваяФункциональность + // СтандартныеПодсистемы.БазоваяФункциональность Если НЕ СтандартныеПодсистемыСервер.ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Тогда Возврат Ложь; КонецЕсли; - // Конец БазоваяФункциональность + // Конец СтандартныеПодсистемы.БазоваяФункциональность + + // СтандартныеПодсистемы.ЗавершениеРаботыПользователей + СоединенияИБ.ПроверитьБлокировкуСоединенийОбластиДанных(Параметры); + // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей Возврат Истина; @@ -109,69 +117,76 @@ // Процедура ДобавитьПараметрыРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) - // БазоваяФункциональность + // СтандартныеПодсистемы.БазоваяФункциональность СтандартныеПодсистемыСервер.ДобавитьПараметрыРаботыКлиента(Параметры); - // Конец БазоваяФункциональность + // Конец СтандартныеПодсистемы.БазоваяФункциональность - // Взаимодействия + // СтандартныеПодсистемы.Взаимодействия Параметры.Вставить("ИспользоватьПочтовыйКлиент", ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент")); Параметры.Вставить("ИспользоватьПрочиеВзаимодействия", ПолучитьФункциональнуюОпцию("ИспользоватьПрочиеВзаимодействия")); - // Конец Взаимодействия + // Конец СтандартныеПодсистемы.Взаимодействия - // ЗавершениеРаботыПользователей + // СтандартныеПодсистемы.ЗавершениеРаботыПользователей Параметры.Вставить("ПараметрыБлокировкиСеансов", Новый ФиксированнаяСтруктура(СоединенияИБ.ПараметрыБлокировкиСеансов())); - // Конец ЗавершениеРаботыПользователей + // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей - // ОбновлениеИнформационнойБазы + // СтандартныеПодсистемы.ОбновлениеВерсииИБ Параметры.Вставить("ПервыйЗапуск", ОбновлениеИнформационнойБазы.ПервыйЗапуск()); - // Конец ОбновлениеИнформационнойБазы + Параметры.Вставить("ЭтоГлавныйУзел", ПланыОбмена.ГлавныйУзел() = Неопределено); + // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ - // ОбновлениеКонфигурации + // СтандартныеПодсистемы.ОбновлениеКонфигурации Параметры.Вставить("НастройкиОбновления", Новый ФиксированнаяСтруктура(ОбновлениеКонфигурации.ПолучитьНастройкиОбновления())); - // Конец ОбновлениеКонфигурации + // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации - // ОбменДанными + // СтандартныеПодсистемы.ОбменДанными ОбменДаннымиСервер.ДобавитьПараметрыРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры); - // Конец ОбменДанными + // Конец СтандартныеПодсистемы.ОбменДанными - // ПроверкаЛегальностиПолученияОбновлений - Параметры.Вставить("ЭтоГлавныйУзел", ПланыОбмена.ГлавныйУзел() = Неопределено); - // Конец ПроверкаЛегальностиПолученияОбновлений - - // ПолучениеФайловИзИнтернета + // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета Параметры.Вставить("НастройкиПроксиСервера", ПолучениеФайловИзИнтернета.ПолучитьНастройкуПроксиСервера()); - // Конец ПолучениеФайловИзИнтернета + // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета - // ФайловыеФункции + // СтандартныеПодсистемы.ФайловыеФункции Параметры.Вставить("ПерсональныеНастройкиРаботыСФайлами", Новый ФиксированнаяСтруктура(ФайловыеФункции.ПолучитьПерсональныеНастройкиРаботыСФайлами())); - // Конец ФайловыеФункции + // Конец СтандартныеПодсистемы.ФайловыеФункции - // ЭлектроннаяЦифроваяПодпись + // СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись Параметры.Вставить("ПерсональныеНастройкиРаботыСЭЦП", Новый ФиксированнаяСтруктура(ЭлектроннаяЦифроваяПодпись.ПолучитьПерсональныеНастройкиРаботыСЭЦПСервер())); - // Конец ЭлектроннаяЦифроваяПодпись + // Конец СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись - // РегламентныеЗадания + // СтандартныеПодсистемы.РегламентныеЗадания Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда Параметры.Вставить("ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий", Новый ФиксированнаяСтруктура(РегламентныеЗаданияСервер.ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий(Истина))); КонецЕсли; - // Конец РегламентныеЗадания + // Конец СтандартныеПодсистемы.РегламентныеЗадания - // УправлениеДоступом + // СтандартныеПодсистемы.УправлениеДоступом Параметры.Вставить("УпрощенныйИнтерфейсНастройкиПравДоступа", УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа()); - // Конец УправлениеДоступом + // Конец СтандартныеПодсистемы.УправлениеДоступом - // РезервноеКопированиеИБ + // СтандартныеПодсистемы.РезервноеКопированиеИБ Параметры.Вставить("ПараметрыРезервногоКопированияИБ", РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования()); - // Конец РезервноеКопированиеИБ + // Конец СтандартныеПодсистемы.РезервноеКопированиеИБ - // НапоминанияПользователя + // СтандартныеПодсистемы.НапоминанияПользователя Параметры.Вставить("НастройкиНапоминаний", Новый ФиксированнаяСтруктура(НапоминанияПользователяСервер.ПолучитьНастройкиНапоминаний())); - // Конец НапомианияПользователя + // Конец СтандартныеПодсистемы.НапоминанияПользователя КонецПроцедуры +// Процедура осуществляет копирование общих данных в разделенные +// +Процедура ПодобратьПоставляемыеДанныеИзКлассификатора(Знач Ссылки, Знач ИгнорироватьРучноеИзменение = Ложь) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.ПодобратьИзКлассификатора(Ссылки, ИгнорироватьРучноеИзменение); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl index 4cbd05c87..1f8170e6d 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl @@ -1,15 +1,165 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Устанавливает заголовок главного окна приложения, используя представление текущего пользователя, +// значение константы ЗаголовокПриложения и заголовок приложения по умолчанию. +// +Процедура УстановитьРасширенныйЗаголовокПриложения() Экспорт + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + ПредставлениеЗаголовка = ПараметрыКлиента.ЗаголовокПриложения; + ПредставлениеПользователя = ПараметрыКлиента.АвторизованныйПользователь; + ПредставлениеКонфигурации = ПараметрыКлиента.ПодробнаяИнформация; + + + Если ПустаяСтрока(СокрЛП(ПредставлениеЗаголовка)) Тогда + Если ПараметрыКлиента.Свойство("ПредставлениеОбластиДанных") Тогда + ШаблонЗаголовка = "%1 / %2 / %3 / "; + ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, + ПараметрыКлиента.ПредставлениеОбластиДанных, ПараметрыКлиента.ПодробнаяИнформация, + ПредставлениеПользователя); + Иначе + ШаблонЗаголовка = "%1 / %2 / "; + ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, + ПараметрыКлиента.ПодробнаяИнформация, ПредставлениеПользователя); + КонецЕсли; + Иначе + ШаблонЗаголовка = "%1 / %2 / %3 / "; + ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, + СокрЛП(ПредставлениеЗаголовка), ПредставлениеПользователя, ПредставлениеКонфигурации); + КонецЕсли; + + УстановитьЗаголовокПриложения(ЗаголовокПриложения); + Иначе + ШаблонЗаголовка = "%1 / %2 / "; + ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, + НСтр("ru = 'Не установлены разделители'"), ОбщегоНазначения.ПолучитьПодробнуюИнформациюКонфигурации()); + + УстановитьЗаголовокПриложения(ЗаголовокПриложения); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Стандартные действия выполняемые перед началом работы системы. +// +// Параметры: +// Отказ - Булево - флаг отказа от выполнения операции. +// В случае установки в Истина вход в систему осуществлен не будет. +// +Процедура ДействияПередНачаломРаботыСистемы(Отказ) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.УдаленноеАдминистрирование + Если ОбновлениеИнформационнойБазы.ПервыйЗапуск() Тогда + + Если Найти(ПараметрЗапуска, "ИнициализироватьРазделеннуюИБ") <> 0 + ИЛИ Найти(ПараметрЗапуска, "InitializeSeparatedIB") <> 0 Тогда + + ОбщегоНазначения.УстановитьПараметрыРазделенияИнформационныйБазы(Истина); + + ПрекратитьРаботуСистемы(Истина); + КонецЕсли; + + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УдаленноеАдминистрирование + + ДоступноИспользованиеРазделенныхДанных = ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); + + Если НЕ ДоступноИспользованиеРазделенныхДанных Тогда + ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(); + КонецЕсли; + + Если НЕ ПустаяСтрока(ПараметрЗапуска) Тогда + ПараметрыЗапуска = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска, ";"); + ЗначениеПараметраЗапуска = Врег(ПараметрыЗапуска[0]); + + Если ЗначениеПараметраЗапуска = ВРег("ВойтиВОбластьДанных") Тогда + Если ПараметрыЗапуска.Количество() < 2 Тогда + ВызватьИсключение(НСтр("ru = 'При указании параметра запуска ВойтиВОбластьДанных, + |дополнительным параметром необходимо указать значение разделителя.'")); + КонецЕсли; + + Попытка + ЗначениеРазделителя = Число(ПараметрыЗапуска[1]); + Исключение + ВызватьИсключение(НСтр("ru = 'Значением разделителя должно быть число.'")); + КонецПопытки; + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ЗначениеРазделителя); + ДоступноИспользованиеРазделенныхДанных = Истина; + КонецЕсли; + КонецЕсли; + + Если ДоступноИспользованиеРазделенныхДанных Тогда + + СтандартныеПодсистемыКлиентПереопределяемый.ПередНачаломРаботыСистемы(Отказ); + + Если Отказ Тогда + Возврат; + КонецЕсли; + + ОбщегоНазначенияКлиентПереопределяемый.ПередНачаломРаботыСистемы(Отказ); + + КонецЕсли; + +КонецПроцедуры + +// Стандартные действия выполняемые при начале работы системы. +// +// Параметры +// ОбрабатыватьПараметрыЗапуска - Булево - Истина, если обработчик вызван при +// непосредсвенном входе пользователя в систему и должен обработать параметры +// запуска (если это предусмотрено его логикой). Ложь, если обработчик вызван +// при интерактивном входе неразделенного пользователя в область данных и +// обрабатывать параметры запуска не следует. +// +Процедура ДействияПриНачалеРаботыСистемы(ОбрабатыватьПараметрыЗапуска = Истина) Экспорт + + СтандартныеПодсистемыКлиентПереопределяемый.ПриНачалеРаботыСистемы(ОбрабатыватьПараметрыЗапуска); + ОбщегоНазначенияКлиентПереопределяемый.ПриНачалеРаботыСистемы(ОбрабатыватьПараметрыЗапуска); + +КонецПроцедуры + +// Соответствует обработчику ПередЗавершениемРаботыСистемы +// +// Параметры: +// Отказ - Булево - признак отказа от завершения работы системы. +// +Процедура ДействияПередЗавершениемРаботыСистемы(Отказ) Экспорт + + СтандартныеПодсистемыКлиентПереопределяемый.ПередЗавершениемРаботыСистемы(Отказ); + + Если Отказ = Истина Тогда + Возврат; + КонецЕсли; + + ОбщегоНазначенияКлиентПереопределяемый.ПередЗавершениемРаботыСистемы(Отказ); + +КонецПроцедуры // Показывает пользователю диалог подтверждения выхода из программы. +// // Параметры: -// Отказ - (булево) устанавливается в процедуре, как Истина -// если пользователь отказлся от закрытия программы -// Возвращаемое значение -// Истина - пользователь отказался от закрытия программы -// Ложь - пользователь решил закрыть программу, или диалог закрытия не вызывался +// Отказ - Булево - признак отказа от завершения работы системы. +// +// Возвращаемое значение: +// Булево - Истина, если пользователь отказался от закрытия программы; +// Ложь, если пользователь согласился закрыть программу, или диалог закрытия не вызывался. // Функция ВопросПользователюПередЗавершениемРаботыСистемы(Отказ) Экспорт - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Не СтандартныеПодсистемыВызовСервера.ЗагрузитьНастройкуПодтвержденияПриЗавершенииПрограммы(); + // Если программно не отключено предупреждение, то зачитываем из настроек + Если ПропуститьПредупреждениеПередЗавершениемРаботыСистемы <> Истина Тогда + ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Не СтандартныеПодсистемыВызовСервера.ЗагрузитьНастройкуПодтвержденияПриЗавершенииПрограммы(); + КонецЕсли; Если ПропуститьПредупреждениеПередЗавершениемРаботыСистемы Тогда Возврат Ложь; КонецЕсли; @@ -23,7 +173,7 @@ Кнопки.Добавить("КодВозвратаДиалога.Да", НСтр("ru = 'Завершить'")); Кнопки.Добавить("КодВозвратаДиалога.Нет", НСтр("ru = 'Не завершать'")); - Результат = ВопросПользователю(НСтр("ru = 'Завершить работу с программой?'"), Кнопки, , КодВозвратаДиалога.Да, "Завершение работы", + Результат = ВопросПользователю(НСтр("ru = 'Завершить работу с программой?'"), Кнопки, , КодВозвратаДиалога.Да, НСтр("ru = 'Завершение работы'"), КодВозвратаДиалога.Нет, БольшеНеЗадаватьЭтотВопрос); Если БольшеНеЗадаватьЭтотВопрос Тогда СтандартныеПодсистемыВызовСервера.СохранитьНастройкуПодтвержденияПриЗавершенииПрограммы(НЕ БольшеНеЗадаватьЭтотВопрос); @@ -38,6 +188,14 @@ КонецФункции +// Отключает выдачу предупреждения пользователю при завершении работы программы. +// +Процедура ПропуститьПредупреждениеПередЗавершениемРаботыСистемы() Экспорт + + ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; + +КонецПроцедуры + // Проверяет версию платформы, в зависмости от места вызова и возвращает Истина, // если она подходит для запуска конфигурации. // @@ -50,6 +208,10 @@ // Функция ПроверитьВерсиюПлатформыПриЗапуске(МестоВызова) Экспорт + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат Истина; + КонецЕсли; + // Для Обычного режима проверка выполняется в обработчике "ПриНачалеРаботыСистемы". // Для Управляемого режима проверка выполняется в обработчике "ПередНачаломРаботыСистемы". #Если ТолстыйКлиентОбычноеПриложение Тогда @@ -62,7 +224,7 @@ КонецЕсли; #КонецЕсли - ПараметрыПроверки = Новый ФиксированнаяСтруктура("ВерсияПлатформы, РаботаВПрограммеЗапрещена", "8.2.14.540", Ложь); + ПараметрыПроверки = Новый ФиксированнаяСтруктура("ВерсияПлатформы, РаботаВПрограммеЗапрещена", "8.2.15.310", Ложь); СтандартныеПодсистемыКлиентПереопределяемый.ПолучитьМинимальноНеобходимуюВерсиюПлатформы(ПараметрыПроверки); Возврат ПроверитьВерсиюПлатформы(ПараметрыПроверки.ВерсияПлатформы, ПараметрыПроверки.РаботаВПрограммеЗапрещена); @@ -73,33 +235,26 @@ // Если версия платформы более поздняя, чем РекомендуемаяВерсияПлатформы, то пользователю будет // показано оповещение. Работа программы будет прекращена, если ЗавершитьРаботу = Истина. // -// Параметры -// РекомендуемаяВерсияПлатформы - Строка - версия платформы рекомендуемая для работы +// Параметры: +// РекомендуемаяВерсияПлатформы - Строка - версия платформы рекомендуемая для работы; // РаботаВПрограммеЗапрещена - Булево - если Истина и текущая версия платформы меньше рекомендуемой, // то продолжение работы в программе невозможно. // -// Возвращаемое значение -// Булево - Истина, если версия платформы подходит для работы +// Возвращаемое значение: +// Булево - Истина, если версия платформы подходит для работы. // Функция ПроверитьВерсиюПлатформы(знач РекомендуемаяВерсияПлатформы, знач РаботаВПрограммеЗапрещена = Ложь) Экспорт СистемнаяИнформация = Новый СистемнаяИнформация; - Если СтроковыеФункцииКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, РекомендуемаяВерсияПлатформы) >= 0 Тогда + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, РекомендуемаяВерсияПлатформы) >= 0 Тогда Возврат Истина; КонецЕсли; - ТекстСообщения = - НСтр("ru='Для работы с конфигурацией требуется версия платформы 1С:Предприятие %1 или более поздняя. - |Используемая сейчас версия: %2. - | - |'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстСообщения, РекомендуемаяВерсияПлатформы, СистемнаяИнформация.ВерсияПриложения); - Если РаботаВПрограммеЗапрещена Тогда - ТекстСообщения = ТекстСообщения + НСтр("ru='Продолжение невозможно, работа программы будет завершена.'"); + ТекстСообщения = НСтр("ru='Продолжение невозможно, работа программы будет завершена. + |Необходимо обновить версию платформы 1С:Предприятие.'"); Иначе - ТекстСообщения = ТекстСообщения + + ТекстСообщения = НСтр("ru='Рекомендуется прекратить работу программы и обновить версию платформы 1С:Предприятие. |В противном случае некоторые возможности программы будут недоступны или будут работать некорректно. | @@ -108,6 +263,7 @@ Параметры = Новый Структура; Параметры.Вставить("ТекстСообщения", ТекстСообщения); Параметры.Вставить("ЗавершитьРаботу", РаботаВПрограммеЗапрещена); + Параметры.Вставить("РекомендуемаяВерсияПлатформы", РекомендуемаяВерсияПлатформы); Результат = ОткрытьФормуМодально("ОбщаяФорма.НерекомендуемаяВерсияПлатформы", Параметры); Если РаботаВПрограммеЗапрещена Тогда ПрекратитьРаботуСистемы(); @@ -121,30 +277,6 @@ КонецФункции -// Устанавливает заголовок главного окна приложения, используя представление текущего пользователя, -// значение константы ЗаголовокПриложения и заголовок приложения по умолчанию. -// -Процедура УстановитьПроизвольныйЗаголовокПриложения() Экспорт - - ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); - ПредставлениеЗаголовка = ПараметрыКлиента.ЗаголовокПриложения; - ПредставлениеПользователя = ПараметрыКлиента.АвторизованныйПользователь; - ПредставлениеКонфигурации = ПараметрыКлиента.СинонимКонфигурации; - - ШаблонЗаголовка = "%1 / %2 / "; - Если ПустаяСтрока(СокрЛП(ПредставлениеЗаголовка)) Тогда - ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, - ПараметрыКлиента.ПодробнаяИнформация, ПредставлениеПользователя); - Иначе - ШаблонЗаголовка = ШаблонЗаголовка+ " %3 / "; - ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, - СокрЛП(ПредставлениеЗаголовка), ПредставлениеПользователя, ПредставлениеКонфигурации); - КонецЕсли; - - УстановитьЗаголовокПриложения(ЗаголовокПриложения); - -КонецПроцедуры - // Вызывает форму вопроса. // // Параметры: @@ -215,13 +347,12 @@ КонецФункции - -// ЗАВЕРШЕНИЕ РАБОТЫ СИСТЕМЫ -// - // Выводит форму сообщений пользователю при закрытии программы, // либо выводит сообщение. // +// Параметры: +// Отказ - Булево - признак отказа от завершения работы системы. +// Процедура ОткрытьФормуПредупрежденийПриЗавершенииРаботы(Отказ) Экспорт Предупреждения = Новый Массив; СтандартныеПодсистемыКлиентПереопределяемый.ПолучитьСписокПредупреждений(Предупреждения); @@ -244,16 +375,16 @@ // Формирует отображение одного вопроса. // -// Если вопрос - гиперссылка - то открыватеся "ФормаИндивидуальногоОткрытия" из Структуры вопроса. -// Если вопрос - флажок - то открывается форма "ОбщаяФорма.ВопросПередЗавершениемРаботыСистемы". +// Если в ПредупреждениеПользователю есть свойство "ТекстГиперссылки", то открыватеся "ФормаИндивидуальногоОткрытия" из Структуры вопроса. +// Если в ПредупреждениеПользователю есть свойство "ТекстФлажка", то открывается форма "ОбщаяФорма.ВопросПередЗавершениемРаботыСистемы". // // Параметры: -// СтруктураВопроса - структура передаваемого вопроса. -// ИмяФормы - имя общей формы с вопросамию -// ПараметрыПередачи - параметры для формы с вопросами. +// ПредупреждениеПользователю - Структура - структура передаваемого предупреждения. +// ИмяФормы - Строка - имя общей формы с вопросамию +// ПараметрыПередачи - Структура - параметры для формы с вопросами. // // Возвращаемое значение: -// Отказ - булева переменная. +// Блулево - Истина, если форма открыта, Ложь - Иначе. // Функция ОткрытьПрикладнуюФормуПредупреждения(ПредупреждениеПользователю, ИмяФормы, ПараметрыПередачи) Отказ = Ложь; diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПереопределяемый/Module.bsl index 8c5a59ca1..9d92c5268 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПереопределяемый/Module.bsl @@ -1,9 +1,192 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Соответствует обработчику ПриНачалеРаботыСистемы +// +// Параметры +// ОбрабатыватьПараметрыЗапуска - Булево - Истина, если обработчик вызван при +// непосредсвенном входе пользователя в систему и должен обработать параметры +// запуска (если это предусмотрено его логикой). Иначе обработчика вызван +// при интерактивном входе неразделенного пользователя в область данных и +// обрабатывать параметры запуска не следует. +// +Процедура ПриНачалеРаботыСистемы(Знач ОбрабатыватьПараметрыЗапуска = Ложь) Экспорт + + Если ОбновлениеИнформационнойБазы.ПервыйЗапуск() Тогда + + ОбщегоНазначения.УстановитьПараметрыРазделенияИнформационныйБазы(Ложь); + + КонецЕсли; + + СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); + + // СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления + Если НЕ ПроверкаЛегальностиПолученияОбновленияКлиент.ПодтвердитьЛегальностьПолученияОбновления() Тогда + Возврат; + КонецЕсли; + // Конец СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления + + // СтандартныеПодсистемы.ОбменДанными + Если НЕ ОбменДаннымиКлиент.ПроверитьЗагрузкуСообщенияОбменаСИзменениямиКонфигурацииДляПодчиненногоУзла() Тогда + Возврат; + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбменДанными + + // СтандартныеПодсистемы.ОбновлениеВерсииИБ + ОбновлениеИнформационнойБазыКлиент.ВыполнитьОбновлениеИнформационнойБазы(); + + ОбновлениеИнформационнойБазыКлиент.ПоказатьОписаниеИзмененийСистемы(); + // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ + + // отработка параметров запуска системы + Если ОбрабатыватьПараметрыЗапуска Тогда + Если ОбработатьПараметрыЗапуска() Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + // СтандартныеПодсистемы.ЗавершениеРаботыПользователей + СоединенияИБКлиент.ПриНачалеРаботыСистемы(); + // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей + + // СтандартныеПодсистемы.ОбменДанными + ОбменДаннымиКлиент.ПриНачалеРаботыСистемы(); + // Конец СтандартныеПодсистемы.ОбменДанными + + // СтандартныеПодсистемы.ОбновлениеКонфигурации + ОбновлениеКонфигурацииКлиент.ПроверитьОбновлениеКонфигурации(); + // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации + + // СтандартныеПодсистемы.РегламентныеЗадания + // Прим.: подсистема КонтрольДинамическогоОбновленияКонфигурации + // должна настраиваться после подсистемы РегламентныеЗадания, т.к. в режиме запуска отдельного + // сеанса обработки регламентных заданий, управление не будет и не должно быть передано далее. + РегламентныеЗаданияКлиент.ПриНачалеРаботыСистемы(); + // Конец СтандартныеПодсистемы.РегламентныеЗадания + + // СтандартныеПодсистемы.РезервноеКопированиеИБ + РезервноеКопированиеИБКлиент.ПриНачалеРаботыСистемы(); + // Конец СтандартныеПодсистемы.РезервноеКопированиеИБ + + // СтандартныеПодсистемы.КонтрольДинамическогоОбновленияКонфигурации + КонтрольДинамическогоОбновленияКонфигурацииКлиент.ПриНачалеРаботыСистемы(); + // Конец СтандартныеПодсистемы.КонтрольДинамическогоОбновленияКонфигурации + + // СтандартныеПодсистемы.НапоминанияПользователя + НапоминанияПользователяКлиент.ПриНачалеРаботыСистемы(); + // Конец СтандартныеПодсистемы.НапоминанияПользователя + +КонецПроцедуры + +// Обработать параметр запуска программы. +// Реализация функции может быть расширена для обработки новых параметров. +// +// Параметры +// ПараметрЗапуска – Строка – параметр запуска, переданный в конфигурацию +// с помощью ключа командной строки /C. +// +// Возвращаемое значение: +// Булево – Истина, если необходимо прервать выполнение процедуры ПриНачалеРаботыСистемы. +// +Функция ОбработатьПараметрыЗапуска() + + Перем Результат; + + Результат = Ложь; + + // СтандартныеПодсистемы + + // Есть ли параметры запуска + Если ПустаяСтрока(ПараметрЗапуска) Тогда + Возврат Результат; + КонецЕсли; + + // Параметр может состоять из частей, разделенных символом ";". + // Первая часть - главное значение параметра запуска. + // Наличие дополнительных частей определяется логикой обработки главного параметра. + ПараметрыЗапуска = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска, ";"); + ЗначениеПараметраЗапуска = Врег(ПараметрыЗапуска[0]); + + // СтандартныеПодсистемы.ЗавершениеРаботыПользователей + Результат = СоединенияИБКлиент.ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска); + // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей + + // Конец СтандартныеПодсистемы + + // Код конфигурации + // ... + // Конец кода конфигурации + + + // СтандартныеПодсистемы + Возврат Результат; + // Конец СтандартныеПодсистемы + +КонецФункции + +// Выполняется перед интерактивном началом работы пользователя с областью данных. +// Соответствует обработчику ПередНачаломРаботыСистемы +// +// Параметры: +// Отказ - Булево - отказ в от начала работы. Если параметр установить в Истина, +// начало работы с областью осуществлено не будет. +// +Процедура ПередНачаломРаботыСистемы(Отказ) Экспорт + + // СтандартныеПодсистемы + + // СтандартныеПодсистемы.Пользователи + ОшибкаАвторизации = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ОшибкаАвторизации; + Если ЗначениеЗаполнено(ОшибкаАвторизации) Тогда + Предупреждение(ОшибкаАвторизации); + Отказ = Истина; + Возврат; + КонецЕсли; + // Конец СтандартныеПодсистемы.Пользователи + + СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); + ВерсияАктуальна = СтандартныеПодсистемыКлиент.ПроверитьВерсиюПлатформыПриЗапуске("ПередНачаломРаботы"); + Если Не ВерсияАктуальна Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + // СтандартныеПодсистемы.ЗавершениеРаботыПользователей + СоединенияИБКлиент.ПередНачаломРаботыСистемы(Отказ); + Если Отказ Тогда + Возврат; + КонецЕсли; + // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей + + // СтандартныеПодсистемы.ОбновлениеВерсииИБ + Отказ = НЕ ОбновлениеИнформационнойБазыКлиент.ВозможноВыполнитьОбновлениеИнформационнойБазы(); + // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ + + // Конец СтандартныеПодсистемы + +КонецПроцедуры + +// Соответствует обработчику ПередЗавершениемРаботыСистемы +// +Процедура ПередЗавершениемРаботыСистемы(Отказ) Экспорт + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + СтандартныеПодсистемыКлиент.ОткрытьФормуПредупрежденийПриЗавершенииРаботы(Отказ); + КонецЕсли; + +КонецПроцедуры + ///////////////////////////////////////////////////////////////////////////////// // БазоваяФункциональность // // Вызывается при завершении работы системы, чтобы запросить список предупреждений, -// выводимых пользователю пользователю. +// выводимых пользователю. // // Параметры: // Предупреждения - Массив - список предупреждений. Элемент массива - Структура с полями: @@ -22,13 +205,13 @@ // Процедура ПолучитьСписокПредупреждений(Предупреждения) Экспорт - // РезервноеКопирование + // СтандартныеПодсистемы.РезервноеКопированиеИБ РезервноеКопированиеИБКлиент.ПриЗавершенииРаботыСистемы(Предупреждения); - // Конец РезервноеКопирование + // Конец СтандартныеПодсистемы.РезервноеКопированиеИБ - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиКлиент.ПриЗавершенииРаботыСистемы(Предупреждения); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами КонецПроцедуры @@ -41,9 +224,9 @@ // Процедура ОткрытьСписокАктивныхПользователей() Экспорт - // ЗавершениеРаботыПользователей + // СтандартныеПодсистемы.ЗавершениеРаботыПользователей ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); - // Конец ЗавершениеРаботыПользователей + // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей КонецПроцедуры @@ -56,4 +239,40 @@ Процедура ПолучитьМинимальноНеобходимуюВерсиюПлатформы(ПараметрыПроверки) Экспорт -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +///////////////////////////////////////////////////////////////////////////////// +// Поставляемые данные +// + +// Выдает пользователю вопрос об обновлении из общих данных. +// В случае утвердительного ответа, возвращает Истина. +// +Функция ОбновитьЭлементИзОбщихДанных(Знач Форма) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + Возврат ПоставляемыеДанныеКлиентСервер.ОбновитьЭлементИзОбщихДанных(Форма); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецФункции + +// Выдает пользователю вопрос об отказе от обновлении из общих данных. +// В случае утвердительного ответа, изменяет состояние объекта. +// +Процедура ИзменитьРазделенныйЭлемент(Знач Форма) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанныеКлиентСервер.ИзменитьРазделенныйЭлемент(Форма); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +Функция ИмяФормыВыбораКлассификатораВалют() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + Возврат "Справочник.КлассификаторВалют.ФормаВыбора"; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + + ВызватьИсключение(НСтр("ru = 'Подсистема ""Валюты (в модели сервиса)"" не доступна'")) + +КонецФункции diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl index 551e8486c..bb6b4be95 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl @@ -1,6 +1,13 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Возвращает структуру параметров, необходимых для работы -// конфигурации на клиенте при запуска, т.е. в обработчиках событий +// конфигурации на клиенте при запуске, т.е. в обработчиках событий // - ПередНачаломРаботыСистемы, // - ПриНачалеРаботыСистемы // @@ -18,8 +25,14 @@ // конфигурации на клиенте. // Функция ПараметрыРаботыКлиента() Экспорт + ТекущаяДата = ТекущаяДата(); // текущая дата клиентского компьютера + ПараметрыРаботыКлиента = Новый Структура; + Для Каждого Параметр Из СтандартныеПодсистемыВызовСервераПереопределяемый.ПараметрыРаботыКлиента() Цикл + ПараметрыРаботыКлиента.Вставить(Параметр.Ключ, Параметр.Значение); + КонецЦикла; + ПараметрыРаботыКлиента.ПоправкаКВремениСеанса = ПараметрыРаботыКлиента.ПоправкаКВремениСеанса - ТекущаяДата; - Возврат СтандартныеПодсистемыВызовСервераПереопределяемый.ПараметрыРаботыКлиента(); + Возврат Новый ФиксированнаяСтруктура(ПараметрыРаботыКлиента); КонецФункции diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверПереопределяемый/Module.bsl index 7a9c5701d..c82f2b274 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверПереопределяемый/Module.bsl @@ -1,6 +1,10 @@ -///////////////////////////////////////////////////////////////////////////////// -// БазоваяФункциональность -// +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Вызывается при необходимости получить номер документа для вывода на печать. // @@ -11,9 +15,9 @@ // Процедура ПолучитьНомерНаПечать(НомерОбъекта, СтандартнаяОбработка) Экспорт - // ПрефиксацияОбъектов + // СтандартныеПодсистемы.ПрефиксацияОбъектов НомерОбъекта = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(НомерОбъекта); СтандартнаяОбработка = Ложь; - // Конец ПрефиксацияОбъектов + // Конец СтандартныеПодсистемы.ПрефиксацияОбъектов КонецПроцедуры diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыПереопределяемый/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыПереопределяемый/Module.bsl index 6718dbe9b..978a302f9 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыПереопределяемый/Module.bsl @@ -1,115 +1,10 @@ -///////////////////////////////////////////////////////////////////////////////// -// БазоваяФункциональность -// +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// +//////////////////////////////////////////////////////////////////////////////// -// Возвращает список процедур-обработчиков обновления библиотеки. -// -// Здесь в алфавитном порядке размещаются только процедуры-обработчики обновления -// библиотечных подсистем, которые используются в данной конфигурации. -// Процедуры-обработчики обновления самой конфигурации следует размещать в функции -// ОбработчикиОбновления общего модуля ОбновлениеИнформационнойБазыПереопределяемый. -// -// Возвращаемое значение: -// ТаблицаЗначений - описание полей структуры см. в функции -// ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления() -// -Функция ОбработчикиОбновленияСтандартныхПодсистем() Экспорт - - Обработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(); - - // Подключаются процедуры-обработчики обновления библиотеки - - // АдресныйКлассификатор - АдресныйКлассификатор.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец АдресныйКлассификатор - - // БазоваяФункциональность - СтандартныеПодсистемыСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец БазоваяФункциональность - - // БизнесПроцессыИЗадачи - БизнесПроцессыИЗадачиСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец БизнесПроцессыИЗадачи - - // ВариантыОтчетов - ВариантыОтчетов.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец ВариантыОтчетов - - // Взаимодействия - Взаимодействия.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец Взаимодействия - - // Валюты - РаботаСКурсамиВалют.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец Валюты - - // ДатыЗапретаИзменения - ДатыЗапретаИзменения.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец ДатыЗапретаИзменения - - // ДополнительныеОтчетыИОбработки - ДополнительныеОтчетыИОбработки.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец ДополнительныеОтчетыИОбработки - - // КалендарныеГрафики - КалендарныеГрафики.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец КалендарныеГрафики - - // КонтактнаяИнформация - УправлениеКонтактнойИнформацией.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец КонтактнаяИнформация - - // ОбменДанными - ОбменДаннымиСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец ОбменДанными - - // ОбновлениеКонфигурации - ОбновлениеКонфигурации.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец ОбновлениеКонфигурации - - // ПолнотекстовыйПоиск - ПолнотекстовыйПоискСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец ПолнотекстовыйПоиск - - // ПолучениеФайловИзИнтернета - ПолучениеФайловИзИнтернета.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец ПолучениеФайловИзИнтернета - - // Пользователи - Пользователи.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец Пользователи - - // РаботаСПочтовымиСообщениями - ЭлектроннаяПочта.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец РаботаСПочтовымиСообщениями - - // РаботаСФайлами - РаботаСФайламиВызовСервера.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец РаботаСФайлами - - // РегламентныеЗадания - РегламентныеЗаданияСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец РегламентныеЗадания - - // Свойства - УправлениеСвойствами.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец Свойства - - // УправлениеДоступом - УправлениеДоступом.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец УправлениеДоступом - - // ФизическиеЛица - ФизическиеЛица.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец ФизическиеЛица - - // ЭлектроннаяЦифроваяПодпись - ЭлектроннаяЦифроваяПодпись.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец ЭлектроннаяЦифроваяПодпись - - Возврат Обработчики; - -КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Возвращает признак, является ли конфигурация базовой. // @@ -143,28 +38,28 @@ Обработчики = Новый Соответствие; - // ОбменДанными + // СтандартныеПодсистемы.ОбменДанными Обработчики.Вставить("ДатаОбновленияПовторноИспользуемыхЗначенийМРО", "ОбменДаннымиСервер.УстановкаПараметровСеанса"); Обработчики.Вставить("ОбменДаннымиВключен", "ОбменДаннымиСервер.УстановкаПараметровСеанса"); Обработчики.Вставить("ИспользуемыеПланыОбмена", "ОбменДаннымиСервер.УстановкаПараметровСеанса"); Обработчики.Вставить("ПравилаВыборочнойРегистрацииОбъектов", "ОбменДаннымиСервер.УстановкаПараметровСеанса"); Обработчики.Вставить("ПравилаРегистрацииОбъектов", "ОбменДаннымиСервер.УстановкаПараметровСеанса"); - // Конец ОбменДанными + // Конец СтандартныеПодсистемы.ОбменДанными - // УправлениеДоступом + // СтандартныеПодсистемы.УправлениеДоступом Обработчики.Вставить("ОграничиватьДоступПоВиду*", "УправлениеДоступом.УстановкаПараметровСеанса"); Обработчики.Вставить("ВидыДоступа*", "УправлениеДоступом.УстановкаПараметровСеанса"); Обработчики.Вставить("ДобавлятьРуководителямДоступПодчиненных", "УправлениеДоступом.УстановкаПараметровСеанса"); - // Конец УправлениеДоступом + // Конец СтандартныеПодсистемы.УправлениеДоступом - // Пользователи + // СтандартныеПодсистемы.Пользователи Обработчики.Вставить("ТекущийПользователь", "Пользователи.УстановкаПараметровСеанса"); Обработчики.Вставить("ТекущийВнешнийПользователь", "Пользователи.УстановкаПараметровСеанса"); - // Конец Пользователи + // Конец СтандартныеПодсистемы.Пользователи - // ОценкаПроизводительности + // СтандартныеПодсистемы.ОценкаПроизводительности Обработчики.Вставить("ТекущийЗамерВремени", "ОценкаПроизводительностиВызовСервера.УстановкаПараметровСеанса"); - // Конец ОценкаПроизводительности + // Конец СтандартныеПодсистемы.ОценкаПроизводительности Возврат Обработчики; @@ -180,55 +75,1137 @@ Массив = Новый Массив; - // БизнесПроцессыИЗадачи + // СтандартныеПодсистемы.БизнесПроцессыИЗадачи Массив.Добавить(Метаданные.РегистрыСведений.ИсполнителиЗадач.ПолноеИмя()); Массив.Добавить(Метаданные.РегистрыСведений.ДанныеБизнесПроцессов.ПолноеИмя()); - // Конец БизнесПроцессыИЗадачи + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи - // Валюты + // СтандартныеПодсистемы.Валюты Массив.Добавить(Метаданные.РегистрыСведений.КурсыВалют.ПолноеИмя()); - // Конец Валюты + // Конец СтандартныеПодсистемы.Валюты - // ВерсионированиеОбъектов + // СтандартныеПодсистемы.ВерсионированиеОбъектов Массив.Добавить(Метаданные.РегистрыСведений.ВерсииОбъектов.ПолноеИмя()); - // Конец ВерсионированиеОбъектов + // Конец СтандартныеПодсистемы.ВерсионированиеОбъектов - // ВнешниеБизнесПроцессыИЗадачи + // СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи Массив.Добавить(Метаданные.РегистрыСведений.ИсточникиВнешнихЗадач.ПолноеИмя()); - // Конец ВнешниеБизнесПроцессыИЗадачи + // Конец СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи - // Пользователи + // СтандартныеПодсистемы.Пользователи Массив.Добавить(Метаданные.РегистрыСведений.СоставыГруппПользователей.ПолноеИмя()); - // Конец Пользователи + // Конец СтандартныеПодсистемы.Пользователи - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы Массив.Добавить(Метаданные.РегистрыСведений.НаличиеПрисоединенныхФайлов.ПолноеИмя()); - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + Массив.Добавить(Метаданные.РегистрыСведений.СвязиПоставляемыхДанных.ПолноеИмя()); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + + // СтандартныеПодсистемы.РаботаСФайлами Массив.Добавить(Метаданные.РегистрыСведений.ФайлыВРабочемКаталоге.ПолноеИмя()); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами - // Свойства + // СтандартныеПодсистемы.Свойства Массив.Добавить(Метаданные.РегистрыСведений.ДополнительныеСведения.ПолноеИмя()); - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства - // УправлениеДоступом + // СтандартныеПодсистемы.УправлениеДоступом Массив.Добавить(Метаданные.РегистрыСведений.ГруппыЗначенийДоступа.ПолноеИмя()); Массив.Добавить(Метаданные.РегистрыСведений.НаборыЗначенийДоступа.ПолноеИмя()); Массив.Добавить(Метаданные.РегистрыСведений.ЗначенияГруппДоступа.ПолноеИмя()); Массив.Добавить(Метаданные.РегистрыСведений.ТаблицыГруппДоступа.ПолноеИмя()); Массив.Добавить(Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа.ПолноеИмя()); - // Конец УправлениеДоступом + // Конец СтандартныеПодсистемы.УправлениеДоступом - // ФизическиеЛица + // СтандартныеПодсистемы.ФизическиеЛица Массив.Добавить(Метаданные.РегистрыСведений.ДокументыФизическихЛиц.ПолноеИмя()); - // Конец ФизическиеЛица + // Конец СтандартныеПодсистемы.ФизическиеЛица Возврат Массив; КонецФункции +// Формирует список имен неразделенных регистров сведений, хранящих разделенные данные. +// +// Параметры: +// ОбщиеРегистры - Массив - массив строк. +// +Процедура ПолучитьОбщиеРегистрыСведенийСРазделеннымиДанными(Знач ОбщиеРегистры) Экспорт + + // СтандартныеПодсистемы.ОбновлениеВерсииИБ + ОбщиеРегистры.Добавить("ВерсииПодсистем"); + // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий + ОбщиеРегистры.Добавить("ОчередьЗаданий"); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ОбщиеРегистры.Добавить("СвязиПоставляемыхДанных"); + ОбщиеРегистры.Добавить("ОбластиДляОбновленияПоставляемыхДанных"); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Формирует список типов данных которые не могут быть скопированы между областями +// +// Параметры: +// ОбщиеРегистры - Массив - массив типов. +// +Процедура ПолучитьНезагружаемыеВОбластиДанныхТипы(Знач Типы) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + Для каждого СтрокаСоответствия Из ОбщегоНазначения.ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим() Цикл + МетаданныеТипа = Метаданные.НайтиПоТипу(СтрокаСоответствия.ТипОбщихДанных); + Если Справочники.ТипВсеСсылки().СодержитТип(СтрокаСоответствия.ТипОбщихДанных) Тогда + Типы.Добавить(Тип("СправочникОбъект." + МетаданныеТипа.Имя)); + Иначе // Регистр сведений + Типы.Добавить(Тип("РегистрСведенийНаборЗаписей." + МетаданныеТипа.Имя)); + КонецЕсли; + КонецЦикла; + + Типы.Добавить(Тип("РегистрСведенийНаборЗаписей.СвязиПоставляемыхДанных")); + Типы.Добавить(Тип("РегистрСведенийНаборЗаписей.ОбластиДляОбновленияПоставляемыхДанных")); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + + // СтандартныеПодсистемы.Пользователи + Типы.Добавить(Тип("СправочникОбъект.ВнешниеПользователи")); + // Конец СтандартныеПодсистемы.Пользователи + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий + Типы.Добавить(Тип("РегистрСведенийНаборЗаписей.ОчередьЗаданий")); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса + Типы.Добавить(Тип("СправочникОбъект.ДополнительныеОтчетыИОбработки")); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса + +КонецПроцедуры + +// Формирует список типов данных которые не должны передаваться между +// информационными базам. +// +// Параметры: +// ОбщиеРегистры - Массив - массив типов. +// +Процедура ПолучитьНевыгружаемыеИзИнформационнойБазыТипы(Знач Типы) Экспорт + + // СтандартныеПодсистемы.АдресныйКлассификатор + Типы.Добавить(Тип("РегистрСведенийНаборЗаписей.АдресныеСокращения")); + Типы.Добавить(Тип("РегистрСведенийНаборЗаписей.АдресныйКлассификатор")); + // Конец СтандартныеПодсистемы.АдресныйКлассификатор + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + Типы.Добавить(Тип("РегистрСведенийНаборЗаписей.СвязиПоставляемыхДанных")); + Типы.Добавить(Тип("РегистрСведенийНаборЗаписей.ОбластиДляОбновленияПоставляемыхДанных")); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Вызывается при удалении области данных. +// В процедуре необходимо удалить данные области данных, которые не +// могут быть удалены стандартным механизмом +// +// Параметры: +// ОбластьДанных - Тип значения разделителя - значение разделителя +// удаляемой области данных. +// +Процедура ПриУдаленииОбластиДанных(Знач ОбластьДанных) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + Удаление = Новый УдалениеОбъекта(ПоставляемыеДанныеПовтИсп.ПолучитьУзелОбластиДанных(ОбластьДанных)); + Удаление.ОбменДанными.Загрузка = Истина; + Удаление.Записать(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Формирует список параметров ИБ. +// +// Параметры: +// ТаблицаПараметров - ТаблицаЗначений - таблица описания параметров. +// Описание состав колонок - см. РаботаВМоделиСервиса.ПолучитьТаблицуПараметровИБ() +// +Процедура ПолучитьТаблицуПараметровИБ(Знач ТаблицаПараметров) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда + РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИспользоватьРазделениеПоОбластямДанных"); + + РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "РежимИспользованияИнформационнойБазы"); + + РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "КопироватьОбластиДанныхИзЭталонной"); + КонецЕсли; + + РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ВнутреннийАдресМенеджераСервиса"); + + РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИмяСлужебногоПользователяМенеджераСервиса"); + + СтрокаПараметра = РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ПарольСлужебногоПользователяМенеджераСервиса"); + СтрокаПараметра.ЗапретЧтения = Истина; + + // Для совместимости с предыдущими версиями + СтрокаПараметра = РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ВнутреннийАдресМенеджераСервиса"); + СтрокаПараметра.Имя = "URLСервиса"; + + СтрокаПараметра = РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИмяСлужебногоПользователяМенеджераСервиса"); + СтрокаПараметра.Имя = "ИмяСлужебногоПользователяСервиса"; + + СтрокаПараметра = РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ПарольСлужебногоПользователяМенеджераСервиса"); + СтрокаПараметра.Имя = "ПарольСлужебногоПользователяСервиса"; + СтрокаПараметра.ЗапретЧтения = Истина; + // Конец Для совместимости с предыдущими версиями + + СтрокаПараметра = ТаблицаПараметров.Добавить(); + СтрокаПараметра.Имя = "ВерсияКонфигурации"; + СтрокаПараметра.Описание = НСтр("ru = 'Версия конфигурации'"); + СтрокаПараметра.ЗапретЗаписи = Истина; + СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная)); + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "АдресСервисаПоставляемыхДанных"); + + РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИмяСлужебногоПользователяСервисаПоставляемыхДанных"); + + СтрокаПараметра = РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, + "ПарольСлужебногоПользователяСервисаПоставляемыхДанных"); + СтрокаПараметра.ЗапретЧтения = Истина; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + + // СтандартныеПодсистемы.РегламентныеЗадания + РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания"); + + РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "МаксимальноеКоличествоИсполняющихФоновыхЗаданий"); + // Конец СтандартныеПодсистемы.РегламентныеЗадания + + // СтандартныеПодсистемы.ЗавершениеРаботыПользователей + РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "СообщениеБлокировкиПриОбновленииКонфигурации"); + // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + // (для совместимости с предыдущими версиями) + СтрокаПараметра = РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "АдресВебСервисаОбменаДанными"); + СтрокаПараметра.Имя = "URLСервисаОбмена"; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + +КонецПроцедуры + +// Вызывается перед попыткой получения значений параметров ИБ из одноименных +// констант. +// +// Параметры: +// ИменаПараметров - Массив строк - имена параметров, значения которых необходимо получить. +// В случае если значение параметра получается в данной процедуре, необходимо удалить +// имя обработанного параметра из массива. +// ЗначенияПараметров - Структура - значения параметров. +// +Процедура ПриПолученииЗначенийПараметровИБ(Знач ИменаПараметров, Знач ЗначенияПараметров) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + + // ВерсияКонфигурации + Индекс = ИменаПараметров.Найти("ВерсияКонфигурации"); + Если Индекс <> Неопределено Тогда + ЗначенияПараметров.Вставить("ВерсияКонфигурации", Метаданные.Версия); + ИменаПараметров.Удалить(Индекс); + КонецЕсли; + + // URLСервиса + Индекс = ИменаПараметров.Найти("URLСервиса"); + Если Индекс <> Неопределено Тогда + ЗначенияПараметров.Вставить("URLСервиса", Константы.ВнутреннийАдресМенеджераСервиса.Получить()); + ИменаПараметров.Удалить(Индекс); + КонецЕсли; + + // ИмяСлужебногоПользователяСервиса + Индекс = ИменаПараметров.Найти("ИмяСлужебногоПользователяСервиса"); + Если Индекс <> Неопределено Тогда + ЗначенияПараметров.Вставить("ИмяСлужебногоПользователяСервиса", Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить()); + ИменаПараметров.Удалить(Индекс); + КонецЕсли; + + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + + // URLСервисаОбмена + Индекс = ИменаПараметров.Найти("URLСервисаОбмена"); + Если Индекс <> Неопределено Тогда + ЗначенияПараметров.Вставить("URLСервисаОбмена", Константы.АдресВебСервисаОбменаДанными.Получить()); + ИменаПараметров.Удалить(Индекс); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + +КонецПроцедуры + +// Вызывается перед попыткой записи значений параметров ИБ в одноименные +// константы. +// +// Параметры: +// ЗначенияПараметров - Структура - значения параметров которые требуется установить. +// В случае если значение параметра устанавливается в данной процедуре из структуры +// необходимо удалить соответствующую пару КлючИЗначение +// +Процедура ПриУстановкеЗначенийПараметровИБ(Знач ЗначенияПараметров) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + + Если ЗначенияПараметров.Свойство("URLСервиса") Тогда + Константы.ВнутреннийАдресМенеджераСервиса.Установить(ЗначенияПараметров.URLСервиса); + ЗначенияПараметров.Удалить("URLСервиса"); + КонецЕсли; + + Если ЗначенияПараметров.Свойство("ИмяСлужебногоПользователяСервиса") Тогда + Константы.ИмяСлужебногоПользователяМенеджераСервиса.Установить(ЗначенияПараметров.ИмяСлужебногоПользователяСервиса); + ЗначенияПараметров.Удалить("ИмяСлужебногоПользователяСервиса"); + КонецЕсли; + + Если ЗначенияПараметров.Свойство("ПарольСлужебногоПользователяСервиса") Тогда + Константы.ПарольСлужебногоПользователяМенеджераСервиса.Установить(ЗначенияПараметров.ПарольСлужебногоПользователяСервиса); + ЗначенияПараметров.Удалить("ПарольСлужебногоПользователяСервиса"); + КонецЕсли; + + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + + Если ЗначенияПараметров.Свойство("URLСервисаОбмена") Тогда + Константы.АдресВебСервисаОбменаДанными.Установить(ЗначенияПараметров.URLСервисаОбмена); + ЗначенияПараметров.Удалить("URLСервисаОбмена"); + КонецЕсли; + + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + +КонецПроцедуры + +// Вызывается при включении разделения данных по областям данных. +// +Процедура ПриВключенииРазделенияПоОбластямДанных() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий + ОчередьЗаданий.ОбновитьРазделенныеРегламентныеЗадания(); + + Если Константы.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания.Получить() = 0 Тогда + Константы.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания.Установить(600); + КонецЕсли; + + Если Константы.МаксимальноеКоличествоИсполняющихФоновыхЗаданий.Получить() = 0 Тогда + Константы.МаксимальноеКоличествоИсполняющихФоновыхЗаданий.Установить(1); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий + + // СтандартныеПодсистемы.КонтактнаяИнформация + УправлениеКонтактнойИнформацией.УдалитьЭлементыСправочникаСтраныМира(); + // Конец СтандартныеПодсистемы.КонтактнаяИнформация + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + РаботаВМоделиСервисаПереопределяемый.ПриВключенииРазделенияПоОбластямДанных(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + +КонецПроцедуры + +// Вызывается после окончания загрузки данных из локальной версии +// в область данных сервиса или наооборот. +// +Процедура ПослеЗагрузкиДанныхИзДругойМодели() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса + УправлениеДоступом.ОбновитьПоставляемыеПрофилиИГруппыДоступа(); + УправлениеДоступом.ОбновитьТаблицыРолейПрофилейГруппДоступа(); + УправлениеДоступом.ОбновитьЗависимостиПравДоступа(); + УправлениеДоступом.ОбновитьТаблицыПравПоЗначениямДоступа(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса + +КонецПроцедуры + +// Блокирует текущую область, начиная транзакцию и накладывая исключительную блокировку +// на все разделяемые объекты метаданных области. +// +Процедура ЗаблокироватьТекущуюОбластьДанных() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + НачатьТранзакцию(); + РаботаВМоделиСервиса.ЗаблокироватьТекущуюОбластьДанных(Истина); + + Возврат; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + + ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); + +КонецПроцедуры + +// Снимает блокировки с текущей области, фиксируя (или, в случае ошибки, откатывая) транзакцию. +// +Процедура РазблокироватьТекущуюОбластьДанных() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + // Если ИнформацияОбОшибке().Описание заполнено - код выполняется + // из Исключение ... + Если ПустаяСтрока(ИнформацияОбОшибке().Описание) Тогда + ЗафиксироватьТранзакцию(); + Иначе + ОтменитьТранзакцию(); + КонецЕсли; + + Возврат; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + + ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); + +КонецПроцедуры + +// Дополнительные действия, выполняемые при изменении разделения сеанса. +// +Процедура ПриИзмененииОбластиДанных() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + РаботаВМоделиСервиса.ОчиститьВсеПараметрыСеансаКромеРазделителей(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + +КонецПроцедуры + +// Устанавливает разделение сеанса. +// +// Параметры: +// Использование - Булево - Использование разделителя ОбластьДанных в сеансе +// ОбластьДанных - Число - Значение разделителя ОбластьДанных +// +Процедура УстановитьРазделениеСеанса(Знач Использование, Знач ОбластьДанных = Неопределено) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + РаботаВМоделиСервиса.УстановитьРазделениеСеанса(Использование, ОбластьДанных); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + +КонецПроцедуры + +// Возвращает значение разделителя текущей области данных. +// В случае если значение не установлено выдается ошибка. +// +// Возвращаемое значение: +// Тип значения разделителя. +// Значение разделителя текущей области данных. +// +Функция ЗначениеРазделителяСеанса() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + Возврат РаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + + ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); + +КонецФункции + +// Возвращает флаг использования разделителя ОбластьДанных для текущего сеанса. +// +// Возвращаемое значение: +// Булево - Истина разделение используется, иначе нет. +// +Функция ИспользованиеРазделителяСеанса() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + Возврат РаботаВМоделиСервиса.ИспользованиеРазделителяСеанса(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + + ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); + +КонецФункции + +// Переопределяемый обработчик, вызываемый перед записью пользователя. +// +// Параметры: +// ПользовательОбъект - СправочникОбъект.Пользователи - записываемый пользователь +// +Процедура ПередЗаписьюПользователя(ПользовательОбъект) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + ПользователиВМоделиСервиса.ПередЗаписьюПользователя(ПользовательОбъект); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + +КонецПроцедуры + +// Переопределяемый обработчик, вызываемый при записи пользователя. +// +// Параметры: +// ПользовательОбъект - СправочникОбъект.Пользователи - записываемый пользователь +// ОписаниеПользователя - Объект XDTO: {"http://www.1c.ru/SaaS/1.0/XMLSchema/ManageApplication"}UserInfo - +// описание пользователя менеджера сервиса +// ПользовательСуществует - Булево - пользователь существовал до начала транзакции записи +// ДоступРазрешен - Булево - после записи пользователя, доступ к ИБ должен быть разрешен +// СоздатьПользователяСервиса - Булево - требуется создать нового пользователя сервиса +// +Процедура ПриЗаписиПользователя(ПользовательОбъект, ОписаниеПользователя, ПользовательСуществует, ДоступРазрешен, СоздатьПользователяСервиса) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + ПользователиВМоделиСервиса.ПриЗаписиПользователя(ПользовательОбъект, ОписаниеПользователя, ПользовательСуществует, + ДоступРазрешен, СоздатьПользователяСервиса); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + +КонецПроцедуры + +// Переопределяемый обработчик, вызываемый при получении формы справочника Пользователи +// +// Параметры: +// См. параметры платформенного обработчика ОбработкаПолученияФормы +// +Процедура ОбработкаПолученияФормыПользователя(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + ПользователиВМоделиСервиса.ОбработкаПолученияФормыПользователя(ВидФормы, Параметры, ВыбраннаяФорма, + ДополнительнаяИнформация, СтандартнаяОбработка); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + +КонецПроцедуры + +// Переопределяемый обработчик, вызываемый при записи задания дополнительной обработки. +// +// Параметры: +// РегламентноеЗадание - РегламентноеЗадание - записываемое регламентное задание. +// Использование - Булево - флаг использования задания. +// +Процедура ПриЗаписиЗаданияДопОбработки(РегламентноеЗадание, Использование) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса + ДополнительныеОтчетыИОбработкиВМоделиСервиса.УточнитьПараметрыЗаданияВОчереди(РегламентноеЗадание, Использование); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса + +КонецПроцедуры + +// Устанавливает использование регламентного задания заполнения данных управления доступом. +// +// Параметры: +// Использование - Булево - Истина, если задание нужно включить, иначе Ложь. +// +Процедура УстановитьИспользованиеЗаданияЗаполненияДанныхУправленияДоступом(Знач Использование) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса + УправлениеДоступомВМоделиСервиса.УстановитьИспользованиеЗаданияЗаполненияДанных(Использование); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса + +КонецПроцедуры + +// Добавляет дополнительные параметры работы клиента при работе в модели сервиса. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьПараметрыРаботыКлиентаВМоделиСервиса(Знач Параметры) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + РаботаВМоделиСервиса.ДобавитьПараметрыРаботыКлиентаВМоделиСервиса(Параметры); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + +КонецПроцедуры + +///////////////////////////////////////////////////////////////////////////////// +// Базовая функциональность +// + +// Возвращает список процедур-обработчиков обновления библиотеки. +// +// Здесь в алфавитном порядке размещаются только процедуры-обработчики обновления +// библиотечных подсистем, которые используются в данной конфигурации. +// Процедуры-обработчики обновления самой конфигурации следует размещать в функции +// ОбработчикиОбновления общего модуля ОбновлениеИнформационнойБазыПереопределяемый. +// +// Возвращаемое значение: +// ТаблицаЗначений - описание полей структуры см. в функции +// ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления() +// +Функция ОбработчикиОбновленияСтандартныхПодсистем() Экспорт + + Обработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(); + + // Подключаются процедуры-обработчики обновления библиотеки + + // СтандартныеПодсистемы.АдресныйКлассификатор + АдресныйКлассификатор.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.АдресныйКлассификатор + + // СтандартныеПодсистемы.БазоваяФункциональность + СтандартныеПодсистемыСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.БазоваяФункциональность + + // СтандартныеПодсистемы.БизнесПроцессыИЗадачи + БизнесПроцессыИЗадачиСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи + + // СтандартныеПодсистемы.ВариантыОтчетов + ВариантыОтчетов.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ВариантыОтчетов + + // СтандартныеПодсистемы.Взаимодействия + Взаимодействия.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.Взаимодействия + + // СтандартныеПодсистемы.Валюты + РаботаСКурсамиВалют.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.Валюты + + // СтандартныеПодсистемы.ДатыЗапретаИзменения + ДатыЗапретаИзмененияСлужебный.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ДатыЗапретаИзменения + + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + ДополнительныеОтчетыИОбработки.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + + // СтандартныеПодсистемы.КалендарныеГрафики + КалендарныеГрафики.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.КалендарныеГрафики + + // СтандартныеПодсистемы.КонтактнаяИнформация + УправлениеКонтактнойИнформацией.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.КонтактнаяИнформация + + // СтандартныеПодсистемы.ОбменДанными + ОбменДаннымиСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ОбменДанными + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + ОбменДаннымиВМоделиСервиса.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + ОбменСообщениямиВнутренний.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + + // СтандартныеПодсистемы.ОбновлениеКонфигурации + ОбновлениеКонфигурации.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса + ОбновлениеИнформационнойБазыВМоделиСервиса.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса + + // СтандартныеПодсистемы.ПолнотекстовыйПоиск + ПолнотекстовыйПоискСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ПолнотекстовыйПоиск + + // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + ПолучениеФайловИзИнтернета.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + + // СтандартныеПодсистемы.Пользователи + Пользователи.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.Пользователи + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса + ПользователиВМоделиСервиса.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса + + // СтандартныеПодсистемы.РаботаСПочтовымиСообщениями + ЭлектроннаяПочта.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаСПочтовымиСообщениями + + // СтандартныеПодсистемы.РаботаСФайлами + РаботаСФайламиВызовСервера.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.РегламентныеЗадания + РегламентныеЗаданияСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РегламентныеЗадания + + // СтандартныеПодсистемы.ОчередьЗаданий + ОчередьЗаданий.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ОчередьЗаданий + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.Свойства + + // СтандартныеПодсистемы.УправлениеДоступом + УправлениеДоступом.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.УправлениеДоступом + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса + УправлениеДоступомВМоделиСервиса.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса + + // СтандартныеПодсистемы.ФизическиеЛица + ФизическиеЛица.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ФизическиеЛица + + // СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись + ЭлектроннаяЦифроваяПодпись.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + + Возврат Обработчики; + +КонецФункции + +// Проверяет содержится ли пользователь ИБ с заданным идентификатором +// в списке неразделенных пользователей. +// +// Параметры: +// ИдентификаторПользователяИБ - УникальныйИдентификатор - идентификатор +// пользователя ИБ принадлежность которого к неразделенным пользователям +// требуется проверить. +// +Функция ЭтоНеразделенныйПользовательИБ(Знач ИдентификаторПользователяИБ) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса + Возврат ПользователиВМоделиСервиса.ЭтоНеразделенныйПользовательИБ(ИдентификаторПользователяИБ); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса + Возврат Ложь; + +КонецФункции + +// При работе в модели сервиса, заносит текущего пользователя в список неразделенных, +// если у него не установлено использование разделителей. +// +Процедура ЗарегистрироватьНеразделенногоПользователя() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса + ПользователиВМоделиСервиса.ЗарегистрироватьНеразделенногоПользователя(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса + +КонецПроцедуры + +// Возвращает флаг доступности действий изменения пользователей. +// +// Возвращаемое значение: +// Булево - Истина, если изменение пользователей доступно, иначе Ложь. +// +Функция ДоступноИзменениеПользователей() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса + Возврат ПользователиВМоделиСервиса.ДоступноИзменениеПользователей(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса + Возврат Истина; + +КонецФункции + +// Возвращает флаг доступности подсистемы ПолучениеФайловИзИнтернета. +// +// ВозвращаемоеЗначение - Булево - +// Истина - подсистема доступна, любое другое значение - подсистемв +// не доступна +// +Процедура ДоступноПолучениеФайловИзИнтернета(ВозвращаемоеЗначение) Экспорт + + // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + ВозвращаемоеЗначение = Истина; + // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + +КонецПроцедуры + +// Получить файл из Интернета по протоколу http(s), либо ftp и сохранить его во временный файл. +// +// Параметры: +// URL - Строка - url файла в формате +// [Протокол://]<Сервер>/<Путь к файлу на сервере> +// ПараметрыПолучения - Структура со свойствами +// ПутьДляСохранения - Строка - путь на сервере (включая имя файла), для сохранения скачанного файла +// Пользователь - Строка - пользователь от имени которого установлено соединение +// Пароль - Строка - пароль пользователя от которого установлено соединение +// Порт - Число - порт сервера с которым установлено соединение +// ЗащищенноеСоединение - Булево - для случая http загрузки флаг указывает, +// что соединение должно производиться через https +// ПассивноеСоединение - Булево - для случая ftp загрузки флаг указывает, +// что соединение должно пассивным (или активным) +// ВозвращаемоеЗначение - (выходной параметр) +// Структура, со свойствами +// Статус - Булево - ключ присутствует в структуре всегда, значения +// Истина - вызов функции успешно завершен +// Ложь - вызов функции завершен неудачно +// Путь - Строка - путь к файлу на сервере, ключ используется только +// если статус Истина +// СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь +// +Процедура СкачатьФайлНаСервере(Знач Адрес, Знач ПараметрыПолучения, ВозвращаемоеЗначение) Экспорт + + // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + ВозвращаемоеЗначение = ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(Адрес, ПараметрыПолучения); + // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + +КонецПроцедуры + +///////////////////////////////////////////////////////////////////////////////// +// Поставляемые данные +// + +// Функция создает таблицу соответствия разделенных типов данных общим данным +// +// Возвращаемое значение: +// ТаблицаЗначений - соответствия типов данных +// +Функция ТаблицаСоответствияРазделенныхДанныхОбщим() Экспорт + + ТаблицаЗначений = Новый ТаблицаЗначений; + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ТаблицаЗначений.Колонки.Добавить("ВидПоставляемыхДанных"); + ТаблицаЗначений.Колонки.Добавить("ТипОбщихДанных"); + ТаблицаЗначений.Колонки.Добавить("ТипРазделенныхДанных"); + ТаблицаЗначений.Колонки.Добавить("КопироватьВоВсеОбластиДанных"); + + ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(ТаблицаЗначений); + ПоставляемыеДанныеПереопределяемый.ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(ТаблицаЗначений); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + + Возврат ТаблицаЗначений; + +КонецФункции + +// Процедура формирует таблицу соответствия разделенных типов данных +// общим данным библиотеки +// +// Параметры: +// ТаблицаСоответствия - ТаблицаЗначений - таблица, которую необходимо +// заполнить соответствиями типов +// +Процедура ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(ТаблицаСоответствия) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + НоваяСтрока = ТаблицаСоответствия.Добавить(); + НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.Справочник_Валюты; + НоваяСтрока.ТипОбщихДанных = Тип("СправочникСсылка.КлассификаторВалют"); + НоваяСтрока.ТипРазделенныхДанных = Тип("СправочникСсылка.Валюты"); + НоваяСтрока.КопироватьВоВсеОбластиДанных = Ложь; + + НоваяСтрока = ТаблицаСоответствия.Добавить(); + НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.РегистрСведений_КурсыВалют; + НоваяСтрока.ТипОбщихДанных = Тип("РегистрСведенийКлючЗаписи.КурсыВалютПоКлассификатору"); + НоваяСтрока.ТипРазделенныхДанных = Тип("РегистрСведенийКлючЗаписи.КурсыВалют"); + НоваяСтрока.КопироватьВоВсеОбластиДанных = Неопределено; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + + // СтандартныеПодсистемы.КонтактнаяИнформация + НоваяСтрока = ТаблицаСоответствия.Добавить(); + НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.Справочник_СтраныМира; + НоваяСтрока.ТипОбщихДанных = Тип("СправочникСсылка.СтраныМира"); + НоваяСтрока.КопироватьВоВсеОбластиДанных = Ложь; + // Конец СтандартныеПодсистемы.КонтактнаяИнформация + + // СтандартныеПодсистемы.АдресныйКлассификатор + НоваяСтрока = ТаблицаСоответствия.Добавить(); + НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.РегистрСведений_АдресныйКлассификатор; + НоваяСтрока.ТипОбщихДанных = Тип("РегистрСведенийНаборЗаписей.АдресныйКлассификатор"); + + НоваяСтрока = ТаблицаСоответствия.Добавить(); + НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.РегистрСведений_АдресныеСокращения; + НоваяСтрока.ТипОбщихДанных = Тип("РегистрСведенийНаборЗаписей.АдресныеСокращения"); + // Конец СтандартныеПодсистемы.АдресныйКлассификатор + + // СтандартныеПодсистемы.КалендарныеГрафики + НоваяСтрока = ТаблицаСоответствия.Добавить(); + НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.Справочник_ПроизводственныеКалендари; + НоваяСтрока.ТипОбщихДанных = Тип("СправочникСсылка.ПроизводственныеКалендари"); + НоваяСтрока.ТипРазделенныхДанных = Тип("СправочникСсылка.Календари"); + НоваяСтрока.КопироватьВоВсеОбластиДанных = Ложь; + + НоваяСтрока = ТаблицаСоответствия.Добавить(); + НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.РегистрСведений_ДанныеПроизводственногоКалендаря; + НоваяСтрока.ТипОбщихДанных = Тип("РегистрСведенийКлючЗаписи.ДанныеПроизводственногоКалендаря"); + НоваяСтрока.ТипРазделенныхДанных = Тип("РегистрСведенийКлючЗаписи.КалендарныеГрафики"); + НоваяСтрока.КопироватьВоВсеОбластиДанных = Неопределено; + // Конец СтандартныеПодсистемы.КалендарныеГрафики + + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Процедура переопределяет действия при подборе поставляемых данных в область данных +// для библиотечных поставляемых данных +// +// Параметры: +// СсылкаОбщихДанных - Ссылка - ссылка на элемент подбираемый в область данных +// +Процедура ПриПодбореПоставляемыхДанныхВОбласть(СсылкаОбщихДанных) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + Если ТипЗнч(СсылкаОбщихДанных) = Тип("СправочникСсылка.КлассификаторВалют") Тогда + ПоставляемыеДанные.ЗарегистрироватьИзмененияДанныхРегистраСведений(СсылкаОбщихДанных, "КурсыВалютПоКлассификатору", "Валюта", "Период,Валюта"); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + + // СтандартныеПодсистемы.КалендарныеГрафики + Если ТипЗнч(СсылкаОбщихДанных) = Тип("СправочникСсылка.ПроизводственныеКалендари") Тогда + ПоставляемыеДанные.ЗарегистрироватьИзмененияДанныхРегистраСведений(СсылкаОбщихДанных, "ДанныеПроизводственногоКалендаря", "ПроизводственныйКалендарь", "ПроизводственныйКалендарь,Дата,Год"); + КонецЕсли; + // Конец СтандартныеПодсистемы.КалендарныеГрафики + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Вызывается при необходимости обновления разделенного набора записей из неразделенного. +// +// Параметры: +// Эталон - РегистрСведенийНаборЗаписей - неразделенный набор записей по которому необходимо +// обновить разделенный. +// ОбъектМД - ОбъектМетаданных - метаданные неразделенного регистра сведений +// Менеджер - РегистрСведенийМенеджер - менджер разделенного регистра сведений +// ТипИсточника - Тип - тип ключа записи неразделенного регистра +// ТипПриемник - Тип - тип ключа записи разделенного регистра +// ОбъектПриемник - РегистрСведенийНаборЗаписей - в случае если в процедуре выполнено +// переопределение стандартного поведения обновления, необходимо присвоить незаписанный +// набор записей этому параметру. +// СтандартнаяОбработка - Булево - в случае если в процедуре выполнено +// переопределение стандартного поведения обновления, необходимо присвоить этому +// параметру значение Ложь. +// +Процедура ПередКопированиемНабораЗаписейИзЭталона(Эталон, МетаданныеОбъекта, Менеджер, ТипИсточника, + ТипПриемника, ОбъектПриемник, СтандартаяОбработка) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + // СтандартныеПодсистемы.КалендарныеГрафики + Если МетаданныеОбъекта.Имя = "ДанныеПроизводственногоКалендаря" Тогда + + СтандартаяОбработка = Ложь; + + СоответствиеИменРеквизитов = Новый Соответствие; + СоответствиеИменРеквизитов.Вставить("ПроизводственныйКалендарь", "Календарь"); + СоответствиеИменРеквизитов.Вставить("Дата", "ДатаГрафика"); + + ВключаемыеВидыДней = Новый Массив; + ВключаемыеВидыДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий); + ВключаемыеВидыДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный); + + Результат = Менеджер.СоздатьНаборЗаписей(); + + Для Каждого ЭлементОтбора Из Эталон.Отбор Цикл + Если НЕ ЭлементОтбора.Использование Тогда + Продолжить; + КонецЕсли; + + Если СоответствиеИменРеквизитов[ЭлементОтбора.Имя] <> Неопределено Тогда + Результат.Отбор[СоответствиеИменРеквизитов[ЭлементОтбора.Имя]].Установить(ПоставляемыеДанные.ПреобразоватьОбщееЗначениеВРазделенное(ЭлементОтбора.Значение)); + Иначе + Результат.Отбор[ЭлементОтбора.Имя].Установить(ПоставляемыеДанные.ПреобразоватьОбщееЗначениеВРазделенное(ЭлементОтбора.Значение)); + КонецЕсли; + КонецЦикла; + + Результат.ОбменДанными.Загрузка = Истина; + + МетаданныеПриемника = Результат.Метаданные(); + + Для Каждого СтрокаЭталона Из Эталон Цикл + СтрокаРезультата = Результат.Добавить(); + СтрокаРезультата.Календарь = ПоставляемыеДанные.ПреобразоватьОбщееЗначениеВРазделенное(СтрокаЭталона.ПроизводственныйКалендарь); + СтрокаРезультата.Год = СтрокаЭталона.Год; + СтрокаРезультата.ДатаГрафика = СтрокаЭталона.Дата; + СтрокаРезультата.ДеньВключенВГрафик = ВключаемыеВидыДней.Найти(СтрокаЭталона.ВидДня) <> Неопределено; + КонецЦикла; + + ОбъектПриемник = Результат; + + КонецЕсли; + // Конец СтандартныеПодсистемы.КалендарныеГрафики + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Вызывается при необходимости обновления разделенного элемента из неразделенного. +// +// Параметры: +// Эталон - СправочникОбъект - неразделенный объект по которому необходимо +// обновить разделенный. +// ОбъектМД - ОбъектМетаданных - метаданные неразделенного справочника +// Менеджер - СправочникМенеджер - менджер разделенного регистра сведений +// ТипИсточника - Тип - тип ссылки неразделенного справочника +// ТипПриемник - Тип - тип ссылки разделенного справочника +// ОбъектПриемник - СправочникОбъект - в случае если в процедуре выполнено +// переопределение стандартного поведения обновления, необходимо присвоить незаписанный +// объект этому параметру. +// СтандартнаяОбработка - Булево - в случае если в процедуре выполнено +// переопределение стандартного поведения обновления, необходимо присвоить этому +// параметру значение Ложь. +// +Процедура ПередКопированиемОбъектаИзЭталона(Эталон, МетаданныеИсточника, Менеджер, ТипИсточника, + ТипПриемника, ОбъектПриемник, СтандартаяОбработка) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + // СтандартныеПодсистемы.КалендарныеГрафики + Если МетаданныеИсточника.Имя = "ПроизводственныеКалендари" Тогда + + СоответствиеИменРеквизитов = Новый Соответствие; + СоответствиеИменРеквизитов.Вставить("ПроизводственныйКалендарь", "Ссылка"); + + СтандартаяОбработка = Ложь; + + СсылкаРезультата = ПоставляемыеДанные.РазделеннаяСсылкаПоОбщей(Эталон.Ссылка); + + МетаданныеПриемника = СсылкаРезультата.Метаданные(); + + ИерархическийСправочник = МетаданныеПриемника.Иерархический И МетаданныеИсточника.Иерархический; + + Результат = СсылкаРезультата.ПолучитьОбъект(); + Если Результат = Неопределено Тогда + Результат = Менеджер.СоздатьЭлемент(); + Результат.УстановитьСсылкуНового(СсылкаРезультата); + КонецЕсли; + Результат.ОбменДанными.Загрузка = Истина; + + Результат.Наименование = Эталон.Наименование; + + Если ИерархическийСправочник Тогда + Результат.Родитель = ПоставляемыеДанные.ПреобразоватьОбщееЗначениеВРазделенное(Эталон.Родитель); + КонецЕсли; + + ИерархияГрупп = МетаданныеПриемника.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов; + + Результат["ПроизводственныйКалендарь"] = Эталон["Ссылка"]; + Результат["ВидКалендаря"] = Перечисления.ВидыКалендарей.Пятидневка; + + ОбъектПриемник = Результат; + + КонецЕсли; + // Конец СтандартныеПодсистемы.КалендарныеГрафики + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Процедура копирует список элементов общего справочника в новую область данных +// +// Параметры: +// СписокКодовСправочника - массив - массив кодов справочника +// ТипИсточника - тип - тип общего справочника, +// откуда будут скопированы элементы +// +Процедура СкопироватьЭлементыСправочникаПоставляемыхДанных(СписокКодовСправочника, ТипИсточника) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.СкопироватьЭлементыСправочника(СписокКодовСправочника, ТипИсточника); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Считывает текущее состояние разделенного объекта и приводит форму +// в соответстие с ним +// +Процедура СчитатьФлагРучногоИзмененияПоставляемыхДанных(Знач Форма) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.СчитатьФлагРучногоИзменения(Форма); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Записывает состояние разделенного объекта +// +Процедура ЗаписатьФлагРучногоИзменениеПоставляемыхДанных(Знач Форма) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.ЗаписатьФлагРучногоИзменение(Форма); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Копирует данные общего объекта в разделенный и изменяет +// состояние разделенного объекта +// +Процедура ВосстановитьЭлементИзОбщихДанных(Знач Форма) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.ВосстановитьЭлементИзОбщихДанных(Форма); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// При необходимости создает узел для области данных с переданным значеним +// разделителя. +// +// Параметры: +// ОбластьДанных - Число - значение разделеителя области данных для которой +// требуется создать узел. +// +Процедура СоздатьУзелОбластиДанных(Знач ОбластьДанных) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.СоздатьУзелОбластиДанных(ОбластьДанных); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +///////////////////////////////////////////////////////////////////////////////// +// Очередь заданий +// + +// Заполняет список имен неразделенных регламентных заданий, которые +// должны выполняться в разделенном режиме. +// +// Параметры: +// СписокРазделенныхРегламентныхЗаданий - Массив - Массив с именами неразделенных +// регламентных заданий, которые будут +// выполняться механизмом подсистемы "Регламентные задания" +// в областях данных. +// +Процедура ЗаполнитьСписокРазделенныхРегламентныхЗаданий(СписокРазделенныхРегламентныхЗаданий) Экспорт + + // СтандартныеПодсистемы.УправлениеДоступом + СписокРазделенныхРегламентныхЗаданий.Добавить("ЗаполнениеДанныхДляОграниченияДоступа"); + // Конец СтандартныеПодсистемы.УправлениеДоступом + + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + СписокРазделенныхРегламентныхЗаданий.Добавить("ЗапускДополнительныхОбработок"); + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + + // СтандартныеПодсистемы.ФайловыеФункции + СписокРазделенныхРегламентныхЗаданий.Добавить("ИзвлечениеТекста"); + // Конец СтандартныеПодсистемы.ФайловыеФункции + + // СтандартныеПодсистемы.БизнесПроцессыИЗадачи + СписокРазделенныхРегламентныхЗаданий.Добавить("МониторингЗадач"); + СписокРазделенныхРегламентныхЗаданий.Добавить("УведомлениеИсполнителейОНовыхЗадачах"); + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи + + // СтандартныеПодсистемы.УправлениеИтогамиИАгрегатами + СписокРазделенныхРегламентныхЗаданий.Добавить("ОбновлениеАгрегатов"); + СписокРазделенныхРегламентныхЗаданий.Добавить("ПерестроениеАгрегатов"); + СписокРазделенныхРегламентныхЗаданий.Добавить("УстановкаПериодаРассчитанныхИтогов"); + // Конец СтандартныеПодсистемы.УправлениеИтогамиИАгрегатами + + // СтандартныеПодсистемы.ДатыЗапретаИзменения + СписокРазделенныхРегламентныхЗаданий.Добавить("ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения"); + // Конец СтандартныеПодсистемы.ДатыЗапретаИзменения + + // СтандартныеПодсистемы.Взаимодействия + СписокРазделенныхРегламентныхЗаданий.Добавить("ПолучениеИОтправкаЭлектронныхПисем"); + // Конец СтандартныеПодсистемы.Взаимодействия + +КонецПроцедуры + +// Процедура формирует таблицу регламентных заданий +// с признаком использования +// +// Параметры: +// ТаблицаИспользования - ТаблицаЗначений - таблица, которую необходимо +// заполнить регламентными заданиями и признаком использования +// +Процедура ЗаполнитьТаблицуИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт + + // СтандартныеПодсистемы.Валюты + НоваяСтрока = ТаблицаИспользования.Добавить(); + НоваяСтрока.РегламентноеЗадание = "ЗагрузкаКурсовВалют"; + НоваяСтрока.Использование = Ложь; + // Конец СтандартныеПодсистемы.Валюты + + // СтандартныеПодсистемы.ОбменДанными + НоваяСтрока = ТаблицаИспользования.Добавить(); + НоваяСтрока.РегламентноеЗадание = "ВыполнениеОбменаДанными"; + НоваяСтрока.Использование = Ложь; + // Конец СтандартныеПодсистемы.ОбменДанными + + // СтандартныеПодсистемы.Банки + НоваяСтрока = ТаблицаИспользования.Добавить(); + НоваяСтрока.РегламентноеЗадание = "ЗагрузкаКлассификатораБанковРФССайтаРБК"; + НоваяСтрока.Использование = Ложь; + // Конец СтандартныеПодсистемы.Банки + +КонецПроцедуры + // Устанавливает текстовое описание предмета // // Параметры @@ -236,18 +1213,18 @@ // Представление - Строка - сюда необходимо поместить текстовое описание. Процедура УстановитьПредставлениеПредмета(СсылкаНаПредмет, Представление) Экспорт - // БизнесПроцессыИЗадачи + // СтандартныеПодсистемы.БизнесПроцессыИЗадачи Если ТипЗнч(СсылкаНаПредмет) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().ПредставлениеОбъекта; Если ПустаяСтрока(ПредставлениеОбъекта) Тогда ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().Представление(); КонецЕсли; Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "%1 (%2)", СсылкаНаПредмет.Наименование, ПредставлениеОбъекта); + "%1 (%2)", СсылкаНаПредмет.Наименование, ПредставлениеОбъекта); КонецЕсли; - // Конец БизнесПроцессыИЗадачи + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи - // Взаимодействия + // СтандартныеПодсистемы.Взаимодействия Если ТипЗнч(СсылкаНаПредмет) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") ИЛИ ТипЗнч(СсылкаНаПредмет) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") ИЛИ ТипЗнч(СсылкаНаПредмет) = Тип("ДокументСсылка.ТелефонныйЗвонок") ИЛИ @@ -262,7 +1239,44 @@ "%1 (%2)", СсылкаНаПредмет.Тема, ПредставлениеОбъекта); КонецЕсли; - // Конец Взаимодействия + // Конец СтандартныеПодсистемы.Взаимодействия + +КонецПроцедуры + +// Формирует список методов разрешенных к вызову через механизм очереди заданий +// +// Параметры: +// РазрешенныеМетоды - Массив - имена методов, разрешенных к вызову через +// механизм очереди заданий +// +Процедура ПолучитьРазрешенныеМетодыОчередиЗаданий(Знач РазрешенныеМетоды) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + РазрешенныеМетоды.Добавить("ОбменДаннымиВМоделиСервиса.УстановитьПризнакИзмененияДанных"); + РазрешенныеМетоды.Добавить("ОбменДаннымиВМоделиСервиса.ВыполнитьОбменДанными"); + РазрешенныеМетоды.Добавить("ОбменДаннымиВМоделиСервиса.ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе"); + РазрешенныеМетоды.Добавить("ОбменДаннымиВМоделиСервиса.ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазе"); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса + РазрешенныеМетоды.Добавить("ОбновлениеИнформационнойБазыВМоделиСервиса.ВыполнитьОбновлениеТекущейОбластиДанных"); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + РазрешенныеМетоды.Добавить("РаботаВМоделиСервиса.ПодготовитьОбластьДанныхКИспользованию"); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + РазрешенныеМетоды.Добавить("РаботаВМоделиСервиса.ОчиститьОбластьДанных"); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + РазрешенныеМетоды.Добавить("ПоставляемыеДанные.ОбновитьПоставляемыеДанные"); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса + РазрешенныеМетоды.Добавить("УправлениеДоступом.ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания"); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса КонецПроцедуры @@ -276,19 +1290,170 @@ // Процедура ПриЗаполненииСпискаРеквизитовИсточникаСДатамиДляНапоминания(Источник, МассивРеквизитов) Экспорт - // БизнесПроцессыИЗадачи + // СтандартныеПодсистемы.БизнесПроцессыИЗадачи Если ТипЗнч(Источник) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда МассивРеквизитов.Очистить(); МассивРеквизитов.Добавить("СрокИсполнения"); МассивРеквизитов.Добавить("ДатаНачала"); КонецЕсли; - // Конец БизнесПроцессыИЗадачи + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи - // ЗаметкиПользователя + // СтандартныеПодсистемы.ЗаметкиПользователя Если ТипЗнч(Источник) = Тип("СправочникСсылка.Заметки") Тогда МассивРеквизитов.Очистить(); КонецЕсли; - // Конец ЗаметкиПользователя + // Конец СтандартныеПодсистемы.ЗаметкиПользователя КонецПроцедуры +///////////////////////////////////////////////////////////////////////////////// +// Завершение работы пользователей +// + +// СтандартныеПодсистемы.ЗавершениеРаботыПользователей + +// Вызывается при отключении сеанса на стороне сервера 1С:Предприятия. +// +// Параметры +// НомерСеанса - Число - номер сеанса для отключения. +// Результат - Булево – результат отключения сеанса. +// СообщениеОбОшибке - Строка - в этом параметре возвращается текст сообщения об ошибке в случае неудачи. +// СтандартнаяОбработка - Булево - вернуть Ложь, если необходимо запретить стандартную обработку отключения сеанса. +// +Процедура ПриОтключенииСеанса(НомерСеанса, Результат, СообщениеОбОшибке, СтандартнаяОбработка) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса + Если СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда + Возврат; + КонецЕсли; + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + // Если сервер работает не под управлением ОС Microsoft Windows, то передаем управление Агенту сервиса. + СтандартнаяОбработка = Ложь; + УстановитьПривилегированныйРежим(Истина); + Параметры = СоединенияИБПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); + Попытка + Результат = РаботаВМоделиСервиса.УдалитьСеансыИРазорватьСоединенияЧерезАгентСервиса(НомерСеанса, Параметры); + Исключение + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Результат = Ложь; + КонецПопытки; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей + +// СтандартныеПодсистемы.КалендарныеГрафики + +///////////////////////////////////////////////////////////////////////////////// +// Календарные графики +// + +// Процедура выполняет необходимые действия перед записью набора записей +// регистра сведений ДанныеПроизводственногоКалендаря. +// В частности, формирует в переданном объекте Запрос временную таблицу +// ВТ_СтарыеКлючи, содержащую данные набора записей +// +// Параметры: +// Запрос - объект запрос, в менеджере временных таблиц которого формируется таблица данных регистра +// НаборЗаписей - набор записей регистра сведений +// +Процедура ДанныеПроизводственногоКалендаряПередЗаписьюНабораЗаписей(Отказ, Замещение, НаборЗаписей, Запрос) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.СформироватьВременнуюТаблицуДанныхНабораЗаписей(Запрос, НаборЗаписей, "ПроизводственныйКалендарь, Дата, Год"); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Процедура выполняет необходимые действия при записи набора записей +// регистра сведений ДанныеПроизводственногоКалендаря. +// В частности, регистрирует изменения данных набора записей регистра сведений +// в плане обмена "Поставляемые данные". +// +// Параметры: +// Запрос - объект запрос, в менеджере временных таблиц которого сформирована временная таблица данных регистра до изменения +// НаборЗаписей - набор записей регистра сведений +// +Процедура ДанныеПроизводственногоКалендаряПриЗаписиНабораЗаписей(Отказ, Замещение, НаборЗаписей, Запрос) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.ЗарегистрироватьИзмененияДанныхНабораЗаписей(Запрос, НаборЗаписей, "ПроизводственныйКалендарь", "ПроизводственныйКалендарь, Дата, Год"); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.КалендарныеГрафики + + +///////////////////////////////////////////////////////////////////////////////// +// Версионирование интерфейсов +// + +// Заполняет структуру массивами поддерживаемых версий всех подлежащих версионированию подсистем, +// используя в качестве ключей названия подсистем. +// Обеспечивает функциональность Web-сервиса InterfaceVersion. +// При внедрении надо поменять тело процедуры так, чтобы она возвращала актуальные наборы версий (см. пример.ниже). +// +// Параметры: +// СтруктураПоддерживаемыхВерсий - Структура: +// - Ключи = Названия подсистем. +// - Значения = Массивы названий поддерживаемых версий. +// +// Пример реализации: +// +// // СервисПередачиФайлов +// МассивВерсий = Новый Массив; +// МассивВерсий.Добавить("1.0.1.1"); +// МассивВерсий.Добавить("1.0.2.1"); +// СтруктураПоддерживаемыхВерсий.Вставить("СервисПередачиФайлов", МассивВерсий); +// // Конец СервисПередачиФайлов +// +Процедура ПолучитьПоддерживаемыеВерсии(Знач СтруктураПоддерживаемыхВерсий) Экспорт + + // СтандартныеПодсистемы.ОбменДанными + МассивВерсий = Новый Массив; + МассивВерсий.Добавить("2.0.1.6"); + СтруктураПоддерживаемыхВерсий.Вставить("ОбменДанными", МассивВерсий); + // Конец СтандартныеПодсистемы.ОбменДанными + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + МассивВерсий = Новый Массив; + МассивВерсий.Добавить("2.0.1.6"); + СтруктураПоддерживаемыхВерсий.Вставить("ОбменДаннымиВМоделиСервиса", МассивВерсий); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + МассивВерсий = Новый Массив; + МассивВерсий.Добавить("2.0.1.6"); + СтруктураПоддерживаемыхВерсий.Вставить("ОбменСообщениями", МассивВерсий); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + +КонецПроцедуры + +// Выполняет дополнительные преобразования параметров подключения. +// +// Параметры: +// СтруктураПараметровПодключения - Структура: +// - URL - Строка - Адрес опубликованного приложения. +// - UserName - Строка - Имя пользователя сервиса. +// - Password - Строка - Пароль пользователя сервиса. +// ИмяИнтерфейса - Строка. +// +// Пример реализации: +// // Перед подключением к сервису надо декодировать пароль из base64-представления: +// Если СтруктураПараметровПодключения.Свойство("Password") +// И ЗначениеЗаполнено(СтруктураПараметровПодключения.Password) Тогда +// +// СтруктураПараметровПодключения.password = Base64ВСтроку(СтруктураПараметровПодключения.password); +// +// КонецЕсли; +// +Процедура ПреобразоватьПараметрыПодключенияКСервису(Знач СтруктураПараметровПодключения, Знач ИмяИнтерфейса = Неопределено) Экспорт + + +КонецПроцедуры diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl index 5ae6948d9..5291ce14b 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl @@ -1,6 +1,10 @@ //////////////////////////////////////////////////////////////////////////////// -// Внутренние процедуры и функции подсистемы "Базовая функциональность". -// +// Подсистема "Базовая функциональность". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Неинтерактивное обновление данных ИБ при смене версии библиотеки // Обязательная "точка входа" обновления ИБ в библиотеке. @@ -16,7 +20,7 @@ // Функция ВерсияБиблиотеки() Экспорт - Возврат "1.2.4.1"; + Возврат "2.0.1.14"; КонецФункции @@ -37,7 +41,7 @@ // Функция ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Экспорт - Параметры.Вставить("ОшибкаАвторизации", Пользователи.ОшибкаАвторизации()); + Параметры.Вставить("ОшибкаАвторизации", Пользователи.АвторизоватьТекущегоПользователя()); Если ЗначениеЗаполнено(Параметры.ОшибкаАвторизации) Тогда Возврат Ложь; КонецЕсли; @@ -70,31 +74,46 @@ Параметры.Вставить("ПодробнаяИнформация", Метаданные.ПодробнаяИнформация); Параметры.Вставить("ИнформационнаяБазаФайловая", ОбщегоНазначения.ИнформационнаяБазаФайловая()); Параметры.Вставить("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", ЗапрашиватьПодтверждениеПриЗавершенииПрограммы()); - Параметры.Вставить("ТекущийПользователь", ОбщегоНазначения.ТекущийПользователь()); - + Параметры.Вставить("ТекущийПользователь", Пользователи.ТекущийПользователь()); // Параметры для внешних подключений пользователей Параметры.Вставить("ИнформацияОПользователе", ПолучитьИнформациюОПользователе()); Параметры.Вставить("ИмяCOMСоединителя", ОбщегоНазначения.ИмяCOMСоединителя()); -КонецПроцедуры - -Функция ПолучитьИнформациюОПользователе() - ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); - Возврат Новый Структура("Имя, ПолноеИмя, ПарольУстановлен, АутентификацияСтандартная, АутентификацияОС", - ТекущийПользователь.Имя, ТекущийПользователь.ПолноеИмя, ТекущийПользователь.ПарольУстановлен, - ТекущийПользователь.АутентификацияСтандартная, ТекущийПользователь.АутентификацияОС); -КонецФункции - -// Обработчики обновления базовой функциональности -Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + Параметры.Вставить("ПоправкаКВремениСеанса", ТекущаяДатаСеанса()); // записываем серверное время для последующей замены его на разницу с клиентом. + СтандартныеПодсистемыПереопределяемый.ДобавитьПараметрыРаботыКлиентаВМоделиСервиса(Параметры); КонецПроцедуры +// Возвращает массив поддерживаемых подсистемой ИмяПодсистемы названий номеров версий. +// +// Параметры: +// ИмяПодсистемы - Строка - Имя подсистемы. +// +// Возвращаемое значение: +// Массив строк. +// +Функция ПоддерживаемыеВерсии(ИмяПодсистемы) Экспорт + + МассивВерсий = Неопределено; + + СтруктураПоддерживаемыхВерсий = Новый Структура; + СтандартныеПодсистемыПереопределяемый.ПолучитьПоддерживаемыеВерсии(СтруктураПоддерживаемыхВерсий); + + СтруктураПоддерживаемыхВерсий.Свойство(ИмяПодсистемы, МассивВерсий); + + Если МассивВерсий = Неопределено Тогда + Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(Новый Массив); + Иначе + Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(МассивВерсий); + КонецЕсли; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// -// Функции поддержки инициализации параметров сеанса +// Инициализации параметров сеанса // -// Инициализация параметров сенаса. +// Инициализация параметров сеанса. // Параметры // ИменаПараметровСеанса - массив, неопределено - // в массиве имена параметров сеанса для инициализации @@ -160,6 +179,73 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.3.9"; + Обработчик.Процедура = "СтандартныеПодсистемыСервер.УстановитьКонстантуНеИспользоватьРазделениеПоОбластямДанных"; + Обработчик.ОбщиеДанные = Истина; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника"; + Обработчик.Приоритет = 999; + Обработчик.ОбщиеДанные = Истина; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "СтандартныеПодсистемыСервер.ПометитьЗаписиКэшаВерсийНеактуальными"; + Обработчик.ОбщиеДанные = Истина; + +КонецПроцедуры + +// Устанавливает корректное значеение константе НеИспользоватьРазделениеПоОбластямДанных +// +Процедура УстановитьКонстантуНеИспользоватьРазделениеПоОбластямДанных() Экспорт + + Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(НЕ Константы.ИспользоватьРазделениеПоОбластямДанных.Получить()); + +КонецПроцедуры + +// Сбрасывает дату обновления всех записей кэша версий, таким +// образом все записи кэша начинают считаться неактуальными. +// +Процедура ПометитьЗаписиКэшаВерсийНеактуальными() Экспорт + + НачатьТранзакцию(); + + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить("РегистрСведений.КэшПрограммныхИнтерфейсов"); + Блокировка.Заблокировать(); + + НаборЗаписей = РегистрыСведений.КэшПрограммныхИнтерфейсов.СоздатьНаборЗаписей(); + НаборЗаписей.Прочитать(); + Для каждого Запись Из НаборЗаписей Цикл + Запись.ДатаОбновления = Неопределено; + КонецЦикла; + НаборЗаписей.Записать(); + + ЗафиксироватьТранзакцию(); + +КонецПроцедуры + +Функция ПолучитьИнформациюОПользователе() + ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + Возврат Новый Структура("Имя, ПолноеИмя, ПарольУстановлен, АутентификацияСтандартная, АутентификацияОС", + ТекущийПользователь.Имя, ТекущийПользователь.ПолноеИмя, ТекущийПользователь.ПарольУстановлен, + ТекущийПользователь.АутентификацияСтандартная, ТекущийПользователь.АутентификацияОС); +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Подтверждение завершения работы программы @@ -179,4 +265,3 @@ Возврат Результат; КонецФункции - diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl index e18a3ab67..61e553624 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl @@ -1,5 +1,10 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ СО СТРОКАМИ +// Подсистема "Базовая функциональность". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Разбивает строку на несколько строк по разделителю. Разделитель может иметь любую длину. // @@ -58,16 +63,16 @@ Возврат Результат; -КонецФункции +КонецФункции -// Возвращает строку, полученную из массива элементов, разделенных символом разделителя +// Объединяет строки из массива в строку с разделителями. // // Параметры: -// Массив - Массив - массив элементов из которых необходимо получить строку -// Разделитель - Строка - любой набор символов, который будет использован как разделитель между элементами в строке +// Массив - Массив - массив строк которые необходимо объединить в одну строку; +// Разделитель - Строка - любой набор символов, который будет использован в качестве разделителя. // // Возвращаемое значение: -// Результат - Строка - строка, полученная из массива элементов, разделенных символом разделителя +// Строка - строка с разделителями. // Функция ПолучитьСтрокуИзМассиваПодстрок(Массив, Разделитель = ",") Экспорт @@ -88,53 +93,93 @@ КонецФункции -// Сравнить две строки версий. +// Определяет, является ли символ разделителем. // -// Параметры -// СтрокаВерсии1 – Строка – номер версии в формате РР.{П|ПП}.ЗЗ.СС -// СтрокаВерсии2 – Строка – второй сравниваемый номер версии +// Параметры: +// КодСимвола - Число - код проверяемого символа; +// РазделителиСлов - Строка - символы разделителей. // // Возвращаемое значение: -// Число – больше 0, если СтрокаВерсии1 > СтрокаВерсии2; 0, если версии равны. +// Булево - истина, если символ является разделителем. // -Функция СравнитьВерсии(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Экспорт +Функция ЭтоРазделительСлов(КодСимвола, РазделителиСлов = "") Экспорт - Строка1 = ?(ПустаяСтрока(СтрокаВерсии1), "0.0.0.0", СтрокаВерсии1); - Строка2 = ?(ПустаяСтрока(СтрокаВерсии2), "0.0.0.0", СтрокаВерсии2); - Версия1 = РазложитьСтрокуВМассивПодстрок(Строка1, "."); - Если Версия1.Количество() <> 4 Тогда - ВызватьИсключение ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неправильный формат строки версии: %1'"), СтрокаВерсии1); - КонецЕсли; - Версия2 = РазложитьСтрокуВМассивПодстрок(Строка2, "."); - Если Версия2.Количество() <> 4 Тогда - ВызватьИсключение ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неправильный формат строки версии: %1'"), СтрокаВерсии2); + Если Не ПустаяСтрока(РазделителиСлов) Тогда + + Возврат Найти(РазделителиСлов, Символ(КодСимвола)) > 0; + + Иначе + + Диапазоны = Новый Массив; + Диапазоны.Добавить(Новый Структура("Мин,Макс", 48, 57)); // цифры + Диапазоны.Добавить(Новый Структура("Мин,Макс", 65, 90)); // латиница большие + Диапазоны.Добавить(Новый Структура("Мин,Макс", 97, 122)); // латиница маленькие + Диапазоны.Добавить(Новый Структура("Мин,Макс", 1040, 1103)); // кириллица + Диапазоны.Добавить(Новый Структура("Мин,Макс", 95, 95)); // символ "_" + + Для Каждого Диапазон Из Диапазоны Цикл + Если КодСимвола >= Диапазон.Мин И КодСимвола <= Диапазон.Макс Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + КонецЕсли; - Результат = 0; - Для Разряд = 0 По 3 Цикл - Результат = Число(Версия1[Разряд]) - Число(Версия2[Разряд]); - Если Результат <> 0 Тогда - Возврат Результат; +КонецФункции + +// Разбивает строку на несколько строк, используя заданный набор разделителей. +// Если параметр РазделителиСлов не задан, то разделителем слов считается любой из символов, +// не относящихся к символам латинницы, кириллицы, цифры, подчеркивания. +// +// Параметры: +// Строка - Строка - строка, которую необходимо разложить на слова. +// РазделителиСлов - Строка - строка, содержащая символы-разделители. +// +// Возвращаемое значение: +// массив значений, элементы которого - отдельные слова +// +// Пример: +// РазложитьСтрокуВМассивСлов("один-@#два2_!три") возвратит массив значений: "один", "два2_", "три"; +// РазложитьСтрокуВМассивСлов("один-@#два2_!три", "#@!_") возвратит массив значений: "один-", "два2", "три". +// +Функция РазложитьСтрокуВМассивСлов(Знач Строка, РазделителиСлов = "") Экспорт + + Слова = Новый Массив; + + РазмерТекста = СтрДлина(Строка); + НачалоСлова = 1; + Для Позиция = 1 По РазмерТекста Цикл + КодСимвола = КодСимвола(Строка, Позиция); + Если ЭтоРазделительСлов(КодСимвола, РазделителиСлов) Тогда + Если Позиция <> НачалоСлова Тогда + Слова.Добавить(Сред(Строка, НачалоСлова, Позиция - НачалоСлова)); + КонецЕсли; + НачалоСлова = Позиция + 1; КонецЕсли; КонецЦикла; - Возврат Результат; + + Если Позиция <> НачалоСлова Тогда + Слова.Добавить(Сред(Строка, НачалоСлова, Позиция - НачалоСлова)); + КонецЕсли; + + Возврат Слова; КонецФункции // Подставляет параметры в строку. Максимально возможное число параметров - 9. -// Параметры в строке задаются как %<номер параметра>. Нумерация параметров -// начинается с единицы. +// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. +// +// Параметры: +// СтрокаПодстановки – Строка – шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); +// Параметр - Строка - подставляемый параметр. // -// Параметры -// СтрокаПодстановки – Строка – шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"). -// Параметр - Строка - параметр // Возвращаемое значение: -// Строка – текстовая строка с подставленными параметрами +// Строка – текстовая строка с подставленными параметрами. // // Пример: -// Строка = ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк"); +// ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". // Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, @@ -211,23 +256,23 @@ КонецФункции -// Подставляет параметры в строку. Неограниченное число параметров в строке. +// Подставляет параметры в строку. Число параметров в строке не ограничено. // Параметры в строке задаются как %<номер параметра>. Нумерация параметров // начинается с единицы. // // Параметры -// СтрокаПодстановки – Строка – шаблон строки с параметрами (вхождениями вида "%1"). -// МассивПараметров - Массив - массив строк, которые соответствуют параметрам в строке подстановки +// СтрокаПодстановки – Строка – шаблон строки с параметрами (вхождениями вида "%1"); +// МассивПараметров - Массив - массив строк, которые соответствуют параметрам в строке подстановки. // // Возвращаемое значение: -// Строка – текстовая строка с подставленными параметрами +// Строка – строка с подставленными параметрами. // // Пример: -// МассивПараметров = Новый Массив; -// МассивПараметров = МассивПараметров.Добавить("Вася"); -// МассивПараметров = МассивПараметров.Добавить("Зоопарк"); +// МассивПараметров = Новый Массив; +// МассивПараметров = МассивПараметров.Добавить("Вася"); +// МассивПараметров = МассивПараметров.Добавить("Зоопарк"); // -// Строка = ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), МассивПараметров); +// Строка = ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), МассивПараметров); // Функция ПодставитьПараметрыВСтрокуИзМассива(Знач СтрокаПодстановки, Знач МассивПараметров) Экспорт @@ -237,7 +282,7 @@ Пока Индекс > 0 Цикл Значение = МассивПараметров[Индекс-1]; Если Не ПустаяСтрока(Значение) Тогда - СтрокаРезультата = СтрЗаменить(СтрокаРезультата, "%" + СтрЗаменить(Формат(Индекс, "ЧРГ=' '"), " ", ""), Значение); + СтрокаРезультата = СтрЗаменить(СтрокаРезультата, "%" + Формат(Индекс, "ЧГ="), Значение); КонецЕсли; Индекс = Индекс - 1; КонецЦикла; @@ -246,21 +291,42 @@ КонецФункции -// Получает значение параметров из строки. +// Заменяет в шаблоне строки имена параметров на их значения. Параметры в строке выделяются с двух сторон квадратными скобками. // // Параметры: -// СтрокаПараметров - строка, содержащая параметры, каждый из которых представляет собой -// фрагмент вида <Имя параметра>=<Значение>, где: -// Имя параметра — имя параметра; -// Значение — его значение. -// Фрагменты отделяются друг от друга символами ';'. -// Если значение содержит пробельные символы, то оно должно быть заключено в двойные кавычки ("). -// Например: -// "File=""c:\InfoBases\Trade""; Usr=""Director"";" +// +// ШаблонСтроки - Строка - строка, в которую необходимо вставить значения. +// ВставляемыеЗначения - Структура - структура значений, где ключ - имя параметра без спецсимволов, +// значение - вставляемое значение. // // Возвращаемое значение: -// Структура параметров. В качестве ключей структуры выступают имена параметров из строки параметров; -// в качестве значений структуры выступают значения параметров. +// Строка - строка со вставленными значениями. +// +// Пример использования: +// ВставитьПараметрыВСтроку("Здравствуй, [Имя] [Фамилия].", Новый Структура("Фамилия,Имя", "Пупкин", "Вася")); +// Возвращает: "Здравствуй, Вася Пупкин". +Функция ВставитьПараметрыВСтроку(Знач ШаблонСтроки, ВставляемыеЗначения) Экспорт + Результат = ШаблонСтроки; + Для Каждого Параметр Из ВставляемыеЗначения Цикл + Результат = СтрЗаменить(Результат, "[" + Параметр.Ключ + "]", Параметр.Значение); + КонецЦикла; + Возврат Результат; +КонецФункции + +// Получает значения параметров из строки. +// +// Параметры: +// СтрокаПараметров - Строка - строка, содержащая параметры, каждый из которых представляет собой +// фрагмент вида <Имя параметра>=<Значение>, где: +// Имя параметра — имя параметра; +// Значение — его значение. +// Фрагменты отделяются друг от друга символами ';'. +// Если значение содержит пробельные символы, то оно должно быть заключено в двойные кавычки ("). +// Например: +// "File=""c:\InfoBases\Trade""; Usr=""Director"";" +// +// Возвращаемое значение: +// Структура - структура параметров, где ключ - имя параметра, значение - значение параметра. // Функция ПолучитьПараметрыИзСтроки(Знач СтрокаПараметров) Экспорт @@ -278,11 +344,7 @@ ИмяПараметра = СокрЛП(Лев(СтрокаПараметра, ПозицияПервогоЗнакаРавенства - 1)); // Получаем значение параметра - ЗначениеПараметра = Неопределено; - - ЗначениеПараметра = Сред(СтрокаПараметра, ПозицияПервогоЗнакаРавенства + 1); - - ЗначениеПараметра = СокрЛП(ЗначениеПараметра); + ЗначениеПараметра = СокрЛП(Сред(СтрокаПараметра, ПозицияПервогоЗнакаРавенства + 1)); Если Лев(ЗначениеПараметра, 1) = СимволДвойныеКавычки И Прав(ЗначениеПараметра, 1) = СимволДвойныеКавычки Тогда @@ -300,16 +362,16 @@ Возврат Результат; КонецФункции - -// Проверяет содержит ли строка только цифры. + +// Проверяет, содержит ли строка только цифры. // // Параметры: -// СтрокаПроверки - строка для проверки. +// СтрокаПроверки - Строка - строка для проверки. // УчитыватьЛидирующиеНули - Булево - нужно ли учитывать лидирующие нули. -// УчитыватьПробелы - Булево - нужно ли учитывать пробелы. +// УчитыватьПробелы - Булево - нужно ли учитывать пробелы. // // Возвращаемое значение: -// Истина - строка содержит только цифры; +// Истина - строка содержит только цифры или пустая; // Ложь - строка содержит не только цифры. // Функция ТолькоЦифрыВСтроке(Знач СтрокаПроверки, Знач УчитыватьЛидирующиеНули = Истина, Знач УчитыватьПробелы = Истина) Экспорт @@ -347,30 +409,115 @@ Возврат Истина; -КонецФункции // ТолькоЦифрыВСтроке() +КонецФункции + +// Проверяет, содержит ли строка только символы кириллического алфавита. +// +// Параметры: +// УчитыватьРазделителиСлов - Булево - учитывать ли разделители слов или они являются исключением. +// ДопустимыеСимволы - строка для проверки. +// +// Возвращаемое значение: +// Истина - строка содержит только кириллические (или допустимые) символы или пустая; +// Ложь - строка содержит не только кириллические (или допустимые) символы. +// +Функция ТолькоКириллицаВСтроке(Знач СтрокаПроверки, Знач УчитыватьРазделителиСлов = Истина, ДопустимыеСимволы = "") Экспорт + + Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда + Возврат Ложь; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда + Возврат Истина; + КонецЕсли; + + КодыДопустимыхСимволов = Новый Массив; + КодыДопустимыхСимволов.Добавить(1105); // "ё" + КодыДопустимыхСимволов.Добавить(1025); // "Ё" + + Для а = 1 По СтрДлина(ДопустимыеСимволы) Цикл + КодыДопустимыхСимволов.Добавить(КодСимвола(Сред(ДопустимыеСимволы, а, 1))); + КонецЦикла; + + Для а = 1 По СтрДлина(СтрокаПроверки) Цикл + КодСимвола = КодСимвола(Сред(СтрокаПроверки, а, 1)); + Если ((КодСимвола < 1040) Или (КодСимвола > 1103)) + И (КодыДопустимыхСимволов.Найти(КодСимвола) = Неопределено) + И Не (Не УчитыватьРазделителиСлов И ЭтоРазделительСлов(КодСимвола)) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +// Проверяет, содержит ли строка только символы латинского алфавита. +// +// Параметры: +// УчитыватьРазделителиСлов - Булево - учитывать ли разделители слов или они являются исключением. +// ДопустимыеСимволы - строка для проверки. +// +// Возвращаемое значение: +// Истина - строка содержит только латинские (или допустимые) символы; +// Ложь - строка содержит не только латинские (или допустимые) символы. +// +Функция ТолькоЛатиницаВСтроке(Знач СтрокаПроверки, Знач УчитыватьРазделителиСлов = Истина, ДопустимыеСимволы = "") Экспорт + + Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда + Возврат Ложь; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда + Возврат Истина; + КонецЕсли; + + КодыДопустимыхСимволов = Новый Массив; + + Для а = 1 По СтрДлина(ДопустимыеСимволы) Цикл + КодыДопустимыхСимволов.Добавить(КодСимвола(Сред(ДопустимыеСимволы, а, 1))); + КонецЦикла; + + Для а = 1 По СтрДлина(СтрокаПроверки) Цикл + КодСимвола = КодСимвола(Сред(СтрокаПроверки, а, 1)); + Если ((КодСимвола < 65) Или (КодСимвола > 90 И КодСимвола < 97) Или (КодСимвола > 122)) + И (КодыДопустимыхСимволов.Найти(КодСимвола) = Неопределено) + И Не (Не УчитыватьРазделителиСлов И ЭтоРазделительСлов(КодСимвола)) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции // Удаляет двойные кавычки с начала и конца строки, если они есть. // // Параметры: -// Строка - входная строка; +// Строка - входная строка; // // Возвращаемое значение: // Строка - строка без двойных кавычек. // Функция СократитьДвойныеКавычки(Знач Строка) Экспорт - Результат = Строка; - Пока Найти(Результат, """") = 1 Цикл - Результат = Сред(Результат, 2); + Пока Лев(Строка, 1) = """" Цикл + Строка = Сред(Строка, 2); КонецЦикла; - Пока Найти(Результат, """") = СтрДлина(Результат) И СтрДлина(Результат) > 0 Цикл - Результат = Сред(Результат, 1, СтрДлина(Результат) - 1); - КонецЦикла; - Возврат Результат; + + Пока Прав(Строка, 1) = """" Цикл + Строка = Лев(Строка, СтрДлина(Строка) - 1); + КонецЦикла; + + Возврат Строка; КонецФункции -// Процедура удаляет из строки указанное количество символов справа +// Удаляет из строки указанное количество символов справа. +// +// Параметры: +// Текст - Строка - строка, в которой необходимо удалить последние символы; +// ЧислоСимволов - Число - количество удаляемых символов. // Процедура УдалитьПоследнийСимволВСтроке(Текст, ЧислоСимволов) Экспорт @@ -378,40 +525,47 @@ КонецПроцедуры -// Находит символ в строке с конца +// Осуществляет поиск символа, начиная с конца строки. // -Функция НайтиСимволСКонца(Знач СтрокаВся, Знач ОдинСимвол) Экспорт +// Параметры: +// Строка - Строка - строка, в которой осуществляется поиск; +// Символ - Строка - искомый символ. +// +// Возвращаемое значение: +// Число - позиция символа в строке. +// Если строка не содержит указанного символа, то возвращается 0. +// +Функция НайтиСимволСКонца(Знач Строка, Знач Символ) Экспорт - НачальнаяПозиция = 1; - ДлинаСтроки = СтрДлина(СтрокаВся); - - Для ТекущаяПозиция = 1 По СтрДлина(СтрокаВся) Цикл - РеальнаяПозиция = ДлинаСтроки - ТекущаяПозиция + 1; - ТекущийСимвол = Сред(СтрокаВся, РеальнаяПозиция, 1); - Если ТекущийСимвол = ОдинСимвол Тогда - Возврат РеальнаяПозиция; + Для Позиция = -СтрДлина(Строка) По -1 Цикл + Если Сред(Строка, -Позиция, 1) = Символ Тогда + Возврат -Позиция; КонецЕсли; КонецЦикла; Возврат 0; - + КонецФункции -// Функция проверяет, является ли переданная в неё строка уникальным идентификатором +// Проверяет, является ли строка уникальным идентификатором. +// В качестве уникального идентификатора предполагается строка вида +// "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", где X = [0..9,a..f]. // -Функция ЭтоУникальныйИдентификатор(ИдентификаторСтрока) Экспорт +// Параметры: +// ИдентификаторСтрока - Строка - проверяемая строка. +// +// Возвращаемое значение: +// Булево - Истина, если переданная строка является уникальным идентификатором. +Функция ЭтоУникальныйИдентификатор(Знач Строка) Экспорт - УИСтрока = ИдентификаторСтрока; Шаблон = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"; - Если СтрДлина(Шаблон) <> СтрДлина(УИСтрока) Тогда + Если СтрДлина(Шаблон) <> СтрДлина(Строка) Тогда Возврат Ложь; КонецЕсли; - Для Сч = 1 По СтрДлина(УИСтрока) Цикл - Если КодСимвола(Шаблон, сч) = 88 И - ((КодСимвола(УИСтрока, сч) < 48 ИЛИ КодСимвола(УИСтрока, сч) > 57) И (КодСимвола(УИСтрока, сч) < 97 или КодСимвола(УИСтрока, сч) > 102)) Тогда - Возврат ложь; - ИначеЕсли КодСимвола(Шаблон, сч) = 45 И КодСимвола(УИСтрока, сч) <> 45 Тогда + Для Позиция = 1 По СтрДлина(Строка) Цикл + Если КодСимвола(Шаблон, Позиция) = 88 И ((КодСимвола(Строка, Позиция) < 48 Или КодСимвола(Строка, Позиция) > 57) И (КодСимвола(Строка, Позиция) < 97 Или КодСимвола(Строка, Позиция) > 102)) + Или КодСимвола(Шаблон, Позиция) = 45 И КодСимвола(Строка, Позиция) <> 45 Тогда Возврат Ложь; КонецЕсли; КонецЦикла; @@ -420,32 +574,38 @@ КонецФункции -// Формирует строку повторяющихся символов заданной длины +// Формирует строку повторяющихся символов заданной длины. // -Функция СформироватьСтрокуСимволов(Символ, КоличествоСимволов) Экспорт +// Параметры: +// Символ - Строка - символ, из которого будет формироваться строка. +// ДлинаСтроки - Число - требуемая длина результирующей строки. +// +// Возвращаемое значение: +// Строка - строка, состоящая из повторяющихся символов. +// +Функция СформироватьСтрокуСимволов(Знач Символ, Знач ДлинаСтроки) Экспорт - // возвращаемое значение функции Результат = ""; - - Для Индекс = 1 ПО КоличествоСимволов Цикл - + Для Счетчик = 1 По ДлинаСтроки Цикл Результат = Результат + Символ; - КонецЦикла; Возврат Результат; + КонецФункции -// Дополняет переданную в качестве первого параметра строку символами слева\справа до заданной длины и возвращает ее -// Незначащие символы слева и справа удаляются -// По умолчанию функция добавляет строку нулями слева +// Дополняет строку символами слева или справа до заданной длины и возвращает ее. +// Незначащие символы слева и справа удаляются. По умолчанию функция дополняет строку символами "0" (ноль) слева. // // Параметры: -// Строка - Строка - исходная строка, которую необходимо дополнить символами до заданной длины -// ДлинаСтроки - Число - требуемая конечная длина строки -// Символ - Строка - (необязательный) значение символа, которым необходимо дополнить строку -// Режим - Строка - (необязательный) [Слева|Справа] режим добавления символов к исходной строке: слева или справа +// Строка - Строка - исходная строка, которую необходимо дополнить символами; +// ДлинаСтроки - Число - требуемая результирующая длина строки; +// Символ - Строка - символ, которым необходимо дополнить строку; +// Режим - Строка - "Слева" или "Справа" - режим добавления символов к исходной строке. // +// Возвращаемое значение: +// Строка - строка, дополненная символами. +// // Пример 1: // Строка = "1234"; ДлинаСтроки = 10; Символ = "0"; Режим = "Слева" // Возврат: "0000001234" @@ -454,9 +614,6 @@ // Строка = " 1234 "; ДлинаСтроки = 10; Символ = "#"; Режим = "Справа" // Возврат: "1234######" // -// Возвращаемое значение: -// Строка - строка, дополненная символами слева или справа -// Функция ДополнитьСтроку(Знач Строка, Знач ДлинаСтроки, Знач Символ = "0", Знач Режим = "Слева") Экспорт Если ПустаяСтрока(Символ) Тогда @@ -491,12 +648,15 @@ КонецФункции -// Удаляет повторяющиеся символы слева/справа в переданной строке +// Удаляет крайние повторяющиеся символы слева или справа в строке. // // Параметры: -// Строка - Строка - исходная строка, из которой необходимо удалить повторяющиеся символы -// Символ - Строка - значение символа, который необходимо удалить -// Режим - Строка - (необязательный) [Слева|Справа] режим добавления символов к исходной строке: слева или справа +// Строка - Строка - исходная строка, из которой необходимо удалить крайние повторяющиеся символы; +// Символ - Строка - искомый символ для удаления; +// Режим - Строка - "Слева" или "Справа" - режим удаления символов в исходной строке. +// +// Возвращаемое значение: +// Строка - обрезанная строка. // Функция УдалитьПовторяющиесяСимволы(Знач Строка, Знач Символ, Знач Режим = "Слева") Экспорт @@ -521,66 +681,44 @@ Возврат Строка; КонецФункции -// Получает номер версии конфигурации без номера сборки +// Выполняет замену символов в строке. // // Параметры: -// Версия - Строка - версия конфигурации в формате РР.ПП.ЗЗ.СС, -// где СС – номер сборки, который будет удален +// ЗаменяемыеСимволы - Строка - строка символов, каждый из которых требует замены; +// Строка - Строка - исходная строка, в которой требуется замена символов; +// СимволыЗамены - Строка - строка символов, на каждый из которых нужно заменить символы параметра ЗаменяемыеСимволы. // // Возвращаемое значение: -// Строка - номер версии конфигурации без номера сборки в формате РР.ПП.ЗЗ +// Строка - строка после замены символов. // -Функция ВерсияКонфигурацииБезНомераСборки(Знач Версия) Экспорт - - Массив = РазложитьСтрокуВМассивПодстрок(Версия, "."); - - Если Массив.Количество() < 3 Тогда - Возврат Версия; - КонецЕсли; - - Результат = "[Редакция].[Подредакция].[Релиз]"; - Результат = СтрЗаменить(Результат, "[Редакция]", Массив[0]); - Результат = СтрЗаменить(Результат, "[Подредакция]", Массив[1]); - Результат = СтрЗаменить(Результат, "[Релиз]", Массив[2]); - - Возврат Результат; -КонецФункции - -//Выполняет в строке ГДЕ замену символов ЧТО на соответствующие по номерам символы из строки НаЧто +// Примечание: функция предназначена для простых случаев, например, для замены латинницы на похожие кирилические символы. +// Функция не анализирует повторную замену символов, поэтому такой вызов: +// ЗаменитьОдниСимволыДругими("кр", "карета", "гз") вернёт слово "газета", а +// ЗаменитьОдниСимволыДругими("кр", "карета", "рк") не вернёт слово "ракета". // -// Параметры: -// Что - Строка - строка символов, каждый из которых будет заменен -// Где - Строка - исходная строка, в которой будет выполняться замена -// НаЧто - Строка - строка символов, на каждый из которых нужно заменить исходные символы -// -// Возвращаемое значение: -// Строка - строка с замененными символами -// -Функция ЗаменитьОдниСимволыДругими(Что, Где, НаЧто) Экспорт +Функция ЗаменитьОдниСимволыДругими(ЗаменяемыеСимволы, Строка, СимволыЗамены) Экспорт - Рез = Где; + Результат = Строка; - Для Сч = 1 По СтрДлина(Что) Цикл - Рез = СтрЗаменить(Рез, Сред(Что, Сч, 1), Сред(НаЧто, Сч, 1)); + Для НомерСимвола = 1 По СтрДлина(ЗаменяемыеСимволы) Цикл + Результат = СтрЗаменить(Результат, Сред(ЗаменяемыеСимволы, НомерСимвола, 1), Сред(СимволыЗамены, НомерСимвола, 1)); КонецЦикла; - Возврат Рез; + Возврат Результат; КонецФункции -// Выполняет преобразование арабского числа в римское +// Выполняет преобразование арабского числа в римское. // -// Параметры -// АрабскоеЧисло - число, целое, от 0 до 999 -// ИспользоватьКириллицу - булево, использовать в качестве арабских цифр кириллицу или латиницу +// Параметры: +// АрабскоеЧисло - число, целое, от 0 до 999; +// ИспользоватьКириллицу - булево, использовать в качестве арабских цифр кириллицу или латиницу. // -// Возвращаемое значение -// Строка +// Возвращаемое значение: +// Строка - число в римской нотации. // -// Описание -// записывает "обычное" число римскими цифрами, -// например: -// ПреобразоватьЧислоВРимскуюНотацию(17) = "ХVII" +// Пример: +// ПреобразоватьЧислоВРимскуюНотацию(17) = "ХVII". // Функция ПреобразоватьЧислоВРимскуюНотацию(АрабскоеЧисло, ИспользоватьКириллицу = Истина) Экспорт @@ -605,21 +743,19 @@ Возврат РимскоеЧисло; -КонецФункции //ПреобразоватьЧислоВРимскуюНотацию +КонецФункции // Выполняет преобразование римского числа в арабское // -// Параметры -// РимскоеЧисло - строка, число, записанное римскими цифрами -// ИспользоватьКириллицу - булево, использовать в качестве арабских цифр кириллицу или латиницу +// Параметры: +// РимскоеЧисло - Строка - число, записанное римскими цифрами; +// ИспользоватьКириллицу - Булево - использовать в качестве арабских цифр кириллицу или латиницу. // -// Возвращаемое значение -// Число +// Возвращаемое значение: +// Число. // -// Описание -// преобразует число, записанное римскими цифрами, в "обычное" число, -// например: -// ПреобразоватьЧислоВАрабскуюНотацию("ХVII") = 17 +// Пример: +// ПреобразоватьЧислоВАрабскуюНотацию("ХVII") = 17. // Функция ПреобразоватьЧислоВАрабскуюНотацию(РимскоеЧисло, ИспользоватьКириллицу = Истина) Экспорт @@ -668,58 +804,21 @@ Возврат АрабскоеЧисло; -КонецФункции //ПреобразоватьЧислоВАрабскуюНотацию +КонецФункции -// Выполняет преобразование цифры в римскую нотацию +// Возвращает текстовое представление числа с единицей измерения в правильном склонении и числе. // -// Параметры -// Цифра - число, целое, от 0 до 9 -// РимскаяЕдиница,РимскаяПятерка,РимскаяДесятка - строки, соответствующие римские цифры -// -// Возвращаемое значение -// Строка -// -// Описание -// записывает "обычную" цифру римскими цифрами, -// например: -// ПреобразоватьЦифруВРимскуюНотацию(7,"I","V","X") = "VII" -// -Функция ПреобразоватьЦифруВРимскуюНотацию(Цифра,РимскаяЕдиница,РимскаяПятерка,РимскаяДесятка) - - РимскаяЦифра=""; - Если Цифра = 1 Тогда - РимскаяЦифра = РимскаяЕдиница - ИначеЕсли Цифра = 2 Тогда - РимскаяЦифра = РимскаяЕдиница + РимскаяЕдиница; - ИначеЕсли Цифра = 3 Тогда - РимскаяЦифра = РимскаяЕдиница + РимскаяЕдиница + РимскаяЕдиница; - ИначеЕсли Цифра = 4 Тогда - РимскаяЦифра = РимскаяЕдиница + РимскаяПятерка; - ИначеЕсли Цифра = 5 Тогда - РимскаяЦифра = РимскаяПятерка; - ИначеЕсли Цифра = 6 Тогда - РимскаяЦифра = РимскаяПятерка + РимскаяЕдиница; - ИначеЕсли Цифра = 7 Тогда - РимскаяЦифра = РимскаяПятерка + РимскаяЕдиница + РимскаяЕдиница; - ИначеЕсли Цифра = 8 Тогда - РимскаяЦифра = РимскаяПятерка + РимскаяЕдиница + РимскаяЕдиница + РимскаяЕдиница; - ИначеЕсли Цифра = 9 Тогда - РимскаяЦифра = РимскаяЕдиница + РимскаяДесятка; - КонецЕсли; - Возврат РимскаяЦифра; - -КонецФункции //ПреобразоватьЦифруВРимскуюНотацию - -// Возвращает текстовое представление числа с единицей измерения в правильном склонении и числе -// -// Параметры -// Число - Число - любое целое число. +// Параметры: +// Число - Число - любое целое число. // ПараметрыПредметаИсчисления - Строка - варианты написания единицы измерения в родительном падеже для одной, // для двух и для пяти единиц, разделитель - запятая. -// Пример: "минуту,минуты,минут". // -// Возвращаемое значение +// Возвращаемое значение: // Строка - текстовое представление количества единиц, число записывается цифрами. +// +// Примеры: +// ЧислоЦифрамиПредметИсчисленияПрописью(23, "минуту,минуты,минут") = "23 минуты"; +// ЧислоЦифрамиПредметИсчисленияПрописью(15, "минуту,минуты,минут") = "15 минут". Функция ЧислоЦифрамиПредметИсчисленияПрописью(Знач Число, Знач ПараметрыПредметаИсчисления) Экспорт Результат = Формат(Число,"ЧН=0"); @@ -759,31 +858,14 @@ КонецФункции -// Заменяет в шаблоне строки имена параметров на их значения. Параметры в строке выделяются с двух сторон квадратными скобками -// -// Параметры -// -// ШаблонСтроки - Строка - строка, в которую необходимо вставить значения. -// ВставляемыеЗначения - Структура - структура значений, где ключ - имя параметра без спецсимволов, -// значение - вставляемое значение. -// -// Возвращаемое значение -// Строка - строка со вставленными значениями. -// -// Пример использования -// ВставитьПараметрыВСтроку("Здравствуй, [Имя] [Фамилия].", Новый Структура("Фамилия,Имя", "Пупкин", "Вася")); -// Возвращает: "Здравствуй, Вася Пупкин". -Функция ВставитьПараметрыВСтроку(Знач ШаблонСтроки, ВставляемыеЗначения) Экспорт - Результат = ШаблонСтроки; - Для Каждого Параметр Из ВставляемыеЗначения Цикл - Результат = СтрЗаменить(Результат, "[" + Параметр.Ключ + "]", Параметр.Значение); - КонецЦикла; - Возврат Результат; -КонецФункции - // Очищает текст в формате HTML от тегов и возвращает неформатированный текст. // -// Параметры +// Параметры: +// ИсходныйТекст - Строка - текст в формате HTML. +// +// Возвращаемое значение: +// Строка - текст, очищенный от тегов, скриптов и заголовков. +// Функция ИзвлечьТекстИзHTML(Знач ИсходныйТекст) Экспорт Результат = ""; @@ -809,13 +891,30 @@ // вырезаем скрипты Позиция = Найти(Текст, " 0 Цикл + Пока Позиция > 0 Цикл ПозицияЗакрывающегоТега = Найти(Текст, ""); + Если ПозицияЗакрывающегоТега = 0 Тогда + // не найден закрывающий тег - вырезаем оставшийся текст. + ПозицияЗакрывающегоТега = СтрДлина(Текст); + КонецЕсли; Текст = Лев(Текст, Позиция - 1) + Сред(Текст, ПозицияЗакрывающегоТега + 9); ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1) + Сред(ИсходныйТекст, ПозицияЗакрывающегоТега + 9); Позиция = Найти(Текст, " 0 Цикл + ПозицияЗакрывающегоТега = Найти(Текст, ""); + Если ПозицияЗакрывающегоТега = 0 Тогда + // не найден закрывающий тег - вырезаем оставшийся текст. + ПозицияЗакрывающегоТега = СтрДлина(Текст); + КонецЕсли; + Текст = Лев(Текст, Позиция - 1) + Сред(Текст, ПозицияЗакрывающегоТега + 8); + ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1) + Сред(ИсходныйТекст, ПозицияЗакрывающегоТега + 8); + Позиция = Найти(Текст, " 0 Цикл @@ -834,3 +933,43 @@ Возврат СокрЛП(Результат); КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Выполняет преобразование цифры в римскую нотацию. +// +// Параметры +// Цифра - Число - цифра от 0 до 9. +// РимскаяЕдиница, РимскаяПятерка, РимскаяДесятка - Строка - символы, соответствующие римским цифрам. +// +// Возвращаемое значение +// Строка - цифра в римской нотации. +// +// Пример: +// ПреобразоватьЦифруВРимскуюНотацию(7,"I","V","X") = "VII". +// +Функция ПреобразоватьЦифруВРимскуюНотацию(Цифра, РимскаяЕдиница, РимскаяПятерка, РимскаяДесятка) + + РимскаяЦифра=""; + Если Цифра = 1 Тогда + РимскаяЦифра = РимскаяЕдиница + ИначеЕсли Цифра = 2 Тогда + РимскаяЦифра = РимскаяЕдиница + РимскаяЕдиница; + ИначеЕсли Цифра = 3 Тогда + РимскаяЦифра = РимскаяЕдиница + РимскаяЕдиница + РимскаяЕдиница; + ИначеЕсли Цифра = 4 Тогда + РимскаяЦифра = РимскаяЕдиница + РимскаяПятерка; + ИначеЕсли Цифра = 5 Тогда + РимскаяЦифра = РимскаяПятерка; + ИначеЕсли Цифра = 6 Тогда + РимскаяЦифра = РимскаяПятерка + РимскаяЕдиница; + ИначеЕсли Цифра = 7 Тогда + РимскаяЦифра = РимскаяПятерка + РимскаяЕдиница + РимскаяЕдиница; + ИначеЕсли Цифра = 8 Тогда + РимскаяЦифра = РимскаяПятерка + РимскаяЕдиница + РимскаяЕдиница + РимскаяЕдиница; + ИначеЕсли Цифра = 9 Тогда + РимскаяЦифра = РимскаяЕдиница + РимскаяДесятка; + КонецЕсли; + Возврат РимскаяЦифра; + +КонецФункции diff --git a/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl b/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl index 3969cbb18..1765a1811 100644 --- a/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl @@ -1,4 +1,12 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Структура подчиненности" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Формирует массив реквизитов документа. // // Параметры: diff --git a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl index 24880269c..6f20f6da0 100644 --- a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl @@ -1,16 +1,25 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Управление доступом". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ: программный интерфейс прикладного разработчика. +// ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Функция ЕстьРоль проверяет, что у текущего пользователя есть роль в -// в одном из профилей тех групп доступа в которые он входит, -// например, роль ПросмотрЖурналаРегистрации, роль ПечатьНепроведенныхДокументов, ... +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции, используемые для проверки прав + +// Проверяет, что у текущего пользователя есть роль в одном из профилей +// тех групп доступа в которых он участвует, например, +// роль ПросмотрЖурналаРегистрации, роль ПечатьНепроведенныхДокументов. // // Параметры: // Роль - Строка - имя роли. -// НаборыЗначенийДоступа - ТаблицаЗначений(НомерНабора, ВидДоступа, ЗначениеДоступа), -// пустую подготовленную таблицу можно получить с помощью функции +// +// НаборыЗначенийДоступа - ТаблицаЗначений(НомерНабора, ВидДоступа, ЗначениеДоступа). +// Пустую подготовленную таблицу можно получить с помощью функции // УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(). +// // Пользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи, Неопределено. // Если не заполнено, тогда право проверяется для текущего пользователя. // Возвращаемое значение: @@ -18,14 +27,13 @@ // Функция ЕстьРоль(Знач Роль, Знач НаборыЗначенийДоступа = Неопределено, Знач Пользователь = Неопределено) Экспорт - УстановитьПривилегированныйРежим(Истина); - Пользователь = ?(ЗначениеЗаполнено(Пользователь), Пользователь, Пользователи.АвторизованныйПользователь()); - - Если Пользователи.ЭтоПолноправныйПользовательИБ(Пользователь) Тогда + Если Пользователи.ЭтоПолноправныйПользователь(Пользователь) Тогда Возврат Истина; КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + Запрос = Новый Запрос; Запрос.УстановитьПараметр("Пользователь", Пользователь); Запрос.УстановитьПараметр("Роль", Роль); @@ -301,33 +309,32 @@ КонецФункции -// Функция ЕстьПравоПоЗначениюДоступа проверяет, что у пользователя есть право, -// устанавливаемое по значению доступа, например, по папке файлов могут устанавливаться -// права "УправлениеПравами", "ЧтениеПапокФайлов", "ЧтениеФайлов", которые являются -// как правами для папки файлов, так и правами для файлов или для двух элементов данных -// сразу - "ЧтениеПапокИФайлов". +// Проверяет, что у пользователя есть право, устанавливаемое по значению доступа. +// Например, по папке файлов могут устанавливаться права "УправлениеПравами", +// "ЧтениеПапокФайлов", "ЧтениеФайлов", которые являются, как правами для папки файлов, +// так и правами для файлов или для двух элементов данных сразу - "ЧтениеПапокИФайлов". // // Параметры: -// Право - Строка. +// Право - Строка. +// // ЗначениеДоступа - СправочникСсылка, ПланВидовХарактеристикСсылка, Неопределено - значение, -// для которого нужно проверить разрешенность права, например, ссылка на папку файлов. -// Пользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи, Неопределено. Если не заполнено, -// тогда право проверяется для текущего пользователя. +// для которого нужно проверить разрешенность права, например, ссылка на папку файлов. +// +// Пользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи, Неопределено. Если не заполнено, +// тогда право проверяется для текущего пользователя. // // Возвращаемое значение: // Булево. // Функция ЕстьПравоПоЗначениюДоступа(Знач Право, Знач ЗначениеДоступа, Знач Пользователь = Неопределено) Экспорт - УстановитьПривилегированныйРежим(Истина); - Пользователь = ?(ЗначениеЗаполнено(Пользователь), Пользователь, Пользователи.АвторизованныйПользователь()); - - Если Пользователи.ЭтоПолноправныйПользовательИБ(Пользователь) Тогда + Если Пользователи.ЭтоПолноправныйПользователь(Пользователь) Тогда Возврат Истина; КонецЕсли; - // Подготовка массива из ролей, хотя бы одна из которых требуется для права по значению доступа. + УстановитьПривилегированныйРежим(Истина); + // Подготовка массива ролей, хотя бы одна из которых требуется для права по значению доступа. ОписаниеПрава = ВозможныеПраваПоЗначениюДоступа(ЗначениеДоступа.Метаданные().ПолноеИмя()).Найти(Право, "Имя"); Если ОписаниеПрава = Неопределено Тогда ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найдено право ""%1"" таблицы ""%2""'"), Право, ЗначениеДоступа.Метаданные().ПолноеИмя())); @@ -438,16 +445,17 @@ КонецФункции // ЕстьПравоПоЗначениюДоступа() -// Функция РазрешеноУправлениеПравамиПоЗначениямДоступа проверяет у текущего пользователя -// есть право "УправлениеПравами", разрешающее изменять -// права заданного значения доступа для пользователей и групп пользователей +// Проверяет, что у текущего пользователя есть право "УправлениеПравами", +// разрешающее изменять права заданного значения доступа для пользователей и групп пользователей // или права различных значений доступа для заданного пользователя или группы пользователей. // // Параметры: // СсылкаНаОбъект - СправочникСсылка.Пользователи, СправочникСсылка.ГруппыПользователей, -// или значение доступа СправочникСсылка, ПланВидовХарактеристикСсылка, -// для которого нужно проверить разрешенность права, например, ссылка на папку файлов. +// или значение доступа СправочникСсылка, ПланВидовХарактеристикСсылка, +// для которого нужно проверить разрешенность права, например, ссылка на папку файлов. +// // ОписаниеОшибки - Строка, заполнена когда разрешения нет. +// // ТолькоПросмотр - Булево, только для внутренних нужд - не использовать. // // Возвращаемое значение: @@ -455,12 +463,11 @@ // Функция РазрешеноУправлениеПравамиПоЗначениямДоступа(Знач СсылкаНаОбъект, ОписаниеОшибки, ТолькоПросмотр = Неопределено) Экспорт - УстановитьПривилегированныйРежим(Истина); - - Если Пользователи.ЭтоПолноправныйПользовательИБ() Тогда + Если Пользователи.ЭтоПолноправныйПользователь() Тогда Возврат Истина; КонецЕсли; + УстановитьПривилегированныйРежим(Истина); ЭтоЗначениеДоступа = НЕ (ТипЗнч(СсылкаНаОбъект) = Тип("СправочникСсылка.Пользователи") ИЛИ ТипЗнч(СсылкаНаОбъект) = Тип("СправочникСсылка.ГруппыПользователей") ИЛИ ТипЗнч(СсылкаНаОбъект) = Тип("СправочникСсылка.ВнешниеПользователи") ИЛИ @@ -477,7 +484,10 @@ КонецФункции // РазрешеноУправлениеПравамиПоЗначениямДоступа() -// Функция возвращает значение ПараметрСеанса.ОграничиватьДоступПоВиду, +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для получения общих настроек подсистемы + +// Возвращает значение ПараметрСеанса.ОграничиватьДоступПоВиду, // установленное по значению Константа.ОграничиватьДоступНаУровнеЗаписей. // Функция ОграничиватьДоступНаУровнеЗаписей() Экспорт @@ -488,37 +498,49 @@ КонецФункции // ОграничиватьДоступНаУровнеЗаписей() -// Функция НовоеОписаниеПрофиляГруппДоступа возвращает структуру для -// удобства описания начальных профилей. -// Чтобы задать предустановленный вид доступа, -// нужно в представлении задать строку Предустановленный. -// Чтобы добавить значение доступа нужно задать -// полное имя предопределенного элемента, например, -// "Справочник.ГруппыПользователей.ВсеПользователи". -// -Функция НовоеОписаниеПрофиляГруппДоступа() Экспорт +// Возвращает значение константы ДобавлятьРуководителямДоступПодчиненных. +Функция ДобавлятьРуководителямДоступПодчиненных() Экспорт - Возврат( Новый Структура("Идентификатор, - |Наименование, - |Описание, - |Роли, - |ВидыДоступа, - |ЗначенияДоступа", - "", - "", - "", - Новый Массив, - Новый СписокЗначений, - Новый СписокЗначений) ); + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | Константы.ДобавлятьРуководителямДоступПодчиненных КАК Значение + |ИЗ + | Константы КАК Константы"); + + Возврат Запрос.Выполнить().Выгрузить()[0].Значение; КонецФункции -// Функция ТаблицаНаборыЗначенийДоступа возвращает пустую таблицу, -// которая заполняется для передачи в функцию ЕстьРоль() и в процедуры -// ЗаполнитьНаборыЗначенийДоступа(Таблица), определенные прикладным разработчиком. +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с наборами значений доступа + +// Проверяет предусмотрена ли для объекта метаданных +// процедура заполнения наборов значений доступа. +// +// Параметры: +// Ссылка - ЛюбаяСсылка. // // Возвращаемое значение: -// ТаблицаЗначений с полями: +// Булево. +// +Функция ВозможноЗаполнитьНаборыЗначенийДоступа(Ссылка) Экспорт + + ТипОбъекта = Тип(ОбщегоНазначения.ВидОбъектаПоСсылке(Ссылка) + "Объект." + Ссылка.Метаданные().Имя); + + НаборыЗаполняются = Метаданные.ПодпискиНаСобытия.ЗаписатьНаборыЗначенийДоступа.Источник.СодержитТип(ТипОбъекта) + ИЛИ Метаданные.ПодпискиНаСобытия.ЗаписатьЗависимыеНаборыЗначенийДоступа.Источник.СодержитТип(ТипОбъекта); + + Возврат НаборыЗаполняются; + +КонецФункции + +// Возвращает пустую таблицу, которая заполняется для передачи в функцию ЕстьРоль() и +// в процедуры ЗаполнитьНаборыЗначенийДоступа(Таблица), определенные прикладным разработчиком. +// +// Возвращаемое значение: +// ТаблицаЗначений с колонками: // НомерНабора - Число (необязательно, если набор один), // ВидДоступа - ПланВидовХарактеристикСсылка.ВидыДоступа, (обязательно), // ЗначениеДоступа - Неопределено, СправочникСсылка или др. (обязательно), @@ -544,15 +566,14 @@ КонецФункции -// Процедура ЗаполнитьНаборыЗначенийДоступа заполняет наборы значений доступа объекта, -// используя процедуру ЗаполнитьНаборыЗначенийДоступа(Таблица), -// созданную прикладным разработчиком в модуле объекта, -// тип которого задан в одной из подписок на событие +// Заполняет наборы значений доступа объекта, используя процедуру ЗаполнитьНаборыЗначенийДоступа(Таблица), +// созданную прикладным разработчиком в модуле объекта, тип которого задан в одной из подписок на событие // ЗаписатьНаборыЗначенийДоступа или ЗаписатьЗависимыеНаборыЗначенийДоступа. // // Параметры: // Объект - СправочникОбъект, ДокументОбъект, ..., или СправочникСсылка, ДокументСсылка, ... // Если передана ссылка, то по ней будет получен объект. +// // Таблица - ТабличнаяЧасть, // РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа, // Неопределено, тогда будет создана таблица значений @@ -564,6 +585,7 @@ // Добавление - Булево (необязательно, если набор для всех прав) устанавливается для одной строки набора, // Изменение - Булево (необязательно, если набор для всех прав) устанавливается для одной строки набора, // Удаление - Булево (необязательно, если набор для всех прав) устанавливается для одной строки набора, +// // СсылкаНаПодчиненныйОбъект - ЛюбаяСсылка, используется, когда нужно заполнить наборы значений доступа объекта-владельца // для подчиненного объекта. // @@ -720,16 +742,18 @@ КонецПроцедуры -// Процедура ДобавитьНаборыЗначенийДоступа позволяет добавить к одной таблице наборов -// значений доступа другую таблицу, либо логическим сложением, либо логическим умножением. +// Позволяет добавить к одной таблице наборов значений доступа другую +// таблицу наборов значений доступа, либо логическим сложением, либо логическим умножением. // Результат помещается в приемник. // // Параметры: // Приемник, // Источник - ТабличнаяЧасть или ТаблицаЗначений // с полями, как в таблице, возвращаемой функцией -// УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(), +// УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(). +// // Умножение - Булево, определяет способ логического объединения наборов приемника и источника. +// // Упростить - Булево, определяет требуется ли упрощение наборов после добавления. // Процедура ДобавитьНаборыЗначенийДоступа(Приемник, Знач Источник, Знач Умножение = Ложь, Знач Упростить = Ложь) Экспорт @@ -1432,128 +1456,13 @@ КонецПроцедуры -// Процедура ОбновитьПоставляемыеПрофилиИГруппыДоступа обновляет -// поставляемые профили, и при необходимости обновляет группы доступа этих профилей. -// Создаются не найденные поставляемые профили групп доступа. -// -// Параметры: -// ТолькоНеИзмененные - Булево, обновлять только те поставляемые профили групп доступа, -// у которых реквизит ПоставляемыйПрофильИзменен = Ложь. -// ОбновлятьГруппыДоступа - Булево, обновлять группы доступа -// обновляемых профилей групп доступа. -// УдаляемыеВидыДоступаБезНастройки - Булево, обновлять только те группы доступа, -// обновляемых профилей групп доступа, у которых настройки видов доступа -// остались неизменными, т.е. все значения, кроме указанных запрещены и -// список заданных значений пуст. -// -Процедура ОбновитьПоставляемыеПрофилиИГруппыДоступа(ТолькоНеИзмененные = Истина, ОбновлятьГруппыДоступа = Истина, УдаляемыеВидыДоступаБезНастройки = Истина) Экспорт - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен, - | ПрофилиГруппДоступа.Ссылка - |ИЗ - | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа"); - ТекущиеПрофили = Запрос.Выполнить().Выгрузить(); - - ОписанияПрофилей = УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); - ОбновленныеПрофили = Новый Массив; - ОбновленныеГруппыДоступа = Новый Массив; - - Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл - - Профиль = Справочники.ПрофилиГруппДоступа.ПолучитьСсылку(Новый УникальныйИдентификатор(ОписаниеПрофиля.Идентификатор)); - СтрокаТекущегоПрофиля = ТекущиеПрофили.Найти(Профиль, "Ссылка"); - ПрофильОбновлен = Ложь; - - Если СтрокаТекущегоПрофиля = Неопределено Тогда - // Создание нового поставляемого профиля. - ОбновитьПрофильГруппДоступа(ОписаниеПрофиля); - ИначеЕсли НЕ СтрокаТекущегоПрофиля.ПоставляемыйПрофильИзменен ИЛИ НЕ ТолькоНеИзмененные Тогда - // Обновление поставляемого профиля. - ПрофильОбновлен = ОбновитьПрофильГруппДоступа(ОписаниеПрофиля, Истина); - КонецЕсли; - - Если ОбновлятьГруппыДоступа Тогда - ГруппыДоступаПрофиляОбновлены = ОбновитьГруппыДоступаПрофиля(Профиль, УдаляемыеВидыДоступаБезНастройки); - ПрофильОбновлен = ПрофильОбновлен ИЛИ ГруппыДоступаПрофиляОбновлены; - КонецЕсли; - - Если ПрофильОбновлен Тогда - ОбновленныеПрофили.Добавить(Профиль); - КонецЕсли; - КонецЦикла; - - // Обновление ролей пользователей. - Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ПользователиИГруппыПользователей.ЗначениеДоступа КАК Пользователь - |ИЗ - | РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи - | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) - | И (ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ) - | И ПользователиИГруппыПользователей.ГруппаДоступа = ГруппыДоступаПользователи.Пользователь - | И (ГруппыДоступаПользователи.Ссылка.Профиль В (&Профили)) - | И (ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.Пользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи))"); - Запрос.УстановитьПараметр("Профили", ОбновленныеПрофили); - ПользователиДляОбновления = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); - ОбновитьРолиПользователей(ПользователиДляОбновления); - -КонецПроцедуры - -// Процедура ОбновитьПереименованныеРоли позволяет -// выполнить обновление имен ролей в профилях групп доступа, -// если они были переименованы в конфигураторе, например, -// при обновлении информационной базы. -// -// Параметры: -// ПереименованныеРоли - ТаблицаЗначений (СтароеИмяРоли, НовоеИмяРоли) -// если НовоеИмяРоли не задано, роль удаляется. -// -Процедура ОбновитьПереименованныеРоли(ПереименованныеРоли) Экспорт - - Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ПрофилиГруппДоступаРоли.Ссылка - |ИЗ - | Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли - |ГДЕ - | ПрофилиГруппДоступаРоли.Роль В(&СтарыеИменаРолей)"); - Запрос.УстановитьПараметр("СтарыеИменаРолей", ПереименованныеРоли.ВыгрузитьКолонку("СтароеИмяРоли")); - ОбновляемыеПрофили = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - - Для каждого ОбновляемыйПрофиль Из ОбновляемыеПрофили Цикл - ПрофильОбъект = ОбновляемыйПрофиль.ПолучитьОбъект(); - ПрофильОбъект.ОбменДанными.Загрузка = Истина; - Для каждого ПереименованнаяРоль Из ПереименованныеРоли Цикл - НайденнаяСтрока = ПрофильОбъект.Роли.Найти(ПереименованнаяРоль.СтароеИмяРоли, "Роль"); - Если НайденнаяСтрока <> Неопределено Тогда - Если ЗначениеЗаполнено(ПереименованнаяРоль.НовоеИмяРоли) Тогда - НайденнаяСтрока.Роль = ПереименованнаяРоль.НовоеИмяРоли; - Иначе - ПрофильОбъект.Роли.Удалить(НайденнаяСтрока); - КонецЕсли; - КонецЕсли; - КонецЦикла; - ПрофильОбъект.Записать(); - КонецЦикла; - - Для каждого ОбновляемыйПрофиль Из ОбновляемыеПрофили Цикл - ПрофильОбъект = ОбновляемыйПрофиль.ПолучитьОбъект(); - ПрофильОбъект.Записать(); - КонецЦикла; - -КонецПроцедуры - // Регистрирует или отменяет регистрацию объектов, которые должны быть исключены из -// обновления зависимых наборов значений доступа в событии -// ПриИзмененииНаборовЗначенийДоступа -// Как правило, процедура не потребуется, т.к. обновление наборов значений доступа не происходит -// если они действительно не изменены, а это можно использовать при проектировании зависимостей +// обновления зависимых наборов значений доступа в событии ПриИзмененииНаборовЗначенийДоступа. +// +// Как правило, процедура не требуется, т.к. обновление наборов значений доступа не происходит +// если они действительно не изменены, а это можно использовать при проектировании зависимостей. // Процедура может быть использована для предотвращения зацикливания в сложно зависимых -// наборах значений доступа +// наборах значений доступа. // В основном имеет смысл только для объектов, использующих табличную часть НаборыЗначенийДоступа // с шаблоном #ПоНаборамЗначений // Регистрация необходима, например в таких случаях, когда наборы значений доступа @@ -1563,7 +1472,7 @@ // наборы значений доступа задачи и, как следствие, пытается её перезаписать // в транзакции ПриЗаписи самой задачи. Это может привести к ошибке, т.к. задачу // заблокированную в форме нельзя повторно заблокировать. -// Чтобы исключить эту ситуацию (или подобные) необходимо (пример): +// Чтобы исключить эту ситуацию (или подобные) необходимо, например: // 1) ПередЗаписьюНаСервере в форме задачи // зарегистрировать ссылку на задачу для ручного обновления зависимых наборов, // 2) ПослеЗаписиНаСервере в форме задачи @@ -1578,8 +1487,8 @@ // - вызвать процедуру УправлениеДоступом.ОбновитьНаборыЗначенийДоступа(<Ссылка на задачу>) // // Параметры: -// Ссылка - СправочникСсылка.*, ДокументСсылка.*, ... -// Зарегистрировать - Булево - если Истина объект будет зарегистрирован, если Ложь, регистрация будет отменена +// Ссылка - СправочникСсылка.*, ДокументСсылка.*, ... +// Зарегистрировать - Булево - если Истина объект будет зарегистрирован, если Ложь, регистрация будет отменена. // Процедура РучноеОбновлениеЗависимыхНаборовЗначенийДоступа(Ссылка, Зарегистрировать) Экспорт @@ -1623,1084 +1532,9 @@ КонецПроцедуры -// Функция проверяет предусмотрена ли для объекта метаданных -// процедура заполнения наборов значений доступа -// -// Параметры: -// Ссылка - ЛюбаяСсылка -// -// Возвращаемое значение: -// Булево. -// -Функция ВозможноЗаполнитьНаборыЗначенийДоступа(Ссылка) Экспорт - - ТипОбъекта = Тип(ОбщегоНазначения.ВидОбъектаПоСсылке(Ссылка) + "Объект." + Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).Имя); - - НаборыЗаполняются = Метаданные.ПодпискиНаСобытия.ЗаписатьНаборыЗначенийДоступа.Источник.СодержитТип(ТипОбъекта) - ИЛИ Метаданные.ПодпискиНаСобытия.ЗаписатьЗависимыеНаборыЗначенийДоступа.Источник.СодержитТип(ТипОбъекта); - - Возврат НаборыЗаполняются; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ общего назначения. - -// Функция СвойстваВидаДоступа возвращает свойства вида доступа, используя функцию -// УправлениеДоступомСерверПовтИсп.СвойстваВидовДоступа(). -// -// Параметры: -// ВидДоступа - ПланВидовХарактеристикСсылка.ВидыДоступа, Неопределено. -// -// Возвращаемое значение: -// Неопределено - когда для вида доступа свойств не найдено, -// ТаблицаЗначений или СтрокаТаблицыЗначений с полями: -// описание которых см. в комментарии к функции -// УправлениеДоступомСерверПовтИсп.СвойстваВидовДоступа(). -// -// -Функция СвойстваВидаДоступа(Знач ВидДоступа = Неопределено) Экспорт - - СвойстваВидовДоступа = УправлениеДоступомСерверПовтИсп.СвойстваВидовДоступа().Скопировать(); - - Если ВидДоступа = Неопределено Тогда - - Возврат СвойстваВидовДоступа; - Иначе - Возврат СвойстваВидовДоступа.Найти(ВидДоступа, "ВидДоступа"); - КонецЕсли; - -КонецФункции - -// Функция ВидыДоступаТаблицы возвращает массив видов доступа -// для таблицы с указанным именем. -// -// Параметры: -// Таблица - Строка, как в фукнции ПолноеИмя() объекта метаданных. -// -// Возвращаемое значение: -// Массив - элементы типа ПланВидовХарактеристикСсылка.ВидыДоступа. -// -Функция ВидыДоступаТаблицы(Знач Таблица) Экспорт - - ВидыДоступа = Новый Массив; - - Для каждого СвойстваВидаДоступа Из УправлениеДоступомСерверПовтИсп.СвойстваВидовДоступа() Цикл - - Если СвойстваВидаДоступа.Таблицы.Найти(Таблица) <> Неопределено Тогда - - ВидыДоступа.Добавить(СвойстваВидаДоступа.ВидДоступа); - КонецЕсли; - КонецЦикла; - - Возврат ВидыДоступа; - -КонецФункции - -// Функция ВозможныеПраваПоЗначениюДоступа возвращает описание возможных прав -// по значению доступа имя таблицы которого, передается в качестве параметра. -// Подробнее о возможных правах см. в комментарии к функции -// УправлениеДоступомСерверПовтИсп.ВозможныеПраваПоЗначениямДоступа(). -// -// Параметры: -// Таблица - Строка, Неопределено - полное имя таблицы значений доступа, -// для которых нужно получить описание возможных прав, -// когда Неопределено, возвращается таблица всех описаний, -// заданных прикладным разработчиком. -// -// Возвращаемое значение: -// ТаблицаЗначений с полями, -// описание которых см. в комментарии к функции -// УправлениеДоступомСерверПовтИсп.ВозможныеПраваПоЗначениямДоступа(). -// Если задан параметр Таблица, возвращаются только её описания. -// -Функция ВозможныеПраваПоЗначениюДоступа(Таблица = Неопределено) Экспорт - - ВозможныеПрава = УправлениеДоступомСерверПовтИсп.ВозможныеПраваПоЗначениямДоступа(); - - Если Таблица = Неопределено Тогда - Строки = Неопределено; - Иначе - Строки = ВозможныеПрава.НайтиСтроки(Новый Структура("ВладелецПрав", Таблица)); - КонецЕсли; - - Возврат ВозможныеПрава.Скопировать(Строки); - -КонецФункции - -// Процедура ОбновитьРолиПользователей обновляет список ролей пользователей -// информационной базы по их текущим принадлежностям к группам доступа. -// Пользователи с ролью "ПолныеПрава" игнорируется. -// -// Параметры: -// Пользователи - Массив элементов СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи. -// ЕстьОшибки - Булево. Возвращает истина, когда были ошибки, записанные в журнал регистрации. -// -Процедура ОбновитьРолиПользователей(Знач Пользователи, ЕстьОшибки = Ложь) Экспорт - - Если НЕ ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда - // Роли устанавливаются механизмами подсистем Пользователи и ВнешниеПользователи. - Возврат; - КонецЕсли; - - Если Пользователи.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | Пользователи.Ссылка КАК Пользователь - |ПОМЕСТИТЬ ВсеПользователи - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.Ссылка В(&Пользователи) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ГруппыДоступаПользователи.Пользователь - |ИЗ - | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи - |ГДЕ - | ГруппыДоступаПользователи.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ВнешниеПользователи.Ссылка - |ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - |ГДЕ - | ВнешниеПользователи.Ссылка В(&Пользователи) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВсеПользователи.Пользователь, - | ВЫБОР - | КОГДА (НЕ Пользователи.Ссылка ЕСТЬ NULL ) - | ТОГДА Пользователи.ИдентификаторПользователяИБ - | КОГДА (НЕ ВнешниеПользователи.Ссылка ЕСТЬ NULL ) - | ТОГДА ВнешниеПользователи.ИдентификаторПользователяИБ - | ИНАЧЕ НЕОПРЕДЕЛЕНО - | КОНЕЦ КАК ИдентификаторПользователяИБ - |ИЗ - | ВсеПользователи КАК ВсеПользователи - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи - | ПО (Пользователи.Ссылка = ВсеПользователи.Пользователь) - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК ВнешниеПользователи - | ПО (ВнешниеПользователи.Ссылка = ВсеПользователи.Пользователь)"); - Запрос.УстановитьПараметр("Пользователи", Пользователи); - ОбновляемыеПользователи = Запрос.Выполнить().Выгрузить(); - - // Подготовка таблицы старых ролей пользователей. - СтарыеРолиПользователей = Новый ТаблицаЗначений; - СтарыеРолиПользователей.Колонки.Добавить("Пользователь", Новый ОписаниеТипов("СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи")); - СтарыеРолиПользователей.Колонки.Добавить("Роль", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(200))); - - ТекущийНомер = ОбновляемыеПользователи.Количество() - 1; - Пока ТекущийНомер >= 0 Цикл - // Проверка необходимости обработки пользователя. - ИдентификаторПользователяИБ = ОбновляемыеПользователи[ТекущийНомер].ИдентификаторПользователяИБ; - Если ТипЗнч(ИдентификаторПользователяИБ) = Тип("УникальныйИдентификатор") Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ); - Иначе - ПользовательИБ = Неопределено; - КонецЕсли; - Если ПользовательИБ = Неопределено ИЛИ ПустаяСтрока(ПользовательИБ.Имя) Тогда - ОбновляемыеПользователи.Удалить(ОбновляемыеПользователи[ТекущийНомер]); - Иначе - Для каждого Роль Из ПользовательИБ.Роли Цикл - СтараяРольПользователя = СтарыеРолиПользователей.Добавить(); - СтараяРольПользователя.Пользователь = ОбновляемыеПользователи[ТекущийНомер].Пользователь; - СтараяРольПользователя.Роль = Роль.Имя; - КонецЦикла; - КонецЕсли; - ТекущийНомер = ТекущийНомер - 1; - КонецЦикла; - - // Подготовка списка ролей отсутствующих в метаданных и которые нужно переустановить. - Запрос.Текст = - "ВЫБРАТЬ - | СтарыеРолиПользователей.Пользователь, - | СтарыеРолиПользователей.Роль - |ПОМЕСТИТЬ СтарыеРолиПользователей - |ИЗ - | &СтарыеРолиПользователей КАК СтарыеРолиПользователей - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВсеДоступныеРоли.Имя КАК Имя - |ПОМЕСТИТЬ ВсеДоступныеРоли - |ИЗ - | &ВсеДоступныеРоли КАК ВсеДоступныеРоли - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ГруппыДоступаПользователи.Пользователь - |ПОМЕСТИТЬ Администраторы - |ИЗ - | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи - |ГДЕ - | ГруппыДоступаПользователи.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы) - | И ГруппыДоступаПользователи.Пользователь В(&ОбновляемыеПользователи) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | СтарыеРолиПользователей.Пользователь - |ИЗ - | СтарыеРолиПользователей КАК СтарыеРолиПользователей - |ГДЕ - | СтарыеРолиПользователей.Роль = ""ПолныеПрава"" - | И НЕ ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - | ИЗ - | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи - | ГДЕ - | ГруппыДоступаПользователи.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы) - | И ГруппыДоступаПользователи.Пользователь В (&ОбновляемыеПользователи)) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | СтарыеРолиПользователей.Пользователь - |ПОМЕСТИТЬ СнятыеАдминистраторы - |ИЗ - | СтарыеРолиПользователей КАК СтарыеРолиПользователей - |ГДЕ - | СтарыеРолиПользователей.Роль = ""ПолныеПрава"" - | И НЕ СтарыеРолиПользователей.Пользователь В - | (ВЫБРАТЬ - | Администраторы.Пользователь - | ИЗ - | Администраторы КАК Администраторы) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ПользователиИГруппыПользователей.ЗначениеДоступа КАК Пользователь, - | Роли.Ссылка КАК Профиль, - | Роли.Роль - |ПОМЕСТИТЬ ВсеНовыеРолиПользователей - |ИЗ - | Справочник.ПрофилиГруппДоступа.Роли КАК Роли - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей - | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) - | И (ПользователиИГруппыПользователей.ЗначениеДоступа В (&ОбновляемыеПользователи)) - | И (ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ) - | И (ПользователиИГруппыПользователей.ГруппаДоступа = ГруппыДоступаПользователи.Пользователь) - | И (НЕ ГруппыДоступаПользователи.Ссылка.ПометкаУдаления) - | ПО Роли.Ссылка = ГруппыДоступаПользователи.Ссылка.Профиль - | И (НЕ Роли.Ссылка.ПометкаУдаления) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ВсеНовыеРолиПользователей.Пользователь, - | ВсеНовыеРолиПользователей.Роль - |ПОМЕСТИТЬ НовыеРолиПользователей - |ИЗ - | ВсеНовыеРолиПользователей КАК ВсеНовыеРолиПользователей - |ГДЕ - | ВсеНовыеРолиПользователей.Роль <> ""ПолныеПрава"" - | И ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - | ИЗ - | ВсеДоступныеРоли КАК ВсеДоступныеРоли - | ГДЕ - | ВсеДоступныеРоли.Имя = ВсеНовыеРолиПользователей.Роль) - | И НЕ ВсеНовыеРолиПользователей.Пользователь В - | (ВЫБРАТЬ - | Администраторы.Пользователь - | ИЗ - | Администраторы КАК Администраторы) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | Администраторы.Пользователь, - | ""ПолныеПрава"" - |ИЗ - | Администраторы КАК Администраторы - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | Администраторы.Пользователь, - | ""АдминистраторСистемы"" - |ИЗ - | Администраторы КАК Администраторы - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | СтарыеРолиПользователей.Пользователь - |ПОМЕСТИТЬ ИзмененныеПользователи - |ИЗ - | СтарыеРолиПользователей КАК СтарыеРолиПользователей - | ЛЕВОЕ СОЕДИНЕНИЕ НовыеРолиПользователей КАК НовыеРолиПользователей - | ПО (НовыеРолиПользователей.Пользователь = СтарыеРолиПользователей.Пользователь) - | И (НовыеРолиПользователей.Роль = СтарыеРолиПользователей.Роль) - |ГДЕ - | НовыеРолиПользователей.Роль ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | НовыеРолиПользователей.Пользователь - |ИЗ - | НовыеРолиПользователей КАК НовыеРолиПользователей - | ЛЕВОЕ СОЕДИНЕНИЕ СтарыеРолиПользователей КАК СтарыеРолиПользователей - | ПО НовыеРолиПользователей.Пользователь = СтарыеРолиПользователей.Пользователь - | И НовыеРолиПользователей.Роль = СтарыеРолиПользователей.Роль - |ГДЕ - | СтарыеРолиПользователей.Роль ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | СнятыеАдминистраторы.Пользователь - |ИЗ - | СнятыеАдминистраторы КАК СнятыеАдминистраторы - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВсеНовыеРолиПользователей.Пользователь, - | ВсеНовыеРолиПользователей.Профиль, - | ВсеНовыеРолиПользователей.Роль - |ИЗ - | ВсеНовыеРолиПользователей КАК ВсеНовыеРолиПользователей - |ГДЕ - | НЕ ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - | ИЗ - | ВсеДоступныеРоли КАК ВсеДоступныеРоли - | ГДЕ - | ВсеДоступныеРоли.Имя = ВсеНовыеРолиПользователей.Роль)"; - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - Запрос.УстановитьПараметр("ВсеДоступныеРоли", ПользователиСерверПовтИсп.ВсеРоли()); - Запрос.УстановитьПараметр("ОбновляемыеПользователи", ОбновляемыеПользователи); - Запрос.УстановитьПараметр("СтарыеРолиПользователей", СтарыеРолиПользователей); - - // Регистрация ошибок имен ролей в профилях групп доступа. - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ЗаписьЖурналаРегистрации(НСтр("ru = 'Управление доступом.Роль не найдена в метаданных'"), - УровеньЖурналаРегистрации.Ошибка, - , - , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru= 'При обновлении ролей пользователя ""<%1>"" роль ""<%2>"" профиля групп доступа ""<%3>"" не найдена в метаданных.'"), - СокрЛП(Выборка.Пользователь.Наименование), - Выборка.Роль, - Выборка.Профиль), - РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - ЕстьОшибки = Истина; - КонецЦикла; - - // Обновление ролей пользователейИБ. - Запрос.Текст = - "ВЫБРАТЬ - | ИзмененныеПользователиИРоли.Пользователь, - | ИзмененныеПользователиИРоли.Роль - |ПОМЕСТИТЬ ИзмененныеПользователиИРоли - |ИЗ - | (ВЫБРАТЬ - | НовыеРолиПользователей.Пользователь КАК Пользователь, - | НовыеРолиПользователей.Роль КАК Роль - | ИЗ - | НовыеРолиПользователей КАК НовыеРолиПользователей - | ГДЕ - | НовыеРолиПользователей.Пользователь В - | (ВЫБРАТЬ - | ИзмененныеПользователи.Пользователь - | ИЗ - | ИзмененныеПользователи КАК ИзмененныеПользователи) - | - | ОБЪЕДИНИТЬ - | - | ВЫБРАТЬ - | Пользователи.Ссылка, - | """" - | ИЗ - | Справочник.Пользователи КАК Пользователи - | ГДЕ - | Пользователи.Ссылка В - | (ВЫБРАТЬ - | ИзмененныеПользователи.Пользователь - | ИЗ - | ИзмененныеПользователи КАК ИзмененныеПользователи) - | - | ОБЪЕДИНИТЬ - | - | ВЫБРАТЬ - | ВнешниеПользователи.Ссылка, - | """" - | ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - | ГДЕ - | ВнешниеПользователи.Ссылка В - | (ВЫБРАТЬ - | ИзмененныеПользователи.Пользователь - | ИЗ - | ИзмененныеПользователи КАК ИзмененныеПользователи)) КАК ИзмененныеПользователиИРоли - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ИзмененныеПользователиИРоли.Пользователь, - | ИзмененныеПользователиИРоли.Роль - |ИЗ - | ИзмененныеПользователиИРоли КАК ИзмененныеПользователиИРоли - | - |УПОРЯДОЧИТЬ ПО - | ВЫБОР - | КОГДА (ИзмененныеПользователиИРоли.Пользователь, ""ПолныеПрава"") В - | (ВЫБРАТЬ - | ИзмененныеПользователиИРоли.Пользователь, - | ИзмененныеПользователиИРоли.Роль - | ИЗ - | ИзмененныеПользователиИРоли КАК ИзмененныеПользователиИРоли) - | ТОГДА 0 - | ИНАЧЕ 1 - | КОНЕЦ, - | ИзмененныеПользователиИРоли.Пользователь, - | ИзмененныеПользователиИРоли.Роль"; - Выборка = Запрос.Выполнить().Выбрать(); - - ПользовательИБ = Неопределено; - Пока Выборка.Следующий() Цикл - Если НЕ ЗначениеЗаполнено(Выборка.Роль) Тогда - Если ПользовательИБ <> Неопределено Тогда - ПользовательИБ.Записать(); - КонецЕсли; - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ОбновляемыеПользователи.Найти(Выборка.Пользователь, "Пользователь").ИдентификаторПользователяИБ); - ПользовательИБ.Роли.Очистить(); - Иначе - ПользовательИБ.Роли.Добавить(Метаданные.Роли[Выборка.Роль]); - КонецЕсли; - КонецЦикла; - Если ПользовательИБ <> Неопределено Тогда - ПользовательИБ.Записать(); - КонецЕсли; - -КонецПроцедуры - -// Процедура УстановкаПараметровСеанса устанавливает -// параметры сеанса по текущим настройкам констант и групп доступа пользователей. -// Вызывается ПриНачалеРаботыСистемы -// -Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если НЕ Константы.ОграничиватьДоступНаУровнеЗаписей.Получить() Тогда - // Для корректной работы препроцессора в ограничениях доступа, требуется инициализации всех - // параметров сеанса, которые могут быть востребованы в работе препроцессора. - Если ИмяПараметра = "ВидыДоступаЕдинственныеДляТипаЗначенияДоступа" ИЛИ - ИмяПараметра = "ВидыДоступаБезГруппЗначенияДоступа" Тогда - ПараметрыСеанса[ИмяПараметра] = Новый ФиксированныйМассив(Новый Массив); - // - ИначеЕсли ИмяПараметра = "ДобавлятьРуководителямДоступПодчиненных" Тогда - ПараметрыСеанса[ИмяПараметра] = Ложь; - Иначе - ПараметрыСеанса[ИмяПараметра] = ""; - КонецЕсли; - УстановленныеПараметры.Добавить(ИмяПараметра); - Возврат; - КонецЕсли; - - ПараметрыСеанса.ДобавлятьРуководителямДоступПодчиненных = Константы.ДобавлятьРуководителямДоступПодчиненных.Получить(); - УстановленныеПараметры.Добавить("ДобавлятьРуководителямДоступПодчиненных"); - - // Следующие виды доступа не самостоятельные, - // поэтому не учитываются при расчете необходимости ограничения в целом. - // В стандартных шаблонах проверка по этим видам доступа всегда выполняется, - // а в препроцессоре проверка использования не выполнятся. - ПараметрыСеанса.ОграничиватьДоступПоВидуУсловие = ""; - ПараметрыСеанса.ОграничиватьДоступПоВидуОбъект = ""; - УстановленныеПараметры.Добавить("ОграничиватьДоступПоВидуУсловие"); - УстановленныеПараметры.Добавить("ОграничиватьДоступПоВидуОбъект"); - - Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ВидыДоступаПрофилейГруппДоступа.ВидДоступа - |ИЗ - | Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ВидыДоступаПрофилейГруппДоступа - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей - | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) - | И (ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь) - | И (ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ) - | И (ПользователиИГруппыПользователей.ГруппаДоступа = ГруппыДоступаПользователи.Пользователь) - | ПО ГруппыДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка - | И ((НЕ ГруппыДоступа.ПометкаУдаления)) - | ПО (ГруппыДоступа.Профиль = ВидыДоступаПрофилейГруппДоступа.Ссылка) - | И ((НЕ ВидыДоступаПрофилейГруппДоступа.Ссылка.ПометкаУдаления))"); - Запрос.УстановитьПараметр("ТекущийПользователь", ?(ЗначениеЗаполнено(ПараметрыСеанса.ТекущийПользователь), - ПараметрыСеанса.ТекущийПользователь, - ПараметрыСеанса.ТекущийВнешнийПользователь)); - ОграничиваемыеВидыДоступа = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ВидДоступа"); - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ВидыДоступа.Ссылка КАК ВидДоступа - |ИЗ - | ПланВидовХарактеристик.ВидыДоступа КАК ВидыДоступа - |ГДЕ - | ВидыДоступа.Предопределенный"); - Выборка = Запрос.Выполнить().Выбрать(); - - КаждыйВидЕдинственный = Истина; - КаждыйВидБезГрупп = Истина; - - ВидыДоступаБезОграничения = Новый Массив; - ВидыДоступаЕдинственныеДляТипаЗначенияДоступа = Новый Массив; - ВидыДоступаБезГруппЗначенияДоступа = Новый Массив; - ВидыДоступаЧерезПраваПоЗначениямДоступа = Новый Массив; - - Пока Выборка.Следующий() Цикл - - СвойстваВидаДоступа = СвойстваВидаДоступа(Выборка.ВидДоступа); - - Если СвойстваВидаДоступа.ВидДоступаИспользуетсяВсегда Тогда - // Такие виды доступа не самостоятельные, поэтому не учитываются при расчете - // необходимости ограничения в целом. - // В стандартных шаблонах проверка по этим видам доступа всегда выполняется, - // а в препроцессоре проверка использования не выполнятся. - ОписаниеВидаДоступа = ""; - - ИначеЕсли НЕ СвойстваВидаДоступа.ВидДоступаИспользуется Тогда - ОписаниеВидаДоступа = ""; - ВидыДоступаБезОграничения.Добавить(Выборка.ВидДоступа); - - ИначеЕсли ОграничиваемыеВидыДоступа.Найти(Выборка.ВидДоступа) = Неопределено Тогда - ОписаниеВидаДоступа = ""; - ВидыДоступаБезОграничения.Добавить(Выборка.ВидДоступа); - - ИначеЕсли СвойстваВидаДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа Тогда - ОписаниеВидаДоступа = "ЧерезПраваПоЗначениямДоступа"; - ВидыДоступаЧерезПраваПоЗначениямДоступа.Добавить(Выборка.ВидДоступа); - Иначе - Если СвойстваВидаДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа Тогда - ОписаниеВидаДоступа = "ЕдинственныйВид, "; - ВидыДоступаЕдинственныеДляТипаЗначенияДоступа.Добавить(Выборка.ВидДоступа); - Иначе - ОписаниеВидаДоступа = "ОдинИзМногихВидов,"; - КаждыйВидЕдинственный = Ложь; - КонецЕсли; - Если СвойстваВидаДоступа.ВидДоступаБезГруппЗначенияДоступа Тогда - ОписаниеГрупп = "БезГрупп"; - ВидыДоступаБезГруппЗначенияДоступа.Добавить(Выборка.ВидДоступа); - Иначе - ОписаниеГрупп = ?(СвойстваВидаДоступа.ВидДоступаСОднойГруппойЗначенияДоступа, "ОднаГруппа", "МножествоГрупп"); - КаждыйВидБезГрупп = Ложь; - КонецЕсли; - ОписаниеВидаДоступа = ОписаниеВидаДоступа + ОписаниеГрупп; - КонецЕсли; - ИмяВидаДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПолучитьИмяПредопределенного(Выборка.ВидДоступа); - ПараметрыСеанса["ОграничиватьДоступПоВиду" + ИмяВидаДоступа] = ОписаниеВидаДоступа; - УстановленныеПараметры.Добавить("ОграничиватьДоступПоВиду" + ИмяВидаДоступа); - КонецЦикла; - - ПараметрыСеанса.ВидыДоступаБезОграничения = Новый ФиксированныйМассив(ВидыДоступаБезОграничения); - УстановленныеПараметры.Добавить("ВидыДоступаБезОграничения"); - - ПараметрыСеанса.ВидыДоступаЕдинственныеДляТипаЗначенияДоступа = Новый ФиксированныйМассив(ВидыДоступаЕдинственныеДляТипаЗначенияДоступа); - УстановленныеПараметры.Добавить("ВидыДоступаЕдинственныеДляТипаЗначенияДоступа"); - - ПараметрыСеанса.ВидыДоступаБезГруппЗначенияДоступа = Новый ФиксированныйМассив(ВидыДоступаБезГруппЗначенияДоступа); - УстановленныеПараметры.Добавить("ВидыДоступаБезГруппЗначенияДоступа"); - - ПараметрыСеанса.ВидыДоступаЧерезПраваПоЗначениямДоступа = ?(ВидыДоступаЧерезПраваПоЗначениямДоступа.Количество() = 0, - "", - Новый ФиксированныйМассив(ВидыДоступаЧерезПраваПоЗначениямДоступа)); - УстановленныеПараметры.Добавить("ВидыДоступаЧерезПраваПоЗначениямДоступа"); - - Если КаждыйВидЕдинственный И КаждыйВидБезГрупп Тогда - ПараметрыСеанса.ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп"; - ИначеЕсли КаждыйВидЕдинственный Тогда - ПараметрыСеанса.ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный"; - ИначеЕсли КаждыйВидБезГрупп Тогда - ПараметрыСеанса.ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп"; - Иначе - ПараметрыСеанса.ОграничиватьДоступПоВиду = "Да"; - КонецЕсли; - УстановленныеПараметры.Добавить("ОграничиватьДоступПоВиду"); - -КонецПроцедуры // УстановитьПараметрыСеансаОграниченияДоступа() - -// Процедура ОбновитьТаблицыГруппДоступа проверяет и, если нужно, -// обновляет состав РегистрСведений.ТаблицыГруппДоступа для одной -// или всех групп доступа пользователей, в которых есть пользователи. -// Процедура использует таблицу Справочник.ПрофилиГруппДоступ.ТаблицыРолей. -// -// Параметры: -// ГруппаДоступа - СправочникСсылка.ГруппыДоступа. -// -Процедура ОбновитьТаблицыГруппДоступа(Знач ГруппаДоступа) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ТаблицыПрофиля.Таблица, - | ПользователиГрупп.Пользователь, - | ТаблицыПрофиля.Добавление КАК Добавление, - | ТаблицыПрофиля.Изменение КАК Изменение, - | ТаблицыПрофиля.Удаление КАК Удаление, - | ТаблицыПрофиля.ТипТаблицы КАК ТипТаблицы, - | ВЫБОР - | КОГДА ТаблицыПрофиля.Добавление - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) - | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) - | КОНЕЦ КАК ВидДоступаПравоДобавления, - | ВЫБОР - | КОГДА ТаблицыПрофиля.Изменение - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) - | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) - | КОНЕЦ КАК ВидДоступаПравоИзменения - |ПОМЕСТИТЬ ТаблицыПользователейГруппы - |ИЗ - | (ВЫБРАТЬ - | ТаблицыРолей.Таблица КАК Таблица, - | МАКСИМУМ(ТаблицыРолей.Добавление) КАК Добавление, - | МАКСИМУМ(ТаблицыРолей.Изменение) КАК Изменение, - | МАКСИМУМ(ТаблицыРолей.Удаление) КАК Удаление, - | МАКСИМУМ(ТаблицыРолей.ТипТаблицы) КАК ТипТаблицы - | ИЗ - | Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК ТаблицыРолей - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа - | ПО (ГруппыДоступа.Профиль = ТаблицыРолей.Ссылка) - | И (ГруппыДоступа.Ссылка = &ГруппаДоступа) - | И ((НЕ ГруппыДоступа.ПометкаУдаления)) - | И ((НЕ ТаблицыРолей.Ссылка.ПометкаУдаления)) - | - | СГРУППИРОВАТЬ ПО - | ТаблицыРолей.Таблица) КАК ТаблицыПрофиля - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ПользователиГрупп - | ПО (ПользователиГрупп.Ссылка = &ГруппаДоступа) - | И ((НЕ ПользователиГрупп.Ссылка.ПометкаУдаления)) - | И ((НЕ ПользователиГрупп.Пользователь В (НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.ВнешниеПользователи.ПустаяСсылка)))) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа - | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы - | ПО (ТаблицыПользователейГруппы.Таблица = ТаблицыГруппДоступа.Таблица) - | И (ТаблицыПользователейГруппы.Пользователь = ТаблицыГруппДоступа.Пользователь) - | И (ТаблицыПользователейГруппы.Добавление = ТаблицыГруппДоступа.Добавление) - | И (ТаблицыПользователейГруппы.Изменение = ТаблицыГруппДоступа.Изменение) - | И (ТаблицыПользователейГруппы.Удаление = ТаблицыГруппДоступа.Удаление) - | И (ТаблицыПользователейГруппы.ТипТаблицы = ТаблицыГруппДоступа.ТипТаблицы) - | И (ТаблицыПользователейГруппы.ВидДоступаПравоДобавления = ТаблицыГруппДоступа.ВидДоступаПравоДобавления) - | И (ТаблицыПользователейГруппы.ВидДоступаПравоИзменения = ТаблицыГруппДоступа.ВидДоступаПравоИзменения) - |ГДЕ - | ТаблицыГруппДоступа.ГруппаДоступа = &ГруппаДоступа - | И ТаблицыПользователейГруппы.Таблица ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - |ИЗ - | ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа - | ПО ТаблицыПользователейГруппы.Таблица = ТаблицыГруппДоступа.Таблица - | И ТаблицыПользователейГруппы.Пользователь = ТаблицыГруппДоступа.Пользователь - | И (ТаблицыГруппДоступа.ГруппаДоступа = &ГруппаДоступа) - | И ТаблицыПользователейГруппы.Добавление = ТаблицыГруппДоступа.Добавление - | И ТаблицыПользователейГруппы.Изменение = ТаблицыГруппДоступа.Изменение - | И ТаблицыПользователейГруппы.Удаление = ТаблицыГруппДоступа.Удаление - | И ТаблицыПользователейГруппы.ТипТаблицы = ТаблицыГруппДоступа.ТипТаблицы - | И ТаблицыПользователейГруппы.ВидДоступаПравоДобавления = ТаблицыГруппДоступа.ВидДоступаПравоДобавления - | И ТаблицыПользователейГруппы.ВидДоступаПравоИзменения = ТаблицыГруппДоступа.ВидДоступаПравоИзменения - |ГДЕ - | ТаблицыГруппДоступа.Таблица ЕСТЬ NULL "); - Запрос.УстановитьПараметр("ГруппаДоступа", ГруппаДоступа); - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - - Если НЕ Запрос.Выполнить().Пустой() Тогда - Запрос.Текст = - "ВЫБРАТЬ - | ТаблицыПользователейГруппы.Таблица, - | ТаблицыПользователейГруппы.Пользователь, - | &ГруппаДоступа КАК ГруппаДоступа, - | ТаблицыПользователейГруппы.Добавление, - | ТаблицыПользователейГруппы.Изменение, - | ТаблицыПользователейГруппы.Удаление, - | ТаблицыПользователейГруппы.ТипТаблицы, - | ТаблицыПользователейГруппы.ВидДоступаПравоДобавления, - | ТаблицыПользователейГруппы.ВидДоступаПравоИзменения - |ИЗ - | ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы"; - НаборЗаписей = РегистрыСведений.ТаблицыГруппДоступа.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ГруппаДоступа.Установить(ГруппаДоступа); - НаборЗаписей.Загрузить(Запрос.Выполнить().Выгрузить()); - НаборЗаписей.Записать(); - КонецЕсли; - -КонецПроцедуры - -// Процедура ЗаписатьЗначенияГруппДоступа перезаписывает в РегистрСведений.ЗначенияГруппДоступа -// ЗначенияДоступа разрешенные/запрещенные для группы доступа. -// Производится проверка на необходимость записи - если различий нет, запись не выполняется. -// -// Параметры: -// ГруппаДоступа - СправочникСсылка.ГруппыДоступа. -// -Процедура ЗаписатьЗначенияГруппДоступа(Знач ГруппаДоступа) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ГруппаДоступа", ГруппаДоступа); - Запрос.УстановитьПараметр("ПрофильГруппыДоступа", ОбщегоНазначения.ПолучитьЗначениеРеквизита(ГруппаДоступа, "Профиль")); - Запрос.Текст = - "ВЫБРАТЬ - | ВидыДоступаПрофиля.ВидДоступа КАК ВидДоступа, - | ИСТИНА КАК ТолькоВидДоступа, - | НЕОПРЕДЕЛЕНО КАК ЗначениеДоступа - |ПОМЕСТИТЬ ЗначенияГруппы - |ИЗ - | Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ВидыДоступаПрофиля - |ГДЕ - | (НЕ ВидыДоступаПрофиля.ДоступРазрешен) - | И ВидыДоступаПрофиля.Ссылка = &ПрофильГруппыДоступа - | И ВидыДоступаПрофиля.Предустановленный - | И (НЕ ВидыДоступаПрофиля.Ссылка.ПометкаУдаления) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ВидыДоступа.ВидДоступа, - | ИСТИНА, - | НЕОПРЕДЕЛЕНО - |ИЗ - | Справочник.ГруппыДоступа.ВидыДоступа КАК ВидыДоступа - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ПредустановленныеВидыДоступа - | ПО ВидыДоступа.Ссылка.Профиль = ПредустановленныеВидыДоступа.Ссылка - | И ВидыДоступа.ВидДоступа = ПредустановленныеВидыДоступа.ВидДоступа - | И ((НЕ ВидыДоступа.Ссылка.ПометкаУдаления)) - | И ((НЕ ПредустановленныеВидыДоступа.Ссылка.ПометкаУдаления)) - |ГДЕ - | (НЕ ВидыДоступа.ДоступРазрешен) - | И ВидыДоступа.Ссылка = &ГруппаДоступа - | И (НЕ ПредустановленныеВидыДоступа.Предустановленный) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ЗначенияДоступаПрофиля.ВидДоступа, - | ЛОЖЬ, - | ЗначенияДоступаПрофиля.ЗначениеДоступа - |ИЗ - | Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ВидыДоступаПрофиля - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ЗначенияДоступа КАК ЗначенияДоступаПрофиля - | ПО (ВидыДоступаПрофиля.Предустановленный) - | И ((НЕ ВидыДоступаПрофиля.Ссылка.ПометкаУдаления)) - | И (ВидыДоступаПрофиля.Ссылка = &ПрофильГруппыДоступа) - | И (ЗначенияДоступаПрофиля.Ссылка = &ПрофильГруппыДоступа) - | И ВидыДоступаПрофиля.ВидДоступа = ЗначенияДоступаПрофиля.ВидДоступа - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ЗначенияДоступа.ВидДоступа, - | ЛОЖЬ, - | ЗначенияДоступа.ЗначениеДоступа - |ИЗ - | Справочник.ГруппыДоступа.ВидыДоступа КАК ВидыДоступа - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ПредустановленныеВидыДоступа - | ПО ВидыДоступа.Ссылка.Профиль = ПредустановленныеВидыДоступа.Ссылка - | И ВидыДоступа.ВидДоступа = ПредустановленныеВидыДоступа.ВидДоступа - | И ((НЕ ПредустановленныеВидыДоступа.Ссылка.ПометкаУдаления)) - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.ЗначенияДоступа КАК ЗначенияДоступа - | ПО (ВидыДоступа.Ссылка = &ГруппаДоступа) - | И (ЗначенияДоступа.Ссылка = &ГруппаДоступа) - | И ВидыДоступа.ВидДоступа = ЗначенияДоступа.ВидДоступа - | И ((НЕ ПредустановленныеВидыДоступа.Предустановленный)) - | И ((НЕ ЗначенияДоступа.Ссылка.ПометкаУдаления)) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа - | ЛЕВОЕ СОЕДИНЕНИЕ ЗначенияГруппы КАК ЗначенияГруппы - | ПО (ЗначенияГруппы.ВидДоступа = ЗначенияГруппДоступа.ВидДоступа) - | И (ЗначенияГруппы.ТолькоВидДоступа = ЗначенияГруппДоступа.ТолькоВидДоступа) - | И (ЗначенияГруппы.ЗначениеДоступа = ЗначенияГруппДоступа.ЗначениеДоступа) - |ГДЕ - | ЗначенияГруппДоступа.ГруппаДоступа = &ГруппаДоступа - | И ЗначенияГруппы.ВидДоступа ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - |ИЗ - | ЗначенияГруппы КАК ЗначенияГруппы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа - | ПО (ЗначенияГруппДоступа.ГруппаДоступа = &ГруппаДоступа) - | И ЗначенияГруппы.ВидДоступа = ЗначенияГруппДоступа.ВидДоступа - | И ЗначенияГруппы.ТолькоВидДоступа = ЗначенияГруппДоступа.ТолькоВидДоступа - | И ЗначенияГруппы.ЗначениеДоступа = ЗначенияГруппДоступа.ЗначениеДоступа - |ГДЕ - | ЗначенияГруппДоступа.ВидДоступа ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | &ГруппаДоступа КАК ГруппаДоступа, - | ЗначенияГруппы.ВидДоступа, - | ЗначенияГруппы.ТолькоВидДоступа, - | ЗначенияГруппы.ЗначениеДоступа - |ИЗ - | ЗначенияГруппы КАК ЗначенияГруппы"; - - РезультатыЗапроса = Запрос.ВыполнитьПакет(); - - Если НЕ РезультатыЗапроса[1].Пустой() Тогда - - НаборЗаписей = РегистрыСведений.ЗначенияГруппДоступа.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ГруппаДоступа.Установить(ГруппаДоступа); - НаборЗаписей.Загрузить(РезультатыЗапроса[2].Выгрузить()); - НаборЗаписей.Записать(); - - КонецЕсли; - -КонецПроцедуры - -// Функция ПоставляемыйПрофильИзменен проверяет изменен ли поставляемый профиль -// по сравнению с описанием из функции -// УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа() -// -// Параметры: -// Профиль - СправочникСсылка.ПрофилиГруппДоступа. -// -// Возвращаемое значение: -// Строка. -// -Функция ОписаниеПоставляемогоПрофиля(Профиль) Экспорт - - ОписанияПрофилей = УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); - - Текст = ""; - Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл - Если ОписаниеПрофиля.Идентификатор = Строка(Профиль.УникальныйИдентификатор()) Тогда - Текст = ОписаниеПрофиля.Описание; - КонецЕсли; - КонецЦикла; - - Возврат Текст; - -КонецФункции - -// Функция РодительПерсональныхГруппДоступа возвращает -// ссылку на группу-родителя персональных групп доступа. -// Если родитель не найден он будет создан. -// -// Параметры: -// НеСоздавать - Булево, если задан Истина, родитель не будет автоматически создан, -// а функция вернет Неопределено, если родитель не найден -// -// Возвращаемое значение: -// СправочникСсылка.ГруппыДоступа -// -Функция РодительПерсональныхГруппДоступа(Знач НеСоздавать = Ложь, НаименованиеГруппыЭлементов = Неопределено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - НаименованиеГруппыЭлементов = НСтр("ru = 'Персональные группы доступа'"); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("НаименованиеГруппыЭлементов", НаименованиеГруппыЭлементов); - Запрос.Текст = - "ВЫБРАТЬ - | ГруппыДоступа.Ссылка - |ИЗ - | Справочник.ГруппыДоступа КАК ГруппыДоступа - |ГДЕ - | ГруппыДоступа.Наименование ПОДОБНО &НаименованиеГруппыЭлементов - | И ГруппыДоступа.ЭтоГруппа"; - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - ГруппаЭлементов = Выборка.Ссылка; - ИначеЕсли НеСоздавать Тогда - ГруппаЭлементов = Неопределено; - Иначе - ГруппаЭлементовОбъект = Справочники.ГруппыДоступа.СоздатьГруппу(); - ГруппаЭлементовОбъект.Наименование = НаименованиеГруппыЭлементов; - ГруппаЭлементовОбъект.Записать(); - ГруппаЭлементов = ГруппаЭлементовОбъект.Ссылка; - КонецЕсли; - - Возврат ГруппаЭлементов; - -КонецФункции - -// Функция ПользовательПрофиляЕдинственный проверяет -// наличие только одного заданного пользователя среди -// пользователей групп доступа заданного профиля. -// -// Параметры: -// Профиль - СправочникСсылка.ПрофилиГруппДоступа -// Пользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи. -// -// Возвращаемое значение: -// Булево -// -Функция ПользовательПрофиляЕдинственный(Профиль, Пользователь) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Профиль", Профиль); - Запрос.УстановитьПараметр("Пользователь", Пользователь); - Запрос.Текст = - "ВЫБРАТЬ - | СУММА(ВЫБОР - | КОГДА ГруппыДоступаПользователи.Пользователь = &Пользователь - | ТОГДА 0 - | ИНАЧЕ 1 - | КОНЕЦ) КАК КоличествоПрочихПользователей - |ИЗ - | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи - |ГДЕ - | ГруппыДоступаПользователи.Ссылка.Профиль = &Профиль"; - - Возврат Профиль <> Справочники.ПрофилиГруппДоступа.Администратор - И Запрос.Выполнить().Выгрузить()[0].КоличествоПрочихПользователей = 0; - -КонецФункции - -// Функция ЗаголовокПодчиненнойФормы параметризирует заголовок подчиненной формы, -// например, НСтр("ru = 'Права доступа: %1 (%2)'" -> "Права доступа: Иванов (Пользователь)" -// -// Параметры: -// СсылкаНаВладельца - ссылка на объект-владелец. -// -Функция ЗаголовокПодчиненнойФормы(СтрокаЗаголовкаСПараметрами, СсылкаНаВладельца) Экспорт - - МетаданныеВладельца = СсылкаНаВладельца.Метаданные(); - НаименованиеВладельца = Строка(СсылкаНаВладельца); - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СтрокаЗаголовкаСПараметрами, - НаименованиеВладельца, - НазваниеОбъектаИзМетаданных(МетаданныеВладельца) ); - -КонецФункции - -// Функция НазваниеОбъектаИзМетаданных получает из объекта -// метаданных название с учетом порядка: -// - РасширенноеПредставлениеОбъекта, если не задано, тогда -// - ПредставлениеОбъекта, если не задано, тогда -// - Синоним, если не задан, тогда -// - Имя -// -// Параметры: -// МетаданныеОбъекта - ОбъектМетаданных -// -// Возвращаемое значение: -// Строка -// -Функция НазваниеОбъектаИзМетаданных(МетаданныеОбъекта) Экспорт - - Если ЗначениеЗаполнено(МетаданныеОбъекта.РасширенноеПредставлениеОбъекта) Тогда - НазваниеОбъекта = МетаданныеОбъекта.РасширенноеПредставлениеОбъекта; - ИначеЕсли ЗначениеЗаполнено(МетаданныеОбъекта.ПредставлениеОбъекта) Тогда - НазваниеОбъекта = МетаданныеОбъекта.ПредставлениеОбъекта; - ИначеЕсли ЗначениеЗаполнено(МетаданныеОбъекта.Синоним) Тогда - НазваниеОбъекта = МетаданныеОбъекта.Синоним; - Иначе - НазваниеОбъекта = МетаданныеОбъекта.Имя; - КонецЕсли; - - Возврат НазваниеОбъекта; - -КонецФункции - -// Процедура ОбновитьРолиПользователейПриИзмененииГруппыДоступа вызывается -// из обработчика ПриЗаписи группы доступа -// Процедура только для внутреннего использования -// -Процедура ОбновитьРолиПользователейПриИзмененииГруппыДоступа(ГруппаДоступа, СтарыеУчастникиГруппыДоступа, ЕстьОшибки = Ложь) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - // Обновление ролей для добавленных, оставшихся и удаленных пользователей. - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ГруппаДоступа", ГруппаДоступа); - Запрос.УстановитьПараметр("СтарыеУчастникиГруппыДоступа", СтарыеУчастникиГруппыДоступа); - Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ПользователиИГруппыПользователей.ЗначениеДоступа КАК Пользователь - |ИЗ - | РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей - |ГДЕ - | ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) - | И ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ - | И ПользователиИГруппыПользователей.ГруппаДоступа В(&СтарыеУчастникиГруппыДоступа) - | И (ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.Пользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи)) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ПользователиИГруппыПользователей.ЗначениеДоступа - |ИЗ - | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей - | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) - | И (ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ) - | И ГруппыДоступаПользователи.Пользователь = ПользователиИГруппыПользователей.ГруппаДоступа - | И (ГруппыДоступаПользователи.Ссылка = &ГруппаДоступа) - | И (ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.Пользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи))"; - СтарыеИНовыеПользователи = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); - - Если ГруппаДоступа = Справочники.ГруппыДоступа.Администраторы Тогда - // Добавление пользователей, связанных с пользователямиИБ, имеющих роль ПолныеПрава - Для каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл - Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда - Пользователь = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); - Если НЕ ЗначениеЗаполнено(Пользователь) Тогда - Пользователь = Справочники.ВнешниеПользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); - КонецЕсли; - Если ЗначениеЗаполнено(Пользователь) - И СтарыеИНовыеПользователи.Найти(Пользователь) = Неопределено Тогда - СтарыеИНовыеПользователи.Добавить(Пользователь); - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - ОбновитьРолиПользователей(СтарыеИНовыеПользователи, ЕстьОшибки); - -КонецПроцедуры - -// Процедура ОбновитьНаборыЗначенийДоступа выполняет обновление -// наборов значений доступа объекта, если они изменились. +// Выполняет обновление наборов значений доступа объекта, если они изменились. // Наборы обновляются в табличной части (если используется) и -// в регистре сведений НаборыЗначенийДоступа +// в регистре сведений НаборыЗначенийДоступа. // // Параметры: // СсылкаНаОбъект - СправочникСсылка, ДокументСсылка, ... @@ -2730,10 +1564,10 @@ НСтр("ru = 'Ошибка при записи наборов значений доступа: |в регистре сведений НаборыЗначенийДоступа в измерении Объект |не задан тип %1'"), - Метаданные.НайтиПоТипу(ТипЗнч(СсылкаНаОбъект)).ПолноеИмя())); + СсылкаНаОбъект.Метаданные().ПолноеИмя())); КонецЕсли; - Если Метаданные.НайтиПоТипу(ТипЗнч(СсылкаНаОбъект)).ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда + Если СсылкаНаОбъект.Метаданные().ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда // Изменение объекта не требуется ЗаписатьНаборыЗначенийДоступа(Объект); Иначе @@ -2751,769 +1585,48 @@ КонецПроцедуры -// Функция возвращает значение константы -// ДобавлятьРуководителямДоступПодчиненных +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции, используемые в переопределяемом модуле + +// Возвращает структуру для удобства описания начальных профилей. // -Функция ДобавлятьРуководителямДоступПодчиненных() Экспорт +// Чтобы задать предустановленный вид доступа, +// нужно в представлении задать строку Предустановленный. +// +// Чтобы добавить значение доступа нужно задать +// полное имя предопределенного элемента, например, +// "Справочник.ГруппыПользователей.ВсеПользователи". +// +Функция НовоеОписаниеПрофиляГруппДоступа() Экспорт - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | Константы.ДобавлятьРуководителямДоступПодчиненных КАК Значение - |ИЗ - | Константы КАК Константы"); - - Возврат Запрос.Выполнить().Выгрузить()[0].Значение; + Возврат( Новый Структура("Идентификатор, + |Наименование, + |Описание, + |Роли, + |ВидыДоступа, + |ЗначенияДоступа", + "", + "", + "", + Новый Массив, + Новый СписокЗначений, + Новый СписокЗначений) ); КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ: начальное заполнение. +// Процедуры и функции, используемые для обновления вторичных данных -// Добавляет в список Обработчики процедуры-обработчики обновления, -// необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.Процедура = "УправлениеДоступом.ОбновитьПоставляемыеПрофилиИГруппыДоступа"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.Процедура = "УправлениеДоступом.ОбновитьТаблицыРолейПрофилейГруппДоступа"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.Процедура = "УправлениеДоступом.ОбновитьЗависимостиПравДоступа"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.Процедура = "УправлениеДоступом.ОбновитьТаблицыПравПоЗначениямДоступа"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.2.3"; - Обработчик.Процедура = "УправлениеДоступом.ОбновитьПодчиненностьПользователей_1_1_2_3"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.3.3"; - Обработчик.Процедура = "УправлениеДоступом.ПриИзмененииКонстантыДобавлятьРуководителямДоступПодчиненных"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.3.4"; - Обработчик.Процедура = "УправлениеДоступом.ОбновитьПодчиненностьПользователей_1_1"; - -КонецПроцедуры - -// Процедура ЕстьНачальноеЗаполнениеПрофиляГруппДоступа определяет наличие начального -// заполнения для профиля групп доступа в переопределяемом модуле. -// -// Параметры: -// Профиль - СправочникСсылка.ПрофилиГруппДоступа. -// -// Возвращаемое значение: -// Булево. -// -Функция ЕстьНачальноеЗаполнениеПрофиляГруппДоступа(Знач Профиль) Экспорт - - ОписанияПрофилей = УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); - - ОписаниеНайдено = Ложь; - Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл - Если ОписаниеПрофиля.Идентификатор = Строка(Профиль.УникальныйИдентификатор()) Тогда - ОписаниеНайдено = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - Возврат ОписаниеНайдено; - -КонецФункции - -// Процедура НачальноеЗаполнениеПрофилейГруппДоступа создает элементы -// в справочнике ПрофилиГруппДоступа, свойственные прикладному решению, -// и позволяет восстановить ранее заполненный элемент по его уникальному идентификатору, -// если для него предусмотрено начальное заполнение. -// Поиск начального заполнения осуществляется по строке уникального идентификатора профиля. -// -// Параметры: -// Профиль - Неопределено, СправочникСсылка.ПрофилиГруппДоступа. -// Если для указанного профиля описание начального заполнения найдено, -// содержимое профиля полностью замещается. -// ОбновитьГруппыДоступа -// - Булево, если Истина, виды доступа групп доступа профиля будут обновлены. -// НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа -// - Булево, если Истина, группы доступа не будут -// обновлены, если в них есть хотя бы один удаляемый вид доступа, -// по которому заданы значения доступа. -// -Процедура НачальноеЗаполнениеПрофилейГруппДоступа(Знач Профиль = Неопределено, ОбновитьГруппыДоступа = Ложь, НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа = Истина) Экспорт - - ОписанияПрофилей = УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); - - Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл - Если Профиль = Неопределено ИЛИ ОписаниеПрофиля.Идентификатор = Строка(Профиль.УникальныйИдентификатор()) Тогда - ОбновитьПрофильГруппДоступа(ОписаниеПрофиля); - Если ОбновитьГруппыДоступа Тогда - ОбновитьГруппыДоступаПрофиля(Профиль, НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа); - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Функция ОбновитьПрофильГруппДоступа замещает имеющийся или -// создает новый профиль групп доступа по его начальному описанию. -// -// Параметры: -// ОписаниеПрофиля - Структура (см. функцию НовоеОписаниеПрофиляГруппДоступа()). -// -// Возвращаемое значение: -// Булево. Истина - профиль изменен. -// -Функция ОбновитьПрофильГруппДоступа(ОписаниеПрофиля, НеОбновлятьРолиПользователей = Ложь) Экспорт - - ПрофильИзменен = Ложь; - - УникальныйИдентификаторПрофиля = Новый УникальныйИдентификатор(ОписаниеПрофиля.Идентификатор); - ПрофильСсылка = Справочники.ПрофилиГруппДоступа.ПолучитьСсылку(УникальныйИдентификаторПрофиля); - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа - |ГДЕ - | ПрофилиГруппДоступа.Ссылка = &Ссылка"); - Запрос.УстановитьПараметр("Ссылка", ПрофильСсылка); - Если Запрос.Выполнить().Пустой() Тогда - // Элемента данных нет, нужно создать новый. - ПрофильОбъект = Справочники.ПрофилиГруппДоступа.СоздатьЭлемент(); - ПрофильОбъект.УстановитьСсылкуНового(Справочники.ПрофилиГруппДоступа.ПолучитьСсылку(УникальныйИдентификаторПрофиля)); - ПрофильИзменен = Истина; - Иначе - ПрофильОбъект = ПрофильСсылка.ПолучитьОбъект(); - ПрофильИзменен = УправлениеДоступомСобытия.ПоставляемыйПрофильИзменен(ПрофильОбъект); - КонецЕсли; - - - Если ПрофильИзменен Тогда - ЗаблокироватьДанныеДляРедактирования(ПрофильОбъект.Ссылка, ПрофильОбъект.ВерсияДанных); - - ПрофильОбъект.Наименование = ОписаниеПрофиля.Наименование; - - ПрофильОбъект.Роли.Очистить(); - Для каждого Роль Из ОписаниеПрофиля.Роли Цикл - Строка = ПрофильОбъект.Роли.Добавить(); - Строка.Роль = Роль; - КонецЦикла; - - ПрофильОбъект.ВидыДоступа.Очистить(); - Для каждого ОписаниеВидаДоступа Из ОписаниеПрофиля.ВидыДоступа Цикл - Строка = ПрофильОбъект.ВидыДоступа.Добавить(); - Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа[ОписаниеВидаДоступа.Значение]; - Строка.Предустановленный = ОписаниеВидаДоступа.Представление = "Предустановленный"; - Строка.ДоступРазрешен = ОписаниеВидаДоступа.Представление = "ВначалеВсеРазрешены"; - КонецЦикла; - - ПрофильОбъект.ЗначенияДоступа.Очистить(); - Для каждого ОписаниеЗначенияДоступа Из ОписаниеПрофиля.ЗначенияДоступа Цикл - СтрокаЗначения = ПрофильОбъект.ЗначенияДоступа.Добавить(); - СтрокаЗначения.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа[ОписаниеЗначенияДоступа.Значение]; - Запрос = Новый Запрос(СтрЗаменить("Выбрать Значение(%1) КАК Значение", "%1", ОписаниеЗначенияДоступа.Представление)); - СтрокаЗначения.ЗначениеДоступа = Запрос.Выполнить().Выгрузить()[0].Значение; - КонецЦикла; - - Если НеОбновлятьРолиПользователей Тогда - ПрофильОбъект.ДополнительныеСвойства.Вставить("НеОбновлятьРолиПользователей"); - КонецЕсли; - ПрофильОбъект.Записать(); - РазблокироватьДанныеДляРедактирования(ПрофильОбъект.Ссылка); - КонецЕсли; - - Возврат ПрофильИзменен; - -КонецФункции - -// Процедура ОбновитьТаблицыРолейПрофилейГруппДоступа обновляет -// ТаблицыРолей каждого ПрофильГруппДоступа. -// -Процедура ОбновитьТаблицыРолейПрофилейГруппДоступа() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ПраваОМДРолей", УправлениеДоступомСерверПовтИсп.ОграничиваемыеПраваОбъектовМетаданныхРолей()); - Запрос.УстановитьПараметр("ТипыСсылок", УправлениеДоступомСерверПовтИсп.ТипыСсылок()); - - Запрос.Текст = - "ВЫБРАТЬ - | ПраваОМДРолей.Роль, - | ПраваОМДРолей.Таблица, - | ПраваОМДРолей.Добавление, - | ПраваОМДРолей.Изменение, - | ПраваОМДРолей.Удаление, - | ПраваОМДРолей.ТипТаблицы - |ПОМЕСТИТЬ ПраваОМДРолей - |ИЗ - | &ПраваОМДРолей КАК ПраваОМДРолей - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ТипыСсылок.Таблица, - | ТипыСсылок.ТипТаблицы - |ПОМЕСТИТЬ НовыеТипыСсылок - |ИЗ - | &ТипыСсылок КАК ТипыСсылок - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) КАК Профиль - |ИЗ - | Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК СтарыеТипыСсылок - | ЛЕВОЕ СОЕДИНЕНИЕ НовыеТипыСсылок КАК НовыеТипыСсылок - | ПО (НовыеТипыСсылок.Таблица = СтарыеТипыСсылок.Таблица) - | И (НовыеТипыСсылок.ТипТаблицы = СтарыеТипыСсылок.ТипТаблицы) - |ГДЕ - | СтарыеТипыСсылок.Ссылка = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) - | И НовыеТипыСсылок.Таблица ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) - |ИЗ - | НовыеТипыСсылок КАК НовыеТипыСсылок - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК СтарыеТипыСсылок - | ПО (СтарыеТипыСсылок.Ссылка = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)) - | И НовыеТипыСсылок.Таблица = СтарыеТипыСсылок.Таблица - | И НовыеТипыСсылок.ТипТаблицы = СтарыеТипыСсылок.ТипТаблицы - |ГДЕ - | СтарыеТипыСсылок.Таблица ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ТипыСсылок.Ссылка - |ИЗ - | Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК ТипыСсылок - |ГДЕ - | ТипыСсылок.Ссылка <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) - |ИЗ - | Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК ТаблицыРолей - |ГДЕ - | ТаблицыРолей.Ссылка = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | СтарыеТаблицы.Ссылка - |ИЗ - | Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК СтарыеТаблицы - | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | РолиПрофиля.Ссылка КАК Профиль, - | ПраваОМДРолей.Роль КАК Роль, - | ПраваОМДРолей.Таблица КАК Таблица, - | ПраваОМДРолей.Добавление КАК Добавление, - | ПраваОМДРолей.Изменение КАК Изменение, - | ПраваОМДРолей.Удаление КАК Удаление, - | ПраваОМДРолей.ТипТаблицы КАК ТипТаблицы - | ИЗ - | ПраваОМДРолей КАК ПраваОМДРолей - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофиля - | ПО ПраваОМДРолей.Роль = РолиПрофиля.Роль) КАК НовыеТаблицы - | ПО (НовыеТаблицы.Профиль = СтарыеТаблицы.Ссылка) - | И (НовыеТаблицы.Роль = СтарыеТаблицы.Роль) - | И (НовыеТаблицы.Таблица = СтарыеТаблицы.Таблица) - | И (НовыеТаблицы.Добавление = СтарыеТаблицы.Добавление) - | И (НовыеТаблицы.Изменение = СтарыеТаблицы.Изменение) - | И (НовыеТаблицы.Удаление = СтарыеТаблицы.Удаление) - | И (НовыеТаблицы.ТипТаблицы = СтарыеТаблицы.ТипТаблицы) - |ГДЕ - | НовыеТаблицы.Роль ЕСТЬ NULL - | И СтарыеТаблицы.Ссылка <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | НовыеТаблицы.Профиль - |ИЗ - | (ВЫБРАТЬ - | РолиПрофиля.Ссылка КАК Профиль, - | ПраваОМДРолей.Роль КАК Роль, - | ПраваОМДРолей.Таблица КАК Таблица, - | ПраваОМДРолей.Добавление КАК Добавление, - | ПраваОМДРолей.Изменение КАК Изменение, - | ПраваОМДРолей.Удаление КАК Удаление, - | ПраваОМДРолей.ТипТаблицы КАК ТипТаблицы - | ИЗ - | ПраваОМДРолей КАК ПраваОМДРолей - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофиля - | ПО ПраваОМДРолей.Роль = РолиПрофиля.Роль) КАК НовыеТаблицы - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК СтарыеТаблицы - | ПО НовыеТаблицы.Профиль = СтарыеТаблицы.Ссылка - | И НовыеТаблицы.Роль = СтарыеТаблицы.Роль - | И НовыеТаблицы.Таблица = СтарыеТаблицы.Таблица - | И НовыеТаблицы.Добавление = СтарыеТаблицы.Добавление - | И НовыеТаблицы.Изменение = СтарыеТаблицы.Изменение - | И НовыеТаблицы.Удаление = СтарыеТаблицы.Удаление - | И НовыеТаблицы.ТипТаблицы = СтарыеТаблицы.ТипТаблицы - |ГДЕ - | СтарыеТаблицы.Роль ЕСТЬ NULL - | И НовыеТаблицы.Профиль <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)"; - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - Объект = Выборка.Профиль.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка, Объект.ВерсияДанных); - Объект.ДополнительныеСвойства.Вставить("НеОбновлятьРеквизитПоставляемыйПрофильИзменен"); - Объект.Записать(); - РазблокироватьДанныеДляРедактирования(Объект.Ссылка); - КонецЦикла; - -КонецПроцедуры - -// Процедура ОбновитьЗависимостиПравДоступа обновляет -// содержимое регистра сведений ЗависимостиПравДоступа, -// если прикладной разработчик изменил зависимости. -// -Процедура ОбновитьЗависимостиПравДоступа() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - НаборЗаписей = РегистрыСведений.ЗависимостиПравДоступа.СоздатьНаборЗаписей(); - УправлениеДоступомПереопределяемый.ЗаполнитьЗависимостиПравДоступа(НаборЗаписей); - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | НовыеЗаписи.ПодчиненнаяТаблица, - | НовыеЗаписи.ТипВедущейТаблицы, - | НовыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы, - | НовыеЗаписи.ПриПроверкеПраваЧтение, - | НовыеЗаписи.ПриПроверкеПраваДобавление, - | НовыеЗаписи.ПриПроверкеПраваИзменение, - | НовыеЗаписи.ПриПроверкеПраваУдаление - |ПОМЕСТИТЬ НовыеЗаписи - |ИЗ - | &НовыеЗаписи КАК НовыеЗаписи - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.ЗависимостиПравДоступа КАК СтарыеЗаписи - | ЛЕВОЕ СОЕДИНЕНИЕ НовыеЗаписи КАК НовыеЗаписи - | ПО СтарыеЗаписи.ПодчиненнаяТаблица = НовыеЗаписи.ПодчиненнаяТаблица - | И СтарыеЗаписи.ТипВедущейТаблицы = НовыеЗаписи.ТипВедущейТаблицы - | И СтарыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы = НовыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы - | И СтарыеЗаписи.ПриПроверкеПраваЧтение = НовыеЗаписи.ПриПроверкеПраваЧтение - | И СтарыеЗаписи.ПриПроверкеПраваДобавление = НовыеЗаписи.ПриПроверкеПраваДобавление - | И СтарыеЗаписи.ПриПроверкеПраваИзменение = НовыеЗаписи.ПриПроверкеПраваИзменение - | И СтарыеЗаписи.ПриПроверкеПраваУдаление = НовыеЗаписи.ПриПроверкеПраваУдаление - |ГДЕ - | НовыеЗаписи.ПодчиненнаяТаблица ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - |ИЗ - | НовыеЗаписи КАК НовыеЗаписи - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗависимостиПравДоступа КАК СтарыеЗаписи - | ПО НовыеЗаписи.ПодчиненнаяТаблица = СтарыеЗаписи.ПодчиненнаяТаблица - | И НовыеЗаписи.ТипВедущейТаблицы = СтарыеЗаписи.ТипВедущейТаблицы - | И НовыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы = СтарыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы - | И НовыеЗаписи.ПриПроверкеПраваЧтение = СтарыеЗаписи.ПриПроверкеПраваЧтение - | И НовыеЗаписи.ПриПроверкеПраваДобавление = СтарыеЗаписи.ПриПроверкеПраваДобавление - | И НовыеЗаписи.ПриПроверкеПраваИзменение = СтарыеЗаписи.ПриПроверкеПраваИзменение - | И НовыеЗаписи.ПриПроверкеПраваУдаление = СтарыеЗаписи.ПриПроверкеПраваУдаление - |ГДЕ - | СтарыеЗаписи.ПодчиненнаяТаблица ЕСТЬ NULL "); - Запрос.УстановитьПараметр("НовыеЗаписи", НаборЗаписей); - - Если НЕ Запрос.Выполнить().Пустой() Тогда - НаборЗаписей.Записать(); - КонецЕсли; - -КонецПроцедуры - -// Процедура ОбновитьТаблицыВозможныхПравПоЗначениямДоступа выполняет -// обновление таблиц в регистре сведений ПраваПоЗначенияДоступа, -// когда изменена процедура ЗаполнитьВозможныеПраваПоЗначениямДоступа -// модуля УправлениеДоступомПереопределяемый -// -Процедура ОбновитьТаблицыПравПоЗначениямДоступа() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ВозможныеПрава = УправлениеДоступомСерверПовтИсп.ВозможныеПраваПоЗначениямДоступа(); - - ТаблицыПрав = Новый ТаблицаЗначений; - ТаблицыПрав.Колонки.Добавить("ВладелецПрав", Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа.Измерения.ЗначениеДоступа.Тип); - ТаблицыПрав.Колонки.Добавить("Право", Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа.Измерения.Право.Тип); - ТаблицыПрав.Колонки.Добавить("Таблица", Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа.Измерения.Таблица.Тип); - ТаблицыПрав.Колонки.Добавить("Чтение", Новый ОписаниеТипов("Булево")); - ТаблицыПрав.Колонки.Добавить("Добавление", Новый ОписаниеТипов("Булево")); - ТаблицыПрав.Колонки.Добавить("Изменение", Новый ОписаниеТипов("Булево")); - ТаблицыПрав.Колонки.Добавить("Удаление", Новый ОписаниеТипов("Булево")); - - Для каждого ОписаниеПрава Из ВозможныеПрава Цикл - ВладелецПрав = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОписаниеПрава.ВладелецПрав).ПустаяСсылка(); - Если ТаблицыПрав.Колонки.ВладелецПрав.ТипЗначения.СодержитТип(ТипЗнч(ВладелецПрав)) Тогда - Для каждого Таблица Из ОписаниеПрава.ЧтениеВТаблицах Цикл - НоваяТаблица = ТаблицыПрав.Добавить(); - НоваяТаблица.ВладелецПрав = ВладелецПрав; - НоваяТаблица.Право = ОписаниеПрава.Имя; - НоваяТаблица.Таблица = Таблица; - НоваяТаблица.Чтение = Истина; - КонецЦикла; - Для каждого Таблица Из ОписаниеПрава.ДобавлениеВТаблицах Цикл - НоваяТаблица = ТаблицыПрав.Добавить(); - НоваяТаблица.ВладелецПрав = ВладелецПрав; - НоваяТаблица.Право = ОписаниеПрава.Имя; - НоваяТаблица.Таблица = Таблица; - НоваяТаблица.Добавление = Истина; - КонецЦикла; - Для каждого Таблица Из ОписаниеПрава.ИзменениеВТаблицах Цикл - НоваяТаблица = ТаблицыПрав.Добавить(); - НоваяТаблица.ВладелецПрав = ВладелецПрав; - НоваяТаблица.Право = ОписаниеПрава.Имя; - НоваяТаблица.Таблица = Таблица; - НоваяТаблица.Изменение = Истина; - КонецЦикла; - Для каждого Таблица Из ОписаниеПрава.УдалениеВТаблицах Цикл - НоваяТаблица = ТаблицыПрав.Добавить(); - НоваяТаблица.ВладелецПрав = ВладелецПрав; - НоваяТаблица.Право = ОписаниеПрава.Имя; - НоваяТаблица.Таблица = Таблица; - НоваяТаблица.Удаление = Истина; - КонецЦикла; - КонецЕсли; - КонецЦикла; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ТаблицыПрав", ТаблицыПрав); - Запрос.Текст = - "ВЫБРАТЬ - | ТаблицыПрав.ВладелецПрав, - | ТаблицыПрав.Право, - | ТаблицыПрав.Таблица, - | ТаблицыПрав.Чтение, - | ТаблицыПрав.Добавление, - | ТаблицыПрав.Изменение, - | ТаблицыПрав.Удаление - |ПОМЕСТИТЬ ТаблицыПрав - |ИЗ - | &ТаблицыПрав КАК ТаблицыПрав - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | НовыеЗаписи.ЗначениеДоступа, - | НовыеЗаписи.Пользователь, - | НовыеЗаписи.Право, - | НовыеЗаписи.Таблица, - | НовыеЗаписи.Запрещено, - | НовыеЗаписи.РаспространяетсяВИерархии, - | НовыеЗаписи.Чтение, - | НовыеЗаписи.ЧтениеЗапрещено, - | НовыеЗаписи.Добавление, - | НовыеЗаписи.ДобавлениеЗапрещено, - | НовыеЗаписи.Изменение, - | НовыеЗаписи.ИзменениеЗапрещено, - | НовыеЗаписи.Удаление, - | НовыеЗаписи.УдалениеЗапрещено - |ИЗ - | (ВЫБРАТЬ - | ПраваПоЗначениям.ЗначениеДоступа КАК ЗначениеДоступа, - | ПраваПоЗначениям.Пользователь КАК Пользователь, - | ПраваПоЗначениям.Право КАК Право, - | ПраваПоЗначениям.Запрещено КАК Запрещено, - | ПраваПоЗначениям.РаспространяетсяВИерархии КАК РаспространяетсяВИерархии, - | ЕСТЬNULL(ТаблицыПрав.Таблица, """") КАК Таблица, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) - | КОНЕЦ КАК Чтение, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ЧтениеЗапрещено, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) - | КОНЕЦ КАК Добавление, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ДобавлениеЗапрещено, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) - | КОНЕЦ КАК Изменение, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ИзменениеЗапрещено, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) - | КОНЕЦ КАК Удаление, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК УдалениеЗапрещено - | ИЗ - | (ВЫБРАТЬ - | ПраваПоЗначениямДоступа.ЗначениеДоступа КАК ЗначениеДоступа, - | ПраваПоЗначениямДоступа.Пользователь КАК Пользователь, - | ПраваПоЗначениямДоступа.Право КАК Право, - | МАКСИМУМ(ПраваПоЗначениямДоступа.Запрещено) КАК Запрещено, - | МАКСИМУМ(ПраваПоЗначениямДоступа.РаспространяетсяВИерархии) КАК РаспространяетсяВИерархии - | ИЗ - | РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениямДоступа - | - | СГРУППИРОВАТЬ ПО - | ПраваПоЗначениямДоступа.ЗначениеДоступа, - | ПраваПоЗначениямДоступа.Пользователь, - | ПраваПоЗначениямДоступа.Право) КАК ПраваПоЗначениям - | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицыПрав КАК ТаблицыПрав - | ПО (ТИПЗНАЧЕНИЯ(ПраваПоЗначениям.ЗначениеДоступа) = ТИПЗНАЧЕНИЯ(ТаблицыПрав.ВладелецПрав)) - | И ПраваПоЗначениям.Право = ТаблицыПрав.Право) КАК НовыеЗаписи - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПраваПоЗначениямДоступа КАК ТекущиеЗаписи - | ПО НовыеЗаписи.ЗначениеДоступа = ТекущиеЗаписи.ЗначениеДоступа - | И НовыеЗаписи.Пользователь = ТекущиеЗаписи.Пользователь - | И НовыеЗаписи.Право = ТекущиеЗаписи.Право - | И НовыеЗаписи.Таблица = ТекущиеЗаписи.Таблица - | И НовыеЗаписи.Запрещено = ТекущиеЗаписи.Запрещено - | И НовыеЗаписи.РаспространяетсяВИерархии = ТекущиеЗаписи.РаспространяетсяВИерархии - | И НовыеЗаписи.Чтение = ТекущиеЗаписи.Чтение - | И НовыеЗаписи.ЧтениеЗапрещено = ТекущиеЗаписи.ЧтениеЗапрещено - | И НовыеЗаписи.Добавление = ТекущиеЗаписи.Добавление - | И НовыеЗаписи.ДобавлениеЗапрещено = ТекущиеЗаписи.ДобавлениеЗапрещено - | И НовыеЗаписи.Изменение = ТекущиеЗаписи.Изменение - | И НовыеЗаписи.ИзменениеЗапрещено = ТекущиеЗаписи.ИзменениеЗапрещено - | И НовыеЗаписи.Удаление = ТекущиеЗаписи.Удаление - | И НовыеЗаписи.УдалениеЗапрещено = ТекущиеЗаписи.УдалениеЗапрещено - |ГДЕ - | ТекущиеЗаписи.ЗначениеДоступа ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | НовыеЗаписи.ЗначениеДоступа, - | НовыеЗаписи.Пользователь, - | НовыеЗаписи.Право, - | НовыеЗаписи.Таблица - |ИЗ - | РегистрСведений.ПраваПоЗначениямДоступа КАК ТекущиеЗаписи - | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | ПраваПоЗначениям.ЗначениеДоступа КАК ЗначениеДоступа, - | ПраваПоЗначениям.Пользователь КАК Пользователь, - | ПраваПоЗначениям.Право КАК Право, - | ПраваПоЗначениям.Запрещено КАК Запрещено, - | ПраваПоЗначениям.РаспространяетсяВИерархии КАК РаспространяетсяВИерархии, - | ЕСТЬNULL(ТаблицыПрав.Таблица, """") КАК Таблица, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) - | КОНЕЦ КАК Чтение, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ЧтениеЗапрещено, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) - | КОНЕЦ КАК Добавление, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ДобавлениеЗапрещено, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) - | КОНЕЦ КАК Изменение, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ИзменениеЗапрещено, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) - | КОНЕЦ КАК Удаление, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК УдалениеЗапрещено - | ИЗ - | (ВЫБРАТЬ - | ПраваПоЗначениямДоступа.ЗначениеДоступа КАК ЗначениеДоступа, - | ПраваПоЗначениямДоступа.Пользователь КАК Пользователь, - | ПраваПоЗначениямДоступа.Право КАК Право, - | МАКСИМУМ(ПраваПоЗначениямДоступа.Запрещено) КАК Запрещено, - | МАКСИМУМ(ПраваПоЗначениямДоступа.РаспространяетсяВИерархии) КАК РаспространяетсяВИерархии - | ИЗ - | РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениямДоступа - | - | СГРУППИРОВАТЬ ПО - | ПраваПоЗначениямДоступа.ЗначениеДоступа, - | ПраваПоЗначениямДоступа.Пользователь, - | ПраваПоЗначениямДоступа.Право) КАК ПраваПоЗначениям - | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицыПрав КАК ТаблицыПрав - | ПО (ТИПЗНАЧЕНИЯ(ПраваПоЗначениям.ЗначениеДоступа) = ТИПЗНАЧЕНИЯ(ТаблицыПрав.ВладелецПрав)) - | И ПраваПоЗначениям.Право = ТаблицыПрав.Право) КАК НовыеЗаписи - | ПО НовыеЗаписи.ЗначениеДоступа = ТекущиеЗаписи.ЗначениеДоступа - | И НовыеЗаписи.Пользователь = ТекущиеЗаписи.Пользователь - | И НовыеЗаписи.Право = ТекущиеЗаписи.Право - | И НовыеЗаписи.Таблица = ТекущиеЗаписи.Таблица - | И НовыеЗаписи.Запрещено = ТекущиеЗаписи.Запрещено - | И НовыеЗаписи.РаспространяетсяВИерархии = ТекущиеЗаписи.РаспространяетсяВИерархии - | И НовыеЗаписи.Чтение = ТекущиеЗаписи.Чтение - | И НовыеЗаписи.ЧтениеЗапрещено = ТекущиеЗаписи.ЧтениеЗапрещено - | И НовыеЗаписи.Добавление = ТекущиеЗаписи.Добавление - | И НовыеЗаписи.ДобавлениеЗапрещено = ТекущиеЗаписи.ДобавлениеЗапрещено - | И НовыеЗаписи.Изменение = ТекущиеЗаписи.Изменение - | И НовыеЗаписи.ИзменениеЗапрещено = ТекущиеЗаписи.ИзменениеЗапрещено - | И НовыеЗаписи.Удаление = ТекущиеЗаписи.Удаление - | И НовыеЗаписи.УдалениеЗапрещено = ТекущиеЗаписи.УдалениеЗапрещено - |ГДЕ - | НовыеЗаписи.ЗначениеДоступа ЕСТЬ NULL "; - - РезультатыЗапроса = Запрос.ВыполнитьПакет(); - - Для каждого ОписаниеУдаляемойЗаписи ИЗ РезультатыЗапроса[2].Выгрузить() Цикл - МенеджерЗаписи = РегистрыСведений.ПраваПоЗначениямДоступа.СоздатьМенеджерЗаписи(); - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ОписаниеУдаляемойЗаписи); - МенеджерЗаписи.Удалить(); - КонецЦикла; - - НаборЗаписей = РегистрыСведений.ПраваПоЗначениямДоступа.СоздатьНаборЗаписей(); - НаборЗаписей.Загрузить(РезультатыЗапроса[1].Выгрузить()); - Если НаборЗаписей.Количество() > 0 Тогда - НаборЗаписей.Записать(Ложь); - КонецЕсли; - -КонецПроцедуры - -// Обработчик ПриИзмененииОграниченияДоступаНаУровнеЗаписей вызывается из -// обработчика ПриЗаписи константы. При необходимости включает заполнение -// данных для ограничения доступа. -// -Процедура ПриИзмененииОграниченияДоступаНаУровнеЗаписей(ОграничениеДоступаНаУровнеЗаписейВключено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ОграничениеДоступаНаУровнеЗаписейВключено Тогда - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'"), - УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Начато заполнение данных для ограничения доступа'"), - РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - - // Дополнительно обновим таблицы прав, т.к. они будут использоваться - // в процедуре заполнения регистра сведений ТаблицыГруппДоступа. - ОбновитьТаблицыРолейПрофилейГруппДоступа(); - - // Обновим РегистрСведений.ТаблицыГруппДоступа, - // и РегистрСведений.ЗначенияГруппДоступа. - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ГруппыДоступа.Ссылка - |ИЗ - | Справочник.ГруппыДоступа КАК ГруппыДоступа - |ГДЕ - | (НЕ ГруппыДоступа.ЭтоГруппа)"); - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ОбновитьТаблицыГруппДоступа(Выборка.Ссылка); - ЗаписатьЗначенияГруппДоступа(Выборка.Ссылка); - КонецЦикла; - - Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа); - Задание.Использование = Истина; - Задание.Записать(); - КонецЕсли; - - // Обновление параметров сеанса. - // Требуется для того, чтобы администратор не выполнял перезапуск. - УстановленныеПараметры = Новый Массив; - УстановкаПараметровСеанса("ОграничиватьДоступПоВиду", УстановленныеПараметры); - -КонецПроцедуры - -// Обработчик ПриИзмененииКонстантыДобавлятьРуководителямДоступПодчиненных вызывается из -// обработчика ПриЗаписи константы. -// -Процедура ПриИзмененииКонстантыДобавлятьРуководителямДоступПодчиненных() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыПользователей.ВсеПользователи); - ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); - - // Обновление параметра сеанса. - // Требуется для того, чтобы администратор не выполнял перезапуск. - УстановленныеПараметры = Новый Массив; - УстановкаПараметровСеанса("ДобавлятьРуководителямДоступПодчиненных", УстановленныеПараметры); - -КонецПроцедуры - -// Обработчик обновления информационной базы -Процедура ОбновитьПодчиненностьПользователей_1_1_2_3() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Константы.ДобавлятьРуководителямДоступПодчиненных.Установить(Ложь); - Константы.ДобавлятьРуководителямДоступПодчиненных.Установить(Истина); - -КонецПроцедуры - -// Обработчик обновления информационной базы -Процедура ОбновитьПодчиненностьПользователей_1_1() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыПользователей.ВсеПользователи); - ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ: обработчики подписок на события и регламентного задания - -// Процедура ЗаписатьГруппыИВидыДоступа перезаписывает группы и виды доступа ЗначенияДоступа, +// Перезаписывает группы значения доступа и виды доступа значения доступа // в РегистрСведений.ГруппыЗначенийДоступа, используя объект или ссылку на объект. -// Процедура вызывается из УправлениеДоступомСобытия.ЗаписатьГруппыДоступа(), -// но может быть вызвана из любого места, например, при включении ограничения доступа на уровне записи. +// Вызывается из УправлениеДоступомСобытия.ЗаписатьГруппыДоступа(), но может быть вызвана +// из любого места, например, при включении ограничения доступа на уровне записи. +// +// В частности используется для обновления группировок пользователей, +// при изменении источника данных, используемого в тексте запроса, указанного +// в функции "УправлениеДоступомПереопределяемый.ТаблицаГруппИсполнителей()". +// Способ вызова из прикладного кода: +// УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыПользователей.ВсеПользователи); // // Параметры: // Объект - объект или ссылка на объект (обычно Справочник<Объект|Ссылка>). @@ -3522,7 +1635,7 @@ // Ссылка объекта должна быть типа ОписаниеТипов измерения Значение // в РегистрСведений.ГруппыЗначенийДоступа. // -Процедура ЗаписатьГруппыИВидыДоступа(Знач Объект, Отказ = Ложь, ЕстьОшибки = Ложь) Экспорт +Процедура ЗаписатьГруппыИВидыДоступа(Знач Объект) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -3553,8 +1666,14 @@ Запрос.УстановитьПараметр("ВнешнийПользователь", СсылкаНаОбъект); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда - ПредставлениеДругогоТипаОбъектаАвторизации = Метаданные.НайтиПоТипу(ТипЗнч(Выборка.ТипПользователей)).Синоним; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Внешний пользователь ""%1"" используется в группе доступа ""%2"" с другим типом объектов информационной базы ""%3"".'"), Строка(СсылкаНаОбъект), Выборка.СсылкаПредставление, ПредставлениеДругогоТипаОбъектаАвторизации), , , , Отказ); + ПредставлениеДругогоТипаОбъектаАвторизации = Выборка.ТипПользователей.Метаданные().Синоним; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Внешний пользователь ""%1"" + |используется в группе доступа ""%2"" + |с другим типом объектов информационной базы ""%3"".'"), + Строка(СсылкаНаОбъект), + Выборка.СсылкаПредставление, + ПредставлениеДругогоТипаОбъектаАвторизации); Возврат; КонецЕсли; @@ -3575,9 +1694,14 @@ Запрос.УстановитьПараметр("ГруппаВнешнихПользователей", СсылкаНаОбъект); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда - ПредставлениеДругогоТипаОбъектаАвторизации = Метаданные.НайтиПоТипу(ТипЗнч(Выборка.ТипПользователей)).Синоним; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Группа внешних пользователей ""%1"" используется в группе доступа ""%2"" с другим типом объектов информационной базы ""%3"".'"), Строка(СсылкаНаОбъект), Выборка.СсылкаПредставление, ПредставлениеДругогоТипаОбъектаАвторизации), , , , Отказ); - Возврат; + ПредставлениеДругогоТипаОбъектаАвторизации = Выборка.ТипПользователей.Метаданные().Синоним; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Группа внешних пользователей ""%1"" + |используется в группе доступа ""%2"" + |с другим типом объектов информационной базы ""%3"".'"), + Строка(СсылкаНаОбъект), + Выборка.СсылкаПредставление, + ПредставлениеДругогоТипаОбъектаАвторизации); КонецЕсли; КонецЕсли; @@ -4112,10 +2236,7 @@ ИзмененныеПользователи = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); КонецЕсли; - ОбновитьРолиПользователей(ИзмененныеПользователи, ЕстьОшибки); - Если ЕстьОшибки Тогда - Объект.ДополнительныеСвойства.Вставить("ЕстьОшибки"); - КонецЕсли; + ОбновитьРолиПользователей(ИзмененныеПользователи); Иначе ВидыДоступа = ВидыДоступаТаблицы(СсылкаНаОбъект.Метаданные().ПолноеИмя()); @@ -4255,14 +2376,703 @@ КонецЕсли; -КонецПроцедуры // ЗаписатьГруппыИВидыДоступа() +КонецПроцедуры -// Процедура ЗаписатьНаборыЗначенийДоступа перезаписывает наборы значений доступа проверяемого объекта -// в РегистрСведений.НаборыЗначенийДоступа, используя процедуру УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа(). +// Обновляет список ролей пользователей информационной базы +// по их текущим принадлежностям к группам доступа. +// Пользователи с ролью "ПолныеПрава" игнорируется. +// +// Параметры: +// МассивПользователей - Массив элементов СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи. +// +Процедура ОбновитьРолиПользователей(Знач МассивПользователей) Экспорт + + Если НЕ ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда + // Роли устанавливаются механизмами подсистем Пользователи и ВнешниеПользователи. + Возврат; + КонецЕсли; + + Если МассивПользователей.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Пользователи.НайтиНеоднозначныхПользователейИБ(); + + // Все пользователи, внешние пользователи и администраторы + Запрос = Новый Запрос( + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Пользователь + |ПОМЕСТИТЬ ВсеПользователи + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.Ссылка В(&Пользователи) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ГруппыДоступаПользователи.Пользователь + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + |ГДЕ + | ГруппыДоступаПользователи.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ВнешниеПользователи.Ссылка + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |ГДЕ + | ВнешниеПользователи.Ссылка В(&Пользователи) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВсеПользователи.Пользователь, + | ВЫБОР + | КОГДА (НЕ Пользователи.Ссылка ЕСТЬ NULL ) + | ТОГДА Пользователи.ИдентификаторПользователяИБ + | КОГДА (НЕ ВнешниеПользователи.Ссылка ЕСТЬ NULL ) + | ТОГДА ВнешниеПользователи.ИдентификаторПользователяИБ + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ КАК ИдентификаторПользователяИБ + |ИЗ + | ВсеПользователи КАК ВсеПользователи + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи + | ПО (Пользователи.Ссылка = ВсеПользователи.Пользователь) + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК ВнешниеПользователи + | ПО (ВнешниеПользователи.Ссылка = ВсеПользователи.Пользователь)"); + Запрос.УстановитьПараметр("Пользователи", МассивПользователей); + ОбновляемыеПользователи = Запрос.Выполнить().Выгрузить(); + + // Подготовка таблицы старых ролей пользователей. + СтарыеРолиПользователей = Новый ТаблицаЗначений; + СтарыеРолиПользователей.Колонки.Добавить("Пользователь", Новый ОписаниеТипов("СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи")); + СтарыеРолиПользователей.Колонки.Добавить("Роль", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(200))); + + ТекущийНомер = ОбновляемыеПользователи.Количество() - 1; + Пока ТекущийНомер >= 0 Цикл + // Проверка необходимости обработки пользователя. + ИдентификаторПользователяИБ = ОбновляемыеПользователи[ТекущийНомер].ИдентификаторПользователяИБ; + Если ТипЗнч(ИдентификаторПользователяИБ) = Тип("УникальныйИдентификатор") Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ); + Иначе + ПользовательИБ = Неопределено; + КонецЕсли; + Если ПользовательИБ = Неопределено ИЛИ ПустаяСтрока(ПользовательИБ.Имя) Тогда + ОбновляемыеПользователи.Удалить(ОбновляемыеПользователи[ТекущийНомер]); + Иначе + Для каждого Роль Из ПользовательИБ.Роли Цикл + СтараяРольПользователя = СтарыеРолиПользователей.Добавить(); + СтараяРольПользователя.Пользователь = ОбновляемыеПользователи[ТекущийНомер].Пользователь; + СтараяРольПользователя.Роль = Роль.Имя; + КонецЦикла; + КонецЕсли; + ТекущийНомер = ТекущийНомер - 1; + КонецЦикла; + + // Подготовка списка ролей отсутствующих в метаданных и которые нужно переустановить. + Запрос.Текст = + "ВЫБРАТЬ + | СтарыеРолиПользователей.Пользователь, + | СтарыеРолиПользователей.Роль + |ПОМЕСТИТЬ СтарыеРолиПользователей + |ИЗ + | &СтарыеРолиПользователей КАК СтарыеРолиПользователей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВсеДоступныеРоли.Имя КАК Имя + |ПОМЕСТИТЬ ВсеДоступныеРоли + |ИЗ + | &ВсеДоступныеРоли КАК ВсеДоступныеРоли + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ГруппыДоступаПользователи.Пользователь + |ПОМЕСТИТЬ Администраторы + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + |ГДЕ + | ГруппыДоступаПользователи.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы) + | И ГруппыДоступаПользователи.Пользователь В(&ОбновляемыеПользователи) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | СтарыеРолиПользователей.Пользователь + |ИЗ + | СтарыеРолиПользователей КАК СтарыеРолиПользователей + | ЛЕВОЕ СОЕДИНЕНИЕ Константа.ИспользоватьРазделениеПоОбластямДанных КАК ИспользоватьРазделениеПоОбластямДанных + | ПО (ИСТИНА) + |ГДЕ + | СтарыеРолиПользователей.Роль = ""ПолныеПрава"" + | И ИспользоватьРазделениеПоОбластямДанных.Значение = ЛОЖЬ + | И НЕ ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + | ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + | ГДЕ + | ГруппыДоступаПользователи.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы) + | И ГруппыДоступаПользователи.Пользователь В (&ОбновляемыеПользователи)) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СтарыеРолиПользователей.Пользователь + |ПОМЕСТИТЬ СнятыеАдминистраторы + |ИЗ + | СтарыеРолиПользователей КАК СтарыеРолиПользователей + |ГДЕ + | СтарыеРолиПользователей.Роль = ""ПолныеПрава"" + | И НЕ СтарыеРолиПользователей.Пользователь В + | (ВЫБРАТЬ + | Администраторы.Пользователь + | ИЗ + | Администраторы КАК Администраторы) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПользователиИГруппыПользователей.ЗначениеДоступа КАК Пользователь, + | Роли.Ссылка КАК Профиль, + | Роли.Роль + |ПОМЕСТИТЬ ВсеНовыеРолиПользователей + |ИЗ + | Справочник.ПрофилиГруппДоступа.Роли КАК Роли + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) + | И (ПользователиИГруппыПользователей.ЗначениеДоступа В (&ОбновляемыеПользователи)) + | И (ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ) + | И (ПользователиИГруппыПользователей.ГруппаДоступа = ГруппыДоступаПользователи.Пользователь) + | И (НЕ ГруппыДоступаПользователи.Ссылка.ПометкаУдаления) + | ПО Роли.Ссылка = ГруппыДоступаПользователи.Ссылка.Профиль + | И (НЕ Роли.Ссылка.ПометкаУдаления) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВсеНовыеРолиПользователей.Пользователь, + | ВсеНовыеРолиПользователей.Роль + |ПОМЕСТИТЬ НовыеРолиПользователей + |ИЗ + | ВсеНовыеРолиПользователей КАК ВсеНовыеРолиПользователей + |ГДЕ + | ВсеНовыеРолиПользователей.Роль <> ""ПолныеПрава"" + | И ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + | ИЗ + | ВсеДоступныеРоли КАК ВсеДоступныеРоли + | ГДЕ + | ВсеДоступныеРоли.Имя = ВсеНовыеРолиПользователей.Роль) + | И НЕ ВсеНовыеРолиПользователей.Пользователь В + | (ВЫБРАТЬ + | Администраторы.Пользователь + | ИЗ + | Администраторы КАК Администраторы) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | Администраторы.Пользователь, + | ""ПолныеПрава"" + |ИЗ + | Администраторы КАК Администраторы + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | Администраторы.Пользователь, + | ""АдминистраторСистемы"" + |ИЗ + | Администраторы КАК Администраторы + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Константа.ИспользоватьРазделениеПоОбластямДанных КАК ИспользоватьРазделениеПоОбластямДанных + | ПО (ИспользоватьРазделениеПоОбластямДанных.Значение = ЛОЖЬ) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СтарыеРолиПользователей.Пользователь + |ПОМЕСТИТЬ ИзмененныеПользователи + |ИЗ + | СтарыеРолиПользователей КАК СтарыеРолиПользователей + | ЛЕВОЕ СОЕДИНЕНИЕ НовыеРолиПользователей КАК НовыеРолиПользователей + | ПО (НовыеРолиПользователей.Пользователь = СтарыеРолиПользователей.Пользователь) + | И (НовыеРолиПользователей.Роль = СтарыеРолиПользователей.Роль) + |ГДЕ + | НовыеРолиПользователей.Роль ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | НовыеРолиПользователей.Пользователь + |ИЗ + | НовыеРолиПользователей КАК НовыеРолиПользователей + | ЛЕВОЕ СОЕДИНЕНИЕ СтарыеРолиПользователей КАК СтарыеРолиПользователей + | ПО НовыеРолиПользователей.Пользователь = СтарыеРолиПользователей.Пользователь + | И НовыеРолиПользователей.Роль = СтарыеРолиПользователей.Роль + |ГДЕ + | СтарыеРолиПользователей.Роль ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | СнятыеАдминистраторы.Пользователь + |ИЗ + | СнятыеАдминистраторы КАК СнятыеАдминистраторы + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВсеНовыеРолиПользователей.Пользователь, + | ВсеНовыеРолиПользователей.Профиль, + | ВсеНовыеРолиПользователей.Роль + |ИЗ + | ВсеНовыеРолиПользователей КАК ВсеНовыеРолиПользователей + |ГДЕ + | НЕ ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + | ИЗ + | ВсеДоступныеРоли КАК ВсеДоступныеРоли + | ГДЕ + | ВсеДоступныеРоли.Имя = ВсеНовыеРолиПользователей.Роль)"; + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Запрос.УстановитьПараметр("ВсеДоступныеРоли", ПользователиСерверПовтИсп.ВсеРоли()); + Запрос.УстановитьПараметр("ОбновляемыеПользователи", ОбновляемыеПользователи); + Запрос.УстановитьПараметр("СтарыеРолиПользователей", СтарыеРолиПользователей); + + // Регистрация ошибок имен ролей в профилях групп доступа. + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ЗаписьЖурналаРегистрации(НСтр("ru = 'Управление доступом.Роль не найдена в метаданных'"), + УровеньЖурналаРегистрации.Ошибка, + , + , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru= 'При обновлении ролей пользователя ""<%1>"" роль ""<%2>"" профиля групп доступа ""<%3>"" не найдена в метаданных.'"), + СокрЛП(Выборка.Пользователь.Наименование), + Выборка.Роль, + Выборка.Профиль), + РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); + КонецЦикла; + + // Обновление ролей пользователейИБ. + Запрос.Текст = + "ВЫБРАТЬ + | ИзмененныеПользователиИРоли.Пользователь, + | ИзмененныеПользователиИРоли.Роль + |ПОМЕСТИТЬ ИзмененныеПользователиИРоли + |ИЗ + | (ВЫБРАТЬ + | НовыеРолиПользователей.Пользователь КАК Пользователь, + | НовыеРолиПользователей.Роль КАК Роль + | ИЗ + | НовыеРолиПользователей КАК НовыеРолиПользователей + | ГДЕ + | НовыеРолиПользователей.Пользователь В + | (ВЫБРАТЬ + | ИзмененныеПользователи.Пользователь + | ИЗ + | ИзмененныеПользователи КАК ИзмененныеПользователи) + | + | ОБЪЕДИНИТЬ + | + | ВЫБРАТЬ + | Пользователи.Ссылка, + | """" + | ИЗ + | Справочник.Пользователи КАК Пользователи + | ГДЕ + | Пользователи.Ссылка В + | (ВЫБРАТЬ + | ИзмененныеПользователи.Пользователь + | ИЗ + | ИзмененныеПользователи КАК ИзмененныеПользователи) + | + | ОБЪЕДИНИТЬ + | + | ВЫБРАТЬ + | ВнешниеПользователи.Ссылка, + | """" + | ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + | ГДЕ + | ВнешниеПользователи.Ссылка В + | (ВЫБРАТЬ + | ИзмененныеПользователи.Пользователь + | ИЗ + | ИзмененныеПользователи КАК ИзмененныеПользователи)) КАК ИзмененныеПользователиИРоли + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ИзмененныеПользователиИРоли.Пользователь, + | ИзмененныеПользователиИРоли.Роль + |ИЗ + | ИзмененныеПользователиИРоли КАК ИзмененныеПользователиИРоли + | + |УПОРЯДОЧИТЬ ПО + | ВЫБОР + | КОГДА (ИзмененныеПользователиИРоли.Пользователь, ""ПолныеПрава"") В + | (ВЫБРАТЬ + | ИзмененныеПользователиИРоли.Пользователь, + | ИзмененныеПользователиИРоли.Роль + | ИЗ + | ИзмененныеПользователиИРоли КАК ИзмененныеПользователиИРоли) + | ТОГДА 0 + | ИНАЧЕ 1 + | КОНЕЦ, + | ИзмененныеПользователиИРоли.Пользователь, + | ИзмененныеПользователиИРоли.Роль"; + Выборка = Запрос.Выполнить().Выбрать(); + + ПользовательИБ = Неопределено; + Пока Выборка.Следующий() Цикл + Если НЕ ЗначениеЗаполнено(Выборка.Роль) Тогда + Если ПользовательИБ <> Неопределено Тогда + ПользовательИБ.Записать(); + КонецЕсли; + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ОбновляемыеПользователи.Найти(Выборка.Пользователь, "Пользователь").ИдентификаторПользователяИБ); + ПользовательИБ.Роли.Очистить(); + Иначе + ПользовательИБ.Роли.Добавить(Метаданные.Роли[Выборка.Роль]); + КонецЕсли; + КонецЦикла; + Если ПользовательИБ <> Неопределено Тогда + Пользователи.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции, используемые при обновлении информационной базы + +// Обновляет поставляемые профили, и при необходимости обновляет группы доступа этих профилей. +// Создаются не найденные поставляемые профили групп доступа. +// +// Параметры: +// ТолькоНеИзмененные - Булево, обновлять только те поставляемые профили групп доступа, +// у которых реквизит ПоставляемыйПрофильИзменен = Ложь. +// +// ОбновлятьГруппыДоступа - Булево, обновлять группы доступа +// обновляемых профилей групп доступа. +// +// УдаляемыеВидыДоступаБезНастройки - Булево, обновлять только те группы доступа, +// обновляемых профилей групп доступа, у которых настройки видов доступа +// остались неизменными, т.е. все значения, кроме указанных запрещены и +// список заданных значений пуст. +// +Процедура ОбновитьПоставляемыеПрофилиИГруппыДоступа(ТолькоНеИзмененные = Истина, ОбновлятьГруппыДоступа = Истина, УдаляемыеВидыДоступаБезНастройки = Истина) Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен, + | ПрофилиГруппДоступа.Ссылка + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа"); + ТекущиеПрофили = Запрос.Выполнить().Выгрузить(); + + ОписанияПрофилей = УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); + ОбновленныеПрофили = Новый Массив; + ОбновленныеГруппыДоступа = Новый Массив; + + Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл + + Профиль = Справочники.ПрофилиГруппДоступа.ПолучитьСсылку(Новый УникальныйИдентификатор(ОписаниеПрофиля.Идентификатор)); + СтрокаТекущегоПрофиля = ТекущиеПрофили.Найти(Профиль, "Ссылка"); + ПрофильОбновлен = Ложь; + + Если СтрокаТекущегоПрофиля = Неопределено Тогда + // Создание нового поставляемого профиля. + ОбновитьПрофильГруппДоступа(ОписаниеПрофиля); + ИначеЕсли НЕ СтрокаТекущегоПрофиля.ПоставляемыйПрофильИзменен ИЛИ НЕ ТолькоНеИзмененные Тогда + // Обновление поставляемого профиля. + ПрофильОбновлен = ОбновитьПрофильГруппДоступа(ОписаниеПрофиля, Истина); + КонецЕсли; + + Если ОбновлятьГруппыДоступа Тогда + ГруппыДоступаПрофиляОбновлены = ОбновитьГруппыДоступаПрофиля(Профиль, УдаляемыеВидыДоступаБезНастройки); + ПрофильОбновлен = ПрофильОбновлен ИЛИ ГруппыДоступаПрофиляОбновлены; + КонецЕсли; + + Если ПрофильОбновлен Тогда + ОбновленныеПрофили.Добавить(Профиль); + КонецЕсли; + КонецЦикла; + + // Обновление ролей пользователей. + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПользователиИГруппыПользователей.ЗначениеДоступа КАК Пользователь + |ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) + | И (ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ) + | И ПользователиИГруппыПользователей.ГруппаДоступа = ГруппыДоступаПользователи.Пользователь + | И (ГруппыДоступаПользователи.Ссылка.Профиль В (&Профили)) + | И (ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи))"); + Запрос.УстановитьПараметр("Профили", ОбновленныеПрофили); + ПользователиДляОбновления = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); + ОбновитьРолиПользователей(ПользователиДляОбновления); + +КонецПроцедуры + +// Обновляет имена ролей в профилях групп доступа, +// если они были переименованы в конфигураторе, +// например, при обновлении информационной базы. +// +// Параметры: +// ПереименованныеРоли - ТаблицаЗначений (СтароеИмяРоли, НовоеИмяРоли) +// если НовоеИмяРоли не задано, роль удаляется. +// +Процедура ОбновитьПереименованныеРоли(ПереименованныеРоли) Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПрофилиГруппДоступаРоли.Ссылка + |ИЗ + | Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли + |ГДЕ + | ПрофилиГруппДоступаРоли.Роль В(&СтарыеИменаРолей)"); + Запрос.УстановитьПараметр("СтарыеИменаРолей", ПереименованныеРоли.ВыгрузитьКолонку("СтароеИмяРоли")); + ОбновляемыеПрофили = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Для каждого ОбновляемыйПрофиль Из ОбновляемыеПрофили Цикл + ПрофильОбъект = ОбновляемыйПрофиль.ПолучитьОбъект(); + ПрофильОбъект.ОбменДанными.Загрузка = Истина; + Для каждого ПереименованнаяРоль Из ПереименованныеРоли Цикл + НайденнаяСтрока = ПрофильОбъект.Роли.Найти(ПереименованнаяРоль.СтароеИмяРоли, "Роль"); + Если НайденнаяСтрока <> Неопределено Тогда + Если ЗначениеЗаполнено(ПереименованнаяРоль.НовоеИмяРоли) Тогда + НайденнаяСтрока.Роль = ПереименованнаяРоль.НовоеИмяРоли; + Иначе + ПрофильОбъект.Роли.Удалить(НайденнаяСтрока); + КонецЕсли; + КонецЕсли; + КонецЦикла; + ПрофильОбъект.Записать(); + КонецЦикла; + + Для каждого ОбновляемыйПрофиль Из ОбновляемыеПрофили Цикл + ПрофильОбъект = ОбновляемыйПрофиль.ПолучитьОбъект(); + ПрофильОбъект.Записать(); + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Устанавливает параметры сеанса по текущим настройкам констант и +// настройкам групп доступа пользователей. +// Вызывается ПриНачалеРаботыСистемы. +// +Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ Константы.ОграничиватьДоступНаУровнеЗаписей.Получить() Тогда + // Для корректной работы препроцессора в ограничениях доступа, требуется инициализации всех + // параметров сеанса, которые могут быть востребованы в работе препроцессора. + Если ИмяПараметра = "ВидыДоступаЕдинственныеДляТипаЗначенияДоступа" ИЛИ + ИмяПараметра = "ВидыДоступаБезГруппЗначенияДоступа" Тогда + ПараметрыСеанса[ИмяПараметра] = Новый ФиксированныйМассив(Новый Массив); + // + ИначеЕсли ИмяПараметра = "ДобавлятьРуководителямДоступПодчиненных" Тогда + ПараметрыСеанса[ИмяПараметра] = Ложь; + Иначе + ПараметрыСеанса[ИмяПараметра] = ""; + КонецЕсли; + УстановленныеПараметры.Добавить(ИмяПараметра); + Возврат; + КонецЕсли; + + ПараметрыСеанса.ДобавлятьРуководителямДоступПодчиненных = Константы.ДобавлятьРуководителямДоступПодчиненных.Получить(); + УстановленныеПараметры.Добавить("ДобавлятьРуководителямДоступПодчиненных"); + + // Следующие виды доступа не самостоятельные, + // поэтому не учитываются при расчете необходимости ограничения в целом. + // В стандартных шаблонах проверка по этим видам доступа всегда выполняется, + // а в препроцессоре проверка использования не выполнятся. + ПараметрыСеанса.ОграничиватьДоступПоВидуУсловие = ""; + ПараметрыСеанса.ОграничиватьДоступПоВидуОбъект = ""; + УстановленныеПараметры.Добавить("ОграничиватьДоступПоВидуУсловие"); + УстановленныеПараметры.Добавить("ОграничиватьДоступПоВидуОбъект"); + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВидыДоступаПрофилейГруппДоступа.ВидДоступа + |ИЗ + | Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ВидыДоступаПрофилейГруппДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) + | И (ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь) + | И (ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ) + | И (ПользователиИГруппыПользователей.ГруппаДоступа = ГруппыДоступаПользователи.Пользователь) + | ПО ГруппыДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка + | И ((НЕ ГруппыДоступа.ПометкаУдаления)) + | ПО (ГруппыДоступа.Профиль = ВидыДоступаПрофилейГруппДоступа.Ссылка) + | И ((НЕ ВидыДоступаПрофилейГруппДоступа.Ссылка.ПометкаУдаления))"); + Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); + ОграничиваемыеВидыДоступа = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ВидДоступа"); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ВидыДоступа.Ссылка КАК ВидДоступа + |ИЗ + | ПланВидовХарактеристик.ВидыДоступа КАК ВидыДоступа + |ГДЕ + | ВидыДоступа.Предопределенный"); + Выборка = Запрос.Выполнить().Выбрать(); + + КаждыйВидЕдинственный = Истина; + КаждыйВидБезГрупп = Истина; + + ВидыДоступаБезОграничения = Новый Массив; + ВидыДоступаЕдинственныеДляТипаЗначенияДоступа = Новый Массив; + ВидыДоступаБезГруппЗначенияДоступа = Новый Массив; + ВидыДоступаЧерезПраваПоЗначениямДоступа = Новый Массив; + + Пока Выборка.Следующий() Цикл + + СвойстваВидаДоступа = СвойстваВидаДоступа(Выборка.ВидДоступа); + + Если СвойстваВидаДоступа.ВидДоступаИспользуетсяВсегда Тогда + // Такие виды доступа не самостоятельные, поэтому не учитываются при расчете + // необходимости ограничения в целом. + // В стандартных шаблонах проверка по этим видам доступа всегда выполняется, + // а в препроцессоре проверка использования не выполнятся. + ОписаниеВидаДоступа = ""; + + ИначеЕсли НЕ СвойстваВидаДоступа.ВидДоступаИспользуется Тогда + ОписаниеВидаДоступа = ""; + ВидыДоступаБезОграничения.Добавить(Выборка.ВидДоступа); + + ИначеЕсли ОграничиваемыеВидыДоступа.Найти(Выборка.ВидДоступа) = Неопределено Тогда + ОписаниеВидаДоступа = ""; + ВидыДоступаБезОграничения.Добавить(Выборка.ВидДоступа); + + ИначеЕсли СвойстваВидаДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа Тогда + ОписаниеВидаДоступа = "ЧерезПраваПоЗначениямДоступа"; + ВидыДоступаЧерезПраваПоЗначениямДоступа.Добавить(Выборка.ВидДоступа); + Иначе + Если СвойстваВидаДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа Тогда + ОписаниеВидаДоступа = "ЕдинственныйВид, "; + ВидыДоступаЕдинственныеДляТипаЗначенияДоступа.Добавить(Выборка.ВидДоступа); + Иначе + ОписаниеВидаДоступа = "ОдинИзМногихВидов,"; + КаждыйВидЕдинственный = Ложь; + КонецЕсли; + Если СвойстваВидаДоступа.ВидДоступаБезГруппЗначенияДоступа Тогда + ОписаниеГрупп = "БезГрупп"; + ВидыДоступаБезГруппЗначенияДоступа.Добавить(Выборка.ВидДоступа); + Иначе + ОписаниеГрупп = ?(СвойстваВидаДоступа.ВидДоступаСОднойГруппойЗначенияДоступа, "ОднаГруппа", "МножествоГрупп"); + КаждыйВидБезГрупп = Ложь; + КонецЕсли; + ОписаниеВидаДоступа = ОписаниеВидаДоступа + ОписаниеГрупп; + КонецЕсли; + ИмяВидаДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПолучитьИмяПредопределенного(Выборка.ВидДоступа); + ПараметрыСеанса["ОграничиватьДоступПоВиду" + ИмяВидаДоступа] = ОписаниеВидаДоступа; + УстановленныеПараметры.Добавить("ОграничиватьДоступПоВиду" + ИмяВидаДоступа); + КонецЦикла; + + ПараметрыСеанса.ВидыДоступаБезОграничения = Новый ФиксированныйМассив(ВидыДоступаБезОграничения); + УстановленныеПараметры.Добавить("ВидыДоступаБезОграничения"); + + ПараметрыСеанса.ВидыДоступаЕдинственныеДляТипаЗначенияДоступа = Новый ФиксированныйМассив(ВидыДоступаЕдинственныеДляТипаЗначенияДоступа); + УстановленныеПараметры.Добавить("ВидыДоступаЕдинственныеДляТипаЗначенияДоступа"); + + ПараметрыСеанса.ВидыДоступаБезГруппЗначенияДоступа = Новый ФиксированныйМассив(ВидыДоступаБезГруппЗначенияДоступа); + УстановленныеПараметры.Добавить("ВидыДоступаБезГруппЗначенияДоступа"); + + ПараметрыСеанса.ВидыДоступаЧерезПраваПоЗначениямДоступа = ?(ВидыДоступаЧерезПраваПоЗначениямДоступа.Количество() = 0, + "", + Новый ФиксированныйМассив(ВидыДоступаЧерезПраваПоЗначениямДоступа)); + УстановленныеПараметры.Добавить("ВидыДоступаЧерезПраваПоЗначениямДоступа"); + + Если КаждыйВидЕдинственный И КаждыйВидБезГрупп Тогда + ПараметрыСеанса.ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп"; + ИначеЕсли КаждыйВидЕдинственный Тогда + ПараметрыСеанса.ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный"; + ИначеЕсли КаждыйВидБезГрупп Тогда + ПараметрыСеанса.ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп"; + Иначе + ПараметрыСеанса.ОграничиватьДоступПоВиду = "Да"; + КонецЕсли; + УстановленныеПараметры.Добавить("ОграничиватьДоступПоВиду"); + +КонецПроцедуры // УстановитьПараметрыСеансаОграниченияДоступа() + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "УправлениеДоступом.ОбновитьПоставляемыеПрофилиИГруппыДоступа"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "УправлениеДоступом.ОбновитьТаблицыРолейПрофилейГруппДоступа"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "УправлениеДоступом.ОбновитьЗависимостиПравДоступа"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "УправлениеДоступом.ОбновитьТаблицыПравПоЗначениямДоступа"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.2.3"; + Обработчик.Процедура = "УправлениеДоступом.ОбновитьПодчиненностьПользователей_1_1_2_3"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.3.3"; + Обработчик.Процедура = "УправлениеДоступом.ПриИзмененииКонстантыДобавлятьРуководителямДоступПодчиненных"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.3.4"; + Обработчик.Процедура = "УправлениеДоступом.ОбновитьПодчиненностьПользователей_1_1"; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события + +// Перезаписывает наборы значений доступа проверяемого объекта +// в РегистрСведений.НаборыЗначенийДоступа, используя процедуру +// УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа(). // // Процедура вызывается из УправлениеДоступомСобытия.ЗаписатьНаборыЗначенийДоступа(), // но может быть вызвана из любого места, например, при включении ограничения доступа на уровне записей. // +// Вызывает процедуру прикладного разработчика +// УправлениеДоступомПереопределяемый.ПриИзмененииНаборовЗначенийДоступа(), +// которая используется для перезаписи зависимых наборов значений доступа. +// // Параметры: // Объект - СправочникОбъект, ДокументОбъект, ..., или СправочникСсылка, ДокументСсылка, ... // В случае вызова с клиента можно передать только ссылку, а нужен объект. @@ -4294,7 +3104,7 @@ НСтр("ru = 'Ошибка при записи наборов значений доступа: |в регистре сведений НаборыЗначенийДоступа в измерении Объект |не задан тип %1'"), - Метаданные.НайтиПоТипу(ТипЗнч(СсылкаНаОбъект)).ПолноеИмя())); + СсылкаНаОбъект.Метаданные().ПолноеИмя())); КонецЕсли; НаборЗаписей = РегистрыСведений.НаборыЗначенийДоступа.СоздатьНаборЗаписей(); @@ -4340,10 +3150,7 @@ КонецПроцедуры -// Процедура ЗаписатьЗависимыеНаборыЗначенийДоступа, так же как и процедура -// УправлениеДоступом.ЗаписатьНаборыЗначенийДоступа вызывает процедуру прикладного разработчика -// УправлениеДоступомПереопределяемый.ПриИзмененииНаборовЗначенийДоступа(), -// которая используется для перезаписи зависимых наборов значений доступа. +// Перезаписывает наборы значений доступа зависимых объектов. // // Процедура вызывается из УправлениеДоступомСобытия.ЗаписатьЗависимыеНаборыЗначенийДоступа(), // состав типов подписки дополняет (без пересечения) состав типов подписки ЗаписатьНаборыЗначенийДоступа, @@ -4352,6 +3159,11 @@ // из справочника "Файлы" могут входить в состав некоторых бизнес-процессов "Задание", созданных // на основании файлов, при этом наборы файлов записывать в регистр не требуется. // +// Вызывает процедуру прикладного разработчика +// УправлениеДоступомПереопределяемый.ПриИзмененииНаборовЗначенийДоступа(), +// которая используется для перезаписи зависимых наборов значений доступа, +// то есть организуется рекурсия. +// // Параметры: // Объект - СправочникОбъект, ДокументОбъект, ..., или СправочникСсылка, ДокументСсылка, ... // В случае вызова с клиента можно передать только ссылку, а нужен объект. @@ -4381,31 +3193,35 @@ КонецПроцедуры -// Процедура ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания напрямую -// из регламентного задания ЗаполнениеДанныхДляОграниченияДоступа -// Используется для переадресации вызова процедуре с параметром: -// ЗаполнениеДанныхДляОграниченияДоступа() -// +// Обработчик регламентного задания ЗаполнениеДанныхДляОграниченияДоступа. Процедура ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания() Экспорт ЗаполнениеДанныхДляОграниченияДоступа(); КонецПроцедуры -// Процедура ЗаполнениеДанныхДляОграниченияДоступа вызывается из регламентного задания -// ЗаполнениеДанныхДляОграниченияДоступа через обработчик -// ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания -// Процедура выполняет последовательное заполнение данных, необходимых для работы -// подсистемы УправленияДоступом в режиме ограничения доступа на уровне записей, -// в связи с чем, запускается после включения этого режима и работает до окончания заполнения -// Сведения о состоянии работы, процедура записываются в журнал регистрации -// Заполнение реализуется порциями за счет удаления вторичных данных -// в отключенном режиме ограничения доступа на уровне записей, поэтому все данные актуальны -// При отсутствии ограничения на уровне записей, выполняется только обновление вторичных данных -// Возможно вызывать программно, например, при обновлении информационной базы +//////////////////////////////////////////////////////////////////////////////// +// Обработчики регламентных заданий + +// Выполняет последовательное заполнение и обновление данных, необходимых для работы +// подсистемы УправленияДоступом в режиме ограничения доступа на уровне записей. +// +// При включенном режиме ограничения доступа на уровне записей заполняет наборы +// значений доступа. Заполнение выполняется частями при каждом запуске, пока все +// наборы значений доступа не будут заполнены. +// При отключении режима ограничения доступа на уровне записей наборы значений доступа +// (заполненные ранее) удаляются при перезаписи объектов, а не все сразу. +// Независимо от режима ограничения доступа на уровне записей обновляет вторичные +// данные: группы значений доступа и дополнительные поля в существующих наборах значений доступа. +// После завершения всех обновлений и заполнений отключает использование регламентного +// задания. +// +// Сведения о состоянии работы записываются в журнал регистрации. +// +// Возможно вызывать программно, например, при обновлении информационной базы. // Также для целей обновления есть форма Справочник.ГруппыДоступа.ОбновлениеДанныхОграниченияДоступа, // с помощью которой можно сделать интерактивное обновление данных ограничения доступа -// при обновлении информационной базы +// при обновлении информационной базы. // Процедура ЗаполнениеДанныхДляОграниченияДоступа(КоличествоДанных = 0) Экспорт @@ -4658,202 +3474,825 @@ УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Завершено заполнение данных для ограничения доступа'"), РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа); - Задание.Использование = Ложь; - Задание.Записать(); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + СтандартныеПодсистемыПереопределяемый.УстановитьИспользованиеЗаданияЗаполненияДанныхУправленияДоступом(Ложь); + Иначе + Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа); + Задание.Использование = Ложь; + Задание.Записать(); + КонецЕсли; Иначе ЗаписьЖурналаРегистрации(НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'"), УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Выполнена запись порции данных для ограничения доступа'"), РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа); - Задание.Использование = Истина; - Задание.Записать(); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + СтандартныеПодсистемыПереопределяемый.УстановитьИспользованиеЗаданияЗаполненияДанныхУправленияДоступом(Истина); + Иначе + Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа); + Задание.Использование = Истина; + Задание.Записать(); + КонецЕсли; КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ИНТЕРФЕЙСНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Процедуры и функции для работы с видами доступа -// Функция СформироватьДанныеВыбораЗначенияДоступа возвращает список -// значений доступа не помеченных на удаление. -// Используется в обработчиках событий ОкончаниеВводаТекста и АвтоПодбор. +// Возвращает свойства вида доступа, используя функцию +// УправлениеДоступомСерверПовтИсп.СвойстваВидовДоступа(). // // Параметры: -// Текст - Строка, символы введенные пользователем. -// ВключаяГруппы - Булево, если Истина, включать группы пользователей и внешних пользователей. -// ВидДоступа - ПланыВидовХарактеристикСсылка.ВидыДоступа, значения доступа которого выбираются. +// ВидДоступа - ПланВидовХарактеристикСсылка.ВидыДоступа, Неопределено. // -Функция СформироватьДанныеВыбораЗначенияДоступа(Знач Текст, Знач ВидДоступа, ВключаяГруппы = Истина) Экспорт +// Возвращаемое значение: +// Неопределено - когда для вида доступа свойств не найдено, +// ТаблицаЗначений или СтрокаТаблицыЗначений с полями: +// описание которых см. в комментарии к функции +// УправлениеДоступомСерверПовтИсп.СвойстваВидовДоступа(). +// +Функция СвойстваВидаДоступа(Знач ВидДоступа = Неопределено) Экспорт - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Текст", Текст + "%"); - Запрос.УстановитьПараметр("ВключаяГруппы", ВключаяГруппы); - Запрос.Текст = - "ВЫБРАТЬ - | ПредставленияПеречислений.Ссылка, - | ПредставленияПеречислений.Наименование КАК Наименование - |ПОМЕСТИТЬ ПредставленияПеречислений - |ИЗ - | &ПредставленияПеречислений КАК ПредставленияПеречислений - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | НЕОПРЕДЕЛЕНО КАК Ссылка, - | """" КАК Наименование - |ГДЕ - | ЛОЖЬ"; + СвойстваВидовДоступа = УправлениеДоступомСерверПовтИсп.СвойстваВидовДоступа().Скопировать(); - ЗапросПредставленийПеречислений = Новый Запрос; - ЗапросПредставленийПеречислений.Текст = - "ВЫБРАТЬ - | """" КАК Ссылка, - | """" КАК Наименование - |ГДЕ - | ЛОЖЬ"; + Если ВидДоступа = Неопределено Тогда - Для каждого Тип Из ВидДоступа.ТипЗначения.Типы() Цикл - - МетаданныеТипа = Метаданные.НайтиПоТипу(Тип); - - ПолноеИмяТаблицы = МетаданныеТипа.ПолноеИмя(); - - Если ( Метаданные.Справочники.Содержит(МетаданныеТипа) - ИЛИ Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеТипа) ) - И МетаданныеТипа.Иерархический - И МетаданныеТипа.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов - И НЕ ВключаяГруппы Тогда - - УсловиеДляГруппы = "НЕ Таблица.ЭтоГруппа"; - Иначе - УсловиеДляГруппы = "Истина"; - КонецЕсли; - - Если Метаданные.Перечисления.Содержит(МетаданныеТипа) Тогда - // - ЗапросПредставленийПеречислений.Текст = ЗапросПредставленийПеречислений.Текст + Символы.ПС + Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + Символы.ПС; - ЗапросПредставленийПеречислений.Текст = ЗапросПредставленийПеречислений.Текст + СтрЗаменить( - "ВЫБРАТЬ - | Таблица.Ссылка, - | ПРЕДСТАВЛЕНИЕ(Таблица.Ссылка) КАК Наименование - |ИЗ - | &ПолноеИмяТаблицы КАК Таблица", "&ПолноеИмяТаблицы", ПолноеИмяТаблицы); - Иначе - Запрос.Текст = Запрос.Текст + Символы.ПС + Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + Символы.ПС; - Запрос.Текст = Запрос.Текст + СтрЗаменить(СтрЗаменить( - "ВЫБРАТЬ - | Таблица.Ссылка, - | Таблица.Наименование - |ИЗ - | &ПолноеИмяТаблицы КАК Таблица - |ГДЕ - | (НЕ Таблица.ПометкаУдаления) - | И Таблица.Наименование ПОДОБНО &Текст - | И &УсловиеДляГруппы", "&ПолноеИмяТаблицы", ПолноеИмяТаблицы), "&УсловиеДляГруппы", УсловиеДляГруппы); - КонецЕсли; - КонецЦикла; - - Запрос.УстановитьПараметр("ПредставленияПеречислений", ЗапросПредставленийПеречислений.Выполнить().Выгрузить()); - Запрос.Текст = Запрос.Текст + Символы.ПС + Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + Символы.ПС; - Запрос.Текст = Запрос.Текст + - "ВЫБРАТЬ - | ПредставленияПеречислений.Ссылка, - | ПредставленияПеречислений.Наименование - |ИЗ - | ПредставленияПеречислений КАК ПредставленияПеречислений - |ГДЕ - | ПредставленияПеречислений.Наименование ПОДОБНО &Текст"; - - ДанныеВыбора = Новый СписокЗначений; + Возврат СвойстваВидовДоступа; + Иначе + Возврат СвойстваВидовДоступа.Найти(ВидДоступа, "ВидДоступа"); + КонецЕсли; +КонецФункции - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл +// Возвращает массив видов доступа для таблицы с указанным именем. +// +// Параметры: +// Таблица - Строка, как в фукнции ПолноеИмя() объекта метаданных. +// +// Возвращаемое значение: +// Массив - элементы типа ПланВидовХарактеристикСсылка.ВидыДоступа. +// +Функция ВидыДоступаТаблицы(Знач Таблица) Экспорт + + ВидыДоступа = Новый Массив; + + Для каждого СвойстваВидаДоступа Из УправлениеДоступомСерверПовтИсп.СвойстваВидовДоступа() Цикл + + Если СвойстваВидаДоступа.Таблицы.Найти(Таблица) <> Неопределено Тогда - ДанныеВыбора.Добавить(Выборка.Ссылка, Выборка.Наименование); + ВидыДоступа.Добавить(СвойстваВидаДоступа.ВидДоступа); + КонецЕсли; КонецЦикла; - Возврат ДанныеВыбора; + Возврат ВидыДоступа; КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Процедуры и функции для работы с профилями групп доступа -// Выполняется перед записью в регистр НаборыЗначенийДоступа или -// перед записью объекта с табличной частью НаборыЗначенийДоступа -// Заполняет вторичные данные, ускоряющие работу шаблонов ограничений доступа +// Замещает имеющийся или создает новый профиль групп доступа по его начальному описанию. // // Параметры: -// СсылкаНаОбъект - СправочникСсылка.*, ДокументСсылка.*, ... -// Таблица - ТабличнаяЧасть (или ТаблицаЗначений), РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа +// ОписаниеПрофиля - Структура (см. функцию НовоеОписаниеПрофиляГруппДоступа()). +// +// Возвращаемое значение: +// Булево. Истина - профиль изменен. // -Процедура ПодготовкаНаборовЗначенийДоступаПередЗаписью(СсылкаНаОбъект, Таблица) Экспорт +Функция ОбновитьПрофильГруппДоступа(ОписаниеПрофиля, НеОбновлятьРолиПользователей = Ложь) Экспорт - ПодготовкаНабораЗаписей = ТипЗнч(Таблица) = Тип("РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа"); + ПрофильИзменен = Ложь; - // Нормализация ресурсов Чтение, Добавление, Изменение, Удаление. - НомерНабора = -1; - Для каждого Строка Из Таблица Цикл + УникальныйИдентификаторПрофиля = Новый УникальныйИдентификатор(ОписаниеПрофиля.Идентификатор); + ПрофильСсылка = Справочники.ПрофилиГруппДоступа.ПолучитьСсылку(УникальныйИдентификаторПрофиля); + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + |ГДЕ + | ПрофилиГруппДоступа.Ссылка = &Ссылка"); + Запрос.УстановитьПараметр("Ссылка", ПрофильСсылка); + Если Запрос.Выполнить().Пустой() Тогда + // Элемента данных нет, нужно создать новый. + ПрофильОбъект = Справочники.ПрофилиГруппДоступа.СоздатьЭлемент(); + ПрофильОбъект.УстановитьСсылкуНового(Справочники.ПрофилиГруппДоступа.ПолучитьСсылку(УникальныйИдентификаторПрофиля)); + ПрофильИзменен = Истина; + Иначе + ПрофильОбъект = ПрофильСсылка.ПолучитьОбъект(); + ПрофильИзменен = УправлениеДоступомСобытия.ПоставляемыйПрофильИзменен(ПрофильОбъект); + КонецЕсли; + + + Если ПрофильИзменен Тогда + ЗаблокироватьДанныеДляРедактирования(ПрофильОбъект.Ссылка, ПрофильОбъект.ВерсияДанных); - Если ПодготовкаНабораЗаписей Тогда - // Установка значения измерения Объект - Строка.Объект = СсылкаНаОбъект; - // Заполнение свойств вида доступа: - // ВидДоступаБезГруппЗначенияДоступа, - // ВидДоступаЕдинственныйДляТипаЗначенияДоступа, - // ВидДоступаЧерезПраваПоЗначениямДоступа - СвойстваВидаДоступа = СвойстваВидаДоступа(Строка.ВидДоступа); - Если СвойстваВидаДоступа <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(Строка, СвойстваВидаДоступа(Строка.ВидДоступа)); - КонецЕсли; - // Установка типа объекта для одной строки всех наборов (в качестве типа пустая ссылка) - Если НомерНабора = -1 Тогда - ТипыОбъекта = Новый Массив; - ТипыОбъекта.Добавить(ТипЗнч(СсылкаНаОбъект)); - ОписаниеТипаОбъекта = Новый ОписаниеТипов(ТипыОбъекта); - Строка.ТипОбъекта = ОписаниеТипаОбъекта.ПривестиЗначение(Неопределено); - КонецЕсли; - // Установка типа значения доступа для значений доступа по видам доступа - // ПравоЧтения, ПравоДобавления, ПравоИзменения (в качестве типа пустая ссылка) - Если Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПравоЧтения - ИЛИ Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПравоДобавления - ИЛИ Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПравоИзменения Тогда - МенеджерОбъекта = ?(Строка.ЗначениеДоступа <> Неопределено, ОбщегоНазначения.МенеджерОбъектаПоСсылке(Строка.ЗначениеДоступа), Неопределено); - Если МенеджерОбъекта <> Неопределено Тогда - Строка.ТипЗначенияДоступа = МенеджерОбъекта.ПустаяСсылка(); - КонецЕсли; - КонецЕсли; + ПрофильОбъект.Наименование = ОписаниеПрофиля.Наименование; + + ПрофильОбъект.Роли.Очистить(); + Для каждого Роль Из ОписаниеПрофиля.Роли Цикл + Строка = ПрофильОбъект.Роли.Добавить(); + Строка.Роль = Роль; + КонецЦикла; + + ПрофильОбъект.ВидыДоступа.Очистить(); + Для каждого ОписаниеВидаДоступа Из ОписаниеПрофиля.ВидыДоступа Цикл + Строка = ПрофильОбъект.ВидыДоступа.Добавить(); + Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа[ОписаниеВидаДоступа.Значение]; + Строка.Предустановленный = ОписаниеВидаДоступа.Представление = "Предустановленный"; + Строка.ДоступРазрешен = ОписаниеВидаДоступа.Представление = "ВначалеВсеРазрешены"; + КонецЦикла; + + ПрофильОбъект.ЗначенияДоступа.Очистить(); + Для каждого ОписаниеЗначенияДоступа Из ОписаниеПрофиля.ЗначенияДоступа Цикл + СтрокаЗначения = ПрофильОбъект.ЗначенияДоступа.Добавить(); + СтрокаЗначения.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа[ОписаниеЗначенияДоступа.Значение]; + Запрос = Новый Запрос(СтрЗаменить("Выбрать Значение(%1) КАК Значение", "%1", ОписаниеЗначенияДоступа.Представление)); + СтрокаЗначения.ЗначениеДоступа = Запрос.Выполнить().Выгрузить()[0].Значение; + КонецЦикла; + + Если НеОбновлятьРолиПользователей Тогда + ПрофильОбъект.ДополнительныеСвойства.Вставить("НеОбновлятьРолиПользователей"); КонецЕсли; - - // Очистка флажков прав и соответствующих им вторичных данных - // для всех строк каждого набора, кроме первой строки - Если НомерНабора = Строка.НомерНабора Тогда - Строка.Чтение = Ложь; - Строка.Добавление = Ложь; - Строка.Изменение = Ложь; - Строка.Удаление = Ложь; - Иначе - НомерНабора = Строка.НомерНабора; + ПрофильОбъект.Записать(); + РазблокироватьДанныеДляРедактирования(ПрофильОбъект.Ссылка); + КонецЕсли; + + Возврат ПрофильИзменен; + +КонецФункции + +// Проверяет изменен ли поставляемый профиль по сравнению с описанием из функции +// УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(). +// +// Параметры: +// Профиль - СправочникСсылка.ПрофилиГруппДоступа. +// +// Возвращаемое значение: +// Строка. +// +Функция ОписаниеПоставляемогоПрофиля(Профиль) Экспорт + + ОписанияПрофилей = УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); + + Текст = ""; + Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл + Если ОписаниеПрофиля.Идентификатор = Строка(Профиль.УникальныйИдентификатор()) Тогда + Текст = ОписаниеПрофиля.Описание; КонецЕсли; - - Если ПодготовкаНабораЗаписей Тогда - // Описание прав Чтение, Добавление, Изменение через ссылки видов доступа для - // оптимизации работы механизма зависимостей по правам в шаблоне ограничения доступа - Строка.ВидДоступаПравоЧтения = ?(Строка.Чтение, ПланыВидовХарактеристик.ВидыДоступа.ПравоЧтения, ПланыВидовХарактеристик.ВидыДоступа.ПустаяСсылка()); - Строка.ВидДоступаПравоДобавления = ?(Строка.Добавление, ПланыВидовХарактеристик.ВидыДоступа.ПравоДобавления, ПланыВидовХарактеристик.ВидыДоступа.ПустаяСсылка()); - Строка.ВидДоступаПравоИзменения = ?(Строка.Изменение, ПланыВидовХарактеристик.ВидыДоступа.ПравоИзменения, ПланыВидовХарактеристик.ВидыДоступа.ПустаяСсылка()); + КонецЦикла; + + Возврат Текст; + +КонецФункции + +// Определяет наличие начального заполнения для профиля групп доступа в переопределяемом модуле. +// +// Параметры: +// Профиль - СправочникСсылка.ПрофилиГруппДоступа. +// +// Возвращаемое значение: +// Булево. +// +Функция ЕстьНачальноеЗаполнениеПрофиляГруппДоступа(Знач Профиль) Экспорт + + ОписанияПрофилей = УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); + + ОписаниеНайдено = Ложь; + Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл + Если ОписаниеПрофиля.Идентификатор = Строка(Профиль.УникальныйИдентификатор()) Тогда + ОписаниеНайдено = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат ОписаниеНайдено; + +КонецФункции + +// Создает элементы в справочнике ПрофилиГруппДоступа, свойственные прикладному решению, +// и позволяет восстановить ранее заполненный элемент по его уникальному идентификатору, +// если для него предусмотрено начальное заполнение. +// Поиск начального заполнения осуществляется по строке уникального идентификатора профиля. +// +// Параметры: +// Профиль - Неопределено, СправочникСсылка.ПрофилиГруппДоступа. +// Если для указанного профиля описание начального заполнения найдено, +// содержимое профиля полностью замещается. +// +// ОбновитьГруппыДоступа - Булево, если Истина, виды доступа групп доступа профиля будут обновлены. +// +// НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа - Булево, если Истина, группы доступа не будут +// обновлены, если в них есть хотя бы один удаляемый вид доступа, +// по которому заданы значения доступа. +// +Процедура НачальноеЗаполнениеПрофилейГруппДоступа(Знач Профиль = Неопределено, ОбновитьГруппыДоступа = Ложь, НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа = Истина) Экспорт + + ОписанияПрофилей = УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); + + Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл + Если Профиль = Неопределено ИЛИ ОписаниеПрофиля.Идентификатор = Строка(Профиль.УникальныйИдентификатор()) Тогда + ОбновитьПрофильГруппДоступа(ОписаниеПрофиля); + Если ОбновитьГруппыДоступа Тогда + ОбновитьГруппыДоступаПрофиля(Профиль, НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа); + КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры -// Только для внутреннего использования -// Вызывается при обновлении данных регистра сведений ГруппыЗначенийДоступа +// Обновляет табличную часть ТаблицыРолей каждого профиля групп доступа. +Процедура ОбновитьТаблицыРолейПрофилейГруппДоступа() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПраваОМДРолей", УправлениеДоступомСерверПовтИсп.ОграничиваемыеПраваОбъектовМетаданныхРолей()); + Запрос.УстановитьПараметр("ТипыСсылок", УправлениеДоступомСерверПовтИсп.ТипыСсылок()); + + Запрос.Текст = + "ВЫБРАТЬ + | ПраваОМДРолей.Роль, + | ПраваОМДРолей.Таблица, + | ПраваОМДРолей.Добавление, + | ПраваОМДРолей.Изменение, + | ПраваОМДРолей.Удаление, + | ПраваОМДРолей.ТипТаблицы + |ПОМЕСТИТЬ ПраваОМДРолей + |ИЗ + | &ПраваОМДРолей КАК ПраваОМДРолей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ТипыСсылок.Таблица, + | ТипыСсылок.ТипТаблицы + |ПОМЕСТИТЬ НовыеТипыСсылок + |ИЗ + | &ТипыСсылок КАК ТипыСсылок + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) КАК Профиль + |ИЗ + | Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК СтарыеТипыСсылок + | ЛЕВОЕ СОЕДИНЕНИЕ НовыеТипыСсылок КАК НовыеТипыСсылок + | ПО (НовыеТипыСсылок.Таблица = СтарыеТипыСсылок.Таблица) + | И (НовыеТипыСсылок.ТипТаблицы = СтарыеТипыСсылок.ТипТаблицы) + |ГДЕ + | СтарыеТипыСсылок.Ссылка = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + | И НовыеТипыСсылок.Таблица ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + |ИЗ + | НовыеТипыСсылок КАК НовыеТипыСсылок + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК СтарыеТипыСсылок + | ПО (СтарыеТипыСсылок.Ссылка = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)) + | И НовыеТипыСсылок.Таблица = СтарыеТипыСсылок.Таблица + | И НовыеТипыСсылок.ТипТаблицы = СтарыеТипыСсылок.ТипТаблицы + |ГДЕ + | СтарыеТипыСсылок.Таблица ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ТипыСсылок.Ссылка + |ИЗ + | Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК ТипыСсылок + |ГДЕ + | ТипыСсылок.Ссылка <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + |ИЗ + | Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК ТаблицыРолей + |ГДЕ + | ТаблицыРолей.Ссылка = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | СтарыеТаблицы.Ссылка + |ИЗ + | Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК СтарыеТаблицы + | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ + | РолиПрофиля.Ссылка КАК Профиль, + | ПраваОМДРолей.Роль КАК Роль, + | ПраваОМДРолей.Таблица КАК Таблица, + | ПраваОМДРолей.Добавление КАК Добавление, + | ПраваОМДРолей.Изменение КАК Изменение, + | ПраваОМДРолей.Удаление КАК Удаление, + | ПраваОМДРолей.ТипТаблицы КАК ТипТаблицы + | ИЗ + | ПраваОМДРолей КАК ПраваОМДРолей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофиля + | ПО ПраваОМДРолей.Роль = РолиПрофиля.Роль) КАК НовыеТаблицы + | ПО (НовыеТаблицы.Профиль = СтарыеТаблицы.Ссылка) + | И (НовыеТаблицы.Роль = СтарыеТаблицы.Роль) + | И (НовыеТаблицы.Таблица = СтарыеТаблицы.Таблица) + | И (НовыеТаблицы.Добавление = СтарыеТаблицы.Добавление) + | И (НовыеТаблицы.Изменение = СтарыеТаблицы.Изменение) + | И (НовыеТаблицы.Удаление = СтарыеТаблицы.Удаление) + | И (НовыеТаблицы.ТипТаблицы = СтарыеТаблицы.ТипТаблицы) + |ГДЕ + | НовыеТаблицы.Роль ЕСТЬ NULL + | И СтарыеТаблицы.Ссылка <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | НовыеТаблицы.Профиль + |ИЗ + | (ВЫБРАТЬ + | РолиПрофиля.Ссылка КАК Профиль, + | ПраваОМДРолей.Роль КАК Роль, + | ПраваОМДРолей.Таблица КАК Таблица, + | ПраваОМДРолей.Добавление КАК Добавление, + | ПраваОМДРолей.Изменение КАК Изменение, + | ПраваОМДРолей.Удаление КАК Удаление, + | ПраваОМДРолей.ТипТаблицы КАК ТипТаблицы + | ИЗ + | ПраваОМДРолей КАК ПраваОМДРолей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофиля + | ПО ПраваОМДРолей.Роль = РолиПрофиля.Роль) КАК НовыеТаблицы + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК СтарыеТаблицы + | ПО НовыеТаблицы.Профиль = СтарыеТаблицы.Ссылка + | И НовыеТаблицы.Роль = СтарыеТаблицы.Роль + | И НовыеТаблицы.Таблица = СтарыеТаблицы.Таблица + | И НовыеТаблицы.Добавление = СтарыеТаблицы.Добавление + | И НовыеТаблицы.Изменение = СтарыеТаблицы.Изменение + | И НовыеТаблицы.Удаление = СтарыеТаблицы.Удаление + | И НовыеТаблицы.ТипТаблицы = СтарыеТаблицы.ТипТаблицы + |ГДЕ + | СтарыеТаблицы.Роль ЕСТЬ NULL + | И НовыеТаблицы.Профиль <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + Объект = Выборка.Профиль.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка, Объект.ВерсияДанных); + Объект.ДополнительныеСвойства.Вставить("НеОбновлятьРеквизитПоставляемыйПрофильИзменен"); + Объект.Записать(); + РазблокироватьДанныеДляРедактирования(Объект.Ссылка); + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с группами доступа + +// Выполняет обновление видов доступа групп доступа указанного профиля. +// При этом возможно не удалять виды доступа из группы доступа, +// которые удалены в профиле этой группы доступа, в случае +// когда в группе доступа назначены значения доступа по +// удаляемому виду доступа. +// +// Параметры: +// Профиль - СправочникСсылка.ПрофилиГруппДоступа +// НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа - Булево +// +// Возвращаемое значение: +// Булево - когда Истина, группа доступа была изменена, +// когда Ложь никаких изменений не было выполнено. +// +Функция ОбновитьГруппыДоступаПрофиля(Профиль, НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа) Экспорт + + ГруппаДоступаОбновлена = Ложь; + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | (ГруппыДоступа.Профиль = &Профиль + | ИЛИ &Профиль = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + | И ГруппыДоступа.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы))"); + + Запрос.УстановитьПараметр("Профиль", Профиль.Ссылка); + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + // Проверка необходимости/возможности обновления группы доступа. + ГруппаДоступа = Выборка.Ссылка.ПолучитьОбъект(); + + Если ГруппаДоступа.Ссылка = Справочники.ГруппыДоступа.Администраторы + И ГруппаДоступа.Профиль <> Справочники.ПрофилиГруппДоступа.Администратор Тогда + // Установка профиля Администратор, если не задан. + ГруппаДоступа.Профиль = Справочники.ПрофилиГруппДоступа.Администратор; + КонецЕсли; + + // Проверка состава видов доступа. + СоставВидовДоступаИзменен = Ложь; + ЕстьУдаляемыеВидыДоступаСЗаданнымиЗначениямиДоступа = Ложь; + Если ГруппаДоступа.ВидыДоступа.Количество() <> Профиль.ВидыДоступа.НайтиСтроки(Новый Структура("Предустановленный", Ложь)).Количество() Тогда + СоставВидовДоступаИзменен = Истина; + Иначе + Для каждого СтрокаВидаДоступа Из ГруппаДоступа.ВидыДоступа Цикл + Если Профиль.ВидыДоступа.НайтиСтроки(Новый Структура("ВидДоступа, Предустановленный", СтрокаВидаДоступа.ВидДоступа, Ложь)).Количество() = 0 Тогда + СоставВидовДоступаИзменен = Истина; + Если ГруппаДоступа.ЗначенияДоступа.Найти(СтрокаВидаДоступа.ВидДоступа, "ВидДоступа") <> Неопределено Тогда + ЕстьУдаляемыеВидыДоступаСЗаданнымиЗначениямиДоступа = Истина; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если СоставВидовДоступаИзменен + И ( НЕ НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа + ИЛИ НЕ ЕстьУдаляемыеВидыДоступаСЗаданнымиЗначениямиДоступа ) Тогда + // Обновление группы доступа. + // 1. Удаление лишних видов доступа и значений доступа (если есть). + ТекущийНомерСтроки = ГруппаДоступа.ВидыДоступа.Количество()-1; + Пока ТекущийНомерСтроки >= 0 Цикл + ТекущийВидДоступа = ГруппаДоступа.ВидыДоступа[ТекущийНомерСтроки].ВидДоступа; + Если Профиль.ВидыДоступа.НайтиСтроки(Новый Структура("ВидДоступа, Предустановленный", ТекущийВидДоступа, Ложь)).Количество() = 0 Тогда + СтрокиЗначенийВидаДоступа = ГруппаДоступа.ЗначенияДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущийВидДоступа)); + Для каждого СтрокаЗначения Из СтрокиЗначенийВидаДоступа Цикл + ГруппаДоступа.ЗначенияДоступа.Удалить(СтрокаЗначения); + КонецЦикла; + ГруппаДоступа.ВидыДоступа.Удалить(ТекущийНомерСтроки); + КонецЕсли; + ТекущийНомерСтроки = ТекущийНомерСтроки - 1; + КонецЦикла; + // 2. Добавление новых видов доступа (если есть). + Для каждого СтрокаВидаДоступа Из Профиль.ВидыДоступа Цикл + Если НЕ СтрокаВидаДоступа.Предустановленный + И ГруппаДоступа.ВидыДоступа.Найти(СтрокаВидаДоступа.ВидДоступа, "ВидДоступа") = Неопределено Тогда + + НоваяСтрока = ГруппаДоступа.ВидыДоступа.Добавить(); + НоваяСтрока.ВидДоступа = СтрокаВидаДоступа.ВидДоступа; + НоваяСтрока.ДоступРазрешен = СтрокаВидаДоступа.ДоступРазрешен; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если ГруппаДоступа.Модифицированность() Тогда + ЗаблокироватьДанныеДляРедактирования(ГруппаДоступа.Ссылка, ГруппаДоступа.ВерсияДанных); + ГруппаДоступа.ДополнительныеСвойства.Вставить("НеОбновлятьРолиПользователей"); + ГруппаДоступа.Записать(); + ГруппаДоступаОбновлена = Истина; + РазблокироватьДанныеДляРедактирования(ГруппаДоступа.Ссылка); + КонецЕсли; + КонецЦикла; + + Возврат ГруппаДоступаОбновлена; + +КонецФункции + +// Возвращает ссылку на группу-родителя персональных групп доступа. +// Если родитель не найден он будет создан. +// +// Параметры: +// НеСоздавать - Булево, если задан Истина, родитель не будет автоматически создан, +// а функция вернет Неопределено, если родитель не найден +// +// Возвращаемое значение: +// СправочникСсылка.ГруппыДоступа +// +Функция РодительПерсональныхГруппДоступа(Знач НеСоздавать = Ложь, НаименованиеГруппыЭлементов = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НаименованиеГруппыЭлементов = НСтр("ru = 'Персональные группы доступа'"); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("НаименованиеГруппыЭлементов", НаименованиеГруппыЭлементов); + Запрос.Текст = + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | ГруппыДоступа.Наименование ПОДОБНО &НаименованиеГруппыЭлементов + | И ГруппыДоступа.ЭтоГруппа"; + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ГруппаЭлементов = Выборка.Ссылка; + ИначеЕсли НеСоздавать Тогда + ГруппаЭлементов = Неопределено; + Иначе + ГруппаЭлементовОбъект = Справочники.ГруппыДоступа.СоздатьГруппу(); + ГруппаЭлементовОбъект.Наименование = НаименованиеГруппыЭлементов; + ГруппаЭлементовОбъект.Записать(); + ГруппаЭлементов = ГруппаЭлементовОбъект.Ссылка; + КонецЕсли; + + Возврат ГруппаЭлементов; + +КонецФункции + +// Только для внутреннего использования. Вызывается из обработчика ПриЗаписи группы доступа. +Процедура ОбновитьРолиПользователейПриИзмененииГруппыДоступа(ГруппаДоступа, СтарыеУчастникиГруппыДоступа) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // Обновление ролей для добавленных, оставшихся и удаленных пользователей. + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ГруппаДоступа", ГруппаДоступа); + Запрос.УстановитьПараметр("СтарыеУчастникиГруппыДоступа", СтарыеУчастникиГруппыДоступа); + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПользователиИГруппыПользователей.ЗначениеДоступа КАК Пользователь + |ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + |ГДЕ + | ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + | И ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ + | И ПользователиИГруппыПользователей.ГруппаДоступа В(&СтарыеУчастникиГруппыДоступа) + | И (ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи)) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ПользователиИГруппыПользователей.ЗначениеДоступа + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) + | И (ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ) + | И ГруппыДоступаПользователи.Пользователь = ПользователиИГруппыПользователей.ГруппаДоступа + | И (ГруппыДоступаПользователи.Ссылка = &ГруппаДоступа) + | И (ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи))"; + СтарыеИНовыеПользователи = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); + + Если ГруппаДоступа = Справочники.ГруппыДоступа.Администраторы Тогда + // Добавление пользователей, связанных с пользователямиИБ, имеющих роль ПолныеПрава + Для каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл + Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда + Пользователь = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); + Если НЕ ЗначениеЗаполнено(Пользователь) Тогда + Пользователь = Справочники.ВнешниеПользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); + КонецЕсли; + Если ЗначениеЗаполнено(Пользователь) + И СтарыеИНовыеПользователи.Найти(Пользователь) = Неопределено Тогда + СтарыеИНовыеПользователи.Добавить(Пользователь); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ОбновитьРолиПользователей(СтарыеИНовыеПользователи); + +КонецПроцедуры + +// Ообновляет состав РегистрСведений.ТаблицыГруппДоступа для одной или +// всех групп доступа пользователей, в которых есть пользователи. +// Процедура использует таблицу Справочник.ПрофилиГруппДоступ.ТаблицыРолей. +// +// Параметры: +// ГруппаДоступа - СправочникСсылка.ГруппыДоступа. +// +Процедура ОбновитьТаблицыГруппДоступа(Знач ГруппаДоступа) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТаблицыПрофиля.Таблица, + | ПользователиГрупп.Пользователь, + | ТаблицыПрофиля.Добавление КАК Добавление, + | ТаблицыПрофиля.Изменение КАК Изменение, + | ТаблицыПрофиля.Удаление КАК Удаление, + | ТаблицыПрофиля.ТипТаблицы КАК ТипТаблицы, + | ВЫБОР + | КОГДА ТаблицыПрофиля.Добавление + | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + | КОНЕЦ КАК ВидДоступаПравоДобавления, + | ВЫБОР + | КОГДА ТаблицыПрофиля.Изменение + | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + | КОНЕЦ КАК ВидДоступаПравоИзменения + |ПОМЕСТИТЬ ТаблицыПользователейГруппы + |ИЗ + | (ВЫБРАТЬ + | ТаблицыРолей.Таблица КАК Таблица, + | МАКСИМУМ(ТаблицыРолей.Добавление) КАК Добавление, + | МАКСИМУМ(ТаблицыРолей.Изменение) КАК Изменение, + | МАКСИМУМ(ТаблицыРолей.Удаление) КАК Удаление, + | МАКСИМУМ(ТаблицыРолей.ТипТаблицы) КАК ТипТаблицы + | ИЗ + | Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК ТаблицыРолей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + | ПО (ГруппыДоступа.Профиль = ТаблицыРолей.Ссылка) + | И (ГруппыДоступа.Ссылка = &ГруппаДоступа) + | И ((НЕ ГруппыДоступа.ПометкаУдаления)) + | И ((НЕ ТаблицыРолей.Ссылка.ПометкаУдаления)) + | + | СГРУППИРОВАТЬ ПО + | ТаблицыРолей.Таблица) КАК ТаблицыПрофиля + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ПользователиГрупп + | ПО (ПользователиГрупп.Ссылка = &ГруппаДоступа) + | И ((НЕ ПользователиГрупп.Ссылка.ПометкаУдаления)) + | И ((НЕ ПользователиГрупп.Пользователь В (НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.ВнешниеПользователи.ПустаяСсылка)))) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы + | ПО (ТаблицыПользователейГруппы.Таблица = ТаблицыГруппДоступа.Таблица) + | И (ТаблицыПользователейГруппы.Пользователь = ТаблицыГруппДоступа.Пользователь) + | И (ТаблицыПользователейГруппы.Добавление = ТаблицыГруппДоступа.Добавление) + | И (ТаблицыПользователейГруппы.Изменение = ТаблицыГруппДоступа.Изменение) + | И (ТаблицыПользователейГруппы.Удаление = ТаблицыГруппДоступа.Удаление) + | И (ТаблицыПользователейГруппы.ТипТаблицы = ТаблицыГруппДоступа.ТипТаблицы) + | И (ТаблицыПользователейГруппы.ВидДоступаПравоДобавления = ТаблицыГруппДоступа.ВидДоступаПравоДобавления) + | И (ТаблицыПользователейГруппы.ВидДоступаПравоИзменения = ТаблицыГруппДоступа.ВидДоступаПравоИзменения) + |ГДЕ + | ТаблицыГруппДоступа.ГруппаДоступа = &ГруппаДоступа + | И ТаблицыПользователейГруппы.Таблица ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + |ИЗ + | ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + | ПО ТаблицыПользователейГруппы.Таблица = ТаблицыГруппДоступа.Таблица + | И ТаблицыПользователейГруппы.Пользователь = ТаблицыГруппДоступа.Пользователь + | И (ТаблицыГруппДоступа.ГруппаДоступа = &ГруппаДоступа) + | И ТаблицыПользователейГруппы.Добавление = ТаблицыГруппДоступа.Добавление + | И ТаблицыПользователейГруппы.Изменение = ТаблицыГруппДоступа.Изменение + | И ТаблицыПользователейГруппы.Удаление = ТаблицыГруппДоступа.Удаление + | И ТаблицыПользователейГруппы.ТипТаблицы = ТаблицыГруппДоступа.ТипТаблицы + | И ТаблицыПользователейГруппы.ВидДоступаПравоДобавления = ТаблицыГруппДоступа.ВидДоступаПравоДобавления + | И ТаблицыПользователейГруппы.ВидДоступаПравоИзменения = ТаблицыГруппДоступа.ВидДоступаПравоИзменения + |ГДЕ + | ТаблицыГруппДоступа.Таблица ЕСТЬ NULL "); + Запрос.УстановитьПараметр("ГруппаДоступа", ГруппаДоступа); + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + Если НЕ Запрос.Выполнить().Пустой() Тогда + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицыПользователейГруппы.Таблица, + | ТаблицыПользователейГруппы.Пользователь, + | &ГруппаДоступа КАК ГруппаДоступа, + | ТаблицыПользователейГруппы.Добавление, + | ТаблицыПользователейГруппы.Изменение, + | ТаблицыПользователейГруппы.Удаление, + | ТаблицыПользователейГруппы.ТипТаблицы, + | ТаблицыПользователейГруппы.ВидДоступаПравоДобавления, + | ТаблицыПользователейГруппы.ВидДоступаПравоИзменения + |ИЗ + | ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы"; + НаборЗаписей = РегистрыСведений.ТаблицыГруппДоступа.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ГруппаДоступа.Установить(ГруппаДоступа); + НаборЗаписей.Загрузить(Запрос.Выполнить().Выгрузить()); + НаборЗаписей.Записать(); + КонецЕсли; + +КонецПроцедуры + +// Обновляет записи в РегистрСведений.ЗначенияГруппДоступа для указанной группы доступа. +// +// Параметры: +// ГруппаДоступа - СправочникСсылка.ГруппыДоступа. +// +Процедура ЗаписатьЗначенияГруппДоступа(Знач ГруппаДоступа) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ГруппаДоступа", ГруппаДоступа); + Запрос.УстановитьПараметр("ПрофильГруппыДоступа", ОбщегоНазначения.ПолучитьЗначениеРеквизита(ГруппаДоступа, "Профиль")); + Запрос.Текст = + "ВЫБРАТЬ + | ВидыДоступаПрофиля.ВидДоступа КАК ВидДоступа, + | ИСТИНА КАК ТолькоВидДоступа, + | НЕОПРЕДЕЛЕНО КАК ЗначениеДоступа + |ПОМЕСТИТЬ ЗначенияГруппы + |ИЗ + | Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ВидыДоступаПрофиля + |ГДЕ + | (НЕ ВидыДоступаПрофиля.ДоступРазрешен) + | И ВидыДоступаПрофиля.Ссылка = &ПрофильГруппыДоступа + | И ВидыДоступаПрофиля.Предустановленный + | И (НЕ ВидыДоступаПрофиля.Ссылка.ПометкаУдаления) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ВидыДоступа.ВидДоступа, + | ИСТИНА, + | НЕОПРЕДЕЛЕНО + |ИЗ + | Справочник.ГруппыДоступа.ВидыДоступа КАК ВидыДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ПредустановленныеВидыДоступа + | ПО ВидыДоступа.Ссылка.Профиль = ПредустановленныеВидыДоступа.Ссылка + | И ВидыДоступа.ВидДоступа = ПредустановленныеВидыДоступа.ВидДоступа + | И ((НЕ ВидыДоступа.Ссылка.ПометкаУдаления)) + | И ((НЕ ПредустановленныеВидыДоступа.Ссылка.ПометкаУдаления)) + |ГДЕ + | (НЕ ВидыДоступа.ДоступРазрешен) + | И ВидыДоступа.Ссылка = &ГруппаДоступа + | И (НЕ ПредустановленныеВидыДоступа.Предустановленный) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ЗначенияДоступаПрофиля.ВидДоступа, + | ЛОЖЬ, + | ЗначенияДоступаПрофиля.ЗначениеДоступа + |ИЗ + | Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ВидыДоступаПрофиля + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ЗначенияДоступа КАК ЗначенияДоступаПрофиля + | ПО (ВидыДоступаПрофиля.Предустановленный) + | И ((НЕ ВидыДоступаПрофиля.Ссылка.ПометкаУдаления)) + | И (ВидыДоступаПрофиля.Ссылка = &ПрофильГруппыДоступа) + | И (ЗначенияДоступаПрофиля.Ссылка = &ПрофильГруппыДоступа) + | И ВидыДоступаПрофиля.ВидДоступа = ЗначенияДоступаПрофиля.ВидДоступа + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ЗначенияДоступа.ВидДоступа, + | ЛОЖЬ, + | ЗначенияДоступа.ЗначениеДоступа + |ИЗ + | Справочник.ГруппыДоступа.ВидыДоступа КАК ВидыДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ПредустановленныеВидыДоступа + | ПО ВидыДоступа.Ссылка.Профиль = ПредустановленныеВидыДоступа.Ссылка + | И ВидыДоступа.ВидДоступа = ПредустановленныеВидыДоступа.ВидДоступа + | И ((НЕ ПредустановленныеВидыДоступа.Ссылка.ПометкаУдаления)) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.ЗначенияДоступа КАК ЗначенияДоступа + | ПО (ВидыДоступа.Ссылка = &ГруппаДоступа) + | И (ЗначенияДоступа.Ссылка = &ГруппаДоступа) + | И ВидыДоступа.ВидДоступа = ЗначенияДоступа.ВидДоступа + | И ((НЕ ПредустановленныеВидыДоступа.Предустановленный)) + | И ((НЕ ЗначенияДоступа.Ссылка.ПометкаУдаления)) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + | ЛЕВОЕ СОЕДИНЕНИЕ ЗначенияГруппы КАК ЗначенияГруппы + | ПО (ЗначенияГруппы.ВидДоступа = ЗначенияГруппДоступа.ВидДоступа) + | И (ЗначенияГруппы.ТолькоВидДоступа = ЗначенияГруппДоступа.ТолькоВидДоступа) + | И (ЗначенияГруппы.ЗначениеДоступа = ЗначенияГруппДоступа.ЗначениеДоступа) + |ГДЕ + | ЗначенияГруппДоступа.ГруппаДоступа = &ГруппаДоступа + | И ЗначенияГруппы.ВидДоступа ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + |ИЗ + | ЗначенияГруппы КАК ЗначенияГруппы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + | ПО (ЗначенияГруппДоступа.ГруппаДоступа = &ГруппаДоступа) + | И ЗначенияГруппы.ВидДоступа = ЗначенияГруппДоступа.ВидДоступа + | И ЗначенияГруппы.ТолькоВидДоступа = ЗначенияГруппДоступа.ТолькоВидДоступа + | И ЗначенияГруппы.ЗначениеДоступа = ЗначенияГруппДоступа.ЗначениеДоступа + |ГДЕ + | ЗначенияГруппДоступа.ВидДоступа ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | &ГруппаДоступа КАК ГруппаДоступа, + | ЗначенияГруппы.ВидДоступа, + | ЗначенияГруппы.ТолькоВидДоступа, + | ЗначенияГруппы.ЗначениеДоступа + |ИЗ + | ЗначенияГруппы КАК ЗначенияГруппы"; + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + Если НЕ РезультатыЗапроса[1].Пустой() Тогда + + НаборЗаписей = РегистрыСведений.ЗначенияГруппДоступа.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ГруппаДоступа.Установить(ГруппаДоступа); + НаборЗаписей.Загрузить(РезультатыЗапроса[2].Выгрузить()); + НаборЗаписей.Записать(); + + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования. +// Вызывается при обновлении данных регистра сведений ГруппыЗначенийДоступа // по видам доступа ПустаяСсылка, Пользователи, Внешние пользователи и -// при изменении состава участников групп доступа +// при изменении состава участников групп доступа. // Процедура ОбновитьПодчиненныхПользователейГруппДоступа() Экспорт @@ -5081,14 +4520,674 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Процедуры и функции для работы с правами по значения доступа -// Функция РодителиЗначенияДоступа заполняет НаборЗаписей, -// родителями значения доступа, включая себя, как родителя. +// Возвращает описание возможных прав по значениям доступа. +// Подробнее о возможных правах см. в комментарии к функции +// УправлениеДоступомСерверПовтИсп.ВозможныеПраваПоЗначениямДоступа(). +// +// Параметры: +// Таблица - Строка, Неопределено - полное имя таблицы значений доступа, +// для которых нужно получить описание возможных прав, +// когда Неопределено, возвращается таблица всех описаний, +// заданных прикладным разработчиком. +// +// Возвращаемое значение: +// ТаблицаЗначений с колонками, описание которых см. в комментарии к функции +// УправлениеДоступомСерверПовтИсп.ВозможныеПраваПоЗначениямДоступа(). +// Если задан параметр Таблица, возвращаются только её описания. +// +Функция ВозможныеПраваПоЗначениюДоступа(Таблица = Неопределено) Экспорт + + ВозможныеПрава = УправлениеДоступомСерверПовтИсп.ВозможныеПраваПоЗначениямДоступа(); + + Если Таблица = Неопределено Тогда + Строки = Неопределено; + Иначе + Строки = ВозможныеПрава.НайтиСтроки(Новый Структура("ВладелецПрав", Таблица)); + КонецЕсли; + + Возврат ВозможныеПрава.Скопировать(Строки); + +КонецФункции + +// Выполняет обновление таблиц в регистре сведений ПраваПоЗначенияДоступа, +// когда изменена процедура ЗаполнитьВозможныеПраваПоЗначениямДоступа +// модуля УправлениеДоступомПереопределяемый. +// +Процедура ОбновитьТаблицыПравПоЗначениямДоступа() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ВозможныеПрава = УправлениеДоступомСерверПовтИсп.ВозможныеПраваПоЗначениямДоступа(); + + ТаблицыПрав = Новый ТаблицаЗначений; + ТаблицыПрав.Колонки.Добавить("ВладелецПрав", Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа.Измерения.ЗначениеДоступа.Тип); + ТаблицыПрав.Колонки.Добавить("Право", Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа.Измерения.Право.Тип); + ТаблицыПрав.Колонки.Добавить("Таблица", Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа.Измерения.Таблица.Тип); + ТаблицыПрав.Колонки.Добавить("Чтение", Новый ОписаниеТипов("Булево")); + ТаблицыПрав.Колонки.Добавить("Добавление", Новый ОписаниеТипов("Булево")); + ТаблицыПрав.Колонки.Добавить("Изменение", Новый ОписаниеТипов("Булево")); + ТаблицыПрав.Колонки.Добавить("Удаление", Новый ОписаниеТипов("Булево")); + + Для каждого ОписаниеПрава Из ВозможныеПрава Цикл + ВладелецПрав = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОписаниеПрава.ВладелецПрав).ПустаяСсылка(); + Если ТаблицыПрав.Колонки.ВладелецПрав.ТипЗначения.СодержитТип(ТипЗнч(ВладелецПрав)) Тогда + Для каждого Таблица Из ОписаниеПрава.ЧтениеВТаблицах Цикл + НоваяТаблица = ТаблицыПрав.Добавить(); + НоваяТаблица.ВладелецПрав = ВладелецПрав; + НоваяТаблица.Право = ОписаниеПрава.Имя; + НоваяТаблица.Таблица = Таблица; + НоваяТаблица.Чтение = Истина; + КонецЦикла; + Для каждого Таблица Из ОписаниеПрава.ДобавлениеВТаблицах Цикл + НоваяТаблица = ТаблицыПрав.Добавить(); + НоваяТаблица.ВладелецПрав = ВладелецПрав; + НоваяТаблица.Право = ОписаниеПрава.Имя; + НоваяТаблица.Таблица = Таблица; + НоваяТаблица.Добавление = Истина; + КонецЦикла; + Для каждого Таблица Из ОписаниеПрава.ИзменениеВТаблицах Цикл + НоваяТаблица = ТаблицыПрав.Добавить(); + НоваяТаблица.ВладелецПрав = ВладелецПрав; + НоваяТаблица.Право = ОписаниеПрава.Имя; + НоваяТаблица.Таблица = Таблица; + НоваяТаблица.Изменение = Истина; + КонецЦикла; + Для каждого Таблица Из ОписаниеПрава.УдалениеВТаблицах Цикл + НоваяТаблица = ТаблицыПрав.Добавить(); + НоваяТаблица.ВладелецПрав = ВладелецПрав; + НоваяТаблица.Право = ОписаниеПрава.Имя; + НоваяТаблица.Таблица = Таблица; + НоваяТаблица.Удаление = Истина; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТаблицыПрав", ТаблицыПрав); + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицыПрав.ВладелецПрав, + | ТаблицыПрав.Право, + | ТаблицыПрав.Таблица, + | ТаблицыПрав.Чтение, + | ТаблицыПрав.Добавление, + | ТаблицыПрав.Изменение, + | ТаблицыПрав.Удаление + |ПОМЕСТИТЬ ТаблицыПрав + |ИЗ + | &ТаблицыПрав КАК ТаблицыПрав + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | НовыеЗаписи.ЗначениеДоступа, + | НовыеЗаписи.Пользователь, + | НовыеЗаписи.Право, + | НовыеЗаписи.Таблица, + | НовыеЗаписи.Запрещено, + | НовыеЗаписи.РаспространяетсяВИерархии, + | НовыеЗаписи.Чтение, + | НовыеЗаписи.ЧтениеЗапрещено, + | НовыеЗаписи.Добавление, + | НовыеЗаписи.ДобавлениеЗапрещено, + | НовыеЗаписи.Изменение, + | НовыеЗаписи.ИзменениеЗапрещено, + | НовыеЗаписи.Удаление, + | НовыеЗаписи.УдалениеЗапрещено + |ИЗ + | (ВЫБРАТЬ + | ПраваПоЗначениям.ЗначениеДоступа КАК ЗначениеДоступа, + | ПраваПоЗначениям.Пользователь КАК Пользователь, + | ПраваПоЗначениям.Право КАК Право, + | ПраваПоЗначениям.Запрещено КАК Запрещено, + | ПраваПоЗначениям.РаспространяетсяВИерархии КАК РаспространяетсяВИерархии, + | ЕСТЬNULL(ТаблицыПрав.Таблица, """") КАК Таблица, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) + | КОНЕЦ КАК Чтение, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ЧтениеЗапрещено, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) + | КОНЕЦ КАК Добавление, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ДобавлениеЗапрещено, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) + | КОНЕЦ КАК Изменение, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ИзменениеЗапрещено, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) + | КОНЕЦ КАК Удаление, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК УдалениеЗапрещено + | ИЗ + | (ВЫБРАТЬ + | ПраваПоЗначениямДоступа.ЗначениеДоступа КАК ЗначениеДоступа, + | ПраваПоЗначениямДоступа.Пользователь КАК Пользователь, + | ПраваПоЗначениямДоступа.Право КАК Право, + | МАКСИМУМ(ПраваПоЗначениямДоступа.Запрещено) КАК Запрещено, + | МАКСИМУМ(ПраваПоЗначениямДоступа.РаспространяетсяВИерархии) КАК РаспространяетсяВИерархии + | ИЗ + | РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениямДоступа + | + | СГРУППИРОВАТЬ ПО + | ПраваПоЗначениямДоступа.ЗначениеДоступа, + | ПраваПоЗначениямДоступа.Пользователь, + | ПраваПоЗначениямДоступа.Право) КАК ПраваПоЗначениям + | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицыПрав КАК ТаблицыПрав + | ПО (ТИПЗНАЧЕНИЯ(ПраваПоЗначениям.ЗначениеДоступа) = ТИПЗНАЧЕНИЯ(ТаблицыПрав.ВладелецПрав)) + | И ПраваПоЗначениям.Право = ТаблицыПрав.Право) КАК НовыеЗаписи + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПраваПоЗначениямДоступа КАК ТекущиеЗаписи + | ПО НовыеЗаписи.ЗначениеДоступа = ТекущиеЗаписи.ЗначениеДоступа + | И НовыеЗаписи.Пользователь = ТекущиеЗаписи.Пользователь + | И НовыеЗаписи.Право = ТекущиеЗаписи.Право + | И НовыеЗаписи.Таблица = ТекущиеЗаписи.Таблица + | И НовыеЗаписи.Запрещено = ТекущиеЗаписи.Запрещено + | И НовыеЗаписи.РаспространяетсяВИерархии = ТекущиеЗаписи.РаспространяетсяВИерархии + | И НовыеЗаписи.Чтение = ТекущиеЗаписи.Чтение + | И НовыеЗаписи.ЧтениеЗапрещено = ТекущиеЗаписи.ЧтениеЗапрещено + | И НовыеЗаписи.Добавление = ТекущиеЗаписи.Добавление + | И НовыеЗаписи.ДобавлениеЗапрещено = ТекущиеЗаписи.ДобавлениеЗапрещено + | И НовыеЗаписи.Изменение = ТекущиеЗаписи.Изменение + | И НовыеЗаписи.ИзменениеЗапрещено = ТекущиеЗаписи.ИзменениеЗапрещено + | И НовыеЗаписи.Удаление = ТекущиеЗаписи.Удаление + | И НовыеЗаписи.УдалениеЗапрещено = ТекущиеЗаписи.УдалениеЗапрещено + |ГДЕ + | ТекущиеЗаписи.ЗначениеДоступа ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | НовыеЗаписи.ЗначениеДоступа, + | НовыеЗаписи.Пользователь, + | НовыеЗаписи.Право, + | НовыеЗаписи.Таблица + |ИЗ + | РегистрСведений.ПраваПоЗначениямДоступа КАК ТекущиеЗаписи + | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ + | ПраваПоЗначениям.ЗначениеДоступа КАК ЗначениеДоступа, + | ПраваПоЗначениям.Пользователь КАК Пользователь, + | ПраваПоЗначениям.Право КАК Право, + | ПраваПоЗначениям.Запрещено КАК Запрещено, + | ПраваПоЗначениям.РаспространяетсяВИерархии КАК РаспространяетсяВИерархии, + | ЕСТЬNULL(ТаблицыПрав.Таблица, """") КАК Таблица, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) + | КОНЕЦ КАК Чтение, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ЧтениеЗапрещено, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) + | КОНЕЦ КАК Добавление, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ДобавлениеЗапрещено, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) + | КОНЕЦ КАК Изменение, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ИзменениеЗапрещено, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) + | КОНЕЦ КАК Удаление, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК УдалениеЗапрещено + | ИЗ + | (ВЫБРАТЬ + | ПраваПоЗначениямДоступа.ЗначениеДоступа КАК ЗначениеДоступа, + | ПраваПоЗначениямДоступа.Пользователь КАК Пользователь, + | ПраваПоЗначениямДоступа.Право КАК Право, + | МАКСИМУМ(ПраваПоЗначениямДоступа.Запрещено) КАК Запрещено, + | МАКСИМУМ(ПраваПоЗначениямДоступа.РаспространяетсяВИерархии) КАК РаспространяетсяВИерархии + | ИЗ + | РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениямДоступа + | + | СГРУППИРОВАТЬ ПО + | ПраваПоЗначениямДоступа.ЗначениеДоступа, + | ПраваПоЗначениямДоступа.Пользователь, + | ПраваПоЗначениямДоступа.Право) КАК ПраваПоЗначениям + | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицыПрав КАК ТаблицыПрав + | ПО (ТИПЗНАЧЕНИЯ(ПраваПоЗначениям.ЗначениеДоступа) = ТИПЗНАЧЕНИЯ(ТаблицыПрав.ВладелецПрав)) + | И ПраваПоЗначениям.Право = ТаблицыПрав.Право) КАК НовыеЗаписи + | ПО НовыеЗаписи.ЗначениеДоступа = ТекущиеЗаписи.ЗначениеДоступа + | И НовыеЗаписи.Пользователь = ТекущиеЗаписи.Пользователь + | И НовыеЗаписи.Право = ТекущиеЗаписи.Право + | И НовыеЗаписи.Таблица = ТекущиеЗаписи.Таблица + | И НовыеЗаписи.Запрещено = ТекущиеЗаписи.Запрещено + | И НовыеЗаписи.РаспространяетсяВИерархии = ТекущиеЗаписи.РаспространяетсяВИерархии + | И НовыеЗаписи.Чтение = ТекущиеЗаписи.Чтение + | И НовыеЗаписи.ЧтениеЗапрещено = ТекущиеЗаписи.ЧтениеЗапрещено + | И НовыеЗаписи.Добавление = ТекущиеЗаписи.Добавление + | И НовыеЗаписи.ДобавлениеЗапрещено = ТекущиеЗаписи.ДобавлениеЗапрещено + | И НовыеЗаписи.Изменение = ТекущиеЗаписи.Изменение + | И НовыеЗаписи.ИзменениеЗапрещено = ТекущиеЗаписи.ИзменениеЗапрещено + | И НовыеЗаписи.Удаление = ТекущиеЗаписи.Удаление + | И НовыеЗаписи.УдалениеЗапрещено = ТекущиеЗаписи.УдалениеЗапрещено + |ГДЕ + | НовыеЗаписи.ЗначениеДоступа ЕСТЬ NULL "; + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + Для каждого ОписаниеУдаляемойЗаписи ИЗ РезультатыЗапроса[2].Выгрузить() Цикл + МенеджерЗаписи = РегистрыСведений.ПраваПоЗначениямДоступа.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ОписаниеУдаляемойЗаписи); + МенеджерЗаписи.Удалить(); + КонецЦикла; + + НаборЗаписей = РегистрыСведений.ПраваПоЗначениямДоступа.СоздатьНаборЗаписей(); + НаборЗаписей.Загрузить(РезультатыЗапроса[1].Выгрузить()); + Если НаборЗаписей.Количество() > 0 Тогда + НаборЗаписей.Записать(Ложь); + КонецЕсли; + +КонецПроцедуры + +// Заполняет вторичные данные, ускоряющие работу шаблонов ограничений доступа. +// Выполняется перед записью в регистр НаборыЗначенийДоступа или +// перед записью объекта с табличной частью НаборыЗначенийДоступа. +// +// Параметры: +// СсылкаНаОбъект - СправочникСсылка.*, ДокументСсылка.*, ... +// Таблица - ТабличнаяЧасть (или ТаблицаЗначений), РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа +// +Процедура ПодготовкаНаборовЗначенийДоступаПередЗаписью(СсылкаНаОбъект, Таблица) Экспорт + + ПодготовкаНабораЗаписей = ТипЗнч(Таблица) = Тип("РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа"); + + // Нормализация ресурсов Чтение, Добавление, Изменение, Удаление. + НомерНабора = -1; + Для каждого Строка Из Таблица Цикл + + Если ПодготовкаНабораЗаписей Тогда + // Установка значения измерения Объект + Строка.Объект = СсылкаНаОбъект; + // Заполнение свойств вида доступа: + // ВидДоступаБезГруппЗначенияДоступа, + // ВидДоступаЕдинственныйДляТипаЗначенияДоступа, + // ВидДоступаЧерезПраваПоЗначениямДоступа + СвойстваВидаДоступа = СвойстваВидаДоступа(Строка.ВидДоступа); + Если СвойстваВидаДоступа <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(Строка, СвойстваВидаДоступа(Строка.ВидДоступа)); + КонецЕсли; + // Установка типа объекта для одной строки всех наборов (в качестве типа пустая ссылка) + Если НомерНабора = -1 Тогда + ТипыОбъекта = Новый Массив; + ТипыОбъекта.Добавить(ТипЗнч(СсылкаНаОбъект)); + ОписаниеТипаОбъекта = Новый ОписаниеТипов(ТипыОбъекта); + Строка.ТипОбъекта = ОписаниеТипаОбъекта.ПривестиЗначение(Неопределено); + КонецЕсли; + // Установка типа значения доступа для значений доступа по видам доступа + // ПравоЧтения, ПравоДобавления, ПравоИзменения (в качестве типа пустая ссылка) + Если Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПравоЧтения + ИЛИ Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПравоДобавления + ИЛИ Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПравоИзменения Тогда + МенеджерОбъекта = ?(Строка.ЗначениеДоступа <> Неопределено, ОбщегоНазначения.МенеджерОбъектаПоСсылке(Строка.ЗначениеДоступа), Неопределено); + Если МенеджерОбъекта <> Неопределено Тогда + Строка.ТипЗначенияДоступа = МенеджерОбъекта.ПустаяСсылка(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Очистка флажков прав и соответствующих им вторичных данных + // для всех строк каждого набора, кроме первой строки + Если НомерНабора = Строка.НомерНабора Тогда + Строка.Чтение = Ложь; + Строка.Добавление = Ложь; + Строка.Изменение = Ложь; + Строка.Удаление = Ложь; + Иначе + НомерНабора = Строка.НомерНабора; + КонецЕсли; + + Если ПодготовкаНабораЗаписей Тогда + // Описание прав Чтение, Добавление, Изменение через ссылки видов доступа для + // оптимизации работы механизма зависимостей по правам в шаблоне ограничения доступа + Строка.ВидДоступаПравоЧтения = ?(Строка.Чтение, ПланыВидовХарактеристик.ВидыДоступа.ПравоЧтения, ПланыВидовХарактеристик.ВидыДоступа.ПустаяСсылка()); + Строка.ВидДоступаПравоДобавления = ?(Строка.Добавление, ПланыВидовХарактеристик.ВидыДоступа.ПравоДобавления, ПланыВидовХарактеристик.ВидыДоступа.ПустаяСсылка()); + Строка.ВидДоступаПравоИзменения = ?(Строка.Изменение, ПланыВидовХарактеристик.ВидыДоступа.ПравоИзменения, ПланыВидовХарактеристик.ВидыДоступа.ПустаяСсылка()); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для действий при изменений настроек подсистемы + +// Если необходимо, включает заполнение данных для ограничения доступа и +// обновляет некоторые данные сразу. +// +// Вызывается из обработчика ПриЗаписи константы ОграничиватьДоступаНаУровнеЗаписей. +// +Процедура ПриИзмененииОграниченияДоступаНаУровнеЗаписей(ОграничениеДоступаНаУровнеЗаписейВключено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ОграничениеДоступаНаУровнеЗаписейВключено Тогда + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'"), + УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Начато заполнение данных для ограничения доступа'"), + РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); + + // Дополнительно обновляются таблицы прав, т.к. они будут использоваться + // в процедуре заполнения регистра сведений ТаблицыГруппДоступа. + ОбновитьТаблицыРолейПрофилейГруппДоступа(); + + // Обновление РегистрСведений.ТаблицыГруппДоступа и РегистрСведений.ЗначенияГруппДоступа. + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | (НЕ ГруппыДоступа.ЭтоГруппа)"); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ОбновитьТаблицыГруппДоступа(Выборка.Ссылка); + ЗаписатьЗначенияГруппДоступа(Выборка.Ссылка); + КонецЦикла; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + СтандартныеПодсистемыПереопределяемый.УстановитьИспользованиеЗаданияЗаполненияДанныхУправленияДоступом(Истина); + Иначе + Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа); + Задание.Использование = Истина; + Задание.Записать(); + КонецЕсли; + КонецЕсли; + + // Обновление параметров сеанса. + // Требуется для того, чтобы администратор не выполнял перезапуск. + УстановленныеПараметры = Новый Массив; + УстановкаПараметровСеанса("ОграничиватьДоступПоВиду", УстановленныеПараметры); + +КонецПроцедуры + +// Обновляет данные, зависимые от константы ДобавлятьРуководителямДоступПодчиненных. +// Вызывается из обработчика ПриЗаписи константы. +// +Процедура ПриИзмененииКонстантыДобавлятьРуководителямДоступПодчиненных() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыПользователей.ВсеПользователи); + ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); + + // Обновление параметра сеанса. + // Требуется для того, чтобы администратор не выполнял перезапуск. + УстановленныеПараметры = Новый Массив; + УстановкаПараметровСеанса("ДобавлятьРуководителямДоступПодчиненных", УстановленныеПараметры); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы интерфейсов пользователей + +// Возвращает список значений доступа не помеченных на удаление. +// Используется в обработчиках событий ОкончаниеВводаТекста и АвтоПодбор. +// +// Параметры: +// Текст - Строка, символы введенные пользователем. +// ВключаяГруппы - Булево, если Истина, включать группы пользователей и внешних пользователей. +// ВидДоступа - ПланыВидовХарактеристикСсылка.ВидыДоступа, значения доступа которого выбираются. +// +Функция СформироватьДанныеВыбораЗначенияДоступа(Знач Текст, Знач ВидДоступа, ВключаяГруппы = Истина) Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Текст", Текст + "%"); + Запрос.УстановитьПараметр("ВключаяГруппы", ВключаяГруппы); + Запрос.Текст = + "ВЫБРАТЬ + | ПредставленияПеречислений.Ссылка, + | ПредставленияПеречислений.Наименование КАК Наименование + |ПОМЕСТИТЬ ПредставленияПеречислений + |ИЗ + | &ПредставленияПеречислений КАК ПредставленияПеречислений + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | НЕОПРЕДЕЛЕНО КАК Ссылка, + | """" КАК Наименование + |ГДЕ + | ЛОЖЬ"; + + ЗапросПредставленийПеречислений = Новый Запрос; + ЗапросПредставленийПеречислений.Текст = + "ВЫБРАТЬ + | """" КАК Ссылка, + | """" КАК Наименование + |ГДЕ + | ЛОЖЬ"; + + Для каждого Тип Из ВидДоступа.ТипЗначения.Типы() Цикл + + МетаданныеТипа = Метаданные.НайтиПоТипу(Тип); + + ПолноеИмяТаблицы = МетаданныеТипа.ПолноеИмя(); + + Если ( Метаданные.Справочники.Содержит(МетаданныеТипа) + ИЛИ Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеТипа) ) + И МетаданныеТипа.Иерархический + И МетаданныеТипа.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов + И НЕ ВключаяГруппы Тогда + + УсловиеДляГруппы = "НЕ Таблица.ЭтоГруппа"; + Иначе + УсловиеДляГруппы = "Истина"; + КонецЕсли; + + Если Метаданные.Перечисления.Содержит(МетаданныеТипа) Тогда + // + ЗапросПредставленийПеречислений.Текст = ЗапросПредставленийПеречислений.Текст + Символы.ПС + Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + Символы.ПС; + ЗапросПредставленийПеречислений.Текст = ЗапросПредставленийПеречислений.Текст + СтрЗаменить( + "ВЫБРАТЬ + | Таблица.Ссылка, + | ПРЕДСТАВЛЕНИЕ(Таблица.Ссылка) КАК Наименование + |ИЗ + | &ПолноеИмяТаблицы КАК Таблица", "&ПолноеИмяТаблицы", ПолноеИмяТаблицы); + Иначе + Запрос.Текст = Запрос.Текст + Символы.ПС + Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + Символы.ПС; + Запрос.Текст = Запрос.Текст + СтрЗаменить(СтрЗаменить( + "ВЫБРАТЬ + | Таблица.Ссылка, + | Таблица.Наименование + |ИЗ + | &ПолноеИмяТаблицы КАК Таблица + |ГДЕ + | (НЕ Таблица.ПометкаУдаления) + | И Таблица.Наименование ПОДОБНО &Текст + | И &УсловиеДляГруппы", "&ПолноеИмяТаблицы", ПолноеИмяТаблицы), "&УсловиеДляГруппы", УсловиеДляГруппы); + КонецЕсли; + КонецЦикла; + + Запрос.УстановитьПараметр("ПредставленияПеречислений", ЗапросПредставленийПеречислений.Выполнить().Выгрузить()); + Запрос.Текст = Запрос.Текст + Символы.ПС + Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + Символы.ПС; + Запрос.Текст = Запрос.Текст + + "ВЫБРАТЬ + | ПредставленияПеречислений.Ссылка, + | ПредставленияПеречислений.Наименование + |ИЗ + | ПредставленияПеречислений КАК ПредставленияПеречислений + |ГДЕ + | ПредставленияПеречислений.Наименование ПОДОБНО &Текст"; + + ДанныеВыбора = Новый СписокЗначений; + + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + ДанныеВыбора.Добавить(Выборка.Ссылка, Выборка.Наименование); + КонецЦикла; + + Возврат ДанныеВыбора; + +КонецФункции + +// Заполняет шаблон заголовка подчиненной формы свойствами ссылки-владельца, +// например, НСтр("ru = 'Права доступа: %1 (%2)'" -> "Права доступа: Иванов (Пользователь)". +// +// Параметры: +// СсылкаНаВладельца - ссылка на объект-владелец. +// +Функция ЗаголовокПодчиненнойФормы(СтрокаЗаголовкаСПараметрами, СсылкаНаВладельца) Экспорт + + МетаданныеВладельца = СсылкаНаВладельца.Метаданные(); + НаименованиеВладельца = Строка(СсылкаНаВладельца); + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СтрокаЗаголовкаСПараметрами, + НаименованиеВладельца, + НазваниеОбъектаИзМетаданных(МетаданныеВладельца) ); + +КонецФункции + +// Возвращает название объекта метаданных с учетом заданных свойств в порядке: +// - РасширенноеПредставлениеОбъекта, +// - ПредставлениеОбъекта, +// - Синоним, +// - Имя. +// +// Параметры: +// МетаданныеОбъекта - ОбъектМетаданных. +// +// Возвращаемое значение: +// Строка. +// +Функция НазваниеОбъектаИзМетаданных(МетаданныеОбъекта) Экспорт + + Если ЗначениеЗаполнено(МетаданныеОбъекта.РасширенноеПредставлениеОбъекта) Тогда + НазваниеОбъекта = МетаданныеОбъекта.РасширенноеПредставлениеОбъекта; + ИначеЕсли ЗначениеЗаполнено(МетаданныеОбъекта.ПредставлениеОбъекта) Тогда + НазваниеОбъекта = МетаданныеОбъекта.ПредставлениеОбъекта; + ИначеЕсли ЗначениеЗаполнено(МетаданныеОбъекта.Синоним) Тогда + НазваниеОбъекта = МетаданныеОбъекта.Синоним; + Иначе + НазваниеОбъекта = МетаданныеОбъекта.Имя; + КонецЕсли; + + Возврат НазваниеОбъекта; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для начального заполнения + +// Обновляет содержимое регистра сведений ЗависимостиПравДоступа, +// если прикладной разработчик изменил зависимости в переопределяемом модуле. +// +Процедура ОбновитьЗависимостиПравДоступа() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НаборЗаписей = РегистрыСведений.ЗависимостиПравДоступа.СоздатьНаборЗаписей(); + УправлениеДоступомПереопределяемый.ЗаполнитьЗависимостиПравДоступа(НаборЗаписей); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | НовыеЗаписи.ПодчиненнаяТаблица, + | НовыеЗаписи.ТипВедущейТаблицы, + | НовыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы, + | НовыеЗаписи.ПриПроверкеПраваЧтение, + | НовыеЗаписи.ПриПроверкеПраваДобавление, + | НовыеЗаписи.ПриПроверкеПраваИзменение, + | НовыеЗаписи.ПриПроверкеПраваУдаление + |ПОМЕСТИТЬ НовыеЗаписи + |ИЗ + | &НовыеЗаписи КАК НовыеЗаписи + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.ЗависимостиПравДоступа КАК СтарыеЗаписи + | ЛЕВОЕ СОЕДИНЕНИЕ НовыеЗаписи КАК НовыеЗаписи + | ПО СтарыеЗаписи.ПодчиненнаяТаблица = НовыеЗаписи.ПодчиненнаяТаблица + | И СтарыеЗаписи.ТипВедущейТаблицы = НовыеЗаписи.ТипВедущейТаблицы + | И СтарыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы = НовыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы + | И СтарыеЗаписи.ПриПроверкеПраваЧтение = НовыеЗаписи.ПриПроверкеПраваЧтение + | И СтарыеЗаписи.ПриПроверкеПраваДобавление = НовыеЗаписи.ПриПроверкеПраваДобавление + | И СтарыеЗаписи.ПриПроверкеПраваИзменение = НовыеЗаписи.ПриПроверкеПраваИзменение + | И СтарыеЗаписи.ПриПроверкеПраваУдаление = НовыеЗаписи.ПриПроверкеПраваУдаление + |ГДЕ + | НовыеЗаписи.ПодчиненнаяТаблица ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + |ИЗ + | НовыеЗаписи КАК НовыеЗаписи + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗависимостиПравДоступа КАК СтарыеЗаписи + | ПО НовыеЗаписи.ПодчиненнаяТаблица = СтарыеЗаписи.ПодчиненнаяТаблица + | И НовыеЗаписи.ТипВедущейТаблицы = СтарыеЗаписи.ТипВедущейТаблицы + | И НовыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы = СтарыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы + | И НовыеЗаписи.ПриПроверкеПраваЧтение = СтарыеЗаписи.ПриПроверкеПраваЧтение + | И НовыеЗаписи.ПриПроверкеПраваДобавление = СтарыеЗаписи.ПриПроверкеПраваДобавление + | И НовыеЗаписи.ПриПроверкеПраваИзменение = СтарыеЗаписи.ПриПроверкеПраваИзменение + | И НовыеЗаписи.ПриПроверкеПраваУдаление = СтарыеЗаписи.ПриПроверкеПраваУдаление + |ГДЕ + | СтарыеЗаписи.ПодчиненнаяТаблица ЕСТЬ NULL "); + Запрос.УстановитьПараметр("НовыеЗаписи", НаборЗаписей); + + Если НЕ Запрос.Выполнить().Пустой() Тогда + НаборЗаписей.Записать(); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +// Заполняет НаборЗаписей родителями значения доступа, включая себя, как родителя. // // Параметры: // ЗначениеДоступа - СправочникСсылка, ПланВидовХарактеристикСсылка. -// ВидДоступа - ПланВидовХарактеристикСсылка.ВидыДоступа - для заполнения. +// ВидДоступа - ПланВидовХарактеристикСсылка.ВидыДоступа - для заполнения. // // Возвращаемое значение: // НаборЗаписей - РегистрСведенийНаборЗаписей.ГруппыЗначенийДоступа. @@ -5132,7 +5231,6 @@ КонецФункции // ЗаполнитьРодителейЗначенияДоступа() -// Процедура предназначена для внутреннего использования Процедура ДобавитьНаборыДляПрава(Право, ЗависимостиПрав, Таблица, НаборыПравДляУмножения, НаборыОграниченийДляУмножения, НаборыЧтения, НаборыДобавления, НаборыИзменения, СсылкаНаВедущийОбъект) // Определение права, которое требуется проверить. @@ -5189,107 +5287,6 @@ КонецПроцедуры -// Функция ОбновитьГруппыДоступаПрофиля выполняет -// обновление видов доступа групп доступа указанного профиля. -// При этом возможно не удалять виды доступа из группы доступа, -// которые удалены в профиле этой группы доступа, в случае -// когда в группе доступа назначены значения доступа по -// удаляемому виду доступа. -// -// Параметры: -// Профиль - СправочникСсылка.ПрофилиГруппДоступа -// НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа - Булево -// -// Возвращаемое значение: -// Булево - когда Истина, группа доступа была изменена, -// когда Ложь никаких изменений не было выполнено. -// -Функция ОбновитьГруппыДоступаПрофиля(Профиль, НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа) Экспорт - - ГруппаДоступаОбновлена = Ложь; - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ГруппыДоступа.Ссылка - |ИЗ - | Справочник.ГруппыДоступа КАК ГруппыДоступа - |ГДЕ - | (ГруппыДоступа.Профиль = &Профиль - | ИЛИ &Профиль = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) - | И ГруппыДоступа.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы))"); - - Запрос.УстановитьПараметр("Профиль", Профиль.Ссылка); - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - // Проверка необходимости/возможности обновления группы доступа. - ГруппаДоступа = Выборка.Ссылка.ПолучитьОбъект(); - - Если ГруппаДоступа.Ссылка = Справочники.ГруппыДоступа.Администраторы - И ГруппаДоступа.Профиль <> Справочники.ПрофилиГруппДоступа.Администратор Тогда - // Установка профиля Администратор, если не задан. - ГруппаДоступа.Профиль = Справочники.ПрофилиГруппДоступа.Администратор; - КонецЕсли; - - // Проверка состава видов доступа. - СоставВидовДоступаИзменен = Ложь; - ЕстьУдаляемыеВидыДоступаСЗаданнымиЗначениямиДоступа = Ложь; - Если ГруппаДоступа.ВидыДоступа.Количество() <> Профиль.ВидыДоступа.НайтиСтроки(Новый Структура("Предустановленный", Ложь)).Количество() Тогда - СоставВидовДоступаИзменен = Истина; - Иначе - Для каждого СтрокаВидаДоступа Из ГруппаДоступа.ВидыДоступа Цикл - Если Профиль.ВидыДоступа.НайтиСтроки(Новый Структура("ВидДоступа, Предустановленный", СтрокаВидаДоступа.ВидДоступа, Ложь)).Количество() = 0 Тогда - СоставВидовДоступаИзменен = Истина; - Если ГруппаДоступа.ЗначенияДоступа.Найти(СтрокаВидаДоступа.ВидДоступа, "ВидДоступа") <> Неопределено Тогда - ЕстьУдаляемыеВидыДоступаСЗаданнымиЗначениямиДоступа = Истина; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если СоставВидовДоступаИзменен - И ( НЕ НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа - ИЛИ НЕ ЕстьУдаляемыеВидыДоступаСЗаданнымиЗначениямиДоступа ) Тогда - // Обновление группы доступа. - // 1. Удаление лишних видов доступа и значений доступа (если есть). - ТекущийНомерСтроки = ГруппаДоступа.ВидыДоступа.Количество()-1; - Пока ТекущийНомерСтроки >= 0 Цикл - ТекущийВидДоступа = ГруппаДоступа.ВидыДоступа[ТекущийНомерСтроки].ВидДоступа; - Если Профиль.ВидыДоступа.НайтиСтроки(Новый Структура("ВидДоступа, Предустановленный", ТекущийВидДоступа, Ложь)).Количество() = 0 Тогда - СтрокиЗначенийВидаДоступа = ГруппаДоступа.ЗначенияДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущийВидДоступа)); - Для каждого СтрокаЗначения Из СтрокиЗначенийВидаДоступа Цикл - ГруппаДоступа.ЗначенияДоступа.Удалить(СтрокаЗначения); - КонецЦикла; - ГруппаДоступа.ВидыДоступа.Удалить(ТекущийНомерСтроки); - КонецЕсли; - ТекущийНомерСтроки = ТекущийНомерСтроки - 1; - КонецЦикла; - // 2. Добавление новых видов доступа (если есть). - Для каждого СтрокаВидаДоступа Из Профиль.ВидыДоступа Цикл - Если НЕ СтрокаВидаДоступа.Предустановленный - И ГруппаДоступа.ВидыДоступа.Найти(СтрокаВидаДоступа.ВидДоступа, "ВидДоступа") = Неопределено Тогда - - НоваяСтрока = ГруппаДоступа.ВидыДоступа.Добавить(); - НоваяСтрока.ВидДоступа = СтрокаВидаДоступа.ВидДоступа; - НоваяСтрока.ДоступРазрешен = СтрокаВидаДоступа.ДоступРазрешен; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если ГруппаДоступа.Модифицированность() Тогда - ЗаблокироватьДанныеДляРедактирования(ГруппаДоступа.Ссылка, ГруппаДоступа.ВерсияДанных); - ГруппаДоступа.ДополнительныеСвойства.Вставить("НеОбновлятьРолиПользователей"); - ГруппаДоступа.Записать(); - ГруппаДоступаОбновлена = Истина; - РазблокироватьДанныеДляРедактирования(ГруппаДоступа.Ссылка); - КонецЕсли; - КонецЦикла; - - Возврат ГруппаДоступаОбновлена; - -КонецФункции - -// Только для внутреннего использования Процедура ПриИзмененииНаборовЗначенийДоступа(Знач СсылкаНаОбъект) СсылкиНаЗависимыеОбъекты = Новый Массив; @@ -5297,7 +5294,7 @@ Для каждого СсылкаНаЗависимыйОбъект Из СсылкиНаЗависимыеОбъекты Цикл // - Если Метаданные.НайтиПоТипу(ТипЗнч(СсылкаНаЗависимыйОбъект)).ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда + Если СсылкаНаЗависимыйОбъект.Метаданные().ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда // Изменение объекта не требуется ЗаписатьНаборыЗначенийДоступа(СсылкаНаЗависимыйОбъект); Иначе @@ -5334,7 +5331,6 @@ КонецПроцедуры -// Только для внутреннего использования Функция ЭтоОбъектРучногоОбновленияЗависимыхНаборовЗначенийДоступа(Ссылка) УстановитьПривилегированныйРежим(Истина); @@ -5353,7 +5349,6 @@ КонецФункции -// Только для внутреннего использования Функция НаборыЗначенийДоступаРегистраИзменены(СсылкаНаОбъект, НаборЗаписей) Запрос = Новый Запрос; @@ -5438,7 +5433,6 @@ КонецФункции -// Только для внутреннего использования Функция НаборыЗначенийДоступаТабличнойЧастиИзменены(СсылкаНаОбъект, НовыеНаборы) Запрос = Новый Запрос; @@ -5508,3 +5502,26 @@ Возврат НЕ Запрос.Выполнить().Пустой(); КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы + +// Обработчик обновления информационной базы +Процедура ОбновитьПодчиненностьПользователей_1_1_2_3() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Константы.ДобавлятьРуководителямДоступПодчиненных.Установить(Ложь); + Константы.ДобавлятьРуководителямДоступПодчиненных.Установить(Истина); + +КонецПроцедуры + +// Обработчик обновления информационной базы +Процедура ОбновитьПодчиненностьПользователей_1_1() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыПользователей.ВсеПользователи); + ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеДоступомВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомВМоделиСервиса/Module.bsl new file mode 100644 index 000000000..f754ab89c --- /dev/null +++ b/SSL/src/CommonModules/УправлениеДоступомВМоделиСервиса/Module.bsl @@ -0,0 +1,119 @@ +/////////////////////////////////////////////////////////////////////////////////// +// УправлениеДоступомВМоделиСервиса. +// +/////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Устанавливает в очереди заданий флаг использования того задания, которое +// соответствует регламентному заданию для заполнения данных ограничения доступа. +// +// Параметры: +// Использование - Булево - новое значения флага использования. +// +Процедура УстановитьИспользованиеЗаданияЗаполненияДанных(Знач Использование) Экспорт + + ОтборДляПоиска = Новый Структура("ИмяМетода", "УправлениеДоступом.ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания"); + МассивРегламентныеЗадания = ОчередьЗаданий.ПолучитьРегламентныеЗадания(ОтборДляПоиска); + Для Каждого Задание Из МассивРегламентныеЗадания Цикл + Задание.Использование = Использование; + ОчередьЗаданий.Записать(Задание); + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.0.1.13"; + Обработчик.Процедура = "УправлениеДоступомВМоделиСервиса.ОбновитьГруппыДоступаАдминистраторовВМоделиСервиса"; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы + +// Перемещает всех пользователей из группы доступа "Администраторы данных" в +// группу доступа Администраторы. +// Удаляет профиль "Администратор данных" и группу доступа "Администраторы данных". +// +Процедура ОбновитьГруппыДоступаАдминистраторовВМоделиСервиса() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПрофильАдминистраторДанныхСсылка = Справочники.ПрофилиГруппДоступа.ПолучитьСсылку( + Новый УникальныйИдентификатор("f0254dd0-3558-4430-84c7-154c558ae1c9")); + + ГруппаДоступаАдминистраторыДанныхСсылка = Справочники.ГруппыДоступа.ПолучитьСсылку( + Новый УникальныйИдентификатор("c7684994-34c9-4ddc-b31c-05b2d833e249")); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПрофильАдминистраторДанныхСсылка", ПрофильАдминистраторДанныхСсылка); + Запрос.УстановитьПараметр("ГруппаДоступаАдминистраторыДанныхСсылка", ГруппаДоступаАдминистраторыДанныхСсылка); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | ГруппыДоступа.Ссылка = &ГруппаДоступаАдминистраторыДанныхСсылка + | И ГруппыДоступа.Профиль = &ПрофильАдминистраторДанныхСсылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + |ГДЕ + | ПрофилиГруппДоступа.Ссылка = &ПрофильАдминистраторДанныхСсылка"; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить("Справочник.ПрофилиГруппДоступа"); + Блокировка.Добавить("Справочник.ГруппыДоступа"); + Блокировка.Заблокировать(); + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + Если НЕ РезультатыЗапроса[0].Пустой() Тогда + ГруппаАдминистраторы = Справочники.ГруппыДоступа.Администраторы.ПолучитьОбъект(); + ГруппаАдминистраторыДанных = ГруппаДоступаАдминистраторыДанныхСсылка.ПолучитьОбъект(); + + + Если ГруппаАдминистраторыДанных.Пользователи.Количество() > 0 Тогда + Для каждого Строка Из ГруппаАдминистраторыДанных.Пользователи Цикл + Если ГруппаАдминистраторы.Пользователи.Найти(Строка.Пользователь, "Пользователь") = Неопределено Тогда + ГруппаАдминистраторы.Пользователи.Добавить().Пользователь = Строка.Пользователь; + КонецЕсли; + КонецЦикла; + ГруппаАдминистраторы.Записать(); + КонецЕсли; + ГруппаАдминистраторыДанных.Удалить(); + КонецЕсли; + + Если НЕ РезультатыЗапроса[1].Пустой() Тогда + ПрофильАдминистраторДанных = ПрофильАдминистраторДанныхСсылка.ПолучитьОбъект(); + ПрофильАдминистраторДанных.Удалить(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/УправлениеДоступомВМоделиСервиса/УправлениеДоступомВМоделиСервиса.mdo b/SSL/src/CommonModules/УправлениеДоступомВМоделиСервиса/УправлениеДоступомВМоделиСервиса.mdo new file mode 100644 index 000000000..b250f9746 --- /dev/null +++ b/SSL/src/CommonModules/УправлениеДоступомВМоделиСервиса/УправлениеДоступомВМоделиСервиса.mdo @@ -0,0 +1,11 @@ + + + УправлениеДоступомВМоделиСервиса + + ru + Управление доступом в модели сервиса + + true + true + true + diff --git a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl index 6b68eefec..39b954da7 100644 --- a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl @@ -1,9 +1,13 @@ //////////////////////////////////////////////////////////////////////////////// -// ПЕРЕОПРЕДЕЛЯЕМЫЕ ФУНКЦИИ УПРАВЛЕНИЯ ДОСТУПОМ +// Подсистема "Управление доступом". +// +//////////////////////////////////////////////////////////////////////////////// -// Функция ОписанияНачальногоЗаполненияПрофилейГруппДоступа возвращает -// массив структур, которые будут использованы для начального заполнения и -// восстановления начального заполнения профилей. +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает массив структур, которые будут использованы для начального заполнения +// или восстановления начального заполнения профилей групп доступа. // // Пустая структура может быть получена при помощи функции // УправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа(). @@ -25,9 +29,8 @@ КонецФункции -// Процедура ЗаполнитьСвойстваВидаДоступа заполняет свойства видов доступа, -// заданных прикладным разработчиком, как предопределенные элементы -// в плане видов характеристик ВидыДоступа. +// Заполняет свойства видов доступа, заданных прикладным разработчиком, +// в виде предопределенных элементов в объекте ПланВидовХарактеристик.ВидыДоступа. // Структуру свойств см. в функции, вызывающей эту процедуру: // УправлениеДоступомСерверПовтИсп.СвойстваВидовДоступа(). // @@ -38,33 +41,38 @@ // Процедура ЗаполнитьСвойстваВидаДоступа(Знач Свойства) Экспорт - // БизнесПроцессыИЗадачи + // СтандартныеПодсистемы.БизнесПроцессыИЗадачи Если Свойства.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.Пользователи Тогда Свойства.Таблицы.Добавить("Справочник.ГруппыИсполнителейЗадач"); - // Конец БизнесПроцессыИЗадачи + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи - // РаботаСПочтовымиСообщениями + // СтандартныеПодсистемы.РаботаСПочтовымиСообщениями ИначеЕсли Свойства.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.УчетныеЗаписиЭлектроннойПочты Тогда Свойства.Таблицы.Добавить("Справочник.УчетныеЗаписиЭлектроннойПочты"); - // Конец РаботаСПочтовымиСообщениями + // Конец СтандартныеПодсистемы.РаботаСПочтовымиСообщениями - // Свойства + // СтандартныеПодсистемы.Свойства ИначеЕсли Свойства.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ДополнительныеСведения Тогда Свойства.Таблицы.Добавить("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения"); - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства - // Организации + // СтандартныеПодсистемы.Организации ИначеЕсли Свойства.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.Организации Тогда Свойства.Таблицы.Добавить("Справочник.Организации"); - // Конец Организации - + // Конец СтандартныеПодсистемы.Организации + + // СтандартныеПодсистемы.РаботаСФайлами + ИначеЕсли Свойства.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПапкиФайлов Тогда + Свойства.Таблицы.Добавить("Справочник.ПапкиФайлов"); + Свойства.ВидДоступаЧерезПраваПоЗначениямДоступа = Истина; + // Конец СтандартныеПодсистемы.РаботаСФайлами + КонецЕсли; КонецПроцедуры -// Процедура ЗаполнитьВозможныеПраваПоЗначениямДоступа заполняет -// описания возможных прав значений доступа. +// Заполняет описания возможных прав, назначаемых по значениям доступа. // Структуру описаний см. в функции, вызывающей эту процедуру: // УправлениеДоступомСерверПовтИсп.ВозможныеПраваПоЗначениямДоступа(). // @@ -75,69 +83,103 @@ // Процедура ЗаполнитьВозможныеПраваПоЗначениямДоступа(Знач ВозможныеПрава) Экспорт + // СтандартныеПодсистемы.РаботаСФайлами + //////////////////////////////////////////////////////////// + // Справочник.ПапкиФайлов + //////////////////////////////////////////////////////////// + Право = ВозможныеПрава.Добавить(); + Право.ВладелецПрав = "Справочник.ПапкиФайлов"; + Право.Имя = "ЧтениеПапокИФайлов"; + Право.Синоним = НСтр("ru = 'Чтение папок и файлов'"); + Право.Сокращение = НСтр("ru = 'Чтение'"); + Право.Заголовок = НСтр("ru = 'Чт'"); + Право.НачальноеЗначение = Истина; + // Требуемая роль (одна из указанных) + Право.ТребуемаяРоль.Добавить("РаботаСПапкамиФайлов"); + // Права для стандартных шаблонов ограничений доступа. + Право.ЧтениеВТаблицах.Добавить("Справочник.ПапкиФайлов"); + Право.ЧтениеВТаблицах.Добавить("Справочник.Файлы"); + Право.ЧтениеВТаблицах.Добавить("Справочник.ВерсииФайлов"); + Право.ЧтениеВТаблицах.Добавить("РегистрСведений.ХранимыеФайлыВерсий"); + + Право = ВозможныеПрава.Добавить(); + Право.ВладелецПрав = "Справочник.ПапкиФайлов"; + Право.Имя = "ДобавлениеПапокИФайлов"; + Право.Синоним = НСтр("ru = 'Добавление папок и файлов'"); + Право.Сокращение = НСтр("ru = 'Добавление'"); + Право.Заголовок = НСтр("ru = 'Доб'"); + // Права, требуемые для этого права. + Право.ТребуемыеПрава.Добавить("ЧтениеПапокИФайлов"); + Право.ТребуемыеПрава.Добавить("ИзменениеПапокИФайлов"); + // Требуемая роль (одна из указанных). + Право.ТребуемаяРоль.Добавить("РаботаСПапкамиФайлов"); + // Права для стандартных шаблонов ограничений доступа. + Право.ДобавлениеВТаблицах.Добавить("Справочник.ПапкиФайлов"); + Право.ДобавлениеВТаблицах.Добавить("Справочник.Файлы"); + + Право = ВозможныеПрава.Добавить(); + Право.ВладелецПрав = "Справочник.ПапкиФайлов"; + Право.Имя = "ИзменениеПапокИФайлов"; + Право.Синоним = НСтр("ru = 'Изменение папок и файлов'"); + Право.Сокращение = НСтр("ru = 'Изменение'"); + Право.Заголовок = НСтр("ru = 'Изм'"); + // Требуемая роль (одна из указанных). + Право.ТребуемаяРоль.Добавить("РаботаСПапкамиФайлов"); + Право.ТребуемыеПрава.Добавить("ЧтениеПапокИФайлов"); + // Права для стандартных шаблонов ограничений доступа. + Право.ИзменениеВТаблицах.Добавить("Справочник.ПапкиФайлов"); + Право.ИзменениеВТаблицах.Добавить("Справочник.Файлы"); + + Право = ВозможныеПрава.Добавить(); + Право.ВладелецПрав = "Справочник.ПапкиФайлов"; + Право.Имя = "ПометкаУдаленияПапокИФайлов"; + Право.Синоним = НСтр("ru = 'Пометка удаления папок и файлов'"); + Право.Сокращение = НСтр("ru = 'Пометка удаления'"); + Право.Заголовок = НСтр("ru = 'ПомУд'"); + // Права, требуемые для этого права. + Право.ТребуемыеПрава.Добавить("ЧтениеПапокИФайлов"); + Право.ТребуемыеПрава.Добавить("ИзменениеПапокИФайлов"); + // Требуемая роль (одна из указанных) + Право.ТребуемаяРоль.Добавить("РаботаСПапкамиФайлов"); + + Право = ВозможныеПрава.Добавить(); + Право.ВладелецПрав = "Справочник.ПапкиФайлов"; + Право.Имя = "УправлениеПравами"; + Право.Синоним = НСтр("ru = 'Управление правами папок файлов'"); + Право.Сокращение = НСтр("ru = 'Управление правами'"); + Право.Заголовок = НСтр("ru = 'Адм'"); + // Права, требуемые для этого права. + Право.ТребуемыеПрава.Добавить("ЧтениеПапокИФайлов"); + // Требуемая роль (одна из указанных) + Право.ТребуемаяРоль.Добавить("РаботаСПапкамиФайлов"); + + // Конец СтандартныеПодсистемы.РаботаСФайлами КонецПроцедуры -// Функция ТаблицаПодчиненностиПользователей, возвращает в менеджере временных таблиц -// таблицу, содержащую пользователей, подчиненных другим пользователям, -// для расширения доступа пользователей доступом подчиненных пользователей. +// Возвращает менеджер временных таблиц, содержащий временную таблицу пользователей, +// подчиненных другим пользователям, для расширения доступа пользователей-руководителей +// доступом пользователей-подчиненных. // -// Например, если есть справочник Подразделения у которого есть руководитель (пользователь) -// и состав сотрудников (пользователей), то можно сделать выборку из этого справочника +// Например, если есть справочник Подразделения у которого есть пользователь-руководитель +// и состав пользователей-сотрудников, то можно сделать выборку из этого справочника // и поместить во временную таблицу. -// При записи групп пользователей, будет учтено, что руководители (пользователи) должны -// иметь доступ, включающий доступ их подчиненных (пользователей). +// При записи групп пользователей, будет учтено, что пользователи-руководители должны +// иметь доступ, включающий доступ их пользователей-подчиненных. // При изменении связи Руководитель<->Подчиненный, например, при изменении руководителя -// в подразделении, нужно вызвать в модуле УправлениеДоступом процедуру +// в подразделении, нужно в модуле УправлениеДоступом вызвать процедуру // ЗаписатьГруппыИВидыДоступа(Справочник.ГруппыПользователей.ВсеПользователи), чтобы -// произошло обновление связей, при котором используется эта процедура. -// -// При записи связей выполняется обновление ролей пользователей информационной базы (если нужно), -// при этом возможны ошибки, например, если роль была переименована. -// Чтобы при интерактивной записи нового руководителя сообщить о ошибке, нужно -// сделать вызов в таком виде: -// -////Процедура ПриЗаписи(Отказ) -//// -//// ВсеПользователи = Справочники.ГруппыПользователей.ВсеПользователи.ПолучитьОбъект(); -//// УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(ВсеПользователи); -//// Если ВсеПользователи.ДополнительныеСвойства.Свойство("ЕстьОшибки") Тогда -//// ДополнительныеСвойства.Вставить("ЕстьОшибки"); -//// КонецЕсли; -//// -////КонецПроцедуры -// -// А в форме подразделения разместить обработчики событий: -// -////&НаСервере -////Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) -//// -//// Если ТекущийОбъект.ДополнительныеСвойства.Свойство("ЕстьОшибки") Тогда -//// ПараметрыЗаписи.Вставить("ЕстьОшибки"); -//// КонецЕсли; -//// -////КонецПроцедуры -// -////&НаКлиенте -////Процедура ПослеЗаписи(ПараметрыЗаписи) -//// -//// Если ПараметрыЗаписи.Свойство("ЕстьОшибки") Тогда -//// Предупреждение(НСтр("ru = 'При записи возникли ошибки (см. журнал регистрации)'")); -//// КонецЕсли; -//// -////КонецПроцедуры -// +// произошло обновление данных, в формировании которых используется эта процедура. // // Параметры: -// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц в который можно поместить таблицу подчиненности пользователей. -// Поля: +// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц в который можно поместить таблицу: +// ТаблицаПодчиненностиПользователей с полями: // Пользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи // ПодчиненныйПользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи // // Возвращаемое значение: -// Булево. - если Истина, МенеджерВременныхТаблиц - содержит временную таблицу "ТаблицаПодчиненностиПользователей", -// с колонками Пользователь и ПодчиненныйПользователь, имеющих тип СправочникСсылка.Пользователи. +// Булево - если Истина, МенеджерВременныхТаблиц содержит временную таблицу, иначе нет. // Функция ТаблицаПодчиненностиПользователей(МенеджерВременныхТаблиц) Экспорт @@ -145,33 +187,28 @@ Возврат Ложь; -КонецФункции // ТаблицаПодчиненностиПользователей() +КонецФункции -// Функция ТаблицаГруппИсполнителей, возвращает в менеджере временных таблиц -// таблицу, содержащую пользователей некоторой дополнительной группы пользователей, -// -// например, группы доступа исполнителей задач, которая соответствует -// ключу адресации (например, РольИсполнителя + ОсновнойОбъектАдресации + ДополнительныйОбъектАдресации). -// -// Функция вызывается из процедуры УправлениеДоступом.ЗаписатьГруппыИВидыДоступа() при обновлении соответствия -// пользователей и групп пользователей, выполняемом, обычно при изменении пользователя, группы пользователя -// или некоторой дополнительной группы пользователей. -// -// Причем, при изменении состава дополнительных групп пользователей, вызов должен сделать прикладной разработчик -// "ЗаписатьГруппыИВидыДоступа(Справочник.ГруппыПользователей.ВсеПользователи);". +// Возвращает менеджер временных таблиц, содержащий временную таблицу пользователей +// некоторых дополнительных групп пользователей, например, пользователей групп исполнителей задач, +// которые соответствуют ключам адресации (РольИсполнителя + ОсновнойОбъектАдресации + ДополнительныйОбъектАдресации). // +// При изменении состава дополнительных групп пользователей, необходимо сделать вызов +// "УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Справочник.ГруппыПользователей.ВсеПользователи);", +// чтобы применить изменения к внутренним данным подсистемы. // // Параметры: -// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц в который можно поместить таблицу групп исполнителей. +// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц в который можно поместить таблицу +// ТаблицаГруппИсполнителей с полями: +// ГруппаИсполнителей - например, СправочникСсылка.ГруппыИсполнителейЗадач +// Пользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи // // Возвращаемое значение: -// Булево - если Истина, МенеджерВременныхТаблиц - содержит временную таблицу "ТаблицаГруппИсполнителей", с колонками -// ГруппаИсполнителей (например, СправочникСсылка.ГруппыДоступаИсполнителей) и -// Пользователь (тип СправочникСсылка.Пользователи). +// Булево - если Истина, МенеджерВременныхТаблиц содержит временную таблицу, иначе нет. // Функция ТаблицаГруппИсполнителей(МенеджерВременныхТаблиц) Экспорт - // БизнесПроцессыИЗадачи + // СтандартныеПодсистемы.БизнесПроцессыИЗадачи Запрос = Новый Запрос( "ВЫБРАТЬ РАЗЛИЧНЫЕ | ИсполнителиЗадач.ГруппаИсполнителейЗадач КАК ГруппаИсполнителей, @@ -183,26 +220,25 @@ Запрос.Выполнить(); Возврат Истина; - // Конец БизнесПроцессыИЗадачи + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи Возврат Ложь; -КонецФункции // ТаблицаГруппИсполнителей() +КонецФункции -// Процедура ПриИзмененииНаборовЗначенийДоступа объекта позволяет -// реализовать перезапись зависимых наборов значений доступа других объектов. +// Позволяет реализовать перезапись зависимых наборов значений доступа других объектов. // // Вызывается из процедур: // УправлениеДоступом.ЗаписатьНаборыЗначенийДоступа(), // УправлениеДоступом.ЗаписатьЗависимыеНаборыЗначенийДоступа(). -// // // Параметры: -// Ссылка - СправочникСсылка, ДокументСсылка, ... +// Ссылка - СправочникСсылка, ДокументСсылка, ... - ссылка на объект для которого +// записаны наборы значений доступа. // // СсылкиНаЗависимыеОбъекты - Массив элементов типа СправочникСсылка, ДокументСсылка, ... // Содержит ссылки на объекты с зависимыми наборами значений доступа -// Начальное значение - пустой массив +// Начальное значение - пустой массив. // Процедура ПриИзмененииНаборовЗначенийДоступа(Знач Ссылка, СсылкиНаЗависимыеОбъекты) Экспорт @@ -210,23 +246,24 @@ КонецПроцедуры -// Процедура ЗаполнитьЗависимостиПравДоступа заполняет зависимости прав доступа -// "подчиненного" объекта, например, задачи ЗадачаИсполнителя, -// от "ведущего" объекта, например, бизнес-процесса Задание, -// которые отличаются от стандартных, а именно, когда -// в стандартном шаблоне ограничения доступа используется вид доступа "Объект": -// 1) при чтении "подчиненного" объекта +// Заполняет зависимости прав доступа "подчиненного" объекта, например, задачи ЗадачаИсполнителя, +// от "ведущего" объекта, например, бизнес-процесса Задание, которые отличаются от стандартных. +// +// Зависимости прав используются в стандартном шаблоне ограничения доступа для вида доступа "Объект": +// 1) стандартно при чтении "подчиненного" объекта // проверяется наличие права чтения "ведущего" объекта // и проверяется отсутствие ограничения чтения "ведущего" объекта; -// 2) при добавлении, изменении, удалении "подчиненного" объекта +// 2) стандартно при добавлении, изменении, удалении "подчиненного" объекта // проверяется наличие права изменения "ведущего" объекта // и проверяется отсутствие ограничения изменения "ведущего" объекта. // // Параметры: // Таблица - РегистрСведенийНаборЗаписей.ЗависимостиПравДоступа. -// Допустимые значения ресурсов ПланВидовХарактеристикСсылка: -// .ПравоЧтения, .ПравоДобавления, .ПравоИзменения. -// +// Допустимые значения ресурсов: +// "ПланыВидовХарактеристик.ВидыДоступа.ПравоЧтения", +// "ПланыВидовХарактеристик.ВидыДоступа.ПравоДобавления", +// "ПланыВидовХарактеристик.ВидыДоступа.ПравоИзменения". +// // Если задано недопустимое значение, будет установлено значение по умолчанию: // для права Чтение - ПланыВидовХарактеристик.ВидыДоступа.ПравоЧтения, // для прав Добавление, Изменение, Удаление - ПланыВидовХарактеристик.ВидыДоступа.ПравоИзменения. @@ -238,7 +275,7 @@ // Процедура ЗаполнитьЗависимостиПравДоступа(Знач Таблица) Экспорт - // БизнесПроцессыИЗадачи + // СтандартныеПодсистемы.БизнесПроцессыИЗадачи // Задача исполнителя может быть изменена, когда бизнес-процесс доступен только для чтения, // поэтому проверка права изменения и ограничения изменения не требуется, @@ -252,18 +289,18 @@ // Для права Изменения проверка изменяется с "Изменение" на "Чтение". Строка.ПриПроверкеПраваИзменение = ПланыВидовХарактеристик.ВидыДоступа.ПравоЧтения; - // Конец БизнесПроцессыИЗадачи + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи КонецПроцедуры -// Функция УпрощенныйИнтерфейсНастройкиПравДоступа возвращает -// вид используемого интерфейса для настройки прав доступа -// Это позволяет для прикладных конфигураций -// с небольшим количеством пользователей -// использовать более простой, но менее -// функциональный интерфейс. +// Возвращает вид используемого интерфейса для настройки прав доступа. +// +// Упрощенный интерфейс удобен для конфигураций с небольшим количеством пользователей, +// так как много функций не требуются и они могут быть скрыты (скрытие не может быть +// выполнено только лишь функциональной опцией, так как потребуется пересмотр +// содержимого групп доступа и профилей). // // Возвращаемое значение: // Булево @@ -274,12 +311,13 @@ КонецФункции -// Процедура ЗаполнитьВидыОграниченийПравОбъектовМетаданных -// заполняет описание видов ограничений прав объектов метаданных +// Заполняет состав видов доступа, используемых при ограничении прав объектов метаданных. +// Если состав видов доступа не заполнен, отчет "Права доступа" покажет некорректые сведения. +// // Обязательно требуется заполнить только виды доступа, используемые -// в шаблонах явно, виды доступа, используемые в наборах значений -// доступа могут быть получены из текущего состояния регистра -// сведений НаборыЗначенийДоступа. +// в шаблонах ограничения доступа явно, а виды доступа, используемые +// в наборах значений доступа могут быть получены из текущего состояния +// регистра сведений НаборыЗначенийДоступа. // // Для автоматической подготовки содержимого процедуры следует // воспользоваться инструментами разработчика для подсистемы @@ -313,7 +351,137 @@ // Процедура ЗаполнитьВидыОграниченийПравОбъектовМетаданных(Описание) Экспорт + Описание = ""; + + // СтандартныеПодсистемы.БизнесПроцессыИЗадачи + Описание = Описание + + " + |РегистрСведений.ИсполнителиЗадач.Чтение.Организации + |РегистрСведений.ИсполнителиЗадач.Изменение.Организации + |БизнесПроцесс.Задание.Чтение.Пользователи + |БизнесПроцесс.Задание.Добавление.Пользователи + |БизнесПроцесс.Задание.Изменение.Пользователи + |Задача.ЗадачаИсполнителя.Чтение.Объект.БизнесПроцесс.Задание + |Задача.ЗадачаИсполнителя.Чтение.Пользователи + |Задача.ЗадачаИсполнителя.Изменение.Пользователи + |РегистрСведений.ДанныеБизнесПроцессов.Чтение.Объект.БизнесПроцесс.Задание + |"; + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи + + // СтандартныеПодсистемы.Взаимодействия + Описание = Описание + + " + |Справочник.ПапкиЭлектронныхПисем.Чтение.УчетныеЗаписиЭлектроннойПочты + |Справочник.ПапкиЭлектронныхПисем.Добавление.УчетныеЗаписиЭлектроннойПочты + |Справочник.ПапкиЭлектронныхПисем.Изменение.УчетныеЗаписиЭлектроннойПочты + |Справочник.ПравилаОбработкиЭлектроннойПочты.Чтение.УчетныеЗаписиЭлектроннойПочты + |Справочник.ПравилаОбработкиЭлектроннойПочты.Добавление.УчетныеЗаписиЭлектроннойПочты + |Справочник.ПравилаОбработкиЭлектроннойПочты.Изменение.УчетныеЗаписиЭлектроннойПочты + |Документ.Встреча.Чтение.Объект.Документ.Встреча + |Документ.Встреча.Добавление.Объект.Документ.Встреча + |Документ.Встреча.Изменение.Объект.Документ.Встреча + |Документ.ЗапланированноеВзаимодействие.Чтение.Объект.Документ.ЗапланированноеВзаимодействие + |Документ.ЗапланированноеВзаимодействие.Добавление.Объект.Документ.ЗапланированноеВзаимодействие + |Документ.ЗапланированноеВзаимодействие.Изменение.Объект.Документ.ЗапланированноеВзаимодействие + |Документ.ТелефонныйЗвонок.Чтение.Объект.Документ.ТелефонныйЗвонок + |Документ.ТелефонныйЗвонок.Добавление.Объект.Документ.ТелефонныйЗвонок + |Документ.ТелефонныйЗвонок.Изменение.Объект.Документ.ТелефонныйЗвонок + |Документ.ЭлектронноеПисьмоВходящее.Чтение.Объект.Документ.ЭлектронноеПисьмоВходящее + |Документ.ЭлектронноеПисьмоВходящее.Добавление.Объект.Документ.ЭлектронноеПисьмоВходящее + |Документ.ЭлектронноеПисьмоВходящее.Изменение.Объект.Документ.ЭлектронноеПисьмоВходящее + |Документ.ЭлектронноеПисьмоИсходящее.Чтение.Объект.Документ.ЭлектронноеПисьмоИсходящее + |Документ.ЭлектронноеПисьмоИсходящее.Добавление.Объект.Документ.ЭлектронноеПисьмоИсходящее + |Документ.ЭлектронноеПисьмоИсходящее.Изменение.Объект.Документ.ЭлектронноеПисьмоИсходящее + |ЖурналДокументов.Взаимодействия.Чтение.Объект.Документ.Встреча + |ЖурналДокументов.Взаимодействия.Чтение.Объект.Документ.ЗапланированноеВзаимодействие + |ЖурналДокументов.Взаимодействия.Чтение.Объект.Документ.ТелефонныйЗвонок + |ЖурналДокументов.Взаимодействия.Чтение.Объект.Документ.ЭлектронноеПисьмоВходящее + |ЖурналДокументов.Взаимодействия.Чтение.Объект.Документ.ЭлектронноеПисьмоИсходящее + |РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты.Чтение.УчетныеЗаписиЭлектроннойПочты + |"; + // Конец СтандартныеПодсистемы.Взаимодействия + + + // СтандартныеПодсистемы.Организации + Описание = Описание + + " + |Справочник.Организации.Чтение.Организации + |"; + // Конец СтандартныеПодсистемы.Организации + + + // СтандартныеПодсистемы.Пользователи + Описание = Описание + + " + |Справочник.ВнешниеПользователи.Чтение.ВнешниеПользователи + |Справочник.ВнешниеПользователи.Изменение.ВнешниеПользователи + |Справочник.ГруппыВнешнихПользователей.Чтение.ВнешниеПользователи + |Справочник.ГруппыПользователей.Чтение.Пользователи + |Справочник.Пользователи.Чтение.Пользователи + |Справочник.Пользователи.Изменение.Пользователи + |РегистрСведений.СоставыГруппПользователей.Чтение.ВнешниеПользователи + |РегистрСведений.СоставыГруппПользователей.Чтение.Пользователи + |"; + // Конец СтандартныеПодсистемы.Пользователи + + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + Описание = Описание + + " + |Справочник.ВстречаПрисоединенныеФайлы.Чтение.Объект.Документ.Встреча + |Справочник.ВстречаПрисоединенныеФайлы.Добавление.Объект.Документ.Встреча + |Справочник.ВстречаПрисоединенныеФайлы.Изменение.Объект.Документ.Встреча + |Справочник.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Чтение.Объект.Документ.ЗапланированноеВзаимодействие + |Справочник.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Добавление.Объект.Документ.ЗапланированноеВзаимодействие + |Справочник.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Изменение.Объект.Документ.ЗапланированноеВзаимодействие + |Справочник.ТелефонныйЗвонокПрисоединенныеФайлы.Чтение.Объект.Документ.ТелефонныйЗвонок + |Справочник.ТелефонныйЗвонокПрисоединенныеФайлы.Добавление.Объект.Документ.ТелефонныйЗвонок + |Справочник.ТелефонныйЗвонокПрисоединенныеФайлы.Изменение.Объект.Документ.ТелефонныйЗвонок + |Справочник.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Чтение.Объект.Документ.ЭлектронноеПисьмоВходящее + |Справочник.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Добавление.Объект.Документ.ЭлектронноеПисьмоВходящее + |Справочник.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Изменение.Объект.Документ.ЭлектронноеПисьмоВходящее + |Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Чтение.Объект.Документ.ЭлектронноеПисьмоИсходящее + |Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Добавление.Объект.Документ.ЭлектронноеПисьмоИсходящее + |Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Изменение.Объект.Документ.ЭлектронноеПисьмоИсходящее + |"; + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + + + // СтандартныеПодсистемы.РаботаСПочтовымиСообщениями + Описание = Описание + + " + |Справочник.УчетныеЗаписиЭлектроннойПочты.Чтение.УчетныеЗаписиЭлектроннойПочты + |"; + // Конец СтандартныеПодсистемы.РаботаСПочтовымиСообщениями + + + // СтандартныеПодсистемы.РаботаСФайлами + Описание = Описание + + " + |Справочник.ПапкиФайлов.Чтение.ПапкиФайлов + |Справочник.ПапкиФайлов.Добавление.ПапкиФайлов + |Справочник.ПапкиФайлов.Изменение.ПапкиФайлов + |Справочник.ВерсииФайлов.Чтение.Объект.Справочник.ПапкиФайлов + |Справочник.ВерсииФайлов.Чтение.Объект.БизнесПроцесс.Задание + |Справочник.Файлы.Чтение.Объект.Справочник.ПапкиФайлов + |Справочник.Файлы.Чтение.Объект.БизнесПроцесс.Задание + |Справочник.Файлы.Добавление.Объект.Справочник.ПапкиФайлов + |Справочник.Файлы.Добавление.Объект.БизнесПроцесс.Задание + |Справочник.Файлы.Изменение.Объект.Справочник.ПапкиФайлов + |Справочник.Файлы.Изменение.Объект.БизнесПроцесс.Задание + |РегистрСведений.ХранимыеФайлыВерсий.Чтение.Объект.БизнесПроцесс.Задание + |РегистрСведений.ХранимыеФайлыВерсий.Чтение.Объект.Справочник.ПапкиФайлов + |"; + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.Свойства + Описание = Описание + + " + |ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Чтение.ДополнительныеСведения + |РегистрСведений.ДополнительныеСведения.Чтение.ДополнительныеСведения + |РегистрСведений.ДополнительныеСведения.Изменение.ДополнительныеСведения + |"; + // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры - diff --git a/SSL/src/CommonModules/УправлениеДоступомСерверПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСерверПовтИсп/Module.bsl index e5fd84f0c..2f140c4a9 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСерверПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСерверПовтИсп/Module.bsl @@ -1,6 +1,13 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Управление доступом". +// +//////////////////////////////////////////////////////////////////////////////// -// Функция СвойстваВидовДоступа возвращает таблицу свойств видов доступа, -// созданную на основе данных, заполняемых в процедуре, подготовленной прикладным разработчиком: +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Возвращает таблицу свойств видов доступа, созданную на основе данных, +// заполняемых в процедуре, подготовленной прикладным разработчиком: // УправлениеДоступомПереопределяемый.ЗаполнитьСвойстваВидаДоступа(ВидДоступа). // // Возвращаемое значение: @@ -91,7 +98,7 @@ КонецФункции -// Функция ВозможныеПраваПоЗначениямДоступа возвращает таблицу описаний возможных прав значений доступа, +// Возвращает таблицу описаний возможных прав значений доступа, // созданную с использованием процедуры, подготовленной прикладным разработчиком: // УправлениеДоступомПереопределяемый.ЗаполнитьВозможныеПраваПоЗначениямДоступа(). // @@ -156,8 +163,7 @@ КонецФункции -// Функция ОграничиваемыеПраваОбъектовМетаданныхРолей возвращает таблицу, -// содержащую права доступа Чтение, Добавление, Изменение, Удаление, +// Возвращает таблицу, содержащую права доступа Чтение, Добавление, Изменение, Удаление, // заданные в ролях по все объектам метаданных. Только эти права могут ограничиваться. // Таблица применяется при обновлении таблиц ролей в профилях групп доступа // и при получении списка профилей групп доступа, в которых требуется @@ -297,8 +303,7 @@ КонецФункции -// Функция ВсеПоляОграниченияДоступаОбъектаМетаданных возвращает -// поля объекта метаданных по которым может ограничиваться доступ. +// Возвращает поля объекта метаданных по которым может ограничиваться доступ. // // Параметры: // ОбъектМетаданных - ОбъектМетаданных @@ -436,22 +441,7 @@ КонецФункции -Процедура ДобавитьПолеОграниченияДоступаОбъектаМетаданных(ОбъектМетаданных, ИмяПоля, ИменаПолей, ОбъектИБ) - - Попытка - Если ОбъектИБ = Неопределено Тогда - ПараметрыДоступа("Чтение", ОбъектМетаданных, ИмяПоля, Метаданные.Роли.ПолныеПрава); - Иначе - ОбъектИБ.ПараметрыДоступа("Чтение", ОбъектМетаданных, ИмяПоля, ОбъектИБ.Метаданные.Роли.ПолныеПрава); - КонецЕсли; - ИменаПолей.Добавить(ИмяПоля); - Исключение - КонецПопытки; - -КонецПроцедуры - -// Функция ТипыСсылок возвращает таблицу, -// содержащую имена таблиц объектов метаданных и +// Возвращает таблицу, содержащую имена таблиц объектов метаданных и // пустую ссылку, как "тип" этой таблицы. // Результат применяется для обновления табличной части // ТипыСсылок профиля групп доступа Администратор. @@ -469,6 +459,8 @@ ОписаниеТипа = Новый ОписаниеТипов(МассивТипов); Строка = ТипыСсылок.Добавить(); Строка.ТипТаблицы = ОписаниеТипа.ПривестиЗначение(Неопределено); + // Метаданные.НайтиПоТипу() нельзя заменить на ТипТаблицы.Метаданные(), так как + // не для любой ссылки существует метод Метаданные() (например, точка маршрута бизнес-процесса). Строка.Таблица = Метаданные.НайтиПоТипу(ТипЗнч(Строка.ТипТаблицы)).ПолноеИмя(); КонецЦикла; @@ -478,10 +470,8 @@ КонецФункции -// Функция СинонимыТаблиц формирует таблицу представлений -// коллекций и объектов метаданных, а также их таблиц. -// Сформированная таблица используется для различных -// целей интерфейсов пользователя. +// Возвращает таблицу представлений коллекций и объектов метаданных, а также их таблиц. +// Сформированная таблица используется для различных целей интерфейсов пользователя. // // Возвращаемое значение: // ТаблицаЗначений @@ -587,9 +577,8 @@ КонецФункции -// Функция ПостоянныеВидыОграниченийПравОбъектовМетаданных возвращает -// таблицу значений, содержащую вид ограничений доступа -// по каждому праву объектов метаданных. +// Возвращает таблицу значений, содержащую вид ограничений доступа по каждому праву +// объектов метаданных. // Если записи по праву нет, значит ограничений по праву нет. // Таблица содержит только виды доступа, заданные разработчиком, // исходя из их применения в текстах ограничений. @@ -698,19 +687,40 @@ КонецФункции -// Функция предназначена для внутреннего использования +// Только для внутреннего использования. Функция ОписанияНачальногоЗаполненияПрофилейГруппДоступа() Экспорт ОписанияПрофилей = УправлениеДоступомПереопределяемый.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + // Удаление из описаний профилей роли, содержащие права, недоступные разделенным пользователям + НедоступныеРоли = ПользователиСерверПовтИсп.НедоступныеРолиПоТипуПользователя( + Перечисления.ТипыПользователей.ПользовательОбластиДанных); + + Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл + + КоличествоРолей = ОписаниеПрофиля.Роли.Количество(); + Для Счетчик = 0 По КоличествоРолей - 1 Цикл + Индекс = КоличествоРолей - Счетчик - 1; + Роль = Метаданные.Роли[ОписаниеПрофиля.Роли[Индекс]]; + + Если НедоступныеРоли.Получить(Роль) <> Неопределено Тогда + ОписаниеПрофиля.Роли.Удалить(Индекс); + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЕсли; + // Описание для заполнения предопределенного профиля "Администратор". ОписаниеПрофиляАдминистратор = УправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа(); ОписаниеПрофиляАдминистратор.Идентификатор = Строка(Справочники.ПрофилиГруппДоступа.Администратор.УникальныйИдентификатор()); ОписаниеПрофиляАдминистратор.Наименование = "Администратор"; ОписаниеПрофиляАдминистратор.Роли.Добавить("ПолныеПрава"); - ИмяРолиАдминистратораСистемы = ПользователиПереопределяемый.РольАдминистратораСистемы().Имя; - Если ОписаниеПрофиляАдминистратор.Роли.Найти(ИмяРолиАдминистратораСистемы) = Неопределено Тогда - ОписаниеПрофиляАдминистратор.Роли.Добавить(ИмяРолиАдминистратораСистемы); + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ИмяРолиАдминистратораСистемы = Пользователи.РольАдминистратораСистемы().Имя; + Если ОписаниеПрофиляАдминистратор.Роли.Найти(ИмяРолиАдминистратораСистемы) = Неопределено Тогда + ОписаниеПрофиляАдминистратор.Роли.Добавить(ИмяРолиАдминистратораСистемы); + КонецЕсли; КонецЕсли; ОписаниеПрофиляАдминистратор.Описание = НСтр( "ru = 'Предназначен для @@ -719,9 +729,6 @@ |- удаления помеченных объектов, |- в редких случаях для внесения изменений в конфигурацию. | - |Содержит одну роль ""Полные права"", предоставляющую - |неограниченный доступ ко всем данным информационной системы. - | |Рекомендуется не использовать для ""обычной"" работы в информационной системе. |'"); ОписанияПрофилей.Добавить(ОписаниеПрофиляАдминистратор); @@ -730,7 +737,7 @@ КонецФункции -// Функция возвращает строковый ключ сеанса +// Возвращает строковый ключ сеанса. Функция КлючСеанса() Экспорт НомерСеанса = НомерСеансаИнформационнойБазы(); @@ -750,14 +757,31 @@ КонецФункции -// Функция возвращает массив пустых ссылок всех типов конфигурации +// Возвращает массив пустых ссылок всех типов конфигурации. Функция ВсеПустыеСсылки() Экспорт ВсеПустыеСсылки = Новый Массив; Для каждого ТипЗначения Из Метаданные.Справочники.ПрофилиГруппДоступа.ТабличныеЧасти.ТипыСсылок.Реквизиты.ТипТаблицы.Тип.Типы() Цикл ВсеПустыеСсылки.Добавить(ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(Метаданные.НайтиПоТипу(ТипЗначения).ПолноеИмя()).ПустаяСсылка()); КонецЦикла; - Возврат ВсеПустыеСсылки + + Возврат ВсеПустыеСсылки; КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +Процедура ДобавитьПолеОграниченияДоступаОбъектаМетаданных(ОбъектМетаданных, ИмяПоля, ИменаПолей, ОбъектИБ) + + Попытка + Если ОбъектИБ = Неопределено Тогда + ПараметрыДоступа("Чтение", ОбъектМетаданных, ИмяПоля, Метаданные.Роли.ПолныеПрава); + Иначе + ОбъектИБ.ПараметрыДоступа("Чтение", ОбъектМетаданных, ИмяПоля, ОбъектИБ.Метаданные.Роли.ПолныеПрава); + КонецЕсли; + ИменаПолей.Добавить(ИмяПоля); + Исключение + КонецПопытки; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеДоступомСобытия/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСобытия/Module.bsl index 8090df3ed..9354bf206 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСобытия/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСобытия/Module.bsl @@ -1,53 +1,17 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Управление доступом". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ПОДПИСОК НА СОБЫТИЯ -// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Обработчик ЗаписатьГруппыИВидыДоступа события ПриЗаписи подписки на события -// ЗаписатьГруппыИВидыДоступа вызывает метод записи групп доступа и видов доступа -// в РегистрСведений.ГруппыЗначенийДоступа, для требуемых объектов метаданных. -// -Процедура ЗаписатьГруппыИВидыДоступа(Знач Объект, Отказ) Экспорт +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события - Если Объект.ОбменДанными.Загрузка И НЕ Объект.ДополнительныеСвойства.Свойство("ЗаписатьГруппыИВидыДоступа") Тогда - Возврат; - КонецЕсли; - - #Если Сервер Тогда - УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Объект, Отказ); - #Иначе - ЕстьОшибки = Ложь; - УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Объект.Ссылка, Отказ, ЕстьОшибки); - Если ЕстьОшибки Тогда - Объект.ДополнительныеСвойства.Вставить("ЕстьОшибки"); - КонецЕсли; - #КонецЕсли - -КонецПроцедуры - -// Обработчик ЗаписатьНаборыЗначенийДоступа события ПриЗаписи подписки на события -// ЗаписатьНаборыЗначенийДоступа вызывает метод записи значений доступа объекта -// в РегистрСведений.НаборыЗначенийДоступа. -// Возможен случай использования подсистемы "УправлениеДоступом", когда -// указанной подписки не существует, если наборы значений доступа не применяются. -// -Процедура ЗаписатьНаборыЗначенийДоступа(Знач Объект, Отказ) Экспорт - - Если Объект.ОбменДанными.Загрузка И НЕ Объект.ДополнительныеСвойства.Свойство("ЗаписатьНаборыЗначенийДоступа") Тогда - Возврат; - КонецЕсли; - - #Если Сервер Тогда - УправлениеДоступом.ЗаписатьНаборыЗначенийДоступа(Объект); - #Иначе - УправлениеДоступом.ЗаписатьНаборыЗначенийДоступа(Объект.Ссылка); - #КонецЕсли - -КонецПроцедуры - -// Обработчик ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей события ПередЗаписью подписки на события -// ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей вызывает метод заполнения значений доступа -// табличной части объекта, если для ограничения доступа к нему самому используются наборы. +// Обработчик подписок ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей<*> на событие ПередЗаписью +// вызывает метод заполнения значений доступа табличной части объекта НаборыЗначенийДоступа, +// когда для ограничения доступа к самому объекту используется шаблон #ПоНаборамЗначений. // Возможен случай использования подсистемы "УправлениеДоступом", когда // указанной подписки не существует, если для указанной цели наборы не применяются. // @@ -73,35 +37,62 @@ КонецПроцедуры -// Обработчик ЗаписатьЗависимыеНаборыЗначенийДоступа события ПриЗаписи подписки на события -// ЗаписатьЗависимыеНаборыЗначенийДоступа вызывает метод записи обновления зависимых -// наборов значений доступа в регистре сведений НаборыЗначенийДоступа. -// -// Возможен случай использования подсистемы "УправлениеДоступом", когда -// указанной подписки не существует, если зависимые наборы значений доступа не применяются. -// -Процедура ЗаписатьЗависимыеНаборыЗначенийДоступа(Знач Объект, Отказ) Экспорт +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - Если Объект.ОбменДанными.Загрузка И НЕ Объект.ДополнительныеСвойства.Свойство("ЗаписатьЗависимыеНаборыЗначенийДоступа") Тогда - Возврат; +// Только для внутреннего использования +Функция ПолучитьНаборыЗначенийДоступаТабличнойЧасти(Объект) Экспорт + + СсылкаНаОбъект = Объект.Ссылка; + ТипЗначенияОбъект = ТипЗнч(Объект); + + Если Объект.Метаданные().ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда + ВызватьИсключение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверные параметры. + |Тип объекта ""%1"" + |не найдена табличная часть ""Наборы значений доступа"".'"), + ТипЗначенияОбъект)); КонецЕсли; - #Если Сервер Тогда - УправлениеДоступом.ЗаписатьЗависимыеНаборыЗначенийДоступа(Объект); - #Иначе - УправлениеДоступом.ЗаписатьЗависимыеНаборыЗначенийДоступа(Объект.Ссылка); - #КонецЕсли + Таблица = УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(); + + Если УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда + + Если НЕ Метаданные.ПодпискиНаСобытия.ЗаписатьНаборыЗначенийДоступа.Источник.СодержитТип(ТипЗначенияОбъект) И + НЕ Метаданные.ПодпискиНаСобытия.ЗаписатьЗависимыеНаборыЗначенийДоступа.Источник.СодержитТип(ТипЗначенияОбъект) Тогда + ВызватьИсключение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверные параметры. + |Тип объекта ""%1"" + |не найден ни в одной из подписок на события + |""Записать наборы значений доступа"", + |""Записать зависимые наборы значений доступа"".'"), + ТипЗначенияОбъект)); + КонецЕсли; + + Объект.ЗаполнитьНаборыЗначенийДоступа(Таблица); + + Если Таблица.Количество() = 0 Тогда + // Если это условие отключить, тогда зациклится регламентное задание + // заполнения данных для ограничения доступа. + ВызватьИсключение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Объект ""%1"" сформировал пустой набор значений доступа.'"), + ТипЗначенияОбъект)); + КонецЕсли; + + УправлениеДоступом.ДобавитьНаборыЗначенийДоступа(Таблица, УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(), Ложь, Истина); + + УправлениеДоступом.ПодготовкаНаборовЗначенийДоступаПередЗаписью(СсылкаНаОбъект, Таблица); + + КонецЕсли; + + Возврат Таблица; + +КонецФункции -КонецПроцедуры - - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ СЛОЖНОГО КОНТЕКСТА -// Сервер, Внешнее соединение, Клиент (обычное приложение) -// - -// Функция ПоставляемыйПрофильИзменен проверяет изменен ли поставляемый профиль -// по сравнению с описанием из функции +// Проверяет изменен ли поставляемый профиль по сравнению с описанием из функции // УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа() // // Параметры: @@ -174,55 +165,62 @@ КонецФункции -// Только для внутреннего использования -Функция ПолучитьНаборыЗначенийДоступаТабличнойЧасти(Объект) Экспорт - - СсылкаНаОбъект = Объект.Ссылка; - ТипЗначенияОбъект = ТипЗнч(Объект); - - Если Метаданные.НайтиПоТипу(ТипЗначенияОбъект).ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда - ВызватьИсключение( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверные параметры. - |Тип объекта ""%1"" - |не найдена табличная часть ""Наборы значений доступа"".'"), - ТипЗначенияОбъект)); - КонецЕсли; - - Таблица = УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(); - - Если УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда - - Если НЕ Метаданные.ПодпискиНаСобытия.ЗаписатьНаборыЗначенийДоступа.Источник.СодержитТип(ТипЗначенияОбъект) И - НЕ Метаданные.ПодпискиНаСобытия.ЗаписатьЗависимыеНаборыЗначенийДоступа.Источник.СодержитТип(ТипЗначенияОбъект) Тогда - ВызватьИсключение( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверные параметры. - |Тип объекта ""%1"" - |не найден ни в одной из подписок на события - |""Записать наборы значений доступа"", - |""Записать зависимые наборы значений доступа"".'"), - ТипЗначенияОбъект)); - КонецЕсли; - - Объект.ЗаполнитьНаборыЗначенийДоступа(Таблица); - - Если Таблица.Количество() = 0 Тогда - // Если это условие отключить, тогда зациклится регламентное задание - // заполнения данных для ограничения доступа. - ВызватьИсключение( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Объект ""%1"" сформировал пустой набор значений доступа.'"), - ТипЗначенияОбъект)); - КонецЕсли; - - УправлениеДоступом.ДобавитьНаборыЗначенийДоступа(Таблица, УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(), Ложь, Истина); - - УправлениеДоступом.ПодготовкаНаборовЗначенийДоступаПередЗаписью(СсылкаНаОбъект, Таблица); - - КонецЕсли; - - Возврат Таблица; - -КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события +// Обработчик подписки ЗаписатьГруппыИВидыДоступа на событие ПриЗаписи +// вызывает метод записи групп значений доступа и видов доступа +// в РегистрСведений.ГруппыЗначенийДоступа, для требуемых объектов метаданных. +// +Процедура ЗаписатьГруппыИВидыДоступа(Знач Объект, Отказ) Экспорт + + Если Объект.ОбменДанными.Загрузка И НЕ Объект.ДополнительныеСвойства.Свойство("ЗаписатьГруппыИВидыДоступа") Тогда + Возврат; + КонецЕсли; + + #Если Сервер Тогда + УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Объект); + #Иначе + УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Объект.Ссылка); + #КонецЕсли + +КонецПроцедуры + +// Обработчик подписки ЗаписатьНаборыЗначенийДоступа на событие ПриЗаписи +// вызывает метод записи значений доступа объекта в РегистрСведений.НаборыЗначенийДоступа. +// Возможен случай использования подсистемы "УправлениеДоступом", когда +// указанной подписки не существует, если наборы значений доступа не применяются. +// +Процедура ЗаписатьНаборыЗначенийДоступа(Знач Объект, Отказ) Экспорт + + Если Объект.ОбменДанными.Загрузка И НЕ Объект.ДополнительныеСвойства.Свойство("ЗаписатьНаборыЗначенийДоступа") Тогда + Возврат; + КонецЕсли; + + #Если Сервер Тогда + УправлениеДоступом.ЗаписатьНаборыЗначенийДоступа(Объект); + #Иначе + УправлениеДоступом.ЗаписатьНаборыЗначенийДоступа(Объект.Ссылка); + #КонецЕсли + +КонецПроцедуры + +// Обработчик подписки ЗаписатьЗависимыеНаборыЗначенийДоступа события ПриЗаписи +// вызывает перезапись зависимых наборов значений доступа в регистре сведений НаборыЗначенийДоступа. +// +// Возможен случай использования подсистемы "УправлениеДоступом", когда +// указанной подписки не существует, если зависимые наборы значений доступа не применяются. +// +Процедура ЗаписатьЗависимыеНаборыЗначенийДоступа(Знач Объект, Отказ) Экспорт + + Если Объект.ОбменДанными.Загрузка И НЕ Объект.ДополнительныеСвойства.Свойство("ЗаписатьЗависимыеНаборыЗначенийДоступа") Тогда + Возврат; + КонецЕсли; + + #Если Сервер Тогда + УправлениеДоступом.ЗаписатьЗависимыеНаборыЗначенийДоступа(Объект); + #Иначе + УправлениеДоступом.ЗаписатьЗависимыеНаборыЗначенийДоступа(Объект.Ссылка); + #КонецЕсли + +КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСобытия/Module.bsl b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСобытия/Module.bsl index 4981639aa..e5671203b 100644 --- a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСобытия/Module.bsl +++ b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСобытия/Module.bsl @@ -1,10 +1,16 @@ //////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ ЭКСПОРТНЫХ ФУНКЦИЙ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Обработчик регламентного задания "ОбновлениеАгрегатов" -// +//////////////////////////////////////////////////////////////////////////////// +// Выполнение регламентных заданий + +// Обработчик регламентного задания "ОбновлениеАгрегатов". Процедура ОбновлениеАгрегатов() Экспорт + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + Для Каждого ТекущийРегистр Из Метаданные.РегистрыНакопления Цикл Если ТекущийРегистр.ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Обороты Тогда Если РегистрыНакопления[ТекущийРегистр.Имя].ПолучитьРежимАгрегатов() @@ -16,25 +22,33 @@ КонецПроцедуры -// Обработчик регламентного задания "ПерестроениеАгрегатов" -// +// Обработчик регламентного задания "ПерестроениеАгрегатов". Процедура ПерестроениеАгрегатов() Экспорт - Для Каждого ТекущийРегистр Из Метаданные.РегистрыНакопления Цикл + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + Для каждого ТекущийРегистр Из Метаданные.РегистрыНакопления Цикл Если ТекущийРегистр.ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Обороты Тогда + Если РегистрыНакопления[ТекущийРегистр.Имя].ПолучитьРежимАгрегатов() - И РегистрыНакопления[ТекущийРегистр.Имя].ПолучитьИспользованиеАгрегатов() Тогда - РегистрыНакопления[ТекущийРегистр.Имя].ПерестроитьИспользованиеАгрегатов(); + И РегистрыНакопления[ТекущийРегистр.Имя].ПолучитьИспользованиеАгрегатов() Тогда + + РегистрыНакопления[ТекущийРегистр.Имя].ПерестроитьИспользованиеАгрегатов(); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры -// Обработчик регламентного задания "УстановкаПериодаРассчитанныхИтогов" -// +// Обработчик регламентного задания "УстановкаПериодаРассчитанныхИтогов". Процедура УстановкаПериодаРассчитанныхИтогов() Экспорт + Если ПустаяСтрока(ИмяПользователя()) Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + НаДату = НачалоМесяца(ТекущаяДатаСеанса()) - 1; ПересчетРегистров(РегистрыНакопления, НаДату, Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки); ПересчетРегистров(РегистрыБухгалтерии, НаДату); @@ -42,8 +56,9 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ СЛУЖЕБНЫХ ФУНКЦИЙ +// Локальные служебные процедуры и функции +// Только для внутреннего использования. Процедура ПересчетРегистров(МенеджерРегистров, НаДату, ОграничениеПоВидуРегистра = Неопределено) Для Каждого МенеджерРегистра ИЗ МенеджерРегистров Цикл diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl index 43617f9d1..056758d9e 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl @@ -1,6 +1,13 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Контактная информация". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ЧТЕНИЕ КОНТАКТНОЙ ИНФОРМАЦИИ ОБЪЕКТОВ ДРУГИМИ ПОДСИСТЕМАМИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Чтение контактной информации другими подсистемами // Получить значение определенного вида контактной информации у объекта. // @@ -9,7 +16,7 @@ // ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации // // Возвращаемое значение: -// Строка - строковое представление значения +// Строка - строковое представление значения. // Функция ПолучитьКонтактнуюИнформацияОбъекта(Ссылка, ВидКонтактнойИнформации) Экспорт @@ -36,76 +43,23 @@ КонецФункции -// Получить значения определенного типа контактной информации у объекта. -// -// Параметры -// Ссылка - ЛюбаяСсылка - ссылка на объект-владелец контактной информации (организация, контрагент, партнер и т.д.) -// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации -// -// Возвращаемое значение: -// ТаблицаЗначений - с полями -// Значение (строка) - строковое представление значения -// Вид (строка} - представление вида контактной информации -// -Функция ЗначенияКонтактнойИнформацииОбъекта(Ссылка, ТипКонтактнойИнформации) Экспорт - - Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | КонтактнаяИнформация.Представление как Значение, - | КонтактнаяИнформация.Вид.Представление как Вид - |ИЗ - | Справочник." + Ссылка.Метаданные().Имя + ".КонтактнаяИнформация КАК КонтактнаяИнформация - |ГДЕ - | КонтактнаяИнформация.Ссылка = &Ссылка - | И КонтактнаяИнформация.Тип = &Тип - |"); - - Запрос.УстановитьПараметр("Ссылка", Ссылка); - Запрос.УстановитьПараметр("Тип", ТипКонтактнойИнформации); - - Возврат Запрос.Выполнить().Выгрузить(); - -КонецФункции - -// Получить значения поля адреса. -// -// Параметры: -// СтрокаЗначенийПолей - строка со значениями полей адреса. -// ИмяПоля - имя поля. Например, "Район". -// -// Возвращаемое значение: -// Строка - значение поля. -// -Функция ПолучитьЗначениеПоляАдреса(СтрокаЗначенийПолей, ИмяПоля) Экспорт - - ПозицияПоля = Найти(СтрокаЗначенийПолей, ИмяПоля); - Значение = ""; - Если ПозицияПоля <> 0 Тогда - ЗначенияПолей = Прав(СтрокаЗначенийПолей, СтрДлина(СтрокаЗначенийПолей) - ПозицияПоля - СтрДлина(ИмяПоля)); - ПозицияПС = Найти(ЗначенияПолей, Символы.ПС); - Значение = Сред(ЗначенияПолей, 0 ,ПозицияПС - 1); - КонецЕсли; - Возврат Значение; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ И МОДУЛЯ ОБЪЕКТА +// Обработчики событий формы и модуля объекта // Обработчик для события формы ПриСозданииНаСервере Процедура ПриСозданииНаСервере(Форма, Объект, ИмяЭлементаДляРазмещения) Экспорт - масРеквизитов = Новый Массив; + МассивРеквизитов = Новый Массив; // Создадим таблицу значений ИмяОписания = "КонтактнаяИнформацияОписаниеДополнительныхРеквизитов"; - масРеквизитов.Добавить(Новый РеквизитФормы(ИмяОписания, Новый ОписаниеТипов("ТаблицаЗначений"))); - масРеквизитов.Добавить(Новый РеквизитФормы("ИмяРеквизита", Новый ОписаниеТипов("Строка"), ИмяОписания)); - масРеквизитов.Добавить(Новый РеквизитФормы("ЗначенияПолей", Новый ОписаниеТипов("СписокЗначений"), ИмяОписания)); - масРеквизитов.Добавить(Новый РеквизитФормы("ТолькоРоссийский", Новый ОписаниеТипов("Булево"), ИмяОписания)); - масРеквизитов.Добавить(Новый РеквизитФормы("Тип", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыКонтактнойИнформации"), ИмяОписания)); - масРеквизитов.Добавить(Новый РеквизитФормы("Вид", Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации"), ИмяОписания)); - масРеквизитов.Добавить(Новый РеквизитФормы("ТипНомер", Новый ОписаниеТипов("Число"), ИмяОписания)); + МассивРеквизитов.Добавить(Новый РеквизитФормы(ИмяОписания, Новый ОписаниеТипов("ТаблицаЗначений"))); + МассивРеквизитов.Добавить(Новый РеквизитФормы("ИмяРеквизита", Новый ОписаниеТипов("Строка"), ИмяОписания)); + МассивРеквизитов.Добавить(Новый РеквизитФормы("ЗначенияПолей", Новый ОписаниеТипов("СписокЗначений"), ИмяОписания)); + МассивРеквизитов.Добавить(Новый РеквизитФормы("ТолькоРоссийский", Новый ОписаниеТипов("Булево"), ИмяОписания)); + МассивРеквизитов.Добавить(Новый РеквизитФормы("Тип", Новый ОписаниеТипов("ПеречислениеСсылка.ТипыКонтактнойИнформации"), ИмяОписания)); + МассивРеквизитов.Добавить(Новый РеквизитФормы("Вид", Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации"), ИмяОписания)); + МассивРеквизитов.Добавить(Новый РеквизитФормы("ТипНомер", Новый ОписаниеТипов("Число"), ИмяОписания)); // Получим список видов КИ @@ -139,55 +93,55 @@ // Добавим нужные реквизиты Если ТипЗнч(Объект.КонтактнаяИнформация) = Тип("ТаблицаЗначений") Тогда - ТабЗн = Объект.КонтактнаяИнформация; + ТаблицаКИ = Объект.КонтактнаяИнформация; Иначе - ТабЗн = Объект.КонтактнаяИнформация.Выгрузить(); + ТаблицаКИ = Объект.КонтактнаяИнформация.Выгрузить(); КонецЕсли; Номер = 0; - соотвВидИмя = Новый Соответствие; - Для Каждого Стр Из КонтактнаяИнформация Цикл + СоответствиеВидаКИИмениРеквизита = Новый Соответствие; + Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл - СтрВКИ = ТабЗн.Найти(Стр.Вид, "Вид"); - Если СтрВКИ = Неопределено И Стр.ПометкаУдаления Тогда - Стр.Использовать = Ложь; + СтрокаВТаблице = ТаблицаКИ.Найти(СтрокаКИ.Вид, "Вид"); + Если СтрокаВТаблице = Неопределено И СтрокаКИ.ПометкаУдаления Тогда + СтрокаКИ.Использовать = Ложь; Продолжить; КонецЕсли; Номер = Номер + 1; ИмяРеквизита = "КонтактнаяИнформацияПоле" + Номер; - масРеквизитов.Добавить(Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов("Строка"), , Стр.Наименование, Истина)); + МассивРеквизитов.Добавить(Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов("Строка"), , СтрокаКИ.Наименование, Истина)); - соотвВидИмя.Вставить(Стр.Вид, ИмяРеквизита); + СоответствиеВидаКИИмениРеквизита.Вставить(СтрокаКИ.Вид, ИмяРеквизита); КонецЦикла; // Добавим новые реквизиты - Форма.ИзменитьРеквизиты(масРеквизитов); + Форма.ИзменитьРеквизиты(МассивРеквизитов); // Создадим элементы на форме и заполним значения реквизитов Родитель = ?(ПустаяСтрока(ИмяЭлементаДляРазмещения), Форма, Форма.Элементы[ИмяЭлементаДляРазмещения]); - Для Каждого Стр Из КонтактнаяИнформация Цикл + Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл - Если Не Стр.Использовать Тогда + Если Не СтрокаКИ.Использовать Тогда Продолжить; КонецЕсли; - Вид = Стр.Вид; - ИмяРеквизита = соотвВидИмя.Получить(Вид); + Вид = СтрокаКИ.Вид; + ИмяРеквизита = СоответствиеВидаКИИмениРеквизита.Получить(Вид); Элемент = Форма.Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), Родитель); Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = ИмяРеквизита; Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; - Если Стр.Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда + Если СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда Элемент.Высота = 5; Элемент.МногострочныйРежим = Истина; КонецЕсли; - Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(Стр.Тип) Тогда + Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(СтрокаКИ.Тип) Тогда Элемент.КнопкаВыбора = Истина; - Если Стр.РедактированиеТолькоВДиалоге Тогда + Если СтрокаКИ.РедактированиеТолькоВДиалоге Тогда Элемент.РедактированиеТекста = Ложь; Элемент.ЦветФона = WebЦвета.Кремовый; КонецЕсли; @@ -196,18 +150,18 @@ КонецЕсли; - новСтр = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); - новСтр.ИмяРеквизита = ИмяРеквизита; - новСтр.ТолькоРоссийский = Стр.АдресТолькоРоссийский; - новСтр.Вид = Вид; - новСтр.Тип = Стр.Тип; - новСтр.ТипНомер = ПоТипуКонтактнойИнформацииПолучитьНомер(Стр.Тип); + НоваяСтрока = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); + НоваяСтрока.ИмяРеквизита = ИмяРеквизита; + НоваяСтрока.ТолькоРоссийский = СтрокаКИ.АдресТолькоРоссийский; + НоваяСтрока.Вид = Вид; + НоваяСтрока.Тип = СтрокаКИ.Тип; + НоваяСтрока.ТипНомер = ПоТипуКонтактнойИнформацииПолучитьНомер(СтрокаКИ.Тип); - СтрВКИ = ТабЗн.Найти(Стр.Вид, "Вид"); - Если СтрВКИ <> Неопределено Тогда + СтрокаВТаблице = ТаблицаКИ.Найти(СтрокаКИ.Вид, "Вид"); + Если СтрокаВТаблице <> Неопределено Тогда - Форма[ИмяРеквизита] = СтрВКИ.Представление; - новСтр.ЗначенияПолей = ПреобразоватьСтрокуВСписокПолей(СтрВКИ.ЗначенияПолей); + Форма[ИмяРеквизита] = СтрокаВТаблице.Представление; + НоваяСтрока.ЗначенияПолей = ПреобразоватьСтрокуВСписокПолей(СтрокаВТаблице.ЗначенияПолей); КонецЕсли; @@ -220,40 +174,40 @@ ТекущийОбъект.КонтактнаяИнформация.Очистить(); - Для Каждого Стр Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл + Для Каждого СтрокаТаблицы Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл - Представление = Форма[Стр.ИмяРеквизита]; + Представление = Форма[СтрокаТаблицы.ИмяРеквизита]; Если ПустаяСтрока(Представление) Тогда Продолжить; КонецЕсли; - новСтр = ТекущийОбъект.КонтактнаяИнформация.Добавить(); - новСтр.Тип = Стр.Тип; - новСтр.Вид = Стр.Вид; - новСтр.Представление = Представление; + НоваяСтрока = ТекущийОбъект.КонтактнаяИнформация.Добавить(); + НоваяСтрока.Тип = СтрокаТаблицы.Тип; + НоваяСтрока.Вид = СтрокаТаблицы.Вид; + НоваяСтрока.Представление = Представление; - Если Стр.ЗначенияПолей.Количество() > 0 Тогда - новСтр.ЗначенияПолей = ПреобразоватьСписокПолейВСтроку(Стр.ЗначенияПолей); + Если СтрокаТаблицы.ЗначенияПолей.Количество() > 0 Тогда + НоваяСтрока.ЗначенияПолей = ПреобразоватьСписокПолейВСтроку(СтрокаТаблицы.ЗначенияПолей); КонецЕсли; // Заполним значения дополнительных реквизитов таб. части - Если Стр.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда + Если СтрокаТаблицы.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда // Email СообщениеОбОшибке = ""; - ЗаполнитьРеквизитыТабличнойЧастиДляАдресаЭлектроннойПочты(новСтр, СообщениеОбОшибке); + ЗаполнитьРеквизитыТабличнойЧастиДляАдресаЭлектроннойПочты(НоваяСтрока, СообщениеОбОшибке); Если НЕ ПустаяСтрока(СообщениеОбОшибке) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке, , Стр.ИмяРеквизита); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке, , СтрокаТаблицы.ИмяРеквизита); Отказ = Истина; КонецЕсли; - ИначеЕсли Стр.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + ИначеЕсли СтрокаТаблицы.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда // Адрес - ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(новСтр, Стр.ЗначенияПолей); - ИначеЕсли Стр.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон ИЛИ Стр.Тип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда + ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(НоваяСтрока, СтрокаТаблицы.ЗначенияПолей); + ИначеЕсли СтрокаТаблицы.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон ИЛИ СтрокаТаблицы.Тип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда // Телефон/факс - ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(новСтр, Стр.ЗначенияПолей); - ИначеЕсли Стр.Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда + ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(НоваяСтрока, СтрокаТаблицы.ЗначенияПолей); + ИначеЕсли СтрокаТаблицы.Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда // WWW - ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(новСтр); + ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(НоваяСтрока); КонецЕсли; КонецЦикла; @@ -261,9 +215,14 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ЗАПОЛНЕНИЕ ДОПОЛНИТЕЛЬНЫХ РЕКВИЗИТОВ ТАБЛИЧНОЙ ЧАСТИ "КОНТАКТНАЯ ИНФОРМАЦИЯ" +// Заполнение дополнительных реквизитов табличной части "Контактная информация" -// Для адреса +// Заполняет дополнительные реквизиты табличной части "Контактная информация" для адреса. +// +// Параметры: +// СтрокаТабличнойЧасти - Строка табличной части - строка табличной части "Контактная информация". +// ЗначенияПолей - Список значений - список значений полей. +// Процедура ЗаполнитьРеквизитыТабличнойЧастиДляАдреса(СтрокаТабличнойЧасти, ЗначенияПолей) Для Каждого ЗначениеПоля Из ЗначенияПолей Цикл @@ -278,7 +237,12 @@ КонецПроцедуры -// Для адреса электронной почты +// Заполняет дополнительные реквизиты табличной части "Контактная информация" для адреса электронной почты. +// +// Параметры: +// СтрокаТабличнойЧасти - Строка табличной части - строка табличной части "Контактная информация". +// СообщениеОбОшибке - Строка - соббщение об ошибке. +// Процедура ЗаполнитьРеквизитыТабличнойЧастиДляАдресаЭлектроннойПочты(СтрокаТабличнойЧасти, СообщениеОбОшибке = "") Попытка @@ -299,7 +263,12 @@ КонецПроцедуры -// Для телефона и факса +// Заполняет дополнительные реквизиты табличной части "Контактная информация" для телефона и факса. +// +// Параметры: +// СтрокаТабличнойЧасти - Строка табличной части - строка табличной части "Контактная информация". +// ЗначенияПолей - Список значений - список значений полей. +// Процедура ЗаполнитьРеквизитыТабличнойЧастиДляТелефона(СтрокаТабличнойЧасти, ЗначенияПолей) КодСтраны = ""; @@ -335,49 +304,66 @@ КонецПроцедуры -Функция УбратьРазделителиВНомерТелефона(Знач СтрНомер) +// Убирает разделители в номере телефона. +// +// Параметры: +// НомерТелефона - Строка - номер телефона или факса. +// +// Возвращаемое значение - Строка - номер телефона или факса без разделителей. +// +Функция УбратьРазделителиВНомерТелефона(Знач НомерТелефона) - Поз = Найти(СтрНомер, ","); + Поз = Найти(НомерТелефона, ","); Если Поз <> 0 Тогда - СтрНомер = Лев(СтрНомер, Поз-1); + НомерТелефона = Лев(НомерТелефона, Поз-1); КонецЕсли; - СтрНомер = СтрЗаменить(СтрНомер, "-", ""); - СтрНомер = СтрЗаменить(СтрНомер, " ", ""); - СтрНомер = СтрЗаменить(СтрНомер, "+", ""); + НомерТелефона = СтрЗаменить(НомерТелефона, "-", ""); + НомерТелефона = СтрЗаменить(НомерТелефона, " ", ""); + НомерТелефона = СтрЗаменить(НомерТелефона, "+", ""); - Возврат СтрНомер; + Возврат НомерТелефона; КонецФункции -// Для веб страницы +// Заполняет дополнительные реквизиты табличной части "Контактная информация" для веб-страницы. +// +// Параметры: +// СтрокаТабличнойЧасти - Строка табличной части - строка табличной части "Контактная информация". +// Процедура ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(СтрокаТабличнойЧасти) - Стр = СтрокаТабличнойЧасти.Представление; + АдресВебСтраницы = СтрокаТабличнойЧасти.Представление; // Вырежем имя протокола - Поз = Найти(Стр, "://"); - Если Поз <> 0 Тогда - ЛевЧасть = НРег(Лев(Стр, Поз-1)); + ПозицияСимволов = Найти(АдресВебСтраницы, "://"); + Если ПозицияСимволов <> 0 Тогда + ЛевЧасть = НРег(Лев(АдресВебСтраницы, ПозицияСимволов - 1)); Если (ЛевЧасть = "http") ИЛИ (ЛевЧасть = "https") Тогда - Стр = Сред(Стр, Поз + 3); + АдресВебСтраницы = Сред(АдресВебСтраницы, ПозицияСимволов + 3); КонецЕсли; КонецЕсли; // Вырежем слева www - Если НРег(Лев(Стр, 4)) = "www." Тогда - Стр = Сред(Стр, 5); + Если НРег(Лев(АдресВебСтраницы, 4)) = "www." Тогда + АдресВебСтраницы = Сред(АдресВебСтраницы, 5); КонецЕсли; - Поз = Найти(Стр, "/"); - СтрокаТабличнойЧасти.ДоменноеИмяСервера = ?(Поз = 0, Стр, Лев(Стр, Поз-1)); + ПозицияСимвола = Найти(АдресВебСтраницы, "/"); + СтрокаТабличнойЧасти.ДоменноеИмяСервера = ?(ПозицияСимвола = 0, АдресВебСтраницы, Лев(АдресВебСтраницы, ПозицияСимвола - 1)); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ +// Служебные -// Проверить по типу контактной информации, доступно ли редактирование в диалоге +// Возвращает доступно ли редактирование в диалоге по типу контактной информации. +// +// Параметры: +// Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. +// +// Возвращаемое значение - Булево - доступно или нет редактирование в диалоге. +// Функция ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(Тип) Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда @@ -392,13 +378,15 @@ КонецФункции -// По типу контактной информации получить номер. +// Возвращает номер по типу контактной информации. // -// Номер используется при определении способа редактирования вида контактной -// информации: -// 1 - Адрес -// 2 - Телефон или факс -// 0 - Все остальные типы +// Параметры: +// Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. +// +// Возвращаемое значение - Число: +// 1 - Адрес +// 2 - Телефон или факс +// 0 - Все остальные типы // Функция ПоТипуКонтактнойИнформацииПолучитьНомер(Тип) @@ -412,7 +400,13 @@ КонецФункции -// Преобразовать список полей в строку +// Возвращает строку списка полей. +// +// Параметры: +// СоответствиеПолей - Соответствие - соттветствие полей. +// +// Возвращаемое значение - Строка - преобразованное соответствие в строку. +// Функция ПреобразоватьСписокПолейВСтроку(СоответствиеПолей) Экспорт Результат = ""; @@ -432,22 +426,28 @@ КонецФункции -// Преобразовать строку полей в список значений +// Возвращает список значений. Преобразует строку полей в список значений. +// +// Параметры: +// СтрокаПолей - Строка - строка полей. +// +// Возвращаемое значение - Список значений - список значений полей. +// Функция ПреобразоватьСтрокуВСписокПолей(СтрокаПолей) Экспорт Результат = Новый СписокЗначений; ПоследнийЭлемент = Неопределено; - Для Сч = 1 По СтрЧислоСтрок(СтрокаПолей) Цикл - Стр = СтрПолучитьСтроку(СтрокаПолей, Сч); - Если Лев(Стр, 1) = Символы.Таб Тогда + Для Итерация = 1 По СтрЧислоСтрок(СтрокаПолей) Цикл + ПолученнаяСтрока = СтрПолучитьСтроку(СтрокаПолей, Итерация); + Если Лев(ПолученнаяСтрока, 1) = Символы.Таб Тогда Если ПоследнийЭлемент <> Неопределено Тогда - ПоследнийЭлемент.Значение = ПоследнийЭлемент.Значение + Символы.ПС + Сред(Стр, 2); + ПоследнийЭлемент.Значение = ПоследнийЭлемент.Значение + Символы.ПС + Сред(ПолученнаяСтрока, 2); КонецЕсли; Иначе - Поз = Найти(Стр, "="); - Если Поз <> 0 Тогда - ПоследнийЭлемент = Результат.Добавить(Сред(Стр, Поз+1), Лев(Стр, Поз-1)); + ПозицияСимвола = Найти(ПолученнаяСтрока, "="); + Если ПозицияСимвола <> 0 Тогда + ПоследнийЭлемент = Результат.Добавить(Сред(ПолученнаяСтрока, ПозицияСимвола + 1), Лев(ПолученнаяСтрока, ПозицияСимвола - 1)); КонецЕсли; КонецЕсли; КонецЦикла; @@ -456,28 +456,39 @@ КонецФункции -// Получает значения поля адреса +// Процедура удаляет элементы справочника СтраныМира. // -// Параметры: -// СтрокаЗначенийПолей - строка значений полей -// ИмяПоля - имя поля -Функция ПолучитьЗначениеКонтактнойИнформации(СтрокаЗначенийПолей, ИмяПоля) Экспорт +Процедура УдалитьЭлементыСправочникаСтраныМира() Экспорт - ПозицияПоля = Найти(СтрокаЗначенийПолей, ИмяПоля); - Значение = ""; - Если ПозицияПоля <> 0 Тогда - ЗначенияПолей = Прав(СтрокаЗначенийПолей, СтрДлина(СтрокаЗначенийПолей) - ПозицияПоля - СтрДлина(ИмяПоля)); - ПозицияПС = Найти(ЗначенияПолей, Символы.ПС); - Значение = Сред(ЗначенияПолей, 0 , ПозицияПС - 1); + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СтраныМира.Ссылка + |ИЗ + | Справочник.СтраныМира КАК СтраныМира + |ГДЕ + | СтраныМира.Предопределенный = ЛОЖЬ"; + + РезультатЗапроса = Запрос.Выполнить(); + + Если НЕ РезультатЗапроса.Пустой() Тогда + + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + + Удаление = Новый УдалениеОбъекта(Выборка.Ссылка); + Удаление.ОбменДанными.Загрузка = Истина; + Удаление.Записать(); + + КонецЦикла; КонецЕсли; - Возврат Значение; - -КонецФункции - +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБНОВЛЕНИЕ ИНФОРМАЦИОННОЙ БАЗЫ +// Обновление информационной базы // Добавляет в список Обработчики процедуры-обработчики обновления, // необходимые данной подсистеме. @@ -498,7 +509,16 @@ КонецПроцедуры -// Обновить один вид контактной информации +// Обновляет один вид контактной информации. +// +// Параметры: +// ВидКИ - Справочник.ВидыКонтактнойИнформации - вид контактной информации. +// Тип - Перечисление.ТипыКонтактнойИнформации - тип контактной информации. +// МожноИзменятьСпособРедактирования - Булево - Истина, если есть возможность изменять способ редактирования, Ложь - иначе. +// РедактированиеТолькоВДиалоге - Булево - Истина, если редактировать только в диалоге, Ложь - иначе. +// АдресТолькоРоссийский - Булево - Истина, если адрес только российский, Ложь - Иначе. +// Порядок - Неопределено или Число - порядок вида контактной информации. +// Процедура ОбновитьВидКИ(ВидКИ, Тип, МожноИзменятьСпособРедактирования, РедактированиеТолькоВДиалоге, АдресТолькоРоссийский, Порядок = Неопределено) Экспорт @@ -521,6 +541,10 @@ // Процедура ЗагрузитьСтраныМира() Экспорт + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + // Получим список уже загруженных стран Запрос = Новый Запрос; Запрос.Текст = @@ -595,3 +619,78 @@ КонецЦикла; КонецПроцедуры + +// Получить значения определенного типа контактной информации у объекта. +// +// Параметры +// Ссылка - ЛюбаяСсылка - ссылка на объект-владелец контактной информации (организация, контрагент, партнер и т.д.) +// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации +// +// Возвращаемое значение: +// ТаблицаЗначений - с полями +// Значение (строка) - строковое представление значения +// Вид (строка} - представление вида контактной информации +// +Функция ЗначенияКонтактнойИнформацииОбъекта(Ссылка, ТипКонтактнойИнформации) Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КонтактнаяИнформация.Представление как Значение, + | КонтактнаяИнформация.Вид.Представление как Вид + |ИЗ + | Справочник." + Ссылка.Метаданные().Имя + ".КонтактнаяИнформация КАК КонтактнаяИнформация + |ГДЕ + | КонтактнаяИнформация.Ссылка = &Ссылка + | И КонтактнаяИнформация.Тип = &Тип + |"); + + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.УстановитьПараметр("Тип", ТипКонтактнойИнформации); + + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + +// Получить значения поля адреса. +// +// Параметры: +// СтрокаЗначенийПолей - строка со значениями полей адреса. +// ИмяПоля - имя поля. Например, "Район". +// +// Возвращаемое значение: +// Строка - значение поля. +// +Функция ПолучитьЗначениеПоляАдреса(СтрокаЗначенийПолей, ИмяПоля) Экспорт + + ПозицияПоля = Найти(СтрокаЗначенийПолей, ИмяПоля); + Значение = ""; + Если ПозицияПоля <> 0 Тогда + ЗначенияПолей = Прав(СтрокаЗначенийПолей, СтрДлина(СтрокаЗначенийПолей) - ПозицияПоля - СтрДлина(ИмяПоля)); + ПозицияПС = Найти(ЗначенияПолей, Символы.ПС); + Значение = Сред(ЗначенияПолей, 0 ,ПозицияПС - 1); + КонецЕсли; + Возврат Значение; + +КонецФункции + +// Получает значения поля адреса +// +// Параметры: +// СтрокаЗначенийПолей - Строка - строка значений полей +// ИмяПоля - Строка - имя поля +// +// Возвращаемое значение - Строка - значение контактной информации. +// +Функция ПолучитьЗначениеКонтактнойИнформации(СтрокаЗначенийПолей, ИмяПоля) Экспорт + + ПозицияПоля = Найти(СтрокаЗначенийПолей, ИмяПоля); + Значение = ""; + Если ПозицияПоля <> 0 Тогда + ЗначенияПолей = Прав(СтрокаЗначенийПолей, СтрДлина(СтрокаЗначенийПолей) - ПозицияПоля - СтрДлина(ИмяПоля)); + ПозицияПС = Найти(ЗначенияПолей, Символы.ПС); + Значение = Сред(ЗначенияПолей, 0 , ПозицияПС - 1); + КонецЕсли; + + Возврат Значение; + +КонецФункции diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторы/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторы/Module.bsl index c7798de8f..f9a1c6c03 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторы/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторы/Module.bsl @@ -13,36 +13,17 @@ // Функция ИспользуютсяКлассификаторы() Экспорт + // СтандартныеПодсистемы.АдресныйКлассификатор Возврат Истина; + // Конец СтандартныеПодсистемы.АдресныйКлассификатор + + Возврат Ложь; КонецФункции //////////////////////////////////////////////////////////////////////////////// // Экспортные функции, вызываемые из формы Ввода адреса -// Формирует из исходной строки СтрокаПоиска строку для поиска данных в запросе -// -// Параметры: -// СтрокаПоиска - Строка - исходная строка, содержащая запрещенные символы -// -// Возвращаемое значение: -// Строка - строка подготовленная для поиска данных в запросе -// -Функция СформироватьСтрокуДляПоискаВЗапросе(Знач СтрокаПоиска) Экспорт - - // СтандартныеПодсистемы.АдресныйКлассификатор - ИтоговаяСтрокаДляПоиска = СтрокаПоиска; - ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "~", "~~"); - ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "%", "~%"); - ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "_", "~_"); - ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "[", "~["); - ИтоговаяСтрокаДляПоиска = СтрЗаменить(ИтоговаяСтрокаДляПоиска, "-", "~-"); - - Возврат ИтоговаяСтрокаДляПоиска; - // Конец СтандартныеПодсистемы.АдресныйКлассификатор - -КонецФункции - // Найти по индексу записи в адресном классификаторе. // // Параметры: @@ -90,7 +71,8 @@ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор |ГДЕ | АдресныйКлассификатор.Индекс = &Индекс - | И АдресныйКлассификатор.ТипАдресногоЭлемента < 6"; + | И АдресныйКлассификатор.ТипАдресногоЭлемента < 6 + |ИНДЕКСИРОВАТЬ ПО КодАдресногоОбъектаВКоде, КодРайонаВКоде, КодГородаВКоде, КодНаселенногоПунктаВКоде, КодУлицыВКоде"; Запрос.УстановитьПараметр("Индекс", Индекс); Запрос.Выполнить(); РазложитьЭлементыАдресаВоВременныеТаблицы(МенеджерВременныхТаблиц); @@ -216,6 +198,8 @@ Возврат Результат; // Конец СтандартныеПодсистемы.АдресныйКлассификатор + Возврат Новый Структура("Количество,НайденныйРегион,НайденныйРайон,ПризнакАктуальности", 0, "", "", 0); + КонецФункции // Получить компоненты адресного элемента по его коду @@ -286,12 +270,12 @@ // 3.Выводим полученные данные в результат Если РезультатЗапроса.Пустой() Тогда - Результат.Регион = ""; - Результат.Район = ""; - Результат.Город = ""; - Результат.НаселенныйПункт = ""; - Результат.Улица = ""; - Результат.ПризнакАктуальности = 0; + Результат.Вставить("Регион", ""); + Результат.Вставить("Район", ""); + Результат.Вставить("Город", ""); + Результат.Вставить("НаселенныйПункт", ""); + Результат.Вставить("Улица", ""); + Результат.Вставить("ПризнакАктуальности", 0); Иначе Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); @@ -387,6 +371,8 @@ // СтандартныеПодсистемы.АдресныйКлассификатор РодительИндекса = ПолучитьПустуюСтруктуруАдреса(); Индекс = ""; + Загружен = СтруктураЗагруженныхЭлементовАдреса(НазваниеРегиона, НазваниеРайона + , НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы); Регион = ПолучитьАдресныйЭлемент(НазваниеРегиона, 1, РодительИндекса); Если Регион.Код > 0 Тогда @@ -394,6 +380,10 @@ Если НЕ ПустаяСтрока(Регион.Индекс) Тогда Индекс = Регион.Индекс; КонецЕсли; + // Если регионы загружены, но указанный регион не найден, + // значит он некорректен, возвращаем пустой индекс + ИначеЕсли Регион.Код = 0 И Загружен.Регион И Не ПустаяСтрока(НазваниеРегиона) Тогда + Возврат ""; КонецЕсли; Район = ПолучитьАдресныйЭлемент(НазваниеРайона, 2, РодительИндекса); @@ -402,6 +392,10 @@ Если НЕ ПустаяСтрока(Район.Индекс) Тогда Индекс = Район.Индекс; КонецЕсли; + // Если районы загружены, но указанный район не найден, + // значит он некорректен, возвращаем пустой индекс + ИначеЕсли Район.Код = 0 И Загружен.Район И Не ПустаяСтрока(НазваниеРайона) Тогда + Возврат ""; КонецЕсли; Город = ПолучитьАдресныйЭлемент(НазваниеГорода, 3, РодительИндекса); @@ -410,6 +404,10 @@ Если НЕ ПустаяСтрока(Город.Индекс) Тогда Индекс = Город.Индекс; КонецЕсли; + // Если города загружены, но указанный город не найден, + // значит он некорректен, возвращаем пустой индекс + ИначеЕсли Город.Код = 0 И Загружен.Город И Не ПустаяСтрока(НазваниеГорода) Тогда + Возврат ""; КонецЕсли; НаселенныйПункт = ПолучитьАдресныйЭлемент(НазваниеНаселенногоПункта, 4, РодительИндекса); @@ -418,6 +416,11 @@ Если НЕ ПустаяСтрока(НаселенныйПункт.Индекс) Тогда Индекс = НаселенныйПункт.Индекс; КонецЕсли; + // Если населенные пункты загружены, но указанный населенный пункт не найден, + // значит он некорректен, возвращаем пустой индекс + ИначеЕсли НаселенныйПункт.Код = 0 И Загружен.НаселенныйПункт + И Не ПустаяСтрока(НазваниеНаселенногоПункта) Тогда + Возврат ""; КонецЕсли; Улица = ПолучитьАдресныйЭлемент(НазваниеУлицы, 5, РодительИндекса); @@ -426,10 +429,16 @@ Если НЕ ПустаяСтрока(ИндексУлицы) Тогда Индекс = ИндексУлицы; КонецЕсли; + // Если улицы загружены, но указанная улица не найдена, + // значит она некорректна, возвращаем пустой индекс + ИначеЕсли Улица.Код = 0 И Загружен.Улица И Не ПустаяСтрока(НазваниеУлицы) Тогда + Возврат ""; КонецЕсли; Возврат Индекс; // Конец СтандартныеПодсистемы.АдресныйКлассификатор + + Возврат ""; КонецФункции @@ -461,13 +470,24 @@ КонецЕсли; Результат = Новый СписокЗначений; - Для Каждого Стр Из РезультатЗапроса Цикл - Результат.Добавить(СокрЛП(Стр.Наименование) + " " + СокрЛП(Стр.Сокращение), , (Стр.ПризнакАктуальности = 0)); - КонецЦикла; + Для Каждого СтрокаРезультата Из РезультатЗапроса Цикл + ПолноеНаименование = СокрЛП(СтрокаРезультата.Наименование) + " " + СокрЛП(СтрокаРезультата.Сокращение); + СтруктураРезультата = Новый Структура; + СтруктураРезультата.Вставить("Значение", ПолноеНаименование); + СтруктураРезультата.Вставить("ПометкаУдаления", (СтрокаРезультата.ПризнакАктуальности <> 0)); + Если СтруктураРезультата.ПометкаУдаления Тогда + ТекстПредупреждения = НСтр("ru='""%ПолноеНаименование%"" не актуален.'"); + ТекстПредупреждения = СтрЗаменить(ТекстПредупреждения, "%ПолноеНаименование%", ПолноеНаименование); + СтруктураРезультата.Вставить("Предупреждение", ТекстПредупреждения); + КонецЕсли; + Результат.Добавить(СтруктураРезультата); + КонецЦикла; Возврат Результат; // Конец СтандартныеПодсистемы.АдресныйКлассификатор + Возврат Новый СписокЗначений; + КонецФункции // Проверяет соответствие адреса КЛАДРу по переданным индексу, региону, району, городу, населенному пункту, @@ -529,7 +549,7 @@ НазваниеУлицы, НомерДома, НомерКорпуса, Индекс); // Восстанавливаем населенный пункт, который мог потеряться - Если НаселенныйПункт.Код = 0 И Улица.Код <> 0 Тогда + Если ПустаяСтрока(НазваниеНаселенногоПункта) И НаселенныйПункт.Код = 0 И Улица.Код <> 0 Тогда Запрос = Новый Запрос; Запрос.Текст = @@ -571,7 +591,7 @@ КонецЕсли; // Восстанавливаем город, который мог потеряться - Если Город.Код = 0 И НаселенныйПункт.Код <> 0 Тогда + Если ПустаяСтрока(НазваниеГорода) И Город.Код = 0 И НаселенныйПункт.Код <> 0 Тогда Запрос = Новый Запрос; Запрос.Текст = @@ -611,7 +631,7 @@ КонецЕсли; // Восстанавливаем район, который мог потеряться - Если Район.Код = 0 И Город.Код <> 0 Тогда + Если ПустаяСтрока(НазваниеРайона) И Район.Код = 0 И Город.Код <> 0 Тогда Запрос = Новый Запрос; Запрос.Текст = @@ -657,6 +677,7 @@ СтруктураПроверки.Вставить("Улица", Улица); СтруктураПроверки.Вставить("Индекс", Индекс); + // А теперь записываем ошибки ЕстьОшибки = Ложь; СтруктураОшибок = Новый Структура; Если Не ПустаяСтрока(НазваниеРегиона) И Регион.Код = 0 Тогда @@ -787,6 +808,8 @@ КонецЕсли; СтруктураПроверки.Вставить("Дом", Дом); + // Если по улице нет домов в КЛАДР - считаем, что ошибки нет + // Если же по улице есть дома, и код дома не найден - то ошибка. Если КодДома = 0 И ЕстьДома Тогда ЕстьОшибки = Истина; Если ПустаяСтрока(НомерДома) Тогда @@ -809,6 +832,7 @@ КонецЕсли; + // Проверка индекса Если Не ПустаяСтрока(УказанныйИндекс) И Не ЕстьОшибки И НомерИндекса = "" Тогда ЕстьОшибки = Истина; СообщениеОбОшибке = НСтр("ru='Индекс ""%УказанныйИндекс%"" не найден в адресном классификаторе.'"); @@ -821,6 +845,8 @@ Возврат СтруктураПроверки; // Конец СтандартныеПодсистемы.АдресныйКлассификатор + Возврат Ложь; + КонецФункции // Проверяет загружен ли адресный элемент в базу. @@ -839,6 +865,7 @@ Функция АдресныйЭлементЗагружен(Знач НазваниеРегиона, Знач НазваниеРайона = "", Знач НазваниеГорода = "", Знач НазваниеНаселенногоПункта = "", Знач НазваниеУлицы = "", Уровень = 1) Экспорт + // СтандартныеПодсистемы.АдресныйКлассификатор Родитель = ПолучитьПустуюСтруктуруАдреса(); Регион = ПолучитьАдресныйЭлемент(НазваниеРегиона, 1, Родитель); @@ -976,9 +1003,131 @@ Результат = Запрос.Выполнить(); Возврат Не Результат.Пустой(); + // Конец СтандартныеПодсистемы.АдресныйКлассификатор + + Возврат Ложь; КонецФункции +// По полному наименованию адресного элемента выдает отдельно его имя, и отдельно его адресное сокращение +// +// Параметры: +// СтрокаЭлемента - Строка - строка элемента. +// АдресноеСокращение - Строка - адресное сокращение. +// +// Возвращаемое значение: +// Строка - имя и адресное сокращение. +// +Функция ПолучитьИмяИАдресноеСокращение(Знач СтрокаЭлемента, АдресноеСокращение) Экспорт + + // СтандартныеПодсистемы.АдресныйКлассификатор + Буфер = СокрП(СтрокаЭлемента); + ПозицияПослПробела = Найти(Буфер, " "); + + Если ПозицияПослПробела = 0 Тогда + Возврат СтрокаЭлемента; + КонецЕсли; + + Пока СтрЧислоВхождений(Буфер, " ") > 1 Цикл + Буфер = Лев(Буфер, ПозицияПослПробела - 1) + "_" + Сред(Буфер, ПозицияПослПробела + 1); + ПозицияПослПробела = Найти(Буфер, " "); + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | АдресныеСокращения.Сокращение + |ИЗ + | РегистрСведений.АдресныеСокращения КАК АдресныеСокращения + |ГДЕ + | АдресныеСокращения.Сокращение = &Сокращение"; + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("Сокращение", Сред(СтрокаЭлемента, ПозицияПослПробела + 1)); + + Если Запрос.Выполнить().Пустой() Тогда + Возврат СтрокаЭлемента; + КонецЕсли; + + Если ПустаяСтрока(СокрЛП(Лев(СтрокаЭлемента, ПозицияПослПробела - 1))) Тогда + Возврат СтрокаЭлемента; + Иначе + АдресноеСокращение = Сред(СтрокаЭлемента, ПозицияПослПробела + 1); + Возврат Лев(СтрокаЭлемента, ПозицияПослПробела - 1); + КонецЕсли; + // Конец СтандартныеПодсистемы.АдресныйКлассификатор + + Возврат СтрокаЭлемента; + +КонецФункции + +// По переданным элементам адреса указывает, загружен ли КЛАДР по соответствующим элементам. +// +// Параметры: +// НазваниеРегиона - Строка - название региона(с сокращением) +// НазваниеРайона - Строка - название района(с сокращением) +// НазваниеГорода - Строка - название города(с сокращением) +// НазваниеНаселенногоПункта - Строка - название населенного пункта(с сокращением) +// НазваниеУлицы - Строка - название улицы(с сокращением) +// +// Возвращаемое значение: +// Структура с полями: +// Регион - Булево - регион загружен +// Район - Булево - район загружен +// Город - Булево - город загружен +// НаселенныйПункт - населенный пункт загружен +// Улица - Булево - улица загружена +// +Функция СтруктураЗагруженныхЭлементовАдреса(Знач НазваниеРегиона, Знач НазваниеРайона, Знач НазваниеГорода, + Знач НазваниеНаселенногоПункта, Знач НазваниеУлицы) Экспорт + + // СтандартныеПодсистемы.АдресныйКлассификатор + СтруктураЗагруженных = Новый Структура("Регион,Район,Город,НаселенныйПункт,Улица,Дом" + , АдресныйЭлементЗагружен(НазваниеРегиона, , , , , 1) + , АдресныйЭлементЗагружен(НазваниеРегиона, , , , , 2) + , АдресныйЭлементЗагружен(НазваниеРегиона, НазваниеРайона, , , , 3) + , АдресныйЭлементЗагружен(НазваниеРегиона, НазваниеРайона, НазваниеГорода, , , 4) + , АдресныйЭлементЗагружен(НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, , 5) + , АдресныйЭлементЗагружен(НазваниеРегиона, НазваниеРайона, НазваниеГорода, НазваниеНаселенногоПункта, НазваниеУлицы, 6)); + Возврат СтруктураЗагруженных; + // Конец СтандартныеПодсистемы.АдресныйКлассификатор + + Возврат Новый Структура("Регион,Район,Город,НаселенныйПункт,Улица,Дом", Ложь, Ложь, Ложь, Ложь, Ложь, Ложь); + +КонецФункции + +// По переданным элементам адреса указывает, загружен ли КЛАДР по соответствующим элементам. +// +// Параметры: +// КодАдресногоЭлемента - Число - код адресного элемента, по которому ищутся компоненты адреса +// Дом - Строка - номер дома, если требуется +// Корпус - Строка - номер корпуса, если требуется +// Квартира - Строка - номер квартиры, если требуется +// +// Возвращаемое значение: +// Структура с полями: +// Индекс - Строка - индекс адреса по переданным параметрам +// Регион - Строка - регион по переданному коду +// Район - Строка - район по переданному коду +// Город - Строка - город по переданному коду +// НаселенныйПункт - Строка - населенный пункт по переданному коду +// Улица - Строка - улица по переданному коду +// Дом - Строка - переданный номер дома +// Корпус - Строка - переданный номер корпуса +// Квартира - Строка - переданный номер квартиры +// +Функция ПолучитьСтруктуруАдресаНаСервере(КодАдресногоЭлемента, Дом = "", Корпус = "", Квартира = "") Экспорт + + СтруктураАдреса = Новый Структура(); + ПоКодуАдресногоЭлементаВСтруктуруПолучитьЕгоКомпоненты(КодАдресногоЭлемента, СтруктураАдреса); + Индекс = ПолучитьИндекс(СтруктураАдреса.Регион, СтруктураАдреса.Район + , СтруктураАдреса.Город, СтруктураАдреса.НаселенныйПункт, СтруктураАдреса.Улица, Дом, Корпус); + СтруктураАдреса.Вставить("Индекс", Индекс); + СтруктураАдреса.Вставить("Дом", Дом); + СтруктураАдреса.Вставить("Корпус", Корпус); + СтруктураАдреса.Вставить("Квартира", Квартира); + Возврат СтруктураАдреса; + +КонецФункции //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -1146,7 +1295,7 @@ Функция СоздатьЗапросДляСпискаАвтоподбора(СтрокаПоиска, СтрокаОтборовПоСтруктуре, СтруктураПараметров, ИмяТаблицыОграничений) Запрос = Новый Запрос; - СтрокаПоиска = СформироватьСтрокуДляПоискаВЗапросе(СтрокаПоиска); + СтрокаПоиска = ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе(СтрокаПоиска); Запрос.УстановитьПараметр("ТекстАвтоПодбора" , (СтрокаПоиска + "%")); // Устанавливает ограничения @@ -1293,8 +1442,10 @@ | ПО Адреса.КодАдресногоОбъектаВКоде = АдресныйКлассификатор.КодАдресногоОбъектаВКоде |ГДЕ | АдресныйКлассификатор.ТипАдресногоЭлемента = 1 - |; - | + |"; + Запрос.Выполнить(); + + Запрос.Текст = " |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Адреса.Код, @@ -1311,8 +1462,10 @@ | И Адреса.КодРайонаВКоде = АдресныйКлассификатор.КодРайонаВКоде |ГДЕ | АдресныйКлассификатор.ТипАдресногоЭлемента = 2 - |; - | + |"; + Запрос.Выполнить(); + + Запрос.Текст = " |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Адреса.Код, @@ -1331,8 +1484,10 @@ | И Адреса.КодГородаВКоде = АдресныйКлассификатор.КодГородаВКоде |ГДЕ | АдресныйКлассификатор.ТипАдресногоЭлемента = 3 - |; - | + |"; + Запрос.Выполнить(); + + Запрос.Текст = " |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Адреса.Код, @@ -1353,8 +1508,10 @@ | И Адреса.КодНаселенногоПунктаВКоде = АдресныйКлассификатор.КодНаселенногоПунктаВКоде |ГДЕ | АдресныйКлассификатор.ТипАдресногоЭлемента = 4 - |; - | + |"; + Запрос.Выполнить(); + + Запрос.Текст = " |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Адреса.Код, @@ -1376,8 +1533,9 @@ | И Адреса.КодНаселенногоПунктаВКоде = АдресныйКлассификатор.КодНаселенногоПунктаВКоде | И Адреса.КодУлицыВКоде = АдресныйКлассификатор.КодУлицыВКоде |ГДЕ - | АдресныйКлассификатор.ТипАдресногоЭлемента = 5"; - Выборка = Запрос.Выполнить(); + | АдресныйКлассификатор.ТипАдресногоЭлемента = 5 + |"; + Запрос.Выполнить(); КонецПроцедуры @@ -1414,7 +1572,28 @@ КонецЕсли; Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Номер, Ложь) Тогда - Возврат ВРЕГ(СтрЗаменить("" + Номер, " ", "")) = ВРЕГ(СтрЗаменить("" + Интервал, " ", "")); + // Проверяем вхождение конкретного номера дома в интервал + НомерВходитВИнтервал = (ВРЕГ(СтрЗаменить("" + Номер, " ", "")) = ВРЕГ(СтрЗаменить("" + Интервал, " ", ""))); + Если НомерВходитВИнтервал Тогда + Возврат Истина; + // Если номер был числом, но не найден в интервале, то этот номер действительно не входит в интервал + ИначеЕсли ТипЗнч(Номер) = Тип("Число") Тогда + Возврат Ложь; + // Если же строковый номер не найден в интервале, то попробуем отбросить то что следовало + // за числовой частью номер и проверить входждение числовой части номера дома в интервал. + Иначе + Цифры = "1234567890"; + ЧисловаяЧасть = ""; + Для НомерСимвола = 1 По СтрДлина(Номер) Цикл + ТекущийСимвол = Сред(Номер, НомерСимвола, 1); + Если Найти(Цифры, ТекущийСимвол) Тогда + ЧисловаяЧасть = ЧисловаяЧасть + ТекущийСимвол; + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + Номер = ЧисловаяЧасть; + КонецЕсли; КонецЕсли; Номер = Число(Номер); @@ -1697,28 +1876,29 @@ Запрос.УстановитьПараметр("АдресноеСокращение", АдресноеСокращение); КонецЕсли; - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.Код, - | АдресныйКлассификатор.КодАдресногоОбъектаВКоде, - | АдресныйКлассификатор.Наименование, - | АдресныйКлассификатор.Сокращение, - | АдресныйКлассификатор.Индекс, - | АдресныйКлассификатор.ТипАдресногоЭлемента, - | АдресныйКлассификатор.КодРайонаВКоде, - | АдресныйКлассификатор.КодГородаВКоде, - | АдресныйКлассификатор.КодНаселенногоПунктаВКоде, - | АдресныйКлассификатор.КодУлицыВКоде, - | АдресныйКлассификатор.ПризнакАктуальности - |ИЗ - | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор - | - |ГДЕ - | АдресныйКлассификатор.Наименование = &Наименование И - | АдресныйКлассификатор.ТипАдресногоЭлемента = &ТипАдресногоЭлемента " + - ОграничениеПоКоду; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | АдресныйКлассификатор.Код, + | АдресныйКлассификатор.КодАдресногоОбъектаВКоде, + | АдресныйКлассификатор.Наименование, + | АдресныйКлассификатор.Сокращение, + | АдресныйКлассификатор.Индекс, + | АдресныйКлассификатор.ТипАдресногоЭлемента, + | АдресныйКлассификатор.КодРайонаВКоде, + | АдресныйКлассификатор.КодГородаВКоде, + | АдресныйКлассификатор.КодНаселенногоПунктаВКоде, + | АдресныйКлассификатор.КодУлицыВКоде, + | АдресныйКлассификатор.ПризнакАктуальности + |ИЗ + | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор + | + |ГДЕ + | АдресныйКлассификатор.ТипАдресногоЭлемента = &ТипАдресногоЭлемента + | И АдресныйКлассификатор.Наименование = &Наименование " + + ОграничениеПоКоду; - Запрос.УстановитьПараметр("Наименование", НазваниеЭлемента); Запрос.УстановитьПараметр("ТипАдресногоЭлемента", ТипЭлемента); + Запрос.УстановитьПараметр("Наименование", НазваниеЭлемента); РезультатЗапроса = Запрос.Выполнить(); @@ -1755,52 +1935,5 @@ КонецПроцедуры -// Функция по полному наименованию адресного элемента выдает отдельно его имя, и отдельно его адресное сокращение -// -// Параметры: -// СтрокаЭлемента - Строка - строка элемента. -// АдресноеСокращение - Строка - адресное сокращение. -// -// Возвращаемое значение: -// Строка - имя и адремное сокращение. -// -Функция ПолучитьИмяИАдресноеСокращение(Знач СтрокаЭлемента, АдресноеСокращение) - - Буфер = СокрП(СтрокаЭлемента); - ПозицияПослПробела = Найти(Буфер, " "); - - Если ПозицияПослПробела = 0 Тогда - Возврат СтрокаЭлемента; - КонецЕсли; - - Пока СтрЧислоВхождений(Буфер, " ") > 1 Цикл - Буфер = Лев(Буфер, ПозицияПослПробела - 1) + "_" + Сред(Буфер, ПозицияПослПробела + 1); - ПозицияПослПробела = Найти(Буфер, " "); - КонецЦикла; - - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныеСокращения.Сокращение - |ИЗ - | РегистрСведений.АдресныеСокращения КАК АдресныеСокращения - |ГДЕ - | АдресныеСокращения.Сокращение = &Сокращение"; - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("Сокращение", Сред(СтрокаЭлемента, ПозицияПослПробела + 1)); - - Если Запрос.Выполнить().Пустой() Тогда - Возврат СтрокаЭлемента; - КонецЕсли; - - Если ПустаяСтрока(СокрЛП(Лев(СтрокаЭлемента, ПозицияПослПробела - 1))) Тогда - Возврат СтрокаЭлемента; - Иначе - АдресноеСокращение = Сред(СтрокаЭлемента, ПозицияПослПробела + 1); - Возврат Лев(СтрокаЭлемента, ПозицияПослПробела - 1); - КонецЕсли; - -КонецФункции - // Конец СтандартныеПодсистемы.АдресныйКлассификатор diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторыКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторыКлиент/Module.bsl index 43c182fd2..5913e8f95 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторыКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторыКлиент/Module.bsl @@ -1,9 +1,17 @@ -// Открыть форму загрузки адресного классификатора. +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Контактная информация". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Открывает форму загрузки адресного классификатора. // Процедура ЗагрузитьАдресныйКлассификатор() Экспорт - // АдресныйКлассификатор + // СтандартныеПодсистемы.АдресныйКлассификатор АдресныйКлассификаторКлиент.ЗагрузитьАдресныйКлассификатор(); - // Конец АдресныйКлассификатор + // Конец СтандартныеПодсистемы.АдресныйКлассификатор КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl index 7ac9e943d..567c6cab4 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl @@ -1,15 +1,22 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Контактная информация". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ СВЯЗАННЫХ С ТАБЛИЦЕЙ КОНТАКТНОЙ ИНФОРМАЦИИ НА ФОРМАХ +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Событие ПриИзменении в колонке Представление таблицы контактной информации Процедура ПредставлениеПриИзменении(Форма, Элемент) Экспорт - СтрДанные = ПолучитьСтрокуДополнительныхЗначений(Форма, Элемент); - Если (СтрДанные <> Неопределено) И (СтрДанные.ТипНомер = 2) Тогда + ДанныеСтроки = ПолучитьСтрокуДополнительныхЗначений(Форма, Элемент); + Если (ДанныеСтроки <> Неопределено) И (ДанныеСтроки.ТипНомер = 2) Тогда Значение = Элемент.ТекстРедактирования; - ЗаполнитьПоляВЗаписиПоПредставлениюТелефон(Значение, СтрДанные.ЗначенияПолей); + ЗаполнитьПоляВЗаписиПоПредставлениюТелефон(Значение, ДанныеСтроки.ЗначенияПолей); КонецЕсли; + Если (ДанныеСтроки <> Неопределено) И (ДанныеСтроки.ТипНомер = 1) и Элемент.ТекстРедактирования = "" Тогда + ДанныеСтроки.ЗначенияПолей.Очистить() + КонецЕсли; КонецПроцедуры @@ -18,30 +25,30 @@ СтандартнаяОбработка = Ложь; - СтрДанные = ПолучитьСтрокуДополнительныхЗначений(Форма, Элемент); - Если (СтрДанные = Неопределено) И (СтрДанные.ТипНомер = 0) Тогда + ДанныеСтроки = ПолучитьСтрокуДополнительныхЗначений(Форма, Элемент); + Если (ДанныеСтроки = Неопределено) И (ДанныеСтроки.ТипНомер = 0) Тогда Возврат; КонецЕсли; - Если СтрДанные.ТипНомер = 1 Тогда + Если ДанныеСтроки.ТипНомер = 1 Тогда ИмяФормыРедактирования = "ОбщаяФорма.ВводАдреса"; Иначе ИмяФормыРедактирования = "ОбщаяФорма.ВводТелефона"; КонецЕсли; - Пар = Новый Структура; - Пар.Вставить("ЗначенияПолей", СтрДанные.ЗначенияПолей); - Пар.Вставить("Вид", СтрДанные.Вид); - Пар.Вставить("БылиВнесеныИзменения", Ложь); - Пар.Вставить("Представление", Элемент.ТекстРедактирования); - Пар.Вставить("РедактированиеТолькоВДиалоге", Не Элемент.РедактированиеТекста); - Пар.Вставить("АдресТолькоРоссийский", СтрДанные.ТолькоРоссийский); + ПараметрыДляФормы = Новый Структура; + ПараметрыДляФормы.Вставить("ЗначенияПолей", ДанныеСтроки.ЗначенияПолей); + ПараметрыДляФормы.Вставить("Вид", ДанныеСтроки.Вид); + ПараметрыДляФормы.Вставить("БылиВнесеныИзменения", Ложь); + ПараметрыДляФормы.Вставить("Представление", Элемент.ТекстРедактирования); + ПараметрыДляФормы.Вставить("РедактированиеТолькоВДиалоге", Не Элемент.РедактированиеТекста); + ПараметрыДляФормы.Вставить("АдресТолькоРоссийский", ДанныеСтроки.ТолькоРоссийский); - Результат = ОткрытьФормуМодально(ИмяФормыРедактирования, Пар); + Результат = ОткрытьФормуМодально(ИмяФормыРедактирования, ПараметрыДляФормы); Если ТипЗнч(Результат) = Тип("Структура") Тогда Форма[Элемент.Имя] = Результат.Представление; - СтрДанные.ЗначенияПолей = Результат.ЗначенияПолей; + ДанныеСтроки.ЗначенияПолей = Результат.ЗначенияПолей; Модифицированность = Истина; КонецЕсли; @@ -49,8 +56,16 @@ //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Возвращает строку дополнительных значений по имени реквизита. +// +// Параметры: +// Форма - Форма - передаваемая форма. +// Элемент - ДанныеФормыСтруктураСКоллекцией - данные формы. +// +// Возвращаемое значение - Неопределено или СтрокаКоллекции - строка коллекции. +// Функция ПолучитьСтрокуДополнительныхЗначений(Форма, Элемент) Отбор = Новый Структура("ИмяРеквизита", Элемент.Имя); @@ -60,10 +75,15 @@ КонецФункции -// По полю Представление заполнить остальные поля в записи для телефона +// Заполняет по полю Представление остальные поля в записи для телефона. +// +// Параметры: +// Представление - Строка - представление телефона. +// СписокПолей - ДанныеФормыКоллекция - список полей. +// Процедура ЗаполнитьПоляВЗаписиПоПредставлениюТелефон(Представление, СписокПолей) - текСтр = СокрЛП(Представление); + СтрокаТелефона = СокрЛП(Представление); СписокПолей.Очистить(); КодСтраны = ""; КодГорода = ""; @@ -72,21 +92,21 @@ Комментарий = ""; // вырежем добавочный номер с комментарием - ПозДоб = Найти(ВРЕГ(текСтр), "ДОБ."); - Если ПозДоб <> 0 Тогда - ДобавочныйСКомментарием = СокрЛП(Сред(текСтр, ПозДоб+4)); + ПозицияДобавочный = Найти(ВРЕГ(СтрокаТелефона), "ДОБ."); + Если ПозицияДобавочный <> 0 Тогда + ДобавочныйСКомментарием = СокрЛП(Сред(СтрокаТелефона, ПозицияДобавочный + 4)); - текСтр = СокрЛП(Лев(текСтр, ПозДоб-1)); + СтрокаТелефона = СокрЛП(Лев(СтрокаТелефона, ПозицияДобавочный - 1)); - Если Прав(текСтр, 1) = "," Тогда - текСтр = Лев(текСтр, СтрДлина(текСтр)-1); + Если Прав(СтрокаТелефона, 1) = "," Тогда + СтрокаТелефона = Лев(СтрокаТелефона, СтрДлина(СтрокаТелефона)-1); КонецЕсли; - ПозДоб = Найти(ВРЕГ(ДобавочныйСКомментарием), ", "); + ПозицияДобавочный = Найти(ВРЕГ(ДобавочныйСКомментарием), ", "); - Если ПозДоб <> 0 Тогда - Добавочный = СокрЛП(Лев(ДобавочныйСКомментарием, ПозДоб-1)); - Комментарий = СокрЛП(Сред(ДобавочныйСКомментарием, ПозДоб+2)); + Если ПозицияДобавочный <> 0 Тогда + Добавочный = СокрЛП(Лев(ДобавочныйСКомментарием, ПозицияДобавочный - 1)); + Комментарий = СокрЛП(Сред(ДобавочныйСКомментарием, ПозицияДобавочный + 2)); Иначе Добавочный = ДобавочныйСКомментарием; КонецЕсли; @@ -94,28 +114,28 @@ КонецЕсли; // вырежем код города - Поз = Найти(текСтр, "("); - Если Поз <> 0 Тогда - КодСтраны = СокрЛП(Лев(текСтр, Поз-1)); + ПозицияОткрывающаясяСкобка = Найти(СтрокаТелефона, "("); + Если ПозицияОткрывающаясяСкобка <> 0 Тогда + КодСтраны = СокрЛП(Лев(СтрокаТелефона, ПозицияОткрывающаясяСкобка - 1)); - текСтр = СокрЛП(Сред(текСтр, Поз+1)); - Поз = Найти(текСтр, ")"); + СтрокаТелефона = СокрЛП(Сред(СтрокаТелефона, ПозицияОткрывающаясяСкобка + 1)); + ПозицияЗакрывающаясяСкобка = Найти(СтрокаТелефона, ")"); - Если Поз <> 0 Тогда - КодГорода = СокрЛП(Лев(текСтр, Поз-1)); - текСтр = СокрЛП(Сред(текСтр, Поз+1)); + Если ПозицияЗакрывающаясяСкобка <> 0 Тогда + КодГорода = СокрЛП(Лев(СтрокаТелефона, ПозицияЗакрывающаясяСкобка - 1)); + СтрокаТелефона = СокрЛП(Сред(СтрокаТелефона, ПозицияЗакрывающаясяСкобка + 1)); КонецЕсли; КонецЕсли; - Поз = Найти(текСтр, ", "); + ПозицияЗапятая = Найти(СтрокаТелефона, ", "); // Если добавочного номера нет - ориентируемся по номеру телефона и комментарию - Если ПозДоб = 0 И Поз <> 0 Тогда + Если ПозицияДобавочный = 0 И ПозицияЗапятая <> 0 Тогда // вырежем комментарий - НомерТелефона = СокрЛП(Лев(текСтр, Поз-1)); - Комментарий = СокрЛП(Сред(текСтр, Поз+2)); + НомерТелефона = СокрЛП(Лев(СтрокаТелефона, ПозицияЗапятая - 1)); + Комментарий = СокрЛП(Сред(СтрокаТелефона, ПозицияЗапятая + 2)); Иначе // все оставшееся это номер - НомерТелефона = текСтр; + НомерТелефона = СтрокаТелефона; КонецЕсли; // Поправим представление @@ -128,7 +148,17 @@ КонецПроцедуры -// Процедура формирует строковое представление телефона +// Формирует строковое представление телефона. +// +// Параметры: +// КодСтраны - Строка - код страны. +// КодГорода - Строка - код города. +// НомерТелефона - Строка - номер телефона. +// Добавочный - Строка - добавочный номер. +// Комментарий - Строка - комментарий. +// +// Возвращаемое значение - Строка - представление телефона. +// Функция СформироватьПредставлениеТелефона(КодСтраны, КодГорода, НомерТелефона, Добавочный, Комментарий) Экспорт Представление = СокрЛП(КодСтраны); diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl index 060893af6..ccd7aed4f 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl @@ -1,13 +1,20 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Контактная информация". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Функция формирует представление с видом для формы ввода адреса. // // Параметры: -// СтруктураАдреса - стурктура адреса. -// Представление - представление адреса. -// НаименованиеВида - наименование вида. +// СтруктураАдреса - Структура - стурктура адреса. +// Представление - Строка - представление адреса. +// НаименованиеВида - Строка - наименование вида. // // Возвращаемое значение: -// ПредставлениесВидом. +// Строка - представление адреса с видом. // Функция СформироватьПредставлениеАдреса(СтруктураАдреса, Представление, НаименованиеВида = Неопределено) Экспорт @@ -40,7 +47,17 @@ КонецФункции -//Процедура дополняет представление адреса строкой + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Дополняет представление адреса строкой. +// +// Параметры: +// Дополнение - Строка - дополнение адреса. +// СтрокаКонкатенации - Строка - строка конкатенации. +// Представление - Строка - представление адреса. +// Процедура ДополнитьПредставлениеАдреса(Дополнение, СтрокаКонкатенации, Представление) Если Дополнение <> "" Тогда @@ -50,6 +67,13 @@ КонецПроцедуры // Возвращает строку значения по свойству структуры. +// +// Параметры: +// Ключ - Строка - ключ структуры. +// Структура - Структура - передаваемая структура. +// +// Возвращаемое значение - ПустаяСтрока или ПроизвольныйТип - значение. +// Функция ЗначениеПоКлючуСтуктуры(Ключ, Структура) Значение = Неопределено; diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/УправлениеКонтактнойИнформациейКлиентСервер.mdo b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/УправлениеКонтактнойИнформациейКлиентСервер.mdo index 97deb0085..758c978c4 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/УправлениеКонтактнойИнформациейКлиентСервер.mdo +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/УправлениеКонтактнойИнформациейКлиентСервер.mdo @@ -7,5 +7,6 @@ true true + true true diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейПереопределяемый/Module.bsl index 371bc3ca7..855b6f0f3 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейПереопределяемый/Module.bsl @@ -1,3 +1,10 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Контактная информация". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Процедура обновления ИБ для справочника видов контактной информации. // @@ -28,7 +35,7 @@ // Справочник "Пользователи" УправлениеКонтактнойИнформацией.ОбновитьВидКИ(Справочники.ВидыКонтактнойИнформации.EmailПользователя, Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты, Истина, Ложь, Ложь, 1); - // Организации + // СтандартныеПодсистемы.Организации // Справочник "Организации" УправлениеКонтактнойИнформацией.ОбновитьВидКИ(Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации, Перечисления.ТипыКонтактнойИнформации.Адрес, Истина, Ложь, Истина, 1); @@ -38,7 +45,7 @@ УправлениеКонтактнойИнформацией.ОбновитьВидКИ(Справочники.ВидыКонтактнойИнформации.EmailОрганизации, Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты, Истина, Ложь, Ложь, 5); УправлениеКонтактнойИнформацией.ОбновитьВидКИ(Справочники.ВидыКонтактнойИнформации.ПочтовыйАдресОрганизации, Перечисления.ТипыКонтактнойИнформации.Адрес, Истина, Ложь, Ложь, 6); УправлениеКонтактнойИнформацией.ОбновитьВидКИ(Справочники.ВидыКонтактнойИнформации.ДругаяИнформацияОрганизации, Перечисления.ТипыКонтактнойИнформации.Другое, Истина, Ложь, Ложь, 7); - // Конец Организации + // Конец СтандартныеПодсистемы.Организации // Конец СтандартныеПодсистемы diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСобытия/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСобытия/Module.bsl index 10e08fd93..5242550f9 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСобытия/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСобытия/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Контактная информация". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + Процедура ОбработкаЗаполненияКИ(Источник, ДанныеЗаполнения, СтандартнаяОбработка) Экспорт Если ТипЗнч(ДанныеЗаполнения) <> Тип("Структура") Тогда @@ -13,13 +21,13 @@ // Заполним контактную информацию КонтактнаяИнформация = Неопределено; Если ДанныеЗаполнения.Свойство("КонтактнаяИнформация", КонтактнаяИнформация) Тогда - Для Каждого Стр Из КонтактнаяИнформация Цикл + Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл - новСтр = Источник.КонтактнаяИнформация.Добавить(); - ЗаполнитьЗначенияСвойств(новСтр, Стр); + НоваяСтрокаКИ = Источник.КонтактнаяИнформация.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрокаКИ, СтрокаКИ); - Если ТипЗнч(Стр.ЗначенияПолей) = Тип("СписокЗначений") Тогда - новСтр.ЗначенияПолей = Новый ХранилищеЗначения(Стр.ЗначенияПолей); + Если ТипЗнч(СтрокаКИ.ЗначенияПолей) = Тип("СписокЗначений") Тогда + НоваяСтрокаКИ.ЗначенияПолей = Новый ХранилищеЗначения(СтрокаКИ.ЗначенияПолей); КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl index ea94755b7..6c3564f38 100644 --- a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl @@ -1,103 +1,34 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Печать". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ, ФОРМИРУЮЩИЕ РЕЗУЛЬТАТЫ ДЛЯ КОМАНД ПЕЧАТИ +// ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Сформировать печатные формы -Процедура СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, - КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт - - // Получим менеджер печати - МенеджерПечати = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяМенеджераПечати); - - // Подготовим коллекцию для формируемых печатных форм - КоллекцияПечатныхФорм = ПодготовитьКоллекциюПечатныхФорм(ИменаМакетов); - - // Подготовим структуру параметров вывода - ПараметрыВывода = ПодготовитьСтруктуруПараметровВывода(); - - ОбъектыПечати = Новый СписокЗначений; - - // Сформируем печатные формы - МенеджерПечати.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); - - // Проверим, все ли макеты были сформированы - Для Каждого Стр Из КоллекцияПечатныхФорм Цикл - Если Стр.ТабличныйДокумент = Неопределено Тогда - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В обработчике печати не был сформирован табличный документ для: %1'"), - Стр.ИмяМакета); - ВызватьИсключение(ТекстСообщенияОбОшибке); - КонецЕсли; - - Стр.ТабличныйДокумент.КоличествоЭкземпляров = Стр.Экземпляров; - КонецЦикла; - -КонецПроцедуры - -// Сформировать печатные формы для непосредственного вывода на принтер -Процедура СформироватьПечатныеФормыДляБыстройПечати( - ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, - ТабличныеДокументы, ОбъектыПечати, ПараметрыВывода, Отказ) Экспорт - - Если НЕ ПравоДоступа("Вывод", Метаданные) Тогда - Отказ = Истина; - Возврат; - Иначе - Отказ = Ложь; - КонецЕсли; - - КоллекцияПечатныхФорм = Неопределено; - ОбъектыПечати = Новый СписокЗначений; - - СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, - КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); - - ТабличныеДокументы = Новый СписокЗначений; - - Для Каждого Стр Из КоллекцияПечатныхФорм Цикл - Если (ТипЗнч(Стр.ТабличныйДокумент) = Тип("ТабличныйДокумент")) И (Стр.ТабличныйДокумент.ВысотаТаблицы <> 0) Тогда - ТабличныеДокументы.Добавить(Стр.ТабличныйДокумент, Стр.СинонимМакета); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Сформировать печатные формы для непосредственного вывода на принтер -// в серверном режиме в обычном приложении -Процедура СформироватьПечатныеФормыДляБыстройПечатиОбычноеПриложение( - ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, - Адрес, ОбъектыПечати, ПараметрыВывода, Отказ) Экспорт - - Перем ОбъектыПечатиСЗ, ТабличныеДокументы; - - СформироватьПечатныеФормыДляБыстройПечати( - ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, - ТабличныеДокументы, ОбъектыПечатиСЗ, ПараметрыВывода, Отказ); - - Если Отказ Тогда - Возврат; - КонецЕсли; - - ОбъектыПечати = Новый Соответствие; - - Для Каждого ОбъектПечати Из ОбъектыПечатиСЗ Цикл - ОбъектыПечати.Вставить(ОбъектПечати.Представление, ОбъектПечати.Значение); - КонецЦикла; - - Адрес = ПоместитьВоВременноеХранилище(ТабличныеДокументы); - -КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ФУНКЦИИ И ПРОЦЕДУРЫ, ИСПОЛЬЗУЕМЫЕ МОДУЛЯМИ МЕНЕДЖЕРОВ ОБЪЕКТОВ ПРИ ФОРМИРОВАНИИ ТАБЛИЧНЫХ ДОКУМЕНТОВ - -// Проверить, нужно ли печатать макет +// Проверить, нужно ли печатать макет. +// +// Параметры: +// КоллекцияПечатныхФорм - ТаблицаЗначений - см. ПодготовитьКоллекциюПечатныхФорм(); +// ИмяМакета - Строка - имя проверяемого макета. +// +// Возвращаемое значение: +// Булево - Истина, если макет надо печатать. Функция НужноПечататьМакет(КоллекцияПечатныхФорм, ИмяМакета) Экспорт Возврат КоллекцияПечатныхФорм.Найти(ВРег(ИмяМакета), "ИмяВРЕГ") <> Неопределено; КонецФункции -// Вывести табличный документ в коллекцию печатных форм +// Добавляет табличный документ в коллекцию печатных форм. +// +// Параметры: +// КоллекцияПечатныхФорм - ТаблицаЗначений - см. ПодготовитьКоллекциюПечатныхФорм(); +// ИмяМакета - Строка - имя макета; +// СинонимМакета - Строка - представление макета; +// ТабличныйДокумент - ТабличныйДокумент - печатная форма документа; +// Картинка - Картинка; +// ПолныйПутьКМакету - Строка - путь к макету в дереве метаданных. Процедура ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета, ТабличныйДокумент, Картинка = Неопределено, ПолныйПутьКМакету = "") Экспорт Стр = КоллекцияПечатныхФорм.Найти(ВРег(ИмяМакета), "ИмяВРЕГ"); @@ -111,10 +42,11 @@ КонецПроцедуры -// Задать область печати объекта в табличном документе. +// Задаёт область печати объекта в табличном документе. // Применяется для связывания области в табличном документе, с объектом печати (ссылка). // Необходимо вызывать при формировании очередной области печатной формы в табличном // документе. +// // Параметры: // ТабличныйДокумент - табличный документ - табличный документ печатной формы // НомерСтрокиНачало - число - позиция начала очередной области в документе @@ -137,54 +69,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ НЕЭКСПОРТНЫЕ ФУНКЦИИ - -// Подготовить коллекцию печатных форм - таблицу значений используемые при формировании печатных форм -// -Функция ПодготовитьКоллекциюПечатныхФорм(ИменаМакетов) Экспорт - - Макеты = Новый ТаблицаЗначений; - Макеты.Колонки.Добавить("ИмяМакета"); - Макеты.Колонки.Добавить("ИмяВРЕГ"); - Макеты.Колонки.Добавить("СинонимМакета"); - Макеты.Колонки.Добавить("ТабличныйДокумент"); - Макеты.Колонки.Добавить("Экземпляров"); - Макеты.Колонки.Добавить("Картинка"); - Макеты.Колонки.Добавить("ПолныйПутьКМакету"); - - СтрИмен = СтрЗаменить(ИменаМакетов, ",", Символы.ПС); - Для Сч = 1 По СтрЧислоСтрок(СтрИмен) Цикл - Имя = СтрПолучитьСтроку(СтрИмен, Сч); - Стр = Макеты.Найти(Имя, "ИмяМакета"); - Если Стр = Неопределено Тогда - Стр = Макеты.Добавить(); - Стр.ИмяМакета = Имя; - Стр.ИмяВРЕГ = ВРег(Имя); - Стр.Экземпляров = 1; - Иначе - Стр.Экземпляров = Стр.Экземпляров + 1; - КонецЕсли; - КонецЦикла; - - Возврат Макеты; - -КонецФункции - -// Подготовить структуру параметров вывода для менеджера объекта формирующего печатные формы -// -Функция ПодготовитьСтруктуруПараметровВывода() Экспорт - - ПараметрыВывода = Новый Структура; - ПараметрыВывода.Вставить("ДоступнаПечатьПоКомплектно", Ложь); - ПараметрыВывода.Вставить("ПолучательЭлектронногоПисьма", Неопределено); - ПараметрыВывода.Вставить("ОтправительЭлектронногоПисьма", Неопределено); - - Возврат ПараметрыВывода; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ ФУНКЦИОНАЛЬНОСТИ ДЛЯ РАБОТЫ С ШАБЛОНАМИ ОФИСНЫХ ДОКУМЕНТОВ +// Работа с шаблонами офисных документов // Добавляет к параметру НаборОбластей новую запись об области // Параметры @@ -315,6 +200,139 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Сформировать печатные формы +Процедура СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, + КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт + + // Получим менеджер печати + МенеджерПечати = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяМенеджераПечати); + + // Подготовим коллекцию для формируемых печатных форм + КоллекцияПечатныхФорм = ПодготовитьКоллекциюПечатныхФорм(ИменаМакетов); + + // Подготовим структуру параметров вывода + ПараметрыВывода = ПодготовитьСтруктуруПараметровВывода(); + + ОбъектыПечати = Новый СписокЗначений; + + // Сформируем печатные формы + МенеджерПечати.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); + + // Проверим, все ли макеты были сформированы + Для Каждого Стр Из КоллекцияПечатныхФорм Цикл + Если Стр.ТабличныйДокумент = Неопределено Тогда + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В обработчике печати не был сформирован табличный документ для: %1'"), + Стр.ИмяМакета); + ВызватьИсключение(ТекстСообщенияОбОшибке); + КонецЕсли; + + Стр.ТабличныйДокумент.КоличествоЭкземпляров = Стр.Экземпляров; + КонецЦикла; + +КонецПроцедуры + +// Сформировать печатные формы для непосредственного вывода на принтер +Процедура СформироватьПечатныеФормыДляБыстройПечати( + ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, + ТабличныеДокументы, ОбъектыПечати, ПараметрыВывода, Отказ) Экспорт + + Если НЕ ПравоДоступа("Вывод", Метаданные) Тогда + Отказ = Истина; + Возврат; + Иначе + Отказ = Ложь; + КонецЕсли; + + КоллекцияПечатныхФорм = Неопределено; + ОбъектыПечати = Новый СписокЗначений; + + СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, + КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); + + ТабличныеДокументы = Новый СписокЗначений; + + Для Каждого Стр Из КоллекцияПечатныхФорм Цикл + Если (ТипЗнч(Стр.ТабличныйДокумент) = Тип("ТабличныйДокумент")) И (Стр.ТабличныйДокумент.ВысотаТаблицы <> 0) Тогда + ТабличныеДокументы.Добавить(Стр.ТабличныйДокумент, Стр.СинонимМакета); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Сформировать печатные формы для непосредственного вывода на принтер +// в серверном режиме в обычном приложении +Процедура СформироватьПечатныеФормыДляБыстройПечатиОбычноеПриложение( + ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, + Адрес, ОбъектыПечати, ПараметрыВывода, Отказ) Экспорт + + Перем ОбъектыПечатиСЗ, ТабличныеДокументы; + + СформироватьПечатныеФормыДляБыстройПечати( + ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, + ТабличныеДокументы, ОбъектыПечатиСЗ, ПараметрыВывода, Отказ); + + Если Отказ Тогда + Возврат; + КонецЕсли; + + ОбъектыПечати = Новый Соответствие; + + Для Каждого ОбъектПечати Из ОбъектыПечатиСЗ Цикл + ОбъектыПечати.Вставить(ОбъектПечати.Представление, ОбъектПечати.Значение); + КонецЦикла; + + Адрес = ПоместитьВоВременноеХранилище(ТабличныеДокументы); + +КонецПроцедуры + +// Подготовить коллекцию печатных форм - таблицу значений используемые при формировании печатных форм +// +Функция ПодготовитьКоллекциюПечатныхФорм(ИменаМакетов) Экспорт + + Макеты = Новый ТаблицаЗначений; + Макеты.Колонки.Добавить("ИмяМакета"); + Макеты.Колонки.Добавить("ИмяВРЕГ"); + Макеты.Колонки.Добавить("СинонимМакета"); + Макеты.Колонки.Добавить("ТабличныйДокумент"); + Макеты.Колонки.Добавить("Экземпляров"); + Макеты.Колонки.Добавить("Картинка"); + Макеты.Колонки.Добавить("ПолныйПутьКМакету"); + + СтрИмен = СтрЗаменить(ИменаМакетов, ",", Символы.ПС); + Для Сч = 1 По СтрЧислоСтрок(СтрИмен) Цикл + Имя = СтрПолучитьСтроку(СтрИмен, Сч); + Стр = Макеты.Найти(Имя, "ИмяМакета"); + Если Стр = Неопределено Тогда + Стр = Макеты.Добавить(); + Стр.ИмяМакета = Имя; + Стр.ИмяВРЕГ = ВРег(Имя); + Стр.Экземпляров = 1; + Иначе + Стр.Экземпляров = Стр.Экземпляров + 1; + КонецЕсли; + КонецЦикла; + + Возврат Макеты; + +КонецФункции + +// Подготовить структуру параметров вывода для менеджера объекта формирующего печатные формы +// +Функция ПодготовитьСтруктуруПараметровВывода() Экспорт + + ПараметрыВывода = Новый Структура; + ПараметрыВывода.Вставить("ДоступнаПечатьПоКомплектно", Ложь); + ПараметрыВывода.Вставить("ПолучательЭлектронногоПисьма", Неопределено); + ПараметрыВывода.Вставить("ОтправительЭлектронногоПисьма", Неопределено); + + Возврат ПараметрыВывода; + +КонецФункции + // Возвращает путь к каталогу, используемому при печати, из временного хранилища // Функция ПолучитьЛокальныйКаталогФайловПечати() Экспорт @@ -333,3 +351,4 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ЛокальныйКаталогФайловПечати", , Каталог); КонецПроцедуры + diff --git a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl index 551fd2f3a..0b38ca2a4 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl @@ -1,6 +1,11 @@ -////////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ ФУНКЦИОНАЛЬНОСТИ ДЛЯ РАБОТЫ С ШАБЛОНАМИ ОФИСНЫХ ДОКУМЕНТОВ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Печать". +// +//////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////// +// Печать с использованием макетов в формате MS Word +// // Описание структур данных: // // Handler - структура используемая для связи с COM объектами @@ -18,7 +23,7 @@ // //////////////////////////////////////////////////////////////////////////////// -// Экспортные функции +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Создает COM соединение с COM объектом Word.Application, создает в нем // единственный документ. @@ -225,11 +230,10 @@ // Параметры - список параметров для замены на значения // ДанныеОбъекта - данные объекта для заполнения // -Процедура ДобавитьНижнийКолонтитул(знач ПечатнаяФорма, - знач ОбластьHandler) Экспорт +Процедура ДобавитьНижнийКолонтитул(Знач ПечатнаяФорма, Знач ОбластьHandler) Экспорт ОбластьHandler.Footer.Range.Copy(); - ПечатнаяФорма.COMСоединение.ActiveDocument.Sections(1).Footers.Item(1).Range.Paste(); + НижнийКолонтитул(ПечатнаяФорма).Paste(); КонецПроцедуры @@ -240,32 +244,22 @@ // Параметры - список параметров для замены на значения // ДанныеОбъекта - данные объекта для заполнения // -Процедура ЗаполнитьПараметрыНижнегоКолонтитула(знач ПечатнаяФорма, - знач ДанныеОбъекта = Неопределено) Экспорт +Процедура ЗаполнитьПараметрыНижнегоКолонтитула(Знач ПечатнаяФорма, Знач ДанныеОбъекта = Неопределено) Экспорт + + Если ДанныеОбъекта = Неопределено Тогда + Возврат; + КонецЕсли; Для Каждого ПараметрЗначение Из ДанныеОбъекта Цикл Если ТипЗнч(ПараметрЗначение.Значение) <> Тип("Массив") Тогда - ВыполнитьЗаменуВНижнемКолонтитуле(ПечатнаяФорма.COMСоединение, - ПараметрЗначение.Ключ, - ПараметрЗначение.Значение); + Заменить(НижнийКолонтитул(ПечатнаяФорма), ПараметрЗначение.Ключ, ПараметрЗначение.Значение); КонецЕсли; КонецЦикла; КонецПроцедуры -Функция ВыполнитьЗаменуВНижнемКолонтитуле(COMСоединение, ТекстДляПоиска, ТекстЗамены) - - Range = COMСоединение.ActiveDocument.Sections(1).Footers.Item(1).Range; - Поиск = Range.Find; - Поиск.ClearFormatting(); - Поиск.execute("{v8 " + ТекстДляПоиска + "}"); - Если Поиск.Found Тогда - Range.Text = ТекстЗамены; - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - +Функция НижнийКолонтитул(ПечатнаяФорма) + Возврат ПечатнаяФорма.COMСоединение.ActiveDocument.Sections(1).Footers.Item(1).Range; КонецФункции // Добавляет верхний колонтитул в печатную форму из макета. @@ -275,11 +269,10 @@ // Параметры - список параметров для замены на значения // ДанныеОбъекта - данные объекта для заполнения // -Процедура ДобавитьВерхнийКолонтитул(знач ПечатнаяФорма, - знач ОбластьHandler) Экспорт +Процедура ДобавитьВерхнийКолонтитул(Знач ПечатнаяФорма, Знач ОбластьHandler) Экспорт ОбластьHandler.Header.Range.Copy(); - ПечатнаяФорма.COMСоединение.ActiveDocument.Sections(1).Headers.Item(1).Range.Paste(); + ВерхнийКолонтитул(ПечатнаяФорма).Paste(); КонецПроцедуры @@ -290,32 +283,22 @@ // Параметры - список параметров для замены на значения // ДанныеОбъекта - данные объекта для заполнения // -Процедура ЗаполнитьПараметрыВерхнегоКолонтитула(знач ПечатнаяФорма, - знач ДанныеОбъекта = Неопределено) Экспорт +Процедура ЗаполнитьПараметрыВерхнегоКолонтитула(Знач ПечатнаяФорма, Знач ДанныеОбъекта = Неопределено) Экспорт + + Если ДанныеОбъекта = Неопределено Тогда + Возврат; + КонецЕсли; Для Каждого ПараметрЗначение Из ДанныеОбъекта Цикл Если ТипЗнч(ПараметрЗначение.Значение) <> Тип("Массив") Тогда - ВыполнитьЗаменуВВерхнемКолонтитуле(ПечатнаяФорма.COMСоединение, - ПараметрЗначение.Ключ, - ПараметрЗначение.Значение); + Заменить(ВерхнийКолонтитул(ПечатнаяФорма), ПараметрЗначение.Ключ, ПараметрЗначение.Значение); КонецЕсли; КонецЦикла; КонецПроцедуры -Функция ВыполнитьЗаменуВВерхнемКолонтитуле(COMСоединение, ТекстДляПоиска, ТекстЗамены) - - Range = COMСоединение.ActiveDocument.Sections(1).Headers.Item(1).Range; - Поиск = Range.Find; - Поиск.ClearFormatting(); - Поиск.execute("{v8 " + ТекстДляПоиска + "}"); - Если Поиск.Found Тогда - Range.Text = ТекстЗамены; - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - +Функция ВерхнийКолонтитул(ПечатнаяФорма) + Возврат ПечатнаяФорма.COMСоединение.ActiveDocument.Sections(1).Headers.Item(1).Range; КонецФункции // конец: функции работы с колонтитулами документа MS Word @@ -371,34 +354,20 @@ // ОбластьПечатнойФормы - ссылка на область в печатной форме // ДанныеОбъекта - ДанныеОбъекта // -Процедура ЗаполнитьПараметры(знач ОбластьПечатнойФормы, - знач ДанныеОбъекта = Неопределено) Экспорт +Процедура ЗаполнитьПараметры(Знач ОбластьПечатнойФормы, Знач ДанныеОбъекта = Неопределено) Экспорт + + Если ДанныеОбъекта = Неопределено Тогда + Возврат; + КонецЕсли; Для Каждого ПараметрЗначение Из ДанныеОбъекта Цикл Если ТипЗнч(ПараметрЗначение.Значение) <> Тип("Массив") Тогда - ВыполнитьЗамену(ОбластьПечатнойФормы.Document, - ПараметрЗначение.Ключ, - ПараметрЗначение.Значение); + Заменить(ОбластьПечатнойФормы.Document.Content, ПараметрЗначение.Ключ, ПараметрЗначение.Значение); КонецЕсли; КонецЦикла; КонецПроцедуры -Функция ВыполнитьЗамену(знач ActiveDocument, ТекстДляПоиска, ТекстЗамены) - - Range = ActiveDocument.Content; - Поиск = Range.Find; - Поиск.ClearFormatting(); - Поиск.execute("{v8 " + ТекстДляПоиска + "}"); - Если Поиск.Found Тогда - Range.Text = Строка(ТекстЗамены); - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - // начало: работа с коллекциями // Добавляет область списка в печатную форму из макета, при этом заменяя @@ -421,17 +390,19 @@ ActiveDocument = ПечатнаяФорма.COMСоединение.ActiveDocument; - Для Каждого ДанныеСтроки Из ДанныеОбъекта Цикл - ПозицияВставки = ActiveDocument.Range().End; - ОбластьВставки = ActiveDocument.Range(ПозицияВставки-1, ПозицияВставки-1); - ОбластьВставки.Paste(); - - Если ТипЗнч(ДанныеСтроки) = Тип("Структура") Тогда - Для Каждого ПараметрЗначение Из ДанныеСтроки Цикл - ВыполнитьЗамену(ActiveDocument, ПараметрЗначение.Ключ, ПараметрЗначение.Значение); - КонецЦикла; - КонецЕсли; - КонецЦикла; + Если ДанныеОбъекта <> Неопределено Тогда + Для Каждого ДанныеСтроки Из ДанныеОбъекта Цикл + ПозицияВставки = ActiveDocument.Range().End; + ОбластьВставки = ActiveDocument.Range(ПозицияВставки-1, ПозицияВставки-1); + ОбластьВставки.Paste(); + + Если ТипЗнч(ДанныеСтроки) = Тип("Структура") Тогда + Для Каждого ПараметрЗначение Из ДанныеСтроки Цикл + Заменить(ActiveDocument.Content, ПараметрЗначение.Ключ, ПараметрЗначение.Значение); + КонецЦикла; + КонецЕсли; + КонецЦикла; + КонецЕсли; Если ПереходНаСледСтроку Тогда ВставитьРазрывНаНовуюСтроку(ПечатнаяФорма); @@ -455,7 +426,7 @@ знач ДанныеОбъекта = Неопределено, знач ПереходНаСледСтроку = Истина) Экспорт - Если ДанныеОбъекта.Количество() = 0 Тогда + Если ДанныеОбъекта = Неопределено Или ДанныеОбъекта.Количество() = 0 Тогда Возврат; КонецЕсли; @@ -475,7 +446,7 @@ Если ТипЗнч(ДанныеОбъекта[0]) = Тип("Структура") Тогда Для Каждого ПараметрЗначение Из ДанныеОбъекта[0] Цикл - ВыполнитьЗамену(ActiveDocument, ПараметрЗначение.Ключ, ПараметрЗначение.Значение); + Заменить(ActiveDocument.Content, ПараметрЗначение.Ключ, ПараметрЗначение.Значение); КонецЦикла; КонецЕсли; @@ -495,7 +466,7 @@ Если ТипЗнч(ДанныеСтрокиТаблицы) = Тип("Структура") Тогда Для Каждого ПараметрЗначение Из ДанныеСтрокиТаблицы Цикл - ВыполнитьЗамену(ActiveDocument, ПараметрЗначение.Ключ, ПараметрЗначение.Значение); + Заменить(ActiveDocument.Content, ПараметрЗначение.Ключ, ПараметрЗначение.Значение); КонецЦикла; КонецЕсли; @@ -522,7 +493,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Служебные не экспортные функции +// Прочие процедуры и функции Функция ПолучитьПозициюНачалаОбласти(знач COMСоединение, знач ИдентификаторОбласти) @@ -613,4 +584,21 @@ |Для вывода печатных форм в формате Microsoft Word требуется, чтобы на компьютере был установлен пакет Microsoft Office. %2'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке), ТекстУточнения); ВызватьИсключение ТекстИсключения; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +Функция Заменить(Object, Знач СтрокаПоиска, Знач СтрокаЗамены) + + СтрокаПоиска = "{v8 " + СтрокаПоиска + "}"; + СтрокаЗамены = Строка(СтрокаЗамены); + + wdReplaceAll = 2; + + FindObject = Object.Find; + FindObject.ClearFormatting(); + FindObject.Text = СтрокаПоиска; + FindObject.Replacement.ClearFormatting(); + FindObject.Replacement.Text = СтрокаЗамены; + + Возврат FindObject.Execute(,,,,,,,,,,wdReplaceAll); + +КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl index ff4970fe3..92cb7238a 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl @@ -1,6 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Печать". +// +//////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Open Office Writer - специфичные функции - +// // Описание ссылки на печатную форму и макет // Структура с полями: // ServiceManager - сервис менеджер, сервис open office @@ -8,14 +13,14 @@ // Document - документ (печатная форма) // Тип - тип печатной формы ("ODT") // +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// Экспортные функции +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Инициализация печатной формы: создается COM - объект, // ему устанавливаются свойства. -// -Функция ИнициализироватьПечатнуюФормуOOWriter() Экспорт +Функция ИнициализироватьПечатнуюФормуOOWriter(Знач Шаблон = Неопределено) Экспорт Попытка ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); @@ -36,6 +41,7 @@ КонецПопытки; Параметры = ПолучитьComSafeArray(); + #Если Не ВебКлиент Тогда Параметры.SetValue(0, СвойствоЗначение(ServiceManager, "Hidden", Истина)); #КонецЕсли @@ -46,6 +52,20 @@ Document.getCurrentController().getFrame().getContainerWindow().setVisible(Ложь); #КонецЕсли + // настраиваем поля по шаблону + Если Шаблон <> Неопределено Тогда + TemplateStyleName = Шаблон.Document.CurrentController.getViewCursor().PageStyleName; + TemplateStyle = Шаблон.Document.StyleFamilies.getByName("PageStyles").getByName(TemplateStyleName); + + StyleName = Document.CurrentController.getViewCursor().PageStyleName; + Style = Document.StyleFamilies.getByName("PageStyles").getByName(StyleName); + + Style.TopMargin = TemplateStyle.TopMargin; + Style.LeftMargin = TemplateStyle.LeftMargin; + Style.RightMargin = TemplateStyle.RightMargin; + Style.BottomMargin = TemplateStyle.BottomMargin; + КонецЕсли; + // Подготавливаем ссылку на макет Handler = Новый Структура("ServiceManager,Desktop,Document,Тип"); Handler.ServiceManager = ServiceManager; @@ -144,7 +164,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Блок функций для работы с макетом +// Работа с макетом // Получает область из макета. // Параметры @@ -186,7 +206,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Блок функций для работы с печатной формой +// Работа с печатной формой // Вставляет разрыв на следующую строку // Параметры @@ -359,7 +379,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Служебные функции +// Прочие процедуры и функции // Получает специальную структуру, через которую объектам UNO устанавливаются // параметры. diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl index 4169eaaa1..93bd395f8 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl @@ -1,3 +1,10 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Печать". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Выполнить команду печати, которая открывает результат в форме печати документов. // @@ -98,30 +105,23 @@ КонецПроцедуры -// Перед выполнение команды печати проверить, был ли передан хотя бы один объект, так как -// для команд с множественным режимом использования может быть передан пустой массив. -Функция ПроверитьКоличествоПереданныхОбъектов(ПараметрКоманды) - - Если ТипЗнч(ПараметрКоманды) = Тип("Массив") И ПараметрКоманды.Количество() = 0 Тогда - Возврат Ложь; - Иначе - Возврат Истина; - КонецЕсли; - -КонецФункции - -// Проверяет, проведенность документов перед печатью. -// Если есть непроведенные документы, то предлагает перепровести. +// Выполняет интерактивное проведение документов перед печатью. +// Если есть непроведенные документы, предлагает выполнить проведение. Спрашивает +// пользователя о продолжении, если какие-то из документов не провелись и имеются проведенные. // // Параметры -// ДокументыМассив - Массив - ссылки на документы, которые должны быть проведены перед печатью. +// ДокументыМассив - Массив - ссылки на документы, которые требуется провести перед печатью. +// После выполнения функции из массива исключаются непроведенные документы. // ФормаИсточник - УправляемаяФорма - форма, из которой было вызвана команда. // +// Возвращаемое значение: +// Булево - есть документы для печати в параметре ДокументыМассив. +// Функция ПроверитьДокументыПроведены(ДокументыМассив, ФормаИсточник = Неопределено) Экспорт ОчиститьСообщения(); - МассивНепроведенныхДокументов = ОбщегоНазначения.ПроверитьПроведенностьДокументов(ДокументыМассив); - КоличествоНепроведенныхДокументов = МассивНепроведенныхДокументов.Количество(); + ДокументыТребующиеПроведение = ОбщегоНазначения.ПроверитьПроведенностьДокументов(ДокументыМассив); + КоличествоНепроведенныхДокументов = ДокументыТребующиеПроведение.Количество(); Если КоличествоНепроведенныхДокументов > 0 Тогда @@ -135,10 +135,31 @@ Если КодОтвета <> КодВозвратаДиалога.Да Тогда Возврат Ложь; КонецЕсли; - - ТипПроведенныхДокументов = Неопределено; - МассивНепроведенныхДокументов = ОбщегоНазначения.ПровестиДокументы(МассивНепроведенныхДокументов, ТипПроведенныхДокументов); - ОповеститьОбИзменении(ТипПроведенныхДокументов); + + ДанныеОНепроведенныхДокументах = ОбщегоНазначения.ПровестиДокументы(ДокументыТребующиеПроведение); + + // сообщаем о документах, которые не провелись + ШаблонСообщения = НСтр("ru = 'Документ %1 не проведен: %2 Печать невозможна.'"); + НепроведенныеДокументы = Новый Массив; + Для Каждого ИнформацияОДокументе Из ДанныеОНепроведенныхДокументах Цикл + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(ИнформацияОДокументе.Ссылка), + ИнформацияОДокументе.ОписаниеОшибки), ИнформацияОДокументе.Ссылка); + НепроведенныеДокументы.Добавить(ИнформацияОДокументе.Ссылка); + КонецЦикла; + + КоличествоНепроведенныхДокументов = НепроведенныеДокументы.Количество(); + + // оповещаем открытые формы о том, что были проведены документы + ПроведенныеДокументы = ОбщегоНазначенияКлиентСервер.СократитьМассив(ДокументыТребующиеПроведение, НепроведенныеДокументы); + ТипыПроведенныхДокументов = Новый Соответствие; + Для Каждого ПроведенныйДокумент Из ПроведенныеДокументы Цикл + ТипыПроведенныхДокументов.Вставить(ТипЗнч(ПроведенныйДокумент)); + КонецЦикла; + Для Каждого Тип Из ТипыПроведенныхДокументов Цикл + ОповеститьОбИзменении(Тип.Ключ); + КонецЦикла; + // Если команда была вызвана из формы, то зачитываем в форму актуальную (проведенную) копию из базы. Если ТипЗнч(ФормаИсточник) = Тип("УправляемаяФорма") Тогда Попытка @@ -148,39 +169,40 @@ КонецПопытки; КонецЕсли; + // обновляем исходный массив документов + ДокументыМассив = ОбщегоНазначенияКлиентСервер.СократитьМассив(ДокументыМассив, НепроведенныеДокументы); + КонецЕсли; - ШаблонСообщения = НСтр("ru = 'Документ %1 не проведен: %2 Печать невозможна.'"); - Для Каждого НепроведенныйДокумент Из МассивНепроведенныхДокументов Цикл - Найденный = ДокументыМассив.Найти(НепроведенныйДокумент.Ссылка); - Если Найденный <> Неопределено Тогда - ДокументыМассив.Удалить(Найденный); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(НепроведенныйДокумент.Ссылка), - НепроведенныйДокумент.ОписаниеОшибки), НепроведенныйДокумент.Ссылка); - КонецЕсли; - КонецЦикла; + ЕстьДокументыКоторыеМожноПечатать = ДокументыМассив.Количество() > 0; Отказ = Ложь; - Если КоличествоНепроведенныхДокументов > 0 - и МассивНепроведенныхДокументов.Количество() > 0 - и ДокументыМассив.Количество() > 0 Тогда - + Если КоличествоНепроведенныхДокументов > 0 Тогда + // спрашиваем пользователя о необходимости продолжения печати при наличии непроведенных документов + + ТекстДиалога = НСтр("ru = 'Не удалось провести один или несколько документов.'"); КнопкиДиалога = Новый СписокЗначений; - КнопкиДиалога.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Продолжить'")); - КнопкиДиалога.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Нет'")); - Ответ = Вопрос(НСтр("ru = 'Не удалось провести один или несколько документов. Продолжить?'"), КнопкиДиалога); - Если Ответ = КодВозвратаДиалога.Нет Тогда + + Если ЕстьДокументыКоторыеМожноПечатать Тогда + ТекстДиалога = ТекстДиалога + " " + НСтр("ru = 'Продолжить?'"); + КнопкиДиалога.Добавить(КодВозвратаДиалога.Пропустить, НСтр("ru = 'Продолжить'")); + КнопкиДиалога.Добавить(КодВозвратаДиалога.Отмена); + Иначе + КнопкиДиалога.Добавить(КодВозвратаДиалога.ОК); + КонецЕсли; + + Ответ = Вопрос(ТекстДиалога, КнопкиДиалога); + Если Ответ <> КодВозвратаДиалога.Пропустить Тогда Отказ = Истина; КонецЕсли; КонецЕсли; - Возврат ДокументыМассив.Количество() > 0 и не Отказ; + Возврат не Отказ; КонецФункции //////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ ФУНКЦИОНАЛЬНОСТИ ДЛЯ РАБОТЫ С МАКЕТАМИ ОФИСНЫХ ДОКУМЕНТОВ +// Работа с макетами офисных документов // // Краткое описание: // Секция содержит интерфейсные функции (API), используемые при создании @@ -218,7 +240,7 @@ // Возвращаемое значение: // СсылкаПечатнаяФорма // -Функция ИнициализироватьПечатнуюФорму(знач ТипДокумента, знач НастройкиСтраницыМакета = Неопределено) Экспорт +Функция ИнициализироватьПечатнуюФорму(знач ТипДокумента, знач НастройкиСтраницыМакета = Неопределено, Макет = Неопределено) Экспорт Если ВРег(ТипДокумента) = "DOC" Тогда ПечатнаяФорма = УправлениеПечатьюMSWordКлиент.ИнициализироватьПечатнуюФормуMSWord(НастройкиСтраницыМакета); @@ -226,7 +248,7 @@ ПечатнаяФорма.Вставить("ПоследняяВыведеннаяОбласть", Неопределено); Возврат ПечатнаяФорма; ИначеЕсли ВРег(ТипДокумента) = "ODT" Тогда - ПечатнаяФорма = УправлениеПечатьюOOWriterКлиент.ИнициализироватьПечатнуюФормуOOWriter(); + ПечатнаяФорма = УправлениеПечатьюOOWriterКлиент.ИнициализироватьПечатнуюФормуOOWriter(Макет); ПечатнаяФорма.Вставить("Тип", "ODT"); ПечатнаяФорма.Вставить("ПоследняяВыведеннаяОбласть", Неопределено); Возврат ПечатнаяФорма; @@ -284,90 +306,6 @@ КонецФункции -#Если ВебКлиент Тогда -// Функция получает файл(ы) c сервера в локальный каталог на диск и возвращает -// имя каталога, в который они были сохранены -// Параметры: -// ПутьККаталогу - строка - путь к каталогу, в который должны быть сохранены файлы -// ПолучаемыеФайлы - соответствие - -// ключ - имя файла -// значение - двоичные данные файла -// -Функция ПолучитьФайлыВКаталогФайловПечати(ПутьККаталогу, ПолучаемыеФайлы) Экспорт - - ТребуетсяУстановитьКаталогПечати = Не ЗначениеЗаполнено(ПутьККаталогу); - Если Не ТребуетсяУстановитьКаталогПечати Тогда - Файл = Новый Файл(ПутьККаталогу); - Если НЕ Файл.Существует() Тогда - ТребуетсяУстановитьКаталогПечати = Истина; - КонецЕсли; - КонецЕсли; - - Если ТребуетсяУстановитьКаталогПечати Тогда - Результат = ОткрытьФормуМодально("РегистрСведений.ПользовательскиеМакетыПечати.Форма.НастройкаКаталогаФайловПечати"); - Если ТипЗнч(Результат) <> Тип("Строка") Тогда - Возврат Неопределено; - КонецЕсли; - ПутьККаталогу = Результат; - КонецЕсли; - - ПовторятьПечать = Истина; - - Пока ПовторятьПечать Цикл - ПовторятьПечать = Ложь; - Попытка - ФайлыВоВременномХранилище = ПолучитьАдресаФайловВоВременномХранилище(ПолучаемыеФайлы); - - ОписанияФайлов = Новый Массив; - - Для Каждого ФайлВоВременномХранилище Из ФайлыВоВременномХранилище Цикл - ОписанияФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ФайлВоВременномХранилище.Ключ,ФайлВоВременномХранилище.Значение)); - КонецЦикла; - - Если НЕ ПолучитьФайлы(ОписанияФайлов, , ПутьККаталогу, Ложь) Тогда - Возврат Неопределено; - КонецЕсли; - Исключение - СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - Результат = ОткрытьФормуМодально("РегистрСведений.ПользовательскиеМакетыПечати.Форма.ДиалогПовтораПечати", Новый Структура("СообщениеОбОшибке", СообщениеОбОшибке)); - Если ТипЗнч(Результат) = Тип("Строка") Тогда - ПовторятьПечать = Истина; - ПутьККаталогу = Результат; - Иначе - Возврат Неопределено; - КонецЕсли; - КонецПопытки; - КонецЦикла; - - Если Прав(ПутьККаталогу, 1) <> "\" Тогда - ПутьККаталогу = ПутьККаталогу + "\"; - КонецЕсли; - - Возврат ПутьККаталогу; - -КонецФункции - -// Помещает набор двоичных данных во временное хранилище -// Параметры: -// НаборЗначений - соответствие, ключ - ключ, связанный с двоичными данными -// значение - ДвоичныеДанные -// Возвращаемое значение: -// соответствие: ключ - ключ, связанный с адресом во временном хранилище -// значение - адрес во временном хранилище -// -Функция ПолучитьАдресаФайловВоВременномХранилище(НаборЗначений) - - Результат = Новый Соответствие; - - Для Каждого КлючЗначение Из НаборЗначений Цикл - Результат.Вставить(КлючЗначение.Ключ, ПоместитьВоВременноеХранилище(КлючЗначение.Значение)); - КонецЦикла; - - Возврат Результат; - -КонецФункции -#КонецЕсли - // Освобождает ссылки в созданном интерфейсе связи с офисным приложением. // Необходимо вызывать каждый раз после завершения формирования макета и выводе // печатной формы пользователю. @@ -538,9 +476,9 @@ Исключение СообщениеОбОшибке = СокрЛП(КраткоеПредставлениеОшибки(ИнформацияОбОШибке())); СообщениеОбОшибке = ?(Прав(СообщениеОбОшибке, 1) = ".", СообщениеОбОшибке, СообщениеОбОшибке + "."); - СообщениеОбОшибке = СообщениеОбОшибке + + СообщениеОбОшибке = СообщениеОбОшибке + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = ' Ошибка при попытке вывести область ""%1"" из макета.'"), + НСтр("ru = 'Ошибка при попытке вывести область ""%1"" из макета.'"), ОбластьМакета.ОписаниеОбласти.ИмяОбласти); ВызватьИсключение СообщениеОбОшибке; КонецПопытки; @@ -659,3 +597,102 @@ КонецЕсли; КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Перед выполнением команды печати проверить, был ли передан хотя бы один объект, так как +// для команд с множественным режимом использования может быть передан пустой массив. +Функция ПроверитьКоличествоПереданныхОбъектов(ПараметрКоманды) + + Если ТипЗнч(ПараметрКоманды) = Тип("Массив") И ПараметрКоманды.Количество() = 0 Тогда + Возврат Ложь; + Иначе + Возврат Истина; + КонецЕсли; + +КонецФункции + +#Если ВебКлиент Тогда +// Функция получает файл(ы) c сервера в локальный каталог на диск и возвращает +// имя каталога, в который они были сохранены +// Параметры: +// ПутьККаталогу - строка - путь к каталогу, в который должны быть сохранены файлы +// ПолучаемыеФайлы - соответствие - +// ключ - имя файла +// значение - двоичные данные файла +// +Функция ПолучитьФайлыВКаталогФайловПечати(ПутьККаталогу, ПолучаемыеФайлы) Экспорт + + ТребуетсяУстановитьКаталогПечати = Не ЗначениеЗаполнено(ПутьККаталогу); + Если Не ТребуетсяУстановитьКаталогПечати Тогда + Файл = Новый Файл(ПутьККаталогу); + Если НЕ Файл.Существует() Тогда + ТребуетсяУстановитьКаталогПечати = Истина; + КонецЕсли; + КонецЕсли; + + Если ТребуетсяУстановитьКаталогПечати Тогда + Результат = ОткрытьФормуМодально("РегистрСведений.ПользовательскиеМакетыПечати.Форма.НастройкаКаталогаФайловПечати"); + Если ТипЗнч(Результат) <> Тип("Строка") Тогда + Возврат Неопределено; + КонецЕсли; + ПутьККаталогу = Результат; + КонецЕсли; + + ПовторятьПечать = Истина; + + Пока ПовторятьПечать Цикл + ПовторятьПечать = Ложь; + Попытка + ФайлыВоВременномХранилище = ПолучитьАдресаФайловВоВременномХранилище(ПолучаемыеФайлы); + + ОписанияФайлов = Новый Массив; + + Для Каждого ФайлВоВременномХранилище Из ФайлыВоВременномХранилище Цикл + ОписанияФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ФайлВоВременномХранилище.Ключ,ФайлВоВременномХранилище.Значение)); + КонецЦикла; + + Если НЕ ПолучитьФайлы(ОписанияФайлов, , ПутьККаталогу, Ложь) Тогда + Возврат Неопределено; + КонецЕсли; + Исключение + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Результат = ОткрытьФормуМодально("РегистрСведений.ПользовательскиеМакетыПечати.Форма.ДиалогПовтораПечати", Новый Структура("СообщениеОбОшибке", СообщениеОбОшибке)); + Если ТипЗнч(Результат) = Тип("Строка") Тогда + ПовторятьПечать = Истина; + ПутьККаталогу = Результат; + Иначе + Возврат Неопределено; + КонецЕсли; + КонецПопытки; + КонецЦикла; + + Если Прав(ПутьККаталогу, 1) <> "\" Тогда + ПутьККаталогу = ПутьККаталогу + "\"; + КонецЕсли; + + Возврат ПутьККаталогу; + +КонецФункции + +// Помещает набор двоичных данных во временное хранилище +// Параметры: +// НаборЗначений - соответствие, ключ - ключ, связанный с двоичными данными +// значение - ДвоичныеДанные +// Возвращаемое значение: +// соответствие: ключ - ключ, связанный с адресом во временном хранилище +// значение - адрес во временном хранилище +// +Функция ПолучитьАдресаФайловВоВременномХранилище(НаборЗначений) + + Результат = Новый Соответствие; + + Для Каждого КлючЗначение Из НаборЗначений Цикл + Результат.Вставить(КлючЗначение.Ключ, ПоместитьВоВременноеХранилище(КлючЗначение.Значение)); + КонецЦикла; + + Возврат Результат; + +КонецФункции +#КонецЕсли diff --git a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl index f533c72df..830d85718 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl @@ -1,29 +1,31 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Печать". +// +//////////////////////////////////////////////////////////////////////////////// -// Функция формирования печатной формы по внешнему источнику. -// ИсточникДанных - Произвольный - источник данных -// ПараметрыИсточника - Произвольный - параметры источника печати +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Выполняет внешнюю обработку печати. // -// параметры, заполняемые в функции: -// КоллекцияПечатныхФорм - ТаблицаЗначений - таблица печатных форм, -// структура совпадает с той, что формируется при печати -/// обычным способом -// ОбъектыПечати - СписокЗначений - список объектов для печати -// ПараметрыВывода - Структура - ключи и значения совпадает с теми, -// то формируется при печати обычным способом +// Параметры: +// ИсточникДанных - Произвольный - источник данных; +// ПараметрыИсточника - Произвольный - параметры источника печати; +// КоллекцияПечатныхФорм - ТаблицаЗначений - (выходной) см. УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм; +// ОбъектыПечати - СписокЗначений - (выходной) список объектов печати, где значение - Ссылка, а представление - имя области печати; +// ПараметрыВывода - Структура - (выходной) см. УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода. // -Функция ПечатьПоВнешнемуИсточнику(ИсточникДанных, - ПараметрыИсточника, - КоллекцияПечатныхФорм, - ОбъектыПечати, - ПараметрыВывода) Экспорт +// Возвращаемое значение: +// Булево - Ложь, если печать не была выполнена. +Функция ПечатьПоВнешнемуИсточнику(ИсточникДанных, ПараметрыИсточника, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт - // ДополнительныеОтчетыИОбработки + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки Если ТипЗнч(ИсточникДанных) = Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда ДополнительныеОтчетыИОбработки.ПечатьПоВнешнемуИсточнику( ИсточникДанных, ПараметрыИсточника, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); Возврат Истина; КонецЕсли; - // Конец ДополнительныеОтчетыИОбработки + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки Возврат Ложь; diff --git a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl index 62796980d..a719f9bb3 100644 --- a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl @@ -1,8 +1,18 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Свойства" +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ФУНКЦИИ И ПРОЦЕДУРЫ +// ПРОГРАММНЫЙ ИНТЕРФЕЙС +// Создает реквизиты и поля формы, необходимые для работы. // Вызывается из обработчика ПриСозданииНаСервере формы объекта со свойствами +// +// Параметры: +// Форма - УправляемаяФорма. +// Объект - ДанныеФормыСтруктура. +// ИмяЭлементаДляРазмещения - Строка - имя группы формы, в которой будут размещены свойства. // Процедура ПриСозданииНаСервере(Форма, Объект, ИмяЭлементаДляРазмещения = Неопределено) Экспорт @@ -16,10 +26,8 @@ НаборСвойствОбъекта = ПолучитьДоступныеНаборыСвойств(ОбъектЗначение); КонецЕсли; - // Создадим основные объекты на форме СоздатьОсновныеОбъектыФормы(Форма, ИмяЭлементаДляРазмещения, НаборСвойствОбъекта, ИспользоватьДопРеквизиты); - // Если функциональной опцией использование доп.реквизитов отключено, то больше ничего не делаем Если Не Форма.Свойства_ИспользоватьСвойства Тогда Возврат; КонецЕсли; @@ -27,50 +35,53 @@ Форма.Свойства_ОсновнойНабор = НаборСвойствОбъекта; Если ИспользоватьДопРеквизиты Тогда - // Создадим остальные реквизиты и разместим их на форме ЗаполнитьДополнительныеРеквизитыНаФорме(Форма, Объект, НаборСвойствОбъекта); КонецЕсли; КонецПроцедуры -// Вызывается из обработчика ПередЗаписьюНаСервере формы объекта со свойствами +// Заполняет объект из реквизитов, созданных в форме. +// Вызывается из обработчика ПередЗаписьюНаСервере формы объекта со свойствами. +// +// Параметры: +// Форма - УправляемаяФорма. +// ТекущийОбъект - Объект. // Процедура ПередЗаписьюНаСервере(Форма, ТекущийОбъект) Экспорт Если Форма.Свойства_ИспользоватьСвойства И Форма.Свойства_ИспользоватьДопРеквизиты Тогда - // Перенесем значения доп.реквизитов из реквизитов форм в объект + // Перенос значений дополнительных реквизитов из реквизитов формы в объект. ПеренестиЗначенияСвойствИзРеквизитовФормы(Форма, ТекущийОбъект); КонецЕсли; КонецПроцедуры -// Обновить отображаемые данные на форме объекта со свойствами -// +// Обновляет отображаемые данные на форме объекта со свойствами. Процедура ОбновитьЭлементыДополнительныхРеквизитов(Форма, Объект) Экспорт Если НЕ Форма.Свойства_ИспользоватьСвойства ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда + Возврат; КонецЕсли; НаборСвойствОбъекта = ПолучитьДоступныеНаборыСвойств(Объект); Форма.Свойства_ОсновнойНабор = НаборСвойствОбъекта; - // Перенесем значения доп.реквизитов из реквизитов форм в объект ПеренестиЗначенияСвойствИзРеквизитовФормы(Форма, Объект); - // Создадим реквизиты и разместим их на форме ЗаполнитьДополнительныеРеквизитыНаФорме(Форма, Объект, НаборСвойствОбъекта) КонецПроцедуры -// Используется при записи элементов справочников, которые являются видами объектов со свойствами -// Если есть справочник Сущности к которому применяется подсистема Свойства, для него создан -// справочник ВидыСущностей, то при записи элемента ВидыСущностей необходимо вызывать эту процедуру +// Обновляет наборы дополнительных реквизитов и сведений для вида объектов со свойствами. +// Используется при записи элементов справочников, которые являются видами объектов со свойствами. +// Например, если есть справочник Сущности к которому применяется подсистема Свойства, для него создан +// справочник ВидыСущностей, то при записи элемента ВидыСущностей необходимо вызывать эту процедуру. // // Параметры: -// ВидОбъекта - объект, запись которого выполняется -// ИмяОбъектаСоСвойствами - имя объекта со свойствами вид которого записывается +// ВидОбъекта - Объект, запись которого выполняется. +// ИмяОбъектаСоСвойствами - Строка - имя объекта со свойствами вид которого записывается. // Процедура ПередЗаписьюВидаОбъекта(ВидОбъекта, ИмяОбъектаСоСвойствами) Экспорт @@ -93,14 +104,15 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ФУНКЦИИ ДЛЯ ПОЛУЧЕНИЯ И РЕДАКТИРОВАНИЯ НАБОРОВ СВОЙСТВ - -// По владельцу свойства (ссылке) получает его свойства и их значения +// Возвращает свойства владельца. +// // Параметры: -// ВладелецСвойств - ссылка - ссылка на объект информационной базы - владелец свойств -// ПолучатьДопРеквизиты - булево - в результат включать доп. реквизиты -// ПолучатьДопСведения - булево - в результат включать доп. сведения +// ВладелецСвойств - Ссылка на владелеца свойств. +// ПолучатьДопРеквизиты - Булево - в результат включать дополнительные реквизиты. +// ПолучатьДопСведения - Булево - в результат включать дополнительные сведения. +// +// Возвращаемое значение: +// Массив значений типа ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения. // Функция ПолучитьСписокСвойств(ВладелецСвойств, ПолучатьДопРеквизиты = Истина, ПолучатьДопСведения = Истина) Экспорт @@ -136,14 +148,14 @@ Запрос = Новый Запрос; Если ПолучатьДопРеквизиты И ПолучатьДопСведения Тогда - Запрос.Текст = ТекстЗапросаДопСведения - + " - | ОБЪЕДИНИТЬ ВСЕ - |" - + ТекстЗапросаДопРеквизиты; + Запрос.Текст = ТекстЗапросаДопСведения + + " + | ОБЪЕДИНИТЬ ВСЕ + |" + ТекстЗапросаДопРеквизиты; ИначеЕсли ПолучатьДопРеквизиты Тогда Запрос.Текст = ТекстЗапросаДопРеквизиты; + ИначеЕсли ПолучатьДопСведения Тогда Запрос.Текст = ТекстЗапросаДопСведения; КонецЕсли; @@ -156,18 +168,22 @@ КонецФункции -// Возвращает значения дополнительных свойств объекта -// Параметры: -// ВладелецСвойств - ссылка - ссылка на объект информационной базы - владелец свойств -// ПолучатьДопРеквизиты - булево - получать значения доп. реквизитов -// ПолучатьДопСведения - булево - получать значения доп. сведений -// МассивСвойств - Массив - массив свойств, значения которых следует получить, если не передано, -// заполняется по набору собственных свойств объекта -// Возвращаемое значение -// ТаблицаЗначений - колонки "Свойство" и "Значение" +// Возвращает значения дополнительных свойств объекта. // -Функция ПолучитьЗначенияСвойств(ВладелецСвойств, ПолучатьДопРеквизиты = Истина, ПолучатьДопСведения = Истина, - МассивСвойств = Неопределено) Экспорт +// Параметры: +// ВладелецСвойств - Ссылка на владелеца свойств. +// ПолучатьДопРеквизиты - Булево - в результат включать дополнительные реквизиты. +// ПолучатьДопСведения - Булево - в результат включать дополнительные сведения. +// МассивСвойств - Массив значений типа ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения, +// значения которых следует получить. +// Неопределено - все свойства владельца. +// Возвращаемое значение : +// ТаблицаЗначений - колонки "Свойство" и "Значение". +// +Функция ПолучитьЗначенияСвойств(ВладелецСвойств, + ПолучатьДопРеквизиты = Истина, + ПолучатьДопСведения = Истина, + МассивСвойств = Неопределено) Экспорт Если МассивСвойств = Неопределено Тогда МассивСвойств = ПолучитьСписокСвойств(ВладелецСвойств, ПолучатьДопРеквизиты, ПолучатьДопСведения); @@ -206,14 +222,14 @@ Запрос = Новый Запрос; Если ПолучатьДопРеквизиты И ПолучатьДопСведения Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапросаДопРеквизиты, "[РАЗРЕШЕННЫЕ]", "РАЗРЕШЕННЫЕ") - + " + ТекстЗапроса = СтрЗаменить(ТекстЗапросаДопРеквизиты, "[РАЗРЕШЕННЫЕ]", "РАЗРЕШЕННЫЕ") + + " | ОБЪЕДИНИТЬ ВСЕ - |" - + СтрЗаменить(ТекстЗапросаДопСведения, "[РАЗРЕШЕННЫЕ]", ""); + |" + СтрЗаменить(ТекстЗапросаДопСведения, "[РАЗРЕШЕННЫЕ]", ""); ИначеЕсли ПолучатьДопРеквизиты Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапросаДопРеквизиты, "[РАЗРЕШЕННЫЕ]", "РАЗРЕШЕННЫЕ"); + ИначеЕсли ПолучатьДопСведения Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапросаДопСведения, "[РАЗРЕШЕННЫЕ]", "РАЗРЕШЕННЫЕ"); КонецЕсли; @@ -238,15 +254,17 @@ РезультатСТекстовымиСтроками[ИндексСтроки].Значение = ТекстоваяСтрока; КонецЕсли; ИндексСтроки = ИндексСтроки + 1; - КонецЦикла; + КонецЦикла; + Возврат ?(РезультатСТекстовымиСтроками <> Неопределено, РезультатСТекстовымиСтроками, Результат); КонецФункции -// Проверяет, есть ли у объекта свойство +// Проверяет, есть ли у объекта свойство. +// // Параметры: -// ВладелецСвойств - ссылка - ссылка на объект информационной базы - владелец свойств -// Свойство - ПВХ.ДополнительныеРеквизитыИСведения - +// ВладелецСвойств - Ссылка на владелеца свойств. +// Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения. // Функция ПроверитьСвойствоУОбъекта(ВладелецСвойств, Свойство) Экспорт @@ -260,10 +278,13 @@ КонецФункции -// Возвращает массив ссылок на элементы справочника ЗначенияСвойствОбъектов, -// у которых владелец - переданное свойство +// Возвращает перечисляемые значения указанного свойства. +// // Параметр: -// Свойство - ПВХ ДополнительныеРеквизитыИСведения - владелец свойств +// Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения. +// +// Возвращаемое значение: +// Массив значений типа СправочникСсылка.ЗначенияСвойствОбъектов. // Функция ПолучитьСписокЗначенийСвойств(Свойство) Экспорт @@ -284,13 +305,14 @@ КонецФункции -// Записывает дополнительные реквизиты и сведения владельцу свойств +// Записывает дополнительные реквизиты и сведения владельцу свойств. // Изменения происходят в транзакции. -// Параметры -// ВладелецСвойств - ссылка/объект - ссылка на владельца свойств -// ТаблицаСвойствИЗначений - таблицаЗначений - с колонками -// Свойство - ПВХ.ДополнительныеРеквизитыИСведения -// Значение - любое значение, допустимое в рамках свойства +// +// Параметры: +// ВладелецСвойств - Ссылка или Объект владельца свойств. +// ТаблицаСвойствИЗначений - ТаблицаЗначений - с колонками: +// Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения. +// Значение - любое значение, допустимое для свойства. // Процедура ЗаписатьСвойстваУОбъекта(ВладелецСвойств, ТаблицаСвойствИЗначений) Экспорт @@ -366,7 +388,10 @@ КонецПроцедуры -// Проверяет, используется ли дополнительные реквизиты с объектом +// Проверяет, используется ли дополнительные реквизиты с объектом. +// +// Возвращаемое значение: +// Булево. // Функция ИспользоватьДопРеквизиты(ВладелецСвойств) Экспорт @@ -374,21 +399,86 @@ КонецФункции -// Проверяет, используется ли дополнительные сведения объектом +// Проверяет, используется ли дополнительные сведения объектом. +// +// Возвращаемое значение: +// Булево. // Функция ИспользоватьДопСведения(ВладелецСвойств) Экспорт - Возврат Метаданные.НайтиПоПолномуИмени("ОбщаяКоманда.ДополнительныеСведения") <> Неопределено И - Метаданные.ОбщиеКоманды.ДополнительныеСведения.ТипПараметраКоманды.Типы().Найти(ТипЗнч(ВладелецСвойств)) <> Неопределено; + Возврат Метаданные.НайтиПоПолномуИмени("ОбщаяКоманда.ДополнительныеСведения") <> Неопределено + И Метаданные.ОбщиеКоманды.ДополнительныеСведения.ТипПараметраКоманды.Типы().Найти(ТипЗнч(ВладелецСвойств)) <> Неопределено; КонецФункции //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ЭКСПОРТНЫЕ ФУНКЦИИ И ПРОЦЕДУРЫ +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС -// По объекту или ссылке на объект получить набор или список наборов доступных ему свойств +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// // Параметры: -// ВладелецСвойств - ссылка на объект или сам объект +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.6.7"; + Обработчик.Процедура = "УправлениеСвойствами.ОбновитьСписокДополнительныхСвойств"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.7.1"; + Обработчик.Процедура = "УправлениеСвойствами.ОбновитьПереименованныеРоли_БСП_1_0_7_1"; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Собирает все свойства подчиненных наборов для корневого набора свойств, +// который всегда является группой. +// +// Параметры: +// Объект - СправочникОбъект.НаборыДополнительныхРеквизитовИСведений +// группа наборов дополнительных свойств. +// +Процедура ПередЗаписьюГруппыНаборовСвойств(Объект) Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Родитель", Объект.Ссылка); + + // Дополнительные реквизиты. + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ДополнительныеРеквизиты.Свойство КАК Свойство + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК ДополнительныеРеквизиты + |ГДЕ + | ДополнительныеРеквизиты.Ссылка.Родитель = &Родитель + | И ДополнительныеРеквизиты.Свойство.ЭтоДополнительноеСведение = ЛОЖЬ"; + + Объект.ДополнительныеРеквизиты.Загрузить(Запрос.Выполнить().Выгрузить()); + + // Дополнительные сведения. + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ДополнительныеСведения.Свойство КАК Свойство + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения КАК ДополнительныеСведения + |ГДЕ + | ДополнительныеСведения.Ссылка.Родитель = &Родитель + | И ДополнительныеСведения.Свойство.ЭтоДополнительноеСведение = ИСТИНА"; + + Объект.ДополнительныеСведения.Загрузить(Запрос.Выполнить().Выгрузить()); + +КонецПроцедуры + +// Возвращает список наборов доступных свойств владельца. +// +// Параметры: +// ВладелецСвойств - Ссылка или Объект владельца свойств. +// Функция ПолучитьДоступныеНаборыСвойств(ВладелецСвойств) Экспорт ДоступныеНаборы = УправлениеСвойствамиПереопределяемый.ПолучитьДоступныеНаборыСвойствПоОбъекту(ВладелецСвойств); @@ -401,11 +491,10 @@ КонецФункции -// Получить заполненную таблицу значений свойств объекта -// +// Возвращает заполненную таблицу значений свойств объекта. Функция ПолучитьТаблицуЗначенийСвойств(ДополнительныеСвойстваОбъекта, Набор, ЭтоДополнительноеСведение) Экспорт - масСвойств = ДополнительныеСвойстваОбъекта.ВыгрузитьКолонку("Свойство"); + Свойства = ДополнительныеСвойстваОбъекта.ВыгрузитьКолонку("Свойство"); ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ @@ -447,7 +536,7 @@ |ИЗ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения |ГДЕ - | ДополнительныеРеквизитыИСведения.Ссылка В(&масСвойств) + | ДополнительныеРеквизитыИСведения.Ссылка В(&Свойства) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -494,36 +583,33 @@ Запрос.Текст = ТекстЗапроса; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение); - Запрос.УстановитьПараметр("масСвойств", масСвойств); - Запрос.УстановитьПараметр("Набор", Набор); + Запрос.УстановитьПараметр("Свойства", Свойства); + Запрос.УстановитьПараметр("Набор", Набор); - ТабСвойства = Запрос.Выполнить().Выгрузить(); - ТабСвойства.Индексы.Добавить("Свойство"); - ТабСвойства.Колонки.Добавить("Значение"); + ОписаниеСвойств = Запрос.Выполнить().Выгрузить(); + ОписаниеСвойств.Индексы.Добавить("Свойство"); + ОписаниеСвойств.Колонки.Добавить("Значение"); - Для Каждого Стр Из ДополнительныеСвойстваОбъекта Цикл - СтрСвойства = ТабСвойства.Найти(Стр.Свойство, "Свойство"); - Если СтрСвойства <> Неопределено Тогда - /////////////////////////////////////////////////////////////// - // поддержка строк неограниченной длины + Для Каждого Строка Из ДополнительныеСвойстваОбъекта Цикл + ОписаниеСвойства = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство"); + Если ОписаниеСвойства <> Неопределено Тогда + // Поддержка строк неограниченной длины. Если НЕ ЭтоДополнительноеСведение - И ИспользоватьНеограниченнуюСтроку(СтрСвойства.ТипЗначения, СтрСвойства.МногострочноеПолеВвода) - И НЕ ПустаяСтрока(Стр.ТекстоваяСтрока) Тогда - СтрСвойства.Значение = Стр.ТекстоваяСтрока; - // - /////////////////////////////////////////////////////////////// + И ИспользоватьНеограниченнуюСтроку(ОписаниеСвойства.ТипЗначения, ОписаниеСвойства.МногострочноеПолеВвода) + И НЕ ПустаяСтрока(Строка.ТекстоваяСтрока) Тогда + + ОписаниеСвойства.Значение = Строка.ТекстоваяСтрока; Иначе - СтрСвойства.Значение = Стр.Значение; + ОписаниеСвойства.Значение = Строка.Значение; КонецЕсли; КонецЕсли; КонецЦикла; - Возврат ТабСвойства; + Возврат ОписаниеСвойств; КонецФункции -// Считывает и возвращает значения доп. сведений -// +// Возвращает значения дополнительных сведений. Функция ПрочитатьЗначенияСвойствИзРегистраСведений(ВладелецСвойства) Экспорт Запрос = Новый Запрос; @@ -541,56 +627,63 @@ КонецФункции -// Определяет, используется ли с объектом информационной базы дополнительные реквизиты -// или дополнительные сведения. -// -// Параметры: -// Ссылка - ссылка на объект информационной базы -// ИспользоватьДопРеквизиты - устанавливается Истина или Ложь -// ИспользоватьДопСведения - устанавливается Истина или Ложь -// -// Примечание: может вызывать исключение. -// -Процедура ПолучитьИспользованиеДополнительныхСвойств(знач Ссылка, ИспользоватьДопРеквизиты, ИспользоватьДопСведения) Экспорт +// Возвращает использование набором дополнительных сведений и реквизитов. +Функция ВидыСвойствНабора(Ссылка) Экспорт - Перем ПерваяЧастьИмени, ВтораяЧастьИмени; + ИмяПредопределенного = Справочники.НаборыДополнительныхРеквизитовИСведений.ПолучитьИмяПредопределенного(Ссылка); - Если Ссылка = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка() Тогда - ИспользоватьДопРеквизиты = Ложь; - ИспользоватьДопСведения = Ложь; - Возврат; - КонецЕсли; + Позиция = Найти(ИмяПредопределенного, "_"); - Если Ссылка.Предопределенный И Ссылка.Родитель = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка() Тогда - СсылкаПредопределенного = Ссылка; - Иначе - СсылкаПредопределенного = Ссылка.Родитель; - КонецЕсли; + ПерваяЧастьИмени = Лев(ИмяПредопределенного, Позиция - 1); + ВтораяЧастьИмени = Прав(ИмяПредопределенного, СтрДлина(ИмяПредопределенного) - Позиция); - Если СсылкаПредопределенного = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка() Тогда - ВызватьИсключение НСтр("ru = 'Не найден владелец свойств.'"); - КонецЕсли; + ВидыСвойствНабора = Новый Структура; - Справочники.НаборыДополнительныхРеквизитовИСведений.ПолучитьЧастиИмени(СсылкаПредопределенного, ПерваяЧастьИмени, ВтораяЧастьИмени); - ИспользоватьДопРеквизиты = Справочники.НаборыДополнительныхРеквизитовИСведений.ИспользуютсяДопРеквизиты(ПерваяЧастьИмени, ВтораяЧастьИмени); - ИспользоватьДопСведения = Справочники.НаборыДополнительныхРеквизитовИСведений.ИспользуютсяДопСведения(ПерваяЧастьИмени, ВтораяЧастьИмени); + // Проверка использования дополнительных реквизитов. + МетаданныеВладельцаСвойств = Метаданные.НайтиПоПолномуИмени(ПерваяЧастьИмени + "." + ВтораяЧастьИмени); -КонецПроцедуры + ВидыСвойствНабора.Вставить( + "ДополнительныеРеквизиты", + МетаданныеВладельцаСвойств <> Неопределено + И МетаданныеВладельцаСвойств.ТабличныеЧасти.Найти("ДополнительныеРеквизиты") <> Неопределено ); + + // Проверка использования дополнительных сведений. + Тип = Тип(ПерваяЧастьИмени + "Ссылка." + ВтораяЧастьИмени); + + ВидыСвойствНабора.Вставить( + "ДополнительныеСведения", + Метаданные.ОбщиеКоманды.Найти("ДополнительныеСведения") <> Неопределено + И Метаданные.ОбщиеКоманды.ДополнительныеСведения.ТипПараметраКоманды.СодержитТип(Тип) ); + + Возврат ВидыСвойствНабора; + +КонецФункции //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ФУНКЦИИ И ПРОЦЕДУРЫ +// Вспомогательные процедуры и функции -// По объекту или по ссылке на объект и по имени реквизита, содержащего вид объекта -// получает основной набор свойств. -// Для ссылки на справочник "Сущности" функция вернет -// предопределенный элемент справочника НаборыДополнительныхРеквизитовИСведений "Справочник_Сущности". -// Если передан параметр ВидОбъектаИмяРеквизита, функция вернет ссылку на -// набор свойств, содержащийся в Ссылка.<ВидОбъектаИмяРеквизита> +// Возвращает основной набор свойств владельца. // +// Параметры: +// ВладелецСвойств - Ссылка или Объект владельца свойств. +// +// Возвращаемое значение: +// СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - +// когда для типа владельца свойств не задано имя реквизита вида объекта в процедуре +// УправлениеСвойствамиПереопределяемый.ПолучитьИмяРеквизитаВидаОбъекта(), +// тогда возвращается предопределенный элемент с именем в формате полное имя +// объекта метаданных, у которого символ "." заменен символом "_", +// иначе возвращается значение реквизита НаборСвойств того вида, который +// содержится в реквизите владельца свойств с именем заданным в +// переопределяемой процедуре. +// +// Неопределено - когда владелец свойств - группа элементов справочника или +// группа элементов плана видов характеристик. +// Функция ПолучитьОсновнойНаборСвойствДляОбъекта(ВладелецСвойств) МетаданныеОбъекта = ВладелецСвойств.Метаданные(); - ИмяОбъекта = МетаданныеОбъекта.Имя; + ИмяОбъектаМетаданных = МетаданныеОбъекта.Имя; ПереданОбъект = Ложь; Если ОбщегоНазначения.ЗначениеСсылочногоТипа(ВладелецСвойств) Тогда @@ -600,28 +693,31 @@ Ссылка = ВладелецСвойств.Ссылка; КонецЕсли; - ВидОбъекта = ОбщегоНазначения.ВидОбъектаПоСсылке(Ссылка); - ВидОбъектаИмяРеквизита = УправлениеСвойствамиПереопределяемый.ПолучитьИмяРеквизитаВидаОбъекта(Ссылка); - Если ВидОбъектаИмяРеквизита = "" Тогда - Если ВидОбъекта = "Справочник" или ВидОбъекта = "ПланВидовХарактеристик" Тогда + ВидОбъектаМетаданных = ОбщегоНазначения.ВидОбъектаПоСсылке(Ссылка); + ИмяРеквизитаВидаВладельцевСвойств = УправлениеСвойствамиПереопределяемый.ПолучитьИмяРеквизитаВидаОбъекта(Ссылка); + + Если ИмяРеквизитаВидаВладельцевСвойств = "" Тогда + Если ВидОбъектаМетаданных = "Справочник" или ВидОбъектаМетаданных = "ПланВидовХарактеристик" Тогда Если ОбщегоНазначения.ОбъектЯвляетсяГруппой(ВладелецСвойств) Тогда Возврат Неопределено; КонецЕсли; КонецЕсли; - ИмяЭлемента = ВидОбъекта + "_" + ИмяОбъекта; + ИмяЭлемента = ВидОбъектаМетаданных + "_" + ИмяОбъектаМетаданных; Возврат Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяЭлемента]; Иначе Если ПереданОбъект = Истина Тогда - Возврат ОбщегоНазначения.ПолучитьЗначениеРеквизита(ВладелецСвойств[ВидОбъектаИмяРеквизита], "НаборСвойств"); + Возврат ОбщегоНазначения.ПолучитьЗначениеРеквизита( + ВладелецСвойств[ИмяРеквизитаВидаВладельцевСвойств], + "НаборСвойств"); Иначе Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ОбъектВладелецСвойств." + ВидОбъектаИмяРеквизита + ".НаборСвойств КАК Набор + | ОбъектВладелецСвойств." + ИмяРеквизитаВидаВладельцевСвойств + ".НаборСвойств КАК Набор |ИЗ - | " + ВидОбъекта + "." + ИмяОбъекта + " КАК ОбъектВладелецСвойств + | " + ВидОбъектаМетаданных + "." + ИмяОбъектаМетаданных + " КАК ОбъектВладелецСвойств |ГДЕ | ОбъектВладелецСвойств.Ссылка = &Ссылка"; @@ -646,48 +742,46 @@ КонецФункции -// Создать основные объекты (реквизиты, команды, элементы) на форме объекта со свойствами +// Создает основные реквизиты, команды, элементы в форме владельца свойств. Процедура СоздатьОсновныеОбъектыФормы(Форма, ИмяЭлементаДляРазмещения, НаборСвойствОбъекта, ИспользоватьДопРеквизиты) - масРеквизитов = Новый Массив; + Реквизиты = Новый Массив; - // Проверим значение функциональной опции "Использование свойств" + // Проверка значения функциональной опции "Использование свойств". ОпцияИспользоватьСвойства = Форма.ПолучитьФункциональнуюОпциюФормы("ИспользоватьДополнительныеРеквизитыИСведения"); РеквизитИспользоватьСвойства = Новый РеквизитФормы("Свойства_ИспользоватьСвойства", Новый ОписаниеТипов("Булево")); - масРеквизитов.Добавить(РеквизитИспользоватьСвойства); + Реквизиты.Добавить(РеквизитИспользоватьСвойства); Если ОпцияИспользоватьСвойства Тогда РеквизитИспользоватьДопРеквизиты = Новый РеквизитФормы("Свойства_ИспользоватьДопРеквизиты", Новый ОписаниеТипов("Булево")); - масРеквизитов.Добавить(РеквизитИспользоватьДопРеквизиты); + Реквизиты.Добавить(РеквизитИспользоватьДопРеквизиты); - // Добавим реквизит "ОсновнойНабор" + // Добавление реквизита "ОсновнойНабор". ИмяТипа = ?(ТипЗнч(НаборСвойствОбъекта) = Тип("СписокЗначений"), "СписокЗначений", "СправочникСсылка.НаборыДополнительныхРеквизитовИСведений"); РеквизитОсновнойНабор = Новый РеквизитФормы("Свойства_ОсновнойНабор", Новый ОписаниеТипов(ИмяТипа)); - масРеквизитов.Добавить(РеквизитОсновнойНабор); + Реквизиты.Добавить(РеквизитОсновнойНабор); Если ИспользоватьДопРеквизиты Тогда - // Добавим реквизит таблицу значений "ОписаниеДополнительныхРеквизитов" с колонками + // Добавление реквизита таблица значений "ОписаниеДополнительныхРеквизитов" с колонками. ИмяОписания = "Свойства_ОписаниеДополнительныхРеквизитов"; РеквизитОписание_0 = Новый РеквизитФормы(ИмяОписания, Новый ОписаниеТипов("ТаблицаЗначений")); РеквизитОписание_1 = Новый РеквизитФормы("ИмяРеквизитаЗначение", Новый ОписаниеТипов("Строка"), ИмяОписания); РеквизитОписание_2 = Новый РеквизитФормы("ИмяРеквизитаСвойство", Новый ОписаниеТипов("Строка"), ИмяОписания); РеквизитОписание_3 = Новый РеквизитФормы("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"), ИмяОписания); - масРеквизитов.Добавить(РеквизитОписание_0); - масРеквизитов.Добавить(РеквизитОписание_1); - масРеквизитов.Добавить(РеквизитОписание_2); - масРеквизитов.Добавить(РеквизитОписание_3); + Реквизиты.Добавить(РеквизитОписание_0); + Реквизиты.Добавить(РеквизитОписание_1); + Реквизиты.Добавить(РеквизитОписание_2); + Реквизиты.Добавить(РеквизитОписание_3); - // Добавим реквизит с именем элемента в котором будут размещаться поля ввода + // Добавление реквизита с именем элемента в котором будут размещаться поля ввода. РеквизитИмяЭлемента = Новый РеквизитФормы("Свойства_ИмяЭлементаДляРазмещения", Новый ОписаниеТипов("Строка")); - масРеквизитов.Добавить(РеквизитИмяЭлемента); + Реквизиты.Добавить(РеквизитИмяЭлемента); КонецЕсли; - // Команду формы добавляем только если установлена роль "ДобавлениеИзменениеБазовойНСИ" или - // это полноправный пользователь - Если РольДоступна(Метаданные.Роли.ДобавлениеИзменениеБазовойНСИ) - Или Пользователи.ЭтоПолноправныйПользовательИБ() Тогда - // Добавляем команду + // Добавление команды формы, если установлена роль "ДобавлениеИзменениеБазовойНСИ" или это полноправный пользователь. + Если Пользователи.РолиДоступны("ДобавлениеИзменениеБазовойНСИ") Тогда + // Добавление команды. Команда = Форма.Команды.Добавить("РедактироватьСоставСвойств"); Команда.Заголовок = НСтр("ru = 'Изменить состав доп. реквизитов и сведений'"); Команда.Действие = "Подключаемый_РедактироватьСоставСвойств"; @@ -700,7 +794,7 @@ КонецЕсли; КонецЕсли; - Форма.ИзменитьРеквизиты(масРеквизитов); + Форма.ИзменитьРеквизиты(Реквизиты); Форма.Свойства_ИспользоватьСвойства = ОпцияИспользоватьСвойства; @@ -714,23 +808,7 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////// -// поддержка многострочного поля ввода -Функция ИспользоватьНеограниченнуюСтроку(ТипЗначенияСвойства, МногострочноеПолеВвода) Экспорт - - Если ТипЗначенияСвойства.СодержитТип(Тип("Строка")) - И ТипЗначенияСвойства.Типы().Количество() = 1 - И МногострочноеПолеВвода > 1 Тогда - Возврат Истина; - Иначе - Возврат Ложь; - КонецЕсли; - -КонецФункции -// -/////////////////////////////////////////////////////////////// - -// Создадим реквизиты с значениями свойств и разместить их на форме +// Создает дополнительные реквизиты, команды, элементы в форме владельца свойств. Процедура ЗаполнитьДополнительныеРеквизитыНаФорме(Форма, Объект, НаборСвойствОбъекта) Если НаборСвойствОбъекта = Неопределено Тогда @@ -739,87 +817,84 @@ Набор = НаборСвойствОбъекта; КонецЕсли; - Таблица = ПолучитьТаблицуЗначенийСвойств(Объект.ДополнительныеРеквизиты.Выгрузить(), Набор, Ложь); - Таблица.Колонки.Добавить("ИмяРеквизитаЗначение"); - Таблица.Колонки.Добавить("ИмяРеквизитаСвойство"); - Таблица.Колонки.Добавить("Булево"); + ОписаниеСвойств = ПолучитьТаблицуЗначенийСвойств(Объект.ДополнительныеРеквизиты.Выгрузить(), Набор, Ложь); + ОписаниеСвойств.Колонки.Добавить("ИмяРеквизитаЗначение"); + ОписаниеСвойств.Колонки.Добавить("ИмяРеквизитаСвойство"); + ОписаниеСвойств.Колонки.Добавить("Булево"); УдалитьСтарыеРеквизиты(Форма); Форма.Свойства_ОписаниеДополнительныхРеквизитов.Очистить(); - // Создадим реквизиты + // Создание реквизитов. Номер = 0; ДобавляемыеРеквизиты = Новый Массив(); - Для Каждого СтрРеквизит Из Таблица Цикл + Для каждого ОписаниеСвойства Из ОписаниеСвойств Цикл Номер = Номер + 1; - ТипЗначенияСвойства = СтрРеквизит.ТипЗначения; + ТипЗначенияСвойства = ОписаниеСвойства.ТипЗначения; - /////////////////////////////////////////////////////////////// - // поддержка строк неограниченной длины - Если ИспользоватьНеограниченнуюСтроку(ТипЗначенияСвойства, СтрРеквизит.МногострочноеПолеВвода) Тогда - ТипЗначенияСвойства = Новый ОписаниеТипов("Строка"); - КонецЕсли; - // - /////////////////////////////////////////////////////////////// - - СтрРеквизит.ИмяРеквизитаЗначение = "ДополнительныйРеквизитЗначение" + Формат(Номер, "ЧГ=0"); - - Если СтрРеквизит.Удалено Тогда + // Поддержка строк неограниченной длины. + Если ИспользоватьНеограниченнуюСтроку(ТипЗначенияСвойства, ОписаниеСвойства.МногострочноеПолеВвода) Тогда ТипЗначенияСвойства = Новый ОписаниеТипов("Строка"); КонецЕсли; - Реквизит = Новый РеквизитФормы(СтрРеквизит.ИмяРеквизитаЗначение, ТипЗначенияСвойства, , СтрРеквизит.Наименование, Истина); + ОписаниеСвойства.ИмяРеквизитаЗначение = "ДополнительныйРеквизитЗначение" + Формат(Номер, "ЧГ=0"); + + Если ОписаниеСвойства.Удалено Тогда + ТипЗначенияСвойства = Новый ОписаниеТипов("Строка"); + КонецЕсли; + + Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяРеквизитаЗначение, ТипЗначенияСвойства, , ОписаниеСвойства.Наименование, Истина); ДобавляемыеРеквизиты.Добавить(Реквизит); - СтрРеквизит.ИмяРеквизитаСвойство = ""; + ОписаниеСвойства.ИмяРеквизитаСвойство = ""; Если ТипЗначенияСодержитЗначенияСвойств(ТипЗначенияСвойства) Тогда - СтрРеквизит.ИмяРеквизитаСвойство = "ДополнительныйРеквизитСвойство" + Формат(Номер, "ЧГ=0"); - Реквизит = Новый РеквизитФормы(СтрРеквизит.ИмяРеквизитаСвойство, Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"), , , Истина); + ОписаниеСвойства.ИмяРеквизитаСвойство = "ДополнительныйРеквизитСвойство" + Формат(Номер, "ЧГ=0"); + Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяРеквизитаСвойство, Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"), , , Истина); ДобавляемыеРеквизиты.Добавить(Реквизит); КонецЕсли; - СтрРеквизит.Булево = ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(ТипЗначенияСвойства, Тип("Булево")); + ОписаниеСвойства.Булево = ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(ТипЗначенияСвойства, Тип("Булево")); КонецЦикла; Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); - // Создадим элементы формы - Для Каждого СтрРеквизит Из Таблица Цикл + // Создание элементов формы. + Для Каждого ОписаниеСвойства Из ОписаниеСвойств Цикл - новСтр = Форма.Свойства_ОписаниеДополнительныхРеквизитов.Добавить(); - новСтр.ИмяРеквизитаЗначение = СтрРеквизит.ИмяРеквизитаЗначение; - новСтр.ИмяРеквизитаСвойство = СтрРеквизит.ИмяРеквизитаСвойство; - новСтр.Свойство = СтрРеквизит.Свойство; + НоваяСтрока = Форма.Свойства_ОписаниеДополнительныхРеквизитов.Добавить(); + НоваяСтрока.ИмяРеквизитаЗначение = ОписаниеСвойства.ИмяРеквизитаЗначение; + НоваяСтрока.ИмяРеквизитаСвойство = ОписаниеСвойства.ИмяРеквизитаСвойство; + НоваяСтрока.Свойство = ОписаниеСвойства.Свойство; - Форма[СтрРеквизит.ИмяРеквизитаЗначение] = СтрРеквизит.Значение; + Форма[ОписаниеСвойства.ИмяРеквизитаЗначение] = ОписаниеСвойства.Значение; ИмяЭлементаДляРазмещения = Форма.Свойства_ИмяЭлементаДляРазмещения; Родитель = ?(ИмяЭлементаДляРазмещения = "", Неопределено, Форма.Элементы[ИмяЭлементаДляРазмещения]); - Элемент = Форма.Элементы.Добавить(СтрРеквизит.ИмяРеквизитаЗначение, Тип("ПолеФормы"), Родитель); + Элемент = Форма.Элементы.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение, Тип("ПолеФормы"), Родитель); - Если СтрРеквизит.Булево И ПустаяСтрока(СтрРеквизит.ФорматСвойства) Тогда + Если ОписаниеСвойства.Булево И ПустаяСтрока(ОписаниеСвойства.ФорматСвойства) Тогда Элемент.Вид = ВидПоляФормы.ПолеФлажка Иначе Элемент.Вид = ВидПоляФормы.ПолеВвода; КонецЕсли; - Элемент.ПутьКДанным = СтрРеквизит.ИмяРеквизитаЗначение; - Элемент.Подсказка = СтрРеквизит.Свойство.Подсказка; + Элемент.ПутьКДанным = ОписаниеСвойства.ИмяРеквизитаЗначение; + Элемент.Подсказка = ОписаниеСвойства.Свойство.Подсказка; - Если СтрРеквизит.Свойство.МногострочноеПолеВвода > 0 Тогда + Если ОписаниеСвойства.Свойство.МногострочноеПолеВвода > 0 Тогда Элемент.МногострочныйРежим = Истина; - Элемент.Высота= СтрРеквизит.Свойство.МногострочноеПолеВвода; + Элемент.Высота= ОписаниеСвойства.Свойство.МногострочноеПолеВвода; КонецЕсли; - Если НЕ ПустаяСтрока(СтрРеквизит.ФорматСвойства) Тогда - Элемент.Формат = СтрРеквизит.ФорматСвойства; - Элемент.ФорматРедактирования = СтрРеквизит.ФорматСвойства; + Если НЕ ПустаяСтрока(ОписаниеСвойства.ФорматСвойства) Тогда + Элемент.Формат = ОписаниеСвойства.ФорматСвойства; + Элемент.ФорматРедактирования = ОписаниеСвойства.ФорматСвойства; КонецЕсли; - Если СтрРеквизит.Удалено Тогда - Элемент.ЦветТекстаЗаголовка = ЦветаСтиля.УдаленныйДополнительныйРеквизитЦвет; + Если ОписаниеСвойства.Удалено Тогда + Элемент.ЦветТекстаЗаголовка = ЦветаСтиля.НедоступныеДанныеЦвет; Элемент.ШрифтЗаголовка = ШрифтыСтиля.УдаленныйДополнительныйРеквизитШрифт; Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда Элемент.КнопкаОчистки = Истина; @@ -830,146 +905,103 @@ КонецЕсли; КонецЕсли; - Если СтрРеквизит.ИмяРеквизитаСвойство <> "" Тогда - Связь = Новый СвязьПараметраВыбора("Отбор.Владелец", СтрРеквизит.ИмяРеквизитаСвойство); - масСвязи = Новый Массив; - масСвязи.Добавить(Связь); - Элемент.СвязиПараметровВыбора = Новый ФиксированныйМассив(масСвязи); - Форма[СтрРеквизит.ИмяРеквизитаСвойство] = СтрРеквизит.Свойство; + Если ОписаниеСвойства.ИмяРеквизитаСвойство <> "" Тогда + Связь = Новый СвязьПараметраВыбора("Отбор.Владелец", ОписаниеСвойства.ИмяРеквизитаСвойство); + Связи = Новый Массив; + Связи.Добавить(Связь); + Элемент.СвязиПараметровВыбора = Новый ФиксированныйМассив(Связи); + Форма[ОписаниеСвойства.ИмяРеквизитаСвойство] = ОписаниеСвойства.Свойство; КонецЕсли; КонецЦикла; КонецПроцедуры -// Перенести значения свойств из реквизитов формы в табличную часть объекта +// Переносит значения свойств из реквизитов формы в табличную часть объекта. Процедура ПеренестиЗначенияСвойствИзРеквизитовФормы(Форма, Объект) Объект.ДополнительныеРеквизиты.Очистить(); - Для Каждого Стр Из Форма.Свойства_ОписаниеДополнительныхРеквизитов Цикл - Значение = Форма[Стр.ИмяРеквизитаЗначение]; + Для Каждого Строка Из Форма.Свойства_ОписаниеДополнительныхРеквизитов Цикл + Значение = Форма[Строка.ИмяРеквизитаЗначение]; Если ЗначениеЗаполнено(Значение) Тогда Если ТипЗнч(Значение) = Тип("Булево") И Значение = Ложь Тогда Продолжить; КонецЕсли; - новСтр = Объект.ДополнительныеРеквизиты.Добавить(); - новСтр.Свойство = Стр.Свойство; - новСтр.Значение = Значение; + НоваяСтрока = Объект.ДополнительныеРеквизиты.Добавить(); + НоваяСтрока.Свойство = Строка.Свойство; + НоваяСтрока.Значение = Значение; - /////////////////////////////////////////////////////////////// - // поддержка строк неограниченной длины - Свойство = Стр.Свойство.ПолучитьОбъект(); + // Поддержка строк неограниченной длины. + Свойство = Строка.Свойство.ПолучитьОбъект(); Если ИспользоватьНеограниченнуюСтроку(Свойство.ТипЗначения, Свойство.МногострочноеПолеВвода) Тогда - новСтр.ТекстоваяСтрока = Значение; + НоваяСтрока.ТекстоваяСтрока = Значение; КонецЕсли; - // - /////////////////////////////////////////////////////////////// КонецЕсли; КонецЦикла; КонецПроцедуры -// Удалить старые реквизиты и элементы формы +// Удаляет старые реквизиты и элементы формы. Процедура УдалитьСтарыеРеквизиты(Форма) - // Удалим старые реквизиты и элементы - масУдалять = Новый Массив; - Для Каждого СтрРеквизит Из Форма.Свойства_ОписаниеДополнительныхРеквизитов Цикл + УдаляемыеРеквизиты = Новый Массив; + Для Каждого ОписаниеСвойства Из Форма.Свойства_ОписаниеДополнительныхРеквизитов Цикл - масУдалять.Добавить(СтрРеквизит.ИмяРеквизитаЗначение); - Если Не ПустаяСтрока(СтрРеквизит.ИмяРеквизитаСвойство) Тогда - масУдалять.Добавить(СтрРеквизит.ИмяРеквизитаСвойство); + УдаляемыеРеквизиты.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение); + Если Не ПустаяСтрока(ОписаниеСвойства.ИмяРеквизитаСвойство) Тогда + УдаляемыеРеквизиты.Добавить(ОписаниеСвойства.ИмяРеквизитаСвойство); КонецЕсли; - Форма.Элементы.Удалить(Форма.Элементы[СтрРеквизит.ИмяРеквизитаЗначение]); + Форма.Элементы.Удалить(Форма.Элементы[ОписаниеСвойства.ИмяРеквизитаЗначение]); КонецЦикла; - Если масУдалять.Количество() Тогда - Форма.ИзменитьРеквизиты(, масУдалять); + Если УдаляемыеРеквизиты.Количество() Тогда + Форма.ИзменитьРеквизиты(, УдаляемыеРеквизиты); КонецЕсли; КонецПроцедуры -// Проверить, что тип значения свойства содержит ссылку на справочник ЗначенияСвойствОбъектов +// Определяет, что тип значения может быть СправочникСсылка.ЗначенияСвойствОбъектов. Функция ТипЗначенияСодержитЗначенияСвойств(ТипЗначения) Возврат ТипЗначения.Типы().Найти(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) <> Неопределено; КонецФункции -// проверка того, что элемент набора свойств нужно изменить из-за изменений в виде объекта +// Определяет, что изменился набор свойств у вида владельцев свойств. +// Используется для обновления набора свойств во владельце свойств. +// Функция НаборСвойствНужноИзменить(ВидОбъекта) - Результат = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ВидОбъекта.НаборСвойств, "Наименование,ПометкаУдаления"); - Возврат (Результат.Наименование <> ВидОбъекта.Наименование) ИЛИ (Результат.ПометкаУдаления <> ВидОбъекта.ПометкаУдаления); + + Результат = ОбщегоНазначения.ПолучитьЗначенияРеквизитов( + ВидОбъекта.НаборСвойств, + "Наименование, ПометкаУдаления"); + + Возврат (Результат.Наименование <> ВидОбъекта.Наименование) + ИЛИ (Результат.ПометкаУдаления <> ВидОбъекта.ПометкаУдаления); + +КонецФункции + +// Проверяет возможность использования для свойства строки неограниченный длины. +Функция ИспользоватьНеограниченнуюСтроку(ТипЗначенияСвойства, МногострочноеПолеВвода) + + Если ТипЗначенияСвойства.СодержитТип(Тип("Строка")) + И ТипЗначенияСвойства.Типы().Количество() = 1 + И МногострочноеПолеВвода > 1 Тогда + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИК ЗАПИСИ ГРУППЫ НАБОРОВ СВОЙСТВ +// Обновление информационной базы -// Для корневого набора свойств (всегда группа) собирает все свойства подчиненных наборов. -// Параметры -// Объект - СправочникОбъект.НаборыДополнительныхРеквизитовИСведений -// группа наборов дополнительных свойств -// -Процедура ПередЗаписьюГруппыНаборовСвойств(Объект) Экспорт - - - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Родитель", Объект.Ссылка); - - // Дополнительные реквизиты - Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ДополнительныеРеквизиты.Свойство КАК Свойство - |ИЗ - | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК ДополнительныеРеквизиты - |ГДЕ - | ДополнительныеРеквизиты.Ссылка.Родитель = &Родитель - | И ДополнительныеРеквизиты.Свойство.ЭтоДополнительноеСведение = ЛОЖЬ"; - - Объект.ДополнительныеРеквизиты.Загрузить(Запрос.Выполнить().Выгрузить()); - - Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ДополнительныеСведения.Свойство КАК Свойство - |ИЗ - | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения КАК ДополнительныеСведения - |ГДЕ - | ДополнительныеСведения.Ссылка.Родитель = &Родитель - | И ДополнительныеСведения.Свойство.ЭтоДополнительноеСведение = ИСТИНА"; - - Объект.ДополнительныеСведения.Загрузить(Запрос.Выполнить().Выгрузить()); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ - -// Добавляет в список Обработчики процедуры-обработчики обновления, -// необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.6.7"; - Обработчик.Процедура = "УправлениеСвойствами.ОбновитьСписокДополнительныхСвойств"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.7.1"; - Обработчик.Процедура = "УправлениеСвойствами.ОбновитьПереименованныеРоли_БСП_1_0_7_1"; - -КонецПроцедуры - -// Процедура обновления наборов дополнительных реквизитов и сведений в информационной базе. +// Обновляет наборы дополнительных реквизитов и сведений в информационной базе. // Используется для перехода к новому формату хранения. // Процедура ОбновитьСписокДополнительныхСвойств() Экспорт @@ -1004,8 +1036,7 @@ КонецПроцедуры -// Обновляет имена ролей в профилях групп доступа -// +// Обновляет имена ролей в профилях групп доступа. Процедура ОбновитьПереименованныеРоли_БСП_1_0_7_1() Экспорт Если Метаданные.НайтиПоПолномуИмени("ОбщийМодуль.УправлениеДоступом") <> Неопределено Тогда @@ -1025,3 +1056,4 @@ КонецЕсли; КонецПроцедуры + diff --git a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl index a7671d66b..910258bf0 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl @@ -1,13 +1,18 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ОБЩЕГО НАЗНАЧЕНИЯ +// Подсистема "Свойства" +// +//////////////////////////////////////////////////////////////////////////////// -// Выполнить редактирование состава свойств -// +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Выбирает набор свойств (если нужно) и открывает форму редактирования свойств. Процедура РедактироватьСоставСвойств(Форма, Ссылка) Экспорт Наборы = Форма.Свойства_ОсновнойНабор; - // Если вернули СправочникСсылка.НаборыДополнительныхРеквизитовИСведений, то это объект с одним набором свойств + Если ТипЗнч(Наборы) = Тип("СправочникСсылка.НаборыДополнительныхРеквизитовИСведений") Тогда + // Объект с одним набором свойств. Если ЗначениеЗаполнено(Наборы) Тогда ПараметрыФормыНабораСвойств = Новый Структура("Ключ", Форма.Свойства_ОсновнойНабор); ОткрытьФорму("Справочник.НаборыДополнительныхРеквизитовИСведений.Форма.ФормаЭлемента", ПараметрыФормыНабораСвойств); @@ -15,12 +20,12 @@ Предупреждение(НСтр("ru = 'Нельзя получить набор свойств объекта. Возможно не заполнены необходимые реквизиты.'")); КонецЕсли; - // ...Иначе - это объект у которого может быть несколько наборов свойств - // и требуется выбрать редактируемый набор Иначе + // Объект с несколькими наборами свойств. Если Наборы.Количество() = 1 Тогда Элемент = Наборы.Получить(0); Иначе + // Выбор редактируемого набора. Элемент = Наборы.ВыбратьЭлемент(); Если Элемент = Неопределено Тогда Возврат; @@ -34,8 +39,12 @@ КонецПроцедуры -// Проверить, связано ли оповещение с изменением набора свойств и нужно ли -// обрабатывать его в текущей форме +// Определяет, что указанное событие - это событие об изменении набора свойств. +// +// Возвращаемое значение: +// Булево - если Истина, тогда это оповещение об изменении набора свойств и +// его нужно обработать в форме. +// Функция ОбрабатыватьОповещения(Форма, ИмяСобытия, Параметр) Экспорт Если (ИмяСобытия <> "Запись_НаборыДополнительныхРеквизитовИСведений") ИЛИ Не Форма.Свойства_ИспользоватьСвойства Тогда @@ -46,12 +55,10 @@ ИначеЕсли (ТипЗнч(Форма.Свойства_ОсновнойНабор) = Тип("СписокЗначений")) И (Форма.Свойства_ОсновнойНабор.НайтиПоЗначению(Параметр) <> Неопределено) Тогда + Возврат Истина; - Иначе - Возврат Ложь; - КонецЕсли; КонецФункции diff --git a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl index 66c0935c8..4fa4744b4 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl @@ -1,12 +1,19 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Свойства" +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ПЕРЕОПРЕДЕЛЯЕМЫЕ ФУНКЦИИ ПОДСИСТЕМЫ СВОЙСТВА +// ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Получить доступные наборы свойств для объекта +// Получить доступные наборы свойств для объекта. +// +// Параметры: +// Объект - Ссылка или Объект владельца свойств. // // Возвращаемые значения: -// Список значений (в т.ч. пустой), если объект может содержать несколько наборов свойств -// НеОпределено если объект не может содержать несколько наборов свойств +// Список значений (в т.ч. пустой), если объект может содержать несколько наборов свойств. +// Неопределено, если объект не может содержать несколько наборов свойств. // Функция ПолучитьДоступныеНаборыСвойствПоОбъекту(Объект) Экспорт @@ -16,7 +23,17 @@ КонецФункции -// Возвращает имя реквизита объекта-владельца свойств в котором содержится вид объекта +// Возвращает имя реквизита, содержащего вид владельцев свойств (если есть). +// Если возвращается имя реквизита, то вид владельцев свойств +// (например, вид номенклатуры), должен содержать реквизит НаборСвойств +// типа СправочникСсылка.НаборыДополнительныхРеквизитовИСведений. +// +// Параметры: +// Ссылка - Ссылка владельца свойств. +// +// Возвращаемые значения: +// Строка - имя реквизита или пустая строка. +// Функция ПолучитьИмяРеквизитаВидаОбъекта(Ссылка) Экспорт diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl index 94561bfb9..84f494cf4 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl @@ -1,1247 +1,15 @@ -Процедура ПолучитьПисьма( - УчетнаяЗапись, - ЕстьОшибки, - Получено, - МассивСозданныхПисем, - ПомещатьПисьмоВПапкуПисьмаОснования) - - //----------------------------------------------------------------- - // Сформируем почтовый профиль и подключимся к почтовому серверу - Профиль = ЭлектроннаяПочта.СформироватьИнтернетПрофиль(УчетнаяЗапись); - Почта = Новый ИнтернетПочта; - Попытка - Почта.Подключиться(Профиль); - Исключение - - ЕстьОшибки = Истина; - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка - |%2'"), УчетнаяЗапись,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщенияОбОшибке); - - Возврат; - - КонецПопытки; - - //----------------------------------------------------------------- - // Получим идентификаторы сообщений на сервере - Идентификаторы = Почта.ПолучитьИдентификаторы(); - Если Идентификаторы.Количество() = 0 Тогда - // если на сервере сообщений нет, то удалим все записи по учетной записи в регистре сведений ИдентификаторыПолученныхЭлектронныхПисем - УдалитьИдентификаторыВсехРанееПолученныхПисем(УчетнаяЗапись); - Почта.Отключиться(); - Возврат; - КонецЕсли; - - //----------------------------------------------------------------- - // Определим какие сообщения нужно получать - ИдЗагружать = ПолучитьИдентификаторыПисемДляЗагрузки(Идентификаторы, УчетнаяЗапись); - Получено = 0; - Если ИдЗагружать.Количество() <> 0 Тогда - ОтветственныйЗаОбработкуПисем = Взаимодействия.ПолучитьОтвественногоЗаОбработкуПисьмаПоУмолчанию(УчетнаяЗапись); - // Получим нужные сообщения - Сообщения = Почта.Выбрать(Ложь, ИдЗагружать); - - КоличествоОшибокПриЗаписи = 0; - // Запишем их - Для Каждого Сообщение Из Сообщения Цикл - ДобавлятьВМассивСозданныхПисем = ЛОЖЬ; - Попытка - СозданноеПисьмо = ЗаписатьВходящееЭлектронноеПисьмо( - УчетнаяЗапись, - Сообщение, - ОтветственныйЗаОбработкуПисем, - ПомещатьПисьмоВПапкуПисьмаОснования, - ДобавлятьВМассивСозданныхПисем); - Исключение - - ОтменитьТранзакцию(); - ЕстьОшибки = Истина; - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При получении письма %1 от %2, отправленное c адреса %3 произошла ошибка - |%4'"), - Сообщение.Тема, - Сообщение.ДатаОтправления, - Сообщение.Отправитель.Адрес, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщенияОбОшибке); - - КоличествоОшибокПриЗаписи = КоличествоОшибокПриЗаписи + 1; - Для Каждого ИдентификаторСообщения Из Сообщение.Идентификатор Цикл - ИндексИдентификатораВМассиве = Идентификаторы.Найти(ИдентификаторСообщения); - Если ИндексИдентификатораВМассиве <> Неопределено Тогда - Идентификаторы.Удалить(ИндексИдентификатораВМассиве); - КонецЕсли; - Продолжить; - КонецЦикла; - КонецПопытки; - Если ДобавлятьВМассивСозданныхПисем Тогда - МассивСозданныхПисем.Добавить(СозданноеПисьмо); - КонецЕсли; - КонецЦикла; - - Получено = Сообщения.Количество() - КоличествоОшибокПриЗаписи; - - КонецЕсли; - - //----------------------------------------------------------------- - // Удалим ненужные сообщения на сервере - ОставлятьКопии = УчетнаяЗапись.ОставлятьКопииСообщенийНаСервере; - ОставлятьДней = УчетнаяЗапись.ПериодХраненияСообщенийНаСервере; - Если Не ОставлятьКопии Тогда - // удалять все - масУдалять = Идентификаторы; - УдалятьВсе = Истина; - Иначе - УдалятьВсе = Ложь; - Если ОставлятьДней > 0 Тогда - масУдалять = ПолучитьИдентификаторыПисемДляУдаленияНаСервере( - Идентификаторы, УчетнаяЗапись, - ТекущаяДатаСеанса() - ОставлятьДней * 24 * 60 * 60); - Иначе - масУдалять = Новый Массив; - КонецЕсли; - КонецЕсли; - - Если масУдалять.Количество() <> 0 Тогда - Почта.УдалитьСообщения(масУдалять); - КонецЕсли; - - //----------------------------------------------------------------- - // Удалим ненужные идентификаторы в регистре сведений - Если УдалятьВсе Тогда - УдалитьИдентификаторыВсехРанееПолученныхПисем(УчетнаяЗапись); - Иначе - УдалитьИдентификаторыРанееПолученныхПисем(УчетнаяЗапись, Идентификаторы, масУдалять); - КонецЕсли; - - //----------------------------------------------------------------- - // Отключимся от почтового сервера - Почта.Отключиться(); - -КонецПроцедуры - -Процедура УдалитьИдентификаторыВсехРанееПолученныхПисем(УчетнаяЗапись) - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИдентификаторыПолученныхЭлектронныхПисем.Идентификатор - |ИЗ - | РегистрСведений.ИдентификаторыПолученныхЭлектронныхПисем КАК ИдентификаторыПолученныхЭлектронныхПисем - |ГДЕ - | ИдентификаторыПолученныхЭлектронныхПисем.УчетнаяЗапись = &УчетнаяЗапись"; - Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); - - Если НЕ Запрос.Выполнить().Пустой() Тогда - Набор = РегистрыСведений.ИдентификаторыПолученныхЭлектронныхПисем.СоздатьНаборЗаписей(); - Набор.Отбор.УчетнаяЗапись.Установить(УчетнаяЗапись); - Набор.Записать(); - КонецЕсли; - -КонецПроцедуры - -Процедура УдалитьИдентификаторыРанееПолученныхПисем(УчетнаяЗапись, ИдентификаторыНаСервере, ИдентификаторыУдалять) - - // Получим список идентификаторов которые не нужно удалять - соотвУдалять = Новый Соответствие; - Для Каждого Элемент Из ИдентификаторыУдалять Цикл - соотвУдалять.Вставить(Элемент, Истина); - КонецЦикла; - - масОставлять = Новый Массив; - Для Каждого Элемент Из ИдентификаторыНаСервере Цикл - Если соотвУдалять.Получить(Элемент) <> Истина Тогда - масОставлять.Добавить(Элемент); - КонецЕсли; - КонецЦикла; - - // Получим идентификаторы которые нужно удалить, те которые есть в регистре, но не нужно оставлять - табИдентификаторы = СоздатьТаблицуСИдентификаторами(масОставлять); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("табИдентификаторы", табИдентификаторы); - Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); - Запрос.Текст = - "ВЫБРАТЬ - | табИдентификаторы.Идентификатор - |ПОМЕСТИТЬ табИдентификаторы - |ИЗ - | &табИдентификаторы КАК табИдентификаторы - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ИдентификаторыПолученныхЭлектронныхПисем.Идентификатор - |ИЗ - | РегистрСведений.ИдентификаторыПолученныхЭлектронныхПисем КАК ИдентификаторыПолученныхЭлектронныхПисем - | ЛЕВОЕ СОЕДИНЕНИЕ табИдентификаторы КАК табИдентификаторы - | ПО табИдентификаторы.Идентификатор = ИдентификаторыПолученныхЭлектронныхПисем.Идентификатор - | И (ИдентификаторыПолученныхЭлектронныхПисем.УчетнаяЗапись = &УчетнаяЗапись) - |ГДЕ - | табИдентификаторы.Идентификатор ЕСТЬ NULL "; - - масУдалять = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Идентификатор"); - - - // Удалим все ненужные идентификаторы - Для Каждого Идентификатор Из масУдалять Цикл - Набор = РегистрыСведений.ИдентификаторыПолученныхЭлектронныхПисем.СоздатьНаборЗаписей(); - Набор.Отбор.УчетнаяЗапись.Установить(УчетнаяЗапись); - Набор.Отбор.Идентификатор.Установить(Идентификатор); - Набор.Записать(); - КонецЦикла; - -КонецПроцедуры - -Функция СоздатьТаблицуСИдентификаторами(Идентификаторы) - - табИдентификаторы = Новый ТаблицаЗначений; - табИдентификаторы.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка",,, Новый КвалификаторыСтроки(100))); - Для Каждого Ид Из Идентификаторы Цикл - новСтр = табИдентификаторы.Добавить(); - новСтр.Идентификатор = Ид; - КонецЦикла; - - Возврат табИдентификаторы; - -КонецФункции - -Функция ПолучитьИдентификаторыПисемДляЗагрузки(Идентификаторы, УчетнаяЗапись) - - // Получим список сообщений которые не были раньше получены - табИдентификаторы = СоздатьТаблицуСИдентификаторами(Идентификаторы); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("табИдентификаторы", табИдентификаторы); - Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); - Запрос.Текст = - "ВЫБРАТЬ - | табИдентификаторы.Идентификатор - |ПОМЕСТИТЬ табИдентификаторы - |ИЗ - | &табИдентификаторы КАК табИдентификаторы - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | табИдентификаторы.Идентификатор - |ИЗ - | табИдентификаторы КАК табИдентификаторы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИдентификаторыПолученныхЭлектронныхПисем КАК ИдентификаторыПолученныхЭлектронныхПисем - | ПО табИдентификаторы.Идентификатор = ИдентификаторыПолученныхЭлектронныхПисем.Идентификатор - | И (ИдентификаторыПолученныхЭлектронныхПисем.УчетнаяЗапись = &УчетнаяЗапись) - |ГДЕ - | ИдентификаторыПолученныхЭлектронныхПисем.УчетнаяЗапись ЕСТЬ NULL "; - - Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Идентификатор"); - -КонецФункции - -Функция ПолучитьИдентификаторыПисемДляУдаленияНаСервере(Идентификаторы, УчетнаяЗапись, ДатаПоКоторуюУдалять) - - табИдентификаторы = СоздатьТаблицуСИдентификаторами(Идентификаторы); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("табИдентификаторы", табИдентификаторы); - Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); - Запрос.УстановитьПараметр("ДатаПолучения", ДатаПоКоторуюУдалять); - Запрос.Текст = - "ВЫБРАТЬ - | табИдентификаторы.Идентификатор - |ПОМЕСТИТЬ табИдентификаторы - |ИЗ - | &табИдентификаторы КАК табИдентификаторы - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | табИдентификаторы.Идентификатор - |ИЗ - | табИдентификаторы КАК табИдентификаторы - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ИдентификаторыПолученныхЭлектронныхПисем КАК ИдентификаторыПолученныхЭлектронныхПисем - | ПО табИдентификаторы.Идентификатор = ИдентификаторыПолученныхЭлектронныхПисем.Идентификатор - | И (ИдентификаторыПолученныхЭлектронныхПисем.УчетнаяЗапись = &УчетнаяЗапись) - |ГДЕ - | ИдентификаторыПолученныхЭлектронныхПисем.ДатаПолучения <= &ДатаПолучения"; - - Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Идентификатор"); - -КонецФункции - -Функция ЗаписатьВходящееЭлектронноеПисьмо( - УчетнаяЗапись, - Сообщение, - ОтветственныйЗаОбработкуПисем, - ПомещатьПисьмоВПапкуПисьмаОснования, - ДобавлятьВМассивСозданныхПисем) - - НачатьТранзакцию(); - - // Создадим документ и заполним его реквизиты на основе сообщения - Письмо = Документы.ЭлектронноеПисьмоВходящее.СоздатьДокумент(); - Письмо.УчетнаяЗапись = УчетнаяЗапись; - ЗаполнитьДокументЭлектронноеПисьмоВходящее(Письмо, Сообщение); - - // Найдем основание письма, определим предмет и контакты - Предмет = Неопределено; - Папка = Неопределено; - ЗаполнитьПредметИКонтакты(Письмо, - Предмет, - Папка, - ПомещатьПисьмоВПапкуПисьмаОснования); - - // Заполним ответственного - Письмо.Ответственный = ОтветственныйЗаОбработкуПисем; - - // Запишем письмо - Письмо.Записать(); - - //Установим папку письма и предмет - Взаимодействия.УстановитьПредметПапкуВзаимодействия( - Письмо.Ссылка,Папка,?(ЗначениеЗаполнено(Предмет),Предмет,Письмо.Ссылка)); - МассивИменВложений = Новый Массив; - - //Запишем вложения - Для Каждого Вложение Из Сообщение.Вложения Цикл - МассивИменВложений.Добавить(Вложение.ИмяФайла); - КонецЦикла; - - РасширениеДляФайловПодписи = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЭЦП", "РасширениеДляФайловПодписи"); - Если РасширениеДляФайловПодписи = Неопределено ИЛИ ПустаяСтрока(РасширениеДляФайловПодписи) Тогда - РасширениеДляФайловПодписи = "p7s"; - КонецЕсли; - - СоответствиеВложенийИПодписей = - ФайловыеФункцииКлиентСервер.ПолучитьСоответствиеФайловИПодписей(МассивИменВложений, РасширениеДляФайловПодписи); - - КоличествоПустыхИменВоВложениях = 0; - Для каждого ЭлементСоответствия Из СоответствиеВложенийИПодписей Цикл - - НайденноеВложение = Неопределено; - МассивПодписей = Новый Массив; - - Для каждого Вложение Из Сообщение.Вложения Цикл - Если Вложение.ИмяФайла = ЭлементСоответствия.Ключ Тогда - НайденноеВложение = Вложение; - Прервать; - КонецЕсли - КонецЦикла; - - Если НайденноеВложение <> Неопределено И ЭлементСоответствия.Значение.Количество() > 0 Тогда - Для каждого Вложение Из Сообщение.Вложения Цикл - Если ЭлементСоответствия.Значение.Найти(Вложение.ИмяФайла) <> Неопределено Тогда - МассивПодписей.Добавить(Вложение); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если НайденноеВложение <> Неопределено Тогда - ЗаписатьВложениеЭлектронногоПисьма( - Письмо.Ссылка,НайденноеВложение, - МассивПодписей, - КоличествоПустыхИменВоВложениях); - КонецЕсли; - - КонецЦикла; - - // Запишем идентификатор - ЗаписатьИдентификаторПолученногоПисьма(УчетнаяЗапись, - Письмо.ИдентификаторНаСервере, - Сообщение.ДатаПолучения); - - Если Письмо.УведомитьОПрочтении Тогда - ЗаписатьНеобходимостьОбработкиУведомленияОПрочтении(Письмо.Ссылка); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Если (НЕ ПомещатьПисьмоВПапкуПисьмаОснования) ИЛИ (НЕ ЗначениеЗаполнено(Папка)) Тогда - ДобавлятьВМассивСозданныхПисем = Истина; - КонецЕсли; - - Возврат Письмо.Ссылка; - -КонецФункции - -Процедура ЗаполнитьПредметИКонтакты( - Письмо, - Предмет, - Папка, - ПомещатьПисьмоВПапкуПисьмаОснования) - - //----------------------------------------------------------------- - // Получим идентификаторы писем оснований - масИД = Новый Массив; - СтрИД = Письмо.ИдентификаторыОснований; - Пока Не ПустаяСтрока(СтрИД) Цикл - Поз = Найти(СтрИД, "<"); - Если Поз = 0 Тогда - Прервать; - КонецЕсли; - СтрИД = Сред(СтрИД, Поз+1); - - Поз = Найти(СтрИД, ">"); - Если Поз = 0 Тогда - Прервать; - КонецЕсли; - - ТекИД = СокрЛП(Лев(СтрИД, Поз-1)); - СтрИД = СокрЛП(Сред(СтрИД, Поз+1)); - - Если Не ПустаяСтрока(ТекИД) Тогда - масИД.Добавить(ТекИД); - КонецЕсли; - КонецЦикла; - - Если (масИД.Найти(Письмо.ИдентификаторОснования) = Неопределено) И - (НЕ ПустаяСтрока(Письмо.ИдентификаторОснования)) Тогда - масИД.Добавить(Письмо.ИдентификаторОснования); - КонецЕсли; - - табИД = СоздатьТаблицуСИдентификаторами(масИД); - - //----------------------------------------------------------------- - // Получим все основания - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("табИдентификаторы", табИД); - Запрос.Текст = - "ВЫБРАТЬ - | табИдентификаторы.Идентификатор - |ПОМЕСТИТЬ табИдентификаторы - |ИЗ - | &табИдентификаторы КАК табИдентификаторы - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ЭлектронноеПисьмоВходящее.Ссылка КАК Ссылка, - | ЭлектронноеПисьмоВходящее.Дата КАК Дата - |ПОМЕСТИТЬ ВсеЭлектронныеПисьма - |ИЗ - | табИдентификаторы КАК табИдентификаторы - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее - | ПО табИдентификаторы.Идентификатор = ЭлектронноеПисьмоВходящее.ИдентификаторСообщения - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ЭлектронноеПисьмоИсходящее.Ссылка, - | ЭлектронноеПисьмоИсходящее.Дата - |ИЗ - | табИдентификаторы КАК табИдентификаторы - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее - | ПО табИдентификаторы.Идентификатор = ЭлектронноеПисьмоИсходящее.ИдентификаторСообщения - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ВсеЭлектронныеПисьма.Ссылка, - | ВсеЭлектронныеПисьма.Дата КАК Дата - |ИЗ - | ВсеЭлектронныеПисьма КАК ВсеЭлектронныеПисьма - | - |УПОРЯДОЧИТЬ ПО - | Дата УБЫВ"; - - Выборка = Запрос.Выполнить().Выбрать(); - Письмо.ВзаимодействиеОснование = ?(Выборка.Следующий(), Выборка.Ссылка, Неопределено); - - //----------------------------------------------------------------- - // Получим предмет взаимодействия - Если ЗначениеЗаполнено(Письмо.ВзаимодействиеОснование) Тогда - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ПредметыПапкиВзаимодействий.Предмет, - | ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма КАК Папка, - | ЕСТЬNULL(ПапкиЭлектронныхПисем.ПредопределеннаяПапка, ИСТИНА) КАК ПредопределеннаяПапка - |ИЗ - | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем - | ПО ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма = ПапкиЭлектронныхПисем.Ссылка - |ГДЕ - | ПредметыПапкиВзаимодействий.Взаимодействие = &ВзаимодействиеОснование - | И ПапкиЭлектронныхПисем.Владелец = &УчетнаяЗапись"; - - Запрос.УстановитьПараметр("ВзаимодействиеОснование", Письмо.ВзаимодействиеОснование ); - Запрос.УстановитьПараметр("УчетнаяЗапись", Письмо.УчетнаяЗапись ); - - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - Предмет = Письмо.Ссылка; - Иначе - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - Предмет = Выборка.Предмет; - Если ПомещатьПисьмоВПапкуПисьмаОснования И Не Выборка.ПредопределеннаяПапка Тогда - Папка = Выборка.Папка; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - //----------------------------------------------------------------- - // Получим проставленные контакты в предмете - соотвКонтакты = ПолучитьСоответствиеКонтактовВПисьме(Письмо.ВзаимодействиеОснование); - - //----------------------------------------------------------------- - // Проставим контакты на основании предмета - НеопределенныеАдреса = Новый Массив; - УстановитьКонтактыВоВходящемПисьме(Письмо, соотвКонтакты, НеопределенныеАдреса); - - //----------------------------------------------------------------- - // Если есть неопределенные адреса, то поищем их по контактной информации - соотвКонтакты = НайтиАдресаЭлектроннойПочтыВКонтактнойИнформации(НеопределенныеАдреса); - Если соотвКонтакты.Количество() > 0 Тогда - УстановитьКонтактыВоВходящемПисьме(Письмо, соотвКонтакты, НеопределенныеАдреса); - КонецЕсли; - -КонецПроцедуры - -Функция НайтиАдресаЭлектроннойПочтыВКонтактнойИнформации(масАдреса) - - соотвКонтакты = Новый Соответствие; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | Контакты.Ссылка, - | Контакты.АдресЭП КАК АдресЭП - |ИЗ - | (ВЫБРАТЬ - | КонтактнаяИнформация.Ссылка КАК Ссылка, - | КонтактнаяИнформация.АдресЭП КАК АдресЭП - | ИЗ - | Справочник.Пользователи.КонтактнаяИнформация КАК КонтактнаяИнформация - | ГДЕ - | КонтактнаяИнформация.АдресЭП В(&масАдреса) - | И КонтактнаяИнформация.Тип = &Тип - | И НЕ(КонтактнаяИнформация.Ссылка.ПометкаУдаления) - |"; - - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); - Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл - - Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда - Продолжить; - КонецЕсли; - - Запрос.Текст = Запрос.Текст + " - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | КонтактнаяИнформация.Ссылка КАК Ссылка, - | КонтактнаяИнформация.АдресЭП КАК АдресЭП - |ИЗ - | Справочник." + ЭлементМассиваОписания.Имя + ".КонтактнаяИнформация КАК КонтактнаяИнформация - |ГДЕ - | КонтактнаяИнформация.АдресЭП В(&масАдреса) - | И КонтактнаяИнформация.Тип = &Тип - | И (НЕ КонтактнаяИнформация.Ссылка.ПометкаУдаления) - |"; - - КонецЦикла; - - Запрос.Текст = Запрос.Текст + ") КАК Контакты - |ИТОГИ ПО - | АдресЭП"; - - Запрос.УстановитьПараметр("масАдреса", масАдреса); - Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); - - Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); - Пока Выборка.Следующий() Цикл - ВыборкаПоСсылкам = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); - Если (ВыборкаПоСсылкам.Следующий()) Тогда - соотвКонтакты.Вставить(Врег(Выборка.АдресЭП), ВыборкаПоСсылкам.Ссылка); - КонецЕсли; - КонецЦикла; - - Возврат соотвКонтакты; - -КонецФункции - -Процедура УстановитьКонтактыВоВходящемПисьме(Письмо, соотвКонтакты, НеопределенныеАдреса) - - ОбработатьПоляКонтактИАдрес(Письмо.ОтправительАдрес, Письмо.ОтправительКонтакт, соотвКонтакты, НеопределенныеАдреса); - - Для Каждого Стр Из Письмо.ПолучателиПисьма Цикл - ОбработатьПоляКонтактИАдрес(Стр.Адрес, Стр.Контакт, соотвКонтакты, НеопределенныеАдреса); - КонецЦикла; - - Для Каждого Стр Из Письмо.ПолучателиКопий Цикл - ОбработатьПоляКонтактИАдрес(Стр.Адрес, Стр.Контакт, соотвКонтакты, НеопределенныеАдреса); - КонецЦикла; - - Для Каждого Стр Из Письмо.ПолучателиОтвета Цикл - ОбработатьПоляКонтактИАдрес(Стр.Адрес, Стр.Контакт, соотвКонтакты, НеопределенныеАдреса); - КонецЦикла; - -КонецПроцедуры - -Процедура ОбработатьПоляКонтактИАдрес(Адрес, Контакт, соотвКонтакты, НеопределенныеАдреса) - - Если ЗначениеЗаполнено(Контакт) И ТипЗнч(Контакт) <> Тип("Строка") Тогда - Возврат; - КонецЕсли; - - нКонтакт = соотвКонтакты.Получить(ВРег(Адрес)); - Если нКонтакт <> Неопределено И ТипЗнч(нКонтакт) <> Тип("Строка") Тогда - Контакт = нКонтакт; - Возврат; - КонецЕсли; - - //Контакт = Адрес; - Если НеопределенныеАдреса.Найти(Адрес) = Неопределено Тогда - НеопределенныеАдреса.Добавить(Адрес); - КонецЕсли; - -КонецПроцедуры - -Функция ПолучитьСоответствиеКонтактовВПисьме(Письмо) - - соотвКонтакты = Новый Соответствие; - Если Не ЗначениеЗаполнено(Письмо) Тогда - Возврат соотвКонтакты; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | Адреса.Адрес, - | Адреса.Контакт - |ИЗ - | (" + ?(ТипЗнч(Письмо) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее"), "", "ВЫБРАТЬ - | ПОДСТРОКА(ЭлектронноеПисьмоВходящее.ОтправительАдрес, 1, 100) КАК Адрес, - | ЭлектронноеПисьмоВходящее.ОтправительКонтакт КАК Контакт - | ИЗ - | Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее - | ГДЕ - | ЭлектронноеПисьмоВходящее.Ссылка = &Письмо - | - | ОБЪЕДИНИТЬ - | - | ") + "ВЫБРАТЬ - | Таблица.Адрес, - | Таблица.Контакт - | ИЗ - | Документ.ЭлектронноеПисьмоВходящее.ПолучателиПисьма КАК Таблица - | ГДЕ - | Таблица.Ссылка = &Письмо - | - | ОБЪЕДИНИТЬ - | - | ВЫБРАТЬ - | Таблица.Адрес, - | Таблица.Контакт - | ИЗ - | Документ.ЭлектронноеПисьмоВходящее.ПолучателиКопий КАК Таблица - | ГДЕ - | Таблица.Ссылка = &Письмо - | - | ОБЪЕДИНИТЬ - | - | ВЫБРАТЬ - | Таблица.Адрес, - | Таблица.Контакт - | ИЗ - | Документ.ЭлектронноеПисьмоВходящее.ПолучателиОтвета КАК Таблица - | ГДЕ - | Таблица.Ссылка = &Письмо) КАК Адреса - |ГДЕ - | (НЕ Адреса.Контакт ЕСТЬ NULL )"; - Запрос.УстановитьПараметр("Письмо", Письмо); - - Если ТипЗнч(Письмо) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, "ЭлектронноеПисьмоВходящее", "ЭлектронноеПисьмоИсходящее"); - КонецЕсли; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - Если ТипЗнч(Выборка.Контакт) <> Тип("Строка") Тогда - соотвКонтакты.Вставить(Выборка.Адрес, Выборка.Контакт); - КонецЕсли; - КонецЦикла; - - Возврат соотвКонтакты; - -КонецФункции - -Процедура ЗаписатьИдентификаторПолученногоПисьма(УчетнаяЗапись, Идентификатор, ДатаПолучения) - - Запись = РегистрыСведений.ИдентификаторыПолученныхЭлектронныхПисем.СоздатьМенеджерЗаписи(); - Запись.УчетнаяЗапись = УчетнаяЗапись; - Запись.Идентификатор = Идентификатор; - Запись.ДатаПолучения = ДатаПолучения; - Запись.Записать(); - -КонецПроцедуры - -Процедура ЗаписатьНеобходимостьОбработкиУведомленияОПрочтении(Письмо) - - Запись = РегистрыСведений.УведомленияОПрочтении.СоздатьМенеджерЗаписи(); - Запись.Письмо = Письмо; - Запись.Записать(); - -КонецПроцедуры - -Процедура ЗаполнитьДокументЭлектронноеПисьмоВходящее(Письмо, Сообщение) - - Письмо.Важность = ПолучитьВажностьЭлектронногоПисьма(Сообщение.Важность); - Письмо.Дата = ?(Сообщение.ДатаОтправления = Дата(1,1,1), ТекущаяДатаСеанса(), Сообщение.ДатаОтправления); - Письмо.ДатаПолучения = Сообщение.ДатаПолучения; - Письмо.ВнутреннийЗаголовок = Сообщение.Заголовок; - Письмо.ИдентификаторНаСервере = ?(Сообщение.Идентификатор.Количество() = 0, "", Сообщение.Идентификатор[0]); - Письмо.ИдентификаторСообщения = Сообщение.ИдентификаторСообщения; - Письмо.Кодировка = Сообщение.Кодировка; - Письмо.УведомитьОДоставке = Сообщение.УведомитьОДоставке; - Письмо.УведомитьОПрочтении = Сообщение.УведомитьОПрочтении; - - Если ТипЗнч(Сообщение.Отправитель) = Тип("ИнтернетПочтовыйАдрес") Тогда - Письмо.ОтправительАдрес = Сообщение.Отправитель.Адрес; - Иначе - Письмо.ОтправительАдрес = Сообщение.Отправитель; - КонецЕсли; - Письмо.ОтправительПредставление = - ?(ПустаяСтрока(Сообщение.ИмяОтправителя), Сообщение.Отправитель.Адрес, Сообщение.ИмяОтправителя); - - Письмо.Размер = Сообщение.Размер; - Письмо.Тема = Сообщение.Тема; - - УстановитьТекстПисьма(Письмо, Сообщение); - - ЗаполнитьИнтернетПочтовыеАдреса(Письмо.ПолучателиКопий, Сообщение.Копии); - ЗаполнитьИнтернетПочтовыеАдреса(Письмо.ПолучателиОтвета, Сообщение.ОбратныйАдрес); - ЗаполнитьИнтернетПочтовыеАдреса(Письмо.ПолучателиПисьма, Сообщение.Получатели); - ЗаполнитьИнтернетПочтовыеАдреса(Письмо.АдресаУведомленияОПрочтении,Сообщение.АдресаУведомленияОПрочтении); - - Письмо.ИдентификаторОснования = ИзПисьмаПолучитьИдентификаторОснования(Сообщение); - Письмо.ИдентификаторыОснований = Сообщение.ПолучитьПолеЗаголовка("References", "Строка"); - - Для каждого Вложение Из Сообщение.Вложения Цикл - Если ПустаяСтрока(Вложение.Идентификатор) И ТипЗнч(Вложение.Данные) = Тип("ДвоичныеДанные") Тогда - Письмо.ЕстьВложения = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Процедура ЗаписатьВложениеЭлектронногоПисьма(Объект, Вложение,МассивПодписей,КоличествоПустыхИменВоВложениях) - - Размер = 0; - Если ТипЗнч(Вложение.Данные) = Тип("ДвоичныеДанные") Тогда - Размер = Вложение.Данные.Размер(); - Иначе - //А может быть и тип ИнтернетПочтовоеСообщение. На данный момент не поддерживаем. - Возврат; - КонецЕсли; - - Адрес = ПоместитьВоВременноеХранилище(Вложение.Данные, ""); - - ВложениеПисьмаСсылка = ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища( - Объект, Адрес, Вложение.ИмяФайла, Размер,КоличествоПустыхИменВоВложениях); - - ЕстьПодписи = (МассивПодписей.Количество() > 0); - ЭтоОтображаемыйФайл = НЕ ПустаяСтрока(Вложение.Идентификатор); - - Если ЕстьПодписи Или ЭтоОтображаемыйФайл Тогда - - ВложениеПисьмаОбъект = ВложениеПисьмаСсылка.ПолучитьОбъект(); - - Если ЕстьПодписи Тогда - - Для Каждого ПодписьВложения Из МассивПодписей Цикл - ЭЦП = ВложениеПисьмаОбъект.ЭлектронныеЦифровыеПодписи.Добавить(); - - ДанныеПодписи = ЭлектроннаяЦифроваяПодпись.ПрочитатьДанныеПодписи(ПодписьВложения.Данные); - Если ДанныеПодписи <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(ЭЦП, ДанныеПодписи); - КонецЕсли; - - ЭЦП.Подпись = Новый ХранилищеЗначения(ПодписьВложения.Данные); - ЭЦП.Комментарий = НСтр("ru = 'Вложение электронного письма'"); - ЭЦП.ДатаПодписи = ТекущаяДатаСеанса(); - КонецЦикла; - - ВложениеПисьмаОбъект.ПодписанЭЦП = Истина; - - КонецЕсли; - - Если ЭтоОтображаемыйФайл Тогда - - ВложениеПисьмаОбъект.ИДФайлаЭлектронногоПисьма = Вложение.Идентификатор; - - КонецЕсли; - - ВложениеПисьмаОбъект.Записать(); - - КонецЕсли; - - УдалитьИзВременногоХранилища(Адрес); - -КонецПроцедуры - -Процедура ЗаполнитьИнтернетПочтовыеАдреса(ТабличнаяЧасть, Адреса) - - Для Каждого Адрес Из Адреса Цикл - новСтр = ТабличнаяЧасть.Добавить(); - новСтр.Адрес = Адрес.Адрес; - новСтр.Представление = Адрес.ОтображаемоеИмя; - КонецЦикла; - -КонецПроцедуры - -Функция ИзПисьмаПолучитьИдентификаторОснования(Сообщение) - - СтрИД = СокрЛП(Сообщение.ПолучитьПолеЗаголовка("In-Reply-To", "Строка")); - - Поз = Найти(СтрИД, "<"); - Если Поз <> 0 Тогда - СтрИД = Сред(СтрИД, Поз+1); - КонецЕсли; - - Поз = Найти(СтрИД, ">"); - Если Поз <> 0 Тогда - СтрИД = Лев(СтрИД, Поз-1); - КонецЕсли; - - Возврат СтрИД; - -КонецФункции - -Процедура УстановитьТекстПисьма(Письмо, Сообщение) - - ТекстHTML = ""; - ТекстПростой = ""; - ТекстРазмеченный = ""; - - Для Каждого ТекстПочтовогоСообщения Из Сообщение.Тексты Цикл - Если ТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.HTML Тогда - ТекстHTML = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ТекстПочтовогоСообщения.Текст); - - ИначеЕсли ТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст Тогда - ТекстПростой = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ТекстПочтовогоСообщения.Текст); - - ИначеЕсли ТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.РазмеченныйТекст Тогда - ТекстРазмеченный = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ТекстПочтовогоСообщения.Текст); - - КонецЕсли; - КонецЦикла; - - Если ТекстHTML <> "" Тогда - Письмо.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML; - Письмо.ТекстHTML = ТекстHTML; - Письмо.Текст = ?(ТекстПростой <> "", ТекстПростой, ПолучитьПростойТекстИзHTML(ТекстHTML)); - - ИначеЕсли ТекстРазмеченный <> "" Тогда - Письмо.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.РазмеченныйТекст; - Письмо.Текст = ТекстРазмеченный; - - Иначе - Письмо.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст; - Письмо.Текст = ТекстПростой; - - КонецЕсли; - -КонецПроцедуры - -Функция ПолучитьВажностьЭлектронногоПисьма(Важность) - - Если (Важность = ВажностьИнтернетПочтовогоСообщения.Высокая) ИЛИ - (Важность = ВажностьИнтернетПочтовогоСообщения.Наивысшая) Тогда - - Возврат Перечисления.ВариантыВажностиВзаимодействия.Высокая; - - ИначеЕсли (Важность = ВажностьИнтернетПочтовогоСообщения.Наименьшая) ИЛИ - (Важность = ВажностьИнтернетПочтовогоСообщения.Низкая) Тогда - - Возврат Перечисления.ВариантыВажностиВзаимодействия.Низкая; - - Иначе - - Возврат Перечисления.ВариантыВажностиВзаимодействия.Обычная; - - КонецЕсли; - -КонецФункции - -Функция ПолучитьПростойТекстИзHTML(ТекстHTML) - - Построитель = Новый ПостроительDOM; - ЧтениеHTML = Новый ЧтениеHTML; - ЧтениеHTML.УстановитьСтроку(ТекстHTML); - ДокументHTML = Построитель.Прочитать(ЧтениеHTML); - - Возврат ДокументHTML.Тело.ТекстовоеСодержимое; - - Возврат ""; - -КонецФункции - -Процедура СоздатьОтправитьУведомлениеОПрочтении(Выборка,ЭтоРегламентноеЗадание,Соединение = Неопределено) - - ПараметрыПисьма = Новый Структура; - - Взаимодействия.ДобавитьВПараметрАдресатов(Выборка, ПараметрыПисьма, "Кому", "АдресаУведомленияОПрочтении"); - - ПараметрыПисьма.Вставить("Тема",НСтр("ru = 'Уведомление о прочтении / '") + "Reading Confirmation"); - ПараметрыПисьма.Вставить("Тело",СформироватьТекстУведомленияОПрочтении(Выборка)); - ПараметрыПисьма.Вставить("Кодировка","UTF-8"); - ПараметрыПисьма.Вставить("Важность", ВажностьИнтернетПочтовогоСообщения.Обычная); - ПараметрыПисьма.Вставить("ТипТекста", Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст); - ПараметрыПисьма.Вставить("ОбрабатыватьТексты",Ложь); - - Попытка - ЭлектроннаяПочта.ОтправитьПочтовоеСообщение(Выборка.УчетнаяЗапись, ПараметрыПисьма, Соединение); - Исключение - - Если ЭтоРегламентноеЗадание Тогда - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время регламентной отправки уведомления о прочтении электронного письма %1 произошла ошибка - |%2'"), Выборка.ПредставлениеПисьма,ОписаниеОшибки()); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщенияОбОшибке); - - Иначе - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время отправки уведомления о прочтении электронного письма %1 произошла ошибка - |%2'"), Выборка.ПредставлениеПисьма,КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке,Выборка.Письмо); - - КонецЕсли; - - Возврат; - КонецПопытки; - - УстановитьПризнакОтправкиУведомления(Выборка.Письмо,Ложь); - -КонецПроцедуры - -Функция СформироватьТекстУведомленияОПрочтении(Выборка) - - ТекстУведомленияАнглийский = " - |Your message from " + Выборка.ОтправительПредставление + "<" + Выборка.ОтправительАдрес + "> - |Subject: " + Выборка.Тема + " - |Sent " + Выборка.Дата + " - |Has been read " + Выборка.ДатаПрочтения + " - |By Recipient " +Выборка.ИмяПользователя + "<" + Выборка.АдресЭлектроннойПочты + ">"; - - ЛокализованноеУведомление = Нстр("ru=' - |Сообщение от %1 < %2 > - |Тема: %3 - |Отправленное %4 - |Было прочитано %5 - |Получателем %6 <%7>'"); - - ЛокализованноеУведомление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЛокализованноеУведомление, - Выборка.ОтправительПредставление, - Выборка.ОтправительАдрес, - Выборка.Тема, - Выборка.Дата, - Выборка.ДатаПрочтения, - Выборка.ИмяПользователя, - Выборка.АдресЭлектроннойПочты); - - Возврат ЛокализованноеУведомление + Символы.ПС + Символы.ПС + ТекстУведомленияАнглийский; - -КонецФункции - -Функция ПолучитьДатуСтрокойСоСмещениемGMT(Дата) - - Запрос = Новый Запрос("ВЫБРАТЬ - | РАЗНОСТЬДАТ(&УниверсальноеВремя, &МестноеВремя, МИНУТА) КАК РазностьДат"); - Запрос.УстановитьПараметр("МестноеВремя",Дата); - Запрос.УстановитьПараметр("УниверсальноеВремя",УниверсальноеВремя(Дата)); - - Выборка = Запрос.Выполнить().Выбрать(); - Выборка.Следующий(); - - СмещениеВремениВМинутах = Выборка.РазностьДат; - ЧасыСмещения = Цел(СмещениеВремениВМинутах/60); - СтрокаЧасыСмещения = ?(ЧасыСмещения > 0,"+","") + Формат(ЧасыСмещения,"ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН="); - МинутыСмещения = СмещениеВремениВМинутах%60; - Если МинутыСмещения < 0 Тогда - МинутыСмещения = + МинутыСмещения; - КонецЕсли; - СтрокаМинутыСмещения = Формат(МинутыСмещения,"ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН="); - - Возврат Формат(Дата,"ДЛФ=DT") + " GMT " + СтрокаЧасыСмещения + СтрокаМинутыСмещения; - - -КонецФункции - -Процедура СоздатьПредопределеннуюПапкуЭлектронныхПисем(Наименование,Владелец) - - Папка = Справочники.ПапкиЭлектронныхПисем.СоздатьЭлемент(); - Папка.УстановитьНовыйКод(); - Папка.ОбменДанными.Загрузка = Истина; - Папка.ПредопределеннаяПапка = Истина; - Папка.Наименование = Наименование; - Папка.Владелец = Владелец; - Папка.Записать(); - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ - -//Функция возвращает таблицу имен кодировок +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Взаимодействия" // -//Параметры -// НЕТ -// -//Возвращаемое значение: -// Таблица значений -// -Функция ПолучитьСписокКодировок() Экспорт +//////////////////////////////////////////////////////////////////////////////// - СписокКодировок = Новый СписокЗначений; - - СписокКодировок.Добавить("ibm852", "ibm852 (Центральноевропейская DOS)"); - СписокКодировок.Добавить("ibm866", "ibm866 (Кириллица DOS)"); - СписокКодировок.Добавить("iso-8859-1", "iso-8859-1 (Западноевропейская ISO)"); - СписокКодировок.Добавить("iso-8859-2", "iso-8859-2 (Центральноевропейская ISO)"); - СписокКодировок.Добавить("iso-8859-3", "iso-8859-3 (Латиница 3 ISO)"); - СписокКодировок.Добавить("iso-8859-4", "iso-8859-4 (Балтийская ISO)"); - СписокКодировок.Добавить("iso-8859-5", "iso-8859-5 (Кириллица ISO)"); - СписокКодировок.Добавить("iso-8859-7", "iso-8859-7 (Греческая ISO)"); - СписокКодировок.Добавить("iso-8859-9", "iso-8859-9 (Турецкая ISO)"); - СписокКодировок.Добавить("iso-8859-15", "iso-8859-15 (Латиница 9 ISO)"); - СписокКодировок.Добавить("koi8-r", "koi8-r (Кириллица KOI8-R)"); - СписокКодировок.Добавить("koi8-u", "koi8-u (Кириллица KOI8-U)"); - СписокКодировок.Добавить("us-ascii", "us-ascii США"); - СписокКодировок.Добавить("utf-8", "utf-8 (Юникод UTF-8)"); - СписокКодировок.Добавить("windows-1250", "windows-1250 (Центральноевропейская Windows)"); - СписокКодировок.Добавить("windows-1251", "windows-1251 (Кириллица Windows)"); - СписокКодировок.Добавить("windows-1252", "windows-1252 (Западноевропейская Windows)"); - СписокКодировок.Добавить("windows-1253", "windows-1253 (Греческая Windows)"); - СписокКодировок.Добавить("windows-1254", "windows-1254 (Турецкая Windows)"); - СписокКодировок.Добавить("windows-1257", "windows-1257 (Балтийская Windows)"); - - Возврат СписокКодировок; +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -КонецФункции - -//Возвращает важность интернет почтового сообщения в зависимости от переданного значения -//перечисления ВариантыВажностиВзаимодействия. -// -//Параметры -// ВажностьВзаимодействия - Перечисление.ВариантыВажностиВзаимодействия -// -//Возвращаемое значение: -// ВажностьИнтернетПочтовогоСообщения -// -Функция ПолучитьВажность(ВажностьВзаимодействия) Экспорт - - Если ВажностьВзаимодействия = Перечисления.ВариантыВажностиВзаимодействия.Высокая Тогда - Возврат ВажностьИнтернетПочтовогоСообщения.Высокая; - ИначеЕсли ВажностьВзаимодействия = Перечисления.ВариантыВажностиВзаимодействия.Низкая Тогда - Возврат ВажностьИнтернетПочтовогоСообщения.Низкая; - Иначе - Возврат ВажностьИнтернетПочтовогоСообщения.Обычная; - КонецЕсли; - -КонецФункции - -//Получает вложения электронного письма -// -//Параметры -// Письмо - ДокументСсылка - документ электронное письмо для которого необходимо получить вложения. -// -//Возвращаемое значение: -// ТаблицаЗначений - таблица значений, содержащая информацию о вложениях. -// -Функция ПолучитьВложенияЭлектронногоПисьма(Письмо,ФормироватьРазмерПредставление = Ложь) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ИмяОбъектаМетаданных = ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо); - Если ИмяОбъектаМетаданных = Неопределено Тогда - Возврат Новый ТаблицаЗначений; - КонецЕсли; - - Если ФормироватьРазмерПредставление Тогда - ТекстРазмерПредставление = ", - |ВЫРАЗИТЬ("""" КАК СТРОКА(20)) КАК РазмерПредставление"; - Иначе - ТекстРазмерПредставление = ""; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Файлы.Ссылка, - | Файлы.ИндексКартинки, - | Файлы.Размер, - | Файлы.ИДФайлаЭлектронногоПисьма, - | Файлы.ПодписанЭЦП, - | ВЫБОР - | КОГДА Файлы.Расширение = &ПустаяСтрока - | ТОГДА Файлы.Наименование - | ИНАЧЕ Файлы.Наименование + ""."" + Файлы.Расширение - | КОНЕЦ КАК ИмяФайла" + ТекстРазмерПредставление + " - |ИЗ - | Справочник." + ИмяОбъектаМетаданных + " КАК Файлы - |ГДЕ - | Файлы.ВладелецФайла = &Письмо - | И НЕ Файлы.ПометкаУдаления"; - - Запрос.УстановитьПараметр("Письмо", Письмо); - Запрос.УстановитьПараметр("ПустаяСтрока",""); - - ТаблицаКВозврату = Запрос.Выполнить().Выгрузить(); - - Если ФормироватьРазмерПредставление Тогда - Для каждого СтрокаТаблицы Из ТаблицаКВозврату Цикл - - СтрокаТаблицы.РазмерПредставление = - ВзаимодействияКлиентСервер.ПолучитьСтроковоеПредставлениеРазмераФайла(СтрокаТаблицы.Размер); - - КонецЦикла; - КонецЕсли; - - Возврат ТаблицаКВозврату; - -КонецФункции - -//Возвращает имя события журнала регистрации посистемы Взаимодействия -Функция СобытиеЖурналаРегистрации() Экспорт - - Возврат НСтр("ru = 'Взаимодействия'"); - -КонецФункции - -//Записывает вложение электронного письма, расположенное во временном хранилище в файл. -Функция ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища( - Письмо, - АдресВоВременномХранилище, - ИмяФайла, - Размер, - КоличествоПустыхИменВоВложениях = 0) Экспорт - - РасширениеБезТочки = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ИмяФайла); - ИмяБезРасширения = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла); - Если ПустаяСтрока(ИмяБезРасширения) Тогда - - ИмяФайлаБезРасширения = - НСтр("ru = 'Вложение без имени'") + ?(КоличествоПустыхИменВоВложениях = 0,""," " + Строка(КоличествоПустыхИменВоВложениях + 1)); - КоличествоПустыхИменВоВложениях = КоличествоПустыхИменВоВложениях + 1; - - Иначе - ИмяБезРасширения = - ?(РасширениеБезТочки = "", - ИмяБезРасширения, - Лев(ИмяБезРасширения, СтрДлина(ИмяБезРасширения) - СтрДлина(РасширениеБезТочки) - 1)); - КонецЕсли; - ВремяИзменения = ТекущаяДатаСеанса(); - - Возврат ПрисоединенныеФайлы.ДобавитьФайл( - Письмо, - ИмяБезРасширения, - РасширениеБезТочки, - ВремяИзменения, - ВремяИзменения, - АдресВоВременномХранилище, - ""); - -КонецФункции - -//Записывает вложение электронного письма, копируя вложение другого письма. -Функция ЗаписатьВложениеЭлектронногоПисьмаСкопировавВложениеДругогоПисьма( - Письмо, - СсылкаНаФайл, - УникальныйИдентификаторФормы) Экспорт - - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(СсылкаНаФайл, УникальныйИдентификаторФормы, Истина); - - Возврат ПрисоединенныеФайлы.ДобавитьФайл( - Письмо, - ДанныеФайла.Наименование, - ДанныеФайла.Расширение, - ДанныеФайла.ДатаМодификацииУниверсальная, - ДанныеФайла.ДатаМодификацииУниверсальная, - ДанныеФайла.СсылкаНаДвоичныеДанныеФайла, - ""); - -КонецФункции - -//Устанавливает или снимает пометку удаления у вложений электронного письма -// -//Параметры -// Письмо - ДокументСсылка - письмо, для вложений которого будут выполнены действия. -// ПометкаУдаления - Булево - признак необходимости установить или снять пометку. -// -Процедура УстановитьПометкуУдаленияУВложенийПисьма(Письмо, ПометкаУдаления) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ИмяОбъектаМетаданных = ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо); - Если ИмяОбъектаМетаданных = Неопределено Тогда - Возврат; - КонецЕсли; - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | Файлы.Ссылка - |ИЗ - | Справочник." + ИмяОбъектаМетаданных + " КАК Файлы - |ГДЕ - | Файлы.ПометкаУдаления <> &ПометкаУдаления - | И Файлы.ВладелецФайла = &ВладелецФайла - |"); - Запрос.УстановитьПараметр("ПометкаУдаления", ПометкаУдаления); - Запрос.УстановитьПараметр("ВладелецФайла", Письмо); - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - Объект = Выборка.Ссылка.ПолучитьОбъект(); - Объект.УстановитьПометкуУдаления(ПометкаУдаления, Истина); - КонецЦикла; - -КонецПроцедуры - -//Удаляет вложения электронного письма -// -//Параметры -// Письмо - ДокументСсылка - письмо, вложения которого будут удалены. -// -Процедура УдалитьВложенияУПисьма(Письмо) Экспорт - - ИмяОбъектаМетаданных = ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо); - Если ИмяОбъектаМетаданных = Неопределено Тогда - Возврат; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Файлы.Ссылка - |ИЗ - | Справочник." + ИмяОбъектаМетаданных + " КАК Файлы - |ГДЕ - | Файлы.ВладелецФайла = &ВладелецФайла"; - Запрос.УстановитьПараметр("ВладелецФайла", Письмо); - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - Объект = Выборка.Ссылка.ПолучитьОбъект(); - Объект.Удалить(); - КонецЦикла; - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Получение и отправка писем //Выполняет процедуру отправки и получения электронных писем. -// Процедура ПолучениеИОтправкаЭлектронныхПисем() Экспорт УстановитьПривилегированныйРежим(Истина); @@ -1492,27 +260,28 @@ //Отправка писем Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК УчетнаяЗапись, - | ЭлектронноеПисьмоИсходящее.Ссылка, - | ПРЕДСТАВЛЕНИЕ(ЭлектронноеПисьмоИсходящее.Ссылка) КАК ПредставлениеПисьма, - | ЭлектронноеПисьмоИсходящее.УдалятьПослеОтправки, - | ЕСТЬNULL(ПапкиЭлектронныхПисем.ПредопределеннаяПапка, ИСТИНА) КАК ТребуетсяОпределениеПапки - |ИЗ - | Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты - | ПО ЭлектронноеПисьмоИсходящее.УчетнаяЗапись = УчетныеЗаписиЭлектроннойПочты.Ссылка - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем - | ПО ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма = ПапкиЭлектронныхПисем.Ссылка - | ПО ПредметыПапкиВзаимодействий.Взаимодействие = ЭлектронноеПисьмоИсходящее.Ссылка - |ГДЕ - | (НЕ ЭлектронноеПисьмоИсходящее.ПометкаУдаления) - | И ЭлектронноеПисьмоИсходящее.СтатусПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее) - | И ЭлектронноеПисьмоИсходящее.Автор = &Пользователь - | И УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки - |ИТОГИ ПО - | УчетнаяЗапись"; + Запрос.Текст = " + |ВЫБРАТЬ + | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК УчетнаяЗапись, + | ЭлектронноеПисьмоИсходящее.Ссылка, + | ПРЕДСТАВЛЕНИЕ(ЭлектронноеПисьмоИсходящее.Ссылка) КАК ПредставлениеПисьма, + | ЭлектронноеПисьмоИсходящее.УдалятьПослеОтправки, + | ЕСТЬNULL(ПапкиЭлектронныхПисем.ПредопределеннаяПапка, ИСТИНА) КАК ТребуетсяОпределениеПапки + |ИЗ + | Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + | ПО ЭлектронноеПисьмоИсходящее.УчетнаяЗапись = УчетныеЗаписиЭлектроннойПочты.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем + | ПО ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма = ПапкиЭлектронныхПисем.Ссылка + | ПО ПредметыПапкиВзаимодействий.Взаимодействие = ЭлектронноеПисьмоИсходящее.Ссылка + |ГДЕ + | (НЕ ЭлектронноеПисьмоИсходящее.ПометкаУдаления) + | И ЭлектронноеПисьмоИсходящее.СтатусПисьма = ЗНАЧЕНИЕ(Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее) + | И ЭлектронноеПисьмоИсходящее.Автор = &Пользователь + | И УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки + |ИТОГИ ПО + | УчетнаяЗапись"; Запрос.УстановитьПараметр("Пользователь",ТекущийПользователь); @@ -1633,10 +402,1323 @@ Соединение.Отключиться(); КонецЦикла; - КонецПроцедуры +Процедура ПолучитьПисьма( + УчетнаяЗапись, + ЕстьОшибки, + Получено, + МассивСозданныхПисем, + ПомещатьПисьмоВПапкуПисьмаОснования) + + //----------------------------------------------------------------- + // Сформируем почтовый профиль и подключимся к почтовому серверу + Профиль = ЭлектроннаяПочта.СформироватьИнтернетПрофиль(УчетнаяЗапись); + Почта = Новый ИнтернетПочта; + Попытка + Почта.Подключиться(Профиль); + Исключение + + ЕстьОшибки = Истина; + + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Во время подключения к учетной записи %1 произошла ошибка + |%2'"), УчетнаяЗапись,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, , , + ТекстСообщенияОбОшибке); + + Возврат; + + КонецПопытки; + + //----------------------------------------------------------------- + // Получим идентификаторы сообщений на сервере + Идентификаторы = Почта.ПолучитьИдентификаторы(); + Если Идентификаторы.Количество() = 0 Тогда + // если на сервере сообщений нет, то удалим все записи по учетной записи в регистре сведений ИдентификаторыПолученныхЭлектронныхПисем + УдалитьИдентификаторыВсехРанееПолученныхПисем(УчетнаяЗапись); + Почта.Отключиться(); + Возврат; + КонецЕсли; + + //----------------------------------------------------------------- + // Определим какие сообщения нужно получать + ИдЗагружать = ПолучитьИдентификаторыПисемДляЗагрузки(Идентификаторы, УчетнаяЗапись); + Получено = 0; + Если ИдЗагружать.Количество() <> 0 Тогда + ОтветственныйЗаОбработкуПисем = Взаимодействия.ПолучитьОтвественногоЗаОбработкуПисьмаПоУмолчанию(УчетнаяЗапись); + // Получим нужные сообщения + Сообщения = Почта.Выбрать(Ложь, ИдЗагружать); + + КоличествоОшибокПриЗаписи = 0; + // Запишем их + Для Каждого Сообщение Из Сообщения Цикл + ДобавлятьВМассивСозданныхПисем = ЛОЖЬ; + Попытка + СозданноеПисьмо = ЗаписатьВходящееЭлектронноеПисьмо( + УчетнаяЗапись, + Сообщение, + ОтветственныйЗаОбработкуПисем, + ПомещатьПисьмоВПапкуПисьмаОснования, + ДобавлятьВМассивСозданныхПисем); + Исключение + + ОтменитьТранзакцию(); + ЕстьОшибки = Истина; + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При получении письма %1 от %2, отправленное c адреса %3 произошла ошибка + |%4'"), + Сообщение.Тема, + Сообщение.ДатаОтправления, + Сообщение.Отправитель.Адрес, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, , , + ТекстСообщенияОбОшибке); + + КоличествоОшибокПриЗаписи = КоличествоОшибокПриЗаписи + 1; + Для Каждого ИдентификаторСообщения Из Сообщение.Идентификатор Цикл + ИндексИдентификатораВМассиве = Идентификаторы.Найти(ИдентификаторСообщения); + Если ИндексИдентификатораВМассиве <> Неопределено Тогда + Идентификаторы.Удалить(ИндексИдентификатораВМассиве); + КонецЕсли; + Продолжить; + КонецЦикла; + КонецПопытки; + Если ДобавлятьВМассивСозданныхПисем Тогда + МассивСозданныхПисем.Добавить(СозданноеПисьмо); + КонецЕсли; + КонецЦикла; + + Получено = Сообщения.Количество() - КоличествоОшибокПриЗаписи; + + КонецЕсли; + + //----------------------------------------------------------------- + // Удалим ненужные сообщения на сервере + ОставлятьКопии = УчетнаяЗапись.ОставлятьКопииСообщенийНаСервере; + ОставлятьДней = УчетнаяЗапись.ПериодХраненияСообщенийНаСервере; + Если Не ОставлятьКопии Тогда + // удалять все + МассивКУдалению = Идентификаторы; + УдалятьВсе = Истина; + Иначе + УдалятьВсе = Ложь; + Если ОставлятьДней > 0 Тогда + МассивКУдалению = ПолучитьИдентификаторыПисемДляУдаленияНаСервере( + Идентификаторы, УчетнаяЗапись, + ТекущаяДатаСеанса() - ОставлятьДней * 24 * 60 * 60); + Иначе + МассивКУдалению = Новый Массив; + КонецЕсли; + КонецЕсли; + + Если МассивКУдалению.Количество() <> 0 Тогда + Почта.УдалитьСообщения(МассивКУдалению); + КонецЕсли; + + //----------------------------------------------------------------- + // Удалим ненужные идентификаторы в регистре сведений + Если УдалятьВсе Тогда + УдалитьИдентификаторыВсехРанееПолученныхПисем(УчетнаяЗапись); + Иначе + УдалитьИдентификаторыРанееПолученныхПисем(УчетнаяЗапись, Идентификаторы, МассивКУдалению); + КонецЕсли; + + //----------------------------------------------------------------- + // Отключимся от почтового сервера + Почта.Отключиться(); + +КонецПроцедуры + +Процедура УдалитьИдентификаторыВсехРанееПолученныхПисем(УчетнаяЗапись) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИдентификаторыПолученныхЭлектронныхПисем.Идентификатор + |ИЗ + | РегистрСведений.ИдентификаторыПолученныхЭлектронныхПисем КАК ИдентификаторыПолученныхЭлектронныхПисем + |ГДЕ + | ИдентификаторыПолученныхЭлектронныхПисем.УчетнаяЗапись = &УчетнаяЗапись"; + Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); + + Если НЕ Запрос.Выполнить().Пустой() Тогда + Набор = РегистрыСведений.ИдентификаторыПолученныхЭлектронныхПисем.СоздатьНаборЗаписей(); + Набор.Отбор.УчетнаяЗапись.Установить(УчетнаяЗапись); + Набор.Записать(); + КонецЕсли; + +КонецПроцедуры + +Процедура УдалитьИдентификаторыРанееПолученныхПисем(УчетнаяЗапись, ИдентификаторыНаСервере, ИдентификаторыУдалять) + + // Получим список идентификаторов которые не нужно удалять + ИдентификаторыКУдалению = Новый Соответствие; + Для Каждого Элемент Из ИдентификаторыУдалять Цикл + ИдентификаторыКУдалению.Вставить(Элемент, Истина); + КонецЦикла; + + ИденитификаторыОставляем = Новый Массив; + Для Каждого Элемент Из ИдентификаторыНаСервере Цикл + Если ИдентификаторыКУдалению.Получить(Элемент) <> Истина Тогда + ИденитификаторыОставляем.Добавить(Элемент); + КонецЕсли; + КонецЦикла; + + // Получим идентификаторы которые нужно удалить, те которые есть в регистре, но не нужно оставлять + ТаблицаИдентификаторов = СоздатьТаблицуСИдентификаторами(ИденитификаторыОставляем); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТаблицаИдентификаторов", ТаблицаИдентификаторов); + Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицаИдентификаторов.Идентификатор + |ПОМЕСТИТЬ ТаблицаИдентификаторов + |ИЗ + | &ТаблицаИдентификаторов КАК ТаблицаИдентификаторов + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ИдентификаторыПолученныхЭлектронныхПисем.Идентификатор + |ИЗ + | РегистрСведений.ИдентификаторыПолученныхЭлектронныхПисем КАК ИдентификаторыПолученныхЭлектронныхПисем + | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаИдентификаторов КАК ТаблицаИдентификаторов + | ПО ТаблицаИдентификаторов.Идентификатор = ИдентификаторыПолученныхЭлектронныхПисем.Идентификатор + | И (ИдентификаторыПолученныхЭлектронныхПисем.УчетнаяЗапись = &УчетнаяЗапись) + |ГДЕ + | ТаблицаИдентификаторов.Идентификатор ЕСТЬ NULL "; + + МассивКУдалению = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Идентификатор"); + + + // Удалим все ненужные идентификаторы + Для Каждого Идентификатор Из МассивКУдалению Цикл + Набор = РегистрыСведений.ИдентификаторыПолученныхЭлектронныхПисем.СоздатьНаборЗаписей(); + Набор.Отбор.УчетнаяЗапись.Установить(УчетнаяЗапись); + Набор.Отбор.Идентификатор.Установить(Идентификатор); + Набор.Записать(); + КонецЦикла; + +КонецПроцедуры + +Функция СоздатьТаблицуСИдентификаторами(Идентификаторы) + + ТаблицаИдентификаторов = Новый ТаблицаЗначений; + ТаблицаИдентификаторов.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка",,, Новый КвалификаторыСтроки(100))); + Для Каждого Идентификатор Из Идентификаторы Цикл + НоваяСтрока = ТаблицаИдентификаторов.Добавить(); + НоваяСтрока.Идентификатор = Идентификатор; + КонецЦикла; + + Возврат ТаблицаИдентификаторов; + +КонецФункции + +Функция ПолучитьИдентификаторыПисемДляЗагрузки(Идентификаторы, УчетнаяЗапись) + + // Получим список сообщений которые не были раньше получены + ТаблицаИдентификаторов = СоздатьТаблицуСИдентификаторами(Идентификаторы); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТаблицаИдентификаторов", ТаблицаИдентификаторов); + Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицаИдентификаторов.Идентификатор + |ПОМЕСТИТЬ ТаблицаИдентификаторов + |ИЗ + | &ТаблицаИдентификаторов КАК ТаблицаИдентификаторов + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ТаблицаИдентификаторов.Идентификатор + |ИЗ + | ТаблицаИдентификаторов КАК ТаблицаИдентификаторов + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИдентификаторыПолученныхЭлектронныхПисем КАК ИдентификаторыПолученныхЭлектронныхПисем + | ПО ТаблицаИдентификаторов.Идентификатор = ИдентификаторыПолученныхЭлектронныхПисем.Идентификатор + | И (ИдентификаторыПолученныхЭлектронныхПисем.УчетнаяЗапись = &УчетнаяЗапись) + |ГДЕ + | ИдентификаторыПолученныхЭлектронныхПисем.УчетнаяЗапись ЕСТЬ NULL "; + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Идентификатор"); + +КонецФункции + +Функция ПолучитьИдентификаторыПисемДляУдаленияНаСервере(Идентификаторы, УчетнаяЗапись, ДатаПоКоторуюУдалять) + + ТаблицаИдентификаторов = СоздатьТаблицуСИдентификаторами(Идентификаторы); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТаблицаИдентификаторов", ТаблицаИдентификаторов); + Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); + Запрос.УстановитьПараметр("ДатаПолучения", ДатаПоКоторуюУдалять); + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицаИдентификаторов.Идентификатор + |ПОМЕСТИТЬ ТаблицаИдентификаторов + |ИЗ + | &ТаблицаИдентификаторов КАК ТаблицаИдентификаторов + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ТаблицаИдентификаторов.Идентификатор + |ИЗ + | ТаблицаИдентификаторов КАК ТаблицаИдентификаторов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ИдентификаторыПолученныхЭлектронныхПисем КАК ИдентификаторыПолученныхЭлектронныхПисем + | ПО ТаблицаИдентификаторов.Идентификатор = ИдентификаторыПолученныхЭлектронныхПисем.Идентификатор + | И (ИдентификаторыПолученныхЭлектронныхПисем.УчетнаяЗапись = &УчетнаяЗапись) + |ГДЕ + | ИдентификаторыПолученныхЭлектронныхПисем.ДатаПолучения <= &ДатаПолучения"; + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Идентификатор"); + +КонецФункции + +Функция ЗаписатьВходящееЭлектронноеПисьмо( + УчетнаяЗапись, + Сообщение, + ОтветственныйЗаОбработкуПисем, + ПомещатьПисьмоВПапкуПисьмаОснования, + ДобавлятьВМассивСозданныхПисем) + + НачатьТранзакцию(); + + // Создадим документ и заполним его реквизиты на основе сообщения + Письмо = Документы.ЭлектронноеПисьмоВходящее.СоздатьДокумент(); + Письмо.УчетнаяЗапись = УчетнаяЗапись; + ЗаполнитьДокументЭлектронноеПисьмоВходящее(Письмо, Сообщение); + + // Найдем основание письма, определим предмет и контакты + Предмет = Неопределено; + Папка = Неопределено; + ЗаполнитьПредметИКонтакты(Письмо, + Предмет, + Папка, + ПомещатьПисьмоВПапкуПисьмаОснования); + + // Заполним ответственного + Письмо.Ответственный = ОтветственныйЗаОбработкуПисем; + + // Запишем письмо + Письмо.Записать(); + + //Установим папку письма и предмет + Взаимодействия.УстановитьПредметПапкуВзаимодействия( + Письмо.Ссылка,Папка,?(ЗначениеЗаполнено(Предмет),Предмет,Письмо.Ссылка)); + МассивИменВложений = Новый Массив; + + //Запишем вложения + Для Каждого Вложение Из Сообщение.Вложения Цикл + МассивИменВложений.Добавить(Вложение.ИмяФайла); + КонецЦикла; + + РасширениеДляФайловПодписи = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЭЦП", "РасширениеДляФайловПодписи"); + Если РасширениеДляФайловПодписи = Неопределено ИЛИ ПустаяСтрока(РасширениеДляФайловПодписи) Тогда + РасширениеДляФайловПодписи = "p7s"; + КонецЕсли; + + СоответствиеВложенийИПодписей = + ФайловыеФункцииКлиентСервер.ПолучитьСоответствиеФайловИПодписей(МассивИменВложений, РасширениеДляФайловПодписи); + + КоличествоПустыхИменВоВложениях = 0; + Для каждого ЭлементСоответствия Из СоответствиеВложенийИПодписей Цикл + + НайденноеВложение = Неопределено; + МассивПодписей = Новый Массив; + + Для каждого Вложение Из Сообщение.Вложения Цикл + Если Вложение.ИмяФайла = ЭлементСоответствия.Ключ Тогда + НайденноеВложение = Вложение; + Прервать; + КонецЕсли + КонецЦикла; + + Если НайденноеВложение <> Неопределено И ЭлементСоответствия.Значение.Количество() > 0 Тогда + Для каждого Вложение Из Сообщение.Вложения Цикл + Если ЭлементСоответствия.Значение.Найти(Вложение.ИмяФайла) <> Неопределено Тогда + МассивПодписей.Добавить(Вложение); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если НайденноеВложение <> Неопределено Тогда + ЗаписатьВложениеЭлектронногоПисьма( + Письмо,НайденноеВложение, + МассивПодписей, + КоличествоПустыхИменВоВложениях); + КонецЕсли; + + КонецЦикла; + + Если Письмо.НепринятыеВложения.Количество() Тогда + Письмо.Записать(); + КонецЕсли; + + // Запишем идентификатор + ЗаписатьИдентификаторПолученногоПисьма(УчетнаяЗапись, + Письмо.ИдентификаторНаСервере, + Сообщение.ДатаПолучения); + + Если Письмо.УведомитьОПрочтении Тогда + ЗаписатьНеобходимостьОбработкиУведомленияОПрочтении(Письмо.Ссылка); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Если (НЕ ПомещатьПисьмоВПапкуПисьмаОснования) ИЛИ (НЕ ЗначениеЗаполнено(Папка)) Тогда + ДобавлятьВМассивСозданныхПисем = Истина; + КонецЕсли; + + Возврат Письмо.Ссылка; + +КонецФункции + +Процедура ЗаполнитьПредметИКонтакты( + Письмо, + Предмет, + Папка, + ПомещатьПисьмоВПапкуПисьмаОснования) + + //----------------------------------------------------------------- + // Получим идентификаторы писем оснований + МассивИдентификаторов = Новый Массив; + СтрокаИдентификаторы = Письмо.ИдентификаторыОснований; + Пока Не ПустаяСтрока(СтрокаИдентификаторы) Цикл + Позиция = Найти(СтрокаИдентификаторы, "<"); + Если Позиция = 0 Тогда + Прервать; + КонецЕсли; + СтрокаИдентификаторы = Сред(СтрокаИдентификаторы, Позиция+1); + + Позиция = Найти(СтрокаИдентификаторы, ">"); + Если Позиция = 0 Тогда + Прервать; + КонецЕсли; + + ТекущийИдентификатор = СокрЛП(Лев(СтрокаИдентификаторы, Позиция-1)); + СтрокаИдентификаторы = СокрЛП(Сред(СтрокаИдентификаторы, Позиция+1)); + + Если Не ПустаяСтрока(ТекущийИдентификатор) Тогда + МассивИдентификаторов.Добавить(ТекущийИдентификатор); + КонецЕсли; + КонецЦикла; + + Если (МассивИдентификаторов.Найти(Письмо.ИдентификаторОснования) = Неопределено) И + (НЕ ПустаяСтрока(Письмо.ИдентификаторОснования)) Тогда + МассивИдентификаторов.Добавить(Письмо.ИдентификаторОснования); + КонецЕсли; + + ТаблицаИдентификаторов = СоздатьТаблицуСИдентификаторами(МассивИдентификаторов); + + //----------------------------------------------------------------- + // Получим все основания + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТаблицаИдентификаторов", ТаблицаИдентификаторов); + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицаИдентификаторов.Идентификатор + |ПОМЕСТИТЬ ТаблицаИдентификаторов + |ИЗ + | &ТаблицаИдентификаторов КАК ТаблицаИдентификаторов + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ЭлектронноеПисьмоВходящее.Ссылка КАК Ссылка, + | ЭлектронноеПисьмоВходящее.Дата КАК Дата + |ПОМЕСТИТЬ ВсеЭлектронныеПисьма + |ИЗ + | ТаблицаИдентификаторов КАК ТаблицаИдентификаторов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее + | ПО ТаблицаИдентификаторов.Идентификатор = ЭлектронноеПисьмоВходящее.ИдентификаторСообщения + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЭлектронноеПисьмоИсходящее.Ссылка, + | ЭлектронноеПисьмоИсходящее.Дата + |ИЗ + | ТаблицаИдентификаторов КАК ТаблицаИдентификаторов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее + | ПО ТаблицаИдентификаторов.Идентификатор = ЭлектронноеПисьмоИсходящее.ИдентификаторСообщения + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ВсеЭлектронныеПисьма.Ссылка, + | ВсеЭлектронныеПисьма.Дата КАК Дата + |ИЗ + | ВсеЭлектронныеПисьма КАК ВсеЭлектронныеПисьма + | + |УПОРЯДОЧИТЬ ПО + | Дата УБЫВ"; + + Выборка = Запрос.Выполнить().Выбрать(); + Письмо.ВзаимодействиеОснование = ?(Выборка.Следующий(), Выборка.Ссылка, Неопределено); + + //----------------------------------------------------------------- + // Получим предмет взаимодействия + Если ЗначениеЗаполнено(Письмо.ВзаимодействиеОснование) Тогда + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ПредметыПапкиВзаимодействий.Предмет, + | ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма КАК Папка, + | ЕСТЬNULL(ПапкиЭлектронныхПисем.ПредопределеннаяПапка, ИСТИНА) КАК ПредопределеннаяПапка + |ИЗ + | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем + | ПО ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма = ПапкиЭлектронныхПисем.Ссылка + |ГДЕ + | ПредметыПапкиВзаимодействий.Взаимодействие = &ВзаимодействиеОснование + | И ПапкиЭлектронныхПисем.Владелец = &УчетнаяЗапись"; + + Запрос.УстановитьПараметр("ВзаимодействиеОснование", Письмо.ВзаимодействиеОснование ); + Запрос.УстановитьПараметр("УчетнаяЗапись", Письмо.УчетнаяЗапись ); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Предмет = Письмо.Ссылка; + Иначе + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + Предмет = Выборка.Предмет; + Если ПомещатьПисьмоВПапкуПисьмаОснования И Не Выборка.ПредопределеннаяПапка Тогда + Папка = Выборка.Папка; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + //----------------------------------------------------------------- + // Получим проставленные контакты в предмете + СоответствиеКонтактов = ПолучитьСоответствиеКонтактовВПисьме(Письмо.ВзаимодействиеОснование); + + //----------------------------------------------------------------- + // Проставим контакты на основании предмета + НеопределенныеАдреса = Новый Массив; + УстановитьКонтактыВоВходящемПисьме(Письмо, СоответствиеКонтактов, НеопределенныеАдреса); + + //----------------------------------------------------------------- + // Если есть неопределенные адреса, то поищем их по контактной информации + СоответствиеКонтактов = НайтиАдресаЭлектроннойПочтыВКонтактнойИнформации(НеопределенныеАдреса); + Если СоответствиеКонтактов.Количество() > 0 Тогда + УстановитьКонтактыВоВходящемПисьме(Письмо, СоответствиеКонтактов, НеопределенныеАдреса); + КонецЕсли; + +КонецПроцедуры + +Функция НайтиАдресаЭлектроннойПочтыВКонтактнойИнформации(масАдреса) + + СоответствиеКонтактов = Новый Соответствие; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Контакты.Ссылка, + | Контакты.АдресЭП КАК АдресЭП + |ИЗ + | (ВЫБРАТЬ + | КонтактнаяИнформация.Ссылка КАК Ссылка, + | КонтактнаяИнформация.АдресЭП КАК АдресЭП + | ИЗ + | Справочник.Пользователи.КонтактнаяИнформация КАК КонтактнаяИнформация + | ГДЕ + | КонтактнаяИнформация.АдресЭП В(&масАдреса) + | И КонтактнаяИнформация.Тип = &Тип + | И НЕ(КонтактнаяИнформация.Ссылка.ПометкаУдаления) + |"; + + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); + Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл + + Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда + Продолжить; + КонецЕсли; + + Запрос.Текст = Запрос.Текст + " + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | КонтактнаяИнформация.Ссылка КАК Ссылка, + | КонтактнаяИнформация.АдресЭП КАК АдресЭП + |ИЗ + | Справочник." + ЭлементМассиваОписания.Имя + ".КонтактнаяИнформация КАК КонтактнаяИнформация + |ГДЕ + | КонтактнаяИнформация.АдресЭП В(&масАдреса) + | И КонтактнаяИнформация.Тип = &Тип + | И (НЕ КонтактнаяИнформация.Ссылка.ПометкаУдаления) + |"; + + КонецЦикла; + + Запрос.Текст = Запрос.Текст + ") КАК Контакты + |ИТОГИ ПО + | АдресЭП"; + + Запрос.УстановитьПараметр("масАдреса", масАдреса); + Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); + + Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + Пока Выборка.Следующий() Цикл + ВыборкаПоСсылкам = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + Если (ВыборкаПоСсылкам.Следующий()) Тогда + СоответствиеКонтактов.Вставить(Врег(Выборка.АдресЭП), ВыборкаПоСсылкам.Ссылка); + КонецЕсли; + КонецЦикла; + + Возврат СоответствиеКонтактов; + +КонецФункции + +Процедура УстановитьКонтактыВоВходящемПисьме(Письмо, СоответствиеКонтактов, НеопределенныеАдреса) + + ОбработатьПоляКонтактИАдрес(Письмо.ОтправительАдрес, Письмо.ОтправительКонтакт, СоответствиеКонтактов, НеопределенныеАдреса); + + Для Каждого СтрокаТаблицы Из Письмо.ПолучателиПисьма Цикл + ОбработатьПоляКонтактИАдрес(СтрокаТаблицы.Адрес, СтрокаТаблицы.Контакт, СоответствиеКонтактов, НеопределенныеАдреса); + КонецЦикла; + + Для Каждого СтрокаТаблицы Из Письмо.ПолучателиКопий Цикл + ОбработатьПоляКонтактИАдрес(СтрокаТаблицы.Адрес, СтрокаТаблицы.Контакт, СоответствиеКонтактов, НеопределенныеАдреса); + КонецЦикла; + + Для Каждого СтрокаТаблицы Из Письмо.ПолучателиОтвета Цикл + ОбработатьПоляКонтактИАдрес(СтрокаТаблицы.Адрес, СтрокаТаблицы.Контакт, СоответствиеКонтактов, НеопределенныеАдреса); + КонецЦикла; + +КонецПроцедуры + +Процедура ОбработатьПоляКонтактИАдрес(Адрес, Контакт, СоответствиеКонтактов, НеопределенныеАдреса) + + Если ЗначениеЗаполнено(Контакт) И ТипЗнч(Контакт) <> Тип("Строка") Тогда + Возврат; + КонецЕсли; + + НайденныйКонтакт = СоответствиеКонтактов.Получить(ВРег(Адрес)); + Если НайденныйКонтакт <> Неопределено И ТипЗнч(НайденныйКонтакт) <> Тип("Строка") Тогда + Контакт = НайденныйКонтакт; + Возврат; + КонецЕсли; + + //Контакт = Адрес; + Если НеопределенныеАдреса.Найти(Адрес) = Неопределено Тогда + НеопределенныеАдреса.Добавить(Адрес); + КонецЕсли; + +КонецПроцедуры + +Функция ПолучитьСоответствиеКонтактовВПисьме(Письмо) + + СоответствиеКонтактов = Новый Соответствие; + Если Не ЗначениеЗаполнено(Письмо) Тогда + Возврат СоответствиеКонтактов; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | Адреса.Адрес, + | Адреса.Контакт + |ИЗ + | (" + ?(ТипЗнч(Письмо) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее"), "", "ВЫБРАТЬ + | ПОДСТРОКА(ЭлектронноеПисьмоВходящее.ОтправительАдрес, 1, 100) КАК Адрес, + | ЭлектронноеПисьмоВходящее.ОтправительКонтакт КАК Контакт + | ИЗ + | Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее + | ГДЕ + | ЭлектронноеПисьмоВходящее.Ссылка = &Письмо + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ") + "ВЫБРАТЬ + | Таблица.Адрес, + | Таблица.Контакт + | ИЗ + | Документ.ЭлектронноеПисьмоВходящее.ПолучателиПисьма КАК Таблица + | ГДЕ + | Таблица.Ссылка = &Письмо + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | Таблица.Адрес, + | Таблица.Контакт + | ИЗ + | Документ.ЭлектронноеПисьмоВходящее.ПолучателиКопий КАК Таблица + | ГДЕ + | Таблица.Ссылка = &Письмо + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | Таблица.Адрес, + | Таблица.Контакт + | ИЗ + | Документ.ЭлектронноеПисьмоВходящее.ПолучателиОтвета КАК Таблица + | ГДЕ + | Таблица.Ссылка = &Письмо) КАК Адреса + |ГДЕ + | (НЕ Адреса.Контакт ЕСТЬ NULL )"; + Запрос.УстановитьПараметр("Письмо", Письмо); + + Если ТипЗнч(Письмо) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "ЭлектронноеПисьмоВходящее", "ЭлектронноеПисьмоИсходящее"); + КонецЕсли; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Если ТипЗнч(Выборка.Контакт) <> Тип("Строка") Тогда + СоответствиеКонтактов.Вставить(Выборка.Адрес, Выборка.Контакт); + КонецЕсли; + КонецЦикла; + + Возврат СоответствиеКонтактов; + +КонецФункции + +Процедура ЗаписатьИдентификаторПолученногоПисьма(УчетнаяЗапись, Идентификатор, ДатаПолучения) + + Запись = РегистрыСведений.ИдентификаторыПолученныхЭлектронныхПисем.СоздатьМенеджерЗаписи(); + Запись.УчетнаяЗапись = УчетнаяЗапись; + Запись.Идентификатор = Идентификатор; + Запись.ДатаПолучения = ДатаПолучения; + Запись.Записать(); + +КонецПроцедуры + +Процедура ЗаполнитьДокументЭлектронноеПисьмоВходящее(Письмо, Сообщение) + + Письмо.Важность = ПолучитьВажностьЭлектронногоПисьма(Сообщение.Важность); + Письмо.Дата = ?(Сообщение.ДатаОтправления = Дата(1,1,1), ТекущаяДатаСеанса(), Сообщение.ДатаОтправления); + Письмо.ДатаПолучения = Сообщение.ДатаПолучения; + Письмо.ВнутреннийЗаголовок = Сообщение.Заголовок; + Письмо.ИдентификаторНаСервере = ?(Сообщение.Идентификатор.Количество() = 0, "", Сообщение.Идентификатор[0]); + Письмо.ИдентификаторСообщения = Сообщение.ИдентификаторСообщения; + Письмо.Кодировка = Сообщение.Кодировка; + Письмо.УведомитьОДоставке = Сообщение.УведомитьОДоставке; + Письмо.УведомитьОПрочтении = Сообщение.УведомитьОПрочтении; + + Если ТипЗнч(Сообщение.Отправитель) = Тип("ИнтернетПочтовыйАдрес") Тогда + Письмо.ОтправительАдрес = Сообщение.Отправитель.Адрес; + Иначе + Письмо.ОтправительАдрес = Сообщение.Отправитель; + КонецЕсли; + Письмо.ОтправительПредставление = + ?(ПустаяСтрока(Сообщение.ИмяОтправителя), Сообщение.Отправитель.Адрес, Сообщение.ИмяОтправителя); + + Письмо.Размер = Сообщение.Размер; + Письмо.Тема = Сообщение.Тема; + + УстановитьТекстПисьма(Письмо, Сообщение); + + ЗаполнитьИнтернетПочтовыеАдреса(Письмо.ПолучателиКопий, Сообщение.Копии); + ЗаполнитьИнтернетПочтовыеАдреса(Письмо.ПолучателиОтвета, Сообщение.ОбратныйАдрес); + ЗаполнитьИнтернетПочтовыеАдреса(Письмо.ПолучателиПисьма, Сообщение.Получатели); + ЗаполнитьИнтернетПочтовыеАдреса(Письмо.АдресаУведомленияОПрочтении,Сообщение.АдресаУведомленияОПрочтении); + + Письмо.ИдентификаторОснования = ИзПисьмаПолучитьИдентификаторОснования(Сообщение); + Письмо.ИдентификаторыОснований = Сообщение.ПолучитьПолеЗаголовка("References", "Строка"); + + Для каждого Вложение Из Сообщение.Вложения Цикл + Если ПустаяСтрока(Вложение.Идентификатор) И ТипЗнч(Вложение.Данные) = Тип("ДвоичныеДанные") Тогда + Письмо.ЕстьВложения = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаполнитьИнтернетПочтовыеАдреса(ТабличнаяЧасть, Адреса) + + Для Каждого Адрес Из Адреса Цикл + НоваяСтрока = ТабличнаяЧасть.Добавить(); + НоваяСтрока.Адрес = Адрес.Адрес; + НоваяСтрока.Представление = Адрес.ОтображаемоеИмя; + КонецЦикла; + +КонецПроцедуры + +Функция ИзПисьмаПолучитьИдентификаторОснования(Сообщение) + + СтрокаИдентификаторы = СокрЛП(Сообщение.ПолучитьПолеЗаголовка("In-Reply-To", "Строка")); + + Позиция = Найти(СтрокаИдентификаторы, "<"); + Если Позиция <> 0 Тогда + СтрокаИдентификаторы = Сред(СтрокаИдентификаторы, Позиция+1); + КонецЕсли; + + Позиция = Найти(СтрокаИдентификаторы, ">"); + Если Позиция <> 0 Тогда + СтрокаИдентификаторы = Лев(СтрокаИдентификаторы, Позиция-1); + КонецЕсли; + + Возврат СтрокаИдентификаторы; + +КонецФункции + +Процедура УстановитьТекстПисьма(Письмо, Сообщение) + + ТекстHTML = ""; + ТекстПростой = ""; + ТекстРазмеченный = ""; + + Для Каждого ТекстПочтовогоСообщения Из Сообщение.Тексты Цикл + Если ТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.HTML Тогда + ТекстHTML = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ТекстПочтовогоСообщения.Текст); + + ИначеЕсли ТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст Тогда + ТекстПростой = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ТекстПочтовогоСообщения.Текст); + + ИначеЕсли ТекстПочтовогоСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.РазмеченныйТекст Тогда + ТекстРазмеченный = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ТекстПочтовогоСообщения.Текст); + + КонецЕсли; + КонецЦикла; + + Если ТекстHTML <> "" Тогда + Письмо.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML; + Письмо.ТекстHTML = ТекстHTML; + Письмо.Текст = ?(ТекстПростой <> "", ТекстПростой, ПолучитьПростойТекстИзHTML(ТекстHTML)); + + ИначеЕсли ТекстРазмеченный <> "" Тогда + Письмо.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.РазмеченныйТекст; + Письмо.Текст = ТекстРазмеченный; + + Иначе + Письмо.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст; + Письмо.Текст = ТекстПростой; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Работа с вложения электронных писем + +Процедура ЗаписатьВложениеЭлектронногоПисьма(Объект, Вложение,МассивПодписей,КоличествоПустыхИменВоВложениях) + + ПисьмоСсылка = Объект.Ссылка; + Размер = 0; + Если ТипЗнч(Вложение.Данные) = Тип("ДвоичныеДанные") Тогда + Размер = Вложение.Данные.Размер(); + Иначе + //А может быть и тип ИнтернетПочтовоеСообщение. На данный момент не поддерживаем. + Если ТипЗнч(Вложение.Данные) = Тип("ИнтернетПочтовоеСообщение") Тогда + НовоеУдаленноеВложение = Объект.НепринятыеВложения.Добавить(); + НовоеУдаленноеВложение.ИмяВложение = Вложение.Данные.Тема + НСтр("ru = ' от '") + Вложение.Данные.ДатаОтправления; + КонецЕсли; + Возврат; + КонецЕсли; + + Адрес = ПоместитьВоВременноеХранилище(Вложение.Данные, ""); + + ВложениеПисьмаСсылка = ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища( + ПисьмоСсылка, Адрес, Вложение.ИмяФайла, Размер,КоличествоПустыхИменВоВложениях); + + ЕстьПодписи = (МассивПодписей.Количество() > 0); + ЭтоОтображаемыйФайл = НЕ ПустаяСтрока(Вложение.Идентификатор); + + Если ЕстьПодписи Или ЭтоОтображаемыйФайл Тогда + + ВложениеПисьмаОбъект = ВложениеПисьмаСсылка.ПолучитьОбъект(); + + Если ЕстьПодписи Тогда + + Для Каждого ПодписьВложения Из МассивПодписей Цикл + ЭЦП = ВложениеПисьмаОбъект.ЭлектронныеЦифровыеПодписи.Добавить(); + + ДанныеПодписи = ЭлектроннаяЦифроваяПодпись.ПрочитатьДанныеПодписи(ПодписьВложения.Данные); + Если ДанныеПодписи <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ЭЦП, ДанныеПодписи); + КонецЕсли; + + ЭЦП.Подпись = Новый ХранилищеЗначения(ПодписьВложения.Данные); + ЭЦП.Комментарий = НСтр("ru = 'Вложение электронного письма'"); + ЭЦП.ДатаПодписи = ТекущаяДатаСеанса(); + КонецЦикла; + + ВложениеПисьмаОбъект.ПодписанЭЦП = Истина; + + КонецЕсли; + + Если ЭтоОтображаемыйФайл Тогда + + ВложениеПисьмаОбъект.ИДФайлаЭлектронногоПисьма = Вложение.Идентификатор; + + КонецЕсли; + + ВложениеПисьмаОбъект.Записать(); + + КонецЕсли; + + УдалитьИзВременногоХранилища(Адрес); + +КонецПроцедуры + +//Получает вложения электронного письма +// +//Параметры +// Письмо - ДокументСсылка - документ электронное письмо для которого необходимо получить вложения. +// +//Возвращаемое значение: +// ТаблицаЗначений - таблица значений, содержащая информацию о вложениях. +// +Функция ПолучитьВложенияЭлектронногоПисьма(Письмо,ФормироватьРазмерПредставление = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ИмяОбъектаМетаданных = ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо); + Если ИмяОбъектаМетаданных = Неопределено Тогда + Возврат Новый ТаблицаЗначений; + КонецЕсли; + + Если ФормироватьРазмерПредставление Тогда + ТекстРазмерПредставление = ", + |ВЫРАЗИТЬ("""" КАК СТРОКА(20)) КАК РазмерПредставление"; + Иначе + ТекстРазмерПредставление = ""; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Файлы.Ссылка, + | Файлы.ИндексКартинки, + | Файлы.Размер, + | Файлы.ИДФайлаЭлектронногоПисьма, + | Файлы.ПодписанЭЦП, + | ВЫБОР + | КОГДА Файлы.Расширение = &ПустаяСтрока + | ТОГДА Файлы.Наименование + | ИНАЧЕ Файлы.Наименование + ""."" + Файлы.Расширение + | КОНЕЦ КАК ИмяФайла" + ТекстРазмерПредставление + " + |ИЗ + | Справочник." + ИмяОбъектаМетаданных + " КАК Файлы + |ГДЕ + | Файлы.ВладелецФайла = &Письмо + | И НЕ Файлы.ПометкаУдаления"; + + Запрос.УстановитьПараметр("Письмо", Письмо); + Запрос.УстановитьПараметр("ПустаяСтрока",""); + + ТаблицаКВозврату = Запрос.Выполнить().Выгрузить(); + + Если ФормироватьРазмерПредставление Тогда + Для каждого СтрокаТаблицы Из ТаблицаКВозврату Цикл + + СтрокаТаблицы.РазмерПредставление = + ВзаимодействияКлиентСервер.ПолучитьСтроковоеПредставлениеРазмераФайла(СтрокаТаблицы.Размер); + + КонецЦикла; + КонецЕсли; + + Возврат ТаблицаКВозврату; + +КонецФункции + +//Записывает вложение электронного письма, расположенное во временном хранилище в файл. +Функция ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища( + Письмо, + АдресВоВременномХранилище, + ИмяФайла, + Размер, + КоличествоПустыхИменВоВложениях = 0) Экспорт + + ИмяФайлаДляРазбора = ИмяФайла; + РасширениеБезТочки = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ИмяФайлаДляРазбора); + ИмяБезРасширения = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайлаДляРазбора); + + Если ПустаяСтрока(ИмяБезРасширения) Тогда + + ИмяФайлаБезРасширения = + НСтр("ru = 'Вложение без имени'") + ?(КоличествоПустыхИменВоВложениях = 0,""," " + Строка(КоличествоПустыхИменВоВложениях + 1)); + КоличествоПустыхИменВоВложениях = КоличествоПустыхИменВоВложениях + 1; + + Иначе + ИмяБезРасширения = + ?(РасширениеБезТочки = "", + ИмяБезРасширения, + Лев(ИмяБезРасширения, СтрДлина(ИмяБезРасширения) - СтрДлина(РасширениеБезТочки) - 1)); + КонецЕсли; + ВремяИзменения = ТекущаяДатаСеанса(); + + Возврат ПрисоединенныеФайлы.ДобавитьФайл( + Письмо, + ИмяБезРасширения, + РасширениеБезТочки, + ВремяИзменения, + ВремяИзменения, + АдресВоВременномХранилище, + ""); + +КонецФункции + +//Записывает вложение электронного письма, копируя вложение другого письма. +Функция ЗаписатьВложениеЭлектронногоПисьмаСкопировавВложениеДругогоПисьма( + Письмо, + СсылкаНаФайл, + УникальныйИдентификаторФормы) Экспорт + + ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(СсылкаНаФайл, УникальныйИдентификаторФормы, Истина); + + Возврат ПрисоединенныеФайлы.ДобавитьФайл( + Письмо, + ДанныеФайла.Наименование, + ДанныеФайла.Расширение, + ДанныеФайла.ДатаМодификацииУниверсальная, + ДанныеФайла.ДатаМодификацииУниверсальная, + ДанныеФайла.СсылкаНаДвоичныеДанныеФайла, + ""); + +КонецФункции + +//Устанавливает или снимает пометку удаления у вложений электронного письма +// +//Параметры +// Письмо - ДокументСсылка - письмо, для вложений которого будут выполнены действия. +// ПометкаУдаления - Булево - признак необходимости установить или снять пометку. +// +Процедура УстановитьПометкуУдаленияУВложенийПисьма(Письмо, ПометкаУдаления) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ИмяОбъектаМетаданных = ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо); + Если ИмяОбъектаМетаданных = Неопределено Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | Файлы.Ссылка + |ИЗ + | Справочник." + ИмяОбъектаМетаданных + " КАК Файлы + |ГДЕ + | Файлы.ПометкаУдаления <> &ПометкаУдаления + | И Файлы.ВладелецФайла = &ВладелецФайла + |"); + Запрос.УстановитьПараметр("ПометкаУдаления", ПометкаУдаления); + Запрос.УстановитьПараметр("ВладелецФайла", Письмо); + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект.УстановитьПометкуУдаления(ПометкаУдаления, Истина); + КонецЦикла; + +КонецПроцедуры + +//Удаляет вложения электронного письма +// +//Параметры +// Письмо - ДокументСсылка - письмо, вложения которого будут удалены. +// +Процедура УдалитьВложенияУПисьма(Письмо) Экспорт + + ИмяОбъектаМетаданных = ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо); + Если ИмяОбъектаМетаданных = Неопределено Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Файлы.Ссылка + |ИЗ + | Справочник." + ИмяОбъектаМетаданных + " КАК Файлы + |ГДЕ + | Файлы.ВладелецФайла = &ВладелецФайла"; + Запрос.УстановитьПараметр("ВладелецФайла", Письмо); + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект.Удалить(); + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Уведомления о прочтении + +//Получает учетную запись электронной почты используемую для отправки по умолчанию +// +//Возвращаемое значение: +// Справочник.УчетныеЗаписиЭлектроннойПочты - учетная запись для отправки по умолчанию +// +Функция ПолучитьУчетнуюЗаписьДляОтправкиПоУмолчанию() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | УчетныеЗаписиЭлектроннойПочты.Ссылка + |ИЗ + | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + |ГДЕ + | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки"; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат Справочники.УчетныеЗаписиЭлектроннойПочты.ПустаяСсылка(); + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат Выборка.Ссылка; + +КонецФункции + +Процедура ЗаписатьНеобходимостьОбработкиУведомленияОПрочтении(Письмо) + + Запись = РегистрыСведений.УведомленияОПрочтении.СоздатьМенеджерЗаписи(); + Запись.Письмо = Письмо; + Запись.Записать(); + +КонецПроцедуры + +Процедура СоздатьОтправитьУведомлениеОПрочтении(Выборка,ЭтоРегламентноеЗадание,Соединение = Неопределено) + + ПараметрыПисьма = Новый Структура; + + Взаимодействия.ДобавитьВПараметрАдресатов(Выборка, ПараметрыПисьма, "Кому", "АдресаУведомленияОПрочтении"); + + ПараметрыПисьма.Вставить("Тема",НСтр("ru = 'Уведомление о прочтении / '") + "Reading Confirmation"); + ПараметрыПисьма.Вставить("Тело",СформироватьТекстУведомленияОПрочтении(Выборка)); + ПараметрыПисьма.Вставить("Кодировка","UTF-8"); + ПараметрыПисьма.Вставить("Важность", ВажностьИнтернетПочтовогоСообщения.Обычная); + ПараметрыПисьма.Вставить("ТипТекста", Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст); + ПараметрыПисьма.Вставить("ОбрабатыватьТексты",Ложь); + + Попытка + ЭлектроннаяПочта.ОтправитьПочтовоеСообщение(Выборка.УчетнаяЗапись, ПараметрыПисьма, Соединение); + Исключение + + Если ЭтоРегламентноеЗадание Тогда + + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Во время регламентной отправки уведомления о прочтении электронного письма %1 произошла ошибка + |%2'"), Выборка.ПредставлениеПисьма,ОписаниеОшибки()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, , , + ТекстСообщенияОбОшибке); + + Иначе + + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Во время отправки уведомления о прочтении электронного письма %1 произошла ошибка + |%2'"), Выборка.ПредставлениеПисьма,КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке,Выборка.Письмо); + + КонецЕсли; + + Возврат; + КонецПопытки; + + УстановитьПризнакОтправкиУведомления(Выборка.Письмо,Ложь); + +КонецПроцедуры + +//Устанавливает признак отправки уведомления о прочтении электронного письма +// +// Параметры +// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее - письмо для которого устанавливается признак. +// Отправлять - Булево - если Истина, то признак будет установлен, снят если Ложь +// +Процедура УстановитьПризнакОтправкиУведомления(Письмо, Отправлять) Экспорт + + Если Отправлять Тогда + + Запись = РегистрыСведений.УведомленияОПрочтении.СоздатьМенеджерЗаписи(); + Запись.Письмо = Письмо; + Запись.ТребуетсяОтправка = Истина; + Запись.ДатаПрочтения = ПолучитьДатуСтрокойСоСмещениемGMT(ТекущаяДатаСеанса()); + Запись.Пользователь = Пользователи.ТекущийПользователь(); + Запись.Записать(); + + Иначе + + НаборЗаписей = РегистрыСведений.УведомленияОПрочтении.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Письмо.Установить(Письмо); + НаборЗаписей.Записать(); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Прочее + +Функция ПолучитьВажностьЭлектронногоПисьма(Важность) + + Если (Важность = ВажностьИнтернетПочтовогоСообщения.Высокая) ИЛИ + (Важность = ВажностьИнтернетПочтовогоСообщения.Наивысшая) Тогда + + Возврат Перечисления.ВариантыВажностиВзаимодействия.Высокая; + + ИначеЕсли (Важность = ВажностьИнтернетПочтовогоСообщения.Наименьшая) ИЛИ + (Важность = ВажностьИнтернетПочтовогоСообщения.Низкая) Тогда + + Возврат Перечисления.ВариантыВажностиВзаимодействия.Низкая; + + Иначе + + Возврат Перечисления.ВариантыВажностиВзаимодействия.Обычная; + + КонецЕсли; + +КонецФункции + +Функция ПолучитьПростойТекстИзHTML(ТекстHTML) + + Построитель = Новый ПостроительDOM; + ЧтениеHTML = Новый ЧтениеHTML; + ЧтениеHTML.УстановитьСтроку(ТекстHTML); + ДокументHTML = Построитель.Прочитать(ЧтениеHTML); + + Возврат ДокументHTML.Тело.ТекстовоеСодержимое; + + Возврат ""; + +КонецФункции + +Функция СформироватьТекстУведомленияОПрочтении(Выборка) + + ТекстУведомленияАнглийский = " + |Your message from " + Выборка.ОтправительПредставление + "<" + Выборка.ОтправительАдрес + "> + |Subject: " + Выборка.Тема + " + |Sent " + Выборка.Дата + " + |Has been read " + Выборка.ДатаПрочтения + " + |By Recipient " +Выборка.ИмяПользователя + "<" + Выборка.АдресЭлектроннойПочты + ">"; + + ЛокализованноеУведомление = Нстр("ru=' + |Сообщение от %1 < %2 > + |Тема: %3 + |Отправленное %4 + |Было прочитано %5 + |Получателем %6 <%7>'"); + + ЛокализованноеУведомление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЛокализованноеУведомление, + Выборка.ОтправительПредставление, + Выборка.ОтправительАдрес, + Выборка.Тема, + Выборка.Дата, + Выборка.ДатаПрочтения, + Выборка.ИмяПользователя, + Выборка.АдресЭлектроннойПочты); + + Возврат ЛокализованноеУведомление + Символы.ПС + Символы.ПС + ТекстУведомленияАнглийский; + +КонецФункции + +Функция ПолучитьДатуСтрокойСоСмещениемGMT(Дата) + + Запрос = Новый Запрос("ВЫБРАТЬ + | РАЗНОСТЬДАТ(&УниверсальноеВремя, &МестноеВремя, МИНУТА) КАК РазностьДат"); + Запрос.УстановитьПараметр("МестноеВремя",Дата); + Запрос.УстановитьПараметр("УниверсальноеВремя",УниверсальноеВремя(Дата)); + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + СмещениеВремениВМинутах = Выборка.РазностьДат; + ЧасыСмещения = Цел(СмещениеВремениВМинутах/60); + СтрокаЧасыСмещения = ?(ЧасыСмещения > 0,"+","") + Формат(ЧасыСмещения,"ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН="); + МинутыСмещения = СмещениеВремениВМинутах%60; + Если МинутыСмещения < 0 Тогда + МинутыСмещения = + МинутыСмещения; + КонецЕсли; + СтрокаМинутыСмещения = Формат(МинутыСмещения,"ЧЦ=2; ЧДЦ=0; ЧН=00; ЧВН="); + + Возврат Формат(Дата,"ДЛФ=DT") + " GMT " + СтрокаЧасыСмещения + СтрокаМинутыСмещения; + + +КонецФункции + +Процедура СоздатьПредопределеннуюПапкуЭлектронныхПисем(Наименование,Владелец) + + Папка = Справочники.ПапкиЭлектронныхПисем.СоздатьЭлемент(); + Папка.УстановитьНовыйКод(); + Папка.ОбменДанными.Загрузка = Истина; + Папка.ПредопределеннаяПапка = Истина; + Папка.Наименование = Наименование; + Папка.Владелец = Владелец; + Папка.Записать(); + +КонецПроцедуры + +//Функция возвращает таблицу имен кодировок +// +//Параметры +// НЕТ +// +//Возвращаемое значение: +// Таблица значений +// +Функция ПолучитьСписокКодировок() Экспорт + + СписокКодировок = Новый СписокЗначений; + + СписокКодировок.Добавить("ibm852", "ibm852 (Центральноевропейская DOS)"); + СписокКодировок.Добавить("ibm866", "ibm866 (Кириллица DOS)"); + СписокКодировок.Добавить("iso-8859-1", "iso-8859-1 (Западноевропейская ISO)"); + СписокКодировок.Добавить("iso-8859-2", "iso-8859-2 (Центральноевропейская ISO)"); + СписокКодировок.Добавить("iso-8859-3", "iso-8859-3 (Латиница 3 ISO)"); + СписокКодировок.Добавить("iso-8859-4", "iso-8859-4 (Балтийская ISO)"); + СписокКодировок.Добавить("iso-8859-5", "iso-8859-5 (Кириллица ISO)"); + СписокКодировок.Добавить("iso-8859-7", "iso-8859-7 (Греческая ISO)"); + СписокКодировок.Добавить("iso-8859-9", "iso-8859-9 (Турецкая ISO)"); + СписокКодировок.Добавить("iso-8859-15", "iso-8859-15 (Латиница 9 ISO)"); + СписокКодировок.Добавить("koi8-r", "koi8-r (Кириллица KOI8-R)"); + СписокКодировок.Добавить("koi8-u", "koi8-u (Кириллица KOI8-U)"); + СписокКодировок.Добавить("us-ascii", "us-ascii США"); + СписокКодировок.Добавить("utf-8", "utf-8 (Юникод UTF-8)"); + СписокКодировок.Добавить("windows-1250", "windows-1250 (Центральноевропейская Windows)"); + СписокКодировок.Добавить("windows-1251", "windows-1251 (Кириллица Windows)"); + СписокКодировок.Добавить("windows-1252", "windows-1252 (Западноевропейская Windows)"); + СписокКодировок.Добавить("windows-1253", "windows-1253 (Греческая Windows)"); + СписокКодировок.Добавить("windows-1254", "windows-1254 (Турецкая Windows)"); + СписокКодировок.Добавить("windows-1257", "windows-1257 (Балтийская Windows)"); + + Возврат СписокКодировок; + +КонецФункции + +//Возвращает важность интернет почтового сообщения в зависимости от переданного значения +//перечисления ВариантыВажностиВзаимодействия. +// +//Параметры +// ВажностьВзаимодействия - Перечисление.ВариантыВажностиВзаимодействия +// +//Возвращаемое значение: +// ВажностьИнтернетПочтовогоСообщения +// +Функция ПолучитьВажность(ВажностьВзаимодействия) Экспорт + + Если ВажностьВзаимодействия = Перечисления.ВариантыВажностиВзаимодействия.Высокая Тогда + Возврат ВажностьИнтернетПочтовогоСообщения.Высокая; + ИначеЕсли ВажностьВзаимодействия = Перечисления.ВариантыВажностиВзаимодействия.Низкая Тогда + Возврат ВажностьИнтернетПочтовогоСообщения.Низкая; + Иначе + Возврат ВажностьИнтернетПочтовогоСообщения.Обычная; + КонецЕсли; + +КонецФункции + +//Возвращает имя события журнала регистрации посистемы Взаимодействия +Функция СобытиеЖурналаРегистрации() Экспорт + + Возврат НСтр("ru = 'Взаимодействия'"); + +КонецФункции + // Получает и добавляет в список значений доступные пользователю учетные записи электронной почты // // Параметры @@ -1676,61 +1758,7 @@ КонецПроцедуры -//Получает учетную запись электронной почты используемую для отправки по умолчанию -// -//Возвращаемое значение: -// Справочник.УчетныеЗаписиЭлектроннойПочты - учетная запись для отправки по умолчанию -// -Функция ПолучитьУчетнуюЗаписьДляОтправкиПоУмолчанию() Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 - | УчетныеЗаписиЭлектроннойПочты.Ссылка - |ИЗ - | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты - |ГДЕ - | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки"; - - РезультатЗапроса = Запрос.Выполнить(); - Если РезультатЗапроса.Пустой() Тогда - Возврат Справочники.УчетныеЗаписиЭлектроннойПочты.ПустаяСсылка(); - КонецЕсли; - - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - Возврат Выборка.Ссылка; - -КонецФункции - -//Устанавливает признак отправки уведомления о прочтении электронного письма -// -// Параметры -// Письмо - ДокументСсылка.ЭлектронноеПисьмоВходящее - письмо для которого устанавливается признак. -// Отправлять - Булево - если Истина, то признак будет установлен, снят если Ложь -// -Процедура УстановитьПризнакОтправкиУведомления(Письмо, Отправлять) Экспорт - - Если Отправлять Тогда - - Запись = РегистрыСведений.УведомленияОПрочтении.СоздатьМенеджерЗаписи(); - Запись.Письмо = Письмо; - Запись.ТребуетсяОтправка = Истина; - Запись.ДатаПрочтения = ПолучитьДатуСтрокойСоСмещениемGMT(ТекущаяДатаСеанса()); - Запись.Пользователь = Пользователи.ТекущийПользователь(); - Запись.Записать(); - - Иначе - - НаборЗаписей = РегистрыСведений.УведомленияОПрочтении.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Письмо.Установить(Письмо); - НаборЗаписей.Записать(); - - КонецЕсли; - -КонецПроцедуры - -//Созадает предопределенные папки для учетной записи электронной почты +//Создает предопределенные папки для учетной записи электронной почты // // Параметры // УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись для которой будут созданы предопределенные папки. @@ -1775,8 +1803,7 @@ // //Возвращаемое значение: // Строка,Неопределено - имя объекта метаданных присоединенных файлов электронного письма -// -Функция ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо) Экспорт + Функция ПолучитьИмяОбъектаМетаданныхПрисоединенныхФайловПисьма(Письмо) Экспорт Если ТипЗнч(Письмо) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl index 453bd31ed..ad6e07fef 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl @@ -1,4 +1,13 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Взаимодействия" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + + //Открывает вложенный файл электронного письма // //Параметры @@ -20,10 +29,10 @@ Функция ТаблицуКонтактовВМассив(ТаблицаКонтактов) Экспорт Результат = Новый Массив; - Для Каждого Стр Из ТаблицаКонтактов Цикл - Контакт = ?(ТипЗнч(Стр.Контакт) = Тип("Строка"), Неопределено, Стр.Контакт); + Для Каждого СтрокаТаблицы Из ТаблицаКонтактов Цикл + Контакт = ?(ТипЗнч(СтрокаТаблицы.Контакт) = Тип("Строка"), Неопределено, СтрокаТаблицы.Контакт); Запись = Новый Структура( - "Адрес, Представление, Контакт", Стр.Адрес, Стр.Представление, Контакт + "Адрес, Представление, Контакт", СтрокаТаблицы.Адрес, СтрокаТаблицы.Представление, Контакт ); Результат.Добавить(Запись); КонецЦикла; @@ -46,9 +55,9 @@ УправлениеЭлектроннойПочтой.ОтправитьЗагрузитьПочтуПользователя(ПолученоПисем, ДоступноУчетныхЗаписей, ЕстьОшибки); Состояние(); - Стр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Получено писем: %1 '"), ПолученоПисем); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Получено писем: %1 '"), ПолученоПисем); Если ДоступноУчетныхЗаписей > 1 Тогда - Стр = Стр + " " + + ТекстСообщения = ТекстСообщения + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '(учетных записей: %1)'"), ДоступноУчетныхЗаписей); КонецЕсли; @@ -57,7 +66,7 @@ ЭлементСписок.Обновить(); КонецЕсли; - ПоказатьОповещениеПользователя(Стр); + ПоказатьОповещениеПользователя(ТекстСообщения); Если ЕстьОшибки Тогда diff --git a/SSL/src/CommonModules/ФайловыеФункции/Module.bsl b/SSL/src/CommonModules/ФайловыеФункции/Module.bsl index 26d084c3b..e6cc4e9e3 100644 --- a/SSL/src/CommonModules/ФайловыеФункции/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункции/Module.bsl @@ -7,7 +7,7 @@ // Извлекает текст из файлов на диске Процедура ИзвлечениеТекста() Экспорт - ТипПлатформыСервера = ТипПлатформыСервера(); + ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); Если НЕ ЭтоПлатформаWindows() Тогда Возврат; // извлечение текста работает только под Windows @@ -45,8 +45,11 @@ Продолжить; КонецЕсли; + Кодировка = ""; + ФайловыеФункцииПереопределяемый.ПолучитьКодировкуВерсииФайла(Строка.Ссылка, Кодировка); + Отказ = Ложь; - Текст = ФайловыеФункцииКлиентСервер.ИзвлечьТекст(ИмяФайлаСПутем, Отказ); + Текст = ФайловыеФункцииКлиентСервер.ИзвлечьТекст(ИмяФайлаСПутем, Отказ, Кодировка); Если Отказ = Ложь Тогда ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; @@ -111,7 +114,41 @@ Функция ПолучитьМаксимальныйРазмерФайла() Экспорт УстановитьПривилегированныйРежим(Истина); + МаксимальныйРазмерФайла = Константы.МаксимальныйРазмерФайла.Получить(); + Если МаксимальныйРазмерФайла = Неопределено ИЛИ МаксимальныйРазмерФайла = 0 Тогда + МаксимальныйРазмерФайла = 50*1024*1024; // 50 мб + Константы.МаксимальныйРазмерФайла.Установить(МаксимальныйРазмерФайла); + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + МаксимальныйРазмерФайлаОбластиДанных = Константы.МаксимальныйРазмерФайлаОбластиДанных.Получить(); + + Если МаксимальныйРазмерФайлаОбластиДанных = Неопределено ИЛИ МаксимальныйРазмерФайлаОбластиДанных = 0 Тогда + МаксимальныйРазмерФайлаОбластиДанных = 50*1024*1024; // 50 мб + Константы.МаксимальныйРазмерФайлаОбластиДанных.Установить(МаксимальныйРазмерФайлаОбластиДанных); + КонецЕсли; + + МаксимальныйРазмерФайла = Мин(МаксимальныйРазмерФайла, МаксимальныйРазмерФайлаОбластиДанных); + + КонецЕсли; + + Возврат МаксимальныйРазмерФайла; + +КонецФункции + +// Возвращает максимальный размер файла провайдера +// +Функция ПолучитьМаксимальныйРазмерФайлаОбщий() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МаксимальныйРазмерФайла = Константы.МаксимальныйРазмерФайла.Получить(); + Если МаксимальныйРазмерФайла = Неопределено ИЛИ МаксимальныйРазмерФайла = 0 Тогда + МаксимальныйРазмерФайла = 50*1024*1024; // 50 мб + Константы.МаксимальныйРазмерФайла.Установить(МаксимальныйРазмерФайла); + КонецЕсли; Возврат МаксимальныйРазмерФайла; @@ -128,7 +165,7 @@ // Возвращает Истина, если сервер работает под Windows Функция ЭтоПлатформаWindows() Экспорт - ТипПлатформыСервера = ТипПлатформыСервера(); + ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда @@ -178,16 +215,23 @@ Функция ПолучитьСписокЗапрещенныхРасширений() Экспорт УстановитьПривилегированныйРежим(Истина); - СписокЗапрещенныхРасширений = Константы.СписокЗапрещенныхРасширений.Получить(); - Возврат СписокЗапрещенныхРасширений; -КонецФункции - -// Возвращает тип платформы сервера -Функция ТипПлатформыСервера() Экспорт + СписокЗапрещенныхРасширенийОбластиДанных = Константы.СписокЗапрещенныхРасширенийОбластиДанных.Получить(); + Если СписокЗапрещенныхРасширенийОбластиДанных = Неопределено ИЛИ СписокЗапрещенныхРасширенийОбластиДанных = "" Тогда + СписокЗапрещенныхРасширенийОбластиДанных = "COM EXE BAT CMD VBS VBE JS JSE WSF WSH SCR"; + Константы.СписокЗапрещенныхРасширенийОбластиДанных.Установить(СписокЗапрещенныхРасширенийОбластиДанных); + КонецЕсли; - СисИнфо = Новый СистемнаяИнформация; - Возврат СисИнфо.ТипПлатформы; + ИтоговыйСписокРасширений = ""; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + СписокЗапрещенныхРасширений = Константы.СписокЗапрещенныхРасширений.Получить(); + ИтоговыйСписокРасширений = СписокЗапрещенныхРасширений + " " + СписокЗапрещенныхРасширенийОбластиДанных; + Иначе + ИтоговыйСписокРасширений = СписокЗапрещенныхРасширенийОбластиДанных; + КонецЕсли; + + Возврат ИтоговыйСписокРасширений; КонецФункции @@ -239,7 +283,7 @@ ПутьКТому = ПолныйПутьТома(СсылкаНаТом); // Добавляем слэш в конце, если его нет - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ПутьКТому, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + ПутьКТому = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКТому, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); // Имя файла для хранения на диске формировать следующим образом // - имя файла.номер версии.расширение файла @@ -257,7 +301,8 @@ // Если МаксимальныйРазмер = 0 - нет ограничения на размер файлов на томе Если СсылкаНаТом.МаксимальныйРазмер <> 0 Тогда - ТекущийРазмерВБайтах = ПодсчитатьРазмерФайловНаТоме(СсылкаНаТом.Ссылка); + ТекущийРазмерВБайтах = 0; + ФайловыеФункцииПереопределяемый.ПодсчитатьРазмерФайловНаТоме(СсылкаНаТом.Ссылка, ТекущийРазмерВБайтах); НовыйРазмерВБайтах = ТекущийРазмерВБайтах + РазмерФайла; НовыйРазмер = НовыйРазмерВБайтах / (1024 * 1024); @@ -269,7 +314,7 @@ КонецЕсли; КонецЕсли; - Дата = ТекущаяДата(); + Дата = ТекущаяДатаСеанса(); Если ДатаДляРазмещенияВТоме <> Неопределено Тогда Дата = ДатаДляРазмещенияВТоме; КонецЕсли; @@ -317,6 +362,8 @@ КонецЦикла; + УстановитьПривилегированныйРежим(Ложь); + // запись в журнал регистрации для администратора // здесь выдадим ошибки со всех томов СообщениеОбОшибке = НСтр("ru = 'Не удалось добавить файл ни на один из томов. Список ошибок: '") + Символы.ПС + Символы.ПС + ОписаниеВсехОшибок; @@ -326,37 +373,18 @@ СтрокаИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось добавить файл: ""%1.%2"". Обратитесь к администратору системы.'"), ИмяБезРасширения, Расширение); - ВызватьИсключение(СтрокаИсключения); + + Если Пользователи.ЭтоПолноправныйПользователь() Тогда + СтрокаИсключения = СообщениеОбОшибке; + КонецЕсли; + ВызватьИсключение СтрокаИсключения; -КонецПроцедуры // ДобавитьНаДиск() - -// Вернет размер файлов на томе - в байтах -Функция ПодсчитатьРазмерФайловНаТоме(СсылкаТома) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ЕСТЬNULL(СУММА(Версии.Размер), 0) КАК РазмерФайлов - |ИЗ - | Справочник.ВерсииФайлов КАК Версии - |ГДЕ - | Версии.Том = &Том"; - - Запрос.Параметры.Вставить("Том", СсылкаТома); - - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Следующий() Тогда - Возврат Число(Выборка.РазмерФайлов); - КонецЕсли; - - Возврат 0; - -КонецФункции +КонецПроцедуры // Возвращает полный путь тома - в зависимости от ОС Функция ПолныйПутьТома(СсылкаНаТом) Экспорт - ТипПлатформыСервера = ТипПлатформыСервера(); + ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда Возврат СсылкаНаТом.ПолныйПутьWindows; @@ -382,6 +410,16 @@ КонецФункции +// Получает хранение файлов в томах +// +Функция ПолучитьКонстантуХранитьФайлыВТомахНаДиске() Экспорт + + УстановитьПривилегированныйРежим(Истина); + ХранитьФайлыВТомахНаДиске = Константы.ХранитьФайлыВТомахНаДиске.Получить(); + Возврат ХранитьФайлыВТомахНаДиске; + +КонецФункции + // Получает тип хранения файлов // Функция ПолучитьХранитьФайлыВТомахНаДиске() Экспорт @@ -477,11 +515,7 @@ Настройки.Вставить("ИзвлекатьТекстыФайловНаСервере", ИзвлекатьТекстыФайловНаСервере); // МаксимальныйРазмерФайла - МаксимальныйРазмерФайла = Константы.МаксимальныйРазмерФайла.Получить(); - Если МаксимальныйРазмерФайла = Неопределено ИЛИ МаксимальныйРазмерФайла = 0 Тогда - МаксимальныйРазмерФайла = 50*1024*1024; // 50 мб - Константы.МаксимальныйРазмерФайла.Установить(МаксимальныйРазмерФайла); - КонецЕсли; + МаксимальныйРазмерФайла = ПолучитьМаксимальныйРазмерФайла(); Настройки.Вставить("МаксимальныйРазмерФайла", МаксимальныйРазмерФайла); // ЗапрещатьЗагрузкуФайловПоРасширению @@ -493,21 +527,21 @@ Настройки.Вставить("ЗапретЗагрузкиФайловПоРасширению", ЗапрещатьЗагрузкуФайловПоРасширению); // СписокЗапрещенныхРасширений - СписокЗапрещенныхРасширений = Константы.СписокЗапрещенныхРасширений.Получить(); - Если СписокЗапрещенныхРасширений = Неопределено ИЛИ СписокЗапрещенныхРасширений = "" Тогда - СписокЗапрещенныхРасширений = "COM EXE BAT CMD VBS VBE JS JSE WSF WSH SCR"; - Константы.СписокЗапрещенныхРасширений.Установить(СписокЗапрещенныхРасширений); - КонецЕсли; + СписокЗапрещенныхРасширений = ПолучитьСписокЗапрещенныхРасширений(); Настройки.Вставить("СписокЗапрещенныхРасширений", СписокЗапрещенныхРасширений); // СписокРасширенийФайловOpenDocument - СписокРасширенийФайловOpenDocument = Константы.СписокРасширенийФайловOpenDocument.Получить(); - Если ПустаяСтрока(СписокРасширенийФайловOpenDocument) Тогда - СписокРасширенийФайловOpenDocument = "ODT OTT ODP OTP ODS OTS ODC OTC ODF OTF ODM OTH SDW STW SXW STC SXC SDC SDD STI"; - Константы.СписокРасширенийФайловOpenDocument.Установить(СписокРасширенийФайловOpenDocument); - КонецЕсли; + СписокРасширенийФайловOpenDocument = ПолучитьСписокРасширенийФайловOpenDocument(); Настройки.Вставить("СписокРасширенийФайловOpenDocument", СписокРасширенийФайловOpenDocument); + // СписокРасширенийТекстовыхФайлов + СписокРасширенийТекстовыхФайлов = Константы.СписокРасширенийТекстовыхФайлов.Получить(); + Если ПустаяСтрока(СписокРасширенийТекстовыхФайлов) Тогда + СписокРасширенийТекстовыхФайлов = "TXT"; + Константы.СписокРасширенийТекстовыхФайлов.Установить(СписокРасширенийТекстовыхФайлов); + КонецЕсли; + Настройки.Вставить("СписокРасширенийТекстовыхФайлов", СписокРасширенийТекстовыхФайлов); + // ПоказыватьПодсказкиПриРедактированииФайлов ПоказыватьПодсказкиПриРедактированииФайлов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПоказыватьПодсказкиПриРедактированииФайлов"); Если ПоказыватьПодсказкиПриРедактированииФайлов = Неопределено Тогда @@ -528,6 +562,22 @@ КонецЕсли; Настройки.Вставить("ПоказыватьИнформациюЧтоФайлНеБылИзменен", ПоказыватьИнформациюЧтоФайлНеБылИзменен); + // Настройки открытия файлов + ТекстовыеФайлыРасширение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиОткрытияФайлов\ТекстовыеФайлы", + "Расширение", "TXT XML INI"); + ТекстовыеФайлыСпособОткрытия = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиОткрытияФайлов\ТекстовыеФайлы", + "СпособОткрытия", Перечисления.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе); + + ГрафическиеСхемыРасширение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиОткрытияФайлов\ГрафическиеСхемы", + "Расширение", "GRS"); + ГрафическиеСхемыСпособОткрытия = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиОткрытияФайлов\ГрафическиеСхемы", + "СпособОткрытия", Перечисления.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе); + + Настройки.Вставить("ТекстовыеФайлыРасширение", ТекстовыеФайлыРасширение); + Настройки.Вставить("ТекстовыеФайлыСпособОткрытия", ТекстовыеФайлыСпособОткрытия); + Настройки.Вставить("ГрафическиеСхемыРасширение", ГрафическиеСхемыРасширение); + Настройки.Вставить("ГрафическиеСхемыСпособОткрытия", ГрафическиеСхемыСпособОткрытия); + КонецПроцедуры // При переименовании пользователя переносит его настройки - РабочийКаталог, ДействиеПоДвойномуЩелчкуМыши и пр @@ -597,8 +647,22 @@ Процедура УдалитьФайлыНаСервере(Ссылка, ПрежнийПутьНаТоме) Экспорт ФайлВременный = Новый Файл(ПрежнийПутьНаТоме); - ФайлВременный.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ПрежнийПутьНаТоме); + Если ФайлВременный.Существует() Тогда + + Попытка + ФайлВременный.УстановитьТолькоЧтение(Ложь); + УдалитьФайлы(ПрежнийПутьНаТоме); + Исключение + + ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Удаление файлов в томе при обмене'"), + УровеньЖурналаРегистрации.Ошибка,,, + ОписаниеОшибки); + + КонецПопытки; + + КонецЕсли; + ФайловыеФункцииПереопределяемый.УдалитьФайлыПриПолученииДанныхФайла(Ссылка, ФайлВременный.Путь); КонецПроцедуры @@ -608,12 +672,37 @@ Функция ПолучитьСписокРасширенийФайловOpenDocument() Экспорт УстановитьПривилегированныйРежим(Истина); - СписокРасширенийФайловOpenDocument = Константы.СписокРасширенийФайловOpenDocument.Получить(); - Если ПустаяСтрока(СписокРасширенийФайловOpenDocument) Тогда - СписокРасширенийФайловOpenDocument = "ODT OTT ODP OTP ODS OTS ODC OTC ODF OTF ODM OTH SDW STW SXW STC SXC SDC SDD STI"; - КонецЕсли; - Возврат СписокРасширенийФайловOpenDocument; + СписокРасширенийФайловOpenDocumentОбластиДанных = Константы.СписокРасширенийФайловOpenDocumentОбластиДанных.Получить(); + Если СписокРасширенийФайловOpenDocumentОбластиДанных = Неопределено ИЛИ СписокРасширенийФайловOpenDocumentОбластиДанных = "" Тогда + СписокРасширенийФайловOpenDocumentОбластиДанных = "ODT OTT ODP OTP ODS OTS ODC OTC ODF OTF ODM OTH SDW STW SXW STC SXC SDC SDD STI"; + Константы.СписокРасширенийФайловOpenDocumentОбластиДанных.Установить(СписокРасширенийФайловOpenDocumentОбластиДанных); + КонецЕсли; + + ИтоговыйСписокРасширений = ""; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + СписокЗапрещенныхРасширений = Константы.СписокРасширенийФайловOpenDocument.Получить(); + ИтоговыйСписокРасширений = СписокЗапрещенныхРасширений + " " + СписокРасширенийФайловOpenDocumentОбластиДанных; + Иначе + ИтоговыйСписокРасширений = СписокРасширенийФайловOpenDocumentОбластиДанных; + КонецЕсли; + + Возврат ИтоговыйСписокРасширений; + +КонецФункции + +// Получает СписокРасширенийТекстовыхФайлов +// +Функция ПолучитьСписокРасширенийТекстовыхФайлов() Экспорт + + УстановитьПривилегированныйРежим(Истина); + СписокРасширенийТекстовыхФайлов = Константы.СписокРасширенийТекстовыхФайлов.Получить(); + Если ПустаяСтрока(СписокРасширенийТекстовыхФайлов) Тогда + СписокРасширенийТекстовыхФайлов = "TXT"; + КонецЕсли; + Возврат СписокРасширенийТекстовыхФайлов; + КонецФункции // Вызывается при обмене данными для определения пути к файлу. @@ -640,30 +729,6 @@ //////////////////////////////////////////////////////////////////////////////// // Прочие служебные функции -// Получает ссылки на объекты с файлами -Функция ПолучитьСсылкиНаОбъектыСФайлами(ПолноеИмяОМ) Экспорт - - ТекстЗапроса = " - |ВЫБРАТЬ - | ОбъектСФайлами.Ссылка КАК Ссылка - |ИЗ - | [ПолноеИмяОМ] КАК ОбъектСФайлами - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Файлы КАК Файлы - | ПО ОбъектСФайлами.Ссылка = Файлы.ВладелецФайла - |ГДЕ - | Файлы.Ссылка <> ЗНАЧЕНИЕ(Справочник.Файлы.ПустаяСсылка) - |СГРУППИРОВАТЬ ПО - | ОбъектСФайлами.Ссылка"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ПолноеИмяОМ]", ПолноеИмяОМ); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - - Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - -КонецФункции - // Возвращает Истина, если есть хранимые файлы к объекту ВнешнийОбъект. // Функция ЕстьХранимыеФайлы(ВнешнийОбъект) Экспорт @@ -684,8 +749,33 @@ КонецФункции +// Вычисляет кодировку +Функция ОпределитьКодировкуВерсии(ВерсияСсылка, Расширение) Экспорт + + СписокРасширенийТекстовыхФайлов = ФайловыеФункцииПовтИсп.ПолучитьСписокРасширенийТекстовыхФайлов(); + + Если ФайловыеФункцииКлиентСервер.РасширениеФайлаВСписке(СписокРасширенийТекстовыхФайлов, Расширение) Тогда + + ИмяФайлаСПутем = ФайловыеФункцииПереопределяемый.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ВерсияСсылка); + + Кодировка = ФайловыеФункцииКлиентСервер.ОпределитьКодировкуТекстовогоФайла(ИмяФайлаСПутем); + + ТипХраненияФайла = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ВерсияСсылка, "ТипХраненияФайла"); + + Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + УдалитьФайлы(ИмяФайлаСПутем); + КонецЕсли; + + Возврат Кодировка; + + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// -// Функции работы с ЭЦП +// ЭЦП для файлов // Проверяет все подписи (на сервере) из массива ДанныеВыделенныхСтрок Процедура ПроверитьНаСервере(ДанныеВыделенныхСтрок) Экспорт @@ -759,4 +849,3 @@ КонецПопытки; КонецПроцедуры - diff --git a/SSL/src/CommonModules/ФайловыеФункцииКлиент/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииКлиент/Module.bsl index 5b955a49a..22aa78812 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииКлиент/Module.bsl @@ -306,7 +306,8 @@ #Если НЕ ВебКлиент Тогда // Извлекает текст из файла на диске на клиенте и помещает результат на сервер // -Процедура ИзвлечьТекстВерсии(ФайлИлиВерсияФайла, АдресФайла, Расширение, УникальныйИдентификатор) Экспорт +Процедура ИзвлечьТекстВерсии(ФайлИлиВерсияФайла, АдресФайла, Расширение, УникальныйИдентификатор, + Кодировка = Неопределено) Экспорт ИмяФайлаСПутем = ПолучитьИмяВременногоФайла(Расширение); @@ -327,7 +328,7 @@ // Извлекаем текст из файла Отказ = Ложь; - Текст = ФайловыеФункцииКлиентСервер.ИзвлечьТекст(ИмяФайлаСПутем, Отказ); + Текст = ФайловыеФункцииКлиентСервер.ИзвлечьТекст(ИмяФайлаСПутем, Отказ, Кодировка); Если Отказ = Ложь Тогда РезультатИзвлечения = "Извлечен"; diff --git a/SSL/src/CommonModules/ФайловыеФункцииКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииКлиентПовтИсп/Module.bsl index 23ae5e945..0e52b3f73 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииКлиентПовтИсп/Module.bsl @@ -25,3 +25,8 @@ Функция ПолучитьСписокРасширенийФайловOpenDocument() Экспорт Возврат ФайловыеФункции.ПолучитьСписокРасширенийФайловOpenDocument(); КонецФункции + +// Получает СписокРасширенийТекстовыхФайлов +Функция ПолучитьСписокРасширенийТекстовыхФайлов() Экспорт + Возврат ФайловыеФункции.ПолучитьСписокРасширенийТекстовыхФайлов(); +КонецФункции diff --git a/SSL/src/CommonModules/ФайловыеФункцииКлиентСервер/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииКлиентСервер/Module.bsl index b644e7b36..6c2808fba 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииКлиентСервер/Module.bsl @@ -34,25 +34,31 @@ // Извлечь текст из файла и возвратить его в виде строки // -Функция ИзвлечьТекст(ПолноеИмяФайла, Отказ = Ложь) Экспорт +Функция ИзвлечьТекст(ПолноеИмяФайла, Отказ = Ложь, Кодировка = Неопределено) Экспорт ИзвлеченныйТекст = ""; #Если Не ВебКлиент Тогда + + СписокРасширенийТекстовыхФайлов = ""; + #Если Сервер ИЛИ ВнешнееСоединение Тогда + СписокРасширенийТекстовыхФайлов = ФайловыеФункцииПовтИсп.ПолучитьСписокРасширенийТекстовыхФайлов(); + #Иначе + СписокРасширенийТекстовыхФайлов = ФайловыеФункцииКлиентПовтИсп.ПолучитьСписокРасширенийТекстовыхФайлов(); + #КонецЕсли + + РасширениеФайлаБезТочки = ПолучитьРасширениеИмениФайла(ПолноеИмяФайла); + + Если РасширениеФайлаВСписке(СписокРасширенийТекстовыхФайлов, РасширениеФайлаБезТочки) Тогда + Отказ = Ложь; + Возврат ИзвлечьТекстИзТекстовогоФайла(ПолноеИмяФайла, Кодировка); + КонецЕсли; + Попытка Извлечение = Новый ИзвлечениеТекста(ПолноеИмяФайла); ИзвлеченныйТекст = Извлечение.ПолучитьТекст(); Исключение - ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + """" + ПолноеИмяФайла + """"; - #Если НаКлиенте Тогда - ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации("Извлечение текста", - "Ошибка", ТекстОшибки, ,Истина); - #Иначе - ЗаписьЖурналаРегистрации("Извлечение текста", - УровеньЖурналаРегистрации.Ошибка, , , - ТекстОшибки); - #КонецЕсли - + // Ничего не пишем - это нормальная ситуация - когда Текст некому извлечь ИзвлеченныйТекст = ""; Отказ = Истина; КонецПопытки; @@ -82,6 +88,62 @@ КонецФункции +// Вычисляет кодировку +Функция ОпределитьКодировкуТекстовогоФайла(ПолноеИмяФайла) Экспорт + + Кодировка = Неопределено; + +#Если Не ВебКлиент Тогда + + // Определяем кодировку + + ЧтениеТекста = Новый ЧтениеТекста(ПолноеИмяФайла, КодировкаТекста.Системная); + + // Проверяем наличие BOM (Byte order mark) + Символ0 = ЧтениеТекста.Прочитать(1); + Символ1 = ЧтениеТекста.Прочитать(1); + Символ2 = ЧтениеТекста.Прочитать(1); + + КодСимвола0 = КодСимвола(Символ0); + КодСимвола1 = КодСимвола(Символ1); + КодСимвола2 = КодСимвола(Символ2); + + Если КодСимвола0 = 1087 И КодСимвола1 = 187 И КодСимвола2 = 1111 Тогда + Кодировка = "UTF-8"; + ИначеЕсли КодСимвола0 = 1103 И КодСимвола1 = 1102 И КодСимвола2 = 13 Тогда + Кодировка = "UTF-16"; + Иначе + Кодировка = "windows-1251"; + КонецЕсли; + +#КонецЕсли + + Возврат Кодировка; + +КонецФункции + +// Извлекает текст в соответствии с кодировкой. +// Если кодировка не задана - сама вычисляет кодировку +Функция ИзвлечьТекстИзТекстовогоФайла(ПолноеИмяФайла, Кодировка) + + ИзвлеченныйТекст = ""; + +#Если Не ВебКлиент Тогда + + // Определяем кодировку + Если Не ЗначениеЗаполнено(Кодировка) Тогда + Кодировка = Неопределено; + КонецЕсли; + + ЧтениеТекста = Новый ЧтениеТекста(ПолноеИмяФайла, Кодировка); + ИзвлеченныйТекст = ЧтениеТекста.Прочитать(); + +#КонецЕсли + + Возврат ИзвлеченныйТекст; + +КонецФункции + // Извлечь текст из файла OpenDocument и возвратить его в виде строки // Функция ИзвлечьТекстOpenDocument(ПутьКФайлу) Экспорт @@ -97,15 +159,20 @@ Файл = Новый Файл(ВременныйZIPФайл); Файл.УстановитьТолькоЧтение(Ложь); - Архив = Новый ЧтениеZipФайла(); - Архив.Открыть(ВременныйZIPФайл); - Архив.ИзвлечьВсе(ВременнаяПапкаДляРазархивирования, РежимВосстановленияПутейФайловZIP.Восстанавливать); - Архив.Закрыть(); - ЧтениеXML = Новый ЧтениеXML(); - - ЧтениеXML.ОткрытьФайл(ВременнаяПапкаДляРазархивирования + "/content.xml"); - ИзвлеченныйТекст = ИзвлечьТекстИзContentXML(ЧтениеXML); - ЧтениеXML.Закрыть(); + Попытка + Архив = Новый ЧтениеZipФайла(); + Архив.Открыть(ВременныйZIPФайл); + Архив.ИзвлечьВсе(ВременнаяПапкаДляРазархивирования, РежимВосстановленияПутейФайловZIP.Восстанавливать); + Архив.Закрыть(); + ЧтениеXML = Новый ЧтениеXML(); + + ЧтениеXML.ОткрытьФайл(ВременнаяПапкаДляРазархивирования + "/content.xml"); + ИзвлеченныйТекст = ИзвлечьТекстИзContentXML(ЧтениеXML); + ЧтениеXML.Закрыть(); + Исключение + // не считаем ошибкой, т.к. например расширение OTF может быть как OpenDocument, так и шрифт OpenType + ИзвлеченныйТекст = ""; + КонецПопытки; УдалитьФайлы(ВременнаяПапкаДляРазархивирования); УдалитьФайлы(ВременныйZIPФайл); @@ -189,14 +256,15 @@ // Извлечь текст из файла и поместить во временное хранилище // -Функция ИзвлечьТекстВоВременноеХранилище(ПолноеИмяФайла, УникальныйИдентификатор = "", Отказ = Ложь) Экспорт +Функция ИзвлечьТекстВоВременноеХранилище(ПолноеИмяФайла, УникальныйИдентификатор = "", Отказ = Ложь, + Кодировка = Неопределено) Экспорт АдресВременногоХранилища = ""; Отказ = Ложь; #Если Не ВебКлиент Тогда - Текст = ИзвлечьТекст(ПолноеИмяФайла, Отказ); + Текст = ИзвлечьТекст(ПолноеИмяФайла, Отказ, Кодировка); Если ПустаяСтрока(Текст) Тогда Возврат ""; @@ -232,6 +300,7 @@ ГенераторСлучая = Неопределено; #Если Не ВебКлиент Тогда + // ТекущаяДата() используется только для генерации случайного числа поэтому приведение к ТекущаяДатаСеанса не нужно ГенераторСлучая = Новый ГенераторСлучайныхЧисел(Секунда(ТекущаяДата())); #КонецЕсли @@ -240,6 +309,7 @@ #Если Не ВебКлиент Тогда НомерКаталога = ГенераторСлучая.СлучайноеЧисло(0, 25); #Иначе + // ТекущаяДата() используется только для генерации случайного числа поэтому приведение к ТекущаяДатаСеанса не нужно НомерКаталога = Секунда(ТекущаяДата()) % 26; #КонецЕсли @@ -263,7 +333,7 @@ ПодКаталог = ПодКаталог + ЦиклНомерСтрока; КонецЕсли; - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ПодКаталог, ТипПлатформыТекущий); + ПодКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПодКаталог, ТипПлатформыТекущий); КонецЕсли; ПолныйПодКаталог = ИмяКаталога + ПодКаталог; @@ -298,6 +368,7 @@ ГенераторСлучая = Неопределено; #Если Не ВебКлиент Тогда + // ТекущаяДата() используется только для генерации случайного числа поэтому приведение к ТекущаяДатаСеанса не нужно ГенераторСлучая = Новый ГенераторСлучайныхЧисел(Секунда(ТекущаяДата())); #КонецЕсли @@ -306,6 +377,7 @@ #Если Не ВебКлиент Тогда НомерКаталога = ГенераторСлучая.СлучайноеЧисло(0, 25); #Иначе + // ТекущаяДата() используется только для генерации случайного числа поэтому приведение к ТекущаяДатаСеанса не нужно НомерКаталога = Секунда(ТекущаяДата()) % 26; #КонецЕсли @@ -536,7 +608,7 @@ КонецФункции -// Получается индекс пиктограммы файла - индекс в картинке ПиктограммыФайлов +// Получается индекс пиктограммы файла - индекс в картинке КоллекцияПиктограммФайлов // Функция ПолучитьИндексПиктограммыФайла(Знач РасширениеФайлаТолькоТекст) Экспорт diff --git a/SSL/src/CommonModules/ФайловыеФункцииПереопределяемый/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииПереопределяемый/Module.bsl index c8f599885..ab9b4e54a 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииПереопределяемый/Module.bsl @@ -2,9 +2,9 @@ // по работе с файлами Процедура ПолучитьПерсональныеНастройкиРаботыСФайлами(Настройки) Экспорт - // РаботСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиВызовСервера.ПолучитьПерсональныеНастройкиФайловыхФункций(Настройки); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами КонецПроцедуры @@ -12,9 +12,9 @@ // Процедура ПеренестиНастройкиПриСменеИмениПользователя(знач ИмяТекущее, знач ИмяУстанавливаемое) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиВызовСервера.ПеренестиНастройкиПриСменеИмениПользователя(ИмяТекущее, ИмяУстанавливаемое); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами КонецПроцедуры @@ -30,13 +30,13 @@ // Процедура УстановитьИмяФайлаПриОтправкеДанныхФайла(ЭлементДанных, ИмяКаталогаФайлов, УникальныйИдентификатор, ПутьФайла) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиСобытия.УстановитьИмяФайлаПриОтправкеДанныхФайла(ЭлементДанных, ИмяКаталогаФайлов, УникальныйИдентификатор, ПутьФайла); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы ПрисоединенныеФайлыСобытия.УстановитьИмяФайлаПриОтправкеДанныхФайла(ЭлементДанных, ИмяКаталогаФайлов, УникальныйИдентификатор, ПутьФайла); - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы КонецПроцедуры @@ -44,9 +44,9 @@ // Процедура УдалитьФайлыПриПолученииДанныхФайла(ЭлементДанных, ПутьСПодкаталогом) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиВызовСервера.УдалитьФайлыПриПолученииДанныхФайла(ЭлементДанных, ПутьСПодкаталогом); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами КонецПроцедуры @@ -55,15 +55,15 @@ Процедура ДобавитьНаДискПриПолученииДанныхФайла(ЭлементДанных, ДвоичныеДанные, ПутьКФайлуНаТоме, СсылкаНаТом, ВремяИзменения, ИмяБезРасширения, Расширение, РазмерФайла, Зашифрован) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиСобытия.ДобавитьНаДискПриПолученииДанныхФайла(ЭлементДанных, ДвоичныеДанные, ПутьКФайлуНаТоме, СсылкаНаТом, ВремяИзменения, ИмяБезРасширения, Расширение, РазмерФайла); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы ПрисоединенныеФайлыСобытия.ДобавитьНаДискПриПолученииДанныхФайла(ЭлементДанных, ДвоичныеДанные, ПутьКФайлуНаТоме, СсылкаНаТом, ВремяИзменения, ИмяБезРасширения, Расширение, РазмерФайла, Зашифрован); - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы КонецПроцедуры @@ -71,13 +71,13 @@ // Процедура ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ХранитьФайлыВТомахНаДиске, ПрисоединяемыеФайлы) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиВызовСервера.ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ХранитьФайлыВТомахНаДиске); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы ПрисоединенныеФайлы.ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ХранитьФайлыВТомахНаДиске, ПрисоединяемыеФайлы); - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы КонецПроцедуры @@ -85,13 +85,13 @@ // Процедура УдалитьРегистрациюИзменений(ПланОбменаСсылка, ПрисоединяемыеФайлы) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиВызовСервера.УдалитьРегистрациюИзменений(ПланОбменаСсылка); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы ПрисоединенныеФайлы.УдалитьРегистрациюИзменений(ПланОбменаСсылка, ПрисоединяемыеФайлы); - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы КонецПроцедуры @@ -99,13 +99,23 @@ // Процедура ЭтоЭлементФайл(ЭлементДанных, ЭтоФайл) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиСобытия.ЭтоЭлементФайл(ЭлементДанных, ЭтоФайл); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы ПрисоединенныеФайлыСобытия.ЭтоЭлементФайл(ЭлементДанных, ЭтоФайл); - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + +КонецПроцедуры + +// Возвращает Истина, если это элемент данных - ХранимыеФайлыВерсий +// +Процедура ЭтоЭлементХранимыеФайлыВерсий(ЭлементДанных, ЭтоФайл) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + РаботаСФайламиСобытия.ЭтоЭлементХранимыеФайлыВерсий(ЭлементДанных, ЭтоФайл); + // Конец СтандартныеПодсистемы.РаботаСФайлами КонецПроцедуры @@ -113,9 +123,9 @@ // Процедура ЭлементЗапрещенКЗагрузке(ЭлементДанных, ПолучениеЭлемента, Значение) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиСобытия.ЭлементЗапрещенКЗагрузке(ЭлементДанных, ПолучениеЭлемента, Значение); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами КонецПроцедуры @@ -123,17 +133,17 @@ // Функция ПолучитьДвоичныеДанныеФайлаИПодписи(ДанныеСтроки) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами Если РаботаСФайламиСобытия.ЭтоЭлементРаботаСФайлами(ДанныеСтроки.Объект) Тогда Возврат РаботаСФайламиВызовСервера.ПолучитьДанныеФайлаИДвоичныеДанные(, ДанныеСтроки.Объект, ДанныеСтроки.АдресПодписи); КонецЕсли; - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы Если ПрисоединенныеФайлыСобытия.ЭтоЭлементПрисоединенныеФайлы(ДанныеСтроки.Объект) Тогда Возврат ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайлаИПодписи(ДанныеСтроки.Объект, ДанныеСтроки.АдресПодписи); КонецЕсли; - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы Возврат Неопределено; @@ -141,66 +151,92 @@ // Возвращает текст запроса для извлечения текста // -Процедура ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса) Экспорт +Процедура ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса, ПолучитьВсеФайлы = Ложь) Экспорт - // РаботаСФайлами - РаботаСФайламиВызовСервера.ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса); - // Конец РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами + РаботаСФайламиВызовСервера.ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса, ПолучитьВсеФайлы); + // Конец СтандартныеПодсистемы.РаботаСФайлами - // ПрисоединенныеФайлы - ПрисоединенныеФайлы.ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса); - // Конец ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ПрисоединенныеФайлы.ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса, ПолучитьВсеФайлы); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы КонецПроцедуры +// Возвращает число файлов с неизвлеченным текстом +// +Процедура ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(ЧислоВерсий) Экспорт + + ЧислоВерсий = 0; + + // СтандартныеПодсистемы.РаботаСФайлами + ЧислоВерсий = ЧислоВерсий + РаботаСФайламиВызовСервера.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(); + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ЧислоВерсий = ЧислоВерсий + ПрисоединенныеФайлы.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + +КонецПроцедуры + +Процедура ПодсчитатьРазмерФайловНаТоме(СсылкаТома, РазмерФайлов) Экспорт + + РазмерФайлов = 0; + + // СтандартныеПодсистемы.РаботаСФайлами + РазмерФайлов = РазмерФайлов + РаботаСФайламиВызовСервера.ПодсчитатьРазмерФайловНаТоме(СсылкаТома); + // Конец СтандартныеПодсистемы.РаботаСФайлами + +КонецПроцедуры + // Получает полный путь к файлу на диске Функция ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлСсылка) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами Если РаботаСФайламиСобытия.ЭтоЭлементРаботаСФайлами(ФайлСсылка) Тогда Возврат РаботаСФайламиВызовСервера.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлСсылка); КонецЕсли; - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы Если ПрисоединенныеФайлыСобытия.ЭтоЭлементПрисоединенныеФайлы(ФайлСсылка) Тогда Возврат ПрисоединенныеФайлы.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлСсылка); КонецЕсли; - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы КонецФункции // Записывает извлеченный текст Процедура ЗаписатьИзвлеченныйТекст(ФайлОбъект) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами Если РаботаСФайламиСобытия.ЭтоЭлементРаботаСФайлами(ФайлОбъект) Тогда РаботаСФайламиВызовСервера.ЗаписатьИзвлеченныйТекст(ФайлОбъект); КонецЕсли; - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы Если ПрисоединенныеФайлыСобытия.ЭтоЭлементПрисоединенныеФайлы(ФайлОбъект) Тогда ПрисоединенныеФайлы.ЗаписатьИзвлеченныйТекст(ФайлОбъект); КонецЕсли; - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы КонецПроцедуры // Возвращает навигационную ссылку на файл (на реквизит или во временное хранилище) Функция ПолучитьНавигационнуюСсылкуФайла(ФайлСсылка, УникальныйИдентификатор) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами Если РаботаСФайламиСобытия.ЭтоЭлементРаботаСФайлами(ФайлСсылка) Тогда Возврат РаботаСФайламиВызовСервера.ПолучитьНавигационнуюСсылкуДляОткрытия(ФайлСсылка, УникальныйИдентификатор); КонецЕсли; - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы Если ПрисоединенныеФайлыСобытия.ЭтоЭлементПрисоединенныеФайлы(ФайлСсылка) Тогда Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла(ФайлСсылка, УникальныйИдентификатор).СсылкаНаДвоичныеДанныеФайла; КонецЕсли; - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы КонецФункции @@ -208,13 +244,13 @@ // Процедура ПолучитьКоличествоФайловВТомах(КоличествоФайловВТомах) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиВызовСервера.ПолучитьКоличествоФайловВТомах(КоличествоФайловВТомах); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы ПрисоединенныеФайлы.ПолучитьКоличествоФайловВТомах(КоличествоФайловВТомах); - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы КонецПроцедуры @@ -222,13 +258,13 @@ // Процедура ВыполнитьДополнительнуюОбработкуПриОтправкеДанных(ЭлементДанных) Экспорт - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы ПрисоединенныеФайлыСобытия.ВыполнитьДополнительнуюОбработкуПриОтправкеДанных(ЭлементДанных); - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиСобытия.ВыполнитьДополнительнуюОбработкуПриОтправкеДанных(ЭлементДанных); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами КонецПроцедуры @@ -236,13 +272,13 @@ // Процедура ВыполнитьДополнительнуюОбработкуПриПолученииДанных(ЭлементДанных) Экспорт - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы ПрисоединенныеФайлыСобытия.ВыполнитьДополнительнуюОбработкуПриПолученииДанных(ЭлементДанных); - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиСобытия.ВыполнитьДополнительнуюОбработкуПриПолученииДанных(ЭлементДанных); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами КонецПроцедуры @@ -250,13 +286,13 @@ // Процедура ОпределитьНаличиеХранимыхФайлов(ВнешнийОбъект, ЕстьХранимыеФайлы) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиВызовСервера.ОпределитьНаличиеХранимыхФайлов(ВнешнийОбъект, ЕстьХранимыеФайлы); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы ПрисоединенныеФайлы.ОпределитьНаличиеХранимыхФайлов(ВнешнийОбъект, ЕстьХранимыеФайлы); - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы КонецПроцедуры @@ -264,12 +300,27 @@ // Процедура ПолучитьХранимыеФайлы(ВнешнийОбъект, ХранимыеФайлы) Экспорт - // РаботаСФайлами + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиВызовСервера.ПолучитьХранимыеФайлы(ВнешнийОбъект, ХранимыеФайлы); - // Конец РаботаСФайлами + // Конец СтандартныеПодсистемы.РаботаСФайлами - // ПрисоединенныеФайлы + // СтандартныеПодсистемы.ПрисоединенныеФайлы ПрисоединенныеФайлы.ПолучитьХранимыеФайлы(ВнешнийОбъект, ХранимыеФайлы); - // Конец ПрисоединенныеФайлы + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы КонецПроцедуры + +// Читает кодировку версии файла +// +// Параметры +// ВерсияСсылка - ссылка на версию файла +// +// Возвращаемое значение: +// Строка кодировки +Процедура ПолучитьКодировкуВерсииФайла(ВерсияСсылка, Кодировка) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + Кодировка = РаботаСФайламиВызовСервера.ПолучитьКодировкуВерсииФайла(ВерсияСсылка); + // Конец СтандартныеПодсистемы.РаботаСФайлами + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ФайловыеФункцииПовтИсп/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииПовтИсп/Module.bsl index 2998a28b7..79ac23aba 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииПовтИсп/Module.bsl @@ -7,3 +7,8 @@ Функция ПолучитьСписокРасширенийФайловOpenDocument() Экспорт Возврат ФайловыеФункции.ПолучитьСписокРасширенийФайловOpenDocument(); КонецФункции + +// Получает СписокРасширенийТекстовыхФайлов +Функция ПолучитьСписокРасширенийТекстовыхФайлов() Экспорт + Возврат ФайловыеФункции.ПолучитьСписокРасширенийТекстовыхФайлов(); +КонецФункции diff --git a/SSL/src/CommonModules/ФизическиеЛица/Module.bsl b/SSL/src/CommonModules/ФизическиеЛица/Module.bsl index 5bf62b53b..de68b82ee 100644 --- a/SSL/src/CommonModules/ФизическиеЛица/Module.bsl +++ b/SSL/src/CommonModules/ФизическиеЛица/Module.bsl @@ -1,5 +1,248 @@ //////////////////////////////////////////////////////////////////////////////// -// ОБНОВЛЕНИЕ ПОДСИСТЕМЫ С ПРЕДЫДУЩИХ РЕЛИЗОВ +// Подсистема "Физические лица" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Проверяет, что серия документа для переданного вида документа указана правильно. +// +// Параметры: +// ВидДокумента - СправочникСсылка.ВидыДокументовФизическихЛиц - вид документа, для которого необходимо +// проверить правильность серии +// Серия - Строка - серия документа +// ОбъектИлиСсылка - ЛюбаяСсылка или ЛюбойОбъект - объект или ссылка на объект, в котором вводится серия +// Поле - ЭлементУправляемойФормы - элемент управляемой формы, в котором редактируется серия +// +// Возвращаемое значение: +// Булево - результат проверки, Истина - правильно, Ложь - нет. +// +Функция СерияДокументаУказанаПравильно(ВидДокумента, Серия, ОбъектИлиСсылка, Поле) Экспорт + + // проверка + Если ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортСССР + ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.СвидетельствоОРождении Тогда + ТипДокумента = 1; + + ИначеЕсли ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.УдостоверениеОфицера + ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортМинморфлота + ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ВоенныйБилет + ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортМоряка + ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ВоенныйБилетОфицераЗапаса Тогда + ТипДокумента = 2; + + ИначеЕсли ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ЗагранпаспортСССР + ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ДипломатическийПаспорт + ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ЗагранпаспортРФ Тогда + ТипДокумента = 3; + + ИначеЕсли ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ Тогда + ТипДокумента = 4; + + Иначе // проверка не требуется + ТипДокумента = 5; + + КонецЕсли; + + Серия = СокрЛП(Серия); + + Если ТипДокумента = 1 Тогда // паспорт СССР и свидетельство о рождении + + Поз = Найти(Серия, "-"); + Если Поз = 0 Тогда + ТекстОшибки = НСтр("ru = 'Серия документа должна состоять из двух частей, разделенных символом ""-"".'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + КонецЕсли; + + ЧастьСерии1 = Лев(Серия, Поз - 1); + ЧастьСерии2 = СокрЛП(Сред(Серия, Поз + 1)); + + Поз = Найти(ЧастьСерии2, "-"); + Если Поз <> 0 Тогда + ТекстОшибки = НСтр("ru = 'В серии документа должно быть только две группы символов.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + КонецЕсли; + + Если ПустаяСтрока(ЧастьСерии1) Тогда + ТекстОшибки = НСтр("ru = 'В серии документа отсутствует числовая часть.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + + ИначеЕсли ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("IVXLC1УХЛС", ЧастьСерии1, " ")) = 0 Тогда + ТекстОшибки = НСтр("ru = 'Числовая часть серии документа должна указываться символами 1 У Х Л С или I V X L C.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + + ИначеЕсли СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("IVXLC", ЧастьСерии1, "1УХЛС") <> СтроковыеФункцииКлиентСервер.ПреобразоватьЧислоВРимскуюНотацию(СтроковыеФункцииКлиентСервер.ПреобразоватьЧислоВАрабскуюНотацию(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("IVXLC", ЧастьСерии1, "1УХЛС"))) Тогда + ТекстОшибки = НСтр("ru = 'Числовая часть серии документа указана некорректно.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + + ИначеЕсли СтрДлина(ЧастьСерии2) <> 2 Или Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", ЧастьСерии2, " ")) Тогда + ТекстОшибки = НСтр("ru = 'После разделителя ""-"" в серии документа должны быть ДВЕ pусcкие заглавные буквы.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + + КонецЕсли; + + ИначеЕсли ТипДокумента = 2 Тогда // серия - две буквы: военный билет, ... + Если СтрДлина(Серия) <> 2 Или Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", Серия, " ")) Тогда + ТекстОшибки = НСтр("ru = 'В серии документа должны быть ДВЕ pусcкие заглавные буквы.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + КонецЕсли; + + ИначеЕсли ТипДокумента = 3 Тогда // серия - две цифры: загранпаспорта + Если СтрДлина(Серия) <> 2 Или Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("0123456789", Серия, " ")) Тогда + ТекстОшибки = НСтр("ru = 'В серии документа должно быть ДВЕ цифры.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + КонецЕсли; + + ИначеЕсли ТипДокумента = 4 Тогда // серия - две группы цифр: новый паспорт + Поз = Найти(Серия, " "); + Если Поз = 0 Тогда + ТекстОшибки = НСтр("ru = 'В серии документа должно быть две группы цифр.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + КонецЕсли; + + ПерваяЧасть = Лев(Серия, Поз-1); + ВтораяЧасть = СокрЛП(Сред(Серия, Поз+1)); + + Поз = Найти(ВтораяЧасть, " "); + Если Поз <> 0 Тогда + ТекстОшибки = НСтр("ru = 'В серии документа должно быть только две группы цифр.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + КонецЕсли; + + Если СтрДлина(ПерваяЧасть) <> 2 Или Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("0123456789", ПерваяЧасть, " ")) Тогда + ТекстОшибки = НСтр("ru = 'Первая группа символов серии документа должна содержать две цифры.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + КонецЕсли; + + Если СтрДлина(ВтораяЧасть) <> 2 Или Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("0123456789", ВтораяЧасть, " ")) Тогда + ТекстОшибки = НСтр("ru = 'Вторая группа символов серии документа должна содержать две цифры.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + КонецЕсли; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Проверяет, что номер документа для переданного вида документа указан правильно. +// +// Параметры: +// ВидДокумента - СправочникСсылка.ВидыДокументовФизическихЛиц - вид документа, для которого необходимо +// проверить правильность номера +// Номер - Строка - номер документа +// ОбъектИлиСсылка - ЛюбаяСсылка или ЛюбойОбъект - объект или ссылка на объект, в котором вводится номер +// Поле - ЭлементУправляемойФормы - элемент управляемой формы, в котором редактируется номер +// +// Возвращаемое значение: +// Булево - результат проверки, Истина - правильно, Ложь - нет. +// +Функция НомерДокументаУказанПравильно(ВидДокумента, Номер, ОбъектИлиСсылка, Поле) Экспорт + + Если Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("0123456789", Номер, " ")) Тогда + ТекстОшибки = НСтр("ru = 'В номере документа присутствуют недопустимые символы.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + КонецЕсли; + + ДлинаНомера = СтрДлина(СокрЛП(Номер)); + + Если ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортСССР + ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.СвидетельствоОРождении + ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.УдостоверениеОфицера + ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортМинморфлота + ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ Тогда + Если ДлинаНомера <> 6 Тогда + ТекстОшибки = НСтр("ru = 'Номер документа должен состоять из 6 символов.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + КонецЕсли; + + ИначеЕсли ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ДипломатическийПаспорт + ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ЗагранпаспортРФ Тогда + Если ДлинаНомера <> 7 Тогда + ТекстОшибки = НСтр("ru = 'Номер документа должен состоять из 7 символов.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + КонецЕсли; + + ИначеЕсли ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ЗагранпаспортСССР + ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ВоенныйБилет + ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортМоряка + ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ВоенныйБилетОфицераЗапаса Тогда + Если (ДлинаНомера < 6 ) или ( ДлинаНомера > 7 ) Тогда + ТекстОшибки = НСтр("ru = 'Номер документа должен состоять из 6 или 7 символов.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); + Возврат Ложь; + КонецЕсли; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Формирует фамилию и инициалы либо по наименованию элемента справочника ФизическиеЛица, +// либо по переданным строкам. +// Если передан Объект, то извлеченная из него строка считается совокупностью +// Фамилия + Имя + Отчество, разделенными пробелами. +// +// Параметры +// ОбъектИлиСтрока - строка, ссылка или объект элемента справочника ФизическиеЛица. +// Фамилия - фамилия физического лица. +// Имя - имя физического лица. +// Отчество - отчество физического лица. +// +// Возвращаемое значение +// Строка - фамилия и инициалы одной строкой. +// В параметрах Фамилия, Имя и Отчество записываются вычисленные части. +// +// Пример: +// Результат = ФамилияИнициалыФизЛица("Иванов Иван Иванович"); // Результат = "Иванов И. И." +// +Функция ФамилияИнициалыФизЛица(ОбъектИлиСтрока = "", Фамилия = " ", Имя = " ", Отчество = " ") Экспорт + + ТипОбъекта = ТипЗнч(ОбъектИлиСтрока); + Если ТипОбъекта = Тип("Строка") Тогда + ФИО = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СокрЛП(ОбъектИлиСтрока), " "); + ИначеЕсли ТипОбъекта = Тип("СправочникСсылка.ФизическиеЛица") Или ТипОбъекта = Тип("СправочникОбъект.ФизическиеЛица") Тогда + ФИО = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СокрЛП(ОбъектИлиСтрока.Наименование), " "); + Иначе + // используем возможно переданные отдельные строки + Возврат ?(Не ПустаяСтрока(Фамилия), + Фамилия + ?(Не ПустаяСтрока(Имя), " " + Лев(Имя,1) + "." + ?(Не ПустаяСтрока(Отчество), Лев(Отчество,1) + ".", ""), ""), + "") + КонецЕсли; + + КоличествоПодстрок = ФИО.Количество(); + Фамилия = ?(КоличествоПодстрок > 0, ФИО[0], ""); + Имя = ?(КоличествоПодстрок > 1, ФИО[1], ""); + Отчество = ?(КоличествоПодстрок > 2, ФИО[2], ""); + + Возврат ?(Не ПустаяСтрока(Фамилия), + Фамилия + ?(Не ПустаяСтрока(Имя), " " + Лев(Имя,1) + "." + ?(Не ПустаяСтрока(Отчество), Лев(Отчество, 1) + ".", ""), ""), + ""); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы // Добавляет в список Обработчики процедуры-обработчики обновления, // необходимые данной подсистеме. @@ -253,238 +496,3 @@ КонецЦикла; КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОВЕРКА ПРАВИЛЬНОСТИ ЗАПОЛНЕНИЯ ДОКУМЕНТОВ - -// Проверяет, что серия документа для переданного вида документа указана правильно. -// -// Параметры: -// ВидДокумента - СправочникСсылка.ВидыДокументовФизическихЛиц - вид документа, для которого необходимо -// проверить правильность серии -// Серия - Строка - серия документа -// ОбъектИлиСсылка - ЛюбаяСсылка или ЛюбойОбъект - объект или ссылка на объект, в котором вводится серия -// Поле - ЭлементУправляемойФормы - элемент управляемой формы, в котором редактируется серия -// -// Возвращаемое значение: -// Булево - результат проверки, Истина - правильно, Ложь - нет. -// -Функция СерияДокументаУказанаПравильно(ВидДокумента, Серия, ОбъектИлиСсылка, Поле) Экспорт - - // проверка - Если ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортСССР - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.СвидетельствоОРождении Тогда - ТипДокумента = 1; - - ИначеЕсли ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.УдостоверениеОфицера - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортМинморфлота - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ВоенныйБилет - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортМоряка - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ВоенныйБилетОфицераЗапаса Тогда - ТипДокумента = 2; - - ИначеЕсли ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ЗагранпаспортСССР - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ДипломатическийПаспорт - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ЗагранпаспортРФ Тогда - ТипДокумента = 3; - - ИначеЕсли ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ Тогда - ТипДокумента = 4; - - Иначе // проверка не требуется - ТипДокумента = 5; - - КонецЕсли; - - Серия = СокрЛП(Серия); - - Если ТипДокумента = 1 Тогда // паспорт СССР и свидетельство о рождении - - Поз = Найти(Серия, "-"); - Если Поз = 0 Тогда - ТекстОшибки = НСтр("ru = 'Серия документа должна состоять из двух частей, разделенных символом ""-"".'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - ЧастьСерии1 = Лев(Серия, Поз - 1); - ЧастьСерии2 = СокрЛП(Сред(Серия, Поз + 1)); - - Поз = Найти(ЧастьСерии2, "-"); - Если Поз <> 0 Тогда - ТекстОшибки = НСтр("ru = 'В серии документа должно быть только две группы символов.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - Если ПустаяСтрока(ЧастьСерии1) Тогда - ТекстОшибки = НСтр("ru = 'В серии документа отсутствует числовая часть.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - - ИначеЕсли ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("IVXLC1УХЛС", ЧастьСерии1, " ")) = 0 Тогда - ТекстОшибки = НСтр("ru = 'Числовая часть серии документа должна указываться символами 1 У Х Л С или I V X L C.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - - ИначеЕсли СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("IVXLC", ЧастьСерии1, "1УХЛС") <> СтроковыеФункцииКлиентСервер.ПреобразоватьЧислоВРимскуюНотацию(СтроковыеФункцииКлиентСервер.ПреобразоватьЧислоВАрабскуюНотацию(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("IVXLC", ЧастьСерии1, "1УХЛС"))) Тогда - ТекстОшибки = НСтр("ru = 'Числовая часть серии документа указана некорректно.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - - ИначеЕсли СтрДлина(ЧастьСерии2) <> 2 Или Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", ЧастьСерии2, " ")) Тогда - ТекстОшибки = НСтр("ru = 'После разделителя ""-"" в серии документа должны быть ДВЕ pусcкие заглавные буквы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - - КонецЕсли; - - ИначеЕсли ТипДокумента = 2 Тогда // серия - две буквы: военный билет, ... - Если СтрДлина(Серия) <> 2 Или Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", Серия, " ")) Тогда - ТекстОшибки = НСтр("ru = 'В серии документа должны быть ДВЕ pусcкие заглавные буквы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - ИначеЕсли ТипДокумента = 3 Тогда // серия - две цифры: загранпаспорта - Если СтрДлина(Серия) <> 2 Или Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("0123456789", Серия, " ")) Тогда - ТекстОшибки = НСтр("ru = 'В серии документа должно быть ДВЕ цифры.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - ИначеЕсли ТипДокумента = 4 Тогда // серия - две группы цифр: новый паспорт - Поз = Найти(Серия, " "); - Если Поз = 0 Тогда - ТекстОшибки = НСтр("ru = 'В серии документа должно быть две группы цифр.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - ПерваяЧасть = Лев(Серия, Поз-1); - ВтораяЧасть = СокрЛП(Сред(Серия, Поз+1)); - - Поз = Найти(ВтораяЧасть, " "); - Если Поз <> 0 Тогда - ТекстОшибки = НСтр("ru = 'В серии документа должно быть только две группы цифр.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - Если СтрДлина(ПерваяЧасть) <> 2 Или Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("0123456789", ПерваяЧасть, " ")) Тогда - ТекстОшибки = НСтр("ru = 'Первая группа символов серии документа должна содержать две цифры.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - Если СтрДлина(ВтораяЧасть) <> 2 Или Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("0123456789", ВтораяЧасть, " ")) Тогда - ТекстОшибки = НСтр("ru = 'Вторая группа символов серии документа должна содержать две цифры.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - КонецЕсли; - - Возврат Истина; - -КонецФункции - -// Проверяет, что номер документа для переданного вида документа указан правильно. -// -// Параметры: -// ВидДокумента - СправочникСсылка.ВидыДокументовФизическихЛиц - вид документа, для которого необходимо -// проверить правильность номера -// Номер - Строка - номер документа -// ОбъектИлиСсылка - ЛюбаяСсылка или ЛюбойОбъект - объект или ссылка на объект, в котором вводится номер -// Поле - ЭлементУправляемойФормы - элемент управляемой формы, в котором редактируется номер -// -// Возвращаемое значение: -// Булево - результат проверки, Истина - правильно, Ложь - нет. -// -Функция НомерДокументаУказанПравильно(ВидДокумента, Номер, ОбъектИлиСсылка, Поле) Экспорт - - Если Не ПустаяСтрока(СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("0123456789", Номер, " ")) Тогда - ТекстОшибки = НСтр("ru = 'В номере документа присутствуют недопустимые символы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - ДлинаНомера = СтрДлина(СокрЛП(Номер)); - - Если ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортСССР - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.СвидетельствоОРождении - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.УдостоверениеОфицера - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортМинморфлота - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ Тогда - Если ДлинаНомера <> 6 Тогда - ТекстОшибки = НСтр("ru = 'Номер документа должен состоять из 6 символов.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - ИначеЕсли ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ДипломатическийПаспорт - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ЗагранпаспортРФ Тогда - Если ДлинаНомера <> 7 Тогда - ТекстОшибки = НСтр("ru = 'Номер документа должен состоять из 7 символов.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - ИначеЕсли ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ЗагранпаспортСССР - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ВоенныйБилет - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортМоряка - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ВоенныйБилетОфицераЗапаса Тогда - Если (ДлинаНомера < 6 ) или ( ДлинаНомера > 7 ) Тогда - ТекстОшибки = НСтр("ru = 'Номер документа должен состоять из 6 или 7 символов.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - КонецЕсли; - - Возврат Истина; - -КонецФункции - -// Формирует фамилию и инициалы либо по наименованию элемента справочника ФизическиеЛица, -// либо по переданным строкам. -// Если передан Объект, то извлеченная из него строка считается совокупностью -// Фамилия + Имя + Отчество, разделенными пробелами. -// -// Параметры -// ОбъектИлиСтрока - строка, ссылка или объект элемента справочника ФизическиеЛица. -// Фамилия - фамилия физического лица. -// Имя - имя физического лица. -// Отчество - отчество физического лица. -// -// Возвращаемое значение -// Строка - фамилия и инициалы одной строкой. -// В параметрах Фамилия, Имя и Отчество записываются вычисленные части. -// -// Пример: -// Результат = ФамилияИнициалыФизЛица("Иванов Иван Иванович"); // Результат = "Иванов И. И." -// -Функция ФамилияИнициалыФизЛица(ОбъектИлиСтрока = "", Фамилия = " ", Имя = " ", Отчество = " ") Экспорт - - ТипОбъекта = ТипЗнч(ОбъектИлиСтрока); - Если ТипОбъекта = Тип("Строка") Тогда - ФИО = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СокрЛП(ОбъектИлиСтрока), " "); - ИначеЕсли ТипОбъекта = Тип("СправочникСсылка.ФизическиеЛица") Или ТипОбъекта = Тип("СправочникОбъект.ФизическиеЛица") Тогда - ФИО = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СокрЛП(ОбъектИлиСтрока.Наименование), " "); - Иначе - // используем возможно переданные отдельные строки - Возврат ?(Не ПустаяСтрока(Фамилия), - Фамилия + ?(Не ПустаяСтрока(Имя), " " + Лев(Имя,1) + "." + ?(Не ПустаяСтрока(Отчество), Лев(Отчество,1) + ".", ""), ""), - "") - КонецЕсли; - - КоличествоПодстрок = ФИО.Количество(); - Фамилия = ?(КоличествоПодстрок > 0, ФИО[0], ""); - Имя = ?(КоличествоПодстрок > 1, ФИО[1], ""); - Отчество = ?(КоличествоПодстрок > 2, ФИО[2], ""); - - Возврат ?(Не ПустаяСтрока(Фамилия), - Фамилия + ?(Не ПустаяСтрока(Имя), " " + Лев(Имя,1) + "." + ?(Не ПустаяСтрока(Отчество), Лев(Отчество, 1) + ".", ""), ""), - ""); - -КонецФункции diff --git a/SSL/src/CommonModules/ФизическиеЛицаКлиент/Module.bsl b/SSL/src/CommonModules/ФизическиеЛицаКлиент/Module.bsl index 3d858bf55..01aacd437 100644 --- a/SSL/src/CommonModules/ФизическиеЛицаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ФизическиеЛицаКлиент/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Физические лица" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Функция определяет пол физлица по его отчеству // Параметр: // ОтчествоРаботника - отчество работника diff --git a/SSL/src/CommonModules/ФизическиеЛицаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ФизическиеЛицаПереопределяемый/Module.bsl index c5c180593..c98ee1f1c 100644 --- a/SSL/src/CommonModules/ФизическиеЛицаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ФизическиеЛицаПереопределяемый/Module.bsl @@ -1,5 +1,13 @@ //////////////////////////////////////////////////////////////////////////////// -// ОБНОВЛЕНИЕ ПОДСИСТЕМЫ С ПРЕДЫДУЩИХ РЕЛИЗОВ +// Подсистема "Физические лица" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы // Процедура дозаполняет справочник ДокументыФизическихЛиц. // diff --git a/SSL/src/CommonModules/ЭлектроннаяПочта/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПочта/Module.bsl index e91e6fe19..4dd243ec2 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПочта/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПочта/Module.bsl @@ -1,10 +1,13 @@ //////////////////////////////////////////////////////////////////////////////// -// МОДУЛЬ СОДЕРЖИТ РЕАЛИЗАЦИЮ МЕХАНИКИ РАБОТЫ С ЭЛЕКТРОННЫМИ СООБЩЕНИЯМИ -// (программные интерфейсы для внешнего использования) +// Подсистема "Работа с почтовыми сообщениями". // +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Функция для отправки сообщений. Проверяет корректность заполнения учетной -// записи и вызывает функцию реализующую механику отправки +// записи и вызывает функцию, реализующую механику отправки. // // см. параметры функции ОтправитьСообщение // @@ -17,7 +20,7 @@ Если ТипЗнч(УчетнаяЗапись) <> Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") ИЛИ НЕ ЗначениеЗаполнено(УчетнаяЗапись) Тогда - ВызватьИсключение НСтр("ru = 'Учетная запись не заполнена или заполнена не правильно'"); + ВызватьИсключение НСтр("ru = 'Учетная запись не заполнена или заполнена неправильно.'"); КонецЕсли; Если ПараметрыПисьма = Неопределено Тогда @@ -29,7 +32,7 @@ ТипЗнчСлепыеКопии = ?(ПараметрыПисьма.Свойство("СлепыеКопии"), ТипЗнч(ПараметрыПисьма.СлепыеКопии), Неопределено); Если ТипЗнчКому = Неопределено И ТипЗнчКопии = Неопределено И ТипЗнчСлепыеКопии = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Не указан ни один получатель письма.'"); + ВызватьИсключение НСтр("ru = 'Не указано ни одного получателя.'"); КонецЕсли; Если ТипЗнчКому = Тип("Строка") Тогда @@ -50,19 +53,15 @@ ПараметрыПисьма.Вставить("СлепыеКопии", Новый Массив); КонецЕсли; - // проверяем правильную заполненность АдресаОтвета - Если ПараметрыПисьма.Свойство("АдресОтвета") Тогда + Если ПараметрыПисьма.Свойство("АдресОтвета") И ТипЗнч(ПараметрыПисьма.АдресОтвета) = Тип("Строка") Тогда ПараметрыПисьма.АдресОтвета = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.АдресОтвета); КонецЕсли; Если ПараметрыПисьма.Свойство("Вложения") Тогда - Для Каждого Вложение Из ПараметрыПисьма.Вложения Цикл - Если ТипЗнч(Вложение.Значение) = Тип("Строка") И ЭтоАдресВременногоХранилища(Вложение.Значение) Тогда - ПараметрыПисьма.Вложения.Вставить(Вложение.Ключ, ПолучитьИзВременногоХранилища(Вложение.Значение)); - ИначеЕсли ТипЗнч(Вложение.Значение) = Тип("Картинка") Тогда - ПараметрыПисьма.Вложения.Вставить(Вложение.Ключ, Вложение.Значение.ПолучитьДвоичныеДанные()); - ИначеЕсли ТипЗнч(Вложение.Значение) = Тип("Файл") И Вложение.Значение.Существует() И Вложение.Значение.ЭтоФайл() Тогда - ПараметрыПисьма.Вложения.Вставить(Вложение.Ключ, Новый ДвоичныеДанные(Вложение.Значение.ПолноеИмя)); + Для Каждого КлючИЗначение Из ПараметрыПисьма.Вложения Цикл + Вложение = КлючИЗначение.Значение; + Если ПривестиВложениеДляВставкиВПисьмо(Вложение) Тогда + ПараметрыПисьма.Вложения.Вставить(КлючИЗначение.Ключ, Вложение); КонецЕсли; КонецЦикла; КонецЕсли; @@ -72,9 +71,9 @@ КонецФункции // Функция для загрузки сообщений. Проверяет корректность заполнения учетной -// записи и вызывает функцию реализующую механику загрузки сообщений. +// записи и вызывает функцию, реализующую механику загрузки сообщений. // -// параметры к функции см. в функции ЗагрузитьСообщения +// параметры к функции см. в функции ЗагрузитьСообщения. // Функция ЗагрузитьПочтовыеСообщения(знач УчетнаяЗапись, знач ПараметрыЗагрузки = Неопределено) Экспорт @@ -93,7 +92,7 @@ КонецФункции -// Получает ссылку на учетную запись по виду назначения учетной записи +// Получает ссылку на учетную запись по виду назначения учетной записи. // Параметры: // ВидНазначенияУчетнойЗаписи - Перечисления.ВидыНазначенияУчетныхЗаписей - // вид назначения учетной записи @@ -107,34 +106,6 @@ КонецФункции -// Проверяет, что предопределенная системная учетная запись электронной почты -// доступна для использования -// -Функция ПроверитьСистемнаяУчетнаяЗаписьДоступна() Экспорт - - Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты) Тогда - Возврат Ложь; - КонецЕсли; - - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка - |ИЗ - | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты - |ГДЕ - | УчетныеЗаписиЭлектроннойПочты.Ссылка = &Ссылка"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.Параметры.Вставить("Ссылка", ПолучитьСистемнуюУчетнуюЗапись()); - Если Запрос.Выполнить().Пустой() Тогда - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - // Получить доступные учетные записи электронной почты // Параметры: // ДляОтправки - Булево - Если установлено Истина, то будут выбирать только записи, с которых можно отправлять почту @@ -192,6 +163,54 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Преобразовывает внутренние форматы вложений к двоичным данным. +// +Функция ПривестиВложениеДляВставкиВПисьмо(Вложение) Экспорт + Если ТипЗнч(Вложение) = Тип("Строка") И ЭтоАдресВременногоХранилища(Вложение) Тогда + Вложение = ПолучитьИзВременногоХранилища(Вложение); + ПривестиВложениеДляВставкиВПисьмо(Вложение); + Возврат Истина; + ИначеЕсли ТипЗнч(Вложение) = Тип("Картинка") Тогда + Вложение = Вложение.ПолучитьДвоичныеДанные(); + Возврат Истина; + ИначеЕсли ТипЗнч(Вложение) = Тип("Файл") И Вложение.Существует() И Вложение.ЭтоФайл() Тогда + Вложение = Новый ДвоичныеДанные(Вложение.ПолноеИмя); + Возврат Истина; + КонецЕсли; + Возврат Ложь; +КонецФункции + +// Проверяет, что предопределенная системная учетная запись электронной почты +// доступна для использования +// +Функция ПроверитьСистемнаяУчетнаяЗаписьДоступна() Экспорт + + Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты) Тогда + Возврат Ложь; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка + |ИЗ + | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + |ГДЕ + | УчетныеЗаписиЭлектроннойПочты.Ссылка = &Ссылка"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.Параметры.Вставить("Ссылка", ПолучитьСистемнуюУчетнуюЗапись()); + Если Запрос.Выполнить().Пустой() Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Функция отправления - непосредственная реализация механики отправления // электронного сообщения @@ -256,7 +275,7 @@ // Объявление переменных перед первым использованием в качестве // параметра метода Свойство структуры ПараметрыПисьма. // Переменные содержат значения переданных в функцию параметров. - Перем Кому, Тема, Тело, Вложения, АдресОтвета, ТипТекста, Копии, СлепыеКопии; + Перем Кому, Тема, Тело, Вложения, АдресОтвета, ТипТекста, Копии, СлепыеКопии, Пароль; Если Не ПараметрыПисьма.Свойство("Тема", Тема) Тогда Тема = ""; @@ -368,14 +387,6 @@ Письмо.Кодировка = Кодировка; КонецЕсли; - Если Соединение = Неопределено Тогда - Если ПараметрыПисьма.Свойство("Пароль") Тогда - Профиль = СформироватьИнтернетПрофиль(УчетнаяЗапись, ПараметрыПисьма.Пароль); - Иначе - Профиль = СформироватьИнтернетПрофиль(УчетнаяЗапись); - КонецЕсли; - КонецЕсли; - Если ПараметрыПисьма.Свойство("ОбрабатыватьТексты") И НЕ ПараметрыПисьма.ОбрабатыватьТексты Тогда ОбрабатыватьТекстСообщения = ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать; ИначЕ @@ -392,19 +403,14 @@ Письмо.АдресаУведомленияОПрочтении.Добавить(УчетнаяЗапись.АдресЭлектроннойПочты); КонецЕсли; - - Если Соединение = Неопределено Тогда - - Соединение = Новый ИнтернетПочта; - Соединение.Подключиться(Профиль); - Соединение.Послать(Письмо,ОбрабатыватьТекстСообщения); - Соединение.Отключиться(); - - Иначе - - Соединение.Послать(Письмо,ОбрабатыватьТекстСообщения); - + Если ТипЗнч(Соединение) <> Тип("ИнтернетПочта") Тогда + ПараметрыПисьма.Свойство("Пароль", Пароль); + Профиль = СформироватьИнтернетПрофиль(УчетнаяЗапись, Пароль); + Соединение = Новый ИнтернетПочта; + Соединение.Подключиться(Профиль); КонецЕсли; + + Соединение.Послать(Письмо, ОбрабатыватьТекстСообщения); Возврат Письмо.ИдентификаторСообщения; @@ -579,10 +585,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Блок системных и вспомогательных функций подсистемы -// - // По переданной ссылке на учетную запись формирует профиль почтового соединения // // Параметры @@ -837,7 +839,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Блок функций первоначального заполнения и обновления ИБ +// Первоначальное заполнение и обновление ИБ // // Добавляет в список Обработчики процедуры-обработчики обновления, @@ -868,7 +870,7 @@ //////////////////////////////////////////////////////////////////////////////// // -// Блок функций для проверки учетной записи +// Проверка учетной записи // // Возвращает указан ли в учетной записи пароль или нет diff --git a/SSL/src/CommonModules/ЭлектроннаяПочтаКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПочтаКлиентПереопределяемый/Module.bsl index df5a8043e..787c3cda6 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПочтаКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПочтаКлиентПереопределяемый/Module.bsl @@ -1,5 +1,12 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с почтовыми сообщениями". +// +//////////////////////////////////////////////////////////////////////////////// -// Открытие формы редактирования нового письма. +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Открывает форму редактирования нового письма. // Параметры // СтандартнаяОбработка - Булево - Должен быть установлен в Ложь в данной процедуре, если // открывается отличная от простой формы отправки, форма почтового сообщения @@ -34,12 +41,12 @@ СписокФайлов = Неопределено, УдалятьФайлыПослеОтправки = Ложь) Экспорт - // Взаимодействия + // СтандартныеПодсистемы.Взаимодействия Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИспользоватьПочтовыйКлиент Тогда ВзаимодействияКлиент.ОткрытьФормуОтправкиПочтовогоСообщения(Отправитель, Получатель, Тема, Текст, СписокФайлов); СтандартнаяОбработка = Ложь; КонецЕсли; - // Конец Взаимодействия + // Конец СтандартныеПодсистемы.Взаимодействия КонецПроцедуры diff --git a/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодпись/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодпись/Module.bsl index e88bf3abc..c07b0e5a3 100644 --- a/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодпись/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодпись/Module.bsl @@ -88,6 +88,10 @@ ПодписываемыйОбъект = ПодписываемыйОбъектСсылка; КонецЕсли; + Если ДатаПодписи = Дата('00010101') Тогда + ДатаПодписи = ТекущаяДатаСеанса(); + КонецЕсли; + НоваяЗапись = ПодписываемыйОбъект.ЭлектронныеЦифровыеПодписи.Добавить(); НоваяЗапись.КомуВыданСертификат = КомуВыданСертификат; @@ -96,7 +100,7 @@ НоваяЗапись.Комментарий = Комментарий; НоваяЗапись.Отпечаток = Отпечаток; НоваяЗапись.Подпись = Новый ХранилищеЗначения(НоваяПодписьДвоичныеДанные); - НоваяЗапись.УстановившийПодпись = ОбщегоНазначения.ТекущийПользователь(); + НоваяЗапись.УстановившийПодпись = Пользователи.ТекущийПользователь(); НоваяЗапись.Сертификат = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата); ПодписываемыйОбъект.ПодписанЭЦП = Истина; @@ -157,9 +161,9 @@ СтрокаТабличнойЧасти = ПодписанныйОбъект.ЭлектронныеЦифровыеПодписи.Найти(НомерСтроки, "НомерСтроки"); Если СтрокаТабличнойЧасти <> Неопределено Тогда - Если НЕ Пользователи.ЭтоПолноправныйПользовательИБ() Тогда - Если СтрокаТабличнойЧасти.УстановившийПодпись <> ОбщегоНазначения.ТекущийПользователь() Тогда - ВызватьИсключение НСтр("ru = 'У вас нет прав на удаление подписи.'"); + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда + Если СтрокаТабличнойЧасти.УстановившийПодпись <> Пользователи.ТекущийПользователь() Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав на удаление подписи.'"); КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодписьКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодписьКлиент/Module.bsl index acdf16dac..fc765783f 100644 --- a/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодписьКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодписьКлиент/Module.bsl @@ -18,7 +18,7 @@ СтруктураПараметровПодписи) Экспорт МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = СтруктураПараметровПодписи.Пароль; - ДатаПодписи = ТекущаяДата(); + ДатаПодписи = Дата('00010101'); НоваяПодписьДвоичныеДанные = МенеджерКриптографии.Подписать(ДвоичныеДанные, СтруктураПараметровПодписи.Сертификат); @@ -154,6 +154,7 @@ Возврат МассивСтруктурСертификатов; КонецЕсли; + // здесь ТекущаяДата() используется для проверки на истекание срока сертификатов на клиентском компьютере - перенести ее на сервер в принципе невозможно ТекущаяДата = ТекущаяДата(); // для подписи @@ -386,7 +387,7 @@ ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайлаПодписи); ПолныйПутьПодписи = Путь; - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ПолныйПутьПодписи, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПолныйПутьПодписи = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолныйПутьПодписи, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); ПолныйПутьПодписи = ПолныйПутьПодписи + ИмяФайлаПодписи; ФайлПоИмени = Новый Файл(ПолныйПутьПодписи); @@ -400,7 +401,7 @@ ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайлаПодписи); ПолныйПутьПодписи = Путь; - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ПолныйПутьПодписи, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПолныйПутьПодписи = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПолныйПутьПодписи, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); ПолныйПутьПодписи = ПолныйПутьПодписи + ИмяФайлаПодписи; ФайлДляПроверки = Новый Файл(ПолныйПутьПодписи); @@ -414,7 +415,7 @@ ПередаваемыеФайлы.Добавить(Описание); ПутьКФайлу = Файл.Путь; - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); // Сохраним Файл из БД на диск ПолучитьФайлы(ПередаваемыеФайлы,, ПутьКФайлу, Ложь); @@ -458,7 +459,7 @@ Возврат Новый Массив; КонецЕсли; - ДатаПодписи = ТекущаяДата(); + ДатаПодписи = Дата('00010101'); Для Каждого Элемент Из МассивФайловПодписей Цикл @@ -530,7 +531,7 @@ ПередаваемыеФайлы.Добавить(Описание); ПутьКФайлу = Файл.Путь; - ОбщегоНазначенияКлиентСервер.ДобавитьСлешЕслиНужно(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКФайлу, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); // Сохраним Файл из БД на диск ПолучитьФайлы(ПередаваемыеФайлы,, ПутьКФайлу, Ложь); diff --git a/SSL/src/CommonPictures/ВедущаяКонечнаяТочка/Picture.png b/SSL/src/CommonPictures/ВедущаяКонечнаяТочка/Picture.png new file mode 100644 index 000000000..adfc96cad Binary files /dev/null and b/SSL/src/CommonPictures/ВедущаяКонечнаяТочка/Picture.png differ diff --git a/SSL/src/CommonPictures/ВедущаяКонечнаяТочка/ВедущаяКонечнаяТочка.mdo b/SSL/src/CommonPictures/ВедущаяКонечнаяТочка/ВедущаяКонечнаяТочка.mdo new file mode 100644 index 000000000..752ff27b4 --- /dev/null +++ b/SSL/src/CommonPictures/ВедущаяКонечнаяТочка/ВедущаяКонечнаяТочка.mdo @@ -0,0 +1,8 @@ + + + ВедущаяКонечнаяТочка + + ru + Ведущая конечная точка + + diff --git a/SSL/src/CommonPictures/Внимание/Picture.png b/SSL/src/CommonPictures/Внимание/Picture.png deleted file mode 100644 index 20650a72e..000000000 Binary files a/SSL/src/CommonPictures/Внимание/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/Вопрос32/Picture.png b/SSL/src/CommonPictures/Вопрос32/Picture.png new file mode 100644 index 000000000..9bcce95ce Binary files /dev/null and b/SSL/src/CommonPictures/Вопрос32/Picture.png differ diff --git a/SSL/src/CommonPictures/Вопрос32/Вопрос32.mdo b/SSL/src/CommonPictures/Вопрос32/Вопрос32.mdo new file mode 100644 index 000000000..f0b650a55 --- /dev/null +++ b/SSL/src/CommonPictures/Вопрос32/Вопрос32.mdo @@ -0,0 +1,8 @@ + + + Вопрос32 + + ru + Вопрос (32x32) + + diff --git a/SSL/src/CommonPictures/ЗаполнитьФорму/Picture.png b/SSL/src/CommonPictures/ЗаполнитьФорму/Picture.png new file mode 100644 index 000000000..9678e6da0 Binary files /dev/null and b/SSL/src/CommonPictures/ЗаполнитьФорму/Picture.png differ diff --git a/SSL/src/CommonPictures/ЗаполнитьФорму/ЗаполнитьФорму.mdo b/SSL/src/CommonPictures/ЗаполнитьФорму/ЗаполнитьФорму.mdo new file mode 100644 index 000000000..bd1c1a9d0 --- /dev/null +++ b/SSL/src/CommonPictures/ЗаполнитьФорму/ЗаполнитьФорму.mdo @@ -0,0 +1,8 @@ + + + ЗаполнитьФорму + + ru + Заполнить форму + + diff --git a/SSL/src/CommonPictures/Комментарий/Picture.png b/SSL/src/CommonPictures/Комментарий/Picture.png new file mode 100644 index 000000000..6f23d5250 Binary files /dev/null and b/SSL/src/CommonPictures/Комментарий/Picture.png differ diff --git a/SSL/src/CommonPictures/Комментарий/Комментарий.mdo b/SSL/src/CommonPictures/Комментарий/Комментарий.mdo new file mode 100644 index 000000000..3447b84e0 --- /dev/null +++ b/SSL/src/CommonPictures/Комментарий/Комментарий.mdo @@ -0,0 +1,8 @@ + + + Комментарий + + ru + Комментарий + + diff --git a/SSL/src/CommonPictures/Предупреждение/Picture.png b/SSL/src/CommonPictures/Предупреждение/Picture.png new file mode 100644 index 000000000..7325ab91c Binary files /dev/null and b/SSL/src/CommonPictures/Предупреждение/Picture.png differ diff --git a/SSL/src/CommonPictures/Внимание/Внимание.mdo b/SSL/src/CommonPictures/Предупреждение/Предупреждение.mdo similarity index 71% rename from SSL/src/CommonPictures/Внимание/Внимание.mdo rename to SSL/src/CommonPictures/Предупреждение/Предупреждение.mdo index 8f51f0b28..22efe429f 100644 --- a/SSL/src/CommonPictures/Внимание/Внимание.mdo +++ b/SSL/src/CommonPictures/Предупреждение/Предупреждение.mdo @@ -1,8 +1,8 @@ - Внимание + Предупреждение ru - Внимание + Предупреждение diff --git a/SSL/src/CommonPictures/Рассчитать/Picture.png b/SSL/src/CommonPictures/Рассчитать/Picture.png new file mode 100644 index 000000000..bd7d28f54 Binary files /dev/null and b/SSL/src/CommonPictures/Рассчитать/Picture.png differ diff --git a/SSL/src/CommonPictures/Рассчитать/Рассчитать.mdo b/SSL/src/CommonPictures/Рассчитать/Рассчитать.mdo new file mode 100644 index 000000000..2a908f88e --- /dev/null +++ b/SSL/src/CommonPictures/Рассчитать/Рассчитать.mdo @@ -0,0 +1,8 @@ + + + Рассчитать + + ru + Рассчитать + + diff --git a/SSL/src/CommonPictures/СостояниеРассылкиОтчетов/Picture.png b/SSL/src/CommonPictures/СостояниеРассылкиОтчетов/Picture.png new file mode 100644 index 000000000..83e2d8f5b Binary files /dev/null and b/SSL/src/CommonPictures/СостояниеРассылкиОтчетов/Picture.png differ diff --git a/SSL/src/CommonPictures/СостояниеРассылкиОтчетов/СостояниеРассылкиОтчетов.mdo b/SSL/src/CommonPictures/СостояниеРассылкиОтчетов/СостояниеРассылкиОтчетов.mdo new file mode 100644 index 000000000..32e4f550f --- /dev/null +++ b/SSL/src/CommonPictures/СостояниеРассылкиОтчетов/СостояниеРассылкиОтчетов.mdo @@ -0,0 +1,8 @@ + + + СостояниеРассылкиОтчетов + + ru + Состояние рассылки отчетов + + diff --git a/SSL/src/CommonPictures/ФорматExcel/Picture.png b/SSL/src/CommonPictures/ФорматExcel/Picture.png new file mode 100644 index 000000000..259ab210e Binary files /dev/null and b/SSL/src/CommonPictures/ФорматExcel/Picture.png differ diff --git a/SSL/src/CommonPictures/ФорматExcel/ФорматExcel.mdo b/SSL/src/CommonPictures/ФорматExcel/ФорматExcel.mdo new file mode 100644 index 000000000..d20089119 --- /dev/null +++ b/SSL/src/CommonPictures/ФорматExcel/ФорматExcel.mdo @@ -0,0 +1,8 @@ + + + ФорматExcel + + ru + Формат excel + + diff --git a/SSL/src/CommonPictures/ФорматExcel2007/Picture.png b/SSL/src/CommonPictures/ФорматExcel2007/Picture.png new file mode 100644 index 000000000..d2976181d Binary files /dev/null and b/SSL/src/CommonPictures/ФорматExcel2007/Picture.png differ diff --git a/SSL/src/CommonPictures/ФорматExcel2007/ФорматExcel2007.mdo b/SSL/src/CommonPictures/ФорматExcel2007/ФорматExcel2007.mdo new file mode 100644 index 000000000..e0d82dccd --- /dev/null +++ b/SSL/src/CommonPictures/ФорматExcel2007/ФорматExcel2007.mdo @@ -0,0 +1,8 @@ + + + ФорматExcel2007 + + ru + Формат excel 2007 + + diff --git a/SSL/src/CommonPictures/ФорматHTML/Picture.png b/SSL/src/CommonPictures/ФорматHTML/Picture.png new file mode 100644 index 000000000..47b34ba6b Binary files /dev/null and b/SSL/src/CommonPictures/ФорматHTML/Picture.png differ diff --git a/SSL/src/CommonPictures/ФорматHTML/ФорматHTML.mdo b/SSL/src/CommonPictures/ФорматHTML/ФорматHTML.mdo new file mode 100644 index 000000000..837bdbe6c --- /dev/null +++ b/SSL/src/CommonPictures/ФорматHTML/ФорматHTML.mdo @@ -0,0 +1,8 @@ + + + ФорматHTML + + ru + Формат HTML + + diff --git a/SSL/src/CommonPictures/ФорматMXL/Picture.png b/SSL/src/CommonPictures/ФорматMXL/Picture.png new file mode 100644 index 000000000..8788a9846 Binary files /dev/null and b/SSL/src/CommonPictures/ФорматMXL/Picture.png differ diff --git a/SSL/src/CommonPictures/ФорматMXL/ФорматMXL.mdo b/SSL/src/CommonPictures/ФорматMXL/ФорматMXL.mdo new file mode 100644 index 000000000..5e51707cb --- /dev/null +++ b/SSL/src/CommonPictures/ФорматMXL/ФорматMXL.mdo @@ -0,0 +1,8 @@ + + + ФорматMXL + + ru + Формат MXL + + diff --git a/SSL/src/CommonPictures/ФорматOpenOfficeCalc/Picture.png b/SSL/src/CommonPictures/ФорматOpenOfficeCalc/Picture.png new file mode 100644 index 000000000..2ffd30891 Binary files /dev/null and b/SSL/src/CommonPictures/ФорматOpenOfficeCalc/Picture.png differ diff --git a/SSL/src/CommonPictures/ФорматOpenOfficeCalc/ФорматOpenOfficeCalc.mdo b/SSL/src/CommonPictures/ФорматOpenOfficeCalc/ФорматOpenOfficeCalc.mdo new file mode 100644 index 000000000..e1975de0b --- /dev/null +++ b/SSL/src/CommonPictures/ФорматOpenOfficeCalc/ФорматOpenOfficeCalc.mdo @@ -0,0 +1,8 @@ + + + ФорматOpenOfficeCalc + + ru + Формат open office calc + + diff --git a/SSL/src/CommonPictures/ФорматOpenOfficeWriter/Picture.png b/SSL/src/CommonPictures/ФорматOpenOfficeWriter/Picture.png new file mode 100644 index 000000000..0d0c116d2 Binary files /dev/null and b/SSL/src/CommonPictures/ФорматOpenOfficeWriter/Picture.png differ diff --git a/SSL/src/CommonPictures/ФорматOpenOfficeWriter/ФорматOpenOfficeWriter.mdo b/SSL/src/CommonPictures/ФорматOpenOfficeWriter/ФорматOpenOfficeWriter.mdo new file mode 100644 index 000000000..6dd1156d9 --- /dev/null +++ b/SSL/src/CommonPictures/ФорматOpenOfficeWriter/ФорматOpenOfficeWriter.mdo @@ -0,0 +1,8 @@ + + + ФорматOpenOfficeWriter + + ru + Формат open office writer + + diff --git a/SSL/src/CommonPictures/ФорматPDF/Picture.png b/SSL/src/CommonPictures/ФорматPDF/Picture.png new file mode 100644 index 000000000..d425e6677 Binary files /dev/null and b/SSL/src/CommonPictures/ФорматPDF/Picture.png differ diff --git a/SSL/src/CommonPictures/ФорматPDF/ФорматPDF.mdo b/SSL/src/CommonPictures/ФорматPDF/ФорматPDF.mdo new file mode 100644 index 000000000..7594fcf16 --- /dev/null +++ b/SSL/src/CommonPictures/ФорматPDF/ФорматPDF.mdo @@ -0,0 +1,8 @@ + + + ФорматPDF + + ru + Формат PDF + + diff --git a/SSL/src/CommonPictures/ФорматTXT/Picture.png b/SSL/src/CommonPictures/ФорматTXT/Picture.png new file mode 100644 index 000000000..77caecfb0 Binary files /dev/null and b/SSL/src/CommonPictures/ФорматTXT/Picture.png differ diff --git a/SSL/src/CommonPictures/ФорматTXT/ФорматTXT.mdo b/SSL/src/CommonPictures/ФорматTXT/ФорматTXT.mdo new file mode 100644 index 000000000..f0dc68339 --- /dev/null +++ b/SSL/src/CommonPictures/ФорматTXT/ФорматTXT.mdo @@ -0,0 +1,8 @@ + + + ФорматTXT + + ru + Формат TXT + + diff --git a/SSL/src/CommonPictures/ФорматWord/Picture.png b/SSL/src/CommonPictures/ФорматWord/Picture.png new file mode 100644 index 000000000..497647e0c Binary files /dev/null and b/SSL/src/CommonPictures/ФорматWord/Picture.png differ diff --git a/SSL/src/CommonPictures/ФорматWord/ФорматWord.mdo b/SSL/src/CommonPictures/ФорматWord/ФорматWord.mdo new file mode 100644 index 000000000..e48f07686 --- /dev/null +++ b/SSL/src/CommonPictures/ФорматWord/ФорматWord.mdo @@ -0,0 +1,8 @@ + + + ФорматWord + + ru + Формат word + + diff --git a/SSL/src/CommonPictures/ФорматWord2007/Picture.png b/SSL/src/CommonPictures/ФорматWord2007/Picture.png new file mode 100644 index 000000000..986f720f2 Binary files /dev/null and b/SSL/src/CommonPictures/ФорматWord2007/Picture.png differ diff --git a/SSL/src/CommonPictures/ФорматWord2007/ФорматWord2007.mdo b/SSL/src/CommonPictures/ФорматWord2007/ФорматWord2007.mdo new file mode 100644 index 000000000..c388b83d1 --- /dev/null +++ b/SSL/src/CommonPictures/ФорматWord2007/ФорматWord2007.mdo @@ -0,0 +1,8 @@ + + + ФорматWord2007 + + ru + Формат word2007 + + diff --git a/SSL/src/CommonPictures/ФорматПустой/Picture.png b/SSL/src/CommonPictures/ФорматПустой/Picture.png new file mode 100644 index 000000000..8779dbf4a Binary files /dev/null and b/SSL/src/CommonPictures/ФорматПустой/Picture.png differ diff --git a/SSL/src/CommonPictures/ФорматПустой/ФорматПустой.mdo b/SSL/src/CommonPictures/ФорматПустой/ФорматПустой.mdo new file mode 100644 index 000000000..1f40151a4 --- /dev/null +++ b/SSL/src/CommonPictures/ФорматПустой/ФорматПустой.mdo @@ -0,0 +1,8 @@ + + + ФорматПустой + + ru + Формат пустой + + diff --git a/SSL/src/CommonTemplates/ИзвлечениеКодовОбщихДанных/Template.bin b/SSL/src/CommonTemplates/ИзвлечениеКодовОбщихДанных/Template.bin new file mode 100644 index 000000000..879825385 --- /dev/null +++ b/SSL/src/CommonTemplates/ИзвлечениеКодовОбщихДанных/Template.bin @@ -0,0 +1,66 @@ + + + + + + + + + + Ссылка + + v8:CatalogRef + + + + Код + + xs:string + xs:decimal + + 20 + 0 + Nonnegative + + + 50 + Variable + + + + + ЭтоГруппа + + xs:boolean + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + diff --git a/SSL/src/CommonTemplates/ИзвлечениеКодовОбщихДанных/ИзвлечениеКодовОбщихДанных.mdo b/SSL/src/CommonTemplates/ИзвлечениеКодовОбщихДанных/ИзвлечениеКодовОбщихДанных.mdo new file mode 100644 index 000000000..1d008163b --- /dev/null +++ b/SSL/src/CommonTemplates/ИзвлечениеКодовОбщихДанных/ИзвлечениеКодовОбщихДанных.mdo @@ -0,0 +1,10 @@ + + + ИзвлечениеКодовОбщихДанных + + ru + Извлечение кодов общих данных + + ИзвлечениеКодовОбщихДанных.xsl + BinaryData + diff --git a/SSL/src/CommonTemplates/КомпонентаTWAIN/Template.bin b/SSL/src/CommonTemplates/КомпонентаTWAIN/Template.bin index a9c0357b8..7553122ed 100644 Binary files a/SSL/src/CommonTemplates/КомпонентаTWAIN/Template.bin and b/SSL/src/CommonTemplates/КомпонентаTWAIN/Template.bin differ diff --git a/SSL/src/Configuration/Configuration.mdo b/SSL/src/Configuration/Configuration.mdo index b039626d9..2ee951407 100644 --- a/SSL/src/Configuration/Configuration.mdo +++ b/SSL/src/Configuration/Configuration.mdo @@ -1,23 +1,23 @@ - + БиблиотекаСтандартныхПодсистем ru - Библиотека стандартных подсистем, редакция 1.2 + Библиотека стандартных подсистем, редакция 2.0 - - - - - - - + + + + + + + ManagedApplication PersonalComputer Russian Role.ПолныеПрава Фирма "1С" - 1.2.4.1 + 2.0.1.14 http://downloads.v8.1c.ru/tmplts/ true @@ -33,11 +33,11 @@ Language.Русский ru - Библиотека стандартных подсистем, редакция 1.2 + Библиотека стандартных подсистем, редакция 2.0 ru - Библиотека стандартных подсистем, редакция 1.2 + Библиотека стандартных подсистем, редакция 2.0 @@ -65,6 +65,7 @@ StyleItem.ВыполненнаяЗадача StyleItem.ЗавершенныйБизнесПроцесс StyleItem.ЗапрещенноеПравоДоступа + StyleItem.НедоступныеДанныеЦвет StyleItem.НеПринятыеКИсполнениюЗадачи StyleItem.НеСтартованныйБизнесПроцесс StyleItem.ОшибкаПолнотекстовыйПоискФон @@ -75,12 +76,12 @@ StyleItem.РольБезИсполнителей StyleItem.СобытиеОтказ StyleItem.ТекстЗапрещеннойЯчейкиЦвет - StyleItem.УдаленныйДополнительныйРеквизитЦвет StyleItem.УдаленныйДополнительныйРеквизитШрифт StyleItem.ФайлЗанятыйДругимПользователем StyleItem.ФайлЗанятыйТекущимПользователем StyleItem.ФонВыделенияЦвет CommonPicture.АрхивАнкета + CommonPicture.ВедущаяКонечнаяТочка CommonPicture.Взаимодействия CommonPicture.ВидыНавигацииПоВзаимодействиямОтДопРеквизитовСведений CommonPicture.ВидыНавигацииПоВзаимодействиямОтКатегорий @@ -88,7 +89,7 @@ CommonPicture.ВидыНавигацииПоВзаимодействиямОтПредметовВзаимодействий CommonPicture.ВидыНавигацииПоВзаимодействиямОтРеквизитаПредмета CommonPicture.ВидыОпераций - CommonPicture.Внимание + CommonPicture.Вопрос32 CommonPicture.ВосклицательныйЗнакСерый CommonPicture.Встреча CommonPicture.ВыполнитьЗапускОбменаДанными @@ -127,6 +128,7 @@ CommonPicture.ЗанятьФайл CommonPicture.ЗапланированноеВзаимодействие CommonPicture.ЗаполнитьПоОснованию + CommonPicture.ЗаполнитьФорму CommonPicture.ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий CommonPicture.ЗаставкаВнешнейОперации CommonPicture.Зашифрован @@ -153,6 +155,7 @@ CommonPicture.КоллекцияПиктограммФайлов CommonPicture.КоллекцияПиктограммЭлементов CommonPicture.КоллекцияСкрепка + CommonPicture.Комментарий CommonPicture.КоннекторВерхНиз CommonPicture.КоннекторВерхПраво CommonPicture.КоннекторВерхПравоНиз @@ -198,6 +201,7 @@ CommonPicture.ПревьюТабличногоВопросаОтветыВСтроках CommonPicture.ПревьюТабличногоВопросаОтветыСтрокиИКолонки CommonPicture.ПревьюТабличногоВопросаСоставной + CommonPicture.Предупреждение CommonPicture.Предупреждение32 CommonPicture.ПриложитьФайл CommonPicture.ПрименитьПравилаОбработкиПисем @@ -205,6 +209,7 @@ CommonPicture.РазорватьСоединение CommonPicture.РазрешитьРедактированиеРеквизитовОбъекта CommonPicture.РаспространяетсяВИерархии + CommonPicture.Рассчитать CommonPicture.РедактироватьМакет CommonPicture.РедактироватьФайл CommonPicture.Сканирование @@ -225,6 +230,7 @@ CommonPicture.СостояниеПользователя10 CommonPicture.СостояниеПользователя11 CommonPicture.СостояниеПользователя12 + CommonPicture.СостояниеРассылкиОтчетов CommonPicture.СостоянияПользователей CommonPicture.СохранитьФайлКак CommonPicture.СтатусыСопоставленияОбъектов @@ -234,6 +240,17 @@ CommonPicture.УстановитьОтветственногоЗаВзаимодействие CommonPicture.УстановитьПредметВзаимодействия CommonPicture.УстановитьПризнакРассмотреноДляВзамодействия + CommonPicture.ФорматExcel + CommonPicture.ФорматExcel2007 + CommonPicture.ФорматHTML + CommonPicture.ФорматMXL + CommonPicture.ФорматOpenOfficeCalc + CommonPicture.ФорматOpenOfficeWriter + CommonPicture.ФорматPDF + CommonPicture.ФорматTXT + CommonPicture.ФорматWord + CommonPicture.ФорматWord2007 + CommonPicture.ФорматПустой CommonPicture.ЭлектронноеПисьмоВходящее CommonPicture.ЭлектронноеПисьмоИсходящее SessionParameter.ВидыДоступаБезГруппЗначенияДоступа @@ -243,12 +260,15 @@ SessionParameter.ДатаОбновленияПовторноИспользуемыхЗначенийМРО SessionParameter.ДобавлятьРуководителямДоступПодчиненных SessionParameter.ИспользуемыеПланыОбмена + SessionParameter.ОбластьДанныхЗначение + SessionParameter.ОбластьДанныхИспользование SessionParameter.ОбменДаннымиВключен SessionParameter.ОграничиватьДоступПоВиду SessionParameter.ОграничиватьДоступПоВидуВнешниеПользователи SessionParameter.ОграничиватьДоступПоВидуДополнительныеСведения SessionParameter.ОграничиватьДоступПоВидуОбъект SessionParameter.ОграничиватьДоступПоВидуОрганизации + SessionParameter.ОграничиватьДоступПоВидуПапкиФайлов SessionParameter.ОграничиватьДоступПоВидуПользователи SessionParameter.ОграничиватьДоступПоВидуПравоДобавления SessionParameter.ОграничиватьДоступПоВидуПравоИзменения @@ -258,7 +278,6 @@ SessionParameter.ПравилаВыборочнойРегистрацииОбъектов SessionParameter.ПравилаРегистрацииОбъектов SessionParameter.ТекущийВнешнийПользователь - SessionParameter.ТекущийЗамерВремени SessionParameter.ТекущийПользователь Role.АдминистраторСистемы Role.Администрирование @@ -272,10 +291,12 @@ Role.ДобавлениеИзменениеДополнительныхОтчетовИОбработок Role.ДобавлениеИзменениеЗаданий Role.ДобавлениеИзменениеОбменовДанными + Role.ДобавлениеИзменениеОбщейБазовойНСИ Role.ДобавлениеИзменениеОпросов Role.ДобавлениеИзменениеОтветовНаВопросыАнкет Role.ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц Role.ДобавлениеИзменениеПользователей + Role.ДобавлениеИзменениеРассылокОтчетов Role.ДобавлениеИзменениеРолейИсполнителей Role.ДобавлениеИзменениеФизическихЛиц Role.ДобавлениеИзменениеШаблоновАнкет @@ -305,10 +326,16 @@ Role.ПроверкаДоступныхОбновленийКонфигурации Role.ПросмотрЖурналаРегистрации Role.РаботаСБиблиотекойФайлов + Role.РаботаСПапкамиФайлов Role.РедактированиеРеквизитовОбъектов Role.РежимВсеФункции Role.СохранениеДанныхПользователя + Role.УдаленныйДоступБазоваяФункциональность + Role.УдаленныйДоступОбменДаннымиВМоделиСервиса + Role.УдаленныйДоступОбменСообщениями + Role.УдалитьПолныеПраваОбластиДанных Role.ЧтениеБазовойНСИ + Role.ЧтениеВариантовОтчетов Role.ЧтениеВерсийОбъектов Role.ЧтениеВнешнихПользователей Role.ЧтениеДополнительныхСведений @@ -317,6 +344,7 @@ Role.ЧтениеОтветовНаВопросыАнкет Role.ЧтениеПерсональныхДанныхФизическихЛиц Role.ЧтениеФизическихЛиц + CommonTemplate.ИзвлечениеКодовОбщихДанных CommonTemplate.КомпонентаTWAIN CommonTemplate.ОценкаПроизводительностиВнешнийКомпонент CommonTemplate.СтруктураПодчиненности @@ -335,6 +363,7 @@ CommonModule.БизнесПроцессыИЗадачиСервер CommonModule.БизнесПроцессыИЗадачиСобытия CommonModule.ВариантыОтчетов + CommonModule.ВариантыОтчетовВызовСервераПовтИсп CommonModule.ВариантыОтчетовКлиент CommonModule.ВариантыОтчетовКлиентПереопределяемый CommonModule.ВариантыОтчетовПереопределяемый @@ -352,12 +381,18 @@ CommonModule.ВнешниеЗадачиВызовСервера CommonModule.ВнешниеЗадачиВызовСервераПереопределяемый CommonModule.ВнешниеПользователи + CommonModule.ВыгрузкаЗагрузкаДанных + CommonModule.ВыгрузкаЗагрузкаДанныхПереопределяемый CommonModule.ГрупповоеИзменениеОбъектовКлиент CommonModule.ДатыЗапретаИзменения - CommonModule.ДатыЗапретаИзмененияВызовСервера CommonModule.ДатыЗапретаИзмененияПереопределяемый CommonModule.ДатыЗапретаИзмененияПовтИсп + CommonModule.ДатыЗапретаИзмененияСлужебный + CommonModule.ДлительныеОперации + CommonModule.ДлительныеОперацииКлиент + CommonModule.ДлительныеОперацииКлиентПовтИсп CommonModule.ДополнительныеОтчетыИОбработки + CommonModule.ДополнительныеОтчетыИОбработкиВМоделиСервиса CommonModule.ДополнительныеОтчетыИОбработкиКлиент CommonModule.ДополнительныеОтчетыИОбработкиКлиентСервер CommonModule.ДополнительныеОтчетыИОбработкиПереопределяемый @@ -374,7 +409,7 @@ CommonModule.КонтрольДинамическогоОбновленияКонфигурации CommonModule.КонтрольДинамическогоОбновленияКонфигурацииГлобальный CommonModule.КонтрольДинамическогоОбновленияКонфигурацииКлиент - CommonModule.КонтрольЖурналаРегистрации + CommonModule.КонтрольЖурналаРегистрацииСлужебный CommonModule.НапоминанияПользователяВызовСервера CommonModule.НапоминанияПользователяГлобальный CommonModule.НапоминанияПользователяКлиент @@ -387,15 +422,24 @@ CommonModule.НастройкаПорядкаЭлементовСобытия CommonModule.ОбменВнешнимиЗаданиямиСервер CommonModule.ОбменВнешнимиЗаданиямиСобытия + CommonModule.ОбменДаннымиВМоделиСервиса + CommonModule.ОбменДаннымиВМоделиСервисаПовтИсп CommonModule.ОбменДаннымиВнешнееСоединение CommonModule.ОбменДаннымиКлиент + CommonModule.ОбменДаннымиКлиентПереопределяемый CommonModule.ОбменДаннымиПереопределяемый CommonModule.ОбменДаннымиПовтИсп CommonModule.ОбменДаннымиСервер CommonModule.ОбменДаннымиСобытия + CommonModule.ОбменСообщениями + CommonModule.ОбменСообщениямиВнутренний + CommonModule.ОбменСообщениямиКлиент + CommonModule.ОбменСообщениямиПереопределяемый + CommonModule.ОбменСообщениямиПовтИсп CommonModule.ОбменФайламиВызовСервера CommonModule.ОбменФайламиСобытия CommonModule.ОбновлениеИнформационнойБазы + CommonModule.ОбновлениеИнформационнойБазыВМоделиСервиса CommonModule.ОбновлениеИнформационнойБазыКлиент CommonModule.ОбновлениеИнформационнойБазыКлиентПереопределяемый CommonModule.ОбновлениеИнформационнойБазыПереопределяемый @@ -405,24 +449,37 @@ CommonModule.ОбновлениеКонфигурацииКлиентПереопределяемый CommonModule.ОбновлениеКонфигурацииКлиентСервер CommonModule.ОбновлениеКонфигурацииПереопределяемый + CommonModule.ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса + CommonModule.ОбработчикКаналовСообщенийУдаленногоАдминистрирования CommonModule.ОбщегоНазначения CommonModule.ОбщегоНазначенияКлиент + CommonModule.ОбщегоНазначенияКлиентПереопределяемый CommonModule.ОбщегоНазначенияКлиентПовтИсп CommonModule.ОбщегоНазначенияКлиентСервер CommonModule.ОбщегоНазначенияПереопределяемый CommonModule.ОбщегоНазначенияПовтИсп - CommonModule.ОценкаПроизводительностиВызовСервера + CommonModule.ОценкаПроизводительностиВызовСервераПолныеПрава + CommonModule.ОценкаПроизводительностиКлиент CommonModule.ОценкаПроизводительностиКлиентГлобальный CommonModule.ОценкаПроизводительностиКлиентСервер + CommonModule.ОценкаПроизводительностиПовтИсп + CommonModule.ОчередьЗаданий + CommonModule.ОчередьЗаданийПереопределяемый + CommonModule.ОчередьЗаданийПовтИсп CommonModule.ПолнотекстовыйПоискКлиентПереопределяемый CommonModule.ПолнотекстовыйПоискСервер CommonModule.ПолучениеФайловИзИнтернета CommonModule.ПолучениеФайловИзИнтернетаКлиент CommonModule.ПолучениеФайловИзИнтернетаКлиентСервер CommonModule.Пользователи + CommonModule.ПользователиВМоделиСервиса CommonModule.ПользователиПереопределяемый CommonModule.ПользователиСерверПовтИсп CommonModule.ПользователиСобытия + CommonModule.ПоставляемыеДанные + CommonModule.ПоставляемыеДанныеКлиентСервер + CommonModule.ПоставляемыеДанныеПереопределяемый + CommonModule.ПоставляемыеДанныеПовтИсп CommonModule.ПрефиксацияОбъектов CommonModule.ПрефиксацияОбъектовКлиентСервер CommonModule.ПрефиксацияОбъектовКлиентСерверПереопределяемый @@ -432,6 +489,9 @@ CommonModule.ПрисоединенныеФайлыКлиент CommonModule.ПрисоединенныеФайлыСобытия CommonModule.ПроверкаЛегальностиПолученияОбновленияКлиент + CommonModule.РаботаВМоделиСервиса + CommonModule.РаботаВМоделиСервисаПереопределяемый + CommonModule.РаботаВМоделиСервисаПовтИсп CommonModule.РаботаС1СДокументооборот CommonModule.РаботаС1СДокументооборотВызовСервера CommonModule.РаботаС1СДокументооборотКлиент @@ -445,7 +505,6 @@ CommonModule.РаботаСБиблиотекойФайловПереопределяемый CommonModule.РаботаСКурсамиВалют CommonModule.РаботаСКурсамиВалютКлиентСервер - CommonModule.РаботаСКурсамиВалютСобытия CommonModule.РаботаСоСканеромКлиент CommonModule.РаботаСПочтовымиСообщениями CommonModule.РаботаСПочтовымиСообщениямиКлиент @@ -457,6 +516,13 @@ CommonModule.РаботаСФайламиКлиентСервер CommonModule.РаботаСФайламиПереопределяемый CommonModule.РаботаСФайламиСобытия + CommonModule.РассылкаОтчетов + CommonModule.РассылкаОтчетовВызовСервера + CommonModule.РассылкаОтчетовКлиент + CommonModule.РассылкаОтчетовКлиентПереопределяемый + CommonModule.РассылкаОтчетовКлиентСервер + CommonModule.РассылкаОтчетовПереопределяемый + CommonModule.РассылкаОтчетовПовтИсп CommonModule.РегламентированныеДанныеКлиентСервер CommonModule.РегламентныеЗаданияГлобальный CommonModule.РегламентныеЗаданияКлиент @@ -469,6 +535,8 @@ CommonModule.СоединенияИБКлиент CommonModule.СоединенияИБКлиентСервер CommonModule.СоединенияИБПовтИсп + CommonModule.СообщенияУдаленногоАдминистрирования + CommonModule.СообщенияУдаленногоАдминистрированияПовтИсп CommonModule.СтандартныеПодсистемыВызовСервера CommonModule.СтандартныеПодсистемыВызовСервераПереопределяемый CommonModule.СтандартныеПодсистемыКлиент @@ -480,6 +548,7 @@ CommonModule.СтроковыеФункцииКлиентСервер CommonModule.СтруктураПодчиненностиПереопределяемый CommonModule.УправлениеДоступом + CommonModule.УправлениеДоступомВМоделиСервиса CommonModule.УправлениеДоступомПереопределяемый CommonModule.УправлениеДоступомСерверПовтИсп CommonModule.УправлениеДоступомСобытия @@ -516,10 +585,26 @@ CommonModule.ЭлектроннаяЦифроваяПодписьКлиент CommonModule.ЭлектроннаяЦифроваяПодписьКлиентСервер CommonModule.ЭлектроннаяЦифроваяПодписьПовтИсп + CommonAttribute.ОбластьДанных + ExchangePlan.ИзмененияПоставляемыхДанных ExchangePlan.ОбменВнешнимиЗаданиями ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот + ExchangePlan.ОбменСообщениями + XDTOPackage.AgentScripts + XDTOPackage.ApdexExport + XDTOPackage.DataDump + XDTOPackage.КонтрольУдаленногоАдминистрирования + XDTOPackage.СообщенияУдаленногоАдминистрирования + XDTOPackage.УдаленноеАдминистрированиеВМоделиСервиса XDTOPackage.Файлы + WebService.Exchange + WebService.Exchange_2_0_1_6 WebService.Files + WebService.InterfaceVersion + WebService.MessageExchange + WebService.MessageExchange_2_0_1_6 + WebService.RemoteAdministrationOfExchange + WebService.RemoteAdministrationOfExchange_2_0_1_6 EventSubscription.ВзаимодействияЗаполнитьЗначениеРеквизитаУпорядочивания EventSubscription.ВзаимодействияСброситьЗначениеРеквизитаУпорядочивания EventSubscription.ВключитьИспользованиеПланаОбмена @@ -529,6 +614,7 @@ EventSubscription.ЗаписатьЗависимыеНаборыЗначенийДоступа EventSubscription.ЗаписатьНаборыЗначенийДоступа EventSubscription.ЗаполнитьКонтактнуюИнформацию + EventSubscription.ЗарегистрироватьИзмененияОбщихДанныхУзлов EventSubscription.ЗарегистрироватьИзмененияФильтровОграниченияМиграцииДанных EventSubscription.НастроитьПорядокВариантовОтветовАнкет EventSubscription.НастроитьПорядокВидовКонтактнойИнформации @@ -540,6 +626,8 @@ EventSubscription.ОбновитьСостояниеБизнесПроцесса EventSubscription.ОтключитьИспользованиеПланаОбмена EventSubscription.ОтменитьОтправкуДанныхУзлаВРаспределеннойИнформационнойБазе + EventSubscription.ПриОтправкеДанныхПодчиненному + EventSubscription.ПриПолученииДанныхОтПодчиненного EventSubscription.ПрисоединенныйФайлПередЗаписьюВзаимодействия EventSubscription.ПрисоединенныйФайлПередУдалениемВзаимодействия EventSubscription.ПрисоединенныйФайлПриЗаписиВзаимодействия @@ -550,6 +638,8 @@ EventSubscription.СброситьПорядокВидовКонтактнойИнформации EventSubscription.СкопироватьРеквизитыВерсииФайловВФайл EventSubscription.СоздатьПредопределенныеПапкиЭлектронныхПисем + EventSubscription.СправочникиОбщихПоставляемыхДанныхПередЗаписью + EventSubscription.СправочникиРазделенныхПоставляемыхДанныхПередУдалением EventSubscription.СтартоватьВнешнееЗадание EventSubscription.УстановитьПометкуУдаленияЗадач EventSubscription.УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия @@ -560,18 +650,27 @@ ScheduledJob.ЗапускДополнительныхОбработок ScheduledJob.ИзвлечениеТекста ScheduledJob.КонтрольЖурналаРегистрации + ScheduledJob.КонтрольОбновленияРазделенныхПоставляемыхДанных ScheduledJob.МониторингЗадач ScheduledJob.ОбновлениеАгрегатов ScheduledJob.ОбновлениеИндексаППД + ScheduledJob.ОбновлениеОбластейДанных + ScheduledJob.ОбновлениеОбщихПоставляемыхДанных + ScheduledJob.ОбслуживаниеОбластейДанных + ScheduledJob.ОтправкаИПолучениеСообщенийСистемы ScheduledJob.ПерестроениеАгрегатов ScheduledJob.ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения + ScheduledJob.ПланированиеОбработкиЗаданий ScheduledJob.ПолучениеИОтправкаЭлектронныхПисем + ScheduledJob.РассылкаОтчетов ScheduledJob.СлияниеИндексаППД ScheduledJob.УведомлениеИсполнителейОНовыхЗадачах ScheduledJob.УстановкаПериодаРассчитанныхИтогов + ScheduledJob.ЭкспортОценкиПроизводительности SettingsStorage.ХранилищеВариантовОтчетов FunctionalOption.АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО FunctionalOption.ВариантыВерсионированияОбъектов + FunctionalOption.ЗарегистрированыИзмененияДанных FunctionalOption.ИзменятьЗаданияЗаднимЧислом FunctionalOption.ИспользоватьАнкетирование FunctionalOption.ИспользоватьБиблиотекуФайлов @@ -592,25 +691,34 @@ FunctionalOption.ИспользоватьИнтеграциюС1СДокументооборот FunctionalOption.ИспользоватьНапоминанияПользователя FunctionalOption.ИспользоватьОбменДанными + FunctionalOption.ИспользоватьОбменДаннымиВЛокальномРежиме + FunctionalOption.ИспользоватьОбменДаннымиВМоделиСервиса FunctionalOption.ИспользоватьПодчиненныеБизнесПроцессы FunctionalOption.ИспользоватьПолнотекстовыйПоиск FunctionalOption.ИспользоватьПочтовыйКлиент FunctionalOption.ИспользоватьПризнакРассмотрено FunctionalOption.ИспользоватьПрочиеВзаимодействия + FunctionalOption.ИспользоватьРазделениеПоОбластямДанных FunctionalOption.ИспользоватьЭлектронныеЦифровыеПодписи FunctionalOption.ИспользоватьЭЦПВПрисоединенныхФайлах + FunctionalOption.НеИспользоватьРазделениеПоОбластямДанных FunctionalOption.ОграничиватьДоступНаУровнеЗаписей FunctionalOption.ОтправлятьПисьмаВФорматеHTML FunctionalOption.ПрефиксИнформационнойБазы FunctionalOption.ПрефиксыОрганизаций + FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме + FunctionalOption.СтандартныеПодсистемыВМоделиСервиса FunctionalOption.ХранитьФайлыВТомахНаДиске FunctionalOptionsParameter.Организация FunctionalOptionsParameter.ТипВерсионируемогоОбъекта FunctionalOptionsParameter.ТипОбъектаСДополнительнымиОтчетамиИОбработками FunctionalOptionsParameter.ТипФормыСДополнительнымиОтчетамиИОбработками CommonCommand.БиблиотекаФайлов + CommonCommand.ВыгрузитьДанныеВЛокальнуюВерсию + CommonCommand.ВыгрузитьДанныеДляПереходаВСервис CommonCommand.ВыполнитьОбменДанными CommonCommand.ВыполнитьОбменДаннымиИнтерактивно + CommonCommand.ДобавитьПользователейСервиса CommonCommand.ДокументооборотДокументы CommonCommand.ДокументооборотЗадачи CommonCommand.ДокументооборотСоздатьБизнесПроцесс @@ -620,17 +728,25 @@ CommonCommand.ДополнительныеОтчетыИОбработкиПечатныеФормы CommonCommand.ДополнительныеОтчетыИОбработкиСозданиеСвязанныхОбъектов CommonCommand.ДополнительныеСведения + CommonCommand.ЗагрузитьДанныеВОбласть + CommonCommand.ЗагрузитьДанныеИзЛокальнойВерсии + CommonCommand.ЗагрузитьДанныеИзСервиса CommonCommand.ЗадачиПоБизнесПроцессу CommonCommand.ЗадачиПоПредмету CommonCommand.ЗаметкиПоПредмету CommonCommand.ИсторияИзменений CommonCommand.КартаМаршрутаБизнесПроцесса CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена + CommonCommand.НастройкаОбменаСообщениями CommonCommand.НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты + CommonCommand.ОбменСообщениями + CommonCommand.ОбновлениеОбщихПоставляемыхДанных + CommonCommand.ОбновлениеПоставляемыхДанных CommonCommand.ОткрытьОбменыДанными CommonCommand.ОткрытьПравилаКонвертацииОбъектов CommonCommand.ОткрытьПравилаРегистрацииОбъектов CommonCommand.ОткрытьСценарииОбменовДанными + CommonCommand.ОчиститьРегистрациюИзмененийПоставляемыхДанных CommonCommand.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных CommonCommand.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных CommonCommand.ПерсональнаяНастройкаПроксиСервера @@ -641,6 +757,7 @@ CommonCommand.ПрисоединенныеФайлыКОбъекту CommonCommand.РазместитьФайлыНачальногоОбраза CommonCommand.РолиИИсполнителиЗадач + CommonCommand.СинхронизироватьДанные CommonCommand.СозданиеНачальногоОбразаСФайлами CommonCommand.СоздатьЗаметкуПоПредмету CommonCommand.СтруктураПодчиненности @@ -653,13 +770,18 @@ CommandGroup.Органайзер CommandGroup.ПараметрыОбменаДанными CommandGroup.Печать + Constant.АдресАгентаСервиса Constant.АдресатыПолученияОтчетаПоЖурналуРегистрации Constant.АдресВебСервиса1СДокументооборот Constant.АдресВебСервисаБиблиотекиФайлов + Constant.АдресВебСервисаОбменаДанными + Constant.АдресСервисаПоставляемыхДанных Constant.АлгоритмПодписи Constant.АлгоритмХеширования Constant.АлгоритмШифрования + Constant.БлокировкаОтправкиБыстрыхСообщений Constant.ВерсияКлассификатораБанковРФ + Constant.ВнутреннийАдресМенеджераСервиса Constant.ВыполнятьЗамерыПроизводительности Constant.ВыполнятьПроверкуЭЦПНаСервере Constant.ДатаОбновленияПовторноИспользуемыхЗначенийМРО @@ -667,10 +789,14 @@ Constant.ДобавлятьРуководителямДоступПодчиненных Constant.ЗаголовокСистемы Constant.ЗапрещатьЗагрузкуФайловПоРасширению + Constant.ЗарегистрированыИзмененияДанных Constant.ИдентификаторКорневойПапкиФайлов1СДокументооборот Constant.ИзвлекатьТекстыФайловНаСервере Constant.ИзменятьЗаданияЗаднимЧислом + Constant.ИмяПользователяАгентаСервиса Constant.ИмяПользователяБиблиотекиФайлов + Constant.ИмяСлужебногоПользователяМенеджераСервиса + Constant.ИмяСлужебногоПользователяСервисаПоставляемыхДанных Constant.ИспользоватьАнкетирование Constant.ИспользоватьБиблиотекуФайлов Constant.ИспользоватьБизнесПроцессыИЗадачи @@ -685,28 +811,51 @@ Constant.ИспользоватьИнтеграциюС1СДокументооборот Constant.ИспользоватьНапоминанияПользователя Constant.ИспользоватьОбменДанными + Constant.ИспользоватьОбменДаннымиВЛокальномРежиме + Constant.ИспользоватьОбменДаннымиВМоделиСервиса Constant.ИспользоватьПодчиненныеБизнесПроцессы Constant.ИспользоватьПолнотекстовыйПоиск Constant.ИспользоватьПочтовыйКлиент Constant.ИспользоватьПризнакРассмотрено Constant.ИспользоватьПрочиеВзаимодействия + Constant.ИспользоватьРазделениеПоОбластямДанных Constant.ИспользоватьЭлектронныеЦифровыеПодписи + Constant.КаталогВременныхФайловСообщенийОбменаДляLinux + Constant.КаталогВременныхФайловСообщенийОбменаДляWindows Constant.КодКорневойПапкиБиблиотекиФайлов + Constant.КонечнаяТочкаМенеджераСервиса + Constant.КопироватьОбластиДанныхИзЭталонной + Constant.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания + Constant.МаксимальноеКоличествоИсполняющихФоновыхЗаданий Constant.МаксимальныйРазмерФайла Constant.МаксимальныйРазмерФайлаДляПередачиВ1СДокументооборот + Constant.МаксимальныйРазмерФайлаОбластиДанных Constant.НаименованиеКорневойПапкиФайлов1СДокументооборот Constant.НастройкаПодчиненногоУзлаРИБЗавершена Constant.НастройкаПроксиСервера Constant.НастройкиВыполненияРегламентныхЗаданий Constant.НастройкиПодчиненногоУзлаРИБ + Constant.НеИспользоватьРазделениеПоОбластямДанных + Constant.НомерЗагрузкиПоставляемыхДанных + Constant.ОбщийКаталогВременныхФайлов + Constant.ОбщийКаталогВременныхФайловLinux Constant.ОграничиватьДоступНаУровнеЗаписей Constant.ОтправлятьПисьмаВФорматеHTML Constant.ПараметрыАдминистрированияИБ + Constant.ПарольПользователяАгентаСервиса Constant.ПарольПользователяБиблиотекиФайлов + Constant.ПарольСлужебногоПользователяМенеджераСервиса + Constant.ПарольСлужебногоПользователяСервисаПоставляемыхДанных Constant.ПрефиксУзлаРаспределеннойИнформационнойБазы Constant.ПровайдерЭЦП + Constant.РазмерБлокаПередачиФайла + Constant.РежимИспользованияИнформационнойБазы + Constant.СообщениеБлокировкиПриОбновленииКонфигурации Constant.СписокЗапрещенныхРасширений + Constant.СписокЗапрещенныхРасширенийОбластиДанных + Constant.СписокРасширенийТекстовыхФайлов Constant.СписокРасширенийФайловOpenDocument + Constant.СписокРасширенийФайловOpenDocumentОбластиДанных Constant.СтатусОбновленияКонфигурации Constant.ТипПровайдераЭЦП Constant.УдалитьИспользоватьВзаимодействия @@ -722,11 +871,13 @@ CommonForm.Вопрос CommonForm.ВопросОбУстановкеРасширенияРаботыСФайлами CommonForm.ВсеОтчеты + CommonForm.ВходВОбластьДанных + CommonForm.ВыборДаты CommonForm.ВыборДействияПриОбнаруженииБолееНовогоФайла CommonForm.ВыборДействияПриОбнаруженииФайлаДругогоРазмера CommonForm.ВыборИсполнителяБизнесПроцесса CommonForm.ВыборКонтакта - CommonForm.ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение + CommonForm.ВыборОбъектовИнформационнойБазыКорреспондента CommonForm.ВыборОбъектовМетаданных CommonForm.ВыборПодписей CommonForm.ВыборПрисоединенныхФайлов @@ -735,7 +886,10 @@ CommonForm.ВыборСертификата CommonForm.ВыборСертификатовШифрования CommonForm.ВыборУзловПлановОбмена + CommonForm.ВыгрузкаДанных CommonForm.ВыполнениеОбменаДанными + CommonForm.ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами + CommonForm.ДлительнаяОперация CommonForm.ДобавлениеПодписиИзФайла CommonForm.ДокументооборотБизнесПроцессИсполнение CommonForm.ДокументооборотБизнесПроцессОбработкаВнутреннегоДокумента @@ -765,12 +919,15 @@ CommonForm.ДокументооборотСозданиеНовогоФайла CommonForm.ДокументооборотФайлы CommonForm.ДополнительныеОтчетыИОбработки + CommonForm.ЗагрузкаДанныхВОбласть CommonForm.ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации + CommonForm.ИнформацияНеразделенногоПользователя CommonForm.КарточкаФайлаИзБиблиотекиФайлов CommonForm.МастерАнкетыПоРазделам CommonForm.НапоминаниеПриРедактировании CommonForm.НастройкаЛокальногоКэшаФайлов CommonForm.НастройкаМоихОтчетовИОбработок + CommonForm.НастройкаОбменаСообщениями CommonForm.НастройкаПечатныхФормПередОтправкой CommonForm.НастройкиЭЦП CommonForm.НерекомендуемаяВерсияПлатформы @@ -782,9 +939,11 @@ CommonForm.ПараметрыПроксиСервера CommonForm.ПерсональныеНастройкиЭЦП CommonForm.ПечатьДокументов + CommonForm.ПодключениеКонечнойТочки CommonForm.ПодписьЭЦП CommonForm.ПодтверждениеПароляУчетнойЗаписи CommonForm.ПоискПоИндексу + CommonForm.ПользователиСервиса CommonForm.ПраваДоступа CommonForm.ПраваДоступаУпрощенно CommonForm.ПраваПоЗначениямДоступа @@ -796,6 +955,7 @@ CommonForm.СертификатЭЦП CommonForm.СозданиеНачальногоОбразаСФайлами CommonForm.СтруктураПодчиненности + CommonForm.УстановкаВедущейКонечнойТочки CommonForm.УстановкаПодписиЭЦП CommonForm.УточнениеКонтактов CommonForm.ФайлыВТоме @@ -817,8 +977,11 @@ Catalog.Заметки Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы Catalog.ЗначенияСвойствОбъектов + Catalog.ИдентификаторыОбъектовМетаданных Catalog.Календари Catalog.КлассификаторБанковРФ + Catalog.КлассификаторВалют + Catalog.КлючевыеОперации Catalog.НаборыДополнительныхРеквизитовИСведений Catalog.НазначенияСертификатовЭЦП Catalog.НастройкиЗаполненияОбъектов1СДокументооборота @@ -827,8 +990,11 @@ Catalog.ПапкиЭлектронныхПисем Catalog.Пользователи Catalog.ПравилаОбработкиЭлектроннойПочты + Catalog.ПроизводственныеКалендари Catalog.ПрофилиГруппДоступа + Catalog.РассылкиОтчетов Catalog.РолиИсполнителей + Catalog.СообщенияСистемы Catalog.СтраныМира Catalog.СценарииОбменовДанными Catalog.ТелефонныйЗвонокПрисоединенныеФайлы @@ -854,40 +1020,53 @@ Enum.ВариантыПравилЗаполненияРеквизитов Enum.ВариантыПубликацииДополнительныхОтчетовИОбработок Enum.ВариантыСжатияTIFF + Enum.ВидыДнейПроизводственногоКалендаря Enum.ВидыДополнительныхОтчетовИОбработок + Enum.ВидыКалендарей Enum.ВидыНазначенияДатЗапрета + Enum.ВидыПоставляемыхДанных Enum.ВидыПравилДляОбменаДанными Enum.ВидыТранспортаСообщенийОбмена Enum.ДействияПриОбмене Enum.ДействияПриСохраненииСЭЦП Enum.ДействияСФайламиПоДвойномуЩелчку Enum.ИсточникиПравилДляОбменаДанными - Enum.КлючевыеОперации + Enum.ПериодичностиРасписанийРассылокОтчетов Enum.ПолФизическогоЛица Enum.ПорядокОтветовНаЗапросыУведомленийОПрочтении Enum.ПриоритетыОбъектовОбмена Enum.РазмерыБумаги Enum.РазрешенияСканированногоИзображения Enum.РежимыВыгрузкиОбъектовОбмена + Enum.РежимыИспользованияИнформационнойБазы Enum.РезультатыВыполненияОбмена Enum.СостоянияБизнесПроцессов + Enum.СостоянияЗаданий Enum.СпособыPOP3Аутентификации Enum.СпособыSMTPАутентификации Enum.СпособыВызоваДополнительныхОбработок + Enum.СпособыОткрытияФайлаНаПросмотр Enum.СпособыПоворотаИзображения Enum.СпособыРедактированияЭлектронныхПисем Enum.СпособыСравненияВерсийФайлов Enum.СпособыУстановкиВремениНапоминания Enum.СтатусыИзвлеченияТекстаФайлов Enum.СтатусыИсходящегоЭлектронногоПисьма + Enum.СтатусыОбластейДанных Enum.ТипыВариантовОтчетов Enum.ТипыВопросовШаблонаАнкеты + Enum.ТипыДанныхКэшаПрограммныхИнтерфейсов Enum.ТипыКонтактнойИнформации Enum.ТипыОтветовНаВопрос + Enum.ТипыПользователей Enum.ТипыТабличныхВопросов Enum.ТипыТекстовЭлектронныхПисем + Enum.ТипыФайловДляВстроенногоРедактора Enum.ТипыХраненияФайлов + Enum.УдалитьКлючевыеОперации + Enum.УровниПроизводительности Enum.ФорматыСканированногоИзображения + Enum.ФорматыСохраненияОтчетов Enum.ФорматыХраненияМногостраничныхФайлов Enum.ФорматыХраненияОдностраничныхФайлов Enum.ЦветаЗаметок @@ -903,10 +1082,10 @@ Report.ЗадачиИстекающиеНаДату Report.ПраваДоступа Report.ПросроченныеЗадачи - Report.СправкаОбИсполнительскойДисциплине DataProcessor.АвтоматическоеИзвлечениеТекстов + DataProcessor.АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных DataProcessor.АктивныеПользователи - DataProcessor.БлокировкаСоединенийСИнформационнойБазой + DataProcessor.БлокировкаРаботыПользователей DataProcessor.ГрупповоеИзменениеОбъектов DataProcessor.ЖурналРегистрации DataProcessor.ЗагрузкаКурсовВалют @@ -940,11 +1119,14 @@ InformationRegister.АдресныеСокращения InformationRegister.АдресныйКлассификатор InformationRegister.АктивныеПредметыВзаимодействий + InformationRegister.БлокировкиСеансовОбластиДанных InformationRegister.ВерсииОбъектов InformationRegister.ВерсииОбъектовАдресногоКлассификатора InformationRegister.ВерсииПодсистем + InformationRegister.ВерсииПоставляемыхДанных InformationRegister.ГруппыЗначенийДоступа InformationRegister.ДанныеБизнесПроцессов + InformationRegister.ДанныеПроизводственногоКалендаря InformationRegister.ДатыЗапретаИзменения InformationRegister.ДокументыФизическихЛиц InformationRegister.ДополнительныеСведения @@ -952,20 +1134,30 @@ InformationRegister.ЗамерыВремени InformationRegister.ЗначенияГруппДоступа InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем + InformationRegister.ИзмененияОбщихДанныхУзлов InformationRegister.ИсполнителиЗадач InformationRegister.ИсточникиВнешнихЗадач InformationRegister.КалендарныеГрафики + InformationRegister.КодировкиВерсийФайлов InformationRegister.КурсыВалют + InformationRegister.КурсыВалютПоКлассификатору + InformationRegister.КэшПрограммныхИнтерфейсов InformationRegister.НаборыЗначенийДоступа InformationRegister.НазначениеДополнительныхОбработок InformationRegister.НаличиеПрисоединенныхФайлов InformationRegister.НапоминанияПользователя InformationRegister.НастройкиВерсионированияОбъектов + InformationRegister.НастройкиОтправителя InformationRegister.НастройкиТранспортаОбмена InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты + InformationRegister.НеразделенныеПользователи InformationRegister.НомераОтсканированныхФайлов + InformationRegister.ОбластиДанных + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз InformationRegister.ОтветыНаВопросыАнкет + InformationRegister.ОчередьЗаданий + InformationRegister.ПодпискиПолучателей InformationRegister.ПодчиненныеПользователи InformationRegister.ПользовательскиеМакетыПечати InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам @@ -975,9 +1167,13 @@ InformationRegister.ПрисоединенныеФайлы InformationRegister.ПутиМодулейКриптографииСерверовLinux InformationRegister.РабочиеКаталогиФайлов + InformationRegister.РазделенныеРегламентныеЗадания + InformationRegister.СвязиПоставляемыхДанных + InformationRegister.СообщенияОбменаДанными InformationRegister.СоответствияОбъектовИнформационныхБаз InformationRegister.СоставыГруппПользователей InformationRegister.СостоянияОбменовДанными + InformationRegister.СостоянияРассылокОтчетов InformationRegister.СостоянияУспешныхОбменовДанными InformationRegister.ТаблицыГруппДоступа InformationRegister.УведомленияОПрочтении diff --git a/SSL/src/Configuration/ManagedApplicationModule.bsl b/SSL/src/Configuration/ManagedApplicationModule.bsl index 8fe2da911..1e2a4f60b 100644 --- a/SSL/src/Configuration/ManagedApplicationModule.bsl +++ b/SSL/src/Configuration/ManagedApplicationModule.bsl @@ -1,7 +1,7 @@ // СтандартныеПодсистемы -// БазоваяФункциональность +// СтандартныеПодсистемы.БазоваяФункциональность // СписокЗначений для накапливания пакета сообщений в журнал регистрации, // формируемых в клиентской бизнес-логике. @@ -11,9 +11,13 @@ // Признак того, что в данном сеансе не нужно запрашивать стандартное подтверждение при выходе Перем ПропуститьПредупреждениеПередЗавершениемРаботыСистемы Экспорт; -// Конец БазоваяФункциональность +// Конец СтандартныеПодсистемы.БазоваяФункциональность -// ОбновлениеКонфигурации +// СтандартныеПодсистемы.ЗавершениеРаботыПользователей +Перем РаботаПользователейЗавершается Экспорт; +// Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей + +// СтандартныеПодсистемы.ОбновлениеКонфигурации // Информация о доступном обновлении конфигурации, обнаруженном в Интернете // при запуске программы. @@ -21,18 +25,18 @@ // Структура с параметрами помощника обновления конфигурации. Перем НастройкиОбновленияКонфигурации Экспорт; -// Конец ОбновлениеКонфигурации +// Конец СтандартныеПодсистемы.ОбновлениеКонфигурации -// РаботаСФайлами +// СтандартныеПодсистемы.РаботаСФайлами Перем КомпонентаTwain Экспорт; // Twain компонента для работы со сканером -// Конец РаботаСФайлами +// Конец СтандартныеПодсистемы.РаботаСФайлами -// ФайловыеФункции +// СтандартныеПодсистемы.ФайловыеФункции // Признак того, что в данном сеансе не нужно повторно делать проверку доступа к каталогу на диске -Перем ПроверкаДоступаКРабочемуКаталогуВыполнена Экспорт; -// Конец ФайловыеФункции +Перем ПроверкаДоступаКРабочемуКаталогуВыполнена Экспорт; +// Конец СтандартныеПодсистемы.ФайловыеФункции -// РезервноеКопированиеИБ +// СтандартныеПодсистемы.РезервноеКопированиеИБ // Параметры для резервного копирования Перем ПараметрыРезервногоКопированияИБ Экспорт; @@ -41,34 +45,18 @@ // Максимальная дата отложенного резервного копирования Перем ДатаОтложенногоРезервногоКопирования Экспорт; -// Конец РезервноеКопированиеИБ +// Конец СтандартныеПодсистемы.РезервноеКопированиеИБ + +// СтандартныеПодсистемы.ОценкаПроизводительности +Перем ОценкаПроизводительностиЗамерВремени Экспорт; +// Конец СтандартныеПодсистемы.ОценкаПроизводительности // Конец СтандартныеПодсистемы -Процедура ПередНачаломРаботыСистемы(Отказ) +Процедура ПередНачаломРаботыСистемы(Отказ) // СтандартныеПодсистемы - - // Пользователи - ОшибкаАвторизации = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ОшибкаАвторизации; - Если ЗначениеЗаполнено(ОшибкаАвторизации) Тогда - Предупреждение(ОшибкаАвторизации); - Отказ = Истина; - Возврат; - КонецЕсли; - // Конец Пользователи - - СтандартныеПодсистемыКлиент.УстановитьПроизвольныйЗаголовокПриложения(); - ВерсияАктуальна = СтандартныеПодсистемыКлиент.ПроверитьВерсиюПлатформыПриЗапуске("ПередНачаломРаботы"); - Если Не ВерсияАктуальна Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - // ОбновлениеВерсииИБ - Отказ = НЕ ОбновлениеИнформационнойБазыКлиент.ВозможноВыполнитьОбновлениеИнформационнойБазы(); - // Конец ОбновлениеВерсииИБ - + СтандартныеПодсистемыКлиент.ДействияПередНачаломРаботыСистемы(Отказ); // Конец СтандартныеПодсистемы КонецПроцедуры @@ -76,117 +64,15 @@ Процедура ПриНачалеРаботыСистемы() // СтандартныеПодсистемы - СтандартныеПодсистемыКлиент.УстановитьПроизвольныйЗаголовокПриложения(); - ВерсияАктуальна = СтандартныеПодсистемыКлиент.ПроверитьВерсиюПлатформыПриЗапуске("ПриНачалеРаботы"); - Если Не ВерсияАктуальна Тогда - Возврат; - КонецЕсли; - - // ПроверкаЛегальностиПолученияОбновления - Если НЕ ПроверкаЛегальностиПолученияОбновленияКлиент.ПодтвердитьЛегальностьПолученияОбновления() Тогда - Возврат; - КонецЕсли; - // Конец ПроверкаЛегальностиПолученияОбновления - - // ОбменДанными - Если Не ОбменДаннымиКлиент.ПроверитьЗагрузкуСообщенияОбменаСИзменениямиКонфигурацииДляПодчиненногоУзла() Тогда - Возврат; - КонецЕсли; - // Конец ОбменДанными - - // ОбновлениеВерсииИБ - ОбновлениеИнформационнойБазыКлиент.ВыполнитьОбновлениеИнформационнойБазы(); - // Конец ОбновлениеВерсииИБ - - // отработка параметров запуска системы - Если ОбработатьПараметрыЗапуска(ПараметрЗапуска) Тогда - Возврат; - КонецЕсли; - - // ЗавершениеРаботыПользователей - СоединенияИБКлиент.УстановитьКонтрольРежимаЗавершенияРаботыПользователей(); - // Конец ЗавершениеРаботыПользователей - - // ОбменДанными - ОбменДаннымиКлиент.ПриНачалеРаботыСистемы(); - // Конец ОбменДанными - - // ОбновлениеКонфигурации - ОбновлениеКонфигурацииКлиент.ПроверитьОбновлениеКонфигурации(); - // Конец ОбновлениеКонфигурации - - // РегламентныеЗадания - // Прим.: подсистема КонтрольДинамическогоОбновленияКонфигурации - // должна настраиваться после подсистемы РегламентныеЗадания, т.к. в режиме запуска отдельного - // сеанса обработки регламентных заданий, управление не будет и не должно быть передано далее. - РегламентныеЗаданияКлиент.ПриНачалеРаботыСистемы(); - // Конец РегламентныеЗадания - - // РезервноеКопированиеИБ - РезервноеКопированиеИБКлиент.ПриНачалеРаботыСистемы(); - // Конец РезервноеКопированиеИБ - - // КонтрольДинамическогоОбновленияКонфигурации - КонтрольДинамическогоОбновленияКонфигурацииКлиент.ПриНачалеРаботыСистемы(); - // Конец КонтрольДинамическогоОбновленияКонфигурации - - // НапоминанияПользователя - НапоминанияПользователяКлиент.ПриНачалеРаботыСистемы(); - // Конец НапоминанияПользователя - + СтандартныеПодсистемыКлиент.ДействияПриНачалеРаботыСистемы(Истина); // Конец СтандартныеПодсистемы КонецПроцедуры -// Обработать параметр запуска программы. -// Реализация функции может быть расширена для обработки новых параметров. -// -// Параметры -// ПараметрЗапуска – Строка – параметр запуска, переданный в конфигурацию -// с помощью ключа командной строки /C. -// -// Возвращаемое значение: -// Булево – Истина, если необходимо прервать выполнение процедуры ПриНачалеРаботыСистемы. -// -Функция ОбработатьПараметрыЗапуска(Знач ПараметрЗапуска) - - Перем Результат; - Результат = Ложь; - - // СтандартныеПодсистемы - - // Есть ли параметры запуска - Если ПустаяСтрока(ПараметрЗапуска) Тогда - Возврат Результат; - КонецЕсли; - - // Параметр может состоять из частей, разделенных символом ";". - // Первая часть - главное значение параметра запуска. - // Наличие дополнительных частей определяется логикой обработки главного параметра. - ПараметрыЗапуска = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска, ";"); - ЗначениеПараметраЗапуска = Врег(ПараметрыЗапуска[0]); - - // ЗавершениеРаботыПользователей - Результат = СоединенияИБКлиент.ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска); - // Конец ЗавершениеРаботыПользователей - - // ОбменДанными - Результат = ОбменДаннымиКлиент.ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска); - // Конец ОбменДанными - - // Конец СтандартныеПодсистемы - - // Код конфигурации - // ... - // Конец кода конфигурации - - // СтандартныеПодсистемы - Возврат Результат; - // Конец СтандартныеПодсистемы - -КонецФункции - Процедура ПередЗавершениемРаботыСистемы(Отказ) - СтандартныеПодсистемыКлиент.ОткрытьФормуПредупрежденийПриЗавершенииРаботы(Отказ); + + // СтандартныеПодсистемы + СтандартныеПодсистемыКлиент.ДействияПередЗавершениемРаботыСистемы(Отказ); + // Конец СтандартныеПодсистемы + КонецПроцедуры - diff --git a/SSL/src/Configuration/OrdinaryApplicationModule.bsl b/SSL/src/Configuration/OrdinaryApplicationModule.bsl index 8fe2da911..1e2a4f60b 100644 --- a/SSL/src/Configuration/OrdinaryApplicationModule.bsl +++ b/SSL/src/Configuration/OrdinaryApplicationModule.bsl @@ -1,7 +1,7 @@ // СтандартныеПодсистемы -// БазоваяФункциональность +// СтандартныеПодсистемы.БазоваяФункциональность // СписокЗначений для накапливания пакета сообщений в журнал регистрации, // формируемых в клиентской бизнес-логике. @@ -11,9 +11,13 @@ // Признак того, что в данном сеансе не нужно запрашивать стандартное подтверждение при выходе Перем ПропуститьПредупреждениеПередЗавершениемРаботыСистемы Экспорт; -// Конец БазоваяФункциональность +// Конец СтандартныеПодсистемы.БазоваяФункциональность -// ОбновлениеКонфигурации +// СтандартныеПодсистемы.ЗавершениеРаботыПользователей +Перем РаботаПользователейЗавершается Экспорт; +// Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей + +// СтандартныеПодсистемы.ОбновлениеКонфигурации // Информация о доступном обновлении конфигурации, обнаруженном в Интернете // при запуске программы. @@ -21,18 +25,18 @@ // Структура с параметрами помощника обновления конфигурации. Перем НастройкиОбновленияКонфигурации Экспорт; -// Конец ОбновлениеКонфигурации +// Конец СтандартныеПодсистемы.ОбновлениеКонфигурации -// РаботаСФайлами +// СтандартныеПодсистемы.РаботаСФайлами Перем КомпонентаTwain Экспорт; // Twain компонента для работы со сканером -// Конец РаботаСФайлами +// Конец СтандартныеПодсистемы.РаботаСФайлами -// ФайловыеФункции +// СтандартныеПодсистемы.ФайловыеФункции // Признак того, что в данном сеансе не нужно повторно делать проверку доступа к каталогу на диске -Перем ПроверкаДоступаКРабочемуКаталогуВыполнена Экспорт; -// Конец ФайловыеФункции +Перем ПроверкаДоступаКРабочемуКаталогуВыполнена Экспорт; +// Конец СтандартныеПодсистемы.ФайловыеФункции -// РезервноеКопированиеИБ +// СтандартныеПодсистемы.РезервноеКопированиеИБ // Параметры для резервного копирования Перем ПараметрыРезервногоКопированияИБ Экспорт; @@ -41,34 +45,18 @@ // Максимальная дата отложенного резервного копирования Перем ДатаОтложенногоРезервногоКопирования Экспорт; -// Конец РезервноеКопированиеИБ +// Конец СтандартныеПодсистемы.РезервноеКопированиеИБ + +// СтандартныеПодсистемы.ОценкаПроизводительности +Перем ОценкаПроизводительностиЗамерВремени Экспорт; +// Конец СтандартныеПодсистемы.ОценкаПроизводительности // Конец СтандартныеПодсистемы -Процедура ПередНачаломРаботыСистемы(Отказ) +Процедура ПередНачаломРаботыСистемы(Отказ) // СтандартныеПодсистемы - - // Пользователи - ОшибкаАвторизации = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ОшибкаАвторизации; - Если ЗначениеЗаполнено(ОшибкаАвторизации) Тогда - Предупреждение(ОшибкаАвторизации); - Отказ = Истина; - Возврат; - КонецЕсли; - // Конец Пользователи - - СтандартныеПодсистемыКлиент.УстановитьПроизвольныйЗаголовокПриложения(); - ВерсияАктуальна = СтандартныеПодсистемыКлиент.ПроверитьВерсиюПлатформыПриЗапуске("ПередНачаломРаботы"); - Если Не ВерсияАктуальна Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - // ОбновлениеВерсииИБ - Отказ = НЕ ОбновлениеИнформационнойБазыКлиент.ВозможноВыполнитьОбновлениеИнформационнойБазы(); - // Конец ОбновлениеВерсииИБ - + СтандартныеПодсистемыКлиент.ДействияПередНачаломРаботыСистемы(Отказ); // Конец СтандартныеПодсистемы КонецПроцедуры @@ -76,117 +64,15 @@ Процедура ПриНачалеРаботыСистемы() // СтандартныеПодсистемы - СтандартныеПодсистемыКлиент.УстановитьПроизвольныйЗаголовокПриложения(); - ВерсияАктуальна = СтандартныеПодсистемыКлиент.ПроверитьВерсиюПлатформыПриЗапуске("ПриНачалеРаботы"); - Если Не ВерсияАктуальна Тогда - Возврат; - КонецЕсли; - - // ПроверкаЛегальностиПолученияОбновления - Если НЕ ПроверкаЛегальностиПолученияОбновленияКлиент.ПодтвердитьЛегальностьПолученияОбновления() Тогда - Возврат; - КонецЕсли; - // Конец ПроверкаЛегальностиПолученияОбновления - - // ОбменДанными - Если Не ОбменДаннымиКлиент.ПроверитьЗагрузкуСообщенияОбменаСИзменениямиКонфигурацииДляПодчиненногоУзла() Тогда - Возврат; - КонецЕсли; - // Конец ОбменДанными - - // ОбновлениеВерсииИБ - ОбновлениеИнформационнойБазыКлиент.ВыполнитьОбновлениеИнформационнойБазы(); - // Конец ОбновлениеВерсииИБ - - // отработка параметров запуска системы - Если ОбработатьПараметрыЗапуска(ПараметрЗапуска) Тогда - Возврат; - КонецЕсли; - - // ЗавершениеРаботыПользователей - СоединенияИБКлиент.УстановитьКонтрольРежимаЗавершенияРаботыПользователей(); - // Конец ЗавершениеРаботыПользователей - - // ОбменДанными - ОбменДаннымиКлиент.ПриНачалеРаботыСистемы(); - // Конец ОбменДанными - - // ОбновлениеКонфигурации - ОбновлениеКонфигурацииКлиент.ПроверитьОбновлениеКонфигурации(); - // Конец ОбновлениеКонфигурации - - // РегламентныеЗадания - // Прим.: подсистема КонтрольДинамическогоОбновленияКонфигурации - // должна настраиваться после подсистемы РегламентныеЗадания, т.к. в режиме запуска отдельного - // сеанса обработки регламентных заданий, управление не будет и не должно быть передано далее. - РегламентныеЗаданияКлиент.ПриНачалеРаботыСистемы(); - // Конец РегламентныеЗадания - - // РезервноеКопированиеИБ - РезервноеКопированиеИБКлиент.ПриНачалеРаботыСистемы(); - // Конец РезервноеКопированиеИБ - - // КонтрольДинамическогоОбновленияКонфигурации - КонтрольДинамическогоОбновленияКонфигурацииКлиент.ПриНачалеРаботыСистемы(); - // Конец КонтрольДинамическогоОбновленияКонфигурации - - // НапоминанияПользователя - НапоминанияПользователяКлиент.ПриНачалеРаботыСистемы(); - // Конец НапоминанияПользователя - + СтандартныеПодсистемыКлиент.ДействияПриНачалеРаботыСистемы(Истина); // Конец СтандартныеПодсистемы КонецПроцедуры -// Обработать параметр запуска программы. -// Реализация функции может быть расширена для обработки новых параметров. -// -// Параметры -// ПараметрЗапуска – Строка – параметр запуска, переданный в конфигурацию -// с помощью ключа командной строки /C. -// -// Возвращаемое значение: -// Булево – Истина, если необходимо прервать выполнение процедуры ПриНачалеРаботыСистемы. -// -Функция ОбработатьПараметрыЗапуска(Знач ПараметрЗапуска) - - Перем Результат; - Результат = Ложь; - - // СтандартныеПодсистемы - - // Есть ли параметры запуска - Если ПустаяСтрока(ПараметрЗапуска) Тогда - Возврат Результат; - КонецЕсли; - - // Параметр может состоять из частей, разделенных символом ";". - // Первая часть - главное значение параметра запуска. - // Наличие дополнительных частей определяется логикой обработки главного параметра. - ПараметрыЗапуска = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска, ";"); - ЗначениеПараметраЗапуска = Врег(ПараметрыЗапуска[0]); - - // ЗавершениеРаботыПользователей - Результат = СоединенияИБКлиент.ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска); - // Конец ЗавершениеРаботыПользователей - - // ОбменДанными - Результат = ОбменДаннымиКлиент.ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска); - // Конец ОбменДанными - - // Конец СтандартныеПодсистемы - - // Код конфигурации - // ... - // Конец кода конфигурации - - // СтандартныеПодсистемы - Возврат Результат; - // Конец СтандартныеПодсистемы - -КонецФункции - Процедура ПередЗавершениемРаботыСистемы(Отказ) - СтандартныеПодсистемыКлиент.ОткрытьФормуПредупрежденийПриЗавершенииРаботы(Отказ); + + // СтандартныеПодсистемы + СтандартныеПодсистемыКлиент.ДействияПередЗавершениемРаботыСистемы(Отказ); + // Конец СтандартныеПодсистемы + КонецПроцедуры - diff --git a/SSL/src/Configuration/ParentConfigurations.bin b/SSL/src/Configuration/ParentConfigurations.bin index 673c35f2e..95071e9d1 100644 --- a/SSL/src/Configuration/ParentConfigurations.bin +++ b/SSL/src/Configuration/ParentConfigurations.bin @@ -1 +1 @@ -{6,1,1,561b7ce3-253b-47f8-93b0-2dfef9c913ed,1,c53049cd-f512-4b0a-9bae-c32ef6a282b3,"1.2.4.1","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",2945,1,0,9f2266df-9d7d-4673-b003-815e6b3e2b99,9f2266df-9d7d-4673-b003-815e6b3e2b99,0,1,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,0,1,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,0,1,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,0,1,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,0,1,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,0,1,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,0,1,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,0,1,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,0,1,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,0,1,48e2b615-925a-46d5-9f47-783bdb36ab02,48e2b615-925a-46d5-9f47-783bdb36ab02,0,1,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,0,1,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,0,1,b73b22b7-419a-4ae9-b954-f6ad2244175b,b73b22b7-419a-4ae9-b954-f6ad2244175b,0,1,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,0,1,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,0,1,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,0,1,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,0,1,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,0,1,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,0,1,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,0,1,c17592a9-5df0-4fa6-bd33-3d78d341a55c,c17592a9-5df0-4fa6-bd33-3d78d341a55c,0,1,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,0,1,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,0,1,9e36087a-baa8-4812-956a-6e1ac73aa7e0,9e36087a-baa8-4812-956a-6e1ac73aa7e0,0,1,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,0,1,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,0,1,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,0,1,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,0,1,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,0,1,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,0,1,cb8da2f3-f8bb-4736-8381-7c153670e3e2,cb8da2f3-f8bb-4736-8381-7c153670e3e2,0,1,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,0,1,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,0,1,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,0,1,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,0,1,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,0,1,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,0,1,c53df2d1-4564-47a7-b66e-6a23ba28270e,c53df2d1-4564-47a7-b66e-6a23ba28270e,0,1,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,0,1,cd592a5d-b184-4558-8a28-7079ccf28b89,cd592a5d-b184-4558-8a28-7079ccf28b89,0,1,2009c673-c1a5-45fc-8da2-a36c435085a6,2009c673-c1a5-45fc-8da2-a36c435085a6,0,1,5d16e042-3889-4851-86f1-bc43bf06ee88,5d16e042-3889-4851-86f1-bc43bf06ee88,0,1,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,0,1,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,0,1,e39ecc8a-ce81-483d-85de-b0488c8b7749,e39ecc8a-ce81-483d-85de-b0488c8b7749,0,1,1514eaff-faea-4d82-9465-d0d5292bb31d,1514eaff-faea-4d82-9465-d0d5292bb31d,0,1,6d39c6df-8cd4-47ad-9125-252b37d94575,6d39c6df-8cd4-47ad-9125-252b37d94575,0,1,739bd762-01fc-41a8-87df-844eb201962f,739bd762-01fc-41a8-87df-844eb201962f,0,1,7ef99dd3-d799-4f53-ab56-5528b4c9d782,7ef99dd3-d799-4f53-ab56-5528b4c9d782,0,1,ad7c6165-2e44-4808-a77a-526882cf5dea,ad7c6165-2e44-4808-a77a-526882cf5dea,0,1,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,0,1,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,0,1,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,0,1,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,0,1,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,0,1,968588bb-ee60-4399-955a-3ec4228d3c40,968588bb-ee60-4399-955a-3ec4228d3c40,0,1,23dbb528-7ea8-44ae-a1f2-b7608118666e,23dbb528-7ea8-44ae-a1f2-b7608118666e,0,1,b9627855-6773-4a59-b7d3-f9e2e565cd9e,b9627855-6773-4a59-b7d3-f9e2e565cd9e,0,1,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,0,1,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,0,1,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,0,1,8961a859-2203-4678-ae1f-63e2474a787a,8961a859-2203-4678-ae1f-63e2474a787a,0,1,fe63db47-3ece-4518-b6a2-0b6499f60a61,fe63db47-3ece-4518-b6a2-0b6499f60a61,0,1,0d0ada8a-09bb-4634-bf50-199f3779dad5,0d0ada8a-09bb-4634-bf50-199f3779dad5,0,1,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,0,1,2c8e45b8-7d80-4137-85db-66cd1db94526,2c8e45b8-7d80-4137-85db-66cd1db94526,0,1,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,0,1,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,0,1,7df36398-7752-4f51-9978-1bcb4bcdd062,7df36398-7752-4f51-9978-1bcb4bcdd062,0,1,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,0,1,e8faa1a9-807a-4916-b3c5-76ba2199754c,e8faa1a9-807a-4916-b3c5-76ba2199754c,0,1,99b5c632-61fe-41f5-ac00-ea530633bf28,99b5c632-61fe-41f5-ac00-ea530633bf28,0,1,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,0,1,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,0,1,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,0,1,485911f7-a964-450d-82da-cab020836eb2,485911f7-a964-450d-82da-cab020836eb2,0,1,ac2e5217-aaeb-4b6f-b063-538c84f2da06,ac2e5217-aaeb-4b6f-b063-538c84f2da06,0,1,c08391e1-c4e3-42aa-8738-061031d0cb75,c08391e1-c4e3-42aa-8738-061031d0cb75,0,1,bf4c6723-e586-4643-9f03-9e672afea26f,bf4c6723-e586-4643-9f03-9e672afea26f,0,1,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,0,1,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,0,1,23204b0b-bf77-4f7c-9945-e73ad924ebb4,23204b0b-bf77-4f7c-9945-e73ad924ebb4,0,1,21032fa5-9426-40bd-91e4-ace1e4ceb013,21032fa5-9426-40bd-91e4-ace1e4ceb013,0,1,17d23818-d865-4df6-a5d3-aa21b0287d0c,17d23818-d865-4df6-a5d3-aa21b0287d0c,0,1,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,0,1,27a80757-c0fd-40c7-ad24-4c819c1ba72b,27a80757-c0fd-40c7-ad24-4c819c1ba72b,0,1,7fce9e49-e558-4760-9d95-dde6ac6c1e78,7fce9e49-e558-4760-9d95-dde6ac6c1e78,0,1,e5aba4a3-6056-4ef3-827c-d74283175393,e5aba4a3-6056-4ef3-827c-d74283175393,0,1,63039e62-7314-42ff-bdc6-c251f38b3827,63039e62-7314-42ff-bdc6-c251f38b3827,0,1,8a4b7aab-b602-4581-8fa4-fab66791f701,8a4b7aab-b602-4581-8fa4-fab66791f701,0,1,7c92c579-4651-4fe3-90dc-6c9b594b76f0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,0,1,a2be2d7a-cca0-460f-a915-dadfb9cd588b,a2be2d7a-cca0-460f-a915-dadfb9cd588b,0,1,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,0,1,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,0,1,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,0,1,1f4408f5-460e-431b-9842-bc6875ccf0ae,1f4408f5-460e-431b-9842-bc6875ccf0ae,0,1,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,0,1,7bfc6163-a62f-45e8-9112-40a5d675ba4a,7bfc6163-a62f-45e8-9112-40a5d675ba4a,0,1,542ff510-0245-4a08-80ac-a9941c66ae93,542ff510-0245-4a08-80ac-a9941c66ae93,0,1,03297623-eaa2-4db0-bf1b-ce2076faf20a,03297623-eaa2-4db0-bf1b-ce2076faf20a,0,1,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,0,1,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,0,1,82a3802c-b6d6-4511-bd8b-eeec003afa33,82a3802c-b6d6-4511-bd8b-eeec003afa33,0,1,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,0,1,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,0,1,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,0,1,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,0,1,a755cb43-492d-4069-9b6a-29b92ebb5b0e,a755cb43-492d-4069-9b6a-29b92ebb5b0e,0,1,86d09107-f511-4148-b5d9-d97e92addfde,86d09107-f511-4148-b5d9-d97e92addfde,0,1,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,0,1,6cbedb49-746a-4d63-b3fd-1b0e77ab28c0,6cbedb49-746a-4d63-b3fd-1b0e77ab28c0,0,1,55b78834-3d90-4858-a6f7-e0368b1d8c41,55b78834-3d90-4858-a6f7-e0368b1d8c41,0,1,059b9a75-f53a-4518-a48a-afc72ab9ee36,059b9a75-f53a-4518-a48a-afc72ab9ee36,0,1,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,0,1,1e2a18a3-bdde-4033-9b83-f8a6ee47e86c,1e2a18a3-bdde-4033-9b83-f8a6ee47e86c,0,1,9c7f2728-10a9-463b-b04c-01ee26f3d4c5,9c7f2728-10a9-463b-b04c-01ee26f3d4c5,0,1,8b9be02b-cd1f-4231-a895-6c9be26348c2,8b9be02b-cd1f-4231-a895-6c9be26348c2,0,1,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,0,1,fa4f0b33-5253-4a5f-8121-feae3e1968a6,fa4f0b33-5253-4a5f-8121-feae3e1968a6,0,1,e0d21be2-91dc-4a04-9078-49420ddddcd5,e0d21be2-91dc-4a04-9078-49420ddddcd5,0,1,56c97764-7dba-42e0-8ba0-82712aca20e9,56c97764-7dba-42e0-8ba0-82712aca20e9,0,1,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,0,1,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,0,1,7f3c6269-ea41-492f-87b7-7eaaf712762e,7f3c6269-ea41-492f-87b7-7eaaf712762e,0,1,12f95031-b81f-4802-b2f3-6f70def90db0,12f95031-b81f-4802-b2f3-6f70def90db0,0,1,5732112a-f31d-41cd-9a7f-312a27395502,5732112a-f31d-41cd-9a7f-312a27395502,0,1,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,0,1,f646835e-61eb-4ebd-811e-dac5e70bd1b4,f646835e-61eb-4ebd-811e-dac5e70bd1b4,0,1,61b49c4c-3021-4868-834a-9137476ae169,61b49c4c-3021-4868-834a-9137476ae169,0,1,58911911-5192-45fe-87cf-c4a222a521a1,58911911-5192-45fe-87cf-c4a222a521a1,0,1,70067937-9f27-4442-b87b-6c4576ce1b78,70067937-9f27-4442-b87b-6c4576ce1b78,0,1,115d5d06-a2fc-453e-aab5-c869b6d5850b,115d5d06-a2fc-453e-aab5-c869b6d5850b,0,1,d33ca006-d81d-4ef8-8503-7878e81c599f,d33ca006-d81d-4ef8-8503-7878e81c599f,0,1,123bb339-b95e-44c3-b1e9-482dcaa6f297,123bb339-b95e-44c3-b1e9-482dcaa6f297,0,1,f4119605-beb3-46b6-b372-ecdb74f10a33,f4119605-beb3-46b6-b372-ecdb74f10a33,0,1,d2a2e332-a52c-4277-bd19-5ea8ef198469,d2a2e332-a52c-4277-bd19-5ea8ef198469,0,1,e440c594-14bb-4a6e-af53-a4519c7d5548,e440c594-14bb-4a6e-af53-a4519c7d5548,0,1,4165bdaa-8e27-40de-bcdc-0379c34e8868,4165bdaa-8e27-40de-bcdc-0379c34e8868,0,1,e606f8eb-952a-4abb-b1ae-4211204bed84,e606f8eb-952a-4abb-b1ae-4211204bed84,0,1,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,0,1,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1c2ad932-150a-4b15-b958-62eaa8a1eebc,0,1,f8295f29-2533-4013-981b-240f017d9f7c,f8295f29-2533-4013-981b-240f017d9f7c,0,1,538b316b-3876-4da6-8b97-ad8ef59de17d,538b316b-3876-4da6-8b97-ad8ef59de17d,0,1,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,0,1,ebc5f182-482b-4dec-9961-ce3a448abd0e,ebc5f182-482b-4dec-9961-ce3a448abd0e,0,1,83e618f5-1bf4-474a-9d65-389f1e4b16c3,83e618f5-1bf4-474a-9d65-389f1e4b16c3,0,1,1357512e-3ed3-455d-bc91-81db3b92f9fe,1357512e-3ed3-455d-bc91-81db3b92f9fe,0,1,82223d0f-41d9-45a6-9612-ae4d8408fa1b,82223d0f-41d9-45a6-9612-ae4d8408fa1b,0,1,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,0,1,c2768e31-9e61-4d8d-838d-90b2e2683148,c2768e31-9e61-4d8d-838d-90b2e2683148,0,1,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,0,1,8486e623-1a54-4ad9-ab44-591b6a559bc3,8486e623-1a54-4ad9-ab44-591b6a559bc3,0,1,dce82d28-9a7b-4d4c-af13-90f459cf4af2,dce82d28-9a7b-4d4c-af13-90f459cf4af2,0,1,cb9f2231-49bb-4b14-a124-8996628afead,cb9f2231-49bb-4b14-a124-8996628afead,0,1,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,0,1,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,0,1,6e8fd732-2746-4c27-95a6-58b0adf94d88,6e8fd732-2746-4c27-95a6-58b0adf94d88,0,1,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,0,1,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,0,1,e6c42b5d-57fd-42ce-a968-653620e797f6,e6c42b5d-57fd-42ce-a968-653620e797f6,0,1,724fb328-fec6-4afe-bc99-0ff0951b184b,724fb328-fec6-4afe-bc99-0ff0951b184b,0,1,1692bf73-8ce6-4b0e-875b-79cdd4396ca7,1692bf73-8ce6-4b0e-875b-79cdd4396ca7,0,1,f6259a3b-98f5-4649-8fd0-da0a0285f375,f6259a3b-98f5-4649-8fd0-da0a0285f375,0,1,c565bf25-c55e-4324-851a-cec497f5114a,c565bf25-c55e-4324-851a-cec497f5114a,0,1,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,0,1,8943233f-5c9a-4e6b-b1c2-3bbb94b6c4a7,8943233f-5c9a-4e6b-b1c2-3bbb94b6c4a7,0,1,5b0e250c-4d2d-4e37-ade1-593854610d3f,5b0e250c-4d2d-4e37-ade1-593854610d3f,0,1,148f63d5-23ad-4824-a24c-14d5a54c62d3,148f63d5-23ad-4824-a24c-14d5a54c62d3,0,1,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,0,1,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,0,1,041daf91-e5b3-471d-934d-55229f8a81d6,041daf91-e5b3-471d-934d-55229f8a81d6,0,1,eabfa8b7-fb65-43dd-9308-787f7cce88c9,eabfa8b7-fb65-43dd-9308-787f7cce88c9,0,1,30213cef-b2bc-4e6c-8094-74a61f28b2ed,30213cef-b2bc-4e6c-8094-74a61f28b2ed,0,1,8c72f824-b667-4d74-84aa-30eccfbbd2f0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,0,1,ec7b492d-5d38-4f31-90e0-577ad181514e,ec7b492d-5d38-4f31-90e0-577ad181514e,0,1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,0,1,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,0,1,766c7fb5-727e-4975-9ea1-3b0df4739620,766c7fb5-727e-4975-9ea1-3b0df4739620,0,1,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,0,1,e70a6eab-791f-4c70-bb92-f069c7486d1b,e70a6eab-791f-4c70-bb92-f069c7486d1b,0,1,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,0,1,fac2e2cb-c32a-4592-b6c8-fd18806e845d,fac2e2cb-c32a-4592-b6c8-fd18806e845d,0,1,f58bffe7-4a02-4c4e-bfed-7895177a400c,f58bffe7-4a02-4c4e-bfed-7895177a400c,0,1,fe285122-2257-4fb2-ab7e-1683c31db1c6,fe285122-2257-4fb2-ab7e-1683c31db1c6,0,1,0facc6eb-a178-45ee-a6bc-4bf085d80453,0facc6eb-a178-45ee-a6bc-4bf085d80453,0,1,f74eef36-9441-4b6f-b21c-de9643832f9f,f74eef36-9441-4b6f-b21c-de9643832f9f,0,1,b5e73fbe-499c-4666-a482-0ef399c97c1e,b5e73fbe-499c-4666-a482-0ef399c97c1e,0,1,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,0,1,4ac77dea-3c2b-4566-8857-ba99f7b025c9,4ac77dea-3c2b-4566-8857-ba99f7b025c9,0,1,58ffc4d9-d711-4b68-905c-d2ac4f78b547,58ffc4d9-d711-4b68-905c-d2ac4f78b547,0,1,94ab750f-46b4-427c-a7f2-4e94fb9b0678,94ab750f-46b4-427c-a7f2-4e94fb9b0678,0,1,397d9926-31a3-4c03-acb7-74478f9863e1,397d9926-31a3-4c03-acb7-74478f9863e1,0,1,9ad979d3-74ad-4d90-b279-c3a2bea36ea7,9ad979d3-74ad-4d90-b279-c3a2bea36ea7,0,1,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,0,1,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,0,1,74f02619-7fa8-4c6d-81d6-230156ee45f4,74f02619-7fa8-4c6d-81d6-230156ee45f4,0,1,a103cca0-8243-40e9-bcdd-97a1cc8a3943,a103cca0-8243-40e9-bcdd-97a1cc8a3943,0,1,80fd89d7-160d-4528-9aa0-05b8dac64b4c,80fd89d7-160d-4528-9aa0-05b8dac64b4c,0,1,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,0,1,da551cf6-4f86-4e37-8967-a84c80e1fb13,da551cf6-4f86-4e37-8967-a84c80e1fb13,0,1,bd539a52-d33e-4e9b-8508-230acf76e98a,bd539a52-d33e-4e9b-8508-230acf76e98a,0,1,5fb2c120-fd14-4e78-a35f-c8e9478b3235,5fb2c120-fd14-4e78-a35f-c8e9478b3235,0,1,9d514ce1-f9bd-4018-8107-545cdd372fbd,9d514ce1-f9bd-4018-8107-545cdd372fbd,0,1,fe6b732f-3a33-460f-9686-cffdd5f7d99b,fe6b732f-3a33-460f-9686-cffdd5f7d99b,0,1,06250212-aeb1-4cb8-8785-ea71b1dad848,06250212-aeb1-4cb8-8785-ea71b1dad848,0,1,0c068a61-e5e6-4475-96fa-b7c1d825da42,0c068a61-e5e6-4475-96fa-b7c1d825da42,0,1,1047e34d-397a-42cc-80e6-1be755bd6462,1047e34d-397a-42cc-80e6-1be755bd6462,0,1,1cd473c3-4e36-47a9-b466-73d86ec244b0,1cd473c3-4e36-47a9-b466-73d86ec244b0,0,1,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,0,1,b406b5f9-eeaf-43a0-8930-067554d783c9,b406b5f9-eeaf-43a0-8930-067554d783c9,0,1,47718840-2939-4e30-a72c-a20c88ac4c17,47718840-2939-4e30-a72c-a20c88ac4c17,0,1,58a38994-9fe4-4783-967d-79d1141b90f3,58a38994-9fe4-4783-967d-79d1141b90f3,0,1,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,0,1,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,0,1,f551f78a-2f05-4932-ac33-cfa1b077f46f,f551f78a-2f05-4932-ac33-cfa1b077f46f,0,1,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,0,1,6dc4c216-e49f-4833-b45f-6060b67995ef,6dc4c216-e49f-4833-b45f-6060b67995ef,0,1,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,0,1,ba5574bd-53ca-413f-a245-272f468a80fb,ba5574bd-53ca-413f-a245-272f468a80fb,0,1,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,0,1,300ecdd6-144f-48c8-9fd4-6166f1de1047,300ecdd6-144f-48c8-9fd4-6166f1de1047,0,1,b6bbfb59-8249-47af-9394-be262f118811,b6bbfb59-8249-47af-9394-be262f118811,0,1,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,0,1,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,0,1,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,0,1,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,0,1,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,0,1,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,0,1,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,0,1,4168f6dc-d43f-435a-8a98-2dd99470568a,4168f6dc-d43f-435a-8a98-2dd99470568a,0,1,ecfc7ede-fffb-4bea-9598-3e18845f603d,ecfc7ede-fffb-4bea-9598-3e18845f603d,0,1,ffea6f3b-86fb-438d-bc22-7e19831f57d3,ffea6f3b-86fb-438d-bc22-7e19831f57d3,0,1,eaae534f-b506-4c86-b649-5b103cf5791d,eaae534f-b506-4c86-b649-5b103cf5791d,0,1,18b4773a-5380-4e71-8b51-ef10e19df17e,18b4773a-5380-4e71-8b51-ef10e19df17e,0,1,42f454f7-cfc4-459b-898f-86cace30410c,42f454f7-cfc4-459b-898f-86cace30410c,0,1,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,0,1,e700ab8e-ff33-4968-9bd0-8918a7d2b83f,e700ab8e-ff33-4968-9bd0-8918a7d2b83f,0,1,910b3640-790c-4185-88b5-a7c7466374c0,910b3640-790c-4185-88b5-a7c7466374c0,0,1,b5eceb60-76ba-47e3-90bd-52078d4bae4e,b5eceb60-76ba-47e3-90bd-52078d4bae4e,0,1,b8869f44-b87f-4e3e-a0d5-2aec5ccda4e2,b8869f44-b87f-4e3e-a0d5-2aec5ccda4e2,0,1,f7c23753-ff8c-4c26-bdc5-58e3b038668d,f7c23753-ff8c-4c26-bdc5-58e3b038668d,0,1,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,0,1,10197638-2cde-4424-8390-3bc9abe9852e,10197638-2cde-4424-8390-3bc9abe9852e,0,1,4fb8564e-2338-4c23-84a4-31f768047ced,4fb8564e-2338-4c23-84a4-31f768047ced,0,1,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,0,1,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,0,1,26d823de-420b-4547-9394-0044b29b9d46,26d823de-420b-4547-9394-0044b29b9d46,0,1,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,1,0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,1,0,101a4eb3-cdda-47af-8c69-615a6920347a,101a4eb3-cdda-47af-8c69-615a6920347a,1,0,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,1,0,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,ed394820-a216-4c4b-81ae-5dea33ced43b,ed394820-a216-4c4b-81ae-5dea33ced43b,1,0,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,1,0,8a310493-c06f-46db-b2b5-14d6ed203312,8a310493-c06f-46db-b2b5-14d6ed203312,1,0,b68ec95b-64f3-4a2b-9683-231d50f01eeb,b68ec95b-64f3-4a2b-9683-231d50f01eeb,1,0,4a008342-f72f-4ca1-bad1-64b59b509911,4a008342-f72f-4ca1-bad1-64b59b509911,1,0,cefa1723-a4d4-44c4-bd57-ffa713f9306c,cefa1723-a4d4-44c4-bd57-ffa713f9306c,1,0,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,1,0,4920aabf-6f53-4f91-932a-8ace24631a74,4920aabf-6f53-4f91-932a-8ace24631a74,1,0,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,1,0,dacd15cd-ffdc-444d-a45f-9b0c7776a7c5,dacd15cd-ffdc-444d-a45f-9b0c7776a7c5,1,0,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,1,0,8692ba41-d91d-4af0-8aba-69dd5409d593,8692ba41-d91d-4af0-8aba-69dd5409d593,1,0,852bd696-9a9e-4952-b676-4108f757ad9b,852bd696-9a9e-4952-b676-4108f757ad9b,1,0,a95b564a-c895-40f2-b947-ea08462bb2a0,a95b564a-c895-40f2-b947-ea08462bb2a0,1,0,ca63ca2f-703d-4317-8c5d-0650ea638f3f,ca63ca2f-703d-4317-8c5d-0650ea638f3f,1,0,aa2256c7-9847-40a5-9e49-11c508e0d45b,aa2256c7-9847-40a5-9e49-11c508e0d45b,1,0,a04493f4-508c-4047-b0e3-b7d4bde6427b,a04493f4-508c-4047-b0e3-b7d4bde6427b,1,0,418982cd-d403-47cf-a7ef-993a36104947,418982cd-d403-47cf-a7ef-993a36104947,1,0,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,1,0,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,1,0,35eea3b8-d017-442a-b5a0-a1571165b9a9,35eea3b8-d017-442a-b5a0-a1571165b9a9,1,0,7e84901c-cb7f-437c-a135-0902cd47acb6,7e84901c-cb7f-437c-a135-0902cd47acb6,1,0,c4d67026-2c97-4126-b8be-49aa6f567e2d,c4d67026-2c97-4126-b8be-49aa6f567e2d,1,0,fda2906d-f499-4016-b13a-99f7f713b898,fda2906d-f499-4016-b13a-99f7f713b898,1,0,da2b47f5-4109-4f72-a4a5-70be24a6881f,da2b47f5-4109-4f72-a4a5-70be24a6881f,1,0,849f034e-85dc-4515-aae6-240c1e0d46d9,849f034e-85dc-4515-aae6-240c1e0d46d9,1,0,1c7e9baa-7728-4afd-829a-806cee13ecdb,1c7e9baa-7728-4afd-829a-806cee13ecdb,1,0,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,1,0,f8c499bc-2b02-4b61-a162-4ce87057952f,f8c499bc-2b02-4b61-a162-4ce87057952f,1,0,5a741cf6-8160-4409-9396-2e6d1e67e6fa,5a741cf6-8160-4409-9396-2e6d1e67e6fa,1,0,8242daae-181a-47df-b28e-c1de3fce0359,8242daae-181a-47df-b28e-c1de3fce0359,1,0,5cc3a29d-aa98-42bf-9800-f584229c8e46,5cc3a29d-aa98-42bf-9800-f584229c8e46,1,0,db82191f-77bd-44da-8b33-86f01018e25a,db82191f-77bd-44da-8b33-86f01018e25a,1,0,acfa1919-07ce-4464-8552-6b104e284dca,acfa1919-07ce-4464-8552-6b104e284dca,1,0,f4cff4ff-68e9-4072-971e-1b359d3aa980,f4cff4ff-68e9-4072-971e-1b359d3aa980,1,0,6f9fba85-7c04-4e07-bc93-8ad79cbdca85,6f9fba85-7c04-4e07-bc93-8ad79cbdca85,1,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,1,0,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,1,0,7d069b11-cddd-463d-97be-3cbeaaf0954c,7d069b11-cddd-463d-97be-3cbeaaf0954c,1,0,06ff179c-864b-4d3b-83c5-f09c3e0f37f4,06ff179c-864b-4d3b-83c5-f09c3e0f37f4,1,0,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,1,0,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,1,0,b9004626-915c-44c8-9cb7-25e5b627ee83,b9004626-915c-44c8-9cb7-25e5b627ee83,1,0,1ae364d3-0bec-4089-af23-c60d2a274c85,1ae364d3-0bec-4089-af23-c60d2a274c85,1,0,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1,0,f11ffcfd-3588-4785-b222-cebe80455303,f11ffcfd-3588-4785-b222-cebe80455303,1,0,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,1,0,bfdc6346-db5b-427f-acca-9b48db8fefd0,bfdc6346-db5b-427f-acca-9b48db8fefd0,1,0,1c3f258c-345e-47f6-9e29-98b1222fb348,1c3f258c-345e-47f6-9e29-98b1222fb348,1,0,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,1,0,b3847d64-46b8-4bd1-9362-d88d82b34254,b3847d64-46b8-4bd1-9362-d88d82b34254,1,0,14b58f6d-9243-47cd-a430-8408fcddd8d8,14b58f6d-9243-47cd-a430-8408fcddd8d8,0,1,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,0,1,8a0db1f1-fb8d-45fa-944d-72d460e49873,8a0db1f1-fb8d-45fa-944d-72d460e49873,0,1,7a62d031-c340-4b1e-90af-fff697a2e979,7a62d031-c340-4b1e-90af-fff697a2e979,0,1,18bf6916-83cc-41e5-a35b-1489450ae632,18bf6916-83cc-41e5-a35b-1489450ae632,0,1,ebab97cf-5335-4648-9845-8ca41f79fb49,ebab97cf-5335-4648-9845-8ca41f79fb49,0,1,bb29fa44-6772-4426-a0b8-422115e14288,bb29fa44-6772-4426-a0b8-422115e14288,0,1,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,0,1,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,0,1,40d3ed07-3b56-4c9f-8b96-d94455202ef0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,0,1,5b3b3da9-8619-4fbd-b140-3528875cd179,5b3b3da9-8619-4fbd-b140-3528875cd179,0,1,99e5e866-7ac6-4916-ab66-3e2909822c56,99e5e866-7ac6-4916-ab66-3e2909822c56,0,1,03363877-2752-4a03-95f2-d73b732e0bfd,03363877-2752-4a03-95f2-d73b732e0bfd,0,1,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0,1,78051e10-74ab-44be-adca-e4c93824a386,78051e10-74ab-44be-adca-e4c93824a386,0,1,73629419-83d8-4727-88a9-76c851d104c9,73629419-83d8-4727-88a9-76c851d104c9,0,1,a9c3065b-db68-4f59-9235-33f9fbfdaafd,a9c3065b-db68-4f59-9235-33f9fbfdaafd,0,1,3715cf3d-0abc-4711-8ac9-d41f0be7878f,3715cf3d-0abc-4711-8ac9-d41f0be7878f,0,1,8e8d8078-8b32-4c24-b26e-89a92bf60160,8e8d8078-8b32-4c24-b26e-89a92bf60160,0,1,f96cbb27-7619-41e0-8577-e623ef02dc58,f96cbb27-7619-41e0-8577-e623ef02dc58,0,1,d74dfd31-2016-435b-8652-15fdbca59490,d74dfd31-2016-435b-8652-15fdbca59490,0,1,6411e10c-04e3-4997-9196-c38d717edbb3,6411e10c-04e3-4997-9196-c38d717edbb3,0,1,27651e0e-d560-434b-a49c-f473a5b20c4d,27651e0e-d560-434b-a49c-f473a5b20c4d,0,1,ce85554b-81ba-4149-a951-d09bdc14fa16,ce85554b-81ba-4149-a951-d09bdc14fa16,0,1,23a1ef35-1469-44ea-8535-fa9c7f535cae,23a1ef35-1469-44ea-8535-fa9c7f535cae,0,1,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,0,1,2558d812-ac0a-49ba-87db-3f661209a3c4,2558d812-ac0a-49ba-87db-3f661209a3c4,0,1,20d712ef-77c1-4374-92e1-f20a3ebc7eab,20d712ef-77c1-4374-92e1-f20a3ebc7eab,0,1,65d23ce8-e326-45ee-86b0-6dcf35797201,65d23ce8-e326-45ee-86b0-6dcf35797201,0,1,a2683c3f-1b21-47d8-951d-7d30cde51efc,a2683c3f-1b21-47d8-951d-7d30cde51efc,0,1,54c77053-1728-4914-a354-73fe8853a0e1,54c77053-1728-4914-a354-73fe8853a0e1,0,1,21136691-078f-4bf7-bddd-f41416a76d86,21136691-078f-4bf7-bddd-f41416a76d86,0,1,30a121c7-c4f5-45c4-9504-9778ed85d9e3,30a121c7-c4f5-45c4-9504-9778ed85d9e3,0,1,c68e2157-2541-4f80-966a-d68ce603f131,c68e2157-2541-4f80-966a-d68ce603f131,0,1,91488422-c802-4360-b46b-22d1e2905f0b,91488422-c802-4360-b46b-22d1e2905f0b,0,1,90bc48b0-3094-473c-8e07-53da338d7c53,90bc48b0-3094-473c-8e07-53da338d7c53,0,1,e5dfee58-f748-48ee-81a3-7c6133f06365,e5dfee58-f748-48ee-81a3-7c6133f06365,0,1,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,0,1,2a498baf-ec2e-4dda-b568-801bb60db225,2a498baf-ec2e-4dda-b568-801bb60db225,0,1,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,0,1,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,0,1,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,0,1,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,0,1,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,0,1,5d7174d2-42b3-4e12-b705-4209dd73b53b,5d7174d2-42b3-4e12-b705-4209dd73b53b,0,1,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,0,1,4a9e4ace-b2e9-4445-a77b-ba30a4995900,4a9e4ace-b2e9-4445-a77b-ba30a4995900,0,1,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,0,1,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,0,1,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,0,1,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,0,1,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,0,1,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,0,1,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,0,1,bd97e481-cfc4-4a40-8438-985020f06abd,bd97e481-cfc4-4a40-8438-985020f06abd,0,1,120c5162-b03c-46ce-8a2a-8ef501971715,120c5162-b03c-46ce-8a2a-8ef501971715,0,1,33343620-673e-4aa3-9e58-c6a25f738001,33343620-673e-4aa3-9e58-c6a25f738001,0,1,8aaf780f-ed74-4f44-9598-c14180053ff9,8aaf780f-ed74-4f44-9598-c14180053ff9,0,1,dbd4d09d-f410-4453-9143-bd72da5464cc,dbd4d09d-f410-4453-9143-bd72da5464cc,0,1,1853a370-767a-4845-9425-2f9363d91bd8,1853a370-767a-4845-9425-2f9363d91bd8,0,1,65530aca-7cf2-4a52-b5be-5dcbc15a049e,65530aca-7cf2-4a52-b5be-5dcbc15a049e,0,1,15eb2c2d-305d-42c0-9aec-936b82114bdb,15eb2c2d-305d-42c0-9aec-936b82114bdb,0,1,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,0,1,cbca7272-2aae-4e21-b3f5-12786f085648,cbca7272-2aae-4e21-b3f5-12786f085648,0,1,7718bd0b-7b8a-4ffc-b228-f05683b5531a,7718bd0b-7b8a-4ffc-b228-f05683b5531a,0,1,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,0,1,881f53bc-a52e-4312-b09d-3d3f53ddf84b,881f53bc-a52e-4312-b09d-3d3f53ddf84b,0,1,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,0,1,e3476d0e-0ab4-4734-9261-04aef6281086,e3476d0e-0ab4-4734-9261-04aef6281086,0,1,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,0,1,30fb1877-11cf-4985-a65d-6639a06b33f7,30fb1877-11cf-4985-a65d-6639a06b33f7,0,1,e9c355cb-d4ea-49d1-a893-f8f295a90701,e9c355cb-d4ea-49d1-a893-f8f295a90701,0,1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,0,1,8811ea1a-1221-47b7-9574-3f36ff15a3cf,8811ea1a-1221-47b7-9574-3f36ff15a3cf,0,1,1d715463-691b-4c01-ae39-57c261f2a6ad,1d715463-691b-4c01-ae39-57c261f2a6ad,0,1,4c3d007f-a62c-4fd9-beda-58dbf08ad188,4c3d007f-a62c-4fd9-beda-58dbf08ad188,0,1,c35373a9-f0b0-4ddb-a985-409ac9c64609,c35373a9-f0b0-4ddb-a985-409ac9c64609,0,1,c1c40916-fee5-46e3-90fc-10e7595866c9,c1c40916-fee5-46e3-90fc-10e7595866c9,0,1,437021b0-9f18-4238-9af6-7ca275b91fa4,437021b0-9f18-4238-9af6-7ca275b91fa4,0,1,761a35cb-8387-435f-b671-d5bb0fe9bfeb,761a35cb-8387-435f-b671-d5bb0fe9bfeb,0,1,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,0,1,ac5f945e-2d03-44fb-a8cf-5d786194cefd,ac5f945e-2d03-44fb-a8cf-5d786194cefd,0,1,698ec00f-bf75-420e-81ab-a98808daf3f7,698ec00f-bf75-420e-81ab-a98808daf3f7,0,1,f441907c-d02e-431e-baf4-1854e48a1f50,f441907c-d02e-431e-baf4-1854e48a1f50,0,1,dad9710a-73ca-4e0d-b98b-75f955d0822d,dad9710a-73ca-4e0d-b98b-75f955d0822d,0,1,2191939f-6f71-47c9-a3d2-57acbf7f411e,2191939f-6f71-47c9-a3d2-57acbf7f411e,0,1,19b9cbbb-1fcc-4492-9385-687742cb3d0b,19b9cbbb-1fcc-4492-9385-687742cb3d0b,0,1,247c41dd-c8dc-43dd-b348-1ba31ee92065,247c41dd-c8dc-43dd-b348-1ba31ee92065,0,1,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,0,1,da673406-078d-44c8-9d27-80ef172c4b5e,da673406-078d-44c8-9d27-80ef172c4b5e,0,1,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,0,1,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,0,1,701964a1-7762-45ee-a9a4-41dd9ce94783,701964a1-7762-45ee-a9a4-41dd9ce94783,0,1,55d1909e-f552-441f-8e14-47d2e604cf6a,55d1909e-f552-441f-8e14-47d2e604cf6a,0,1,eae627db-c52b-4e41-94d1-58db28cd0063,eae627db-c52b-4e41-94d1-58db28cd0063,0,1,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,0,1,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,0,1,ed137e05-1996-411d-9927-45a3d7e3ee3b,ed137e05-1996-411d-9927-45a3d7e3ee3b,0,1,fbebf341-9842-41e1-8e4d-490fa02065ce,fbebf341-9842-41e1-8e4d-490fa02065ce,0,1,b8029aa5-0268-49d8-bd1e-bdaa9b7ce34c,b8029aa5-0268-49d8-bd1e-bdaa9b7ce34c,0,1,c05f87b4-ec5f-4d14-981f-02ca8ba89863,c05f87b4-ec5f-4d14-981f-02ca8ba89863,0,1,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,0,1,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,0,1,875d1fc1-8172-4e48-8192-035882e1665d,875d1fc1-8172-4e48-8192-035882e1665d,0,1,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0,1,ca81e0ea-c428-47f9-aedb-078214104a2f,ca81e0ea-c428-47f9-aedb-078214104a2f,0,1,35a28677-0653-47f9-82e1-02c4b9266fee,35a28677-0653-47f9-82e1-02c4b9266fee,0,1,9518d09c-6996-4439-9278-3c71d5ae8fce,9518d09c-6996-4439-9278-3c71d5ae8fce,0,1,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,0,1,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,0,1,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,0,1,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,0,1,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,0,1,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,0,1,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,0,1,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,0,1,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,0,1,1f4d7158-15ed-4b0c-a7ed-1f8cfe2bd882,1f4d7158-15ed-4b0c-a7ed-1f8cfe2bd882,0,1,7effb232-a84f-4b4e-aa0c-1cefdc6ba612,7effb232-a84f-4b4e-aa0c-1cefdc6ba612,0,1,e4ce04bf-15a0-4d9d-af7b-4ec9e1fb36be,e4ce04bf-15a0-4d9d-af7b-4ec9e1fb36be,0,1,f75411c5-a317-42c4-8731-9b16856109d5,f75411c5-a317-42c4-8731-9b16856109d5,0,1,6ef011aa-eda4-4ddf-a588-5208790f6937,6ef011aa-eda4-4ddf-a588-5208790f6937,0,1,db07da1d-0281-4acf-90a2-3fd35629ab35,db07da1d-0281-4acf-90a2-3fd35629ab35,0,1,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,0,1,b61d3dc2-7a03-46bc-90fc-d58e94764194,b61d3dc2-7a03-46bc-90fc-d58e94764194,0,1,37818589-95de-43df-8a0f-f7149f96f683,37818589-95de-43df-8a0f-f7149f96f683,0,1,8d877829-5cf0-46fd-99b5-9bb5e5e5dc51,8d877829-5cf0-46fd-99b5-9bb5e5e5dc51,0,1,5ea65812-6c39-440e-82a4-621a16595d86,5ea65812-6c39-440e-82a4-621a16595d86,0,1,31dd320b-06aa-4314-9914-2c2420f572a1,31dd320b-06aa-4314-9914-2c2420f572a1,0,1,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,0,1,0a91f0a5-95a7-4cd5-9e5b-735aee0ad1b4,0a91f0a5-95a7-4cd5-9e5b-735aee0ad1b4,0,1,d4655391-144c-4ba6-aee5-1edafebe862c,d4655391-144c-4ba6-aee5-1edafebe862c,0,1,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,0,1,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,0,1,68caf9e5-9a79-4b77-b0f4-ca9c0fe4fa16,68caf9e5-9a79-4b77-b0f4-ca9c0fe4fa16,0,1,75c4e24f-b8d4-4b29-a9ce-e1d141c60fae,75c4e24f-b8d4-4b29-a9ce-e1d141c60fae,0,1,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,0,1,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,0,1,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,0,1,61bf78c0-7004-4a74-b362-e979c7316e05,61bf78c0-7004-4a74-b362-e979c7316e05,0,1,c4351896-eff1-4e4d-8823-028d63a9d6bf,c4351896-eff1-4e4d-8823-028d63a9d6bf,0,1,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,0,1,b0ccc05d-8d39-4f57-8e87-6846014f92ea,b0ccc05d-8d39-4f57-8e87-6846014f92ea,0,1,0e2c2490-50ee-4fed-9119-5dec8385f925,0e2c2490-50ee-4fed-9119-5dec8385f925,0,1,aa368dd9-86e1-46f9-a296-591c3639734d,aa368dd9-86e1-46f9-a296-591c3639734d,0,1,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,0,1,8986c155-54be-4b1b-b31a-5c00b88bc40d,8986c155-54be-4b1b-b31a-5c00b88bc40d,0,1,d91441cf-d793-4dfa-9225-f0c16818edde,d91441cf-d793-4dfa-9225-f0c16818edde,0,1,42a39785-144c-4d2d-92c6-fd8b345f687b,42a39785-144c-4d2d-92c6-fd8b345f687b,0,1,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,0,1,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,0,1,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,0,1,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,0,1,c05f15b0-a659-4473-b6d0-acebc4a2da57,c05f15b0-a659-4473-b6d0-acebc4a2da57,0,1,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,0,1,cb747d24-6d8a-4d97-8a13-305ee6f39f75,cb747d24-6d8a-4d97-8a13-305ee6f39f75,0,1,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,0,1,f85e8f91-5e29-490a-b3d7-f72f97593086,f85e8f91-5e29-490a-b3d7-f72f97593086,0,1,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,0,1,00afd243-5575-4340-9217-40c8d61c1d54,00afd243-5575-4340-9217-40c8d61c1d54,0,1,38184767-167b-49b7-b995-4f13900b3822,38184767-167b-49b7-b995-4f13900b3822,0,1,3247e64e-b57e-4c33-8086-7ab93c5b6371,3247e64e-b57e-4c33-8086-7ab93c5b6371,0,1,e5dca369-dc9a-4332-a509-f734b8787e13,e5dca369-dc9a-4332-a509-f734b8787e13,0,1,722af623-156c-4e63-8b2a-93da760f1559,722af623-156c-4e63-8b2a-93da760f1559,0,1,f6939587-ff87-4eca-ae52-10e1bd2abfce,f6939587-ff87-4eca-ae52-10e1bd2abfce,0,1,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,0,1,b0d9086f-cef7-47a8-ad62-d85fea28ebda,b0d9086f-cef7-47a8-ad62-d85fea28ebda,0,1,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,0,1,3e127ace-1506-44ca-9df8-a7a30aa11c56,3e127ace-1506-44ca-9df8-a7a30aa11c56,0,1,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,0,1,2b3cab9a-fd05-42a8-811a-f443aee5e192,2b3cab9a-fd05-42a8-811a-f443aee5e192,0,1,9e9bb3df-4658-4278-8fe7-d4bfc46d2ce1,9e9bb3df-4658-4278-8fe7-d4bfc46d2ce1,0,1,2c02a558-8d12-44cf-be6b-9c399b9032e5,2c02a558-8d12-44cf-be6b-9c399b9032e5,0,1,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,0,1,093dfea8-18ea-457c-aa6f-9bea9bdba76c,093dfea8-18ea-457c-aa6f-9bea9bdba76c,0,1,6c58cc27-215e-4169-88ae-004ecc657d53,6c58cc27-215e-4169-88ae-004ecc657d53,0,1,9c267aa6-5f23-49f6-868a-3324ef2845ff,9c267aa6-5f23-49f6-868a-3324ef2845ff,0,1,495eeeee-d7bf-4063-99e2-86daa066451a,495eeeee-d7bf-4063-99e2-86daa066451a,0,1,b6184698-79e4-4c19-9440-092ccd9dabf8,b6184698-79e4-4c19-9440-092ccd9dabf8,0,1,6eeb4867-bf9d-48dc-b96b-934a0c293010,6eeb4867-bf9d-48dc-b96b-934a0c293010,0,1,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,0,1,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,0,1,8506dbe9-7066-444b-83b6-fb2d71a336e7,8506dbe9-7066-444b-83b6-fb2d71a336e7,0,1,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,0,1,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,0,1,ce235ab9-1dec-459a-9fec-498c262ece56,ce235ab9-1dec-459a-9fec-498c262ece56,0,1,39355e82-30a6-431e-9697-e2c42e82de83,39355e82-30a6-431e-9697-e2c42e82de83,0,1,15d09274-9508-4f64-9ea3-678c5aa50f0f,15d09274-9508-4f64-9ea3-678c5aa50f0f,0,1,4debe032-12e4-4777-b2fc-70b150f2aad1,4debe032-12e4-4777-b2fc-70b150f2aad1,0,1,37558fa2-0833-46d6-9e4f-63d4a3136870,37558fa2-0833-46d6-9e4f-63d4a3136870,0,1,18f4994a-d907-4182-b41b-6e8ec56ae7e0,18f4994a-d907-4182-b41b-6e8ec56ae7e0,0,1,d92cb614-ed09-47db-b70b-d3e533c44c6a,d92cb614-ed09-47db-b70b-d3e533c44c6a,0,1,361271fa-2faa-497d-adfe-dea8b825405e,361271fa-2faa-497d-adfe-dea8b825405e,0,1,5dceae8b-1ff3-4760-a1c4-975a92be1023,5dceae8b-1ff3-4760-a1c4-975a92be1023,0,1,db80ae50-2baf-445b-9055-80f2c7f22c24,db80ae50-2baf-445b-9055-80f2c7f22c24,0,1,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,0,1,3e9d6ca0-62e0-46b0-b3e4-c625a9792b47,3e9d6ca0-62e0-46b0-b3e4-c625a9792b47,0,1,1681dd7a-de80-4b8d-9657-c9702a19d653,1681dd7a-de80-4b8d-9657-c9702a19d653,0,1,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,0,1,9f593f27-8009-40c0-94d6-53f177ce55f4,9f593f27-8009-40c0-94d6-53f177ce55f4,0,1,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,0,1,fd18fb60-8c1f-4c72-a07a-5d0e1f3da062,fd18fb60-8c1f-4c72-a07a-5d0e1f3da062,0,1,48aaf6fa-1f11-47a7-82fa-7e2a9e944414,48aaf6fa-1f11-47a7-82fa-7e2a9e944414,0,1,3d95b8fa-ebe7-46f7-8ec6-69195c91cc5b,3d95b8fa-ebe7-46f7-8ec6-69195c91cc5b,0,1,60bec79f-4965-451e-8e49-117e81d80527,60bec79f-4965-451e-8e49-117e81d80527,0,1,4b71f609-9453-43d0-a3ee-532ea472a84e,4b71f609-9453-43d0-a3ee-532ea472a84e,0,1,703bfeb7-d98d-4baf-a5e1-4a5cb7817ccc,703bfeb7-d98d-4baf-a5e1-4a5cb7817ccc,0,1,2de98078-17b2-4fc0-87f8-ad9a52f03807,2de98078-17b2-4fc0-87f8-ad9a52f03807,0,1,3959030a-b943-4c9b-8463-ab46b5f5355d,3959030a-b943-4c9b-8463-ab46b5f5355d,0,1,2893783c-237d-4746-b58b-0d3f10374bdc,2893783c-237d-4746-b58b-0d3f10374bdc,0,1,e8d3756d-32b5-4919-8899-bf6665a7945d,e8d3756d-32b5-4919-8899-bf6665a7945d,0,1,033d9a8f-73d3-4be3-b0e9-7c9e9cb12161,033d9a8f-73d3-4be3-b0e9-7c9e9cb12161,0,1,dba0d5db-9499-42c0-b4e0-2dd9f7ec462b,dba0d5db-9499-42c0-b4e0-2dd9f7ec462b,0,1,8ecfdcbc-099e-4206-b3d8-541517117ac5,8ecfdcbc-099e-4206-b3d8-541517117ac5,0,1,9f845a0d-b0cb-40c3-9e70-04f4b473990c,9f845a0d-b0cb-40c3-9e70-04f4b473990c,0,1,30c0ab17-d8c7-46c3-82e2-b67572db0a83,30c0ab17-d8c7-46c3-82e2-b67572db0a83,0,1,e82dbb36-a077-47d9-a904-f01ce82b4c19,e82dbb36-a077-47d9-a904-f01ce82b4c19,0,1,f4afbbd8-c503-4715-b0f2-476e0dcbf14c,f4afbbd8-c503-4715-b0f2-476e0dcbf14c,0,1,65625b4e-9ff9-4e15-b3f1-cc0003df25ea,65625b4e-9ff9-4e15-b3f1-cc0003df25ea,0,1,5feb2e44-9d15-4bf8-9f7d-efea6b13e402,5feb2e44-9d15-4bf8-9f7d-efea6b13e402,0,1,619f64ea-78da-448b-86c7-fbb561500211,619f64ea-78da-448b-86c7-fbb561500211,0,1,820d02c2-2cdd-4b09-ab65-98048daef9a0,820d02c2-2cdd-4b09-ab65-98048daef9a0,0,1,b0d36a9d-9ef9-4eff-9360-aeca38d7e967,b0d36a9d-9ef9-4eff-9360-aeca38d7e967,0,1,7e283796-d8a9-442b-b646-92e85beec1e3,7e283796-d8a9-442b-b646-92e85beec1e3,0,1,5c79771f-f98c-453d-9672-8aff65978e20,5c79771f-f98c-453d-9672-8aff65978e20,0,1,51656bbb-096b-4be7-95fb-801e84651d32,51656bbb-096b-4be7-95fb-801e84651d32,0,1,f9b36fd7-095a-48ef-80a6-87415eac7225,f9b36fd7-095a-48ef-80a6-87415eac7225,0,1,1dbecc5f-fe9c-4d8b-a96b-c4c49c06d088,1dbecc5f-fe9c-4d8b-a96b-c4c49c06d088,0,1,97414063-7575-4bb2-9246-a5565fccc1e1,97414063-7575-4bb2-9246-a5565fccc1e1,0,1,f8a456fa-a533-444c-a504-0e74306ada44,f8a456fa-a533-444c-a504-0e74306ada44,0,1,4751a91a-f211-4f66-8238-9bb5668cbc67,4751a91a-f211-4f66-8238-9bb5668cbc67,0,1,b9a6b053-2b93-4946-9531-040d3131dcc5,b9a6b053-2b93-4946-9531-040d3131dcc5,0,1,d95dd1f5-ef84-4bcc-b017-65e390d48873,d95dd1f5-ef84-4bcc-b017-65e390d48873,0,1,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,0,1,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,0,1,e84acba7-7e0f-43e8-a545-6e53d529d5d4,e84acba7-7e0f-43e8-a545-6e53d529d5d4,0,1,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,0,1,6086d53f-f1b2-4126-ab46-64705fe63b87,6086d53f-f1b2-4126-ab46-64705fe63b87,0,1,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,0,1,c66d0377-45bb-4ef0-bf9b-b44a9c510d38,c66d0377-45bb-4ef0-bf9b-b44a9c510d38,0,1,f1381abc-e09f-407d-b6b5-c59e7c9e2fd7,f1381abc-e09f-407d-b6b5-c59e7c9e2fd7,0,1,9c052faf-1d7c-452d-ab81-7fd8f283af66,9c052faf-1d7c-452d-ab81-7fd8f283af66,0,1,5197d1d9-e5f7-4c2d-a72f-8e321a5bde04,5197d1d9-e5f7-4c2d-a72f-8e321a5bde04,0,1,c4bc2765-4007-4f48-b8f0-f5911c9a62b6,c4bc2765-4007-4f48-b8f0-f5911c9a62b6,0,1,5cd8157f-7d91-48b7-afd6-11942da3ba24,5cd8157f-7d91-48b7-afd6-11942da3ba24,0,1,8172256e-f51e-4de0-bd07-3668785f4cb9,8172256e-f51e-4de0-bd07-3668785f4cb9,0,1,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,0,1,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,0,1,c172aeaf-b444-47c0-baee-80ccd91fe934,c172aeaf-b444-47c0-baee-80ccd91fe934,0,1,6287eded-23d8-4b04-8415-1d9afa17713b,6287eded-23d8-4b04-8415-1d9afa17713b,0,1,8ce3513d-d086-46f4-81c3-1761594a64c5,8ce3513d-d086-46f4-81c3-1761594a64c5,0,1,79cb147c-8c6b-4f6e-8d5d-dfa29a6e6e53,79cb147c-8c6b-4f6e-8d5d-dfa29a6e6e53,0,1,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,0,1,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0,1,bde05768-2dd6-4800-985d-27075f610cca,bde05768-2dd6-4800-985d-27075f610cca,0,1,420748d8-4042-4e1e-aca1-ac0190cdf54e,420748d8-4042-4e1e-aca1-ac0190cdf54e,0,1,e6c871d6-e06f-420b-ae04-dbf735d3233d,e6c871d6-e06f-420b-ae04-dbf735d3233d,0,1,e352fc19-96be-4410-a516-bc58cc234422,e352fc19-96be-4410-a516-bc58cc234422,0,1,9b742da4-1696-4c06-9dfa-dd85c9286c74,9b742da4-1696-4c06-9dfa-dd85c9286c74,0,1,59edae58-edef-4451-97e1-9fbb46a3fd9c,59edae58-edef-4451-97e1-9fbb46a3fd9c,0,1,db1062bc-4164-4095-9640-9804c0ebcd0b,db1062bc-4164-4095-9640-9804c0ebcd0b,0,1,ea7c61ff-745c-4908-9a94-bba022d12de4,ea7c61ff-745c-4908-9a94-bba022d12de4,0,1,e0519f0c-9c99-4f5c-a3a9-27adce45737d,e0519f0c-9c99-4f5c-a3a9-27adce45737d,0,1,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,0,1,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,0,1,53caada5-1d53-45dc-9432-90075ddca890,53caada5-1d53-45dc-9432-90075ddca890,0,1,d1472d23-954b-4069-b2d6-df08c6ec0be1,d1472d23-954b-4069-b2d6-df08c6ec0be1,0,1,93fe2ce6-7193-42bc-a966-4653b7989eaa,93fe2ce6-7193-42bc-a966-4653b7989eaa,0,1,73d04ff9-ca39-4a7b-82d6-a7dba677c7d8,73d04ff9-ca39-4a7b-82d6-a7dba677c7d8,0,1,a7fe0aa5-722c-4a09-889b-ee422421addc,a7fe0aa5-722c-4a09-889b-ee422421addc,0,1,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,0,1,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,0,1,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,0,1,9bc09758-a7ce-44e0-baa3-a3e909869d9b,9bc09758-a7ce-44e0-baa3-a3e909869d9b,0,1,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,0,1,0874a3c0-0d16-4172-b467-f0666d5fcaee,0874a3c0-0d16-4172-b467-f0666d5fcaee,0,1,cc380a19-ab29-4f20-93ad-9a58cd4de56e,cc380a19-ab29-4f20-93ad-9a58cd4de56e,0,1,e54a8786-86a4-48e3-a210-aaae4e5fce8c,e54a8786-86a4-48e3-a210-aaae4e5fce8c,0,1,14512818-58b0-44cc-b00d-d37913c57aad,14512818-58b0-44cc-b00d-d37913c57aad,0,1,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,0,1,57964dd6-4b0b-4590-bc44-de744cc423af,57964dd6-4b0b-4590-bc44-de744cc423af,0,1,46e0522b-b88b-43b2-9067-a5359e90994b,46e0522b-b88b-43b2-9067-a5359e90994b,0,1,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,0,1,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,0,1,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,0,1,d487e66e-a7b0-4110-903e-652fe0e6106c,d487e66e-a7b0-4110-903e-652fe0e6106c,0,1,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,0,1,d95fcb37-fc65-466d-93e2-489f41683276,d95fcb37-fc65-466d-93e2-489f41683276,0,1,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,0,1,0bddbceb-5739-46f8-88b6-06bcead350d9,0bddbceb-5739-46f8-88b6-06bcead350d9,0,1,a27a9296-46bb-49a1-8308-db675baa81d0,a27a9296-46bb-49a1-8308-db675baa81d0,0,1,1456f317-360c-4190-b2d1-1be7484369a5,1456f317-360c-4190-b2d1-1be7484369a5,0,1,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,0,1,4867948f-b027-44ae-b78c-a94e00eed52b,4867948f-b027-44ae-b78c-a94e00eed52b,0,1,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,0,1,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,0,1,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,0,1,f0ffe529-481f-4eed-8fc8-02a9d8f08f7a,f0ffe529-481f-4eed-8fc8-02a9d8f08f7a,0,1,618d13d5-fd1f-4b70-ad45-dd6a17a50730,618d13d5-fd1f-4b70-ad45-dd6a17a50730,0,1,58037b76-b548-4f07-bd67-67e552a5c6e5,58037b76-b548-4f07-bd67-67e552a5c6e5,0,1,25ca2e70-0293-4bd4-9e08-bbd39120b3cf,25ca2e70-0293-4bd4-9e08-bbd39120b3cf,0,1,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,0,1,ad09d1e6-5982-4e1c-864e-452ac5b2915a,ad09d1e6-5982-4e1c-864e-452ac5b2915a,0,1,349378d1-abe3-44de-84a4-d525b08e0474,349378d1-abe3-44de-84a4-d525b08e0474,0,1,1526b18d-7fab-414e-a5b2-377b67ac0b55,1526b18d-7fab-414e-a5b2-377b67ac0b55,0,1,c561fe6b-53ea-435b-a230-1850e2dc1ff5,c561fe6b-53ea-435b-a230-1850e2dc1ff5,0,1,aba7605f-6baf-42a8-b5ad-8f71c780b81f,aba7605f-6baf-42a8-b5ad-8f71c780b81f,0,1,8fc19eca-1a15-4758-af4b-79637e51edfb,8fc19eca-1a15-4758-af4b-79637e51edfb,0,1,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0,1,28dc34df-1daa-49a2-a12e-db91ee963459,28dc34df-1daa-49a2-a12e-db91ee963459,0,1,2233ce53-b8a8-4c83-97a2-683c8575462a,2233ce53-b8a8-4c83-97a2-683c8575462a,0,1,2071f210-dc13-43c0-a58e-b982821d6842,2071f210-dc13-43c0-a58e-b982821d6842,0,1,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,0,1,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,0,1,db7cc693-1645-4416-a9d9-5a7584cd3bbc,db7cc693-1645-4416-a9d9-5a7584cd3bbc,0,1,8ca0258c-96d8-4a12-b94f-db968195ee0a,8ca0258c-96d8-4a12-b94f-db968195ee0a,0,1,ef176d93-6ac3-4a35-803b-32f7c61c1629,ef176d93-6ac3-4a35-803b-32f7c61c1629,0,1,c849fb09-7833-49c8-9461-98426dc6c0af,c849fb09-7833-49c8-9461-98426dc6c0af,0,1,6c58fc3a-37f8-44b7-b076-2c10ce09b554,6c58fc3a-37f8-44b7-b076-2c10ce09b554,0,1,b94523c0-33fe-452a-ada5-071cd78fc47b,b94523c0-33fe-452a-ada5-071cd78fc47b,0,1,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,0,1,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,0,1,4dfc428e-c2d7-40b8-925f-d7c186f52476,4dfc428e-c2d7-40b8-925f-d7c186f52476,0,1,80ae578c-f6c7-4589-98c5-5691714baa29,80ae578c-f6c7-4589-98c5-5691714baa29,0,1,a44cc726-48b9-4193-8991-c9e0777ed7de,a44cc726-48b9-4193-8991-c9e0777ed7de,0,1,52c38669-4735-4f5b-8e0e-17d7e15ea94a,52c38669-4735-4f5b-8e0e-17d7e15ea94a,0,1,fef727fa-f63b-4467-9367-73a2425b19e3,fef727fa-f63b-4467-9367-73a2425b19e3,0,1,bfa90848-930f-433d-8f6f-c11ac2c5eba2,bfa90848-930f-433d-8f6f-c11ac2c5eba2,0,1,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,0,1,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,0,1,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,0,1,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,0,1,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,0,1,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,0,1,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,0,1,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,0,1,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,0,1,085cbea9-1df1-4ee9-afb7-da2bf313697e,085cbea9-1df1-4ee9-afb7-da2bf313697e,0,1,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,0,1,c38d8135-e11f-4860-b370-84ff279b7fbd,c38d8135-e11f-4860-b370-84ff279b7fbd,0,1,ee0798f5-47a8-4118-a25c-cfd3473007c1,ee0798f5-47a8-4118-a25c-cfd3473007c1,0,1,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,0,1,69149ce1-d3f8-4e12-be8f-b328ade60882,69149ce1-d3f8-4e12-be8f-b328ade60882,0,1,ff592ecb-eb08-4554-87bf-1d2935b21d3c,ff592ecb-eb08-4554-87bf-1d2935b21d3c,0,1,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,0,1,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0,1,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0,1,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,0,1,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,0,1,e7d51ada-f286-4519-bfae-ece95dd4d7b0,e7d51ada-f286-4519-bfae-ece95dd4d7b0,0,1,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,0,1,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,0,1,d975aef4-8da8-4486-baeb-a99c48cff0ec,d975aef4-8da8-4486-baeb-a99c48cff0ec,0,1,9da27139-0bed-47b0-aef6-246929968502,9da27139-0bed-47b0-aef6-246929968502,0,1,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,0,1,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,0,1,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,0,1,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,0,1,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,0,1,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,0,1,8e99ed5a-d64a-4d4d-a422-3f1055be6ebd,8e99ed5a-d64a-4d4d-a422-3f1055be6ebd,0,1,c59e11f3-6bcb-404a-9d76-1416c12be354,c59e11f3-6bcb-404a-9d76-1416c12be354,0,1,c1a1f12b-3978-4047-956e-a5c7de8371a0,c1a1f12b-3978-4047-956e-a5c7de8371a0,0,1,ac39b903-0c60-417e-a50f-49ed375424f5,ac39b903-0c60-417e-a50f-49ed375424f5,0,1,9887e36d-0dba-4301-a77b-102caefc7ca9,9887e36d-0dba-4301-a77b-102caefc7ca9,0,1,7eef7281-c5c6-48d5-a636-c437b75611d6,7eef7281-c5c6-48d5-a636-c437b75611d6,0,1,3494fa21-02e0-46bb-b810-534e6f1b4b20,3494fa21-02e0-46bb-b810-534e6f1b4b20,0,1,64f667e5-6a8f-448f-aed5-a4d461232845,64f667e5-6a8f-448f-aed5-a4d461232845,0,1,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,0,1,037842ca-aeaf-4e27-9a0e-e929438b6f40,037842ca-aeaf-4e27-9a0e-e929438b6f40,0,1,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,0,1,237dab99-ed72-432c-ad01-c6045d74f000,237dab99-ed72-432c-ad01-c6045d74f000,0,1,59855d19-29cd-4efd-a453-b19e574113ef,59855d19-29cd-4efd-a453-b19e574113ef,0,1,94e08dcf-3885-4a73-82ab-cb291f1cf95f,94e08dcf-3885-4a73-82ab-cb291f1cf95f,0,1,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0,1,fba74e94-e7e1-46d9-b72b-269cb1cc8a71,fba74e94-e7e1-46d9-b72b-269cb1cc8a71,0,1,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,0,1,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,0,1,33f8892d-8d7f-4b00-af4f-af37193fa395,33f8892d-8d7f-4b00-af4f-af37193fa395,0,1,641ebe22-7135-4adb-bbd6-e0c37d246a2d,641ebe22-7135-4adb-bbd6-e0c37d246a2d,0,1,f71ba01e-9f6b-4241-8048-4368c8888756,f71ba01e-9f6b-4241-8048-4368c8888756,0,1,60208d56-f778-4ff6-abdd-ea6622504ace,60208d56-f778-4ff6-abdd-ea6622504ace,0,1,6aa814fa-417e-428c-951e-6efd9d0775da,6aa814fa-417e-428c-951e-6efd9d0775da,0,1,5a979568-6bc7-4f75-b585-ebdcaafc119a,5a979568-6bc7-4f75-b585-ebdcaafc119a,0,1,a247efe1-8608-4780-9cc8-54e29944475b,a247efe1-8608-4780-9cc8-54e29944475b,0,1,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,0,1,97ea39b4-9a69-4598-b998-044fba1f4f81,97ea39b4-9a69-4598-b998-044fba1f4f81,0,1,a8f162e9-3f59-41a5-b82f-da20928213c7,a8f162e9-3f59-41a5-b82f-da20928213c7,0,1,ade68dfd-5037-4fd7-b043-9514e3fe6342,ade68dfd-5037-4fd7-b043-9514e3fe6342,0,1,7b008aad-9d05-43e1-8295-62ae58cfff42,7b008aad-9d05-43e1-8295-62ae58cfff42,0,1,fdaf9255-d621-4a98-9530-f618ed440795,fdaf9255-d621-4a98-9530-f618ed440795,0,1,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,0,1,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,0,1,bfad444f-ee47-4131-a371-8089b8a09f4f,bfad444f-ee47-4131-a371-8089b8a09f4f,0,1,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,0,1,f5417147-4d2a-4e49-911b-2bb5eccb8441,f5417147-4d2a-4e49-911b-2bb5eccb8441,0,1,475f8577-a141-496b-94e1-53215c0dd017,475f8577-a141-496b-94e1-53215c0dd017,0,1,97638762-c01e-4c8f-88e2-b356e517e18f,97638762-c01e-4c8f-88e2-b356e517e18f,0,1,074e34f2-e9be-4bd3-beca-8b916772e2be,074e34f2-e9be-4bd3-beca-8b916772e2be,0,1,28fecf1b-7cab-4087-b66e-2052edb8ce3a,28fecf1b-7cab-4087-b66e-2052edb8ce3a,0,1,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,0,1,0d124daf-dc52-4391-a2d9-3c43a45c422c,0d124daf-dc52-4391-a2d9-3c43a45c422c,0,1,f8139d21-0380-43b5-8025-c986f8598c74,f8139d21-0380-43b5-8025-c986f8598c74,0,1,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,0,1,f01fedee-d4c1-498d-9c9b-78b2e7e99e65,f01fedee-d4c1-498d-9c9b-78b2e7e99e65,0,1,7c34aa14-1300-4d03-8a1f-56e801748db4,7c34aa14-1300-4d03-8a1f-56e801748db4,0,1,b00c31d6-4fc6-4189-9f72-f91742ec705f,b00c31d6-4fc6-4189-9f72-f91742ec705f,0,1,1333101b-82e8-41a9-a793-5af5dcd6f68a,1333101b-82e8-41a9-a793-5af5dcd6f68a,0,1,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,0,1,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,0,1,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,0,1,472ce1c2-9e83-418b-b1ec-e15e126bc919,472ce1c2-9e83-418b-b1ec-e15e126bc919,0,1,07bb26ac-bd97-465f-a192-db7fedbb579b,07bb26ac-bd97-465f-a192-db7fedbb579b,0,1,84e63b9b-0293-49bc-ba7f-e803bc44fc42,84e63b9b-0293-49bc-ba7f-e803bc44fc42,0,1,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,0,1,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,0,1,b6566d54-e821-4a2a-a447-0f533f35de91,b6566d54-e821-4a2a-a447-0f533f35de91,0,1,547a6dec-6fe8-439d-a8d9-ac2612af20d2,547a6dec-6fe8-439d-a8d9-ac2612af20d2,0,1,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,0,1,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,0,1,bed22a72-1a5e-46e5-ad71-f94e9508e272,bed22a72-1a5e-46e5-ad71-f94e9508e272,0,1,9cf45640-aeb3-45aa-97aa-922a83e61510,9cf45640-aeb3-45aa-97aa-922a83e61510,0,1,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,0,1,9d5c615c-49af-45e9-aa3d-07747466a51b,9d5c615c-49af-45e9-aa3d-07747466a51b,0,1,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,0,1,36ec0fb5-a5f3-4685-9696-c44a393998f6,36ec0fb5-a5f3-4685-9696-c44a393998f6,0,1,1b887b59-9a72-4aa3-a985-7a8d6a427b95,1b887b59-9a72-4aa3-a985-7a8d6a427b95,0,1,1fca06d9-b015-4fc8-abdd-3e2397e0c307,1fca06d9-b015-4fc8-abdd-3e2397e0c307,0,1,05b6a743-5831-4c77-894c-b19005b0e141,05b6a743-5831-4c77-894c-b19005b0e141,0,1,295a5554-f6cc-437b-9e89-c6f653a8b858,295a5554-f6cc-437b-9e89-c6f653a8b858,0,1,eb9ec412-3dc0-4d58-9b15-785324e58378,eb9ec412-3dc0-4d58-9b15-785324e58378,0,1,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,0,1,b6ac957c-0525-4c48-854e-86007beb83db,b6ac957c-0525-4c48-854e-86007beb83db,0,1,b639ed30-3e37-4c65-a39f-00fe735950eb,b639ed30-3e37-4c65-a39f-00fe735950eb,0,1,078d3269-80fd-4406-9972-ab2a5fd83434,078d3269-80fd-4406-9972-ab2a5fd83434,0,1,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,0,1,f137eb0f-bde7-412d-9229-d7a4f9456e6c,f137eb0f-bde7-412d-9229-d7a4f9456e6c,0,1,90880131-8065-4a7e-a0fa-ecff9e27363c,90880131-8065-4a7e-a0fa-ecff9e27363c,0,1,57e9fcea-342c-4089-bd10-befb3faf0dbd,57e9fcea-342c-4089-bd10-befb3faf0dbd,0,1,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,0,1,f811b0b7-41b5-4591-9910-780f08780236,f811b0b7-41b5-4591-9910-780f08780236,0,1,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,0,1,51a0444d-13c8-45a8-97f6-f3f976964bf8,51a0444d-13c8-45a8-97f6-f3f976964bf8,0,1,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,0,1,7e2ba519-fbb9-4163-b20b-b99898e6ac57,7e2ba519-fbb9-4163-b20b-b99898e6ac57,0,1,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,0,1,1346045c-e747-4d5c-b8c6-d9dcc268ed3a,1346045c-e747-4d5c-b8c6-d9dcc268ed3a,0,1,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,0,1,bf1e9682-3cc6-44b6-b9e4-a3b37facb0e7,bf1e9682-3cc6-44b6-b9e4-a3b37facb0e7,0,1,9a70c38e-6770-4edf-9566-ce44b537a532,9a70c38e-6770-4edf-9566-ce44b537a532,0,1,417063e2-7d8c-4837-b68d-df5724048e70,417063e2-7d8c-4837-b68d-df5724048e70,0,1,31628f30-2ac2-446e-9b32-c544019c0b40,31628f30-2ac2-446e-9b32-c544019c0b40,0,1,cd9bafa1-23fe-4094-9137-b36df6e8e8f5,cd9bafa1-23fe-4094-9137-b36df6e8e8f5,0,1,c1b4726f-7d9f-43a2-817a-5b7ce7a4fb46,c1b4726f-7d9f-43a2-817a-5b7ce7a4fb46,0,1,e24adcf3-71b1-4081-8dab-3aaa628a9331,e24adcf3-71b1-4081-8dab-3aaa628a9331,0,1,00fc7fe1-66c2-4d3d-bc17-b3ba5211a3ab,00fc7fe1-66c2-4d3d-bc17-b3ba5211a3ab,0,1,64d4b8ea-5906-4f0b-8328-9139a09202c0,64d4b8ea-5906-4f0b-8328-9139a09202c0,0,1,e8301322-f929-4ff5-9633-18e8a08db6fd,e8301322-f929-4ff5-9633-18e8a08db6fd,0,1,0af47dcf-7220-4b15-bb14-3324f65b8af6,0af47dcf-7220-4b15-bb14-3324f65b8af6,0,1,a9559418-2410-4e20-8bf1-74983406d2f3,a9559418-2410-4e20-8bf1-74983406d2f3,0,1,05069fb4-0bbb-4d8e-93f3-e5be47a4d777,05069fb4-0bbb-4d8e-93f3-e5be47a4d777,0,1,6e4f3314-4f8a-4413-b946-805cc375ffe6,6e4f3314-4f8a-4413-b946-805cc375ffe6,0,1,7adec5ff-8172-4a62-9e5c-8ef77df16d1b,7adec5ff-8172-4a62-9e5c-8ef77df16d1b,0,1,57fa19bb-3f68-4243-b216-a8e13a022b48,57fa19bb-3f68-4243-b216-a8e13a022b48,0,1,4ec82ae6-fbd6-4788-bcf0-2c21ce54a03d,4ec82ae6-fbd6-4788-bcf0-2c21ce54a03d,0,1,578a92d3-b380-4a8b-af9d-2f608dbae5d0,578a92d3-b380-4a8b-af9d-2f608dbae5d0,0,1,ca8450e9-38c1-4db7-8832-2c6fe2c4dc0b,ca8450e9-38c1-4db7-8832-2c6fe2c4dc0b,0,1,138f0718-4566-41d7-86f7-50f0c5e6c90e,138f0718-4566-41d7-86f7-50f0c5e6c90e,0,1,3e12296d-7cd7-4dbc-bdf3-3d40f945b483,3e12296d-7cd7-4dbc-bdf3-3d40f945b483,0,1,baa2f562-a08c-41d9-b1fc-881aafeef2fa,baa2f562-a08c-41d9-b1fc-881aafeef2fa,0,1,020882c2-dbc4-4b40-8556-6a11d75b00fe,020882c2-dbc4-4b40-8556-6a11d75b00fe,0,1,f54dd38b-e222-4520-bdf7-8d6c64c0244c,f54dd38b-e222-4520-bdf7-8d6c64c0244c,0,1,58aabfdb-61c2-42ad-aed1-0e88b5414f0b,58aabfdb-61c2-42ad-aed1-0e88b5414f0b,0,1,52507c4e-9378-4f00-a6b8-dd7e60d2afa5,52507c4e-9378-4f00-a6b8-dd7e60d2afa5,0,1,bc22ce64-a79c-4118-8ede-a69d66f62b0a,bc22ce64-a79c-4118-8ede-a69d66f62b0a,0,1,d21971c9-9aa6-448a-ab37-49ad0b0547ec,d21971c9-9aa6-448a-ab37-49ad0b0547ec,0,1,5efd2e2e-9b83-4c0d-9bbd-4075b5127d92,5efd2e2e-9b83-4c0d-9bbd-4075b5127d92,0,1,e035494e-71ed-44f1-b04c-f2f47bcfa0fe,e035494e-71ed-44f1-b04c-f2f47bcfa0fe,0,1,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,0,1,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,0,1,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,0,1,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,0,1,ccd2536d-592f-4109-bda9-7964c8b9757d,ccd2536d-592f-4109-bda9-7964c8b9757d,0,1,6c34eef9-9405-4de0-9177-1bae85251ae4,6c34eef9-9405-4de0-9177-1bae85251ae4,0,1,d295f084-1c23-4c94-90eb-85928648224e,d295f084-1c23-4c94-90eb-85928648224e,0,1,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,0,1,e09534e3-ac6e-42a6-86e8-564acb20089a,e09534e3-ac6e-42a6-86e8-564acb20089a,0,1,63223883-06cf-4d01-be95-5e410cc58a22,63223883-06cf-4d01-be95-5e410cc58a22,0,1,1929139f-dabb-4c40-9423-158093360889,1929139f-dabb-4c40-9423-158093360889,0,1,dad92df4-685b-4260-b35f-4d031262dfea,dad92df4-685b-4260-b35f-4d031262dfea,0,1,4399c19a-ddba-42e9-88b4-c5c28abad237,4399c19a-ddba-42e9-88b4-c5c28abad237,0,1,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,0,1,bde70605-7ffc-4b38-b65d-e7b0d14e2f3a,bde70605-7ffc-4b38-b65d-e7b0d14e2f3a,0,1,2cd04d4c-2619-40c9-adf4-7bb281f045b6,2cd04d4c-2619-40c9-adf4-7bb281f045b6,0,1,cbc1c36d-7bbf-4892-8220-a33ec91a7b1f,cbc1c36d-7bbf-4892-8220-a33ec91a7b1f,0,1,5d4e67ae-7029-46d2-86f9-834a04a9dd71,5d4e67ae-7029-46d2-86f9-834a04a9dd71,0,1,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,0,1,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,0,1,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,0,1,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,0,1,b3554203-b930-496d-a712-353bc13a0946,b3554203-b930-496d-a712-353bc13a0946,0,1,59775ce0-f778-45f6-9453-bbd0a0ec1f27,59775ce0-f778-45f6-9453-bbd0a0ec1f27,0,1,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,0,1,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,0,1,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,0,1,c8da922f-e31e-49b0-b90e-1c060424bde5,c8da922f-e31e-49b0-b90e-1c060424bde5,0,1,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,0,1,b65afceb-a200-42d5-9948-831a5ad84b1b,b65afceb-a200-42d5-9948-831a5ad84b1b,0,1,feb1a5c1-c805-4079-8f05-8a44f51b0b02,feb1a5c1-c805-4079-8f05-8a44f51b0b02,0,1,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,0,1,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,0,1,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,0,1,231d3950-f363-4e63-83cd-8ddb81507c27,231d3950-f363-4e63-83cd-8ddb81507c27,0,1,87429f11-bf95-4013-bf13-da904570f88d,87429f11-bf95-4013-bf13-da904570f88d,0,1,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,0,1,feb41347-62db-41cf-ace0-d8b9de361af3,feb41347-62db-41cf-ace0-d8b9de361af3,0,1,5f91b00f-d8fc-4d63-8486-66339357ab22,5f91b00f-d8fc-4d63-8486-66339357ab22,0,1,16d44ab1-4bce-4df8-a215-6ed5173c75a8,16d44ab1-4bce-4df8-a215-6ed5173c75a8,0,1,cdce186a-229d-492d-8811-147fc4d7cdf5,cdce186a-229d-492d-8811-147fc4d7cdf5,0,1,543f976e-fea3-4a51-9962-b8e0fcd3f707,543f976e-fea3-4a51-9962-b8e0fcd3f707,0,1,375977c1-5745-4e78-a4df-cef966c0ccf8,375977c1-5745-4e78-a4df-cef966c0ccf8,0,1,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,0,1,c3796d85-2a24-43c4-9673-64e56249a1d0,c3796d85-2a24-43c4-9673-64e56249a1d0,0,1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,0,1,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,0,1,731211c2-ef90-4883-9525-83cd91b742ac,731211c2-ef90-4883-9525-83cd91b742ac,0,1,0adf02da-940a-4bfc-afa5-59605494a169,0adf02da-940a-4bfc-afa5-59605494a169,0,1,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,0,1,8361991a-0f30-4a03-9a4c-90556b744f53,8361991a-0f30-4a03-9a4c-90556b744f53,0,1,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,0,1,f9196766-4ae2-4a73-bed6-4a8838323e02,f9196766-4ae2-4a73-bed6-4a8838323e02,0,1,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,0,1,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,0,1,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,0,1,f0105e51-9510-426a-8aa0-af827d93ffd9,f0105e51-9510-426a-8aa0-af827d93ffd9,0,1,3df19dbf-efe7-4e31-99ad-fafb59ec1329,3df19dbf-efe7-4e31-99ad-fafb59ec1329,0,1,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,0,1,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,0,1,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,0,1,8ecc070f-f6fb-46b1-9636-b77aa80f8804,8ecc070f-f6fb-46b1-9636-b77aa80f8804,0,1,8405be9d-465b-4744-b04f-03933b52f02e,8405be9d-465b-4744-b04f-03933b52f02e,0,1,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,0,1,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,0,1,ece7f438-0898-4a02-89cb-6a6aa689e331,ece7f438-0898-4a02-89cb-6a6aa689e331,0,1,15ca91d9-0373-435c-a69f-409f1eff6c3b,15ca91d9-0373-435c-a69f-409f1eff6c3b,0,1,dd9176ec-9186-4277-a155-14ed2efef15f,dd9176ec-9186-4277-a155-14ed2efef15f,0,1,b980519c-0fb7-45db-92ab-8241ec50c8c8,b980519c-0fb7-45db-92ab-8241ec50c8c8,0,1,d45f4ad8-c34a-4a14-9278-df88a071d610,d45f4ad8-c34a-4a14-9278-df88a071d610,0,1,eb3dfdc7-58b8-4b1f-b079-368c262364c9,eb3dfdc7-58b8-4b1f-b079-368c262364c9,0,1,5030a318-f8f7-4ec7-80d6-6eee0772562f,5030a318-f8f7-4ec7-80d6-6eee0772562f,0,1,242e911d-e49c-4b8a-8543-cc2e079220fd,242e911d-e49c-4b8a-8543-cc2e079220fd,0,1,9ea39d31-3775-4fb8-a3f3-202e54354d49,9ea39d31-3775-4fb8-a3f3-202e54354d49,0,1,73044e20-148c-46e9-b5b5-973c91de0d61,73044e20-148c-46e9-b5b5-973c91de0d61,0,1,f8ab477c-8e78-48c0-9f99-27748b109706,f8ab477c-8e78-48c0-9f99-27748b109706,0,1,24cff6c8-6c20-4383-b97c-6afa52738960,24cff6c8-6c20-4383-b97c-6afa52738960,0,1,462e2694-750d-49ef-93ac-17a7779be68d,462e2694-750d-49ef-93ac-17a7779be68d,0,1,c24ff02e-5afc-45df-81cf-64ea2b261c2d,c24ff02e-5afc-45df-81cf-64ea2b261c2d,0,1,2d51aae9-650d-4719-a94d-2609b69a2d36,2d51aae9-650d-4719-a94d-2609b69a2d36,0,1,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,0,1,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,0,1,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,0,1,85639a53-b367-49ce-84f2-4e21d81c489b,85639a53-b367-49ce-84f2-4e21d81c489b,0,1,24b59586-178e-4efc-90ae-529553f3bb6c,24b59586-178e-4efc-90ae-529553f3bb6c,0,1,20e75dd5-222a-4100-aa43-3684991e3f21,20e75dd5-222a-4100-aa43-3684991e3f21,0,1,3c611832-4bc2-4229-a27d-d5dc82f3a498,3c611832-4bc2-4229-a27d-d5dc82f3a498,0,1,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,0,1,5dadc422-1fbd-4918-9db3-09ec72c3404e,5dadc422-1fbd-4918-9db3-09ec72c3404e,0,1,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,0,1,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,0,1,c5478d09-c8d3-4cc6-878e-27656ecc8409,c5478d09-c8d3-4cc6-878e-27656ecc8409,0,1,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,0,1,75974146-5b1a-412c-b7d5-1575704bbdab,75974146-5b1a-412c-b7d5-1575704bbdab,0,1,949f87cb-258c-4b6b-95ee-8a7491a4b64e,949f87cb-258c-4b6b-95ee-8a7491a4b64e,0,1,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,0,1,5c089988-5381-41ed-9f05-f85db46b8d94,5c089988-5381-41ed-9f05-f85db46b8d94,0,1,85a36352-1569-4ce4-aeba-477db524c36d,85a36352-1569-4ce4-aeba-477db524c36d,0,1,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,0,1,2fcde115-5c5a-465c-a326-d7ba379675fc,2fcde115-5c5a-465c-a326-d7ba379675fc,0,1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,0,1,b99c2068-15ea-43a1-9e9f-db29647e2387,b99c2068-15ea-43a1-9e9f-db29647e2387,0,1,9a4a0b04-3dfb-4551-90f0-16231f64b14f,9a4a0b04-3dfb-4551-90f0-16231f64b14f,0,1,98edcd6b-1c50-45c6-9a4c-390827a4ba52,98edcd6b-1c50-45c6-9a4c-390827a4ba52,0,1,346cb8b7-a20e-4a06-823e-26dfb2e3e741,346cb8b7-a20e-4a06-823e-26dfb2e3e741,0,1,6d83f50f-32e9-45a6-8b5e-d91ba005ae95,6d83f50f-32e9-45a6-8b5e-d91ba005ae95,0,1,9afe457f-3c88-4cd3-94e7-7cea8a1a99a1,9afe457f-3c88-4cd3-94e7-7cea8a1a99a1,0,1,86ff5ea0-394a-4d8f-9601-acc2eb841bf6,86ff5ea0-394a-4d8f-9601-acc2eb841bf6,0,1,782cb93d-36e6-4923-b2b6-75caa3459cd6,782cb93d-36e6-4923-b2b6-75caa3459cd6,0,1,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,0,1,996c7873-1cc9-44f6-915b-5c6ed7ef2370,996c7873-1cc9-44f6-915b-5c6ed7ef2370,0,1,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,0,1,ced01234-9417-49ce-adf0-8cdd15e6dd7d,ced01234-9417-49ce-adf0-8cdd15e6dd7d,0,1,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,0,1,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,0,1,7974e41d-5af3-4636-b405-c9405d89fb53,7974e41d-5af3-4636-b405-c9405d89fb53,0,1,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,0,1,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,0,1,92876c9e-52ff-480d-9878-5766f4f9d12c,92876c9e-52ff-480d-9878-5766f4f9d12c,0,1,433a114f-3198-4ef6-bbf8-ce9b54fdb736,433a114f-3198-4ef6-bbf8-ce9b54fdb736,0,1,b729d739-5249-4765-85ee-fd792bb22911,b729d739-5249-4765-85ee-fd792bb22911,0,1,d65c4485-7bac-4206-9a6c-7156f4bb876d,d65c4485-7bac-4206-9a6c-7156f4bb876d,0,1,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,0,1,d431d1e2-13dc-495c-9de1-b5ec872eceed,d431d1e2-13dc-495c-9de1-b5ec872eceed,0,1,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,0,1,c9ea4e72-5f01-42ae-88e3-52e49757b26f,c9ea4e72-5f01-42ae-88e3-52e49757b26f,0,1,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,0,1,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0,1,a623fef1-96eb-41ba-93fe-09162698f419,a623fef1-96eb-41ba-93fe-09162698f419,0,1,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,0,1,d8e1f92f-9efa-422d-bb21-43bd1a363cec,d8e1f92f-9efa-422d-bb21-43bd1a363cec,0,1,c1416383-bd7e-4dc4-ad88-d98ac87157fd,c1416383-bd7e-4dc4-ad88-d98ac87157fd,0,1,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,0,1,d5d9976a-4cc0-43f7-afd6-d43cebb07940,d5d9976a-4cc0-43f7-afd6-d43cebb07940,0,1,79a0746b-4dbe-4068-8832-4d0da08d6fd3,79a0746b-4dbe-4068-8832-4d0da08d6fd3,0,1,899f1526-d6bc-42ef-852e-7297a06db9e3,899f1526-d6bc-42ef-852e-7297a06db9e3,0,1,c694c132-1ddb-4273-818a-d3cca88c082a,c694c132-1ddb-4273-818a-d3cca88c082a,0,1,cd4da06e-c06b-4233-befc-1bc4c4db58e3,cd4da06e-c06b-4233-befc-1bc4c4db58e3,0,1,918a01fe-f753-4a4a-9200-55bbd6edaf5f,918a01fe-f753-4a4a-9200-55bbd6edaf5f,0,1,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,0,1,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,0,1,d6704410-6297-481e-a6cb-6d6aa566b4f8,d6704410-6297-481e-a6cb-6d6aa566b4f8,0,1,398937ca-b035-43bd-b0da-8c5153a87cb8,398937ca-b035-43bd-b0da-8c5153a87cb8,0,1,5b441321-bd1e-4c56-8f09-365b05985eed,5b441321-bd1e-4c56-8f09-365b05985eed,0,1,559f1e66-e8da-437a-aa27-d0e1be6619b6,559f1e66-e8da-437a-aa27-d0e1be6619b6,0,1,704d69cd-d921-4957-a004-43bd7eb4d979,704d69cd-d921-4957-a004-43bd7eb4d979,0,1,f1594682-16ac-408c-8307-a7a8db79b09f,f1594682-16ac-408c-8307-a7a8db79b09f,0,1,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,0,1,4cb814d8-cb1b-4366-b500-e820ad526b0c,4cb814d8-cb1b-4366-b500-e820ad526b0c,0,1,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,0,1,6c43df9f-ca36-415b-afec-302807820d73,6c43df9f-ca36-415b-afec-302807820d73,0,1,c7fb7551-806a-40b2-8879-14cd897b60d8,c7fb7551-806a-40b2-8879-14cd897b60d8,0,1,68337023-d573-4d04-95b6-44f73258c2a4,68337023-d573-4d04-95b6-44f73258c2a4,0,1,7cf39337-b722-486f-8e37-a62239d0ccd2,7cf39337-b722-486f-8e37-a62239d0ccd2,0,1,2571cfaf-d876-4385-a60a-1488aacf7080,2571cfaf-d876-4385-a60a-1488aacf7080,0,1,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,0,1,44398566-3189-4584-8f8a-9deb1d07ce41,44398566-3189-4584-8f8a-9deb1d07ce41,0,1,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,0,1,accfa63a-479d-4996-95bc-cdf5acdf203c,accfa63a-479d-4996-95bc-cdf5acdf203c,0,1,351998e0-8939-4dd4-a833-f4756bcc53b8,351998e0-8939-4dd4-a833-f4756bcc53b8,0,1,cd69bad8-524e-4be4-88cc-7732a88b38b8,cd69bad8-524e-4be4-88cc-7732a88b38b8,0,1,0a32248c-6994-4988-90d1-30882bc9da6b,0a32248c-6994-4988-90d1-30882bc9da6b,0,1,b57b53cb-6972-4bda-ae46-96571be1ebec,b57b53cb-6972-4bda-ae46-96571be1ebec,0,1,1a1a9636-fb72-4e4a-af96-5858442b1e61,1a1a9636-fb72-4e4a-af96-5858442b1e61,0,1,bca9cf34-9e11-4014-976a-28c4330b136e,bca9cf34-9e11-4014-976a-28c4330b136e,0,1,65fffe1a-6f36-4f50-975f-4471ad29d3ec,65fffe1a-6f36-4f50-975f-4471ad29d3ec,0,1,8fe5dad5-686a-4631-ae05-2917c33f7d83,8fe5dad5-686a-4631-ae05-2917c33f7d83,0,1,edef86c6-73bf-4e47-b62d-b2b548a732cd,edef86c6-73bf-4e47-b62d-b2b548a732cd,0,1,a1715044-d76f-4238-ba3e-989d04078d83,a1715044-d76f-4238-ba3e-989d04078d83,0,1,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,0,1,299c47a7-0b30-4f62-8f5c-f087ad6411fb,299c47a7-0b30-4f62-8f5c-f087ad6411fb,0,1,4d4724df-24fb-4c59-9d04-3f984906214a,4d4724df-24fb-4c59-9d04-3f984906214a,0,1,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,0,1,1ed9a67b-5b15-4862-907f-b194d6113070,1ed9a67b-5b15-4862-907f-b194d6113070,0,1,1aceb0e8-9131-44c2-aaa5-db96eea1c0de,1aceb0e8-9131-44c2-aaa5-db96eea1c0de,0,1,cb9b73ee-8531-48d9-9266-9aaa4336a612,cb9b73ee-8531-48d9-9266-9aaa4336a612,0,1,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,0,1,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,0,1,d042687f-0725-4611-a868-f5b4f6a3a3a8,d042687f-0725-4611-a868-f5b4f6a3a3a8,0,1,bb143340-7fff-49ef-b121-355c96613f78,bb143340-7fff-49ef-b121-355c96613f78,0,1,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,0,1,f2f69644-80dc-4b5e-a208-ed1de131e25e,f2f69644-80dc-4b5e-a208-ed1de131e25e,0,1,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,0,1,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,0,1,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,0,1,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,0,1,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,0,1,fb79315a-8d27-4c5e-9cfb-c7778dabedef,fb79315a-8d27-4c5e-9cfb-c7778dabedef,0,1,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,0,1,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,0,1,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,0,1,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,0,1,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,0,1,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,0,1,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,0,1,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,0,1,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,0,1,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,0,1,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,0,1,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,0,1,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,0,1,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,0,1,e3ca64af-7766-48e2-b7c6-2a96f4539905,e3ca64af-7766-48e2-b7c6-2a96f4539905,0,1,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,0,1,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,0,1,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,0,1,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,0,1,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,0,1,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,0,1,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,0,1,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,0,1,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,0,1,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,0,1,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,0,1,92707138-5004-4378-8477-f909166d319d,92707138-5004-4378-8477-f909166d319d,0,1,43661775-43bb-4d9e-bfbb-c46e7d194ca3,43661775-43bb-4d9e-bfbb-c46e7d194ca3,0,1,532637ef-be0d-4f42-9747-a88e17eb3def,532637ef-be0d-4f42-9747-a88e17eb3def,0,1,61127152-3e24-40b4-8a23-5eb6cae568ff,61127152-3e24-40b4-8a23-5eb6cae568ff,0,1,ad1142ed-183d-47a3-800c-997a3770e11e,ad1142ed-183d-47a3-800c-997a3770e11e,0,1,ebef37c6-4808-4683-93be-036ce19cafd5,ebef37c6-4808-4683-93be-036ce19cafd5,0,1,66364cd4-aaa5-421d-96d6-3c283c14650d,66364cd4-aaa5-421d-96d6-3c283c14650d,0,1,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,0,1,3c54d440-e908-43d6-a5cc-bb64620c82d7,3c54d440-e908-43d6-a5cc-bb64620c82d7,0,1,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,0,1,bf1dd911-8ee1-407b-acae-10c85b74baf3,bf1dd911-8ee1-407b-acae-10c85b74baf3,0,1,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,0,1,e924058f-25c3-4744-a565-836b824991b7,e924058f-25c3-4744-a565-836b824991b7,0,1,0481bc65-6a32-46b9-ae87-993ba52a29a5,0481bc65-6a32-46b9-ae87-993ba52a29a5,0,1,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,0,1,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,0,1,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0,1,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,0,1,14256e0a-a947-42a3-8e36-47bfbb052a0c,14256e0a-a947-42a3-8e36-47bfbb052a0c,0,1,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1b1aa77a-d14b-4751-a7da-0b5bac4db461,0,1,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,0,1,295f3692-0721-4c41-a69b-171ef20a5018,295f3692-0721-4c41-a69b-171ef20a5018,0,1,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,0,1,8d31ce6a-4d44-46c6-a11c-47fb33e88691,8d31ce6a-4d44-46c6-a11c-47fb33e88691,0,1,df22b227-b2c3-4e65-9706-7582f99fe59c,df22b227-b2c3-4e65-9706-7582f99fe59c,0,1,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,0,1,087480bb-8c89-4b00-a29b-b7e29926478d,087480bb-8c89-4b00-a29b-b7e29926478d,0,1,685373b7-638a-439a-8cba-703d56e4e404,685373b7-638a-439a-8cba-703d56e4e404,0,1,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,0,1,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1cfba08f-d5e5-4833-b494-a25d0477e9c3,0,1,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,0,1,921a0a14-8c06-4894-95ce-423000769364,921a0a14-8c06-4894-95ce-423000769364,0,1,3805ee39-a48a-499a-9ef8-9c2a5985404f,3805ee39-a48a-499a-9ef8-9c2a5985404f,0,1,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,0,1,08c2f92c-eb05-49e7-bfc9-4a89607b9864,08c2f92c-eb05-49e7-bfc9-4a89607b9864,0,1,6d751379-89a7-49b5-93e5-578329c63d9c,6d751379-89a7-49b5-93e5-578329c63d9c,0,1,c3f156ef-947e-4ebb-883f-4f099a116063,c3f156ef-947e-4ebb-883f-4f099a116063,0,1,c6984be9-3752-4d10-ac9e-fa2c1a15f237,c6984be9-3752-4d10-ac9e-fa2c1a15f237,0,1,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,0,1,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,0,1,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,0,1,e98e9e56-2995-430c-bd3b-f1070aec15a5,e98e9e56-2995-430c-bd3b-f1070aec15a5,0,1,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,0,1,8a7546f4-bfc9-4732-bf60-43a41e2c8753,8a7546f4-bfc9-4732-bf60-43a41e2c8753,0,1,16244165-d5a4-4012-8bb5-7f5fee1111af,16244165-d5a4-4012-8bb5-7f5fee1111af,0,1,290b72ad-004f-46ab-be5e-47557543b965,290b72ad-004f-46ab-be5e-47557543b965,0,1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,0,1,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,0,1,263bcd20-9878-48d4-aac4-b371ec49d8d6,263bcd20-9878-48d4-aac4-b371ec49d8d6,0,1,da1d8660-2757-4cea-bae0-c2210b9406ae,da1d8660-2757-4cea-bae0-c2210b9406ae,0,1,d60329c6-8f48-481d-82e7-18da355cb09c,d60329c6-8f48-481d-82e7-18da355cb09c,0,1,c4b14162-b25b-4099-9ec3-7251848ef08a,c4b14162-b25b-4099-9ec3-7251848ef08a,0,1,8eb5ba97-eb38-4357-8bfc-e9618280800d,8eb5ba97-eb38-4357-8bfc-e9618280800d,0,1,b72f73d5-e274-472b-871b-16af72dab603,b72f73d5-e274-472b-871b-16af72dab603,0,1,b008d184-0b61-460d-9490-89ecc1cd58ba,b008d184-0b61-460d-9490-89ecc1cd58ba,0,1,c8340e2f-6958-4bcd-8e17-499c4adfe60b,c8340e2f-6958-4bcd-8e17-499c4adfe60b,0,1,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,0,1,03f68d82-752c-45d1-bf9a-60ecd21a2c81,03f68d82-752c-45d1-bf9a-60ecd21a2c81,0,1,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,0,1,d4fffc79-2841-49a9-a382-e9e4138984df,d4fffc79-2841-49a9-a382-e9e4138984df,0,1,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,0,1,9f41f903-d316-4189-8dc0-603ea9036c1c,9f41f903-d316-4189-8dc0-603ea9036c1c,0,1,e19e70d6-8707-4dde-ae69-7bd97035ca03,e19e70d6-8707-4dde-ae69-7bd97035ca03,0,1,425b5272-1130-457d-8a05-aee8fad681d9,425b5272-1130-457d-8a05-aee8fad681d9,0,1,8d583436-f2a6-4a33-8137-1376f5754643,8d583436-f2a6-4a33-8137-1376f5754643,0,1,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,0,1,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,0,1,2d66502d-77ab-4cc9-9ccf-5433458fae9f,2d66502d-77ab-4cc9-9ccf-5433458fae9f,0,1,cff48da7-3c46-4602-83e8-90c9ea53e107,cff48da7-3c46-4602-83e8-90c9ea53e107,0,1,7155472d-c791-402c-96e1-d25612024c88,7155472d-c791-402c-96e1-d25612024c88,0,1,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,0,1,9005911d-ea81-48b6-bf50-1a328ff4d7be,9005911d-ea81-48b6-bf50-1a328ff4d7be,0,1,7df12006-c0c0-42a6-b852-bdced72c62e3,7df12006-c0c0-42a6-b852-bdced72c62e3,0,1,9c00987d-3c55-40eb-bae8-f36e71e4ef87,9c00987d-3c55-40eb-bae8-f36e71e4ef87,0,1,29273130-5142-48c9-8399-00e5ab4b6203,29273130-5142-48c9-8399-00e5ab4b6203,0,1,9e14cd7e-1293-4008-baf8-88df6a98abf7,9e14cd7e-1293-4008-baf8-88df6a98abf7,0,1,98e3aace-52a6-4911-8205-92165adca6de,98e3aace-52a6-4911-8205-92165adca6de,0,1,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,0,1,577e5fea-b792-4c8b-b3b3-a03a14b64b04,577e5fea-b792-4c8b-b3b3-a03a14b64b04,0,1,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,0,1,db4eb2f0-1e8c-4fd6-a818-ee1a09ed7caf,db4eb2f0-1e8c-4fd6-a818-ee1a09ed7caf,0,1,7898bdc8-e895-4894-810a-19607a553c53,7898bdc8-e895-4894-810a-19607a553c53,0,1,b18d312b-f9c3-4f37-ac77-d499e949f154,b18d312b-f9c3-4f37-ac77-d499e949f154,0,1,ace2beea-d393-412f-8b71-b845b665e2c4,ace2beea-d393-412f-8b71-b845b665e2c4,0,1,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,0,1,ebc25606-46e7-4252-8661-cfce0e77830e,ebc25606-46e7-4252-8661-cfce0e77830e,0,1,dfa258a8-7194-49a5-8c25-6de44cf97a0f,dfa258a8-7194-49a5-8c25-6de44cf97a0f,0,1,3fd4bc77-2a1b-4750-a54a-4171c8d40027,3fd4bc77-2a1b-4750-a54a-4171c8d40027,0,1,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,0,1,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,0,1,b56f25d2-72a9-4d80-8998-77ac3097c873,b56f25d2-72a9-4d80-8998-77ac3097c873,0,1,03bd775a-e0a1-4205-82ce-6068e73ad134,03bd775a-e0a1-4205-82ce-6068e73ad134,0,1,40bed47b-7754-4a70-b51a-47385fd46e83,40bed47b-7754-4a70-b51a-47385fd46e83,0,1,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,0,1,1e5a4f93-1ab9-4775-9538-2a1772215d89,1e5a4f93-1ab9-4775-9538-2a1772215d89,0,1,7a014fcb-a4b8-4c1c-b0de-21907a917c25,7a014fcb-a4b8-4c1c-b0de-21907a917c25,0,1,c31e34db-41ff-4db3-a4d0-f780f67070f6,c31e34db-41ff-4db3-a4d0-f780f67070f6,0,1,4f97b909-68f9-482a-b958-b4caa9b83763,4f97b909-68f9-482a-b958-b4caa9b83763,0,1,1688ef5d-72df-4bc4-a879-89033d466ad7,1688ef5d-72df-4bc4-a879-89033d466ad7,0,1,30f18fbf-4240-4708-a71a-189f8fc324f3,30f18fbf-4240-4708-a71a-189f8fc324f3,0,1,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0,1,b456d820-8034-4381-960d-66d9f86b0a4b,b456d820-8034-4381-960d-66d9f86b0a4b,0,1,bd55fd03-cf67-4333-a554-98e03d18f780,bd55fd03-cf67-4333-a554-98e03d18f780,0,1,1a7c774d-5b86-4051-b797-3081e19fa30a,1a7c774d-5b86-4051-b797-3081e19fa30a,0,1,00949768-5833-4fe2-8752-b009d1bceef8,00949768-5833-4fe2-8752-b009d1bceef8,0,1,ef762828-452c-4d3a-ad7a-7f4933ab05ac,ef762828-452c-4d3a-ad7a-7f4933ab05ac,0,1,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,0,1,8b0faa1e-09da-4ba4-894e-e86abc5d39df,8b0faa1e-09da-4ba4-894e-e86abc5d39df,0,1,cb50b309-1b6c-400c-9e9e-67204dcccaae,cb50b309-1b6c-400c-9e9e-67204dcccaae,0,1,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,0,1,c46fd680-efbe-49a8-91f0-73e36d791fa9,c46fd680-efbe-49a8-91f0-73e36d791fa9,0,1,6995567b-5a3c-4e03-9fb4-e22363ed6555,6995567b-5a3c-4e03-9fb4-e22363ed6555,0,1,32c38c2b-072d-4cf2-bf9a-f9c4b4c463e8,32c38c2b-072d-4cf2-bf9a-f9c4b4c463e8,0,1,023d747d-4ac1-4e0e-9de1-76bdc4f74d8b,023d747d-4ac1-4e0e-9de1-76bdc4f74d8b,0,1,b36fd525-6e49-4ea0-94e8-a0895d45bb43,b36fd525-6e49-4ea0-94e8-a0895d45bb43,0,1,56a0a9ce-c5ce-4f3d-ad38-ff6a7a4bd162,56a0a9ce-c5ce-4f3d-ad38-ff6a7a4bd162,0,1,5bbd5ae3-e327-40a2-bb94-91be5db1e14d,5bbd5ae3-e327-40a2-bb94-91be5db1e14d,0,1,591f46c9-8d40-421b-84a7-755a6b330539,591f46c9-8d40-421b-84a7-755a6b330539,0,1,c9eb2a89-3dc9-4ac6-9fac-f8042f8b024b,c9eb2a89-3dc9-4ac6-9fac-f8042f8b024b,0,1,a1693bbe-d65d-47e2-8425-9bf6f9b1d906,a1693bbe-d65d-47e2-8425-9bf6f9b1d906,0,1,6f8ff42b-76ba-4ddf-b3e4-3a2ded880210,6f8ff42b-76ba-4ddf-b3e4-3a2ded880210,0,1,643228fa-f3b0-4927-878b-0fdcd375684c,643228fa-f3b0-4927-878b-0fdcd375684c,0,1,13c98801-97c4-4638-9aa3-aabc6983b7d8,13c98801-97c4-4638-9aa3-aabc6983b7d8,0,1,1d62c9a2-9692-4e7e-b556-70906fb0cbbb,1d62c9a2-9692-4e7e-b556-70906fb0cbbb,0,1,bb8b4325-c43f-4be0-af4a-8dda8447438f,bb8b4325-c43f-4be0-af4a-8dda8447438f,0,1,da52d51a-7e54-4cfd-9f2c-af84da7e5a8f,da52d51a-7e54-4cfd-9f2c-af84da7e5a8f,0,1,0f76c812-38d0-4cab-bc09-d0b36ee48f68,0f76c812-38d0-4cab-bc09-d0b36ee48f68,0,1,02ef7596-599a-4d24-9e9d-fdd83263f576,02ef7596-599a-4d24-9e9d-fdd83263f576,0,1,4ba00bc3-30a3-4a7f-8726-f8393e1a89dd,4ba00bc3-30a3-4a7f-8726-f8393e1a89dd,0,1,0f0dd474-fe3a-40d1-baeb-c9fc1ec709ac,0f0dd474-fe3a-40d1-baeb-c9fc1ec709ac,0,1,ba280414-62a9-4533-90d9-f084ef71bf97,ba280414-62a9-4533-90d9-f084ef71bf97,0,1,c608c734-97ae-4b21-a849-c63642095357,c608c734-97ae-4b21-a849-c63642095357,0,1,8d247cc7-c0ba-4470-8b87-ca0a869aeb2a,8d247cc7-c0ba-4470-8b87-ca0a869aeb2a,0,1,b8a966ba-3452-44df-91d0-7040ecd3e4c2,b8a966ba-3452-44df-91d0-7040ecd3e4c2,0,1,80d6883d-c608-4fe5-acae-78bc45e40e5f,80d6883d-c608-4fe5-acae-78bc45e40e5f,0,1,213b173a-c3b7-449c-a618-d479c4dc38e8,213b173a-c3b7-449c-a618-d479c4dc38e8,0,1,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,0,1,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,0,1,7534148d-0124-49a2-a446-c6205d153153,7534148d-0124-49a2-a446-c6205d153153,0,1,32ed8a10-7177-4e45-866e-04a1b6831570,32ed8a10-7177-4e45-866e-04a1b6831570,0,1,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,0,1,8190a432-1037-4334-b2c7-bae39f7f9442,8190a432-1037-4334-b2c7-bae39f7f9442,0,1,4733e5c1-8198-408b-8903-866d3b0fdc43,4733e5c1-8198-408b-8903-866d3b0fdc43,0,1,e1fc5146-37c5-4207-af05-7250976bd406,e1fc5146-37c5-4207-af05-7250976bd406,0,1,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,0,1,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,0,1,f5e27159-789a-4d34-ac51-fd99d753b83a,f5e27159-789a-4d34-ac51-fd99d753b83a,0,1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,0,1,93701593-5ac8-4266-b471-7e9ed35a9c3e,93701593-5ac8-4266-b471-7e9ed35a9c3e,0,1,0fdb864e-ede9-4777-835c-0804968ee544,0fdb864e-ede9-4777-835c-0804968ee544,0,1,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,0,1,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,0,1,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,0,1,5dee9814-fe38-4631-8148-8d6c87ef6f47,5dee9814-fe38-4631-8148-8d6c87ef6f47,0,1,37d17053-5c2b-4972-b6a5-a589f2ddbde6,37d17053-5c2b-4972-b6a5-a589f2ddbde6,0,1,c349968a-3f87-425b-8efb-d847934dee4b,c349968a-3f87-425b-8efb-d847934dee4b,0,1,3bb8dc33-970c-4c58-9036-ce716d963847,3bb8dc33-970c-4c58-9036-ce716d963847,0,1,b3ff39fa-f665-4d01-9a2a-69722e6b1071,b3ff39fa-f665-4d01-9a2a-69722e6b1071,0,1,0abacb0a-ce00-474e-8aec-35685c51ddef,0abacb0a-ce00-474e-8aec-35685c51ddef,0,1,ae407b17-03aa-4268-8603-58d6714dae89,ae407b17-03aa-4268-8603-58d6714dae89,0,1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,0,1,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,0,1,5bb6e52c-ac26-4143-8e90-f04f703f823b,5bb6e52c-ac26-4143-8e90-f04f703f823b,0,1,579baaa4-6493-4d99-8744-6399757295c7,579baaa4-6493-4d99-8744-6399757295c7,0,1,9c1325af-7492-42be-b3af-51b692534510,9c1325af-7492-42be-b3af-51b692534510,0,1,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,0,1,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,0,1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,0,1,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,0,1,b7e85f5c-4312-44c6-895a-3f636a8c78d8,b7e85f5c-4312-44c6-895a-3f636a8c78d8,0,1,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,0,1,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,0,1,a1afacc5-f49a-4df2-a44d-479594d50179,a1afacc5-f49a-4df2-a44d-479594d50179,0,1,fe70eba3-7477-4a38-a511-d69960abb928,fe70eba3-7477-4a38-a511-d69960abb928,0,1,6534ea96-2145-49e6-9739-f59459dc7f6b,6534ea96-2145-49e6-9739-f59459dc7f6b,0,1,f49bffa0-cad6-4801-b82e-21aa580e72e6,f49bffa0-cad6-4801-b82e-21aa580e72e6,0,1,bbbfb817-8db3-4415-86c3-af028276d6e9,bbbfb817-8db3-4415-86c3-af028276d6e9,0,1,6a91112c-f6cc-47a0-9d26-a36c7702af7d,6a91112c-f6cc-47a0-9d26-a36c7702af7d,0,1,cb92dc2e-6053-4233-a408-4464514b1257,cb92dc2e-6053-4233-a408-4464514b1257,0,1,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,0,1,85550a7a-8fe0-4296-ace5-63cf053536b4,85550a7a-8fe0-4296-ace5-63cf053536b4,0,1,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,0,1,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,0,1,da59378e-0a97-4cff-977b-cc51967068ee,da59378e-0a97-4cff-977b-cc51967068ee,0,1,bbaad46d-f60d-49e6-a077-075366bca47e,bbaad46d-f60d-49e6-a077-075366bca47e,0,1,0d9f5703-91e4-4769-bedd-5bd974f2f617,0d9f5703-91e4-4769-bedd-5bd974f2f617,0,1,926cdf17-1929-43d6-8205-858aab558ad9,926cdf17-1929-43d6-8205-858aab558ad9,0,1,5ec6838f-2d70-4f91-b41b-16adfe8ed587,5ec6838f-2d70-4f91-b41b-16adfe8ed587,0,1,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,0,1,bee8b8a0-f058-44cb-822c-620351567627,bee8b8a0-f058-44cb-822c-620351567627,0,1,26365e29-903b-47fd-ad96-e0d87f5d6e87,26365e29-903b-47fd-ad96-e0d87f5d6e87,0,1,569180cb-ce54-4267-94b9-332e35e3c17d,569180cb-ce54-4267-94b9-332e35e3c17d,0,1,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,0,1,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,0,1,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,0,1,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,0,1,f3d8590a-dcfa-4d41-8d03-642b99ffa040,f3d8590a-dcfa-4d41-8d03-642b99ffa040,0,1,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,0,1,20156709-1481-4007-8e89-9ce79fc589fc,20156709-1481-4007-8e89-9ce79fc589fc,0,1,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,0,1,7e7c5abd-b645-4de5-a40e-5805ec4456e2,7e7c5abd-b645-4de5-a40e-5805ec4456e2,0,1,763a16c3-a728-4b65-a485-705990310b4a,763a16c3-a728-4b65-a485-705990310b4a,0,1,65338920-c744-4d1e-b351-848b90a3feda,65338920-c744-4d1e-b351-848b90a3feda,0,1,2aedb1ac-caf1-45c7-913e-82a36637d5d4,2aedb1ac-caf1-45c7-913e-82a36637d5d4,0,1,52c04b3f-24d2-414c-b05a-77a34078d793,52c04b3f-24d2-414c-b05a-77a34078d793,0,1,8e876c9a-670a-4f34-9525-d87311988268,8e876c9a-670a-4f34-9525-d87311988268,0,1,251bce43-7e0c-4842-aa9f-e1f0dd8bbf2b,251bce43-7e0c-4842-aa9f-e1f0dd8bbf2b,0,1,ef6f7bb6-6c2c-4777-b99a-624865222549,ef6f7bb6-6c2c-4777-b99a-624865222549,0,1,e6044088-2521-4c4b-9cbe-58c14bb871b1,e6044088-2521-4c4b-9cbe-58c14bb871b1,0,1,50fc45e9-1e29-4b0e-9c18-8a8354780755,50fc45e9-1e29-4b0e-9c18-8a8354780755,0,1,f6375eb0-448b-495b-8edf-198f2ac28aed,f6375eb0-448b-495b-8edf-198f2ac28aed,0,1,9e39be89-29c3-48d2-9568-eedfed776bf8,9e39be89-29c3-48d2-9568-eedfed776bf8,0,1,8f873523-b4b1-4522-a60c-04477b4a41ab,8f873523-b4b1-4522-a60c-04477b4a41ab,0,1,bcbb80fe-5d16-49a1-972c-492445c7db6f,bcbb80fe-5d16-49a1-972c-492445c7db6f,0,1,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,0,1,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,0,1,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,0,1,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,0,1,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,0,1,ed1369c5-c274-45bd-ae91-7648565ae09f,ed1369c5-c274-45bd-ae91-7648565ae09f,0,1,8d0fce61-a22f-4033-9e03-3f00c4a21722,8d0fce61-a22f-4033-9e03-3f00c4a21722,0,1,bfb3f026-e940-49c3-ac30-408186f9e11e,bfb3f026-e940-49c3-ac30-408186f9e11e,0,1,e1dc83eb-a8cd-454b-8de8-cff2049be78c,e1dc83eb-a8cd-454b-8de8-cff2049be78c,0,1,9edd9288-1463-4d67-b9f0-40f351d978e9,9edd9288-1463-4d67-b9f0-40f351d978e9,0,1,c9db6c68-965f-4567-b26e-5d497a389de1,c9db6c68-965f-4567-b26e-5d497a389de1,0,1,4da2f65d-56bd-4140-9b31-e5ccac4a800a,4da2f65d-56bd-4140-9b31-e5ccac4a800a,0,1,eb163bba-b94c-4a78-9c2d-7b519325e3d4,eb163bba-b94c-4a78-9c2d-7b519325e3d4,0,1,939bdb9a-294b-4b42-a56f-030f69bc29c4,939bdb9a-294b-4b42-a56f-030f69bc29c4,0,1,ee7a763b-bcbf-4ff3-89af-eb7965b33515,ee7a763b-bcbf-4ff3-89af-eb7965b33515,0,1,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,0,1,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,0,1,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,0,1,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,0,1,d915d338-3e4c-45c3-aef5-a07cf41b05f6,d915d338-3e4c-45c3-aef5-a07cf41b05f6,0,1,978640a2-5c4b-4e21-857e-34f00840fba8,978640a2-5c4b-4e21-857e-34f00840fba8,0,1,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,0,1,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,0,1,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,0,1,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,0,1,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,0,1,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,0,1,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,0,1,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,0,1,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,0,1,840a1d4d-e5f6-4a88-886f-03830fe4f99a,840a1d4d-e5f6-4a88-886f-03830fe4f99a,0,1,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,0,1,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,0,1,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,0,1,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,0,1,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,0,1,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,0,1,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,0,1,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,0,1,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,0,1,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,0,1,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,0,1,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,0,1,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,0,1,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,0,1,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,0,1,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,0,1,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,0,1,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,0,1,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,0,1,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,0,1,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,0,1,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,0,1,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,0,1,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,0,1,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,0,1,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,0,1,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,0,1,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,0,1,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,0,1,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,0,1,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,0,1,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,0,1,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,0,1,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,0,1,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,0,1,255e55e3-fc3a-4388-8667-486fe3b7557f,255e55e3-fc3a-4388-8667-486fe3b7557f,0,1,d4bfe208-c64c-4088-b33f-98e4cee03444,d4bfe208-c64c-4088-b33f-98e4cee03444,0,1,d912e472-9553-4b96-8b16-7aaff6c14239,d912e472-9553-4b96-8b16-7aaff6c14239,0,1,b04018b5-a74d-43c9-8519-6cc8aa23fe09,b04018b5-a74d-43c9-8519-6cc8aa23fe09,0,1,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,0,1,9283277f-2b75-4c3a-810a-8d4071b3afcc,9283277f-2b75-4c3a-810a-8d4071b3afcc,0,1,d03d5b18-57a2-43c0-99ea-8ad9d5788179,d03d5b18-57a2-43c0-99ea-8ad9d5788179,0,1,c491a7fc-14f9-498a-b7dd-575dfc66878e,c491a7fc-14f9-498a-b7dd-575dfc66878e,0,1,db15f8eb-4736-4b47-9cee-3e6883f0888c,db15f8eb-4736-4b47-9cee-3e6883f0888c,0,1,59064eb2-2770-4f1c-96bd-801926fe68ef,59064eb2-2770-4f1c-96bd-801926fe68ef,0,1,6b2340d7-687f-43a3-8eb8-8ddb86712466,6b2340d7-687f-43a3-8eb8-8ddb86712466,0,1,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,0,1,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,0,1,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,0,1,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,0,1,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,0,1,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,0,1,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,0,1,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0,1,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,0,1,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0,1,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,0,1,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,0,1,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,0,1,9328da5c-4689-4a60-8136-ae9eac46ab38,9328da5c-4689-4a60-8136-ae9eac46ab38,0,1,42641296-64da-46e0-a407-de2d492f9c90,42641296-64da-46e0-a407-de2d492f9c90,0,1,b834af0b-086c-445d-a271-7e178c324551,b834af0b-086c-445d-a271-7e178c324551,0,1,32c10512-7bb8-423b-9503-ab2fa41386a4,32c10512-7bb8-423b-9503-ab2fa41386a4,0,1,888edfc4-8140-4675-b267-c32bf1d8d29d,888edfc4-8140-4675-b267-c32bf1d8d29d,0,1,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,0,1,57a0f5f3-6573-4b35-af25-cea3a25641f1,57a0f5f3-6573-4b35-af25-cea3a25641f1,0,1,21d296a1-6809-4ff6-a4da-b455cad86cc2,21d296a1-6809-4ff6-a4da-b455cad86cc2,0,1,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,0,1,45a8c780-c067-40d7-bbe9-81f854aacf7a,45a8c780-c067-40d7-bbe9-81f854aacf7a,0,1,57885cac-059a-4a08-aa2c-43b116d2c777,57885cac-059a-4a08-aa2c-43b116d2c777,0,1,56b570b1-93b0-468a-9672-9c71113753f3,56b570b1-93b0-468a-9672-9c71113753f3,0,1,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,0,1,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,0,1,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,0,1,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,0,1,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,0,1,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,0,1,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,0,1,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,0,1,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,0,1,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0,1,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,0,1,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,0,1,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,0,1,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,0,1,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,0,1,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,0,1,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,0,1,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,0,1,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,0,1,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,0,1,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,0,1,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,0,1,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,0,1,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,0,1,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,0,1,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,0,1,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,0,1,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,0,1,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,0,1,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,0,1,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,0,1,9a8578a2-8a92-4ab3-a480-173340f8b34a,9a8578a2-8a92-4ab3-a480-173340f8b34a,0,1,4ebf0988-ccc3-440c-bd0f-2d01636bd730,4ebf0988-ccc3-440c-bd0f-2d01636bd730,0,1,69f42341-268b-4e74-9d6d-527800d018ab,69f42341-268b-4e74-9d6d-527800d018ab,0,1,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,0,1,ca6ecedc-f4c5-4c14-8a02-6255ce45033a,ca6ecedc-f4c5-4c14-8a02-6255ce45033a,0,1,7eb5217f-684d-4a9e-8aef-48cedc809cbb,7eb5217f-684d-4a9e-8aef-48cedc809cbb,0,1,1c90a423-ef1b-42dc-a43b-1fda89672481,1c90a423-ef1b-42dc-a43b-1fda89672481,0,1,095cf2d6-5a7c-452d-8d60-991afb6e52bd,095cf2d6-5a7c-452d-8d60-991afb6e52bd,0,1,2c155a03-2aff-4632-adb2-be3266e0fac3,2c155a03-2aff-4632-adb2-be3266e0fac3,0,1,f9213a70-bfd6-464f-b28b-ed35bdf351c0,f9213a70-bfd6-464f-b28b-ed35bdf351c0,0,1,eb81610a-eb2f-4068-ba74-75e0f5bbace8,eb81610a-eb2f-4068-ba74-75e0f5bbace8,0,1,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,0,1,21826316-0b49-4034-a49e-6d34c15ceb5c,21826316-0b49-4034-a49e-6d34c15ceb5c,0,1,3abffa47-8d47-4173-897b-708e1a06ef39,3abffa47-8d47-4173-897b-708e1a06ef39,0,1,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0,1,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,0,1,38692186-a62a-42d1-87cd-7dbc6d4816ed,38692186-a62a-42d1-87cd-7dbc6d4816ed,0,1,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,0,1,3a28cea9-7fd7-4834-ab89-2a74331a64e3,3a28cea9-7fd7-4834-ab89-2a74331a64e3,0,1,0f881709-4520-4f18-af9d-cf08757693ff,0f881709-4520-4f18-af9d-cf08757693ff,0,1,c5151ca9-5103-42b2-8573-273c15416db8,c5151ca9-5103-42b2-8573-273c15416db8,0,1,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,0,1,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,0,1,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,0,1,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,0,1,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,0,1,c13fb1cd-fe72-48a6-b383-55b6323619ce,c13fb1cd-fe72-48a6-b383-55b6323619ce,0,1,956fc8ee-96be-4309-b1e8-209372f151ab,956fc8ee-96be-4309-b1e8-209372f151ab,0,1,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,0,1,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,0,1,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,0,1,12f85e09-1190-4483-b531-630ab718db7f,12f85e09-1190-4483-b531-630ab718db7f,0,1,52f4453e-e968-4290-a79a-470f68fbd07f,52f4453e-e968-4290-a79a-470f68fbd07f,0,1,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,0,1,33e0072d-7d5b-4298-ae77-31a7cb358f5d,33e0072d-7d5b-4298-ae77-31a7cb358f5d,0,1,1051c0c7-1058-427c-8bf5-5e30b8fbfb54,1051c0c7-1058-427c-8bf5-5e30b8fbfb54,0,1,b27688c3-6682-45e1-a03f-0d2e8b1214e4,b27688c3-6682-45e1-a03f-0d2e8b1214e4,0,1,c8158812-024b-4f94-bd07-c3f1fd59e8a1,c8158812-024b-4f94-bd07-c3f1fd59e8a1,0,1,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,0,1,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,0,1,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,0,1,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,0,1,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,0,1,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,0,1,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,0,1,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,0,1,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,0,1,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,0,1,04055821-03ce-4049-af2c-8670c80517f6,04055821-03ce-4049-af2c-8670c80517f6,0,1,0101305d-62eb-4802-9cd4-d615a518d842,0101305d-62eb-4802-9cd4-d615a518d842,0,1,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,0,1,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,0,1,7c424424-9660-462d-9cf2-4c1e6bd284fa,7c424424-9660-462d-9cf2-4c1e6bd284fa,0,1,e118f957-ab2c-473b-ab64-37032f727416,e118f957-ab2c-473b-ab64-37032f727416,0,1,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,0,1,21f64e5f-dc94-4ce9-b836-e75646ae3325,21f64e5f-dc94-4ce9-b836-e75646ae3325,0,1,82e8a180-f2e1-406c-9609-89d33504aff2,82e8a180-f2e1-406c-9609-89d33504aff2,0,1,e7437c81-3d5b-466e-880c-8febe4a68e88,e7437c81-3d5b-466e-880c-8febe4a68e88,0,1,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,0,1,307771e6-bcf7-4016-b369-e1655bbe9e94,307771e6-bcf7-4016-b369-e1655bbe9e94,0,1,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,0,1,38fc6a54-846c-40b0-9254-3261f540bf18,38fc6a54-846c-40b0-9254-3261f540bf18,0,1,d9134d0c-56cd-4b8f-ab11-ae37fc306801,d9134d0c-56cd-4b8f-ab11-ae37fc306801,0,1,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,0,1,8f2af24b-f5fa-4f6d-831e-28453bdedefc,8f2af24b-f5fa-4f6d-831e-28453bdedefc,0,1,d119e21d-0087-4f22-b3bd-b14707b65330,d119e21d-0087-4f22-b3bd-b14707b65330,0,1,dc9b4072-11de-40fe-bf2a-f7b15af0a250,dc9b4072-11de-40fe-bf2a-f7b15af0a250,0,1,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,0,1,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,0,1,932b1c1a-72eb-49cd-8218-d0ced9c454d8,932b1c1a-72eb-49cd-8218-d0ced9c454d8,0,1,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,0,1,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,0,1,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,0,1,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,0,1,5dd336c4-88c5-4f53-acf0-5f86a658c528,5dd336c4-88c5-4f53-acf0-5f86a658c528,0,1,c723112b-286d-46f1-989d-81252062a025,c723112b-286d-46f1-989d-81252062a025,0,1,67e8b47e-4bad-4b2f-b196-8a9708893051,67e8b47e-4bad-4b2f-b196-8a9708893051,0,1,a583e53a-3f3c-48c7-8928-37ce40b2bafe,a583e53a-3f3c-48c7-8928-37ce40b2bafe,0,1,a844dd4a-274a-4894-9446-031dbe006084,a844dd4a-274a-4894-9446-031dbe006084,0,1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,0,1,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,0,1,7092a5d4-620b-4ad2-bce4-f099da694100,7092a5d4-620b-4ad2-bce4-f099da694100,0,1,31b3e718-d0b2-425b-b8af-67bc407eab56,31b3e718-d0b2-425b-b8af-67bc407eab56,0,1,77bdd30f-4933-4bda-9c7a-b0a097da0910,77bdd30f-4933-4bda-9c7a-b0a097da0910,0,1,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,0,1,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,0,1,a682e9e1-284f-4e32-86b2-6736f159f585,a682e9e1-284f-4e32-86b2-6736f159f585,0,1,84f0bd89-9b86-440f-b942-9b685e22233e,84f0bd89-9b86-440f-b942-9b685e22233e,0,1,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,0,1,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,0,1,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,0,1,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,0,1,fabf8a0b-366f-4f23-9377-315534bb854b,fabf8a0b-366f-4f23-9377-315534bb854b,0,1,7aac6439-64c9-4492-b866-bf91dda82d06,7aac6439-64c9-4492-b866-bf91dda82d06,0,1,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,0,1,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,0,1,08b86f29-64ef-467a-af1a-d27ffdf621ba,08b86f29-64ef-467a-af1a-d27ffdf621ba,0,1,6483d1ab-c53d-4985-ad7e-b799adbcd9da,6483d1ab-c53d-4985-ad7e-b799adbcd9da,0,1,82f66233-ed13-49ae-ab72-7cf91c88c760,82f66233-ed13-49ae-ab72-7cf91c88c760,0,1,75cddbcd-e960-4164-81d8-ac0a2a36e95b,75cddbcd-e960-4164-81d8-ac0a2a36e95b,0,1,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,0,1,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,0,1,d9151001-a911-45c1-a8e6-dcf0da623ed3,d9151001-a911-45c1-a8e6-dcf0da623ed3,0,1,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,0,1,e589a693-ff50-4c36-ae26-a8fcae966d57,e589a693-ff50-4c36-ae26-a8fcae966d57,0,1,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,0,1,90f023f5-5b48-4f98-bfc6-b704277a355d,90f023f5-5b48-4f98-bfc6-b704277a355d,0,1,99485603-706d-4301-be25-82b1c0ee8f4d,99485603-706d-4301-be25-82b1c0ee8f4d,0,1,e7a28021-c75e-41b2-9974-cf4beee34d28,e7a28021-c75e-41b2-9974-cf4beee34d28,0,1,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,0,1,2a603c61-4cbf-4c6d-a0b2-40c835d36737,2a603c61-4cbf-4c6d-a0b2-40c835d36737,0,1,a8d7f071-401b-499e-957c-d077d8002e54,a8d7f071-401b-499e-957c-d077d8002e54,0,1,211a539b-4be9-4816-98f6-f756e65eafd8,211a539b-4be9-4816-98f6-f756e65eafd8,0,1,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,0,1,e9b9da80-7806-4c9c-a002-01cfa3109169,e9b9da80-7806-4c9c-a002-01cfa3109169,0,1,a271041d-0203-4ecd-bb39-70256c50192e,a271041d-0203-4ecd-bb39-70256c50192e,0,1,9eacd816-d416-4bf9-9cc7-a62394031517,9eacd816-d416-4bf9-9cc7-a62394031517,0,1,6c055aa0-3d9f-42a0-95bb-10ad0a513b9c,6c055aa0-3d9f-42a0-95bb-10ad0a513b9c,0,1,73eff626-a363-4a5a-879e-61ef6ce0726f,73eff626-a363-4a5a-879e-61ef6ce0726f,0,1,acf15b79-a6c4-4c46-8013-50d3b223baf6,acf15b79-a6c4-4c46-8013-50d3b223baf6,0,1,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,0,1,2d8d5d74-2bc0-4282-af66-e4a37694c147,2d8d5d74-2bc0-4282-af66-e4a37694c147,0,1,cfd31341-287b-4684-9ac0-b28b4e066f15,cfd31341-287b-4684-9ac0-b28b4e066f15,0,1,f829e2a9-5bdb-4171-8b32-8d10d5968813,f829e2a9-5bdb-4171-8b32-8d10d5968813,0,1,647ba8f8-57f7-4c19-af59-525517c1e392,647ba8f8-57f7-4c19-af59-525517c1e392,0,1,39062cb3-4ae8-4c0d-889b-038a55179946,39062cb3-4ae8-4c0d-889b-038a55179946,0,1,c62d4212-36ca-4afb-bac9-269b6f64ca51,c62d4212-36ca-4afb-bac9-269b6f64ca51,0,1,5cec5e16-46ad-4f8c-b869-f5b1cc487884,5cec5e16-46ad-4f8c-b869-f5b1cc487884,0,1,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,0,1,7aacdf81-49fd-47a3-a36a-c483f1b05872,7aacdf81-49fd-47a3-a36a-c483f1b05872,0,1,857015e2-afb2-403d-bfb7-7acb5080797b,857015e2-afb2-403d-bfb7-7acb5080797b,0,1,5657286b-114b-41de-ab7d-45d0f0d95e2d,5657286b-114b-41de-ab7d-45d0f0d95e2d,0,1,42a0271e-6783-44db-95c1-09805ae01f58,42a0271e-6783-44db-95c1-09805ae01f58,0,1,8628783e-4fad-4dff-8220-9e0ddc8580f8,8628783e-4fad-4dff-8220-9e0ddc8580f8,0,1,356fc245-3034-42d1-84d0-632c6dc7a3d5,356fc245-3034-42d1-84d0-632c6dc7a3d5,0,1,07462664-6b58-4f5a-9b3f-2e5c376f17df,07462664-6b58-4f5a-9b3f-2e5c376f17df,0,1,6f23e946-f700-424b-b9bf-3a9c8846908d,6f23e946-f700-424b-b9bf-3a9c8846908d,0,1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,0,1,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,0,1,ec42c45c-18ca-44b0-9c59-1cb204552a43,ec42c45c-18ca-44b0-9c59-1cb204552a43,0,1,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,0,1,c656771c-dcb7-4c78-9a16-e62806d5bb5a,c656771c-dcb7-4c78-9a16-e62806d5bb5a,0,1,2aafb1a1-4321-47e9-9783-03ab616a2873,2aafb1a1-4321-47e9-9783-03ab616a2873,0,1,71109997-6da0-4eaf-bbf2-f94fa24f37cc,71109997-6da0-4eaf-bbf2-f94fa24f37cc,0,1,c48ef5e7-61da-4613-ae8b-f39745fccd20,c48ef5e7-61da-4613-ae8b-f39745fccd20,0,1,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,0,1,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,0,1,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,0,1,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,0,1,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,0,1,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,0,1,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,0,1,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,0,1,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,0,1,a915df5f-7330-4fc3-aecd-08d228b8fd23,a915df5f-7330-4fc3-aecd-08d228b8fd23,0,1,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,0,1,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,0,1,6e20df72-c643-4952-8f9c-f386d2915004,6e20df72-c643-4952-8f9c-f386d2915004,0,1,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,0,1,0e5074b0-bc15-416d-9c87-dad6824186e1,0e5074b0-bc15-416d-9c87-dad6824186e1,0,1,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,0,1,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,0,1,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,0,1,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,0,1,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,0,1,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,0,1,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,0,1,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,0,1,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,0,1,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,0,1,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,0,1,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,0,1,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,0,1,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,0,1,d7a86a55-db13-4601-9bdb-c83b25ea9a51,d7a86a55-db13-4601-9bdb-c83b25ea9a51,0,1,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,0,1,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,0,1,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,0,1,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,0,1,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,0,1,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,0,1,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,0,1,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,0,1,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,0,1,abacbda3-b4c1-446b-95e7-a45adec16174,abacbda3-b4c1-446b-95e7-a45adec16174,0,1,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,0,1,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,0,1,91a7a0f7-19e8-43d1-935c-e9bd1ac24d03,91a7a0f7-19e8-43d1-935c-e9bd1ac24d03,0,1,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,0,1,868da26b-f32e-48d1-a647-44dac7520d86,868da26b-f32e-48d1-a647-44dac7520d86,0,1,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,0,1,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,0,1,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,0,1,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,0,1,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,0,1,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,0,1,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,0,1,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,0,1,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,0,1,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,0,1,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0,1,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,0,1,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,0,1,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,0,1,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,0,1,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,0,1,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,0,1,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,0,1,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,0,1,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,0,1,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,0,1,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,0,1,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,0,1,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0,1,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0,1,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,0,1,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,0,1,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,0,1,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,0,1,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0,1,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,0,1,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,0,1,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,0,1,34a6b209-ceb7-44f2-8827-20d942fdd491,34a6b209-ceb7-44f2-8827-20d942fdd491,0,1,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,0,1,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,0,1,bad3d1fa-9618-427a-93e0-90f151e468bf,bad3d1fa-9618-427a-93e0-90f151e468bf,0,1,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,0,1,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,0,1,ec7cfc56-00fd-4494-be90-49308a3c34a0,ec7cfc56-00fd-4494-be90-49308a3c34a0,0,1,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,0,1,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,0,1,719cdbdd-13b3-44fc-8739-0b788693a8d0,719cdbdd-13b3-44fc-8739-0b788693a8d0,0,1,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,0,1,5de9fbf9-f075-4acf-b9f9-89688d2006af,5de9fbf9-f075-4acf-b9f9-89688d2006af,0,1,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,0,1,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,0,1,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,0,1,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,0,1,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,0,1,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,0,1,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,0,1,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,0,1,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,0,1,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,0,1,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,0,1,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,0,1,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,0,1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,0,1,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,0,1,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,0,1,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,0,1,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,0,1,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,0,1,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,0,1,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,0,1,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,0,1,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,0,1,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,0,1,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,0,1,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,0,1,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,0,1,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,0,1,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,0,1,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,0,1,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,0,1,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,0,1,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,0,1,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,0,1,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,0,1,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,0,1,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,0,1,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,0,1,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,0,1,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,0,1,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,0,1,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,0,1,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,0,1,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,0,1,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,0,1,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,0,1,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,0,1,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,0,1,837e4559-2f2d-48e9-a03b-2d52b25569ec,837e4559-2f2d-48e9-a03b-2d52b25569ec,0,1,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,0,1,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,0,1,3660618a-0cab-458f-b448-867c4d1aba1b,3660618a-0cab-458f-b448-867c4d1aba1b,0,1,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,0,1,22f34fd5-4bda-48c1-8772-74d9c6479a30,22f34fd5-4bda-48c1-8772-74d9c6479a30,0,1,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,0,1,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,0,1,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,0,1,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,0,1,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,0,1,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,0,1,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,0,1,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,0,1,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,0,1,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,0,1,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,0,1,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,0,1,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,0,1,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,0,1,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0,1,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,0,1,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,0,1,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,0,1,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,0,1,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,0,1,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,0,1,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,0,1,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,0,1,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,0,1,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,0,1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0,1,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,0,1,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,0,1,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,0,1,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,0,1,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,0,1,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,0,1,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,0,1,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,0,1,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,0,1,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,0,1,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,0,1,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,0,1,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,0,1,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,0,1,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,0,1,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,0,1,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,0,1,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,0,1,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,0,1,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,0,1,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,0,1,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,0,1,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,0,1,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,0,1,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,0,1,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,0,1,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,0,1,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,0,1,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,0,1,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,0,1,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,0,1,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,0,1,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,0,1,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,0,1,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,0,1,d826fe6f-d9f6-41f2-8dd6-bd840af25183,d826fe6f-d9f6-41f2-8dd6-bd840af25183,0,1,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,0,1,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,0,1,5e6a6f8f-5cb1-475d-b2d8-f2f143ef7b19,5e6a6f8f-5cb1-475d-b2d8-f2f143ef7b19,0,1,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,0,1,7bc5fa42-7d72-433e-8db6-a046b583a316,7bc5fa42-7d72-433e-8db6-a046b583a316,0,1,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,0,1,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,0,1,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,0,1,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,0,1,b6ae3a72-c686-409d-9cda-9d1a00be1d8d,b6ae3a72-c686-409d-9cda-9d1a00be1d8d,0,1,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,0,1,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,0,1,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,0,1,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,0,1,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,0,1,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,0,1,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,0,1,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,0,1,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,0,1,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,0,1,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,0,1,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,0,1,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,0,1,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,0,1,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,0,1,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,0,1,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,0,1,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,0,1,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,0,1,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,0,1,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,0,1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,0,1,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,0,1,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,0,1,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,0,1,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,0,1,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,0,1,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,0,1,dd050ca0-8335-4654-ab5c-7babcb4824ef,dd050ca0-8335-4654-ab5c-7babcb4824ef,0,1,706cbf55-626d-4cab-b589-a2464368f6c1,706cbf55-626d-4cab-b589-a2464368f6c1,0,1,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,0,1,483dfce4-9c66-4739-94d4-17a005d64f5b,483dfce4-9c66-4739-94d4-17a005d64f5b,0,1,19506116-43ef-433c-822c-ef8717b0da6b,19506116-43ef-433c-822c-ef8717b0da6b,0,1,464b92cc-b577-4350-ae9f-e697390248d7,464b92cc-b577-4350-ae9f-e697390248d7,0,1,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,0,1,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,0,1,97e853dc-065f-4c6d-84cb-3d3aff367b22,97e853dc-065f-4c6d-84cb-3d3aff367b22,0,1,2f1fdf47-2627-496f-9e1f-77019abb2104,2f1fdf47-2627-496f-9e1f-77019abb2104,0,1,c996532a-8795-4136-8a40-9bb4b263277c,c996532a-8795-4136-8a40-9bb4b263277c,0,1,64c77788-fc49-4979-8163-949a891bd8b7,64c77788-fc49-4979-8163-949a891bd8b7,0,1,c39750ca-e33f-40c2-b830-119423d9a2ae,c39750ca-e33f-40c2-b830-119423d9a2ae,0,1,9372ff6b-27b6-48f3-a2a2-762e7c485766,9372ff6b-27b6-48f3-a2a2-762e7c485766,0,1,f454595a-4a3d-451b-8e8b-b17aa8314591,f454595a-4a3d-451b-8e8b-b17aa8314591,0,1,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,0,1,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,0,1,bc708da8-7fc6-4da1-8129-9ef6a86667af,bc708da8-7fc6-4da1-8129-9ef6a86667af,0,1,061842fe-4077-4d6e-aefe-de79409da730,061842fe-4077-4d6e-aefe-de79409da730,0,1,da6e4bff-9835-4b92-b62b-291a5d6c86fe,da6e4bff-9835-4b92-b62b-291a5d6c86fe,0,1,6f0caeb0-34ce-489c-86c4-c16d85320fa3,6f0caeb0-34ce-489c-86c4-c16d85320fa3,0,1,4c49914c-e472-46f8-8c5e-5e38138eb301,4c49914c-e472-46f8-8c5e-5e38138eb301,0,1,81d4ea48-8704-494d-8cd2-51f2dd1190bc,81d4ea48-8704-494d-8cd2-51f2dd1190bc,0,1,9c196011-1485-4fa5-bb05-a9dbe768e8a7,9c196011-1485-4fa5-bb05-a9dbe768e8a7,0,1,3fadaeb7-2c41-42a4-bfa8-c585602b1028,3fadaeb7-2c41-42a4-bfa8-c585602b1028,0,1,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,0,1,b98dacc7-29e1-426b-a664-0a988f18186c,b98dacc7-29e1-426b-a664-0a988f18186c,0,1,083c709b-ed8c-47e4-a190-421e14259e73,083c709b-ed8c-47e4-a190-421e14259e73,0,1,d678856d-6e7c-443f-a6e3-350bbe8af659,d678856d-6e7c-443f-a6e3-350bbe8af659,0,1,d0979762-22ce-41be-b7a4-5e9ac149d94b,d0979762-22ce-41be-b7a4-5e9ac149d94b,0,1,ae23e70c-479e-47ad-9bfa-58560a903410,ae23e70c-479e-47ad-9bfa-58560a903410,0,1,c0d83781-bbda-43f7-bf0e-5defa3d47143,c0d83781-bbda-43f7-bf0e-5defa3d47143,0,1,21fa5fdd-acbc-403b-9acb-bbf95284bd20,21fa5fdd-acbc-403b-9acb-bbf95284bd20,0,1,576a01e3-4d6d-4241-a3c4-7661ba129bcb,576a01e3-4d6d-4241-a3c4-7661ba129bcb,0,1,752dc569-cf84-42d7-911d-49d455f7214e,752dc569-cf84-42d7-911d-49d455f7214e,0,1,fecab2b9-27e1-44d6-9082-79c3569b7477,fecab2b9-27e1-44d6-9082-79c3569b7477,0,1,07ae092f-8517-47b7-b54c-5dbcb6506929,07ae092f-8517-47b7-b54c-5dbcb6506929,0,1,db4c25bb-d199-43ec-833d-82972de04a41,db4c25bb-d199-43ec-833d-82972de04a41,0,1,43d19685-0794-41f2-9171-bf565133718d,43d19685-0794-41f2-9171-bf565133718d,0,1,b68c15c4-4966-4f13-8912-2d479b65089a,b68c15c4-4966-4f13-8912-2d479b65089a,0,1,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,0,1,f87e3935-dae1-4192-b6a7-05e3c700c590,f87e3935-dae1-4192-b6a7-05e3c700c590,0,1,ee635706-6ee2-4956-8d58-a235f64687f6,ee635706-6ee2-4956-8d58-a235f64687f6,0,1,a5a40ca7-d665-420b-a516-1355019d6901,a5a40ca7-d665-420b-a516-1355019d6901,0,1,adf9304c-ccf8-492e-95b1-0754764586a2,adf9304c-ccf8-492e-95b1-0754764586a2,0,1,fd175112-ec8f-4088-9b21-d8135056f0c5,fd175112-ec8f-4088-9b21-d8135056f0c5,0,1,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,0,1,df76a1b7-312a-4e77-bac1-79befadb4495,df76a1b7-312a-4e77-bac1-79befadb4495,0,1,ab39fad8-1039-491e-982a-c49637770ec0,ab39fad8-1039-491e-982a-c49637770ec0,0,1,7d93a6ba-3ca7-45ab-a540-743c79587535,7d93a6ba-3ca7-45ab-a540-743c79587535,0,1,76b58810-0527-4dfc-8858-bac68e7e65f3,76b58810-0527-4dfc-8858-bac68e7e65f3,0,1,f5c415cd-429b-469f-9332-c43ab5d1c8d6,f5c415cd-429b-469f-9332-c43ab5d1c8d6,0,1,458e9c6b-b828-404b-be5a-c6c0aeea34c9,458e9c6b-b828-404b-be5a-c6c0aeea34c9,0,1,7262eb4d-2d2d-454c-beaa-974645813af7,7262eb4d-2d2d-454c-beaa-974645813af7,0,1,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,0,1,b2265070-9cd3-4176-92c8-6d9f32c2ca84,b2265070-9cd3-4176-92c8-6d9f32c2ca84,0,1,b347e774-2261-4f76-9bdb-3c6736983589,b347e774-2261-4f76-9bdb-3c6736983589,0,1,be7e2715-1243-49a8-8c7c-55d632d3cf6c,be7e2715-1243-49a8-8c7c-55d632d3cf6c,0,1,49221b2f-aae2-4bee-9a1a-18263fc74244,49221b2f-aae2-4bee-9a1a-18263fc74244,0,1,da0cd264-da2f-4044-af28-c91d2efe1d5c,da0cd264-da2f-4044-af28-c91d2efe1d5c,0,1,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,0,1,e754ad5c-cf3c-4198-af81-128475924cb0,e754ad5c-cf3c-4198-af81-128475924cb0,0,1,ed65d504-b210-4014-85ec-275ad633ef04,ed65d504-b210-4014-85ec-275ad633ef04,0,1,dc31edb1-273e-4b1a-8e69-32393479ff36,dc31edb1-273e-4b1a-8e69-32393479ff36,0,1,5facb8c9-b62f-422f-a02a-62c245b3b332,5facb8c9-b62f-422f-a02a-62c245b3b332,0,1,db9d05b6-2741-42b0-990e-85013380f77c,db9d05b6-2741-42b0-990e-85013380f77c,0,1,a9570d6e-f1b5-406d-97e1-9eac755bebd0,a9570d6e-f1b5-406d-97e1-9eac755bebd0,0,1,c35904cf-4954-434e-96fd-5ca537a88c66,c35904cf-4954-434e-96fd-5ca537a88c66,0,1,5545798f-72dc-4630-a5ba-88039f4bfe3c,5545798f-72dc-4630-a5ba-88039f4bfe3c,0,1,f293ac4b-91ed-4c97-90b3-bfe98c983a0f,f293ac4b-91ed-4c97-90b3-bfe98c983a0f,0,1,4427cab9-4eea-4415-98ef-6021a447c60c,4427cab9-4eea-4415-98ef-6021a447c60c,0,1,fe46b4da-d865-468f-badd-83644bf88faa,fe46b4da-d865-468f-badd-83644bf88faa,0,1,2851c9d4-4366-4488-926d-a7fcd3b1548c,2851c9d4-4366-4488-926d-a7fcd3b1548c,0,1,31116aa2-cfbc-48e8-886b-45c1c17508fd,31116aa2-cfbc-48e8-886b-45c1c17508fd,0,1,6aa819d3-c56d-4561-a2e4-a1188ab1295a,6aa819d3-c56d-4561-a2e4-a1188ab1295a,0,1,2ddf344d-7065-40d5-9306-23870d8fc04a,2ddf344d-7065-40d5-9306-23870d8fc04a,0,1,c630ab2d-0a20-4136-88b6-220b2cad6a71,c630ab2d-0a20-4136-88b6-220b2cad6a71,0,1,00cd1dea-bc54-475c-956d-dc5221104932,00cd1dea-bc54-475c-956d-dc5221104932,0,1,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,0,1,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,0,1,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,0,1,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,0,1,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,0,1,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,0,1,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,0,1,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,0,1,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,0,1,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,0,1,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,0,1,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,0,1,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,0,1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,0,1,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,0,1,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,0,1,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,0,1,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,0,1,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,0,1,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,0,1,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,0,1,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,0,1,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,0,1,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,0,1,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,0,1,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,0,1,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,0,1,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,0,1,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,0,1,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,0,1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,0,1,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,0,1,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,0,1,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,0,1,d3211832-c8ca-437a-8810-82e06cbb48de,d3211832-c8ca-437a-8810-82e06cbb48de,0,1,8131d701-1014-4196-9b67-914e451f8a3a,8131d701-1014-4196-9b67-914e451f8a3a,0,1,2b102933-c660-4e74-ae9a-5061a88ed672,2b102933-c660-4e74-ae9a-5061a88ed672,0,1,56c897b7-d34e-4d7d-9a3b-d0779be5c189,56c897b7-d34e-4d7d-9a3b-d0779be5c189,0,1,3ac81c80-56bd-4750-b135-07ab522e3eab,3ac81c80-56bd-4750-b135-07ab522e3eab,0,1,5657872f-c7d5-446f-bcc3-d0b86ad63a42,5657872f-c7d5-446f-bcc3-d0b86ad63a42,0,1,d5214cb9-67e2-469f-989f-3f2b662ae830,d5214cb9-67e2-469f-989f-3f2b662ae830,0,1,69679e88-4f2b-4dd6-8cb2-b88293d07b55,69679e88-4f2b-4dd6-8cb2-b88293d07b55,0,1,68679208-9972-4854-8649-49bdf6212255,68679208-9972-4854-8649-49bdf6212255,0,1,98393093-7ba6-4b4d-86be-ee5826cd8cd5,98393093-7ba6-4b4d-86be-ee5826cd8cd5,0,1,87de486d-3f35-4432-a7cd-9d3832db63cf,87de486d-3f35-4432-a7cd-9d3832db63cf,0,1,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,0,1,bb7ce04a-8143-4c0b-a196-1b57f1640142,bb7ce04a-8143-4c0b-a196-1b57f1640142,0,1,766208a3-2780-427b-a7d3-93abe99d236b,766208a3-2780-427b-a7d3-93abe99d236b,0,1,63ce4c3c-5bad-409c-904f-18f34cf1da78,63ce4c3c-5bad-409c-904f-18f34cf1da78,0,1,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,0,1,26ac22f9-0bbb-4671-b446-626e345e2461,26ac22f9-0bbb-4671-b446-626e345e2461,0,1,0d63ee6d-e17f-4a86-b384-adf9793f3331,0d63ee6d-e17f-4a86-b384-adf9793f3331,0,1,f152945b-2a7b-449e-a915-176166af7bac,f152945b-2a7b-449e-a915-176166af7bac,0,1,77f5d86a-7fae-4490-9740-0e31102dab5c,77f5d86a-7fae-4490-9740-0e31102dab5c,0,1,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,0,1,24be43ec-d39e-46aa-9c11-2536b835e515,24be43ec-d39e-46aa-9c11-2536b835e515,0,1,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,0,1,df9af3ee-6a69-4a03-8ff5-0735e9a38013,df9af3ee-6a69-4a03-8ff5-0735e9a38013,0,1,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,0,1,7743fe24-b941-4dad-bc76-05fb6b26b1d7,7743fe24-b941-4dad-bc76-05fb6b26b1d7,0,1,5bf2da0d-f318-4036-9234-8a3a6eca88b2,5bf2da0d-f318-4036-9234-8a3a6eca88b2,0,1,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,0,1,c3634571-6fe5-45ab-9362-161305eef661,c3634571-6fe5-45ab-9362-161305eef661,0,1,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,0,1,96661303-1286-4f84-93b7-0e6da2bd7893,96661303-1286-4f84-93b7-0e6da2bd7893,0,1,68076431-36e6-46dc-92cb-e0d8e605bf66,68076431-36e6-46dc-92cb-e0d8e605bf66,0,1,239fa55a-6572-4e5c-9918-c2e14063c76d,239fa55a-6572-4e5c-9918-c2e14063c76d,0,1,8211a1b6-c3b1-466b-8d11-22603fb50c7a,8211a1b6-c3b1-466b-8d11-22603fb50c7a,0,1,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,0,1,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,0,1,a83cb338-5707-42c9-9e88-11f6c68fcc32,a83cb338-5707-42c9-9e88-11f6c68fcc32,0,1,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,0,1,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,0,1,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,0,1,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,0,1,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,0,1,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,0,1,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,0,1,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,0,1,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,0,1,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,0,1,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,0,1,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,0,1,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,0,1,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,0,1,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,0,1,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,0,1,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,0,1,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,0,1,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,0,1,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,0,1,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,0,1,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,0,1,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,0,1,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,0,1,972c2fa0-0ca9-40da-a8c1-a06b81bd0bcf,972c2fa0-0ca9-40da-a8c1-a06b81bd0bcf,0,1,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,0,1,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,0,1,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,0,1,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,0,1,29645810-44aa-402c-9561-7819d6f4a7ab,29645810-44aa-402c-9561-7819d6f4a7ab,0,1,46bf4911-5200-44ac-9b4d-eb0089c12e34,46bf4911-5200-44ac-9b4d-eb0089c12e34,0,1,6e1685bd-7269-401c-b36e-def6a36b41d5,6e1685bd-7269-401c-b36e-def6a36b41d5,0,1,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,0,1,e03b6592-b597-4795-a78e-775d4f2258db,e03b6592-b597-4795-a78e-775d4f2258db,0,1,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,0,1,3b207d5f-6584-4cf2-9173-20235484f9f4,3b207d5f-6584-4cf2-9173-20235484f9f4,0,1,878d9efe-b0e7-487f-b8f7-83470c131e09,878d9efe-b0e7-487f-b8f7-83470c131e09,0,1,0f211e73-5be9-4015-93e7-ccf63e793cb6,0f211e73-5be9-4015-93e7-ccf63e793cb6,0,1,6574d8f4-fb97-4a26-b166-711fad63aa07,6574d8f4-fb97-4a26-b166-711fad63aa07,0,1,fb3eddaf-3241-4d59-8314-97a5ae9258c4,fb3eddaf-3241-4d59-8314-97a5ae9258c4,0,1,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,0,1,e8d5533e-2669-44f6-9eed-eaedab666d42,e8d5533e-2669-44f6-9eed-eaedab666d42,0,1,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,0,1,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,0,1,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,0,1,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,0,1,d3bc8211-54d8-47dd-aecf-5da72b65195f,d3bc8211-54d8-47dd-aecf-5da72b65195f,0,1,33f11da8-f670-4ec3-9d40-96fce031c60f,33f11da8-f670-4ec3-9d40-96fce031c60f,0,1,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,0,1,f74c2d41-2433-4bed-8aef-adfeed198252,f74c2d41-2433-4bed-8aef-adfeed198252,0,1,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,0,1,56c9703a-751a-4e6c-81f4-a8756fb040e3,56c9703a-751a-4e6c-81f4-a8756fb040e3,0,1,c3a86eec-1ff5-4392-9904-91a12a2e253a,c3a86eec-1ff5-4392-9904-91a12a2e253a,0,1,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,0,1,f02b7246-dae9-4e15-b4cd-b06133664d34,f02b7246-dae9-4e15-b4cd-b06133664d34,0,1,77f20022-17ce-4e00-8a84-015238bce6f3,77f20022-17ce-4e00-8a84-015238bce6f3,0,1,3734619b-7059-4547-8b97-0b3393389d4d,3734619b-7059-4547-8b97-0b3393389d4d,0,1,a30bf95f-aabd-4da0-8287-61e08f9362fb,a30bf95f-aabd-4da0-8287-61e08f9362fb,0,1,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,0,1,4078867c-2972-47f9-bebd-935a6f1cc667,4078867c-2972-47f9-bebd-935a6f1cc667,0,1,8502fe39-c241-4be5-a313-fd887bbbdfa1,8502fe39-c241-4be5-a313-fd887bbbdfa1,0,1,67a71201-13e5-42a3-902f-fb3a59710dfb,67a71201-13e5-42a3-902f-fb3a59710dfb,0,1,3a79a951-a997-4596-ab62-ba376d67725d,3a79a951-a997-4596-ab62-ba376d67725d,0,1,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,0,1,884c28de-434f-440a-8c63-67e659c097ad,884c28de-434f-440a-8c63-67e659c097ad,0,1,92ead3b5-8c55-4e4d-bd47-009e025b22f8,92ead3b5-8c55-4e4d-bd47-009e025b22f8,0,1,50d8e365-aa58-4b60-8992-01943379d485,50d8e365-aa58-4b60-8992-01943379d485,0,1,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,0,1,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,0,1,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,0,1,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,0,1,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,0,1,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,0,1,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,0,1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,0,1,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,0,1,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,0,1,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,0,1,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,0,1,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,0,1,e61eef89-b3de-4b73-b7d9-af75318093e5,e61eef89-b3de-4b73-b7d9-af75318093e5,0,1,94e68502-adf1-476e-be2f-8418385959fa,94e68502-adf1-476e-be2f-8418385959fa,0,1,bf80ccc5-f907-4e7f-a007-6030c7ba682e,bf80ccc5-f907-4e7f-a007-6030c7ba682e,0,1,a330acd1-bc97-4ef8-8ecb-5604868ca044,a330acd1-bc97-4ef8-8ecb-5604868ca044,0,1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,0,1,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,0,1,8928693b-1933-4e02-8a33-99b6f05b1c57,8928693b-1933-4e02-8a33-99b6f05b1c57,0,1,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,0,1,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,0,1,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,0,1,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,0,1,61f283c7-f887-432b-a2d7-c27483e04317,61f283c7-f887-432b-a2d7-c27483e04317,0,1,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,0,1,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,0,1,079bc65d-da8e-431d-847c-ec46868ca92d,079bc65d-da8e-431d-847c-ec46868ca92d,0,1,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,0,1,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,0,1,a5667633-9264-4dfa-9e26-c45e96e61ae3,a5667633-9264-4dfa-9e26-c45e96e61ae3,0,1,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,0,1,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,0,1,1f169cd2-573f-408d-92e7-3eee7ff4528a,1f169cd2-573f-408d-92e7-3eee7ff4528a,0,1,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,0,1,19ac940e-34e2-4277-987a-53b28dde5910,19ac940e-34e2-4277-987a-53b28dde5910,0,1,3c84b9ac-e67a-4d3e-ad98-b25fada7229e,3c84b9ac-e67a-4d3e-ad98-b25fada7229e,0,1,85cb64b1-ddee-4da6-a14c-7f5fa1a726ff,85cb64b1-ddee-4da6-a14c-7f5fa1a726ff,0,1,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,0,1,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,0,1,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,0,1,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,0,1,cd454738-62dd-4f95-af33-b52750678428,cd454738-62dd-4f95-af33-b52750678428,0,1,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,0,1,e4abafc6-f859-4d96-9818-5b9bf8d66d69,e4abafc6-f859-4d96-9818-5b9bf8d66d69,0,1,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,0,1,ac4e0868-ba49-46b4-8872-d42483a5591f,ac4e0868-ba49-46b4-8872-d42483a5591f,0,1,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,0,1,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0,1,ca4c0299-625a-4b03-be0e-36ffb45c6d08,ca4c0299-625a-4b03-be0e-36ffb45c6d08,0,1,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,0,1,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,0,1,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,0,1,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,0,1,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0,1,b6bd2b39-07ae-48a7-8a5b-f44b5034afa9,b6bd2b39-07ae-48a7-8a5b-f44b5034afa9,0,1,5500d5c6-fdbf-4614-b43b-fabf56e3968c,5500d5c6-fdbf-4614-b43b-fabf56e3968c,0,1,a08eeef7-1c81-4985-8628-6b35ac73e135,a08eeef7-1c81-4985-8628-6b35ac73e135,0,1,c446f732-097a-4197-8384-91a6925c6bdd,c446f732-097a-4197-8384-91a6925c6bdd,0,1,cc33ec52-aed4-4807-90b5-700d307b4f57,cc33ec52-aed4-4807-90b5-700d307b4f57,0,1,6f9ece3d-aeca-4313-9e6a-44e562fc83ff,6f9ece3d-aeca-4313-9e6a-44e562fc83ff,0,1,6b04b6f1-2c9d-4de0-b871-6cc377b13e33,6b04b6f1-2c9d-4de0-b871-6cc377b13e33,0,1,82ea249e-ecba-4916-b9a1-c7e6119b353a,82ea249e-ecba-4916-b9a1-c7e6119b353a,0,1,d5406849-57b3-44f4-8efa-e73523939ae5,d5406849-57b3-44f4-8efa-e73523939ae5,0,1,9ce5f33f-4331-491d-b084-9913c38f4c7d,9ce5f33f-4331-491d-b084-9913c38f4c7d,0,1,0603113a-f2f1-43e6-9838-64c5e98417f0,0603113a-f2f1-43e6-9838-64c5e98417f0,0,1,43055a56-a079-41e2-87eb-723769109bed,43055a56-a079-41e2-87eb-723769109bed,0,1,930f2bc5-417d-4b97-b440-8d5e81e5c896,930f2bc5-417d-4b97-b440-8d5e81e5c896,0,1,c8f487aa-544a-41dc-b7c3-7cf21d2720f2,c8f487aa-544a-41dc-b7c3-7cf21d2720f2,0,1,e506f7d3-2572-4c54-ac98-e40f083ac578,e506f7d3-2572-4c54-ac98-e40f083ac578,0,1,bdf93aa5-86a4-4791-bdb0-172532029b7c,bdf93aa5-86a4-4791-bdb0-172532029b7c,0,1,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,0,1,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,0,1,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,0,1,f480ac52-e2f1-4ed0-a0b1-20a622f77302,f480ac52-e2f1-4ed0-a0b1-20a622f77302,0,1,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,0,1,b9b0fbdc-8fda-46d1-bb3e-561a03604971,b9b0fbdc-8fda-46d1-bb3e-561a03604971,0,1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,0,1,672c2936-9771-4e32-a970-7ac7f12a21e8,672c2936-9771-4e32-a970-7ac7f12a21e8,0,1,c264441d-4805-4968-baa2-37b8970049c7,c264441d-4805-4968-baa2-37b8970049c7,0,1,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,0,1,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,0,1,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,0,1,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,0,1,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,0,1,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,0,1,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,0,1,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,0,1,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,0,1,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,0,1,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,0,1,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,0,1,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,0,1,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,0,1,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,0,1,93fcaa62-2a19-468b-9128-c7930583fbfd,93fcaa62-2a19-468b-9128-c7930583fbfd,0,1,2d885109-4c96-41c0-a996-785bfd793c2d,2d885109-4c96-41c0-a996-785bfd793c2d,0,1,8393971a-96ba-493e-a9d0-a286e8a0750a,8393971a-96ba-493e-a9d0-a286e8a0750a,0,1,9c8ec5e5-afa8-48b1-bf9c-ebaaf0a720db,9c8ec5e5-afa8-48b1-bf9c-ebaaf0a720db,0,1,901897a7-a2b6-40a7-a77d-d1d4c8ce5d28,901897a7-a2b6-40a7-a77d-d1d4c8ce5d28,0,1,e6fe6a65-33e6-4cb3-8acf-b40e7b9bac04,e6fe6a65-33e6-4cb3-8acf-b40e7b9bac04,0,1,c4492ecd-293c-4688-8198-04391c57f312,c4492ecd-293c-4688-8198-04391c57f312,0,1,268afd29-0e5f-4220-ab29-071f3072dbeb,268afd29-0e5f-4220-ab29-071f3072dbeb,0,1,b578b59d-8c86-4494-b27d-db976b0f3d8a,b578b59d-8c86-4494-b27d-db976b0f3d8a,0,1,eeba912a-3676-4528-b216-2b8630ab19c9,eeba912a-3676-4528-b216-2b8630ab19c9,0,1,47ed2f49-e4f2-4058-9ac5-cb3c826e92d8,47ed2f49-e4f2-4058-9ac5-cb3c826e92d8,0,1,471c7746-c607-481e-aaac-659dcbe54d8b,471c7746-c607-481e-aaac-659dcbe54d8b,0,1,3251cc7f-6b61-4814-b7ce-91564128d604,3251cc7f-6b61-4814-b7ce-91564128d604,0,1,185661aa-0553-4a27-b021-a0d96fba92fd,185661aa-0553-4a27-b021-a0d96fba92fd,0,1,59624fa6-74f6-4a5f-86e3-a27018683e6e,59624fa6-74f6-4a5f-86e3-a27018683e6e,0,1,71fa1a55-cf35-4442-bcd5-fdc4f191ae51,71fa1a55-cf35-4442-bcd5-fdc4f191ae51,0,1,93e30c61-c9a1-41a5-b682-23f4d0085a38,93e30c61-c9a1-41a5-b682-23f4d0085a38,0,1,8336cc18-5d3e-477f-9245-17e7e7f0566a,8336cc18-5d3e-477f-9245-17e7e7f0566a,0,1,213219df-49d8-447e-b7f3-fba356b9d461,213219df-49d8-447e-b7f3-fba356b9d461,0,1,b443585d-f129-4ac6-a64c-4c37b1b4385b,b443585d-f129-4ac6-a64c-4c37b1b4385b,0,1,ec1877db-8c03-45a4-a15c-a4de8ae3e86c,ec1877db-8c03-45a4-a15c-a4de8ae3e86c,0,1,e7ef29f9-dfff-402e-b49b-e006b9828519,e7ef29f9-dfff-402e-b49b-e006b9828519,0,1,bfb0be49-5f5c-4ef3-a011-8f8645aa981a,bfb0be49-5f5c-4ef3-a011-8f8645aa981a,0,1,d50613ad-c527-4583-8855-a4bd39c33360,d50613ad-c527-4583-8855-a4bd39c33360,0,1,aaa351b7-475e-4835-a5c5-23f86da8ea51,aaa351b7-475e-4835-a5c5-23f86da8ea51,0,1,5260c027-de8c-4612-9022-d9b492e913c9,5260c027-de8c-4612-9022-d9b492e913c9,0,1,6945660a-84cb-4546-ad3c-b5eda36c7fa6,6945660a-84cb-4546-ad3c-b5eda36c7fa6,0,1,899be218-80f5-46ed-bccf-f9437c91e00b,899be218-80f5-46ed-bccf-f9437c91e00b,0,1,67ff40c2-0954-4187-9eba-bf6360fa3620,67ff40c2-0954-4187-9eba-bf6360fa3620,0,1,19bb53e4-f7c7-475e-9d07-ebc067d62635,19bb53e4-f7c7-475e-9d07-ebc067d62635,0,1,8ed415c6-f93b-45e4-be06-7490d60b91f1,8ed415c6-f93b-45e4-be06-7490d60b91f1,0,1,bd00e705-e1cd-4c50-89e5-4c3391e46e16,bd00e705-e1cd-4c50-89e5-4c3391e46e16,0,1,3dffb8c9-91f0-4527-baa7-06db41d80b46,3dffb8c9-91f0-4527-baa7-06db41d80b46,0,1,ad842d01-80b8-4ebf-9ac3-5d628ec4e321,ad842d01-80b8-4ebf-9ac3-5d628ec4e321,0,1,af5008bb-427d-4cd5-b9e4-8aae24f725ab,af5008bb-427d-4cd5-b9e4-8aae24f725ab,0,1,35ba733b-7ef8-4cbf-8cda-5b8b2ab2c30d,35ba733b-7ef8-4cbf-8cda-5b8b2ab2c30d,0,1,5b94475a-cea6-4887-9882-2da8957425d0,5b94475a-cea6-4887-9882-2da8957425d0,0,1,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,0,1,83ae9b22-20ff-4e94-9282-19daf2274328,83ae9b22-20ff-4e94-9282-19daf2274328,0,1,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,0,1,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,0,1,a92b2b70-7e69-49d1-b921-c9d1b0718f94,a92b2b70-7e69-49d1-b921-c9d1b0718f94,0,1,16aafed9-ac0d-424f-93e5-01d77dcb7796,16aafed9-ac0d-424f-93e5-01d77dcb7796,0,1,ae5d7329-4cdb-4d11-ab00-4dc62133941e,ae5d7329-4cdb-4d11-ab00-4dc62133941e,0,1,52b39a5b-6a9d-4341-a040-3eae413b3f9d,52b39a5b-6a9d-4341-a040-3eae413b3f9d,0,1,15372e48-d5ed-4f13-ad1c-539fad0f9b28,15372e48-d5ed-4f13-ad1c-539fad0f9b28,0,1,19f690a3-d27b-43c1-94b7-585fc628da05,19f690a3-d27b-43c1-94b7-585fc628da05,0,1,d375fac5-098c-42b5-a0bd-9a4ae7516ada,d375fac5-098c-42b5-a0bd-9a4ae7516ada,0,1,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,0,1,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,0,1,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,0,1,436162a0-263f-4126-aa3a-7508505cc4a8,436162a0-263f-4126-aa3a-7508505cc4a8,0,1,9e4fbc61-8736-435d-bdd4-eb3bbaa14b92,9e4fbc61-8736-435d-bdd4-eb3bbaa14b92,0,1,0b750d40-1ee5-414c-b8a5-244c666787ae,0b750d40-1ee5-414c-b8a5-244c666787ae,0,1,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,0,1,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,0,1,0ff797f5-007d-4379-aa14-5d3f5babeb84,0ff797f5-007d-4379-aa14-5d3f5babeb84,0,1,767176d4-4fe9-4de5-9246-59b7fec09c53,767176d4-4fe9-4de5-9246-59b7fec09c53,0,1,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,0,1,8e587969-0263-4789-a501-a6c2e102f88e,8e587969-0263-4789-a501-a6c2e102f88e,0,1,f26bfc01-7d8a-43a7-b869-c2deb18218e5,f26bfc01-7d8a-43a7-b869-c2deb18218e5,0,1,8c72a0b2-20cb-43ff-b010-25256aa8011d,8c72a0b2-20cb-43ff-b010-25256aa8011d,0,1,a913b023-0ec5-4c60-880d-2f8ddad2d5ce,a913b023-0ec5-4c60-880d-2f8ddad2d5ce,0,1,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,0,1,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,0,1,afe96dc2-7840-4010-a7d4-1eeac36f0fd3,afe96dc2-7840-4010-a7d4-1eeac36f0fd3,0,1,02ec2b85-3cc8-45bb-911f-c5f7c8668fd5,02ec2b85-3cc8-45bb-911f-c5f7c8668fd5,0,1,a997a430-3ea8-4fde-9f53-7b507a04c215,a997a430-3ea8-4fde-9f53-7b507a04c215,0,1,f648e19d-026b-4fa7-8e70-1866b27b94f8,f648e19d-026b-4fa7-8e70-1866b27b94f8,0,1,a3b47ee8-b7b9-4bdf-afa8-025447ea9d5b,a3b47ee8-b7b9-4bdf-afa8-025447ea9d5b,0,1,36475bf5-5da6-48ad-8077-4de4426f7e10,36475bf5-5da6-48ad-8077-4de4426f7e10,0,1,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,0,1,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,0,1,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,0,1,ecbe625a-55eb-437a-8dee-33fb034d4c0d,ecbe625a-55eb-437a-8dee-33fb034d4c0d,0,1,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,0,1,84796b00-79db-42ba-94d0-5bf543e09cd6,84796b00-79db-42ba-94d0-5bf543e09cd6,0,1,e85695f1-ec94-42ce-8f80-2bda4c90685b,e85695f1-ec94-42ce-8f80-2bda4c90685b,0,1,6f08cc54-d4b1-4c6f-96dc-e0b6891c81b6,6f08cc54-d4b1-4c6f-96dc-e0b6891c81b6,0,1,948b10b3-0d7c-4dca-8816-75eb86e7881b,948b10b3-0d7c-4dca-8816-75eb86e7881b,0,1,9de91b5a-98e4-414b-b650-b669b0159b49,9de91b5a-98e4-414b-b650-b669b0159b49,0,1,840dc727-288a-4bf2-8b1a-47629d28229c,840dc727-288a-4bf2-8b1a-47629d28229c,0,1,314ac8ca-8845-40c2-b844-91beb05fb601,314ac8ca-8845-40c2-b844-91beb05fb601,0,1,db15717d-1b6a-42fd-9b8f-959e1d5841e9,db15717d-1b6a-42fd-9b8f-959e1d5841e9,0,1,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,0,1,37ae1946-9436-47ef-8b8c-17ed0a24971c,37ae1946-9436-47ef-8b8c-17ed0a24971c,0,1,0d3cd7ca-089f-4858-a4a6-0ed373aa77bf,0d3cd7ca-089f-4858-a4a6-0ed373aa77bf,0,1,d844d861-fbe9-4391-89e3-00e505b33b33,d844d861-fbe9-4391-89e3-00e505b33b33,0,1,495ddb5f-f75d-46c9-b134-e925c814b890,495ddb5f-f75d-46c9-b134-e925c814b890,0,1,fb6f92a6-fc56-48d4-b7ad-b4daaea79fe2,fb6f92a6-fc56-48d4-b7ad-b4daaea79fe2,0,1,0a4ded35-1cfa-4e53-91c7-139ee0b94ade,0a4ded35-1cfa-4e53-91c7-139ee0b94ade,0,1,c0688817-fd73-4ead-b9dd-ec966780a2c2,c0688817-fd73-4ead-b9dd-ec966780a2c2,0,1,b1fbfbfe-766f-4018-9491-507748193808,b1fbfbfe-766f-4018-9491-507748193808,0,1,65d9f3a7-6258-49f3-8252-0a60e2735ff3,65d9f3a7-6258-49f3-8252-0a60e2735ff3,0,1,a0ba7e86-b894-4a63-8687-bb2a840fe1ab,a0ba7e86-b894-4a63-8687-bb2a840fe1ab,0,1,e55dfadb-8e12-4808-ad90-e891a4644548,e55dfadb-8e12-4808-ad90-e891a4644548,0,1,a1155588-882f-430d-85a6-19558b5b7256,a1155588-882f-430d-85a6-19558b5b7256,0,1,a792b3dc-ac80-492b-bd94-83eb0438ba9f,a792b3dc-ac80-492b-bd94-83eb0438ba9f,0,1,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,0,1,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,0,1,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,0,1,b9ba3ce3-9059-4135-9d31-725f01907431,b9ba3ce3-9059-4135-9d31-725f01907431,0,1,f637a14d-08ed-4c62-a873-ca36cdcd1e88,f637a14d-08ed-4c62-a873-ca36cdcd1e88,0,1,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,0,1,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,0,1,fc9fc58f-c888-41f0-9f57-70748b21706e,fc9fc58f-c888-41f0-9f57-70748b21706e,0,1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,0,1,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,0,1,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,0,1,33596560-3d45-4d3e-b6ec-1c22162110ad,33596560-3d45-4d3e-b6ec-1c22162110ad,0,1,d3e82a06-daae-4f4d-b3f8-45a406e31664,d3e82a06-daae-4f4d-b3f8-45a406e31664,0,1,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,0,1,ac6a184d-1247-4b54-a023-f0d16daa5fe9,ac6a184d-1247-4b54-a023-f0d16daa5fe9,0,1,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,0,1,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,0,1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,0,1,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,0,1,8bf73614-81a4-4702-88b9-3c6f2594d204,8bf73614-81a4-4702-88b9-3c6f2594d204,0,1,b8d4410b-f626-41b8-87c8-67102256bae2,b8d4410b-f626-41b8-87c8-67102256bae2,0,1,484eeb5f-12af-4139-a081-4dcac067a712,484eeb5f-12af-4139-a081-4dcac067a712,0,1,73b27233-e7ce-4386-a182-fc934df0e9a0,73b27233-e7ce-4386-a182-fc934df0e9a0,0,1,39fce130-be22-42d9-8bcd-b162ae00fc7a,39fce130-be22-42d9-8bcd-b162ae00fc7a,0,1,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,0,1,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,0,1,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,0,1,1528b799-1c0f-4244-85e8-e738b827934a,1528b799-1c0f-4244-85e8-e738b827934a,0,1,45d79e4d-8c2a-432b-abb8-fb9046abea40,45d79e4d-8c2a-432b-abb8-fb9046abea40,0,1,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,0,1,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,0,1,256618cc-0956-4cda-9691-e4ced68a791f,256618cc-0956-4cda-9691-e4ced68a791f,0,1,f54fde64-ca9e-49cc-8dc9-59ecaf4625a8,f54fde64-ca9e-49cc-8dc9-59ecaf4625a8,0,1,667de710-cee5-4a97-8434-641d199f3b68,667de710-cee5-4a97-8434-641d199f3b68,0,1,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,0,1,f6e85eeb-d81b-4526-9a33-ab77bd447236,f6e85eeb-d81b-4526-9a33-ab77bd447236,0,1,470e37fe-d149-4007-b397-12fc84f93041,470e37fe-d149-4007-b397-12fc84f93041,0,1,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,0,1,6c205eae-9113-46c1-a245-25d29173646e,6c205eae-9113-46c1-a245-25d29173646e,0,1,8b355fa6-a9c3-469c-9b2f-42674f46402f,8b355fa6-a9c3-469c-9b2f-42674f46402f,0,1,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,0,1,1a354069-07ea-40e0-bbac-e1b6232750c2,1a354069-07ea-40e0-bbac-e1b6232750c2,0,1,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,0,1,6fe57ea6-fe5e-48b1-bb31-5d42e4c2c6c7,6fe57ea6-fe5e-48b1-bb31-5d42e4c2c6c7,0,1,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,0,1,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,0,1,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,0,1,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,0,1,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,0,1,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,0,1,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,0,1,60cd2f20-17cf-4132-b08e-87cf429704b7,60cd2f20-17cf-4132-b08e-87cf429704b7,0,1,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,0,1,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,0,1,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,0,1,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,0,1,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,0,1,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,0,1,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,0,1,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,0,1,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,0,1,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,0,1,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,0,1,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,0,1,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,0,1,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,0,1,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,0,1,6d002aef-00c9-4069-80df-153151218831,6d002aef-00c9-4069-80df-153151218831,0,1,4fec3a6c-5a99-4763-aa07-d5de8712559e,4fec3a6c-5a99-4763-aa07-d5de8712559e,0,1,968a1202-d271-43e0-bfd4-d38e49ceadd4,968a1202-d271-43e0-bfd4-d38e49ceadd4,0,1,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,0,1,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,0,1,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,0,1,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,0,1,468f6d26-7a4b-49fe-9ec9-208794a6dff7,468f6d26-7a4b-49fe-9ec9-208794a6dff7,0,1,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0,1,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,0,1,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,0,1,7601fa7e-079a-4347-abea-e161b2d00783,7601fa7e-079a-4347-abea-e161b2d00783,0,1,ee84cb40-f82d-4558-91be-229d68ad9f4a,ee84cb40-f82d-4558-91be-229d68ad9f4a,0,1,101a7eff-9556-4165-879a-a7c8a852e236,101a7eff-9556-4165-879a-a7c8a852e236,0,1,01775932-3603-4efc-9235-abdb97490dea,01775932-3603-4efc-9235-abdb97490dea,0,1,7637844b-4059-4f8a-8436-b4f4e8cb4f74,7637844b-4059-4f8a-8436-b4f4e8cb4f74,0,1,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,0,1,0ee5b788-61dc-464b-86da-f985df7704b6,0ee5b788-61dc-464b-86da-f985df7704b6,0,1,2375c6a8-9799-4b7c-a48d-091a90c67693,2375c6a8-9799-4b7c-a48d-091a90c67693,0,1,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,0,1,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,0,1,63c6522f-be04-422a-b4f4-0f55f58b09a8,63c6522f-be04-422a-b4f4-0f55f58b09a8,0,1,be919dc1-a377-43e1-82e6-ce946cabdd55,be919dc1-a377-43e1-82e6-ce946cabdd55,0,1,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,0,1,9ded532e-9e60-4895-a4c5-4ea6697aa83c,9ded532e-9e60-4895-a4c5-4ea6697aa83c,0,1,106c5159-ffc7-4059-b3e3-acf74326a44f,106c5159-ffc7-4059-b3e3-acf74326a44f,0,1,d39fd717-1a69-4fd3-889e-4fa9abefea1c,d39fd717-1a69-4fd3-889e-4fa9abefea1c,0,1,5b85e6df-7493-4201-97ad-2aea14de6006,5b85e6df-7493-4201-97ad-2aea14de6006,0,1,9984f6e6-1717-47c6-9fde-890afe73e652,9984f6e6-1717-47c6-9fde-890afe73e652,0,1,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,0,1,71ce486e-8b21-43d1-ad69-122ad83c8501,71ce486e-8b21-43d1-ad69-122ad83c8501,0,1,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,0,1,4840753b-e2e1-4e67-b35f-2f5eab7754f5,4840753b-e2e1-4e67-b35f-2f5eab7754f5,0,1,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,0,1,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,0,1,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,0,1,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,0,1,5d726fa3-bde0-4d97-a577-415857bbb5c1,5d726fa3-bde0-4d97-a577-415857bbb5c1,0,1,49068231-202c-4ac6-a39a-69207cb597dd,49068231-202c-4ac6-a39a-69207cb597dd,0,1,5a470575-e012-42ad-9ad7-53930a8e843f,5a470575-e012-42ad-9ad7-53930a8e843f,0,1,5872d4ed-6503-422d-bcf9-63a8df3e777d,5872d4ed-6503-422d-bcf9-63a8df3e777d,0,1,e21cda29-2579-485e-a207-20b76f719c80,e21cda29-2579-485e-a207-20b76f719c80,0,1,1b232a57-2833-42c6-b318-38dae2af1ab2,1b232a57-2833-42c6-b318-38dae2af1ab2,0,1,007ade8c-b102-408b-b877-b531e046560b,007ade8c-b102-408b-b877-b531e046560b,0,1,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,0,1,eb69c41a-392d-43bb-9b67-a0adcb651b1e,eb69c41a-392d-43bb-9b67-a0adcb651b1e,0,1,93b01c88-48a2-4753-b443-0e9892395a8f,93b01c88-48a2-4753-b443-0e9892395a8f,0,1,0b7f8e05-bb34-47cc-9775-04362e814316,0b7f8e05-bb34-47cc-9775-04362e814316,0,1,e71e0297-3709-4247-933e-18a6350cbf39,e71e0297-3709-4247-933e-18a6350cbf39,0,1,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0,1,602dac6f-abe6-407a-92d3-7f1613e5dda6,602dac6f-abe6-407a-92d3-7f1613e5dda6,0,1,df6417d1-c722-4a87-a543-5d2c31795b20,df6417d1-c722-4a87-a543-5d2c31795b20,0,1,526a85c9-3a8d-4044-adb9-fd0689c70601,526a85c9-3a8d-4044-adb9-fd0689c70601,0,1,c4203772-580c-4db1-9bde-8925faa90688,c4203772-580c-4db1-9bde-8925faa90688,0,1,add0b22d-ff5a-41f7-88a1-ef34880e50c9,add0b22d-ff5a-41f7-88a1-ef34880e50c9,0,1,7dc10935-69aa-4f2b-8b01-798dbbaa6cc6,7dc10935-69aa-4f2b-8b01-798dbbaa6cc6,0,1,9c15b35b-d658-4e52-a441-3b79294d65eb,9c15b35b-d658-4e52-a441-3b79294d65eb,0,1,d5fdac2a-e3aa-4859-8485-0cf114748c87,d5fdac2a-e3aa-4859-8485-0cf114748c87,0,1,a3582d0c-6a63-442e-8422-83f251df0ed9,a3582d0c-6a63-442e-8422-83f251df0ed9,0,1,9aae5d2a-81b7-4f1c-8b65-b3e4a8a9bc4d,9aae5d2a-81b7-4f1c-8b65-b3e4a8a9bc4d,0,1,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,0,1,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,0,1,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,0,1,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,0,1,707e64f3-ad8b-470a-aa4f-57fddecc2159,707e64f3-ad8b-470a-aa4f-57fddecc2159,0,1,682da7d7-6e27-4133-90fc-a445c156f908,682da7d7-6e27-4133-90fc-a445c156f908,0,1,64751704-f39d-4859-adc6-8168897d6aec,64751704-f39d-4859-adc6-8168897d6aec,0,1,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,0,1,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,0,1,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,0,1,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,0,1,f0dca5f2-1479-42bf-b895-9abd345522f5,f0dca5f2-1479-42bf-b895-9abd345522f5,0,1,8eaa91e0-88d9-4e4e-b2d6-752696bafadf,8eaa91e0-88d9-4e4e-b2d6-752696bafadf,0,1,93d6dda2-dd7c-42d1-b9bc-284929931585,93d6dda2-dd7c-42d1-b9bc-284929931585,0,1,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,0,1,abc44046-a839-4c4a-8161-ecba29abc27d,abc44046-a839-4c4a-8161-ecba29abc27d,0,1,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,0,1,12dd81dd-31f5-47f2-a163-ea6c670299c5,12dd81dd-31f5-47f2-a163-ea6c670299c5,0,1,1b9e77bf-639a-4e81-a0fd-4f2bd66feeba,1b9e77bf-639a-4e81-a0fd-4f2bd66feeba,0,1,8238c710-09ff-473e-b0ed-40b31bfccab8,8238c710-09ff-473e-b0ed-40b31bfccab8,0,1,fe59f9ba-11e3-41ba-ac6f-4b4e3dbf35ae,fe59f9ba-11e3-41ba-ac6f-4b4e3dbf35ae,0,1,15845f89-0f9e-4a93-b7e8-ef101694b1b8,15845f89-0f9e-4a93-b7e8-ef101694b1b8,0,1,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,0,1,60f8daf5-06c2-4db6-8fea-5cbb72130113,60f8daf5-06c2-4db6-8fea-5cbb72130113,0,1,e389b86a-7a48-4b31-b5cb-27b3d7dfed82,e389b86a-7a48-4b31-b5cb-27b3d7dfed82,0,1,91e7c98e-fadf-4c08-bd76-1e4e4d140265,91e7c98e-fadf-4c08-bd76-1e4e4d140265,0,1,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,0,1,8247a93d-c2d3-4c9b-a442-619240d35113,8247a93d-c2d3-4c9b-a442-619240d35113,0,1,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,0,1,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,0,1,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,0,1,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,0,1,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,0,1,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,0,1,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,0,1,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,0,1,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,0,1,a388ed70-a68d-4713-a280-881315351f07,a388ed70-a68d-4713-a280-881315351f07,0,1,fd9e84c9-2322-4aa7-b5fe-31d0c8f373c7,fd9e84c9-2322-4aa7-b5fe-31d0c8f373c7,0,1,2c81edc8-02b9-42dd-be4d-e7ad595421a0,2c81edc8-02b9-42dd-be4d-e7ad595421a0,0,1,83cb38ff-1174-449f-b8ce-44d5e064f2df,83cb38ff-1174-449f-b8ce-44d5e064f2df,0,1,d11b51ac-708a-4ee1-b73e-ae62e162101e,d11b51ac-708a-4ee1-b73e-ae62e162101e,0,1,17a50950-6091-4306-9f15-2a621a29c1a0,17a50950-6091-4306-9f15-2a621a29c1a0,0,1,32012b27-1b43-49be-b9af-df0c877e7a4c,32012b27-1b43-49be-b9af-df0c877e7a4c,0,1,e97d5152-9e58-4a91-a691-b4d358f1c89d,e97d5152-9e58-4a91-a691-b4d358f1c89d,0,1,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,0,1,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,0,1,296c478b-4103-46cb-9d14-97f59034ffd4,296c478b-4103-46cb-9d14-97f59034ffd4,0,1,fb918a68-f86d-46c0-9078-61d2b32b5aef,fb918a68-f86d-46c0-9078-61d2b32b5aef,0,1,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,0,1,1ddfc773-4f3c-4764-978e-585aab4666de,1ddfc773-4f3c-4764-978e-585aab4666de,0,1,e424d122-1dbb-4545-975c-177997129f2e,e424d122-1dbb-4545-975c-177997129f2e,0,1,c83bc626-dfdd-4451-92b0-b53eed40f534,c83bc626-dfdd-4451-92b0-b53eed40f534,0,1,7b9b1d11-4f78-4113-8fca-1a3a30953aef,7b9b1d11-4f78-4113-8fca-1a3a30953aef,0,1,7f84cb85-c3e4-4b53-b829-3b1e216f978a,7f84cb85-c3e4-4b53-b829-3b1e216f978a,0,1,7e621ecc-7d2b-42bf-a502-f8e59de56b63,7e621ecc-7d2b-42bf-a502-f8e59de56b63,0,1,798fd445-d02e-4e97-890a-0283f33317cf,798fd445-d02e-4e97-890a-0283f33317cf,0,1,095583ca-010d-43ad-8c7a-8938fa4cb761,095583ca-010d-43ad-8c7a-8938fa4cb761,0,1,178d210c-e847-4805-a8d4-31acdf4983af,178d210c-e847-4805-a8d4-31acdf4983af,0,1,aa214d9f-23b1-4996-8a43-9010dceeb53d,aa214d9f-23b1-4996-8a43-9010dceeb53d,0,1,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,0,1,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,0,1,d9d103bd-1dd6-48a9-8869-6c8485705393,d9d103bd-1dd6-48a9-8869-6c8485705393,0,1,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,0,1,ff0e8487-bdbf-4b21-877e-00008c81bc09,ff0e8487-bdbf-4b21-877e-00008c81bc09,0,1,39c9f8ac-56a0-4057-8359-7228bf97184a,39c9f8ac-56a0-4057-8359-7228bf97184a,0,1,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,0,1,2c0dd892-1d3e-4497-850b-080bdb9c59d8,2c0dd892-1d3e-4497-850b-080bdb9c59d8,0,1,3b727d49-c9ed-4d9e-af61-c13b9a170c75,3b727d49-c9ed-4d9e-af61-c13b9a170c75,0,1,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1b264744-bdcd-4c5c-932b-0ac4b990dd78,0,1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,0,1,37bde288-8e02-4127-bd80-de8ae7590a14,37bde288-8e02-4127-bd80-de8ae7590a14,0,1,a9b8e517-78cd-4428-b2fc-9e16af0069d7,a9b8e517-78cd-4428-b2fc-9e16af0069d7,0,1,5c592024-c009-4674-bbb8-283669e673ef,5c592024-c009-4674-bbb8-283669e673ef,0,1,e76f16b9-77a0-4033-90d0-6e04e4494747,e76f16b9-77a0-4033-90d0-6e04e4494747,0,1,cfb221fc-8639-4e15-9a78-f7837d657a99,cfb221fc-8639-4e15-9a78-f7837d657a99,0,1,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,0,1,022147c1-1ebe-4c8d-b367-4c47115b101d,022147c1-1ebe-4c8d-b367-4c47115b101d,0,1,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,0,1,fca6b230-a38e-4791-9cc5-3d215f79dc6f,fca6b230-a38e-4791-9cc5-3d215f79dc6f,0,1,04e87de4-940a-4533-8c81-8f145b201dc0,04e87de4-940a-4533-8c81-8f145b201dc0,0,1,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,0,1,fa488af9-a5ec-47d8-8661-fa5058a60a6b,fa488af9-a5ec-47d8-8661-fa5058a60a6b,0,1,97cc84c6-3565-474c-a028-83acb5390446,97cc84c6-3565-474c-a028-83acb5390446,0,1,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,0,1,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,0,1,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,0,1,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,0,1,b366d7eb-626c-4c0c-b4cc-c392763e6e94,b366d7eb-626c-4c0c-b4cc-c392763e6e94,0,1,4c7e24aa-726a-4595-82ad-ef1e525b14fa,4c7e24aa-726a-4595-82ad-ef1e525b14fa,0,1,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,0,1,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,0,1,e849e46c-2ce6-427b-92bc-06d7997f59bf,e849e46c-2ce6-427b-92bc-06d7997f59bf,0,1,5a971dc0-28bf-4426-9426-9f456aea080a,5a971dc0-28bf-4426-9426-9f456aea080a,0,1,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,0,1,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,0,1,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,0,1,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,0,1,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,0,1,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,0,1,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,0,1,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,0,1,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,0,1,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,0,1,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,0,1,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,0,1,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,0,1,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,0,1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,0,1,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,0,1,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,0,1,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,0,1,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,0,1,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,0,1,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,0,1,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,0,1,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,0,1,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,0,1,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,0,1,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,0,1,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,0,1,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,0,1,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,0,1,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,0,1,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,0,1,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,0,1,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,0,1,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,0,1,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,0,1,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,0,1,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,0,1,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,0,1,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,0,1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,0,1,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,0,1,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,0,1,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,0,1,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,0,1,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,0,1,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,0,1,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,0,1,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,0,1,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,0,1,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,0,1,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,0,1,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,0,1,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,0,1,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,0,1,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,0,1,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,0,1,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,0,1,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,0,1,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,0,1,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,0,1,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,0,1,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,0,1,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,0,1,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,0,1,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,0,1,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,0,1,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,0,1,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,0,1,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,0,1,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,0,1,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,0,1,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,0,1,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,0,1,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,0,1,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,0,1,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,0,1,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,0,1,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,0,1,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,0,1,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,0,1,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,0,1,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,0,1,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,0,1,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,0,1,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,0,1,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,0,1,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,0,1,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,0,1,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,0,1,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,0,1,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,0,1,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,0,1,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,0,1,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,0,1,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,0,1,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,0,1,506bf43b-f7df-4b42-b614-e5925b45b5e9,506bf43b-f7df-4b42-b614-e5925b45b5e9,0,1,58570514-a2cf-4e09-ba7a-d9efd8178269,58570514-a2cf-4e09-ba7a-d9efd8178269,0,1,c23aa057-42f4-4167-9224-693e904598c6,c23aa057-42f4-4167-9224-693e904598c6,0,1,e449f91b-58c3-4d4b-a9f0-6870539afff2,e449f91b-58c3-4d4b-a9f0-6870539afff2,0,1,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,0,1,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,0,1,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0,1,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,0,1,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,0,1,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,0,1,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,0,1,337bd150-beaa-44e6-b336-359e23f8babe,337bd150-beaa-44e6-b336-359e23f8babe,0,1,8e755ce0-c571-4ed5-b0bb-9470edcb7c73,8e755ce0-c571-4ed5-b0bb-9470edcb7c73,0,1,02e1c293-7302-4751-a248-4bbeed9cbad5,02e1c293-7302-4751-a248-4bbeed9cbad5,0,1,3a111e0d-6466-46fd-95a2-1798b6e51ba0,3a111e0d-6466-46fd-95a2-1798b6e51ba0,0,1,645edcb0-e358-4d32-a9a9-9534af0398ca,645edcb0-e358-4d32-a9a9-9534af0398ca,0,1,efa1b4e5-d16c-4921-a48a-fe700e39dc71,efa1b4e5-d16c-4921-a48a-fe700e39dc71,0,1,e93402db-e7dd-465e-8c62-2a41efd811b8,e93402db-e7dd-465e-8c62-2a41efd811b8,0,1,e0157f72-a362-4b9f-a272-68ca8078b91c,e0157f72-a362-4b9f-a272-68ca8078b91c,0,1,422155c7-1640-48c4-bb21-36595b405c66,422155c7-1640-48c4-bb21-36595b405c66,0,1,16d37b5a-88db-4787-b2de-fb50da0ca94b,16d37b5a-88db-4787-b2de-fb50da0ca94b,0,1,f653bcbf-5659-4605-9bb9-3737f19e79dd,f653bcbf-5659-4605-9bb9-3737f19e79dd,0,1,8b980868-fe63-49ff-ba3d-4c29732e1b90,8b980868-fe63-49ff-ba3d-4c29732e1b90,0,1,54668731-4963-4ec3-b188-9feacaefa182,54668731-4963-4ec3-b188-9feacaefa182,0,1,3702135e-5380-4ca6-82f5-63eff1b043e9,3702135e-5380-4ca6-82f5-63eff1b043e9,0,1,29b2104b-fd02-4d51-951f-51ea213b8ebd,29b2104b-fd02-4d51-951f-51ea213b8ebd,0,1,a9362ac4-85ee-4214-80c1-048fab769885,a9362ac4-85ee-4214-80c1-048fab769885,0,1,ba5c945e-554f-45a2-a2de-3157b2d7e931,ba5c945e-554f-45a2-a2de-3157b2d7e931,0,1,f7085f33-f122-4443-a3f5-4e765300175e,f7085f33-f122-4443-a3f5-4e765300175e,0,1,b7e4c512-b856-4679-a025-5f0f28918593,b7e4c512-b856-4679-a025-5f0f28918593,0,1,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,0,1,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,0,1,a4e89d2a-d6f7-4966-ac3c-57f1ef1d1a3a,a4e89d2a-d6f7-4966-ac3c-57f1ef1d1a3a,0,1,20f1114a-0b98-464f-aed8-80ce706b808e,20f1114a-0b98-464f-aed8-80ce706b808e,0,1,988b05ae-987a-4433-b446-bcc7bf5d9ea4,988b05ae-987a-4433-b446-bcc7bf5d9ea4,0,1,07e3de4e-28d9-48dc-9253-a2c39c34f827,07e3de4e-28d9-48dc-9253-a2c39c34f827,0,1,12ab57d3-ba96-46e9-86ef-2f3ba76fd5cb,12ab57d3-ba96-46e9-86ef-2f3ba76fd5cb,0,1,241db5c5-e3bc-4db8-bc88-39db84bb60e9,241db5c5-e3bc-4db8-bc88-39db84bb60e9,0,1,68e4f9d0-a5ed-42f9-8eb2-1f5a8d3894e8,68e4f9d0-a5ed-42f9-8eb2-1f5a8d3894e8,0,1,c147916d-1fb6-473d-bde0-8dd528dde8eb,c147916d-1fb6-473d-bde0-8dd528dde8eb,0,1,00359e00-aba0-4afb-8b58-2e1247dbe04f,00359e00-aba0-4afb-8b58-2e1247dbe04f,0,1,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,0,1,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0,1,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0,1,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,0,1,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,0,1,81dd61e5-fe02-4272-a525-affda9b606ca,81dd61e5-fe02-4272-a525-affda9b606ca,0,1,8de7b423-b7d1-46fe-b1dc-fb936736b864,8de7b423-b7d1-46fe-b1dc-fb936736b864,0,1,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0,1,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,0,1,80c23bf0-cef0-4d07-a017-d90635f8041d,80c23bf0-cef0-4d07-a017-d90635f8041d,0,1,47a24216-3299-470b-a18c-d8c1258fff24,47a24216-3299-470b-a18c-d8c1258fff24,0,1,72dcfd46-491e-4f88-a0ea-57919f8fbdea,72dcfd46-491e-4f88-a0ea-57919f8fbdea,0,1,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,0,1,f9161bc3-9a1c-4870-8681-8e97d8ce838a,f9161bc3-9a1c-4870-8681-8e97d8ce838a,0,1,a75ed1c8-20c2-49a8-a730-22237ef91366,a75ed1c8-20c2-49a8-a730-22237ef91366,0,1,1c0ebdfd-1913-48fe-b80a-10c30201129b,1c0ebdfd-1913-48fe-b80a-10c30201129b,0,1,22ad3db7-1ad3-4868-8598-b0b90db3fa1f,22ad3db7-1ad3-4868-8598-b0b90db3fa1f,0,1,14025e38-09af-43b2-a49b-403e398a28ea,14025e38-09af-43b2-a49b-403e398a28ea,0,1,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,0,1,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,0,1,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,0,1,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,0,1,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,0,1,7f90681d-6534-40ee-bbb7-5356c0ed9de2,7f90681d-6534-40ee-bbb7-5356c0ed9de2,0,1,d1aca4be-1e1e-4bbd-b0a6-a68bc7c8c586,d1aca4be-1e1e-4bbd-b0a6-a68bc7c8c586,0,1,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,0,1,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,0,1,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,0,1,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,0,1,ec1755ed-d203-4548-9f1d-dd62ce331ecf,ec1755ed-d203-4548-9f1d-dd62ce331ecf,0,1,8f17ec3f-6d62-46b8-baef-b20430e948ce,8f17ec3f-6d62-46b8-baef-b20430e948ce,0,1,ea1298d0-9396-4a50-b83e-24064e8dd99d,ea1298d0-9396-4a50-b83e-24064e8dd99d,0,1,038dbb00-e4c6-4e64-b861-3a0764f54ab3,038dbb00-e4c6-4e64-b861-3a0764f54ab3,0,1,1c291f7d-a493-4297-8aaa-912896800066,1c291f7d-a493-4297-8aaa-912896800066,0,1,69149801-a825-4ed2-b077-c26660dff271,69149801-a825-4ed2-b077-c26660dff271,0,1,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,0,1,518ab687-b84a-40c8-8547-aee4257c1b71,518ab687-b84a-40c8-8547-aee4257c1b71,0,1,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,0,1,7732ef07-16eb-46a0-9645-7de95c5482af,7732ef07-16eb-46a0-9645-7de95c5482af,0,1,75dac536-b316-4b04-a57b-03656c678bec,75dac536-b316-4b04-a57b-03656c678bec,0,1,a07d6c85-159d-4d09-b117-561a1e20329f,a07d6c85-159d-4d09-b117-561a1e20329f,0,1,8a2f9733-4f83-41f2-9d74-dca7161a4b41,8a2f9733-4f83-41f2-9d74-dca7161a4b41,0,1,fbd2d900-1e0d-48f3-9793-0186ee49915c,fbd2d900-1e0d-48f3-9793-0186ee49915c,0,1,d59c2725-5d98-495e-9f86-f5d38dbfad90,d59c2725-5d98-495e-9f86-f5d38dbfad90,0,1,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,0,1,0ba68198-983d-409b-be27-96f1572b3f12,0ba68198-983d-409b-be27-96f1572b3f12,0,1,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,0,1,decb27a8-7dd3-4601-a694-30429e638b39,decb27a8-7dd3-4601-a694-30429e638b39,0,1,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,0,1,d7a128e4-f31f-4b09-8424-e816ab59d5c3,d7a128e4-f31f-4b09-8424-e816ab59d5c3,0,1,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0,1,aa9513b4-f575-4030-a7f9-ac09aa319e98,aa9513b4-f575-4030-a7f9-ac09aa319e98,0,1,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,0,1,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,0,1,d03f66b1-48a3-434b-bb58-9fd53c183514,d03f66b1-48a3-434b-bb58-9fd53c183514,0,1,a469e55e-d7ca-4c27-b350-fafe7364c18f,a469e55e-d7ca-4c27-b350-fafe7364c18f,0,1,1a4991f8-7832-4ca9-8809-88a97de88749,1a4991f8-7832-4ca9-8809-88a97de88749,0,1,4f44c1c0-0480-415e-8058-41b28f2f43a0,4f44c1c0-0480-415e-8058-41b28f2f43a0,0,1,3b708ec7-6543-40ff-8ea2-16d4ddb7d56f,3b708ec7-6543-40ff-8ea2-16d4ddb7d56f,0,1,433e502d-ab5c-4e8e-a7c0-0fde1aa6f767,433e502d-ab5c-4e8e-a7c0-0fde1aa6f767,0,1,6bd65f02-9531-4dd4-bd4a-4132aa3c4787,6bd65f02-9531-4dd4-bd4a-4132aa3c4787,0,1,5d9863e6-aab7-4808-a516-8bc42dae5d01,5d9863e6-aab7-4808-a516-8bc42dae5d01,0,1,a2910bb8-fdd2-480c-8ae2-78661d7d18e0,a2910bb8-fdd2-480c-8ae2-78661d7d18e0,0,1,218302fa-674d-45e1-a7e2-2cce2d011342,218302fa-674d-45e1-a7e2-2cce2d011342,0,1,70264a0a-95c5-426f-a1bf-0f57b86d4030,70264a0a-95c5-426f-a1bf-0f57b86d4030,0,1,ba3ba1ac-e7c6-4bab-9771-4ef522011c52,ba3ba1ac-e7c6-4bab-9771-4ef522011c52,0,1,3291428e-6727-43cc-a1f8-c62f90320e90,3291428e-6727-43cc-a1f8-c62f90320e90,0,1,d867720c-c937-4689-b241-0afda05ef993,d867720c-c937-4689-b241-0afda05ef993,0,1,1390da8f-bac6-44ee-8413-1438f1f66074,1390da8f-bac6-44ee-8413-1438f1f66074,0,1,9616956d-a537-44fd-9d3f-5071fb5f4883,9616956d-a537-44fd-9d3f-5071fb5f4883,0,1,4ad1eed9-89ff-4086-b0ff-4eadcebcdce9,4ad1eed9-89ff-4086-b0ff-4eadcebcdce9,0,1,41d31712-6181-4cfe-9aa4-02b7a50150b0,41d31712-6181-4cfe-9aa4-02b7a50150b0,0,1,3ad5d8a7-3071-46aa-aebf-306bdb67983b,3ad5d8a7-3071-46aa-aebf-306bdb67983b,0,1,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,0,1,cb954476-c551-4a06-9bcd-18d67ba47dc8,cb954476-c551-4a06-9bcd-18d67ba47dc8,0,1,79201015-bfae-463e-81f1-0ae2d3066f3f,79201015-bfae-463e-81f1-0ae2d3066f3f,0,1,a6d48910-d526-4e8f-9414-ca776a7edaa3,a6d48910-d526-4e8f-9414-ca776a7edaa3,0,1,1e8cd163-ca9b-42eb-b8c9-c3d44e7e486b,1e8cd163-ca9b-42eb-b8c9-c3d44e7e486b,0,1,6bf8f383-af77-4be9-bda4-4d4220dfe374,6bf8f383-af77-4be9-bda4-4d4220dfe374,0,1,b5c92c97-c4d2-4b4c-86be-035bfd17f905,b5c92c97-c4d2-4b4c-86be-035bfd17f905,0,1,a5bb3835-9dcf-4924-9c96-695e5173d702,a5bb3835-9dcf-4924-9c96-695e5173d702,0,1,afa26db4-77a4-437c-965a-fefc6086c1a1,afa26db4-77a4-437c-965a-fefc6086c1a1,0,1,7e005845-c321-4529-b112-2dec63720195,7e005845-c321-4529-b112-2dec63720195,0,1,48f7b074-2e43-4221-a36c-e2e30c22def6,48f7b074-2e43-4221-a36c-e2e30c22def6,0,1,df2f5d28-b460-4692-861d-fbe39cb726b6,df2f5d28-b460-4692-861d-fbe39cb726b6,0,1,b6c94efd-5994-4c4c-a641-b062ecc38b65,b6c94efd-5994-4c4c-a641-b062ecc38b65,0,1,98501228-7f0e-45a3-b58f-4c654f393f80,98501228-7f0e-45a3-b58f-4c654f393f80,0,1,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,0,1,b773f510-1485-4886-9071-afcbf49ff856,b773f510-1485-4886-9071-afcbf49ff856,0,1,50968921-76f3-4108-835a-96b153671c8d,50968921-76f3-4108-835a-96b153671c8d,0,1,d5b586ed-0756-4488-90c8-f74f1ef81c82,d5b586ed-0756-4488-90c8-f74f1ef81c82,0,1,2178ab47-1bb1-4fe0-940d-6876b66333c1,2178ab47-1bb1-4fe0-940d-6876b66333c1,0,1,8cc09f48-2ef2-434b-b33e-ab9b021816de,8cc09f48-2ef2-434b-b33e-ab9b021816de,0,1,2ca1741b-1e65-4a54-a4a5-489e73cfb4f3,2ca1741b-1e65-4a54-a4a5-489e73cfb4f3,0,1,360b086c-53e3-4514-a4f5-9379ab368b76,360b086c-53e3-4514-a4f5-9379ab368b76,0,1,e6feefa1-7298-4ab0-85d3-9abee571a627,e6feefa1-7298-4ab0-85d3-9abee571a627,0,1,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,0,1,df459525-4e4d-4819-b996-5a6379b22a88,df459525-4e4d-4819-b996-5a6379b22a88,0,1,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,0,1,e67b4a32-4bac-450e-be6d-88c262383f31,e67b4a32-4bac-450e-be6d-88c262383f31,0,1,440d115d-a769-427e-891a-88d65fba2057,440d115d-a769-427e-891a-88d65fba2057,0,1,f7932210-027e-4fad-b7f7-3530789ce803,f7932210-027e-4fad-b7f7-3530789ce803,0,1,7bbfd95e-39a1-485b-930f-c9210c18dcd0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,0,1,4975d3d6-b5a2-41c6-973b-6817013a388d,4975d3d6-b5a2-41c6-973b-6817013a388d,0,1,18ebc799-9724-4ffb-855e-b09a0723869e,18ebc799-9724-4ffb-855e-b09a0723869e,0,1,a06b8ef5-83e6-4fc6-91e1-256004134d69,a06b8ef5-83e6-4fc6-91e1-256004134d69,0,1,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1d6a68ec-917f-4c3b-b970-797a6921cbc9,0,1,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,0,1,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0,1,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,0,1,679cc0df-df5c-4c33-8c64-c0b6cee39116,679cc0df-df5c-4c33-8c64-c0b6cee39116,0,1,b01666e4-985e-4a8e-bd68-9eb46b1ae1f0,b01666e4-985e-4a8e-bd68-9eb46b1ae1f0,0,1,45a48f71-4b62-4d3a-9ffc-76e8d4862d4e,45a48f71-4b62-4d3a-9ffc-76e8d4862d4e,0,1,5f08a477-fac0-4763-baf6-2839ed4de918,5f08a477-fac0-4763-baf6-2839ed4de918,0,1,17aadd5f-cda2-4785-a07f-3ab4b04434a6,17aadd5f-cda2-4785-a07f-3ab4b04434a6,0,1,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,0,1,1832336e-32f6-42c4-9087-8614ead52bb3,1832336e-32f6-42c4-9087-8614ead52bb3,0,1,ff9f7b5c-70f4-4eed-8216-64448e7da76f,ff9f7b5c-70f4-4eed-8216-64448e7da76f,0,1,44ac2869-990d-4cac-a14b-c1a28854341e,44ac2869-990d-4cac-a14b-c1a28854341e,0,1,d5df31c3-89f9-469c-80a9-fb4706d30bc4,d5df31c3-89f9-469c-80a9-fb4706d30bc4,0,1,105cd740-1f60-45e1-871c-adeecd291b0d,105cd740-1f60-45e1-871c-adeecd291b0d,0,1,95aec7d2-179b-4ea3-a3df-3d737b713564,95aec7d2-179b-4ea3-a3df-3d737b713564,0,1,4bd1cae4-d5b5-444e-9cf5-67a969714293,4bd1cae4-d5b5-444e-9cf5-67a969714293,0,1,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,0,1,f279a625-b88f-43b4-bce9-de1186fe7d7e,f279a625-b88f-43b4-bce9-de1186fe7d7e,0,1,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,0,1,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,0,1,6a798c80-459f-49ef-a8c2-83842ce4252c,6a798c80-459f-49ef-a8c2-83842ce4252c,0,1,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,0,1,d6400a59-6e02-4212-bb5a-9e49767aa8d6,d6400a59-6e02-4212-bb5a-9e49767aa8d6,0,1,6016d26e-fe39-4c16-b2b5-15f8c663125e,6016d26e-fe39-4c16-b2b5-15f8c663125e,0,1,6c19d9b0-1a41-4f82-a289-9fe05e272079,6c19d9b0-1a41-4f82-a289-9fe05e272079,0,1,df8063e2-47f1-4230-8e3c-eeee2143c72a,df8063e2-47f1-4230-8e3c-eeee2143c72a,0,1,89856ba2-f39a-41cd-be94-61243c6a0b96,89856ba2-f39a-41cd-be94-61243c6a0b96,0,1,8bdb0483-6ea9-4553-91ac-9cde267aae19,8bdb0483-6ea9-4553-91ac-9cde267aae19,0,1,56c9fa68-467b-4c1b-813e-6bc7ac0375cb,56c9fa68-467b-4c1b-813e-6bc7ac0375cb,0,1,bf30f5a1-6542-469f-b3fe-eee726110ffb,bf30f5a1-6542-469f-b3fe-eee726110ffb,0,1,13367a31-c2c9-43ea-b248-8a92e95ecd53,13367a31-c2c9-43ea-b248-8a92e95ecd53,0,1,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,0,1,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,0,1,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,0,1,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,0,1,50ee876f-6860-443b-9857-aca772d711ea,50ee876f-6860-443b-9857-aca772d711ea,0,1,6955edb2-d481-432c-b282-58dc07fd067b,6955edb2-d481-432c-b282-58dc07fd067b,0,1,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,0,1,58b33683-1916-4aef-9b98-5569ef7782ed,58b33683-1916-4aef-9b98-5569ef7782ed,0,1,d3e1f622-f438-4cad-94ae-0272f51610f7,d3e1f622-f438-4cad-94ae-0272f51610f7,0,1,64ac2c2a-2726-4ab9-9a6a-3d08f3fc0618,64ac2c2a-2726-4ab9-9a6a-3d08f3fc0618,0,1,8569cd73-d40d-4d92-83e0-8ece0c03a86a,8569cd73-d40d-4d92-83e0-8ece0c03a86a,0,1,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,0,1,bf29c091-de15-4cd4-be0e-a9785f97d444,bf29c091-de15-4cd4-be0e-a9785f97d444,0,1,060b2bb4-ca03-4da9-930f-7f91f6299a35,060b2bb4-ca03-4da9-930f-7f91f6299a35,0,1,394b1a1c-a7ae-41b7-a346-4bac99fa567d,394b1a1c-a7ae-41b7-a346-4bac99fa567d,0,1,9a5fa511-59e8-4a1b-a101-f276f0b7b261,9a5fa511-59e8-4a1b-a101-f276f0b7b261,0,1,ccfe4e36-80b6-419f-8bb3-c1046203d023,ccfe4e36-80b6-419f-8bb3-c1046203d023,0,1,94b2e060-53b7-4b40-af05-30bea3520330,94b2e060-53b7-4b40-af05-30bea3520330,0,1,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0,1,41b0dabd-85a3-4819-84dd-371eaf4f996e,41b0dabd-85a3-4819-84dd-371eaf4f996e,0,1,86a5ba4d-0681-4ddc-a505-0f537528e1a3,86a5ba4d-0681-4ddc-a505-0f537528e1a3,0,1,12d936f5-932b-4561-b934-c8444808a450,12d936f5-932b-4561-b934-c8444808a450,0,1,2ccb06ca-9bb7-4b74-9a96-c109bb117984,2ccb06ca-9bb7-4b74-9a96-c109bb117984,0,1,ac1a661d-db18-4576-80a9-a19d4140c05e,ac1a661d-db18-4576-80a9-a19d4140c05e,0,1,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,0,1,c3ffeb09-121b-4d77-9c15-def4648b4f3c,c3ffeb09-121b-4d77-9c15-def4648b4f3c,0,1,c2de0724-04c1-4adb-b62a-b7ba727dbe67,c2de0724-04c1-4adb-b62a-b7ba727dbe67,0,1,4ae26777-69ff-4a55-942b-0bad8ab7a70a,4ae26777-69ff-4a55-942b-0bad8ab7a70a,0,1,a0d8fb0a-0e90-4140-8687-e249b153dc66,a0d8fb0a-0e90-4140-8687-e249b153dc66,0,1,917c6f60-2a07-4587-9496-d393aff93953,917c6f60-2a07-4587-9496-d393aff93953,0,1,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,0,1,9fe72d73-4c95-47e0-bf92-dcb714d747c6,9fe72d73-4c95-47e0-bf92-dcb714d747c6,0,1,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,0,1,60aaa289-1f07-438c-8f10-81058ac671c3,60aaa289-1f07-438c-8f10-81058ac671c3,0,1,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,0,1,c44b0868-bd7f-4230-973b-544ff4dd2afe,c44b0868-bd7f-4230-973b-544ff4dd2afe,0,1,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,0,1,6236ac73-5b9f-4fb5-bb2c-a5d8e205c5db,6236ac73-5b9f-4fb5-bb2c-a5d8e205c5db,0,1,ac028c56-b2a8-4a9b-a325-554c636f838e,ac028c56-b2a8-4a9b-a325-554c636f838e,0,1,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0,1,f99e98ac-cd94-4989-8c02-ef8b323c6815,f99e98ac-cd94-4989-8c02-ef8b323c6815,0,1,e2562347-4549-4111-862e-86c20a6daade,e2562347-4549-4111-862e-86c20a6daade,0,1,b270fc64-15c6-41ed-ad09-44c833ca7c41,b270fc64-15c6-41ed-ad09-44c833ca7c41,0,1,4c3312fd-5613-4e9b-ae7c-572fa1887ded,4c3312fd-5613-4e9b-ae7c-572fa1887ded,0,1,6c8c9618-287a-41ab-890c-60250925ad52,6c8c9618-287a-41ab-890c-60250925ad52,0,1,168fce48-2413-45fc-ad21-9b465121d81b,168fce48-2413-45fc-ad21-9b465121d81b,0,1,55b9650e-098b-4d44-9fb5-d525b46f014b,55b9650e-098b-4d44-9fb5-d525b46f014b,0,1,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,0,1,bc55dc06-a769-40be-9c99-0794bdd2dbea,bc55dc06-a769-40be-9c99-0794bdd2dbea,0,1,7861e179-96d2-422f-a7c2-b38b59074956,7861e179-96d2-422f-a7c2-b38b59074956,0,1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0,1,3797b4c6-e336-4cbe-8d0b-0902e1247b42,3797b4c6-e336-4cbe-8d0b-0902e1247b42,0,1,67ebc493-d29a-4614-890a-feb8b5bd884b,67ebc493-d29a-4614-890a-feb8b5bd884b,0,1,d65c8992-aabc-4b67-9893-01862231ebe1,d65c8992-aabc-4b67-9893-01862231ebe1,0,1,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,0,1,dba6cb38-79c6-4060-87c5-a993548f36c4,dba6cb38-79c6-4060-87c5-a993548f36c4,0,1,6b44227a-e226-4bcb-8638-06b49f830669,6b44227a-e226-4bcb-8638-06b49f830669,0,1,f2406400-87e9-4df2-bcd3-8f1e3ad62088,f2406400-87e9-4df2-bcd3-8f1e3ad62088,0,1,4bb7372a-87a9-426e-b09f-fc0110455b10,4bb7372a-87a9-426e-b09f-fc0110455b10,0,1,8de9ba9e-0f4b-4bc5-8c62-e77601e6d865,8de9ba9e-0f4b-4bc5-8c62-e77601e6d865,0,1,fee371a3-fea1-4ef0-a324-b38d038d162d,fee371a3-fea1-4ef0-a324-b38d038d162d,0,1,ac853a0f-c185-4cdb-9f09-c921770937b5,ac853a0f-c185-4cdb-9f09-c921770937b5,0,1,920a7940-4d12-476d-a909-2231787839a9,920a7940-4d12-476d-a909-2231787839a9,0,1,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,0,1,783db3c5-05a7-466a-825e-65a10eb0e3d9,783db3c5-05a7-466a-825e-65a10eb0e3d9,0,1,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,0,1,34c0f81f-2712-4e64-8302-ab34ea52d0db,34c0f81f-2712-4e64-8302-ab34ea52d0db,0,1,599b1692-5f4e-42ef-ae1a-822ff527a415,599b1692-5f4e-42ef-ae1a-822ff527a415,0,1,c1ecfc0c-149a-48e2-b0e5-7d2f05206d13,c1ecfc0c-149a-48e2-b0e5-7d2f05206d13,0,1,23f70675-6a05-4b50-ad68-c55ddc93e857,23f70675-6a05-4b50-ad68-c55ddc93e857,0,1,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,0,1,32eb2a75-ff35-4795-bf0c-12b1328441ee,32eb2a75-ff35-4795-bf0c-12b1328441ee,0,1,1731708f-53cb-4b00-b90e-f581b4baa845,1731708f-53cb-4b00-b90e-f581b4baa845,0,1,d4b0feca-c00a-4d48-9f23-d92277ea6483,d4b0feca-c00a-4d48-9f23-d92277ea6483,0,1,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,0,1,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,0,1,23cb5bc2-9638-4d1c-b4bc-d5297e271570,23cb5bc2-9638-4d1c-b4bc-d5297e271570,0,1,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,0,1,04b7389d-697d-4b0d-a239-ac8c674cc46f,04b7389d-697d-4b0d-a239-ac8c674cc46f,0,1,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,0,1,864cad61-8280-415d-8fe1-bcb39d56670a,864cad61-8280-415d-8fe1-bcb39d56670a,0,1,b106bd29-5dc7-44d7-94d0-00f61499392e,b106bd29-5dc7-44d7-94d0-00f61499392e,0,1,a4febff8-0566-4977-bf55-1d574568fe9f,a4febff8-0566-4977-bf55-1d574568fe9f,0,1,5199cc65-bed1-40b9-96fe-cf6d855a8b91,5199cc65-bed1-40b9-96fe-cf6d855a8b91,0,1,f518add9-5c26-4dac-ab2e-b30fe3fbd347,f518add9-5c26-4dac-ab2e-b30fe3fbd347,0,1,23f53317-7aa8-4816-8a69-3d39d5e76da0,23f53317-7aa8-4816-8a69-3d39d5e76da0,0,1,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,0,1,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,0,1,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,0,1,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,0,1,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,0,1,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,0,1,a720abc8-dcf0-4684-8d94-22d394a8e4df,a720abc8-dcf0-4684-8d94-22d394a8e4df,0,1,e40f53de-c27b-4e74-8241-f784d7ca5c84,e40f53de-c27b-4e74-8241-f784d7ca5c84,0,1,ef38b84d-277e-48c2-8826-330132eb6807,ef38b84d-277e-48c2-8826-330132eb6807,0,1,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,0,1,5251e744-666e-48a0-a5b4-9cef313c7631,5251e744-666e-48a0-a5b4-9cef313c7631,0,1,0b09cf2f-1759-4362-b997-29e09ac00445,0b09cf2f-1759-4362-b997-29e09ac00445,0,1,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,0,1,828ddf5d-ca09-4baf-897f-77d569e02a6b,828ddf5d-ca09-4baf-897f-77d569e02a6b,0,1,8856015c-a695-4b1a-99ef-770263f9dc4a,8856015c-a695-4b1a-99ef-770263f9dc4a,0,1,183ec2b5-e173-4885-9e26-1098ffa15020,183ec2b5-e173-4885-9e26-1098ffa15020,0,1,74702fdf-bfc5-4658-ba58-e39bcfbaa647,74702fdf-bfc5-4658-ba58-e39bcfbaa647,0,1,2f436ec3-6a04-4d2c-998a-c60ea875ca86,2f436ec3-6a04-4d2c-998a-c60ea875ca86,0,1,3158ffef-5aaa-43d3-83ca-40626aa33d3c,3158ffef-5aaa-43d3-83ca-40626aa33d3c,0,1,36940f2c-b655-4d50-af16-2fb70acf5cdb,36940f2c-b655-4d50-af16-2fb70acf5cdb,0,1,7a0d7396-efed-4b57-92b6-e4ac74638b21,7a0d7396-efed-4b57-92b6-e4ac74638b21,0,1,42ff1536-0f3f-467b-b8f4-67260e5d87e3,42ff1536-0f3f-467b-b8f4-67260e5d87e3,0,1,876e31ff-ab7b-4ea4-b491-161963727dd1,876e31ff-ab7b-4ea4-b491-161963727dd1,0,1,bb43995b-68b4-41a1-8458-e10a2d8925f1,bb43995b-68b4-41a1-8458-e10a2d8925f1,0,1,61730dd9-fed7-43ce-8f38-724cac8f3d08,61730dd9-fed7-43ce-8f38-724cac8f3d08,0,1,e6a494b8-27e7-46a6-9435-7be6e150a69e,e6a494b8-27e7-46a6-9435-7be6e150a69e,0,1,133dc852-59d3-4351-934d-8845f8a38431,133dc852-59d3-4351-934d-8845f8a38431,0,1,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,0,1,b57eca91-04c2-4412-b5e2-f3c71f8ec602,b57eca91-04c2-4412-b5e2-f3c71f8ec602,0,1,b67914a8-d483-4bed-bd4d-a4aadd4998a4,b67914a8-d483-4bed-bd4d-a4aadd4998a4,0,1,744a52c8-6e4d-4356-a35a-3d2b01ad4a9f,744a52c8-6e4d-4356-a35a-3d2b01ad4a9f,0,1,6f630213-c16c-421c-a160-09e3c729ab26,6f630213-c16c-421c-a160-09e3c729ab26,0,1,878c638c-7c84-4914-896a-d4fdf0d759ef,878c638c-7c84-4914-896a-d4fdf0d759ef,0,1,6065653e-b7a9-4033-9617-f64430c57d89,6065653e-b7a9-4033-9617-f64430c57d89,0,1,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,0,1,00d1d85b-c258-4f10-9d13-a99375a29fc1,00d1d85b-c258-4f10-9d13-a99375a29fc1,0,1,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,0,1,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,0,1,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,0,1,fb58d277-b2a5-4a72-8d45-170c6f6263f9,fb58d277-b2a5-4a72-8d45-170c6f6263f9,0,1,325ed391-8558-4f03-9784-cde1f2a32944,325ed391-8558-4f03-9784-cde1f2a32944,0,1,f6cda05a-0f8f-4aa2-9686-1735c4207db3,f6cda05a-0f8f-4aa2-9686-1735c4207db3,0,1,0761ea58-8358-49ba-8e2d-e6afe88f6899,0761ea58-8358-49ba-8e2d-e6afe88f6899,0,1,da09e340-7cc0-4830-917a-5a59c42bbbf7,da09e340-7cc0-4830-917a-5a59c42bbbf7,0,1,c325aa12-9564-4033-8d3e-3103df55427f,c325aa12-9564-4033-8d3e-3103df55427f,0,1,9f4d4834-6994-4573-b99d-a5051746e5f9,9f4d4834-6994-4573-b99d-a5051746e5f9,0,1,c8ef3db5-2562-4f80-a679-86c2ba288ebf,c8ef3db5-2562-4f80-a679-86c2ba288ebf,0,1,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,0,1,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,0,1,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,0,1,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,0,1,af071a52-212b-4131-98e6-81f6048a70e6,af071a52-212b-4131-98e6-81f6048a70e6,0,1,64eff9f4-c57b-40a0-bd83-7e371fd010ce,64eff9f4-c57b-40a0-bd83-7e371fd010ce,0,1,0eee931a-57bb-4844-8e6e-eaca342640a0,0eee931a-57bb-4844-8e6e-eaca342640a0,0,1,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,0,1,37210dde-9a2f-475c-8341-578ac99f0e17,37210dde-9a2f-475c-8341-578ac99f0e17,0,1,3d662173-e19d-4077-9a08-8c8899226e24,3d662173-e19d-4077-9a08-8c8899226e24,0,1,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,0,1,3a8fffb6-a732-440c-afb9-d1c699ea53b6,3a8fffb6-a732-440c-afb9-d1c699ea53b6,0,1,a21989bd-a57f-4969-be3b-d8b39ead4145,a21989bd-a57f-4969-be3b-d8b39ead4145,0,1,c4aee120-cdbb-4b48-a1c7-99cccbafb120,c4aee120-cdbb-4b48-a1c7-99cccbafb120,0,1,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,0,1,a3667b25-7c18-446d-a318-685a4fe4bf89,a3667b25-7c18-446d-a318-685a4fe4bf89,0,1,8103f12c-ed50-4052-8117-33b6d11ef620,8103f12c-ed50-4052-8117-33b6d11ef620,0,1,5588ac0c-fb4f-4bca-ae47-88a9d1ae372c,5588ac0c-fb4f-4bca-ae47-88a9d1ae372c,0,1,617de19c-bf01-4900-832a-c169e9faeb79,617de19c-bf01-4900-832a-c169e9faeb79,0,1,70b73fd0-f5dc-411e-9bbb-10a538e8281b,70b73fd0-f5dc-411e-9bbb-10a538e8281b,0,1,758f44ad-54da-4f72-accf-0afecc4f4827,758f44ad-54da-4f72-accf-0afecc4f4827,0,1,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,0,1,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,0,1,4378ab20-5467-476b-8f04-4b6876efdee6,4378ab20-5467-476b-8f04-4b6876efdee6,0,1,55e47901-c79c-41c5-9d7f-6b6846ed2782,55e47901-c79c-41c5-9d7f-6b6846ed2782,0,1,3c429fe8-e663-4a58-817f-8f8382697dbb,3c429fe8-e663-4a58-817f-8f8382697dbb,0,1,c37be0c3-d2db-4e63-a8cb-7956a5396650,c37be0c3-d2db-4e63-a8cb-7956a5396650,0,1,83180e0d-fc4b-41ec-9a17-5af555a4776f,83180e0d-fc4b-41ec-9a17-5af555a4776f,0,1,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,0,1,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,0,1,3e8c6546-416c-4437-8c85-2cf591b4fc3f,3e8c6546-416c-4437-8c85-2cf591b4fc3f,0,1,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,0,1,9a0b27db-e4ac-496b-b6de-876b90381527,9a0b27db-e4ac-496b-b6de-876b90381527,0,1,20d655a7-788c-48bc-83ae-25003106bedb,20d655a7-788c-48bc-83ae-25003106bedb,0,1,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,0,1,68a72014-4b2e-4347-aaa7-54d95b8eb919,68a72014-4b2e-4347-aaa7-54d95b8eb919,0,1,a71d9c41-7510-4d38-90df-1034977b8f45,a71d9c41-7510-4d38-90df-1034977b8f45,0,1,25830f5b-27e2-4eff-9728-b21eb498727d,25830f5b-27e2-4eff-9728-b21eb498727d,0,1,379c9295-d0d5-418d-82f3-5ae19985cc53,379c9295-d0d5-418d-82f3-5ae19985cc53,0,1,af02f534-8508-4f9f-bcc1-0c6f3d696971,af02f534-8508-4f9f-bcc1-0c6f3d696971,0,1,dd345cfb-ea0c-4ea8-9b35-22547b000275,dd345cfb-ea0c-4ea8-9b35-22547b000275,0,1,86a871da-3725-43a1-a7c3-98acd187011b,86a871da-3725-43a1-a7c3-98acd187011b,0,1,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,0,1,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,0,1,5ef026c2-2ef4-45d6-9792-5ba0d298714b,5ef026c2-2ef4-45d6-9792-5ba0d298714b,0,1,45d61391-4cf7-4f45-8775-ada582c42400,45d61391-4cf7-4f45-8775-ada582c42400,0,1,78b2a913-2ab9-455d-85a3-504f0f468468,78b2a913-2ab9-455d-85a3-504f0f468468,0,1,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,0,1,560b5b12-4dee-4c69-ab6b-7680757a2797,560b5b12-4dee-4c69-ab6b-7680757a2797,0,1,3cfb1ce0-de42-4914-85c0-807d0c10f77e,3cfb1ce0-de42-4914-85c0-807d0c10f77e,0,1,d4ca4802-756a-494c-bab3-e77e0777a3fa,d4ca4802-756a-494c-bab3-e77e0777a3fa,0,1,134c1054-8d65-405f-ba3b-5beeca803a72,134c1054-8d65-405f-ba3b-5beeca803a72,0,1,cfa1669b-5310-4171-83fd-4dff3c6ac345,cfa1669b-5310-4171-83fd-4dff3c6ac345,0,1,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,0,1,112401b8-2800-4ed2-b620-7e1c1cacef2b,112401b8-2800-4ed2-b620-7e1c1cacef2b,0,1,6738abb6-483b-422d-9c4c-6fb6f8fee2cb,6738abb6-483b-422d-9c4c-6fb6f8fee2cb,0,1,742f14c0-a601-4cc1-9b89-b05cda5a2aac,742f14c0-a601-4cc1-9b89-b05cda5a2aac,0,1,2aaf3896-f7b2-405b-ac47-b4999ede382e,2aaf3896-f7b2-405b-ac47-b4999ede382e,0,1,f470a359-5c0c-4cd9-b470-b08b5f9dcd9f,f470a359-5c0c-4cd9-b470-b08b5f9dcd9f,0,1,c2a2daf0-b4dd-4a22-a0da-8325ff098cc3,c2a2daf0-b4dd-4a22-a0da-8325ff098cc3,0,1,f9484b9d-150f-4f1b-9041-4af10bf25ca6,f9484b9d-150f-4f1b-9041-4af10bf25ca6,0,1,795ffcdc-30cf-45a8-821a-66afdd86f7b3,795ffcdc-30cf-45a8-821a-66afdd86f7b3,0,1,227cb2ed-98df-441f-afd8-499e75dc6666,227cb2ed-98df-441f-afd8-499e75dc6666,0,1,07b55200-f01f-4d4e-a7a9-01b99301e8a0,07b55200-f01f-4d4e-a7a9-01b99301e8a0,0,1,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,0,1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,0,1,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,0,1,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0,1,27df6c22-85d7-4cb6-be19-82af76c84bf9,27df6c22-85d7-4cb6-be19-82af76c84bf9,0,1,40e2fb30-bb03-4178-a8eb-ddf48337ef23,40e2fb30-bb03-4178-a8eb-ddf48337ef23,0,1,1026fbcb-acd8-40dc-b638-6e02c6378c55,1026fbcb-acd8-40dc-b638-6e02c6378c55,0,1,dc9e2ba6-f4f1-493f-9054-cac633f239dd,dc9e2ba6-f4f1-493f-9054-cac633f239dd,0,1,7b95d0b1-c7b2-43b4-9119-320cb8912032,7b95d0b1-c7b2-43b4-9119-320cb8912032,0,1,004582b7-00aa-405e-8e24-ce76c945edae,004582b7-00aa-405e-8e24-ce76c945edae,0,1,97a9b005-a836-4308-8e63-0e00f6890baa,97a9b005-a836-4308-8e63-0e00f6890baa,0,1,98c34ada-0b78-41db-9183-6d7b9e466bde,98c34ada-0b78-41db-9183-6d7b9e466bde,0,1,fb688339-918e-40a1-8721-a26f3077973e,fb688339-918e-40a1-8721-a26f3077973e,0,1,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,0,1,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,0,1,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,0,1,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,0,1,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,0,1,83d23220-0226-4efe-a81c-6809459443a2,83d23220-0226-4efe-a81c-6809459443a2,0,1,ee30252f-ea25-4d50-b49c-163514bee342,ee30252f-ea25-4d50-b49c-163514bee342,0,1,02afc219-6b86-4282-ab6f-2688203542b7,02afc219-6b86-4282-ab6f-2688203542b7,0,1,dabae379-6356-497a-aab5-cf102f16a72a,dabae379-6356-497a-aab5-cf102f16a72a,0,1,337370e0-1021-4887-9d38-6c3833c90a5b,337370e0-1021-4887-9d38-6c3833c90a5b,0,1,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0,1,d6f01f1c-801b-4776-ae11-48236103f76a,d6f01f1c-801b-4776-ae11-48236103f76a,0,1,b6fe68cf-657b-40e0-af2e-247607a86519,b6fe68cf-657b-40e0-af2e-247607a86519,0,1,9b0b8191-94b7-428f-be86-e9e4cd24a72f,9b0b8191-94b7-428f-be86-e9e4cd24a72f,0,1,a923dbcb-7146-4445-ad17-f4a32c16a837,a923dbcb-7146-4445-ad17-f4a32c16a837,0,1,41dec792-1d1a-4e06-a54b-a86193b98225,41dec792-1d1a-4e06-a54b-a86193b98225,0,1,52257beb-3e0c-4681-b430-9690398cd13a,52257beb-3e0c-4681-b430-9690398cd13a,0,1,f71bd0e8-8784-452e-bea9-3696c875d69d,f71bd0e8-8784-452e-bea9-3696c875d69d,0,1,135e637c-c28e-4547-8da2-d897dca54cb2,135e637c-c28e-4547-8da2-d897dca54cb2,0,1,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,0,1,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,0,1,5356543a-db9a-4265-b83f-31d45544c8e6,5356543a-db9a-4265-b83f-31d45544c8e6,0,1,857dd311-9c6d-4dba-82d8-283d7b05b09e,857dd311-9c6d-4dba-82d8-283d7b05b09e,0,1,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,0,1,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,0,1,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,0,1,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,0,1,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,0,1,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,0,1,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,0,1,403d4675-b80e-4e0a-8cc0-2876661d0c89,403d4675-b80e-4e0a-8cc0-2876661d0c89,0,1,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,0,1,cb42bbe7-b564-44b2-89b8-d570f3419d3c,cb42bbe7-b564-44b2-89b8-d570f3419d3c,0,1,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,0,1,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,0,1,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,0,1,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,0,1,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,0,1,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0,1,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,0,1,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,0,1,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,0,1,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0,1,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,0,1,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,0,1,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,0,1,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,0,1,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,0,1,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,0,1,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,0,1,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,0,1,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,0,1,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,0,1,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,0,1,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,0,1,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,0,1,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,0,1,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,0,1,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,0,1,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,0,1,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0,1,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,0,1,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,0,1,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,0,1,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,0,1,34f9826f-3ab5-4849-8ef9-ab0fab3e471b,34f9826f-3ab5-4849-8ef9-ab0fab3e471b,0,1,3ad08f4a-6202-4099-b6cc-bc116e6731a0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,0,1,fd96c8ab-602a-4735-b168-52b501e80351,fd96c8ab-602a-4735-b168-52b501e80351,0,1,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,0,1,370f0c75-d2c5-4be5-a633-4bcc77998ece,370f0c75-d2c5-4be5-a633-4bcc77998ece,0,1,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,0,1,2139532c-f6cb-4393-936e-cc912e5adca9,2139532c-f6cb-4393-936e-cc912e5adca9,0,1,755c3eca-4956-4a44-9b38-c11dae00b87f,755c3eca-4956-4a44-9b38-c11dae00b87f,0,1,f57c558c-2c94-4b9d-8697-448d0548ab1a,f57c558c-2c94-4b9d-8697-448d0548ab1a,0,1,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,0,1,c32db021-eca1-4b67-aa85-3d6e28c51b53,c32db021-eca1-4b67-aa85-3d6e28c51b53,0,1,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,0,1,02466dcf-02a1-4853-814f-a913a9baba45,02466dcf-02a1-4853-814f-a913a9baba45,0,1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,0,1,62b75eb2-42e1-4484-a77f-b676dd36f3d4,62b75eb2-42e1-4484-a77f-b676dd36f3d4,0,1,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,0,1,856510ee-74f5-44e9-a3c0-1c60cfb7a787,856510ee-74f5-44e9-a3c0-1c60cfb7a787,0,1,28b761c6-c286-4125-a4ed-da602e49950f,28b761c6-c286-4125-a4ed-da602e49950f,0,1,4ac66a22-c736-4e06-a8aa-ef4a71788c65,4ac66a22-c736-4e06-a8aa-ef4a71788c65,0,1,9cfe9281-8840-4077-824d-a2c9cbb0b730,9cfe9281-8840-4077-824d-a2c9cbb0b730,0,1,76389fa9-b9e0-492e-9c93-24b5f3bf094c,76389fa9-b9e0-492e-9c93-24b5f3bf094c,0,1,23e3de37-9315-45e6-bbfd-60aae28c25ae,23e3de37-9315-45e6-bbfd-60aae28c25ae,0,1,a9957f43-8b6f-4d98-a2d8-77b78047494c,a9957f43-8b6f-4d98-a2d8-77b78047494c,0,1,e470e15d-1b06-43cb-a9f9-ba489e2f596f,e470e15d-1b06-43cb-a9f9-ba489e2f596f,0,1,0408002c-9255-43a2-8022-82f02ee0e8f4,0408002c-9255-43a2-8022-82f02ee0e8f4,0,1,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,0,1,1851afd4-5324-45c1-b754-54e65943f945,1851afd4-5324-45c1-b754-54e65943f945,0,1,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,0,1,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,0,1,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0,1,c322dc4a-30f3-4d23-9824-4a01c496408d,c322dc4a-30f3-4d23-9824-4a01c496408d,0,1,dcff004c-1b61-4a19-b977-ea21bf688614,dcff004c-1b61-4a19-b977-ea21bf688614,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1} \ No newline at end of file +{6,1,1,3e9ea7b1-5e0e-4de1-8aef-f0bfa0a80531,1,49177d21-e678-457a-bb3f-16af585e794f,"2.0.1.14","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",3656,1,0,f49cf6a2-7f35-4a84-8cfe-0d3dd745e32d,f49cf6a2-7f35-4a84-8cfe-0d3dd745e32d,0,1,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,0,1,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,0,1,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,0,1,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,0,1,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,0,1,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,0,1,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,0,1,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,0,1,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,0,1,48e2b615-925a-46d5-9f47-783bdb36ab02,48e2b615-925a-46d5-9f47-783bdb36ab02,0,1,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,0,1,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,0,1,b73b22b7-419a-4ae9-b954-f6ad2244175b,b73b22b7-419a-4ae9-b954-f6ad2244175b,0,1,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,0,1,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,0,1,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,0,1,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,0,1,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,0,1,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,0,1,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,0,1,c17592a9-5df0-4fa6-bd33-3d78d341a55c,c17592a9-5df0-4fa6-bd33-3d78d341a55c,0,1,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,0,1,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,0,1,9e36087a-baa8-4812-956a-6e1ac73aa7e0,9e36087a-baa8-4812-956a-6e1ac73aa7e0,0,1,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,0,1,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,0,1,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,0,1,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,0,1,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,0,1,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,0,1,cb8da2f3-f8bb-4736-8381-7c153670e3e2,cb8da2f3-f8bb-4736-8381-7c153670e3e2,0,1,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,0,1,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,0,1,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,0,1,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,0,1,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,0,1,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,0,1,c53df2d1-4564-47a7-b66e-6a23ba28270e,c53df2d1-4564-47a7-b66e-6a23ba28270e,0,1,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,0,1,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,0,1,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,0,1,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,0,1,ac4742ed-1bc2-4a97-8c1a-bcdfbc20db82,ac4742ed-1bc2-4a97-8c1a-bcdfbc20db82,0,1,538f8da5-e4b3-4bfd-8267-ccb9aaf0188c,538f8da5-e4b3-4bfd-8267-ccb9aaf0188c,0,1,52176b25-0232-4326-9548-495db32b2660,52176b25-0232-4326-9548-495db32b2660,0,1,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,0,1,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,0,1,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,0,1,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0,1,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,0,1,a952960b-be1b-4ec4-bd76-80915065a60b,a952960b-be1b-4ec4-bd76-80915065a60b,0,1,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,0,1,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,0,1,cd592a5d-b184-4558-8a28-7079ccf28b89,cd592a5d-b184-4558-8a28-7079ccf28b89,0,1,2009c673-c1a5-45fc-8da2-a36c435085a6,2009c673-c1a5-45fc-8da2-a36c435085a6,0,1,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,0,1,5d16e042-3889-4851-86f1-bc43bf06ee88,5d16e042-3889-4851-86f1-bc43bf06ee88,0,1,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,0,1,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,0,1,e39ecc8a-ce81-483d-85de-b0488c8b7749,e39ecc8a-ce81-483d-85de-b0488c8b7749,0,1,1514eaff-faea-4d82-9465-d0d5292bb31d,1514eaff-faea-4d82-9465-d0d5292bb31d,0,1,6d39c6df-8cd4-47ad-9125-252b37d94575,6d39c6df-8cd4-47ad-9125-252b37d94575,0,1,739bd762-01fc-41a8-87df-844eb201962f,739bd762-01fc-41a8-87df-844eb201962f,0,1,7ef99dd3-d799-4f53-ab56-5528b4c9d782,7ef99dd3-d799-4f53-ab56-5528b4c9d782,0,1,ad7c6165-2e44-4808-a77a-526882cf5dea,ad7c6165-2e44-4808-a77a-526882cf5dea,0,1,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,0,1,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,0,1,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,0,1,0d0ada8a-09bb-4634-bf50-199f3779dad5,0d0ada8a-09bb-4634-bf50-199f3779dad5,0,1,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,0,1,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,0,1,968588bb-ee60-4399-955a-3ec4228d3c40,968588bb-ee60-4399-955a-3ec4228d3c40,0,1,23dbb528-7ea8-44ae-a1f2-b7608118666e,23dbb528-7ea8-44ae-a1f2-b7608118666e,0,1,b9627855-6773-4a59-b7d3-f9e2e565cd9e,b9627855-6773-4a59-b7d3-f9e2e565cd9e,0,1,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,0,1,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,0,1,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,0,1,8961a859-2203-4678-ae1f-63e2474a787a,8961a859-2203-4678-ae1f-63e2474a787a,0,1,fe63db47-3ece-4518-b6a2-0b6499f60a61,fe63db47-3ece-4518-b6a2-0b6499f60a61,0,1,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,0,1,2c8e45b8-7d80-4137-85db-66cd1db94526,2c8e45b8-7d80-4137-85db-66cd1db94526,0,1,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,0,1,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,0,1,7df36398-7752-4f51-9978-1bcb4bcdd062,7df36398-7752-4f51-9978-1bcb4bcdd062,0,1,87472d14-0d8c-4813-8a3e-2721bbb26811,87472d14-0d8c-4813-8a3e-2721bbb26811,0,1,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,0,1,e8faa1a9-807a-4916-b3c5-76ba2199754c,e8faa1a9-807a-4916-b3c5-76ba2199754c,0,1,99b5c632-61fe-41f5-ac00-ea530633bf28,99b5c632-61fe-41f5-ac00-ea530633bf28,0,1,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,0,1,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,0,1,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,0,1,485911f7-a964-450d-82da-cab020836eb2,485911f7-a964-450d-82da-cab020836eb2,0,1,cedd0b47-07cb-4dae-86b5-31d396b693c7,cedd0b47-07cb-4dae-86b5-31d396b693c7,0,1,c08391e1-c4e3-42aa-8738-061031d0cb75,c08391e1-c4e3-42aa-8738-061031d0cb75,0,1,bf4c6723-e586-4643-9f03-9e672afea26f,bf4c6723-e586-4643-9f03-9e672afea26f,0,1,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,0,1,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,0,1,23204b0b-bf77-4f7c-9945-e73ad924ebb4,23204b0b-bf77-4f7c-9945-e73ad924ebb4,0,1,21032fa5-9426-40bd-91e4-ace1e4ceb013,21032fa5-9426-40bd-91e4-ace1e4ceb013,0,1,17d23818-d865-4df6-a5d3-aa21b0287d0c,17d23818-d865-4df6-a5d3-aa21b0287d0c,0,1,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,0,1,27a80757-c0fd-40c7-ad24-4c819c1ba72b,27a80757-c0fd-40c7-ad24-4c819c1ba72b,0,1,7fce9e49-e558-4760-9d95-dde6ac6c1e78,7fce9e49-e558-4760-9d95-dde6ac6c1e78,0,1,e5aba4a3-6056-4ef3-827c-d74283175393,e5aba4a3-6056-4ef3-827c-d74283175393,0,1,63039e62-7314-42ff-bdc6-c251f38b3827,63039e62-7314-42ff-bdc6-c251f38b3827,0,1,8a4b7aab-b602-4581-8fa4-fab66791f701,8a4b7aab-b602-4581-8fa4-fab66791f701,0,1,7c92c579-4651-4fe3-90dc-6c9b594b76f0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,0,1,a2be2d7a-cca0-460f-a915-dadfb9cd588b,a2be2d7a-cca0-460f-a915-dadfb9cd588b,0,1,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,0,1,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,0,1,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,0,1,1f4408f5-460e-431b-9842-bc6875ccf0ae,1f4408f5-460e-431b-9842-bc6875ccf0ae,0,1,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,0,1,7bfc6163-a62f-45e8-9112-40a5d675ba4a,7bfc6163-a62f-45e8-9112-40a5d675ba4a,0,1,542ff510-0245-4a08-80ac-a9941c66ae93,542ff510-0245-4a08-80ac-a9941c66ae93,0,1,03297623-eaa2-4db0-bf1b-ce2076faf20a,03297623-eaa2-4db0-bf1b-ce2076faf20a,0,1,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,0,1,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,0,1,82a3802c-b6d6-4511-bd8b-eeec003afa33,82a3802c-b6d6-4511-bd8b-eeec003afa33,0,1,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,0,1,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,0,1,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,0,1,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,0,1,a755cb43-492d-4069-9b6a-29b92ebb5b0e,a755cb43-492d-4069-9b6a-29b92ebb5b0e,0,1,86d09107-f511-4148-b5d9-d97e92addfde,86d09107-f511-4148-b5d9-d97e92addfde,0,1,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,0,1,6cbedb49-746a-4d63-b3fd-1b0e77ab28c0,6cbedb49-746a-4d63-b3fd-1b0e77ab28c0,0,1,55b78834-3d90-4858-a6f7-e0368b1d8c41,55b78834-3d90-4858-a6f7-e0368b1d8c41,0,1,059b9a75-f53a-4518-a48a-afc72ab9ee36,059b9a75-f53a-4518-a48a-afc72ab9ee36,0,1,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,0,1,1e2a18a3-bdde-4033-9b83-f8a6ee47e86c,1e2a18a3-bdde-4033-9b83-f8a6ee47e86c,0,1,31e95872-97c7-49e3-bd1b-8df4de07014d,31e95872-97c7-49e3-bd1b-8df4de07014d,0,1,9c7f2728-10a9-463b-b04c-01ee26f3d4c5,9c7f2728-10a9-463b-b04c-01ee26f3d4c5,0,1,8b9be02b-cd1f-4231-a895-6c9be26348c2,8b9be02b-cd1f-4231-a895-6c9be26348c2,0,1,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,0,1,fa4f0b33-5253-4a5f-8121-feae3e1968a6,fa4f0b33-5253-4a5f-8121-feae3e1968a6,0,1,e0d21be2-91dc-4a04-9078-49420ddddcd5,e0d21be2-91dc-4a04-9078-49420ddddcd5,0,1,56c97764-7dba-42e0-8ba0-82712aca20e9,56c97764-7dba-42e0-8ba0-82712aca20e9,0,1,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,0,1,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,0,1,7f3c6269-ea41-492f-87b7-7eaaf712762e,7f3c6269-ea41-492f-87b7-7eaaf712762e,0,1,12f95031-b81f-4802-b2f3-6f70def90db0,12f95031-b81f-4802-b2f3-6f70def90db0,0,1,5732112a-f31d-41cd-9a7f-312a27395502,5732112a-f31d-41cd-9a7f-312a27395502,0,1,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,0,1,f646835e-61eb-4ebd-811e-dac5e70bd1b4,f646835e-61eb-4ebd-811e-dac5e70bd1b4,0,1,61b49c4c-3021-4868-834a-9137476ae169,61b49c4c-3021-4868-834a-9137476ae169,0,1,58911911-5192-45fe-87cf-c4a222a521a1,58911911-5192-45fe-87cf-c4a222a521a1,0,1,70067937-9f27-4442-b87b-6c4576ce1b78,70067937-9f27-4442-b87b-6c4576ce1b78,0,1,115d5d06-a2fc-453e-aab5-c869b6d5850b,115d5d06-a2fc-453e-aab5-c869b6d5850b,0,1,d33ca006-d81d-4ef8-8503-7878e81c599f,d33ca006-d81d-4ef8-8503-7878e81c599f,0,1,123bb339-b95e-44c3-b1e9-482dcaa6f297,123bb339-b95e-44c3-b1e9-482dcaa6f297,0,1,f4119605-beb3-46b6-b372-ecdb74f10a33,f4119605-beb3-46b6-b372-ecdb74f10a33,0,1,d2a2e332-a52c-4277-bd19-5ea8ef198469,d2a2e332-a52c-4277-bd19-5ea8ef198469,0,1,e440c594-14bb-4a6e-af53-a4519c7d5548,e440c594-14bb-4a6e-af53-a4519c7d5548,0,1,4165bdaa-8e27-40de-bcdc-0379c34e8868,4165bdaa-8e27-40de-bcdc-0379c34e8868,0,1,e606f8eb-952a-4abb-b1ae-4211204bed84,e606f8eb-952a-4abb-b1ae-4211204bed84,0,1,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,0,1,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1c2ad932-150a-4b15-b958-62eaa8a1eebc,0,1,b4deaebf-2c21-47d7-9436-10c94c94667c,b4deaebf-2c21-47d7-9436-10c94c94667c,0,1,f8295f29-2533-4013-981b-240f017d9f7c,f8295f29-2533-4013-981b-240f017d9f7c,0,1,538b316b-3876-4da6-8b97-ad8ef59de17d,538b316b-3876-4da6-8b97-ad8ef59de17d,0,1,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,0,1,ebc5f182-482b-4dec-9961-ce3a448abd0e,ebc5f182-482b-4dec-9961-ce3a448abd0e,0,1,83e618f5-1bf4-474a-9d65-389f1e4b16c3,83e618f5-1bf4-474a-9d65-389f1e4b16c3,0,1,1357512e-3ed3-455d-bc91-81db3b92f9fe,1357512e-3ed3-455d-bc91-81db3b92f9fe,0,1,82223d0f-41d9-45a6-9612-ae4d8408fa1b,82223d0f-41d9-45a6-9612-ae4d8408fa1b,0,1,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,0,1,c2768e31-9e61-4d8d-838d-90b2e2683148,c2768e31-9e61-4d8d-838d-90b2e2683148,0,1,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,0,1,8486e623-1a54-4ad9-ab44-591b6a559bc3,8486e623-1a54-4ad9-ab44-591b6a559bc3,0,1,dce82d28-9a7b-4d4c-af13-90f459cf4af2,dce82d28-9a7b-4d4c-af13-90f459cf4af2,0,1,cb9f2231-49bb-4b14-a124-8996628afead,cb9f2231-49bb-4b14-a124-8996628afead,0,1,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,0,1,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,0,1,6e8fd732-2746-4c27-95a6-58b0adf94d88,6e8fd732-2746-4c27-95a6-58b0adf94d88,0,1,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,0,1,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,0,1,e6c42b5d-57fd-42ce-a968-653620e797f6,e6c42b5d-57fd-42ce-a968-653620e797f6,0,1,724fb328-fec6-4afe-bc99-0ff0951b184b,724fb328-fec6-4afe-bc99-0ff0951b184b,0,1,1692bf73-8ce6-4b0e-875b-79cdd4396ca7,1692bf73-8ce6-4b0e-875b-79cdd4396ca7,0,1,f6259a3b-98f5-4649-8fd0-da0a0285f375,f6259a3b-98f5-4649-8fd0-da0a0285f375,0,1,c565bf25-c55e-4324-851a-cec497f5114a,c565bf25-c55e-4324-851a-cec497f5114a,0,1,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,0,1,8943233f-5c9a-4e6b-b1c2-3bbb94b6c4a7,8943233f-5c9a-4e6b-b1c2-3bbb94b6c4a7,0,1,5b0e250c-4d2d-4e37-ade1-593854610d3f,5b0e250c-4d2d-4e37-ade1-593854610d3f,0,1,148f63d5-23ad-4824-a24c-14d5a54c62d3,148f63d5-23ad-4824-a24c-14d5a54c62d3,0,1,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,0,1,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,0,1,041daf91-e5b3-471d-934d-55229f8a81d6,041daf91-e5b3-471d-934d-55229f8a81d6,0,1,eabfa8b7-fb65-43dd-9308-787f7cce88c9,eabfa8b7-fb65-43dd-9308-787f7cce88c9,0,1,30213cef-b2bc-4e6c-8094-74a61f28b2ed,30213cef-b2bc-4e6c-8094-74a61f28b2ed,0,1,8c72f824-b667-4d74-84aa-30eccfbbd2f0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,0,1,ec7b492d-5d38-4f31-90e0-577ad181514e,ec7b492d-5d38-4f31-90e0-577ad181514e,0,1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,0,1,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,0,1,766c7fb5-727e-4975-9ea1-3b0df4739620,766c7fb5-727e-4975-9ea1-3b0df4739620,0,1,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,0,1,e70a6eab-791f-4c70-bb92-f069c7486d1b,e70a6eab-791f-4c70-bb92-f069c7486d1b,0,1,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,0,1,fac2e2cb-c32a-4592-b6c8-fd18806e845d,fac2e2cb-c32a-4592-b6c8-fd18806e845d,0,1,f58bffe7-4a02-4c4e-bfed-7895177a400c,f58bffe7-4a02-4c4e-bfed-7895177a400c,0,1,fe285122-2257-4fb2-ab7e-1683c31db1c6,fe285122-2257-4fb2-ab7e-1683c31db1c6,0,1,0facc6eb-a178-45ee-a6bc-4bf085d80453,0facc6eb-a178-45ee-a6bc-4bf085d80453,0,1,f74eef36-9441-4b6f-b21c-de9643832f9f,f74eef36-9441-4b6f-b21c-de9643832f9f,0,1,ac2e5217-aaeb-4b6f-b063-538c84f2da06,ac2e5217-aaeb-4b6f-b063-538c84f2da06,0,1,b5e73fbe-499c-4666-a482-0ef399c97c1e,b5e73fbe-499c-4666-a482-0ef399c97c1e,0,1,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,0,1,4ac77dea-3c2b-4566-8857-ba99f7b025c9,4ac77dea-3c2b-4566-8857-ba99f7b025c9,0,1,58ffc4d9-d711-4b68-905c-d2ac4f78b547,58ffc4d9-d711-4b68-905c-d2ac4f78b547,0,1,94ab750f-46b4-427c-a7f2-4e94fb9b0678,94ab750f-46b4-427c-a7f2-4e94fb9b0678,0,1,397d9926-31a3-4c03-acb7-74478f9863e1,397d9926-31a3-4c03-acb7-74478f9863e1,0,1,9ad979d3-74ad-4d90-b279-c3a2bea36ea7,9ad979d3-74ad-4d90-b279-c3a2bea36ea7,0,1,264dd12a-b4c5-44bf-b3c0-ef9225505f76,264dd12a-b4c5-44bf-b3c0-ef9225505f76,0,1,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,0,1,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,0,1,74f02619-7fa8-4c6d-81d6-230156ee45f4,74f02619-7fa8-4c6d-81d6-230156ee45f4,0,1,a103cca0-8243-40e9-bcdd-97a1cc8a3943,a103cca0-8243-40e9-bcdd-97a1cc8a3943,0,1,80fd89d7-160d-4528-9aa0-05b8dac64b4c,80fd89d7-160d-4528-9aa0-05b8dac64b4c,0,1,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,0,1,da551cf6-4f86-4e37-8967-a84c80e1fb13,da551cf6-4f86-4e37-8967-a84c80e1fb13,0,1,bd539a52-d33e-4e9b-8508-230acf76e98a,bd539a52-d33e-4e9b-8508-230acf76e98a,0,1,5fb2c120-fd14-4e78-a35f-c8e9478b3235,5fb2c120-fd14-4e78-a35f-c8e9478b3235,0,1,9d514ce1-f9bd-4018-8107-545cdd372fbd,9d514ce1-f9bd-4018-8107-545cdd372fbd,0,1,fe6b732f-3a33-460f-9686-cffdd5f7d99b,fe6b732f-3a33-460f-9686-cffdd5f7d99b,0,1,06250212-aeb1-4cb8-8785-ea71b1dad848,06250212-aeb1-4cb8-8785-ea71b1dad848,0,1,0c068a61-e5e6-4475-96fa-b7c1d825da42,0c068a61-e5e6-4475-96fa-b7c1d825da42,0,1,1047e34d-397a-42cc-80e6-1be755bd6462,1047e34d-397a-42cc-80e6-1be755bd6462,0,1,1cd473c3-4e36-47a9-b466-73d86ec244b0,1cd473c3-4e36-47a9-b466-73d86ec244b0,0,1,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,0,1,b406b5f9-eeaf-43a0-8930-067554d783c9,b406b5f9-eeaf-43a0-8930-067554d783c9,0,1,47718840-2939-4e30-a72c-a20c88ac4c17,47718840-2939-4e30-a72c-a20c88ac4c17,0,1,58a38994-9fe4-4783-967d-79d1141b90f3,58a38994-9fe4-4783-967d-79d1141b90f3,0,1,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,0,1,7c2e35a8-d05d-4e52-baee-a1e13585c502,7c2e35a8-d05d-4e52-baee-a1e13585c502,0,1,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,0,1,f551f78a-2f05-4932-ac33-cfa1b077f46f,f551f78a-2f05-4932-ac33-cfa1b077f46f,0,1,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,0,1,6dc4c216-e49f-4833-b45f-6060b67995ef,6dc4c216-e49f-4833-b45f-6060b67995ef,0,1,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,0,1,ba5574bd-53ca-413f-a245-272f468a80fb,ba5574bd-53ca-413f-a245-272f468a80fb,0,1,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,0,1,300ecdd6-144f-48c8-9fd4-6166f1de1047,300ecdd6-144f-48c8-9fd4-6166f1de1047,0,1,b6bbfb59-8249-47af-9394-be262f118811,b6bbfb59-8249-47af-9394-be262f118811,0,1,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,0,1,fb63d488-fb91-4d08-8f8c-f4836538216f,fb63d488-fb91-4d08-8f8c-f4836538216f,0,1,b8be6c09-6880-45d3-a2d1-06ad72d069c9,b8be6c09-6880-45d3-a2d1-06ad72d069c9,0,1,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,0,1,148dd521-8754-451b-803b-cbee7c3d3965,148dd521-8754-451b-803b-cbee7c3d3965,0,1,38bc48c7-3938-47be-be3f-844f19561301,38bc48c7-3938-47be-be3f-844f19561301,0,1,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,0,1,147038fb-6154-41f3-aad6-547db27d1e43,147038fb-6154-41f3-aad6-547db27d1e43,0,1,832fa9d3-deab-4c57-b6e2-dee5d24d6100,832fa9d3-deab-4c57-b6e2-dee5d24d6100,0,1,dd4270ef-6b4c-491e-8871-959dbec14c53,dd4270ef-6b4c-491e-8871-959dbec14c53,0,1,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,0,1,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,0,1,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,0,1,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,0,1,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,0,1,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,0,1,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,0,1,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,0,1,4168f6dc-d43f-435a-8a98-2dd99470568a,4168f6dc-d43f-435a-8a98-2dd99470568a,0,1,ecfc7ede-fffb-4bea-9598-3e18845f603d,ecfc7ede-fffb-4bea-9598-3e18845f603d,0,1,fa44433b-1c44-45a0-9487-47aa092442cf,fa44433b-1c44-45a0-9487-47aa092442cf,0,1,041cecfd-cef2-45d9-90e8-afe0d97d2d95,041cecfd-cef2-45d9-90e8-afe0d97d2d95,0,1,ffea6f3b-86fb-438d-bc22-7e19831f57d3,ffea6f3b-86fb-438d-bc22-7e19831f57d3,0,1,eaae534f-b506-4c86-b649-5b103cf5791d,eaae534f-b506-4c86-b649-5b103cf5791d,0,1,18b4773a-5380-4e71-8b51-ef10e19df17e,18b4773a-5380-4e71-8b51-ef10e19df17e,0,1,42f454f7-cfc4-459b-898f-86cace30410c,42f454f7-cfc4-459b-898f-86cace30410c,0,1,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,0,1,e700ab8e-ff33-4968-9bd0-8918a7d2b83f,e700ab8e-ff33-4968-9bd0-8918a7d2b83f,0,1,330933ca-c4d5-4014-8a6d-910124dfdc7e,330933ca-c4d5-4014-8a6d-910124dfdc7e,0,1,910b3640-790c-4185-88b5-a7c7466374c0,910b3640-790c-4185-88b5-a7c7466374c0,0,1,b5eceb60-76ba-47e3-90bd-52078d4bae4e,b5eceb60-76ba-47e3-90bd-52078d4bae4e,0,1,b8869f44-b87f-4e3e-a0d5-2aec5ccda4e2,b8869f44-b87f-4e3e-a0d5-2aec5ccda4e2,0,1,f7c23753-ff8c-4c26-bdc5-58e3b038668d,f7c23753-ff8c-4c26-bdc5-58e3b038668d,0,1,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,0,1,10197638-2cde-4424-8390-3bc9abe9852e,10197638-2cde-4424-8390-3bc9abe9852e,0,1,4fb8564e-2338-4c23-84a4-31f768047ced,4fb8564e-2338-4c23-84a4-31f768047ced,0,1,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,0,1,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,0,1,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,1,0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,1,0,101a4eb3-cdda-47af-8c69-615a6920347a,101a4eb3-cdda-47af-8c69-615a6920347a,1,0,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,1,0,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,ed394820-a216-4c4b-81ae-5dea33ced43b,ed394820-a216-4c4b-81ae-5dea33ced43b,1,0,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,1,0,8a310493-c06f-46db-b2b5-14d6ed203312,8a310493-c06f-46db-b2b5-14d6ed203312,1,0,b68ec95b-64f3-4a2b-9683-231d50f01eeb,b68ec95b-64f3-4a2b-9683-231d50f01eeb,1,0,4a008342-f72f-4ca1-bad1-64b59b509911,4a008342-f72f-4ca1-bad1-64b59b509911,1,0,cefa1723-a4d4-44c4-bd57-ffa713f9306c,cefa1723-a4d4-44c4-bd57-ffa713f9306c,1,0,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,1,0,8d8b91c0-c0ab-4b9d-b854-b867063ddb5b,8d8b91c0-c0ab-4b9d-b854-b867063ddb5b,1,0,4920aabf-6f53-4f91-932a-8ace24631a74,4920aabf-6f53-4f91-932a-8ace24631a74,1,0,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,1,0,dacd15cd-ffdc-444d-a45f-9b0c7776a7c5,dacd15cd-ffdc-444d-a45f-9b0c7776a7c5,1,0,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,1,0,bbec9c3d-31dd-484e-ab32-41ef845f1370,bbec9c3d-31dd-484e-ab32-41ef845f1370,1,0,8692ba41-d91d-4af0-8aba-69dd5409d593,8692ba41-d91d-4af0-8aba-69dd5409d593,1,0,852bd696-9a9e-4952-b676-4108f757ad9b,852bd696-9a9e-4952-b676-4108f757ad9b,1,0,a95b564a-c895-40f2-b947-ea08462bb2a0,a95b564a-c895-40f2-b947-ea08462bb2a0,1,0,ca63ca2f-703d-4317-8c5d-0650ea638f3f,ca63ca2f-703d-4317-8c5d-0650ea638f3f,1,0,aa2256c7-9847-40a5-9e49-11c508e0d45b,aa2256c7-9847-40a5-9e49-11c508e0d45b,1,0,a04493f4-508c-4047-b0e3-b7d4bde6427b,a04493f4-508c-4047-b0e3-b7d4bde6427b,1,0,418982cd-d403-47cf-a7ef-993a36104947,418982cd-d403-47cf-a7ef-993a36104947,1,0,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,1,0,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,1,0,35eea3b8-d017-442a-b5a0-a1571165b9a9,35eea3b8-d017-442a-b5a0-a1571165b9a9,1,0,7e84901c-cb7f-437c-a135-0902cd47acb6,7e84901c-cb7f-437c-a135-0902cd47acb6,1,0,c4d67026-2c97-4126-b8be-49aa6f567e2d,c4d67026-2c97-4126-b8be-49aa6f567e2d,1,0,fda2906d-f499-4016-b13a-99f7f713b898,fda2906d-f499-4016-b13a-99f7f713b898,1,0,da2b47f5-4109-4f72-a4a5-70be24a6881f,da2b47f5-4109-4f72-a4a5-70be24a6881f,1,0,849f034e-85dc-4515-aae6-240c1e0d46d9,849f034e-85dc-4515-aae6-240c1e0d46d9,1,0,1c7e9baa-7728-4afd-829a-806cee13ecdb,1c7e9baa-7728-4afd-829a-806cee13ecdb,1,0,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,1,0,f8c499bc-2b02-4b61-a162-4ce87057952f,f8c499bc-2b02-4b61-a162-4ce87057952f,1,0,5a741cf6-8160-4409-9396-2e6d1e67e6fa,5a741cf6-8160-4409-9396-2e6d1e67e6fa,1,0,8242daae-181a-47df-b28e-c1de3fce0359,8242daae-181a-47df-b28e-c1de3fce0359,1,0,5cc3a29d-aa98-42bf-9800-f584229c8e46,5cc3a29d-aa98-42bf-9800-f584229c8e46,1,0,db82191f-77bd-44da-8b33-86f01018e25a,db82191f-77bd-44da-8b33-86f01018e25a,1,0,acfa1919-07ce-4464-8552-6b104e284dca,acfa1919-07ce-4464-8552-6b104e284dca,1,0,f4cff4ff-68e9-4072-971e-1b359d3aa980,f4cff4ff-68e9-4072-971e-1b359d3aa980,1,0,6f9fba85-7c04-4e07-bc93-8ad79cbdca85,6f9fba85-7c04-4e07-bc93-8ad79cbdca85,1,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,1,0,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,1,0,7d069b11-cddd-463d-97be-3cbeaaf0954c,7d069b11-cddd-463d-97be-3cbeaaf0954c,1,0,06ff179c-864b-4d3b-83c5-f09c3e0f37f4,06ff179c-864b-4d3b-83c5-f09c3e0f37f4,1,0,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,1,0,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,1,0,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,1,0,b9004626-915c-44c8-9cb7-25e5b627ee83,b9004626-915c-44c8-9cb7-25e5b627ee83,1,0,63c6cfad-124d-491a-829d-b298463c95e6,63c6cfad-124d-491a-829d-b298463c95e6,1,0,3da31d2f-24dd-469b-bd3b-073fa3b3d585,3da31d2f-24dd-469b-bd3b-073fa3b3d585,1,0,737404de-5b9d-4445-81c5-2c5b50b36846,737404de-5b9d-4445-81c5-2c5b50b36846,1,0,ea72bcca-2aad-450d-ab3a-293403cd8d2e,ea72bcca-2aad-450d-ab3a-293403cd8d2e,1,0,1ae364d3-0bec-4089-af23-c60d2a274c85,1ae364d3-0bec-4089-af23-c60d2a274c85,1,0,de4d37c9-b278-4c0c-bc10-1b63ecd72947,de4d37c9-b278-4c0c-bc10-1b63ecd72947,1,0,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1,0,f11ffcfd-3588-4785-b222-cebe80455303,f11ffcfd-3588-4785-b222-cebe80455303,1,0,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,1,0,bfdc6346-db5b-427f-acca-9b48db8fefd0,bfdc6346-db5b-427f-acca-9b48db8fefd0,1,0,1c3f258c-345e-47f6-9e29-98b1222fb348,1c3f258c-345e-47f6-9e29-98b1222fb348,1,0,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,1,0,b3847d64-46b8-4bd1-9362-d88d82b34254,b3847d64-46b8-4bd1-9362-d88d82b34254,1,0,14b58f6d-9243-47cd-a430-8408fcddd8d8,14b58f6d-9243-47cd-a430-8408fcddd8d8,0,1,57b9edd2-16d2-40f2-ae9c-33462eda5fb4,57b9edd2-16d2-40f2-ae9c-33462eda5fb4,0,1,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,0,1,8a0db1f1-fb8d-45fa-944d-72d460e49873,8a0db1f1-fb8d-45fa-944d-72d460e49873,0,1,7a62d031-c340-4b1e-90af-fff697a2e979,7a62d031-c340-4b1e-90af-fff697a2e979,0,1,18bf6916-83cc-41e5-a35b-1489450ae632,18bf6916-83cc-41e5-a35b-1489450ae632,0,1,ebab97cf-5335-4648-9845-8ca41f79fb49,ebab97cf-5335-4648-9845-8ca41f79fb49,0,1,bb29fa44-6772-4426-a0b8-422115e14288,bb29fa44-6772-4426-a0b8-422115e14288,0,1,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,0,1,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,0,1,40d3ed07-3b56-4c9f-8b96-d94455202ef0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,0,1,5b3b3da9-8619-4fbd-b140-3528875cd179,5b3b3da9-8619-4fbd-b140-3528875cd179,0,1,99e5e866-7ac6-4916-ab66-3e2909822c56,99e5e866-7ac6-4916-ab66-3e2909822c56,0,1,03363877-2752-4a03-95f2-d73b732e0bfd,03363877-2752-4a03-95f2-d73b732e0bfd,0,1,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0,1,78051e10-74ab-44be-adca-e4c93824a386,78051e10-74ab-44be-adca-e4c93824a386,0,1,73629419-83d8-4727-88a9-76c851d104c9,73629419-83d8-4727-88a9-76c851d104c9,0,1,a9c3065b-db68-4f59-9235-33f9fbfdaafd,a9c3065b-db68-4f59-9235-33f9fbfdaafd,0,1,3715cf3d-0abc-4711-8ac9-d41f0be7878f,3715cf3d-0abc-4711-8ac9-d41f0be7878f,0,1,8e8d8078-8b32-4c24-b26e-89a92bf60160,8e8d8078-8b32-4c24-b26e-89a92bf60160,0,1,f96cbb27-7619-41e0-8577-e623ef02dc58,f96cbb27-7619-41e0-8577-e623ef02dc58,0,1,5cacd92f-46af-4d8d-b6e3-31fe23af3389,5cacd92f-46af-4d8d-b6e3-31fe23af3389,0,1,d74dfd31-2016-435b-8652-15fdbca59490,d74dfd31-2016-435b-8652-15fdbca59490,0,1,6411e10c-04e3-4997-9196-c38d717edbb3,6411e10c-04e3-4997-9196-c38d717edbb3,0,1,27651e0e-d560-434b-a49c-f473a5b20c4d,27651e0e-d560-434b-a49c-f473a5b20c4d,0,1,ce85554b-81ba-4149-a951-d09bdc14fa16,ce85554b-81ba-4149-a951-d09bdc14fa16,0,1,23a1ef35-1469-44ea-8535-fa9c7f535cae,23a1ef35-1469-44ea-8535-fa9c7f535cae,0,1,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,0,1,2558d812-ac0a-49ba-87db-3f661209a3c4,2558d812-ac0a-49ba-87db-3f661209a3c4,0,1,20d712ef-77c1-4374-92e1-f20a3ebc7eab,20d712ef-77c1-4374-92e1-f20a3ebc7eab,0,1,65d23ce8-e326-45ee-86b0-6dcf35797201,65d23ce8-e326-45ee-86b0-6dcf35797201,0,1,a2683c3f-1b21-47d8-951d-7d30cde51efc,a2683c3f-1b21-47d8-951d-7d30cde51efc,0,1,54c77053-1728-4914-a354-73fe8853a0e1,54c77053-1728-4914-a354-73fe8853a0e1,0,1,21136691-078f-4bf7-bddd-f41416a76d86,21136691-078f-4bf7-bddd-f41416a76d86,0,1,30a121c7-c4f5-45c4-9504-9778ed85d9e3,30a121c7-c4f5-45c4-9504-9778ed85d9e3,0,1,c68e2157-2541-4f80-966a-d68ce603f131,c68e2157-2541-4f80-966a-d68ce603f131,0,1,91488422-c802-4360-b46b-22d1e2905f0b,91488422-c802-4360-b46b-22d1e2905f0b,0,1,90bc48b0-3094-473c-8e07-53da338d7c53,90bc48b0-3094-473c-8e07-53da338d7c53,0,1,e5dfee58-f748-48ee-81a3-7c6133f06365,e5dfee58-f748-48ee-81a3-7c6133f06365,0,1,27bfc94e-e438-4854-9a9d-39a3b984c9b4,27bfc94e-e438-4854-9a9d-39a3b984c9b4,0,1,a7f1af69-f0f1-4c24-bf4f-b8dc15f4dec2,a7f1af69-f0f1-4c24-bf4f-b8dc15f4dec2,0,1,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,0,1,2a498baf-ec2e-4dda-b568-801bb60db225,2a498baf-ec2e-4dda-b568-801bb60db225,0,1,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,0,1,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,0,1,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,0,1,f7608000-1e8a-4ca4-afb7-e04ef547b70a,f7608000-1e8a-4ca4-afb7-e04ef547b70a,0,1,26cea519-19d0-4707-be0a-1a43fde6e563,26cea519-19d0-4707-be0a-1a43fde6e563,0,1,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,0,1,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,0,1,3965aac5-1850-4987-a6b6-683f115077f9,3965aac5-1850-4987-a6b6-683f115077f9,0,1,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,0,1,5d7174d2-42b3-4e12-b705-4209dd73b53b,5d7174d2-42b3-4e12-b705-4209dd73b53b,0,1,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,0,1,4a9e4ace-b2e9-4445-a77b-ba30a4995900,4a9e4ace-b2e9-4445-a77b-ba30a4995900,0,1,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,0,1,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,0,1,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,0,1,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,0,1,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,0,1,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,0,1,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,0,1,bd97e481-cfc4-4a40-8438-985020f06abd,bd97e481-cfc4-4a40-8438-985020f06abd,0,1,120c5162-b03c-46ce-8a2a-8ef501971715,120c5162-b03c-46ce-8a2a-8ef501971715,0,1,33343620-673e-4aa3-9e58-c6a25f738001,33343620-673e-4aa3-9e58-c6a25f738001,0,1,8aaf780f-ed74-4f44-9598-c14180053ff9,8aaf780f-ed74-4f44-9598-c14180053ff9,0,1,dbd4d09d-f410-4453-9143-bd72da5464cc,dbd4d09d-f410-4453-9143-bd72da5464cc,0,1,1853a370-767a-4845-9425-2f9363d91bd8,1853a370-767a-4845-9425-2f9363d91bd8,0,1,65530aca-7cf2-4a52-b5be-5dcbc15a049e,65530aca-7cf2-4a52-b5be-5dcbc15a049e,0,1,15eb2c2d-305d-42c0-9aec-936b82114bdb,15eb2c2d-305d-42c0-9aec-936b82114bdb,0,1,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,0,1,cbca7272-2aae-4e21-b3f5-12786f085648,cbca7272-2aae-4e21-b3f5-12786f085648,0,1,7718bd0b-7b8a-4ffc-b228-f05683b5531a,7718bd0b-7b8a-4ffc-b228-f05683b5531a,0,1,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,0,1,881f53bc-a52e-4312-b09d-3d3f53ddf84b,881f53bc-a52e-4312-b09d-3d3f53ddf84b,0,1,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,0,1,e3476d0e-0ab4-4734-9261-04aef6281086,e3476d0e-0ab4-4734-9261-04aef6281086,0,1,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,0,1,30fb1877-11cf-4985-a65d-6639a06b33f7,30fb1877-11cf-4985-a65d-6639a06b33f7,0,1,e9c355cb-d4ea-49d1-a893-f8f295a90701,e9c355cb-d4ea-49d1-a893-f8f295a90701,0,1,e9e242b7-0077-4c47-8f45-df50e7cc90cf,e9e242b7-0077-4c47-8f45-df50e7cc90cf,0,1,292bfe6b-703e-40cb-856d-abb470e6709f,292bfe6b-703e-40cb-856d-abb470e6709f,0,1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,0,1,8811ea1a-1221-47b7-9574-3f36ff15a3cf,8811ea1a-1221-47b7-9574-3f36ff15a3cf,0,1,4eefabc9-49ab-4301-8238-3f09b40d379e,4eefabc9-49ab-4301-8238-3f09b40d379e,0,1,1d715463-691b-4c01-ae39-57c261f2a6ad,1d715463-691b-4c01-ae39-57c261f2a6ad,0,1,4c3d007f-a62c-4fd9-beda-58dbf08ad188,4c3d007f-a62c-4fd9-beda-58dbf08ad188,0,1,c35373a9-f0b0-4ddb-a985-409ac9c64609,c35373a9-f0b0-4ddb-a985-409ac9c64609,0,1,c1c40916-fee5-46e3-90fc-10e7595866c9,c1c40916-fee5-46e3-90fc-10e7595866c9,0,1,19a307b1-9ef0-4fc6-bf4f-7636e9118399,19a307b1-9ef0-4fc6-bf4f-7636e9118399,0,1,666244a4-5636-4405-89dd-bbd8f4278071,666244a4-5636-4405-89dd-bbd8f4278071,0,1,29a627a9-debc-4074-88d0-ec3561e1ef9c,29a627a9-debc-4074-88d0-ec3561e1ef9c,0,1,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,0,1,39f5e272-9a10-40b0-8a10-92037828b206,39f5e272-9a10-40b0-8a10-92037828b206,0,1,437021b0-9f18-4238-9af6-7ca275b91fa4,437021b0-9f18-4238-9af6-7ca275b91fa4,0,1,761a35cb-8387-435f-b671-d5bb0fe9bfeb,761a35cb-8387-435f-b671-d5bb0fe9bfeb,0,1,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,0,1,783dd4ba-a597-45ba-8989-2ed5224d62bc,783dd4ba-a597-45ba-8989-2ed5224d62bc,0,1,ac5f945e-2d03-44fb-a8cf-5d786194cefd,ac5f945e-2d03-44fb-a8cf-5d786194cefd,0,1,698ec00f-bf75-420e-81ab-a98808daf3f7,698ec00f-bf75-420e-81ab-a98808daf3f7,0,1,f441907c-d02e-431e-baf4-1854e48a1f50,f441907c-d02e-431e-baf4-1854e48a1f50,0,1,dad9710a-73ca-4e0d-b98b-75f955d0822d,dad9710a-73ca-4e0d-b98b-75f955d0822d,0,1,2191939f-6f71-47c9-a3d2-57acbf7f411e,2191939f-6f71-47c9-a3d2-57acbf7f411e,0,1,19b9cbbb-1fcc-4492-9385-687742cb3d0b,19b9cbbb-1fcc-4492-9385-687742cb3d0b,0,1,247c41dd-c8dc-43dd-b348-1ba31ee92065,247c41dd-c8dc-43dd-b348-1ba31ee92065,0,1,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,0,1,da673406-078d-44c8-9d27-80ef172c4b5e,da673406-078d-44c8-9d27-80ef172c4b5e,0,1,07b53437-cc8d-4834-a1e0-7007538b6eab,07b53437-cc8d-4834-a1e0-7007538b6eab,0,1,3846cbb9-1e92-4342-84d8-8718ac9f406e,3846cbb9-1e92-4342-84d8-8718ac9f406e,0,1,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,0,1,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,0,1,2976c29f-f482-463d-8f6e-6a632fb50893,2976c29f-f482-463d-8f6e-6a632fb50893,0,1,701964a1-7762-45ee-a9a4-41dd9ce94783,701964a1-7762-45ee-a9a4-41dd9ce94783,0,1,55d1909e-f552-441f-8e14-47d2e604cf6a,55d1909e-f552-441f-8e14-47d2e604cf6a,0,1,eae627db-c52b-4e41-94d1-58db28cd0063,eae627db-c52b-4e41-94d1-58db28cd0063,0,1,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,0,1,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,0,1,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,0,1,ed137e05-1996-411d-9927-45a3d7e3ee3b,ed137e05-1996-411d-9927-45a3d7e3ee3b,0,1,fbebf341-9842-41e1-8e4d-490fa02065ce,fbebf341-9842-41e1-8e4d-490fa02065ce,0,1,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,0,1,642154b8-97da-4c4f-bf34-c1124215077d,642154b8-97da-4c4f-bf34-c1124215077d,0,1,abc10867-39ae-46bf-8bd7-90f645919235,abc10867-39ae-46bf-8bd7-90f645919235,0,1,f59f91c5-026a-4dc5-996e-0d59814a9604,f59f91c5-026a-4dc5-996e-0d59814a9604,0,1,b8029aa5-0268-49d8-bd1e-bdaa9b7ce34c,b8029aa5-0268-49d8-bd1e-bdaa9b7ce34c,0,1,c05f87b4-ec5f-4d14-981f-02ca8ba89863,c05f87b4-ec5f-4d14-981f-02ca8ba89863,0,1,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,0,1,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,0,1,875d1fc1-8172-4e48-8192-035882e1665d,875d1fc1-8172-4e48-8192-035882e1665d,0,1,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0,1,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,0,1,ca81e0ea-c428-47f9-aedb-078214104a2f,ca81e0ea-c428-47f9-aedb-078214104a2f,0,1,35a28677-0653-47f9-82e1-02c4b9266fee,35a28677-0653-47f9-82e1-02c4b9266fee,0,1,9518d09c-6996-4439-9278-3c71d5ae8fce,9518d09c-6996-4439-9278-3c71d5ae8fce,0,1,2e17464f-9cef-4812-865f-4eb77ff16b6a,2e17464f-9cef-4812-865f-4eb77ff16b6a,0,1,da2c8a7c-8386-467d-a049-1090956b70de,da2c8a7c-8386-467d-a049-1090956b70de,0,1,e5ecbb1f-981d-4928-9335-22216879f7e2,e5ecbb1f-981d-4928-9335-22216879f7e2,0,1,453cb913-9c46-429a-a9e1-30424b90c022,453cb913-9c46-429a-a9e1-30424b90c022,0,1,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,0,1,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,0,1,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,0,1,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,0,1,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,0,1,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,0,1,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,0,1,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,0,1,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,0,1,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,0,1,6ac7db0c-18ed-4d3b-956a-5985214db474,6ac7db0c-18ed-4d3b-956a-5985214db474,0,1,267103e0-6703-4a74-bb4f-af610d7ef332,267103e0-6703-4a74-bb4f-af610d7ef332,0,1,1f4d7158-15ed-4b0c-a7ed-1f8cfe2bd882,1f4d7158-15ed-4b0c-a7ed-1f8cfe2bd882,0,1,7effb232-a84f-4b4e-aa0c-1cefdc6ba612,7effb232-a84f-4b4e-aa0c-1cefdc6ba612,0,1,e4ce04bf-15a0-4d9d-af7b-4ec9e1fb36be,e4ce04bf-15a0-4d9d-af7b-4ec9e1fb36be,0,1,f75411c5-a317-42c4-8731-9b16856109d5,f75411c5-a317-42c4-8731-9b16856109d5,0,1,6ef011aa-eda4-4ddf-a588-5208790f6937,6ef011aa-eda4-4ddf-a588-5208790f6937,0,1,db07da1d-0281-4acf-90a2-3fd35629ab35,db07da1d-0281-4acf-90a2-3fd35629ab35,0,1,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,0,1,b61d3dc2-7a03-46bc-90fc-d58e94764194,b61d3dc2-7a03-46bc-90fc-d58e94764194,0,1,37818589-95de-43df-8a0f-f7149f96f683,37818589-95de-43df-8a0f-f7149f96f683,0,1,8d877829-5cf0-46fd-99b5-9bb5e5e5dc51,8d877829-5cf0-46fd-99b5-9bb5e5e5dc51,0,1,5ea65812-6c39-440e-82a4-621a16595d86,5ea65812-6c39-440e-82a4-621a16595d86,0,1,31dd320b-06aa-4314-9914-2c2420f572a1,31dd320b-06aa-4314-9914-2c2420f572a1,0,1,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,0,1,d4655391-144c-4ba6-aee5-1edafebe862c,d4655391-144c-4ba6-aee5-1edafebe862c,0,1,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,0,1,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,0,1,68caf9e5-9a79-4b77-b0f4-ca9c0fe4fa16,68caf9e5-9a79-4b77-b0f4-ca9c0fe4fa16,0,1,75c4e24f-b8d4-4b29-a9ce-e1d141c60fae,75c4e24f-b8d4-4b29-a9ce-e1d141c60fae,0,1,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,0,1,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,0,1,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,0,1,61bf78c0-7004-4a74-b362-e979c7316e05,61bf78c0-7004-4a74-b362-e979c7316e05,0,1,c4351896-eff1-4e4d-8823-028d63a9d6bf,c4351896-eff1-4e4d-8823-028d63a9d6bf,0,1,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,0,1,2757ee75-4b36-4901-bff1-044708754edb,2757ee75-4b36-4901-bff1-044708754edb,0,1,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0,1,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,0,1,ebc2ade3-a760-48da-a75e-3f4d29c84b70,ebc2ade3-a760-48da-a75e-3f4d29c84b70,0,1,71144539-6472-4727-8887-0139f6221370,71144539-6472-4727-8887-0139f6221370,0,1,bff07da4-ae19-48a9-806b-14b285d42485,bff07da4-ae19-48a9-806b-14b285d42485,0,1,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,0,1,b0ccc05d-8d39-4f57-8e87-6846014f92ea,b0ccc05d-8d39-4f57-8e87-6846014f92ea,0,1,0e2c2490-50ee-4fed-9119-5dec8385f925,0e2c2490-50ee-4fed-9119-5dec8385f925,0,1,aa368dd9-86e1-46f9-a296-591c3639734d,aa368dd9-86e1-46f9-a296-591c3639734d,0,1,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,0,1,8986c155-54be-4b1b-b31a-5c00b88bc40d,8986c155-54be-4b1b-b31a-5c00b88bc40d,0,1,d91441cf-d793-4dfa-9225-f0c16818edde,d91441cf-d793-4dfa-9225-f0c16818edde,0,1,42a39785-144c-4d2d-92c6-fd8b345f687b,42a39785-144c-4d2d-92c6-fd8b345f687b,0,1,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,0,1,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,0,1,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,0,1,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,0,1,c05f15b0-a659-4473-b6d0-acebc4a2da57,c05f15b0-a659-4473-b6d0-acebc4a2da57,0,1,ee91fa49-1a24-4a2f-80ca-103cf130945f,ee91fa49-1a24-4a2f-80ca-103cf130945f,0,1,bdf7e4e7-1187-482c-a564-a62ed92719c6,bdf7e4e7-1187-482c-a564-a62ed92719c6,0,1,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,0,1,cb747d24-6d8a-4d97-8a13-305ee6f39f75,cb747d24-6d8a-4d97-8a13-305ee6f39f75,0,1,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,0,1,f85e8f91-5e29-490a-b3d7-f72f97593086,f85e8f91-5e29-490a-b3d7-f72f97593086,0,1,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,0,1,00afd243-5575-4340-9217-40c8d61c1d54,00afd243-5575-4340-9217-40c8d61c1d54,0,1,38184767-167b-49b7-b995-4f13900b3822,38184767-167b-49b7-b995-4f13900b3822,0,1,3247e64e-b57e-4c33-8086-7ab93c5b6371,3247e64e-b57e-4c33-8086-7ab93c5b6371,0,1,e5dca369-dc9a-4332-a509-f734b8787e13,e5dca369-dc9a-4332-a509-f734b8787e13,0,1,722af623-156c-4e63-8b2a-93da760f1559,722af623-156c-4e63-8b2a-93da760f1559,0,1,f6939587-ff87-4eca-ae52-10e1bd2abfce,f6939587-ff87-4eca-ae52-10e1bd2abfce,0,1,3cb575a9-dc82-45e0-81f0-d651e12246da,3cb575a9-dc82-45e0-81f0-d651e12246da,0,1,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,0,1,b0d9086f-cef7-47a8-ad62-d85fea28ebda,b0d9086f-cef7-47a8-ad62-d85fea28ebda,0,1,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,0,1,3e127ace-1506-44ca-9df8-a7a30aa11c56,3e127ace-1506-44ca-9df8-a7a30aa11c56,0,1,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,0,1,2b3cab9a-fd05-42a8-811a-f443aee5e192,2b3cab9a-fd05-42a8-811a-f443aee5e192,0,1,9e9bb3df-4658-4278-8fe7-d4bfc46d2ce1,9e9bb3df-4658-4278-8fe7-d4bfc46d2ce1,0,1,2c02a558-8d12-44cf-be6b-9c399b9032e5,2c02a558-8d12-44cf-be6b-9c399b9032e5,0,1,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,0,1,093dfea8-18ea-457c-aa6f-9bea9bdba76c,093dfea8-18ea-457c-aa6f-9bea9bdba76c,0,1,6c58cc27-215e-4169-88ae-004ecc657d53,6c58cc27-215e-4169-88ae-004ecc657d53,0,1,9c267aa6-5f23-49f6-868a-3324ef2845ff,9c267aa6-5f23-49f6-868a-3324ef2845ff,0,1,495eeeee-d7bf-4063-99e2-86daa066451a,495eeeee-d7bf-4063-99e2-86daa066451a,0,1,b6184698-79e4-4c19-9440-092ccd9dabf8,b6184698-79e4-4c19-9440-092ccd9dabf8,0,1,6eeb4867-bf9d-48dc-b96b-934a0c293010,6eeb4867-bf9d-48dc-b96b-934a0c293010,0,1,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,0,1,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,0,1,8506dbe9-7066-444b-83b6-fb2d71a336e7,8506dbe9-7066-444b-83b6-fb2d71a336e7,0,1,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,0,1,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,0,1,ce235ab9-1dec-459a-9fec-498c262ece56,ce235ab9-1dec-459a-9fec-498c262ece56,0,1,39355e82-30a6-431e-9697-e2c42e82de83,39355e82-30a6-431e-9697-e2c42e82de83,0,1,15d09274-9508-4f64-9ea3-678c5aa50f0f,15d09274-9508-4f64-9ea3-678c5aa50f0f,0,1,4debe032-12e4-4777-b2fc-70b150f2aad1,4debe032-12e4-4777-b2fc-70b150f2aad1,0,1,37558fa2-0833-46d6-9e4f-63d4a3136870,37558fa2-0833-46d6-9e4f-63d4a3136870,0,1,18f4994a-d907-4182-b41b-6e8ec56ae7e0,18f4994a-d907-4182-b41b-6e8ec56ae7e0,0,1,d92cb614-ed09-47db-b70b-d3e533c44c6a,d92cb614-ed09-47db-b70b-d3e533c44c6a,0,1,361271fa-2faa-497d-adfe-dea8b825405e,361271fa-2faa-497d-adfe-dea8b825405e,0,1,5dceae8b-1ff3-4760-a1c4-975a92be1023,5dceae8b-1ff3-4760-a1c4-975a92be1023,0,1,db80ae50-2baf-445b-9055-80f2c7f22c24,db80ae50-2baf-445b-9055-80f2c7f22c24,0,1,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,0,1,3e9d6ca0-62e0-46b0-b3e4-c625a9792b47,3e9d6ca0-62e0-46b0-b3e4-c625a9792b47,0,1,1681dd7a-de80-4b8d-9657-c9702a19d653,1681dd7a-de80-4b8d-9657-c9702a19d653,0,1,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,0,1,9f593f27-8009-40c0-94d6-53f177ce55f4,9f593f27-8009-40c0-94d6-53f177ce55f4,0,1,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,0,1,6df2bb92-558c-4453-9de4-e4176e8f93dc,6df2bb92-558c-4453-9de4-e4176e8f93dc,0,1,cbeaf6c6-7cfb-4b63-8c4a-9db1fa4aeb27,cbeaf6c6-7cfb-4b63-8c4a-9db1fa4aeb27,0,1,f4e78a82-984e-408e-9989-33ea48cbd199,f4e78a82-984e-408e-9989-33ea48cbd199,0,1,25e489ed-8879-42aa-ada1-3257d811c2e2,25e489ed-8879-42aa-ada1-3257d811c2e2,0,1,899f7c74-62c8-4378-a45d-f2967d26edf3,899f7c74-62c8-4378-a45d-f2967d26edf3,0,1,1a3ed69b-fc1a-4151-90e1-460a5b6bfa15,1a3ed69b-fc1a-4151-90e1-460a5b6bfa15,0,1,fd18fb60-8c1f-4c72-a07a-5d0e1f3da062,fd18fb60-8c1f-4c72-a07a-5d0e1f3da062,0,1,48aaf6fa-1f11-47a7-82fa-7e2a9e944414,48aaf6fa-1f11-47a7-82fa-7e2a9e944414,0,1,3d95b8fa-ebe7-46f7-8ec6-69195c91cc5b,3d95b8fa-ebe7-46f7-8ec6-69195c91cc5b,0,1,60bec79f-4965-451e-8e49-117e81d80527,60bec79f-4965-451e-8e49-117e81d80527,0,1,4b71f609-9453-43d0-a3ee-532ea472a84e,4b71f609-9453-43d0-a3ee-532ea472a84e,0,1,703bfeb7-d98d-4baf-a5e1-4a5cb7817ccc,703bfeb7-d98d-4baf-a5e1-4a5cb7817ccc,0,1,2de98078-17b2-4fc0-87f8-ad9a52f03807,2de98078-17b2-4fc0-87f8-ad9a52f03807,0,1,3959030a-b943-4c9b-8463-ab46b5f5355d,3959030a-b943-4c9b-8463-ab46b5f5355d,0,1,2893783c-237d-4746-b58b-0d3f10374bdc,2893783c-237d-4746-b58b-0d3f10374bdc,0,1,e8d3756d-32b5-4919-8899-bf6665a7945d,e8d3756d-32b5-4919-8899-bf6665a7945d,0,1,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0,1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,0,1,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,0,1,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,0,1,be15e947-f671-4848-ada1-51239af73615,be15e947-f671-4848-ada1-51239af73615,0,1,d3e0dd8f-886a-4441-8f05-fd629da80f07,d3e0dd8f-886a-4441-8f05-fd629da80f07,0,1,6417d7c8-6436-4907-98eb-44cd7638f3f1,6417d7c8-6436-4907-98eb-44cd7638f3f1,0,1,c0c6ef45-2730-4762-a34e-e7cc5ef6c8f2,c0c6ef45-2730-4762-a34e-e7cc5ef6c8f2,0,1,01611261-f796-43ca-8302-11a31ebfa87f,01611261-f796-43ca-8302-11a31ebfa87f,0,1,d3c9b925-6b74-42db-8b21-ab21d24797d1,d3c9b925-6b74-42db-8b21-ab21d24797d1,0,1,651ce6e7-f829-4436-897d-1403d59b2fec,651ce6e7-f829-4436-897d-1403d59b2fec,0,1,033d9a8f-73d3-4be3-b0e9-7c9e9cb12161,033d9a8f-73d3-4be3-b0e9-7c9e9cb12161,0,1,a4e56049-4de9-40a3-8197-a5c84a11f516,a4e56049-4de9-40a3-8197-a5c84a11f516,0,1,339c9220-fd5b-45d3-b300-cdcc8788f87e,339c9220-fd5b-45d3-b300-cdcc8788f87e,0,1,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,0,1,9042a6de-5048-432d-a448-7e21f2d1d24a,9042a6de-5048-432d-a448-7e21f2d1d24a,0,1,350d46bf-114e-48e7-90c6-6708d949f20d,350d46bf-114e-48e7-90c6-6708d949f20d,0,1,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,0,1,aac20ff3-5873-432e-b763-14411e623d41,aac20ff3-5873-432e-b763-14411e623d41,0,1,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,0,1,6df44466-8750-481a-9baf-c924f0d45353,6df44466-8750-481a-9baf-c924f0d45353,0,1,110121eb-a0eb-4662-8911-3dcc3d341a73,110121eb-a0eb-4662-8911-3dcc3d341a73,0,1,f8980c18-6b9c-4e45-919a-22e976d2a846,f8980c18-6b9c-4e45-919a-22e976d2a846,0,1,c946efb7-c67e-49c1-bf56-d3c2d7220acd,c946efb7-c67e-49c1-bf56-d3c2d7220acd,0,1,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,0,1,6b7c9f74-f2b6-463e-acb9-9f82901986cf,6b7c9f74-f2b6-463e-acb9-9f82901986cf,0,1,fc4c1d64-132b-4687-a37d-05000fdb4ba5,fc4c1d64-132b-4687-a37d-05000fdb4ba5,0,1,528777cd-090b-4b70-82f5-56def98c5893,528777cd-090b-4b70-82f5-56def98c5893,0,1,49dbe467-8832-4ede-9a05-494248619aeb,49dbe467-8832-4ede-9a05-494248619aeb,0,1,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,0,1,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,0,1,09c73108-8528-4970-9b7f-fff9eda7816a,09c73108-8528-4970-9b7f-fff9eda7816a,0,1,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,0,1,f568245a-d158-45dc-af92-2d411f12db7b,f568245a-d158-45dc-af92-2d411f12db7b,0,1,0f17cdac-aa17-45e6-b3d0-220b13345390,0f17cdac-aa17-45e6-b3d0-220b13345390,0,1,c675db75-d0c3-4026-b97c-6b23ecbb336a,c675db75-d0c3-4026-b97c-6b23ecbb336a,0,1,469f67fa-98b0-44b0-abd4-cae136c02834,469f67fa-98b0-44b0-abd4-cae136c02834,0,1,16a18458-999c-420e-80df-8fc10855746c,16a18458-999c-420e-80df-8fc10855746c,0,1,b794f222-0fde-439f-97a3-0da74075b415,b794f222-0fde-439f-97a3-0da74075b415,0,1,3a716aad-9b2c-48a7-b802-80732066391b,3a716aad-9b2c-48a7-b802-80732066391b,0,1,480d959f-aac8-4241-875f-78e1c1f32621,480d959f-aac8-4241-875f-78e1c1f32621,0,1,496e5de8-d75c-4536-9993-75374f070b40,496e5de8-d75c-4536-9993-75374f070b40,0,1,b4e610ba-c9c8-4b25-903b-e567dcbc2556,b4e610ba-c9c8-4b25-903b-e567dcbc2556,0,1,48febdbd-a085-4113-8511-ed7ff6be7d3c,48febdbd-a085-4113-8511-ed7ff6be7d3c,0,1,49413232-c0c3-4983-9d10-291a0399281b,49413232-c0c3-4983-9d10-291a0399281b,0,1,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,0,1,b9b076bb-38ab-4a94-8226-41a4d4d7432c,b9b076bb-38ab-4a94-8226-41a4d4d7432c,0,1,e12da8db-4037-473e-ba2b-d0ceb4534dcb,e12da8db-4037-473e-ba2b-d0ceb4534dcb,0,1,789514e5-8ea3-4a5e-88c5-ed89c4135866,789514e5-8ea3-4a5e-88c5-ed89c4135866,0,1,a16768ff-6137-43d8-8784-4805ed83632a,a16768ff-6137-43d8-8784-4805ed83632a,0,1,61971286-9f94-4a27-aa34-e10848adb70a,61971286-9f94-4a27-aa34-e10848adb70a,0,1,1e75d143-3452-496e-a137-6d7f4c4ed019,1e75d143-3452-496e-a137-6d7f4c4ed019,0,1,e0619d14-c658-4eb5-841a-3a029de28be4,e0619d14-c658-4eb5-841a-3a029de28be4,0,1,99a3b660-7875-47f7-9c6c-c552e5673deb,99a3b660-7875-47f7-9c6c-c552e5673deb,0,1,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,0,1,41cbf934-ea54-41df-abf0-09f319d2e67a,41cbf934-ea54-41df-abf0-09f319d2e67a,0,1,47246084-a5f8-4d0f-b4e2-204c1b97483a,47246084-a5f8-4d0f-b4e2-204c1b97483a,0,1,e58233ec-6cfc-4a8b-9929-689fa69cdb07,e58233ec-6cfc-4a8b-9929-689fa69cdb07,0,1,3291a891-a47c-43ca-b088-aecd3867d38c,3291a891-a47c-43ca-b088-aecd3867d38c,0,1,56cde2b4-00f2-49ba-b407-16e241c17fd2,56cde2b4-00f2-49ba-b407-16e241c17fd2,0,1,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,0,1,219ed110-f2a0-41c1-ac5a-02301b248c54,219ed110-f2a0-41c1-ac5a-02301b248c54,0,1,1c722dfd-2b07-4985-9188-17353de24771,1c722dfd-2b07-4985-9188-17353de24771,0,1,1a630496-2cdd-4c89-a1aa-ed20545ad133,1a630496-2cdd-4c89-a1aa-ed20545ad133,0,1,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,0,1,b19cea0e-e57a-4969-8daf-f48d3d16705f,b19cea0e-e57a-4969-8daf-f48d3d16705f,0,1,d4059340-3361-4baa-ae48-ecbfb9800a2e,d4059340-3361-4baa-ae48-ecbfb9800a2e,0,1,f78f6c43-dd90-4117-acf7-ed5b951cb964,f78f6c43-dd90-4117-acf7-ed5b951cb964,0,1,8eebd519-4989-4784-82b8-39d77eebfb17,8eebd519-4989-4784-82b8-39d77eebfb17,0,1,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0,1,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,0,1,4527877b-5723-4aa5-8705-98174ac9c337,4527877b-5723-4aa5-8705-98174ac9c337,0,1,d6b21e7b-df57-4280-8c95-c269b5316018,d6b21e7b-df57-4280-8c95-c269b5316018,0,1,808c468b-6322-428d-ac6a-ccf2228b05b6,808c468b-6322-428d-ac6a-ccf2228b05b6,0,1,13664bb2-738f-4d18-b382-a7bcf8105a5a,13664bb2-738f-4d18-b382-a7bcf8105a5a,0,1,f3f56abe-9248-4555-bf99-29560eb4f9ee,f3f56abe-9248-4555-bf99-29560eb4f9ee,0,1,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0,1,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,0,1,3eb43a06-b32d-4904-8489-6264d0207623,3eb43a06-b32d-4904-8489-6264d0207623,0,1,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,0,1,18615fe1-cfee-4888-9c09-88d1c5db39eb,18615fe1-cfee-4888-9c09-88d1c5db39eb,0,1,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,0,1,087c83c0-75e7-476b-b7c6-5be55498a190,087c83c0-75e7-476b-b7c6-5be55498a190,0,1,ec5e5413-9e77-4929-83b8-6fee70688b28,ec5e5413-9e77-4929-83b8-6fee70688b28,0,1,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,0,1,8390c864-2b84-4c45-8583-cb4a4ab49168,8390c864-2b84-4c45-8583-cb4a4ab49168,0,1,1b2fefca-fef5-4319-90cc-325444cb63a6,1b2fefca-fef5-4319-90cc-325444cb63a6,0,1,34a128be-8fbb-4dd8-ac23-9f35041feb63,34a128be-8fbb-4dd8-ac23-9f35041feb63,0,1,baa31006-e0d6-496e-a60e-27b3dfd19397,baa31006-e0d6-496e-a60e-27b3dfd19397,0,1,3007d8ff-3942-45ed-bac5-8a6c40ca060c,3007d8ff-3942-45ed-bac5-8a6c40ca060c,0,1,8bfe1474-fd12-4744-a9ab-3383bfe766b3,8bfe1474-fd12-4744-a9ab-3383bfe766b3,0,1,3af97375-f776-4129-9521-b8d65d795db6,3af97375-f776-4129-9521-b8d65d795db6,0,1,0e98801b-a45b-44cb-a341-7e43d723f6ed,0e98801b-a45b-44cb-a341-7e43d723f6ed,0,1,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,0,1,103ac72d-c386-40ea-89d4-35798d064f1a,103ac72d-c386-40ea-89d4-35798d064f1a,0,1,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,0,1,d1fe15e9-8e5c-4819-85cd-24ab31409437,d1fe15e9-8e5c-4819-85cd-24ab31409437,0,1,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,0,1,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,0,1,74f68bda-17b1-4b3c-aa64-b1014300f9b5,74f68bda-17b1-4b3c-aa64-b1014300f9b5,0,1,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,0,1,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,0,1,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,0,1,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,0,1,47ee7d38-9fa9-458d-abee-e11270f79494,47ee7d38-9fa9-458d-abee-e11270f79494,0,1,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,0,1,076daecf-8fcb-496b-9f13-c4faa3a8a722,076daecf-8fcb-496b-9f13-c4faa3a8a722,0,1,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,0,1,296d7725-bdd3-4210-9db9-31de5711ea9b,296d7725-bdd3-4210-9db9-31de5711ea9b,0,1,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,0,1,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1d05f89a-23dd-4d30-8786-abe8a9a39a40,0,1,245c2c6c-7b7f-4381-9304-1d7287a215fa,245c2c6c-7b7f-4381-9304-1d7287a215fa,0,1,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,0,1,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,0,1,8bb5be12-98df-4a38-bffe-432fb13d8101,8bb5be12-98df-4a38-bffe-432fb13d8101,0,1,94209023-ce88-401c-9aff-526fb7e43709,94209023-ce88-401c-9aff-526fb7e43709,0,1,22b99094-b52a-4244-ae91-53848d82560b,22b99094-b52a-4244-ae91-53848d82560b,0,1,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,0,1,b0002134-d5c9-4508-9f0e-97f92461b590,b0002134-d5c9-4508-9f0e-97f92461b590,0,1,1506ec71-cb38-4831-a29d-dac2c4deddda,1506ec71-cb38-4831-a29d-dac2c4deddda,0,1,e05fd82b-b77b-4b7f-b300-43653017f341,e05fd82b-b77b-4b7f-b300-43653017f341,0,1,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,0,1,f15a0526-c207-42fe-aed9-438ae0c4a4b8,f15a0526-c207-42fe-aed9-438ae0c4a4b8,0,1,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,0,1,8583cab0-0620-4346-96e0-bcac40981b8a,8583cab0-0620-4346-96e0-bcac40981b8a,0,1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,0,1,095990b1-187b-400c-941a-275f272239ca,095990b1-187b-400c-941a-275f272239ca,0,1,ba108470-350d-40c3-bb44-9852c2aa8c97,ba108470-350d-40c3-bb44-9852c2aa8c97,0,1,a37c33fa-64b0-4a1b-846a-0a236bad44f8,a37c33fa-64b0-4a1b-846a-0a236bad44f8,0,1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,0,1,a50f4324-da44-449b-b500-74228b2aa7e0,a50f4324-da44-449b-b500-74228b2aa7e0,0,1,04236716-9c36-4a1d-b4fb-4b8c65644ab4,04236716-9c36-4a1d-b4fb-4b8c65644ab4,0,1,97276702-6686-4ac4-8360-d85369a08b20,97276702-6686-4ac4-8360-d85369a08b20,0,1,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,0,1,068883fe-d7ae-40e7-ad82-864867916daa,068883fe-d7ae-40e7-ad82-864867916daa,0,1,c1b02568-2095-4f83-8543-2402f67dbe3d,c1b02568-2095-4f83-8543-2402f67dbe3d,0,1,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,0,1,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,0,1,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,0,1,aecbd726-6952-49e6-b544-4c5cc764c24c,aecbd726-6952-49e6-b544-4c5cc764c24c,0,1,d335cfbf-bc78-4274-a178-10f60372474a,d335cfbf-bc78-4274-a178-10f60372474a,0,1,0f4411b3-addf-4fcf-8da8-c5140dea356c,0f4411b3-addf-4fcf-8da8-c5140dea356c,0,1,c501f9ab-d01b-4137-8cd0-e66103117c84,c501f9ab-d01b-4137-8cd0-e66103117c84,0,1,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,0,1,66e65355-1424-4c74-801c-faf5357257aa,66e65355-1424-4c74-801c-faf5357257aa,0,1,0a93187b-7ae4-4985-8089-3099dfec2b48,0a93187b-7ae4-4985-8089-3099dfec2b48,0,1,044458f3-ed9b-4afb-ae73-8f9162c032bf,044458f3-ed9b-4afb-ae73-8f9162c032bf,0,1,578f618e-5f4a-4e86-959d-39b59e973936,578f618e-5f4a-4e86-959d-39b59e973936,0,1,f74ede2e-2d28-4224-ba44-773eda7760a4,f74ede2e-2d28-4224-ba44-773eda7760a4,0,1,217df06a-1bdf-4394-b617-ed756ff17bc6,217df06a-1bdf-4394-b617-ed756ff17bc6,0,1,a1572e97-a487-497a-9062-49315e237e0f,a1572e97-a487-497a-9062-49315e237e0f,0,1,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,0,1,3c5d87a0-cfce-464a-b946-64c5a589a376,3c5d87a0-cfce-464a-b946-64c5a589a376,0,1,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,0,1,763de8d1-7f53-41b6-8d97-7da724e9f763,763de8d1-7f53-41b6-8d97-7da724e9f763,0,1,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,0,1,4ad59c75-cca4-4968-82e6-babd72d8b318,4ad59c75-cca4-4968-82e6-babd72d8b318,0,1,c248de15-63a2-48ec-8695-7a5213d4fc9b,c248de15-63a2-48ec-8695-7a5213d4fc9b,0,1,272ff0f9-7266-4c22-be12-fe62682b56a5,272ff0f9-7266-4c22-be12-fe62682b56a5,0,1,9f141dd5-d866-4c25-b58a-a7766a08b4e7,9f141dd5-d866-4c25-b58a-a7766a08b4e7,0,1,0570d846-889d-4cfc-98fb-a1ad0181597f,0570d846-889d-4cfc-98fb-a1ad0181597f,0,1,19e17c58-953f-4917-8b6a-c88808fcca36,19e17c58-953f-4917-8b6a-c88808fcca36,0,1,4804316d-3765-4a83-8438-10e8e82656db,4804316d-3765-4a83-8438-10e8e82656db,0,1,59458556-e343-4215-8e6c-69f924ec4183,59458556-e343-4215-8e6c-69f924ec4183,0,1,dd553dca-7eba-41bf-8939-2c61e170ff65,dd553dca-7eba-41bf-8939-2c61e170ff65,0,1,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,0,1,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,0,1,8099e978-28cc-4ade-ac5a-3785f3a45f70,8099e978-28cc-4ade-ac5a-3785f3a45f70,0,1,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,0,1,fe023ca5-f11a-4b98-99c1-363508e4ea4a,fe023ca5-f11a-4b98-99c1-363508e4ea4a,0,1,6f8d515e-13d9-45f8-9793-3757f5b85f81,6f8d515e-13d9-45f8-9793-3757f5b85f81,0,1,25ec541c-c437-4318-b2a8-5146df6ae080,25ec541c-c437-4318-b2a8-5146df6ae080,0,1,148754ed-3063-40a7-a3c3-8ad105552370,148754ed-3063-40a7-a3c3-8ad105552370,0,1,ab3f0862-c355-4fd7-a2a7-4eb8278de510,ab3f0862-c355-4fd7-a2a7-4eb8278de510,0,1,dba0d5db-9499-42c0-b4e0-2dd9f7ec462b,dba0d5db-9499-42c0-b4e0-2dd9f7ec462b,0,1,8ecfdcbc-099e-4206-b3d8-541517117ac5,8ecfdcbc-099e-4206-b3d8-541517117ac5,0,1,9f845a0d-b0cb-40c3-9e70-04f4b473990c,9f845a0d-b0cb-40c3-9e70-04f4b473990c,0,1,30c0ab17-d8c7-46c3-82e2-b67572db0a83,30c0ab17-d8c7-46c3-82e2-b67572db0a83,0,1,e82dbb36-a077-47d9-a904-f01ce82b4c19,e82dbb36-a077-47d9-a904-f01ce82b4c19,0,1,f4afbbd8-c503-4715-b0f2-476e0dcbf14c,f4afbbd8-c503-4715-b0f2-476e0dcbf14c,0,1,65625b4e-9ff9-4e15-b3f1-cc0003df25ea,65625b4e-9ff9-4e15-b3f1-cc0003df25ea,0,1,5feb2e44-9d15-4bf8-9f7d-efea6b13e402,5feb2e44-9d15-4bf8-9f7d-efea6b13e402,0,1,619f64ea-78da-448b-86c7-fbb561500211,619f64ea-78da-448b-86c7-fbb561500211,0,1,820d02c2-2cdd-4b09-ab65-98048daef9a0,820d02c2-2cdd-4b09-ab65-98048daef9a0,0,1,b0d36a9d-9ef9-4eff-9360-aeca38d7e967,b0d36a9d-9ef9-4eff-9360-aeca38d7e967,0,1,7e283796-d8a9-442b-b646-92e85beec1e3,7e283796-d8a9-442b-b646-92e85beec1e3,0,1,5c79771f-f98c-453d-9672-8aff65978e20,5c79771f-f98c-453d-9672-8aff65978e20,0,1,51656bbb-096b-4be7-95fb-801e84651d32,51656bbb-096b-4be7-95fb-801e84651d32,0,1,f9b36fd7-095a-48ef-80a6-87415eac7225,f9b36fd7-095a-48ef-80a6-87415eac7225,0,1,1dbecc5f-fe9c-4d8b-a96b-c4c49c06d088,1dbecc5f-fe9c-4d8b-a96b-c4c49c06d088,0,1,97414063-7575-4bb2-9246-a5565fccc1e1,97414063-7575-4bb2-9246-a5565fccc1e1,0,1,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,0,1,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,0,1,93aa5247-6823-4f70-9d47-e5a0f409828a,93aa5247-6823-4f70-9d47-e5a0f409828a,0,1,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,0,1,b19f1223-5ebe-4446-bacc-bc7d53486f2e,b19f1223-5ebe-4446-bacc-bc7d53486f2e,0,1,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,0,1,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,0,1,bf3167d6-3047-482a-b280-184f446ae7a3,bf3167d6-3047-482a-b280-184f446ae7a3,0,1,50c47c0a-a199-4020-9df4-91b17c159454,50c47c0a-a199-4020-9df4-91b17c159454,0,1,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,0,1,faecdc33-fed8-4b44-96f4-4215c26959b6,faecdc33-fed8-4b44-96f4-4215c26959b6,0,1,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,0,1,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,0,1,9df3792e-a4ee-4a2c-9296-c1384925521e,9df3792e-a4ee-4a2c-9296-c1384925521e,0,1,03d423db-f98a-468f-9040-5b76454e5a98,03d423db-f98a-468f-9040-5b76454e5a98,0,1,08f394f9-d254-4fe5-8651-a69c96de7a62,08f394f9-d254-4fe5-8651-a69c96de7a62,0,1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,0,1,6aff6b2f-660b-4d75-9064-fed7a6b0feac,6aff6b2f-660b-4d75-9064-fed7a6b0feac,0,1,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,0,1,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,0,1,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,0,1,e60a9221-7676-456f-8a01-b317b03a278b,e60a9221-7676-456f-8a01-b317b03a278b,0,1,4e81ec90-f668-49ca-9193-22337bafb01b,4e81ec90-f668-49ca-9193-22337bafb01b,0,1,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,0,1,cd60adec-52d6-4fa8-85ca-26551196432c,cd60adec-52d6-4fa8-85ca-26551196432c,0,1,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,0,1,b71ddbdb-08bb-46be-a79d-319c4a557e76,b71ddbdb-08bb-46be-a79d-319c4a557e76,0,1,d3dfa867-3d52-4872-a69e-f27636abe1bd,d3dfa867-3d52-4872-a69e-f27636abe1bd,0,1,6952d1aa-7132-4e40-8542-f64a4dc1e029,6952d1aa-7132-4e40-8542-f64a4dc1e029,0,1,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,0,1,1621811b-dfd3-4c58-8e15-ced16690147a,1621811b-dfd3-4c58-8e15-ced16690147a,0,1,3f266e51-0476-4b7f-8d61-6f9f4456049d,3f266e51-0476-4b7f-8d61-6f9f4456049d,0,1,2b9ce591-ff13-4c2d-85c4-632a2609a211,2b9ce591-ff13-4c2d-85c4-632a2609a211,0,1,689ca0ec-61ce-4590-b73b-ac81e8f1d459,689ca0ec-61ce-4590-b73b-ac81e8f1d459,0,1,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,0,1,55ad36d7-399e-4b82-8d1c-d45bd890abfe,55ad36d7-399e-4b82-8d1c-d45bd890abfe,0,1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0,1,1b39a65f-5425-4bcb-85bd-1425274af8a8,1b39a65f-5425-4bcb-85bd-1425274af8a8,0,1,392a0618-a41a-4713-a561-f3a80b85abd8,392a0618-a41a-4713-a561-f3a80b85abd8,0,1,a453384d-658d-40f1-ac69-578aa3a24e39,a453384d-658d-40f1-ac69-578aa3a24e39,0,1,2215a441-b9b1-4e5c-8df3-e6cee9226c43,2215a441-b9b1-4e5c-8df3-e6cee9226c43,0,1,2a8d4908-ea0d-4837-be3f-bd78f6b61254,2a8d4908-ea0d-4837-be3f-bd78f6b61254,0,1,ec1deb79-7369-4b26-8e91-f51399e8052a,ec1deb79-7369-4b26-8e91-f51399e8052a,0,1,75dde4fb-3a1a-450c-95c2-c1f95a781db9,75dde4fb-3a1a-450c-95c2-c1f95a781db9,0,1,0ae3ac56-160a-417e-9952-719d02e7f089,0ae3ac56-160a-417e-9952-719d02e7f089,0,1,48659b94-ace8-45f4-a043-6b2731ec6925,48659b94-ace8-45f4-a043-6b2731ec6925,0,1,3a8e60f9-19cb-42a6-a448-ad211261d9b8,3a8e60f9-19cb-42a6-a448-ad211261d9b8,0,1,74320602-094a-4645-b2c9-3053377a3ac3,74320602-094a-4645-b2c9-3053377a3ac3,0,1,3aba26a3-76ee-46c0-9e11-6f64fc754a0d,3aba26a3-76ee-46c0-9e11-6f64fc754a0d,0,1,b066c732-9c5f-4504-894f-96d457b0768f,b066c732-9c5f-4504-894f-96d457b0768f,0,1,9366463d-aa8a-4e89-86d8-c7f746f9551b,9366463d-aa8a-4e89-86d8-c7f746f9551b,0,1,e25da569-d435-45b2-b4e8-fc76d7f1c8df,e25da569-d435-45b2-b4e8-fc76d7f1c8df,0,1,a51a7f57-9c52-4457-819c-13e1b6f886e1,a51a7f57-9c52-4457-819c-13e1b6f886e1,0,1,7d08daba-5e36-4ce3-8a70-17750959b89e,7d08daba-5e36-4ce3-8a70-17750959b89e,0,1,e2c2d915-ae50-4fa0-add3-26ad7dc75efb,e2c2d915-ae50-4fa0-add3-26ad7dc75efb,0,1,39344a8c-2662-48ff-937b-12951bb268fb,39344a8c-2662-48ff-937b-12951bb268fb,0,1,b577663f-ead2-4b18-a4f6-f7f303e89319,b577663f-ead2-4b18-a4f6-f7f303e89319,0,1,43dc335f-5503-47ab-9c6b-0b4c6ab13f57,43dc335f-5503-47ab-9c6b-0b4c6ab13f57,0,1,6cc0a1d7-01eb-4af6-b4ed-4002e2316080,6cc0a1d7-01eb-4af6-b4ed-4002e2316080,0,1,72663843-4010-42ed-989b-0b58bf9f7146,72663843-4010-42ed-989b-0b58bf9f7146,0,1,79da4490-f0b0-48b5-b435-3b2c9ffb0eb3,79da4490-f0b0-48b5-b435-3b2c9ffb0eb3,0,1,3adcceea-867e-4b88-a633-4f8d4ccb43c0,3adcceea-867e-4b88-a633-4f8d4ccb43c0,0,1,a132189c-6584-4bb1-9cfd-1415cd83228a,a132189c-6584-4bb1-9cfd-1415cd83228a,0,1,7ba50e13-0a78-4cca-821f-006b1c83b0b0,7ba50e13-0a78-4cca-821f-006b1c83b0b0,0,1,a3670f95-5abe-49ee-8ea5-d7e4438801ba,a3670f95-5abe-49ee-8ea5-d7e4438801ba,0,1,4443dea1-5143-4e76-97a7-c35dbe1665e4,4443dea1-5143-4e76-97a7-c35dbe1665e4,0,1,0d780521-0767-425a-b44d-315d2dc42d04,0d780521-0767-425a-b44d-315d2dc42d04,0,1,c5b1572d-28f5-42f3-b2e0-8b54f091642e,c5b1572d-28f5-42f3-b2e0-8b54f091642e,0,1,0986c1b6-b677-428d-b49f-a93e40e77171,0986c1b6-b677-428d-b49f-a93e40e77171,0,1,b9c41558-8fe7-45f6-bcb0-5ea3a35264cf,b9c41558-8fe7-45f6-bcb0-5ea3a35264cf,0,1,597c1f9b-3cbd-42bd-b819-f29b3a3f073a,597c1f9b-3cbd-42bd-b819-f29b3a3f073a,0,1,b6662b2e-7e93-4eaa-9e4b-b5647285932b,b6662b2e-7e93-4eaa-9e4b-b5647285932b,0,1,4a180f2c-dc54-4591-8f62-f236d1e07799,4a180f2c-dc54-4591-8f62-f236d1e07799,0,1,f8a456fa-a533-444c-a504-0e74306ada44,f8a456fa-a533-444c-a504-0e74306ada44,0,1,4751a91a-f211-4f66-8238-9bb5668cbc67,4751a91a-f211-4f66-8238-9bb5668cbc67,0,1,b9a6b053-2b93-4946-9531-040d3131dcc5,b9a6b053-2b93-4946-9531-040d3131dcc5,0,1,d95dd1f5-ef84-4bcc-b017-65e390d48873,d95dd1f5-ef84-4bcc-b017-65e390d48873,0,1,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,0,1,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,0,1,e84acba7-7e0f-43e8-a545-6e53d529d5d4,e84acba7-7e0f-43e8-a545-6e53d529d5d4,0,1,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,0,1,6086d53f-f1b2-4126-ab46-64705fe63b87,6086d53f-f1b2-4126-ab46-64705fe63b87,0,1,9295d88f-0865-440c-a98a-4710c50211be,9295d88f-0865-440c-a98a-4710c50211be,0,1,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,0,1,c66d0377-45bb-4ef0-bf9b-b44a9c510d38,c66d0377-45bb-4ef0-bf9b-b44a9c510d38,0,1,f1381abc-e09f-407d-b6b5-c59e7c9e2fd7,f1381abc-e09f-407d-b6b5-c59e7c9e2fd7,0,1,9c052faf-1d7c-452d-ab81-7fd8f283af66,9c052faf-1d7c-452d-ab81-7fd8f283af66,0,1,5197d1d9-e5f7-4c2d-a72f-8e321a5bde04,5197d1d9-e5f7-4c2d-a72f-8e321a5bde04,0,1,c4bc2765-4007-4f48-b8f0-f5911c9a62b6,c4bc2765-4007-4f48-b8f0-f5911c9a62b6,0,1,5cd8157f-7d91-48b7-afd6-11942da3ba24,5cd8157f-7d91-48b7-afd6-11942da3ba24,0,1,8172256e-f51e-4de0-bd07-3668785f4cb9,8172256e-f51e-4de0-bd07-3668785f4cb9,0,1,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,0,1,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,0,1,c172aeaf-b444-47c0-baee-80ccd91fe934,c172aeaf-b444-47c0-baee-80ccd91fe934,0,1,5e2ab240-c2df-4a77-901f-c6c0a5ddbaaf,5e2ab240-c2df-4a77-901f-c6c0a5ddbaaf,0,1,016e5c18-2a1f-49fd-b618-078d752820c9,016e5c18-2a1f-49fd-b618-078d752820c9,0,1,6287eded-23d8-4b04-8415-1d9afa17713b,6287eded-23d8-4b04-8415-1d9afa17713b,0,1,8ce3513d-d086-46f4-81c3-1761594a64c5,8ce3513d-d086-46f4-81c3-1761594a64c5,0,1,79cb147c-8c6b-4f6e-8d5d-dfa29a6e6e53,79cb147c-8c6b-4f6e-8d5d-dfa29a6e6e53,0,1,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,0,1,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0,1,bde05768-2dd6-4800-985d-27075f610cca,bde05768-2dd6-4800-985d-27075f610cca,0,1,420748d8-4042-4e1e-aca1-ac0190cdf54e,420748d8-4042-4e1e-aca1-ac0190cdf54e,0,1,e6c871d6-e06f-420b-ae04-dbf735d3233d,e6c871d6-e06f-420b-ae04-dbf735d3233d,0,1,e352fc19-96be-4410-a516-bc58cc234422,e352fc19-96be-4410-a516-bc58cc234422,0,1,9b742da4-1696-4c06-9dfa-dd85c9286c74,9b742da4-1696-4c06-9dfa-dd85c9286c74,0,1,64344383-5823-42aa-8004-f0ce4bfee198,64344383-5823-42aa-8004-f0ce4bfee198,0,1,94eaae81-638b-4ac2-aea3-174e1c9c2877,94eaae81-638b-4ac2-aea3-174e1c9c2877,0,1,59edae58-edef-4451-97e1-9fbb46a3fd9c,59edae58-edef-4451-97e1-9fbb46a3fd9c,0,1,db1062bc-4164-4095-9640-9804c0ebcd0b,db1062bc-4164-4095-9640-9804c0ebcd0b,0,1,ea7c61ff-745c-4908-9a94-bba022d12de4,ea7c61ff-745c-4908-9a94-bba022d12de4,0,1,e0519f0c-9c99-4f5c-a3a9-27adce45737d,e0519f0c-9c99-4f5c-a3a9-27adce45737d,0,1,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,0,1,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,0,1,53caada5-1d53-45dc-9432-90075ddca890,53caada5-1d53-45dc-9432-90075ddca890,0,1,d1472d23-954b-4069-b2d6-df08c6ec0be1,d1472d23-954b-4069-b2d6-df08c6ec0be1,0,1,93fe2ce6-7193-42bc-a966-4653b7989eaa,93fe2ce6-7193-42bc-a966-4653b7989eaa,0,1,73d04ff9-ca39-4a7b-82d6-a7dba677c7d8,73d04ff9-ca39-4a7b-82d6-a7dba677c7d8,0,1,ee657795-8850-4735-a655-80d0d451c3ff,ee657795-8850-4735-a655-80d0d451c3ff,0,1,a7fe0aa5-722c-4a09-889b-ee422421addc,a7fe0aa5-722c-4a09-889b-ee422421addc,0,1,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,0,1,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,0,1,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,0,1,5a7a98c9-af4d-4961-ae3c-4c1f3accce8d,5a7a98c9-af4d-4961-ae3c-4c1f3accce8d,0,1,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,0,1,e1314cd1-e662-4c29-ad51-492cb0029883,e1314cd1-e662-4c29-ad51-492cb0029883,0,1,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,0,1,9bc09758-a7ce-44e0-baa3-a3e909869d9b,9bc09758-a7ce-44e0-baa3-a3e909869d9b,0,1,9690842c-7a2c-4b5d-a238-f730afc49a7b,9690842c-7a2c-4b5d-a238-f730afc49a7b,0,1,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,0,1,240bec31-cd59-477b-8459-8e3278da22dc,240bec31-cd59-477b-8459-8e3278da22dc,0,1,0874a3c0-0d16-4172-b467-f0666d5fcaee,0874a3c0-0d16-4172-b467-f0666d5fcaee,0,1,cc380a19-ab29-4f20-93ad-9a58cd4de56e,cc380a19-ab29-4f20-93ad-9a58cd4de56e,0,1,e54a8786-86a4-48e3-a210-aaae4e5fce8c,e54a8786-86a4-48e3-a210-aaae4e5fce8c,0,1,86c86ea2-d14e-4443-b36c-c1c17c4f768a,86c86ea2-d14e-4443-b36c-c1c17c4f768a,0,1,14512818-58b0-44cc-b00d-d37913c57aad,14512818-58b0-44cc-b00d-d37913c57aad,0,1,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,0,1,57964dd6-4b0b-4590-bc44-de744cc423af,57964dd6-4b0b-4590-bc44-de744cc423af,0,1,46e0522b-b88b-43b2-9067-a5359e90994b,46e0522b-b88b-43b2-9067-a5359e90994b,0,1,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,0,1,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,0,1,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,0,1,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,0,1,d487e66e-a7b0-4110-903e-652fe0e6106c,d487e66e-a7b0-4110-903e-652fe0e6106c,0,1,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,0,1,d95fcb37-fc65-466d-93e2-489f41683276,d95fcb37-fc65-466d-93e2-489f41683276,0,1,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,0,1,0bddbceb-5739-46f8-88b6-06bcead350d9,0bddbceb-5739-46f8-88b6-06bcead350d9,0,1,a27a9296-46bb-49a1-8308-db675baa81d0,a27a9296-46bb-49a1-8308-db675baa81d0,0,1,1456f317-360c-4190-b2d1-1be7484369a5,1456f317-360c-4190-b2d1-1be7484369a5,0,1,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,0,1,4867948f-b027-44ae-b78c-a94e00eed52b,4867948f-b027-44ae-b78c-a94e00eed52b,0,1,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,0,1,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,0,1,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,0,1,f0ffe529-481f-4eed-8fc8-02a9d8f08f7a,f0ffe529-481f-4eed-8fc8-02a9d8f08f7a,0,1,618d13d5-fd1f-4b70-ad45-dd6a17a50730,618d13d5-fd1f-4b70-ad45-dd6a17a50730,0,1,58037b76-b548-4f07-bd67-67e552a5c6e5,58037b76-b548-4f07-bd67-67e552a5c6e5,0,1,25ca2e70-0293-4bd4-9e08-bbd39120b3cf,25ca2e70-0293-4bd4-9e08-bbd39120b3cf,0,1,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,0,1,be9144ce-5560-47bb-8c5e-9beefd15bfc3,be9144ce-5560-47bb-8c5e-9beefd15bfc3,0,1,ad09d1e6-5982-4e1c-864e-452ac5b2915a,ad09d1e6-5982-4e1c-864e-452ac5b2915a,0,1,caea53be-d2f7-4109-8017-d2bfdfde8c6f,caea53be-d2f7-4109-8017-d2bfdfde8c6f,0,1,349378d1-abe3-44de-84a4-d525b08e0474,349378d1-abe3-44de-84a4-d525b08e0474,0,1,1526b18d-7fab-414e-a5b2-377b67ac0b55,1526b18d-7fab-414e-a5b2-377b67ac0b55,0,1,c561fe6b-53ea-435b-a230-1850e2dc1ff5,c561fe6b-53ea-435b-a230-1850e2dc1ff5,0,1,aba7605f-6baf-42a8-b5ad-8f71c780b81f,aba7605f-6baf-42a8-b5ad-8f71c780b81f,0,1,8fc19eca-1a15-4758-af4b-79637e51edfb,8fc19eca-1a15-4758-af4b-79637e51edfb,0,1,19056365-9ff1-4733-876e-a7ebdbbe0557,19056365-9ff1-4733-876e-a7ebdbbe0557,0,1,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0,1,28dc34df-1daa-49a2-a12e-db91ee963459,28dc34df-1daa-49a2-a12e-db91ee963459,0,1,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,0,1,2233ce53-b8a8-4c83-97a2-683c8575462a,2233ce53-b8a8-4c83-97a2-683c8575462a,0,1,2071f210-dc13-43c0-a58e-b982821d6842,2071f210-dc13-43c0-a58e-b982821d6842,0,1,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,0,1,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,0,1,017b28eb-8ba9-465e-a748-20eadbeb4ea2,017b28eb-8ba9-465e-a748-20eadbeb4ea2,0,1,c0bb2d66-94c9-4bc6-afd5-534075e8395b,c0bb2d66-94c9-4bc6-afd5-534075e8395b,0,1,db7cc693-1645-4416-a9d9-5a7584cd3bbc,db7cc693-1645-4416-a9d9-5a7584cd3bbc,0,1,8ca0258c-96d8-4a12-b94f-db968195ee0a,8ca0258c-96d8-4a12-b94f-db968195ee0a,0,1,245c07a9-98b0-452b-b899-dc8751ab7ce0,245c07a9-98b0-452b-b899-dc8751ab7ce0,0,1,c849fb09-7833-49c8-9461-98426dc6c0af,c849fb09-7833-49c8-9461-98426dc6c0af,0,1,6c58fc3a-37f8-44b7-b076-2c10ce09b554,6c58fc3a-37f8-44b7-b076-2c10ce09b554,0,1,b94523c0-33fe-452a-ada5-071cd78fc47b,b94523c0-33fe-452a-ada5-071cd78fc47b,0,1,b4b8dd52-0cc4-4c69-9ec7-f06f2d79586b,b4b8dd52-0cc4-4c69-9ec7-f06f2d79586b,0,1,4e550d28-7174-412b-bfed-559a3dc753f6,4e550d28-7174-412b-bfed-559a3dc753f6,0,1,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,0,1,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,0,1,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,0,1,4dfc428e-c2d7-40b8-925f-d7c186f52476,4dfc428e-c2d7-40b8-925f-d7c186f52476,0,1,80ae578c-f6c7-4589-98c5-5691714baa29,80ae578c-f6c7-4589-98c5-5691714baa29,0,1,a44cc726-48b9-4193-8991-c9e0777ed7de,a44cc726-48b9-4193-8991-c9e0777ed7de,0,1,52c38669-4735-4f5b-8e0e-17d7e15ea94a,52c38669-4735-4f5b-8e0e-17d7e15ea94a,0,1,fef727fa-f63b-4467-9367-73a2425b19e3,fef727fa-f63b-4467-9367-73a2425b19e3,0,1,bfa90848-930f-433d-8f6f-c11ac2c5eba2,bfa90848-930f-433d-8f6f-c11ac2c5eba2,0,1,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,0,1,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,0,1,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,0,1,d78b5faf-b34b-4fa2-89a5-f4bc45203528,d78b5faf-b34b-4fa2-89a5-f4bc45203528,0,1,b4e10835-31e8-4f16-a5eb-0b2ac687fa65,b4e10835-31e8-4f16-a5eb-0b2ac687fa65,0,1,942a962a-bccb-42c0-b279-077a9b33c70a,942a962a-bccb-42c0-b279-077a9b33c70a,0,1,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,0,1,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,0,1,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,0,1,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,0,1,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,0,1,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,0,1,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1e63c656-a0e7-4b33-8bac-2a196e028ffa,0,1,085cbea9-1df1-4ee9-afb7-da2bf313697e,085cbea9-1df1-4ee9-afb7-da2bf313697e,0,1,b3152292-5546-4896-ad24-cb41057698d8,b3152292-5546-4896-ad24-cb41057698d8,0,1,67171b08-7dd7-451d-a22d-01858ce4ab2b,67171b08-7dd7-451d-a22d-01858ce4ab2b,0,1,68299930-fc24-4731-b1bb-59aecdbacf5e,68299930-fc24-4731-b1bb-59aecdbacf5e,0,1,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,0,1,c38d8135-e11f-4860-b370-84ff279b7fbd,c38d8135-e11f-4860-b370-84ff279b7fbd,0,1,ee0798f5-47a8-4118-a25c-cfd3473007c1,ee0798f5-47a8-4118-a25c-cfd3473007c1,0,1,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,0,1,28c3f8f5-78f8-4d09-9f09-1407825b13e3,28c3f8f5-78f8-4d09-9f09-1407825b13e3,0,1,69149ce1-d3f8-4e12-be8f-b328ade60882,69149ce1-d3f8-4e12-be8f-b328ade60882,0,1,ff592ecb-eb08-4554-87bf-1d2935b21d3c,ff592ecb-eb08-4554-87bf-1d2935b21d3c,0,1,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,0,1,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0,1,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0,1,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,0,1,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,0,1,e7d51ada-f286-4519-bfae-ece95dd4d7b0,e7d51ada-f286-4519-bfae-ece95dd4d7b0,0,1,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,0,1,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,0,1,fa7309b1-916b-454b-8357-b71aca1e2fb7,fa7309b1-916b-454b-8357-b71aca1e2fb7,0,1,d975aef4-8da8-4486-baeb-a99c48cff0ec,d975aef4-8da8-4486-baeb-a99c48cff0ec,0,1,9da27139-0bed-47b0-aef6-246929968502,9da27139-0bed-47b0-aef6-246929968502,0,1,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,0,1,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,0,1,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,0,1,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,0,1,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,0,1,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,0,1,8e99ed5a-d64a-4d4d-a422-3f1055be6ebd,8e99ed5a-d64a-4d4d-a422-3f1055be6ebd,0,1,c59e11f3-6bcb-404a-9d76-1416c12be354,c59e11f3-6bcb-404a-9d76-1416c12be354,0,1,c1a1f12b-3978-4047-956e-a5c7de8371a0,c1a1f12b-3978-4047-956e-a5c7de8371a0,0,1,ac39b903-0c60-417e-a50f-49ed375424f5,ac39b903-0c60-417e-a50f-49ed375424f5,0,1,831f4abd-4f96-417f-a71a-9ff481c23922,831f4abd-4f96-417f-a71a-9ff481c23922,0,1,9887e36d-0dba-4301-a77b-102caefc7ca9,9887e36d-0dba-4301-a77b-102caefc7ca9,0,1,7eef7281-c5c6-48d5-a636-c437b75611d6,7eef7281-c5c6-48d5-a636-c437b75611d6,0,1,3494fa21-02e0-46bb-b810-534e6f1b4b20,3494fa21-02e0-46bb-b810-534e6f1b4b20,0,1,c6c2fa57-a3c2-4f2a-bc02-4436f570cc78,c6c2fa57-a3c2-4f2a-bc02-4436f570cc78,0,1,d73cc867-e293-4fff-9898-dd50e27e26f4,d73cc867-e293-4fff-9898-dd50e27e26f4,0,1,64f667e5-6a8f-448f-aed5-a4d461232845,64f667e5-6a8f-448f-aed5-a4d461232845,0,1,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,0,1,037842ca-aeaf-4e27-9a0e-e929438b6f40,037842ca-aeaf-4e27-9a0e-e929438b6f40,0,1,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,0,1,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,0,1,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,0,1,237dab99-ed72-432c-ad01-c6045d74f000,237dab99-ed72-432c-ad01-c6045d74f000,0,1,59855d19-29cd-4efd-a453-b19e574113ef,59855d19-29cd-4efd-a453-b19e574113ef,0,1,94e08dcf-3885-4a73-82ab-cb291f1cf95f,94e08dcf-3885-4a73-82ab-cb291f1cf95f,0,1,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0,1,fba74e94-e7e1-46d9-b72b-269cb1cc8a71,fba74e94-e7e1-46d9-b72b-269cb1cc8a71,0,1,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,0,1,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,0,1,a687748a-0b2a-4277-b935-07616d28430d,a687748a-0b2a-4277-b935-07616d28430d,0,1,33f8892d-8d7f-4b00-af4f-af37193fa395,33f8892d-8d7f-4b00-af4f-af37193fa395,0,1,641ebe22-7135-4adb-bbd6-e0c37d246a2d,641ebe22-7135-4adb-bbd6-e0c37d246a2d,0,1,f71ba01e-9f6b-4241-8048-4368c8888756,f71ba01e-9f6b-4241-8048-4368c8888756,0,1,b95681f4-8f91-483e-a9c5-c8a21058679a,b95681f4-8f91-483e-a9c5-c8a21058679a,0,1,60208d56-f778-4ff6-abdd-ea6622504ace,60208d56-f778-4ff6-abdd-ea6622504ace,0,1,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,0,1,1a3097ae-e51a-4335-93fc-47fcbbe8e8b7,1a3097ae-e51a-4335-93fc-47fcbbe8e8b7,0,1,6aa814fa-417e-428c-951e-6efd9d0775da,6aa814fa-417e-428c-951e-6efd9d0775da,0,1,5a979568-6bc7-4f75-b585-ebdcaafc119a,5a979568-6bc7-4f75-b585-ebdcaafc119a,0,1,a247efe1-8608-4780-9cc8-54e29944475b,a247efe1-8608-4780-9cc8-54e29944475b,0,1,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,0,1,97ea39b4-9a69-4598-b998-044fba1f4f81,97ea39b4-9a69-4598-b998-044fba1f4f81,0,1,a8f162e9-3f59-41a5-b82f-da20928213c7,a8f162e9-3f59-41a5-b82f-da20928213c7,0,1,ade68dfd-5037-4fd7-b043-9514e3fe6342,ade68dfd-5037-4fd7-b043-9514e3fe6342,0,1,7b008aad-9d05-43e1-8295-62ae58cfff42,7b008aad-9d05-43e1-8295-62ae58cfff42,0,1,fdaf9255-d621-4a98-9530-f618ed440795,fdaf9255-d621-4a98-9530-f618ed440795,0,1,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,0,1,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,0,1,bfad444f-ee47-4131-a371-8089b8a09f4f,bfad444f-ee47-4131-a371-8089b8a09f4f,0,1,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,0,1,f5417147-4d2a-4e49-911b-2bb5eccb8441,f5417147-4d2a-4e49-911b-2bb5eccb8441,0,1,20fbed2b-4393-4de0-a71d-017a336bdac0,20fbed2b-4393-4de0-a71d-017a336bdac0,0,1,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,0,1,475f8577-a141-496b-94e1-53215c0dd017,475f8577-a141-496b-94e1-53215c0dd017,0,1,97638762-c01e-4c8f-88e2-b356e517e18f,97638762-c01e-4c8f-88e2-b356e517e18f,0,1,074e34f2-e9be-4bd3-beca-8b916772e2be,074e34f2-e9be-4bd3-beca-8b916772e2be,0,1,28fecf1b-7cab-4087-b66e-2052edb8ce3a,28fecf1b-7cab-4087-b66e-2052edb8ce3a,0,1,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,0,1,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,0,1,0d124daf-dc52-4391-a2d9-3c43a45c422c,0d124daf-dc52-4391-a2d9-3c43a45c422c,0,1,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,0,1,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,0,1,f8139d21-0380-43b5-8025-c986f8598c74,f8139d21-0380-43b5-8025-c986f8598c74,0,1,9da32b56-ff89-4739-bb99-615074b72298,9da32b56-ff89-4739-bb99-615074b72298,0,1,08baf3ee-b8ca-4f29-89fc-c15344064ad3,08baf3ee-b8ca-4f29-89fc-c15344064ad3,0,1,01b85e3a-9920-425a-9de5-5079fffeef93,01b85e3a-9920-425a-9de5-5079fffeef93,0,1,82e12316-cc64-4d2f-83fa-054b5a738f02,82e12316-cc64-4d2f-83fa-054b5a738f02,0,1,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,0,1,f01fedee-d4c1-498d-9c9b-78b2e7e99e65,f01fedee-d4c1-498d-9c9b-78b2e7e99e65,0,1,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,0,1,7c34aa14-1300-4d03-8a1f-56e801748db4,7c34aa14-1300-4d03-8a1f-56e801748db4,0,1,b00c31d6-4fc6-4189-9f72-f91742ec705f,b00c31d6-4fc6-4189-9f72-f91742ec705f,0,1,1333101b-82e8-41a9-a793-5af5dcd6f68a,1333101b-82e8-41a9-a793-5af5dcd6f68a,0,1,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,0,1,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,0,1,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,0,1,d5cf2a3a-3176-4971-b67b-45e090e9b8df,d5cf2a3a-3176-4971-b67b-45e090e9b8df,0,1,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,0,1,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,0,1,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,0,1,472ce1c2-9e83-418b-b1ec-e15e126bc919,472ce1c2-9e83-418b-b1ec-e15e126bc919,0,1,07bb26ac-bd97-465f-a192-db7fedbb579b,07bb26ac-bd97-465f-a192-db7fedbb579b,0,1,5462f1ab-2095-4515-875e-471900f05db9,5462f1ab-2095-4515-875e-471900f05db9,0,1,84e63b9b-0293-49bc-ba7f-e803bc44fc42,84e63b9b-0293-49bc-ba7f-e803bc44fc42,0,1,4f2d0398-49f4-410c-a451-436cbf96a262,4f2d0398-49f4-410c-a451-436cbf96a262,0,1,aace391f-e561-4848-8b28-ef44f2d262bb,aace391f-e561-4848-8b28-ef44f2d262bb,0,1,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,0,1,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,0,1,c1508d67-ac6d-41e3-884d-b3bdd54659f8,c1508d67-ac6d-41e3-884d-b3bdd54659f8,0,1,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,0,1,35103a27-230c-45c0-a8c9-24bd46608bbb,35103a27-230c-45c0-a8c9-24bd46608bbb,0,1,b6566d54-e821-4a2a-a447-0f533f35de91,b6566d54-e821-4a2a-a447-0f533f35de91,0,1,46568b9a-a765-4037-8a86-b184a570ab37,46568b9a-a765-4037-8a86-b184a570ab37,0,1,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,0,1,547a6dec-6fe8-439d-a8d9-ac2612af20d2,547a6dec-6fe8-439d-a8d9-ac2612af20d2,0,1,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,0,1,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,0,1,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,0,1,bed22a72-1a5e-46e5-ad71-f94e9508e272,bed22a72-1a5e-46e5-ad71-f94e9508e272,0,1,9cf45640-aeb3-45aa-97aa-922a83e61510,9cf45640-aeb3-45aa-97aa-922a83e61510,0,1,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,0,1,9d5c615c-49af-45e9-aa3d-07747466a51b,9d5c615c-49af-45e9-aa3d-07747466a51b,0,1,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,0,1,36ec0fb5-a5f3-4685-9696-c44a393998f6,36ec0fb5-a5f3-4685-9696-c44a393998f6,0,1,1b887b59-9a72-4aa3-a985-7a8d6a427b95,1b887b59-9a72-4aa3-a985-7a8d6a427b95,0,1,1fca06d9-b015-4fc8-abdd-3e2397e0c307,1fca06d9-b015-4fc8-abdd-3e2397e0c307,0,1,05b6a743-5831-4c77-894c-b19005b0e141,05b6a743-5831-4c77-894c-b19005b0e141,0,1,295a5554-f6cc-437b-9e89-c6f653a8b858,295a5554-f6cc-437b-9e89-c6f653a8b858,0,1,eb9ec412-3dc0-4d58-9b15-785324e58378,eb9ec412-3dc0-4d58-9b15-785324e58378,0,1,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,0,1,b6ac957c-0525-4c48-854e-86007beb83db,b6ac957c-0525-4c48-854e-86007beb83db,0,1,4a1e6d25-89e7-468a-aef1-6ded0154dca2,4a1e6d25-89e7-468a-aef1-6ded0154dca2,0,1,905624ea-b253-413f-b651-1eb2c5a7d52a,905624ea-b253-413f-b651-1eb2c5a7d52a,0,1,b639ed30-3e37-4c65-a39f-00fe735950eb,b639ed30-3e37-4c65-a39f-00fe735950eb,0,1,078d3269-80fd-4406-9972-ab2a5fd83434,078d3269-80fd-4406-9972-ab2a5fd83434,0,1,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,0,1,f137eb0f-bde7-412d-9229-d7a4f9456e6c,f137eb0f-bde7-412d-9229-d7a4f9456e6c,0,1,90880131-8065-4a7e-a0fa-ecff9e27363c,90880131-8065-4a7e-a0fa-ecff9e27363c,0,1,57e9fcea-342c-4089-bd10-befb3faf0dbd,57e9fcea-342c-4089-bd10-befb3faf0dbd,0,1,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,0,1,f811b0b7-41b5-4591-9910-780f08780236,f811b0b7-41b5-4591-9910-780f08780236,0,1,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,0,1,51a0444d-13c8-45a8-97f6-f3f976964bf8,51a0444d-13c8-45a8-97f6-f3f976964bf8,0,1,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,0,1,7e2ba519-fbb9-4163-b20b-b99898e6ac57,7e2ba519-fbb9-4163-b20b-b99898e6ac57,0,1,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,0,1,0a5e38b7-2794-419f-8c29-076490c7b5ce,0a5e38b7-2794-419f-8c29-076490c7b5ce,0,1,1346045c-e747-4d5c-b8c6-d9dcc268ed3a,1346045c-e747-4d5c-b8c6-d9dcc268ed3a,0,1,e7ed2b66-e360-466a-8b5e-8ba0d8e36aba,e7ed2b66-e360-466a-8b5e-8ba0d8e36aba,0,1,eab50f82-4612-47fd-a5c2-9678016a1937,eab50f82-4612-47fd-a5c2-9678016a1937,0,1,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,0,1,bf1e9682-3cc6-44b6-b9e4-a3b37facb0e7,bf1e9682-3cc6-44b6-b9e4-a3b37facb0e7,0,1,9a70c38e-6770-4edf-9566-ce44b537a532,9a70c38e-6770-4edf-9566-ce44b537a532,0,1,417063e2-7d8c-4837-b68d-df5724048e70,417063e2-7d8c-4837-b68d-df5724048e70,0,1,31628f30-2ac2-446e-9b32-c544019c0b40,31628f30-2ac2-446e-9b32-c544019c0b40,0,1,cd9bafa1-23fe-4094-9137-b36df6e8e8f5,cd9bafa1-23fe-4094-9137-b36df6e8e8f5,0,1,c1b4726f-7d9f-43a2-817a-5b7ce7a4fb46,c1b4726f-7d9f-43a2-817a-5b7ce7a4fb46,0,1,e24adcf3-71b1-4081-8dab-3aaa628a9331,e24adcf3-71b1-4081-8dab-3aaa628a9331,0,1,00fc7fe1-66c2-4d3d-bc17-b3ba5211a3ab,00fc7fe1-66c2-4d3d-bc17-b3ba5211a3ab,0,1,64d4b8ea-5906-4f0b-8328-9139a09202c0,64d4b8ea-5906-4f0b-8328-9139a09202c0,0,1,e8301322-f929-4ff5-9633-18e8a08db6fd,e8301322-f929-4ff5-9633-18e8a08db6fd,0,1,0af47dcf-7220-4b15-bb14-3324f65b8af6,0af47dcf-7220-4b15-bb14-3324f65b8af6,0,1,a9559418-2410-4e20-8bf1-74983406d2f3,a9559418-2410-4e20-8bf1-74983406d2f3,0,1,05069fb4-0bbb-4d8e-93f3-e5be47a4d777,05069fb4-0bbb-4d8e-93f3-e5be47a4d777,0,1,6e4f3314-4f8a-4413-b946-805cc375ffe6,6e4f3314-4f8a-4413-b946-805cc375ffe6,0,1,7adec5ff-8172-4a62-9e5c-8ef77df16d1b,7adec5ff-8172-4a62-9e5c-8ef77df16d1b,0,1,57fa19bb-3f68-4243-b216-a8e13a022b48,57fa19bb-3f68-4243-b216-a8e13a022b48,0,1,4ec82ae6-fbd6-4788-bcf0-2c21ce54a03d,4ec82ae6-fbd6-4788-bcf0-2c21ce54a03d,0,1,578a92d3-b380-4a8b-af9d-2f608dbae5d0,578a92d3-b380-4a8b-af9d-2f608dbae5d0,0,1,ca8450e9-38c1-4db7-8832-2c6fe2c4dc0b,ca8450e9-38c1-4db7-8832-2c6fe2c4dc0b,0,1,138f0718-4566-41d7-86f7-50f0c5e6c90e,138f0718-4566-41d7-86f7-50f0c5e6c90e,0,1,3e12296d-7cd7-4dbc-bdf3-3d40f945b483,3e12296d-7cd7-4dbc-bdf3-3d40f945b483,0,1,baa2f562-a08c-41d9-b1fc-881aafeef2fa,baa2f562-a08c-41d9-b1fc-881aafeef2fa,0,1,020882c2-dbc4-4b40-8556-6a11d75b00fe,020882c2-dbc4-4b40-8556-6a11d75b00fe,0,1,f54dd38b-e222-4520-bdf7-8d6c64c0244c,f54dd38b-e222-4520-bdf7-8d6c64c0244c,0,1,58aabfdb-61c2-42ad-aed1-0e88b5414f0b,58aabfdb-61c2-42ad-aed1-0e88b5414f0b,0,1,52507c4e-9378-4f00-a6b8-dd7e60d2afa5,52507c4e-9378-4f00-a6b8-dd7e60d2afa5,0,1,bc22ce64-a79c-4118-8ede-a69d66f62b0a,bc22ce64-a79c-4118-8ede-a69d66f62b0a,0,1,d21971c9-9aa6-448a-ab37-49ad0b0547ec,d21971c9-9aa6-448a-ab37-49ad0b0547ec,0,1,230b80c7-620a-40d3-b473-b6289cfce8c0,230b80c7-620a-40d3-b473-b6289cfce8c0,0,1,5efd2e2e-9b83-4c0d-9bbd-4075b5127d92,5efd2e2e-9b83-4c0d-9bbd-4075b5127d92,0,1,3e4361e9-2baf-407b-9320-b2a265b44e46,3e4361e9-2baf-407b-9320-b2a265b44e46,0,1,e035494e-71ed-44f1-b04c-f2f47bcfa0fe,e035494e-71ed-44f1-b04c-f2f47bcfa0fe,0,1,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,0,1,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,0,1,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,0,1,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,0,1,d9f1f56b-75c8-43e9-8043-89076c225f78,d9f1f56b-75c8-43e9-8043-89076c225f78,0,1,ccd2536d-592f-4109-bda9-7964c8b9757d,ccd2536d-592f-4109-bda9-7964c8b9757d,0,1,6c34eef9-9405-4de0-9177-1bae85251ae4,6c34eef9-9405-4de0-9177-1bae85251ae4,0,1,d295f084-1c23-4c94-90eb-85928648224e,d295f084-1c23-4c94-90eb-85928648224e,0,1,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,0,1,e09534e3-ac6e-42a6-86e8-564acb20089a,e09534e3-ac6e-42a6-86e8-564acb20089a,0,1,63223883-06cf-4d01-be95-5e410cc58a22,63223883-06cf-4d01-be95-5e410cc58a22,0,1,1929139f-dabb-4c40-9423-158093360889,1929139f-dabb-4c40-9423-158093360889,0,1,dad92df4-685b-4260-b35f-4d031262dfea,dad92df4-685b-4260-b35f-4d031262dfea,0,1,4399c19a-ddba-42e9-88b4-c5c28abad237,4399c19a-ddba-42e9-88b4-c5c28abad237,0,1,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,0,1,bde70605-7ffc-4b38-b65d-e7b0d14e2f3a,bde70605-7ffc-4b38-b65d-e7b0d14e2f3a,0,1,fd3a6a7e-203d-447a-aebd-7626579387fb,fd3a6a7e-203d-447a-aebd-7626579387fb,0,1,2cd04d4c-2619-40c9-adf4-7bb281f045b6,2cd04d4c-2619-40c9-adf4-7bb281f045b6,0,1,cbc1c36d-7bbf-4892-8220-a33ec91a7b1f,cbc1c36d-7bbf-4892-8220-a33ec91a7b1f,0,1,5d4e67ae-7029-46d2-86f9-834a04a9dd71,5d4e67ae-7029-46d2-86f9-834a04a9dd71,0,1,ff976027-75e8-475c-abfa-876d36733c13,ff976027-75e8-475c-abfa-876d36733c13,0,1,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,0,1,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,0,1,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,0,1,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,0,1,b3554203-b930-496d-a712-353bc13a0946,b3554203-b930-496d-a712-353bc13a0946,0,1,59775ce0-f778-45f6-9453-bbd0a0ec1f27,59775ce0-f778-45f6-9453-bbd0a0ec1f27,0,1,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,0,1,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,0,1,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,0,1,c8da922f-e31e-49b0-b90e-1c060424bde5,c8da922f-e31e-49b0-b90e-1c060424bde5,0,1,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,0,1,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0,1,b65afceb-a200-42d5-9948-831a5ad84b1b,b65afceb-a200-42d5-9948-831a5ad84b1b,0,1,feb1a5c1-c805-4079-8f05-8a44f51b0b02,feb1a5c1-c805-4079-8f05-8a44f51b0b02,0,1,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,0,1,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,0,1,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,0,1,231d3950-f363-4e63-83cd-8ddb81507c27,231d3950-f363-4e63-83cd-8ddb81507c27,0,1,87429f11-bf95-4013-bf13-da904570f88d,87429f11-bf95-4013-bf13-da904570f88d,0,1,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,0,1,feb41347-62db-41cf-ace0-d8b9de361af3,feb41347-62db-41cf-ace0-d8b9de361af3,0,1,5f91b00f-d8fc-4d63-8486-66339357ab22,5f91b00f-d8fc-4d63-8486-66339357ab22,0,1,16d44ab1-4bce-4df8-a215-6ed5173c75a8,16d44ab1-4bce-4df8-a215-6ed5173c75a8,0,1,cdce186a-229d-492d-8811-147fc4d7cdf5,cdce186a-229d-492d-8811-147fc4d7cdf5,0,1,f750d4d3-059f-41a5-85b4-16bb4c63d3f2,f750d4d3-059f-41a5-85b4-16bb4c63d3f2,0,1,543f976e-fea3-4a51-9962-b8e0fcd3f707,543f976e-fea3-4a51-9962-b8e0fcd3f707,0,1,375977c1-5745-4e78-a4df-cef966c0ccf8,375977c1-5745-4e78-a4df-cef966c0ccf8,0,1,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,0,1,c3796d85-2a24-43c4-9673-64e56249a1d0,c3796d85-2a24-43c4-9673-64e56249a1d0,0,1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,0,1,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,0,1,731211c2-ef90-4883-9525-83cd91b742ac,731211c2-ef90-4883-9525-83cd91b742ac,0,1,0adf02da-940a-4bfc-afa5-59605494a169,0adf02da-940a-4bfc-afa5-59605494a169,0,1,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,0,1,8361991a-0f30-4a03-9a4c-90556b744f53,8361991a-0f30-4a03-9a4c-90556b744f53,0,1,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,0,1,f9196766-4ae2-4a73-bed6-4a8838323e02,f9196766-4ae2-4a73-bed6-4a8838323e02,0,1,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,0,1,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,0,1,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,0,1,f0105e51-9510-426a-8aa0-af827d93ffd9,f0105e51-9510-426a-8aa0-af827d93ffd9,0,1,3df19dbf-efe7-4e31-99ad-fafb59ec1329,3df19dbf-efe7-4e31-99ad-fafb59ec1329,0,1,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,0,1,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,0,1,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,0,1,8ecc070f-f6fb-46b1-9636-b77aa80f8804,8ecc070f-f6fb-46b1-9636-b77aa80f8804,0,1,8405be9d-465b-4744-b04f-03933b52f02e,8405be9d-465b-4744-b04f-03933b52f02e,0,1,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,0,1,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,0,1,ece7f438-0898-4a02-89cb-6a6aa689e331,ece7f438-0898-4a02-89cb-6a6aa689e331,0,1,15ca91d9-0373-435c-a69f-409f1eff6c3b,15ca91d9-0373-435c-a69f-409f1eff6c3b,0,1,dd9176ec-9186-4277-a155-14ed2efef15f,dd9176ec-9186-4277-a155-14ed2efef15f,0,1,b980519c-0fb7-45db-92ab-8241ec50c8c8,b980519c-0fb7-45db-92ab-8241ec50c8c8,0,1,d45f4ad8-c34a-4a14-9278-df88a071d610,d45f4ad8-c34a-4a14-9278-df88a071d610,0,1,9bfb9d89-3723-4099-b1c3-88d4bb8862f5,9bfb9d89-3723-4099-b1c3-88d4bb8862f5,0,1,eb3dfdc7-58b8-4b1f-b079-368c262364c9,eb3dfdc7-58b8-4b1f-b079-368c262364c9,0,1,5030a318-f8f7-4ec7-80d6-6eee0772562f,5030a318-f8f7-4ec7-80d6-6eee0772562f,0,1,242e911d-e49c-4b8a-8543-cc2e079220fd,242e911d-e49c-4b8a-8543-cc2e079220fd,0,1,9ea39d31-3775-4fb8-a3f3-202e54354d49,9ea39d31-3775-4fb8-a3f3-202e54354d49,0,1,73044e20-148c-46e9-b5b5-973c91de0d61,73044e20-148c-46e9-b5b5-973c91de0d61,0,1,f8ab477c-8e78-48c0-9f99-27748b109706,f8ab477c-8e78-48c0-9f99-27748b109706,0,1,24cff6c8-6c20-4383-b97c-6afa52738960,24cff6c8-6c20-4383-b97c-6afa52738960,0,1,462e2694-750d-49ef-93ac-17a7779be68d,462e2694-750d-49ef-93ac-17a7779be68d,0,1,c24ff02e-5afc-45df-81cf-64ea2b261c2d,c24ff02e-5afc-45df-81cf-64ea2b261c2d,0,1,2d51aae9-650d-4719-a94d-2609b69a2d36,2d51aae9-650d-4719-a94d-2609b69a2d36,0,1,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,0,1,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,0,1,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,0,1,85639a53-b367-49ce-84f2-4e21d81c489b,85639a53-b367-49ce-84f2-4e21d81c489b,0,1,24b59586-178e-4efc-90ae-529553f3bb6c,24b59586-178e-4efc-90ae-529553f3bb6c,0,1,20e75dd5-222a-4100-aa43-3684991e3f21,20e75dd5-222a-4100-aa43-3684991e3f21,0,1,3c611832-4bc2-4229-a27d-d5dc82f3a498,3c611832-4bc2-4229-a27d-d5dc82f3a498,0,1,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,0,1,5dadc422-1fbd-4918-9db3-09ec72c3404e,5dadc422-1fbd-4918-9db3-09ec72c3404e,0,1,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,0,1,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,0,1,c5478d09-c8d3-4cc6-878e-27656ecc8409,c5478d09-c8d3-4cc6-878e-27656ecc8409,0,1,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,0,1,75974146-5b1a-412c-b7d5-1575704bbdab,75974146-5b1a-412c-b7d5-1575704bbdab,0,1,949f87cb-258c-4b6b-95ee-8a7491a4b64e,949f87cb-258c-4b6b-95ee-8a7491a4b64e,0,1,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,0,1,5c089988-5381-41ed-9f05-f85db46b8d94,5c089988-5381-41ed-9f05-f85db46b8d94,0,1,85a36352-1569-4ce4-aeba-477db524c36d,85a36352-1569-4ce4-aeba-477db524c36d,0,1,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,0,1,2fcde115-5c5a-465c-a326-d7ba379675fc,2fcde115-5c5a-465c-a326-d7ba379675fc,0,1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,0,1,b99c2068-15ea-43a1-9e9f-db29647e2387,b99c2068-15ea-43a1-9e9f-db29647e2387,0,1,9a4a0b04-3dfb-4551-90f0-16231f64b14f,9a4a0b04-3dfb-4551-90f0-16231f64b14f,0,1,98edcd6b-1c50-45c6-9a4c-390827a4ba52,98edcd6b-1c50-45c6-9a4c-390827a4ba52,0,1,346cb8b7-a20e-4a06-823e-26dfb2e3e741,346cb8b7-a20e-4a06-823e-26dfb2e3e741,0,1,6d83f50f-32e9-45a6-8b5e-d91ba005ae95,6d83f50f-32e9-45a6-8b5e-d91ba005ae95,0,1,9afe457f-3c88-4cd3-94e7-7cea8a1a99a1,9afe457f-3c88-4cd3-94e7-7cea8a1a99a1,0,1,86ff5ea0-394a-4d8f-9601-acc2eb841bf6,86ff5ea0-394a-4d8f-9601-acc2eb841bf6,0,1,782cb93d-36e6-4923-b2b6-75caa3459cd6,782cb93d-36e6-4923-b2b6-75caa3459cd6,0,1,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,0,1,996c7873-1cc9-44f6-915b-5c6ed7ef2370,996c7873-1cc9-44f6-915b-5c6ed7ef2370,0,1,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,0,1,ced01234-9417-49ce-adf0-8cdd15e6dd7d,ced01234-9417-49ce-adf0-8cdd15e6dd7d,0,1,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,0,1,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,0,1,7974e41d-5af3-4636-b405-c9405d89fb53,7974e41d-5af3-4636-b405-c9405d89fb53,0,1,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,0,1,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,0,1,92876c9e-52ff-480d-9878-5766f4f9d12c,92876c9e-52ff-480d-9878-5766f4f9d12c,0,1,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,0,1,b729d739-5249-4765-85ee-fd792bb22911,b729d739-5249-4765-85ee-fd792bb22911,0,1,d65c4485-7bac-4206-9a6c-7156f4bb876d,d65c4485-7bac-4206-9a6c-7156f4bb876d,0,1,433a114f-3198-4ef6-bbf8-ce9b54fdb736,433a114f-3198-4ef6-bbf8-ce9b54fdb736,0,1,d431d1e2-13dc-495c-9de1-b5ec872eceed,d431d1e2-13dc-495c-9de1-b5ec872eceed,0,1,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,0,1,c9ea4e72-5f01-42ae-88e3-52e49757b26f,c9ea4e72-5f01-42ae-88e3-52e49757b26f,0,1,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,0,1,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0,1,a623fef1-96eb-41ba-93fe-09162698f419,a623fef1-96eb-41ba-93fe-09162698f419,0,1,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,0,1,d8e1f92f-9efa-422d-bb21-43bd1a363cec,d8e1f92f-9efa-422d-bb21-43bd1a363cec,0,1,c1416383-bd7e-4dc4-ad88-d98ac87157fd,c1416383-bd7e-4dc4-ad88-d98ac87157fd,0,1,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,0,1,d5d9976a-4cc0-43f7-afd6-d43cebb07940,d5d9976a-4cc0-43f7-afd6-d43cebb07940,0,1,79a0746b-4dbe-4068-8832-4d0da08d6fd3,79a0746b-4dbe-4068-8832-4d0da08d6fd3,0,1,899f1526-d6bc-42ef-852e-7297a06db9e3,899f1526-d6bc-42ef-852e-7297a06db9e3,0,1,c694c132-1ddb-4273-818a-d3cca88c082a,c694c132-1ddb-4273-818a-d3cca88c082a,0,1,cd4da06e-c06b-4233-befc-1bc4c4db58e3,cd4da06e-c06b-4233-befc-1bc4c4db58e3,0,1,918a01fe-f753-4a4a-9200-55bbd6edaf5f,918a01fe-f753-4a4a-9200-55bbd6edaf5f,0,1,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,0,1,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,0,1,d6704410-6297-481e-a6cb-6d6aa566b4f8,d6704410-6297-481e-a6cb-6d6aa566b4f8,0,1,398937ca-b035-43bd-b0da-8c5153a87cb8,398937ca-b035-43bd-b0da-8c5153a87cb8,0,1,5b441321-bd1e-4c56-8f09-365b05985eed,5b441321-bd1e-4c56-8f09-365b05985eed,0,1,559f1e66-e8da-437a-aa27-d0e1be6619b6,559f1e66-e8da-437a-aa27-d0e1be6619b6,0,1,704d69cd-d921-4957-a004-43bd7eb4d979,704d69cd-d921-4957-a004-43bd7eb4d979,0,1,f1594682-16ac-408c-8307-a7a8db79b09f,f1594682-16ac-408c-8307-a7a8db79b09f,0,1,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,0,1,4cb814d8-cb1b-4366-b500-e820ad526b0c,4cb814d8-cb1b-4366-b500-e820ad526b0c,0,1,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,0,1,6c43df9f-ca36-415b-afec-302807820d73,6c43df9f-ca36-415b-afec-302807820d73,0,1,c7fb7551-806a-40b2-8879-14cd897b60d8,c7fb7551-806a-40b2-8879-14cd897b60d8,0,1,68337023-d573-4d04-95b6-44f73258c2a4,68337023-d573-4d04-95b6-44f73258c2a4,0,1,7cf39337-b722-486f-8e37-a62239d0ccd2,7cf39337-b722-486f-8e37-a62239d0ccd2,0,1,2571cfaf-d876-4385-a60a-1488aacf7080,2571cfaf-d876-4385-a60a-1488aacf7080,0,1,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,0,1,44398566-3189-4584-8f8a-9deb1d07ce41,44398566-3189-4584-8f8a-9deb1d07ce41,0,1,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,0,1,accfa63a-479d-4996-95bc-cdf5acdf203c,accfa63a-479d-4996-95bc-cdf5acdf203c,0,1,351998e0-8939-4dd4-a833-f4756bcc53b8,351998e0-8939-4dd4-a833-f4756bcc53b8,0,1,cd69bad8-524e-4be4-88cc-7732a88b38b8,cd69bad8-524e-4be4-88cc-7732a88b38b8,0,1,0a32248c-6994-4988-90d1-30882bc9da6b,0a32248c-6994-4988-90d1-30882bc9da6b,0,1,b57b53cb-6972-4bda-ae46-96571be1ebec,b57b53cb-6972-4bda-ae46-96571be1ebec,0,1,1a1a9636-fb72-4e4a-af96-5858442b1e61,1a1a9636-fb72-4e4a-af96-5858442b1e61,0,1,bca9cf34-9e11-4014-976a-28c4330b136e,bca9cf34-9e11-4014-976a-28c4330b136e,0,1,65fffe1a-6f36-4f50-975f-4471ad29d3ec,65fffe1a-6f36-4f50-975f-4471ad29d3ec,0,1,8fe5dad5-686a-4631-ae05-2917c33f7d83,8fe5dad5-686a-4631-ae05-2917c33f7d83,0,1,edef86c6-73bf-4e47-b62d-b2b548a732cd,edef86c6-73bf-4e47-b62d-b2b548a732cd,0,1,a1715044-d76f-4238-ba3e-989d04078d83,a1715044-d76f-4238-ba3e-989d04078d83,0,1,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,0,1,299c47a7-0b30-4f62-8f5c-f087ad6411fb,299c47a7-0b30-4f62-8f5c-f087ad6411fb,0,1,4d4724df-24fb-4c59-9d04-3f984906214a,4d4724df-24fb-4c59-9d04-3f984906214a,0,1,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,0,1,1ed9a67b-5b15-4862-907f-b194d6113070,1ed9a67b-5b15-4862-907f-b194d6113070,0,1,1aceb0e8-9131-44c2-aaa5-db96eea1c0de,1aceb0e8-9131-44c2-aaa5-db96eea1c0de,0,1,cb9b73ee-8531-48d9-9266-9aaa4336a612,cb9b73ee-8531-48d9-9266-9aaa4336a612,0,1,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,0,1,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,0,1,d042687f-0725-4611-a868-f5b4f6a3a3a8,d042687f-0725-4611-a868-f5b4f6a3a3a8,0,1,bb143340-7fff-49ef-b121-355c96613f78,bb143340-7fff-49ef-b121-355c96613f78,0,1,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,0,1,f2f69644-80dc-4b5e-a208-ed1de131e25e,f2f69644-80dc-4b5e-a208-ed1de131e25e,0,1,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,0,1,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,0,1,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,0,1,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,0,1,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,0,1,fb79315a-8d27-4c5e-9cfb-c7778dabedef,fb79315a-8d27-4c5e-9cfb-c7778dabedef,0,1,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,0,1,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,0,1,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,0,1,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,0,1,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,0,1,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,0,1,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,0,1,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,0,1,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,0,1,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,0,1,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,0,1,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,0,1,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,0,1,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,0,1,e3ca64af-7766-48e2-b7c6-2a96f4539905,e3ca64af-7766-48e2-b7c6-2a96f4539905,0,1,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,0,1,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,0,1,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,0,1,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,0,1,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,0,1,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,0,1,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,0,1,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,0,1,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,0,1,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,0,1,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,0,1,92707138-5004-4378-8477-f909166d319d,92707138-5004-4378-8477-f909166d319d,0,1,43661775-43bb-4d9e-bfbb-c46e7d194ca3,43661775-43bb-4d9e-bfbb-c46e7d194ca3,0,1,532637ef-be0d-4f42-9747-a88e17eb3def,532637ef-be0d-4f42-9747-a88e17eb3def,0,1,61127152-3e24-40b4-8a23-5eb6cae568ff,61127152-3e24-40b4-8a23-5eb6cae568ff,0,1,ffd987e3-e8af-4d46-881e-1e312e74dbac,ffd987e3-e8af-4d46-881e-1e312e74dbac,0,1,ad1142ed-183d-47a3-800c-997a3770e11e,ad1142ed-183d-47a3-800c-997a3770e11e,0,1,ebef37c6-4808-4683-93be-036ce19cafd5,ebef37c6-4808-4683-93be-036ce19cafd5,0,1,66364cd4-aaa5-421d-96d6-3c283c14650d,66364cd4-aaa5-421d-96d6-3c283c14650d,0,1,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,0,1,3c54d440-e908-43d6-a5cc-bb64620c82d7,3c54d440-e908-43d6-a5cc-bb64620c82d7,0,1,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,0,1,bf1dd911-8ee1-407b-acae-10c85b74baf3,bf1dd911-8ee1-407b-acae-10c85b74baf3,0,1,e924058f-25c3-4744-a565-836b824991b7,e924058f-25c3-4744-a565-836b824991b7,0,1,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,0,1,0481bc65-6a32-46b9-ae87-993ba52a29a5,0481bc65-6a32-46b9-ae87-993ba52a29a5,0,1,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,0,1,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,0,1,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0,1,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,0,1,14256e0a-a947-42a3-8e36-47bfbb052a0c,14256e0a-a947-42a3-8e36-47bfbb052a0c,0,1,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1b1aa77a-d14b-4751-a7da-0b5bac4db461,0,1,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,0,1,295f3692-0721-4c41-a69b-171ef20a5018,295f3692-0721-4c41-a69b-171ef20a5018,0,1,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,0,1,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,0,1,8d31ce6a-4d44-46c6-a11c-47fb33e88691,8d31ce6a-4d44-46c6-a11c-47fb33e88691,0,1,df22b227-b2c3-4e65-9706-7582f99fe59c,df22b227-b2c3-4e65-9706-7582f99fe59c,0,1,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,0,1,087480bb-8c89-4b00-a29b-b7e29926478d,087480bb-8c89-4b00-a29b-b7e29926478d,0,1,685373b7-638a-439a-8cba-703d56e4e404,685373b7-638a-439a-8cba-703d56e4e404,0,1,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,0,1,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1cfba08f-d5e5-4833-b494-a25d0477e9c3,0,1,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,0,1,921a0a14-8c06-4894-95ce-423000769364,921a0a14-8c06-4894-95ce-423000769364,0,1,3805ee39-a48a-499a-9ef8-9c2a5985404f,3805ee39-a48a-499a-9ef8-9c2a5985404f,0,1,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,0,1,08c2f92c-eb05-49e7-bfc9-4a89607b9864,08c2f92c-eb05-49e7-bfc9-4a89607b9864,0,1,6d751379-89a7-49b5-93e5-578329c63d9c,6d751379-89a7-49b5-93e5-578329c63d9c,0,1,c3f156ef-947e-4ebb-883f-4f099a116063,c3f156ef-947e-4ebb-883f-4f099a116063,0,1,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,0,1,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,0,1,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,0,1,e98e9e56-2995-430c-bd3b-f1070aec15a5,e98e9e56-2995-430c-bd3b-f1070aec15a5,0,1,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,0,1,8a7546f4-bfc9-4732-bf60-43a41e2c8753,8a7546f4-bfc9-4732-bf60-43a41e2c8753,0,1,16244165-d5a4-4012-8bb5-7f5fee1111af,16244165-d5a4-4012-8bb5-7f5fee1111af,0,1,290b72ad-004f-46ab-be5e-47557543b965,290b72ad-004f-46ab-be5e-47557543b965,0,1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,0,1,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,0,1,263bcd20-9878-48d4-aac4-b371ec49d8d6,263bcd20-9878-48d4-aac4-b371ec49d8d6,0,1,da1d8660-2757-4cea-bae0-c2210b9406ae,da1d8660-2757-4cea-bae0-c2210b9406ae,0,1,d60329c6-8f48-481d-82e7-18da355cb09c,d60329c6-8f48-481d-82e7-18da355cb09c,0,1,c4b14162-b25b-4099-9ec3-7251848ef08a,c4b14162-b25b-4099-9ec3-7251848ef08a,0,1,8eb5ba97-eb38-4357-8bfc-e9618280800d,8eb5ba97-eb38-4357-8bfc-e9618280800d,0,1,b72f73d5-e274-472b-871b-16af72dab603,b72f73d5-e274-472b-871b-16af72dab603,0,1,b008d184-0b61-460d-9490-89ecc1cd58ba,b008d184-0b61-460d-9490-89ecc1cd58ba,0,1,c8340e2f-6958-4bcd-8e17-499c4adfe60b,c8340e2f-6958-4bcd-8e17-499c4adfe60b,0,1,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,0,1,03f68d82-752c-45d1-bf9a-60ecd21a2c81,03f68d82-752c-45d1-bf9a-60ecd21a2c81,0,1,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,0,1,d4fffc79-2841-49a9-a382-e9e4138984df,d4fffc79-2841-49a9-a382-e9e4138984df,0,1,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,0,1,9f41f903-d316-4189-8dc0-603ea9036c1c,9f41f903-d316-4189-8dc0-603ea9036c1c,0,1,e19e70d6-8707-4dde-ae69-7bd97035ca03,e19e70d6-8707-4dde-ae69-7bd97035ca03,0,1,425b5272-1130-457d-8a05-aee8fad681d9,425b5272-1130-457d-8a05-aee8fad681d9,0,1,8d583436-f2a6-4a33-8137-1376f5754643,8d583436-f2a6-4a33-8137-1376f5754643,0,1,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,0,1,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,0,1,2d66502d-77ab-4cc9-9ccf-5433458fae9f,2d66502d-77ab-4cc9-9ccf-5433458fae9f,0,1,cff48da7-3c46-4602-83e8-90c9ea53e107,cff48da7-3c46-4602-83e8-90c9ea53e107,0,1,7155472d-c791-402c-96e1-d25612024c88,7155472d-c791-402c-96e1-d25612024c88,0,1,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,0,1,9005911d-ea81-48b6-bf50-1a328ff4d7be,9005911d-ea81-48b6-bf50-1a328ff4d7be,0,1,7df12006-c0c0-42a6-b852-bdced72c62e3,7df12006-c0c0-42a6-b852-bdced72c62e3,0,1,9c00987d-3c55-40eb-bae8-f36e71e4ef87,9c00987d-3c55-40eb-bae8-f36e71e4ef87,0,1,29273130-5142-48c9-8399-00e5ab4b6203,29273130-5142-48c9-8399-00e5ab4b6203,0,1,9e14cd7e-1293-4008-baf8-88df6a98abf7,9e14cd7e-1293-4008-baf8-88df6a98abf7,0,1,98e3aace-52a6-4911-8205-92165adca6de,98e3aace-52a6-4911-8205-92165adca6de,0,1,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,0,1,577e5fea-b792-4c8b-b3b3-a03a14b64b04,577e5fea-b792-4c8b-b3b3-a03a14b64b04,0,1,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,0,1,db4eb2f0-1e8c-4fd6-a818-ee1a09ed7caf,db4eb2f0-1e8c-4fd6-a818-ee1a09ed7caf,0,1,7898bdc8-e895-4894-810a-19607a553c53,7898bdc8-e895-4894-810a-19607a553c53,0,1,b18d312b-f9c3-4f37-ac77-d499e949f154,b18d312b-f9c3-4f37-ac77-d499e949f154,0,1,ace2beea-d393-412f-8b71-b845b665e2c4,ace2beea-d393-412f-8b71-b845b665e2c4,0,1,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,0,1,ebc25606-46e7-4252-8661-cfce0e77830e,ebc25606-46e7-4252-8661-cfce0e77830e,0,1,dfa258a8-7194-49a5-8c25-6de44cf97a0f,dfa258a8-7194-49a5-8c25-6de44cf97a0f,0,1,3fd4bc77-2a1b-4750-a54a-4171c8d40027,3fd4bc77-2a1b-4750-a54a-4171c8d40027,0,1,4062674a-4a81-494d-82bc-4984cd7c7903,4062674a-4a81-494d-82bc-4984cd7c7903,0,1,782a8801-06ca-4d63-bf8b-63d2320766d8,782a8801-06ca-4d63-bf8b-63d2320766d8,0,1,93a73123-d98c-4286-9269-7bfcedd115e8,93a73123-d98c-4286-9269-7bfcedd115e8,0,1,c5985c02-1824-4ce9-b415-1621dd2ee864,c5985c02-1824-4ce9-b415-1621dd2ee864,0,1,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,0,1,e819aaf6-3dfb-492a-8a4a-50a7c6854790,e819aaf6-3dfb-492a-8a4a-50a7c6854790,0,1,62b95ba1-f213-42fb-90f3-a03e8094bc9e,62b95ba1-f213-42fb-90f3-a03e8094bc9e,0,1,619b534d-5605-40d3-9b8c-4443a21d7795,619b534d-5605-40d3-9b8c-4443a21d7795,0,1,a010bbf4-d547-4576-9797-28e3096ffed3,a010bbf4-d547-4576-9797-28e3096ffed3,0,1,9671593b-1943-4955-bbe9-1427f48b48bc,9671593b-1943-4955-bbe9-1427f48b48bc,0,1,01f67911-4ca7-4668-b970-62c299b98e56,01f67911-4ca7-4668-b970-62c299b98e56,0,1,20c89c94-f77f-4e14-8c97-2a70c1419ce3,20c89c94-f77f-4e14-8c97-2a70c1419ce3,0,1,5ec9bae5-a7c2-4b95-ad1d-a6543dbd8c9d,5ec9bae5-a7c2-4b95-ad1d-a6543dbd8c9d,0,1,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,0,1,8d7750e9-899f-4434-8702-44cd02681779,8d7750e9-899f-4434-8702-44cd02681779,0,1,426cbebb-880b-49c5-b046-83c5e071273e,426cbebb-880b-49c5-b046-83c5e071273e,0,1,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,0,1,5ba93404-58ad-4321-9a62-27db828f75f6,5ba93404-58ad-4321-9a62-27db828f75f6,0,1,9f921157-fa57-41b6-93f5-61fb5fb4a820,9f921157-fa57-41b6-93f5-61fb5fb4a820,0,1,b56f25d2-72a9-4d80-8998-77ac3097c873,b56f25d2-72a9-4d80-8998-77ac3097c873,0,1,03bd775a-e0a1-4205-82ce-6068e73ad134,03bd775a-e0a1-4205-82ce-6068e73ad134,0,1,40bed47b-7754-4a70-b51a-47385fd46e83,40bed47b-7754-4a70-b51a-47385fd46e83,0,1,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,0,1,1e5a4f93-1ab9-4775-9538-2a1772215d89,1e5a4f93-1ab9-4775-9538-2a1772215d89,0,1,7a014fcb-a4b8-4c1c-b0de-21907a917c25,7a014fcb-a4b8-4c1c-b0de-21907a917c25,0,1,c31e34db-41ff-4db3-a4d0-f780f67070f6,c31e34db-41ff-4db3-a4d0-f780f67070f6,0,1,4f97b909-68f9-482a-b958-b4caa9b83763,4f97b909-68f9-482a-b958-b4caa9b83763,0,1,1688ef5d-72df-4bc4-a879-89033d466ad7,1688ef5d-72df-4bc4-a879-89033d466ad7,0,1,30f18fbf-4240-4708-a71a-189f8fc324f3,30f18fbf-4240-4708-a71a-189f8fc324f3,0,1,9a388c1c-bf74-464e-be2d-bdb2e36232b5,9a388c1c-bf74-464e-be2d-bdb2e36232b5,0,1,06e9fb36-cc47-4517-baac-d666703bdf03,06e9fb36-cc47-4517-baac-d666703bdf03,0,1,cef67574-e5cd-40f9-b7b9-47cff1a1f703,cef67574-e5cd-40f9-b7b9-47cff1a1f703,0,1,ccacc860-383d-405e-9f95-b31e9da27fc9,ccacc860-383d-405e-9f95-b31e9da27fc9,0,1,344cb0de-315d-4d05-93f8-8a1f53208470,344cb0de-315d-4d05-93f8-8a1f53208470,0,1,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,0,1,a7973409-b18e-4b88-ad50-e2ae89470d8f,a7973409-b18e-4b88-ad50-e2ae89470d8f,0,1,a537875e-492e-4cf2-96e9-e2e97bb206da,a537875e-492e-4cf2-96e9-e2e97bb206da,0,1,085a08f3-9d93-429d-9b1b-9065ab8363f7,085a08f3-9d93-429d-9b1b-9065ab8363f7,0,1,a530c0a1-c1d2-40bb-9d0e-320074dbb684,a530c0a1-c1d2-40bb-9d0e-320074dbb684,0,1,55c63580-16f1-4d6f-a40b-e630f71ebb98,55c63580-16f1-4d6f-a40b-e630f71ebb98,0,1,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0,1,b456d820-8034-4381-960d-66d9f86b0a4b,b456d820-8034-4381-960d-66d9f86b0a4b,0,1,bd55fd03-cf67-4333-a554-98e03d18f780,bd55fd03-cf67-4333-a554-98e03d18f780,0,1,1a7c774d-5b86-4051-b797-3081e19fa30a,1a7c774d-5b86-4051-b797-3081e19fa30a,0,1,00949768-5833-4fe2-8752-b009d1bceef8,00949768-5833-4fe2-8752-b009d1bceef8,0,1,ef762828-452c-4d3a-ad7a-7f4933ab05ac,ef762828-452c-4d3a-ad7a-7f4933ab05ac,0,1,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,0,1,8b0faa1e-09da-4ba4-894e-e86abc5d39df,8b0faa1e-09da-4ba4-894e-e86abc5d39df,0,1,cb50b309-1b6c-400c-9e9e-67204dcccaae,cb50b309-1b6c-400c-9e9e-67204dcccaae,0,1,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,0,1,c46fd680-efbe-49a8-91f0-73e36d791fa9,c46fd680-efbe-49a8-91f0-73e36d791fa9,0,1,6995567b-5a3c-4e03-9fb4-e22363ed6555,6995567b-5a3c-4e03-9fb4-e22363ed6555,0,1,32c38c2b-072d-4cf2-bf9a-f9c4b4c463e8,32c38c2b-072d-4cf2-bf9a-f9c4b4c463e8,0,1,023d747d-4ac1-4e0e-9de1-76bdc4f74d8b,023d747d-4ac1-4e0e-9de1-76bdc4f74d8b,0,1,b36fd525-6e49-4ea0-94e8-a0895d45bb43,b36fd525-6e49-4ea0-94e8-a0895d45bb43,0,1,56a0a9ce-c5ce-4f3d-ad38-ff6a7a4bd162,56a0a9ce-c5ce-4f3d-ad38-ff6a7a4bd162,0,1,5bbd5ae3-e327-40a2-bb94-91be5db1e14d,5bbd5ae3-e327-40a2-bb94-91be5db1e14d,0,1,591f46c9-8d40-421b-84a7-755a6b330539,591f46c9-8d40-421b-84a7-755a6b330539,0,1,c9eb2a89-3dc9-4ac6-9fac-f8042f8b024b,c9eb2a89-3dc9-4ac6-9fac-f8042f8b024b,0,1,a1693bbe-d65d-47e2-8425-9bf6f9b1d906,a1693bbe-d65d-47e2-8425-9bf6f9b1d906,0,1,6f8ff42b-76ba-4ddf-b3e4-3a2ded880210,6f8ff42b-76ba-4ddf-b3e4-3a2ded880210,0,1,643228fa-f3b0-4927-878b-0fdcd375684c,643228fa-f3b0-4927-878b-0fdcd375684c,0,1,13c98801-97c4-4638-9aa3-aabc6983b7d8,13c98801-97c4-4638-9aa3-aabc6983b7d8,0,1,1d62c9a2-9692-4e7e-b556-70906fb0cbbb,1d62c9a2-9692-4e7e-b556-70906fb0cbbb,0,1,bb8b4325-c43f-4be0-af4a-8dda8447438f,bb8b4325-c43f-4be0-af4a-8dda8447438f,0,1,da52d51a-7e54-4cfd-9f2c-af84da7e5a8f,da52d51a-7e54-4cfd-9f2c-af84da7e5a8f,0,1,0f76c812-38d0-4cab-bc09-d0b36ee48f68,0f76c812-38d0-4cab-bc09-d0b36ee48f68,0,1,02ef7596-599a-4d24-9e9d-fdd83263f576,02ef7596-599a-4d24-9e9d-fdd83263f576,0,1,4ba00bc3-30a3-4a7f-8726-f8393e1a89dd,4ba00bc3-30a3-4a7f-8726-f8393e1a89dd,0,1,0f0dd474-fe3a-40d1-baeb-c9fc1ec709ac,0f0dd474-fe3a-40d1-baeb-c9fc1ec709ac,0,1,ba280414-62a9-4533-90d9-f084ef71bf97,ba280414-62a9-4533-90d9-f084ef71bf97,0,1,c608c734-97ae-4b21-a849-c63642095357,c608c734-97ae-4b21-a849-c63642095357,0,1,8d247cc7-c0ba-4470-8b87-ca0a869aeb2a,8d247cc7-c0ba-4470-8b87-ca0a869aeb2a,0,1,b8a966ba-3452-44df-91d0-7040ecd3e4c2,b8a966ba-3452-44df-91d0-7040ecd3e4c2,0,1,80d6883d-c608-4fe5-acae-78bc45e40e5f,80d6883d-c608-4fe5-acae-78bc45e40e5f,0,1,213b173a-c3b7-449c-a618-d479c4dc38e8,213b173a-c3b7-449c-a618-d479c4dc38e8,0,1,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,0,1,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,0,1,7534148d-0124-49a2-a446-c6205d153153,7534148d-0124-49a2-a446-c6205d153153,0,1,32ed8a10-7177-4e45-866e-04a1b6831570,32ed8a10-7177-4e45-866e-04a1b6831570,0,1,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,0,1,8190a432-1037-4334-b2c7-bae39f7f9442,8190a432-1037-4334-b2c7-bae39f7f9442,0,1,4733e5c1-8198-408b-8903-866d3b0fdc43,4733e5c1-8198-408b-8903-866d3b0fdc43,0,1,e1fc5146-37c5-4207-af05-7250976bd406,e1fc5146-37c5-4207-af05-7250976bd406,0,1,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,0,1,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,0,1,f5e27159-789a-4d34-ac51-fd99d753b83a,f5e27159-789a-4d34-ac51-fd99d753b83a,0,1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,0,1,93701593-5ac8-4266-b471-7e9ed35a9c3e,93701593-5ac8-4266-b471-7e9ed35a9c3e,0,1,0fdb864e-ede9-4777-835c-0804968ee544,0fdb864e-ede9-4777-835c-0804968ee544,0,1,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,0,1,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,0,1,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,0,1,5dee9814-fe38-4631-8148-8d6c87ef6f47,5dee9814-fe38-4631-8148-8d6c87ef6f47,0,1,37d17053-5c2b-4972-b6a5-a589f2ddbde6,37d17053-5c2b-4972-b6a5-a589f2ddbde6,0,1,c349968a-3f87-425b-8efb-d847934dee4b,c349968a-3f87-425b-8efb-d847934dee4b,0,1,3bb8dc33-970c-4c58-9036-ce716d963847,3bb8dc33-970c-4c58-9036-ce716d963847,0,1,b3ff39fa-f665-4d01-9a2a-69722e6b1071,b3ff39fa-f665-4d01-9a2a-69722e6b1071,0,1,0abacb0a-ce00-474e-8aec-35685c51ddef,0abacb0a-ce00-474e-8aec-35685c51ddef,0,1,ae407b17-03aa-4268-8603-58d6714dae89,ae407b17-03aa-4268-8603-58d6714dae89,0,1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,0,1,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,0,1,5bb6e52c-ac26-4143-8e90-f04f703f823b,5bb6e52c-ac26-4143-8e90-f04f703f823b,0,1,579baaa4-6493-4d99-8744-6399757295c7,579baaa4-6493-4d99-8744-6399757295c7,0,1,9c1325af-7492-42be-b3af-51b692534510,9c1325af-7492-42be-b3af-51b692534510,0,1,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,0,1,dface15c-cd65-4fb1-b4dd-b513086d3f8e,dface15c-cd65-4fb1-b4dd-b513086d3f8e,0,1,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,0,1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,0,1,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,0,1,b7e85f5c-4312-44c6-895a-3f636a8c78d8,b7e85f5c-4312-44c6-895a-3f636a8c78d8,0,1,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,0,1,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,0,1,a1afacc5-f49a-4df2-a44d-479594d50179,a1afacc5-f49a-4df2-a44d-479594d50179,0,1,fe70eba3-7477-4a38-a511-d69960abb928,fe70eba3-7477-4a38-a511-d69960abb928,0,1,6534ea96-2145-49e6-9739-f59459dc7f6b,6534ea96-2145-49e6-9739-f59459dc7f6b,0,1,f49bffa0-cad6-4801-b82e-21aa580e72e6,f49bffa0-cad6-4801-b82e-21aa580e72e6,0,1,bbbfb817-8db3-4415-86c3-af028276d6e9,bbbfb817-8db3-4415-86c3-af028276d6e9,0,1,6a91112c-f6cc-47a0-9d26-a36c7702af7d,6a91112c-f6cc-47a0-9d26-a36c7702af7d,0,1,cb92dc2e-6053-4233-a408-4464514b1257,cb92dc2e-6053-4233-a408-4464514b1257,0,1,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,0,1,85550a7a-8fe0-4296-ace5-63cf053536b4,85550a7a-8fe0-4296-ace5-63cf053536b4,0,1,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,0,1,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,0,1,da59378e-0a97-4cff-977b-cc51967068ee,da59378e-0a97-4cff-977b-cc51967068ee,0,1,bbaad46d-f60d-49e6-a077-075366bca47e,bbaad46d-f60d-49e6-a077-075366bca47e,0,1,0d9f5703-91e4-4769-bedd-5bd974f2f617,0d9f5703-91e4-4769-bedd-5bd974f2f617,0,1,926cdf17-1929-43d6-8205-858aab558ad9,926cdf17-1929-43d6-8205-858aab558ad9,0,1,5ec6838f-2d70-4f91-b41b-16adfe8ed587,5ec6838f-2d70-4f91-b41b-16adfe8ed587,0,1,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,0,1,bee8b8a0-f058-44cb-822c-620351567627,bee8b8a0-f058-44cb-822c-620351567627,0,1,26365e29-903b-47fd-ad96-e0d87f5d6e87,26365e29-903b-47fd-ad96-e0d87f5d6e87,0,1,569180cb-ce54-4267-94b9-332e35e3c17d,569180cb-ce54-4267-94b9-332e35e3c17d,0,1,77149f7a-8a76-4569-9487-991c41e132ef,77149f7a-8a76-4569-9487-991c41e132ef,0,1,9e1be65e-986f-4d21-91f0-15c66db0c947,9e1be65e-986f-4d21-91f0-15c66db0c947,0,1,75a0f8f1-6d8d-47d0-81c5-20b5e55b9cd1,75a0f8f1-6d8d-47d0-81c5-20b5e55b9cd1,0,1,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,0,1,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,0,1,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,0,1,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,0,1,f3d8590a-dcfa-4d41-8d03-642b99ffa040,f3d8590a-dcfa-4d41-8d03-642b99ffa040,0,1,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,0,1,20156709-1481-4007-8e89-9ce79fc589fc,20156709-1481-4007-8e89-9ce79fc589fc,0,1,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,0,1,7e7c5abd-b645-4de5-a40e-5805ec4456e2,7e7c5abd-b645-4de5-a40e-5805ec4456e2,0,1,763a16c3-a728-4b65-a485-705990310b4a,763a16c3-a728-4b65-a485-705990310b4a,0,1,65338920-c744-4d1e-b351-848b90a3feda,65338920-c744-4d1e-b351-848b90a3feda,0,1,2aedb1ac-caf1-45c7-913e-82a36637d5d4,2aedb1ac-caf1-45c7-913e-82a36637d5d4,0,1,52c04b3f-24d2-414c-b05a-77a34078d793,52c04b3f-24d2-414c-b05a-77a34078d793,0,1,8e876c9a-670a-4f34-9525-d87311988268,8e876c9a-670a-4f34-9525-d87311988268,0,1,251bce43-7e0c-4842-aa9f-e1f0dd8bbf2b,251bce43-7e0c-4842-aa9f-e1f0dd8bbf2b,0,1,ef6f7bb6-6c2c-4777-b99a-624865222549,ef6f7bb6-6c2c-4777-b99a-624865222549,0,1,e6044088-2521-4c4b-9cbe-58c14bb871b1,e6044088-2521-4c4b-9cbe-58c14bb871b1,0,1,50fc45e9-1e29-4b0e-9c18-8a8354780755,50fc45e9-1e29-4b0e-9c18-8a8354780755,0,1,f6375eb0-448b-495b-8edf-198f2ac28aed,f6375eb0-448b-495b-8edf-198f2ac28aed,0,1,9e39be89-29c3-48d2-9568-eedfed776bf8,9e39be89-29c3-48d2-9568-eedfed776bf8,0,1,8f873523-b4b1-4522-a60c-04477b4a41ab,8f873523-b4b1-4522-a60c-04477b4a41ab,0,1,bcbb80fe-5d16-49a1-972c-492445c7db6f,bcbb80fe-5d16-49a1-972c-492445c7db6f,0,1,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,0,1,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,0,1,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,0,1,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,0,1,8ce6cc1a-8570-4704-b9a3-44e815b2e753,8ce6cc1a-8570-4704-b9a3-44e815b2e753,0,1,7d336fdd-5cbf-4c92-a783-f451f7590502,7d336fdd-5cbf-4c92-a783-f451f7590502,0,1,05243f56-7e9b-4a61-8efb-1b5e525fff21,05243f56-7e9b-4a61-8efb-1b5e525fff21,0,1,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,0,1,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,0,1,86760ecb-2ddd-40ce-bc4f-94c23027a55e,86760ecb-2ddd-40ce-bc4f-94c23027a55e,0,1,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,0,1,7aa86a2d-2b47-447e-8901-806411011279,7aa86a2d-2b47-447e-8901-806411011279,0,1,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,0,1,903af13a-1f73-4145-a3d0-971c3be5fbe6,903af13a-1f73-4145-a3d0-971c3be5fbe6,0,1,37722a34-1148-4cc8-95e6-4645ae9cca98,37722a34-1148-4cc8-95e6-4645ae9cca98,0,1,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,0,1,fca0dfad-f853-4694-9ce9-53a3a10f59b7,fca0dfad-f853-4694-9ce9-53a3a10f59b7,0,1,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,0,1,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,0,1,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,0,1,1470f052-f032-46bc-b1ee-54555e725dfd,1470f052-f032-46bc-b1ee-54555e725dfd,0,1,497cbe4d-586d-48a2-8e98-d20e3e09ed42,497cbe4d-586d-48a2-8e98-d20e3e09ed42,0,1,150c9d05-4ccc-4cb7-879d-b1d9c3534343,150c9d05-4ccc-4cb7-879d-b1d9c3534343,0,1,38b7679d-3739-4572-baf2-d8c7b2a94f0a,38b7679d-3739-4572-baf2-d8c7b2a94f0a,0,1,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,0,1,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,0,1,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,0,1,953dbad6-4f5c-4319-874a-db358a77d001,953dbad6-4f5c-4319-874a-db358a77d001,0,1,69ceac29-06d3-45f2-b914-7966465cd0d3,69ceac29-06d3-45f2-b914-7966465cd0d3,0,1,cc34bd23-de0a-4b09-8333-e4693576b9f4,cc34bd23-de0a-4b09-8333-e4693576b9f4,0,1,b4cb92fb-ad82-44ed-9203-397b412b3453,b4cb92fb-ad82-44ed-9203-397b412b3453,0,1,b690721d-960b-4374-8d2c-feed3a2b354b,b690721d-960b-4374-8d2c-feed3a2b354b,0,1,271243d3-1871-4a0a-bf7f-63bacacf0a59,271243d3-1871-4a0a-bf7f-63bacacf0a59,0,1,bc10ad8f-383c-469a-8c0e-60805161055b,bc10ad8f-383c-469a-8c0e-60805161055b,0,1,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,0,1,ee8af8ee-e49a-4511-9a91-48814ab99d23,ee8af8ee-e49a-4511-9a91-48814ab99d23,0,1,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,0,1,6fbf844e-ee8d-490f-9177-6392d262312f,6fbf844e-ee8d-490f-9177-6392d262312f,0,1,65000437-bd07-4841-a458-679d44768c46,65000437-bd07-4841-a458-679d44768c46,0,1,9b7051d5-abc4-416c-a0e6-515d120d78e4,9b7051d5-abc4-416c-a0e6-515d120d78e4,0,1,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,0,1,869938e6-6310-4326-bd15-5b91fe2e0911,869938e6-6310-4326-bd15-5b91fe2e0911,0,1,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,0,1,a156521a-ece1-49d3-8056-1c3508273c45,a156521a-ece1-49d3-8056-1c3508273c45,0,1,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,0,1,10018f80-3138-4089-bf9a-a5f178f1e295,10018f80-3138-4089-bf9a-a5f178f1e295,0,1,43aba109-4b7f-45ef-9c30-8b754e81911b,43aba109-4b7f-45ef-9c30-8b754e81911b,0,1,4ccd72e1-7fd7-4a3b-8428-71b44992937e,4ccd72e1-7fd7-4a3b-8428-71b44992937e,0,1,46077650-2b2c-4319-8279-41f277971669,46077650-2b2c-4319-8279-41f277971669,0,1,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,0,1,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,0,1,e82ebd72-7b5a-4f45-b853-1001bf680a05,e82ebd72-7b5a-4f45-b853-1001bf680a05,0,1,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,0,1,e9e9b733-e97a-430d-95ce-45ea27751f64,e9e9b733-e97a-430d-95ce-45ea27751f64,0,1,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,0,1,3dd50c66-27f7-4f1e-86e9-c709995c8609,3dd50c66-27f7-4f1e-86e9-c709995c8609,0,1,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,0,1,ed1369c5-c274-45bd-ae91-7648565ae09f,ed1369c5-c274-45bd-ae91-7648565ae09f,0,1,8d0fce61-a22f-4033-9e03-3f00c4a21722,8d0fce61-a22f-4033-9e03-3f00c4a21722,0,1,bfb3f026-e940-49c3-ac30-408186f9e11e,bfb3f026-e940-49c3-ac30-408186f9e11e,0,1,e1dc83eb-a8cd-454b-8de8-cff2049be78c,e1dc83eb-a8cd-454b-8de8-cff2049be78c,0,1,9edd9288-1463-4d67-b9f0-40f351d978e9,9edd9288-1463-4d67-b9f0-40f351d978e9,0,1,c9db6c68-965f-4567-b26e-5d497a389de1,c9db6c68-965f-4567-b26e-5d497a389de1,0,1,4da2f65d-56bd-4140-9b31-e5ccac4a800a,4da2f65d-56bd-4140-9b31-e5ccac4a800a,0,1,eb163bba-b94c-4a78-9c2d-7b519325e3d4,eb163bba-b94c-4a78-9c2d-7b519325e3d4,0,1,939bdb9a-294b-4b42-a56f-030f69bc29c4,939bdb9a-294b-4b42-a56f-030f69bc29c4,0,1,ee7a763b-bcbf-4ff3-89af-eb7965b33515,ee7a763b-bcbf-4ff3-89af-eb7965b33515,0,1,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,0,1,f81b51c5-57e4-41f8-9ad5-3d2717351b95,f81b51c5-57e4-41f8-9ad5-3d2717351b95,0,1,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,0,1,de0a39e0-d37d-47c6-a019-e44836edc8d1,de0a39e0-d37d-47c6-a019-e44836edc8d1,0,1,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1fdcc1e7-ad53-409e-ba13-84c6429740cd,0,1,71d544bf-15c1-4581-8baa-ac126308425c,71d544bf-15c1-4581-8baa-ac126308425c,0,1,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,0,1,7acfe30e-73cb-465a-88f2-92b7275dc49b,7acfe30e-73cb-465a-88f2-92b7275dc49b,0,1,8e387dac-5029-49da-a013-355df0a51a44,8e387dac-5029-49da-a013-355df0a51a44,0,1,13859664-8307-40e8-855b-557b9cf2f1ec,13859664-8307-40e8-855b-557b9cf2f1ec,0,1,e4397fba-507f-497c-9414-7d08ccd4d799,e4397fba-507f-497c-9414-7d08ccd4d799,0,1,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,0,1,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,0,1,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,0,1,d915d338-3e4c-45c3-aef5-a07cf41b05f6,d915d338-3e4c-45c3-aef5-a07cf41b05f6,0,1,978640a2-5c4b-4e21-857e-34f00840fba8,978640a2-5c4b-4e21-857e-34f00840fba8,0,1,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,0,1,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,0,1,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,0,1,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,0,1,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,0,1,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,0,1,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,0,1,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,0,1,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,0,1,840a1d4d-e5f6-4a88-886f-03830fe4f99a,840a1d4d-e5f6-4a88-886f-03830fe4f99a,0,1,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,0,1,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,0,1,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,0,1,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,0,1,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,0,1,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,0,1,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,0,1,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,0,1,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,0,1,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,0,1,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,0,1,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,0,1,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,0,1,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,0,1,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,0,1,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,0,1,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,0,1,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,0,1,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,0,1,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,0,1,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,0,1,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,0,1,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,0,1,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,0,1,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,0,1,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,0,1,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,0,1,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,0,1,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,0,1,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,0,1,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,0,1,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,0,1,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,0,1,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,0,1,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,0,1,255e55e3-fc3a-4388-8667-486fe3b7557f,255e55e3-fc3a-4388-8667-486fe3b7557f,0,1,d4bfe208-c64c-4088-b33f-98e4cee03444,d4bfe208-c64c-4088-b33f-98e4cee03444,0,1,d912e472-9553-4b96-8b16-7aaff6c14239,d912e472-9553-4b96-8b16-7aaff6c14239,0,1,b04018b5-a74d-43c9-8519-6cc8aa23fe09,b04018b5-a74d-43c9-8519-6cc8aa23fe09,0,1,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,0,1,9283277f-2b75-4c3a-810a-8d4071b3afcc,9283277f-2b75-4c3a-810a-8d4071b3afcc,0,1,d03d5b18-57a2-43c0-99ea-8ad9d5788179,d03d5b18-57a2-43c0-99ea-8ad9d5788179,0,1,c491a7fc-14f9-498a-b7dd-575dfc66878e,c491a7fc-14f9-498a-b7dd-575dfc66878e,0,1,db15f8eb-4736-4b47-9cee-3e6883f0888c,db15f8eb-4736-4b47-9cee-3e6883f0888c,0,1,59064eb2-2770-4f1c-96bd-801926fe68ef,59064eb2-2770-4f1c-96bd-801926fe68ef,0,1,6b2340d7-687f-43a3-8eb8-8ddb86712466,6b2340d7-687f-43a3-8eb8-8ddb86712466,0,1,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,0,1,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,0,1,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,0,1,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,0,1,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,0,1,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,0,1,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,0,1,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0,1,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,0,1,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0,1,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,0,1,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,0,1,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,0,1,9328da5c-4689-4a60-8136-ae9eac46ab38,9328da5c-4689-4a60-8136-ae9eac46ab38,0,1,42641296-64da-46e0-a407-de2d492f9c90,42641296-64da-46e0-a407-de2d492f9c90,0,1,b834af0b-086c-445d-a271-7e178c324551,b834af0b-086c-445d-a271-7e178c324551,0,1,32c10512-7bb8-423b-9503-ab2fa41386a4,32c10512-7bb8-423b-9503-ab2fa41386a4,0,1,888edfc4-8140-4675-b267-c32bf1d8d29d,888edfc4-8140-4675-b267-c32bf1d8d29d,0,1,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,0,1,57a0f5f3-6573-4b35-af25-cea3a25641f1,57a0f5f3-6573-4b35-af25-cea3a25641f1,0,1,21d296a1-6809-4ff6-a4da-b455cad86cc2,21d296a1-6809-4ff6-a4da-b455cad86cc2,0,1,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,0,1,45a8c780-c067-40d7-bbe9-81f854aacf7a,45a8c780-c067-40d7-bbe9-81f854aacf7a,0,1,57885cac-059a-4a08-aa2c-43b116d2c777,57885cac-059a-4a08-aa2c-43b116d2c777,0,1,56b570b1-93b0-468a-9672-9c71113753f3,56b570b1-93b0-468a-9672-9c71113753f3,0,1,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,0,1,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,0,1,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,0,1,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,0,1,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,0,1,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,0,1,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,0,1,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,0,1,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,0,1,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0,1,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,0,1,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,0,1,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,0,1,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,0,1,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,0,1,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,0,1,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,0,1,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,0,1,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,0,1,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,0,1,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,0,1,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,0,1,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,0,1,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,0,1,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,0,1,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,0,1,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,0,1,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,0,1,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,0,1,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,0,1,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,0,1,8f088f33-92d7-4e35-915d-6cda1129dd80,8f088f33-92d7-4e35-915d-6cda1129dd80,0,1,9a8578a2-8a92-4ab3-a480-173340f8b34a,9a8578a2-8a92-4ab3-a480-173340f8b34a,0,1,4889d27b-435b-4059-a34d-6afdf3c77fa3,4889d27b-435b-4059-a34d-6afdf3c77fa3,0,1,4ebf0988-ccc3-440c-bd0f-2d01636bd730,4ebf0988-ccc3-440c-bd0f-2d01636bd730,0,1,69f42341-268b-4e74-9d6d-527800d018ab,69f42341-268b-4e74-9d6d-527800d018ab,0,1,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,0,1,ca6ecedc-f4c5-4c14-8a02-6255ce45033a,ca6ecedc-f4c5-4c14-8a02-6255ce45033a,0,1,7eb5217f-684d-4a9e-8aef-48cedc809cbb,7eb5217f-684d-4a9e-8aef-48cedc809cbb,0,1,4b54d626-dc59-4e49-a708-0a7f98833b9a,4b54d626-dc59-4e49-a708-0a7f98833b9a,0,1,1c90a423-ef1b-42dc-a43b-1fda89672481,1c90a423-ef1b-42dc-a43b-1fda89672481,0,1,095cf2d6-5a7c-452d-8d60-991afb6e52bd,095cf2d6-5a7c-452d-8d60-991afb6e52bd,0,1,2c155a03-2aff-4632-adb2-be3266e0fac3,2c155a03-2aff-4632-adb2-be3266e0fac3,0,1,f9213a70-bfd6-464f-b28b-ed35bdf351c0,f9213a70-bfd6-464f-b28b-ed35bdf351c0,0,1,eb81610a-eb2f-4068-ba74-75e0f5bbace8,eb81610a-eb2f-4068-ba74-75e0f5bbace8,0,1,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,0,1,21826316-0b49-4034-a49e-6d34c15ceb5c,21826316-0b49-4034-a49e-6d34c15ceb5c,0,1,3abffa47-8d47-4173-897b-708e1a06ef39,3abffa47-8d47-4173-897b-708e1a06ef39,0,1,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0,1,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,0,1,38692186-a62a-42d1-87cd-7dbc6d4816ed,38692186-a62a-42d1-87cd-7dbc6d4816ed,0,1,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,0,1,3a28cea9-7fd7-4834-ab89-2a74331a64e3,3a28cea9-7fd7-4834-ab89-2a74331a64e3,0,1,0f881709-4520-4f18-af9d-cf08757693ff,0f881709-4520-4f18-af9d-cf08757693ff,0,1,c5151ca9-5103-42b2-8573-273c15416db8,c5151ca9-5103-42b2-8573-273c15416db8,0,1,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,0,1,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,0,1,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,0,1,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,0,1,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,0,1,c13fb1cd-fe72-48a6-b383-55b6323619ce,c13fb1cd-fe72-48a6-b383-55b6323619ce,0,1,956fc8ee-96be-4309-b1e8-209372f151ab,956fc8ee-96be-4309-b1e8-209372f151ab,0,1,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,0,1,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,0,1,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,0,1,12f85e09-1190-4483-b531-630ab718db7f,12f85e09-1190-4483-b531-630ab718db7f,0,1,52f4453e-e968-4290-a79a-470f68fbd07f,52f4453e-e968-4290-a79a-470f68fbd07f,0,1,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,0,1,33e0072d-7d5b-4298-ae77-31a7cb358f5d,33e0072d-7d5b-4298-ae77-31a7cb358f5d,0,1,1051c0c7-1058-427c-8bf5-5e30b8fbfb54,1051c0c7-1058-427c-8bf5-5e30b8fbfb54,0,1,b27688c3-6682-45e1-a03f-0d2e8b1214e4,b27688c3-6682-45e1-a03f-0d2e8b1214e4,0,1,c8158812-024b-4f94-bd07-c3f1fd59e8a1,c8158812-024b-4f94-bd07-c3f1fd59e8a1,0,1,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,0,1,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,0,1,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,0,1,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,0,1,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,0,1,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,0,1,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,0,1,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,0,1,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,0,1,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,0,1,04055821-03ce-4049-af2c-8670c80517f6,04055821-03ce-4049-af2c-8670c80517f6,0,1,0101305d-62eb-4802-9cd4-d615a518d842,0101305d-62eb-4802-9cd4-d615a518d842,0,1,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,0,1,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,0,1,7c424424-9660-462d-9cf2-4c1e6bd284fa,7c424424-9660-462d-9cf2-4c1e6bd284fa,0,1,e118f957-ab2c-473b-ab64-37032f727416,e118f957-ab2c-473b-ab64-37032f727416,0,1,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,0,1,21f64e5f-dc94-4ce9-b836-e75646ae3325,21f64e5f-dc94-4ce9-b836-e75646ae3325,0,1,82e8a180-f2e1-406c-9609-89d33504aff2,82e8a180-f2e1-406c-9609-89d33504aff2,0,1,e7437c81-3d5b-466e-880c-8febe4a68e88,e7437c81-3d5b-466e-880c-8febe4a68e88,0,1,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,0,1,307771e6-bcf7-4016-b369-e1655bbe9e94,307771e6-bcf7-4016-b369-e1655bbe9e94,0,1,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,0,1,38fc6a54-846c-40b0-9254-3261f540bf18,38fc6a54-846c-40b0-9254-3261f540bf18,0,1,d9134d0c-56cd-4b8f-ab11-ae37fc306801,d9134d0c-56cd-4b8f-ab11-ae37fc306801,0,1,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,0,1,8f2af24b-f5fa-4f6d-831e-28453bdedefc,8f2af24b-f5fa-4f6d-831e-28453bdedefc,0,1,d119e21d-0087-4f22-b3bd-b14707b65330,d119e21d-0087-4f22-b3bd-b14707b65330,0,1,dc9b4072-11de-40fe-bf2a-f7b15af0a250,dc9b4072-11de-40fe-bf2a-f7b15af0a250,0,1,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,0,1,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,0,1,932b1c1a-72eb-49cd-8218-d0ced9c454d8,932b1c1a-72eb-49cd-8218-d0ced9c454d8,0,1,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,0,1,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,0,1,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,0,1,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,0,1,5dd336c4-88c5-4f53-acf0-5f86a658c528,5dd336c4-88c5-4f53-acf0-5f86a658c528,0,1,c723112b-286d-46f1-989d-81252062a025,c723112b-286d-46f1-989d-81252062a025,0,1,67e8b47e-4bad-4b2f-b196-8a9708893051,67e8b47e-4bad-4b2f-b196-8a9708893051,0,1,a583e53a-3f3c-48c7-8928-37ce40b2bafe,a583e53a-3f3c-48c7-8928-37ce40b2bafe,0,1,a844dd4a-274a-4894-9446-031dbe006084,a844dd4a-274a-4894-9446-031dbe006084,0,1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,0,1,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,0,1,7092a5d4-620b-4ad2-bce4-f099da694100,7092a5d4-620b-4ad2-bce4-f099da694100,0,1,31b3e718-d0b2-425b-b8af-67bc407eab56,31b3e718-d0b2-425b-b8af-67bc407eab56,0,1,77bdd30f-4933-4bda-9c7a-b0a097da0910,77bdd30f-4933-4bda-9c7a-b0a097da0910,0,1,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,0,1,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,0,1,a682e9e1-284f-4e32-86b2-6736f159f585,a682e9e1-284f-4e32-86b2-6736f159f585,0,1,84f0bd89-9b86-440f-b942-9b685e22233e,84f0bd89-9b86-440f-b942-9b685e22233e,0,1,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,0,1,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,0,1,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,0,1,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,0,1,fabf8a0b-366f-4f23-9377-315534bb854b,fabf8a0b-366f-4f23-9377-315534bb854b,0,1,7aac6439-64c9-4492-b866-bf91dda82d06,7aac6439-64c9-4492-b866-bf91dda82d06,0,1,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,0,1,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,0,1,08b86f29-64ef-467a-af1a-d27ffdf621ba,08b86f29-64ef-467a-af1a-d27ffdf621ba,0,1,6483d1ab-c53d-4985-ad7e-b799adbcd9da,6483d1ab-c53d-4985-ad7e-b799adbcd9da,0,1,82f66233-ed13-49ae-ab72-7cf91c88c760,82f66233-ed13-49ae-ab72-7cf91c88c760,0,1,75cddbcd-e960-4164-81d8-ac0a2a36e95b,75cddbcd-e960-4164-81d8-ac0a2a36e95b,0,1,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,0,1,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,0,1,d9151001-a911-45c1-a8e6-dcf0da623ed3,d9151001-a911-45c1-a8e6-dcf0da623ed3,0,1,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,0,1,e589a693-ff50-4c36-ae26-a8fcae966d57,e589a693-ff50-4c36-ae26-a8fcae966d57,0,1,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,0,1,90f023f5-5b48-4f98-bfc6-b704277a355d,90f023f5-5b48-4f98-bfc6-b704277a355d,0,1,99485603-706d-4301-be25-82b1c0ee8f4d,99485603-706d-4301-be25-82b1c0ee8f4d,0,1,e7a28021-c75e-41b2-9974-cf4beee34d28,e7a28021-c75e-41b2-9974-cf4beee34d28,0,1,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,0,1,2a603c61-4cbf-4c6d-a0b2-40c835d36737,2a603c61-4cbf-4c6d-a0b2-40c835d36737,0,1,a8d7f071-401b-499e-957c-d077d8002e54,a8d7f071-401b-499e-957c-d077d8002e54,0,1,211a539b-4be9-4816-98f6-f756e65eafd8,211a539b-4be9-4816-98f6-f756e65eafd8,0,1,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,0,1,e9b9da80-7806-4c9c-a002-01cfa3109169,e9b9da80-7806-4c9c-a002-01cfa3109169,0,1,a271041d-0203-4ecd-bb39-70256c50192e,a271041d-0203-4ecd-bb39-70256c50192e,0,1,9eacd816-d416-4bf9-9cc7-a62394031517,9eacd816-d416-4bf9-9cc7-a62394031517,0,1,6c055aa0-3d9f-42a0-95bb-10ad0a513b9c,6c055aa0-3d9f-42a0-95bb-10ad0a513b9c,0,1,73eff626-a363-4a5a-879e-61ef6ce0726f,73eff626-a363-4a5a-879e-61ef6ce0726f,0,1,acf15b79-a6c4-4c46-8013-50d3b223baf6,acf15b79-a6c4-4c46-8013-50d3b223baf6,0,1,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,0,1,2d8d5d74-2bc0-4282-af66-e4a37694c147,2d8d5d74-2bc0-4282-af66-e4a37694c147,0,1,cfd31341-287b-4684-9ac0-b28b4e066f15,cfd31341-287b-4684-9ac0-b28b4e066f15,0,1,81de1b0b-7f2d-4098-ae99-061c6a90dc29,81de1b0b-7f2d-4098-ae99-061c6a90dc29,0,1,f829e2a9-5bdb-4171-8b32-8d10d5968813,f829e2a9-5bdb-4171-8b32-8d10d5968813,0,1,647ba8f8-57f7-4c19-af59-525517c1e392,647ba8f8-57f7-4c19-af59-525517c1e392,0,1,39062cb3-4ae8-4c0d-889b-038a55179946,39062cb3-4ae8-4c0d-889b-038a55179946,0,1,c62d4212-36ca-4afb-bac9-269b6f64ca51,c62d4212-36ca-4afb-bac9-269b6f64ca51,0,1,5cec5e16-46ad-4f8c-b869-f5b1cc487884,5cec5e16-46ad-4f8c-b869-f5b1cc487884,0,1,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,0,1,7aacdf81-49fd-47a3-a36a-c483f1b05872,7aacdf81-49fd-47a3-a36a-c483f1b05872,0,1,857015e2-afb2-403d-bfb7-7acb5080797b,857015e2-afb2-403d-bfb7-7acb5080797b,0,1,5657286b-114b-41de-ab7d-45d0f0d95e2d,5657286b-114b-41de-ab7d-45d0f0d95e2d,0,1,42a0271e-6783-44db-95c1-09805ae01f58,42a0271e-6783-44db-95c1-09805ae01f58,0,1,8628783e-4fad-4dff-8220-9e0ddc8580f8,8628783e-4fad-4dff-8220-9e0ddc8580f8,0,1,356fc245-3034-42d1-84d0-632c6dc7a3d5,356fc245-3034-42d1-84d0-632c6dc7a3d5,0,1,07462664-6b58-4f5a-9b3f-2e5c376f17df,07462664-6b58-4f5a-9b3f-2e5c376f17df,0,1,6f23e946-f700-424b-b9bf-3a9c8846908d,6f23e946-f700-424b-b9bf-3a9c8846908d,0,1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,0,1,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,0,1,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,0,1,c656771c-dcb7-4c78-9a16-e62806d5bb5a,c656771c-dcb7-4c78-9a16-e62806d5bb5a,0,1,ec42c45c-18ca-44b0-9c59-1cb204552a43,ec42c45c-18ca-44b0-9c59-1cb204552a43,0,1,2aafb1a1-4321-47e9-9783-03ab616a2873,2aafb1a1-4321-47e9-9783-03ab616a2873,0,1,71109997-6da0-4eaf-bbf2-f94fa24f37cc,71109997-6da0-4eaf-bbf2-f94fa24f37cc,0,1,c48ef5e7-61da-4613-ae8b-f39745fccd20,c48ef5e7-61da-4613-ae8b-f39745fccd20,0,1,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,0,1,d601281c-379d-4a9d-843e-478fd6567415,d601281c-379d-4a9d-843e-478fd6567415,0,1,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,0,1,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,0,1,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,0,1,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,0,1,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,0,1,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,0,1,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,0,1,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,0,1,a915df5f-7330-4fc3-aecd-08d228b8fd23,a915df5f-7330-4fc3-aecd-08d228b8fd23,0,1,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,0,1,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,0,1,6e20df72-c643-4952-8f9c-f386d2915004,6e20df72-c643-4952-8f9c-f386d2915004,0,1,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,0,1,0e5074b0-bc15-416d-9c87-dad6824186e1,0e5074b0-bc15-416d-9c87-dad6824186e1,0,1,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,0,1,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,0,1,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,0,1,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,0,1,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,0,1,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,0,1,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,0,1,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,0,1,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,0,1,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,0,1,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,0,1,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,0,1,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,0,1,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,0,1,d7a86a55-db13-4601-9bdb-c83b25ea9a51,d7a86a55-db13-4601-9bdb-c83b25ea9a51,0,1,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,0,1,b926d058-53a9-4eea-b4f9-98e77f798dd9,b926d058-53a9-4eea-b4f9-98e77f798dd9,0,1,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,0,1,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,0,1,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,0,1,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,0,1,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,0,1,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,0,1,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,0,1,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,0,1,abacbda3-b4c1-446b-95e7-a45adec16174,abacbda3-b4c1-446b-95e7-a45adec16174,0,1,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,0,1,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,0,1,91a7a0f7-19e8-43d1-935c-e9bd1ac24d03,91a7a0f7-19e8-43d1-935c-e9bd1ac24d03,0,1,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,0,1,868da26b-f32e-48d1-a647-44dac7520d86,868da26b-f32e-48d1-a647-44dac7520d86,0,1,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,0,1,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,0,1,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,0,1,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,0,1,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,0,1,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,0,1,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,0,1,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,0,1,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,0,1,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,0,1,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0,1,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,0,1,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,0,1,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,0,1,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,0,1,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,0,1,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,0,1,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,0,1,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,0,1,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,0,1,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,0,1,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,0,1,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,0,1,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0,1,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0,1,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,0,1,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,0,1,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,0,1,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,0,1,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,0,1,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,0,1,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0,1,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,0,1,34a6b209-ceb7-44f2-8827-20d942fdd491,34a6b209-ceb7-44f2-8827-20d942fdd491,0,1,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,0,1,6410853e-a17e-44db-b8cc-bfefd7c4d239,6410853e-a17e-44db-b8cc-bfefd7c4d239,0,1,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,0,1,bad3d1fa-9618-427a-93e0-90f151e468bf,bad3d1fa-9618-427a-93e0-90f151e468bf,0,1,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,0,1,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,0,1,ec7cfc56-00fd-4494-be90-49308a3c34a0,ec7cfc56-00fd-4494-be90-49308a3c34a0,0,1,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,0,1,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,0,1,719cdbdd-13b3-44fc-8739-0b788693a8d0,719cdbdd-13b3-44fc-8739-0b788693a8d0,0,1,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,0,1,5de9fbf9-f075-4acf-b9f9-89688d2006af,5de9fbf9-f075-4acf-b9f9-89688d2006af,0,1,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,0,1,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,0,1,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,0,1,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,0,1,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,0,1,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,0,1,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,0,1,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,0,1,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,0,1,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,0,1,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,0,1,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,0,1,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,0,1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,0,1,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,0,1,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,0,1,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,0,1,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,0,1,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,0,1,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,0,1,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,0,1,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,0,1,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,0,1,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,0,1,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,0,1,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,0,1,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,0,1,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,0,1,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,0,1,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,0,1,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,0,1,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,0,1,ef326bd8-1570-455e-ae8c-063b5578ad15,ef326bd8-1570-455e-ae8c-063b5578ad15,0,1,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,0,1,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,0,1,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,0,1,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,0,1,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,0,1,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,0,1,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,0,1,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,0,1,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,0,1,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,0,1,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,0,1,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,0,1,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,0,1,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,0,1,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,0,1,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,0,1,837e4559-2f2d-48e9-a03b-2d52b25569ec,837e4559-2f2d-48e9-a03b-2d52b25569ec,0,1,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,0,1,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,0,1,3660618a-0cab-458f-b448-867c4d1aba1b,3660618a-0cab-458f-b448-867c4d1aba1b,0,1,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,0,1,22f34fd5-4bda-48c1-8772-74d9c6479a30,22f34fd5-4bda-48c1-8772-74d9c6479a30,0,1,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,0,1,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,0,1,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,0,1,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,0,1,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,0,1,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,0,1,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,0,1,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,0,1,ba7657df-429a-4737-b787-19ef09fdebb2,ba7657df-429a-4737-b787-19ef09fdebb2,0,1,867d72be-f406-45a5-a511-b90459683f11,867d72be-f406-45a5-a511-b90459683f11,0,1,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,0,1,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,0,1,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,0,1,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,0,1,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,0,1,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,0,1,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0,1,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,0,1,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,0,1,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,0,1,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,0,1,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,0,1,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,0,1,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,0,1,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,0,1,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,0,1,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,0,1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0,1,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,0,1,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,0,1,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,0,1,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,0,1,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,0,1,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,0,1,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,0,1,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,0,1,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,0,1,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,0,1,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,0,1,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,0,1,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,0,1,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,0,1,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,0,1,e19aefe7-634d-4218-8d40-75802d1691e0,e19aefe7-634d-4218-8d40-75802d1691e0,0,1,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,0,1,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,0,1,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,0,1,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,0,1,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,0,1,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,0,1,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,0,1,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,0,1,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,0,1,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,0,1,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,0,1,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,0,1,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,0,1,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,0,1,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,0,1,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,0,1,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,0,1,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,0,1,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,0,1,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,0,1,d826fe6f-d9f6-41f2-8dd6-bd840af25183,d826fe6f-d9f6-41f2-8dd6-bd840af25183,0,1,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,0,1,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,0,1,5e6a6f8f-5cb1-475d-b2d8-f2f143ef7b19,5e6a6f8f-5cb1-475d-b2d8-f2f143ef7b19,0,1,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,0,1,7bc5fa42-7d72-433e-8db6-a046b583a316,7bc5fa42-7d72-433e-8db6-a046b583a316,0,1,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,0,1,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,0,1,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,0,1,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,0,1,b6ae3a72-c686-409d-9cda-9d1a00be1d8d,b6ae3a72-c686-409d-9cda-9d1a00be1d8d,0,1,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,0,1,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,0,1,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,0,1,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,0,1,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,0,1,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,0,1,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,0,1,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,0,1,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,0,1,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,0,1,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,0,1,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,0,1,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,0,1,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,0,1,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,0,1,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,0,1,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,0,1,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,0,1,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,0,1,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,0,1,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,0,1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,0,1,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,0,1,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,0,1,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,0,1,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,0,1,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,0,1,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,0,1,dd050ca0-8335-4654-ab5c-7babcb4824ef,dd050ca0-8335-4654-ab5c-7babcb4824ef,0,1,706cbf55-626d-4cab-b589-a2464368f6c1,706cbf55-626d-4cab-b589-a2464368f6c1,0,1,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,0,1,483dfce4-9c66-4739-94d4-17a005d64f5b,483dfce4-9c66-4739-94d4-17a005d64f5b,0,1,19506116-43ef-433c-822c-ef8717b0da6b,19506116-43ef-433c-822c-ef8717b0da6b,0,1,464b92cc-b577-4350-ae9f-e697390248d7,464b92cc-b577-4350-ae9f-e697390248d7,0,1,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,0,1,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,0,1,97e853dc-065f-4c6d-84cb-3d3aff367b22,97e853dc-065f-4c6d-84cb-3d3aff367b22,0,1,2f1fdf47-2627-496f-9e1f-77019abb2104,2f1fdf47-2627-496f-9e1f-77019abb2104,0,1,c996532a-8795-4136-8a40-9bb4b263277c,c996532a-8795-4136-8a40-9bb4b263277c,0,1,64c77788-fc49-4979-8163-949a891bd8b7,64c77788-fc49-4979-8163-949a891bd8b7,0,1,c39750ca-e33f-40c2-b830-119423d9a2ae,c39750ca-e33f-40c2-b830-119423d9a2ae,0,1,9372ff6b-27b6-48f3-a2a2-762e7c485766,9372ff6b-27b6-48f3-a2a2-762e7c485766,0,1,f454595a-4a3d-451b-8e8b-b17aa8314591,f454595a-4a3d-451b-8e8b-b17aa8314591,0,1,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,0,1,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,0,1,bc708da8-7fc6-4da1-8129-9ef6a86667af,bc708da8-7fc6-4da1-8129-9ef6a86667af,0,1,061842fe-4077-4d6e-aefe-de79409da730,061842fe-4077-4d6e-aefe-de79409da730,0,1,da6e4bff-9835-4b92-b62b-291a5d6c86fe,da6e4bff-9835-4b92-b62b-291a5d6c86fe,0,1,6f0caeb0-34ce-489c-86c4-c16d85320fa3,6f0caeb0-34ce-489c-86c4-c16d85320fa3,0,1,4c49914c-e472-46f8-8c5e-5e38138eb301,4c49914c-e472-46f8-8c5e-5e38138eb301,0,1,81d4ea48-8704-494d-8cd2-51f2dd1190bc,81d4ea48-8704-494d-8cd2-51f2dd1190bc,0,1,9c196011-1485-4fa5-bb05-a9dbe768e8a7,9c196011-1485-4fa5-bb05-a9dbe768e8a7,0,1,3fadaeb7-2c41-42a4-bfa8-c585602b1028,3fadaeb7-2c41-42a4-bfa8-c585602b1028,0,1,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,0,1,b98dacc7-29e1-426b-a664-0a988f18186c,b98dacc7-29e1-426b-a664-0a988f18186c,0,1,083c709b-ed8c-47e4-a190-421e14259e73,083c709b-ed8c-47e4-a190-421e14259e73,0,1,d678856d-6e7c-443f-a6e3-350bbe8af659,d678856d-6e7c-443f-a6e3-350bbe8af659,0,1,d0979762-22ce-41be-b7a4-5e9ac149d94b,d0979762-22ce-41be-b7a4-5e9ac149d94b,0,1,ae23e70c-479e-47ad-9bfa-58560a903410,ae23e70c-479e-47ad-9bfa-58560a903410,0,1,c0d83781-bbda-43f7-bf0e-5defa3d47143,c0d83781-bbda-43f7-bf0e-5defa3d47143,0,1,21fa5fdd-acbc-403b-9acb-bbf95284bd20,21fa5fdd-acbc-403b-9acb-bbf95284bd20,0,1,576a01e3-4d6d-4241-a3c4-7661ba129bcb,576a01e3-4d6d-4241-a3c4-7661ba129bcb,0,1,9f7290dd-19f4-4163-9795-fe562e84f06d,9f7290dd-19f4-4163-9795-fe562e84f06d,0,1,c3b5c81f-b787-4f63-8cba-79def0921477,c3b5c81f-b787-4f63-8cba-79def0921477,0,1,1f0cb3d4-1344-451b-a257-be3cd854acfd,1f0cb3d4-1344-451b-a257-be3cd854acfd,0,1,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0,1,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,0,1,372150e2-526e-4424-8c54-e4b16bdd25b5,372150e2-526e-4424-8c54-e4b16bdd25b5,0,1,752dc569-cf84-42d7-911d-49d455f7214e,752dc569-cf84-42d7-911d-49d455f7214e,0,1,fecab2b9-27e1-44d6-9082-79c3569b7477,fecab2b9-27e1-44d6-9082-79c3569b7477,0,1,07ae092f-8517-47b7-b54c-5dbcb6506929,07ae092f-8517-47b7-b54c-5dbcb6506929,0,1,db4c25bb-d199-43ec-833d-82972de04a41,db4c25bb-d199-43ec-833d-82972de04a41,0,1,43d19685-0794-41f2-9171-bf565133718d,43d19685-0794-41f2-9171-bf565133718d,0,1,b68c15c4-4966-4f13-8912-2d479b65089a,b68c15c4-4966-4f13-8912-2d479b65089a,0,1,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,0,1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,0,1,d8601e95-af94-4805-974a-99c539725d74,d8601e95-af94-4805-974a-99c539725d74,0,1,6d98f877-f3bb-4795-9025-2631468a331f,6d98f877-f3bb-4795-9025-2631468a331f,0,1,f87e3935-dae1-4192-b6a7-05e3c700c590,f87e3935-dae1-4192-b6a7-05e3c700c590,0,1,ee635706-6ee2-4956-8d58-a235f64687f6,ee635706-6ee2-4956-8d58-a235f64687f6,0,1,a5a40ca7-d665-420b-a516-1355019d6901,a5a40ca7-d665-420b-a516-1355019d6901,0,1,fb6b9985-3ef7-42e5-9f3a-d4499072ba3d,fb6b9985-3ef7-42e5-9f3a-d4499072ba3d,0,1,04ec4cb1-bab2-4bdd-b119-86540947b0ef,04ec4cb1-bab2-4bdd-b119-86540947b0ef,0,1,e93157d3-3a87-4f54-be95-d2d254c58349,e93157d3-3a87-4f54-be95-d2d254c58349,0,1,a8c1f22e-2589-4c02-93cf-8d88ef511ace,a8c1f22e-2589-4c02-93cf-8d88ef511ace,0,1,65524236-f087-4932-85b1-b92b1d573100,65524236-f087-4932-85b1-b92b1d573100,0,1,2f54f6d5-9d57-450b-a386-e917b5e46b0c,2f54f6d5-9d57-450b-a386-e917b5e46b0c,0,1,efea06e5-0e0b-4a16-9cf4-259ce36fe34e,efea06e5-0e0b-4a16-9cf4-259ce36fe34e,0,1,5158b2ed-124b-4b4f-ae2d-36bf059737a4,5158b2ed-124b-4b4f-ae2d-36bf059737a4,0,1,b7c40101-60b7-4c36-abcd-38101bc8b7d8,b7c40101-60b7-4c36-abcd-38101bc8b7d8,0,1,a4a9535b-b8a6-4d94-97e7-e28d795268ad,a4a9535b-b8a6-4d94-97e7-e28d795268ad,0,1,a4a23aa7-ccd2-49f9-ac3b-1257e9bdd300,a4a23aa7-ccd2-49f9-ac3b-1257e9bdd300,0,1,b6845833-530b-43b3-8715-f88b092d83bc,b6845833-530b-43b3-8715-f88b092d83bc,0,1,d2854e39-4157-45f3-a992-4d161c38b1da,d2854e39-4157-45f3-a992-4d161c38b1da,0,1,adf9304c-ccf8-492e-95b1-0754764586a2,adf9304c-ccf8-492e-95b1-0754764586a2,0,1,fd175112-ec8f-4088-9b21-d8135056f0c5,fd175112-ec8f-4088-9b21-d8135056f0c5,0,1,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,0,1,df76a1b7-312a-4e77-bac1-79befadb4495,df76a1b7-312a-4e77-bac1-79befadb4495,0,1,ab39fad8-1039-491e-982a-c49637770ec0,ab39fad8-1039-491e-982a-c49637770ec0,0,1,7d93a6ba-3ca7-45ab-a540-743c79587535,7d93a6ba-3ca7-45ab-a540-743c79587535,0,1,76b58810-0527-4dfc-8858-bac68e7e65f3,76b58810-0527-4dfc-8858-bac68e7e65f3,0,1,aba97fd9-f05e-45cd-8404-ed702070e17a,aba97fd9-f05e-45cd-8404-ed702070e17a,0,1,f5c415cd-429b-469f-9332-c43ab5d1c8d6,f5c415cd-429b-469f-9332-c43ab5d1c8d6,0,1,f2e9f4e7-913f-45a4-8318-4792b056749f,f2e9f4e7-913f-45a4-8318-4792b056749f,0,1,458e9c6b-b828-404b-be5a-c6c0aeea34c9,458e9c6b-b828-404b-be5a-c6c0aeea34c9,0,1,7262eb4d-2d2d-454c-beaa-974645813af7,7262eb4d-2d2d-454c-beaa-974645813af7,0,1,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,0,1,b2265070-9cd3-4176-92c8-6d9f32c2ca84,b2265070-9cd3-4176-92c8-6d9f32c2ca84,0,1,b347e774-2261-4f76-9bdb-3c6736983589,b347e774-2261-4f76-9bdb-3c6736983589,0,1,be7e2715-1243-49a8-8c7c-55d632d3cf6c,be7e2715-1243-49a8-8c7c-55d632d3cf6c,0,1,49221b2f-aae2-4bee-9a1a-18263fc74244,49221b2f-aae2-4bee-9a1a-18263fc74244,0,1,da0cd264-da2f-4044-af28-c91d2efe1d5c,da0cd264-da2f-4044-af28-c91d2efe1d5c,0,1,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,0,1,e754ad5c-cf3c-4198-af81-128475924cb0,e754ad5c-cf3c-4198-af81-128475924cb0,0,1,ed65d504-b210-4014-85ec-275ad633ef04,ed65d504-b210-4014-85ec-275ad633ef04,0,1,dc31edb1-273e-4b1a-8e69-32393479ff36,dc31edb1-273e-4b1a-8e69-32393479ff36,0,1,46169f0b-8514-40a1-9d27-8489cab72503,46169f0b-8514-40a1-9d27-8489cab72503,0,1,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,0,1,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,0,1,c90243af-582c-4f5a-88e7-e0cbc0555fcb,c90243af-582c-4f5a-88e7-e0cbc0555fcb,0,1,14bf4066-15cb-4165-b854-45443ee27da1,14bf4066-15cb-4165-b854-45443ee27da1,0,1,c35904cf-4954-434e-96fd-5ca537a88c66,c35904cf-4954-434e-96fd-5ca537a88c66,0,1,5545798f-72dc-4630-a5ba-88039f4bfe3c,5545798f-72dc-4630-a5ba-88039f4bfe3c,0,1,f293ac4b-91ed-4c97-90b3-bfe98c983a0f,f293ac4b-91ed-4c97-90b3-bfe98c983a0f,0,1,4427cab9-4eea-4415-98ef-6021a447c60c,4427cab9-4eea-4415-98ef-6021a447c60c,0,1,fe46b4da-d865-468f-badd-83644bf88faa,fe46b4da-d865-468f-badd-83644bf88faa,0,1,2851c9d4-4366-4488-926d-a7fcd3b1548c,2851c9d4-4366-4488-926d-a7fcd3b1548c,0,1,31116aa2-cfbc-48e8-886b-45c1c17508fd,31116aa2-cfbc-48e8-886b-45c1c17508fd,0,1,6aa819d3-c56d-4561-a2e4-a1188ab1295a,6aa819d3-c56d-4561-a2e4-a1188ab1295a,0,1,2ddf344d-7065-40d5-9306-23870d8fc04a,2ddf344d-7065-40d5-9306-23870d8fc04a,0,1,c630ab2d-0a20-4136-88b6-220b2cad6a71,c630ab2d-0a20-4136-88b6-220b2cad6a71,0,1,00cd1dea-bc54-475c-956d-dc5221104932,00cd1dea-bc54-475c-956d-dc5221104932,0,1,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,0,1,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,0,1,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,0,1,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,0,1,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,0,1,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,0,1,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,0,1,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,0,1,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,0,1,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,0,1,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,0,1,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,0,1,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,0,1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,0,1,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,0,1,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,0,1,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,0,1,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,0,1,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,0,1,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,0,1,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,0,1,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,0,1,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,0,1,a23e6c77-8c12-4f99-ae2d-68a12274be38,a23e6c77-8c12-4f99-ae2d-68a12274be38,0,1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,0,1,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,0,1,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,0,1,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,0,1,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,0,1,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,0,1,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,0,1,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,0,1,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,0,1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,0,1,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,0,1,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,0,1,118a0e62-c0bb-435b-9e3e-c64563efa602,118a0e62-c0bb-435b-9e3e-c64563efa602,0,1,b57bc8a9-8a59-4192-a442-2e1982e83179,b57bc8a9-8a59-4192-a442-2e1982e83179,0,1,5b06ccda-2a70-4621-8273-78408cbe72a9,5b06ccda-2a70-4621-8273-78408cbe72a9,0,1,89753385-64fd-4e76-9857-bfd5d7c23f71,89753385-64fd-4e76-9857-bfd5d7c23f71,0,1,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,0,1,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,0,1,d3211832-c8ca-437a-8810-82e06cbb48de,d3211832-c8ca-437a-8810-82e06cbb48de,0,1,8131d701-1014-4196-9b67-914e451f8a3a,8131d701-1014-4196-9b67-914e451f8a3a,0,1,2b102933-c660-4e74-ae9a-5061a88ed672,2b102933-c660-4e74-ae9a-5061a88ed672,0,1,56c897b7-d34e-4d7d-9a3b-d0779be5c189,56c897b7-d34e-4d7d-9a3b-d0779be5c189,0,1,3ac81c80-56bd-4750-b135-07ab522e3eab,3ac81c80-56bd-4750-b135-07ab522e3eab,0,1,5657872f-c7d5-446f-bcc3-d0b86ad63a42,5657872f-c7d5-446f-bcc3-d0b86ad63a42,0,1,d5214cb9-67e2-469f-989f-3f2b662ae830,d5214cb9-67e2-469f-989f-3f2b662ae830,0,1,69679e88-4f2b-4dd6-8cb2-b88293d07b55,69679e88-4f2b-4dd6-8cb2-b88293d07b55,0,1,68679208-9972-4854-8649-49bdf6212255,68679208-9972-4854-8649-49bdf6212255,0,1,98393093-7ba6-4b4d-86be-ee5826cd8cd5,98393093-7ba6-4b4d-86be-ee5826cd8cd5,0,1,87de486d-3f35-4432-a7cd-9d3832db63cf,87de486d-3f35-4432-a7cd-9d3832db63cf,0,1,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,0,1,bb7ce04a-8143-4c0b-a196-1b57f1640142,bb7ce04a-8143-4c0b-a196-1b57f1640142,0,1,90ce635a-0277-4056-980d-d1a16d91cb30,90ce635a-0277-4056-980d-d1a16d91cb30,0,1,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,0,1,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1e77e873-632c-482b-8f46-8f8cc3cc8cef,0,1,766208a3-2780-427b-a7d3-93abe99d236b,766208a3-2780-427b-a7d3-93abe99d236b,0,1,63ce4c3c-5bad-409c-904f-18f34cf1da78,63ce4c3c-5bad-409c-904f-18f34cf1da78,0,1,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,0,1,26ac22f9-0bbb-4671-b446-626e345e2461,26ac22f9-0bbb-4671-b446-626e345e2461,0,1,0d63ee6d-e17f-4a86-b384-adf9793f3331,0d63ee6d-e17f-4a86-b384-adf9793f3331,0,1,f152945b-2a7b-449e-a915-176166af7bac,f152945b-2a7b-449e-a915-176166af7bac,0,1,77f5d86a-7fae-4490-9740-0e31102dab5c,77f5d86a-7fae-4490-9740-0e31102dab5c,0,1,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,0,1,24be43ec-d39e-46aa-9c11-2536b835e515,24be43ec-d39e-46aa-9c11-2536b835e515,0,1,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,0,1,df9af3ee-6a69-4a03-8ff5-0735e9a38013,df9af3ee-6a69-4a03-8ff5-0735e9a38013,0,1,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,0,1,7743fe24-b941-4dad-bc76-05fb6b26b1d7,7743fe24-b941-4dad-bc76-05fb6b26b1d7,0,1,5bf2da0d-f318-4036-9234-8a3a6eca88b2,5bf2da0d-f318-4036-9234-8a3a6eca88b2,0,1,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,0,1,c3634571-6fe5-45ab-9362-161305eef661,c3634571-6fe5-45ab-9362-161305eef661,0,1,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,0,1,96661303-1286-4f84-93b7-0e6da2bd7893,96661303-1286-4f84-93b7-0e6da2bd7893,0,1,68076431-36e6-46dc-92cb-e0d8e605bf66,68076431-36e6-46dc-92cb-e0d8e605bf66,0,1,239fa55a-6572-4e5c-9918-c2e14063c76d,239fa55a-6572-4e5c-9918-c2e14063c76d,0,1,8211a1b6-c3b1-466b-8d11-22603fb50c7a,8211a1b6-c3b1-466b-8d11-22603fb50c7a,0,1,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,0,1,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,0,1,a83cb338-5707-42c9-9e88-11f6c68fcc32,a83cb338-5707-42c9-9e88-11f6c68fcc32,0,1,985106b7-7476-4b48-90ac-ad86876395b5,985106b7-7476-4b48-90ac-ad86876395b5,0,1,0d8db0c9-adbc-478d-997c-3d7feccac99b,0d8db0c9-adbc-478d-997c-3d7feccac99b,0,1,3fd2ef04-c178-47bf-ab62-7baf83236d99,3fd2ef04-c178-47bf-ab62-7baf83236d99,0,1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,0,1,320bf2e6-a3a8-490b-8aa0-21369ffb121b,320bf2e6-a3a8-490b-8aa0-21369ffb121b,0,1,5ff09b32-03a1-469f-b224-7928b2092008,5ff09b32-03a1-469f-b224-7928b2092008,0,1,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,0,1,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,0,1,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,0,1,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,0,1,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,0,1,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,0,1,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,0,1,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,0,1,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,0,1,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,0,1,4e90e1ab-b1ec-4795-ad45-1db151a5492c,4e90e1ab-b1ec-4795-ad45-1db151a5492c,0,1,91791e56-ca80-4d90-b8a8-16145f6a9721,91791e56-ca80-4d90-b8a8-16145f6a9721,0,1,b242c6a2-5ac9-4edb-b5dd-24eda8162151,b242c6a2-5ac9-4edb-b5dd-24eda8162151,0,1,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,0,1,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,0,1,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,0,1,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,0,1,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,0,1,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,0,1,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,0,1,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,0,1,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,0,1,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,0,1,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,0,1,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,0,1,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,0,1,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,0,1,972c2fa0-0ca9-40da-a8c1-a06b81bd0bcf,972c2fa0-0ca9-40da-a8c1-a06b81bd0bcf,0,1,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,0,1,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,0,1,59fe985a-f169-495b-bd6d-4b64401f81b0,59fe985a-f169-495b-bd6d-4b64401f81b0,0,1,184d1023-fba9-4e56-b592-519254abe922,184d1023-fba9-4e56-b592-519254abe922,0,1,cb68b275-f191-4632-a8ea-aa8809256804,cb68b275-f191-4632-a8ea-aa8809256804,0,1,174011b9-8fe2-43f5-adea-21f6d73835ff,174011b9-8fe2-43f5-adea-21f6d73835ff,0,1,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,0,1,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,0,1,29645810-44aa-402c-9561-7819d6f4a7ab,29645810-44aa-402c-9561-7819d6f4a7ab,0,1,46bf4911-5200-44ac-9b4d-eb0089c12e34,46bf4911-5200-44ac-9b4d-eb0089c12e34,0,1,6e1685bd-7269-401c-b36e-def6a36b41d5,6e1685bd-7269-401c-b36e-def6a36b41d5,0,1,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,0,1,e03b6592-b597-4795-a78e-775d4f2258db,e03b6592-b597-4795-a78e-775d4f2258db,0,1,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,0,1,3b207d5f-6584-4cf2-9173-20235484f9f4,3b207d5f-6584-4cf2-9173-20235484f9f4,0,1,878d9efe-b0e7-487f-b8f7-83470c131e09,878d9efe-b0e7-487f-b8f7-83470c131e09,0,1,8270573d-8ed6-449d-853b-462d2dabaaa9,8270573d-8ed6-449d-853b-462d2dabaaa9,0,1,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,0,1,f2502463-67e4-4bfe-8ad5-fb80aa73975a,f2502463-67e4-4bfe-8ad5-fb80aa73975a,0,1,59e885e6-d978-40c2-95b6-35fc61074fb4,59e885e6-d978-40c2-95b6-35fc61074fb4,0,1,267dc512-9ee1-4bc1-9034-3effb7fb2949,267dc512-9ee1-4bc1-9034-3effb7fb2949,0,1,0f211e73-5be9-4015-93e7-ccf63e793cb6,0f211e73-5be9-4015-93e7-ccf63e793cb6,0,1,6574d8f4-fb97-4a26-b166-711fad63aa07,6574d8f4-fb97-4a26-b166-711fad63aa07,0,1,fb3eddaf-3241-4d59-8314-97a5ae9258c4,fb3eddaf-3241-4d59-8314-97a5ae9258c4,0,1,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,0,1,9767a113-5a42-4749-bf40-0f349e85615d,9767a113-5a42-4749-bf40-0f349e85615d,0,1,a3b0494c-f436-45ea-9577-4c0c86b057c9,a3b0494c-f436-45ea-9577-4c0c86b057c9,0,1,5101c142-b25c-4bef-80e7-7407f2c15c90,5101c142-b25c-4bef-80e7-7407f2c15c90,0,1,6d7872f1-fd54-41c4-8253-5f2b125f31ae,6d7872f1-fd54-41c4-8253-5f2b125f31ae,0,1,0c218200-27a8-4f71-9b09-3632dd453644,0c218200-27a8-4f71-9b09-3632dd453644,0,1,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,0,1,b5d30250-18ab-4af1-b99a-ff5dba334d1f,b5d30250-18ab-4af1-b99a-ff5dba334d1f,0,1,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,0,1,e8d5533e-2669-44f6-9eed-eaedab666d42,e8d5533e-2669-44f6-9eed-eaedab666d42,0,1,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,0,1,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,0,1,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,0,1,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,0,1,bd32a863-3090-432d-89c4-356ba86a0bdc,bd32a863-3090-432d-89c4-356ba86a0bdc,0,1,ed5465b4-a556-4078-ab18-49fef2afba2e,ed5465b4-a556-4078-ab18-49fef2afba2e,0,1,9ef3b72c-caa3-486b-9917-04c00f6689c1,9ef3b72c-caa3-486b-9917-04c00f6689c1,0,1,eeb0571b-1b74-4889-b8b5-f94186d692d7,eeb0571b-1b74-4889-b8b5-f94186d692d7,0,1,7368ab8f-59d5-4270-a43b-0f3e422169ed,7368ab8f-59d5-4270-a43b-0f3e422169ed,0,1,9245417f-f247-47ba-a1b4-a17ec2e8776c,9245417f-f247-47ba-a1b4-a17ec2e8776c,0,1,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,0,1,a4b721d7-b119-47eb-80e0-7db34c83964f,a4b721d7-b119-47eb-80e0-7db34c83964f,0,1,512629d1-e8b7-4f66-b613-b8c0cb9c250b,512629d1-e8b7-4f66-b613-b8c0cb9c250b,0,1,b7cf4684-4432-4658-9c06-b315d470a3a6,b7cf4684-4432-4658-9c06-b315d470a3a6,0,1,d3bc8211-54d8-47dd-aecf-5da72b65195f,d3bc8211-54d8-47dd-aecf-5da72b65195f,0,1,33f11da8-f670-4ec3-9d40-96fce031c60f,33f11da8-f670-4ec3-9d40-96fce031c60f,0,1,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,0,1,f74c2d41-2433-4bed-8aef-adfeed198252,f74c2d41-2433-4bed-8aef-adfeed198252,0,1,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,0,1,56c9703a-751a-4e6c-81f4-a8756fb040e3,56c9703a-751a-4e6c-81f4-a8756fb040e3,0,1,c3a86eec-1ff5-4392-9904-91a12a2e253a,c3a86eec-1ff5-4392-9904-91a12a2e253a,0,1,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,0,1,f02b7246-dae9-4e15-b4cd-b06133664d34,f02b7246-dae9-4e15-b4cd-b06133664d34,0,1,77f20022-17ce-4e00-8a84-015238bce6f3,77f20022-17ce-4e00-8a84-015238bce6f3,0,1,3734619b-7059-4547-8b97-0b3393389d4d,3734619b-7059-4547-8b97-0b3393389d4d,0,1,a30bf95f-aabd-4da0-8287-61e08f9362fb,a30bf95f-aabd-4da0-8287-61e08f9362fb,0,1,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,0,1,4078867c-2972-47f9-bebd-935a6f1cc667,4078867c-2972-47f9-bebd-935a6f1cc667,0,1,8502fe39-c241-4be5-a313-fd887bbbdfa1,8502fe39-c241-4be5-a313-fd887bbbdfa1,0,1,67a71201-13e5-42a3-902f-fb3a59710dfb,67a71201-13e5-42a3-902f-fb3a59710dfb,0,1,3a79a951-a997-4596-ab62-ba376d67725d,3a79a951-a997-4596-ab62-ba376d67725d,0,1,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,0,1,884c28de-434f-440a-8c63-67e659c097ad,884c28de-434f-440a-8c63-67e659c097ad,0,1,92ead3b5-8c55-4e4d-bd47-009e025b22f8,92ead3b5-8c55-4e4d-bd47-009e025b22f8,0,1,50d8e365-aa58-4b60-8992-01943379d485,50d8e365-aa58-4b60-8992-01943379d485,0,1,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,0,1,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,0,1,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,0,1,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,0,1,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,0,1,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,0,1,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,0,1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,0,1,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,0,1,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,0,1,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,0,1,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,0,1,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,0,1,e61eef89-b3de-4b73-b7d9-af75318093e5,e61eef89-b3de-4b73-b7d9-af75318093e5,0,1,94e68502-adf1-476e-be2f-8418385959fa,94e68502-adf1-476e-be2f-8418385959fa,0,1,bf80ccc5-f907-4e7f-a007-6030c7ba682e,bf80ccc5-f907-4e7f-a007-6030c7ba682e,0,1,a330acd1-bc97-4ef8-8ecb-5604868ca044,a330acd1-bc97-4ef8-8ecb-5604868ca044,0,1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,0,1,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,0,1,8928693b-1933-4e02-8a33-99b6f05b1c57,8928693b-1933-4e02-8a33-99b6f05b1c57,0,1,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,0,1,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,0,1,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,0,1,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,0,1,61f283c7-f887-432b-a2d7-c27483e04317,61f283c7-f887-432b-a2d7-c27483e04317,0,1,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,0,1,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,0,1,079bc65d-da8e-431d-847c-ec46868ca92d,079bc65d-da8e-431d-847c-ec46868ca92d,0,1,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,0,1,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,0,1,a5667633-9264-4dfa-9e26-c45e96e61ae3,a5667633-9264-4dfa-9e26-c45e96e61ae3,0,1,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,0,1,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,0,1,1f169cd2-573f-408d-92e7-3eee7ff4528a,1f169cd2-573f-408d-92e7-3eee7ff4528a,0,1,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,0,1,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,0,1,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,0,1,9ed016b2-2a4a-43a1-a336-6b13d68b3d0a,9ed016b2-2a4a-43a1-a336-6b13d68b3d0a,0,1,75b9ab9f-7cbb-4468-9570-39f719fd682b,75b9ab9f-7cbb-4468-9570-39f719fd682b,0,1,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,0,1,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,0,1,cd454738-62dd-4f95-af33-b52750678428,cd454738-62dd-4f95-af33-b52750678428,0,1,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,0,1,e4abafc6-f859-4d96-9818-5b9bf8d66d69,e4abafc6-f859-4d96-9818-5b9bf8d66d69,0,1,535acd2c-26d2-4f32-9ae6-cc1956317c59,535acd2c-26d2-4f32-9ae6-cc1956317c59,0,1,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,0,1,ac4e0868-ba49-46b4-8872-d42483a5591f,ac4e0868-ba49-46b4-8872-d42483a5591f,0,1,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,0,1,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0,1,ca4c0299-625a-4b03-be0e-36ffb45c6d08,ca4c0299-625a-4b03-be0e-36ffb45c6d08,0,1,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,0,1,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,0,1,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,0,1,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,0,1,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0,1,b6bd2b39-07ae-48a7-8a5b-f44b5034afa9,b6bd2b39-07ae-48a7-8a5b-f44b5034afa9,0,1,5500d5c6-fdbf-4614-b43b-fabf56e3968c,5500d5c6-fdbf-4614-b43b-fabf56e3968c,0,1,a08eeef7-1c81-4985-8628-6b35ac73e135,a08eeef7-1c81-4985-8628-6b35ac73e135,0,1,c446f732-097a-4197-8384-91a6925c6bdd,c446f732-097a-4197-8384-91a6925c6bdd,0,1,cc33ec52-aed4-4807-90b5-700d307b4f57,cc33ec52-aed4-4807-90b5-700d307b4f57,0,1,6f9ece3d-aeca-4313-9e6a-44e562fc83ff,6f9ece3d-aeca-4313-9e6a-44e562fc83ff,0,1,6b04b6f1-2c9d-4de0-b871-6cc377b13e33,6b04b6f1-2c9d-4de0-b871-6cc377b13e33,0,1,82ea249e-ecba-4916-b9a1-c7e6119b353a,82ea249e-ecba-4916-b9a1-c7e6119b353a,0,1,d5406849-57b3-44f4-8efa-e73523939ae5,d5406849-57b3-44f4-8efa-e73523939ae5,0,1,9ce5f33f-4331-491d-b084-9913c38f4c7d,9ce5f33f-4331-491d-b084-9913c38f4c7d,0,1,0603113a-f2f1-43e6-9838-64c5e98417f0,0603113a-f2f1-43e6-9838-64c5e98417f0,0,1,43055a56-a079-41e2-87eb-723769109bed,43055a56-a079-41e2-87eb-723769109bed,0,1,930f2bc5-417d-4b97-b440-8d5e81e5c896,930f2bc5-417d-4b97-b440-8d5e81e5c896,0,1,c8f487aa-544a-41dc-b7c3-7cf21d2720f2,c8f487aa-544a-41dc-b7c3-7cf21d2720f2,0,1,e506f7d3-2572-4c54-ac98-e40f083ac578,e506f7d3-2572-4c54-ac98-e40f083ac578,0,1,bdf93aa5-86a4-4791-bdb0-172532029b7c,bdf93aa5-86a4-4791-bdb0-172532029b7c,0,1,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,0,1,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,0,1,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,0,1,f480ac52-e2f1-4ed0-a0b1-20a622f77302,f480ac52-e2f1-4ed0-a0b1-20a622f77302,0,1,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,0,1,b9b0fbdc-8fda-46d1-bb3e-561a03604971,b9b0fbdc-8fda-46d1-bb3e-561a03604971,0,1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,0,1,672c2936-9771-4e32-a970-7ac7f12a21e8,672c2936-9771-4e32-a970-7ac7f12a21e8,0,1,c264441d-4805-4968-baa2-37b8970049c7,c264441d-4805-4968-baa2-37b8970049c7,0,1,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,0,1,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,0,1,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,0,1,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,0,1,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,0,1,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,0,1,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,0,1,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,0,1,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,0,1,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,0,1,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,0,1,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,0,1,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,0,1,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,0,1,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,0,1,93fcaa62-2a19-468b-9128-c7930583fbfd,93fcaa62-2a19-468b-9128-c7930583fbfd,0,1,2d885109-4c96-41c0-a996-785bfd793c2d,2d885109-4c96-41c0-a996-785bfd793c2d,0,1,8393971a-96ba-493e-a9d0-a286e8a0750a,8393971a-96ba-493e-a9d0-a286e8a0750a,0,1,9c8ec5e5-afa8-48b1-bf9c-ebaaf0a720db,9c8ec5e5-afa8-48b1-bf9c-ebaaf0a720db,0,1,901897a7-a2b6-40a7-a77d-d1d4c8ce5d28,901897a7-a2b6-40a7-a77d-d1d4c8ce5d28,0,1,e6fe6a65-33e6-4cb3-8acf-b40e7b9bac04,e6fe6a65-33e6-4cb3-8acf-b40e7b9bac04,0,1,c4492ecd-293c-4688-8198-04391c57f312,c4492ecd-293c-4688-8198-04391c57f312,0,1,268afd29-0e5f-4220-ab29-071f3072dbeb,268afd29-0e5f-4220-ab29-071f3072dbeb,0,1,b578b59d-8c86-4494-b27d-db976b0f3d8a,b578b59d-8c86-4494-b27d-db976b0f3d8a,0,1,eeba912a-3676-4528-b216-2b8630ab19c9,eeba912a-3676-4528-b216-2b8630ab19c9,0,1,47ed2f49-e4f2-4058-9ac5-cb3c826e92d8,47ed2f49-e4f2-4058-9ac5-cb3c826e92d8,0,1,471c7746-c607-481e-aaac-659dcbe54d8b,471c7746-c607-481e-aaac-659dcbe54d8b,0,1,3251cc7f-6b61-4814-b7ce-91564128d604,3251cc7f-6b61-4814-b7ce-91564128d604,0,1,185661aa-0553-4a27-b021-a0d96fba92fd,185661aa-0553-4a27-b021-a0d96fba92fd,0,1,59624fa6-74f6-4a5f-86e3-a27018683e6e,59624fa6-74f6-4a5f-86e3-a27018683e6e,0,1,71fa1a55-cf35-4442-bcd5-fdc4f191ae51,71fa1a55-cf35-4442-bcd5-fdc4f191ae51,0,1,93e30c61-c9a1-41a5-b682-23f4d0085a38,93e30c61-c9a1-41a5-b682-23f4d0085a38,0,1,8336cc18-5d3e-477f-9245-17e7e7f0566a,8336cc18-5d3e-477f-9245-17e7e7f0566a,0,1,213219df-49d8-447e-b7f3-fba356b9d461,213219df-49d8-447e-b7f3-fba356b9d461,0,1,b443585d-f129-4ac6-a64c-4c37b1b4385b,b443585d-f129-4ac6-a64c-4c37b1b4385b,0,1,ec1877db-8c03-45a4-a15c-a4de8ae3e86c,ec1877db-8c03-45a4-a15c-a4de8ae3e86c,0,1,e7ef29f9-dfff-402e-b49b-e006b9828519,e7ef29f9-dfff-402e-b49b-e006b9828519,0,1,bfb0be49-5f5c-4ef3-a011-8f8645aa981a,bfb0be49-5f5c-4ef3-a011-8f8645aa981a,0,1,d50613ad-c527-4583-8855-a4bd39c33360,d50613ad-c527-4583-8855-a4bd39c33360,0,1,aaa351b7-475e-4835-a5c5-23f86da8ea51,aaa351b7-475e-4835-a5c5-23f86da8ea51,0,1,5260c027-de8c-4612-9022-d9b492e913c9,5260c027-de8c-4612-9022-d9b492e913c9,0,1,6945660a-84cb-4546-ad3c-b5eda36c7fa6,6945660a-84cb-4546-ad3c-b5eda36c7fa6,0,1,899be218-80f5-46ed-bccf-f9437c91e00b,899be218-80f5-46ed-bccf-f9437c91e00b,0,1,67ff40c2-0954-4187-9eba-bf6360fa3620,67ff40c2-0954-4187-9eba-bf6360fa3620,0,1,19bb53e4-f7c7-475e-9d07-ebc067d62635,19bb53e4-f7c7-475e-9d07-ebc067d62635,0,1,8ed415c6-f93b-45e4-be06-7490d60b91f1,8ed415c6-f93b-45e4-be06-7490d60b91f1,0,1,bd00e705-e1cd-4c50-89e5-4c3391e46e16,bd00e705-e1cd-4c50-89e5-4c3391e46e16,0,1,3dffb8c9-91f0-4527-baa7-06db41d80b46,3dffb8c9-91f0-4527-baa7-06db41d80b46,0,1,ad842d01-80b8-4ebf-9ac3-5d628ec4e321,ad842d01-80b8-4ebf-9ac3-5d628ec4e321,0,1,af5008bb-427d-4cd5-b9e4-8aae24f725ab,af5008bb-427d-4cd5-b9e4-8aae24f725ab,0,1,35ba733b-7ef8-4cbf-8cda-5b8b2ab2c30d,35ba733b-7ef8-4cbf-8cda-5b8b2ab2c30d,0,1,5b94475a-cea6-4887-9882-2da8957425d0,5b94475a-cea6-4887-9882-2da8957425d0,0,1,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,0,1,83ae9b22-20ff-4e94-9282-19daf2274328,83ae9b22-20ff-4e94-9282-19daf2274328,0,1,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,0,1,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,0,1,a92b2b70-7e69-49d1-b921-c9d1b0718f94,a92b2b70-7e69-49d1-b921-c9d1b0718f94,0,1,16aafed9-ac0d-424f-93e5-01d77dcb7796,16aafed9-ac0d-424f-93e5-01d77dcb7796,0,1,ae5d7329-4cdb-4d11-ab00-4dc62133941e,ae5d7329-4cdb-4d11-ab00-4dc62133941e,0,1,52b39a5b-6a9d-4341-a040-3eae413b3f9d,52b39a5b-6a9d-4341-a040-3eae413b3f9d,0,1,15372e48-d5ed-4f13-ad1c-539fad0f9b28,15372e48-d5ed-4f13-ad1c-539fad0f9b28,0,1,19f690a3-d27b-43c1-94b7-585fc628da05,19f690a3-d27b-43c1-94b7-585fc628da05,0,1,d375fac5-098c-42b5-a0bd-9a4ae7516ada,d375fac5-098c-42b5-a0bd-9a4ae7516ada,0,1,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,0,1,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,0,1,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,0,1,436162a0-263f-4126-aa3a-7508505cc4a8,436162a0-263f-4126-aa3a-7508505cc4a8,0,1,9e4fbc61-8736-435d-bdd4-eb3bbaa14b92,9e4fbc61-8736-435d-bdd4-eb3bbaa14b92,0,1,0b750d40-1ee5-414c-b8a5-244c666787ae,0b750d40-1ee5-414c-b8a5-244c666787ae,0,1,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,0,1,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,0,1,0ff797f5-007d-4379-aa14-5d3f5babeb84,0ff797f5-007d-4379-aa14-5d3f5babeb84,0,1,767176d4-4fe9-4de5-9246-59b7fec09c53,767176d4-4fe9-4de5-9246-59b7fec09c53,0,1,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,0,1,8e587969-0263-4789-a501-a6c2e102f88e,8e587969-0263-4789-a501-a6c2e102f88e,0,1,f26bfc01-7d8a-43a7-b869-c2deb18218e5,f26bfc01-7d8a-43a7-b869-c2deb18218e5,0,1,8c72a0b2-20cb-43ff-b010-25256aa8011d,8c72a0b2-20cb-43ff-b010-25256aa8011d,0,1,a913b023-0ec5-4c60-880d-2f8ddad2d5ce,a913b023-0ec5-4c60-880d-2f8ddad2d5ce,0,1,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,0,1,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,0,1,afe96dc2-7840-4010-a7d4-1eeac36f0fd3,afe96dc2-7840-4010-a7d4-1eeac36f0fd3,0,1,02ec2b85-3cc8-45bb-911f-c5f7c8668fd5,02ec2b85-3cc8-45bb-911f-c5f7c8668fd5,0,1,a997a430-3ea8-4fde-9f53-7b507a04c215,a997a430-3ea8-4fde-9f53-7b507a04c215,0,1,f648e19d-026b-4fa7-8e70-1866b27b94f8,f648e19d-026b-4fa7-8e70-1866b27b94f8,0,1,a3b47ee8-b7b9-4bdf-afa8-025447ea9d5b,a3b47ee8-b7b9-4bdf-afa8-025447ea9d5b,0,1,36475bf5-5da6-48ad-8077-4de4426f7e10,36475bf5-5da6-48ad-8077-4de4426f7e10,0,1,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,0,1,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,0,1,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,0,1,ecbe625a-55eb-437a-8dee-33fb034d4c0d,ecbe625a-55eb-437a-8dee-33fb034d4c0d,0,1,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,0,1,84796b00-79db-42ba-94d0-5bf543e09cd6,84796b00-79db-42ba-94d0-5bf543e09cd6,0,1,e85695f1-ec94-42ce-8f80-2bda4c90685b,e85695f1-ec94-42ce-8f80-2bda4c90685b,0,1,6f08cc54-d4b1-4c6f-96dc-e0b6891c81b6,6f08cc54-d4b1-4c6f-96dc-e0b6891c81b6,0,1,948b10b3-0d7c-4dca-8816-75eb86e7881b,948b10b3-0d7c-4dca-8816-75eb86e7881b,0,1,9de91b5a-98e4-414b-b650-b669b0159b49,9de91b5a-98e4-414b-b650-b669b0159b49,0,1,840dc727-288a-4bf2-8b1a-47629d28229c,840dc727-288a-4bf2-8b1a-47629d28229c,0,1,314ac8ca-8845-40c2-b844-91beb05fb601,314ac8ca-8845-40c2-b844-91beb05fb601,0,1,db15717d-1b6a-42fd-9b8f-959e1d5841e9,db15717d-1b6a-42fd-9b8f-959e1d5841e9,0,1,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,0,1,37ae1946-9436-47ef-8b8c-17ed0a24971c,37ae1946-9436-47ef-8b8c-17ed0a24971c,0,1,0d3cd7ca-089f-4858-a4a6-0ed373aa77bf,0d3cd7ca-089f-4858-a4a6-0ed373aa77bf,0,1,d844d861-fbe9-4391-89e3-00e505b33b33,d844d861-fbe9-4391-89e3-00e505b33b33,0,1,495ddb5f-f75d-46c9-b134-e925c814b890,495ddb5f-f75d-46c9-b134-e925c814b890,0,1,fb6f92a6-fc56-48d4-b7ad-b4daaea79fe2,fb6f92a6-fc56-48d4-b7ad-b4daaea79fe2,0,1,0a4ded35-1cfa-4e53-91c7-139ee0b94ade,0a4ded35-1cfa-4e53-91c7-139ee0b94ade,0,1,c0688817-fd73-4ead-b9dd-ec966780a2c2,c0688817-fd73-4ead-b9dd-ec966780a2c2,0,1,b1fbfbfe-766f-4018-9491-507748193808,b1fbfbfe-766f-4018-9491-507748193808,0,1,65d9f3a7-6258-49f3-8252-0a60e2735ff3,65d9f3a7-6258-49f3-8252-0a60e2735ff3,0,1,a0ba7e86-b894-4a63-8687-bb2a840fe1ab,a0ba7e86-b894-4a63-8687-bb2a840fe1ab,0,1,e55dfadb-8e12-4808-ad90-e891a4644548,e55dfadb-8e12-4808-ad90-e891a4644548,0,1,a1155588-882f-430d-85a6-19558b5b7256,a1155588-882f-430d-85a6-19558b5b7256,0,1,a792b3dc-ac80-492b-bd94-83eb0438ba9f,a792b3dc-ac80-492b-bd94-83eb0438ba9f,0,1,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,0,1,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,0,1,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,0,1,b9ba3ce3-9059-4135-9d31-725f01907431,b9ba3ce3-9059-4135-9d31-725f01907431,0,1,f637a14d-08ed-4c62-a873-ca36cdcd1e88,f637a14d-08ed-4c62-a873-ca36cdcd1e88,0,1,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,0,1,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,0,1,fc9fc58f-c888-41f0-9f57-70748b21706e,fc9fc58f-c888-41f0-9f57-70748b21706e,0,1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,0,1,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,0,1,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,0,1,33596560-3d45-4d3e-b6ec-1c22162110ad,33596560-3d45-4d3e-b6ec-1c22162110ad,0,1,d3e82a06-daae-4f4d-b3f8-45a406e31664,d3e82a06-daae-4f4d-b3f8-45a406e31664,0,1,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,0,1,ac6a184d-1247-4b54-a023-f0d16daa5fe9,ac6a184d-1247-4b54-a023-f0d16daa5fe9,0,1,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,0,1,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,0,1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,0,1,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,0,1,8bf73614-81a4-4702-88b9-3c6f2594d204,8bf73614-81a4-4702-88b9-3c6f2594d204,0,1,b8d4410b-f626-41b8-87c8-67102256bae2,b8d4410b-f626-41b8-87c8-67102256bae2,0,1,484eeb5f-12af-4139-a081-4dcac067a712,484eeb5f-12af-4139-a081-4dcac067a712,0,1,73b27233-e7ce-4386-a182-fc934df0e9a0,73b27233-e7ce-4386-a182-fc934df0e9a0,0,1,39fce130-be22-42d9-8bcd-b162ae00fc7a,39fce130-be22-42d9-8bcd-b162ae00fc7a,0,1,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,0,1,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,0,1,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,0,1,1528b799-1c0f-4244-85e8-e738b827934a,1528b799-1c0f-4244-85e8-e738b827934a,0,1,45d79e4d-8c2a-432b-abb8-fb9046abea40,45d79e4d-8c2a-432b-abb8-fb9046abea40,0,1,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,0,1,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,0,1,256618cc-0956-4cda-9691-e4ced68a791f,256618cc-0956-4cda-9691-e4ced68a791f,0,1,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,0,1,667de710-cee5-4a97-8434-641d199f3b68,667de710-cee5-4a97-8434-641d199f3b68,0,1,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,0,1,4b9771a7-b924-4e61-8468-4633e3c54706,4b9771a7-b924-4e61-8468-4633e3c54706,0,1,f6e85eeb-d81b-4526-9a33-ab77bd447236,f6e85eeb-d81b-4526-9a33-ab77bd447236,0,1,470e37fe-d149-4007-b397-12fc84f93041,470e37fe-d149-4007-b397-12fc84f93041,0,1,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,0,1,7175cfa0-885c-4807-98ec-af255dcd55d9,7175cfa0-885c-4807-98ec-af255dcd55d9,0,1,6c205eae-9113-46c1-a245-25d29173646e,6c205eae-9113-46c1-a245-25d29173646e,0,1,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,0,1,4cc4aa90-49fb-4602-9f9c-d4d47d223988,4cc4aa90-49fb-4602-9f9c-d4d47d223988,0,1,8503a211-ad5e-41e5-98c1-1109523bb630,8503a211-ad5e-41e5-98c1-1109523bb630,0,1,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,0,1,1a354069-07ea-40e0-bbac-e1b6232750c2,1a354069-07ea-40e0-bbac-e1b6232750c2,0,1,df31548b-0b8e-412b-999a-761970ae3c23,df31548b-0b8e-412b-999a-761970ae3c23,0,1,05135747-43e7-4b61-bc30-57b3289ea923,05135747-43e7-4b61-bc30-57b3289ea923,0,1,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,0,1,6fe57ea6-fe5e-48b1-bb31-5d42e4c2c6c7,6fe57ea6-fe5e-48b1-bb31-5d42e4c2c6c7,0,1,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,0,1,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,0,1,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,0,1,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,0,1,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,0,1,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,0,1,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,0,1,60cd2f20-17cf-4132-b08e-87cf429704b7,60cd2f20-17cf-4132-b08e-87cf429704b7,0,1,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,0,1,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,0,1,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,0,1,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,0,1,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,0,1,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,0,1,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,0,1,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,0,1,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,0,1,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,0,1,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,0,1,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,0,1,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,0,1,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,0,1,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,0,1,6d002aef-00c9-4069-80df-153151218831,6d002aef-00c9-4069-80df-153151218831,0,1,4fec3a6c-5a99-4763-aa07-d5de8712559e,4fec3a6c-5a99-4763-aa07-d5de8712559e,0,1,968a1202-d271-43e0-bfd4-d38e49ceadd4,968a1202-d271-43e0-bfd4-d38e49ceadd4,0,1,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,0,1,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,0,1,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,0,1,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,0,1,468f6d26-7a4b-49fe-9ec9-208794a6dff7,468f6d26-7a4b-49fe-9ec9-208794a6dff7,0,1,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0,1,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,0,1,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,0,1,7601fa7e-079a-4347-abea-e161b2d00783,7601fa7e-079a-4347-abea-e161b2d00783,0,1,ee84cb40-f82d-4558-91be-229d68ad9f4a,ee84cb40-f82d-4558-91be-229d68ad9f4a,0,1,101a7eff-9556-4165-879a-a7c8a852e236,101a7eff-9556-4165-879a-a7c8a852e236,0,1,01775932-3603-4efc-9235-abdb97490dea,01775932-3603-4efc-9235-abdb97490dea,0,1,7637844b-4059-4f8a-8436-b4f4e8cb4f74,7637844b-4059-4f8a-8436-b4f4e8cb4f74,0,1,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,0,1,0ee5b788-61dc-464b-86da-f985df7704b6,0ee5b788-61dc-464b-86da-f985df7704b6,0,1,2375c6a8-9799-4b7c-a48d-091a90c67693,2375c6a8-9799-4b7c-a48d-091a90c67693,0,1,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,0,1,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,0,1,63c6522f-be04-422a-b4f4-0f55f58b09a8,63c6522f-be04-422a-b4f4-0f55f58b09a8,0,1,be919dc1-a377-43e1-82e6-ce946cabdd55,be919dc1-a377-43e1-82e6-ce946cabdd55,0,1,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,0,1,9ded532e-9e60-4895-a4c5-4ea6697aa83c,9ded532e-9e60-4895-a4c5-4ea6697aa83c,0,1,106c5159-ffc7-4059-b3e3-acf74326a44f,106c5159-ffc7-4059-b3e3-acf74326a44f,0,1,d39fd717-1a69-4fd3-889e-4fa9abefea1c,d39fd717-1a69-4fd3-889e-4fa9abefea1c,0,1,5b85e6df-7493-4201-97ad-2aea14de6006,5b85e6df-7493-4201-97ad-2aea14de6006,0,1,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,0,1,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,0,1,4840753b-e2e1-4e67-b35f-2f5eab7754f5,4840753b-e2e1-4e67-b35f-2f5eab7754f5,0,1,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,0,1,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,0,1,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,0,1,e1950a23-f6e7-48af-b78a-77aa61f08ece,e1950a23-f6e7-48af-b78a-77aa61f08ece,0,1,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,0,1,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,0,1,5d726fa3-bde0-4d97-a577-415857bbb5c1,5d726fa3-bde0-4d97-a577-415857bbb5c1,0,1,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,0,1,49068231-202c-4ac6-a39a-69207cb597dd,49068231-202c-4ac6-a39a-69207cb597dd,0,1,5a470575-e012-42ad-9ad7-53930a8e843f,5a470575-e012-42ad-9ad7-53930a8e843f,0,1,5872d4ed-6503-422d-bcf9-63a8df3e777d,5872d4ed-6503-422d-bcf9-63a8df3e777d,0,1,e21cda29-2579-485e-a207-20b76f719c80,e21cda29-2579-485e-a207-20b76f719c80,0,1,1b232a57-2833-42c6-b318-38dae2af1ab2,1b232a57-2833-42c6-b318-38dae2af1ab2,0,1,007ade8c-b102-408b-b877-b531e046560b,007ade8c-b102-408b-b877-b531e046560b,0,1,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,0,1,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,0,1,eb69c41a-392d-43bb-9b67-a0adcb651b1e,eb69c41a-392d-43bb-9b67-a0adcb651b1e,0,1,fbd63dbc-7318-45f1-9aa5-51c2f3a9190b,fbd63dbc-7318-45f1-9aa5-51c2f3a9190b,0,1,93b01c88-48a2-4753-b443-0e9892395a8f,93b01c88-48a2-4753-b443-0e9892395a8f,0,1,0b7f8e05-bb34-47cc-9775-04362e814316,0b7f8e05-bb34-47cc-9775-04362e814316,0,1,e71e0297-3709-4247-933e-18a6350cbf39,e71e0297-3709-4247-933e-18a6350cbf39,0,1,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0,1,602dac6f-abe6-407a-92d3-7f1613e5dda6,602dac6f-abe6-407a-92d3-7f1613e5dda6,0,1,df6417d1-c722-4a87-a543-5d2c31795b20,df6417d1-c722-4a87-a543-5d2c31795b20,0,1,526a85c9-3a8d-4044-adb9-fd0689c70601,526a85c9-3a8d-4044-adb9-fd0689c70601,0,1,c4203772-580c-4db1-9bde-8925faa90688,c4203772-580c-4db1-9bde-8925faa90688,0,1,9ab0fe18-4dd7-4eed-958d-8537d4896d84,9ab0fe18-4dd7-4eed-958d-8537d4896d84,0,1,2278dc46-46ce-4d00-9289-4de1640782d7,2278dc46-46ce-4d00-9289-4de1640782d7,0,1,1f983a04-c2df-40bb-bee2-b326474d89f8,1f983a04-c2df-40bb-bee2-b326474d89f8,0,1,f03f1b68-e924-4c06-b0aa-8033a9a2f592,f03f1b68-e924-4c06-b0aa-8033a9a2f592,0,1,5e453d10-235d-4e53-86b1-20eed3247992,5e453d10-235d-4e53-86b1-20eed3247992,0,1,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0,1,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,0,1,738228ad-c30a-42f4-a6ad-bde0edba6266,738228ad-c30a-42f4-a6ad-bde0edba6266,0,1,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,0,1,df8e8344-d7bc-4cf2-b498-88d3abb66c09,df8e8344-d7bc-4cf2-b498-88d3abb66c09,0,1,e6d13536-3021-45b2-a8e1-bdb0e0be850c,e6d13536-3021-45b2-a8e1-bdb0e0be850c,0,1,b49f538c-b2b2-4a1f-a6b4-a911033b1666,b49f538c-b2b2-4a1f-a6b4-a911033b1666,0,1,794e952b-6b03-4a1e-ad3f-453376bccf45,794e952b-6b03-4a1e-ad3f-453376bccf45,0,1,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,0,1,5cd997ba-f123-47b3-8cde-fbba45a4a11c,5cd997ba-f123-47b3-8cde-fbba45a4a11c,0,1,0d746247-c4f4-47a5-a373-45ec4023d3ef,0d746247-c4f4-47a5-a373-45ec4023d3ef,0,1,a25bcf4e-1a47-472b-9f93-f6ab45abf461,a25bcf4e-1a47-472b-9f93-f6ab45abf461,0,1,958b7dab-0aba-423f-ab81-b70f2b93a027,958b7dab-0aba-423f-ab81-b70f2b93a027,0,1,a17ec3be-2255-42af-a6ee-d3fb8bb00519,a17ec3be-2255-42af-a6ee-d3fb8bb00519,0,1,add0b22d-ff5a-41f7-88a1-ef34880e50c9,add0b22d-ff5a-41f7-88a1-ef34880e50c9,0,1,7dc10935-69aa-4f2b-8b01-798dbbaa6cc6,7dc10935-69aa-4f2b-8b01-798dbbaa6cc6,0,1,9c15b35b-d658-4e52-a441-3b79294d65eb,9c15b35b-d658-4e52-a441-3b79294d65eb,0,1,d5fdac2a-e3aa-4859-8485-0cf114748c87,d5fdac2a-e3aa-4859-8485-0cf114748c87,0,1,eb3d278b-e8fe-4d43-90a8-dd361009196f,eb3d278b-e8fe-4d43-90a8-dd361009196f,0,1,d30fbeae-e97f-422d-b5c4-289aaeaa2ae4,d30fbeae-e97f-422d-b5c4-289aaeaa2ae4,0,1,a3582d0c-6a63-442e-8422-83f251df0ed9,a3582d0c-6a63-442e-8422-83f251df0ed9,0,1,9aae5d2a-81b7-4f1c-8b65-b3e4a8a9bc4d,9aae5d2a-81b7-4f1c-8b65-b3e4a8a9bc4d,0,1,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,0,1,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,0,1,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,0,1,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,0,1,707e64f3-ad8b-470a-aa4f-57fddecc2159,707e64f3-ad8b-470a-aa4f-57fddecc2159,0,1,682da7d7-6e27-4133-90fc-a445c156f908,682da7d7-6e27-4133-90fc-a445c156f908,0,1,64751704-f39d-4859-adc6-8168897d6aec,64751704-f39d-4859-adc6-8168897d6aec,0,1,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,0,1,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,0,1,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,0,1,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,0,1,f0dca5f2-1479-42bf-b895-9abd345522f5,f0dca5f2-1479-42bf-b895-9abd345522f5,0,1,8eaa91e0-88d9-4e4e-b2d6-752696bafadf,8eaa91e0-88d9-4e4e-b2d6-752696bafadf,0,1,93d6dda2-dd7c-42d1-b9bc-284929931585,93d6dda2-dd7c-42d1-b9bc-284929931585,0,1,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,0,1,abc44046-a839-4c4a-8161-ecba29abc27d,abc44046-a839-4c4a-8161-ecba29abc27d,0,1,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,0,1,12dd81dd-31f5-47f2-a163-ea6c670299c5,12dd81dd-31f5-47f2-a163-ea6c670299c5,0,1,1b9e77bf-639a-4e81-a0fd-4f2bd66feeba,1b9e77bf-639a-4e81-a0fd-4f2bd66feeba,0,1,8238c710-09ff-473e-b0ed-40b31bfccab8,8238c710-09ff-473e-b0ed-40b31bfccab8,0,1,fe59f9ba-11e3-41ba-ac6f-4b4e3dbf35ae,fe59f9ba-11e3-41ba-ac6f-4b4e3dbf35ae,0,1,15845f89-0f9e-4a93-b7e8-ef101694b1b8,15845f89-0f9e-4a93-b7e8-ef101694b1b8,0,1,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,0,1,60f8daf5-06c2-4db6-8fea-5cbb72130113,60f8daf5-06c2-4db6-8fea-5cbb72130113,0,1,e389b86a-7a48-4b31-b5cb-27b3d7dfed82,e389b86a-7a48-4b31-b5cb-27b3d7dfed82,0,1,91e7c98e-fadf-4c08-bd76-1e4e4d140265,91e7c98e-fadf-4c08-bd76-1e4e4d140265,0,1,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,0,1,8247a93d-c2d3-4c9b-a442-619240d35113,8247a93d-c2d3-4c9b-a442-619240d35113,0,1,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,0,1,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,0,1,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,0,1,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,0,1,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,0,1,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,0,1,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,0,1,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,0,1,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,0,1,a388ed70-a68d-4713-a280-881315351f07,a388ed70-a68d-4713-a280-881315351f07,0,1,fd9e84c9-2322-4aa7-b5fe-31d0c8f373c7,fd9e84c9-2322-4aa7-b5fe-31d0c8f373c7,0,1,2c81edc8-02b9-42dd-be4d-e7ad595421a0,2c81edc8-02b9-42dd-be4d-e7ad595421a0,0,1,83cb38ff-1174-449f-b8ce-44d5e064f2df,83cb38ff-1174-449f-b8ce-44d5e064f2df,0,1,d11b51ac-708a-4ee1-b73e-ae62e162101e,d11b51ac-708a-4ee1-b73e-ae62e162101e,0,1,17a50950-6091-4306-9f15-2a621a29c1a0,17a50950-6091-4306-9f15-2a621a29c1a0,0,1,32012b27-1b43-49be-b9af-df0c877e7a4c,32012b27-1b43-49be-b9af-df0c877e7a4c,0,1,e97d5152-9e58-4a91-a691-b4d358f1c89d,e97d5152-9e58-4a91-a691-b4d358f1c89d,0,1,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,0,1,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,0,1,296c478b-4103-46cb-9d14-97f59034ffd4,296c478b-4103-46cb-9d14-97f59034ffd4,0,1,fb918a68-f86d-46c0-9078-61d2b32b5aef,fb918a68-f86d-46c0-9078-61d2b32b5aef,0,1,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,0,1,1ddfc773-4f3c-4764-978e-585aab4666de,1ddfc773-4f3c-4764-978e-585aab4666de,0,1,e424d122-1dbb-4545-975c-177997129f2e,e424d122-1dbb-4545-975c-177997129f2e,0,1,c83bc626-dfdd-4451-92b0-b53eed40f534,c83bc626-dfdd-4451-92b0-b53eed40f534,0,1,7b9b1d11-4f78-4113-8fca-1a3a30953aef,7b9b1d11-4f78-4113-8fca-1a3a30953aef,0,1,7f84cb85-c3e4-4b53-b829-3b1e216f978a,7f84cb85-c3e4-4b53-b829-3b1e216f978a,0,1,7e621ecc-7d2b-42bf-a502-f8e59de56b63,7e621ecc-7d2b-42bf-a502-f8e59de56b63,0,1,798fd445-d02e-4e97-890a-0283f33317cf,798fd445-d02e-4e97-890a-0283f33317cf,0,1,095583ca-010d-43ad-8c7a-8938fa4cb761,095583ca-010d-43ad-8c7a-8938fa4cb761,0,1,178d210c-e847-4805-a8d4-31acdf4983af,178d210c-e847-4805-a8d4-31acdf4983af,0,1,aa214d9f-23b1-4996-8a43-9010dceeb53d,aa214d9f-23b1-4996-8a43-9010dceeb53d,0,1,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,0,1,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,0,1,d9d103bd-1dd6-48a9-8869-6c8485705393,d9d103bd-1dd6-48a9-8869-6c8485705393,0,1,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,0,1,ff0e8487-bdbf-4b21-877e-00008c81bc09,ff0e8487-bdbf-4b21-877e-00008c81bc09,0,1,39c9f8ac-56a0-4057-8359-7228bf97184a,39c9f8ac-56a0-4057-8359-7228bf97184a,0,1,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,0,1,2c0dd892-1d3e-4497-850b-080bdb9c59d8,2c0dd892-1d3e-4497-850b-080bdb9c59d8,0,1,3b727d49-c9ed-4d9e-af61-c13b9a170c75,3b727d49-c9ed-4d9e-af61-c13b9a170c75,0,1,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1b264744-bdcd-4c5c-932b-0ac4b990dd78,0,1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,0,1,37bde288-8e02-4127-bd80-de8ae7590a14,37bde288-8e02-4127-bd80-de8ae7590a14,0,1,a9b8e517-78cd-4428-b2fc-9e16af0069d7,a9b8e517-78cd-4428-b2fc-9e16af0069d7,0,1,5c592024-c009-4674-bbb8-283669e673ef,5c592024-c009-4674-bbb8-283669e673ef,0,1,e76f16b9-77a0-4033-90d0-6e04e4494747,e76f16b9-77a0-4033-90d0-6e04e4494747,0,1,cfb221fc-8639-4e15-9a78-f7837d657a99,cfb221fc-8639-4e15-9a78-f7837d657a99,0,1,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,0,1,022147c1-1ebe-4c8d-b367-4c47115b101d,022147c1-1ebe-4c8d-b367-4c47115b101d,0,1,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,0,1,fca6b230-a38e-4791-9cc5-3d215f79dc6f,fca6b230-a38e-4791-9cc5-3d215f79dc6f,0,1,04e87de4-940a-4533-8c81-8f145b201dc0,04e87de4-940a-4533-8c81-8f145b201dc0,0,1,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,0,1,fa488af9-a5ec-47d8-8661-fa5058a60a6b,fa488af9-a5ec-47d8-8661-fa5058a60a6b,0,1,97cc84c6-3565-474c-a028-83acb5390446,97cc84c6-3565-474c-a028-83acb5390446,0,1,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,0,1,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,0,1,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,0,1,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,0,1,b366d7eb-626c-4c0c-b4cc-c392763e6e94,b366d7eb-626c-4c0c-b4cc-c392763e6e94,0,1,4c7e24aa-726a-4595-82ad-ef1e525b14fa,4c7e24aa-726a-4595-82ad-ef1e525b14fa,0,1,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,0,1,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,0,1,e849e46c-2ce6-427b-92bc-06d7997f59bf,e849e46c-2ce6-427b-92bc-06d7997f59bf,0,1,5a971dc0-28bf-4426-9426-9f456aea080a,5a971dc0-28bf-4426-9426-9f456aea080a,0,1,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,0,1,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,0,1,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,0,1,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,0,1,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,0,1,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,0,1,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,0,1,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,0,1,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,0,1,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,0,1,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,0,1,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,0,1,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,0,1,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,0,1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,0,1,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,0,1,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,0,1,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,0,1,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,0,1,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,0,1,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,0,1,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,0,1,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,0,1,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,0,1,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,0,1,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,0,1,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,0,1,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,0,1,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,0,1,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,0,1,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,0,1,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,0,1,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,0,1,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,0,1,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,0,1,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,0,1,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,0,1,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,0,1,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,0,1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,0,1,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,0,1,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,0,1,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,0,1,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,0,1,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,0,1,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,0,1,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,0,1,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,0,1,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,0,1,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,0,1,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,0,1,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,0,1,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,0,1,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,0,1,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,0,1,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,0,1,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,0,1,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,0,1,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,0,1,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,0,1,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,0,1,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,0,1,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,0,1,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,0,1,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,0,1,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,0,1,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,0,1,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,0,1,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,0,1,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,0,1,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,0,1,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,0,1,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,0,1,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,0,1,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,0,1,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,0,1,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,0,1,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,0,1,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,0,1,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,0,1,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,0,1,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,0,1,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,0,1,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,0,1,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,0,1,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,0,1,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,0,1,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,0,1,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,0,1,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,0,1,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,0,1,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,0,1,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,0,1,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,0,1,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,0,1,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,0,1,506bf43b-f7df-4b42-b614-e5925b45b5e9,506bf43b-f7df-4b42-b614-e5925b45b5e9,0,1,58570514-a2cf-4e09-ba7a-d9efd8178269,58570514-a2cf-4e09-ba7a-d9efd8178269,0,1,c23aa057-42f4-4167-9224-693e904598c6,c23aa057-42f4-4167-9224-693e904598c6,0,1,e449f91b-58c3-4d4b-a9f0-6870539afff2,e449f91b-58c3-4d4b-a9f0-6870539afff2,0,1,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,0,1,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,0,1,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0,1,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,0,1,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,0,1,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,0,1,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,0,1,337bd150-beaa-44e6-b336-359e23f8babe,337bd150-beaa-44e6-b336-359e23f8babe,0,1,8e755ce0-c571-4ed5-b0bb-9470edcb7c73,8e755ce0-c571-4ed5-b0bb-9470edcb7c73,0,1,02e1c293-7302-4751-a248-4bbeed9cbad5,02e1c293-7302-4751-a248-4bbeed9cbad5,0,1,3a111e0d-6466-46fd-95a2-1798b6e51ba0,3a111e0d-6466-46fd-95a2-1798b6e51ba0,0,1,645edcb0-e358-4d32-a9a9-9534af0398ca,645edcb0-e358-4d32-a9a9-9534af0398ca,0,1,efa1b4e5-d16c-4921-a48a-fe700e39dc71,efa1b4e5-d16c-4921-a48a-fe700e39dc71,0,1,e93402db-e7dd-465e-8c62-2a41efd811b8,e93402db-e7dd-465e-8c62-2a41efd811b8,0,1,e0157f72-a362-4b9f-a272-68ca8078b91c,e0157f72-a362-4b9f-a272-68ca8078b91c,0,1,422155c7-1640-48c4-bb21-36595b405c66,422155c7-1640-48c4-bb21-36595b405c66,0,1,16d37b5a-88db-4787-b2de-fb50da0ca94b,16d37b5a-88db-4787-b2de-fb50da0ca94b,0,1,f653bcbf-5659-4605-9bb9-3737f19e79dd,f653bcbf-5659-4605-9bb9-3737f19e79dd,0,1,8b980868-fe63-49ff-ba3d-4c29732e1b90,8b980868-fe63-49ff-ba3d-4c29732e1b90,0,1,54668731-4963-4ec3-b188-9feacaefa182,54668731-4963-4ec3-b188-9feacaefa182,0,1,3702135e-5380-4ca6-82f5-63eff1b043e9,3702135e-5380-4ca6-82f5-63eff1b043e9,0,1,29b2104b-fd02-4d51-951f-51ea213b8ebd,29b2104b-fd02-4d51-951f-51ea213b8ebd,0,1,a9362ac4-85ee-4214-80c1-048fab769885,a9362ac4-85ee-4214-80c1-048fab769885,0,1,ba5c945e-554f-45a2-a2de-3157b2d7e931,ba5c945e-554f-45a2-a2de-3157b2d7e931,0,1,f7085f33-f122-4443-a3f5-4e765300175e,f7085f33-f122-4443-a3f5-4e765300175e,0,1,b7e4c512-b856-4679-a025-5f0f28918593,b7e4c512-b856-4679-a025-5f0f28918593,0,1,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,0,1,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,0,1,a4e89d2a-d6f7-4966-ac3c-57f1ef1d1a3a,a4e89d2a-d6f7-4966-ac3c-57f1ef1d1a3a,0,1,20f1114a-0b98-464f-aed8-80ce706b808e,20f1114a-0b98-464f-aed8-80ce706b808e,0,1,988b05ae-987a-4433-b446-bcc7bf5d9ea4,988b05ae-987a-4433-b446-bcc7bf5d9ea4,0,1,07e3de4e-28d9-48dc-9253-a2c39c34f827,07e3de4e-28d9-48dc-9253-a2c39c34f827,0,1,12ab57d3-ba96-46e9-86ef-2f3ba76fd5cb,12ab57d3-ba96-46e9-86ef-2f3ba76fd5cb,0,1,241db5c5-e3bc-4db8-bc88-39db84bb60e9,241db5c5-e3bc-4db8-bc88-39db84bb60e9,0,1,68e4f9d0-a5ed-42f9-8eb2-1f5a8d3894e8,68e4f9d0-a5ed-42f9-8eb2-1f5a8d3894e8,0,1,c147916d-1fb6-473d-bde0-8dd528dde8eb,c147916d-1fb6-473d-bde0-8dd528dde8eb,0,1,00359e00-aba0-4afb-8b58-2e1247dbe04f,00359e00-aba0-4afb-8b58-2e1247dbe04f,0,1,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,0,1,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0,1,4ec242e0-75d1-4bf7-be18-783e7aa4f236,4ec242e0-75d1-4bf7-be18-783e7aa4f236,0,1,e02b1366-9d7a-462f-86a1-436bbf4532ff,e02b1366-9d7a-462f-86a1-436bbf4532ff,0,1,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,0,1,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,0,1,8811cc64-99d9-4f13-8309-c29965783f5a,8811cc64-99d9-4f13-8309-c29965783f5a,0,1,7c737071-e850-4a3f-8942-697ef52a8ecc,7c737071-e850-4a3f-8942-697ef52a8ecc,0,1,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0,1,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,0,1,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,0,1,81dd61e5-fe02-4272-a525-affda9b606ca,81dd61e5-fe02-4272-a525-affda9b606ca,0,1,8de7b423-b7d1-46fe-b1dc-fb936736b864,8de7b423-b7d1-46fe-b1dc-fb936736b864,0,1,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0,1,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,0,1,80c23bf0-cef0-4d07-a017-d90635f8041d,80c23bf0-cef0-4d07-a017-d90635f8041d,0,1,47a24216-3299-470b-a18c-d8c1258fff24,47a24216-3299-470b-a18c-d8c1258fff24,0,1,72dcfd46-491e-4f88-a0ea-57919f8fbdea,72dcfd46-491e-4f88-a0ea-57919f8fbdea,0,1,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,0,1,f9161bc3-9a1c-4870-8681-8e97d8ce838a,f9161bc3-9a1c-4870-8681-8e97d8ce838a,0,1,a75ed1c8-20c2-49a8-a730-22237ef91366,a75ed1c8-20c2-49a8-a730-22237ef91366,0,1,1c0ebdfd-1913-48fe-b80a-10c30201129b,1c0ebdfd-1913-48fe-b80a-10c30201129b,0,1,22ad3db7-1ad3-4868-8598-b0b90db3fa1f,22ad3db7-1ad3-4868-8598-b0b90db3fa1f,0,1,14025e38-09af-43b2-a49b-403e398a28ea,14025e38-09af-43b2-a49b-403e398a28ea,0,1,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,0,1,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,0,1,95266e9f-073f-4de3-83c6-cc0d9ee9334f,95266e9f-073f-4de3-83c6-cc0d9ee9334f,0,1,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,0,1,2fa4fb8b-9876-47b6-9c95-682d0e07ae7c,2fa4fb8b-9876-47b6-9c95-682d0e07ae7c,0,1,111e7c41-77b6-4d31-bc9c-136e4d09ac7b,111e7c41-77b6-4d31-bc9c-136e4d09ac7b,0,1,c50c02dc-c1ae-4ec8-859f-b9c179cc59e6,c50c02dc-c1ae-4ec8-859f-b9c179cc59e6,0,1,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,0,1,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,0,1,7f90681d-6534-40ee-bbb7-5356c0ed9de2,7f90681d-6534-40ee-bbb7-5356c0ed9de2,0,1,d1aca4be-1e1e-4bbd-b0a6-a68bc7c8c586,d1aca4be-1e1e-4bbd-b0a6-a68bc7c8c586,0,1,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,0,1,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,0,1,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,0,1,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,0,1,ec1755ed-d203-4548-9f1d-dd62ce331ecf,ec1755ed-d203-4548-9f1d-dd62ce331ecf,0,1,8f17ec3f-6d62-46b8-baef-b20430e948ce,8f17ec3f-6d62-46b8-baef-b20430e948ce,0,1,ea1298d0-9396-4a50-b83e-24064e8dd99d,ea1298d0-9396-4a50-b83e-24064e8dd99d,0,1,038dbb00-e4c6-4e64-b861-3a0764f54ab3,038dbb00-e4c6-4e64-b861-3a0764f54ab3,0,1,1c291f7d-a493-4297-8aaa-912896800066,1c291f7d-a493-4297-8aaa-912896800066,0,1,69149801-a825-4ed2-b077-c26660dff271,69149801-a825-4ed2-b077-c26660dff271,0,1,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,0,1,518ab687-b84a-40c8-8547-aee4257c1b71,518ab687-b84a-40c8-8547-aee4257c1b71,0,1,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,0,1,7732ef07-16eb-46a0-9645-7de95c5482af,7732ef07-16eb-46a0-9645-7de95c5482af,0,1,75dac536-b316-4b04-a57b-03656c678bec,75dac536-b316-4b04-a57b-03656c678bec,0,1,a07d6c85-159d-4d09-b117-561a1e20329f,a07d6c85-159d-4d09-b117-561a1e20329f,0,1,8a2f9733-4f83-41f2-9d74-dca7161a4b41,8a2f9733-4f83-41f2-9d74-dca7161a4b41,0,1,fbd2d900-1e0d-48f3-9793-0186ee49915c,fbd2d900-1e0d-48f3-9793-0186ee49915c,0,1,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,0,1,3a36e0f5-a645-47f1-99ae-5b0493d604ad,3a36e0f5-a645-47f1-99ae-5b0493d604ad,0,1,ca7d4086-de35-40fd-af65-73369d452135,ca7d4086-de35-40fd-af65-73369d452135,0,1,563c0f5c-e0b4-4229-a3f6-183091060aa4,563c0f5c-e0b4-4229-a3f6-183091060aa4,0,1,bf967588-ea8f-49a3-9331-af2331ffa162,bf967588-ea8f-49a3-9331-af2331ffa162,0,1,5083530c-9a24-4def-99c1-6eb9514e9b33,5083530c-9a24-4def-99c1-6eb9514e9b33,0,1,d59c2725-5d98-495e-9f86-f5d38dbfad90,d59c2725-5d98-495e-9f86-f5d38dbfad90,0,1,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,0,1,0ba68198-983d-409b-be27-96f1572b3f12,0ba68198-983d-409b-be27-96f1572b3f12,0,1,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,0,1,decb27a8-7dd3-4601-a694-30429e638b39,decb27a8-7dd3-4601-a694-30429e638b39,0,1,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,0,1,d7a128e4-f31f-4b09-8424-e816ab59d5c3,d7a128e4-f31f-4b09-8424-e816ab59d5c3,0,1,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0,1,aa9513b4-f575-4030-a7f9-ac09aa319e98,aa9513b4-f575-4030-a7f9-ac09aa319e98,0,1,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,0,1,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,0,1,d03f66b1-48a3-434b-bb58-9fd53c183514,d03f66b1-48a3-434b-bb58-9fd53c183514,0,1,a469e55e-d7ca-4c27-b350-fafe7364c18f,a469e55e-d7ca-4c27-b350-fafe7364c18f,0,1,1a4991f8-7832-4ca9-8809-88a97de88749,1a4991f8-7832-4ca9-8809-88a97de88749,0,1,4f44c1c0-0480-415e-8058-41b28f2f43a0,4f44c1c0-0480-415e-8058-41b28f2f43a0,0,1,3b708ec7-6543-40ff-8ea2-16d4ddb7d56f,3b708ec7-6543-40ff-8ea2-16d4ddb7d56f,0,1,433e502d-ab5c-4e8e-a7c0-0fde1aa6f767,433e502d-ab5c-4e8e-a7c0-0fde1aa6f767,0,1,6bd65f02-9531-4dd4-bd4a-4132aa3c4787,6bd65f02-9531-4dd4-bd4a-4132aa3c4787,0,1,5d9863e6-aab7-4808-a516-8bc42dae5d01,5d9863e6-aab7-4808-a516-8bc42dae5d01,0,1,a2910bb8-fdd2-480c-8ae2-78661d7d18e0,a2910bb8-fdd2-480c-8ae2-78661d7d18e0,0,1,218302fa-674d-45e1-a7e2-2cce2d011342,218302fa-674d-45e1-a7e2-2cce2d011342,0,1,70264a0a-95c5-426f-a1bf-0f57b86d4030,70264a0a-95c5-426f-a1bf-0f57b86d4030,0,1,ba3ba1ac-e7c6-4bab-9771-4ef522011c52,ba3ba1ac-e7c6-4bab-9771-4ef522011c52,0,1,3291428e-6727-43cc-a1f8-c62f90320e90,3291428e-6727-43cc-a1f8-c62f90320e90,0,1,d867720c-c937-4689-b241-0afda05ef993,d867720c-c937-4689-b241-0afda05ef993,0,1,1390da8f-bac6-44ee-8413-1438f1f66074,1390da8f-bac6-44ee-8413-1438f1f66074,0,1,9616956d-a537-44fd-9d3f-5071fb5f4883,9616956d-a537-44fd-9d3f-5071fb5f4883,0,1,4ad1eed9-89ff-4086-b0ff-4eadcebcdce9,4ad1eed9-89ff-4086-b0ff-4eadcebcdce9,0,1,41d31712-6181-4cfe-9aa4-02b7a50150b0,41d31712-6181-4cfe-9aa4-02b7a50150b0,0,1,3ad5d8a7-3071-46aa-aebf-306bdb67983b,3ad5d8a7-3071-46aa-aebf-306bdb67983b,0,1,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,0,1,cb954476-c551-4a06-9bcd-18d67ba47dc8,cb954476-c551-4a06-9bcd-18d67ba47dc8,0,1,79201015-bfae-463e-81f1-0ae2d3066f3f,79201015-bfae-463e-81f1-0ae2d3066f3f,0,1,a6d48910-d526-4e8f-9414-ca776a7edaa3,a6d48910-d526-4e8f-9414-ca776a7edaa3,0,1,1e8cd163-ca9b-42eb-b8c9-c3d44e7e486b,1e8cd163-ca9b-42eb-b8c9-c3d44e7e486b,0,1,6bf8f383-af77-4be9-bda4-4d4220dfe374,6bf8f383-af77-4be9-bda4-4d4220dfe374,0,1,b5c92c97-c4d2-4b4c-86be-035bfd17f905,b5c92c97-c4d2-4b4c-86be-035bfd17f905,0,1,a5bb3835-9dcf-4924-9c96-695e5173d702,a5bb3835-9dcf-4924-9c96-695e5173d702,0,1,afa26db4-77a4-437c-965a-fefc6086c1a1,afa26db4-77a4-437c-965a-fefc6086c1a1,0,1,7e005845-c321-4529-b112-2dec63720195,7e005845-c321-4529-b112-2dec63720195,0,1,48f7b074-2e43-4221-a36c-e2e30c22def6,48f7b074-2e43-4221-a36c-e2e30c22def6,0,1,df2f5d28-b460-4692-861d-fbe39cb726b6,df2f5d28-b460-4692-861d-fbe39cb726b6,0,1,b6c94efd-5994-4c4c-a641-b062ecc38b65,b6c94efd-5994-4c4c-a641-b062ecc38b65,0,1,98501228-7f0e-45a3-b58f-4c654f393f80,98501228-7f0e-45a3-b58f-4c654f393f80,0,1,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,0,1,50968921-76f3-4108-835a-96b153671c8d,50968921-76f3-4108-835a-96b153671c8d,0,1,b773f510-1485-4886-9071-afcbf49ff856,b773f510-1485-4886-9071-afcbf49ff856,0,1,964403f2-0a87-49e1-b183-dbe3624e3805,964403f2-0a87-49e1-b183-dbe3624e3805,0,1,2178ab47-1bb1-4fe0-940d-6876b66333c1,2178ab47-1bb1-4fe0-940d-6876b66333c1,0,1,8cc09f48-2ef2-434b-b33e-ab9b021816de,8cc09f48-2ef2-434b-b33e-ab9b021816de,0,1,2ca1741b-1e65-4a54-a4a5-489e73cfb4f3,2ca1741b-1e65-4a54-a4a5-489e73cfb4f3,0,1,360b086c-53e3-4514-a4f5-9379ab368b76,360b086c-53e3-4514-a4f5-9379ab368b76,0,1,e6feefa1-7298-4ab0-85d3-9abee571a627,e6feefa1-7298-4ab0-85d3-9abee571a627,0,1,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,0,1,df459525-4e4d-4819-b996-5a6379b22a88,df459525-4e4d-4819-b996-5a6379b22a88,0,1,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,0,1,e67b4a32-4bac-450e-be6d-88c262383f31,e67b4a32-4bac-450e-be6d-88c262383f31,0,1,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,0,1,6c4c3eca-8b02-451b-af52-93073c3da146,6c4c3eca-8b02-451b-af52-93073c3da146,0,1,095c281c-3903-465d-baea-af1e6abf8019,095c281c-3903-465d-baea-af1e6abf8019,0,1,440d115d-a769-427e-891a-88d65fba2057,440d115d-a769-427e-891a-88d65fba2057,0,1,f7932210-027e-4fad-b7f7-3530789ce803,f7932210-027e-4fad-b7f7-3530789ce803,0,1,7bbfd95e-39a1-485b-930f-c9210c18dcd0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,0,1,4975d3d6-b5a2-41c6-973b-6817013a388d,4975d3d6-b5a2-41c6-973b-6817013a388d,0,1,18ebc799-9724-4ffb-855e-b09a0723869e,18ebc799-9724-4ffb-855e-b09a0723869e,0,1,a06b8ef5-83e6-4fc6-91e1-256004134d69,a06b8ef5-83e6-4fc6-91e1-256004134d69,0,1,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1d6a68ec-917f-4c3b-b970-797a6921cbc9,0,1,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,0,1,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0,1,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,0,1,679cc0df-df5c-4c33-8c64-c0b6cee39116,679cc0df-df5c-4c33-8c64-c0b6cee39116,0,1,b01666e4-985e-4a8e-bd68-9eb46b1ae1f0,b01666e4-985e-4a8e-bd68-9eb46b1ae1f0,0,1,45a48f71-4b62-4d3a-9ffc-76e8d4862d4e,45a48f71-4b62-4d3a-9ffc-76e8d4862d4e,0,1,5f08a477-fac0-4763-baf6-2839ed4de918,5f08a477-fac0-4763-baf6-2839ed4de918,0,1,17aadd5f-cda2-4785-a07f-3ab4b04434a6,17aadd5f-cda2-4785-a07f-3ab4b04434a6,0,1,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,0,1,1832336e-32f6-42c4-9087-8614ead52bb3,1832336e-32f6-42c4-9087-8614ead52bb3,0,1,ff9f7b5c-70f4-4eed-8216-64448e7da76f,ff9f7b5c-70f4-4eed-8216-64448e7da76f,0,1,44ac2869-990d-4cac-a14b-c1a28854341e,44ac2869-990d-4cac-a14b-c1a28854341e,0,1,d5df31c3-89f9-469c-80a9-fb4706d30bc4,d5df31c3-89f9-469c-80a9-fb4706d30bc4,0,1,e73a6a9d-8ddd-4531-9f17-745117d9da9b,e73a6a9d-8ddd-4531-9f17-745117d9da9b,0,1,9dd4e17c-d10b-435e-8665-08997edc3e7e,9dd4e17c-d10b-435e-8665-08997edc3e7e,0,1,cafd44e1-8509-4550-8329-ff8cab0c31ae,cafd44e1-8509-4550-8329-ff8cab0c31ae,0,1,105cd740-1f60-45e1-871c-adeecd291b0d,105cd740-1f60-45e1-871c-adeecd291b0d,0,1,95aec7d2-179b-4ea3-a3df-3d737b713564,95aec7d2-179b-4ea3-a3df-3d737b713564,0,1,4bd1cae4-d5b5-444e-9cf5-67a969714293,4bd1cae4-d5b5-444e-9cf5-67a969714293,0,1,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,0,1,f279a625-b88f-43b4-bce9-de1186fe7d7e,f279a625-b88f-43b4-bce9-de1186fe7d7e,0,1,9f021ea4-cb5b-4248-a79e-0a23e0fac748,9f021ea4-cb5b-4248-a79e-0a23e0fac748,0,1,d5e6cf20-9a74-40bf-9eeb-c91029f014f0,d5e6cf20-9a74-40bf-9eeb-c91029f014f0,0,1,46d94d4c-f76e-4fb4-b0be-39733f0493d9,46d94d4c-f76e-4fb4-b0be-39733f0493d9,0,1,e5936679-41a1-4b0d-9f11-6c83eb6740e8,e5936679-41a1-4b0d-9f11-6c83eb6740e8,0,1,99fc224a-2a61-441a-85e9-d69df6aa8b5e,99fc224a-2a61-441a-85e9-d69df6aa8b5e,0,1,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,0,1,d009782b-d73e-42d1-9979-2cbaf20ee98e,d009782b-d73e-42d1-9979-2cbaf20ee98e,0,1,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,0,1,88d8edf7-654f-4627-b68d-c7e929726da6,88d8edf7-654f-4627-b68d-c7e929726da6,0,1,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,0,1,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,0,1,6a798c80-459f-49ef-a8c2-83842ce4252c,6a798c80-459f-49ef-a8c2-83842ce4252c,0,1,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,0,1,d6400a59-6e02-4212-bb5a-9e49767aa8d6,d6400a59-6e02-4212-bb5a-9e49767aa8d6,0,1,6016d26e-fe39-4c16-b2b5-15f8c663125e,6016d26e-fe39-4c16-b2b5-15f8c663125e,0,1,6c19d9b0-1a41-4f82-a289-9fe05e272079,6c19d9b0-1a41-4f82-a289-9fe05e272079,0,1,df8063e2-47f1-4230-8e3c-eeee2143c72a,df8063e2-47f1-4230-8e3c-eeee2143c72a,0,1,89856ba2-f39a-41cd-be94-61243c6a0b96,89856ba2-f39a-41cd-be94-61243c6a0b96,0,1,8bdb0483-6ea9-4553-91ac-9cde267aae19,8bdb0483-6ea9-4553-91ac-9cde267aae19,0,1,56c9fa68-467b-4c1b-813e-6bc7ac0375cb,56c9fa68-467b-4c1b-813e-6bc7ac0375cb,0,1,bf30f5a1-6542-469f-b3fe-eee726110ffb,bf30f5a1-6542-469f-b3fe-eee726110ffb,0,1,13367a31-c2c9-43ea-b248-8a92e95ecd53,13367a31-c2c9-43ea-b248-8a92e95ecd53,0,1,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,0,1,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,0,1,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,0,1,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,0,1,50ee876f-6860-443b-9857-aca772d711ea,50ee876f-6860-443b-9857-aca772d711ea,0,1,6955edb2-d481-432c-b282-58dc07fd067b,6955edb2-d481-432c-b282-58dc07fd067b,0,1,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,0,1,58b33683-1916-4aef-9b98-5569ef7782ed,58b33683-1916-4aef-9b98-5569ef7782ed,0,1,d3e1f622-f438-4cad-94ae-0272f51610f7,d3e1f622-f438-4cad-94ae-0272f51610f7,0,1,64ac2c2a-2726-4ab9-9a6a-3d08f3fc0618,64ac2c2a-2726-4ab9-9a6a-3d08f3fc0618,0,1,8569cd73-d40d-4d92-83e0-8ece0c03a86a,8569cd73-d40d-4d92-83e0-8ece0c03a86a,0,1,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,0,1,bf29c091-de15-4cd4-be0e-a9785f97d444,bf29c091-de15-4cd4-be0e-a9785f97d444,0,1,060b2bb4-ca03-4da9-930f-7f91f6299a35,060b2bb4-ca03-4da9-930f-7f91f6299a35,0,1,394b1a1c-a7ae-41b7-a346-4bac99fa567d,394b1a1c-a7ae-41b7-a346-4bac99fa567d,0,1,9a5fa511-59e8-4a1b-a101-f276f0b7b261,9a5fa511-59e8-4a1b-a101-f276f0b7b261,0,1,ccfe4e36-80b6-419f-8bb3-c1046203d023,ccfe4e36-80b6-419f-8bb3-c1046203d023,0,1,94b2e060-53b7-4b40-af05-30bea3520330,94b2e060-53b7-4b40-af05-30bea3520330,0,1,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0,1,41b0dabd-85a3-4819-84dd-371eaf4f996e,41b0dabd-85a3-4819-84dd-371eaf4f996e,0,1,86a5ba4d-0681-4ddc-a505-0f537528e1a3,86a5ba4d-0681-4ddc-a505-0f537528e1a3,0,1,12d936f5-932b-4561-b934-c8444808a450,12d936f5-932b-4561-b934-c8444808a450,0,1,2ccb06ca-9bb7-4b74-9a96-c109bb117984,2ccb06ca-9bb7-4b74-9a96-c109bb117984,0,1,ac1a661d-db18-4576-80a9-a19d4140c05e,ac1a661d-db18-4576-80a9-a19d4140c05e,0,1,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,0,1,c3ffeb09-121b-4d77-9c15-def4648b4f3c,c3ffeb09-121b-4d77-9c15-def4648b4f3c,0,1,c2de0724-04c1-4adb-b62a-b7ba727dbe67,c2de0724-04c1-4adb-b62a-b7ba727dbe67,0,1,4ae26777-69ff-4a55-942b-0bad8ab7a70a,4ae26777-69ff-4a55-942b-0bad8ab7a70a,0,1,a0d8fb0a-0e90-4140-8687-e249b153dc66,a0d8fb0a-0e90-4140-8687-e249b153dc66,0,1,917c6f60-2a07-4587-9496-d393aff93953,917c6f60-2a07-4587-9496-d393aff93953,0,1,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,0,1,9fe72d73-4c95-47e0-bf92-dcb714d747c6,9fe72d73-4c95-47e0-bf92-dcb714d747c6,0,1,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,0,1,60aaa289-1f07-438c-8f10-81058ac671c3,60aaa289-1f07-438c-8f10-81058ac671c3,0,1,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,0,1,c44b0868-bd7f-4230-973b-544ff4dd2afe,c44b0868-bd7f-4230-973b-544ff4dd2afe,0,1,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,0,1,6236ac73-5b9f-4fb5-bb2c-a5d8e205c5db,6236ac73-5b9f-4fb5-bb2c-a5d8e205c5db,0,1,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,0,1,0153e60e-daca-48ac-b1c6-adecc89f579e,0153e60e-daca-48ac-b1c6-adecc89f579e,0,1,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,0,1,a896bc34-30a6-48b6-acfc-786c24c186bd,a896bc34-30a6-48b6-acfc-786c24c186bd,0,1,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,0,1,da8ae00a-7207-4ceb-b739-9114888c5b27,da8ae00a-7207-4ceb-b739-9114888c5b27,0,1,ac028c56-b2a8-4a9b-a325-554c636f838e,ac028c56-b2a8-4a9b-a325-554c636f838e,0,1,783db3c5-05a7-466a-825e-65a10eb0e3d9,783db3c5-05a7-466a-825e-65a10eb0e3d9,0,1,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0,1,f99e98ac-cd94-4989-8c02-ef8b323c6815,f99e98ac-cd94-4989-8c02-ef8b323c6815,0,1,e2562347-4549-4111-862e-86c20a6daade,e2562347-4549-4111-862e-86c20a6daade,0,1,b270fc64-15c6-41ed-ad09-44c833ca7c41,b270fc64-15c6-41ed-ad09-44c833ca7c41,0,1,4c3312fd-5613-4e9b-ae7c-572fa1887ded,4c3312fd-5613-4e9b-ae7c-572fa1887ded,0,1,6c8c9618-287a-41ab-890c-60250925ad52,6c8c9618-287a-41ab-890c-60250925ad52,0,1,168fce48-2413-45fc-ad21-9b465121d81b,168fce48-2413-45fc-ad21-9b465121d81b,0,1,55b9650e-098b-4d44-9fb5-d525b46f014b,55b9650e-098b-4d44-9fb5-d525b46f014b,0,1,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,0,1,bc55dc06-a769-40be-9c99-0794bdd2dbea,bc55dc06-a769-40be-9c99-0794bdd2dbea,0,1,7861e179-96d2-422f-a7c2-b38b59074956,7861e179-96d2-422f-a7c2-b38b59074956,0,1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0,1,3797b4c6-e336-4cbe-8d0b-0902e1247b42,3797b4c6-e336-4cbe-8d0b-0902e1247b42,0,1,67ebc493-d29a-4614-890a-feb8b5bd884b,67ebc493-d29a-4614-890a-feb8b5bd884b,0,1,d65c8992-aabc-4b67-9893-01862231ebe1,d65c8992-aabc-4b67-9893-01862231ebe1,0,1,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,0,1,dba6cb38-79c6-4060-87c5-a993548f36c4,dba6cb38-79c6-4060-87c5-a993548f36c4,0,1,6b44227a-e226-4bcb-8638-06b49f830669,6b44227a-e226-4bcb-8638-06b49f830669,0,1,f2406400-87e9-4df2-bcd3-8f1e3ad62088,f2406400-87e9-4df2-bcd3-8f1e3ad62088,0,1,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,0,1,599b1692-5f4e-42ef-ae1a-822ff527a415,599b1692-5f4e-42ef-ae1a-822ff527a415,0,1,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,0,1,23f70675-6a05-4b50-ad68-c55ddc93e857,23f70675-6a05-4b50-ad68-c55ddc93e857,0,1,4bb7372a-87a9-426e-b09f-fc0110455b10,4bb7372a-87a9-426e-b09f-fc0110455b10,0,1,8de9ba9e-0f4b-4bc5-8c62-e77601e6d865,8de9ba9e-0f4b-4bc5-8c62-e77601e6d865,0,1,fee371a3-fea1-4ef0-a324-b38d038d162d,fee371a3-fea1-4ef0-a324-b38d038d162d,0,1,ac853a0f-c185-4cdb-9f09-c921770937b5,ac853a0f-c185-4cdb-9f09-c921770937b5,0,1,920a7940-4d12-476d-a909-2231787839a9,920a7940-4d12-476d-a909-2231787839a9,0,1,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,0,1,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,0,1,32eb2a75-ff35-4795-bf0c-12b1328441ee,32eb2a75-ff35-4795-bf0c-12b1328441ee,0,1,1731708f-53cb-4b00-b90e-f581b4baa845,1731708f-53cb-4b00-b90e-f581b4baa845,0,1,d4b0feca-c00a-4d48-9f23-d92277ea6483,d4b0feca-c00a-4d48-9f23-d92277ea6483,0,1,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,0,1,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,0,1,23cb5bc2-9638-4d1c-b4bc-d5297e271570,23cb5bc2-9638-4d1c-b4bc-d5297e271570,0,1,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,0,1,04b7389d-697d-4b0d-a239-ac8c674cc46f,04b7389d-697d-4b0d-a239-ac8c674cc46f,0,1,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,0,1,864cad61-8280-415d-8fe1-bcb39d56670a,864cad61-8280-415d-8fe1-bcb39d56670a,0,1,b106bd29-5dc7-44d7-94d0-00f61499392e,b106bd29-5dc7-44d7-94d0-00f61499392e,0,1,a4febff8-0566-4977-bf55-1d574568fe9f,a4febff8-0566-4977-bf55-1d574568fe9f,0,1,5199cc65-bed1-40b9-96fe-cf6d855a8b91,5199cc65-bed1-40b9-96fe-cf6d855a8b91,0,1,f518add9-5c26-4dac-ab2e-b30fe3fbd347,f518add9-5c26-4dac-ab2e-b30fe3fbd347,0,1,23f53317-7aa8-4816-8a69-3d39d5e76da0,23f53317-7aa8-4816-8a69-3d39d5e76da0,0,1,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,0,1,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,0,1,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,0,1,8e07a76d-db30-491c-b296-181c8e689382,8e07a76d-db30-491c-b296-181c8e689382,0,1,1a41acdd-3503-4c69-b93b-eb1cb6749712,1a41acdd-3503-4c69-b93b-eb1cb6749712,0,1,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,0,1,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,0,1,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,0,1,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,0,1,8b3da21b-ea3f-47cf-af48-15b886b21f20,8b3da21b-ea3f-47cf-af48-15b886b21f20,0,1,32c4750b-0096-4bbc-8dcd-c1f717734233,32c4750b-0096-4bbc-8dcd-c1f717734233,0,1,40fd038d-a93a-4be7-9221-d8ae83350ca0,40fd038d-a93a-4be7-9221-d8ae83350ca0,0,1,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,0,1,29adc9e5-a994-48ab-a5a1-919d01119c3a,29adc9e5-a994-48ab-a5a1-919d01119c3a,0,1,c47ffce7-c905-4e88-8b1f-156f47047ccd,c47ffce7-c905-4e88-8b1f-156f47047ccd,0,1,c6ec9d48-9131-4735-9cf7-b498705a57e4,c6ec9d48-9131-4735-9cf7-b498705a57e4,0,1,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,0,1,0422d7e9-b329-4ae5-b6d4-001a9a38e40f,0422d7e9-b329-4ae5-b6d4-001a9a38e40f,0,1,350ec27c-3947-4f36-b284-331e775453fb,350ec27c-3947-4f36-b284-331e775453fb,0,1,f1208b69-f100-4cef-9865-cc342169a697,f1208b69-f100-4cef-9865-cc342169a697,0,1,a720abc8-dcf0-4684-8d94-22d394a8e4df,a720abc8-dcf0-4684-8d94-22d394a8e4df,0,1,e40f53de-c27b-4e74-8241-f784d7ca5c84,e40f53de-c27b-4e74-8241-f784d7ca5c84,0,1,ef38b84d-277e-48c2-8826-330132eb6807,ef38b84d-277e-48c2-8826-330132eb6807,0,1,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,0,1,5251e744-666e-48a0-a5b4-9cef313c7631,5251e744-666e-48a0-a5b4-9cef313c7631,0,1,0b09cf2f-1759-4362-b997-29e09ac00445,0b09cf2f-1759-4362-b997-29e09ac00445,0,1,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,0,1,828ddf5d-ca09-4baf-897f-77d569e02a6b,828ddf5d-ca09-4baf-897f-77d569e02a6b,0,1,8856015c-a695-4b1a-99ef-770263f9dc4a,8856015c-a695-4b1a-99ef-770263f9dc4a,0,1,183ec2b5-e173-4885-9e26-1098ffa15020,183ec2b5-e173-4885-9e26-1098ffa15020,0,1,74702fdf-bfc5-4658-ba58-e39bcfbaa647,74702fdf-bfc5-4658-ba58-e39bcfbaa647,0,1,2f436ec3-6a04-4d2c-998a-c60ea875ca86,2f436ec3-6a04-4d2c-998a-c60ea875ca86,0,1,fb9577e1-00d9-4d52-8de9-23914929a683,fb9577e1-00d9-4d52-8de9-23914929a683,0,1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,0,1,529253ae-9c92-4426-b150-8444ba622f89,529253ae-9c92-4426-b150-8444ba622f89,0,1,06a1955a-2ef0-4607-9dcb-a480a7951af7,06a1955a-2ef0-4607-9dcb-a480a7951af7,0,1,6f8fcc96-bfed-444a-908d-95c5b1c64972,6f8fcc96-bfed-444a-908d-95c5b1c64972,0,1,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,0,1,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,0,1,91e26e73-027f-4a10-9083-e5182e768723,91e26e73-027f-4a10-9083-e5182e768723,0,1,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,0,1,54433668-4391-4dea-8baf-43e9aa1d624e,54433668-4391-4dea-8baf-43e9aa1d624e,0,1,fc309616-060a-42c3-8401-dfef0f359bc5,fc309616-060a-42c3-8401-dfef0f359bc5,0,1,b968398d-973d-4643-95a5-16633d7e48bc,b968398d-973d-4643-95a5-16633d7e48bc,0,1,9d6429f7-23da-4596-822a-04818deb3088,9d6429f7-23da-4596-822a-04818deb3088,0,1,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,0,1,acb533e7-4610-4f92-b548-1a4ff1a423d4,acb533e7-4610-4f92-b548-1a4ff1a423d4,0,1,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,0,1,0c24858a-7e64-426f-9b59-392449aecaf5,0c24858a-7e64-426f-9b59-392449aecaf5,0,1,b1d61e28-f3dc-418b-b5df-f75622a4b980,b1d61e28-f3dc-418b-b5df-f75622a4b980,0,1,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,0,1,4033f86b-d250-475a-8837-071bf31664b0,4033f86b-d250-475a-8837-071bf31664b0,0,1,3158ffef-5aaa-43d3-83ca-40626aa33d3c,3158ffef-5aaa-43d3-83ca-40626aa33d3c,0,1,36940f2c-b655-4d50-af16-2fb70acf5cdb,36940f2c-b655-4d50-af16-2fb70acf5cdb,0,1,7a0d7396-efed-4b57-92b6-e4ac74638b21,7a0d7396-efed-4b57-92b6-e4ac74638b21,0,1,42ff1536-0f3f-467b-b8f4-67260e5d87e3,42ff1536-0f3f-467b-b8f4-67260e5d87e3,0,1,876e31ff-ab7b-4ea4-b491-161963727dd1,876e31ff-ab7b-4ea4-b491-161963727dd1,0,1,bb43995b-68b4-41a1-8458-e10a2d8925f1,bb43995b-68b4-41a1-8458-e10a2d8925f1,0,1,61730dd9-fed7-43ce-8f38-724cac8f3d08,61730dd9-fed7-43ce-8f38-724cac8f3d08,0,1,e6a494b8-27e7-46a6-9435-7be6e150a69e,e6a494b8-27e7-46a6-9435-7be6e150a69e,0,1,133dc852-59d3-4351-934d-8845f8a38431,133dc852-59d3-4351-934d-8845f8a38431,0,1,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,0,1,b57eca91-04c2-4412-b5e2-f3c71f8ec602,b57eca91-04c2-4412-b5e2-f3c71f8ec602,0,1,b67914a8-d483-4bed-bd4d-a4aadd4998a4,b67914a8-d483-4bed-bd4d-a4aadd4998a4,0,1,744a52c8-6e4d-4356-a35a-3d2b01ad4a9f,744a52c8-6e4d-4356-a35a-3d2b01ad4a9f,0,1,6f630213-c16c-421c-a160-09e3c729ab26,6f630213-c16c-421c-a160-09e3c729ab26,0,1,878c638c-7c84-4914-896a-d4fdf0d759ef,878c638c-7c84-4914-896a-d4fdf0d759ef,0,1,6065653e-b7a9-4033-9617-f64430c57d89,6065653e-b7a9-4033-9617-f64430c57d89,0,1,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,0,1,00d1d85b-c258-4f10-9d13-a99375a29fc1,00d1d85b-c258-4f10-9d13-a99375a29fc1,0,1,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,0,1,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,0,1,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,0,1,fb58d277-b2a5-4a72-8d45-170c6f6263f9,fb58d277-b2a5-4a72-8d45-170c6f6263f9,0,1,325ed391-8558-4f03-9784-cde1f2a32944,325ed391-8558-4f03-9784-cde1f2a32944,0,1,f6cda05a-0f8f-4aa2-9686-1735c4207db3,f6cda05a-0f8f-4aa2-9686-1735c4207db3,0,1,0761ea58-8358-49ba-8e2d-e6afe88f6899,0761ea58-8358-49ba-8e2d-e6afe88f6899,0,1,da09e340-7cc0-4830-917a-5a59c42bbbf7,da09e340-7cc0-4830-917a-5a59c42bbbf7,0,1,c325aa12-9564-4033-8d3e-3103df55427f,c325aa12-9564-4033-8d3e-3103df55427f,0,1,9f4d4834-6994-4573-b99d-a5051746e5f9,9f4d4834-6994-4573-b99d-a5051746e5f9,0,1,c8ef3db5-2562-4f80-a679-86c2ba288ebf,c8ef3db5-2562-4f80-a679-86c2ba288ebf,0,1,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,0,1,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,0,1,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,0,1,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,0,1,af071a52-212b-4131-98e6-81f6048a70e6,af071a52-212b-4131-98e6-81f6048a70e6,0,1,64eff9f4-c57b-40a0-bd83-7e371fd010ce,64eff9f4-c57b-40a0-bd83-7e371fd010ce,0,1,0eee931a-57bb-4844-8e6e-eaca342640a0,0eee931a-57bb-4844-8e6e-eaca342640a0,0,1,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,0,1,37210dde-9a2f-475c-8341-578ac99f0e17,37210dde-9a2f-475c-8341-578ac99f0e17,0,1,3d662173-e19d-4077-9a08-8c8899226e24,3d662173-e19d-4077-9a08-8c8899226e24,0,1,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,0,1,3a8fffb6-a732-440c-afb9-d1c699ea53b6,3a8fffb6-a732-440c-afb9-d1c699ea53b6,0,1,a21989bd-a57f-4969-be3b-d8b39ead4145,a21989bd-a57f-4969-be3b-d8b39ead4145,0,1,c4aee120-cdbb-4b48-a1c7-99cccbafb120,c4aee120-cdbb-4b48-a1c7-99cccbafb120,0,1,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,0,1,a3667b25-7c18-446d-a318-685a4fe4bf89,a3667b25-7c18-446d-a318-685a4fe4bf89,0,1,8103f12c-ed50-4052-8117-33b6d11ef620,8103f12c-ed50-4052-8117-33b6d11ef620,0,1,617de19c-bf01-4900-832a-c169e9faeb79,617de19c-bf01-4900-832a-c169e9faeb79,0,1,70b73fd0-f5dc-411e-9bbb-10a538e8281b,70b73fd0-f5dc-411e-9bbb-10a538e8281b,0,1,758f44ad-54da-4f72-accf-0afecc4f4827,758f44ad-54da-4f72-accf-0afecc4f4827,0,1,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,0,1,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,0,1,4378ab20-5467-476b-8f04-4b6876efdee6,4378ab20-5467-476b-8f04-4b6876efdee6,0,1,55e47901-c79c-41c5-9d7f-6b6846ed2782,55e47901-c79c-41c5-9d7f-6b6846ed2782,0,1,3c429fe8-e663-4a58-817f-8f8382697dbb,3c429fe8-e663-4a58-817f-8f8382697dbb,0,1,c37be0c3-d2db-4e63-a8cb-7956a5396650,c37be0c3-d2db-4e63-a8cb-7956a5396650,0,1,83180e0d-fc4b-41ec-9a17-5af555a4776f,83180e0d-fc4b-41ec-9a17-5af555a4776f,0,1,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,0,1,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,0,1,3e8c6546-416c-4437-8c85-2cf591b4fc3f,3e8c6546-416c-4437-8c85-2cf591b4fc3f,0,1,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,0,1,9a0b27db-e4ac-496b-b6de-876b90381527,9a0b27db-e4ac-496b-b6de-876b90381527,0,1,4b48f705-0fdd-49e9-b912-5d2b8ae86d6d,4b48f705-0fdd-49e9-b912-5d2b8ae86d6d,0,1,18df66fe-f271-462e-822d-2f16dbb8c58f,18df66fe-f271-462e-822d-2f16dbb8c58f,0,1,80337d19-4661-429d-a108-c5b2b0f31fdf,80337d19-4661-429d-a108-c5b2b0f31fdf,0,1,1f2502be-56fc-44fa-9341-00ed0463dbb4,1f2502be-56fc-44fa-9341-00ed0463dbb4,0,1,018caa10-88e0-452f-b0c1-65778104b290,018caa10-88e0-452f-b0c1-65778104b290,0,1,f3e237ee-a696-42d9-966d-bbb7ecb354ce,f3e237ee-a696-42d9-966d-bbb7ecb354ce,0,1,5786dce7-e9a3-437a-b694-ca93ea87363f,5786dce7-e9a3-437a-b694-ca93ea87363f,0,1,e3f81324-3366-4de5-b834-688fee5ea625,e3f81324-3366-4de5-b834-688fee5ea625,0,1,205928c7-042b-4f11-919b-5ca9d1fc1ecb,205928c7-042b-4f11-919b-5ca9d1fc1ecb,0,1,b928a3e7-6d57-44f7-8c1e-c5df9a803a49,b928a3e7-6d57-44f7-8c1e-c5df9a803a49,0,1,e1c11609-5400-43ed-887c-22ba3a48a384,e1c11609-5400-43ed-887c-22ba3a48a384,0,1,091cb921-c7e3-4a5f-97b7-34e625159b9c,091cb921-c7e3-4a5f-97b7-34e625159b9c,0,1,f6118cdd-1dcd-464e-a49d-e95c69466750,f6118cdd-1dcd-464e-a49d-e95c69466750,0,1,39932897-959b-41a6-94ad-61426abfdbd9,39932897-959b-41a6-94ad-61426abfdbd9,0,1,c56ea6f3-1032-4b7a-a20e-e912196da1cd,c56ea6f3-1032-4b7a-a20e-e912196da1cd,0,1,20d655a7-788c-48bc-83ae-25003106bedb,20d655a7-788c-48bc-83ae-25003106bedb,0,1,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,0,1,68a72014-4b2e-4347-aaa7-54d95b8eb919,68a72014-4b2e-4347-aaa7-54d95b8eb919,0,1,a71d9c41-7510-4d38-90df-1034977b8f45,a71d9c41-7510-4d38-90df-1034977b8f45,0,1,25830f5b-27e2-4eff-9728-b21eb498727d,25830f5b-27e2-4eff-9728-b21eb498727d,0,1,379c9295-d0d5-418d-82f3-5ae19985cc53,379c9295-d0d5-418d-82f3-5ae19985cc53,0,1,af02f534-8508-4f9f-bcc1-0c6f3d696971,af02f534-8508-4f9f-bcc1-0c6f3d696971,0,1,dd345cfb-ea0c-4ea8-9b35-22547b000275,dd345cfb-ea0c-4ea8-9b35-22547b000275,0,1,86a871da-3725-43a1-a7c3-98acd187011b,86a871da-3725-43a1-a7c3-98acd187011b,0,1,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,0,1,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,0,1,5ef026c2-2ef4-45d6-9792-5ba0d298714b,5ef026c2-2ef4-45d6-9792-5ba0d298714b,0,1,45d61391-4cf7-4f45-8775-ada582c42400,45d61391-4cf7-4f45-8775-ada582c42400,0,1,78b2a913-2ab9-455d-85a3-504f0f468468,78b2a913-2ab9-455d-85a3-504f0f468468,0,1,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,0,1,560b5b12-4dee-4c69-ab6b-7680757a2797,560b5b12-4dee-4c69-ab6b-7680757a2797,0,1,3cfb1ce0-de42-4914-85c0-807d0c10f77e,3cfb1ce0-de42-4914-85c0-807d0c10f77e,0,1,0333cd9e-392d-40b2-869d-ad47119e0384,0333cd9e-392d-40b2-869d-ad47119e0384,0,1,82cc8820-0b92-4bb7-b097-7ac79e922f01,82cc8820-0b92-4bb7-b097-7ac79e922f01,0,1,f2267d6c-6972-4621-b677-87798056363b,f2267d6c-6972-4621-b677-87798056363b,0,1,243d201b-3714-4700-b410-c74c9093e6f6,243d201b-3714-4700-b410-c74c9093e6f6,0,1,de3cb50c-ef99-419e-b922-c6a453da6a5b,de3cb50c-ef99-419e-b922-c6a453da6a5b,0,1,d4ca4802-756a-494c-bab3-e77e0777a3fa,d4ca4802-756a-494c-bab3-e77e0777a3fa,0,1,134c1054-8d65-405f-ba3b-5beeca803a72,134c1054-8d65-405f-ba3b-5beeca803a72,0,1,cfa1669b-5310-4171-83fd-4dff3c6ac345,cfa1669b-5310-4171-83fd-4dff3c6ac345,0,1,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,0,1,112401b8-2800-4ed2-b620-7e1c1cacef2b,112401b8-2800-4ed2-b620-7e1c1cacef2b,0,1,6738abb6-483b-422d-9c4c-6fb6f8fee2cb,6738abb6-483b-422d-9c4c-6fb6f8fee2cb,0,1,742f14c0-a601-4cc1-9b89-b05cda5a2aac,742f14c0-a601-4cc1-9b89-b05cda5a2aac,0,1,2aaf3896-f7b2-405b-ac47-b4999ede382e,2aaf3896-f7b2-405b-ac47-b4999ede382e,0,1,f470a359-5c0c-4cd9-b470-b08b5f9dcd9f,f470a359-5c0c-4cd9-b470-b08b5f9dcd9f,0,1,c2a2daf0-b4dd-4a22-a0da-8325ff098cc3,c2a2daf0-b4dd-4a22-a0da-8325ff098cc3,0,1,f9484b9d-150f-4f1b-9041-4af10bf25ca6,f9484b9d-150f-4f1b-9041-4af10bf25ca6,0,1,795ffcdc-30cf-45a8-821a-66afdd86f7b3,795ffcdc-30cf-45a8-821a-66afdd86f7b3,0,1,227cb2ed-98df-441f-afd8-499e75dc6666,227cb2ed-98df-441f-afd8-499e75dc6666,0,1,07b55200-f01f-4d4e-a7a9-01b99301e8a0,07b55200-f01f-4d4e-a7a9-01b99301e8a0,0,1,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,0,1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,0,1,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,0,1,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0,1,27df6c22-85d7-4cb6-be19-82af76c84bf9,27df6c22-85d7-4cb6-be19-82af76c84bf9,0,1,40e2fb30-bb03-4178-a8eb-ddf48337ef23,40e2fb30-bb03-4178-a8eb-ddf48337ef23,0,1,1026fbcb-acd8-40dc-b638-6e02c6378c55,1026fbcb-acd8-40dc-b638-6e02c6378c55,0,1,dc9e2ba6-f4f1-493f-9054-cac633f239dd,dc9e2ba6-f4f1-493f-9054-cac633f239dd,0,1,7b95d0b1-c7b2-43b4-9119-320cb8912032,7b95d0b1-c7b2-43b4-9119-320cb8912032,0,1,004582b7-00aa-405e-8e24-ce76c945edae,004582b7-00aa-405e-8e24-ce76c945edae,0,1,97a9b005-a836-4308-8e63-0e00f6890baa,97a9b005-a836-4308-8e63-0e00f6890baa,0,1,98c34ada-0b78-41db-9183-6d7b9e466bde,98c34ada-0b78-41db-9183-6d7b9e466bde,0,1,fb688339-918e-40a1-8721-a26f3077973e,fb688339-918e-40a1-8721-a26f3077973e,0,1,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,0,1,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,0,1,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,0,1,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,0,1,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,0,1,83d23220-0226-4efe-a81c-6809459443a2,83d23220-0226-4efe-a81c-6809459443a2,0,1,ee30252f-ea25-4d50-b49c-163514bee342,ee30252f-ea25-4d50-b49c-163514bee342,0,1,02afc219-6b86-4282-ab6f-2688203542b7,02afc219-6b86-4282-ab6f-2688203542b7,0,1,dabae379-6356-497a-aab5-cf102f16a72a,dabae379-6356-497a-aab5-cf102f16a72a,0,1,337370e0-1021-4887-9d38-6c3833c90a5b,337370e0-1021-4887-9d38-6c3833c90a5b,0,1,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0,1,d6f01f1c-801b-4776-ae11-48236103f76a,d6f01f1c-801b-4776-ae11-48236103f76a,0,1,b6fe68cf-657b-40e0-af2e-247607a86519,b6fe68cf-657b-40e0-af2e-247607a86519,0,1,9b0b8191-94b7-428f-be86-e9e4cd24a72f,9b0b8191-94b7-428f-be86-e9e4cd24a72f,0,1,a923dbcb-7146-4445-ad17-f4a32c16a837,a923dbcb-7146-4445-ad17-f4a32c16a837,0,1,41dec792-1d1a-4e06-a54b-a86193b98225,41dec792-1d1a-4e06-a54b-a86193b98225,0,1,52257beb-3e0c-4681-b430-9690398cd13a,52257beb-3e0c-4681-b430-9690398cd13a,0,1,f71bd0e8-8784-452e-bea9-3696c875d69d,f71bd0e8-8784-452e-bea9-3696c875d69d,0,1,135e637c-c28e-4547-8da2-d897dca54cb2,135e637c-c28e-4547-8da2-d897dca54cb2,0,1,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,0,1,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,0,1,5356543a-db9a-4265-b83f-31d45544c8e6,5356543a-db9a-4265-b83f-31d45544c8e6,0,1,857dd311-9c6d-4dba-82d8-283d7b05b09e,857dd311-9c6d-4dba-82d8-283d7b05b09e,0,1,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,0,1,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,0,1,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,0,1,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,0,1,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,0,1,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,0,1,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,0,1,403d4675-b80e-4e0a-8cc0-2876661d0c89,403d4675-b80e-4e0a-8cc0-2876661d0c89,0,1,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,0,1,cb42bbe7-b564-44b2-89b8-d570f3419d3c,cb42bbe7-b564-44b2-89b8-d570f3419d3c,0,1,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,0,1,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,0,1,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,0,1,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,0,1,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,0,1,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0,1,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,0,1,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,0,1,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,0,1,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0,1,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,0,1,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,0,1,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,0,1,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,0,1,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,0,1,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,0,1,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,0,1,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,0,1,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,0,1,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,0,1,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,0,1,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,0,1,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,0,1,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,0,1,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,0,1,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,0,1,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,0,1,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0,1,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,0,1,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,0,1,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,0,1,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,0,1,34f9826f-3ab5-4849-8ef9-ab0fab3e471b,34f9826f-3ab5-4849-8ef9-ab0fab3e471b,0,1,3ad08f4a-6202-4099-b6cc-bc116e6731a0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,0,1,fd96c8ab-602a-4735-b168-52b501e80351,fd96c8ab-602a-4735-b168-52b501e80351,0,1,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,0,1,370f0c75-d2c5-4be5-a633-4bcc77998ece,370f0c75-d2c5-4be5-a633-4bcc77998ece,0,1,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,0,1,2139532c-f6cb-4393-936e-cc912e5adca9,2139532c-f6cb-4393-936e-cc912e5adca9,0,1,755c3eca-4956-4a44-9b38-c11dae00b87f,755c3eca-4956-4a44-9b38-c11dae00b87f,0,1,f57c558c-2c94-4b9d-8697-448d0548ab1a,f57c558c-2c94-4b9d-8697-448d0548ab1a,0,1,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,0,1,c32db021-eca1-4b67-aa85-3d6e28c51b53,c32db021-eca1-4b67-aa85-3d6e28c51b53,0,1,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,0,1,02466dcf-02a1-4853-814f-a913a9baba45,02466dcf-02a1-4853-814f-a913a9baba45,0,1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,0,1,62b75eb2-42e1-4484-a77f-b676dd36f3d4,62b75eb2-42e1-4484-a77f-b676dd36f3d4,0,1,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,0,1,856510ee-74f5-44e9-a3c0-1c60cfb7a787,856510ee-74f5-44e9-a3c0-1c60cfb7a787,0,1,28b761c6-c286-4125-a4ed-da602e49950f,28b761c6-c286-4125-a4ed-da602e49950f,0,1,4ac66a22-c736-4e06-a8aa-ef4a71788c65,4ac66a22-c736-4e06-a8aa-ef4a71788c65,0,1,9cfe9281-8840-4077-824d-a2c9cbb0b730,9cfe9281-8840-4077-824d-a2c9cbb0b730,0,1,76389fa9-b9e0-492e-9c93-24b5f3bf094c,76389fa9-b9e0-492e-9c93-24b5f3bf094c,0,1,23e3de37-9315-45e6-bbfd-60aae28c25ae,23e3de37-9315-45e6-bbfd-60aae28c25ae,0,1,a9957f43-8b6f-4d98-a2d8-77b78047494c,a9957f43-8b6f-4d98-a2d8-77b78047494c,0,1,e470e15d-1b06-43cb-a9f9-ba489e2f596f,e470e15d-1b06-43cb-a9f9-ba489e2f596f,0,1,0408002c-9255-43a2-8022-82f02ee0e8f4,0408002c-9255-43a2-8022-82f02ee0e8f4,0,1,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,0,1,1851afd4-5324-45c1-b754-54e65943f945,1851afd4-5324-45c1-b754-54e65943f945,0,1,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,0,1,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,0,1,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0,1,c322dc4a-30f3-4d23-9824-4a01c496408d,c322dc4a-30f3-4d23-9824-4a01c496408d,0,1,dcff004c-1b61-4a19-b977-ea21bf688614,dcff004c-1b61-4a19-b977-ea21bf688614,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1} \ No newline at end of file diff --git a/SSL/src/Constants/АдресАгентаСервиса/АдресАгентаСервиса.mdo b/SSL/src/Constants/АдресАгентаСервиса/АдресАгентаСервиса.mdo new file mode 100644 index 000000000..c7f4fab00 --- /dev/null +++ b/SSL/src/Constants/АдресАгентаСервиса/АдресАгентаСервиса.mdo @@ -0,0 +1,21 @@ + + + + + + + + АдресАгентаСервиса + + ru + Адрес агента сервиса + + + String + + + true + + + Managed + diff --git a/SSL/src/Constants/АдресВебСервисаОбменаДанными/АдресВебСервисаОбменаДанными.mdo b/SSL/src/Constants/АдресВебСервисаОбменаДанными/АдресВебСервисаОбменаДанными.mdo new file mode 100644 index 000000000..fb7ccf9d6 --- /dev/null +++ b/SSL/src/Constants/АдресВебСервисаОбменаДанными/АдресВебСервисаОбменаДанными.mdo @@ -0,0 +1,20 @@ + + + + + + + + АдресВебСервисаОбменаДанными + + ru + Адрес веб-сервиса обмена данными + + + String + + + + + Managed + diff --git a/SSL/src/Constants/АдресСервисаПоставляемыхДанных/АдресСервисаПоставляемыхДанных.mdo b/SSL/src/Constants/АдресСервисаПоставляемыхДанных/АдресСервисаПоставляемыхДанных.mdo new file mode 100644 index 000000000..72ef3dd69 --- /dev/null +++ b/SSL/src/Constants/АдресСервисаПоставляемыхДанных/АдресСервисаПоставляемыхДанных.mdo @@ -0,0 +1,21 @@ + + + + + + + + АдресСервисаПоставляемыхДанных + + ru + Адрес сервиса поставляемых данных + + + String + + + true + + + Managed + diff --git a/SSL/src/Constants/БлокировкаОтправкиБыстрыхСообщений/БлокировкаОтправкиБыстрыхСообщений.mdo b/SSL/src/Constants/БлокировкаОтправкиБыстрыхСообщений/БлокировкаОтправкиБыстрыхСообщений.mdo new file mode 100644 index 000000000..8e8435bf0 --- /dev/null +++ b/SSL/src/Constants/БлокировкаОтправкиБыстрыхСообщений/БлокировкаОтправкиБыстрыхСообщений.mdo @@ -0,0 +1,20 @@ + + + + + + + + БлокировкаОтправкиБыстрыхСообщений + + ru + Блокировка отправки быстрых сообщений + + + Date + + + + + Managed + diff --git a/SSL/src/Constants/ВнутреннийАдресМенеджераСервиса/ВнутреннийАдресМенеджераСервиса.mdo b/SSL/src/Constants/ВнутреннийАдресМенеджераСервиса/ВнутреннийАдресМенеджераСервиса.mdo new file mode 100644 index 000000000..9f59bb5ae --- /dev/null +++ b/SSL/src/Constants/ВнутреннийАдресМенеджераСервиса/ВнутреннийАдресМенеджераСервиса.mdo @@ -0,0 +1,21 @@ + + + + + + + + ВнутреннийАдресМенеджераСервиса + + ru + Внутренний адрес менеджера сервиса + + + String + + + true + + + Managed + diff --git a/SSL/src/Constants/ДобавлятьРуководителямДоступПодчиненных/ValueManagerModule.bsl b/SSL/src/Constants/ДобавлятьРуководителямДоступПодчиненных/ValueManagerModule.bsl index 6732e8588..ca9b94c5d 100644 --- a/SSL/src/Constants/ДобавлятьРуководителямДоступПодчиненных/ValueManagerModule.bsl +++ b/SSL/src/Constants/ДобавлятьРуководителямДоступПодчиненных/ValueManagerModule.bsl @@ -1,21 +1,29 @@ -Перем СтароеЗначение; +Перем СтароеЗначение; // Значение константы до изменения. +// Используется в обработчике события ПриЗаписи. + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ПередЗаписью(Отказ) - СтароеЗначение = УправлениеДоступом.ДобавлятьРуководителямДоступПодчиненных(); + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; - // Проверка ОбменДанными.Загрузка должна выполняться после кода выше. + СтароеЗначение = УправлениеДоступом.ДобавлятьРуководителямДоступПодчиненных(); КонецПроцедуры Процедура ПриЗаписи(Отказ) + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + Если СтароеЗначение <> Значение Тогда УправлениеДоступом.ПриИзмененииКонстантыДобавлятьРуководителямДоступПодчиненных(); КонецЕсли; - // Проверка ОбменДанными.Загрузка должна выполняться после кода выше. - КонецПроцедуры diff --git a/SSL/src/Constants/ЗарегистрированыИзмененияДанных/ЗарегистрированыИзмененияДанных.mdo b/SSL/src/Constants/ЗарегистрированыИзмененияДанных/ЗарегистрированыИзмененияДанных.mdo new file mode 100644 index 000000000..6e476018c --- /dev/null +++ b/SSL/src/Constants/ЗарегистрированыИзмененияДанных/ЗарегистрированыИзмененияДанных.mdo @@ -0,0 +1,20 @@ + + + + + + + + ЗарегистрированыИзмененияДанных + + ru + Зарегистрированы изменения данных + + Кумулятивный признак изменения данных для обмена в модели сервиса + + Boolean + + + + Managed + diff --git a/SSL/src/Constants/ИмяПользователяАгентаСервиса/ИмяПользователяАгентаСервиса.mdo b/SSL/src/Constants/ИмяПользователяАгентаСервиса/ИмяПользователяАгентаСервиса.mdo new file mode 100644 index 000000000..0dcd480e3 --- /dev/null +++ b/SSL/src/Constants/ИмяПользователяАгентаСервиса/ИмяПользователяАгентаСервиса.mdo @@ -0,0 +1,21 @@ + + + + + + + + ИмяПользователяАгентаСервиса + + ru + Имя пользователя агента сервиса + + + String + + + true + + + Managed + diff --git a/SSL/src/Constants/ИмяСлужебногоПользователяМенеджераСервиса/ИмяСлужебногоПользователяМенеджераСервиса.mdo b/SSL/src/Constants/ИмяСлужебногоПользователяМенеджераСервиса/ИмяСлужебногоПользователяМенеджераСервиса.mdo new file mode 100644 index 000000000..0dd8d8056 --- /dev/null +++ b/SSL/src/Constants/ИмяСлужебногоПользователяМенеджераСервиса/ИмяСлужебногоПользователяМенеджераСервиса.mdo @@ -0,0 +1,21 @@ + + + + + + + + ИмяСлужебногоПользователяМенеджераСервиса + + ru + Имя служебного пользователя менеджера сервиса + + + String + + + true + + + Managed + diff --git a/SSL/src/Constants/ИмяСлужебногоПользователяСервисаПоставляемыхДанных/ИмяСлужебногоПользователяСервисаПоставляемыхДанных.mdo b/SSL/src/Constants/ИмяСлужебногоПользователяСервисаПоставляемыхДанных/ИмяСлужебногоПользователяСервисаПоставляемыхДанных.mdo new file mode 100644 index 000000000..c5b66336b --- /dev/null +++ b/SSL/src/Constants/ИмяСлужебногоПользователяСервисаПоставляемыхДанных/ИмяСлужебногоПользователяСервисаПоставляемыхДанных.mdo @@ -0,0 +1,21 @@ + + + + + + + + ИмяСлужебногоПользователяСервисаПоставляемыхДанных + + ru + Имя служебного пользователя сервиса поставляемых данных + + + String + + + true + + + Managed + diff --git a/SSL/src/Constants/ИспользоватьНапоминанияПользователя/ИспользоватьНапоминанияПользователя.mdo b/SSL/src/Constants/ИспользоватьНапоминанияПользователя/ИспользоватьНапоминанияПользователя.mdo index fd698f59d..8cd295b2f 100644 --- a/SSL/src/Constants/ИспользоватьНапоминанияПользователя/ИспользоватьНапоминанияПользователя.mdo +++ b/SSL/src/Constants/ИспользоватьНапоминанияПользователя/ИспользоватьНапоминанияПользователя.mdo @@ -8,7 +8,7 @@ ИспользоватьНапоминанияПользователя ru - Использовать напоминания пользователя + Использовать напоминания Boolean diff --git a/SSL/src/Constants/ИспользоватьОбменДанными/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьОбменДанными/ValueManagerModule.bsl index e69de29bb..a18125a84 100644 --- a/SSL/src/Constants/ИспользоватьОбменДанными/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьОбменДанными/ValueManagerModule.bsl @@ -0,0 +1,6 @@ + +Процедура ПриЗаписи(Отказ) + + ОбщегоНазначения.УстановитьЗначенияДополнительныхКонстант(Значение, Метаданные().Имя); + +КонецПроцедуры diff --git a/SSL/src/Constants/ИспользоватьОбменДаннымиВЛокальномРежиме/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьОбменДаннымиВЛокальномРежиме/ValueManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/Constants/ИспользоватьОбменДаннымиВЛокальномРежиме/ИспользоватьОбменДаннымиВЛокальномРежиме.mdo b/SSL/src/Constants/ИспользоватьОбменДаннымиВЛокальномРежиме/ИспользоватьОбменДаннымиВЛокальномРежиме.mdo new file mode 100644 index 000000000..b3ccd8a08 --- /dev/null +++ b/SSL/src/Constants/ИспользоватьОбменДаннымиВЛокальномРежиме/ИспользоватьОбменДаннымиВЛокальномРежиме.mdo @@ -0,0 +1,20 @@ + + + + + + + + ИспользоватьОбменДаннымиВЛокальномРежиме + + ru + Использовать обмен данными в локальном режиме + + + Boolean + + true + + + Managed + diff --git a/SSL/src/Constants/ИспользоватьОбменДаннымиВМоделиСервиса/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьОбменДаннымиВМоделиСервиса/ValueManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/Constants/ИспользоватьОбменДаннымиВМоделиСервиса/ИспользоватьОбменДаннымиВМоделиСервиса.mdo b/SSL/src/Constants/ИспользоватьОбменДаннымиВМоделиСервиса/ИспользоватьОбменДаннымиВМоделиСервиса.mdo new file mode 100644 index 000000000..11e80429d --- /dev/null +++ b/SSL/src/Constants/ИспользоватьОбменДаннымиВМоделиСервиса/ИспользоватьОбменДаннымиВМоделиСервиса.mdo @@ -0,0 +1,20 @@ + + + + + + + + ИспользоватьОбменДаннымиВМоделиСервиса + + ru + Использовать обмен данными в модели сервиса + + + Boolean + + true + + + Managed + diff --git a/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl new file mode 100644 index 000000000..1ed6b0bd5 --- /dev/null +++ b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl @@ -0,0 +1,19 @@ + +Процедура ПередЗаписью(Отказ) + + ДополнительныеСвойства.Вставить("ТекущееЗначение", Константы.ИспользоватьРазделениеПоОбластямДанных.Получить()); + +КонецПроцедуры + +Процедура ПриЗаписи(Отказ) + + Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(НЕ Значение); + + Если ДополнительныеСвойства.ТекущееЗначение <> Значение Тогда + ОбновитьПовторноИспользуемыеЗначения(); + Если Значение Тогда + СтандартныеПодсистемыПереопределяемый.ПриВключенииРазделенияПоОбластямДанных(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ИспользоватьРазделениеПоОбластямДанных.mdo b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ИспользоватьРазделениеПоОбластямДанных.mdo new file mode 100644 index 000000000..cbf049738 --- /dev/null +++ b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ИспользоватьРазделениеПоОбластямДанных.mdo @@ -0,0 +1,20 @@ + + + + + + + + ИспользоватьРазделениеПоОбластямДанных + + ru + Использовать разделение по областям данных + + + Boolean + + true + + + Managed + diff --git a/SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляLinux/КаталогВременныхФайловСообщенийОбменаДляLinux.mdo b/SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляLinux/КаталогВременныхФайловСообщенийОбменаДляLinux.mdo new file mode 100644 index 000000000..d711abea4 --- /dev/null +++ b/SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляLinux/КаталогВременныхФайловСообщенийОбменаДляLinux.mdo @@ -0,0 +1,21 @@ + + + + + + + + КаталогВременныхФайловСообщенийОбменаДляLinux + + ru + Каталог временных файлов сообщений обмена для Linux + + + String + + + true + + + Managed + diff --git a/SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляWindows/ValueManagerModule.bsl b/SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляWindows/ValueManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляWindows/КаталогВременныхФайловСообщенийОбменаДляWindows.mdo b/SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляWindows/КаталогВременныхФайловСообщенийОбменаДляWindows.mdo new file mode 100644 index 000000000..8d31720c6 --- /dev/null +++ b/SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляWindows/КаталогВременныхФайловСообщенийОбменаДляWindows.mdo @@ -0,0 +1,21 @@ + + + + + + + + КаталогВременныхФайловСообщенийОбменаДляWindows + + ru + Каталог временных файлов сообщений обмена для Windows + + + String + + + true + + + Managed + diff --git a/SSL/src/Constants/КонечнаяТочкаМенеджераСервиса/КонечнаяТочкаМенеджераСервиса.mdo b/SSL/src/Constants/КонечнаяТочкаМенеджераСервиса/КонечнаяТочкаМенеджераСервиса.mdo new file mode 100644 index 000000000..1542606cf --- /dev/null +++ b/SSL/src/Constants/КонечнаяТочкаМенеджераСервиса/КонечнаяТочкаМенеджераСервиса.mdo @@ -0,0 +1,20 @@ + + + + + + + + КонечнаяТочкаМенеджераСервиса + + ru + Конечная точка менеджера сервиса + + + ExchangePlanRef.ОбменСообщениями + + true + + + Managed + diff --git a/SSL/src/Constants/КопироватьОбластиДанныхИзЭталонной/КопироватьОбластиДанныхИзЭталонной.mdo b/SSL/src/Constants/КопироватьОбластиДанныхИзЭталонной/КопироватьОбластиДанныхИзЭталонной.mdo new file mode 100644 index 000000000..f3eb59ef6 --- /dev/null +++ b/SSL/src/Constants/КопироватьОбластиДанныхИзЭталонной/КопироватьОбластиДанныхИзЭталонной.mdo @@ -0,0 +1,20 @@ + + + + + + + + КопироватьОбластиДанныхИзЭталонной + + ru + Копировать области данных из эталонной + + + Boolean + + true + + + Managed + diff --git a/SSL/src/Constants/МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания/МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания.mdo b/SSL/src/Constants/МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания/МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания.mdo new file mode 100644 index 000000000..f080d343d --- /dev/null +++ b/SSL/src/Constants/МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания/МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания.mdo @@ -0,0 +1,24 @@ + + + + + + + + МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания + + ru + Максимальная длительность выполнения исполняющего фонового задания + + + Number + + 4 + true + + + true + + + Managed + diff --git a/SSL/src/Constants/МаксимальноеКоличествоИсполняющихФоновыхЗаданий/МаксимальноеКоличествоИсполняющихФоновыхЗаданий.mdo b/SSL/src/Constants/МаксимальноеКоличествоИсполняющихФоновыхЗаданий/МаксимальноеКоличествоИсполняющихФоновыхЗаданий.mdo new file mode 100644 index 000000000..21663f47e --- /dev/null +++ b/SSL/src/Constants/МаксимальноеКоличествоИсполняющихФоновыхЗаданий/МаксимальноеКоличествоИсполняющихФоновыхЗаданий.mdo @@ -0,0 +1,24 @@ + + + + + + + + МаксимальноеКоличествоИсполняющихФоновыхЗаданий + + ru + Максимальное количество исполняющих фоновых заданий + + + Number + + 4 + true + + + true + + + Managed + diff --git a/SSL/src/Constants/МаксимальныйРазмерФайлаОбластиДанных/МаксимальныйРазмерФайлаОбластиДанных.mdo b/SSL/src/Constants/МаксимальныйРазмерФайлаОбластиДанных/МаксимальныйРазмерФайлаОбластиДанных.mdo new file mode 100644 index 000000000..b0e22dd27 --- /dev/null +++ b/SSL/src/Constants/МаксимальныйРазмерФайлаОбластиДанных/МаксимальныйРазмерФайлаОбластиДанных.mdo @@ -0,0 +1,26 @@ + + + + + + + + МаксимальныйРазмерФайлаОбластиДанных + + ru + Максимальный размер файла области данных + + Максимальный размер файла для импорта с диска + + Number + + 10 + + + true + + + 1073741824 + + Managed + diff --git a/SSL/src/Constants/НеИспользоватьРазделениеПоОбластямДанных/НеИспользоватьРазделениеПоОбластямДанных.mdo b/SSL/src/Constants/НеИспользоватьРазделениеПоОбластямДанных/НеИспользоватьРазделениеПоОбластямДанных.mdo new file mode 100644 index 000000000..939bbd657 --- /dev/null +++ b/SSL/src/Constants/НеИспользоватьРазделениеПоОбластямДанных/НеИспользоватьРазделениеПоОбластямДанных.mdo @@ -0,0 +1,20 @@ + + + + + + + + НеИспользоватьРазделениеПоОбластямДанных + + ru + Не использовать разделение по областям данных + + + Boolean + + true + + + Managed + diff --git a/SSL/src/Constants/НомерЗагрузкиПоставляемыхДанных/НомерЗагрузкиПоставляемыхДанных.mdo b/SSL/src/Constants/НомерЗагрузкиПоставляемыхДанных/НомерЗагрузкиПоставляемыхДанных.mdo new file mode 100644 index 000000000..dc36558f3 --- /dev/null +++ b/SSL/src/Constants/НомерЗагрузкиПоставляемыхДанных/НомерЗагрузкиПоставляемыхДанных.mdo @@ -0,0 +1,24 @@ + + + + + + + + НомерЗагрузкиПоставляемыхДанных + + ru + Номер загрузки поставляемых данных + + + Number + + 20 + true + + + true + + + Managed + diff --git a/SSL/src/Constants/ОбщийКаталогВременныхФайлов/ОбщийКаталогВременныхФайлов.mdo b/SSL/src/Constants/ОбщийКаталогВременныхФайлов/ОбщийКаталогВременныхФайлов.mdo new file mode 100644 index 000000000..d6c58551c --- /dev/null +++ b/SSL/src/Constants/ОбщийКаталогВременныхФайлов/ОбщийКаталогВременныхФайлов.mdo @@ -0,0 +1,21 @@ + + + + + + + + ОбщийКаталогВременныхФайлов + + ru + Общий каталог временных файлов + + + String + + + true + + + Managed + diff --git a/SSL/src/Constants/ОбщийКаталогВременныхФайловLinux/ValueManagerModule.bsl b/SSL/src/Constants/ОбщийКаталогВременныхФайловLinux/ValueManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/Constants/ОбщийКаталогВременныхФайловLinux/ОбщийКаталогВременныхФайловLinux.mdo b/SSL/src/Constants/ОбщийКаталогВременныхФайловLinux/ОбщийКаталогВременныхФайловLinux.mdo new file mode 100644 index 000000000..b8b590689 --- /dev/null +++ b/SSL/src/Constants/ОбщийКаталогВременныхФайловLinux/ОбщийКаталогВременныхФайловLinux.mdo @@ -0,0 +1,21 @@ + + + + + + + + ОбщийКаталогВременныхФайловLinux + + ru + Общий каталог временных файлов Linux + + + String + + + true + + + Managed + diff --git a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl index cee74b2c5..4400db18a 100644 --- a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl @@ -1,6 +1,12 @@ -Перем ОграничениеДоступаНаУровнеЗаписейВключено; -Перем ОграничениеДоступаНаУровнеЗаписейИзменено; +Перем ОграничениеДоступаНаУровнеЗаписейВключено; // Флажок изменения значения константы с Ложь на Истина. +// Используется в обработчике события ПриЗаписи. + +Перем ОграничениеДоступаНаУровнеЗаписейИзменено; // Флажок изменения значения константы. +// Используется в обработчике события ПриЗаписи. + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ПередЗаписью(Отказ) diff --git a/SSL/src/Constants/ПараметрыАдминистрированияИБ/ПараметрыАдминистрированияИБ.mdo b/SSL/src/Constants/ПараметрыАдминистрированияИБ/ПараметрыАдминистрированияИБ.mdo index fd47c72ed..d7928f53f 100644 --- a/SSL/src/Constants/ПараметрыАдминистрированияИБ/ПараметрыАдминистрированияИБ.mdo +++ b/SSL/src/Constants/ПараметрыАдминистрированияИБ/ПараметрыАдминистрированияИБ.mdo @@ -10,7 +10,7 @@ ru Параметры администрирования ИБ - Параметры администрирования: ИмяАдминистратораКластера, ПарольАдминистратораКластера, ПортКластераСерверов, ПортАгентаСервера + Параметры администрирования: ИмяАдминистратораИБ, ПарольАдминистратораИБ, ИмяАдминистратораКластера, ПарольАдминистратораКластера, ПортКластераСерверов, ПортАгентаСервера ValueStorage diff --git a/SSL/src/Constants/ПарольПользователяАгентаСервиса/ПарольПользователяАгентаСервиса.mdo b/SSL/src/Constants/ПарольПользователяАгентаСервиса/ПарольПользователяАгентаСервиса.mdo new file mode 100644 index 000000000..abfe20579 --- /dev/null +++ b/SSL/src/Constants/ПарольПользователяАгентаСервиса/ПарольПользователяАгентаСервиса.mdo @@ -0,0 +1,21 @@ + + + + + + + + ПарольПользователяАгентаСервиса + + ru + Пароль пользователя агента сервиса + + + String + + + true + + + Managed + diff --git a/SSL/src/Constants/ПарольСлужебногоПользователяМенеджераСервиса/ПарольСлужебногоПользователяМенеджераСервиса.mdo b/SSL/src/Constants/ПарольСлужебногоПользователяМенеджераСервиса/ПарольСлужебногоПользователяМенеджераСервиса.mdo new file mode 100644 index 000000000..6a34f1311 --- /dev/null +++ b/SSL/src/Constants/ПарольСлужебногоПользователяМенеджераСервиса/ПарольСлужебногоПользователяМенеджераСервиса.mdo @@ -0,0 +1,22 @@ + + + + + + + + ПарольСлужебногоПользователяМенеджераСервиса + + ru + Пароль служебного пользователя менеджера сервиса + + + String + + + true + true + + + Managed + diff --git a/SSL/src/Constants/ПарольСлужебногоПользователяСервисаПоставляемыхДанных/ПарольСлужебногоПользователяСервисаПоставляемыхДанных.mdo b/SSL/src/Constants/ПарольСлужебногоПользователяСервисаПоставляемыхДанных/ПарольСлужебногоПользователяСервисаПоставляемыхДанных.mdo new file mode 100644 index 000000000..6dbbc985c --- /dev/null +++ b/SSL/src/Constants/ПарольСлужебногоПользователяСервисаПоставляемыхДанных/ПарольСлужебногоПользователяСервисаПоставляемыхДанных.mdo @@ -0,0 +1,22 @@ + + + + + + + + ПарольСлужебногоПользователяСервисаПоставляемыхДанных + + ru + Пароль служебного пользователя сервиса поставляемых данных + + + String + + + true + true + + + Managed + diff --git a/SSL/src/Constants/РазмерБлокаПередачиФайла/РазмерБлокаПередачиФайла.mdo b/SSL/src/Constants/РазмерБлокаПередачиФайла/РазмерБлокаПередачиФайла.mdo new file mode 100644 index 000000000..891055bc5 --- /dev/null +++ b/SSL/src/Constants/РазмерБлокаПередачиФайла/РазмерБлокаПередачиФайла.mdo @@ -0,0 +1,28 @@ + + + + + + + + РазмерБлокаПередачиФайла + + ru + Размер блока передачи файла + + + Number + + 3 + true + + + true + + ru + Мб + + + + Managed + diff --git a/SSL/src/Constants/РежимИспользованияИнформационнойБазы/РежимИспользованияИнформационнойБазы.mdo b/SSL/src/Constants/РежимИспользованияИнформационнойБазы/РежимИспользованияИнформационнойБазы.mdo new file mode 100644 index 000000000..1a67967ec --- /dev/null +++ b/SSL/src/Constants/РежимИспользованияИнформационнойБазы/РежимИспользованияИнформационнойБазы.mdo @@ -0,0 +1,20 @@ + + + + + + + + РежимИспользованияИнформационнойБазы + + ru + Режим использования информационной базы + + + EnumRef.РежимыИспользованияИнформационнойБазы + + true + + + Managed + diff --git a/SSL/src/Constants/СообщениеБлокировкиПриОбновленииКонфигурации/СообщениеБлокировкиПриОбновленииКонфигурации.mdo b/SSL/src/Constants/СообщениеБлокировкиПриОбновленииКонфигурации/СообщениеБлокировкиПриОбновленииКонфигурации.mdo new file mode 100644 index 000000000..4ab879ddb --- /dev/null +++ b/SSL/src/Constants/СообщениеБлокировкиПриОбновленииКонфигурации/СообщениеБлокировкиПриОбновленииКонфигурации.mdo @@ -0,0 +1,21 @@ + + + + + + + + СообщениеБлокировкиПриОбновленииКонфигурации + + ru + Сообщение блокировки при обновлении конфигурации + + + String + + + true + + + Managed + diff --git a/SSL/src/Constants/СписокЗапрещенныхРасширенийОбластиДанных/СписокЗапрещенныхРасширенийОбластиДанных.mdo b/SSL/src/Constants/СписокЗапрещенныхРасширенийОбластиДанных/СписокЗапрещенныхРасширенийОбластиДанных.mdo new file mode 100644 index 000000000..163ec46d2 --- /dev/null +++ b/SSL/src/Constants/СписокЗапрещенныхРасширенийОбластиДанных/СписокЗапрещенныхРасширенийОбластиДанных.mdo @@ -0,0 +1,21 @@ + + + + + + + + СписокЗапрещенныхРасширенийОбластиДанных + + ru + Список запрещенных расширений области данных + + + String + + + true + + + Managed + diff --git a/SSL/src/Constants/СписокРасширенийТекстовыхФайлов/СписокРасширенийТекстовыхФайлов.mdo b/SSL/src/Constants/СписокРасширенийТекстовыхФайлов/СписокРасширенийТекстовыхФайлов.mdo new file mode 100644 index 000000000..504b421d6 --- /dev/null +++ b/SSL/src/Constants/СписокРасширенийТекстовыхФайлов/СписокРасширенийТекстовыхФайлов.mdo @@ -0,0 +1,21 @@ + + + + + + + + СписокРасширенийТекстовыхФайлов + + ru + Список расширений текстовых файлов + + + String + + + true + + + Managed + diff --git a/SSL/src/Constants/СписокРасширенийФайловOpenDocumentОбластиДанных/СписокРасширенийФайловOpenDocumentОбластиДанных.mdo b/SSL/src/Constants/СписокРасширенийФайловOpenDocumentОбластиДанных/СписокРасширенийФайловOpenDocumentОбластиДанных.mdo new file mode 100644 index 000000000..3f780724d --- /dev/null +++ b/SSL/src/Constants/СписокРасширенийФайловOpenDocumentОбластиДанных/СписокРасширенийФайловOpenDocumentОбластиДанных.mdo @@ -0,0 +1,21 @@ + + + + + + + + СписокРасширенийФайловOpenDocumentОбластиДанных + + ru + Список расширений файлов OpenDocument + + + String + + + true + + + Managed + diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Form.form b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Form.form index 6686faa6e..aa12742ef 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Form.form @@ -24,7 +24,7 @@ ИнтервалВремениВыполненияРасширеннаяПодсказка - 14 + 26 Label true true @@ -67,7 +67,7 @@ ДекорацияСекРасширеннаяПодсказка - 16 + 28 Label true true @@ -103,7 +103,7 @@ ГруппаИнтервалВремениРасширеннаяПодсказка - 13 + 25 Label true true @@ -120,6 +120,93 @@ Auto + + КоличествоФайловВПорции + 15 + true + true + + true + + + КоличествоФайловВПорции + + + OnChange + КоличествоФайловВПорцииПриИзменении + + + КоличествоФайловВПорцииРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + КоличествоФайловВПорцииКонтекстноеМеню + 16 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + КоличествоФайловСНеизвлеченнымТекстом + 12 + true + true + + true + + + КоличествоФайловСНеизвлеченнымТекстом + + + КоличествоФайловСНеизвлеченнымТекстомРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + КоличествоФайловСНеизвлеченнымТекстомКонтекстноеМеню + 13 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ГруппаСтатуса 6 @@ -137,7 +224,7 @@ None СтатусРасширеннаяПодсказка - 18 + 34 Label true true @@ -161,34 +248,6 @@ true - - ЗапуститьСейчас - 11 - true - true - - true - - false - - ЗапуститьСейчасРасширеннаяПодсказка - 20 - Label - true - true - - Left - - - UsualButton - Form.Command.ЗапуститьСейчас - Normal - Auto - true - true - UserCmds - Auto - true true @@ -204,7 +263,7 @@ ГруппаСтатусаРасширеннаяПодсказка - 17 + 33 Label true true @@ -227,6 +286,84 @@ ФормаКоманднаяПанель -1 + + Старт + 18 + true + true + + true + + + СтартРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Command.Старт + Normal + Auto + true + true + UserCmds + Auto + + + Стоп + 19 + true + true + + true + + + СтопРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Form.Command.Стоп + Normal + Auto + true + true + UserCmds + Auto + + + ИзвлечьТекстИзВсехФайлов + 20 + true + true + + true + + + ИзвлечьТекстИзВсехФайловРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.ИзвлечьВсе + Normal + Auto + true + true + UserCmds + Auto + Закрыть 3 @@ -238,7 +375,7 @@ false ЗакрытьРасширеннаяПодсказка - 12 + 24 Label true true @@ -345,23 +482,124 @@ true - - ЗапуститьСейчас + + КоличествоФайловСНеизвлеченнымТекстом <key>ru</key> - <value>Запустить сейчас</value> + <value>Количество файлов с неизвлеченным текстом</value> - 1 + 5 + + Number + + 7 + + + + true + + + true + + + + КоличествоФайловВПорции + + <key>ru</key> + <value>Количество файлов в одной порции</value> + + 6 + + Number + + 5 + + + + true + + + true + + + + ВключеноИзвлечениеТекста + + <key>ru</key> + <value>Включено извлечение текста</value> + + 7 + + Boolean + + + true + + + true + + + + Старт + + <key>ru</key> + <value>Старт</value> + + 2 ru - Запустить сейчас + Старт true - ЗапуститьСейчас + Старт + + + Auto + Auto + + + Стоп + + <key>ru</key> + <value>Стоп</value> + + 3 + + ru + Стоп + + + true + + + + Стоп + + + Auto + Auto + + + ИзвлечьВсе + + <key>ru</key> + <value>Извлечь все</value> + + 1 + + ru + Извлечь текст из всех файлов + + + true + + + + ИзвлечьВсе Auto diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl index 0bf5346c0..4105b3a80 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl @@ -5,12 +5,22 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ВключеноИзвлечениеТекста = Ложь; + ИнтервалВремениВыполнения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АвтоматическоеИзвлечениеТекстов", "ИнтервалВремениВыполнения"); Если ИнтервалВремениВыполнения = 0 Тогда ИнтервалВремениВыполнения = 60; ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("АвтоматическоеИзвлечениеТекстов", "ИнтервалВремениВыполнения", ИнтервалВремениВыполнения); КонецЕсли; + ФайловыеФункцииПереопределяемый.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(КоличествоФайловСНеизвлеченнымТекстом); + + КоличествоФайловВПорции = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АвтоматическоеИзвлечениеТекстов", "КоличествоФайловВПорции"); + Если КоличествоФайловВПорции = 0 Тогда + КоличествоФайловВПорции = 100; + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("АвтоматическоеИзвлечениеТекстов", "КоличествоФайловВПорции", КоличествоФайловВПорции); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -22,22 +32,20 @@ Возврат; #КонецЕсли - ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата() + ИнтервалВремениВыполнения; - ПодключитьОбработчикОжидания("ИзвлечениеТекстовКлиент", ИнтервалВремениВыполнения); - - ПодключитьОбработчикОжидания("ОбновлениеОбратногоОтсчета", 1); - ОбновлениеОбратногоОтсчета(); - КонецПроцедуры &НаКлиенте Процедура ИнтервалВремениВыполненияПриИзменении(Элемент) ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("АвтоматическоеИзвлечениеТекстов", "ИнтервалВремениВыполнения", ИнтервалВремениВыполнения); - ОтключитьОбработчикОжидания("ИзвлечениеТекстовКлиент"); - ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата() + ИнтервалВремениВыполнения; - ПодключитьОбработчикОжидания("ИзвлечениеТекстовКлиент", ИнтервалВремениВыполнения); - ОбновлениеОбратногоОтсчета(); + + Если ВключеноИзвлечениеТекста Тогда + ОтключитьОбработчикОжидания("ИзвлечениеТекстовКлиентОбработчик"); + // здесь ТекущаяДата() не пишется в базу - только на клиенте показывается в информационных целях - поэтому заменять на ТекущаяДатаСеанса не надо + ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата() + ИнтервалВремениВыполнения; + ПодключитьОбработчикОжидания("ИзвлечениеТекстовКлиентОбработчик", ИнтервалВремениВыполнения); + ОбновлениеОбратногоОтсчета(); + КонецЕсли; КонецПроцедуры @@ -45,13 +53,6 @@ // Обработчики команд формы // -&НаКлиенте -Процедура ЗапуститьСейчас(Команда) -#Если НЕ ВебКлиент Тогда - ИзвлечениеТекстовКлиент(); -#КонецЕсли -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Служебные // @@ -68,6 +69,7 @@ &НаКлиенте Процедура ОбновлениеОбратногоОтсчета() + // здесь ТекущаяДата() не пишется в базу - только на клиенте показывается в информационных целях - поэтому заменять на ТекущаяДатаСеанса не надо Осталось = ПрогнозируемоеВремяНачалаИзвлечения - ТекущаяДата(); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -83,18 +85,32 @@ КонецПроцедуры +&НаКлиенте +Процедура ИзвлечениеТекстовКлиентОбработчик() + +#Если НЕ ВебКлиент Тогда + ИзвлечениеТекстовКлиент(); +#КонецЕсли + +КонецПроцедуры + #Если НЕ ВебКлиент Тогда // Извлекает текст из файлов на диске на клиенте &НаКлиенте -Процедура ИзвлечениеТекстовКлиент() +Процедура ИзвлечениеТекстовКлиент(РазмерПорции = Неопределено) + // здесь ТекущаяДата() не пишется в базу - только на клиенте показывается в информационных целях - поэтому заменять на ТекущаяДатаСеанса не надо ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата() + ИнтервалВремениВыполнения; Состояние(НСтр("ru = 'Начато извлечение текста'")); Попытка - МассивФайлов = ПолучитьФайлыДляИзвлеченияТекста(); + РазмерПорцииТекущий = КоличествоФайловВПорции; + Если РазмерПорции <> Неопределено Тогда + РазмерПорцииТекущий = РазмерПорции; + КонецЕсли; + МассивФайлов = ПолучитьФайлыДляИзвлеченияТекста(РазмерПорцииТекущий); Если МассивФайлов.Количество() = 0 Тогда Состояние(НСтр("ru = 'Нет файлов для извлечения текста'")); @@ -106,14 +122,35 @@ Расширение = МассивФайлов[Индекс].Расширение; НаименованиеФайла = МассивФайлов[Индекс].Наименование; ФайлИлиВерсияФайла = МассивФайлов[Индекс].Ссылка; + Кодировка = МассивФайлов[Индекс].Кодировка; - АдресФайла = ФайловыеФункцииПереопределяемый.ПолучитьНавигационнуюСсылкуФайла(ФайлИлиВерсияФайла, УникальныйИдентификатор); + Попытка + + АдресФайла = ФайловыеФункцииПереопределяемый.ПолучитьНавигационнуюСсылкуФайла(ФайлИлиВерсияФайла, УникальныйИдентификатор); + + ИмяСРасширением = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(НаименованиеФайла, Расширение); + Прогресс = Индекс * 100 / МассивФайлов.Количество(); + Состояние(НСтр("ru = 'Идет извлечение текста файла'"), Прогресс, ИмяСРасширением); + + ФайловыеФункцииКлиент.ИзвлечьТекстВерсии(ФайлИлиВерсияФайла, АдресФайла, Расширение, + УникальныйИдентификатор, Кодировка); - ИмяСРасширением = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(НаименованиеФайла, Расширение); - Прогресс = Индекс * 100 / МассивФайлов.Количество(); - Состояние(НСтр("ru = 'Идет извлечение текста файла'"), Прогресс, ИмяСРасширением); + Исключение + + ОписаниеОшибкиИнфо = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Во время извлечения текста из файла ""%1"" произошла неизвестная ошибка.'"), + Строка(ФайлИлиВерсияФайла)); + + ТекстСообщения = ТекстСообщения + Строка(ОписаниеОшибкиИнфо); + + Состояние(ТекстСообщения); + + РезультатИзвлечения = "ИзвлечьНеУдалось"; + ЗаписьОшибкиИзвлечения(ФайлИлиВерсияФайла, РезультатИзвлечения, ТекстСообщения); + + КонецПопытки; - ФайловыеФункцииКлиент.ИзвлечьТекстВерсии(ФайлИлиВерсияФайла, АдресФайла, Расширение, УникальныйИдентификатор); КонецЦикла; ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -137,22 +174,91 @@ КонецПопытки; + ФайловыеФункцииПереопределяемый.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(КоличествоФайловСНеизвлеченнымТекстом); + КонецПроцедуры #КонецЕсли &НаСервереБезКонтекста -Функция ПолучитьФайлыДляИзвлеченияТекста() +Процедура ЗаписьОшибкиИзвлечения(ФайлИлиВерсияФайла, РезультатИзвлечения, ТекстСообщения) + + ФайловыеФункции.ЗаписатьРезультатИзвлеченияТекста(ФайлИлиВерсияФайла, РезультатИзвлечения, ""); + + // запись в журнал регистрации + ЗаписьЖурналаРегистрацииСервер(ТекстСообщения); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПолучитьФайлыДляИзвлеченияТекста(КоличествоФайловВПорции) Результат = Новый Массив; - ТекстЗапроса = Неопределено; - ФайловыеФункцииПереопределяемый.ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса); - Запрос = Новый Запрос(ТекстЗапроса); + + Запрос = Новый Запрос; + ПолучитьВсеФайлы = (КоличествоФайловВПорции = 0); + ФайловыеФункцииПереопределяемый.ПолучитьТекстЗапросаДляИзвлеченияТекста(Запрос.Текст, ПолучитьВсеФайлы); Для Каждого Строка Из Запрос.Выполнить().Выгрузить() Цикл - Результат.Добавить(Новый Структура("Ссылка, Расширение, Наименование", - Строка.Ссылка, Строка.Расширение, Строка.Наименование)); + + Кодировка = РаботаСФайламиВызовСервера.ПолучитьКодировкуВерсииФайла(Строка.Ссылка); + + Результат.Добавить(Новый Структура("Ссылка, Расширение, Наименование, Кодировка", + Строка.Ссылка, Строка.Расширение, Строка.Наименование, Кодировка)); + КонецЦикла; Возврат Результат; КонецФункции + +&НаКлиенте +Процедура Старт(Команда) + + ВключеноИзвлечениеТекста = Истина; + + // здесь ТекущаяДата() не пишется в базу - только на клиенте показывается в информационных целях - поэтому заменять на ТекущаяДатаСеанса не надо + ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата(); + ПодключитьОбработчикОжидания("ИзвлечениеТекстовКлиентОбработчик", ИнтервалВремениВыполнения); + +#Если НЕ ВебКлиент Тогда + ИзвлечениеТекстовКлиентОбработчик(); +#КонецЕсли + + ПодключитьОбработчикОжидания("ОбновлениеОбратногоОтсчета", 1); + ОбновлениеОбратногоОтсчета(); + +КонецПроцедуры + +&НаКлиенте +Процедура Стоп(Команда) + ВыполнитьСтоп(); +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьСтоп() + ОтключитьОбработчикОжидания("ИзвлечениеТекстовКлиентОбработчик"); + ОтключитьОбработчикОжидания("ОбновлениеОбратногоОтсчета"); + Статус = ""; + ВключеноИзвлечениеТекста = Ложь; +КонецПроцедуры + +&НаКлиенте +Процедура ИзвлечьВсе(Команда) + + #Если НЕ ВебКлиент Тогда + КоличествоФайловСНеизвлеченнымТекстомДоНачалаОперации = КоличествоФайловСНеизвлеченнымТекстом; + Статус = ""; + РазмерПорции = 0; // извлечь все + ИзвлечениеТекстовКлиент(РазмерПорции); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Завершено извлечение текста из всех файлов с неизвлеченным текстом. Обработано файлов: %1.'"), + КоличествоФайловСНеизвлеченнымТекстомДоНачалаОперации); + Предупреждение(ТекстСообщения); + #КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура КоличествоФайловВПорцииПриИзменении(Элемент) + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("АвтоматическоеИзвлечениеТекстов", "КоличествоФайловВПорции", КоличествоФайловВПорции); +КонецПроцедуры diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Forms/Форма/Form.form b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Forms/Форма/Form.form new file mode 100644 index 000000000..51060b62b --- /dev/null +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Forms/Форма/Form.form @@ -0,0 +1,375 @@ + + + + ГруппаИнтервалВремени + 8 + + ИнтервалВремениВыполнения + 1 + + <key>ru</key> + <value>Интервал времени выполнения</value> + + true + true + + true + + + ИнтервалВремениВыполнения + + + OnChange + ИнтервалВремениВыполненияПриИзменении + + + ИнтервалВремениВыполненияРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + ИнтервалВремениВыполненияКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ДекорацияСек + 9 + + <key>ru</key> + <value>(сек)</value> + + true + true + + true + + + ДекорацияСекРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ДекорацияСекКонтекстноеМеню + 10 + true + + Label + true + true + false + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа интервал времени</value> + + + ru + Группа интервал времени + + + ГруппаИнтервалВремениРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаСтатуса + 6 + + Статус + 4 + true + true + + true + + + Статус + + None + + СтатусРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + СтатусКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + 1 + true + + + + ЗапуститьСейчас + 11 + true + true + + true + + false + + ЗапуститьСейчасРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗапуститьСейчас + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа статуса</value> + + + ru + Группа статуса + + + ГруппаСтатусаРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + Закрыть + 3 + true + true + + true + + false + + ЗакрытьРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + Form.StandardCommand.Close + true + true + true + UserCmds + Auto + + Right + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + 50 + DontBlock + true + true + true + Vertical + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных + + + true + + + true + +
    true
    +
    + + ИнтервалВремениВыполнения + + <key>ru</key> + <value>Интервал времени выполнения</value> + + 2 + + Number + + 5 + + + + true + + + true + + + + Статус + + <key>ru</key> + <value>Статус</value> + + 3 + + String + + + + true + + + true + + + + ПрогнозируемоеВремяНачалаИзвлечения + + <key>ru</key> + <value>Прогнозируемое время начала извлечения</value> + + 4 + + Date + + + + true + + + true + + + + ЗапуститьСейчас + + <key>ru</key> + <value>Запустить сейчас</value> + + 1 + + ru + Запустить сейчас + + + true + + + + ЗапуститьСейчас + + + Auto + Auto + + + + + + +
    diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Forms/Форма/Module.bsl new file mode 100644 index 000000000..b415476c5 --- /dev/null +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Forms/Форма/Module.bsl @@ -0,0 +1,271 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ИнтервалВремениВыполнения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АвтоматическоеИзвлечениеТекстов", "ИнтервалВремениВыполнения"); + Если ИнтервалВремениВыполнения = 0 Тогда + ИнтервалВремениВыполнения = 60; + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("АвтоматическоеИзвлечениеТекстов", "ИнтервалВремениВыполнения", ИнтервалВремениВыполнения); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + +#Если ВебКлиент Тогда + Отказ = Истина; + Предупреждение(НСтр("ru = 'В Веб-клиенте извлечение текстов не поддерживается.'")); + Возврат; +#КонецЕсли + + // здесь ТекущаяДата() не пишется в базу - только на клиенте показывается в информационных целях - поэтому заменять на ТекущаяДатаСеанса не надо + ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата() + ИнтервалВремениВыполнения; + ПодключитьОбработчикОжидания("ИзвлечениеТекстовКлиентОбработчик", ИнтервалВремениВыполнения); + + ПодключитьОбработчикОжидания("ОбновлениеОбратногоОтсчета", 1); + ОбновлениеОбратногоОтсчета(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ИнтервалВремениВыполненияПриИзменении(Элемент) + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("АвтоматическоеИзвлечениеТекстов", "ИнтервалВремениВыполнения", ИнтервалВремениВыполнения); + ОтключитьОбработчикОжидания("ИзвлечениеТекстовКлиентОбработчик"); + + // здесь ТекущаяДата() не пишется в базу - только на клиенте показывается в информационных целях - поэтому заменять на ТекущаяДатаСеанса не надо + ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата() + ИнтервалВремениВыполнения; + + ПодключитьОбработчикОжидания("ИзвлечениеТекстовКлиентОбработчик", ИнтервалВремениВыполнения); + ОбновлениеОбратногоОтсчета(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ЗапуститьСейчас(Команда) +#Если НЕ ВебКлиент Тогда + ИзвлечениеТекстовКлиентОбработчик(); +#КонецЕсли +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервереБезКонтекста +Процедура ЗаписьЖурналаРегистрацииСервер(ТекстСообщения) + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Извлечение текста файла'"), УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщения); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПолучитьВсеИспользуемыеОбластиДанных() + + МассивОбластейДанных = Новый Массив; + + Запрос = Новый Запрос; + + Запрос.Текст = "ВЫБРАТЬ + | ОбластиДанных.ОбластьДанных КАК ОбластьДанных + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + |ГДЕ + | ОбластиДанных.Статус = &Статус"; + + Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыОбластейДанных.Используется); + + Для Каждого Строка Из Запрос.Выполнить().Выгрузить() Цикл + МассивОбластейДанных.Добавить(Строка.ОбластьДанных); + КонецЦикла; + + Возврат МассивОбластейДанных; + +КонецФункции + +// Обновляет обратный отсчет +// +&НаКлиенте +Процедура ОбновлениеОбратногоОтсчета() + + // здесь ТекущаяДата() не пишется в базу - только на клиенте показывается в информационных целях - поэтому заменять на ТекущаяДатаСеанса не надо + Осталось = ПрогнозируемоеВремяНачалаИзвлечения - ТекущаяДата(); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'До начала извлечения текстов осталось %1 сек'"), + Осталось); + + Если Осталось <= 1 Тогда + ТекстСообщения = ""; + КонецЕсли; + + ИнтервалВремениВыполнения = Элементы.ИнтервалВремениВыполнения.ТекстРедактирования; + Статус = ТекстСообщения; + +КонецПроцедуры + +#Если НЕ ВебКлиент Тогда + +// Извлекает текст из файлов на диске на клиенте. +// +&НаКлиенте +Процедура ИзвлечениеТекстовКлиентОбработчик() + ИзвлечениеТекстовКлиент(); +КонецПроцедуры + +// Извлекает текст из файлов на диске на клиенте. +// +&НаКлиенте +Процедура ИзвлечениеТекстовКлиент() + + МассивОбластейДанных = ПолучитьВсеИспользуемыеОбластиДанных(); + + Попытка + + ПолноеКоличествоФайловСНеизвлеченнымТекстом = 0; + ЧислоНеизвлеченныхДляОбластей = Новый Соответствие; + + // сперва подсчитаем количество файлов с неизвлеченным текстом во всех областях + Для Каждого Область Из МассивОбластейДанных Цикл + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Область); + КоличествоФайловСНеизвлеченнымТекстом = 0; + ФайловыеФункцииПереопределяемый.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(КоличествоФайловСНеизвлеченнымТекстом); + ПолноеКоличествоФайловСНеизвлеченнымТекстом = ПолноеКоличествоФайловСНеизвлеченнымТекстом + КоличествоФайловСНеизвлеченнымТекстом; + ЧислоНеизвлеченныхДляОбластей.Вставить(Область, КоличествоФайловСНеизвлеченнымТекстом); + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + + КонецЦикла; + + КоличествоВПорции = 100; + + + // для каждой области вызовем извлечение + КоличествоОбластей = МассивОбластейДанных.Количество(); + Для Каждого Область Из МассивОбластейДанных Цикл + + ЧислоНеизвлеченных = ЧислоНеизвлеченныхДляОбластей.Получить(Область); + Если ЧислоНеизвлеченных <> Неопределено И ЧислоНеизвлеченных <> 0 Тогда + + РазмерПорцииДляОбласти = Окр((ЧислоНеизвлеченных / ПолноеКоличествоФайловСНеизвлеченнымТекстом) * КоличествоВПорции); + Если РазмерПорцииДляОбласти = 0 Тогда + РазмерПорцииДляОбласти = 1; + КонецЕсли; + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Область); + ИзвлечениеТекстовОднойОбластиДанных(РазмерПорцииДляОбласти); + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + КонецЕсли; + + КонецЦикла; + + // возвращаемся в неразделенный режим + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + + Исключение + + // возвращаемся в неразделенный режим + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +// Извлекает текст из файлов на диске на клиенте. +// +// Параметры: +// РазмерПорции - Число - Количество файлов в порции. +// +&НаКлиенте +Процедура ИзвлечениеТекстовОднойОбластиДанных(РазмерПорции = Неопределено) + + // здесь ТекущаяДата() не пишется в базу - только на клиенте показывается в информационных целях - поэтому заменять на ТекущаяДатаСеанса не надо + ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата() + ИнтервалВремениВыполнения; + + Состояние(НСтр("ru = 'Начато извлечение текста'")); + + Попытка + + РазмерПорцииТекущий = 100; + Если РазмерПорции <> Неопределено Тогда + РазмерПорцииТекущий = РазмерПорции; + КонецЕсли; + + МассивФайлов = ПолучитьФайлыДляИзвлеченияТекста(РазмерПорцииТекущий); + + Если МассивФайлов.Количество() = 0 Тогда + Состояние(НСтр("ru = 'Нет файлов для извлечения текста'")); + Возврат; + КонецЕсли; + + Для Индекс = 0 По МассивФайлов.Количество() - 1 Цикл + + Расширение = МассивФайлов[Индекс].Расширение; + ФайлИлиВерсияФайла = МассивФайлов[Индекс].Ссылка; + + АдресФайла = ФайловыеФункцииПереопределяемый.ПолучитьНавигационнуюСсылкуФайла(ФайлИлиВерсияФайла, УникальныйИдентификатор); + + Прогресс = Индекс * 100 / МассивФайлов.Количество(); + Состояние(НСтр("ru = 'Идет извлечение текста файла'"), Прогресс, Строка(ФайлИлиВерсияФайла)); + + ФайловыеФункцииКлиент.ИзвлечьТекстВерсии(ФайлИлиВерсияФайла, АдресФайла, Расширение, УникальныйИдентификатор); + КонецЦикла; + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Извлечение текста завершено. Обработано файлов: %1'"), + МассивФайлов.Количество()); + Состояние(ТекстСообщения); + + Исключение + + ОписаниеОшибкиИнфо = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Во время извлечения текста из файла ""%1"" произошла неизвестная ошибка.'"), + Строка(ФайлИлиВерсияФайла)); + + ТекстСообщения = ТекстСообщения + Строка(ОписаниеОшибкиИнфо); + + Состояние(ТекстСообщения); + + // запись в журнал регистрации + ЗаписьЖурналаРегистрацииСервер(ТекстСообщения); + + КонецПопытки; + +КонецПроцедуры + +#КонецЕсли + +&НаСервереБезКонтекста +Функция ПолучитьФайлыДляИзвлеченияТекста(КоличествоФайловВПорции) + + Результат = Новый Массив; + + Запрос = Новый Запрос; + ПолучитьВсеФайлы = (КоличествоФайловВПорции = 0); + ФайловыеФункцииПереопределяемый.ПолучитьТекстЗапросаДляИзвлеченияТекста(Запрос.Текст, ПолучитьВсеФайлы); + + Для Каждого Строка Из Запрос.Выполнить().Выгрузить() Цикл + + Результат.Добавить(Новый Структура("Ссылка, Расширение", Строка.Ссылка, Строка.Расширение)); + + // если превысили нужное количество результатов, выходим + Если КоличествоФайловВПорции <> 0 И Результат.Количество() >= КоличествоФайловВПорции Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Help/ru.html b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Help/ru.html new file mode 100644 index 000000000..b717d660e --- /dev/null +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Help/ru.html @@ -0,0 +1,3 @@ + +

    Если один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены файлы, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены полнотекстовым поиском по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows нужно запустить тонкий или толстый клиент, и на нем открыть обработку «Автоматическое извлечение текстов». Эта обработка в автоматическом режиме будет извлекать текст из файлов. По умолчанию интервал времени выполнения равен 60 секундам.

    +

    См. также: Общая информация о формах.

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных.mdo b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных.mdo new file mode 100644 index 000000000..ab33057be --- /dev/null +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных.mdo @@ -0,0 +1,28 @@ + + + + + + + АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных + + ru + Автоматическое извлечение текстов для всех областей данных + + true + DataProcessor.АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных.Form.Форма + + + ru + + + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Form.form b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Form.form index 55d63a0a5..9a434cf6a 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Form.form +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Form.form @@ -27,18 +27,18 @@ SortListDesc Пользователь - 4 + 36 true true true - СписокПользователей.ИмяПользователя + СписокПользователей.Пользователь ПользовательРасширеннаяПодсказка - 54 + 62 Label true true @@ -48,11 +48,54 @@ ПользовательКонтекстноеМеню + 37 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПолноеИмяПользователя + 4 + + <key>ru</key> + <value>Полное имя пользователя</value> + + true + + true + + + СписокПользователей.ИмяПользователя + + + ПолноеИмяПользователяРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + ПолноеИмяПользователяКонтекстноеМеню 5 true InputField - true Enter true Left @@ -83,7 +126,7 @@ ПриложениеРасширеннаяПодсказка - 56 + 66 Label true true @@ -97,7 +140,6 @@ true InputField - true Enter true Left @@ -128,7 +170,7 @@ НачалоРаботыРасширеннаяПодсказка - 58 + 68 Label true true @@ -142,7 +184,6 @@ true InputField - true Enter true Left @@ -173,7 +214,7 @@ КомпьютерРасширеннаяПодсказка - 60 + 70 Label true true @@ -187,7 +228,6 @@ true InputField - true Enter true Left @@ -218,7 +258,7 @@ СеансРасширеннаяПодсказка - 62 + 72 Label true true @@ -232,7 +272,6 @@ true InputField - true Enter true Left @@ -250,6 +289,47 @@ Normal + + СписокПользователейРазделениеДанных + 34 + true + true + + true + + + СписокПользователей.РазделениеДанных + + + СписокПользователейРазделениеДанныхРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + + СписокПользователейРазделениеДанныхКонтекстноеМеню + 35 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + None СписокПользователейКоманднаяПанель @@ -263,10 +343,10 @@ СписокПользователейСтрокаПоиска - 45 + 53 СписокПользователейСтрокаПоискаРасширеннаяПодсказка - 47 + 55 Label true true @@ -276,7 +356,7 @@ СписокПользователейСтрокаПоискаКонтекстноеМеню - 46 + 54 true СписокПользователей @@ -286,10 +366,10 @@ СписокПользователейСостояниеПросмотра - 48 + 56 СписокПользователейСостояниеПросмотраРасширеннаяПодсказка - 50 + 58 Label true true @@ -299,7 +379,7 @@ СписокПользователейСостояниеПросмотраКонтекстноеМеню - 49 + 57 true ViewStatusAddition @@ -310,10 +390,10 @@ СписокПользователейУправлениеПоиском - 51 + 59 СписокПользователейУправлениеПоискомРасширеннаяПодсказка - 53 + 61 Label true true @@ -323,7 +403,7 @@ СписокПользователейУправлениеПоискомКонтекстноеМеню - 52 + 60 true SearchControlAddition @@ -334,7 +414,7 @@ СписокПользователейРасширеннаяПодсказка - 44 + 52 Label true true @@ -356,7 +436,7 @@ false ЖурналРегистрацииКонтекстРасширеннаяПодсказка - 41 + 49 Label true true @@ -373,7 +453,7 @@ Auto - РазорватьСоединениеКонтекст + ЗавершитьСеансКонтекст 32 true true @@ -382,8 +462,8 @@ false - РазорватьСоединениеКонтекстРасширеннаяПодсказка - 42 + ЗавершитьСеансКонтекстРасширеннаяПодсказка + 50 Label true true @@ -410,7 +490,7 @@ false ОбновитьКонтекстРасширеннаяПодсказка - 43 + 51 Label true true @@ -437,6 +517,7 @@ true + true true 80 true @@ -451,7 +532,6 @@ AutoUse true true - false Auto Auto true @@ -484,7 +564,7 @@ КоличествоАктивныхПользователейРасширеннаяПодсказка - 72 + 84 Label true true @@ -524,7 +604,7 @@ ОткрытьПользователяРасширеннаяПодсказка - 34 + 40 Label true true @@ -541,26 +621,17 @@ Auto - РазорватьСеанс + ЗавершитьСеанс 31 true true - - Role.ИзменениеУчастниковГруппДоступа - - - Role.РедактированиеРеквизитовОбъектов - - - true - Role.ПолныеПрава - + true false - РазорватьСеансРасширеннаяПодсказка - 35 + ЗавершитьСеансРасширеннаяПодсказка + 41 Label true true @@ -587,7 +658,7 @@ false ЖурналРегистрацииРасширеннаяПодсказка - 36 + 42 Label true true @@ -612,6 +683,58 @@ Auto + + Найти + 38 + true + true + + true + + + НайтиРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Form.Item.СписокПользователей.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ОтменитьПоиск + 39 + true + true + + true + + + ОтменитьПоискРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Form.Item.СписокПользователей.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + СортировкаПоВозрастанию 26 @@ -623,7 +746,7 @@ false СортировкаПоВозрастаниюРасширеннаяПодсказка - 37 + 45 Label true true @@ -659,7 +782,7 @@ false СортировкаПоУбываниюРасширеннаяПодсказка - 38 + 46 Label true true @@ -695,7 +818,7 @@ false ОбновитьРасширеннаяПодсказка - 39 + 47 Label true true @@ -744,7 +867,7 @@ false ПараметрыАдминистрированияИнформационнойБазыРасширеннаяПодсказка - 40 + 48 Label true true @@ -985,6 +1108,27 @@ true + + РазделениеДанных + + <key>ru</key> + <value>Разделение данных</value> + + 10 + + String + + + + + true + Role.ПолныеПрава + + + + true + + КоличествоАктивныхПользователей @@ -1178,7 +1322,14 @@ Завершить сеанс - true + + true + Role.ПолныеПрава + + + true + Role.УдалитьПолныеПраваОбластиДанных + CommonPicture.РазорватьСоединение diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Help/ru.html b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Help/ru.html index 94d85363c..817d34070 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Help/ru.html @@ -1,4 +1,4 @@

    Активные пользователи - это пользователи, которые сейчас работают с информационной базой. В этом списке отображаются не только пользователи, работающие с информационной базой при помощи приложений "Тонкий клиент", "Веб-клиент" или "Конфигуратор", но и такие пользователи как "COM-соединение", "WS-соединение", "Фоновое задание" и т.п.

    -

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

    -

    В клиент-серверном режиме работы на форме доступна команда "Разорвать соединение". Параметры соединения с сервером 1С:Предприятие можно установить используя команду "Параметры администрирования информационной базы" см. меню "Все действия".

    \ No newline at end of file +

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

    +

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

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Module.bsl b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Module.bsl index a5bcc6e96..26dcb10e2 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Module.bsl +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Module.bsl @@ -1,6 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы, элементов формы и команд формы +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -9,12 +8,17 @@ УсловноеОформление.Элементы[0].Отбор.Элементы[0].ПравоеЗначение = НомерСеансаИнформационнойБазы; Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - Если Элементы.Найти("РазорватьСеанс") <> Неопределено Тогда - Элементы.РазорватьСеанс.Видимость = Ложь; + Если Элементы.Найти("ЗавершитьСеанс") <> Неопределено Тогда + Элементы.ЗавершитьСеанс.Видимость = Ложь; + Элементы.ЗавершитьСеансКонтекст.Видимость = Ложь; КонецЕсли; Если Элементы.Найти("ПараметрыАдминистрированияИнформационнойБазы") <> Неопределено Тогда Элементы.ПараметрыАдминистрированияИнформационнойБазы.Видимость = Ложь; КонецЕсли; + Иначе + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Элементы.ПараметрыАдминистрированияИнформационнойБазы.Видимость = Ложь; + КонецЕсли; КонецЕсли; ИмяКолонкиСортировки = "НачалоРаботы"; @@ -23,6 +27,21 @@ КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ТАБЛИЦЫ СписокПользователей + +&НаКлиенте +Процедура СписокПользователейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + ОткрытьПользователяИзСписка(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ЗавершитьСеанс(Команда) @@ -31,7 +50,7 @@ НомерСеансаДляЗавершения = Элементы.СписокПользователей.ТекущиеДанные.Сеанс; Если НомерСеансаДляЗавершения = НомерСеансаИнформационнойБазы Тогда - Предупреждение(НСтр("ru = 'Текущий сеанс нельзя завершать.'")); + Предупреждение(НСтр("ru = 'Невозможно завершить текущий сеанс. Для выхода из программы можно закрыть главное окно программы.'")); Возврат; КонецЕсли; @@ -94,11 +113,6 @@ ОткрытьПользователяИзСписка(); КонецПроцедуры -&НаКлиенте -Процедура СписокПользователейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ОткрытьПользователяИзСписка(); -КонецПроцедуры - &НаКлиенте Процедура ПараметрыАдминистрированияИнформационнойБазы(Команда) @@ -106,6 +120,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаКлиенте Процедура ЗаполнитьСписок() @@ -153,6 +170,8 @@ СписокПользователей.Очистить(); + Пользователи.НайтиНеоднозначныхПользователейИБ(); + СеансыИнформационнойБазы = ПолучитьСеансыИнформационнойБазы(); Для Каждого СеансИБ Из СеансыИнформационнойБазы Цикл @@ -165,9 +184,18 @@ СтрПользователя.Соединение = СеансИБ.НомерСоединения; Если СеансИБ.Пользователь <> Неопределено Тогда + СтрПользователя.Пользователь = СеансИБ.Пользователь.Имя; СтрПользователя.ИмяПользователя = СеансИБ.Пользователь.ПолноеИмя; - СтрПользователя.ПользовательСсылка = НайтиСсылкуПоИдентификаторуПользователя(СеансИБ.Пользователь.УникальныйИдентификатор); + СтрПользователя.ПользовательСсылка = + НайтиСсылкуПоИдентификаторуПользователя(СеансИБ.Пользователь.УникальныйИдентификатор); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + + СтрПользователя.РазделениеДанных = ЗначенияРазделителейДанныхВСтроку(СеансИБ.Пользователь.РазделениеДанных); + КонецЕсли; + Иначе СтрПользователя.Пользователь = ""; СтрПользователя.ИмяПользователя = ""; @@ -178,6 +206,7 @@ Иначе СтрПользователя.НомерРисункаПользователя = 1; КонецЕсли; + КонецЦикла; КоличествоАктивныхПользователей = СеансыИнформационнойБазы.Количество(); @@ -185,8 +214,45 @@ КонецПроцедуры +&НаСервере +Функция ЗначенияРазделителейДанныхВСтроку(РазделениеДанных) + + Результат = ""; + Значение = ""; + Если РазделениеДанных.Свойство("ОбластьДанных", Значение) Тогда + Результат = Строка(Значение); + КонецЕсли; + + ЕстьДругиеРазделители = Ложь; + Для каждого Разделитель Из РазделениеДанных Цикл + Если Разделитель.Ключ = "ОбластьДанных" Тогда + Продолжить; + КонецЕсли; + Если Не ЕстьДругиеРазделители Тогда + Если Не ПустаяСтрока(Результат) Тогда + Результат = Результат + " "; + КонецЕсли; + Результат = Результат + "("; + КонецЕсли; + Результат = Результат + Строка(Разделитель.Значение); + ЕстьДругиеРазделители = Истина; + КонецЦикла; + Если ЕстьДругиеРазделители Тогда + Результат = Результат + ")"; + КонецЕсли; + Возврат Результат; + +КонецФункции + +&НаСервере Функция НайтиСсылкуПоИдентификаторуПользователя(Идентификатор) + // Нет доступа к разделенному справочнику из неразделенного сеанса. + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Неопределено; + КонецЕсли; + Запрос = Новый Запрос; ШаблонТекстаЗапроса = "ВЫБРАТЬ @@ -247,4 +313,3 @@ КонецЕсли; КонецПроцедуры - diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html b/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html index 4ecbb52e1..69ebacbb5 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html +++ b/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html @@ -2,4 +2,4 @@

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

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

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

    -

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

    \ No newline at end of file +

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

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/ConditionalAppearance.dcssca new file mode 100644 index 000000000..abb01b3d2 --- /dev/null +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/ConditionalAppearance.dcssca @@ -0,0 +1,23 @@ + + + + + + НачальныйСтатусЗапретаРаботыПользователей + + + + + НачальныйСтатусЗапретаРаботыПользователей + Equal + true + + + + + ЦветТекста + style:ПоясняющийОшибкуТекст + + + + diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Form.form b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Form.form new file mode 100644 index 000000000..cf458c2af --- /dev/null +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Form.form @@ -0,0 +1,1445 @@ + + + + ГруппаОшибка + 68 + + ДекорацияОшибка + 69 + true + true + + true + + + ДекорацияОшибкаРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + + ДекорацияОшибкаКонтекстноеМеню + 70 + true + + 5 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + Группа + 77 + + ТекстОшибки + 71 + + <key>ru</key> + <value>Текст ошибки</value> + + true + true + + true + + + ТекстОшибкиРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + + ТекстОшибкиКонтекстноеМеню + 72 + true + + Label + 45 + true + 2 + true + true + + Left + Top + + + + ГруппаПараметры + 79 + + НадписьПараметры + 80 + + <key>ru</key> + <value>Возможно не настроены параметры администрирования информационной базы.</value> + + true + true + + true + + + НадписьПараметрыРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + НадписьПараметрыКонтекстноеМеню + 81 + true + + Label + true + true + true + false + + Left + 2 + + + + Настроить + 82 + + <key>ru</key> + <value>Настроить</value> + + true + true + + true + + + НастроитьРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + UsualButton + Form.Command.ПараметрыАдминистрированияИнформационнойБазы + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ГруппаПараметрыРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаComcntr + 73 + + НадписьОбновитьВерсиюКомпоненты + 74 + + <key>ru</key> + <value>При ошибке версии компоненты "comcntr", следует выполнить ее перерегистрацию (потребуется перезапуск сервера).</value> + + true + true + + true + + + ru + Возможно необходимо обновить версию компоненты "comcntr". При этом потребуется перезапустить сеанс 1С. Для этого нажмите здесь + + + НадписьОбновитьВерсиюКомпонентыРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + НадписьОбновитьВерсиюКомпонентыКонтекстноеМеню + 75 + true + + Label + true + true + true + false + + Left + 2 + + + true + true + + true + + + ГруппаComcntrРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + ГруппаРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа ошибка</value> + + + ru + Группа ошибка + + + ГруппаОшибкаРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + UsualGroup + + Auto + StrongSeparation + true + true + Auto + Auto + + + + ГруппаРежим + 46 + + СтраницаНастройки + 47 + + ГруппаСтатусЗапретаРаботыПользователей + 78 + + НачальныйСтатусЗапретаРаботыПользователей + 64 + true + true + + true + + + НачальныйСтатусЗапретаРаботыПользователей + + + НачальныйСтатусЗапретаРаботыПользователейРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + + НачальныйСтатусЗапретаРаботыПользователейКонтекстноеМеню + 65 + true + + LabelField + Left + Enter + true + Left + true + + true + true + true + + ru + БЛ='работа пользователей разрешена'; БИ='работа пользователей временно запрещена' + + + + true + true + + true + + + ГруппаСтатусЗапретаРаботыПользователейРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + СообщениеДляПользователей + 60 + true + true + + true + + + Объект.СообщениеДляПользователей + + + СообщениеДляПользователейРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + + СообщениеДляПользователейКонтекстноеМеню + 61 + true + + InputField + Enter + true + Left + true + Left + + 20 + true + 2 + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ГруппаПериодБлокировки + 18 + + НачалоБлокировки + 4 + + <key>ru</key> + <value>с</value> + + true + true + + true + + + Объект.НачалоДействияБлокировки + + + НачалоБлокировкиРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + + НачалоБлокировкиКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + Left + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ОкончаниеБлокировки + 6 + + <key>ru</key> + <value>по</value> + + true + true + + true + + + Объект.ОкончаниеДействияБлокировки + + + ОкончаниеБлокировкиРасширеннаяПодсказка + 104 + Label + true + true + + Left + + + + ОкончаниеБлокировкиКонтекстноеМеню + 7 + true + + InputField + Enter + true + Left + true + Left + + true + true + + ru + ДП=бессрочно + + true + true + true + + Style.BorderColor + + Normal + + + true + true + + true + + Ctrl+S + + ГруппаПериодБлокировкиРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Equal + Auto + Auto + + + + КодДляРазблокировки + 10 + true + true + + + true + Role.ПолныеПрава + + + + Объект.КодДляРазблокировки + + Left + + КодДляРазблокировкиРасширеннаяПодсказка + 106 + Label + true + true + + Left + + + + КодДляРазблокировкиКонтекстноеМеню + 11 + true + + InputField + Enter + true + Left + true + Left + + 18 + true + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ГруппаЗапретитьРаботуРегламентныхЗаданий + 67 + + ЗапретитьРаботуРегламентныхЗаданий + 44 + + <key>ru</key> + <value>Также запретить работу регламентных заданий</value> + + true + true + + + true + Role.ПолныеПрава + + + + Объект.ЗапретитьРаботуРегламентныхЗаданий + + Right + + ЗапретитьРаботуРегламентныхЗаданийРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + + ЗапретитьРаботуРегламентныхЗаданийКонтекстноеМеню + 45 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа запретить работу регламентных заданий</value> + + + ГруппаЗапретитьРаботуРегламентныхЗаданийРасширеннаяПодсказка + 108 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница настройки</value> + + + СтраницаНастройкиРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаСостоянияБлокировки + 48 + + ГруппаСостояние + 53 + + ДекорацияСостояние + 51 + true + true + + true + + + ДекорацияСостояниеРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + + ДекорацияСостояниеКонтекстноеМеню + 52 + true + + 8 + true + 3 + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ГруппаСодержимое + 66 + + Состояние + 49 + + <key>ru</key> + <value>Пожалуйста, подождите... +Работа пользователей завершается. Осталось активных сеансов: %1</value> + + true + true + + true + + + СостояниеРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + + СостояниеКонтекстноеМеню + 50 + true + + Label + true + true + true + + Left + Center + + + + СообщениеДляПользователей1 + 8 + + <key>ru</key> + <value>Блокировка установлена по причине</value> + + true + true + + true + + + Объект.СообщениеДляПользователей + + + СообщениеДляПользователей1РасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + СообщениеДляПользователей1КонтекстноеМеню + 9 + true + + InputField + true + Enter + true + Left + true + Left + + 15 + true + 2 + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ГруппаПериодБлокировки1 + 55 + + НачалоБлокировки1 + 56 + + <key>ru</key> + <value>с</value> + + true + true + + true + + + Объект.НачалоДействияБлокировки + + + НачалоБлокировки1РасширеннаяПодсказка + 119 + Label + true + true + + Left + + + + НачалоБлокировки1КонтекстноеМеню + 57 + true + + LabelField + Enter + true + Left + true + Left + + true + true + + + + ОкончаниеБлокировки1 + 58 + + <key>ru</key> + <value>по</value> + + true + true + + true + + + Объект.ОкончаниеДействияБлокировки + + + ОкончаниеБлокировки1РасширеннаяПодсказка + 121 + Label + true + true + + Left + + + + ОкончаниеБлокировки1КонтекстноеМеню + 59 + true + + LabelField + Enter + true + Left + true + Left + + true + true + + ru + ДП=бессрочно + + + + true + true + + true + + true + Ctrl+S + + ГруппаПериодБлокировки1РасширеннаяПодсказка + 118 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Equal + Auto + Auto + + + true + true + + true + + + ГруппаСодержимоеРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + false + + ГруппаСостояниеРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница состояния блокировки</value> + + + СтраницаСостоянияБлокировкиРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Группа режим</value> + + + ru + Группа режим + + true + + ГруппаРежимРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + Pages + + Auto + + + + ОсновнаяКоманднаяПанель + 1 + + КомандаПрименить + 15 + true + true + + true + + false + + КомандаПрименитьРасширеннаяПодсказка + 124 + Label + true + true + + Left + + + Form.Command.Применить + Auto + true + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + КомандаОстановить + 54 + true + + true + + + КомандаОстановитьРасширеннаяПодсказка + 125 + Label + true + true + + Left + + + Form.Command.Остановить + Normal + Auto + true + true + UserCmds + Auto + + + КомандаЗакрыть + 16 + true + true + + true + + false + + КомандаЗакрытьРасширеннаяПодсказка + 126 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + true + true + UserCmds + Auto + + true + true + + true + + + ОсновнаяКоманднаяПанельРасширеннаяПодсказка + 123 + Label + true + true + + Left + + + CommandBar + + Right + Form + + + Top + true + + ФормаКоманднаяПанель + -1 + + АктивныеПользователи + 41 + true + true + + true + + false + + АктивныеПользователиРасширеннаяПодсказка + 83 + Label + true + true + + Left + + + Form.Command.АктивныеПользователи + Normal + Auto + true + true + UserCmds + Auto + + + ПараметрыАдминистрированияИнформационнойБазы + 43 + + <key>ru</key> + <value>Параметры администрирования ИБ</value> + + true + true + + + true + Role.ПолныеПрава + + + false + + ПараметрыАдминистрированияИнформационнойБазыРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + Form.Command.ПараметрыАдминистрированияИнформационнойБазы + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + + Abort + Cancel + CustomizeForm + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + LockOwner + Use + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.БлокировкаРаботыПользователей + + + true + + + true + + + Объект.СообщениеДляПользователей + +
    true
    +
    + + КоличествоСеансов + + <key>ru</key> + <value>Количество сеансов</value> + + 2 + + Number + + 10 + + + + true + + + true + + + + НачальныйСтатусЗапретаРаботыПользователей + + <key>ru</key> + <value>Состояние</value> + + 3 + + Boolean + + + true + + + true + + + + КлиентПодключенЧерезВебСервер + + <key>ru</key> + <value>Клиент подключен через веб сервер</value> + + 4 + + Boolean + + + true + + + true + + + + Применить + + <key>ru</key> + <value>Применить</value> + + 1 + + ru + Применить изменения + + + true + + + + Применить + + + Auto + Auto + + + АктивныеПользователи + + <key>ru</key> + <value>Активные пользователи</value> + + 2 + + ru + Активные пользователи + + + true + + + StdPicture.ActiveUsers + + + + АктивныеПользователи + + + TextPicture + Auto + Auto + + + ПараметрыАдминистрированияИнформационнойБазы + + <key>ru</key> + <value>Параметры администрирования информационной базы</value> + + 3 + + ru + Параметры администрирования информационной базы + + + true + + + + ПараметрыАдминистрированияИнформационнойБазы + + + Auto + Auto + + + Остановить + + <key>ru</key> + <value>Остановить</value> + + 4 + + ru + Остановить завершение работы пользователей + + + true + + + StdPicture.Stop + + + + Остановить + + + TextPicture + Auto + Auto + + + + + + +
    diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Module.bsl new file mode 100644 index 000000000..1463bcf15 --- /dev/null +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/Форма/Module.bsl @@ -0,0 +1,343 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() + ИЛИ НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + + Элементы.ПараметрыАдминистрированияИнформационнойБазы.Видимость = Ложь; + Элементы.ЗапретитьРаботуРегламентныхЗаданий.Видимость = Ложь; + Элементы.ГруппаComcntr.Видимость = Ложь; + Элементы.ГруппаПараметры.Видимость = Ложь; + КонецЕсли; + + ПолучитьПараметрыБлокировки(); + НачальныйСтатусЗапретаРаботыПользователей = Объект.ВременноЗапретитьРаботуПользователей; + ОбновитьСтраницуНастройки(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + КлиентПодключенЧерезВебСервер = ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер(); + Если РаботаПользователейЗавершается = Истина Тогда + Элементы.ГруппаРежим.ТекущаяСтраница = Элементы.СтраницаСостоянияБлокировки; + ОбновитьСтраницуСостояния(ЭтаФорма); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + НазванияСоединенийИБ = ""; + ТолькоКлиентскиеПриложения = АктивныТолькоКлиентскиеПриложения(НазванияСоединенийИБ); + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + // Проверка возможности принудительно завершить сеансы при работе в файловом режиме. + Если НЕ ТолькоКлиентскиеПриложения Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Имеются активные сеансы, которые не могут быть завершены принудительно. Блокировка не установлена. + |%1'"), + НазванияСоединенийИБ); + ВызватьИсключение ТекстСообщения; + КонецЕсли; + + КоличествоСеансов = СтрЧислоСтрок(НазванияСоединенийИБ); + + Иначе + // Проверка возможности принудительно завершить сеансы при работе с клиента через веб-сервер. + // Невозможно установить блокировку, на сервере не установлена ОС Microsoft Windows и не включено разделение (локальный режим работы). + Если НЕ ТолькоКлиентскиеПриложения И Не ОбщегоНазначенияПовтИсп.РазделениеВключено() И КлиентПодключенЧерезВебСервер + И Не СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Имеются активные сеансы, которые не могут быть завершены принудительно (т.к. сервер работает под управлением ОС, отличной от Microsoft Windows). Блокировка не установлена. + |%1'"), + НазванияСоединенийИБ); + ВызватьИсключение ТекстСообщения; + КонецЕсли; + + КоличествоСеансов = ПолучитьСеансыИнформационнойБазы().Количество(); + + КонецЕсли; + + // проверки возможности установки блокировки + Если Объект.НачалоДействияБлокировки > Объект.ОкончаниеДействияБлокировки + И ЗначениеЗаполнено(Объект.ОкончаниеДействияБлокировки) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Дата окончания блокировки не может быть меньше даты начала блокировки. Блокировка не установлена.'"),, + "Объект.ОкончаниеДействияБлокировки",,Отказ); + Возврат; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Объект.НачалоДействияБлокировки) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не указана дата начала блокировки.'"),, "Объект.НачалоДействияБлокировки",,Отказ); + Возврат; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "ЗавершениеРаботыПользователей" Тогда + КоличествоСеансов = Параметр.КоличествоСеансов; + ОбновитьСостояниеБлокировки(ЭтаФорма); + Если Параметр.Статус = "Готово" Тогда + Закрыть(); + ИначеЕсли Параметр.Статус = "Ошибка" Тогда + Предупреждение(НСтр("ru = 'Не удалось завершить работу всех активных пользователей. + |Подробности см. в Журнале регистрации.'"), 30); + Закрыть(); + КонецЕсли; + ИначеЕсли ИмяСобытия = "Запись_ПараметрыАдминистрированияИБ" Тогда + ПолучитьПараметрыБлокировки(Истина); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура АктивныеПользователи(Команда) + + ОткрытьФорму("Обработка.АктивныеПользователи.Форма",, ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ПараметрыАдминистрированияИнформационнойБазы(Команда) + + ОткрытьФорму("ОбщаяФорма.ПараметрыАдминистрированияСервернойИБ"); + +КонецПроцедуры + +&НаКлиенте +Процедура Применить(Команда) + + ОчиститьСообщения(); + + Объект.ВременноЗапретитьРаботуПользователей = Не НачальныйСтатусЗапретаРаботыПользователей; + Если Объект.ВременноЗапретитьРаботуПользователей Тогда + + КоличествоСеансов = 1; + Попытка + Если Не ПроверитьПредусловияБлокировки() Тогда + Возврат; + КонецЕсли; + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат; + КонецПопытки; + + ЗаголовокВопроса = НСтр("ru = 'Блокировка работы пользователей'"); + Если КоличествоСеансов > 1 И Объект.НачалоДействияБлокировки < ОбщегоНазначенияКлиент.ДатаСеанса() + 5 * 60 Тогда + ТекстВопроса = НСтр("ru = 'Сейчас будет завершена работа всех активных пользователей. + |Указано слишком близкое время начала действия блокировки, к которому пользователи могут не успеть сохранить все свои данные и завершить работу. + |Рекомендуется установить время начала на 5 минут относительно текущего времени. + | + |• Да, чтобы скорректировать время начала и продолжить (рекомендуется); + |• Нет, чтобы продолжить без корректировки.'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена,,, ЗаголовокВопроса); + Если Ответ = КодВозвратаДиалога.Да Тогда + Объект.НачалоДействияБлокировки = ОбщегоНазначенияКлиент.ДатаСеанса() + 5 * 60; + ИначеЕсли Ответ <> КодВозвратаДиалога.Нет Тогда + Возврат; + КонецЕсли; + ИначеЕсли Объект.НачалоДействияБлокировки > ОбщегоНазначенияКлиент.ДатаСеанса() + 5 * 60 Тогда + ТекстВопроса = НСтр("ru = 'Сейчас будет завершена работа всех активных пользователей. + |Указано слишком большое время начала действия блокировки, до которого в приложение могут успеть войти другие пользователи. + |Рекомендуется установить время начала на 5 минут относительно текущего времени. + | + |• Да, чтобы скорректировать время начала и продолжить (рекомендуется); + |• Нет, чтобы продолжить без корректировки.'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена,,, ЗаголовокВопроса); + Если Ответ = КодВозвратаДиалога.Да Тогда + Объект.НачалоДействияБлокировки = ОбщегоНазначенияКлиент.ДатаСеанса() + 5 * 60; + ИначеЕсли Ответ <> КодВозвратаДиалога.Нет Тогда + Возврат; + КонецЕсли; + Иначе + ТекстВопроса = НСтр("ru = 'Сейчас будет завершена работа всех активных пользователей. + |Продолжить?'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ОКОтмена,,, ЗаголовокВопроса); + Если Ответ <> КодВозвратаДиалога.ОК Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + Если Не УстановитьСнятьБлокировку() Тогда + Возврат; + КонецЕсли; + + ПоказатьОповещениеПользователя(НСтр("ru = 'Блокировка работы пользователей'"), + "e1cib/app/Обработка.БлокировкаРаботыПользователей", + ?(Объект.ВременноЗапретитьРаботуПользователей, НСтр("ru = 'Блокировка установлена.'"), НСтр("ru = 'Блокировка снята.'")), + БиблиотекаКартинок.Информация32); + СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей( + Объект.ВременноЗапретитьРаботуПользователей); + Если Объект.ВременноЗапретитьРаботуПользователей Тогда + ОбновитьСтраницуСостояния(ЭтаФорма); + Иначе + ОбновитьСтраницуНастройки(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Остановить(Команда) + + Если Не ОтменитьБлокировку() Тогда + Возврат; + КонецЕсли; + СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(Ложь); + Предупреждение(НСтр("ru = Завершение работы активных пользователей отменено. + |Вход в программу новых пользователей оставлен заблокированным.")); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Функция ПроверитьПредусловияБлокировки() + + Возврат ПроверитьЗаполнение(); + +КонецФункции + +&НаСервереБезКонтекста +Функция АктивныТолькоКлиентскиеПриложения(ИменаАктивныхСеансов) + + Результат = Истина; + НазванияСоединенийИБ = ""; + НомерТекущегоСеанса = НомерСеансаИнформационнойБазы(); + Для каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл + Если Сеанс.НомерСеанса = НомерТекущегоСеанса Тогда + Продолжить; + КонецЕсли; + Если Сеанс.ИмяПриложения <> "1CV8" И Сеанс.ИмяПриложения <> "1CV8C" И + Сеанс.ИмяПриложения <> "WebClient" Тогда + ИменаАктивныхСеансов = ИменаАктивныхСеансов + Символы.ПС + "• " + Сеанс; + Результат = Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +&НаСервере +Функция УстановитьСнятьБлокировку() + + Попытка + РеквизитФормыВЗначение("Объект").ВыполнитьУстановку(); + Элементы.ГруппаОшибка.Видимость = Ложь; + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Завершение работы пользователей'"), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Элементы.ГруппаОшибка.Видимость = Истина; + Элементы.ТекстОшибки.Заголовок = КраткоеОписаниеОшибки(ОписаниеОшибки()); + КонецЕсли; + Возврат Ложь; + КонецПопытки; + НачальныйСтатусЗапретаРаботыПользователей = Объект.ВременноЗапретитьРаботуПользователей; + КоличествоСеансов = ПолучитьСеансыИнформационнойБазы().Количество(); + Возврат Истина; + +КонецФункции + +&НаСервере +Функция ОтменитьБлокировку() + + Попытка + РеквизитФормыВЗначение("Объект").ОтменитьБлокировку(); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Завершение работы пользователей'"), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Элементы.ГруппаОшибка.Видимость = Истина; + Элементы.ТекстОшибки.Заголовок = КраткоеОписаниеОшибки(ОписаниеОшибки()); + КонецЕсли; + Возврат Ложь; + КонецПопытки; + НачальныйСтатусЗапретаРаботыПользователей = Объект.ВременноЗапретитьРаботуПользователей; + Элементы.ГруппаРежим.ТекущаяСтраница = Элементы.СтраницаНастройки; + ОбновитьСтраницуНастройки(); + Возврат Истина; + +КонецФункции + +&НаСервере +Процедура ОбновитьСтраницуНастройки() + + Элементы.КомандаПрименить.Видимость = Истина; + Элементы.КомандаПрименить.КнопкаПоУмолчанию = Истина; + Элементы.КомандаОстановить.Видимость = Ложь; + Элементы.КомандаПрименить.Заголовок = ?(Объект.ВременноЗапретитьРаботуПользователей, + НСтр("ru='Снять блокировку'"), НСтр("ru='Установить блокировку'")); + Элементы.ЗапретитьРаботуРегламентныхЗаданий.Заголовок = ?(Объект.ВременноЗапретитьРаботуПользователей, + НСтр("ru='Оставить блокировку работы регламентных заданий'"), НСтр("ru='Также запретить работу регламентных заданий'")); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьСтраницуСостояния(Форма) + + Форма.Элементы.КомандаОстановить.Видимость = Истина; + Форма.Элементы.КомандаПрименить.Видимость = Ложь; + Форма.Элементы.КомандаЗакрыть.КнопкаПоУмолчанию = Истина; + ОбновитьСостояниеБлокировки(Форма); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьСостояниеБлокировки(Форма) + + Форма.Элементы.Состояние.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Пожалуйста, подождите... + |Работа пользователей завершается. Осталось активных сеансов: %1'"), + Форма.КоличествоСеансов); + +КонецПроцедуры + +&НаСервере +Процедура ПолучитьПараметрыБлокировки(ТолькоПроверка = Ложь) + Обработка = РеквизитФормыВЗначение("Объект"); + Попытка + Обработка.ПолучитьПараметрыБлокировки(); + Элементы.ГруппаОшибка.Видимость = Ложь; + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Завершение работы пользователей'"), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Элементы.ГруппаОшибка.Видимость = Истина; + Элементы.ТекстОшибки.Заголовок = КраткоеОписаниеОшибки(ОписаниеОшибки()); + КонецЕсли; + КонецПопытки; + Если Не ТолькоПроверка Тогда + ЗначениеВРеквизитФормы(Обработка, "Объект"); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция КраткоеОписаниеОшибки(ОписаниеОшибки) + ТекстОшибки = ОписаниеОшибки; + Позиция = Найти(ТекстОшибки, "}:"); + Если Позиция > 0 Тогда + ТекстОшибки = СокрЛП(Сред(ТекстОшибки, Позиция + 2, СтрДлина(ТекстОшибки))); + КонецЕсли; + Возврат ТекстОшибки; +КонецФункции \ No newline at end of file diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html new file mode 100644 index 000000000..76d5c37c8 --- /dev/null +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html @@ -0,0 +1,23 @@ + +

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

    +

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

    +
    • Период (время) начала действия и окончания действия блокировки; +
    • +

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

      +
    • +

      Код разрешения - произвольная строка, используя которую в качестве параметра запуска "/UC" в дальнейшем можно будет войти в информационную базу, несмотря на установленную блокировку.

     

    +

    Для снятия блокировки до истечения срока блокировки нужно:

    +
    • +

      войти в приложение и открыть эту форму, выполнив команду "Снять блокировку";

      +
    • открыть приложение, используя параметры запуска "/С РазрешитьРаботуПользователей" и "/UC" с кодом разрешения доступа, который был указан при установке блокировки.

    Действия по завершению работы в клиентском приложении

    +
  • +

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

    +
  • +

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

    +
  • +

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

    +
  • +

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

    +

    Дополнительные возможности и ограничения

    +

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

    +

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

  • \ No newline at end of file diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ManagerModule.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl new file mode 100644 index 000000000..3b67eac33 --- /dev/null +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl @@ -0,0 +1,86 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Установить или снять блокировку информационной базы, +// исходя из значений реквизитов обработки. +// +Процедура ВыполнитьУстановку() Экспорт + + ВыполнитьУстановкуБлокировки(ВременноЗапретитьРаботуПользователей); + +КонецПроцедуры + +// Отменить ранее установленную блокировку сеансов. +// +Процедура ОтменитьБлокировку() Экспорт + + ВыполнитьУстановкуБлокировки(Ложь); + +КонецПроцедуры + +// Зачитать параметры блокировки информационной базы +// в реквизиты обработки. +// +Процедура ПолучитьПараметрыБлокировки() Экспорт + + Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ТекущийРежим = ПолучитьБлокировкуСеансов(); + КодДляРазблокировки = ТекущийРежим.КодРазрешения; + Иначе + ТекущийРежим = СоединенияИБ.ПолучитьБлокировкуСеансовОбластиДанных(); + КонецЕсли; + + ВременноЗапретитьРаботуПользователей = ТекущийРежим.Установлена; + СообщениеДляПользователей = СоединенияИБКлиентСервер.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение); + + Если ВременноЗапретитьРаботуПользователей Тогда + НачалоДействияБлокировки = ТекущийРежим.Начало; + ОкончаниеДействияБлокировки = ТекущийРежим.Конец; + Иначе + // Если блокировка не установлена, можно предположить, что + // пользователь открыл форму для установки блокировки. + // Поэтому устанавливаем дату блокировки равной текущей дате + НачалоДействияБлокировки = НачалоМинуты(ТекущаяДатаСеанса() + 5 * 60); + КонецЕсли; + + Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ЗапретитьРаботуРегламентныхЗаданий = СоединенияИБКлиентСервер.БлокировкаРегламентныхЗаданийУстановлена(); + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьУстановкуБлокировки(Значение) + + УстановленаБлокировкаСоединений = СоединенияИБ.УстановленаБлокировкаСоединений(); + Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Блокировка = Новый БлокировкаСеансов; + Блокировка.КодРазрешения = КодДляРазблокировки; + Иначе + Блокировка = СоединенияИБ.НовыеПараметрыБлокировкиСоединений(); + КонецЕсли; + + Блокировка.Начало = НачалоДействияБлокировки; + Блокировка.Конец = ОкончаниеДействияБлокировки; + Блокировка.Сообщение = СоединенияИБ.СформироватьСообщениеБлокировки(СообщениеДляПользователей, + КодДляРазблокировки); + Блокировка.Установлена = Значение; + + Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + УстановитьБлокировкуСеансов(Блокировка); + Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Попытка + СоединенияИБКлиентСервер.УстановитьБлокировкуРегламентныхЗаданий(ЗапретитьРаботуРегламентныхЗаданий); + Исключение + // откат установки блокировки при ошибке + Если Не УстановленаБлокировкаСоединений И Значение Тогда + Блокировка.Установлена = Ложь; + УстановитьБлокировкуСеансов(Блокировка); + КонецЕсли; + ВызватьИсключение; + КонецПопытки; + КонецЕсли; + Иначе + СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(Блокировка); + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/БлокировкаСоединенийСИнформационнойБазой.mdo b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo similarity index 61% rename from SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/БлокировкаСоединенийСИнформационнойБазой.mdo rename to SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo index 9e71e1f8a..663c6459c 100644 --- a/SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/БлокировкаСоединенийСИнформационнойБазой.mdo +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/БлокировкаРаботыПользователей.mdo @@ -4,39 +4,55 @@ - БлокировкаСоединенийСИнформационнойБазой + БлокировкаРаботыПользователей ru - Блокировка соединений с информационной базой + Блокировка работы пользователей true - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Form.Форма + DataProcessor.БлокировкаРаботыПользователей.Form.Форма ru - БлокировкаУстановкиСоединенийВключена + ВременноЗапретитьРаботуПользователей ru - Блокировка установки соединений включена + Временно запретить работу пользователей Boolean ru - Признак того, что блокировка установки соединений с ИБ включена + Признак того, что включена блокировка работы пользователей + + + + + + ЗапретитьРаботуРегламентныхЗаданий + + ru + Запретить работу регламентных заданий + + + Boolean + + + ru + Признак того, что включена блокировка работы регламентных заданий - КодРазрешения + КодДляРазблокировки ru - Код разрешения + Код для разблокировки String @@ -44,7 +60,7 @@ ru - Код разрешения, позволяющий войти в заблокированную базу. + Код разрешения, позволяющий администратору войти в заблокированную базу. @@ -61,7 +77,7 @@ ru - Момент времени, с которого начинает действовать блокировка установки соединений с ИБ + Момент времени, с которого начинает действовать блокировка работы пользователей @@ -78,24 +94,26 @@ ru - Момент времени окончания действия блокировки установки соединений с ИБ + Момент времени окончания действия блокировки работы пользователей - Сообщение + СообщениеДляПользователей ru - Сообщение + Сообщение для пользователей String - + + 300 + ru - Сообщение с причиной блокировки, выводится пользователю при попытке установки соединения с заблокированной ИБ + Причина блокировки, которая выводится пользователю при попытке войти в заблокированную ИБ true diff --git a/SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/Forms/Форма/Form.form b/SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/Forms/Форма/Form.form deleted file mode 100644 index d45147bd5..000000000 --- a/SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/Forms/Форма/Form.form +++ /dev/null @@ -1,562 +0,0 @@ - - - - ГруппаОсновные - 18 - - УстановитьБлокировкуСоединений - 2 - true - true - - true - - - Объект.БлокировкаУстановкиСоединенийВключена - - Right - - УстановитьБлокировкуСоединенийРасширеннаяПодсказка - 47 - Label - true - true - - Left - - - - УстановитьБлокировкуСоединенийКонтекстноеМеню - 3 - true - - CheckBoxField - Enter - true - Left - true - Left - - - - НачалоБлокировки - 4 - true - true - - true - - - Объект.НачалоДействияБлокировки - - - НачалоБлокировкиРасширеннаяПодсказка - 49 - Label - true - true - - Left - - - - НачалоБлокировкиКонтекстноеМеню - 5 - true - - InputField - Enter - true - Left - true - Left - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - ОкончаниеБлокировки - 6 - true - true - - true - - - Объект.ОкончаниеДействияБлокировки - - - ОкончаниеБлокировкиРасширеннаяПодсказка - 51 - Label - true - true - - Left - - - - ОкончаниеБлокировкиКонтекстноеМеню - 7 - true - - InputField - Enter - true - Left - true - Left - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - Сообщение - 8 - true - true - - true - - - Объект.Сообщение - - - СообщениеРасширеннаяПодсказка - 53 - Label - true - true - - Left - - - - СообщениеКонтекстноеМеню - 9 - true - - InputField - Enter - true - Left - true - Left - - true - 2 - true - true - true - true - - Style.BorderColor - - Normal - - - - ГруппаКодРазрешения - 42 - - КодРазрешения - 10 - true - true - - - true - Role.ПолныеПрава - - - - Объект.КодРазрешения - - Left - - КодРазрешенияРасширеннаяПодсказка - 56 - Label - true - true - - Left - - - - КодРазрешенияКонтекстноеМеню - 11 - true - - InputField - Enter - true - Left - true - Left - - true - true - true - true - true - - Style.BorderColor - - Normal - - - true - true - - true - - - ГруппаКодРазрешенияРасширеннаяПодсказка - 55 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Основные</value> - - - ГруппаОсновныеРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ОсновнаяКоманднаяПанель - 1 - - КомандаУстановить - 15 - true - true - - true - - false - - КомандаУстановитьРасширеннаяПодсказка - 59 - Label - true - true - - Left - - - Form.Command.Записать - Auto - true - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - КомандаЗакрыть - 16 - true - true - - true - - false - - КомандаЗакрытьРасширеннаяПодсказка - 60 - Label - true - true - - Left - - - Form.StandardCommand.Close - Normal - true - true - UserCmds - Auto - - true - true - - true - - - ОсновнаяКоманднаяПанельРасширеннаяПодсказка - 58 - Label - true - true - - Left - - - CommandBar - - Right - Form - - - Top - true - - ФормаКоманднаяПанель - -1 - - АктивныеПользователи - 41 - true - true - - true - - false - - АктивныеПользователиРасширеннаяПодсказка - 44 - Label - true - true - - Left - - - Form.Command.АктивныеПользователи - Normal - Auto - true - true - UserCmds - Auto - - - ПараметрыАдминистрированияИнформационнойБазы - 43 - - <key>ru</key> - <value>Параметры администрирования ИБ</value> - - true - true - - true - - false - - ПараметрыАдминистрированияИнформационнойБазыРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - Form.Command.ПараметрыАдминистрированияИнформационнойБазы - Normal - Auto - true - true - UserCmds - Auto - - Left - - - OnCreateAtServer - ПриСозданииНаСервере - - Abort - Cancel - CustomizeForm - Ignore - No - OK - RestoreValues - Retry - SaveValues - Yes - DontBlock - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Объект - 1 - - DataProcessorObject.БлокировкаСоединенийСИнформационнойБазой - - - true - - - true - -
    true
    -
    - - ЗапрашиватьАдминистратораИБ - - <key>ru</key> - <value>Запрашивать администратора ИБ</value> - - 2 - - Boolean - - - true - - - true - - - - Записать - - <key>ru</key> - <value>Записать</value> - - 1 - - ru - Записать режим блокировки - - - true - - - - ЗаписатьВыполнить - - - Auto - Auto - - - АктивныеПользователи - - <key>ru</key> - <value>Активные пользователи</value> - - 2 - - ru - Активные пользователи - - - true - - - StdPicture.ActiveUsers - - - - АктивныеПользователи - - - TextPicture - Auto - Auto - - - ПараметрыАдминистрированияИнформационнойБазы - - <key>ru</key> - <value>Параметры администрирования информационной базы</value> - - 3 - - ru - Параметры администрирования информационной базы - - - true - - - - ПараметрыАдминистрированияИнформационнойБазы - - - Auto - Auto - - - - - - -
    diff --git a/SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/Forms/Форма/Module.bsl deleted file mode 100644 index 66d076350..000000000 --- a/SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/Forms/Форма/Module.bsl +++ /dev/null @@ -1,125 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Обработчики команд - -&НаКлиенте -Процедура ЗаписатьВыполнить() - - ОчиститьСообщения(); - - Если Объект.БлокировкаУстановкиСоединенийВключена Тогда - - // проверки возможности установки блокировки - Если Объект.НачалоДействияБлокировки > Объект.ОкончаниеДействияБлокировки Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Дата окончания блокировки не может быть меньше даты начала блокировки. Блокировка не установлена.'"),, - "Объект.ОкончаниеДействияБлокировки"); - Возврат; - КонецЕсли; - - Попытка - ПроверитьПредусловияБлокировки(); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ИнформацияОбОшибке().Описание); - Возврат; - КонецПопытки; - - ТекстВопроса = НСтр("ru = 'После установки блокировки в информационной базе будет запущен - |режим завершения работы всех пользователей (включая Вас) - |на период действия блокировки. - |Вы действительно хотите установить блокировку?'"); - - ЗаголовокВопроса = НСтр("ru = 'Установка блокировки соединений с информационной базой'"); - - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена, 60, КодВозвратаДиалога.Нет, - ЗаголовокВопроса); - - Если Ответ <> КодВозвратаДиалога.Да Тогда - Возврат; - КонецЕсли; - - КонецЕсли; - - УстановитьСнятьБлокировку(); - - СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей( - Объект.БлокировкаУстановкиСоединенийВключена); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры - -&НаСервере -Процедура УстановитьСнятьБлокировку() - - РеквизитФормыВЗначение("Объект").ВыполнитьУстановку(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - Элементы.ПараметрыАдминистрированияИнформационнойБазы.Видимость = Ложь; - КонецЕсли; - - Обработка = РеквизитФормыВЗначение("Объект"); - Обработка.ПолучитьПараметрыБлокировки(); - - ЗначениеВРеквизитФормы(Обработка, "Объект"); - -КонецПроцедуры - -&НаКлиенте -Процедура АктивныеПользователи(Команда) - - ОткрытьФорму("Обработка.АктивныеПользователи.Форма",, ЭтаФорма); - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура ПроверитьПредусловияБлокировки() - - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - НазванияСоединенийИБ = ""; - Если НЕ АктивныТолькоКлиентскиеПриложения(НазванияСоединенийИБ) Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Существуют активные сеансы, которые невозможно завершить. Блокировка не установлена. - |%1'"), - НазванияСоединенийИБ); - ВызватьИсключение ТекстСообщения; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция АктивныТолькоКлиентскиеПриложения(ИменаАктивныхСеансов) - - Результат = Истина; - НазванияСоединенийИБ = ""; - НомерТекущегоСеанса = НомерСеансаИнформационнойБазы(); - Для каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл - Если Сеанс.НомерСеанса = НомерТекущегоСеанса Тогда - Продолжить; - КонецЕсли; - Если Сеанс.ИмяПриложения <> "1CV8" И Сеанс.ИмяПриложения <> "1CV8C" И - Сеанс.ИмяПриложения <> "WebClient" Тогда - ИменаАктивныхСеансов = ИменаАктивныхСеансов + Символы.ПС + " - " + Сеанс; - Результат = Ложь; - КонецЕсли; - КонецЦикла; - - Возврат Результат; - -КонецФункции - -&НаКлиенте -Процедура ПараметрыАдминистрированияИнформационнойБазы(Команда) - - ОткрытьФорму("ОбщаяФорма.ПараметрыАдминистрированияСервернойИБ"); - -КонецПроцедуры diff --git a/SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/Help/ru.html b/SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/Help/ru.html deleted file mode 100644 index cc435e807..000000000 --- a/SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/Help/ru.html +++ /dev/null @@ -1,27 +0,0 @@ - -

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

    -

    В клиент-серверном варианте работы для выполнения действий установки и снятия блокировки также можно использовать утилиту администрирования кластера серверов 1С:Предприятия.

    -

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

    -

    Дополнительные параметры блокировки:

    -
    • Период (время) начала действия  и окончания действия блокировки; -
    • -

      Текст сообщения, выдаваемого пользователям при предупреждении о планируемой блокировке соединений;

      -
    • -

      Код разрешения - произвольная строка, используя которую в качестве параметра запуска "/UC" в дальнейшем можно будет войти в информационную базу, несмотря на установленную блокировку.

    Для клиент-серверного варианта работы может потребоваться ввести дополнительные параметры для подключения к кластеру серверов по команде "Параметры администрирования ИБ".

    -

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

    -
  • -

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

    -
  • -

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

    -
  • -

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

    -
  • -

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

    -

    Ограничения

    -

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

    -

    Снятие блокировки

    -

    Для снятия блокировки соединений до истечения срока блокировки нужно:

    -
    • -

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

      -
    • -

      Открыть эту форму, снять флажок "Блокировка установки соединений включена" и нажать кнопку "Записать".

    либо запустить систему с параметром /CРазрешитьРаботуПользователей.

  • \ No newline at end of file diff --git a/SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/ObjectModule.bsl b/SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/ObjectModule.bsl deleted file mode 100644 index c31909632..000000000 --- a/SSL/src/DataProcessors/БлокировкаСоединенийСИнформационнойБазой/ObjectModule.bsl +++ /dev/null @@ -1,39 +0,0 @@ -// Установить или снять блокировку информационной базы, -// исходя из значений реквизитов обработки. -// -Процедура ВыполнитьУстановку() Экспорт - - Блокировка = Новый БлокировкаСеансов; - Блокировка.Начало = НачалоДействияБлокировки; - Блокировка.Конец = ОкончаниеДействияБлокировки; - Блокировка.Сообщение = СоединенияИБ.СформироватьСообщениеБлокировки(Сообщение, КодРазрешения); - Блокировка.Установлена = БлокировкаУстановкиСоединенийВключена; - Блокировка.КодРазрешения = КодРазрешения; - - УстановитьБлокировкуСеансов(Блокировка); - -КонецПроцедуры - -// Зачитать параметры блокировки информационной базы -// в реквизиты обработки. -// -Процедура ПолучитьПараметрыБлокировки() Экспорт - - ТекущийРежим = ПолучитьБлокировкуСеансов(); - - БлокировкаУстановкиСоединенийВключена = ТекущийРежим.Установлена; - Сообщение = СоединенияИБКлиентСервер.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение); - КодРазрешения = ТекущийРежим.КодРазрешения; - - Если БлокировкаУстановкиСоединенийВключена Тогда - НачалоДействияБлокировки = ТекущийРежим.Начало; - ОкончаниеДействияБлокировки = ТекущийРежим.Конец; - Иначе - // Если блокировка не установлена, можно предположить, что - // пользователь открыл форму для установки блокировки. - // Поэтому устанавливаем дату блокировки равной текущей дате - НачалоДействияБлокировки = ТекущаяДатаСеанса(); - КонецЕсли; - -КонецПроцедуры - diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Module.bsl index 3a99fb55b..45154559e 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Module.bsl @@ -1,44 +1,5 @@ -////////////////////////////////////////////////////////////////////////////// -// Блок служебных процедур - -&НаКлиенте -Процедура УстановитьЭлементыФормы() - - Если ИзменятьВТранзакции Тогда - Элементы.ГруппаПрерываниеПриОшибке.Доступность = Ложь; - Иначе - Элементы.ГруппаПрерываниеПриОшибке.Доступность = Истина; - КонецЕсли; - -КонецПроцедуры - -////////////////////////////////////////////////////////////////////////////// -// Блок процедур - обработчиков команд формы - -&НаКлиенте -Процедура ОК(Команда) - - Настройки = Новый Структура; - Настройки.Вставить("ИзменятьВТранзакции", ИзменятьВТранзакции); - Настройки.Вставить("ОбрабатыватьРекурсивно", ОбрабатыватьРекурсивно); - Настройки.Вставить("НастройкаПорции", НастройкаПорции); - Настройки.Вставить("ПроцентОбъектовВПорции", ПроцентОбъектовВПорции); - Настройки.Вставить("ЧислоОбъектовВПорции", ЧислоОбъектовВПорции); - Настройки.Вставить("ПрерыватьПриОшибке", ПрерыватьПриОшибке); - - Закрыть(Настройки); - -КонецПроцедуры - -////////////////////////////////////////////////////////////////////////////// -// Блок процедур - обработчиков событий формы и элементов формы - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - УстановитьЭлементыФормы(); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -56,6 +17,16 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + УстановитьЭлементыФормы(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + &НаКлиенте Процедура ИзменятьВТранзакцииПриИзменении(Элемент) @@ -69,3 +40,35 @@ УстановитьЭлементыФормы(); КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ОК(Команда) + + Настройки = Новый Структура; + Настройки.Вставить("ИзменятьВТранзакции", ИзменятьВТранзакции); + Настройки.Вставить("ОбрабатыватьРекурсивно", ОбрабатыватьРекурсивно); + Настройки.Вставить("НастройкаПорции", НастройкаПорции); + Настройки.Вставить("ПроцентОбъектовВПорции", ПроцентОбъектовВПорции); + Настройки.Вставить("ЧислоОбъектовВПорции", ЧислоОбъектовВПорции); + Настройки.Вставить("ПрерыватьПриОшибке", ИзменятьВТранзакции Или ПрерыватьПриОшибке); + + Закрыть(Настройки); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура УстановитьЭлементыФормы() + + Если ИзменятьВТранзакции Тогда + Элементы.ГруппаПрерываниеПриОшибке.Доступность = Ложь; + Иначе + Элементы.ГруппаПрерываниеПриОшибке.Доступность = Истина; + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Form.form index ab0ff9102..98eff4f88 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Form.form @@ -19,7 +19,7 @@ ИсторияОперацийРасширеннаяПодсказка - 72 + 77 Label true true @@ -50,7 +50,7 @@ НастроитьПараметрыИзмененийРасширеннаяПодсказка - 74 + 79 Label true true @@ -76,7 +76,7 @@ РазрешитьРедактированиеРеквизитовРасширеннаяПодсказка - 75 + 80 Label true true @@ -107,7 +107,7 @@ ПараметрыИзмененияРасширеннаяПодсказка - 73 + 78 Label true true @@ -135,7 +135,7 @@ ГруппаКнопокРасширеннаяПодсказка - 71 + 76 Label true true @@ -193,7 +193,7 @@ ТаблицаОперацийПредставлениеРасширеннаяПодсказка - 86 + 91 Label true true @@ -235,7 +235,7 @@ ТаблицаОперацийИзменятьРасширеннаяПодсказка - 88 + 93 Label true true @@ -267,7 +267,7 @@ ТаблицаОперацийЗначениеРасширеннаяПодсказка - 90 + 95 Label true true @@ -322,10 +322,10 @@ ТаблицаОперацийСтрокаПоиска - 77 + 82 ТаблицаОперацийСтрокаПоискаРасширеннаяПодсказка - 79 + 84 Label true true @@ -335,7 +335,7 @@ ТаблицаОперацийСтрокаПоискаКонтекстноеМеню - 78 + 83 true ТаблицаОпераций @@ -345,10 +345,10 @@ ТаблицаОперацийСостояниеПросмотра - 80 + 85 ТаблицаОперацийСостояниеПросмотраРасширеннаяПодсказка - 82 + 87 Label true true @@ -358,7 +358,7 @@ ТаблицаОперацийСостояниеПросмотраКонтекстноеМеню - 81 + 86 true ViewStatusAddition @@ -369,10 +369,10 @@ ТаблицаОперацийУправлениеПоиском - 83 + 88 ТаблицаОперацийУправлениеПоискомРасширеннаяПодсказка - 85 + 90 Label true true @@ -382,7 +382,7 @@ ТаблицаОперацийУправлениеПоискомКонтекстноеМеню - 84 + 89 true SearchControlAddition @@ -393,7 +393,7 @@ ТаблицаОперацийРасширеннаяПодсказка - 76 + 81 Label true true @@ -450,7 +450,7 @@ ПодсказкаСтраницыДействийРасширеннаяПодсказка - 100 + 105 Label true true @@ -485,7 +485,7 @@ НастройкаИзмененийРасширеннаяПодсказка - 70 + 75 Label true true @@ -545,7 +545,7 @@ ОбъектыДляИзмененияИзменятьРасширеннаяПодсказка - 115 + 120 Label true true @@ -578,7 +578,7 @@ ОбъектыДляИзмененияСсылкаРасширеннаяПодсказка - 117 + 122 Label true true @@ -621,7 +621,7 @@ ОбъектыДляИзмененияПометкаИзмененияПометитьВсеРасширеннаяПодсказка - 102 + 107 Label true true @@ -647,7 +647,7 @@ ОбъектыДляИзмененияПометкаИзмененияСнятьВсеРасширеннаяПодсказка - 103 + 108 Label true true @@ -673,7 +673,7 @@ ОбъектыДляИзмененияОткрытьОбъектПоСсылкеРасширеннаяПодсказка - 104 + 109 Label true true @@ -697,10 +697,10 @@ ОбъектыДляИзмененияСтрокаПоиска - 106 + 111 ОбъектыДляИзмененияСтрокаПоискаРасширеннаяПодсказка - 108 + 113 Label true true @@ -710,7 +710,7 @@ ОбъектыДляИзмененияСтрокаПоискаКонтекстноеМеню - 107 + 112 true ОбъектыДляИзменения @@ -720,10 +720,10 @@ ОбъектыДляИзмененияСостояниеПросмотра - 109 + 114 ОбъектыДляИзмененияСостояниеПросмотраРасширеннаяПодсказка - 111 + 116 Label true true @@ -733,7 +733,7 @@ ОбъектыДляИзмененияСостояниеПросмотраКонтекстноеМеню - 110 + 115 true ViewStatusAddition @@ -744,10 +744,10 @@ ОбъектыДляИзмененияУправлениеПоиском - 112 + 117 ОбъектыДляИзмененияУправлениеПоискомРасширеннаяПодсказка - 114 + 119 Label true true @@ -757,7 +757,7 @@ ОбъектыДляИзмененияУправлениеПоискомКонтекстноеМеню - 113 + 118 true SearchControlAddition @@ -768,7 +768,7 @@ ОбъектыДляИзмененияРасширеннаяПодсказка - 105 + 110 Label true true @@ -828,7 +828,7 @@ ПодсказкаПоКнопкеИзменитьРасширеннаяПодсказка - 129 + 134 Label true true @@ -863,7 +863,7 @@ СтраницаПодсказкаПоКнопкеИзменитьРасширеннаяПодсказка - 128 + 133 Label true true @@ -894,7 +894,7 @@ ПодсказкаПослеИзмененияЕстьОшибкиРасширеннаяПодсказка - 131 + 136 Label true true @@ -927,7 +927,7 @@ ПерейтиВЖурналРегистрацииРасширеннаяПодсказка - 132 + 137 Label true true @@ -959,7 +959,7 @@ СтраницаПодсказкаПослеИзмененияЕстьОшибкиРасширеннаяПодсказка - 130 + 135 Label true true @@ -991,7 +991,7 @@ ПодсказкаУспешноеИзменениеРасширеннаяПодсказка - 134 + 139 Label true true @@ -1030,7 +1030,7 @@ СтраницаПодсказкаУспешноеИзменениеРасширеннаяПодсказка - 133 + 138 Label true true @@ -1060,7 +1060,7 @@ true СтраницыПодсказокИзмененияОбъектовРасширеннаяПодсказка - 127 + 132 Label true true @@ -1088,7 +1088,7 @@ ИзменениеОбъектовРасширеннаяПодсказка - 101 + 106 Label true true @@ -1102,6 +1102,114 @@ auto
    + + ОжиданиеОбработки + 64 + + ДекорацияДлительнаяОперация + 65 + + <key>ru</key> + <value>Длительная операция</value> + + true + true + + true + + + ДекорацияДлительнаяОперацияРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + + ДекорацияДлительнаяОперацияКонтекстноеМеню + 66 + true + + 7 + true + 3 + true + false + false + + + CommonPicture.ДлительнаяОперация48 + + + + + ДекорацияПоясняющийТекстДлительнойОперации + 67 + + <key>ru</key> + <value>Выполняется изменение объектов...</value> + + true + true + + true + + + ДекорацияПоясняющийТекстДлительнойОперацииРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + + ДекорацияПоясняющийТекстДлительнойОперацииКонтекстноеМеню + 68 + true + + Label + true + 3 + true + true + false + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Ожидание обработки</value> + + + ru + Ожидание обработки + + + ОжиданиеОбработкиРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + Page + + auto + + true true @@ -1117,7 +1225,7 @@ СтраницыРасширеннаяПодсказка - 69 + 74 Label true true @@ -1145,7 +1253,7 @@ ФормаНазадРасширеннаяПодсказка - 64 + 69 Label true true @@ -1171,7 +1279,7 @@ ФормаДалееРасширеннаяПодсказка - 65 + 70 Label true true @@ -1201,7 +1309,7 @@ ФормаИзменитьРасширеннаяПодсказка - 66 + 71 Label true true @@ -1231,7 +1339,7 @@ ФормаОтменаРасширеннаяПодсказка - 67 + 72 Label true true @@ -1257,7 +1365,7 @@ ФормаСправкаРасширеннаяПодсказка - 68 + 73 Label true true @@ -1702,6 +1810,53 @@ true + + СвойстваВстроены + + <key>ru</key> + <value>Свойства встроены</value> + + 18 + + Boolean + + + true + + + true + + + + РезультатФоновогоЗадания + + <key>ru</key> + <value>Результат фонового задания</value> + + 19 + + + true + + + true + + + + ПараметрыОбработчикаОжидания + + <key>ru</key> + <value>Параметры обработчика ожидания</value> + + 20 + + + true + + + true + + Назад @@ -1762,7 +1917,7 @@ </use> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>ИзменитьОбработчикКоманды</name> + <name>Изменить</name> </handler> </action> <currentRowUse>Auto</currentRowUse> diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Module.bsl index f73ed53fe..632f99da2 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Module.bsl @@ -1,4 +1,4 @@ -/////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// // Создаваемые реквизиты в реквизите ИзменяемыеОбъекты имеют имена Реквизит_<поля> // Создаваемые поля на форме в таблице формы ОбъектыДляИзменения имеют имена Элемент_<имя> // @@ -22,9 +22,308 @@ // в функции ОткрытьФормуМодально, Например, // "Справочник.Номенклатура.Форма.ФормаРаботыСБлокируемымиРеквизитами" // ------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ЗапретРедактированияВстроен = Метаданные.НайтиПоПолномуИмени("ОбщийМодуль.ЗапретРедактированияРеквизитовОбъектовКлиент") <> Неопределено; + СвойстваВстроены = Метаданные.НайтиПоПолномуИмени("ОбщийМодуль.УправлениеСвойствами") <> Неопределено; + + // При отсутствии права сохранения настроек необходимо спрятать весь функционал работы с настройками + Элементы.ИсторияОпераций.Видимость = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); + + НекорректныйВызовОбработки = Ложь; + + Если ТипЗнч(Параметры.МассивОбъектов) <> Тип("Массив") Тогда + НекорректныйВызовОбработки = Истина; + Возврат; + КонецЕсли; + + // Оптимизация, для того, что бы не переформировывать таблицу + // изменяемых объектов при простом перелистывании + ИзменитьТаблицуОбъектов = Ложь; + + МетаданныеОбъекта = Параметры.МассивОбъектов[0].Метаданные(); + + ПолноеИмя = МетаданныеОбъекта.ПолноеИмя(); + + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); + + // Подгружаем настройки обработки + ЗагрузитьНастройкиОбработки(); + + // Подгружаем историю операций с данным типом объектов + ЗагрузитьИсториюОпераций(); + + // Устанавливаем заголовок для таблицы изменяемых объектов + Элементы.ОбъектыДляИзмененияСсылка.Заголовок = МетаданныеОбъекта.Синоним; + + // Объект иерархический + УчитыватьИерархию = ОбъектМетаданныхИерархический(Параметры.МассивОбъектов[0]); + ИерархияГрупп = ИерархияГруппИЭлементов(Параметры.МассивОбъектов[0]); + + // По переданному составу объектов и типу объекта заполнить допустимые действия с объектом + ЗаполнитьДеревоОбъектовИОпераций(); + + // Если нет заблокированных реквизитов скрываем кнопку "РазрешитьРедактированиеРеквизитов" + Если НЕ ЗапретРедактированияВстроен + ИЛИ Объект.Операции.НайтиСтроки( + Новый Структура("ЗаблокированныйРеквизит", Истина) ).Количество() = 0 Тогда + Если Элементы.Найти("РазрешитьРедактированиеРеквизитов") <> Неопределено Тогда + Элементы.РазрешитьРедактированиеРеквизитов.Видимость = Ложь; + КонецЕсли; + Иначе + Если МетаданныеОбъекта.Формы.Найти("РазблокированиеРеквизитов") = Неопределено Тогда + ЕстьФормаРазблокированияРеквизитов = Ложь; + Иначе + ЕстьФормаРазблокированияРеквизитов = Истина; + ПолноеИмяФормыРаботыСБлокируемымиРеквизитами = ПолноеИмя + ".Форма.РазблокированиеРеквизитов"; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если НекорректныйВызовОбработки Тогда + Отказ = Истина; + Предупреждение(НСтр("ru = 'Самостоятельное использование формы не предусмотрено.'")); + Возврат; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + + СохранитьНастройкиОбработки( + ПолноеИмя, + Объект.ИзменятьВТранзакции, + Объект.ПрерыватьПриОшибке, + ТОНастройкаПорции, + ТОПроцентОбъектовВПорции, + ТОЧислоОбъектовВПорции, + ОбрабатыватьРекурсивно); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаОпераций + +&НаКлиенте +Процедура ТаблицаОперацийПередНачаломИзменения(Элемент, Отказ) + + Если (Элемент.ТекущийЭлемент.Имя = "ТаблицаОперацийИзменять" + ИЛИ Элемент.ТекущийЭлемент.Имя = "ТаблицаОперацийЗначение") + И Элемент.ТекущиеДанные.ЗаблокированныйРеквизит Тогда + ВопросПерейтиКРазблокированиюРеквизитов(); + Отказ = Истина; + Возврат; + КонецЕсли; + + УстановитьОграниченияВыбираемыхТиповИПараметрыВыбора(Элемент); + +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицаОперацийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + Если Поле.Имя = "ТаблицаОперацийЗначение" + И Элемент.ТекущиеДанные.ЗаблокированныйРеквизит Тогда + + ВопросПерейтиКРазблокированиюРеквизитов(); + СтандартнаяОбработка = Ложь; + + Возврат; + + КонецЕсли; + + УстановитьОграниченияВыбираемыхТиповИПараметрыВыбора(Элемент); + +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицаОперацийПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) + + Если Элемент.ТекущийЭлемент.Имя = "ТаблицаОперацийЗначение" Тогда + Если ОтменаРедактирования Тогда + + ИначеЕсли НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.Значение) Тогда + Элемент.ТекущиеДанные.Изменять = Ложь; + ИзменитьТаблицуОбъектов = Истина; + Иначе + Элемент.ТекущиеДанные.Изменять = Истина; + ИзменитьТаблицуОбъектов = Истина; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Далее(Команда) + + ПерейтиНаСтраницуИзмененияОбъектов(); + +КонецПроцедуры + +&НаКлиенте +Процедура Изменить(Команда) + + Если Элементы.ФормаИзменить.Заголовок = НСтр("ru = 'Изменить'") Тогда + + Если Объект.Операции.НайтиСтроки(Новый Структура("Изменять", Истина)).Количество() = 0 Тогда + + ТекстВопроса = НСтр("ru = 'Не задано ни одного изменения. Выполнить перезапись данных без изменений?'"); + Результат = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ОКОтмена, , , + НСтр("ru = 'Изменение объектов'")); + + Если Результат <> КодВозвратаДиалога.ОК Тогда + Возврат; + КонецЕсли; + + КонецЕсли; + + УстановитьКнопкиНаВремяИзменения(Истина); + + ПерейтиНаСтраницуИзмененияОбъектов(); + + ПодключитьОбработчикОжидания("ИзменитьОбъекты", 0.1, Истина); + + ИначеЕсли ТекущееСостояниеИзменения <> Неопределено Тогда + + Если Не РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда + ДлительныеОперации.ОтменитьВыполнениеЗадания(РезультатФоновогоЗадания.ИдентификаторЗадания); + ОтключитьОбработчикОжидания("ПроверитьВыполнениеИзменения"); + ЗавершитьИзменениеОбъектов(); + Иначе + ТекущееСостояниеИзменения.ПрерватьИзменение = Истина; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИсторияОпераций(Команда) + + СтандартнаяОбработка = Ложь; + + Если ИсторияОперацийСписок.Количество() = 0 Тогда + Предупреждение(НСтр("ru = 'Для данного типа объектов нет истории ранее выполненных групповых изменений.'")); + Возврат; + КонецЕсли; + + СписокЗначений = Новый СписокЗначений; + + Для Каждого ОписаниеИзменения Из ИсторияОперацийСписок Цикл + СписокЗначений.Добавить(ОписаниеИзменения.Значение, ОписаниеИзменения.Представление); + КонецЦикла; + + Выбор = ВыбратьИзМеню(СписокЗначений, Элементы.ИсторияОпераций); + + Если Выбор <> Неопределено Тогда + УстановитьОперацииИзменения(Выбор.Значение); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Назад(Команда) + + Если Элементы.Страницы.ТекущаяСтраница = Элементы.ИзменениеОбъектов Тогда + Элементы.Страницы.ТекущаяСтраница = Элементы.НастройкаИзменений; + УстановитьСостояниеЭлементовФормы(Элементы); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьПараметрыИзменения(Команда) + + Настройки = Новый Структура; + + Настройки.Вставить("ИзменятьВТранзакции", Объект.ИзменятьВТранзакции); + Настройки.Вставить("ОбрабатыватьРекурсивно", ОбрабатыватьРекурсивно); + Настройки.Вставить("ПрерыватьПриОшибке", Объект.ПрерыватьПриОшибке); + Настройки.Вставить("НастройкаПорции", ТОНастройкаПорции); + Настройки.Вставить("ПроцентОбъектовВПорции", ТОПроцентОбъектовВПорции); + Настройки.Вставить("ЧислоОбъектовВПорции", ТОЧислоОбъектовВПорции); + Настройки.Вставить("УчитыватьИерархию", УчитыватьИерархию); + + Результат = ОткрытьФормуМодально("Обработка.ГрупповоеИзменениеОбъектов.Форма.Настройка", Настройки); + + ПереформироватьСоставОперацийИДеревоОбъектов = Ложь; + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + Если УчитыватьИерархию И ОбрабатыватьРекурсивно <> Результат.ОбрабатыватьРекурсивно Тогда + ОбрабатыватьРекурсивно = Результат.ОбрабатыватьРекурсивно; + ПереформироватьСоставОперацийИДеревоОбъектов = Истина; + КонецЕсли; + Объект.ИзменятьВТранзакции = Результат.ИзменятьВТранзакции; + Объект.ПрерыватьПриОшибке = Результат.ПрерыватьПриОшибке; + ТОНастройкаПорции = Результат.НастройкаПорции; + ТОПроцентОбъектовВПорции = Результат.ПроцентОбъектовВПорции; + ТОЧислоОбъектовВПорции = Результат.ЧислоОбъектовВПорции; + КонецЕсли; + + Если ПереформироватьСоставОперацийИДеревоОбъектов Тогда + ЗаполнитьДеревоОбъектовИОпераций(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьОбъектПоСсылкеОбработчикКоманды(Команда) + + ОткрытьОбъектПоСсылке(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиВЖурналРегистрации(Команда) + + ПараметрыЖР = Новый Структура("Пользователь", ТекущийПользователь); + + ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма", ПараметрыЖР, ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ПометкаИзмененияПометитьВсе(Команда) + + УстановитьЗначениеПометкиИзменения(ИзменяемыеОбъекты.ПолучитьЭлементы(), Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПометкаИзмененияСнятьВсе(Команда) + + УстановитьЗначениеПометкиИзменения(ИзменяемыеОбъекты.ПолучитьЭлементы(), Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура РазрешитьРедактированиеРеквизитовОбработчикКоманды(Команда) + + РазрешитьРедактированиеРеквизитов(); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ /////////////////////////////////////////////////////////////////////////////// -// Блок процедур и функций работы с историей изменений +// Операции с историей изменений &НаСервере Процедура ДобавитьИзменениеВИсторию(СтруктураИзменения, ПредставлениеИзменения) @@ -119,402 +418,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// Блок вспомогательных процедур и функций - -&НаСервере -Процедура ЗаполнитьДеревоОбъектовДляИзменения(МассивЗаполненных) - - ТаблицаОтработанных = Новый ТаблицаЗначений; - МассивТипов = Новый Массив; - МассивТипов.Добавить(ТипЗнч(Параметры.МассивОбъектов[0])); - ТаблицаОтработанных.Колонки.Добавить("Ссылка", Новый ОписаниеТипов(МассивТипов)); - - Для Каждого Элемент Из МассивЗаполненных Цикл - ТаблицаОтработанных.Добавить().Ссылка = Элемент; - КонецЦикла; - - ОбъектМетаданных = Параметры.МассивОбъектов[0].Метаданные(); - - ВидОбъектаМетаданных = ОбщегоНазначения.ВидОбъектаПоСсылке(Параметры.МассивОбъектов[0]); - - ТекстЗапроса = - "ВЫБРАТЬ - | Ссылка - |Поместить - | Отработанные - |ИЗ - | &ТаблицаОтработанных КАК Отработанные - |; - |ВЫБРАТЬ - | Таблица.Ссылка КАК Ссылка, - | 0 КАК КодОшибки, - | ВЫБОР КОГДА Отработанные.Ссылка ЕСТЬ NULL - | ТОГДА Истина - | ИНАЧЕ Ложь - |КОНЕЦ КАК Изменять,"; - - Если УчитыватьИерархию И ИерархияГрупп Тогда - ТекстЗапроса = ТекстЗапроса + " - | ВЫБОР КОГДА Таблица.ПометкаУдаления ТОГДА - | ВЫБОР КОГДА Таблица.ЭтоГруппа ТОГДА 1 - | ИНАЧЕ 3 - | КОНЕЦ - | ИНАЧЕ - | ВЫБОР КОГДА Таблица.ЭтоГруппа ТОГДА 0 - | ИНАЧЕ 2 - | КОНЕЦ - | Конец КАК КодКартинки"; - Иначе - ТекстЗапроса = ТекстЗапроса + " - | ВЫБОР КОГДА Таблица.ПометкаУдаления ТОГДА 3 - | ИНАЧЕ 2 - | КОНЕЦ КАК КодКартинки"; - КонецЕсли; - - Если УчитыватьИерархию И ИерархияГрупп Тогда - ТекстЗапроса = ТекстЗапроса + "," + " - | Таблица.ЭтоГруппа КАК ЭтоГруппа"; - Иначе - ТекстЗапроса = ТекстЗапроса + "," + " - | Ложь КАК ЭтоГруппа"; - КонецЕсли; - - СчетчикДопРеквизитов = 0; - СчетчикДопСведений = 0; - - ЛевоеСоединениеПоДопРеквизитам = ""; - ЛевоеСоединениеПоДопСведениям = ""; - - ПараметрыСвойства = Новый Соответствие; - - Для Каждого ОписаниеКолонки Из РеквизитФормыВЗначение("ИзменяемыеОбъекты").Колонки Цикл - - Если ПроверитьНеизменяемыйРеквизит(ОписаниеКолонки.Имя) Тогда - Продолжить; - КонецЕсли; - - Если ИмеетПрефикс(ОписаниеКолонки.Имя, ПрефиксИмениРеквизита()) Тогда - - ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + СтрокаБезПрефикса(ОписаниеКолонки.Имя, ПрефиксИмениРеквизита()) + " КАК " + ОписаниеКолонки.Имя - - ИначеЕсли ИмеетПрефикс(ОписаниеКолонки.Имя, ПрефиксИмениДопРеквизита()) Тогда - - СчетчикДопРеквизитов = СчетчикДопРеквизитов + 1; - ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + - СтрЗаменить("ДополнительныеРеквизиты[x].Значение КАК ", "[x]", Строка(СчетчикДопРеквизитов)) + ОписаниеКолонки.Имя; - - ЛевоеСоединениеПоДопРеквизитам = ЛевоеСоединениеПоДопРеквизитам + " - | ЛЕВОЕ СОЕДИНЕНИЕ - | [ВидОбъектаМетаданных].[ИмяОбъектаМетаданных].ДополнительныеРеквизиты КАК ДополнительныеРеквизиты[x] - | ПО ДополнительныеРеквизиты[x].Ссылка = Таблица.Ссылка - | И ДополнительныеРеквизиты[x].Свойство = &ДопРеквизит[x]"; - - ЛевоеСоединениеПоДопРеквизитам = СтрЗаменить(ЛевоеСоединениеПоДопРеквизитам, "[x]", Строка(СчетчикДопРеквизитов)); - - УнИдСтрока = СтрЗаменить(СтрокаБезПрефикса(ОписаниеКолонки.Имя, ПрефиксИмениДопРеквизита()), "_", "-"); - УнИд = Новый УникальныйИдентификатор(УнИдСтрока); - Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПолучитьСсылку(УнИд); - - ПараметрыСвойства.Вставить(СтрЗаменить("ДопРеквизит[x]", "[x]", Строка(СчетчикДопРеквизитов)), Свойство); - - ИначеЕсли ИмеетПрефикс(ОписаниеКолонки.Имя, ПрефиксИмениДопСведения()) Тогда - СчетчикДопСведений = СчетчикДопСведений + 1; - ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + - СтрЗаменить("ДополнительныеСведения[x].Значение КАК ", "[x]", Строка(СчетчикДопСведений)) + ОписаниеКолонки.Имя; - - ЛевоеСоединениеПоДопСведениям = ЛевоеСоединениеПоДопСведениям + " - | ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения[x] - | ПО ДополнительныеСведения[x].Объект = Таблица.Ссылка - | И ДополнительныеСведения[x].Свойство = &ДопСведение[x]"; - - ЛевоеСоединениеПоДопСведениям = СтрЗаменить(ЛевоеСоединениеПоДопСведениям, "[x]", Строка(СчетчикДопСведений)); - - УнИдСтрока = СтрЗаменить(СтрокаБезПрефикса(ОписаниеКолонки.Имя, ПрефиксИмениДопСведения()), "_", "-"); - УнИд = Новый УникальныйИдентификатор(УнИдСтрока); - Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПолучитьСсылку(УнИд); - - ПараметрыСвойства.Вставить(СтрЗаменить("ДопСведение[x]", "[x]", Строка(СчетчикДопСведений)), Свойство); - - КонецЕсли; - - КонецЦикла; - - ТекстЗапроса = ТекстЗапроса + " - |ИЗ - | [ВидОбъектаМетаданных].[ИмяОбъектаМетаданных] КАК Таблица - | ЛЕВОЕ СОЕДИНЕНИЕ Отработанные - | ПО Таблица.Ссылка = Отработанные.Ссылка"; - - ТекстЗапроса = ТекстЗапроса + ЛевоеСоединениеПоДопРеквизитам; - ТекстЗапроса = ТекстЗапроса + ЛевоеСоединениеПоДопСведениям; - - ТекстЗапроса = ТекстЗапроса + " - |ГДЕ"; - - Если ОбрабатыватьРекурсивно И УчитыватьИерархию Тогда - ТекстЗапроса = ТекстЗапроса + " - | Таблица.Ссылка В ИЕРАРХИИ(&МассивСсылок)"; - Иначе - ТекстЗапроса = ТекстЗапроса + " - | Таблица.Ссылка В (&МассивСсылок)"; - КонецЕсли; - - ТекстЗапроса = ТекстЗапроса + " - |УПОРЯДОЧИТЬ ПО"; - - Если ОбрабатыватьРекурсивно И УчитыватьИерархию И ИерархияГрупп Тогда - ТекстЗапроса = ТекстЗапроса + " - | Таблица.ЭтоГруппа ИЕРАРХИЯ ВОЗР,"; - КонецЕсли; - - Если ОбрабатыватьРекурсивно И УчитыватьИерархию И НЕ ИерархияГрупп Тогда - ТекстЗапроса = ТекстЗапроса + " - | Таблица.Ссылка ИЕРАРХИЯ ВОЗР"; - Иначе - ТекстЗапроса = ТекстЗапроса + " - | Таблица.Ссылка ВОЗР"; - КонецЕсли; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ВидОбъектаМетаданных]", ВидОбъектаМетаданных); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяОбъектаМетаданных]", ОбъектМетаданных.Имя); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.Параметры.Вставить("МассивСсылок", Параметры.МассивОбъектов); - Запрос.УстановитьПараметр("ТаблицаОтработанных", ТаблицаОтработанных); - - Для Каждого ПараметрСвойство Из ПараметрыСвойства Цикл - Запрос.УстановитьПараметр(ПараметрСвойство.Ключ, ПараметрСвойство.Значение); - КонецЦикла; - - ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией), "ИзменяемыеОбъекты"); - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьСплошнойСписокОбъектовДляИзменения(КоллекцияЭлементов) - - Для Каждого ЭлементКоллекции Из КоллекцияЭлементов Цикл - НоваяСтрока = Объект.ОбъектыДляИзменения.Добавить(); - НоваяСтрока.Ссылка = ЭлементКоллекции.Ссылка; - ЗаполнитьСплошнойСписокОбъектовДляИзменения(ЭлементКоллекции.ПолучитьЭлементы()); - КонецЦикла; - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Функция ТекстПодсказкиСтраницыДействий(КоличествоОбъектов) - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = ' - |Нажмите кнопку ""Далее"", чтобы перейти к просмотру изменяемых объектов (%1)'"), - КоличествоОбъектов); - -КонецФункции - -// В зависимости от текущей страницы устанавливает доступность команд на форме -// -&НаКлиентеНаСервереБезКонтекста -Процедура УстановитьСостояниеЭлементовФормы(Элементы, Количество = 0) - - Если Количество > 0 Тогда - Элементы.ПодсказкаСтраницыДействий.Заголовок = ТекстПодсказкиСтраницыДействий(Количество); - КонецЕсли; - - Если Элементы.Страницы.ТекущаяСтраница = Элементы.НастройкаИзменений Тогда - Элементы.ФормаНазад.Доступность = Ложь; - Элементы.ФормаДалее.Доступность = Истина; - ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.ИзменениеОбъектов Тогда - Элементы.ФормаНазад.Доступность = Истина; - Элементы.ФормаДалее.Доступность = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Процедура ЗаполнитьМассивИзмененных(Массив, Элементы) - - Для Каждого Элемент Из Элементы Цикл - Если НЕ Элемент.Изменять Тогда - Массив.Добавить(Элемент.Ссылка); - КонецЕсли; - Дочерние = Элемент.ПолучитьЭлементы(); - Если Дочерние.Количество() > 0 Тогда - ЗаполнитьМассивИзмененных(Массив, Дочерние); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура СформироватьИЗаполнитьДеревоИзменяемыхОбъектов() - - МассивЗаполненных = Новый Массив; - - ЗаполнитьМассивИзмененных(МассивЗаполненных, ИзменяемыеОбъекты.ПолучитьЭлементы()); - - СформироватьДеревоИзменяемыхОбъектов(); - ЗаполнитьДеревоОбъектовДляИзменения(МассивЗаполненных); - - ИзменитьТаблицуОбъектов = Ложь; - -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Функция СтрокаБезПрефикса(ИмяРеквизитаСПрефиксом, Префикс) - Возврат Прав(ИмяРеквизитаСПрефиксом, СтрДлина(ИмяРеквизитаСПрефиксом) - СтрДлина(Префикс)); -КонецФункции - -// При отборе операций с объектами необходимо изменить реквизит -// ИзменяемыеОбъекты (добавить новые колонки) и изменить таблицу на форме -// (добавить новые колонки на форме). -// -&НаСервере -Процедура СформироватьДеревоИзменяемыхОбъектов() - - СуществующийСоставРеквизитов = Новый Массив; - - Для Каждого ОписаниеКолонки Из РеквизитФормыВЗначение("ИзменяемыеОбъекты").Колонки Цикл - - Если ПроверитьНеизменяемыйРеквизит(ОписаниеКолонки.Имя) Тогда - Продолжить; - КонецЕсли; - - СуществующийСоставРеквизитов.Добавить(ОписаниеКолонки.Имя); - КонецЦикла; - - НовыйСоставРеквизитов = Новый Массив; - - Для Каждого Операция Из Объект.Операции Цикл - Если Операция.Изменять И Операция.ВидОперации = 1 Тогда - НовыйСоставРеквизитов.Добавить(ПрефиксИмениРеквизита()+Операция.ИмяРеквизита); - ИначеЕсли Операция.Изменять И Операция.ВидОперации = 2 Тогда - НовыйСоставРеквизитов.Добавить(ПрефиксИмениДопРеквизита()+СтрЗаменить(Операция.Свойство.УникальныйИдентификатор(), "-", "_")); - ИначеЕсли Операция.Изменять И Операция.ВидОперации = 3 Тогда - НовыйСоставРеквизитов.Добавить(ПрефиксИмениДопСведения()+СтрЗаменить(Операция.Свойство.УникальныйИдентификатор(), "-", "_")); - КонецЕсли; - КонецЦикла; - - ИменаДобавляемыхРеквизитов = РазницаМассивов(НовыйСоставРеквизитов, СуществующийСоставРеквизитов); - ИменаУдаляемыхРеквизитов = РазницаМассивов(СуществующийСоставРеквизитов, НовыйСоставРеквизитов); - - ДобавляемыеРеквизиты = Новый Массив; - - Для Каждого ИмяРеквизита Из ИменаДобавляемыхРеквизитов Цикл - - Если ИмеетПрефикс(ИмяРеквизита, ПрефиксИмениРеквизита()) Тогда - - Операция = Объект.Операции.НайтиСтроки(Новый Структура("ИмяРеквизита", СтрокаБезПрефикса(ИмяРеквизита, ПрефиксИмениРеквизита())))[0]; - ДопустимыеТипыМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Операция.ДопустимыеТипы, ";"); - - ТипыМассив = Новый Массив; - - Для Каждого ДопустимыйТипСтрока Из ДопустимыеТипыМассив Цикл - ТипыМассив.Добавить(Тип(ДопустимыйТипСтрока)); - КонецЦикла; - - ОписаниеТипов = Новый ОписаниеТипов(ТипыМассив); - - ИначеЕсли ИмеетПрефикс(ИмяРеквизита, ПрефиксИмениДопРеквизита()) - ИЛИ ИмеетПрефикс(ИмяРеквизита, ПрефиксИмениДопСведения()) Тогда - - Префикс = ?(ИмеетПрефикс(ИмяРеквизита, ПрефиксИмениДопРеквизита()), - ПрефиксИмениДопРеквизита(), - ПрефиксИмениДопСведения()); - - УнИд = Новый УникальныйИдентификатор(СтрЗаменить(СтрокаБезПрефикса(ИмяРеквизита, Префикс), "_", "-")); - - Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПолучитьСсылку(УнИд); - - ОписаниеТипов = Свойство.ТипЗначения; - - Операция = Объект.Операции.НайтиСтроки(Новый Структура("Свойство", Свойство))[0]; - - КонецЕсли; - - ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяРеквизита, ОписаниеТипов, "ИзменяемыеОбъекты", Операция.Представление)); - - КонецЦикла; - - УдаляемыеРеквизиты = Новый Массив; - - Для Каждого ИмяРеквизита Из ИменаУдаляемыхРеквизитов Цикл - УдаляемыеРеквизиты.Добавить("ИзменяемыеОбъекты."+ИмяРеквизита); - КонецЦикла; - - ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты); - - УдаляемыеПоляФормы = Новый Массив; - - Для Каждого ПолеФормы Из Элементы.ОбъектыДляИзменения.ПодчиненныеЭлементы Цикл - Если ТипЗнч(ПолеФормы) = Тип("ПолеФормы") И ПолеФормы.ПутьКДанным = "" Тогда - УдаляемыеПоляФормы.Добавить(ПолеФормы); - КонецЕсли; - КонецЦикла; - - Для Каждого ДобавленныйРеквизит Из ДобавляемыеРеквизиты Цикл - НовыйЭлементФормы = Элементы.Добавить(ПрефиксИмениПоляФормы()+ДобавленныйРеквизит.Имя, Тип("ПолеФормы"), Элементы.ОбъектыДляИзменения); - НовыйЭлементФормы.ПутьКДанным = "ИзменяемыеОбъекты."+ДобавленныйРеквизит.Имя; - КонецЦикла; - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция РазницаМассивов(МассивИсточник, МассивВычитаемый) - - Результат = Новый Массив; - - Для Каждого ЭлементМассива Из МассивИсточник Цикл - Если МассивВычитаемый.Найти(ЭлементМассива) = Неопределено Тогда - Результат.Добавить(ЭлементМассива); - КонецЕсли; - КонецЦикла; - - Возврат Результат; - -КонецФункции /////////////////////////////////////////////////////////////////////////////// -// Блок процедур - обработчиков событий элементов формы - -// Обработчик события ПередНачаломДобавления таблицы формы ТаблицаТаблицаОпераций -// -&НаКлиенте -Процедура ТаблицаОперацийПередНачаломИзменения(Элемент, Отказ) - - Если (Элемент.ТекущийЭлемент.Имя = "ТаблицаОперацийИзменять" - ИЛИ Элемент.ТекущийЭлемент.Имя = "ТаблицаОперацийЗначение") - И Элемент.ТекущиеДанные.ЗаблокированныйРеквизит Тогда - ВопросПерейтиКРазблокированиюРеквизитов(); - Отказ = Истина; - Возврат; - КонецЕсли; - - УстановитьОграниченияВыбираемыхТиповИПараметрыВыбора(Элемент); - -КонецПроцедуры - -// Обработчик события выбор таблицы формы ТаблицаТаблицаОпераций -// устанавливает ограничение типа для редактируемого реквизита -// -&НаКлиенте -Процедура ТаблицаОперацийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - Если Поле.Имя = "ТаблицаОперацийЗначение" - И Элемент.ТекущиеДанные.ЗаблокированныйРеквизит Тогда - - ВопросПерейтиКРазблокированиюРеквизитов(); - СтандартнаяОбработка = Ложь; - - Возврат; - - КонецЕсли; - - УстановитьОграниченияВыбираемыхТиповИПараметрыВыбора(Элемент); - -КонецПроцедуры +// Операции с элементами формы &НаКлиенте Процедура ВопросПерейтиКРазблокированиюРеквизитов() @@ -638,23 +544,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ТаблицаОперацийПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) - - Если Элемент.ТекущийЭлемент.Имя = "ТаблицаОперацийЗначение" Тогда - Если ОтменаРедактирования Тогда - - ИначеЕсли НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.Значение) Тогда - Элемент.ТекущиеДанные.Изменять = Ложь; - ИзменитьТаблицуОбъектов = Истина; - Иначе - Элемент.ТекущиеДанные.Изменять = Истина; - ИзменитьТаблицуОбъектов = Истина; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ОбъектыДляИзмененияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -666,32 +555,7 @@ КонецПроцедуры /////////////////////////////////////////////////////////////////////////////// -// Блок процедур - обработчиков событий формы - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - Если НекорректныйВызовОбработки Тогда - Отказ = Истина; - Предупреждение(НСтр("ru = 'Обработка используется только вместе с объектами информационной базы'"),0,НСтр("ru = ''")); - Возврат; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриЗакрытии() - - СохранитьНастройкиОбработки( - ПолноеИмя, - Объект.ИзменятьВТранзакции, - Объект.ПрерыватьПриОшибке, - ТОНастройкаПорции, - ТОПроцентОбъектовВПорции, - ТОЧислоОбъектовВПорции, - ОбрабатыватьРекурсивно); - -КонецПроцедуры +// Операции с формой &НаСервереБезКонтекста Процедура СохранитьНастройкиОбработки(ПолноеИмя, ИзменятьВТранзакции, ПрерыватьПриОшибке, @@ -741,66 +605,6 @@ КонецПроцедуры -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - ЗапретРедактированияВстроен = Метаданные.НайтиПоПолномуИмени("ОбщийМодуль.ЗапретРедактированияРеквизитовОбъектовКлиент") <> Неопределено; - - // При отсутствии права сохранения настроек необходимо спрятать весь функционал работы с настройками - Элементы.ИсторияОпераций.Видимость = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); - - НекорректныйВызовОбработки = Ложь; - - Если ТипЗнч(Параметры.МассивОбъектов) <> Тип("Массив") Тогда - НекорректныйВызовОбработки = Истина; - Возврат; - КонецЕсли; - - // Оптимизация, для того, что бы не переформировывать таблицу - // изменяемых объектов при простом перелистывании - ИзменитьТаблицуОбъектов = Ложь; - - МетаданныеОбъекта = Параметры.МассивОбъектов[0].Метаданные(); - - ПолноеИмя = МетаданныеОбъекта.ПолноеИмя(); - - ТекущийПользователь = Пользователи.АвторизованныйПользователь(); - - // Подгружаем настройки обработки - ЗагрузитьНастройкиОбработки(); - - // Подгружаем историю операций с данным типом объектов - ЗагрузитьИсториюОпераций(); - - // Устанавливаем заголовок для таблицы изменяемых объектов - Элементы.ОбъектыДляИзмененияСсылка.Заголовок = МетаданныеОбъекта.Синоним; - - // Объект иерархический - УчитыватьИерархию = ОбъектМетаданныхИерархический(Параметры.МассивОбъектов[0]); - ИерархияГрупп = ИерархияГруппИЭлементов(Параметры.МассивОбъектов[0]); - - // По переданному составу объектов и типу объекта заполнить допустимые действия с объектом - ЗаполнитьДеревоОбъектовИОпераций(); - - // Если нет заблокированных реквизитов скрываем кнопку "РазрешитьРедактированиеРеквизитов" - Если НЕ ЗапретРедактированияВстроен - ИЛИ Объект.Операции.НайтиСтроки( - Новый Структура("ЗаблокированныйРеквизит", Истина) ).Количество() = 0 Тогда - Если Элементы.Найти("РазрешитьРедактированиеРеквизитов") <> Неопределено Тогда - Элементы.РазрешитьРедактированиеРеквизитов.Видимость = Ложь; - КонецЕсли; - Иначе - Если МетаданныеОбъекта.Формы.Найти("РазблокированиеРеквизитов") = Неопределено Тогда - ЕстьФормаРазблокированияРеквизитов = Ложь; - Иначе - ЕстьФормаРазблокированияРеквизитов = Истина; - ПолноеИмяФормыРаботыСБлокируемымиРеквизитами = ПолноеИмя + ".Форма.РазблокированиеРеквизитов"; - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - &НаСервере Процедура ЗаполнитьДеревоОбъектовИОпераций() @@ -815,12 +619,15 @@ ВведенныеОперации = Новый ТаблицаЗначений; ВведенныеОперации.Колонки.Добавить("ВидОперации", Новый ОписаниеТипов("Число")); ВведенныеОперации.Колонки.Добавить("ИмяРеквизита", Новый ОписаниеТипов("Строка")); - ВведенныеОперации.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения")); ВведенныеОперации.Колонки.Добавить("Изменять", Новый ОписаниеТипов("Булево")); ВведенныеОперации.Колонки.Добавить("Значение"); + Если СвойстваВстроены Тогда + ВведенныеОперации.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения")); + КонецЕсли; + Для Каждого ОписаниеОперации Из Объект.Операции.НайтиСтроки(Новый Структура("Изменять", Истина)) Цикл - ЗаполнитьЗначенияСвойств(ВведенныеОперации.Добавить(), ОписаниеОперации, "ВидОперации,ИмяРеквизита,Свойство,Изменять,Значение"); + ЗаполнитьЗначенияСвойств(ВведенныеОперации.Добавить(), ОписаниеОперации); КонецЦикла; // @@ -867,47 +674,60 @@ КонецПроцедуры /////////////////////////////////////////////////////////////////////////////// -// Блок процедур - обработчиков команд +// Обработчики команд &НаКлиенте -Процедура ИсторияОпераций(Команда) +Процедура РазрешитьРедактированиеРеквизитов() - СтандартнаяОбработка = Ложь; + ЗаблокированныеРеквизитыСтроки = Объект.Операции.НайтиСтроки(Новый Структура("ЗаблокированныйРеквизит", Истина)); - Если ИсторияОперацийСписок.Количество() = 0 Тогда - Предупреждение(НСтр("ru = 'Для данного типа объектов нет истории ранее выполненных групповых изменений.'")); - Возврат; + Если ЕстьФормаРазблокированияРеквизитов Тогда + + РазрешенныеРеквизиты = ОткрытьФормуМодально(ПолноеИмяФормыРаботыСБлокируемымиРеквизитами); + + Если ТипЗнч(РазрешенныеРеквизиты) = Тип("Массив") + И РазрешенныеРеквизиты.Количество() > 0 Тогда + + Для Каждого ОписаниеОперацииСтрока Из ЗаблокированныеРеквизитыСтроки Цикл + Если ОписаниеОперацииСтрока.ЗаблокированныйРеквизит + И РазрешенныеРеквизиты.Найти(ОписаниеОперацииСтрока.ИмяРеквизита) <> Неопределено Тогда + ОписаниеОперацииСтрока.ЗаблокированныйРеквизит = Ложь; + КонецЕсли; + КонецЦикла; + + Если Объект.Операции.НайтиСтроки(Новый Структура("ЗаблокированныйРеквизит", Истина)).Количество() = 0 Тогда + Если Элементы.Найти("РазрешитьРедактированиеРеквизитов") <> Неопределено Тогда + Элементы.РазрешитьРедактированиеРеквизитов.Доступность = Ложь; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + Иначе + + МассивСсылок = Новый Массив; + + ЗаполнитьМассивИзменяемыхОбъектов(ИзменяемыеОбъекты.ПолучитьЭлементы(), МассивСсылок); + + СинонимыРеквизитов = Новый Массив; + + Для Каждого ОписаниеОперацииСтрока Из ЗаблокированныеРеквизитыСтроки Цикл + СинонимыРеквизитов.Добавить(ОписаниеОперацииСтрока.Представление); + КонецЦикла; + + ЗапретРедактированияРеквизитовОбъектовКлиентМодуль = Вычислить("ЗапретРедактированияРеквизитовОбъектовКлиент"); + + Если ЗапретРедактированияРеквизитовОбъектовКлиентМодуль.ПроверитьСсылкиНаОбъект(МассивСсылок, СинонимыРеквизитов) Тогда + Если Элементы.Найти("РазрешитьРедактированиеРеквизитов") <> Неопределено Тогда + Элементы.РазрешитьРедактированиеРеквизитов.Доступность = Ложь; + КонецЕсли; + + Для Каждого ОписаниеОперацииСтрока Из ЗаблокированныеРеквизитыСтроки Цикл + ОписаниеОперацииСтрока.ЗаблокированныйРеквизит = Ложь; + КонецЦикла; + КонецЕсли; + КонецЕсли; - СписокЗначений = Новый СписокЗначений; - - Для Каждого ОписаниеИзменения Из ИсторияОперацийСписок Цикл - СписокЗначений.Добавить(ОписаниеИзменения.Значение, ОписаниеИзменения.Представление); - КонецЦикла; - - Выбор = ВыбратьИзМеню(СписокЗначений, Элементы.ИсторияОпераций); - - Если Выбор <> Неопределено Тогда - УстановитьОперацииИзменения(Выбор.Значение); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура Назад(Команда) - - Если Элементы.Страницы.ТекущаяСтраница = Элементы.ИзменениеОбъектов Тогда - Элементы.Страницы.ТекущаяСтраница = Элементы.НастройкаИзменений; - УстановитьСостояниеЭлементовФормы(Элементы); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура Далее(Команда) - - ПерейтиНаСтраницуИзмененияОбъектов(); - КонецПроцедуры &НаКлиенте @@ -923,44 +743,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОткрытьОбъектПоСсылкеОбработчикКоманды(Команда) - - ОткрытьОбъектПоСсылке(); - -КонецПроцедуры - -&НаКлиенте -Процедура ИзменитьОбработчикКоманды(Команда) - - Если Элементы.ФормаИзменить.Заголовок = НСтр("ru = 'Изменить'") Тогда - - Если Объект.Операции.НайтиСтроки(Новый Структура("Изменять", Истина)).Количество() = 0 Тогда - - ТекстВопроса = НСтр("ru = 'Не задано ни одного изменения. Выполнить перезапись данных без изменений?'"); - Результат = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ОКОтмена, , , - НСтр("ru = 'Изменение объектов'")); - - Если Результат <> КодВозвратаДиалога.ОК Тогда - Возврат; - КонецЕсли; - - КонецЕсли; - - УстановитьКнопкиНаВремяИзменения(Истина); - - ПерейтиНаСтраницуИзмененияОбъектов(); - - ПодключитьОбработчикОжидания("ИзменитьОбъекты", 0.1, Истина); - - ИначеЕсли ТекущееСостояниеИзменения <> Неопределено Тогда - - ТекущееСостояниеИзменения.ПрерватьИзменение = Истина; - - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура УстановитьКнопкиНаВремяИзменения(НачалоИзменения) @@ -968,7 +750,7 @@ Элементы.ФормаОтмена.Доступность = НЕ НачалоИзменения; Если НачалоИзменения Тогда - Если Объект.ИзменятьВТранзакции Тогда + Если Объект.ИзменятьВТранзакции И ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда Элементы.ФормаИзменить.Доступность = Ложь; Иначе Элементы.ФормаИзменить.Заголовок = НСтр("ru = 'Прервать'"); @@ -986,7 +768,7 @@ КоличествоИзменяемых = 0; Для Каждого ИзменяемыйЭлемент Из КоллекцияЭлементов Цикл - ИзменяемыйЭлемент.КодОшибки = 0; + ИзменяемыйЭлемент.КодОшибки = ""; Если ИзменяемыйЭлемент.Изменять Тогда КоличествоИзменяемых = КоличествоИзменяемых + 1; ТекущиеИзменяемыеОбъекты.Добавить(ИзменяемыйЭлемент.Ссылка, ИзменяемыйЭлемент.ПолучитьИдентификатор()); @@ -998,8 +780,6 @@ КонецФункции -// Основной цикл изменения объектов -// &НаКлиенте Процедура ИзменитьОбъекты() @@ -1023,7 +803,7 @@ Если ТОНастройкаПорции = 1 Тогда // обработка одним вызовом - ПоказатьОповещениеПользователя(НСтр("ru = 'Групповое измнение объектов'"), ,НСтр("ru = 'Пожалуйста ждите, обработка может занять некоторое время...'")); + ПоказатьОповещениеПользователя(НСтр("ru = 'Групповое изменение объектов'"), ,НСтр("ru = 'Пожалуйста подождите, обработка может занять некоторое время...'")); ПоказыватьПроцентОбработанных = Ложь; РазмерПорции = КоличествоОбъектовДляОбработки; @@ -1056,7 +836,7 @@ КонецЕсли; КонецЕсли; - Состояние(НСтр("ru = 'Обрабатываются объекты...'"), 0, НСтр("ru = 'Групповое измнение объектов'")); + Состояние(НСтр("ru = 'Обрабатываются объекты...'"), 0, НСтр("ru = 'Групповое изменение объектов'")); ПоказыватьПроцентОбработанных = Истина; КонецЕсли; @@ -1073,23 +853,57 @@ ПодключитьОбработчикОжидания("ИзменитьПорциюОбъектов", 0.1, Истина); + Элементы.Страницы.ТекущаяСтраница = Элементы.ОжиданиеОбработки; КонецПроцедуры -// Используется для изменения порции объектов &НаКлиенте Процедура ИзменитьПорциюОбъектов() - Перем КоличествоОшибок, КоличествоИзмененных; - НачальнаяПозиция = ТекущееСостояниеИзменения.ТекущаяПозиция; ОконечнаяПозиция = ТекущееСостояниеИзменения.ТекущаяПозиция+ТекущееСостояниеИзменения.РазмерПорции; + ПорцияМассив = ПолучитьПорциюОбрабатываемыхОбъектов(НачальнаяПозиция+1, ОконечнаяПозиция); + + // Изменяем порцию на сервере + РезультатИзменения = ИзменитьНаСервере(ПорцияМассив, ТекущееСостояниеИзменения.ОстанавливатьИзменениеПриОшибке); + + Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда + ОбработатьРезультатИзменения(ПолучитьИзВременногоХранилища(РезультатФоновогоЗадания.АдресХранилища)); + Иначе + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("ПроверитьВыполнениеИзменения", ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьВыполнениеИзменения() + + ЗаданиеВыполнено = Ложь; + Попытка + ЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(РезультатФоновогоЗадания.ИдентификаторЗадания); + Исключение + ПерейтиНаСтраницуИзмененияОбъектов(); + ВызватьИсключение; + КонецПопытки; + + Если ЗаданиеВыполнено Тогда + ОбработатьРезультатИзменения(ПолучитьИзВременногоХранилища(РезультатФоновогоЗадания.АдресХранилища)); + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("ПроверитьВыполнениеИзменения", ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьРезультатИзменения(РезультатИзменения) + + Перем КоличествоОшибок, КоличествоИзмененных; + + НачальнаяПозиция = ТекущееСостояниеИзменения.ТекущаяПозиция; + Пока Истина Цикл - ПорцияМассив = ПолучитьПорциюОбрабатываемыхОбъектов(НачальнаяПозиция+1, ОконечнаяПозиция); - - // Изменяем порцию на сервере - РезультатИзменения = ИзменитьНаСервере(ПорцияМассив, ТекущееСостояниеИзменения.ОстанавливатьИзменениеПриОшибке); - // Переносим информацию по обработанным объектам в таблицу ЗаполнитьСостояниеОбработанных(РезультатИзменения, КоличествоОшибок, КоличествоИзмененных); @@ -1107,9 +921,9 @@ Возврат; // досрочный выход из цикла и процедуры КонецЕсли; - ТекстВопроса = НСтр("ru = 'Внимание, при изменении объекта (группы объектов) обнаружены ошибки. - |Прервать изменение объектов и перейти к просмотру ошибок? - |'"); + ТекстВопроса = НСтр("ru = 'При изменении объекта (группы объектов) возникли ошибки. + |Прервать изменение объектов и перейти к просмотру ошибок? + |'"); Кнопки = Новый СписокЗначений; Кнопки.Добавить(КодВозвратаДиалога.Прервать, НСтр("ru = 'Прервать'")); Кнопки.Добавить(КодВозвратаДиалога.Пропустить, НСтр("ru = 'Продолжить'")); @@ -1121,7 +935,7 @@ ПодключитьОбработчикОжидания("ЗавершитьИзменениеОбъектов", 0.1, Истина); Возврат; // досрочный выход из цикла и процедуры КонецЕсли; - + Если Результат = КодВозвратаДиалога.Пропустить ИЛИ Результат = КодВозвратаДиалога.Нет Тогда // переходим к дообработке объектов порции @@ -1130,20 +944,16 @@ ТекущееСостояниеИзменения.ОстанавливатьИзменениеПриОшибке = Ложь; КонецЕсли; - Если ПорцияМассив.Количество() <= 1 Тогда - Прервать; - КонецЕсли; - Для Каждого СостояниеОбработанногоОбъекта Из РезультатИзменения.СостояниеОбработки Цикл НачальнаяПозиция = НачальнаяПозиция + 1; - Если СостояниеОбработанногоОбъекта.Значение.КодОшибки > 1 Тогда + Если Не ПустаяСтрока(СостояниеОбработанногоОбъекта.Значение.КодОшибки) Тогда Прервать; КонецЕсли; КонецЦикла; - Продолжить; - КонецЕсли; + + Прервать; КонецЦикла; Элементы.ОбъектыДляИзменения.ТекущаяСтрока = ТекущееСостояниеИзменения.ТекущаяПозиция; @@ -1153,7 +963,7 @@ Если ТекущееСостояниеИзменения.ПоказыватьПроцентОбработанных Тогда // вычисляем текущий процент обработанных объектов ТекущийПроцент = ТекущееСостояниеИзменения.ТекущаяПозиция / ТекущееСостояниеИзменения.КоличествоОбъектовДляОбработки * 100; - Состояние(НСтр("ru = 'Обрабатываются объекты...'"), ТекущийПроцент, НСтр("ru = 'Групповое измнение объектов'")); + Состояние(НСтр("ru = 'Обрабатываются объекты...'"), ТекущийПроцент, НСтр("ru = 'Групповое изменение объектов'")); КонецЕсли; ЕстьЭлементыДляОбработки = ?(ТекущееСостояниеИзменения.ТекущаяПозиция < ТекущееСостояниеИзменения.КоличествоОбъектовДляОбработки, Истина, Ложь); @@ -1163,16 +973,15 @@ Иначе ПодключитьОбработчикОжидания("ЗавершитьИзменениеОбъектов", 0.1, Истина); КонецЕсли; - + КонецПроцедуры -// Используется для изменения порции объектов &НаКлиенте Процедура ЗавершитьИзменениеОбъектов() Если Объект.ИзменятьВТранзакции И ТОНастройкаПорции = 1 Тогда // обработка одним вызовом - ПоказатьОповещениеПользователя(НСтр("ru = 'Групповое измнение объектов'"), , НСтр("ru = 'Обработка объектов завершена...'")); + ПоказатьОповещениеПользователя(НСтр("ru = 'Групповое изменение объектов'"), , НСтр("ru = 'Обработка объектов завершена...'")); КонецЕсли; ЗавершающиеДействияПриИзмененииСервер(); @@ -1185,10 +994,6 @@ КонецПроцедуры -// Завершающие действия при изменении на сервере. -// - меняется текущая страница с результатом изменения -// - в историю изменений заносится текущее изменение -// &НаСервере Процедура ЗавершающиеДействияПриИзмененииСервер() @@ -1246,13 +1051,10 @@ ДобавитьИзменениеВИсторию(ОписаниеИзменения, ПредставлениеИзменения); КонецЕсли; + Элементы.Страницы.ТекущаяСтраница = Элементы.ИзменениеОбъектов; + КонецПроцедуры -// Параметры СостояниеОбработки - соответствие, -// ключ - ссылка на объект, значение - структура с ключами КодОшибки,СообщениеОбОшибке -// КодОшибки - 0 -ошибок нет -// СообщениеОбОшибке - текстовое представление ошибки -// &НаКлиенте Процедура ЗаполнитьСостояниеОбработанных(РезультатИзменения, КоличествоОшибок, КоличествоИзмененных) @@ -1269,7 +1071,7 @@ ЭлементДерева.КодОшибки = СостояниеОбработанногоОбъекта.Значение.КодОшибки; - Если СостояниеОбработанногоОбъекта.Значение.КодОшибки > 1 Тогда + Если Не ПустаяСтрока(СостояниеОбработанногоОбъекта.Значение.КодОшибки) Тогда КоличествоОшибок = КоличествоОшибок + 1; ОбщегоНазначенияКлиентСервер.СообщитьПользователю( @@ -1306,12 +1108,6 @@ КонецПроцедуры -// Получает множество ссылок на обрабатываемые объекты в интервале -// -// Параметры -// НижняяГраница - индекс элемента. 1 - первый элемент -// ВерхняяГраница - индекс элемента, 1 - первый элемент -// &НаКлиенте Функция ПолучитьПорциюОбрабатываемыхОбъектов(НижняяГраница, ВерхняяГраница) @@ -1332,117 +1128,42 @@ &НаСервере Функция ИзменитьНаСервере(ОбъектыДляОбработки, знач ОстанавливатьИзменениеПриОшибке) - Результат = РеквизитФормыВЗначение("Объект").ВыполнитьИзменениеОбъектов(ОбъектыДляОбработки, ОстанавливатьИзменениеПриОшибке); + УправлениеСвойствамиМодуль = + ?(Метаданные.НайтиПоПолномуИмени("ОбщийМодуль.УправлениеСвойствами") = Неопределено, + Неопределено, + Вычислить("УправлениеСвойствами")); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - Возврат Результат; + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("ОбрабатываемыеОбъекты", ОбъектыДляОбработки); + СтруктураПараметров.Вставить("ОстанавливатьИзменениеПриОшибке", ОстанавливатьИзменениеПриОшибке); + СтруктураПараметров.Вставить("ИзменятьВТранзакции", ОбработкаОбъект.ИзменятьВТранзакции); + СтруктураПараметров.Вставить("ПрерыватьПриОшибке", ОбработкаОбъект.ПрерыватьПриОшибке); + СтруктураПараметров.Вставить("ИспользуютсяДопРеквизиты", ОбработкаОбъект.ИспользуютсяДопРеквизиты); + СтруктураПараметров.Вставить("ИспользуютсяДопСведения", ОбработкаОбъект.ИспользуютсяДопСведения); + СтруктураПараметров.Вставить("Операции", ОбработкаОбъект.Операции.Выгрузить()); + СтруктураПараметров.Вставить("ОбъектыДляИзменения", ОбработкаОбъект.ОбъектыДляИзменения.Выгрузить()); + СтруктураПараметров.Вставить("УправлениеСвойствамиМодуль", УправлениеСвойствамиМодуль); + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Или Не Объект.ИзменятьВТранзакции Тогда + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + Обработки.ГрупповоеИзменениеОбъектов.ВыполнитьИзменениеОбъектов(СтруктураПараметров, АдресХранилища); + РезультатФоновогоЗадания = Новый Структура("ЗаданиеВыполнено, АдресХранилища", Истина, АдресХранилища); + Иначе + НаименованиеЗадания = НСтр("ru = 'Групповое изменение объектов'"); + + РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "Обработки.ГрупповоеИзменениеОбъектов.ВыполнитьИзменениеОбъектов", + СтруктураПараметров, + НаименованиеЗадания); + КонецЕсли; + + Возврат РезультатФоновогоЗадания; КонецФункции -&НаКлиенте -Процедура НастроитьПараметрыИзменения(Команда) - - Настройки = Новый Структура; - - Настройки.Вставить("ИзменятьВТранзакции", Объект.ИзменятьВТранзакции); - Настройки.Вставить("ОбрабатыватьРекурсивно", ОбрабатыватьРекурсивно); - Настройки.Вставить("ПрерыватьПриОшибке", Объект.ПрерыватьПриОшибке); - Настройки.Вставить("НастройкаПорции", ТОНастройкаПорции); - Настройки.Вставить("ПроцентОбъектовВПорции", ТОПроцентОбъектовВПорции); - Настройки.Вставить("ЧислоОбъектовВПорции", ТОЧислоОбъектовВПорции); - Настройки.Вставить("УчитыватьИерархию", УчитыватьИерархию); - - Результат = ОткрытьФормуМодально("Обработка.ГрупповоеИзменениеОбъектов.Форма.Настройка", Настройки); - - ПереформироватьСоставОперацийИДеревоОбъектов = Ложь; - - Если ТипЗнч(Результат) = Тип("Структура") Тогда - Если УчитыватьИерархию И ОбрабатыватьРекурсивно <> Результат.ОбрабатыватьРекурсивно Тогда - ОбрабатыватьРекурсивно = Результат.ОбрабатыватьРекурсивно; - ПереформироватьСоставОперацийИДеревоОбъектов = Истина; - КонецЕсли; - Объект.ИзменятьВТранзакции = Результат.ИзменятьВТранзакции; - Объект.ПрерыватьПриОшибке = Результат.ПрерыватьПриОшибке; - ТОНастройкаПорции = Результат.НастройкаПорции; - ТОПроцентОбъектовВПорции = Результат.ПроцентОбъектовВПорции; - ТОЧислоОбъектовВПорции = Результат.ЧислоОбъектовВПорции; - КонецЕсли; - - Если ПереформироватьСоставОперацийИДеревоОбъектов Тогда - ЗаполнитьДеревоОбъектовИОпераций(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПерейтиВЖурналРегистрации(Команда) - - ПараметрыЖР = Новый Структура("Пользователь", ТекущийПользователь); - - ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма", ПараметрыЖР, ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура РазрешитьРедактированиеРеквизитовОбработчикКоманды(Команда) - - РазрешитьРедактированиеРеквизитов(); - -КонецПроцедуры - -&НаКлиенте -Процедура РазрешитьРедактированиеРеквизитов() - - ЗаблокированныеРеквизитыСтроки = Объект.Операции.НайтиСтроки(Новый Структура("ЗаблокированныйРеквизит", Истина)); - - Если ЕстьФормаРазблокированияРеквизитов Тогда - - РазрешенныеРеквизиты = ОткрытьФормуМодально(ПолноеИмяФормыРаботыСБлокируемымиРеквизитами); - - Если ТипЗнч(РазрешенныеРеквизиты) = Тип("Массив") - И РазрешенныеРеквизиты.Количество() > 0 Тогда - - Для Каждого ОписаниеОперацииСтрока Из ЗаблокированныеРеквизитыСтроки Цикл - Если ОписаниеОперацииСтрока.ЗаблокированныйРеквизит - И РазрешенныеРеквизиты.Найти(ОписаниеОперацииСтрока.ИмяРеквизита) <> Неопределено Тогда - ОписаниеОперацииСтрока.ЗаблокированныйРеквизит = Ложь; - КонецЕсли; - КонецЦикла; - - Если Объект.Операции.НайтиСтроки(Новый Структура("ЗаблокированныйРеквизит", Истина)).Количество() = 0 Тогда - Если Элементы.Найти("РазрешитьРедактированиеРеквизитов") <> Неопределено Тогда - Элементы.РазрешитьРедактированиеРеквизитов.Доступность = Ложь; - КонецЕсли; - КонецЕсли; - - КонецЕсли; - Иначе - - МассивСсылок = Новый Массив; - - ЗаполнитьМассивИзменяемыхОбъектов(ИзменяемыеОбъекты.ПолучитьЭлементы(), МассивСсылок); - - СинонимыРеквизитов = Новый Массив; - - Для Каждого ОписаниеОперацииСтрока Из ЗаблокированныеРеквизитыСтроки Цикл - СинонимыРеквизитов.Добавить(ОписаниеОперацииСтрока.Представление); - КонецЦикла; - - ЗапретРедактированияРеквизитовОбъектовКлиентМодуль = Вычислить("ЗапретРедактированияРеквизитовОбъектовКлиент"); - - Если ЗапретРедактированияРеквизитовОбъектовКлиентМодуль.ПроверитьСсылкиНаОбъект(МассивСсылок, СинонимыРеквизитов) Тогда - Если Элементы.Найти("РазрешитьРедактированиеРеквизитов") <> Неопределено Тогда - Элементы.РазрешитьРедактированиеРеквизитов.Доступность = Ложь; - КонецЕсли; - - Для Каждого ОписаниеОперацииСтрока Из ЗаблокированныеРеквизитыСтроки Цикл - ОписаниеОперацииСтрока.ЗаблокированныйРеквизит = Ложь; - КонецЦикла; - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ЗаполнитьМассивИзменяемыхОбъектов(КоллекцияСтрок, МассивСсылок) @@ -1468,20 +1189,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПометкаИзмененияПометитьВсе(Команда) - - УстановитьЗначениеПометкиИзменения(ИзменяемыеОбъекты.ПолучитьЭлементы(), Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура ПометкаИзмененияСнятьВсе(Команда) - - УстановитьЗначениеПометкиИзменения(ИзменяемыеОбъекты.ПолучитьЭлементы(), Ложь); - -КонецПроцедуры - &НаКлиенте Процедура УстановитьЗначениеПометкиИзменения(КоллекцияЭлементов, Значение) @@ -1492,9 +1199,356 @@ КонецПроцедуры - /////////////////////////////////////////////////////////////////////////////// -// Служебные функции +// Прочие операции + +&НаСервере +Процедура ЗаполнитьДеревоОбъектовДляИзменения(МассивЗаполненных) + + ТаблицаОтработанных = Новый ТаблицаЗначений; + МассивТипов = Новый Массив; + МассивТипов.Добавить(ТипЗнч(Параметры.МассивОбъектов[0])); + ТаблицаОтработанных.Колонки.Добавить("Ссылка", Новый ОписаниеТипов(МассивТипов)); + + Для Каждого Элемент Из МассивЗаполненных Цикл + ТаблицаОтработанных.Добавить().Ссылка = Элемент; + КонецЦикла; + + ОбъектМетаданных = Параметры.МассивОбъектов[0].Метаданные(); + + ВидОбъектаМетаданных = ОбщегоНазначения.ВидОбъектаПоСсылке(Параметры.МассивОбъектов[0]); + + ТекстЗапроса = + "ВЫБРАТЬ + | Ссылка + |Поместить + | Отработанные + |ИЗ + | &ТаблицаОтработанных КАК Отработанные + |; + |ВЫБРАТЬ + | Таблица.Ссылка КАК Ссылка, + | """" КАК КодОшибки, + | ВЫБОР КОГДА Отработанные.Ссылка ЕСТЬ NULL + | ТОГДА Истина + | ИНАЧЕ Ложь + |КОНЕЦ КАК Изменять,"; + + Если УчитыватьИерархию И ИерархияГрупп Тогда + ТекстЗапроса = ТекстЗапроса + " + | ВЫБОР КОГДА Таблица.ПометкаУдаления ТОГДА + | ВЫБОР КОГДА Таблица.ЭтоГруппа ТОГДА 1 + | ИНАЧЕ 3 + | КОНЕЦ + | ИНАЧЕ + | ВЫБОР КОГДА Таблица.ЭтоГруппа ТОГДА 0 + | ИНАЧЕ 2 + | КОНЕЦ + | Конец КАК КодКартинки"; + Иначе + ТекстЗапроса = ТекстЗапроса + " + | ВЫБОР КОГДА Таблица.ПометкаУдаления ТОГДА 3 + | ИНАЧЕ 2 + | КОНЕЦ КАК КодКартинки"; + КонецЕсли; + + Если УчитыватьИерархию И ИерархияГрупп Тогда + ТекстЗапроса = ТекстЗапроса + "," + " + | Таблица.ЭтоГруппа КАК ЭтоГруппа"; + Иначе + ТекстЗапроса = ТекстЗапроса + "," + " + | Ложь КАК ЭтоГруппа"; + КонецЕсли; + + СчетчикДопРеквизитов = 0; + СчетчикДопСведений = 0; + + ЛевоеСоединениеПоДопРеквизитам = ""; + ЛевоеСоединениеПоДопСведениям = ""; + + ПараметрыСвойства = Новый Соответствие; + + Для Каждого ОписаниеКолонки Из РеквизитФормыВЗначение("ИзменяемыеОбъекты").Колонки Цикл + + Если ПроверитьНеизменяемыйРеквизит(ОписаниеКолонки.Имя) Тогда + Продолжить; + КонецЕсли; + + Если ИмеетПрефикс(ОписаниеКолонки.Имя, ПрефиксИмениРеквизита()) Тогда + + ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + СтрокаБезПрефикса(ОписаниеКолонки.Имя, ПрефиксИмениРеквизита()) + " КАК " + ОписаниеКолонки.Имя + + ИначеЕсли ИмеетПрефикс(ОписаниеКолонки.Имя, ПрефиксИмениДопРеквизита()) Тогда + + СчетчикДопРеквизитов = СчетчикДопРеквизитов + 1; + ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + + СтрЗаменить("ДополнительныеРеквизиты[x].Значение КАК ", "[x]", Строка(СчетчикДопРеквизитов)) + ОписаниеКолонки.Имя; + + ЛевоеСоединениеПоДопРеквизитам = ЛевоеСоединениеПоДопРеквизитам + " + | ЛЕВОЕ СОЕДИНЕНИЕ + | [ВидОбъектаМетаданных].[ИмяОбъектаМетаданных].ДополнительныеРеквизиты КАК ДополнительныеРеквизиты[x] + | ПО ДополнительныеРеквизиты[x].Ссылка = Таблица.Ссылка + | И ДополнительныеРеквизиты[x].Свойство = &ДопРеквизит[x]"; + + ЛевоеСоединениеПоДопРеквизитам = СтрЗаменить(ЛевоеСоединениеПоДопРеквизитам, "[x]", Строка(СчетчикДопРеквизитов)); + + УнИдСтрока = СтрЗаменить(СтрокаБезПрефикса(ОписаниеКолонки.Имя, ПрефиксИмениДопРеквизита()), "_", "-"); + УнИд = Новый УникальныйИдентификатор(УнИдСтрока); + Свойство = ПланыВидовХарактеристик["ДополнительныеРеквизитыИСведения"].ПолучитьСсылку(УнИд); + + ПараметрыСвойства.Вставить(СтрЗаменить("ДопРеквизит[x]", "[x]", Строка(СчетчикДопРеквизитов)), Свойство); + + ИначеЕсли ИмеетПрефикс(ОписаниеКолонки.Имя, ПрефиксИмениДопСведения()) Тогда + СчетчикДопСведений = СчетчикДопСведений + 1; + ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + + СтрЗаменить("ДополнительныеСведения[x].Значение КАК ", "[x]", Строка(СчетчикДопСведений)) + ОписаниеКолонки.Имя; + + ЛевоеСоединениеПоДопСведениям = ЛевоеСоединениеПоДопСведениям + " + | ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения[x] + | ПО ДополнительныеСведения[x].Объект = Таблица.Ссылка + | И ДополнительныеСведения[x].Свойство = &ДопСведение[x]"; + + ЛевоеСоединениеПоДопСведениям = СтрЗаменить(ЛевоеСоединениеПоДопСведениям, "[x]", Строка(СчетчикДопСведений)); + + УнИдСтрока = СтрЗаменить(СтрокаБезПрефикса(ОписаниеКолонки.Имя, ПрефиксИмениДопСведения()), "_", "-"); + УнИд = Новый УникальныйИдентификатор(УнИдСтрока); + Свойство = ПланыВидовХарактеристик["ДополнительныеРеквизитыИСведения"].ПолучитьСсылку(УнИд); + + ПараметрыСвойства.Вставить(СтрЗаменить("ДопСведение[x]", "[x]", Строка(СчетчикДопСведений)), Свойство); + + КонецЕсли; + + КонецЦикла; + + ТекстЗапроса = ТекстЗапроса + " + |ИЗ + | [ВидОбъектаМетаданных].[ИмяОбъектаМетаданных] КАК Таблица + | ЛЕВОЕ СОЕДИНЕНИЕ Отработанные + | ПО Таблица.Ссылка = Отработанные.Ссылка"; + + ТекстЗапроса = ТекстЗапроса + ЛевоеСоединениеПоДопРеквизитам; + ТекстЗапроса = ТекстЗапроса + ЛевоеСоединениеПоДопСведениям; + + ТекстЗапроса = ТекстЗапроса + " + |ГДЕ"; + + Если ОбрабатыватьРекурсивно И УчитыватьИерархию Тогда + ТекстЗапроса = ТекстЗапроса + " + | Таблица.Ссылка В ИЕРАРХИИ(&МассивСсылок)"; + Иначе + ТекстЗапроса = ТекстЗапроса + " + | Таблица.Ссылка В (&МассивСсылок)"; + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + " + |УПОРЯДОЧИТЬ ПО"; + + Если ОбрабатыватьРекурсивно И УчитыватьИерархию И ИерархияГрупп Тогда + ТекстЗапроса = ТекстЗапроса + " + | Таблица.ЭтоГруппа ИЕРАРХИЯ ВОЗР,"; + КонецЕсли; + + Если ОбрабатыватьРекурсивно И УчитыватьИерархию И НЕ ИерархияГрупп Тогда + ТекстЗапроса = ТекстЗапроса + " + | Таблица.Ссылка ИЕРАРХИЯ ВОЗР"; + Иначе + ТекстЗапроса = ТекстЗапроса + " + | Таблица.Ссылка ВОЗР"; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ВидОбъектаМетаданных]", ВидОбъектаМетаданных); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяОбъектаМетаданных]", ОбъектМетаданных.Имя); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.Параметры.Вставить("МассивСсылок", Параметры.МассивОбъектов); + Запрос.УстановитьПараметр("ТаблицаОтработанных", ТаблицаОтработанных); + + Для Каждого ПараметрСвойство Из ПараметрыСвойства Цикл + Запрос.УстановитьПараметр(ПараметрСвойство.Ключ, ПараметрСвойство.Значение); + КонецЦикла; + + ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией), "ИзменяемыеОбъекты"); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСплошнойСписокОбъектовДляИзменения(КоллекцияЭлементов) + + Для Каждого ЭлементКоллекции Из КоллекцияЭлементов Цикл + НоваяСтрока = Объект.ОбъектыДляИзменения.Добавить(); + НоваяСтрока.Ссылка = ЭлементКоллекции.Ссылка; + ЗаполнитьСплошнойСписокОбъектовДляИзменения(ЭлементКоллекции.ПолучитьЭлементы()); + КонецЦикла; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ТекстПодсказкиСтраницыДействий(КоличествоОбъектов) + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = ' + |Нажмите кнопку ""Далее"", чтобы перейти к просмотру изменяемых объектов (%1)'"), + КоличествоОбъектов); + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьСостояниеЭлементовФормы(Элементы, Количество = 0) + + Если Количество > 0 Тогда + Элементы.ПодсказкаСтраницыДействий.Заголовок = ТекстПодсказкиСтраницыДействий(Количество); + КонецЕсли; + + Если Элементы.Страницы.ТекущаяСтраница = Элементы.НастройкаИзменений Тогда + Элементы.ФормаНазад.Доступность = Ложь; + Элементы.ФормаДалее.Доступность = Истина; + ИначеЕсли Элементы.Страницы.ТекущаяСтраница = Элементы.ИзменениеОбъектов Тогда + Элементы.ФормаНазад.Доступность = Истина; + Элементы.ФормаДалее.Доступность = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ЗаполнитьМассивИзмененных(Массив, Элементы) + + Для Каждого Элемент Из Элементы Цикл + Если НЕ Элемент.Изменять Тогда + Массив.Добавить(Элемент.Ссылка); + КонецЕсли; + Дочерние = Элемент.ПолучитьЭлементы(); + Если Дочерние.Количество() > 0 Тогда + ЗаполнитьМассивИзмененных(Массив, Дочерние); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура СформироватьИЗаполнитьДеревоИзменяемыхОбъектов() + + МассивЗаполненных = Новый Массив; + + ЗаполнитьМассивИзмененных(МассивЗаполненных, ИзменяемыеОбъекты.ПолучитьЭлементы()); + + СформироватьДеревоИзменяемыхОбъектов(); + ЗаполнитьДеревоОбъектовДляИзменения(МассивЗаполненных); + + ИзменитьТаблицуОбъектов = Ложь; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция СтрокаБезПрефикса(ИмяРеквизитаСПрефиксом, Префикс) + Возврат Прав(ИмяРеквизитаСПрефиксом, СтрДлина(ИмяРеквизитаСПрефиксом) - СтрДлина(Префикс)); +КонецФункции + +&НаСервере +Процедура СформироватьДеревоИзменяемыхОбъектов() + + СуществующийСоставРеквизитов = Новый Массив; + + Для Каждого ОписаниеКолонки Из РеквизитФормыВЗначение("ИзменяемыеОбъекты").Колонки Цикл + + Если ПроверитьНеизменяемыйРеквизит(ОписаниеКолонки.Имя) Тогда + Продолжить; + КонецЕсли; + + СуществующийСоставРеквизитов.Добавить(ОписаниеКолонки.Имя); + КонецЦикла; + + НовыйСоставРеквизитов = Новый Массив; + + Для Каждого Операция Из Объект.Операции Цикл + Если Операция.Изменять И Операция.ВидОперации = 1 Тогда + НовыйСоставРеквизитов.Добавить(ПрефиксИмениРеквизита()+Операция.ИмяРеквизита); + ИначеЕсли Операция.Изменять И Операция.ВидОперации = 2 Тогда + НовыйСоставРеквизитов.Добавить(ПрефиксИмениДопРеквизита()+СтрЗаменить(Операция.Свойство.УникальныйИдентификатор(), "-", "_")); + ИначеЕсли Операция.Изменять И Операция.ВидОперации = 3 Тогда + НовыйСоставРеквизитов.Добавить(ПрефиксИмениДопСведения()+СтрЗаменить(Операция.Свойство.УникальныйИдентификатор(), "-", "_")); + КонецЕсли; + КонецЦикла; + + ИменаДобавляемыхРеквизитов = РазницаМассивов(НовыйСоставРеквизитов, СуществующийСоставРеквизитов); + ИменаУдаляемыхРеквизитов = РазницаМассивов(СуществующийСоставРеквизитов, НовыйСоставРеквизитов); + + ДобавляемыеРеквизиты = Новый Массив; + + Для Каждого ИмяРеквизита Из ИменаДобавляемыхРеквизитов Цикл + + Если ИмеетПрефикс(ИмяРеквизита, ПрефиксИмениРеквизита()) Тогда + + Операция = Объект.Операции.НайтиСтроки(Новый Структура("ИмяРеквизита", СтрокаБезПрефикса(ИмяРеквизита, ПрефиксИмениРеквизита())))[0]; + ДопустимыеТипыМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Операция.ДопустимыеТипы, ";"); + + ТипыМассив = Новый Массив; + + Для Каждого ДопустимыйТипСтрока Из ДопустимыеТипыМассив Цикл + ТипыМассив.Добавить(Тип(ДопустимыйТипСтрока)); + КонецЦикла; + + ОписаниеТипов = Новый ОписаниеТипов(ТипыМассив); + + ИначеЕсли ИмеетПрефикс(ИмяРеквизита, ПрефиксИмениДопРеквизита()) + ИЛИ ИмеетПрефикс(ИмяРеквизита, ПрефиксИмениДопСведения()) Тогда + + Префикс = ?(ИмеетПрефикс(ИмяРеквизита, ПрефиксИмениДопРеквизита()), + ПрефиксИмениДопРеквизита(), + ПрефиксИмениДопСведения()); + + УнИд = Новый УникальныйИдентификатор(СтрЗаменить(СтрокаБезПрефикса(ИмяРеквизита, Префикс), "_", "-")); + + Свойство = ПланыВидовХарактеристик["ДополнительныеРеквизитыИСведения"].ПолучитьСсылку(УнИд); + + ОписаниеТипов = Свойство.ТипЗначения; + + Операция = Объект.Операции.НайтиСтроки(Новый Структура("Свойство", Свойство))[0]; + + КонецЕсли; + + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяРеквизита, ОписаниеТипов, "ИзменяемыеОбъекты", Операция.Представление)); + + КонецЦикла; + + УдаляемыеРеквизиты = Новый Массив; + + Для Каждого ИмяРеквизита Из ИменаУдаляемыхРеквизитов Цикл + УдаляемыеРеквизиты.Добавить("ИзменяемыеОбъекты."+ИмяРеквизита); + КонецЦикла; + + ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты); + + УдаляемыеПоляФормы = Новый Массив; + + Для Каждого ПолеФормы Из Элементы.ОбъектыДляИзменения.ПодчиненныеЭлементы Цикл + Если ТипЗнч(ПолеФормы) = Тип("ПолеФормы") И ПолеФормы.ПутьКДанным = "" Тогда + УдаляемыеПоляФормы.Добавить(ПолеФормы); + КонецЕсли; + КонецЦикла; + + Для Каждого ДобавленныйРеквизит Из ДобавляемыеРеквизиты Цикл + НовыйЭлементФормы = Элементы.Добавить(ПрефиксИмениПоляФормы()+ДобавленныйРеквизит.Имя, Тип("ПолеФормы"), Элементы.ОбъектыДляИзменения); + НовыйЭлементФормы.ПутьКДанным = "ИзменяемыеОбъекты."+ДобавленныйРеквизит.Имя; + КонецЦикла; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция РазницаМассивов(МассивИсточник, МассивВычитаемый) + + Результат = Новый Массив; + + Для Каждого ЭлементМассива Из МассивИсточник Цикл + Если МассивВычитаемый.Найти(ЭлементМассива) = Неопределено Тогда + Результат.Добавить(ЭлементМассива); + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции &НаКлиентеНаСервереБезКонтекста Функция ПроверитьНеизменяемыйРеквизит(ИмяРеквизита) diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ManagerModule.bsl index e69de29bb..76f82f50a 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ManagerModule.bsl @@ -0,0 +1,364 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура ВыполнитьИзменениеОбъектов(Параметры, АдресРезультата) Экспорт + + ОбрабатываемыеОбъекты = Параметры.ОбрабатываемыеОбъекты; + ОстанавливатьИзменениеПриОшибке = Параметры.ОстанавливатьИзменениеПриОшибке; + + ИзменятьВТранзакции = Параметры.ИзменятьВТранзакции; + ПрерыватьПриОшибке = Параметры.ПрерыватьПриОшибке; + ИспользуютсяДопРеквизиты = Параметры.ИспользуютсяДопРеквизиты; + ИспользуютсяДопСведения = Параметры.ИспользуютсяДопСведения; + + Операции = Параметры.Операции; + ОбъектыДляИзменения = Параметры.ОбъектыДляИзменения; + + УправлениеСвойствамиМодуль = Параметры.УправлениеСвойствамиМодуль; + + РезультатИзменения = Новый Структура("ЕстьОшибки, СостояниеОбработки"); + РезультатИзменения.ЕстьОшибки = Ложь; + РезультатИзменения.СостояниеОбработки = Новый Соответствие; + + Если ОстанавливатьИзменениеПриОшибке = Неопределено Тогда + ОстанавливатьИзменениеПриОшибке = ПрерыватьПриОшибке; + КонецЕсли; + + Если ОбрабатываемыеОбъекты = Неопределено Тогда + ОбрабатываемыеОбъекты = Новый Массив; + Для Каждого СтрокаИзменяемыйОбъект Из ОбъектыДляИзменения Цикл + ОбрабатываемыеОбъекты.Добавить(СтрокаИзменяемыйОбъект.Ссылка); + КонецЦикла; + КонецЕсли; + + ПроверятьНаГруппу = ПроверятьНаГруппу(ОбрабатываемыеОбъекты[0]); + + Если ИзменятьВТранзакции Тогда + НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый); + КонецЕсли; + + ОперацииИзменения = Операции.НайтиСтроки(Новый Структура("Изменять", Истина)); + + Для Каждого Ссылка Из ОбрабатываемыеОбъекты Цикл + + ИзменяемыйОбъект = Ссылка.ПолучитьОбъект(); + + Попытка + ЗаблокироватьДанныеДляРедактирования(ИзменяемыйОбъект.Ссылка); + Исключение + Инфо = ИнформацияОбОшибке(); + КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(Инфо); + ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, "Ошибка_БлокировкиОбъекта", КраткоеПредставлениеОшибки); + Если ИзменятьВТранзакции Тогда + ОтменитьТранзакцию(); + ПоместитьВоВременноеХранилище(РезультатИзменения, АдресРезультата); + Возврат; + КонецЕсли; + Если ОстанавливатьИзменениеПриОшибке Тогда + ПоместитьВоВременноеХранилище(РезультатИзменения, АдресРезультата); + Возврат; + КонецЕсли; + Продолжить; + КонецПопытки; + + ИзменяемыеРеквизитыОбъекта = Новый Массив; + ИзменяемыеДопРеквизитыОбъекта = Новый Соответствие; + ИзменяемыеДопСведенияОбъекта = Новый Соответствие; + + МассивЗаписейДопСведений = Новый Массив; + + /////////////////////////////////////////////////////////////////////////////////////// + // Отбор операций изменения по каждому объекту + // + + Для Каждого Операция Из ОперацииИзменения Цикл + + Если Операция.ВидОперации = 1 Тогда // изменение реквизита + + // для групп не устанавливаем реквизиты, которых у них нет + Если ПроверятьНаГруппу И ИзменяемыйОбъект.ЭтоГруппа Тогда + Если НЕ ОбщегоНазначения.ЭтоСтандартныйРеквизит(ИзменяемыйОбъект.Метаданные().СтандартныеРеквизиты, Операция.ИмяРеквизита) Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + ИзменяемыйОбъект[Операция.ИмяРеквизита] = Операция.Значение; + ИзменяемыеРеквизитыОбъекта.Добавить(Операция.ИмяРеквизита); + + ИначеЕсли Операция.ВидОперации = 2 Тогда // изменение доп реквизита + + Если Не СвойствоНужноИзменять(ИзменяемыйОбъект.Ссылка, Операция.Свойство, Параметры) Тогда + Продолжить; + КонецЕсли; + + НайденнаяСтрока = ИзменяемыйОбъект.ДополнительныеРеквизиты.Найти(Операция.Свойство, "Свойство"); + + Если НайденнаяСтрока = Неопределено Тогда + НайденнаяСтрока = ИзменяемыйОбъект.ДополнительныеРеквизиты.Добавить(); + НайденнаяСтрока.Свойство = Операция.Свойство; + КонецЕсли; + + НайденнаяСтрока.Значение = Операция.Значение; + + ИмяРеквизитаФормы = ПрефиксИмениДопРеквизита() + СтрЗаменить(Строка(Операция.Свойство.УникальныйИдентификатор()), "-", "_"); + ИзменяемыеДопРеквизитыОбъекта.Вставить(ИмяРеквизитаФормы, Операция.Значение); + + ИначеЕсли Операция.ВидОперации = 3 Тогда // изменение доп сведения + + Если Не СвойствоНужноИзменять(ИзменяемыйОбъект.Ссылка, Операция.Свойство, Параметры) Тогда + Продолжить; + КонецЕсли; + + МенеджерЗаписи = РегистрыСведений["ДополнительныеСведения"].СоздатьМенеджерЗаписи(); + + МенеджерЗаписи.Объект = ИзменяемыйОбъект.Ссылка; + МенеджерЗаписи.Свойство = Операция.Свойство; + МенеджерЗаписи.Значение = Операция.Значение; + + МассивЗаписейДопСведений.Добавить(МенеджерЗаписи); + + ИмяРеквизитаФормы = ПрефиксИмениДопСведения() + СтрЗаменить(Строка(Операция.Свойство.УникальныйИдентификатор()), "-", "_"); + ИзменяемыеДопСведенияОбъекта.Вставить(ИмяРеквизитаФормы, Операция.Значение); + + КонецЕсли; + + КонецЦикла; + + // + // Отбор операций изменения по каждому объекту + /////////////////////////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////////////////////////// + // Блок обработки проверки заполнения + // + + ПрерватьИзменение = Ложь; + ПроверкаЗаполненияУспешно = Истина; + + Попытка + Если ИзменяемыйОбъект.ПроверитьЗаполнение() Тогда + + Иначе + ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, "Ошибка_ОбработкиПроверкиЗаполнения", + НСтр("ru = 'Ошибка проверки заполнения.'")+ПолучитьСтрокуСообщенийОбОшибках()); + Если ОстанавливатьИзменениеПриОшибке Или ИзменятьВТранзакции Тогда + ПрерватьИзменение = Истина; + КонецЕсли; + ПроверкаЗаполненияУспешно = Ложь; + КонецЕсли; + Исключение + Инфо = ИнформацияОбОшибке(); + КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(Инфо); + ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, "Ошибка_НеКлассифицированная", КраткоеПредставлениеОшибки); + Если ОстанавливатьИзменениеПриОшибке Или ИзменятьВТранзакции Тогда + ПрерватьИзменение = Истина; + КонецЕсли; + ПроверкаЗаполненияУспешно = Ложь; + КонецПопытки; + + Если ПрерватьИзменение Тогда + Если ИзменятьВТранзакции Тогда + ОтменитьТранзакцию(); + КонецЕсли; + ПоместитьВоВременноеХранилище(РезультатИзменения, АдресРезультата); + Возврат; + КонецЕсли; + + Если НЕ ПроверкаЗаполненияУспешно Тогда + Продолжить; + КонецЕсли; + + // + // Блок обработки проверки заполнения + /////////////////////////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////////////////////////// + // Блок записи дополнительных сведений + // + + Если МассивЗаписейДопСведений.Количество() > 0 Тогда + + Если НЕ ИзменятьВТранзакции Тогда + // Если транзакция при изменении объектов не используется, включаем ее + // для изменения доп сведений в регистре + НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый); + КонецЕсли; + + Попытка + Для Каждого МенеджерЗаписи Из МассивЗаписейДопСведений Цикл + МенеджерЗаписи.Записать(Истина); + КонецЦикла; + Исключение + Инфо = ИнформацияОбОшибке(); + + КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(Инфо); + ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, "Ошибка_ЗаписиДопСведений", КраткоеПредставлениеОшибки); + + ОтменитьТранзакцию(); + + Если ИзменятьВТранзакции ИЛИ ОстанавливатьИзменениеПриОшибке Тогда + ПоместитьВоВременноеХранилище(РезультатИзменения, АдресРезультата); + Возврат; + КонецЕсли; + КонецПопытки; + + КонецЕсли; + + // + // Блок записи дополнительных сведений + /////////////////////////////////////////////////////////////////////////////////////// + + Отказ = Ложь; + Попытка + ИзменяемыйОбъект.Записать(); + Исключение + Инфо = ИнформацияОбОшибке(); + Отказ = Истина; + КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(Инфо); + ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, + "Ошибка_ЗаписиОбъекта", + КраткоеПредставлениеОшибки + Символы.ПС + ПолучитьСтрокуСообщенийОбОшибках()); + Если ИзменятьВТранзакции И ТранзакцияАктивна() Тогда // отменяем транзакцию на любом уровне рекурсии + ОтменитьТранзакцию(); + КонецЕсли; + Если ПрерыватьПриОшибке Тогда + ПоместитьВоВременноеХранилище(РезультатИзменения, АдресРезультата); + Возврат; + КонецЕсли; + КонецПопытки; + + // Фиксируем транзакцию записи доп. свойств, если запись объектов происходит + // не в транзакции + Если НЕ ИзменятьВТранзакции И МассивЗаписейДопСведений.Количество() > 0 Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; + + Если Не Отказ Тогда + ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, "",, + ИзменяемыйОбъект, ИзменяемыеРеквизитыОбъекта, + ИзменяемыеДопРеквизитыОбъекта, ИзменяемыеДопСведенияОбъекта); + КонецЕсли; + + РазблокироватьДанныеДляРедактирования(ИзменяемыйОбъект.Ссылка); + + КонецЦикла; + + Если ИзменятьВТранзакции И ТранзакцияАктивна() Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; + + ПоместитьВоВременноеХранилище(РезультатИзменения, АдресРезультата); + Возврат; + +КонецПроцедуры + +Функция СвойствоНужноИзменять(Ссылка, Свойство, Параметры) + + ОбъектыДляИзменения = Параметры.ОбъектыДляИзменения; + УправлениеСвойствамиМодуль = Параметры.УправлениеСвойствамиМодуль; + + Если УправлениеСвойствамиМодуль = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + СтрокаИзменяемогоОбъекта = ОбъектыДляИзменения.Найти(Ссылка, "Ссылка"); + + Если СтрокаИзменяемогоОбъекта = Неопределено Тогда + Если НЕ УправлениеСвойствамиМодуль.ПроверитьСвойствоУОбъекта(Ссылка, Свойство) Тогда + Возврат Ложь; + КонецЕсли; + Иначе + СвойствоНайдено = Ложь; + + Если Свойство.ЭтоДополнительноеСведение Тогда + КоллекцияСвойств = СтрокаИзменяемогоОбъекта.СоставДопСведений; + Иначе + КоллекцияСвойств = СтрокаИзменяемогоОбъекта.СоставДопРеквизитов; + КонецЕсли; + + Если ПустаяСтрока(КоллекцияСвойств) Тогда + Возврат Ложь; + КонецЕсли; + + Для ИндексСтроки = 1 По СтрЧислоСтрок(КоллекцияСвойств) Цикл + СтрокаУИд = СтрПолучитьСтроку(КоллекцияСвойств, ИндексСтроки); + СвойствоОбъекта = ПланыВидовХарактеристик["ДополнительныеРеквизитыИСведения"].ПолучитьСсылку(Новый УникальныйИдентификатор(СокрЛП(СтрокаУИд))); + Если Свойство = СвойствоОбъекта Тогда // свойство найдено у объекта + СвойствоНайдено = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не СвойствоНайдено Тогда + Возврат Ложь; + КонецЕсли; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ПолучитьСтрокуСообщенийОбОшибках() + + ПредставлениеОшибки = ""; + МассивСообщений = ПолучитьСообщенияПользователю(Истина); + + Для Каждого СообщениеПользователю Из МассивСообщений Цикл + ПредставлениеОшибки = ПредставлениеОшибки + СообщениеПользователю.Текст + Символы.ПС; + КонецЦикла; + + Возврат ПредставлениеОшибки; + +КонецФункции + +Процедура ЗаполнитьРезультатИзменения(Результат, Ссылка, КодОшибки, СообщениеОбОшибке = "", + ИзменяемыйОбъект = Неопределено, ИзменяемыеРеквизитыОбъекта = Неопределено, + ИзменяемыеДопРеквизитыОбъекта = Неопределено, ИзменяемыеДопСведенияОбъекта = Неопределено) + + СостояниеИзменения = Новый Структура("КодОшибки,СообщениеОбОшибке"); + + Если ПустаяСтрока(КодОшибки) Тогда + СостояниеИзменения.Вставить("ЗначенияИзмененныхРеквизитов", Новый Соответствие); + Если ИзменяемыеРеквизитыОбъекта <> Неопределено Тогда + Для Каждого ИмяРеквизита Из ИзменяемыеРеквизитыОбъекта Цикл + СостояниеИзменения.ЗначенияИзмененныхРеквизитов.Вставить(ИмяРеквизита, ИзменяемыйОбъект[ИмяРеквизита]); + КонецЦикла; + КонецЕсли; + СостояниеИзменения.Вставить("ЗначенияИзмененныхДопРеквизитов", ИзменяемыеДопРеквизитыОбъекта); + СостояниеИзменения.Вставить("ЗначенияИзмененныхДопСведений", ИзменяемыеДопСведенияОбъекта); + Иначе + Результат.ЕстьОшибки = Истина; + КонецЕсли; + + СостояниеИзменения.КодОшибки = КодОшибки; + СостояниеИзменения.СообщениеОбОшибке = СообщениеОбОшибке; + + Результат.СостояниеОбработки.Вставить(Ссылка, СостояниеИзменения); + +КонецПроцедуры + +Функция ПрефиксИмениДопРеквизита() + Возврат "ДопРеквизит_"; +КонецФункции + +Функция ПрефиксИмениДопСведения() + Возврат "ДопСведение_"; +КонецФункции + +Функция ПроверятьНаГруппу(Ссылка) + + ВидОбъекта = ОбщегоНазначения.ВидОбъектаПоСсылке(Ссылка); + МетаданныеОбъекта = Ссылка.Метаданные(); + + Если ВидОбъекта = "Справочник" + И МетаданныеОбъекта.Иерархический + И МетаданныеОбъекта.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда + + Возврат Истина; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ObjectModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ObjectModule.bsl index a41f6d56b..ce6eafd8e 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ObjectModule.bsl @@ -1,3 +1,4 @@ +//////////////////////////////////////////////////////////////////////////////// // Описание обработки // Табличная часть Операции - содержит набор информации, описывающей изменения. // Одна запись при этом описывает одно изменение. @@ -17,16 +18,16 @@ // ЗаблокированныйРеквизит - Булево - это заблокированный реквизит // ДопустимыеТипы - Строка - содержит перечисление названий типов (через ";") // +//////////////////////////////////////////////////////////////////////////////// -Перем НетОшибок, - Ошибка_НеКлассифицированная, // устанавливается, если нельзя определить точную причину - Ошибка_ОбработкиПроверкиЗаполнения, // возникает, если обработка проверки заполнения вернула отказ - Ошибка_ЗаписиОбъекта, // возникает, если во время записи объекта возникло исключение - Ошибка_БлокировкиОбъекта, // возникает, при попытке блокировки объекта - Ошибка_ЗаписиДопСведений; // возникает, при попытке записи дополнительных сведений +//////////////////////////////////////////////////////////////////////////////// +// РАЗДЕЛ ОПИСАНИЯ ПЕРЕМЕННЫХ Перем УправлениеСвойствамиМодуль; +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Процедура заполняет таблицу операций объекта: // 1. Реквизиты // 2. Свойства @@ -158,356 +159,6 @@ КонецПроцедуры -// Выполняет изменение в объектах -// -// Параметры: -// ОбъектыМассив - массив ссылок, подмножество (или полное множество) -// ссылок из ОбъектыДляИзменения, необязательный -// УправлениеТранзакцией - булево - используется функцией при рекурсивном вызове, -// что бы не устанавливать (не завершать) транзакцию -// -Функция ВыполнитьИзменениеОбъектов(ОбрабатываемыеОбъекты = Неопределено, - знач ОстанавливатьИзменениеПриОшибке = Неопределено) Экспорт - - РезультатИзменения = Новый Структура("ЕстьОшибки, СостояниеОбработки"); - РезультатИзменения.ЕстьОшибки = Ложь; - РезультатИзменения.СостояниеОбработки = Новый Соответствие; - - Если ОстанавливатьИзменениеПриОшибке = Неопределено Тогда - ОстанавливатьИзменениеПриОшибке = ПрерыватьПриОшибке; - КонецЕсли; - - Если ОбрабатываемыеОбъекты = Неопределено Тогда - ОбрабатываемыеОбъекты = Новый Массив; - Для Каждого СтрокаИзменяемыйОбъект Из ОбъектыДляИзменения Цикл - ОбрабатываемыеОбъекты.Добавить(СтрокаИзменяемыйОбъект.Ссылка); - КонецЦикла; - КонецЕсли; - - ПроверятьНаГруппу = ПроверятьНаГруппу(ОбрабатываемыеОбъекты[0]); - - Если ИзменятьВТранзакции Тогда - НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый); - КонецЕсли; - - ОперацииИзменения = Операции.НайтиСтроки(Новый Структура("Изменять", Истина)); - - Для Каждого Ссылка Из ОбрабатываемыеОбъекты Цикл - - ИзменяемыйОбъект = Ссылка.ПолучитьОбъект(); - - Попытка - ЗаблокироватьДанныеДляРедактирования(ИзменяемыйОбъект.Ссылка); - Исключение - Инфо = ИнформацияОбОшибке(); - КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(Инфо); - ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, Ошибка_БлокировкиОбъекта, КраткоеПредставлениеОшибки); - Если ИзменятьВТранзакции Тогда - ОтменитьТранзакцию(); - Возврат РезультатИзменения; - КонецЕсли; - Если ОстанавливатьИзменениеПриОшибке Тогда - Возврат РезультатИзменения; - КонецЕсли; - Продолжить; - КонецПопытки; - - ИзменяемыеРеквизитыОбъекта = Новый Массив; - ИзменяемыеДопРеквизитыОбъекта = Новый Соответствие; - ИзменяемыеДопСведенияОбъекта = Новый Соответствие; - - МассивЗаписейДопСведений = Новый Массив; - - /////////////////////////////////////////////////////////////////////////////////////// - // Отбор операций изменения по каждому объекту - // - - Для Каждого Операция Из ОперацииИзменения Цикл - - Если Операция.ВидОперации = 1 Тогда // изменение реквизита - - // для групп не устанавливаем реквизиты, которых у них нет - Если ПроверятьНаГруппу И ИзменяемыйОбъект.ЭтоГруппа Тогда - Если НЕ ОбщегоНазначения.ЭтоСтандартныйРеквизит(ИзменяемыйОбъект.Метаданные().СтандартныеРеквизиты, Операция.ИмяРеквизита) Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - - ИзменяемыйОбъект[Операция.ИмяРеквизита] = Операция.Значение; - ИзменяемыеРеквизитыОбъекта.Добавить(Операция.ИмяРеквизита); - - ИначеЕсли Операция.ВидОперации = 2 Тогда // изменение доп реквизита - - Если Не СвойствоНужноИзменять(ИзменяемыйОбъект.Ссылка, Операция.Свойство) Тогда - Продолжить; - КонецЕсли; - - НайденнаяСтрока = ИзменяемыйОбъект.ДополнительныеРеквизиты.Найти(Операция.Свойство, "Свойство"); - - Если НайденнаяСтрока = Неопределено Тогда - НайденнаяСтрока = ИзменяемыйОбъект.ДополнительныеРеквизиты.Добавить(); - НайденнаяСтрока.Свойство = Операция.Свойство; - КонецЕсли; - - НайденнаяСтрока.Значение = Операция.Значение; - - ИмяРеквизитаФормы = ПрефиксИмениДопРеквизита() + СтрЗаменить(Строка(Операция.Свойство.УникальныйИдентификатор()), "-", "_"); - ИзменяемыеДопРеквизитыОбъекта.Вставить(ИмяРеквизитаФормы, Операция.Значение); - - ИначеЕсли Операция.ВидОперации = 3 Тогда // изменение доп сведения - - Если Не СвойствоНужноИзменять(ИзменяемыйОбъект.Ссылка, Операция.Свойство) Тогда - Продолжить; - КонецЕсли; - - МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи(); - - МенеджерЗаписи.Объект = ИзменяемыйОбъект.Ссылка; - МенеджерЗаписи.Свойство = Операция.Свойство; - МенеджерЗаписи.Значение = Операция.Значение; - - МассивЗаписейДопСведений.Добавить(МенеджерЗаписи); - - ИмяРеквизитаФормы = ПрефиксИмениДопСведения() + СтрЗаменить(Строка(Операция.Свойство.УникальныйИдентификатор()), "-", "_"); - ИзменяемыеДопСведенияОбъекта.Вставить(ИмяРеквизитаФормы, Операция.Значение); - - КонецЕсли; - - КонецЦикла; // Для Каждого Операция Из ОперацииИзменения Цикл - - // - // Отбор операций изменения по каждому объекту - /////////////////////////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////////////////////////// - // Блок обработки проверки заполнения - // - - ПрерватьИзменение = Ложь; - ПроверкаЗаполненияУспешно = Истина; - - Попытка - Если ИзменяемыйОбъект.ПроверитьЗаполнение() Тогда - - Иначе - ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, Ошибка_ОбработкиПроверкиЗаполнения, - НСтр("ru = 'Ошибка проверки заполнения.'")+ПолучитьСтрокуСообщенийОбОшибках()); - Если ОстанавливатьИзменениеПриОшибке Или ИзменятьВТранзакции Тогда - ПрерватьИзменение = Истина; - КонецЕсли; - ПроверкаЗаполненияУспешно = Ложь; - КонецЕсли; - Исключение - Инфо = ИнформацияОбОшибке(); - КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(Инфо); - ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, Ошибка_НеКлассифицированная, КраткоеПредставлениеОшибки); - Если ОстанавливатьИзменениеПриОшибке Или ИзменятьВТранзакции Тогда - ПрерватьИзменение = Истина; - КонецЕсли; - ПроверкаЗаполненияУспешно = Ложь; - КонецПопытки; - - Если ПрерватьИзменение Тогда - Если ИзменятьВТранзакции Тогда - ОтменитьТранзакцию(); - КонецЕсли; - - Возврат РезультатИзменения; - КонецЕсли; - - Если НЕ ПроверкаЗаполненияУспешно Тогда - Продолжить; - КонецЕсли; - - // - // Блок обработки проверки заполнения - /////////////////////////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////////////////////////// - // Блок записи дополнительных сведений - // - - Если МассивЗаписейДопСведений.Количество() > 0 Тогда - - Если НЕ ИзменятьВТранзакции Тогда - // Если транзакция при изменении объектов не используется, включаем ее - // для изменения доп сведений в регистре - НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый); - КонецЕсли; - - Попытка - Для Каждого МенеджерЗаписи Из МассивЗаписейДопСведений Цикл - МенеджерЗаписи.Записать(Истина); - КонецЦикла; - Исключение - Инфо = ИнформацияОбОшибке(); - - КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(Инфо); - ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, Ошибка_ЗаписиДопСведений, КраткоеПредставлениеОшибки); - - ОтменитьТранзакцию(); - - Если ИзменятьВТранзакции ИЛИ ОстанавливатьИзменениеПриОшибке Тогда - Возврат РезультатИзменения; - КонецЕсли; - КонецПопытки; - - КонецЕсли; - - // - // Блок записи дополнительных сведений - /////////////////////////////////////////////////////////////////////////////////////// - - Попытка - ИзменяемыйОбъект.Записать(); - Исключение - Инфо = ИнформацияОбОшибке(); - Отказ = Истина; - КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(Инфо); - ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, - Ошибка_ЗаписиОбъекта, - КраткоеПредставлениеОшибки + Символы.ПС + ПолучитьСтрокуСообщенийОбОшибках()); - Если ИзменятьВТранзакции Тогда // отменяем транзакцию на любом уровне рекурсии - ОтменитьТранзакцию(); - КонецЕсли; - Если ПрерыватьПриОшибке Тогда - Возврат РезультатИзменения; - КонецЕсли; - КонецПопытки; - - // Фиксируем транзакцию записи доп. свойств если запись объектов происходит - // не в транзакции - Если НЕ ИзменятьВТранзакции И МассивЗаписейДопСведений.Количество() > 0 Тогда - ЗафиксироватьТранзакцию(); - КонецЕсли; - - ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, НетОшибок,, - ИзменяемыйОбъект, ИзменяемыеРеквизитыОбъекта, - ИзменяемыеДопРеквизитыОбъекта, ИзменяемыеДопСведенияОбъекта); - - РазблокироватьДанныеДляРедактирования(ИзменяемыйОбъект.Ссылка); - - КонецЦикла; - - Если ИзменятьВТранзакции Тогда - ЗафиксироватьТранзакцию(); - КонецЕсли; - - Возврат РезультатИзменения; - -КонецФункции - -/////////////////////////////////////////////////////////////////////////////// -// Блок служебных процедур и функций - -Функция СвойствоНужноИзменять(Ссылка, Свойство) - - Если УправлениеСвойствамиМодуль = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - - СтрокаИзменяемогоОбъекта = ОбъектыДляИзменения.Найти(Ссылка, "Ссылка"); - - Если СтрокаИзменяемогоОбъекта = Неопределено Тогда - Если НЕ УправлениеСвойствамиМодуль.ПроверитьСвойствоУОбъекта(Ссылка, Свойство) Тогда - Возврат Ложь; - КонецЕсли; - Иначе - СвойствоНайдено = Ложь; - - Если Свойство.ЭтоДополнительноеСведение Тогда - КоллекцияСвойств = СтрокаИзменяемогоОбъекта.СоставДопСведений; - Иначе - КоллекцияСвойств = СтрокаИзменяемогоОбъекта.СоставДопРеквизитов; - КонецЕсли; - - Если ПустаяСтрока(КоллекцияСвойств) Тогда - Возврат Ложь; - КонецЕсли; - - Для ИндексСтроки = 1 По СтрЧислоСтрок(КоллекцияСвойств) Цикл - СтрокаУИд = СтрПолучитьСтроку(КоллекцияСвойств, ИндексСтроки); - СвойствОбъекта = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПолучитьСсылку(Новый УникальныйИдентификатор(СокрЛП(СтрокаУИд))); - Если Свойство = СвойствОбъекта Тогда // свойство найдено у объекта - СвойствоНайдено = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - Если Не СвойствоНайдено Тогда - Возврат Ложь; - КонецЕсли; - - КонецЕсли; - - Возврат Истина; - -КонецФункции - -Функция ПолучитьСтрокуСообщенийОбОшибках() - - ПредставлениеОшибки = ""; - МассивСообщений = ПолучитьСообщенияПользователю(Истина); - - Для Каждого СообщениеПользователю Из МассивСообщений Цикл - ПредставлениеОшибки = ПредставлениеОшибки + СообщениеПользователю.Текст + Символы.ПС; - КонецЦикла; - - Возврат ПредставлениеОшибки; - -КонецФункции - -Процедура ЗаполнитьРезультатИзменения(Результат, Ссылка, КодОшибки, СообщениеОбОшибке = "", - ИзменяемыйОбъект = Неопределено, ИзменяемыеРеквизитыОбъекта = Неопределено, - ИзменяемыеДопРеквизитыОбъекта = Неопределено, ИзменяемыеДопСведенияОбъекта = Неопределено) - - СостояниеИзменения = Новый Структура("КодОшибки,СообщениеОбОшибке"); - - Если КодОшибки = НетОшибок Тогда - СостояниеИзменения.Вставить("ЗначенияИзмененныхРеквизитов", Новый Соответствие); - Если ИзменяемыеРеквизитыОбъекта <> Неопределено Тогда - Для Каждого ИмяРеквизита Из ИзменяемыеРеквизитыОбъекта Цикл - СостояниеИзменения.ЗначенияИзмененныхРеквизитов.Вставить(ИмяРеквизита, ИзменяемыйОбъект[ИмяРеквизита]); - КонецЦикла; - КонецЕсли; - СостояниеИзменения.Вставить("ЗначенияИзмененныхДопРеквизитов", ИзменяемыеДопРеквизитыОбъекта); - СостояниеИзменения.Вставить("ЗначенияИзмененныхДопСведений", ИзменяемыеДопСведенияОбъекта); - Иначе - Результат.ЕстьОшибки = Истина; - КонецЕсли; - - СостояниеИзменения.КодОшибки = КодОшибки; - СостояниеИзменения.СообщениеОбОшибке = СообщениеОбОшибке; - - Результат.СостояниеОбработки.Вставить(Ссылка, СостояниеИзменения); - -КонецПроцедуры - -Функция ПрефиксИмениДопРеквизита() - Возврат "ДопРеквизит_"; -КонецФункции - -Функция ПрефиксИмениДопСведения() - Возврат "ДопСведение_"; -КонецФункции - -Функция ПроверятьНаГруппу(Ссылка) - - ВидОбъекта = ОбщегоНазначения.ВидОбъектаПоСсылке(Ссылка); - МетаданныеОбъекта = Ссылка.Метаданные(); - - Если ВидОбъекта = "Справочник" - И МетаданныеОбъекта.Иерархический - И МетаданныеОбъекта.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда - - Возврат Истина; - - КонецЕсли; - - Возврат Ложь; - -КонецФункции - Процедура ДобавитьДополнительныеРеквизитыИСведенияВНабор() ТаблицаДопРеквизитов = Новый ТаблицаЗначений; @@ -792,13 +443,8 @@ КонецФункции -// нет информации 0 -НетОшибок = 1; -Ошибка_НеКлассифицированная = 2; -Ошибка_ОбработкиПроверкиЗаполнения = 3; -Ошибка_ЗаписиОбъекта = 4; -Ошибка_БлокировкиОбъекта = 5; -Ошибка_ЗаписиДопСведений = 6; +//////////////////////////////////////////////////////////////////////////////// +// РАЗДЕЛ ИНИЦИАЛИЗАЦИИ // Для использования обработки без подсистемы свойств, связь с модулем УправлениеСвойствами // вычисляется в режиме предприятия, а не на этапе компиляции diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form index 540b22228..7c721c7c6 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form @@ -32,7 +32,7 @@ </handlers> <extendedTooltip> <name>КоличествоПоказываемыхСобытийРасширеннаяПодсказка</name> - <id>129</id> + <id>134</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -122,7 +122,7 @@ </dataPath> <extendedTooltip> <name>ПредставлениеОтбораРасширеннаяПодсказка</name> - <id>131</id> + <id>136</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -161,7 +161,7 @@ </toolTip> <extendedTooltip> <name>ГруппаОтбораРасширеннаяПодсказка</name> - <id>128</id> + <id>133</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -178,87 +178,18 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> - <items xsi:type="form:Table"> - <name>Журнал</name> - <id>48</id> - <title> - <key>ru</key> - <value>Журнал событий</value> - - true - true - - true - - - Журнал - - true - false - None - Add - Change - Copy - CopyToClipboard - EndEdit - MoveDown - MoveUp - - Дата - 51 - - <key>ru</key> - <value>Дата, время</value> - - true - true - - true - - - Журнал.Дата - - - ДатаРасширеннаяПодсказка - 148 - Label - true - true - - Left - - - - ДатаКонтекстноеМеню - 52 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - + + Страницы + 116 - ГруппаПользовательКомпьютерПриложение - 53 - - ИмяПользователя - 54 + ЖурналРегистрации + 117 + + Журнал + 48 <key>ru</key> - <value>Пользователь</value> + <value>Журнал событий</value> true true @@ -266,96 +197,23 @@ true - Журнал.ИмяПользователя + Журнал - - ИмяПользователяРасширеннаяПодсказка - 151 - Label - true - true - - Left - - - - ИмяПользователяКонтекстноеМеню - 55 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - Компьютер - 56 - - <key>ru</key> - <value>Компьютер</value> - - true - true - - true - - - Журнал.Компьютер - - - КомпьютерРасширеннаяПодсказка - 153 - Label - true - true - - Left - - - - КомпьютерКонтекстноеМеню - 57 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - ГруппаПриложение - 58 + false + None + Add + Change + Copy + CopyToClipboard + EndEdit + MoveDown + MoveUp - ПредставлениеПриложения - 59 + Дата + 51 <key>ru</key> - <value>Приложение</value> + <value>Дата, время</value> true true @@ -363,11 +221,11 @@ true - Журнал.ПредставлениеПриложения + Журнал.Дата - ПредставлениеПриложенияРасширеннаяПодсказка - 156 + ДатаРасширеннаяПодсказка + 155 Label true true @@ -376,8 +234,8 @@ - ПредставлениеПриложенияКонтекстноеМеню - 60 + ДатаКонтекстноеМеню + 52 true InputField @@ -397,20 +255,804 @@ Normal - - Сеанс - 80 + + ГруппаПользовательКомпьютерПриложение + 53 + + ИмяПользователя + 54 + + <key>ru</key> + <value>Пользователь</value> + + true + true + + true + + + Журнал.ИмяПользователя + + + ИмяПользователяРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + + ИмяПользователяКонтекстноеМеню + 55 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Компьютер + 56 + + <key>ru</key> + <value>Компьютер</value> + + true + true + + true + + + Журнал.Компьютер + + + КомпьютерРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + + КомпьютерКонтекстноеМеню + 57 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ГруппаПриложение + 58 + + ПредставлениеПриложения + 59 + + <key>ru</key> + <value>Приложение</value> + + true + true + + true + + + Журнал.ПредставлениеПриложения + + + ПредставлениеПриложенияРасширеннаяПодсказка + 163 + Label + true + true + + Left + + + + ПредставлениеПриложенияКонтекстноеМеню + 60 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Сеанс + 80 + true + true + + true + + + Журнал.Сеанс + + + СеансРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + + СеансКонтекстноеМеню + 81 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + true + true + + true + + + ГруппаПриложениеРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + ColumnGroup + + auto + true + + true true true - - Журнал.Сеанс - - СеансРасширеннаяПодсказка - 158 + ГруппаПользовательКомпьютерПриложениеРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаСервер + 84 + + РабочийСервер + 85 + true + true + + true + + + Журнал.РабочийСервер + + + РабочийСерверРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + + РабочийСерверКонтекстноеМеню + 86 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ОсновнойIPПорт + 89 + true + true + + true + + + Журнал.ОсновнойIPПорт + + + ОсновнойIPПортРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + + ОсновнойIPПортКонтекстноеМеню + 90 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ВспомогательныйIPПорт + 91 + true + true + + true + + + Журнал.ВспомогательныйIPПорт + + + ru + Вспомогательный IP порт + + + ВспомогательныйIPПортРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + + ВспомогательныйIPПортКонтекстноеМеню + 92 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + true + true + + + <key>ru</key> + <value>Группа сервер</value> + + + ru + Группа сервер + + + ГруппаСерверРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаСобытие + 63 + + ПредставлениеСобытия + 64 + + <key>ru</key> + <value>Событие</value> + + true + true + + true + + + Журнал.ПредставлениеСобытия + + + ПредставлениеСобытияРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + + ПредставлениеСобытияКонтекстноеМеню + 65 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Комментарий + 66 + + <key>ru</key> + <value>Комментарий</value> + + true + true + + true + + + Журнал.Комментарий + + + КомментарийРасширеннаяПодсказка + 177 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 67 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + true + true + + true + + + ГруппаСобытиеРасширеннаяПодсказка + 174 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаТранзакция + 68 + + СтатусТранзакции + 69 + + <key>ru</key> + <value>Статус транзакции</value> + + true + true + + true + + + Журнал.СтатусТранзакции + + + СтатусТранзакцииРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + + СтатусТранзакцииКонтекстноеМеню + 70 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Транзакция + 71 + true + true + + true + + + Журнал.Транзакция + + + ТранзакцияРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + + ТранзакцияКонтекстноеМеню + 72 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + true + true + + true + + + ГруппаТранзакцияРасширеннаяПодсказка + 179 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаДанные + 73 + + ПредставлениеМетаданных + 74 + + <key>ru</key> + <value>Метаданные</value> + + true + true + + true + + + Журнал.ПредставлениеМетаданных + + + ПредставлениеМетаданныхРасширеннаяПодсказка + 185 + Label + true + true + + Left + + + + ПредставлениеМетаданныхКонтекстноеМеню + 75 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Данные + 76 + true + true + + true + + + Журнал.Данные + + + ДанныеРасширеннаяПодсказка + 187 + Label + true + true + + Left + + + + ДанныеКонтекстноеМеню + 77 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ПредставлениеДанных + 78 + true + true + + true + + + Журнал.ПредставлениеДанных + + + ПредставлениеДанныхРасширеннаяПодсказка + 189 + Label + true + true + + Left + + + + ПредставлениеДанныхКонтекстноеМеню + 79 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + ГруппаДанныеРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + None + + ЖурналКоманднаяПанель + 50 + Left + + + Selection + ЖурналВыбор + + + ЖурналСтрокаПоиска + 146 + + ЖурналСтрокаПоискаРасширеннаяПодсказка + 148 Label true true @@ -419,220 +1061,288 @@ - СеансКонтекстноеМеню - 81 + ЖурналСтрокаПоискаКонтекстноеМеню + 147 true - InputField - Enter - true - Left - true - + Журнал + + true + + + + ЖурналСостояниеПросмотра + 149 + + ЖурналСостояниеПросмотраРасширеннаяПодсказка + 151 + Label true true - true - true - true + + Left + + + + ЖурналСостояниеПросмотраКонтекстноеМеню + 150 + true + + ViewStatusAddition + Журнал + + true + + + + ЖурналУправлениеПоиском + 152 + + ЖурналУправлениеПоискомРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + + ЖурналУправлениеПоискомКонтекстноеМеню + 153 + true + + SearchControlAddition + Журнал + + true + + + + ЖурналРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + + ЖурналКонтекстноеМеню + 49 + + ОтборГруппаКонтекст + 107 + + УстановитьОтборПоЗначениюВТекущейКолонкеКонтекст + 98 + true + true + + true + + false + + УстановитьОтборПоЗначениюВТекущейКолонкеКонтекстРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + Form.Command.УстановитьОтборПоЗначениюВТекущейКолонке + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + ЖурналКонтекстноеМенюОтключитьОтбор + 113 + true + true + + true + + + ЖурналКонтекстноеМенюОтключитьОтборРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + Form.Command.ОтключитьОтбор + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Отбор группа контекст</value> + + + ru + Отбор группа контекст + + + ОтборГруппаКонтекстРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + + + + ПросмотрТекущегоСобытияВОтдельномОкнеКонтекст + 96 + true + true + + true + + false + + ПросмотрТекущегоСобытияВОтдельномОкнеКонтекстРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + Form.Command.ПросмотрТекущегоСобытияВОтдельномОкне + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + Style.BorderColor - Normal - - - true - true - - true - - - ГруппаПриложениеРасширеннаяПодсказка - 155 - Label - true - true - - Left - - - ColumnGroup - - auto - true - + Auto + + + ОткрытьДанныеДляПросмотраКонтекст + 97 + true + true + + true + + false + + ОткрытьДанныеДляПросмотраКонтекстРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + Form.Command.ОткрытьДанныеДляПросмотра + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + true + + true + true + true + true +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + End + Enable + true + true + + Журнал.НомерРисунка + + + CommonPicture.КоллекцияВидыСобытийЖурналаРегистрации + + + Style.BorderColor + + None + None + None + true +
    true true true - - ГруппаПользовательКомпьютерПриложениеРасширеннаяПодсказка - 150 - Label - true - true - - Left - - - ColumnGroup - - Vertical - auto - true - -
    - - ГруппаСервер - 84 - - РабочийСервер - 85 - true - true - - true - - - Журнал.РабочийСервер - - - РабочийСерверРасширеннаяПодсказка - 161 - Label - true - true - - Left - - - - РабочийСерверКонтекстноеМеню - 86 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - ОсновнойIPПорт - 89 - true - true - - true - - - Журнал.ОсновнойIPПорт - - - ОсновнойIPПортРасширеннаяПодсказка - 163 - Label - true - true - - Left - - - - ОсновнойIPПортКонтекстноеМеню - 90 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - ВспомогательныйIPПорт - 91 - true - true - - true - - - Журнал.ВспомогательныйIPПорт - - - ru - Вспомогательный IP порт - - - ВспомогательныйIPПортРасширеннаяПодсказка - 165 - Label - true - true - - Left - - - - ВспомогательныйIPПортКонтекстноеМеню - 92 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - true - true - <key>ru</key> - <value>Группа сервер</value> + <value>Журнал регистрации</value> ru - Группа сервер + Журнал регистрации - ГруппаСерверРасширеннаяПодсказка - 160 + ЖурналРегистрацииРасширеннаяПодсказка + 139 Label true true @@ -640,34 +1350,30 @@ Left - ColumnGroup - + Page + Vertical auto - true - ГруппаСобытие - 63 + ИндикаторДлительныхОпераций + 118 - ПредставлениеСобытия - 64 - - <key>ru</key> - <value>Событие</value> - + ПолеИндикаторДлительныхОпераций + 114 true true true - Журнал.ПредставлениеСобытия + ПолеИндикаторДлительныхОпераций + None - ПредставлениеСобытияРасширеннаяПодсказка - 168 + ПолеИндикаторДлительныхОперацийРасширеннаяПодсказка + 200 Label true true @@ -676,72 +1382,30 @@ - ПредставлениеСобытияКонтекстноеМеню - 65 + ПолеИндикаторДлительныхОперацийКонтекстноеМеню + 115 true - InputField + SpreadsheetDocumentField Enter true Left true - + + 50 true + 10 true - true - true - true - - Style.BorderColor - - Normal - - - - Комментарий - 66 - - <key>ru</key> - <value>Комментарий</value> - - true - true - - true - - - Журнал.Комментарий - - - КомментарийРасширеннаяПодсказка - 170 - Label - true - true - - Left - - - - КомментарийКонтекстноеМеню - 67 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal + true + true + Special + ScrollAlways + ScrollAlways + Always + Auto + true + true + true true @@ -749,9 +1413,17 @@ true + + <key>ru</key> + <value>Индикатор длительных операций</value> + + + ru + Индикатор длительных операций + - ГруппаСобытиеРасширеннаяПодсказка - 167 + ИндикаторДлительныхОперацийРасширеннаяПодсказка + 199 Label true true @@ -759,362 +1431,27 @@ Left - ColumnGroup - + Page + Vertical auto - true - - ГруппаТранзакция - 68 - - СтатусТранзакции - 69 - - <key>ru</key> - <value>Статус транзакции</value> - - true - true - - true - - - Журнал.СтатусТранзакции - - - СтатусТранзакцииРасширеннаяПодсказка - 173 - Label - true - true - - Left - - - - СтатусТранзакцииКонтекстноеМеню - 70 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - Транзакция - 71 - true - true - - true - - - Журнал.Транзакция - - - ТранзакцияРасширеннаяПодсказка - 175 - Label - true - true - - Left - - - - ТранзакцияКонтекстноеМеню - 72 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - true - true - - true - - - ГруппаТранзакцияРасширеннаяПодсказка - 172 - Label - true - true - - Left - - - ColumnGroup - - Vertical - auto - true - - - - ГруппаДанные - 73 - - ПредставлениеМетаданных - 74 - - <key>ru</key> - <value>Метаданные</value> - - true - true - - true - - - Журнал.ПредставлениеМетаданных - - - ПредставлениеМетаданныхРасширеннаяПодсказка - 178 - Label - true - true - - Left - - - - ПредставлениеМетаданныхКонтекстноеМеню - 75 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - Данные - 76 - true - true - - true - - - Журнал.Данные - - - ДанныеРасширеннаяПодсказка - 180 - Label - true - true - - Left - - - - ДанныеКонтекстноеМеню - 77 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - ПредставлениеДанных - 78 - true - true - - true - - - Журнал.ПредставлениеДанных - - - ПредставлениеДанныхРасширеннаяПодсказка - 182 - Label - true - true - - Left - - - - ПредставлениеДанныхКонтекстноеМеню - 79 - true - - LabelField - Enter - true - Left - true - - true - true - - - true - true - - true - - - ГруппаДанныеРасширеннаяПодсказка - 177 - Label - true - true - - Left - - - ColumnGroup - - Vertical - auto - true - - - None - - ЖурналКоманднаяПанель - 50 - Left - - - Selection - ЖурналВыбор - - - ЖурналСтрокаПоиска - 139 - - ЖурналСтрокаПоискаРасширеннаяПодсказка - 141 - Label - true - true - - Left - - - - ЖурналСтрокаПоискаКонтекстноеМеню - 140 - true - - Журнал - - true - - - - ЖурналСостояниеПросмотра - 142 - - ЖурналСостояниеПросмотраРасширеннаяПодсказка - 144 - Label - true - true - - Left - - - - ЖурналСостояниеПросмотраКонтекстноеМеню - 143 - true - - ViewStatusAddition - Журнал - - true - - - - ЖурналУправлениеПоиском - 145 - - ЖурналУправлениеПоискомРасширеннаяПодсказка - 147 - Label - true - true - - Left - - - - ЖурналУправлениеПоискомКонтекстноеМеню - 146 - true - - SearchControlAddition - Журнал - - true - - + true + true + + true + + + <key>ru</key> + <value>Страницы</value> + + + ru + Страницы + - ЖурналРасширеннаяПодсказка + СтраницыРасширеннаяПодсказка 138 Label true @@ -1123,204 +1460,10 @@ Left - - ЖурналКонтекстноеМеню - 49 - - ОтборГруппаКонтекст - 107 - - УстановитьОтборПоЗначениюВТекущейКолонкеКонтекст - 98 - true - true - - true - - false - - УстановитьОтборПоЗначениюВТекущейКолонкеКонтекстРасширеннаяПодсказка - 134 - Label - true - true - - Left - - - Form.Command.УстановитьОтборПоЗначениюВТекущейКолонке - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - ЖурналКонтекстноеМенюОтключитьОтбор - 113 - true - true - - true - - - ЖурналКонтекстноеМенюОтключитьОтборРасширеннаяПодсказка - 135 - Label - true - true - - Left - - - Form.Command.ОтключитьОтбор - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Отбор группа контекст</value> - - - ru - Отбор группа контекст - - - ОтборГруппаКонтекстРасширеннаяПодсказка - 133 - Label - true - true - - Left - - - - - - ПросмотрТекущегоСобытияВОтдельномОкнеКонтекст - 96 - true - true - - true - - false - - ПросмотрТекущегоСобытияВОтдельномОкнеКонтекстРасширеннаяПодсказка - 136 - Label - true - true - - Left - - - Form.Command.ПросмотрТекущегоСобытияВОтдельномОкне - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - ОткрытьДанныеДляПросмотраКонтекст - 97 - true - true - - true - - false - - ОткрытьДанныеДляПросмотраКонтекстРасширеннаяПодсказка - 137 - Label - true - true - - Left - - - Form.Command.ОткрытьДанныеДляПросмотра - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - true - - true - true - true - true -
    true
    - 1 - 1 - AutoUse - AutoUse - true - true - false - Auto - End - Enable - true - true - - Журнал.НомерРисунка - - - CommonPicture.КоллекцияВидыСобытийЖурналаРегистрации - - - Style.BorderColor - - None - None - None - true - + Pages + + Auto +
    Top true @@ -1340,7 +1483,7 @@ УстановитьИнтервалДатДляПросмотраРасширеннаяПодсказка - 115 + 120 Label true true @@ -1367,7 +1510,7 @@ false УстановитьОтборРасширеннаяПодсказка - 116 + 121 Label true true @@ -1403,7 +1546,7 @@ false УстановитьОтборПоЗначениюВТекущейКолонкеРасширеннаяПодсказка - 117 + 122 Label true true @@ -1439,7 +1582,7 @@ false ОтключитьОтборРасширеннаяПодсказка - 118 + 123 Label true true @@ -1479,7 +1622,7 @@ КомандыОтбораРасширеннаяПодсказка - 114 + 119 Label true true @@ -1500,7 +1643,7 @@ false ПросмотрТекущегоСобытияВОтдельномОкнеРасширеннаяПодсказка - 119 + 124 Label true true @@ -1536,7 +1679,7 @@ false ОткрытьДанныеДляПросмотраРасширеннаяПодсказка - 120 + 125 Label true true @@ -1575,7 +1718,7 @@ false ОбновитьТекущийСписокРасширеннаяПодсказка - 122 + 127 Label true true @@ -1615,7 +1758,7 @@ КомандаОбновитьРасширеннаяПодсказка - 121 + 126 Label true true @@ -1638,7 +1781,7 @@ ФормаНайтиРасширеннаяПодсказка - 124 + 129 Label true true @@ -1664,7 +1807,7 @@ ФормаОтменитьПоискРасширеннаяПодсказка - 125 + 130 Label true true @@ -1695,7 +1838,7 @@ КомандыПоискаРасширеннаяПодсказка - 123 + 128 Label true true @@ -1716,7 +1859,7 @@ false ИзменитьФормуРасширеннаяПодсказка - 126 + 131 Label true true @@ -1744,7 +1887,7 @@ false ВывестиСписокРасширеннаяПодсказка - 127 + 132 Label true true @@ -2291,6 +2434,9 @@ true + + ОтборЖурналаРегистрации + КоличествоПоказываемыхСобытий @@ -2331,6 +2477,74 @@ true + + ПолеИндикаторДлительныхОпераций + + <key>ru</key> + <value>Поле индикатор длительных операций</value> + + 6 + + SpreadsheetDocument + + + true + + + true + + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 8 + + UUID + + + true + + + true + + + + АдресХранилища + + <key>ru</key> + <value>Адрес хранилища</value> + + 9 + + String + + + + true + + + true + + + + ПараметрыОбработчикаОжидания + + <key>ru</key> + <value>Параметры обработчика ожидания</value> + + 10 + + + true + + + true + + ПросмотрТекущегоСобытияВОтдельномОкне diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl index d8ee8cb18..6bced716a 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl @@ -1,9 +1,13 @@ -////////////////////////////////////////////////////////////////////////////////////////// -// Обработчики событий +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + ОтборЖурналаРегистрации = Новый Структура; Если Не ПустаяСтрока(Параметры.Пользователь) Тогда @@ -23,7 +27,13 @@ Если ЗначениеЗаполнено(Параметры.СобытиеЖурналаРегистрации) Тогда ОтборПоСобытию = Новый СписокЗначений; - ОтборПоСобытию.Добавить(Параметры.СобытиеЖурналаРегистрации, Параметры.СобытиеЖурналаРегистрации); + Если ТипЗнч(Параметры.СобытиеЖурналаРегистрации) = Тип("Массив") Тогда + Для Каждого Событие Из Параметры.СобытиеЖурналаРегистрации Цикл + ОтборПоСобытию.Добавить(Событие, Событие); + КонецЦикла; + Иначе + ОтборПоСобытию.Добавить(Параметры.СобытиеЖурналаРегистрации, Параметры.СобытиеЖурналаРегистрации); + КонецЕсли; ОтборЖурналаРегистрации.Вставить("Событие", ОтборПоСобытию); КонецЕсли; @@ -39,22 +49,82 @@ ОтборЖурналаРегистрации.Вставить("Данные", Параметры.Данные); КонецЕсли; + Если Параметры.Свойство("Сеанс") Тогда + ОтборЖурналаРегистрации.Вставить("Сеанс", Параметры.Сеанс); + КонецЕсли; + КоличествоПоказываемыхСобытий = 200; - ПрочитатьЖурнал(); + ПрочитатьЖурналПриСозданииНаСервере(); - Десериализовать(ОтборЖурналаРегистрации); +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура КоличествоПоказываемыхСобытийПриИзменении(Элемент) + + ОбновитьТекущийСписок(); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ "Журнал" + +&НаКлиенте +Процедура ЖурналВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ЖурналРегистрацииКлиент.СобытияВыбор( + Элементы.Журнал.ТекущиеДанные, + Поле, + ИнтервалДат, + ОтборЖурналаРегистрации + ); КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") И ВыбранноеЗначение.Свойство("Событие") Тогда + + Если ВыбранноеЗначение.Событие = "УстановленОтборЖурналаРегистрации" Тогда + + ОтборЖурналаРегистрации.Очистить(); + Для Каждого ЭлементСписка Из ВыбранноеЗначение.Отбор Цикл + ОтборЖурналаРегистрации.Вставить(ЭлементСписка.Представление, ЭлементСписка.Значение); + КонецЦикла; + ОбновитьТекущийСписок(); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ОбновитьТекущийСписок() - ПрочитатьЖурнал(); + Элементы.Страницы.ТекущаяСтраница = Элементы.ИндикаторДлительныхОпераций; - // Позиционирование в конец списка - Если Журнал.Количество() > 0 Тогда - Элементы.Журнал.ТекущаяСтрока = Журнал[Журнал.Количество() - 1].ПолучитьИдентификатор(); + РезультатВыполнения = ПрочитатьЖурнал(); + + ПараметрыОбработчикаОжидания = Новый Структура; + + Если Не РезультатВыполнения.ЗаданиеВыполнено Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "ФормированиеОтчета"); + Иначе + Элементы.Страницы.ТекущаяСтраница = Элементы.ЖурналРегистрации; + ПозиционированиеВКонецСписка(); КонецЕсли; КонецПроцедуры @@ -84,8 +154,6 @@ &НаКлиенте Процедура УстановитьИнтервалДатДляПросмотра() - Сериализовать(ОтборЖурналаРегистрации); - Если ЖурналРегистрацииКлиент.УстановитьИнтервалДатДляПросмотра( ИнтервалДат, ОтборЖурналаРегистрации @@ -95,8 +163,6 @@ КонецЕсли; - Десериализовать(ОтборЖурналаРегистрации); - КонецПроцедуры &НаКлиенте @@ -115,34 +181,9 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) - - Сериализовать(ОтборЖурналаРегистрации); - - Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") И ВыбранноеЗначение.Свойство("Событие") Тогда - - Если ВыбранноеЗначение.Событие = "УстановленОтборЖурналаРегистрации" Тогда - - ОтборЖурналаРегистрации.Очистить(); - Для Каждого ЭлементСписка Из ВыбранноеЗначение.Отбор Цикл - ОтборЖурналаРегистрации.Вставить(ЭлементСписка.Представление, ЭлементСписка.Значение); - КонецЦикла; - ОбновитьТекущийСписок(); - - КонецЕсли; - - КонецЕсли; - - Десериализовать(ОтборЖурналаРегистрации); - -КонецПроцедуры - &НаКлиенте Процедура УстановитьОтборПоЗначениюВТекущейКолонке() - Сериализовать(ОтборЖурналаРегистрации); - КолонкиИсключения = Новый Массив; КолонкиИсключения.Добавить("Дата"); @@ -157,59 +198,117 @@ КонецЕсли; - Десериализовать(ОтборЖурналаРегистрации); - КонецПроцедуры -&НаКлиенте -Процедура КоличествоПоказываемыхСобытийПриИзменении(Элемент) - - ОбновитьТекущийСписок(); - -КонецПроцедуры -&НаКлиенте -Процедура ЖурналВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - Сериализовать(ОтборЖурналаРегистрации); - - ЖурналРегистрацииКлиент.СобытияВыбор( - Элементы.Журнал.ТекущиеДанные, - Поле, - ИнтервалДат, - ОтборЖурналаРегистрации - ); - - Десериализовать(ОтборЖурналаРегистрации); - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере -Процедура ПрочитатьЖурнал() +Функция ПрочитатьЖурнал() - ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации(Журнал, ОтборЖурналаРегистрации, КоличествоПоказываемыхСобытий, УникальныйИдентификатор, Обработки.ЖурналРегистрации); + ПараметрыОтчета = ПараметрыОтчета(); + + ИБФайловая = Неопределено; + Если Не ПроверитьЗаполнение() Тогда + Возврат Новый Структура("ЗаданиеВыполнено", Истина); + КонецЕсли; + + Если ИБФайловая = Неопределено Тогда + ИБФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + КонецЕсли; + + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); + + ИдентификаторЗадания = Неопределено; + + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "НеИспользовать"); + + Если ИБФайловая Тогда + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища); + РезультатВыполнения = Новый Структура("ЗаданиеВыполнено", Истина); + Иначе + РезультатВыполнения = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации", + ПараметрыОтчета, + НСтр("ru = 'Обновление журнала регистрации'")); + + АдресХранилища = РезультатВыполнения.АдресХранилища; + ИдентификаторЗадания = РезультатВыполнения.ИдентификаторЗадания; + КонецЕсли; + + Если РезультатВыполнения.ЗаданиеВыполнено Тогда + ЗагрузитьПодготовленныеДанные(); + КонецЕсли; ЖурналРегистрации.СформироватьПредставлениеОтбора(ПредставлениеОтбора, ОтборЖурналаРегистрации); + Возврат РезультатВыполнения; + +КонецФункции + +&НаСервере +Процедура ПрочитатьЖурналПриСозданииНаСервере() + Элементы.Страницы.ТекущаяСтраница = Элементы.ЖурналРегистрации; + ПараметрыОтчета = ПараметрыОтчета(); + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + + ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища); + ЗагрузитьПодготовленныеДанные(); + ЖурналРегистрации.СформироватьПредставлениеОтбора(ПредставлениеОтбора, ОтборЖурналаРегистрации); КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Процедура Сериализовать(ТекущееЗначение) - Если ТипЗнч(ТекущееЗначение) = Тип("ФиксированнаяСтруктура") Тогда - ВременнаяПеременная = Новый Структура; - Для Каждого КлючИзначение Из ТекущееЗначение Цикл - ВременнаяПеременная.Вставить(КлючИзначение.Ключ, КлючИзначение.Значение); - КонецЦикла; - ТекущееЗначение = ВременнаяПеременная; - КонецЕсли; +&НаСервере +Функция ПараметрыОтчета() + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("ОтборЖурналаРегистрации", ОтборЖурналаРегистрации); + ПараметрыОтчета.Вставить("КоличествоПоказываемыхСобытий", КоличествоПоказываемыхСобытий); + ПараметрыОтчета.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); + ПараметрыОтчета.Вставить("МенеджерВладельца", Обработки.ЖурналРегистрации); + ПараметрыОтчета.Вставить("ДобавлятьДополнительныеКолонки", Ложь); + ПараметрыОтчета.Вставить("Журнал", РеквизитФормыВЗначение("Журнал")); + + Возврат ПараметрыОтчета; +КонецФункции + +&НаСервере +Процедура ЗагрузитьПодготовленныеДанные() + РезультатВыполнения = ПолучитьИзВременногоХранилища(АдресХранилища); + СобытияЖурнала = РезультатВыполнения.СобытияЖурнала; + + ЗначениеВДанныеФормы(СобытияЖурнала, Журнал); + ИдентификаторЗадания = Неопределено; КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Процедура Десериализовать(ТекущееЗначение) - Если ТипЗнч(ТекущееЗначение) = Тип("Структура") Тогда - ТекущееЗначение = Новый ФиксированнаяСтруктура(ТекущееЗначение); +&НаКлиенте +Процедура ПозиционированиеВКонецСписка() + Если Журнал.Количество() > 0 Тогда + Элементы.Журнал.ТекущаяСтрока = Журнал[Журнал.Количество() - 1].ПолучитьИдентификатор(); КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеЗадания() + + Попытка + Если ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + ЗагрузитьПодготовленныеДанные(); + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "НеИспользовать"); + Элементы.Страницы.ТекущаяСтраница = Элементы.ЖурналРегистрации; + ПозиционированиеВКонецСписка(); + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания( + "Подключаемый_ПроверитьВыполнениеЗадания", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); + КонецЕсли; + Исключение + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "НеИспользовать"); + Элементы.Страницы.ТекущаяСтраница = Элементы.ЖурналРегистрации; + ПозиционированиеВКонецСписка(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl index 12ce81860..d7f73a748 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl @@ -1,5 +1,137 @@ -///////////////////////////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ЗаполнитьВажностьИСтатус(); + ЗаполнитьПараметрыОтбора(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Перем РедактируемыйСписок, ОтбираемыеПараметры, СтандартнаяОбработка; + + Если ИмяСобытия = "ВыборЗначенийЭлементовОтбораЖурналаРегистрации" + И Источник = ЭтаФорма Тогда + Если РедакторСоставаСвойстваИмяЭлемента = Элементы.Пользователи.Имя Тогда + СписокПользователей = Параметр; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.События.Имя Тогда + События = Параметр; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Компьютеры.Имя Тогда + Компьютеры = Параметр; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Приложения.Имя Тогда + Приложения = Параметр; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Метаданные.Имя Тогда + Метаданные = Параметр; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.РабочиеСерверы.Имя Тогда + РабочиеСерверы = Параметр; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ОсновныеIPПорты.Имя Тогда + ОсновныеIPПорты = Параметр; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ВспомогательныеIPПорты.Имя Тогда + ВспомогательныеIPПорты = Параметр; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ИсполнениеВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + Перем РедактируемыйСписок, ОтбираемыеПараметры; + + СтандартнаяОбработка = Ложь; + + РедакторСоставаСвойстваИмяЭлемента = Элемент.Имя; + + Если РедакторСоставаСвойстваИмяЭлемента = Элементы.Пользователи.Имя Тогда + РедактируемыйСписок = СписокПользователей; + ОтбираемыеПараметры = "Пользователь"; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.События.Имя Тогда + РедактируемыйСписок = События; + ОтбираемыеПараметры = "Событие"; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Компьютеры.Имя Тогда + РедактируемыйСписок = Компьютеры; + ОтбираемыеПараметры = "Компьютер"; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Приложения.Имя Тогда + РедактируемыйСписок = Приложения; + ОтбираемыеПараметры = "ИмяПриложения"; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Метаданные.Имя Тогда + РедактируемыйСписок = Метаданные; + ОтбираемыеПараметры = "Метаданные"; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.РабочиеСерверы.Имя Тогда + РедактируемыйСписок = РабочиеСерверы; + ОтбираемыеПараметры = "РабочийСервер"; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ОсновныеIPПорты.Имя Тогда + РедактируемыйСписок = ОсновныеIPПорты; + ОтбираемыеПараметры = "ОсновнойIPПорт"; + ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ВспомогательныеIPПорты.Имя Тогда + РедактируемыйСписок = ВспомогательныеIPПорты; + ОтбираемыеПараметры = "ВспомогательныйIPПорт"; + Иначе + СтандартнаяОбработка = Истина; + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + + ПараметрыФормы.Вставить("РедактируемыйСписок", РедактируемыйСписок); + ПараметрыФормы.Вставить("ОтбираемыеПараметры", ОтбираемыеПараметры); + + // Открытие редактора свойства + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.РедакторСоставаСвойства", + ПараметрыФормы, + ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ИнтервалОтбораПриИзменении(Элемент) + + ИнтервалОтбораДатаНачала = ИнтервалОтбора.ДатаНачала; + ИнтервалОтбораДатаОкончания = ИнтервалОтбора.ДатаОкончания; + +КонецПроцедуры + +&НаКлиенте +Процедура ИнтервалОтбораДатаПриИзменении(Элемент) + + ИнтервалОтбора.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод; + ИнтервалОтбора.ДатаНачала = ИнтервалОтбораДатаНачала; + ИнтервалОтбора.ДатаОкончания = ИнтервалОтбораДатаОкончания; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура УстановитьОтборИЗакрытьФорму(Команда) + + ОповеститьОВыборе( + Новый Структура("Событие, Отбор", + "УстановленОтборЖурналаРегистрации", + ПолучитьОтборЖурналаРегистрации() + ) + ); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервере Процедура ЗаполнитьВажностьИСтатус() // Заполнение ЭУ Важность @@ -256,123 +388,3 @@ Возврат Отбор; КонецФункции - -///////////////////////////////////////////////////////////////////////////////////////////////////// -// Обработчики событий -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - ЗаполнитьВажностьИСтатус(); - ЗаполнитьПараметрыОтбора(); - -КонецПроцедуры - -&НаКлиенте -Процедура ИсполнениеВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - Перем РедактируемыйСписок, ОтбираемыеПараметры; - - СтандартнаяОбработка = Ложь; - - РедакторСоставаСвойстваИмяЭлемента = Элемент.Имя; - - Если РедакторСоставаСвойстваИмяЭлемента = Элементы.Пользователи.Имя Тогда - РедактируемыйСписок = СписокПользователей; - ОтбираемыеПараметры = "Пользователь"; - ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.События.Имя Тогда - РедактируемыйСписок = События; - ОтбираемыеПараметры = "Событие"; - ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Компьютеры.Имя Тогда - РедактируемыйСписок = Компьютеры; - ОтбираемыеПараметры = "Компьютер"; - ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Приложения.Имя Тогда - РедактируемыйСписок = Приложения; - ОтбираемыеПараметры = "ИмяПриложения"; - ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Метаданные.Имя Тогда - РедактируемыйСписок = Метаданные; - ОтбираемыеПараметры = "Метаданные"; - ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.РабочиеСерверы.Имя Тогда - РедактируемыйСписок = РабочиеСерверы; - ОтбираемыеПараметры = "РабочийСервер"; - ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ОсновныеIPПорты.Имя Тогда - РедактируемыйСписок = ОсновныеIPПорты; - ОтбираемыеПараметры = "ОсновнойIPПорт"; - ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ВспомогательныеIPПорты.Имя Тогда - РедактируемыйСписок = ВспомогательныеIPПорты; - ОтбираемыеПараметры = "ВспомогательныйIPПорт"; - Иначе - СтандартнаяОбработка = Истина; - Возврат; - КонецЕсли; - - ПараметрыФормы = Новый Структура; - - ПараметрыФормы.Вставить("РедактируемыйСписок", РедактируемыйСписок); - ПараметрыФормы.Вставить("ОтбираемыеПараметры", ОтбираемыеПараметры); - - // Открытие редактора свойства - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.РедакторСоставаСвойства", - ПараметрыФормы, - ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - - Перем РедактируемыйСписок, ОтбираемыеПараметры, СтандартнаяОбработка; - - Если ИмяСобытия = "ВыборЗначенийЭлементовОтбораЖурналаРегистрации" - И Источник = ЭтаФорма Тогда - Если РедакторСоставаСвойстваИмяЭлемента = Элементы.Пользователи.Имя Тогда - СписокПользователей = Параметр; - ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.События.Имя Тогда - События = Параметр; - ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Компьютеры.Имя Тогда - Компьютеры = Параметр; - ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Приложения.Имя Тогда - Приложения = Параметр; - ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.Метаданные.Имя Тогда - Метаданные = Параметр; - ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.РабочиеСерверы.Имя Тогда - РабочиеСерверы = Параметр; - ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ОсновныеIPПорты.Имя Тогда - ОсновныеIPПорты = Параметр; - ИначеЕсли РедакторСоставаСвойстваИмяЭлемента = Элементы.ВспомогательныеIPПорты.Имя Тогда - ВспомогательныеIPПорты = Параметр; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьОтборИЗакрытьФорму(Команда) - - ОповеститьОВыборе( - Новый Структура("Событие, Отбор", - "УстановленОтборЖурналаРегистрации", - ПолучитьОтборЖурналаРегистрации() - ) - ); - -КонецПроцедуры - - -&НаКлиенте -Процедура ИнтервалОтбораПриИзменении(Элемент) - - ИнтервалОтбораДатаНачала = ИнтервалОтбора.ДатаНачала; - ИнтервалОтбораДатаОкончания = ИнтервалОтбора.ДатаОкончания; - -КонецПроцедуры - -&НаКлиенте -Процедура ИнтервалОтбораДатаПриИзменении(Элемент) - - ИнтервалОтбора.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод; - ИнтервалОтбора.ДатаНачала = ИнтервалОтбораДатаНачала; - ИнтервалОтбора.ДатаОкончания = ИнтервалОтбораДатаОкончания; - -КонецПроцедуры - - diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl index 8c3ecf8ab..a4d0911bd 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl @@ -1,6 +1,61 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ -///////////////////////////////////////////////////////////////////////////////////////// -// Экспортируемые процедуры +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + РедактируемыйСписок = Параметры.РедактируемыйСписок; + ОтбираемыеПараметры = Параметры.ОтбираемыеПараметры; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + УстановитьПараметрыРедактора(РедактируемыйСписок, ОтбираемыеПараметры); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ПометкаПриИзменении(Элемент) + ОтметитьЭлементДерева(Элементы.Список.ТекущиеДанные, Элементы.Список.ТекущиеДанные.Пометка); +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ВыбратьСоставОтбора(Команда) + + Оповестить("ВыборЗначенийЭлементовОтбораЖурналаРегистрации", + ПолучитьОтредактированныйСписок(), + ВладелецФормы); + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьВсеФлажки() + УстановкаПометок(Истина); +КонецПроцедуры + +&НаКлиенте +Процедура СнятьВсеФлажки() + УстановкаПометок(Ложь); +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура УстановитьПараметрыРедактора(РедактируемыйСписок, ОтбираемыеПараметры) @@ -77,8 +132,6 @@ КонецФункции -///////////////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры &НаКлиенте Функция ПолучитьВетвьДерева(Представление) СтрокиПути = РазложитьСтрокуПоТочкам(Представление); @@ -248,44 +301,5 @@ КонецЦикла; КонецПроцедуры -///////////////////////////////////////////////////////////////////////////////////////// -// Обработчики событий -&НаКлиенте -Процедура УстановитьВсеФлажки() - УстановкаПометок(Истина); -КонецПроцедуры -&НаКлиенте -Процедура СнятьВсеФлажки() - УстановкаПометок(Ложь); -КонецПроцедуры -&НаКлиенте -Процедура ПометкаПриИзменении(Элемент) - ОтметитьЭлементДерева(Элементы.Список.ТекущиеДанные, Элементы.Список.ТекущиеДанные.Пометка); -КонецПроцедуры - -&НаКлиенте -Процедура ВыбратьСоставОтбора(Команда) - - Оповестить("ВыборЗначенийЭлементовОтбораЖурналаРегистрации", - ПолучитьОтредактированныйСписок(), - ВладелецФормы); - Закрыть(); - -КонецПроцедуры - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - РедактируемыйСписок = Параметры.РедактируемыйСписок; - ОтбираемыеПараметры = Параметры.ОтбираемыеПараметры; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - УстановитьПараметрыРедактора(РедактируемыйСписок, ОтбираемыеПараметры); - -КонецПроцедуры diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Module.bsl index 0b2038636..78aeb338b 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Module.bsl @@ -1,7 +1,13 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + Дата = Параметры.Дата; ИмяПользователя = Параметры.ИмяПользователя; ПредставлениеПриложения = Параметры.ПредставлениеПриложения; @@ -115,6 +121,32 @@ КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ПредставлениеМетаданныхОткрытие(Элемент, СтандартнаяОбработка) + + ОткрытьЗначение(ПредставлениеМетаданных); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ "ТаблицаДанныхОтказаДействияДоступа" + +&НаКлиенте +Процедура ТаблицаДанныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ОткрытьЗначение(Элемент.ТекущиеДанные[Сред(Поле.Имя, СтрДлина(Элемент.Имя)+1)]); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + Процедура СоздатьТаблицуФормы(Знач ИмяПоляТаблицыФормы, Знач ИмяРеквизитаДанныеФормыКоллекция, Знач ТаблицаЗначений) Если ТипЗнч(ТаблицаЗначений) <> Тип("ТаблицаЗначений") Тогда @@ -139,16 +171,4 @@ КонецПроцедуры -&НаКлиенте -Процедура ПредставлениеМетаданныхОткрытие(Элемент, СтандартнаяОбработка) - - ОткрытьЗначение(ПредставлениеМетаданных); - -КонецПроцедуры -&НаКлиенте -Процедура ТаблицаДанныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ОткрытьЗначение(Элемент.ТекущиеДанные[Сред(Поле.Имя, СтрДлина(Элемент.Имя)+1)]); - -КонецПроцедуры diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl index 9988f57ac..0f52a21a0 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl @@ -1,5 +1,13 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Возвращает значение перечисления соответствующе строковому имени статус события +// Возвращает значение перечисления соответствующе строковому имени статус события. +// +// Параметры: +// Имя - Строка - статус транзакции записи. +// +// Возвращаемое значение: +// СтатусТранзакцииЗаписиЖурналаРегистрации - значение статуса транзакции. // Функция СтатусТранзакцииЗаписиЖурналаРегистрацииЗначениеПоИмени(Имя) Экспорт @@ -17,6 +25,14 @@ КонецФункции +// Возвращает значение перечисления соответствующе строковому уровню журнала регистрации. +// +// Параметры: +// Имя - Строка - уровень журнала регистрации. +// +// Возвращаемое значение: +// УровеньЖурналаРегистрации - значение уровня журнала регистрации. +// Функция УровеньЖурналаРегистрацииЗначениеПоИмени(Имя) Экспорт ЗначениеПеречисления = Неопределено; @@ -35,6 +51,9 @@ // Устанавливает номер рисунка в строке события журнала // +// Параметры: +// СобытиеЖурнала - строка таблицы значений - строка журнала регистрации. +// Процедура УстановитьНомерРисунка(СобытиеЖурнала) Экспорт // Установка относительного номера картинки @@ -47,6 +66,7 @@ Иначе СобытиеЖурнала.НомерРисунка = 3; КонецЕсли; + // Установка абсолютного номера картинки Если СобытиеЖурнала.СтатусТранзакции = СтатусТранзакцииЗаписиЖурналаРегистрации.НеЗавершена ИЛИ СобытиеЖурнала.СтатусТранзакции = СтатусТранзакцииЗаписиЖурналаРегистрации.Отменена Тогда diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form index dcdf979e0..1658eabc3 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form @@ -1,173 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> - <items xsi:type="form:FormGroup"> - <name>КоманднаяПанельСписокВалют</name> - <id>6</id> - <items xsi:type="form:Button"> - <name>КнопкаПодборВалют</name> - <id>17</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>КнопкаПодборВалютРасширеннаяПодсказка</name> - <id>28</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Command.КомандаПодборВалют</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>PictureAndText</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <textColor xsi:type="core:ColorRef"> - <color>Style.ButtonTextColor</color> - </textColor> - <backColor xsi:type="core:ColorRef"> - <color>Style.ButtonBackColor</color> - </backColor> - <borderColor xsi:type="core:ColorRef"> - <color>Style.BorderColor</color> - </borderColor> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <items xsi:type="form:Button"> - <name>КнопкаЗаполнить</name> - <id>8</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>КнопкаЗаполнитьРасширеннаяПодсказка</name> - <id>29</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Command.КомандаЗаполнить</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>PictureAndText</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <textColor xsi:type="core:ColorRef"> - <color>Style.ButtonTextColor</color> - </textColor> - <backColor xsi:type="core:ColorRef"> - <color>Style.ButtonBackColor</color> - </backColor> - <borderColor xsi:type="core:ColorRef"> - <color>Style.BorderColor</color> - </borderColor> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <items xsi:type="form:Button"> - <name>КнопкаОчистить</name> - <id>14</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>КнопкаОчиститьРасширеннаяПодсказка</name> - <id>30</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Command.КомандаОчистить</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <textColor xsi:type="core:ColorRef"> - <color>Style.ButtonTextColor</color> - </textColor> - <backColor xsi:type="core:ColorRef"> - <color>Style.ButtonBackColor</color> - </backColor> - <borderColor xsi:type="core:ColorRef"> - <color>Style.BorderColor</color> - </borderColor> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <items xsi:type="form:Button"> - <name>КнопкаЗагрузить</name> - <id>15</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>КнопкаЗагрузитьРасширеннаяПодсказка</name> - <id>31</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Command.КомандаЗагрузить</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <textColor xsi:type="core:ColorRef"> - <color>Style.ButtonTextColor</color> - </textColor> - <backColor xsi:type="core:ColorRef"> - <color>Style.ButtonBackColor</color> - </backColor> - <borderColor xsi:type="core:ColorRef"> - <color>Style.BorderColor</color> - </borderColor> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>КоманднаяПанельСписокВалютРасширеннаяПодсказка</name> - <id>27</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <type>CommandBar</type> - <extInfo xsi:type="form:CommandBarExtInfo"> - <horizontalAlign>Left</horizontalAlign> - <commandSource>Item.СписокВалют</commandSource> - </extInfo> - </items> <items xsi:type="form:Table"> <name>СписокВалют</name> <id>7</id> @@ -181,9 +13,9 @@ </dataPath> <skipOnInput>false</skipOnInput> <titleLocation>None</titleLocation> + <excludedCommands>Add</excludedCommands> <excludedCommands>Change</excludedCommands> <excludedCommands>Copy</excludedCommands> - <excludedCommands>CopyToClipboard</excludedCommands> <excludedCommands>EndEdit</excludedCommands> <excludedCommands>MoveDown</excludedCommands> <excludedCommands>MoveUp</excludedCommands> @@ -192,6 +24,10 @@ <items xsi:type="form:FormField"> <name>Валюта</name> <id>10</id> + <title> + <key>ru</key> + <value>Валюта для загрузки</value> + true true @@ -202,7 +38,7 @@ ВалютаРасширеннаяПодсказка - 42 + 50 Label true true @@ -239,7 +75,7 @@ КодВалютыРасширеннаяПодсказка - 44 + 52 Label true true @@ -276,7 +112,7 @@ ДатаКурсаРасширеннаяПодсказка - 46 + 54 Label true true @@ -313,7 +149,7 @@ КурсРасширеннаяПодсказка - 48 + 56 Label true true @@ -350,7 +186,7 @@ КратностьРасширеннаяПодсказка - 50 + 58 Label true true @@ -391,10 +227,10 @@ СписокВалютСтрокаПоиска - 33 + 41 СписокВалютСтрокаПоискаРасширеннаяПодсказка - 35 + 43 Label true true @@ -404,7 +240,7 @@ СписокВалютСтрокаПоискаКонтекстноеМеню - 34 + 42 true СписокВалют @@ -414,10 +250,10 @@ СписокВалютСостояниеПросмотра - 36 + 44 СписокВалютСостояниеПросмотраРасширеннаяПодсказка - 38 + 46 Label true true @@ -427,7 +263,7 @@ СписокВалютСостояниеПросмотраКонтекстноеМеню - 37 + 45 true ViewStatusAddition @@ -438,10 +274,10 @@ СписокВалютУправлениеПоиском - 39 + 47 СписокВалютУправлениеПоискомРасширеннаяПодсказка - 41 + 49 Label true true @@ -451,7 +287,7 @@ СписокВалютУправлениеПоискомКонтекстноеМеню - 40 + 48 true SearchControlAddition @@ -462,7 +298,7 @@ СписокВалютРасширеннаяПодсказка - 32 + 40 Label true true @@ -473,6 +309,89 @@ СписокВалютКонтекстноеМеню 20 + + СписокВалютКонтекстноеМенюПодобратьВалюты + 31 + true + true + + true + + + СписокВалютКонтекстноеМенюПодобратьВалютыРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Form.Command.ПодобратьВалюты + Normal + Auto + true + true + UserCmds + Auto + + + СписокВалютКонтекстноеМенюУдалить + 29 + + <key>ru</key> + <value>Исключить из списка</value> + + true + true + + true + + + СписокВалютКонтекстноеМенюУдалитьРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + Form.Item.СписокВалют.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокВалютКонтекстноеМенюОчиститьСписок + 30 + true + true + + true + + + СписокВалютКонтекстноеМенюОчиститьСписокРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.Command.ОчиститьСписок + Normal + Auto + true + true + UserCmds + Auto + true HierarchicalList @@ -506,14 +425,51 @@
    - ГруппаВыбораПериода + ГруппаПериодКурсовВалют 16 + + КнопкаЗагрузить + 15 + true + true + + true + + false + + КнопкаЗагрузитьРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗагрузитьКурсыВалют + Auto + true + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + - НачДата + НачалоПериода 2 <key>ru</key> - <value>Начало периода</value> + <value>с</value> true true @@ -524,8 +480,8 @@ Объект.НачалоПериодаЗагрузки - НачДатаРасширеннаяПодсказка - 61 + НачалоПериодаРасширеннаяПодсказка + 70 Label true true @@ -534,7 +490,7 @@ - НачДатаКонтекстноеМеню + НачалоПериодаКонтекстноеМеню 18 true @@ -557,11 +513,11 @@ - КонДата + ОкончаниеПериода 3 <key>ru</key> - <value>Окончание периода</value> + <value>по</value> true true @@ -572,8 +528,8 @@ Объект.ОкончаниеПериодаЗагрузки - КонДатаРасширеннаяПодсказка - 63 + ОкончаниеПериодаРасширеннаяПодсказка + 72 Label true true @@ -582,7 +538,7 @@ - КонДатаКонтекстноеМеню + ОкончаниеПериодаКонтекстноеМеню 19 true @@ -609,9 +565,13 @@ true + + <key>ru</key> + <value>Период курсов валют</value> + - ГруппаВыбораПериодаРасширеннаяПодсказка - 60 + ГруппаПериодКурсовВалютРасширеннаяПодсказка + 68 Label true true @@ -628,11 +588,171 @@ Auto - None - false ФормаКоманднаяПанель -1 + + КоманднаяПанельСписокВалют + 6 + + КнопкаЗаполнить + 8 + true + true + + true + + false + + КнопкаЗаполнитьРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Form.Command.ДобавитьВсеВалюты + Normal + PictureAndText + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + КнопкаПодборВалют + 17 + true + true + + true + + false + + КнопкаПодборВалютРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + Form.Command.ПодобратьВалюты + Normal + PictureAndText + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + СписокВалютУдалить + 28 + + <key>ru</key> + <value>Исключить из списка</value> + + true + true + + true + + + СписокВалютУдалитьРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + Form.Item.СписокВалют.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + КнопкаОчистить + 14 + true + true + + true + + false + + КнопкаОчиститьРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + Form.Command.ОчиститьСписок + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + InAdditionalSubmenu + + true + true + + true + + + КоманднаяПанельСписокВалютРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + Item.СписокВалют + + Left true @@ -644,6 +764,7 @@ OnCreateAtServer ПриСозданииНаСервере + 60 DontBlock true true @@ -670,19 +791,22 @@
    true
    - КомандаЗаполнить + ДобавитьВсеВалюты <key>ru</key> - <value>Заполнить</value> + <value>Добавить все валюты</value> 1 ru - Заполнить список для загрузки всеми валютами из справочника + Включить в список для загрузки все валюты true + + CommonPicture.ЗаполнитьФорму + КомандаЗаполнитьСписокВалютВыполнить @@ -692,10 +816,10 @@ Auto - КомандаОчистить + ОчиститьСписок <key>ru</key> - <value>Очистить</value> + <value>Очистить список</value> 2 @@ -714,10 +838,10 @@ Auto - КомандаЗагрузить + ЗагрузитьКурсыВалют <key>ru</key> - <value>Загрузить</value> + <value>Загрузить курсы валют</value> 3 @@ -729,22 +853,23 @@ - КомандаЗагрузитьВыполнить + ЗагрузитьКурсыВалют + TextPicture Auto Auto - КомандаПодборВалют + ПодобратьВалюты <key>ru</key> - <value>Подбор</value> + <value>Подобрать</value> 4 ru - Подобрать валюты в список для загрузки из справочника + Подобрать валюты для загрузки курсов true diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Help/ru.html index 1be133a5e..bdab0640b 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Help/ru.html +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Help/ru.html @@ -1,7 +1,2 @@ -

    Перед загрузкой: в таблицу добавить валюты, в полях "Начало периода" и "Окончание периода" выбрать даты интервала загрузки курсов.

    -

    Кнопка Заполнить - автоматическое заполнение валют

    -

    Клавиша Ins в таблице, кнопка Добавить на командной панели - открывается форма выбора валюты

    -

    Кнопка Подбор - открывается форма выбора валюты в режиме подбора

    -

    Кнопка Очистить - очистка таблицы валют

    -

    Кнопка Загрузить - загрузка курсов валют в таблице

    \ No newline at end of file +

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

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl index 262c5ab01..46b5d65eb 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Module.bsl @@ -1,25 +1,20 @@ //////////////////////////////////////////////////////////////////////////////// -// Блок обработчиков событий формы и элементов формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ -// Обработчик события "при создании на сервере" -// Устанавливает даты начала и конца для загрузки курсов по умолчанию -// &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // Установка даты начала и конца для загрузки курсов по умолчанию ТекущаяДата = ТекущаяДатаСеанса(); Объект.НачалоПериодаЗагрузки = НачалоМесяца(ТекущаяДата); Объект.ОкончаниеПериодаЗагрузки = ТекущаяДата; КонецПроцедуры -// Обработчик события "обработка выбора" формы -// Обрабатывает выбор валюты в форме выбора -// &НаКлиенте Процедура ОбработкаВыбора(РезультатВыбора, ИсточникВыбора) + // Выбор валюты в форме выбора Если ТипЗнч(РезультатВыбора) = Тип("СправочникСсылка.Валюты") Тогда Если Объект.СписокВалют.НайтиСтроки(Новый Структура("Валюта", РезультатВыбора)).Количество() = 0 Тогда @@ -32,21 +27,19 @@ КонецПроцедуры -// Обработчик события "перед началом добавления" элемента формы СписокВалют -// Вызывает форму выбора валют в режиме выбора -// +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокВалют + &НаКлиенте Процедура СписокВалютПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + // Форма выбора валют в режиме выбора ПараметрыФорма = Новый Структура("ЗагружаемыеВалюты", Истина); ОткрытьФорму("Справочник.Валюты.ФормаВыбора", ПараметрыФорма, ЭтаФорма); Отказ = Истина; КонецПроцедуры -// Обработчик события "выбор" табличной части "СписокВалют" формы -// Открывает форму валюты -// &НаКлиенте Процедура СписокВалютВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -55,66 +48,68 @@ КонецПроцедуры -// Обработчик события нажания на кнопку "Очистить" -// Очищает список валют -// +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура КомандаОчиститьВыполнить() + // Очищает список валют Объект.СписокВалют.Очистить(); КонецПроцедуры -// Обработчик нажатия на кнопку "Заполнить" -// Вызывает функциональность заполнения списка валют -// &НаКлиенте Процедура КомандаЗаполнитьСписокВалютВыполнить() + // Заполнение списка валют ЗаполнитьВалюты(); КонецПроцедуры -// Обработчик нажатия на кнопку "Подбор" -// Вызывает форму выбора валют в режиме подбора -// &НаКлиенте Процедура КомандаПодборВалютВыполнить() + // Вызывает форму выбора валют в режиме подбора ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, Отбор", Ложь, Новый Структура("ЗагружаетсяИзИнтернета", Истина)); ОткрытьФорму("Справочник.Валюты.ФормаВыбора", ПараметрыФормы, ЭтаФорма); КонецПроцедуры -// Обработчик нажатия на кнопку "Загрузить" -// Вызывает функциональность загрузки курсов -// &НаКлиенте -Процедура КомандаЗагрузитьВыполнить() +Процедура ЗагрузитьКурсыВалют() + + // Загрузка курсов + + ОчиститьСообщения(); Если Не ЗначениеЗаполнено(Объект.НачалоПериодаЗагрузки) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Не задана дата начала периода загрузки.'"), , - "Объект.НачалоПериодаЗагрузки"); + НСтр("ru = 'Не задана дата начала периода загрузки.'"), + , + "Объект.НачалоПериодаЗагрузки" + ); Возврат; КонецЕсли; Если Не ЗначениеЗаполнено(Объект.ОкончаниеПериодаЗагрузки) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Не задана дата окончания периода загрузки.'"), , - "Объект.ОкончаниеПериодаЗагрузки"); + НСтр("ru = 'Не задана дата окончания периода загрузки.'"), + , + "Объект.ОкончаниеПериодаЗагрузки" + ); Возврат; КонецЕсли; Если Объект.СписокВалют.Количество() = 0 Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Для загрузки курсов с веб-сервера РБК необходимо добавить в список хотя бы одну валюту.'"), , - "Объект.СписокВалют"); + НСтр("ru = 'Для загрузки курсов с веб-сервера РБК необходимо добавить в список хотя бы одну валюту.'"), + , + "Объект.СписокВалют" + ); Возврат; КонецЕсли; - ОчиститьСообщения(); - Состояние(НСтр("ru = 'Загружаются курсы валют...'")); СтатусОперации = ЗагрузитьКурсыСРБК(); @@ -132,25 +127,24 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Секция служебных процедур -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Функция ЗагрузитьКурсыСРБК() - ПоясняющееСообщение = ""; - -#Если ВебКлиент Тогда - Результат = ЗагрузитьКурсыСРБК_Сервер( + #Если ВебКлиент Тогда + Результат = ЗагрузитьКурсыСРБК_Сервер( Объект.СписокВалют, Объект.НачалоПериодаЗагрузки, - Объект.ОкончаниеПериодаЗагрузки); -#Иначе - Результат = РаботаСКурсамиВалютКлиентСервер.ЗагрузитьКурсыВалютПоПараметрам( - Объект.СписокВалют, - Объект.НачалоПериодаЗагрузки, - Объект.ОкончаниеПериодаЗагрузки); -#КонецЕсли + Объект.ОкончаниеПериодаЗагрузки + ); + #Иначе + Результат = РаботаСКурсамиВалютКлиентСервер.ЗагрузитьКурсыВалютПоПараметрам( + Объект.СписокВалют, + Объект.НачалоПериодаЗагрузки, + Объект.ОкончаниеПериодаЗагрузки + ); + #КонецЕсли ЕстьУспешноЗагруженныеКурсы = Ложь; @@ -176,16 +170,17 @@ Функция ЗагрузитьКурсыСРБК_Сервер(знач СписокВалют, знач НачалоПериодаЗагрузки, знач ОкончаниеПериодаЗагрузки) Возврат РаботаСКурсамиВалютКлиентСервер.ЗагрузитьКурсыВалютПоПараметрам( - СписокВалют, НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки); + СписокВалют, + НачалоПериодаЗагрузки, + ОкончаниеПериодаЗагрузки + ); КонецФункции -// Процедура заполняет табличную часть списком валют. В список попадают только -// валюты, курс которых не зависит от курса других валют. -// &НаСервере Процедура ЗаполнитьВалюты() + // Заполнение табличной части списком валют, курс которых не зависит от курса других валют ОкончаниеПериодаЗагрузки = Объект.ОкончаниеПериодаЗагрузки; СписокВалют = Объект.СписокВалют; СписокВалют.Очистить(); @@ -198,26 +193,22 @@ КонецПроцедуры -// Процедура добавляет в список валют новую строку и заполняет ее информацией -// о курсе на основе ссылки на валюту -// -// Параметры: -// Валюта - Справочник.Валюты / Ссылка - ссылка на валюту, которая добавляется -// в список -// &НаСервере Процедура ДобавитьВалютуВСписок(Валюта) + // Добавление записи в список валют НоваяСтрока = Объект.СписокВалют.Добавить(); + + // Заполнение информации о курсе на основе ссылки валюты ЗаполнитьДанныеСтрокиТаблицыНаОсновеВалюты(НоваяСтрока, Валюта); КонецПроцедуры -// Процедура обновляет записи о курсах валют в списке. -// &НаСервере Процедура ОбновитьСведенияВСпискеВалют() + // Обновление записей о курсах валют в списке. + Для Каждого СтрокаДанных Из Объект.СписокВалют Цикл СсылкаНаВалюту = СтрокаДанных.Валюта; ЗаполнитьДанныеСтрокиТаблицыНаОсновеВалюты(СтрокаДанных, СсылкаНаВалюту); @@ -225,19 +216,11 @@ КонецПроцедуры -// Процедура заполняет строку табличной части информацией о курсе на основе -// ссылки на валюту. -// -// Параметры: -// ТекСтрока - ДанныеФормыЭлементКоллекции - ссылка на строку табличной -// части, которую необходимо заполнить информацией о курсе -// валюты -// ВыбраннаяВалюта - Справочник.Валюты / Ссылка - ссылка на валюту, информацию -// о которой необходимо получить. -// &НаСервере Процедура ЗаполнитьДанныеСтрокиТаблицыНаОсновеВалюты(ТекСтрока, СсылкаНаВалюту); + // Заполнение информации о курсе на основе ссылки валюты + ТекСтрока.Валюта = СсылкаНаВалюту; ТекСтрока.КодВалюты = СсылкаНаВалюту.Код; diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl index d2a089408..8bebf1bfa 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Процедура заполняет табличную часть списком валют. В список попадают только // валюты, курс которых не зависит от курса других валют. @@ -22,9 +24,10 @@ Функция ЗагрузитьКурсыВалют(ПриЗагрузкеВозниклиОшибки = Ложь) Экспорт Возврат РаботаСКурсамиВалютКлиентСервер.ЗагрузитьКурсыВалютПоПараметрам( - СписокВалют, - НачалоПериодаЗагрузки, - ОкончаниеПериодаЗагрузки, - ПриЗагрузкеВозниклиОшибки); + СписокВалют, + НачалоПериодаЗагрузки, + ОкончаниеПериодаЗагрузки, + ПриЗагрузкеВозниклиОшибки + ); КонецФункции diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl index 5cd5242f7..52f6481dd 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Инициализирует колонки таблицы правил регистрации объектов // diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl index e3fdeb355..df4a9de38 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl @@ -1,13 +1,7 @@ -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПЕРЕМЕННЫЕ - Перем Регистрация Экспорт; // структура, содержащая параметры регистрации Перем ПравилаРегистрацииОбъектов Экспорт; // таблица значений с правилами регистрации объектов Перем ФлагОшибки Экспорт; // глобальный флаг ошибки -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПЕРЕМЕННЫЕ МОДУЛЯ - Перем ТипСтрока; Перем ТипБулево; Перем ТипЧисло; @@ -20,7 +14,10 @@ Перем СообщенияОбОшибках; // Соответствие. Ключ - код ошибки, Значение - описание ошибки //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции // Выполняет синтаксический анализ XML-файла с правилами регистрации. Заполняет значения коллекций по данным файла; // Подготавливает зачитанные правила для проигрывателя ПРО ("компиляция" правил) @@ -107,16 +104,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ВНУТРЕННИЕ СВОЙСТВА - -Функция КлючСообщенияЖурналаРегистрации() - - Возврат ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ЗАГРУЗКИ ПРАВИЛ РЕГИСТРАЦИИ ОБЪЕКТОВ (ПРО) +// Загрузка правил регистрации объектов (ПРО) Процедура ЗагрузитьРегистрациюИзФайла(ИмяФайла, ТолькоИнформация) @@ -673,9 +661,7 @@ КонецПроцедуры // ЗагрузитьГруппуПравилРегистрации() //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ КОМПИЛЯЦИИ ПРАВИЛ РЕГИСТРАЦИИ ОБЪЕКТОВ (ПРО) - -// Для ПРО по свойствам Плана обмена +// Компиляция правил регистрации объектов (ПРО) по свойствам Плана обмена Процедура ПодготовитьПравилоРегистрацииПоСвойствамПланаОбмена(ПРО) @@ -887,7 +873,8 @@ КонецФункции -// Для ПРО по свойствам Объекта +//////////////////////////////////////////////////////////////////////////////// +// Компиляция правил регистрации объектов (ПРО) по свойствам Объекта Процедура ПодготовитьПравилоРегистрацииПоСвойствамОбъекта(ПРО) @@ -925,7 +912,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +// Вспомогательные служебные процедуры и функции Процедура СообщитьОбОшибкеОбработки(Код = -1, ОписаниеОшибки = "") @@ -1009,7 +996,7 @@ Если ЗначениеЗаполнено(ТочнаяВерсия) Тогда - ТочнаяВерсия = СтроковыеФункцииКлиентСервер.ВерсияКонфигурацииБезНомераСборки(ТочнаяВерсия); + ТочнаяВерсия = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(ТочнаяВерсия); ИмяКонфигурации = ИмяКонфигурации + " (" + ТочнаяВерсия + ")"; @@ -1037,7 +1024,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ С ОБЪЕКТОМ XMLЧтение +// Для работы с объектом XMLЧтение // Читает значение атрибута по имени из указанного объекта, приводит значение // к указанному примитивному типу @@ -1161,7 +1148,16 @@ КонецПроцедуры // одПропустить() //////////////////////////////////////////////////////////////////////////////// -// ИНИЦИАЛИЗАЦИЯ РЕКВИЗИТОВ И МОДУЛЬНЫХ ПЕРЕМЕННЫХ +// Локальные служебные функции-свойства + +Функция КлючСообщенияЖурналаРегистрации() + + Возврат ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Инициализация реквизитов и модульных переменных // Инициализирует реквизиты обработки и модульные переменные // @@ -1231,6 +1227,6 @@ КонецФункции // ИнициализацияСообщений() //////////////////////////////////////////////////////////////////////////////// -// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ +// Операторы основной программы ИнициализацияРеквизитовИМодульныхПеременных(); diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form index 15ccb4688..b238bd49e 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form @@ -34,7 +34,7 @@ КоличествоПоказываемыхСобытийРасширеннаяПодсказка - 135 + 141 Label true true @@ -124,7 +124,7 @@ ПредставлениеОтбораРасширеннаяПодсказка - 137 + 143 Label true true @@ -163,7 +163,7 @@ ГруппаОтбораРасширеннаяПодсказка - 134 + 140 Label true true @@ -180,99 +180,23 @@ Auto
    - - Журнал - 48 - - <key>ru</key> - <value>Журнал событий</value> - - true - true - - true - - - Журнал - - true - false - None - Add - Change - Copy - CopyToClipboard - EndEdit - MoveDown - MoveUp - - Дата - 51 - - <key>ru</key> - <value>Дата, время</value> - - true - true - - true - - - Журнал.Дата - - - ДатаРасширеннаяПодсказка - 169 - Label - true - true - - Left - - - - ДатаКонтекстноеМеню - 52 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - + + КоманднаяПанель + 137 - ГруппаСобытие - 63 - - ПредставлениеСобытия - 64 - - <key>ru</key> - <value>Событие</value> - + КомандыОтбора + 105 + + УстановитьИнтервалДатДляПросмотра + 108 true true true - - Журнал.ПредставлениеСобытия - - ПредставлениеСобытияРасширеннаяПодсказка - 172 + УстановитьИнтервалДатДляПросмотраРасширеннаяПодсказка + 147 Label true true @@ -280,963 +204,17 @@ Left - - ПредставлениеСобытияКонтекстноеМеню - 65 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - Комментарий - 66 - - <key>ru</key> - <value>Комментарий</value> - - true - - true - - - Журнал.Комментарий - - - КомментарийРасширеннаяПодсказка - 174 - Label - true - true - - Left - - - - КомментарийКонтекстноеМеню - 67 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - true - true - - true - - - ГруппаСобытиеРасширеннаяПодсказка - 171 - Label + Form.Command.УстановитьИнтервалДатДляПросмотра + Normal + Auto true true - - Left - - - ColumnGroup - - Vertical - auto - true - - - - ГруппаПользовательКомпьютерПриложение - 53 - - ИмяПользователя - 54 - - <key>ru</key> - <value>Пользователь</value> - - true - true - - true - - - Журнал.ИмяПользователя - - - ИмяПользователяРасширеннаяПодсказка - 177 - Label - true - true - - Left - - - - ИмяПользователяКонтекстноеМеню - 55 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - Компьютер - 56 - - <key>ru</key> - <value>Компьютер</value> - - true - - true - - - Журнал.Компьютер - - - КомпьютерРасширеннаяПодсказка - 179 - Label - true - true - - Left - - - - КомпьютерКонтекстноеМеню - 57 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - ГруппаПриложение - 58 - - ПредставлениеПриложения - 59 - - <key>ru</key> - <value>Приложение</value> - - true - true - - true - - - Журнал.ПредставлениеПриложения - - - ПредставлениеПриложенияРасширеннаяПодсказка - 182 - Label - true - true - - Left - - - - ПредставлениеПриложенияКонтекстноеМеню - 60 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - Сеанс - 80 - true - true - - true - - - Журнал.Сеанс - - - СеансРасширеннаяПодсказка - 184 - Label - true - true - - Left - - - - СеансКонтекстноеМеню - 81 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - true - - true - - - ГруппаПриложениеРасширеннаяПодсказка - 181 - Label - true - true - - Left - - - ColumnGroup - - auto - true - - - true - true - - true - - - ГруппаПользовательКомпьютерПриложениеРасширеннаяПодсказка - 176 - Label - true - true - - Left - - - ColumnGroup - - Vertical - auto - true - - - - ГруппаСервер - 84 - - РабочийСервер - 85 - true - true - - true - - - Журнал.РабочийСервер - - - РабочийСерверРасширеннаяПодсказка - 187 - Label - true - true - - Left - - - - РабочийСерверКонтекстноеМеню - 86 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - ОсновнойIPПорт - 89 - true - true - - true - - - Журнал.ОсновнойIPПорт - - - ОсновнойIPПортРасширеннаяПодсказка - 189 - Label - true - true - - Left - - - - ОсновнойIPПортКонтекстноеМеню - 90 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - ВспомогательныйIPПорт - 91 - true - true - - true - - - Журнал.ВспомогательныйIPПорт - - - ru - Вспомогательный IP порт - - - ВспомогательныйIPПортРасширеннаяПодсказка - 191 - Label - true - true - - Left - - - - ВспомогательныйIPПортКонтекстноеМеню - 92 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - true - - - <key>ru</key> - <value>Группа сервер</value> - - - ru - Группа сервер - - - ГруппаСерверРасширеннаяПодсказка - 186 - Label - true - true - - Left - - - ColumnGroup - - Vertical - auto - true - - - - ГруппаТранзакция - 68 - - СтатусТранзакции - 69 - - <key>ru</key> - <value>Статус транзакции</value> - - true - true - - true - - - Журнал.СтатусТранзакции - - - СтатусТранзакцииРасширеннаяПодсказка - 194 - Label - true - true - - Left - - - - СтатусТранзакцииКонтекстноеМеню - 70 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - Транзакция - 71 - true - true - - true - - - Журнал.Транзакция - - - ТранзакцияРасширеннаяПодсказка - 196 - Label - true - true - - Left - - - - ТранзакцияКонтекстноеМеню - 72 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - true - - true - - - ГруппаТранзакцияРасширеннаяПодсказка - 193 - Label - true - true - - Left - - - ColumnGroup - - Vertical - auto - true - - - - ГруппаДанные - 73 - - ПредставлениеМетаданных - 74 - - <key>ru</key> - <value>Метаданные</value> - - true - true - - true - - - Журнал.ПредставлениеМетаданных - - - ПредставлениеМетаданныхРасширеннаяПодсказка - 199 - Label - true - true - - Left - - - - ПредставлениеМетаданныхКонтекстноеМеню - 75 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - Данные - 76 - true - true - - true - - - Журнал.Данные - - - ДанныеРасширеннаяПодсказка - 201 - Label - true - true - - Left - - - - ДанныеКонтекстноеМеню - 77 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - ПредставлениеДанных - 78 - true - true - - true - - - Журнал.ПредставлениеДанных - - - ПредставлениеДанныхРасширеннаяПодсказка - 203 - Label - true - true - - Left - - - - ПредставлениеДанныхКонтекстноеМеню - 79 - true - - LabelField - Enter - true - Left - true - - true - true - - - true - - true - - - ГруппаДанныеРасширеннаяПодсказка - 198 - Label - true - true - - Left - - - ColumnGroup - - Vertical - auto - true - - - - СведенияОСобытии - 130 - true - true - - true - - - Журнал.СведенияОСобытии - - - СведенияОСобытииРасширеннаяПодсказка - 205 - Label - true - true - - Left - - - - СведенияОСобытииКонтекстноеМеню - 131 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ЖурналКоманднаяПанель - 50 - - КомандыОтбора - 105 - - УстановитьИнтервалДатДляПросмотра - 108 - true - true - - true - - - УстановитьИнтервалДатДляПросмотраРасширеннаяПодсказка - 145 - Label - true - true - - Left - - - Form.Command.УстановитьИнтервалДатДляПросмотра - Normal - Auto - true - true - UserCmds - Auto - - - УстановитьОтбор - 42 - true - true - - true - - false - - УстановитьОтборРасширеннаяПодсказка - 146 - Label - true - true - - Left - - - 0 - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - УстановитьОтборПоЗначениюВТекущейКолонке - 43 - true - true - - true - - false - - УстановитьОтборПоЗначениюВТекущейКолонкеРасширеннаяПодсказка - 147 - Label - true - true - - Left - - - Form.Command.УстановитьОтборПоЗначениюВТекущейКолонке - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - ОтключитьОтбор - 44 - true - true - - true - - false - - ОтключитьОтборРасширеннаяПодсказка - 148 - Label - true - true - - Left - - - Form.Command.ОтключитьОтбор - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - true - true - - true - - - <key>ru</key> - <value>Команды отбора</value> - - - ru - Команды отбора - - - КомандыОтбораРасширеннаяПодсказка - 144 - Label - true - true - - Left - - - + UserCmds + Auto - ИзменитьФорму - 104 + УстановитьОтбор + 42 true true @@ -1244,7 +222,43 @@ false - ИзменитьФормуРасширеннаяПодсказка + УстановитьОтборРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + 0 + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + УстановитьОтборПоЗначениюВТекущейКолонке + 43 + true + true + + true + + false + + УстановитьОтборПоЗначениюВТекущейКолонкеРасширеннаяПодсказка 149 Label true @@ -1253,18 +267,26 @@ Left - Form.StandardCommand.CustomizeForm + Form.Command.УстановитьОтборПоЗначениюВТекущейКолонке Normal Auto true true UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + Auto - InAdditionalSubmenu - ВывестиСписок - 82 + ОтключитьОтбор + 44 true true @@ -1272,7 +294,7 @@ false - ВывестиСписокРасширеннаяПодсказка + ОтключитьОтборРасширеннаяПодсказка 150 Label true @@ -1281,7 +303,7 @@ Left - Form.Item.Журнал.StandardCommand.OutputList + Form.Command.ОтключитьОтбор Normal Auto true @@ -1298,9 +320,137 @@ Auto + true + true + + true + + + <key>ru</key> + <value>Команды отбора</value> + + + ru + Команды отбора + + + КомандыОтбораРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + + + + ИзменитьФорму + 104 + true + true + + true + + false + + ИзменитьФормуРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПросмотрТекущегоСобытияВОтдельномОкне + 38 + true + true + + true + + false + + ПросмотрТекущегоСобытияВОтдельномОкнеРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + Form.Command.ПросмотрТекущегоСобытияВОтдельномОкне + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + ВывестиСписок + 82 + true + true + + true + + false + + ВывестиСписокРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + Form.Item.Журнал.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + КомандаОбновить + 106 - ПросмотрТекущегоСобытияВОтдельномОкне - 38 + ОбновитьТекущийСписок + 46 true true @@ -1308,202 +458,7 @@ false - ПросмотрТекущегоСобытияВОтдельномОкнеРасширеннаяПодсказка - 151 - Label - true - true - - Left - - - Form.Command.ПросмотрТекущегоСобытияВОтдельномОкне - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - ОткрытьДанныеДляПросмотра - 40 - true - true - - true - - false - - ОткрытьДанныеДляПросмотраРасширеннаяПодсказка - 152 - Label - true - true - - Left - - - Form.Command.ОткрытьДанныеДляПросмотра - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - КомандаОбновить - 106 - - ОбновитьТекущийСписок - 46 - true - true - - true - - false - - ОбновитьТекущийСписокРасширеннаяПодсказка - 154 - Label - true - true - - Left - - - Form.Command.ОбновитьТекущийСписок - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - true - true - - true - - - <key>ru</key> - <value>Команда обновить</value> - - - ru - Команда обновить - - - КомандаОбновитьРасширеннаяПодсказка - 153 - Label - true - true - - Left - - - - - - КомандыПоиска - 109 - - ФормаНайти - 110 - true - true - - true - - - ФормаНайтиРасширеннаяПодсказка - 156 - Label - true - true - - Left - - - Form.Item.Журнал.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ФормаОтменитьПоиск - 111 - true - true - - true - - - ФормаОтменитьПоискРасширеннаяПодсказка - 157 - Label - true - true - - Left - - - Form.Item.Журнал.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Команды поиска</value> - - - ru - Команды поиска - - - КомандыПоискаРасширеннаяПодсказка + ОбновитьТекущийСписокРасширеннаяПодсказка 155 Label true @@ -1512,18 +467,87 @@ Left - + Form.Command.ОбновитьТекущийСписок + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + true + true + + true + + + <key>ru</key> + <value>Команда обновить</value> + + + ru + Команда обновить + + + КомандаОбновитьРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + + + + КомандыПоиска + 109 - Справка - 129 + ФормаНайти + 110 true true true - СправкаРасширеннаяПодсказка + ФормаНайтиРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + Form.Item.Журнал.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОтменитьПоиск + 111 + true + true + + true + + + ФормаОтменитьПоискРасширеннаяПодсказка 158 Label true @@ -1532,7 +556,7 @@ Left - Form.StandardCommand.Help + Form.Item.Журнал.StandardCommand.CancelSearch Normal Auto true @@ -1540,18 +564,22 @@ UserCmds Auto - Left -
    - - Selection - ЖурналВыбор - - - ЖурналСтрокаПоиска - 160 + true + true + + true + + + <key>ru</key> + <value>Команды поиска</value> + + + ru + Команды поиска + - ЖурналСтрокаПоискаРасширеннаяПодсказка - 162 + КомандыПоискаРасширеннаяПодсказка + 156 Label true true @@ -1559,22 +587,19 @@ Left - - ЖурналСтрокаПоискаКонтекстноеМеню - 161 - true - - Журнал - - true - - - - ЖурналСостояниеПросмотра - 163 + + + + Справка + 129 + true + true + + true + - ЖурналСостояниеПросмотраРасширеннаяПодсказка - 165 + СправкаРасширеннаяПодсказка + 159 Label true true @@ -1582,44 +607,30 @@ Left - - ЖурналСостояниеПросмотраКонтекстноеМеню - 164 - true - - ViewStatusAddition - Журнал - - true - - - - ЖурналУправлениеПоиском - 166 - - ЖурналУправлениеПоискомРасширеннаяПодсказка - 168 - Label - true - true - - Left - - - - ЖурналУправлениеПоискомКонтекстноеМеню - 167 - true - - SearchControlAddition - Журнал - - true - - + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + - ЖурналРасширеннаяПодсказка - 159 + КоманднаяПанельРасширеннаяПодсказка + 145 Label true true @@ -1627,111 +638,988 @@ Left - - ЖурналКонтекстноеМеню - 49 - - ОтборГруппаКонтекст - 107 - - УстановитьОтборПоЗначениюВТекущейКолонкеКонтекст - 98 - true - true - - true - - false - - УстановитьОтборПоЗначениюВТекущейКолонкеКонтекстРасширеннаяПодсказка - 140 - Label - true - true - - Left - - - Form.Command.УстановитьОтборПоЗначениюВТекущейКолонке - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - ЖурналКонтекстноеМенюОтключитьОтбор - 113 - true - true - - true - - - ЖурналКонтекстноеМенюОтключитьОтборРасширеннаяПодсказка - 141 - Label - true - true - - Left - - - Form.Command.ОтключитьОтбор - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - + CommandBar + + Left + + + + Страницы + 132 + + ЖурналРегистрации + 133 + + Журнал + 48 <key>ru</key> - <value>Отбор группа контекст</value> + <value>Журнал событий</value> - - ru - Отбор группа контекст - - - ОтборГруппаКонтекстРасширеннаяПодсказка - 139 - Label - true - true - - Left - - - - - - ПросмотрТекущегоСобытияВОтдельномОкнеКонтекст - 96 true true true + + Журнал + false + None + Add + Change + Copy + CopyToClipboard + EndEdit + MoveDown + MoveUp + + Дата + 51 + + <key>ru</key> + <value>Дата, время</value> + + true + true + + true + + + Журнал.Дата + + + ДатаРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 52 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ГруппаСобытие + 63 + + ПредставлениеСобытия + 64 + + <key>ru</key> + <value>Событие</value> + + true + true + + true + + + Журнал.ПредставлениеСобытия + + + ПредставлениеСобытияРасширеннаяПодсказка + 179 + Label + true + true + + Left + + + + ПредставлениеСобытияКонтекстноеМеню + 65 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Комментарий + 66 + + <key>ru</key> + <value>Комментарий</value> + + true + + true + + + Журнал.Комментарий + + + КомментарийРасширеннаяПодсказка + 181 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 67 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + true + true + + true + + + ГруппаСобытиеРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаПользовательКомпьютерПриложение + 53 + + ИмяПользователя + 54 + + <key>ru</key> + <value>Пользователь</value> + + true + true + + true + + + Журнал.ИмяПользователя + + + ИмяПользователяРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + + ИмяПользователяКонтекстноеМеню + 55 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Компьютер + 56 + + <key>ru</key> + <value>Компьютер</value> + + true + + true + + + Журнал.Компьютер + + + КомпьютерРасширеннаяПодсказка + 186 + Label + true + true + + Left + + + + КомпьютерКонтекстноеМеню + 57 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ГруппаПриложение + 58 + + ПредставлениеПриложения + 59 + + <key>ru</key> + <value>Приложение</value> + + true + true + + true + + + Журнал.ПредставлениеПриложения + + + ПредставлениеПриложенияРасширеннаяПодсказка + 189 + Label + true + true + + Left + + + + ПредставлениеПриложенияКонтекстноеМеню + 60 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Сеанс + 80 + true + true + + true + + + Журнал.Сеанс + + + СеансРасширеннаяПодсказка + 191 + Label + true + true + + Left + + + + СеансКонтекстноеМеню + 81 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + true + + true + + + ГруппаПриложениеРасширеннаяПодсказка + 188 + Label + true + true + + Left + + + ColumnGroup + + auto + true + + + true + true + + true + + + ГруппаПользовательКомпьютерПриложениеРасширеннаяПодсказка + 183 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаСервер + 84 + + РабочийСервер + 85 + true + true + + true + + + Журнал.РабочийСервер + + + РабочийСерверРасширеннаяПодсказка + 194 + Label + true + true + + Left + + + + РабочийСерверКонтекстноеМеню + 86 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ОсновнойIPПорт + 89 + true + true + + true + + + Журнал.ОсновнойIPПорт + + + ОсновнойIPПортРасширеннаяПодсказка + 196 + Label + true + true + + Left + + + + ОсновнойIPПортКонтекстноеМеню + 90 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ВспомогательныйIPПорт + 91 + true + true + + true + + + Журнал.ВспомогательныйIPПорт + + + ru + Вспомогательный IP порт + + + ВспомогательныйIPПортРасширеннаяПодсказка + 198 + Label + true + true + + Left + + + + ВспомогательныйIPПортКонтекстноеМеню + 92 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + true + + + <key>ru</key> + <value>Группа сервер</value> + + + ru + Группа сервер + + + ГруппаСерверРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаТранзакция + 68 + + СтатусТранзакции + 69 + + <key>ru</key> + <value>Статус транзакции</value> + + true + true + + true + + + Журнал.СтатусТранзакции + + + СтатусТранзакцииРасширеннаяПодсказка + 201 + Label + true + true + + Left + + + + СтатусТранзакцииКонтекстноеМеню + 70 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Транзакция + 71 + true + true + + true + + + Журнал.Транзакция + + + ТранзакцияРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + + ТранзакцияКонтекстноеМеню + 72 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + true + + true + + + ГруппаТранзакцияРасширеннаяПодсказка + 200 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ГруппаДанные + 73 + + ПредставлениеМетаданных + 74 + + <key>ru</key> + <value>Метаданные</value> + + true + true + + true + + + Журнал.ПредставлениеМетаданных + + + ПредставлениеМетаданныхРасширеннаяПодсказка + 206 + Label + true + true + + Left + + + + ПредставлениеМетаданныхКонтекстноеМеню + 75 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + Данные + 76 + true + true + + true + + + Журнал.Данные + + + ДанныеРасширеннаяПодсказка + 208 + Label + true + true + + Left + + + + ДанныеКонтекстноеМеню + 77 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ПредставлениеДанных + 78 + true + true + + true + + + Журнал.ПредставлениеДанных + + + ПредставлениеДанныхРасширеннаяПодсказка + 210 + Label + true + true + + Left + + + + ПредставлениеДанныхКонтекстноеМеню + 79 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + + true + + + ГруппаДанныеРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + СведенияОСобытии + 130 + true + true + + true + + + Журнал.СведенияОСобытии + + + СведенияОСобытииРасширеннаяПодсказка + 212 + Label + true + true + + Left + + + + СведенияОСобытииКонтекстноеМеню + 131 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЖурналКоманднаяПанель + 50 + Left + + + Selection + ЖурналВыбор + + + ЖурналСтрокаПоиска + 167 + + ЖурналСтрокаПоискаРасширеннаяПодсказка + 169 + Label + true + true + + Left + + + + ЖурналСтрокаПоискаКонтекстноеМеню + 168 + true + + Журнал + + true + + + + ЖурналСостояниеПросмотра + 170 + + ЖурналСостояниеПросмотраРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + + ЖурналСостояниеПросмотраКонтекстноеМеню + 171 + true + + ViewStatusAddition + Журнал + + true + + + + ЖурналУправлениеПоиском + 173 + + ЖурналУправлениеПоискомРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + + ЖурналУправлениеПоискомКонтекстноеМеню + 174 + true + + SearchControlAddition + Журнал + + true + + - ПросмотрТекущегоСобытияВОтдельномОкнеКонтекстРасширеннаяПодсказка - 142 + ЖурналРасширеннаяПодсказка + 166 Label true true @@ -1739,35 +1627,216 @@ Left - Form.Command.ПросмотрТекущегоСобытияВОтдельномОкне - Normal - Auto + + ЖурналКонтекстноеМеню + 49 + + ОтборГруппаКонтекст + 107 + + УстановитьОтборПоЗначениюВТекущейКолонкеКонтекст + 98 + true + true + + true + + false + + УстановитьОтборПоЗначениюВТекущейКолонкеКонтекстРасширеннаяПодсказка + 163 + Label + true + true + + Left + + + Form.Command.УстановитьОтборПоЗначениюВТекущейКолонке + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + ЖурналКонтекстноеМенюОтключитьОтбор + 113 + true + true + + true + + + ЖурналКонтекстноеМенюОтключитьОтборРасширеннаяПодсказка + 164 + Label + true + true + + Left + + + Form.Command.ОтключитьОтбор + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Отбор группа контекст</value> + + + ru + Отбор группа контекст + + + ОтборГруппаКонтекстРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + + + + ПросмотрТекущегоСобытияВОтдельномОкнеКонтекст + 96 + true + true + + true + + false + + ПросмотрТекущегоСобытияВОтдельномОкнеКонтекстРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + Form.Command.ПросмотрТекущегоСобытияВОтдельномОкне + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + true + + true true true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - + true +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + End + Enable + true + true + + Журнал.НомерРисунка + + + CommonPicture.КоллекцияКонтролируемыеСобытия152ФЗ + Style.BorderColor - Auto + None + None + None + true +
    - - ОткрытьДанныеДляПросмотраКонтекст - 97 + true + true + + true + + + <key>ru</key> + <value>Журнал регистрации</value> + + + ru + Журнал регистрации + + + ЖурналРегистрацииРасширеннаяПодсказка + 161 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ИндикаторДлительныхОпераций + 134 + + ПолеИндикаторДлительныхОпераций + 135 true true true - false + + ПолеИндикаторДлительныхОпераций + + None - ОткрытьДанныеДляПросмотраКонтекстРасширеннаяПодсказка - 143 + ПолеИндикаторДлительныхОперацийРасширеннаяПодсказка + 223 Label true true @@ -1775,56 +1844,89 @@ Left - Form.Command.ОткрытьДанныеДляПросмотра - Normal - Auto + + ПолеИндикаторДлительныхОперацийКонтекстноеМеню + 136 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + 50 + true + 10 + true + true + true + Special + ScrollAlways + ScrollAlways + Always + Auto + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Индикатор длительных операций</value> + + + ru + Индикатор длительных операций + + + ИндикаторДлительныхОперацийРасширеннаяПодсказка + 222 + Label true true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - true -
    - true - true - true - true -
    true
    - 1 - 1 - AutoUse - AutoUse - true - true - false - Auto - End - Enable - true - true - - Журнал.НомерРисунка - - - CommonPicture.КоллекцияКонтролируемыеСобытия152ФЗ - - - Style.BorderColor - - None - None - None - true - + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы</value> + + + ru + Страницы + + + СтраницыРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + Pages + + Auto + true true @@ -1841,7 +1943,7 @@ ГруппаЖурналРасширеннаяПодсказка - 133 + 139 Label true true @@ -1874,7 +1976,7 @@ ГруппаПросмотрЗарегистрированныхСобытийРасширеннаяПодсказка - 132 + 138 Label true true @@ -2506,6 +2608,74 @@ true + + ПолеИндикаторДлительныхОпераций + + <key>ru</key> + <value>Поле индикатор длительных операций</value> + + 9 + + SpreadsheetDocument + + + true + + + true + + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 10 + + UUID + + + true + + + true + + + + АдресХранилища + + <key>ru</key> + <value>Адрес хранилища</value> + + 11 + + String + + + + true + + + true + + + + ПараметрыОбработчикаОжидания + + <key>ru</key> + <value>Параметры обработчика ожидания</value> + + 12 + + + true + + + true + + ПросмотрТекущегоСобытияВОтдельномОкне @@ -2531,31 +2701,6 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>ОткрытьДанныеДляПросмотра</name> - <title> - <key>ru</key> - <value>Открыть данные для просмотра</value> - - 2 - - ru - Открыть данные для просмотра - - - true - - - StdPicture.ShowData - - - - ОткрытьДанныеДляПросмотра - - - Auto - Auto - УстановитьИнтервалДатДляПросмотра diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl index 5ff82ca1e..81f043151 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl @@ -1,6 +1,5 @@ - -////////////////////////////////////////////////////////////////////////////////////////// -// Обработчики событий +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -10,59 +9,50 @@ КоличествоПоказываемыхСобытий = 200; - ПрочитатьЖурнал(ОтборЖурналаРегистрации); + ПрочитатьЖурналПриСозданииНаСервере(ОтборЖурналаРегистрации); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ + +&НаКлиенте +Процедура ЖурналВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ЖурналРегистрацииКлиент.СобытияВыбор(Элементы.Журнал.ТекущиеДанные, Поле, ИнтервалДат, ОтборЖурналаРегистрации); + +КонецПроцедуры + +&НаКлиенте +Процедура КоличествоПоказываемыхСобытийПриИзменении(Элемент) + + ОбновитьТекущийСписок(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ОбновитьТекущийСписок() + + Элементы.Страницы.ТекущаяСтраница = Элементы.ИндикаторДлительныхОпераций; - ПрочитатьЖурнал(ОтборЖурналаРегистрации); + РезультатВыполнения = ПрочитатьЖурнал(ОтборЖурналаРегистрации); - // Позиционирование в конец списка - Если Журнал.Количество() > 0 Тогда - Элементы.Журнал.ТекущаяСтрока = Журнал[Журнал.Количество() - 1].ПолучитьИдентификатор(); + ПараметрыОбработчикаОжидания = Новый Структура; + + Если Не РезультатВыполнения.ЗаданиеВыполнено Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "ФормированиеОтчета"); + Иначе + Элементы.Страницы.ТекущаяСтраница = Элементы.ЖурналРегистрации; + ПозиционированиеВКонецСписка(); КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ДополнитьОтборЗначениямиПоУмолчанию() - - Для Каждого ЭлементОтбора Из ОтборЖурналаРегистрацииПоУмолчанию Цикл - ЗначениеОтбораПоУмолчанию = ЭлементОтбора.Значение; - Если НЕ ОтборЖурналаРегистрации.Свойство(ЭлементОтбора.Ключ) Тогда - // Отбор не был установлен - Если ТипЗнч(ЗначениеОтбораПоУмолчанию) = Тип("СписокЗначений") Тогда - ОтборЖурналаРегистрации.Вставить(ЭлементОтбора.Ключ, ЗначениеОтбораПоУмолчанию.Скопировать()); - Иначе - ОтборЖурналаРегистрации.Вставить(ЭлементОтбора.Ключ, ЗначениеОтбораПоУмолчанию); - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры // ДополнитьОтборЗначениямиПоУмолчанию - -&НаКлиенте -Процедура УдалитьИзОтбораЗначенияПоУмолчанию() - - Для Каждого ЭлементОтбораПоУмолчанию Из ОтборЖурналаРегистрацииПоУмолчанию Цикл - ЗначениеОтбора = ""; - Если ОтборЖурналаРегистрации.Свойство(ЭлементОтбораПоУмолчанию.Ключ, ЗначениеОтбора) Тогда - // Отбор удаляется только в случае, если он в точности соответствует значению отбора по умолчанию - Если ТипЗнч(ЗначениеОтбора) = Тип("СписокЗначений") Тогда - УдалятьОтбор = ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(ЗначениеОтбора, ЭлементОтбораПоУмолчанию.Значение); - Иначе - УдалятьОтбор = ЭлементОтбораПоУмолчанию.Значение = ЗначениеОтбора; - КонецЕсли; - Если УдалятьОтбор Тогда - ОтборЖурналаРегистрации.Удалить(ЭлементОтбораПоУмолчанию.Ключ); - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры // УдалитьИзОтбораЗначенияПоУмолчанию - &НаКлиенте Процедура ОтключитьОтбор() @@ -71,13 +61,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОткрытьДанныеДляПросмотра() - - ЖурналРегистрацииКлиент.ОткрытьДанныеДляПросмотра(Элементы.Журнал.ТекущиеДанные); - -КонецПроцедуры - &НаКлиенте Процедура ПросмотрТекущегоСобытияВОтдельномОкне() @@ -116,22 +99,21 @@ КонецПроцедуры -&НаКлиенте -Процедура КоличествоПоказываемыхСобытийПриИзменении(Элемент) - - ОбновитьТекущийСписок(); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -&НаКлиенте -Процедура ЖурналВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) +&НаСервере +Функция ПараметрыОтчета(ОтборЖурналаНаКлиенте) + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("Журнал", РеквизитФормыВЗначение("Журнал")); + ПараметрыОтчета.Вставить("ОтборЖурналаРегистрации", ОтборЖурналаНаКлиенте); + ПараметрыОтчета.Вставить("КоличествоПоказываемыхСобытий", КоличествоПоказываемыхСобытий); + ПараметрыОтчета.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); + ПараметрыОтчета.Вставить("МенеджерВладельца", Обработки.ЗащитаПерсональныхДанных); + ПараметрыОтчета.Вставить("ДобавлятьДополнительныеКолонки", Истина); - ЖурналРегистрацииКлиент.СобытияВыбор(Элементы.Журнал.ТекущиеДанные, Поле, ИнтервалДат, ОтборЖурналаРегистрации); - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры + Возврат ПараметрыОтчета; +КонецФункции &НаСервере Функция ЗаполнитьОтборЖурналаРегистрацииПоУмолчанию() @@ -143,10 +125,134 @@ КонецФункции &НаСервере -Процедура ПрочитатьЖурнал(Знач ОтборЖурналаНаКлиенте) +Функция ПрочитатьЖурнал(ОтборЖурналаНаКлиенте) - ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации(Журнал, ОтборЖурналаНаКлиенте, КоличествоПоказываемыхСобытий, УникальныйИдентификатор, Обработки.ЗащитаПерсональныхДанных, Истина); + ПараметрыОтчета = ПараметрыОтчета(ОтборЖурналаНаКлиенте); + + ИБФайловая = Неопределено; + Если Не ПроверитьЗаполнение() Тогда + Возврат Новый Структура("ЗаданиеВыполнено", Истина); + КонецЕсли; + + Если ИБФайловая = Неопределено Тогда + ИБФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + КонецЕсли; + + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); + + ИдентификаторЗадания = Неопределено; + + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "НеИспользовать"); + + Если ИБФайловая Тогда + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища); + РезультатВыполнения = Новый Структура("ЗаданиеВыполнено", Истина); + Иначе + РезультатВыполнения = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации", + ПараметрыОтчета, + НСтр("ru = 'Защита персональных данных'")); + + АдресХранилища = РезультатВыполнения.АдресХранилища; + ИдентификаторЗадания = РезультатВыполнения.ИдентификаторЗадания; + КонецЕсли; + + Если РезультатВыполнения.ЗаданиеВыполнено Тогда + ЗагрузитьПодготовленныеДанные(); + КонецЕсли; ЖурналРегистрации.СформироватьПредставлениеОтбора(ПредставлениеОтбора, ОтборЖурналаНаКлиенте, ОтборЖурналаРегистрацииПоУмолчанию); + Возврат РезультатВыполнения; +КонецФункции + +&НаСервере +Процедура ПрочитатьЖурналПриСозданииНаСервере(Знач ОтборЖурналаНаКлиенте) + Элементы.Страницы.ТекущаяСтраница = Элементы.ЖурналРегистрации; + ПараметрыОтчета = ПараметрыОтчета(ОтборЖурналаНаКлиенте); + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + + ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища); + ЗагрузитьПодготовленныеДанные(); + ЖурналРегистрации.СформироватьПредставлениеОтбора(ПредставлениеОтбора, ОтборЖурналаНаКлиенте, ОтборЖурналаРегистрацииПоУмолчанию); КонецПроцедуры + +&НаКлиенте +Процедура ДополнитьОтборЗначениямиПоУмолчанию() + + Для Каждого ЭлементОтбора Из ОтборЖурналаРегистрацииПоУмолчанию Цикл + ЗначениеОтбораПоУмолчанию = ЭлементОтбора.Значение; + Если НЕ ОтборЖурналаРегистрации.Свойство(ЭлементОтбора.Ключ) Тогда + // Отбор не был установлен + Если ТипЗнч(ЗначениеОтбораПоУмолчанию) = Тип("СписокЗначений") Тогда + ОтборЖурналаРегистрации.Вставить(ЭлементОтбора.Ключ, ЗначениеОтбораПоУмолчанию.Скопировать()); + Иначе + ОтборЖурналаРегистрации.Вставить(ЭлементОтбора.Ключ, ЗначениеОтбораПоУмолчанию); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьИзОтбораЗначенияПоУмолчанию() + + Для Каждого ЭлементОтбораПоУмолчанию Из ОтборЖурналаРегистрацииПоУмолчанию Цикл + ЗначениеОтбора = ""; + Если ОтборЖурналаРегистрации.Свойство(ЭлементОтбораПоУмолчанию.Ключ, ЗначениеОтбора) Тогда + // Отбор удаляется только в случае, если он в точности соответствует значению отбора по умолчанию + Если ТипЗнч(ЗначениеОтбора) = Тип("СписокЗначений") Тогда + УдалятьОтбор = ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(ЗначениеОтбора, ЭлементОтбораПоУмолчанию.Значение); + Иначе + УдалятьОтбор = ЭлементОтбораПоУмолчанию.Значение = ЗначениеОтбора; + КонецЕсли; + Если УдалятьОтбор Тогда + ОтборЖурналаРегистрации.Удалить(ЭлементОтбораПоУмолчанию.Ключ); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьПодготовленныеДанные() + РезультатВыполнения = ПолучитьИзВременногоХранилища(АдресХранилища); + СобытияЖурнала = РезультатВыполнения.СобытияЖурнала; + + ЗначениеВДанныеФормы(СобытияЖурнала, Журнал); + ИдентификаторЗадания = Неопределено; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеЗадания() + + Попытка + Если ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + ЗагрузитьПодготовленныеДанные(); + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "НеИспользовать"); + Элементы.Страницы.ТекущаяСтраница = Элементы.ЖурналРегистрации; + ПозиционированиеВКонецСписка(); + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания( + "Подключаемый_ПроверитьВыполнениеЗадания", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); + КонецЕсли; + Исключение + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "НеИспользовать"); + Элементы.Страницы.ТекущаяСтраница = Элементы.ЖурналРегистрации; + ПозиционированиеВКонецСписка(); + ВызватьИсключение; + КонецПопытки; +КонецПроцедуры + +&НаКлиенте +Процедура ПозиционированиеВКонецСписка() + Если Журнал.Количество() > 0 Тогда + Элементы.Журнал.ТекущаяСтрока = Журнал[Журнал.Количество() - 1].ПолучитьИдентификатор(); + КонецЕсли; +КонецПроцедуры + diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl index 11127e29f..3f21561b3 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl @@ -1,4 +1,8 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Процедура заполняет номер картинки для события 152-ФЗ журнала регистрации +// Процедура УстановитьНомерРисунка(СобытиеЖурнала) Экспорт НомераКартинокСобытий = ЗащитаПерсональныхДанныхПовтИсп.НомераКартинокСобытий152ФЗ(); @@ -48,10 +52,13 @@ КонецЕсли; -КонецПроцедуры // ЗаполнитьДополнительныеКолонкиСобытия +КонецПроцедуры +// Процедура добавляет колонки, +// которые имеют смысл только для формы Защита персональных данных +// Процедура ДобавитьДополнительныеКолонкиСобытия(ЖурналСобытий) Экспорт ЖурналСобытий.Колонки.Добавить("СведенияОСобытии", Новый ОписаниеТипов("Строка")); -КонецПроцедуры // СоздатьДополнительныеКолонкиЖурналаСобытий +КонецПроцедуры diff --git a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form index 911fb93bb..3fab89f63 100644 --- a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form @@ -123,33 +123,6 @@ <autoCommandBar> <name>ФормаКоманднаяПанель</name> <id>-1</id> - <items xsi:type="form:Button"> - <name>Обновить</name> - <id>5</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>ОбновитьРасширеннаяПодсказка</name> - <id>8</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Command.Обновить</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <representationInContextMenu>Auto</representationInContextMenu> - </items> <items xsi:type="form:Button"> <name>ЗадачиВТочкеМаршрута</name> <id>7</id> @@ -161,7 +134,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>ЗадачиВТочкеМаршрутаРасширеннаяПодсказка</name> - <id>9</id> + <id>8</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -177,6 +150,34 @@ <placementArea>UserCmds</placementArea> <representationInContextMenu>Auto</representationInContextMenu> </items> + <items xsi:type="form:Button"> + <name>Обновить</name> + <id>5</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <skipOnInput>false</skipOnInput> + <extendedTooltip> + <name>ОбновитьРасширеннаяПодсказка</name> + <id>9</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.Обновить</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + <locationInCommandBar>InAdditionalSubmenu</locationInCommandBar> + </items> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> diff --git a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl index d0c0562b8..08ab252aa 100644 --- a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -14,30 +14,33 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура ОбновитьВыполнить() - ОбновитьКартуМаршрута(); -КонецПроцедуры +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура БизнесПроцессПриИзменении(Элемент) ОбновитьКартуМаршрута(); КонецПроцедуры -&НаКлиенте -Процедура ЗадачиВыполнить() - ОткрытьСписокЗадачТочкиМаршрута(); -КонецПроцедуры - &НаКлиенте Процедура КартаМаршрутаВыбор(Элемент) ОткрытьСписокЗадачТочкиМаршрута(); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ОбновитьВыполнить(Команда) + ОбновитьКартуМаршрута(); +КонецПроцедуры + +&НаКлиенте +Процедура ЗадачиВыполнить(Команда) + ОткрытьСписокЗадачТочкиМаршрута(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ОбновитьКартуМаршрута() diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl index 3f00b7972..c31f16533 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl @@ -715,7 +715,11 @@ Если ЭтоОбменЧерезВнешнееСоединение() Тогда - ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеПослеЗагрузкиДанных(); + Если Не ФлагОшибки() Тогда + + ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеПослеЗагрузкиДанных(); + + КонецЕсли; Иначе @@ -1283,6 +1287,14 @@ КонецПроцедуры +Процедура ВнешнееСоединениеОтменитьТранзакциюПриЗагрузкеДанных() Экспорт + + Пока ТранзакцияАктивна() Цикл + ОтменитьТранзакцию(); + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ ДЛЯ НАПИСАНИЯ АЛГОРИТМОВ @@ -5018,20 +5030,6 @@ ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли ); - Если ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли - И СоответствияОбъектовИнформационныхБаз <> Неопределено Тогда // необходимо добавить запись в регистр сопоставления объектов - - Объект = ПолучитьОбъектПоСсылкеИДопИнформации(СозданныйОбъект, Значение); - - Если Объект <> Неопределено Тогда - - Объект.ДополнительныеСвойства.Вставить("СоответствияОбъектовИнформационныхБаз", СоответствияОбъектовИнформационныхБаз); - ЗаписатьОбъектВИБ(Объект, Тип); - - КонецЕсли; - - КонецЕсли; - Если НеСоздаватьОбъектЕслиНеНайден И НЕ ОбъектНайден Тогда @@ -6231,8 +6229,19 @@ Результат = ПолучитьКлючевыеПоляПоискаПоТабличнойЧасти(ПКО, ИмяТабличнойЧасти, МассивКлючевыхПолейПоиска, КлючевыеПоляПоиска); Если Не Результат Тогда - одПропустить(ФайлОбмена); - Возврат; + + МассивКлючевыхПолейПоиска = Новый Массив; + + ОбъектМетаданныхТабличнаяЧасть = Объект.Метаданные().ТабличныеЧасти[ИмяТабличнойЧасти]; + + Для Каждого Реквизит Из ОбъектМетаданныхТабличнаяЧасть.Реквизиты Цикл + + МассивКлючевыхПолейПоиска.Добавить(Реквизит.Имя); + + КонецЦикла; + + КлючевыеПоляПоиска = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(МассивКлючевыхПолейПоиска); + КонецЕсли; УникальныйИдентификатор = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "_"); @@ -6252,8 +6261,8 @@ ЗаполнитьКоллекциюФайлаОбмена(Объект, КоллекцияФайлаОбмена, ИмяТабличнойЧасти, ОбщаяИнформацияОТипеДокумента, ПараметрыОбъекта, МассивКлючевыхПолейПоиска, ИмяПоляСортировки); - ДобавитьИтераторТаблице(КоллекцияФайлаОбмена, +1, ИмяКолонкиИтератора); - ДобавитьИтераторТаблице(КоллекцияОбъекта, -1, ИмяКолонкиИтератора); + ДобавитьКолонкуСоЗначениемВТаблицу(КоллекцияФайлаОбмена, +1, ИмяКолонкиИтератора); + ДобавитьКолонкуСоЗначениемВТаблицу(КоллекцияОбъекта, -1, ИмяКолонкиИтератора); КоллекцияГруппировки = ИнициализацияТаблицыПоКлючевымПолям(МассивКлючевыхПолейПоиска); КоллекцияГруппировки.Колонки.Добавить(ИмяКолонкиИтератора); @@ -6355,7 +6364,7 @@ КонецФункции -Процедура ДобавитьИтераторТаблице(Коллекция, Значение, ИмяКолонкиИтератора) +Процедура ДобавитьКолонкуСоЗначениемВТаблицу(Коллекция, Значение, ИмяКолонкиИтератора) Коллекция.Колонки.Добавить(ИмяКолонкиИтератора); Коллекция.ЗаполнитьЗначения(Значение, ИмяКолонкиИтератора); @@ -6846,17 +6855,24 @@ // если объект создали, то работаем с ним, если нашли - получаем объект Если СозданныйОбъект <> Неопределено Тогда + Объект = СозданныйОбъект; + + ИначеЕсли Ссылка = Неопределено Тогда + + Объект = Неопределено; + + ИначеЕсли Ссылка.Пустая() Тогда + + Объект = Неопределено; + Иначе - Если Ссылка.Пустая() Тогда - Объект = Неопределено; - Иначе - Объект = Ссылка.ПолучитьОбъект(); - КонецЕсли; + + Объект = Ссылка.ПолучитьОбъект(); + КонецЕсли; Возврат Объект; - КонецФункции Процедура КомментарииКЗагрузкеОбъекта(Нпп, ИмяПравила, Источник, ТипОбъекта, ГНпп = 0) @@ -6997,6 +7013,10 @@ Менеджер = Менеджеры.Получить(Тип(Правило.ТипИсточника)).Менеджер; + Если ТипЗнч(Менеджер) = Тип("ТочкиМаршрутаБизнесПроцесса") Тогда + Продолжить; + КонецЕсли; + Если Менеджер <> Неопределено Тогда Выборка = Менеджер.Выбрать(); @@ -7397,7 +7417,13 @@ КСообщенияОбОшибках = ?(ПриоритетОбъектаОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетПоступившегоПриОбменеОбъектаВыше, 81, 82); ЗП = Новый Структура; - ЗП.Вставить("Данные", ОбщегоНазначения.РасширенноеПредставлениеОбъекта(Объект.Ссылка)); + + Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)) Тогда + + ЗП.Вставить("Данные", ОбщегоНазначения.РасширенноеПредставлениеОбъекта(Объект.Ссылка)); + + КонецЕсли; + ЗаписатьВПротоколВыполнения(КСообщенияОбОшибках, ЗП, Ложь,,,,Перечисления.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями); КонецЕсли; @@ -7896,7 +7922,8 @@ ИЛИ ИмяУзла = "НаборЗаписей" Тогда // - Если РежимЗагрузкиДанныхВТаблицуЗначений() Тогда + Если РежимЗагрузкиДанныхВТаблицуЗначений() + И ИмяТипаОбъекта <> "ПланОбмена" Тогда одПропустить(ФайлОбмена, ИмяУзла); Продолжить; КонецЕсли; @@ -8067,23 +8094,22 @@ ЗаписатьОбъектВИБ(Объект, ТипОбъекта, ЗаписатьОбъект); - ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения - ИЛИ РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда + ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда - // проведение убираем всегда... ОтменитьПроведениеОбъектаВИБ(Объект, ТипОбъекта, ЗаписатьОбъект); - КонецЕсли; - - КонецЕсли; - - Если ЗаписатьОбъект Тогда - - // документы, требующие проведения, записываем в очередь - Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда + ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда - // если документ был успешно записан и создана ссылка, то помещаем в очередь для проведения - Если Объект <> Неопределено + // Отключаем механизм регистрации объектов при отмене проведения документа. + // Механизм регистрации будет выполнен при отложенном проведении документов + // (оптимизация производительности загрузки данных). + Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов", Истина); + + ОтменитьПроведениеОбъектаВИБ(Объект, ТипОбъекта, ЗаписатьОбъект); + + // Если документ был успешно записан и создана ссылка, + // то помещаем документ в очередь для проведения. + Если Объект <> Неопределено И Объект.Ссылка <> Неопределено Тогда СтрокаТаблицы = ДокументыДляОтложенногоПроведения().Добавить(); @@ -8096,6 +8122,7 @@ КонецЕсли; КонецЕсли; + Исключение СтрокаОписанияОшибки = ОписаниеОшибки(); @@ -8380,7 +8407,19 @@ Исключение - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(49); + ЗП = ПолучитьСтруктуруЗаписиПротокола(49, ОписаниеОшибки()); + ЗП.ПКО = ПКО.Имя + " (" + ПКО.Наименование + ")"; + ЗП.ПКГС = ПКГС.Имя + " (" + ПКГС.Наименование + ")"; + + Попытка + ЗП.Объект = Строка(Источник) + " (" + ТипЗнч(Источник) + ")"; + Исключение + ЗП.Объект = "(" + ТипЗнч(Источник) + ")"; + КонецПопытки; + + ЗП.Обработчик = "ПослеОбработкиВыгрузкиГруппыСвойств"; + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(49, ЗП); + Если Не ФлагРежимОтладки Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -8406,21 +8445,43 @@ КоллекцияОбъектов = ВходящиеДанные[ПКГС.Приемник]; + Если ТипЗнч(КоллекцияОбъектов) = Тип("РезультатЗапроса") Тогда + + КоллекцияОбъектов = КоллекцияОбъектов.Выгрузить(); + + КонецЕсли; + Исключение - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(66); + ЗП = ПолучитьСтруктуруЗаписиПротокола(66, ОписаниеОшибки()); + ЗП.ПКО = ПКО.Имя + " (" + ПКО.Наименование + ")"; + ЗП.ПКГС = ПКГС.Имя + " (" + ПКГС.Наименование + ")"; + + Попытка + ЗП.Объект = Строка(Источник) + " (" + ТипЗнч(Источник) + ")"; + Исключение + ЗП.Объект = "(" + ТипЗнч(Источник) + ")"; + КонецПопытки; + + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(66, ЗП); + Если Не ФлагРежимОтладки Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; - - Возврат; + Возврат; КонецПопытки; ИначеЕсли ВидИсточника = "ТабличнаяЧасть" Тогда КоллекцияОбъектов = Источник[ПКГС.Источник]; + Если ТипЗнч(КоллекцияОбъектов) = Тип("РезультатЗапроса") Тогда + + КоллекцияОбъектов = КоллекцияОбъектов.Выгрузить(); + + КонецЕсли; + ИначеЕсли ВидИсточника = "ПодчиненныйСправочник" Тогда ИначеЕсли Найти(ВидИсточника, "НаборДвижений") > 0 Тогда @@ -8431,6 +8492,12 @@ КоллекцияОбъектов = Источник[ПКГС.Приемник]; + Если ТипЗнч(КоллекцияОбъектов) = Тип("РезультатЗапроса") Тогда + + КоллекцияОбъектов = КоллекцияОбъектов.Выгрузить(); + + КонецЕсли; + КонецЕсли; ВыгружатьГруппуЧерезФайл = ВыгружатьГруппуЧерезФайл ИЛИ (КоллекцияОбъектов.Количество() > 1000); @@ -8601,7 +8668,19 @@ Исключение - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(49); + ЗП = ПолучитьСтруктуруЗаписиПротокола(49, ОписаниеОшибки()); + ЗП.ПКО = ПКО.Имя + " (" + ПКО.Наименование + ")"; + ЗП.ПКГС = ПКГС.Имя + " (" + ПКГС.Наименование + ")"; + + Попытка + ЗП.Объект = Строка(Источник) + " (" + ТипЗнч(Источник) + ")"; + Исключение + ЗП.Объект = "(" + ТипЗнч(Источник) + ")"; + КонецПопытки; + + ЗП.Обработчик = "ПослеОбработкиВыгрузкиГруппыСвойств"; + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(49, ЗП); + Если Не ФлагРежимОтладки Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -9865,9 +9944,13 @@ КлючВыгружаемыхДанных = ИмяПКО; - ЭтоНеСсылочныйТип = ИмяТипа = "РегистрСведений" - ИЛИ ИмяТипа = "Константы"; - // КлючВыгружаемыхДанных + ЭтоНеСсылочныйТип = ИмяТипа = "Константы" + ИЛИ ИмяТипа = "РегистрСведений" + ИЛИ ИмяТипа = "РегистрНакопления" + ИЛИ ИмяТипа = "РегистрБухгалтерии" + ИЛИ ИмяТипа = "РегистрРасчета" + ; + Если ЭтоНеСсылочныйТип ИЛИ ПустаяСтрока(ИмяТипа) Тогда @@ -11348,9 +11431,19 @@ Для Каждого ПКС ИЗ МассивСтрокПКС Цикл + // Проверка на недопустимые символы в строке + Если ПустаяСтрока(ПКС.Источник) + ИЛИ Лев(ПКС.Источник, 1) = "{" Тогда + + Продолжить; + КонецЕсли; + Попытка СтруктураРеквизитовРегистрации.Вставить(ПКС.Источник); Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными.Загрузка правил конвертации'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); КонецПопытки; КонецЦикла; @@ -11610,7 +11703,7 @@ Если ЗначениеЗаполнено(ТочнаяВерсия) Тогда - ТочнаяВерсия = СтроковыеФункцииКлиентСервер.ВерсияКонфигурацииБезНомераСборки(ТочнаяВерсия); + ТочнаяВерсия = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(ТочнаяВерсия); ИмяКонфигурации = ИмяКонфигурации + " (" + ТочнаяВерсия + ")"; @@ -12579,6 +12672,16 @@ Прервать; КонецЕсли; + ИначеЕсли ИмяУзла = "ОбщиеДанныеУзлов" Тогда + + ПрочитатьОбщиеДанныеУзлов(); + + одПропустить(ФайлОбмена, ИмяУзла); + + Если ФлагОшибки() Тогда + Прервать; + КонецЕсли; + ИначеЕсли ИмяУзла = "КорректировкаИнформацииОРегистрацииОбъекта" Тогда ПрочитатьКорректировкуИнформацииСопоставления(); @@ -12992,6 +13095,16 @@ Прервать; КонецЕсли; + ИначеЕсли ИмяУзла = "ОбщиеДанныеУзлов" Тогда + + ПрочитатьОбщиеДанныеУзлов(); + + одПропустить(ФайлОбмена, ИмяУзла); + + Если ФлагОшибки() Тогда + Прервать; + КонецЕсли; + ИначеЕсли (ИмяУзла = "ФайлОбмена") И (ФайлОбмена.ТипУзла = ТипУзлаXML.КонецЭлемента) Тогда Прервать; // выход @@ -13039,7 +13152,9 @@ ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбменаЗагрузкаДанных, НомерПринятогоСообщения()); - Если СтроковыеФункцииКлиентСервер.СравнитьВерсии(ВерсияФорматаВходящегоСообщенияОбмена(), "3.1.0.0") >= 0 Тогда + РегистрыСведений.ИзмененияОбщихДанныхУзлов.УдалитьРегистрациюИзменений(УзелОбменаЗагрузкаДанных, НомерПринятогоСообщения()); + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияФорматаВходящегоСообщенияОбмена(), "3.1.0.0") >= 0 Тогда РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ЗафиксироватьВыполнениеКорректировкиИнформацииСопоставления(УзелОбменаЗагрузкаДанных, НомерПринятогоСообщения()); @@ -13055,6 +13170,45 @@ КонецПроцедуры +Процедура ПрочитатьОбщиеДанныеУзлов() + + ФайлОбмена.Прочитать(); + + РежимЗагрузкиДанныхПредыдущий = РежимЗагрузкиДанных; + + РежимЗагрузкиДанных = "ЗагрузкаВТаблицуЗначений"; + + ОбщийУзел = ПрочитатьОбъект(); + + Инкремент(ПолеСчетчикЗагруженныхОбъектов); + + РежимЗагрузкиДанных = РежимЗагрузкиДанныхПредыдущий; + + Если ОбменДаннымиСобытия.ДанныеРазличаются(ОбщийУзел, ОбщийУзел.Ссылка.ПолучитьОбъект()) Тогда + + НачатьТранзакцию(); + Попытка + + ОбщийУзел.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + + ОбщийУзел.Записать(); + + // Обновляем повторноиспользуемые значения механизма + ОбменДаннымиСервер.УстановитьДатуОбновленияПовторноИспользуемыхЗначенийМРО(); + + // Удаляем регистрацию изменений на случай, если изменения были ранее зарегистрированы (в случае коллизии изменений) + РегистрыСведений.ИзмененияОбщихДанныхУзлов.УдалитьРегистрациюИзменений(ОбщийУзел.Ссылка); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры + Процедура ВыполнитьОтложенноеПроведениеДокументов() Если ДокументыДляОтложенногоПроведения().Количество() = 0 Тогда @@ -13086,9 +13240,12 @@ Если Объект.ПроверитьЗаполнение() Тогда - // при проведении документа отказываемся от механизмов ВРО и ПРО, - // т.к. они были ранее выполнены при записи объекта - Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов", Истина); + // При проведении документа снимаем запрет на выполнение ПРО, + // т.к. ПРО были проигнорированы при обычной записи документа с целью оптимизации скорости загрузки данных. + Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов") Тогда + Объект.ДополнительныеСвойства.Удалить("ОтключитьМеханизмРегистрацииОбъектов"); + КонецЕсли; + Объект.ДополнительныеСвойства.Вставить("НеПроверятьДатыЗапретаИзмененияДанных"); // выполняем попытку проведения документа @@ -13125,9 +13282,7 @@ КонецПроцедуры -Процедура ЗаписатьИнформациюОбОбменеДаннымиЧерезПланыОбмена(Знач ВыгрузитьИнформациюСопоставления) - - ИтераторНомераИсходящегоСообщения = ?(ВыгрузитьИнформациюСопоставления, 2, 1); +Процедура ЗаписатьИнформациюОбОбменеДаннымиЧерезПланыОбмена(Знач НомерОтправленного) Приемник = СоздатьУзел("ДанныеПоОбмену"); @@ -13136,7 +13291,7 @@ УстановитьАтрибут(Приемник, "ОтКого", ПланыОбмена[ИмяПланаОбмена()].ЭтотУзел().Код); // атрибуты механизма квитирования сообщений обмена - УстановитьАтрибут(Приемник, "НомерИсходящегоСообщения", УзелДляОбмена.НомерОтправленного + ИтераторНомераИсходящегоСообщения); + УстановитьАтрибут(Приемник, "НомерИсходящегоСообщения", НомерОтправленного); УстановитьАтрибут(Приемник, "НомерВходящегоСообщения", УзелДляОбмена.НомерПринятого); УстановитьАтрибут(Приемник, "УдалитьРегистрациюИзменений", Истина); @@ -13147,6 +13302,103 @@ КонецПроцедуры +Процедура ВыгрузитьОбщиеДанныеУзлов(Знач НомерОтправленного) + + ВыборкаИзмененийУзлов = РегистрыСведений.ИзмененияОбщихДанныхУзлов.ВыбратьИзменения(УзелДляОбмена, НомерОтправленного); + + Если ВыборкаИзмененийУзлов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелДляОбмена); + + ОбщиеДанныеУзлов = ОбменДаннымиПовтИсп.ОбщиеДанныеУзлов(УзелДляОбмена); + + Если ПустаяСтрока(ОбщиеДанныеУзлов) Тогда + Возврат; + КонецЕсли; + + ПравилаКонвертацииСвойств = Новый ТаблицаЗначений; + ИнициализацияТаблицыПравилКонвертацииСвойств(ПравилаКонвертацииСвойств); + + Свойства = ПравилаКонвертацииСвойств.Скопировать(); + СвойстваПоиска = ПравилаКонвертацииСвойств.Скопировать(); + + МетаданныеОбщегоУзла = Метаданные.ПланыОбмена[ИмяПланаОбмена]; + + ТабличныеЧастиОбщегоУзла = ОбменДаннымиПовтИсп.ТабличныеЧастиОбъекта(МетаданныеОбщегоУзла); + + СвойстваОбщегоУзла = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ОбщиеДанныеУзлов); + + Для Каждого Свойство Из СвойстваОбщегоУзла Цикл + + Если ТабличныеЧастиОбщегоУзла.Найти(Свойство) <> Неопределено Тогда + + ПКС = Свойства.Добавить(); + ПКС.ЭтоГруппа = Истина; + ПКС.ВидИсточника = "ТабличнаяЧасть"; + ПКС.ВидПриемника = "ТабличнаяЧасть"; + ПКС.Источник = Свойство; + ПКС.Приемник = Свойство; + ПКС.ПравилаГруппы = ПравилаКонвертацииСвойств.Скопировать(); + + Для Каждого Реквизит Из МетаданныеОбщегоУзла.ТабличныеЧасти[Свойство].Реквизиты Цикл + + ПКС = ПКС.ПравилаГруппы.Добавить(); + ПКС.ЭтоГруппа = Ложь; + ПКС.ВидИсточника = "Реквизит"; + ПКС.ВидПриемника = "Реквизит"; + ПКС.Источник = Реквизит.Имя; + ПКС.Приемник = Реквизит.Имя; + + КонецЦикла; + + Иначе + + ПКС = Свойства.Добавить(); + ПКС.ЭтоГруппа = Ложь; + ПКС.ВидИсточника = "Реквизит"; + ПКС.ВидПриемника = "Реквизит"; + ПКС.Источник = Свойство; + ПКС.Приемник = Свойство; + + КонецЕсли; + + КонецЦикла; + + ПКС = СвойстваПоиска.Добавить(); + ПКС.ВидИсточника = "Свойство"; + ПКС.ВидПриемника = "Свойство"; + ПКС.Источник = "Код"; + ПКС.Приемник = "Код"; + ПКС.ТипИсточника = "Строка"; + ПКС.ТипПриемника = "Строка"; + + ПКО = ТаблицаПравилКонвертации.Добавить(); + ПКО.СинхронизироватьПоИдентификатору = Ложь; + ПКО.ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли = Ложь; + ПКО.НеВыгружатьОбъектыСвойствПоСсылкам = Истина; + ПКО.ТипИсточника = "ПланОбменаСсылка." + ИмяПланаОбмена; + ПКО.Источник = Тип(ПКО.ТипИсточника); + ПКО.ТипПриемника = ПКО.ТипИсточника; + ПКО.Приемник = ПКО.ТипИсточника; + + ПКО.Свойства = Свойства; + ПКО.СвойстваПоиска = СвойстваПоиска; + + ОбщийУзел = ПланыОбмена[ИмяПланаОбмена].СоздатьУзел(); + ОбменДаннымиСобытия.ЗаполнитьЗначенияСвойствОбъекта(ОбщийУзел, УзелДляОбмена.ПолучитьОбъект(), ОбщиеДанныеУзлов); + ОбщийУзел.Код = ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена); + + УзелXML = СоздатьУзел("ОбщиеДанныеУзлов"); + + ВыгрузитьПоПравилу(ОбщийУзел,,,,,,, ПКО,,, УзелXML); + + УзелXML.ЗаписатьКонецЭлемента(); + + ЗаписатьВФайл(УзелXML); + +КонецПроцедуры Функция ВыгрузитьДанныеСсылочногоОбъекта(Значение, ИсходящиеДанные, ИмяПКО, ПКОСвойств, ТипПриемника, УзелСвойства, Знач ВыгрузитьТолькоСсылку) @@ -13383,7 +13635,11 @@ КонецЕсли; - ЗаписатьИнформациюОбОбменеДаннымиЧерезПланыОбмена(ВыгрузитьИнформациюСопоставления); + НомерОтправленного = ОбщегоНазначения.ПолучитьЗначениеРеквизита(УзелДляОбмена, "НомерОтправленного") + ?(ВыгрузитьИнформациюСопоставления, 2, 1); + + ЗаписатьИнформациюОбОбменеДаннымиЧерезПланыОбмена(НомерОтправленного); + + ВыгрузитьОбщиеДанныеУзлов(НомерОтправленного); Отказ = Ложь; @@ -13434,6 +13690,23 @@ Исключение Отказ = Истина; ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + Если ЭтоОбменЧерезВнешнееСоединение() Тогда + + Если ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении Тогда + + Пока ВнешнееСоединение.ТранзакцияАктивна() Цикл + ВнешнееСоединение.ОтменитьТранзакцию(); + КонецЦикла; + + Иначе + + ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеОтменитьТранзакциюПриЗагрузкеДанных(); + + КонецЕсли; + + КонецЕсли; + КонецПопытки; // выполняем регистрацию объектов на текущем узле, которые были выгружены по ссылке @@ -13540,6 +13813,13 @@ // удаляем из массива элементы со значением "Неопределено" УдалитьНедопустимыеЗначенияИзМассиваВыгружаемыхМетаданных(МассивВыгружаемыхМетаданных); + // регистр сведений СоответствияОбъектовИнформационныхБаз выгружается отдельно, поэтому в эту выборку он не должен входить + Если МассивВыгружаемыхМетаданных.Найти(Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз) <> Неопределено Тогда + + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(МассивВыгружаемыхМетаданных, Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз); + + КонецЕсли; + // обновляем повторно используемые значения МРО ОбменДаннымиСервер.ОбновитьПовторноИспользуемыеЗначенияМРОПриНеобходимости(); diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl index 97d3851c6..4ecbfb509 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl @@ -1,5 +1,8 @@ //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции // Выполняет загрузку данных из файла сообщения обмена // @@ -79,23 +82,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СВОЙСТВА - -Функция ИмяФайлаСообщенияОбмена() - - Если Не ЗначениеЗаполнено(ПолеИмяФайлаСообщенияОбмена) Тогда - - ПолеИмяФайлаСообщенияОбмена = ""; - - КонецЕсли; - - Возврат ПолеИмяФайлаСообщенияОбмена; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +// Процедура ПрочитатьФайлСообщенияОбмена(Отказ, ЧтениеXML) @@ -157,8 +144,6 @@ КонецПроцедуры -// - Процедура ЗафиксироватьЗавершениеОбмена(Отказ, ОписаниеОшибки = "", ОписаниеОшибкиКонтекста = "") Отказ = Истина; @@ -180,7 +165,22 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ОШИБКИ КОНТЕКСТА ВЫПОЛНЕНИЯ +// Локальные служебные функции-свойства + +Функция ИмяФайлаСообщенияОбмена() + + Если Не ЗначениеЗаполнено(ПолеИмяФайлаСообщенияОбмена) Тогда + + ПолеИмяФайлаСообщенияОбмена = ""; + + КонецЕсли; + + Возврат ПолеИмяФайлаСообщенияОбмена; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Описания ошибок контекста выполнения Функция ОшибкаОткрытияФайлаСообщенияОбмена() diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/КонтрольЖурналаРегистрации/Form.form b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/КонтрольЖурналаРегистрации/Form.form index 1760f026c..11e8e7485 100644 --- a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/КонтрольЖурналаРегистрации/Form.form +++ b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/КонтрольЖурналаРегистрации/Form.form @@ -581,7 +581,7 @@ </use> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>НастроитьРасписаниеРегламентногоЗаданияВыполнить</name> + <name>НастроитьРасписаниеРегламентногоЗадания</name> </handler> </action> <currentRowUse>Auto</currentRowUse> @@ -603,7 +603,7 @@ </use> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>УказатьПолучателейОтчетаВыполнить</name> + <name>УказатьПолучателейОтчета</name> </handler> </action> <currentRowUse>Auto</currentRowUse> @@ -628,7 +628,7 @@ </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>ОбновитьОтчетНаФормеВыполнить</name> + <name>ОбновитьОтчетНаФорме</name> </handler> </action> <currentRowUse>Auto</currentRowUse> diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/КонтрольЖурналаРегистрации/Module.bsl b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/КонтрольЖурналаРегистрации/Module.bsl index d6760933c..d1bb32987 100644 --- a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/КонтрольЖурналаРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/КонтрольЖурналаРегистрации/Module.bsl @@ -1,83 +1,83 @@ -// Обработчик события формы "при создании на сервере". -// Выполняет инициализацию реквизитов периода. -// +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; + // Инициализация реквизитов периода. ОкончаниеПериодаВыборки = ТекущаяДатаСеанса(); - НачалоПериодаВыборки = ОкончаниеПериодаВыборки - 86400; - ОбновитьОтчетНаФорме(); - ИдентификаторРегламентногоЗадания = - РегламентныеЗадания.НайтиПредопределенное( - Метаданные.РегламентныеЗадания.КонтрольЖурналаРегистрации).УникальныйИдентификатор; + НачалоПериодаВыборки = ОкончаниеПериодаВыборки - 24*60*60; + СформироватьОтчетНаСервере(); + ИдентификаторРегламентногоЗадания = РегламентныеЗадания.НайтиПредопределенное( + Метаданные.РегламентныеЗадания.КонтрольЖурналаРегистрации).УникальныйИдентификатор; КонецПроцедуры -// Обработчик нажатия на кнопку "Обновить" -// +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте -Процедура ОбновитьОтчетНаФормеВыполнить() +Процедура ОбновитьОтчетНаФорме(Команда) ОчиститьСообщения(); ФормироватьОтчет = Истина; + Если Не ЗначениеЗаполнено(НачалоПериодаВыборки) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Не заполнена дата/время начала периода выборки.'"), , - "НачалоПериодаВыборки"); + НСтр("ru = 'Не заполнено начало периода выборки.'"), + , + "НачалоПериодаВыборки"); ФормироватьОтчет = Ложь; КонецЕсли; Если Не ЗначениеЗаполнено(ОкончаниеПериодаВыборки) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Не заполнена дата/время окончания периода выборки.'"), , - "ОкончаниеПериодаВыборки"); + НСтр("ru = 'Не заполнено окончание периода выборки.'"), + , + "ОкончаниеПериодаВыборки"); ФормироватьОтчет = Ложь; КонецЕсли; + Если ФормироватьОтчет Тогда - ОбновитьОтчетНаФорме(); + СформироватьОтчетНаСервере(); КонецЕсли; КонецПроцедуры -// Получает данные по ошибкам из журнала регистрации и формирует -// по нима отчет. Отчет выводится на форму. -// -&НаСервере -Процедура ОбновитьОтчетНаФорме() - - // по полученным данным формируем отчет и записываем его на диск - РезультатФормированияОтчета = - Обработки.КонтрольЖурналаРегистрации.СформироватьОтчет( - НачалоПериодаВыборки, - ОкончаниеПериодаВыборки); - - Отчет = РезультатФормированияОтчета.Отчет; - -КонецПроцедуры - -// Обработчик события нажатия на кнопку "Получатели отчета". -// &НаКлиенте -Процедура УказатьПолучателейОтчетаВыполнить() +Процедура УказатьПолучателейОтчета(Команда) ОткрытьФорму("Обработка.КонтрольЖурналаРегистрации.Форма.УстановкаПочтовыхАдресовДляОтправкиОтчета"); КонецПроцедуры -// Обработчик команды "Расписание регламентного задания". -// &НаКлиенте -Процедура НастроитьРасписаниеРегламентногоЗаданияВыполнить() +Процедура НастроитьРасписаниеРегламентногоЗадания(Команда) + + Диалог = Новый ДиалогРасписанияРегламентногоЗадания( + РегламентныеЗаданияКлиент.ПолучитьРасписаниеРегламентногоЗадания(ИдентификаторРегламентногоЗадания) ); - Диалог = Новый ДиалогРасписанияРегламентногоЗадания(РегламентныеЗаданияКлиент.ПолучитьРасписаниеРегламентногоЗадания(ИдентификаторРегламентногоЗадания)); Если Диалог.ОткрытьМодально() Тогда РегламентныеЗаданияКлиент.УстановитьРасписаниеРегламентногоЗадания(ИдентификаторРегламентногоЗадания, Диалог.Расписание); КонецЕсли; - + КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура СформироватьОтчетНаСервере() + + РезультатФормированияОтчета = Обработки.КонтрольЖурналаРегистрации.СформироватьОтчет( + НачалоПериодаВыборки, ОкончаниеПериодаВыборки); + + Отчет = РезультатФормированияОтчета.Отчет; + +КонецПроцедуры + + diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Form.form b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Form.form index a20400190..a7b52ecd4 100644 --- a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Form.form +++ b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Form.form @@ -62,10 +62,6 @@ <items xsi:type="form:Button"> <name>КнопкаСохранитьАдрес</name> <id>3</id> - <title> - <key>ru</key> - <value>ОК</value> - true true @@ -82,7 +78,7 @@ Left - Form.Command.СохранитьАдрес + Form.Command.КнопкаОК Auto true true @@ -152,10 +148,10 @@ - СохранитьАдрес + КнопкаОК <key>ru</key> - <value>Сохранить адрес</value> + <value>ОК</value> 1 @@ -167,7 +163,7 @@ - СохранитьАдресВыполнить + КнопкаОК Auto diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Module.bsl b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Module.bsl index 73505fe57..8284598cf 100644 --- a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Module.bsl +++ b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Module.bsl @@ -1,30 +1,32 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - EMailАдресаПолучателейОтчета = КонтрольЖурналаРегистрации.ПолучитьАдресатовПолученияОтчетаПоЖурналуРегистрации(); + EMailАдресаПолучателейОтчета = КонтрольЖурналаРегистрацииСлужебный.ПолучитьАдресатовПолученияОтчетаПоЖурналуРегистрации(); КонецПроцедуры -// Обработчик нажатия на кнопку "Ок" -// Пытается сохранить введенную строку почтовых адресов и закрывает форму -// если сохранение прошло удачно -// +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте -Процедура СохранитьАдресВыполнить() +Процедура КнопкаОК(Команда) Перем СообщениеОбОшибке; + // Пытается сохранить введенную строку почтовых адресов Результат = СохранитьEMailАдресаПолучателейОтчета(EMailАдресаПолучателейОтчета, СообщениеОбОшибке); + // Закрывает форму если сохранение прошло успешно Если Не Результат Тогда Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СообщениеОбОшибке, , "EMailАдресаПолучателейОтчета"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке, , "EMailАдресаПолучателейОтчета"); КонецЕсли; Иначе Закрыть(); @@ -32,9 +34,9 @@ КонецПроцедуры -// Служебная функция - выполняет попытку сохранения строки почтовых адресов. -// Строка не сохраняется если формат почтовых адресов задан не верно. -// +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервереБезКонтекста Функция СохранитьEMailАдресаПолучателейОтчета(EMailАдресаПолучателейОтчета, СообщениеОбОшибке = "") @@ -48,7 +50,7 @@ КонецЕсли; Попытка - КонтрольЖурналаРегистрации.УстановитьАдресатовПолученияОтчетаПоЖурналуРегистрации(EMailАдресаПолучателейОтчета); + КонтрольЖурналаРегистрацииСлужебный.УстановитьАдресатовПолученияОтчетаПоЖурналуРегистрации(EMailАдресаПолучателейОтчета); Исключение ОшибкаИнфо = ИнформацияОбОшибке(); Если ОшибкаИнфо.Причина = Неопределено Тогда @@ -63,3 +65,4 @@ Возврат Истина; КонецФункции + diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/ManagerModule.bsl b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/ManagerModule.bsl index 91bf432af..3f8e5f93c 100644 --- a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/ManagerModule.bsl @@ -1,17 +1,18 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Процедура для получения отчета по ошибкам и предупреждениям журнала регистрации -// Параметры -// НачалоПериодаВыборки - Дата/ДатаВремя - нижняя граница периода выборки -// ОкончаниеПериодаВыборки - Дата/ДатаВремя - верхняя граница периода выборки -// СохранятьВремяПоследнейВыборки - Булево - если истина, то при успешной выборке -// в хранилище системных настроек будет записано время окончания -// периода текущей выборки -// -// Прим -// Если период выборки не указан, то выборка производится за последние сутки, если -// ранее было сохранено время выборки, то это время устанавливается в качестве -// начала периода. +// Формирует отчет, записывает в файл и отправляет по почте. +// В отчет включены ошибки и предупреждения журнала регистраци, +// за указанный период (если не указан то за сутки, начиная с последнего вызова +// или текущего момента при первом вызове). // +// Параметры: +// НачалоПериодаВыборки - Дата начала в отборе событий журнала регистрации +// ОкончаниеПериодаВыборки - Дата окончания в отборе событий журнала регистрации +// +// СохранятьВремяПоследнейВыборки - Булево - начальное значение истина, указывает +// запоминать, когда делать следующую выборку, если не указано. +// При ошибке ничего не изменится. // Процедура СформироватьОтчетПоОшибкамИПослатьОтчет(Знач НачалоПериодаВыборки = Неопределено, Знач ОкончаниеПериодаВыборки = Неопределено, @@ -26,7 +27,7 @@ ПериодВыборки = ПолучитьПериодВыборкиДанных(); КонецЕсли; - // по полученным данным формируем отчет и записываем его на диск + // Формирование отчета и запись в файл РезультатФормированияОтчета = СформироватьОтчет(ПериодВыборки.НачалоПериода, ПериодВыборки.ОкончаниеПериода); @@ -36,7 +37,7 @@ Отчет.Записать(ИмяФайлаОтчета); - // формируем и отправляем письмо + // Формирование и отправка письма Вложения = Новый Соответствие; Вложения.Вставить("report.mxl", Новый ДвоичныеДанные(ИмяФайлаОтчета)); @@ -45,11 +46,10 @@ ПараметрыПисьма = Новый Структура; - ПолучателиОтчета = КонтрольЖурналаРегистрации.ПолучитьАдресатовПолученияОтчетаПоЖурналуРегистрации(); + ПолучателиОтчета = КонтрольЖурналаРегистрацииСлужебный.ПолучитьАдресатовПолученияОтчетаПоЖурналуРегистрации(); Если ПустаяСтрока(ПолучателиОтчета) Тогда ВызватьИсключение НСтр("ru = 'Не указан ни один получатель отчета по ошибкам и предупреждениям журнала регистрации.'"); - КонецЕсли; ПараметрыПисьма.Вставить("Кому", ПолучателиОтчета); @@ -57,33 +57,34 @@ ПредставлениеИБ = ОбщегоНазначения.ПолучитьПредставлениеИнформационнойБазы(); ПараметрыПисьма.Вставить("Тема", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Контроль журнала регистрации: %1.'"), ПредставлениеИБ )); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Контроль журнала регистрации: %1.'"), + ПредставлениеИБ)); - ТекстТелаПисьма = НСтр("ru = 'Информация по ошибкам и предупреждениям журнала регистрации. - |Информационная база: %1. - |Период выборки данных: c %2 по %3. - |Всего ошибок: %4. - |Всего предупреждений: %5. - |Во вложении находится подробный отчет по ошибкам и предупреждениям. - |За более детальной информацией необходимо обращаться к журналу регистрации.'"); + ТекстТелаПисьма = + НСтр("ru = 'Информация по ошибкам и предупреждениям журнала регистрации. + |Информационная база: %1. + |Период выборки данных: c %2 по %3. + |Всего ошибок: %4. + |Всего предупреждений: %5. + |Во вложении находится подробный отчет по ошибкам и предупреждениям. + |За более детальной информацией необходимо обращаться к журналу регистрации.'"); - ТекстТелаПисьма = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстТелаПисьма, - ПредставлениеИБ, - ПериодВыборки.НачалоПериода, - ПериодВыборки.ОкончаниеПериода, - РезультатФормированияОтчета.ИтогПоОшибкам, - РезультатФормированияОтчета.ИтогПоПредупреждениям ); + ТекстТелаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстТелаПисьма, + ПредставлениеИБ, + ПериодВыборки.НачалоПериода, + ПериодВыборки.ОкончаниеПериода, + РезультатФормированияОтчета.ИтогПоОшибкам, + РезультатФормированияОтчета.ИтогПоПредупреждениям); ПараметрыПисьма.Вставить("Тело", ТекстТелаПисьма); ПараметрыПисьма.Вставить("Вложения", Вложения); - РаботаСПочтовымиСообщениями - .ОтправитьСообщение(РаботаСПочтовымиСообщениями.ПолучитьСистемнуюУчетнуюЗапись(), - ПараметрыПисьма); + РаботаСПочтовымиСообщениями.ОтправитьСообщение( + РаботаСПочтовымиСообщениями.ПолучитьСистемнуюУчетнуюЗапись(), + ПараметрыПисьма); Если СохранятьВремяПоследнейВыборки Тогда СохранитьВремяПоследнейВыборкиИнформации(ПериодВыборки.ОкончаниеПериода); @@ -91,19 +92,79 @@ КонецПроцедуры +// Формирует отчет по ошибкам и предупреждениями журнала регистрации за заданный период. +Функция СформироватьОтчет(Знач НачалоПериода, Знач ОкончаниеПериода) Экспорт + + Результат = Новый Структура; + Отчет = Новый ТабличныйДокумент; + + Макет = Обработки.КонтрольЖурналаРегистрации.ПолучитьМакет("МакетОтчетаПоОшибкамВЖурналеРегистрации"); + + ДанныеЖурналаРегистрации = ПолучитьИнформациюПоОшибкамЖурналаРегистрации(НачалоПериода, ОкончаниеПериода); + + // Предварительная подготовка данных + + СверткаПоКомментариям = ДанныеЖурналаРегистрации.Скопировать(); + СверткаПоКомментариям.Колонки.Добавить("ИтогПоКомментарию"); + СверткаПоКомментариям.ЗаполнитьЗначения(1, "ИтогПоКомментарию"); + СверткаПоКомментариям.Свернуть("Уровень, Комментарий", "ИтогПоКомментарию"); + + МассивСтрок_УровеньОшибка = СверткаПоКомментариям.НайтиСтроки( + Новый Структура("Уровень", УровеньЖурналаРегистрации.Ошибка)); + + МассивСтрок_УровеньПредупреждение = СверткаПоКомментариям.НайтиСтроки( + Новый Структура("Уровень", УровеньЖурналаРегистрации.Предупреждение)); + + Свертка_Ошибки = СверткаПоКомментариям.Скопировать(МассивСтрок_УровеньОшибка); + Свертка_Ошибки.Сортировать("ИтогПоКомментарию Убыв"); + Свертка_Предупреждения = СверткаПоКомментариям.Скопировать(МассивСтрок_УровеньПредупреждение); + Свертка_Предупреждения.Сортировать("ИтогПоКомментарию Убыв"); + + // Формирование отчета + + Область = Макет.ПолучитьОбласть("ШапкаОтчета"); + Область.Параметры.ПериодВыборкиНачало = НачалоПериода; + Область.Параметры.ПериодВыборкиОкончание = ОкончаниеПериода; + Область.Параметры.ПредставлениеИнформационнойБазы = ОбщегоНазначения.ПолучитьПредставлениеИнформационнойБазы(); + Отчет.Вывести(Область); + + РезультатКомпоновки = РазделОтчетаПоСвернутымДанным(Макет, ДанныеЖурналаРегистрации, Свертка_Ошибки); + + Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); + Область = Макет.ПолучитьОбласть("ЗаголовокБлокаОшибки"); + Область.Параметры.ЧислоОшибок = Строка(РезультатКомпоновки.Итог); + Отчет.Вывести(Область); + + Если РезультатКомпоновки.Итог > 0 Тогда + Отчет.Вывести(РезультатКомпоновки.ТабличнаяЧасть); + КонецЕсли; + + Результат.Вставить("ИтогПоОшибкам", РезультатКомпоновки.Итог); + + РезультатКомпоновки = РазделОтчетаПоСвернутымДанным(Макет, ДанныеЖурналаРегистрации, Свертка_Предупреждения); + + Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); + Область = Макет.ПолучитьОбласть("ЗаголовокБлокаПредупреждения"); + Область.Параметры.ЧислоПредупреждений = РезультатКомпоновки.Итог; + Отчет.Вывести(Область); + + Если РезультатКомпоновки.Итог > 0 Тогда + Отчет.Вывести(РезультатКомпоновки.ТабличнаяЧасть); + КонецЕсли; + + Результат.Вставить("ИтогПоПредупреждениям", РезультатКомпоновки.Итог); + + Отчет.ОтображатьСетку = Ложь; + + Результат.Вставить("Отчет", Отчет); + + Возврат Результат; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// -// СЕРВИСНЫЕ ФУНКЦИИ +// Вспомогательные процедуры и функции -// Функция получает информацию по ошибкам в журнале регистрации по переданному периоду -// Параметры -// НачалоПериода - дата - начала периода, по которому будет собираться информация -// ОкончаниеПериода - дата - окончание периода, по которому будет собираться информация -// -// Возвращаемое значение -// таблица значений - записи из журнала регистрации в соответствии с фильтром: -// УровеньЖурналаРегистрации - УровеньЖурналаРегистрации.Ошибка -// Начало и Окончание периода - из параметров -// Функция ПолучитьИнформациюПоОшибкамЖурналаРегистрации(Знач НачалоПериода, Знач ОкончаниеПериода) ДанныеЖурналаРегистрации = Новый ТаблицаЗначений; @@ -122,11 +183,6 @@ КонецФункции -// Служебная процедура, определяющая период времени, за который требуется получить -// данные из журнала регистрации. Кроме того по переданному ключу записывает -// окончание периода в хранилище системнеых настроек - для использования -// при следующем вызове -// Функция ПолучитьПериодВыборкиДанных() Результат = Новый Структура; @@ -134,7 +190,7 @@ ВремяПоследнейВыборкиИнформации = ПолучитьВремяПоследнейВыборкиИнформации(); ОкончаниеПериода = ТекущаяДатаСеанса(); Если ВремяПоследнейВыборкиИнформации = Неопределено Тогда // если регламентное задание еще не выполнялось - выбираем данные за сутки - НачалоПериода = ОкончаниеПериода - 86400; + НачалоПериода = ОкончаниеПериода - 86400; // - 24 часа Иначе НачалоПериода = ВремяПоследнейВыборкиИнформации; КонецЕсли; @@ -146,8 +202,6 @@ КонецФункции -// Получает время предыдущего процесса сбора иинформации из журнала регистрации -// Функция ПолучитьВремяПоследнейВыборкиИнформации() ВремяПоследнейВыборкиИнформации = Неопределено; @@ -162,8 +216,6 @@ КонецФункции -// Сохраняет время предыдущего процесса сбора иинформации из журнала регистрации -// Процедура СохранитьВремяПоследнейВыборкиИнформации(ВремяПоследнейВыборкиИнформации) ПараметрыОтчета = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПараметрыОтчетаПоЖурналуРегистрации"); @@ -182,102 +234,8 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Блок функций для формирования отчета - -// Функция, формирующая отчет по зарегистрированным в журнале регистрации ошибкам -// Параметры -// ДанныеЖурналаРегистрации - таблица значений - выгруженная таблица из журнала регистраций -// должны присутствовать следующие колонки: Дата, ИмяПользователя, ПредставлениеПриложения, -// ПредставлениеСобытия, Комментарий, Уровень -// -Функция СформироватьОтчет( Знач НачалоПериода, - Знач ОкончаниеПериода) Экспорт - - Результат = Новый Структура; - - Отчет = Новый ТабличныйДокумент; - - Макет = Обработки.КонтрольЖурналаРегистрации.ПолучитьМакет("МакетОтчетаПоОшибкамВЖурналеРегистрации"); - - ДанныеЖурналаРегистрации = ПолучитьИнформациюПоОшибкамЖурналаРегистрации(НачалоПериода, ОкончаниеПериода); - - /////////////////////////////////////////////////////////////////////////////// - // Блок предварительной подготовки данных - // - - СверткаПоКомментариям = ДанныеЖурналаРегистрации.Скопировать(); - СверткаПоКомментариям.Колонки.Добавить("ИтогПоКомментарию"); - СверткаПоКомментариям.ЗаполнитьЗначения(1, "ИтогПоКомментарию"); - СверткаПоКомментариям.Свернуть("Уровень, Комментарий, Событие, ПредставлениеСобытия", "ИтогПоКомментарию"); - - МассивСтрок_УровеньОшибка = СверткаПоКомментариям.НайтиСтроки( - Новый Структура("Уровень", УровеньЖурналаРегистрации.Ошибка)); - - МассивСтрок_УровеньПредупреждение = СверткаПоКомментариям.НайтиСтроки( - Новый Структура("Уровень", УровеньЖурналаРегистрации.Предупреждение)); - - Свертка_Ошибки = СверткаПоКомментариям.Скопировать(МассивСтрок_УровеньОшибка); - Свертка_Ошибки.Сортировать("ИтогПоКомментарию Убыв"); - Свертка_Предупреждения = СверткаПоКомментариям.Скопировать(МассивСтрок_УровеньПредупреждение); - Свертка_Предупреждения.Сортировать("ИтогПоКомментарию Убыв"); - - /////////////////////////////////////////////////////////////////////////////// - // Блок формирования самого отчета - // - - Область = Макет.ПолучитьОбласть("ШапкаОтчета"); - Область.Параметры.ПериодВыборкиНачало = НачалоПериода; - Область.Параметры.ПериодВыборкиОкончание = ОкончаниеПериода; - Область.Параметры.ПредставлениеИнформационнойБазы = ОбщегоНазначения.ПолучитьПредставлениеИнформационнойБазы(); - Отчет.Вывести(Область); - - РезультатКомпоновкиТЧ = СформироватьТабличнуюЧасть(Макет, ДанныеЖурналаРегистрации, Свертка_Ошибки); - - Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); - Область = Макет.ПолучитьОбласть("ЗаголовокБлокаОшибки"); - Область.Параметры.ЧислоОшибок = Строка(РезультатКомпоновкиТЧ.Итог); - Отчет.Вывести(Область); - - Если РезультатКомпоновкиТЧ.Итог > 0 Тогда - Отчет.Вывести(РезультатКомпоновкиТЧ.ТабличнаяЧасть); - КонецЕсли; - - Результат.Вставить("ИтогПоОшибкам", РезультатКомпоновкиТЧ.Итог); - - РезультатКомпоновкиТЧ = СформироватьТабличнуюЧасть(Макет, ДанныеЖурналаРегистрации, Свертка_Предупреждения); - - Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); - Область = Макет.ПолучитьОбласть("ЗаголовокБлокаПредупреждения"); - Область.Параметры.ЧислоПредупреждений = РезультатКомпоновкиТЧ.Итог; - Отчет.Вывести(Область); - - Если РезультатКомпоновкиТЧ.Итог > 0 Тогда - Отчет.Вывести(РезультатКомпоновкиТЧ.ТабличнаяЧасть); - КонецЕсли; - - Результат.Вставить("ИтогПоПредупреждениям", РезультатКомпоновкиТЧ.Итог); - - Отчет.ОтображатьСетку = Ложь; - - Результат.Вставить("Отчет", Отчет); - - Возврат Результат; - -КонецФункции - -// Добавляет в отчет табличную часть по ошибкам. Ошибки выводятся сгруппированными -// по комментарию. -// Параметры: -// Отчет - ТабличныйДокумент - непосредственно отчет, в который будет выводится -// информация -// Макет - ТабличныйДокумент - источник форматированных областей, которые будут -// использоваться при формировании отчета -// ДанныеЖурналаРегистрации - ТаблицаЗначений - данные по ошибкам и предупреждениям -// из журнала регистрации "как есть" -// СвернутыеДанные - ТаблицаЗначений - свернутая по комметариям информация по их количеству -// -Функция СформироватьТабличнуюЧасть(Макет, ДанныеЖурналаРегистрации, СвернутыеДанные) +// Возвращает раздел отчета по данным журнала регистрации, сгруппированным по комментарию. +Функция РазделОтчетаПоСвернутымДанным(Макет, ДанныеЖурналаРегистрации, СвернутыеДанные) Отчет = Новый ТабличныйДокумент; @@ -288,10 +246,11 @@ Для Каждого Запись Из СвернутыеДанные Цикл Итог = Итог + Запись.ИтогПоКомментарию; - МассивСтрок = ДанныеЖурналаРегистрации.НайтиСтроки( - Новый Структура("Уровень, Комментарий", - УровеньЖурналаРегистрации.Ошибка, - Запись.Комментарий)); + МассивСтрок = ДанныеЖурналаРегистрации.НайтиСтроки(Новый Структура( + "Уровень, + |Комментарий", + УровеньЖурналаРегистрации.Ошибка, + Запись.Комментарий)); Область = Макет.ПолучитьОбласть("ТелоТабличнойЧастиШапка"); Область.Параметры.Заполнить(Запись); diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl index 9f139738c..99ad0c385 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -17,6 +20,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ОсновныеДействияФормыПродолжить(Команда) diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl index 47373f605..ac556edeb 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl @@ -1,4 +1,3 @@ - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -229,14 +228,17 @@ &НаКлиенте Процедура Отмена(Команда) - ДатаОтложенногоРезервногоКопирования =Дата('00010101'); + + ДатаОтложенногоРезервногоКопирования = Дата('00010101'); Закрыть(); + КонецПроцедуры // Вызывает стандартную форму настройки расписания регламентного задания, // заполняя его текущими настройками расписания резервного копирования. &НаКлиенте Процедура ИзменитьРасписание(Команда) + Расписание = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПараметрыРезервногоКопированияИБ.РасписаниеКопирования; Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(Расписание); ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Расписание); @@ -253,10 +255,12 @@ Объект.СтрокаРасписания = Строка(Расписание); РасписаниеСтруктура = ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Расписание); ПоместитьРасписаниеВНастройку(РасписаниеСтруктура, ПараметрыРезервногоКопированияИБ); + КонецПроцедуры &НаКлиенте Процедура Назад(Команда) + ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ТекущаяСтраница; Если ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаНастройкиПараметровРезервногоКопирования Тогда ПриОткрытииНовойСтраницы(Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаНачальногоОповещения); @@ -265,17 +269,20 @@ ИначеЕсли ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.ДополнительныеНастройки Тогда ПриОткрытииНовойСтраницы(Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаНастройкиПараметровРезервногоКопирования); КонецЕсли; + КонецПроцедуры // Процедура обновления компоненты comcntr. &НаКлиенте Процедура ОбновитьВерсиюКомпоненты(Команда) + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Функция ПроверитьЗаполнениеРеквизитов(ИнформацияОбОшибке) @@ -315,10 +322,11 @@ // Состав элементов функциональной страницы зависит от архитектуры информационной базы. &НаСервере Функция ОпределитьСтраницуПоПравамИАрхитектуре() + СтраницыПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; СтартоваяСтраница = Неопределено; - Если Пользователи.ЭтоПолноправныйПользовательИБ() Тогда + Если Пользователи.ЭтоПолноправныйПользователь() Тогда СтрокаСоединенияСБД = СтрокаСоединенияИнформационнойБазы(); ЭтоФайловаяБаза = ОбщегоНазначения.ИнформационнаяБазаФайловая(СтрокаСоединенияСБД); @@ -335,21 +343,25 @@ СтартоваяСтраница = СтраницыПомощника.СтраницаДляПользователяБезПрав; КонецЕсли; Возврат СтартоваяСтраница; + КонецФункции // Устанавливает текущую страницу при отложенном резервном копировании в зависимости от начального выбора пользователя. &НаКлиенте Процедура УстановитьСтраницуПараметровОтложенногоОповещения(ПозицияПереключателя) + Если ПозицияПереключателя = 3 Тогда Элементы.СтраницыПараметровОтложенногоОповещения.ТекущаяСтраница = Элементы.СтраницыПараметровОтложенногоОповещения.ПодчиненныеЭлементы.СтраницаПараметровОтложенногоОповещения; Иначе Элементы.СтраницыПараметровОтложенногоОповещения.ТекущаяСтраница = Элементы.СтраницыПараметровОтложенногоОповещения.ПодчиненныеЭлементы.ПустаяСтраница; КонецЕсли; + КонецПроцедуры // Устанавливает значение поясняющей надписи в зависимости от текущего выбора пользователя. &НаКлиенте Процедура УстановитьТекстПоясняющейНадписи(Знач ЗначениеПереключателя) + ПоясняющаяНадпись = Элементы.ИнформационнаяНадпись; ТекстНадписи = ""; @@ -361,21 +373,25 @@ ТекстНадписи = НСтр("ru = 'Нажмите ""Готово"", чтобы отложить оповещение на выбранный срок.'"); КонецЕсли; ПоясняющаяНадпись.Заголовок = ТекстНадписи; + КонецПроцедуры // Устанавливает заголовок кнопки "Далее" в зависимости от текущего выбора пользователя. &НаКлиенте Процедура УстановитьЗаголовокКнопкиДалее(ПараметрЗаголовка) + Если ПараметрЗаголовка Тогда Элементы.Далее.Заголовок = НСтр("ru = 'Далее >>'"); Иначе Элементы.Далее.Заголовок = НСтр("ru = 'Готово'"); КонецЕсли; + КонецПроцедуры // Запрашивает у пользователя путь к файлу или каталогу. &НаКлиенте Функция ПолучитьПуть(РежимДиалога) + Режим = РежимДиалога; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); @@ -392,11 +408,13 @@ Возврат ДиалогОткрытияФайла.ПолноеИмяФайла; КонецЕсли; КонецЕсли; + КонецФункции // Устанавливает новые параметры резервного копирования при изменении времени оповещения. &НаСервереБезКонтекста Процедура ПриИзмененииВремениОповещения(ПараметрКоличества, ПараметрТипа, ПараметрыРезервногоКопированияИБНаКлиенте) + ПараметрыОповещенияОРезервномКопировании = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); ТекущаяДата = ТекущаяДатаСеанса(); Если ПараметрКоличества = -1 Тогда // если пользователь отказался от оповещений @@ -415,68 +433,78 @@ КонецЕсли; ПараметрыРезервногоКопированияИБНаКлиенте = ПараметрыОповещенияОРезервномКопировании; РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(ПараметрыОповещенияОРезервномКопировании); + КонецПроцедуры // Останавливает работу сервиса резервного копирования. &НаСервереБезКонтекста Процедура ОстановитьСервисОповещенияОРезервномКопировании(ПараметрыРезервногоКопированияИБНаКлиенте) + ПараметрыОповещенияОРезервномКопировании= РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); ПараметрыОповещенияОРезервномКопировании.ДатаПоследнегоОповещения = Дата('00010101'); ПараметрыОповещенияОРезервномКопировании.ПериодОповещения = 0; ПараметрыРезервногоКопированияИБНаКлиенте = ПараметрыОповещенияОРезервномКопировании; РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(ПараметрыОповещенияОРезервномКопировании); + КонецПроцедуры // Записывает параметры настройки удаления резервных копий из каталога. &НаСервереБезКонтекста Процедура УстановитьНастройкиУдаленияУстаревшихКопий(ТипУдаления, ПараметрЗначения, ПараметрыРезервногоКопированияИБНаКлиенте) + СтруктураНастроек = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); СтруктураНастроек.ПроизводитьУдаление = Истина; СтруктураНастроек.УдалятьПоПериоду = ТипУдаления; СтруктураНастроек.ЗначениеПараметра = ПараметрЗначения; ПараметрыРезервногоКопированияИБНаКлиенте = СтруктураНастроек; РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(СтруктураНастроек); + КонецПроцедуры // Записывает настройку - путь к каталогу с резервными копиями. &НаСервереБезКонтекста Процедура УстановитьПутьАрхиваСКопиями(Путь, ПараметрыРезервногоКопированияИБНаКлиенте) + НастройкиПути = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); НастройкиПути.КаталогХраненияРезервныхКопий = Путь; ПараметрыРезервногоКопированияИБНаКлиенте = НастройкиПути; РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(НастройкиПути); + КонецПроцедуры // Записывает настройку - расписание проведения резервного копирования. &НаСервереБезКонтекста Процедура ПоместитьРасписаниеВНастройку(НовоеРасписаниеКопирования, ПараметрыРезервногоКопированияИБНаКлиенте) + Параметры = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); Параметры.РасписаниеКопирования = НовоеРасписаниеКопирования; ПараметрыРезервногоКопированияИБНаКлиенте = Параметры; РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(Параметры); ОбновитьПовторноИспользуемыеЗначения(); // сбрысываем кеш для применения настроек + КонецПроцедуры // Показывает оповещение пользователю с заданным текстом. &НаКлиенте Процедура ОповещениеПользователю(ТекстОповещения) + ПоказатьОповещениеПользователя("Резервное копирование", , ТекстОповещения) + КонецПроцедуры // Показывает оповещение пользователю при завершении работы с формой настройки резервного копирования. &НаКлиенте Процедура ПриЗавершенииРаботыПомощника(РезультатРаботыПомощника) + ПоказатьОповещениеПользователя(НСтр("ru = 'Работа помощника завершена.'"), "e1cib/app/Обработка.НастройкаРезервногоКопированияИБ", РезультатРаботыПомощника); ЭтаФорма.Закрыть(); + КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ - // Обработчик значения переключателя "Код типа резервного копирования" при нажатии на кнопку "Далее". &НаКлиенте Процедура ОбработатьНачальнуюНастройкуПомощника() + РезервноеКопированиеИБСервер.ОстановитьАвтоматическоеРезервноеКопирование(, ПараметрыРезервногоКопированияИБ); КодПереключателя = Объект.КодТипаРезервногоКопирования; РезервноеКопированиеИБСервер.УстановитьКодВыбора(КодПереключателя, ПараметрыРезервногоКопированияИБ); @@ -492,6 +520,7 @@ ОповещениеПользователю(НСтр("ru ='Был изменен период оповещений о резервном копировании.'")); КонецЕсли; ПриОткрытииНовойСтраницы(НоваяСтраницаПомощника); + КонецПроцедуры // Обработчик изменения страницы помощника. Открывает новую страницу и выполняет необходимые действия. @@ -499,6 +528,7 @@ // НоваяСтраницаПомощника - страница , которую необходимо открыть в данный момент. &НаКлиенте Процедура ПриОткрытииНовойСтраницы(НоваяСтраница, ТекстПути = "") + ПодчиненныеСтраницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; Если НоваяСтраница = ПодчиненныеСтраницы.СтраницаНачальногоОповещения Тогда @@ -525,7 +555,8 @@ Закрыть(); Иначе Элементы.СтраницыПомощника.ТекущаяСтраница = НоваяСтраница; - КонецЕсли; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -554,6 +585,7 @@ КонецПопытки; Возврат Результат; + КонецФункции // Обработчик перехода на автоматическое резервное копирование. @@ -574,6 +606,7 @@ ПриЗавершенииРаботыПомощника(НСтр("ru = 'Настройка расписания резервного копирования прошла успешно.'")); ОстановитьСервисОповещенияОРезервномКопировании(ПараметрыРезервногоКопированияИБ); КонецЕсли; + КонецПроцедуры &НаСервере @@ -603,11 +636,12 @@ КонецПроцедуры -//////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// // Процедуры и функции проведения резервного копирования &НаСервере Функция ПолучитьСтрокуСоединенияИИнформациюОСоединениях(СообщенияДляЖурналаРегистрации) + // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); @@ -616,6 +650,7 @@ СоединенияИБКлиентСервер.ПолучитьСтрокуСоединенияИнформационнойБазы(0)); Возврат Результат; + КонецФункции &НаКлиенте @@ -643,10 +678,12 @@ Результат.СтрокаПодключения = "Usr=""" + Пользователь + """;Pwd=""" + ПарольАдминистратораИБ + """;"; Результат.ПараметрыАутентификации = "/N""" + Пользователь + """ /P""" + ПарольАдминистратораИБ + """ /WA-"; Возврат Результат; + КонецФункции &НаСервереБезКонтекста Функция ПолучитьИнформациюОНаличииСоединений(СообщенияДляЖурналаРегистрации = Неопределено) + // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); УстановитьПривилегированныйРежим(Истина); @@ -655,16 +692,21 @@ НаличиеАктивныхСоединений(), НаличиеCOMСоединений(), НаличиеСоединенияКонфигуратором(), ЕстьАктивныеПользователи()); Возврат Результат; + КонецФункции &НаСервереБезКонтекста Функция ЭтоСеансКонфигуратором(СеансИнформационнойБазы) + Возврат ВРег(СеансИнформационнойБазы.ИмяПриложения) = ВРег("Designer"); + КонецФункции &НаСервереБезКонтекста Функция ЭтоCOMСоединение(СеансИнформационнойБазы) + Возврат ВРег(СеансИнформационнойБазы.ИмяПриложения) = ВРег("COMConnection"); + КонецФункции // Проверка наличия соединения конфигуратором. @@ -674,6 +716,7 @@ // Ложь, если соединения нет. &НаСервереБезКонтекста Функция НаличиеСоединенияКонфигуратором() + МассивСеансов = ПолучитьСеансыИнформационнойБазы(); Для Каждого Сеанс Из МассивСеансов Цикл Если ЭтоСеансКонфигуратором(Сеанс) Тогда @@ -681,10 +724,12 @@ КонецЕсли; КонецЦикла; Возврат Ложь; + КонецФункции &НаСервереБезКонтекста Функция НаличиеCOMСоединений() + МассивСеансов = ПолучитьСеансыИнформационнойБазы(); Для Каждого Сеанс Из МассивСеансов Цикл Если ЭтоCOMСоединение(Сеанс) Тогда @@ -692,6 +737,7 @@ КонецЕсли; КонецЦикла; Возврат Ложь; + КонецФункции // Проверка наличия активных соединений с информационной базой. @@ -701,17 +747,21 @@ // Ложь, если соединений нет. &НаСервереБезКонтекста Функция НаличиеАктивныхСоединений(СообщенияДляЖурналаРегистрации = Неопределено) + // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); Возврат ПолучитьСеансыИнформационнойБазы().Количество() > 1; + КонецФункции &НаСервереБезКонтекста Функция ЕстьАктивныеПользователи(СообщенияДляЖурналаРегистрации = Неопределено) + // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); УстановитьПривилегированныйРежим(Истина); Возврат ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0; + Конецфункции diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Module.bsl b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Module.bsl index 9efb565eb..455cdfdef 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Module.bsl +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -10,7 +10,31 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ПроверятьНаличиеОбновленияПриЗапускеПриИзменении(Элемент) + + УстановитьВидимостьРасписания(ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура НадписьОткрытьРасписаниеНажатие(Элемент) + + Если Объект.РасписаниеПроверкиНаличияОбновления = Неопределено Тогда + Объект.РасписаниеПроверкиНаличияОбновления = Новый РасписаниеРегламентногоЗадания; + КонецЕсли; + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(Объект.РасписаниеПроверкиНаличияОбновления); + Если Диалог.ОткрытьМодально() Тогда + Объект.РасписаниеПроверкиНаличияОбновления = Диалог.Расписание; + КонецЕсли; + Элементы.НадписьОткрытьРасписание.Заголовок = ТекстНадписиОткрытьРасписание(ЭтаФорма); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура КомандаОК(Команда) @@ -38,29 +62,8 @@ КонецПроцедуры -&НаКлиенте -Процедура ПроверятьНаличиеОбновленияПриЗапускеПриИзменении(Элемент) - - УстановитьВидимостьРасписания(ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура НадписьОткрытьРасписаниеНажатие(Элемент) - - Если Объект.РасписаниеПроверкиНаличияОбновления = Неопределено Тогда - Объект.РасписаниеПроверкиНаличияОбновления = Новый РасписаниеРегламентногоЗадания; - КонецЕсли; - Диалог = Новый ДиалогРасписанияРегламентногоЗадания(Объект.РасписаниеПроверкиНаличияОбновления); - Если Диалог.ОткрытьМодально() Тогда - Объект.РасписаниеПроверкиНаличияОбновления = Диалог.Расписание; - КонецЕсли; - Элементы.НадписьОткрытьРасписание.Заголовок = ТекстНадписиОткрытьРасписание(ЭтаФорма); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиентеНаСервереБезКонтекста Процедура УстановитьВидимостьРасписания(Форма) diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Module.bsl index f6b846126..01219dcdc 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -8,7 +8,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ПолеКаталогРезервнойКопииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -29,6 +29,14 @@ ОбновитьСостояниеЭлементовУправления(ЭтаФорма); КонецПроцедуры +&НаКлиенте +Процедура ВосстанавливатьИнформационнуюБазуПриИзменении(Элемент) + ОбновитьНадписьРучногоОтката(ЭтаФорма); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура КомандаОК(Команда) Отказ = Ложь; @@ -46,13 +54,8 @@ КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ВосстанавливатьИнформационнуюБазуПриИзменении(Элемент) - ОбновитьНадписьРучногоОтката(ЭтаФорма); -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиентеНаСервереБезКонтекста Процедура ОбновитьСостояниеЭлементовУправления(Форма) diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Обозреватель/Form.form b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Обозреватель/Form.form index d2b50f611..c5758a59a 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Обозреватель/Form.form +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Обозреватель/Form.form @@ -275,9 +275,7 @@ 1 String - - 500 - + true diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Обозреватель/Module.bsl b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Обозреватель/Module.bsl index 8de681017..5c4139a44 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Обозреватель/Module.bsl +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Обозреватель/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,7 +12,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ПерейтиКСтранице(Команда) @@ -30,7 +30,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура ОткрытьСтраницуПоАдресу() diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/ПредупреждениеWMI/Module.bsl b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/ПредупреждениеWMI/Module.bsl index 105557f4b..4297ab3f5 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/ПредупреждениеWMI/Module.bsl +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/ПредупреждениеWMI/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура НадписьWebСтраницаНажатие(Элемент) diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Form.form b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Form.form index 0b202cce0..3857ff911 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Form.form @@ -11443,7 +11443,7 @@ SaveValues Yes 100 - DontBlock + LockOwner true true Vertical diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Module.bsl index b7412c78f..72e1a3a1b 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -42,7 +42,7 @@ // Если есть обновление в сети Интернет... Если ДоступноеОбновление.ИсточникОбновления = 0 И ДоступноеОбновление.ФлагАвтоПереходаНаСтраницуСОбновлением Тогда ВремяПолученияОбновления = ДоступноеОбновление.ВремяПолученияОбновления; - Если ВремяПолученияОбновления <> Неопределено И ТекущаяДата() - ВремяПолученияОбновления < 30 Тогда + Если ВремяПолученияОбновления <> Неопределено И ОбщегоНазначенияКлиент.ДатаСеанса() - ВремяПолученияОбновления < 30 Тогда ИмяСтраницы = ПолучитьФайлыОбновленияЧерезИнтернет(Истина); КонецЕсли; // Если конфигурация изменена, предложим применить ее к базе данных @@ -120,7 +120,241 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +//////////////////////////////////////////////////////////////////////////////// +// Страница ДоброПожаловать + +&НаКлиенте +Процедура ДекорацияЧерезИнтернетНажатие(Элемент) + Объект.ИсточникОбновления = 0; + ПередОткрытиемСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура ДекорацияЧерезИТСНажатие(Элемент) + Объект.ИсточникОбновления = 1; + ПередОткрытиемСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура ДекорацияИзФайлаНажатие(Элемент) + Объект.ИсточникОбновления = 2; + ПередОткрытиемСтраницы(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница ПодключениеКИнтернет + +&НаКлиенте +Процедура НадписьНастройкаПараметровПроксиНажатие(Элемент) + ОткрытьФормуМодально("ОбщаяФорма.ПараметрыПроксиСервера"); +КонецПроцедуры + +&НаКлиенте +Процедура НадписьПерейтиВЖурналРегистрацииНажатие(Элемент) + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", Новый Структура("Пользователь", ИмяПользователя())); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница ПодключениеКСайту + +&НаКлиенте +Процедура НадписьИнформацияОПолученииДоступаНажатие(Элемент) + + ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу( + ОбновлениеКонфигурацииКлиент.ПолучитьПараметрыОбновления().АдресСтраницыИнформацииОПолученииДоступаКПользовательскомуСайту); + +КонецПроцедуры + +&НаКлиенте +Процедура НадписьКакОформитьПодпискуИТСНажатие(Элемент) + ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу("http://its.1c.ru/about.php?section=how"); +КонецПроцедуры + +&НаКлиенте +Процедура НадписьПодробнееОбИТСНажатие(Элемент) + ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу("http://its.1c.ru/about.php"); +КонецПроцедуры + +&НаКлиенте +Процедура НадписьОткрытьЖурналРегистрацииНажатие(Элемент) + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", Новый Структура("Пользователь", ИмяПользователя())); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница МестоположениеДискаИТС + +&НаКлиенте +Процедура ИсточникДискаИТСПриИзменении(Элемент) + ПередОткрытиемСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура ДискИТСНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + Диалог.Каталог = ДискИТС; + Диалог.ПроверятьСуществованиеФайла = Истина; + Диалог.Заголовок = "Выбор каталога для диска ИТС"; + + Если Диалог.Выбрать() Тогда + ДискИТС = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Диалог.Каталог); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница ФайлОбновления + +&НаКлиенте +Процедура ПереключательНуженФайлОбновленияПриИзменении(Элемент) + ПередОткрытиемСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура ПолеФайлОбновленияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + Диалог.Каталог = ОбновлениеКонфигурацииКлиент.ПолучитьКаталогФайла(Объект.ИмяФайлаОбновления); + Диалог.ПроверятьСуществованиеФайла = Истина; + Диалог.Фильтр = НСтр("ru = 'Все файлы поставки (*.cf*;*.cfu)|*.cf*;*.cfu|Файлы поставки конфигурации (*.cf)|*.cf|Файлы поставки обновления конфигурации(*.cfu)|*.cfu'"); + Диалог.Заголовок = НСтр("ru = 'Выбор поставки обновления конфигурации'"); + + Если Диалог.Выбрать() Тогда + Объект.ИмяФайлаОбновления = Диалог.ПолноеИмяФайла; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница ДоступноеОбновление + +&НаКлиенте +Процедура НадписьИнформацияОбОбновленииНажатие(Элемент) + Если НЕ ПустаяСтрока(ИмяФайлаИнформацияОбОбновлении) Тогда + ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу(ИмяФайлаИнформацияОбОбновлении); + Иначе + Предупреждение(НСтр("ru = 'Информация об обновлении отсутствует.'")); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура НадписьПорядокОбновленияНажатие(Элемент) + Если НЕ ПустаяСтрока(ИмяФайлаПорядокОбновления) Тогда + ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу(ИмяФайлаПорядокОбновления); + Иначе + Предупреждение(НСтр("ru = 'Описание порядка обновления отсутствует.'")); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ГиперссылкаПроверятьНаличиеОбновленияПриЗапускеНажатие(Элемент) + ПараметрыФормы = Новый Структура("ПроверятьНаличиеОбновленияПриЗапуске, РасписаниеПроверкиНаличияОбновления", + Объект.ПроверятьНаличиеОбновленияПриЗапуске, Объект.РасписаниеПроверкиНаличияОбновления); + Результат = ОткрытьФормуМодально("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРасписания", ПараметрыФормы, ЭтаФорма); + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(Объект, Результат); + КонецЕсли; + + ПередОткрытиемСтраницы(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница ОбновленияНеОбнаружено + +&НаКлиенте +Процедура НадписьПереченьРелизовНаДискахИТСНажатие(Элемент) + Если ПустаяСтрока(ПереченьРелизовНаДискахИТС) Тогда + Предупреждение(НСтр("ru = 'Информация о перечне релизов не обнаружена.'")); + КонецЕсли; + + ЗапуститьПриложение(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ДискИТС) + + "Autorun.exe -browse """ + ПереченьРелизовНаДискахИТС + """") +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница ДлительнаяОперация + +//////////////////////////////////////////////////////////////////////////////// +// Страница ВыборРежимаОбновленияФайл + +&НаКлиенте +Процедура НадписьСписокДействийНажатие(Элемент) + ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); + ПередОткрытиемСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура НадписьСписокДействий1Нажатие(Элемент) + ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); + ПередОткрытиемСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура НадписьСписокДействий3Нажатие(Элемент) + ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); + ПередОткрытиемСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура НадписьРезервнаяКопияНажатие(Элемент) + ПараметрыФормы = Новый Структура("СоздаватьРезервнуюКопию, ИмяКаталогаРезервнойКопииИБ, ВосстанавливатьИнформационнуюБазу", + Объект.СоздаватьРезервнуюКопию, + Объект.ИмяКаталогаРезервнойКопииИБ, + Объект.ВосстанавливатьИнформационнуюБазу); + Результат = ОткрытьФормуМодально("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРезервнойКопии", ПараметрыФормы, ЭтаФорма); + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(Объект, Результат); + КонецЕсли; + + ПередОткрытиемСтраницы(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница ВыборРежимаОбновленияСервер + +&НаКлиенте +Процедура ПереключательОбновленияПриИзменении(Элемент) + ПередОткрытиемСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура ВыслатьОтчетНаПочтуПриИзменении(Элемент) + ПередОткрытиемСтраницы(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница УспешноеОбновление + +&НаКлиенте +Процедура НадписьИнформацияОбОбновленииПриЗавершенииНажатие(Элемент) + ОткрытьФорму("ОбщаяФорма.ОписаниеИзмененийСистемы"); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница НеуспешноеОбновление + +//////////////////////////////////////////////////////////////////////////////// +// Страница ПараметрыАвторизации + +&НаКлиенте +Процедура КластерТребуетАутентификацииПриИзменении(Элемент) + ПередОткрытиемСтраницы(); +КонецПроцедуры + +&НаКлиенте +Процедура НестандартныеПортыСервераПриИзменении(Элемент) + Элементы.ПанельНестандартныеПортыСервера.Доступность = Объект.НестандартныеПортыСервера; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница ДополнительныеНастройки + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура КнопкаНазадНажатие(Команда) @@ -192,195 +426,11 @@ Конецесли; КонецПроцедуры -&НаКлиенте -Процедура НадписьКакОформитьПодпискуИТСНажатие(Элемент) - ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу("http://its.1c.ru/about.php?section=how"); -КонецПроцедуры - -&НаКлиенте -Процедура НадписьПодробнееОбИТСНажатие(Элемент) - ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу("http://its.1c.ru/about.php"); -КонецПроцедуры - -&НаКлиенте -Процедура НадписьИнформацияОбОбновленииНажатие(Элемент) - Если НЕ ПустаяСтрока(ИмяФайлаИнформацияОбОбновлении) Тогда - ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу(ИмяФайлаИнформацияОбОбновлении); - Иначе - Предупреждение(НСтр("ru = 'Информация об обновлении отсутствует.'")); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура НадписьПорядокОбновленияНажатие(Элемент) - Если НЕ ПустаяСтрока(ИмяФайлаПорядокОбновления) Тогда - ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу(ИмяФайлаПорядокОбновления); - Иначе - Предупреждение(НСтр("ru = 'Описание порядка обновления отсутствует.'")); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура НадписьСписокДействийНажатие(Элемент) - ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); - ПередОткрытиемСтраницы(); -КонецПроцедуры - -&НаКлиенте -Процедура НадписьСписокДействий1Нажатие(Элемент) - ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); - ПередОткрытиемСтраницы(); -КонецПроцедуры - -&НаКлиенте -Процедура НадписьСписокДействий3Нажатие(Элемент) - ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); - ПередОткрытиемСтраницы(); -КонецПроцедуры - -&НаКлиенте -Процедура ПереключательНуженФайлОбновленияПриИзменении(Элемент) - ПередОткрытиемСтраницы(); -КонецПроцедуры - -&НаКлиенте -Процедура ПолеФайлОбновленияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - Диалог.Каталог = ОбновлениеКонфигурацииКлиент.ПолучитьКаталогФайла(Объект.ИмяФайлаОбновления); - Диалог.ПроверятьСуществованиеФайла = Истина; - Диалог.Фильтр = НСтр("ru = 'Все файлы поставки (*.cf*;*.cfu)|*.cf*;*.cfu|Файлы поставки конфигурации (*.cf)|*.cf|Файлы поставки обновления конфигурации(*.cfu)|*.cfu'"); - Диалог.Заголовок = НСтр("ru = 'Выбор поставки обновления конфигурации'"); - - Если Диалог.Выбрать() Тогда - Объект.ИмяФайлаОбновления = Диалог.ПолноеИмяФайла; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура НадписьИнформацияОПолученииДоступаНажатие(Элемент) - - ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу( - ОбновлениеКонфигурацииКлиент.ПолучитьПараметрыОбновления().АдресСтраницыИнформацииОПолученииДоступаКПользовательскомуСайту); - -КонецПроцедуры - -&НаКлиенте -Процедура НадписьРезервнаяКопияНажатие(Элемент) - ПараметрыФормы = Новый Структура("СоздаватьРезервнуюКопию, ИмяКаталогаРезервнойКопииИБ, ВосстанавливатьИнформационнуюБазу", - Объект.СоздаватьРезервнуюКопию, - Объект.ИмяКаталогаРезервнойКопииИБ, - Объект.ВосстанавливатьИнформационнуюБазу); - Результат = ОткрытьФормуМодально("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРезервнойКопии", ПараметрыФормы, ЭтаФорма); - - Если ТипЗнч(Результат) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(Объект, Результат); - КонецЕсли; - - ПередОткрытиемСтраницы(); -КонецПроцедуры - -&НаКлиенте -Процедура ПереключательОбновленияПриИзменении(Элемент) - ПередОткрытиемСтраницы(); -КонецПроцедуры - -&НаКлиенте -Процедура ВыслатьОтчетНаПочтуПриИзменении(Элемент) - ПередОткрытиемСтраницы(); -КонецПроцедуры - -&НаКлиенте -Процедура КластерТребуетАутентификацииПриИзменении(Элемент) - ПередОткрытиемСтраницы(); -КонецПроцедуры - -&НаКлиенте -Процедура НестандартныеПортыСервераПриИзменении(Элемент) - Элементы.ПанельНестандартныеПортыСервера.Доступность = Объект.НестандартныеПортыСервера; -КонецПроцедуры - &НаКлиенте Процедура КнопкаОбновитьВерсиюКомпонентыНажатие(Команда) ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(); КонецПроцедуры -&НаКлиенте -Процедура НадписьНастройкаПараметровПроксиНажатие(Элемент) - ОткрытьФормуМодально("ОбщаяФорма.ПараметрыПроксиСервера"); -КонецПроцедуры - -&НаКлиенте -Процедура ДекорацияЧерезИнтернетНажатие(Элемент) - Объект.ИсточникОбновления = 0; - ПередОткрытиемСтраницы(); -КонецПроцедуры - -&НаКлиенте -Процедура ДекорацияЧерезИТСНажатие(Элемент) - Объект.ИсточникОбновления = 1; - ПередОткрытиемСтраницы(); -КонецПроцедуры - -&НаКлиенте -Процедура ДекорацияИзФайлаНажатие(Элемент) - Объект.ИсточникОбновления = 2; - ПередОткрытиемСтраницы(); -КонецПроцедуры - -&НаКлиенте -Процедура ИсточникДискаИТСПриИзменении(Элемент) - ПередОткрытиемСтраницы(); -КонецПроцедуры - -&НаКлиенте -Процедура ДискИТСНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); - Диалог.Каталог = ДискИТС; - Диалог.ПроверятьСуществованиеФайла = Истина; - Диалог.Заголовок = "Выбор каталога для диска ИТС"; - - Если Диалог.Выбрать() Тогда - ДискИТС = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Диалог.Каталог); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ГиперссылкаПроверятьНаличиеОбновленияПриЗапускеНажатие(Элемент) - ПараметрыФормы = Новый Структура("ПроверятьНаличиеОбновленияПриЗапуске, РасписаниеПроверкиНаличияОбновления", - Объект.ПроверятьНаличиеОбновленияПриЗапуске, Объект.РасписаниеПроверкиНаличияОбновления); - Результат = ОткрытьФормуМодально("Обработка.ОбновлениеКонфигурации.Форма.НастройкаРасписания", ПараметрыФормы, ЭтаФорма); - - Если ТипЗнч(Результат) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(Объект, Результат); - КонецЕсли; - - ПередОткрытиемСтраницы(); -КонецПроцедуры - -&НаКлиенте -Процедура НадписьПереченьРелизовНаДискахИТСНажатие(Элемент) - Если ПустаяСтрока(ПереченьРелизовНаДискахИТС) Тогда - Предупреждение(НСтр("ru = 'Информация о перечне релизов не обнаружена.'")); - КонецЕсли; - - ЗапуститьПриложение(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ДискИТС) + - "Autorun.exe -browse """ + ПереченьРелизовНаДискахИТС + """") -КонецПроцедуры - -&НаКлиенте -Процедура НадписьОткрытьЖурналРегистрацииНажатие(Элемент) - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", Новый Структура("Пользователь", ИмяПользователя())); -КонецПроцедуры - -&НаКлиенте -Процедура НадписьПерейтиВЖурналРегистрацииНажатие(Элемент) - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", Новый Структура("Пользователь", ИмяПользователя())); -КонецПроцедуры - &НаКлиенте Процедура КомандаПроверитьДискИТС(Команда) Объект.ИсточникОбновления = 1; // диск ИТС @@ -389,13 +439,8 @@ ОбработатьНажатиеКнопкиДалее(); КонецПроцедуры -&НаКлиенте -Процедура НадписьИнформацияОбОбновленииПриЗавершенииНажатие(Элемент) - ОткрытьФорму("ОбщаяФорма.ОписаниеИзмененийСистемы"); -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ (СЕРВЕР) +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервереБезКонтекста Функция ЭтоСеансКонфигуратором(СеансИнформационнойБазы) @@ -863,8 +908,6 @@ КонецЕсли; Возврат Результат = Истина; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ (КЛИЕНТ) &НаКлиенте Процедура СохранитьНастройкиОбновленияКонфигурации() @@ -908,7 +951,7 @@ Если ПараметрыРаботыКлиента.НастройкиОбновления.ЕстьДоступДляОбновления И НЕ ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда - АдминистрированияИБ = СоединенияИБКлиентСервер.НовыеПараметрыАдминистрированияИБ(); + АдминистрированияИБ = СоединенияИБ.ПолучитьПараметрыАдминистрированияИБ(); АдминистрированияИБ.ИмяАдминистратораКластера = ?(Объект.КластерТребуетАутентификации, Объект.ИмяАдминистратораКластера, ""); АдминистрированияИБ.ПарольАдминистратораКластера = ?(Объект.КластерТребуетАутентификации, Объект.ПарольАдминистратораКластера, ""); АдминистрированияИБ.ПортКластераСерверов = ?(Объект.НестандартныеПортыСервера, Объект.ПортКластераСерверов, 0); @@ -1063,7 +1106,7 @@ Элементы.НадписьВерсияДляОбновления.Заголовок = ?(ТипЗнч(СтруктураДоступногоОбновления) = Тип("Структура"), НСтр("ru = 'Доступная версия для обновления - '") + СтруктураДоступногоОбновления.Версия, ""); Элементы.НадписьВерсияДляОбновления.Видимость = НЕ ПустаяСтрока(Элементы.НадписьВерсияДляОбновления.Заголовок); - Если СтроковыеФункцииКлиентСервер.СравнитьВерсии(СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ВерсияКонфигурации, + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ВерсияКонфигурации, ПоследняяВерсияКонфигурации) >= 0 И (Объект.ИсточникОбновления = 1 И НЕ ПустаяСтрока(ПутьКФайламОбновленияНаДискеИТС) ИЛИ СтруктураДоступногоОбновления <> Неопределено) @@ -1126,7 +1169,7 @@ Если Объект.КодЗадачиПланировщика = 0 И НЕ ДатаВремяОбновленияУстановлена Тогда Объект.ДатаВремяОбновления = ВернутьДату(ОбновлениеКонфигурацииКлиентСервер.ДобавитьДни( - НачалоДня(ТекущаяДата()), 1), Объект.ДатаВремяОбновления); + НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()), 1), Объект.ДатаВремяОбновления); ДатаВремяОбновленияУстановлена = Истина; КонецЕсли; @@ -1895,18 +1938,19 @@ Попытка СоединенияИБКлиентСервер.ПроверитьПараметрыАдминистрированияИБ( СоединенияИБКлиентСервер.НовыеПараметрыАдминистрированияИБ( + ,, ?(Объект.КластерТребуетАутентификации, Объект.ИмяАдминистратораКластера, ""), ?(Объект.КластерТребуетАутентификации, Объект.ПарольАдминистратораКластера, ""), ?(Объект.НестандартныеПортыСервера, Объект.ПортКластераСерверов, 0), ?(Объект.НестандартныеПортыСервера, Объект.ПортАгентаСервера, 0)), - Истина); + Истина); Исключение ИнфоОбОшибке = ИнформацияОбОшибке(); Результат = НСтр("ru = 'Ошибка при проверке соединения с кластером серверов. '"); ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", Результат + ПодробноеПредставлениеОшибки(ИнфоОбОшибке)); - Результат = Результат + КраткоеПредставлениеОшибки(ИнфоОбОшибке); + Результат = Результат + КраткоеПредставлениеОшибки(ИнфоОбОшибке); КонецПопытки; Возврат Результат; @@ -1959,7 +2003,7 @@ // Параметры // ИмяФайлаПрограммы – Строка – путь к запускаемому приложению или файлу. // ДатаВремя – Дата – Дата и время запуска. Значение даты может быть -// в интервале [ТекущаяДата(), ТекущаяДата() + 30 дней). +// в интервале [текущая дата, текущая дата + 30 дней). // // Возвращаемое значение: // Число – код созданной задачи планировщика или "Неопределено" при ошибке. @@ -2100,21 +2144,27 @@ &НаКлиенте Функция ПроверитьДопустимуюДатуОбновления(ДатаВремя, ВыдаватьСообщения = Истина) - Сейчас = ТекущаяДата(); + ТекстСообщения = ПроверитьДопустимуюДатуОбновленияНаСервере(ДатаВремя); + Результат = ПустаяСтрока(ТекстСообщения); + Если Не Результат И ВыдаватьСообщения Тогда + Предупреждение(ТекстСообщения); + КонецЕсли; + Возврат Результат; +КонецФункции + +&НаСервереБезКонтекста +Функция ПроверитьДопустимуюДатуОбновленияНаСервере(ДатаВремя) + + Сейчас = ТекущаяДатаСеанса(); Если ДатаВремя < Сейчас Тогда - Если ВыдаватьСообщения Тогда - Предупреждение(НСтр("ru = 'Обновление конфигурации может быть запланировано только на будущую дату и время.'")); - КонецЕсли; - Возврат Ложь; + Возврат НСтр("ru = 'Обновление конфигурации может быть запланировано только на будущую дату и время.'"); КонецЕсли; Если ДатаВремя > ДобавитьМесяц(Сейчас, 1) Тогда - Если ВыдаватьСообщения Тогда - Предупреждение(НСтр("ru = 'Обновление конфигурации может быть запланировано не позднее, чем через месяц относительно текущей даты.'")); - КонецЕсли; - Возврат Ложь; + Возврат НСтр("ru = 'Обновление конфигурации может быть запланировано не позднее, чем через месяц относительно текущей даты.'"); КонецЕсли; - Возврат Истина; + Возврат ""; + КонецФункции &НаКлиенте @@ -2766,7 +2816,7 @@ ПоследняяВерсияКонфигурации = ПараметрыОбновления.Version; ТекущаяВерсияКонфигурации = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ВерсияКонфигурации; - Если СтроковыеФункцииКлиентСервер.СравнитьВерсии(ТекущаяВерсияКонфигурации, ПоследняяВерсияКонфигурации) >= 0 Тогда + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ТекущаяВерсияКонфигурации, ПоследняяВерсияКонфигурации) >= 0 Тогда СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Нет доступных обновлений. |%1'"), ТекущийДискИТС); diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Help/ru.html b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Help/ru.html index 75ce2eb17..b29fea8d0 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Help/ru.html +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Help/ru.html @@ -21,7 +21,16 @@

    Планирование обновлений

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

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

    -

    Диагностика нештатных ситуаций

    +

    При проблемах получения и установки обновлений

    +

    При получении обновлений через Интернет ошибка вида "Ошибка работы с Интернет" означает, что соединение с Интернетом отсутствует или заблокировано по ряду причин:

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

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

    • Записи о произведенных операциях и возникших ошибках в ходе обновления заносятся в Журнал регистрации информационной базы (тип события «Обновление информационной базы»).
    • В процессе установки обновления во временной папке текущего пользователя Windows создается лог-файл с записями о ходе обновления. (Содержимое лог-файла впоследствии автоматически добавляется в Журнал регистрации.) Последний из каталогов вида %temp%\1CUpdate.<набор цифр>, отсортированных по алфавиту, соответствует последней сессии обновления.

    Если настройка операционной системы "Язык программ, не поддерживающих Юникод" задана некорректно, то процесс обновления завершится с ошибкой "invalid procedure call or arguments", при этом лог-файл окажется пустым. Для устранения данной ошибки необходимо, чтобы в региональных настройках системы ("Панель управления" - "Язык и региональные стандарты" - "Дополнительно") в поле "Язык программ, не поддерживающих Юникод" был выбран русский язык.

    diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/ЗаставкаОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/ЗаставкаОбновленияКонфигурации/Template.txt index 5f9308173..007fda328 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/ЗаставкаОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/ЗаставкаОбновленияКонфигурации/Template.txt @@ -69,6 +69,7 @@ break; case 3: ret = disconnectAndBlockUsersHTA(); + CollectGarbage(); break; case 4: setProgress("Cоздание резервной копии информационной базы"); diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/МакетФайлаОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/МакетФайлаОбновленияКонфигурации/Template.txt index d1bce92dd..deffae91e 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/МакетФайлаОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/МакетФайлаОбновленияКонфигурации/Template.txt @@ -541,8 +541,8 @@ function disconnectAndBlockUsersHTA() { if (result != -1) { - ComConnection = null; connection = null; + ComConnection = null; CollectGarbage(); // освобождает соединения с COM-объектом } } diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Form.form new file mode 100644 index 000000000..9910b07f4 --- /dev/null +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Form.form @@ -0,0 +1,876 @@ + + + + <key>ru</key> + <value>История выполнения ключевой операции</value> + + + ГруппаПериод + 13 + + ДатаНачала + 3 + true + true + + true + + + ДатаНачала + + + ДатаНачалаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ДатаНачалаКонтекстноеМеню + 4 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДатаОкончания + 5 + true + true + + true + + + ДатаОкончания + + + ДатаОкончанияРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ДатаОкончанияКонтекстноеМеню + 6 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Период</value> + + + System.DefaultGUIFont + true + false + false + false + + + ru + Группа период + + + ГруппаПериодРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаПараметрыКлючевойОперации + 14 + + КлючеваяОперация + 1 + true + true + + true + + + КлючеваяОперация + + + КлючеваяОперацияРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + КлючеваяОперацияКонтекстноеМеню + 2 + true + + InputField + true + Enter + true + Left + true + + + Opening + КлючеваяОперацияОткрытие + + true + true + true + false + true + true + true + Normal + + + + ГруппаПараметры + 15 + + Приоритет + 7 + true + true + + true + + + Приоритет + + + ПриоритетРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ПриоритетКонтекстноеМеню + 8 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЦелевоеВремя + 9 + true + true + + true + + + ЦелевоеВремя + + + ЦелевоеВремяРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ЦелевоеВремяКонтекстноеМеню + 10 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа параметры</value> + + + ru + Группа параметры + + + ГруппаПараметрыРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Ключевая операция</value> + + + System.DefaultGUIFont + true + false + false + false + + + ru + Группа параметры ключевой операции + + + ГруппаПараметрыКлючевойОперацииРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + КоличествоЗамеров + 11 + true + true + + true + + + КоличествоЗамеров + + Left + + КоличествоЗамеровРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + КоличествоЗамеровКонтекстноеМеню + 12 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + История + 16 + true + true + + true + + + История + + None + + ИсторияДлительность + 21 + true + true + + true + + + История.Длительность + + + ИсторияДлительностьРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ИсторияДлительностьКонтекстноеМеню + 22 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИсторияВремяОкончания + 23 + true + true + + true + + + История.ВремяОкончания + + + ИсторияВремяОкончанияРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ИсторияВремяОкончанияКонтекстноеМеню + 24 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИсторияПользователь + 19 + true + true + + true + + + История.Пользователь + + + ИсторияПользовательРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ИсторияПользовательКонтекстноеМеню + 20 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИсторияКоманднаяПанель + 18 + Left + + + ИсторияСтрокаПоиска + 41 + + ИсторияСтрокаПоискаРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ИсторияСтрокаПоискаКонтекстноеМеню + 42 + true + + История + + true + + + + ИсторияСостояниеПросмотра + 44 + + ИсторияСостояниеПросмотраРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ИсторияСостояниеПросмотраКонтекстноеМеню + 45 + true + + ViewStatusAddition + История + + true + + + + ИсторияУправлениеПоиском + 47 + + ИсторияУправлениеПоискомРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ИсторияУправлениеПоискомКонтекстноеМеню + 48 + true + + SearchControlAddition + История + + true + + + + ИсторияРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ИсторияКонтекстноеМеню + 17 + + true + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + None + None + None + true + +
    + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.ОценкаПроизводительности + + + true + + + true + +
    true
    +
    + + КлючеваяОперация + + <key>ru</key> + <value>Ключевая операция</value> + + 2 + + CatalogRef.КлючевыеОперации + + + true + + + true + + + + ДатаНачала + + <key>ru</key> + <value>Дата начала</value> + + 3 + + Date + + + + true + + + true + + + + ДатаОкончания + + <key>ru</key> + <value>Дата окончания</value> + + 4 + + Date + + + + true + + + true + + + + Приоритет + + <key>ru</key> + <value>Приоритет</value> + + 5 + + Number + + 15 + true + + + + true + + + true + + + + ЦелевоеВремя + + <key>ru</key> + <value>Целевое время</value> + + 6 + + Number + + 15 + 2 + true + + + + true + + + true + + + + КоличествоЗамеров + + <key>ru</key> + <value>Количество замеров</value> + + 7 + + String + + 20 + + + + true + + + true + + + + История + + <key>ru</key> + <value>История</value> + + 8 + + ValueTable + + + true + + + true + + + Пользователь + + <key>ru</key> + <value>Пользователь</value> + + 1 + + String + + 255 + + + + true + + + true + + + + Длительность + + <key>ru</key> + <value>Длительность</value> + + 2 + + Number + + 15 + 3 + true + + + + true + + + true + + + + ВремяОкончания + + <key>ru</key> + <value>Время окончания</value> + + 3 + + Date + + + + true + + + true + + + + + НастройкиИстории + + + + + + + +
    diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Module.bsl new file mode 100644 index 000000000..d51d5f9aa --- /dev/null +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Module.bsl @@ -0,0 +1,61 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + КлючеваяОперация = Параметры.НастройкиИстории.КлючеваяОперация; + ДатаНачала = Параметры.НастройкиИстории.ДатаНачала; + ДатаОкончания = Параметры.НастройкиИстории.ДатаОкончания; + Приоритет = КлючеваяОперация.Приоритет; + ЦелевоеВремя = КлючеваяОперация.ЦелевоеВремя; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("КлючеваяОперация", КлючеваяОперация); + Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); + Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); + + Запрос.Текст = + "ВЫБРАТЬ + | ЗамерыВремени.ИмяПользователя КАК Пользователь, + | ЗамерыВремени.ВремяВыполнения КАК Длительность, + | ЗамерыВремени.ДатаЗамера КАК ВремяОкончания + |ИЗ + | РегистрСведений.ЗамерыВремени КАК ЗамерыВремени + |ГДЕ + | ЗамерыВремени.КлючеваяОперация = &КлючеваяОперация + | И ЗамерыВремени.ДатаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания + | + |УПОРЯДОЧИТЬ ПО + | ВремяОкончания"; + + Выборка = Запрос.Выполнить().Выбрать(); + КоличествоЗамеровЧисло = Выборка.Количество(); + КоличествоЗамеров = Строка(КоличествоЗамеровЧисло) + ?(КоличествоЗамеровЧисло < 100, " (недостаточно)", ""); + + Пока Выборка.Следующий() Цикл + + СтрокаИстории = История.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаИстории, Выборка); + + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +// Запрещает редактирование ключевой операции из формы обработки +// т.к. могут пострадать внутренние механизмы +// +&НаКлиенте +Процедура КлючеваяОперацияОткрытие(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Form.form index dd12a4e84..e101bcaa9 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Form.form @@ -1,53 +1,20 @@ - - - ВыполнятьЗамерыПроизводительности - 1 - true - true - - true - - - ВыполнятьЗамерыПроизводительности - - Right - - ВыполнятьЗамерыПроизводительностиРасширеннаяПодсказка - 5 - Label - true - true - - Left - - - - ВыполнятьЗамерыПроизводительностиКонтекстноеМеню - 2 - true - - CheckBoxField - Enter - true - Left - true - - - - ФормаКоманднаяПанель - -1 - - ФормаЗаписатьИЗакрыть - 3 + + + ОсновныеНастройки + 7 + + ВыполнятьЗамерыПроизводительности + 12 true true true + Right - ФормаЗаписатьИЗакрытьРасширеннаяПодсказка - 4 + ВыполнятьЗамерыПроизводительностиРасширеннаяПодсказка + 21 Label true true @@ -55,20 +22,312 @@ Left - Form.Command.ЗаписатьИЗакрыть + + ВыполнятьЗамерыПроизводительностиКонтекстноеМеню + 13 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Основные настройки</value> + + + ru + Основные настройки + + + ОсновныеНастройкиРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + НастройкиЭкспорта + 8 + + ВыполнятьЭкспортДанных + 14 + true + true + + true + + + ВыполнятьЭкспортДанных + + Right + + ВыполнятьЭкспортДанныхРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ВыполнятьЭкспортДанныхКонтекстноеМеню + 15 + true + + CheckBoxField + Enter + true + Left + true + + + + ДатаНачалаЭкспортаРезультатовЗамеровПроизводительности + 5 + true + true + + true + + + ДатаНачалаЭкспортаРезультатовЗамеровПроизводительностиРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ДатаНачалаЭкспортаРезультатовЗамеровПроизводительностиКонтекстноеМеню + 6 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + КаталогФайловЭкспорта + 9 + true + true + + true + + + КаталогЭкспорта + + + КаталогФайловЭкспортаРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + КаталогФайловЭкспортаКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + + StartChoice + КаталогФайловЭкспортаНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + + НастроитьРасписаниеЭкспорта + 11 + true + true + + true + + + НастроитьРасписаниеЭкспортаРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + Hyperlink + Form.Command.НастроитьРасписаниеЭкспорта + Normal Auto - true true true UserCmds Auto + true + true + + true + + + <key>ru</key> + <value>Настройки экспорта</value> + + + ru + Настройки экспорта + + + НастройкиЭкспортаРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаСохранитьНастройки + 16 + true + true + + true + + + ФормаСохранитьНастройкиРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + Form.Command.СохранитьНастройки + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСохранитьЗакрыть + 17 + true + true + + true + + + ФормаСохранитьЗакрытьРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + Form.Command.СохранитьЗакрыть + Normal + Auto + true + true + UserCmds + + 51 + 102 + 255 + + + 179 + 3 + 3 + + Auto + Left + true OnCreateAtServer ПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + LockOwner true true @@ -81,10 +340,17 @@ auto true - Объект - 1 + КаталогЭкспорта + + <key>ru</key> + <value>Каталог экспорта</value> + + 2 - DataProcessorObject.ОценкаПроизводительности + String + + 255 + true @@ -92,15 +358,15 @@ true -
    true
    + true
    - ВыполнятьЗамерыПроизводительности + ВыполнятьЭкспортДанных <key>ru</key> - <value>Выполнять замеры производительности</value> + <value>Выполнять экспорт данных</value> - 2 + 3 Boolean @@ -113,22 +379,66 @@ true - ЗаписатьИЗакрыть + НастроитьРасписаниеЭкспорта <key>ru</key> - <value>Записать и закрыть</value> + <value>Настроить расписание экспорта</value> 1 ru - Записать и закрыть + Настроить расписание экспорта true - ЗаписатьИЗакрыть + НастроитьРасписаниеЭкспорта + + + Auto + Auto + + + СохранитьНастройки + + <key>ru</key> + <value>Сохранить настройки</value> + + 2 + + ru + Сохранить настройки + + + true + + + + СохранитьНастройки + + + Auto + Auto + + + СохранитьЗакрыть + + <key>ru</key> + <value>Сохранить и закрыть</value> + + 3 + + ru + Сохранить закрыть + + + true + + + + СохранитьЗакрыть Auto @@ -138,5 +448,4 @@ -
    diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Module.bsl index 8b94e6edb..8c386c968 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Module.bsl @@ -1,23 +1,222 @@ -&НаКлиенте -Процедура ЗаписатьИЗакрыть(Команда) - - СохранитьНастройки(ВыполнятьЗамерыПроизводительности); - ЭтаФорма.Закрыть(); - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура СохранитьНастройки(ВыполнятьЗамеры) - - Константы.ВыполнятьЗамерыПроизводительности.Установить(ВыполнятьЗамеры); - -КонецПроцедуры +/////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ВыполнятьЗамерыПроизводительности = Константы.ВыполнятьЗамерыПроизводительности.Получить(); - ЭтаФорма.Модифицированность = Ложь; + ВыполнятьЭкспортДанных = ПолучитьИспользованиеРегламентногоЗадания(); + КаталогЭкспорта = ПолучитьКаталогЭкспорта(); + +КонецПроцедуры + + +&НаКлиенте +Процедура КаталогФайловЭкспортаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ВыбранныйКаталог = ""; + РезультатВызова = ОценкаПроизводительностиКлиент.ВызватьДиалогРаботыСФайлами( + РежимДиалогаВыбораФайла.ВыборКаталога, + ВыбранныйКаталог); + + Если Не РезультатВызова Тогда + Возврат; + КонецЕсли; + + Если ВыбранныйКаталог <> Неопределено Тогда + КаталогЭкспорта = ВыбранныйКаталог; + ЭтаФорма.Модифицированность = Истина; + КонецЕсли; КонецПроцедуры + +&НаСервере +Функция ОбработкаПроверкиЗаполненияНаСервере() +//Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + Если ВыполнятьЭкспортДанных И ПустаяСтрока(СокрЛП(КаталогЭкспорта)) Тогда + Сообщение = Новый СообщениеПользователю; + Сообщение.Поле = "КаталогЭкспорта"; + Сообщение.Текст = НСтр("ru = 'Поле не заполнено.'"); + Сообщение.Сообщить(); + Возврат Ложь; //Отказ = Истина; + КонецЕсли; + + Возврат Истина; +КонецФункции + +&НаСервере +Процедура СохранитьНаСервере() +//Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + УстановитьКаталогЭкспорта(КаталогЭкспорта); + Если ВыполнятьЭкспортДанных Тогда + УстановитьИспользованиеРегламентногоЗадания(Истина); + Иначе + УстановитьИспользованиеРегламентногоЗадания(Ложь); + КонецЕсли; + +КонецПроцедуры + + +/////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД + +&НаКлиенте +Процедура НастроитьРасписаниеЭкспорта(Команда) + + РасписаниеРегламентногоЗадания = ПолучитьРасписание(); + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(РасписаниеРегламентногоЗадания); + + Если Не Диалог.ОткрытьМодально() Тогда + Возврат; + КонецЕсли; + + УстановитьРасписание(Диалог.Расписание); + +КонецПроцедуры + + +/////////////////////////////////////////////////////////////////////////////// +// РАБОТА С РЕГЛАМЕНТНЫМ ЗАДАНИЕМ + +&НаСервереБезКонтекста +Функция ПолучитьКаталогЭкспорта() + + Задание = ПолучитьРегламентноеЗадание(); + Каталог = ""; + Если Задание.Параметры.Количество() > 0 Тогда + Каталог = Задание.Параметры[0]; + КонецЕсли; + + Возврат Каталог; + +КонецФункции + +// Изменяет каталог экспорта данных +// +// Параметры: +// КаталогЭкспорта - Строка, новый каталог экспорта +// +&НаСервереБезКонтекста +Процедура УстановитьКаталогЭкспорта(КаталогЭкспорта) + + Задание = ПолучитьРегламентноеЗадание(); + Если Задание.Параметры.Количество() = 0 Или ВРег(Задание.Параметры[0]) <> ВРег(КаталогЭкспорта) Тогда + ПараметрыЗадания = Новый Массив; + ПараметрыЗадания.Добавить(КаталогЭкспорта); + Задание.Параметры = ПараметрыЗадания; + ЗафиксироватьРегламентноеЗадание(Задание); + КонецЕсли; + +КонецПроцедуры + +// Возвращает признак использования регламентного задания +// +// Возвращаемое значение: +// Булево - +// Истина, регламентное задание выполняется +// Ложь, регламентное задание не выполняется +// +&НаСервереБезКонтекста +Функция ПолучитьИспользованиеРегламентногоЗадания() + + Задание = ПолучитьРегламентноеЗадание(); + Возврат Задание.Использование; + +КонецФункции + +// Изменяет признак использования регламентного задания +// +// Параметры: +// НовоеЗначение - Булево, новое значение использования +// +// Возвращаемое значение: +// Булево - состояние до изменения (предыдущее состояние) +// +&НаСервереБезКонтекста +Функция УстановитьИспользованиеРегламентногоЗадания(НовоеЗначение) + + Задание = ПолучитьРегламентноеЗадание(); + ТекущееСостояние = Задание.Использование; + Если ТекущееСостояние <> НовоеЗначение Тогда + Задание.Использование = НовоеЗначение; + ЗафиксироватьРегламентноеЗадание(Задание); + КонецЕсли; + + Возврат ТекущееСостояние; + +КонецФункции + +// Возвращает текущее расписание регламентного задания +// +// Возвращаемое значение: +// РасписаниеРегламентногоЗадания - текущее расписание +// +&НаСервереБезКонтекста +Функция ПолучитьРасписание() + + Задание = ПолучитьРегламентноеЗадание(); + Возврат Задание.Расписание; + +КонецФункции + +// Устанавливает новое расписание регламентному заданию +// +// Параметры: +// НовоеРасписание - РасписаниеРегламентногоЗадания, которе надо установить +// +&НаСервереБезКонтекста +Процедура УстановитьРасписание(Знач НовоеРасписание) + + Задание = ПолучитьРегламентноеЗадание(); + Задание.Расписание = НовоеРасписание; + ЗафиксироватьРегламентноеЗадание(Задание); + +КонецПроцедуры + +// Находит и возвращает предопредленное регламентное задание +// +// Возвращаемое значение: +// РегламентноеЗадание - РегламентноеЗадание.ЭкспортОценкиПроизводительности, найденное задание +// +&НаСервереБезКонтекста +Функция ПолучитьРегламентноеЗадание() + + УстановитьПривилегированныйРежим(Истина); + + Возврат РегламентныеЗадания.НайтиПредопределенное( + Метаданные.РегламентныеЗадания.ЭкспортОценкиПроизводительности); + +КонецФункции + +// Сохраняет настройки регламентного задания +// +// Параметры: +// Задание - РегламентноеЗадание.ЭкспортОценкиПроизводительности +// +&НаСервереБезКонтекста +Процедура ЗафиксироватьРегламентноеЗадание(Задание) + + УстановитьПривилегированныйРежим(Истина); + Задание.Записать(); + +КонецПроцедуры + + +&НаКлиенте +Процедура СохранитьНастройки(Команда) + Если ОбработкаПроверкиЗаполненияНаСервере() Тогда + СохранитьНаСервере(); + КонецЕсли; +КонецПроцедуры + + +&НаКлиенте +Процедура СохранитьЗакрыть(Команда) + Если ОбработкаПроверкиЗаполненияНаСервере() Тогда + СохранитьНаСервере(); + ЭтаФорма.Закрыть(); + КонецЕсли; +КонецПроцедуры + diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/ConditionalAppearance.dcssca index 95ae287ab..5b04fcb1a 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/ConditionalAppearance.dcssca +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/ConditionalAppearance.dcssca @@ -3,14 +3,14 @@ - НомерСтроки + Приоритет Объект.Производительность.КлючеваяОперация Equal - Перечисление.КлючевыеОперации.ОбщаяПроизводительностьСистемы + Справочник.КлючевыеОперации.ОбщаяПроизводительностьСистемы @@ -32,7 +32,7 @@ Объект.Производительность.КлючеваяОперация NotEqual - Перечисление.КлючевыеОперации.ОбщаяПроизводительностьСистемы + Справочник.КлючевыеОперации.ОбщаяПроизводительностьСистемы Объект.Производительность.ЦелевоеВремя @@ -48,4 +48,44 @@ + + + + Приоритет + + + + + Объект.Производительность.НомерСтроки + NotEqual + 0 + + + + + ТолькоПросмотр + true + + + + + + + ЦелевоеВремя + + + + + Объект.Производительность.КлючеваяОперация + Equal + Справочник.КлючевыеОперации.ОбщаяПроизводительностьСистемы + + + + + ТолькоПросмотр + true + + + diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form index 7f0427ce8..f76b118ed 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form @@ -4,19 +4,19 @@ Настройки 57 - Период - 2 + ДатаНачала + 69 true true true - Объект.Период + Объект.ДатаНачала - ПериодРасширеннаяПодсказка - 71 + ДатаНачалаРасширеннаяПодсказка + 79 Label true true @@ -25,8 +25,49 @@ - ПериодКонтекстноеМеню - 3 + ДатаНачалаКонтекстноеМеню + 70 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДатаОкончания + 71 + true + true + + true + + + Объект.ДатаОкончания + + + ДатаОкончанияРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + + ДатаОкончанияКонтекстноеМеню + 72 true InputField @@ -57,7 +98,7 @@ ШагРасширеннаяПодсказка - 73 + 83 Label true true @@ -126,7 +167,7 @@
    НастройкиРасширеннаяПодсказка - 70 + 78 Label true true @@ -181,7 +222,7 @@ КлючеваяОперацияРасширеннаяПодсказка - 89 + 101 Label true true @@ -204,9 +245,14 @@ StartChoice ПроизводительностьКлючеваяОперацияНачалоВыбора + + Opening + КлючеваяОперацияОткрытие + true true true + false true true true @@ -214,23 +260,19 @@ - НомерСтроки - 26 - - <key>ru</key> - <value>Приоритет</value> - + Приоритет + 67 true true true - Объект.Производительность.LineNumber + Объект.Производительность.Приоритет - НомерСтрокиРасширеннаяПодсказка - 91 + ПриоритетРасширеннаяПодсказка + 103 Label true true @@ -239,18 +281,23 @@ - НомерСтрокиКонтекстноеМеню - 27 + ПриоритетКонтекстноеМеню + 68 true - LabelField + InputField Auto true Left true - + true true + true + true + true + true + Normal @@ -270,11 +317,11 @@ OnChange - ПроизводительностьЦелевоеВремяПриИзменении + ЦелевоеВремяПриИзменении ЦелевоеВремяРасширеннаяПодсказка - 93 + 105 Label true true @@ -315,7 +362,7 @@ ПроизводительностьПереместитьВверхРасширеннаяПодсказка - 77 + 88 Label true true @@ -344,7 +391,7 @@ ПроизводительностьПереместитьВнизРасширеннаяПодсказка - 78 + 89 Label true true @@ -363,19 +410,52 @@ Auto + + ПроизводительностьУстановитьОтбор + 74 + true + true + + true + + + ПроизводительностьУстановитьОтборРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + Form.Command.УстановитьОтбор + Normal + Auto + true + true + UserCmds + + StdPicture.FilterCriterion + + Auto + Left true
    + + Selection + ПроизводительностьВыбор + OnStartEdit ПроизводительностьПриНачалеРедактирования ПроизводительностьСтрокаПоиска - 80 + 92 ПроизводительностьСтрокаПоискаРасширеннаяПодсказка - 82 + 94 Label true true @@ -385,7 +465,7 @@ ПроизводительностьСтрокаПоискаКонтекстноеМеню - 81 + 93 true Производительность @@ -395,10 +475,10 @@ ПроизводительностьСостояниеПросмотра - 83 + 95 ПроизводительностьСостояниеПросмотраРасширеннаяПодсказка - 85 + 97 Label true true @@ -408,7 +488,7 @@ ПроизводительностьСостояниеПросмотраКонтекстноеМеню - 84 + 96 true ViewStatusAddition @@ -419,10 +499,10 @@ ПроизводительностьУправлениеПоиском - 86 + 98 ПроизводительностьУправлениеПоискомРасширеннаяПодсказка - 88 + 100 Label true true @@ -432,7 +512,7 @@ ПроизводительностьУправлениеПоискомКонтекстноеМеню - 87 + 99 true SearchControlAddition @@ -443,7 +523,7 @@ ПроизводительностьРасширеннаяПодсказка - 79 + 91 Label true true @@ -454,7 +534,39 @@ ПроизводительностьКонтекстноеМеню 24 - true + + ПроизводительностьКонтекстноеМенюУказатьAPDEX + 73 + + <key>ru</key> + <value>Вычислить целевое время из APDEX</value> + + true + true + + true + + + ПроизводительностьКонтекстноеМенюУказатьAPDEXРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + Form.Command.УказатьAPDEX + Normal + PictureAndText + true + true + UserCmds + + StdPicture.ReportSettings + + Auto + true true @@ -494,7 +606,7 @@ СтраницаТаблицаРасширеннаяПодсказка - 76 + 86 Label true true @@ -528,7 +640,7 @@ ДиаграммаРасширеннаяПодсказка - 104 + 116 Label true true @@ -570,7 +682,7 @@ СтраницаДиаграммаРасширеннаяПодсказка - 103 + 115 Label true true @@ -599,7 +711,7 @@ ФормаРасширеннаяПодсказка - 75 + 85 Label true true @@ -634,7 +746,7 @@ ПроизводительностьОбновитьРасширеннаяПодсказка - 67 + 75 Label true true @@ -663,7 +775,7 @@ ФормаЭкспортДанныхРасширеннаяПодсказка - 68 + 76 Label true true @@ -697,7 +809,7 @@ ФормаНастройкаРасширеннаяПодсказка - 69 + 77 Label true true @@ -724,10 +836,6 @@ OnOpen ПриОткрытии - - BeforeClose - ПередЗакрытием - OnCreateAtServer ПриСозданииНаСервере @@ -741,7 +849,6 @@ true true Vertical - true true UseIfNecessary auto @@ -759,7 +866,10 @@ true - Объект.Период + Объект.ДатаНачала + + + Объект.ДатаОкончания Объект.Шаг @@ -767,18 +877,14 @@
    true
    - КлючОбъекта + ТаблицаОбновлена <key>ru</key> - <value>Ключ объекта</value> + <value>Таблица обновлена</value> 2 - String - - 47 - true - + Boolean true @@ -788,18 +894,14 @@ - КлючНастройки + ДиаграммаОбновлена <key>ru</key> - <value>Ключ настройки</value> + <value>Диаграмма обновлена</value> 3 - String - - 18 - true - + Boolean true @@ -918,6 +1020,50 @@ Auto Auto + + УказатьAPDEX + + <key>ru</key> + <value>Указать APDEX</value> + + 6 + + ru + Указать APDEX + + + true + + + + УказатьAPDEX + + + Auto + Auto + + + УстановитьОтбор + + <key>ru</key> + <value>Установить отбор</value> + + 7 + + ru + Установить отбор + + + true + + + + УстановитьОтбор + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl index c7a19a2b3..24c4233cf 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl @@ -1,35 +1,14 @@ -&НаКлиенте -Перем ТаблицаОбновлена; - -&НаКлиенте -Перем ДиаграммаОбновлена; - - -/////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ -// Процедура загружает настройки ТЧ, если это первое открытие -// то в ТЧ добавляются все ключевые операции из справочника -// &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - КлючОбъекта = "Обработка.ОценкаПроизводительности.Формы.Форма"; - КлючНастройки = "Производительность"; - - Настройка = ХранилищеНастроекДанныхФорм.Загрузить(КлючОбъекта, КлючНастройки); Попытка - - Если Настройка = Неопределено Тогда - ЗагружаемаяНастройка = ЗагрузитьКО(); - Иначе - ЗагружаемаяНастройка = Настройка["Объект.Производительность"]; - КонецЕсли; - + ЗагружаемаяНастройка = ЗагрузитьКО(); Объект.Производительность.Загрузить(ЗагружаемаяНастройка); - Исключение - Сообщить("Не удалось загрузить настройки.", СтатусСообщения.Внимание); + Сообщить(НСтр("ru = 'Не удалось загрузить настройки.'"), СтатусСообщения.Внимание); КонецПопытки; КонецПроцедуры @@ -42,13 +21,26 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + &НаКлиенте -Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) +Процедура ФормаПриСменеСтраницы(Элемент, ТекущаяСтраница) - СохранитьНастройкиТЧ(); + Если Не ТаблицаОбновлена Или Не ДиаграммаОбновлена Тогда + Если Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаДиаграмма" Тогда + ДиаграммаОбновлена = Истина; + ИначеЕсли Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаТаблица" Тогда + ТаблицаОбновлена = Истина; + КонецЕсли; + ОбновитьПоказатели(); + КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Производительность + &НаКлиенте Процедура ПроизводительностьПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование) @@ -69,54 +61,58 @@ КонецПроцедуры &НаКлиенте -Процедура ПроизводительностьЦелевоеВремяПриИзменении(Элемент) +Процедура ПроизводительностьВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - Данные = Элементы.Производительность.ТекущиеДанные; - Если НЕ Данные = Неопределено Тогда - Если Данные.КлючеваяОперация = ОценкаПроизводительностиВызовСервера.ПолучитьПредопределенный() Тогда - Данные.ЦелевоеВремя = 0; - КонецЕсли; + СтрокаТЧ = Объект.Производительность.НайтиПоИдентификатору(ВыбраннаяСтрока); + + Если Лев(Поле.Имя, 18) <> "Производительность" Или + СтрокаТЧ.КлючеваяОперация = ОценкаПроизводительностиВызовСервераПолныеПрава.ПолучитьПредопределенный() + Тогда + Возврат; КонецЕсли; + СтандартнаяОбработка = Ложь; + + НачалоПериода = 0; + ОкончаниеПериода = 0; + ИндексПериода = Число(Сред(Поле.Имя, 19)); + Если Не ПолучитьДатыОтрезка(НачалоПериода, ОкончаниеПериода, ИндексПериода) Тогда + Возврат; + КонецЕсли; + + НастройкиИстории = Новый Структура("КлючеваяОперация, ДатаНачала, ДатаОкончания", СтрокаТЧ.КлючеваяОперация, НачалоПериода, ОкончаниеПериода); + + ПараметрыОткрытия = Новый Структура("НастройкиИстории", НастройкиИстории); + ОткрытьФормуМодально("Обработка.ОценкаПроизводительности.Форма.ИсторияВыполнения", ПараметрыОткрытия); КонецПроцедуры &НаКлиенте -Процедура ФормаПриСменеСтраницы(Элемент, ТекущаяСтраница) +Процедура КлючеваяОперацияОткрытие(Элемент, СтандартнаяОбработка) - Если Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаРасшифровка" Тогда + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ЦелевоеВремяПриИзменении(Элемент) + + ТД = Элементы.Производительность.ТекущиеДанные; + Если ТД = Неопределено Тогда Возврат; КонецЕсли; - Если Не ТаблицаОбновлена Или Не ДиаграммаОбновлена Тогда - Если Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаДиаграмма" Тогда - ДиаграммаОбновлена = Истина; - ИначеЕсли Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаТаблица" Тогда - ТаблицаОбновлена = Истина; - КонецЕсли; - ОбновитьПоказатели(); - КонецЕсли; + ИзменитьЦелевоеВремя(ТД.КлючеваяОперация, ТД.ЦелевоеВремя); + ОбновитьПоказатели(); КонецПроцедуры -/////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ КОМАНД +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура Обновить(Команда) - Если Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаРасшифровка" Тогда - Возврат; - КонецЕсли; - - Если Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаДиаграмма" Тогда - ДиаграммаОбновлена = Истина; - ТаблицаОбновлена = Ложь; - ИначеЕсли Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаТаблица" Тогда - ТаблицаОбновлена = Истина; - ДиаграммаОбновлена = Ложь; - КонецЕсли; - ОбновитьПоказатели(); КонецПроцедуры @@ -124,141 +120,72 @@ &НаКлиенте Процедура ПереместитьВверх(Команда) - Врем = Объект.Производительность; - ТекущийИндекс = Врем.Индекс(Элементы.Производительность.ТекущиеДанные); + ТД = Элементы.Производительность.ТекущиеДанные; + Если ТД = Неопределено Тогда + Возврат; + КонецЕсли; - Если Врем.Количество() <= 1 ИЛИ ТекущийИндекс = 0 ИЛИ - Врем[ТекущийИндекс].КлючеваяОперация = ОценкаПроизводительностиВызовСервера.ПолучитьПредопределенный() Тогда + Врем = Объект.Производительность; + ТекущийИндекс = Врем.Индекс(ТД); + + Если Врем.Количество() <= 1 ИЛИ + ТекущийИндекс = 0 ИЛИ + ТД.КлючеваяОперация = ОценкаПроизводительностиВызовСервераПолныеПрава.ПолучитьПредопределенный() + Тогда Возврат; КонецЕсли; - Врем.Сдвинуть(ТекущийИндекс, -1); + НаправлениеСдвига = -1; + ВыполнитьСдвигСтроки(НаправлениеСдвига, ТекущийИндекс); КонецПроцедуры &НаКлиенте Процедура ПереместитьВниз(Команда) - Врем = Объект.Производительность; - ТекущийИндекс = Врем.Индекс(Элементы.Производительность.ТекущиеДанные); + ТД = Элементы.Производительность.ТекущиеДанные; + Если ТД = Неопределено Тогда + Возврат; + КонецЕсли; - Если Врем.Количество() <= 1 ИЛИ ТекущийИндекс = Врем.Количество() - 1 ИЛИ - Врем[ТекущийИндекс + 1].КлючеваяОперация = ОценкаПроизводительностиВызовСервера.ПолучитьПредопределенный() Тогда + Врем = Объект.Производительность; + ТекущийИндекс = Врем.Индекс(ТД); + + Если Врем.Количество() <= 1 Или + ТекущийИндекс = Врем.Количество() - 1 Или + Врем[ТекущийИндекс + 1].КлючеваяОперация = ОценкаПроизводительностиВызовСервераПолныеПрава.ПолучитьПредопределенный() Или + ТД.КлючеваяОперация = ОценкаПроизводительностиВызовСервераПолныеПрава.ПолучитьПредопределенный() + Тогда Возврат; КонецЕсли; - Врем.Сдвинуть(ТекущийИндекс, 1); + НаправлениеСдвига = 1; + ВыполнитьСдвигСтроки(НаправлениеСдвига, ТекущийИндекс); КонецПроцедуры &НаКлиенте Процедура ЭкспортДанных(Команда) - РасширениеПодключено = Истина; - #Если ВебКлиент Тогда - Если Не ПодключитьРасширениеРаботыСФайлами() Тогда - - РасширениеПодключено = Ложь; - - КодВозврата = Вопрос("Расширение для работы с файлами не установлено, установить? - |""Да"" - Выполнить попытку установки расширения - |""Нет"" - Экспорт будет выполнен стандартными средствами браузера - |""Отмена"" - Отменить экспорт", РежимДиалогаВопрос.ДаНетОтмена); - Если КодВозврата = КодВозвратаДиалога.Да Тогда - - УстановитьРасширениеРаботыСФайлами(); - Если Не ПодключитьРасширениеРаботыСФайлами() Тогда - КодВозврата = Вопрос("Выполнить стандартными средствами браузера?", РежимДиалогаВопрос.ДаНет); - Если КодВозврата = КодВозвратаДиалога.Нет Тогда - Возврат; - КонецЕсли; - Иначе - РасширениеПодключено = Истина; - КонецЕсли; - - ИначеЕсли КодВозврата = КодВозвратаДиалога.Отмена Тогда - - Возврат; - - КонецЕсли; - - КонецЕсли; - #КонецЕсли - - Если РасширениеПодключено Тогда - ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - ДиалогВыбора.Фильтр = "ZIP архив(*.zip)|*.zip"; - ДиалогВыбора.Расширение = "zip"; - Если НЕ ДиалогВыбора.Выбрать() Тогда - Возврат; - КонецЕсли; - - ИмяФайла = ДиалогВыбора.ПолноеИмяФайла; - КонецЕсли; - - Состояние("Экспорт данных..."); - АдресВХранилище = ПоместитьВоВременноеХранилище("", ЭтаФорма.УникальныйИдентификатор); - #Если ВебКлиент Тогда - Если РасширениеПодключено Тогда - ОписаниеПередаваемогоФайла = Новый ОписаниеПередаваемогоФайла; - ОписаниеПередаваемогоФайла.Хранение = АдресВХранилище; - ОписаниеПередаваемогоФайла.Имя = ИмяФайла; - - МассивФайлов = Новый Массив; - МассивФайлов.Добавить(ОписаниеПередаваемогоФайла); - - ОписаниеВызова = Новый Массив; - ОписаниеВызова.Добавить("ПолучитьФайлы"); - ОписаниеВызова.Добавить(МассивФайлов); - ОписаниеВызова.Добавить(""); - ОписаниеВызова.Добавить(""); - ОписаниеВызова.Добавить(Ложь); - - Вызовы = Новый Массив; - Вызовы.Добавить(ОписаниеВызова); - - ЗапроситьРазрешениеПользователя(Вызовы); - КонецЕсли; - #КонецЕсли + ИмяФайла = ""; + РезультатВызова = ОценкаПроизводительностиКлиент.ВызватьДиалогРаботыСФайлами( + РежимДиалогаВыбораФайла.Сохранение, + ИмяФайла, + АдресВХранилище, + "zip"); - КлючевыеОперации = Новый Массив; - ЦелевоеВремя = Новый Массив; + Если Не РезультатВызова Тогда + Возврат; + КонецЕсли; - Для Каждого СтрокаТЗ Из Объект.Производительность Цикл - - Если СтрокаТЗ.КлючеваяОперация = ОценкаПроизводительностиВызовСервера.ПолучитьПредопределенный() Тогда - Продолжить; - КонецЕсли; - - КлючевыеОперации.Добавить(СтрокаТЗ.КлючеваяОперация); - ЦелевоеВремя.Добавить(СтрокаТЗ.ЦелевоеВремя); - - КонецЦикла; - - МассивКО = Новый Массив; - МассивКО.Добавить(КлючевыеОперации); - МассивКО.Добавить(ЦелевоеВремя); - - ПараметрыЭкспорта = Новый Структура("ДатаНачала, ДатаОкончания, Шаг, МассивКО"); - ПараметрыЭкспорта.ДатаНачала = Объект.Период.ДатаНачала; - ПараметрыЭкспорта.ДатаОкончания = Объект.Период.ДатаОкончания; - ПараметрыЭкспорта.Шаг = Строка(Объект.Шаг); - ПараметрыЭкспорта.МассивКО = МассивКО; + ПараметрыЭкспорта = ПодготовитьПараметрыЭкспорта(); + Состояние(НСтр("ru = 'Экспорт данных...'")); Экспортировать(АдресВХранилище, ПараметрыЭкспорта); - #Если ВебКлиент Тогда - Если РасширениеПодключено Тогда - ПолучитьФайлы(МассивФайлов, , ,Ложь); - Иначе - ПолучитьФайл(АдресВХранилище, , Истина); - КонецЕсли; - #Иначе - ПолучитьФайл(АдресВХранилище, ИмяФайла, Ложь); - Предупреждение("Экспорт завершен."); - #КонецЕсли + СохранитьФайлНаКлиент(АдресВХранилище, ИмяФайла); КонецПроцедуры @@ -269,17 +196,76 @@ КонецПроцедуры +&НаКлиенте +Процедура УказатьAPDEX(Команда) + + СтрокаТЧ = Объект.Производительность.НайтиПоИдентификатору(Элементы.Производительность.ТекущаяСтрока); + Элемент = Элементы.Производительность.ТекущийЭлемент; + + Если Лев(Элемент.Имя, 18) <> "Производительность" Или + СтрокаТЧ.КлючеваяОперация = ОценкаПроизводительностиВызовСервераПолныеПрава.ПолучитьПредопределенный() + Тогда + Возврат; + КонецЕсли; + + Если СтрокаТЧ[Элемент.Имя] = 0 Тогда + Предупреждение(НСтр("ru = 'Отсутствуют замеры производительности. + |Рассчетать целевое время невозможно.'")); + Возврат; + КонецЕсли; + + ЗначениеAPDEX = 0; + Если Не ВвестиЧисло(ЗначениеAPDEX, НСтр("ru = 'Введите желаемое значение APDEX'"), 3, 2) Тогда + Возврат; + КонецЕсли; + + Если 0 > ЗначениеAPDEX Или ЗначениеAPDEX > 1 Тогда + Предупреждение(НСтр("ru = 'Введен неправильный показатель APDEX. + |Допустимые значения от 0 до 1.'")); + Возврат; + КонецЕсли; + + ЗначениеAPDEX = ?(ЗначениеAPDEX = 0, 0.001, ЗначениеAPDEX); + СтрокаТЧ[Элемент.Имя] = ЗначениеAPDEX; + + ИндексПериода = Число(Сред(Элемент.Имя, 19)); + ЦелевоеВремя = РассчетатьЦелевоеВремя(СтрокаТЧ.КлючеваяОперация, ЗначениеAPDEX, ИндексПериода); + + СтрокаТЧ.ЦелевоеВремя = ЦелевоеВремя; + ЦелевоеВремяПриИзменении(Элемент); + +КонецПроцедуры -/////////////////////////////////////////////////////////////////////// -// ОСНОВНЫЕ ПРОЦЕДУРЫ (СЕРВЕР) +&НаКлиенте +Процедура УстановитьОтбор(Команда) + + ЗначенияОтбора = ОткрытьФормуМодально("Обработка.ОценкаПроизводительности.Форма.ФормаОтбора"); + + Если ЗначенияОтбора = Неопределено Тогда + Возврат; + КонецЕсли; + + ОбновитьПоказатели(ЗначенияОтбора); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Процедура рассчитывает показатели производительности // &НаСервере -Процедура ОбновитьПоказатели() +Процедура ОбновитьПоказатели(ЗначенияОтбора = Неопределено) - ОбработкаОбъект = РеквизитФормыВЗначение("Объект", Тип("ОбработкаОбъект.ОценкаПроизводительности")); - УстановитьСоответствиеОбъектаИРеквизитаФормы(ОбработкаОбъект, "Объект"); + Если Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаДиаграмма" Тогда + ДиаграммаОбновлена = Истина; + ТаблицаОбновлена = Ложь; + ИначеЕсли Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаТаблица" Тогда + ТаблицаОбновлена = Истина; + ДиаграммаОбновлена = Ложь; + КонецЕсли; + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); Если Не НастройкаВыполнена() Тогда Возврат; @@ -287,180 +273,222 @@ // Получение итоговой ТЗ которая будет выведена пользователю ТЗ = ОбработкаОбъект.ПолучитьПоказателиПроизводительности(); - Если ТЗ = Неопределено Тогда СП = Новый СообщениеПользователю; - СП.ПутьКДанным = "Объект"; - СП.Поле = "Период"; - СП.Текст = "Период установлен не правильно."; + СП.Поле = "Объект.ДатаОкончания"; + СП.Текст = НСтр("ru = 'Период установлен не верно.'"); СП.Сообщить(); Возврат; КонецЕсли; - Если НЕ ЗначениеЗаполнено(ТЗ) Тогда - Возврат; + Если ТЗ.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если ЗначенияОтбора <> Неопределено Тогда + УстановитьОтборТЗ(ТЗ, ЗначенияОтбора); КонецЕсли; Если Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаДиаграмма" Тогда - Диаграмма = Объект.Диаграмма; - - Диаграмма.Обновление = Ложь; - - Диаграмма.АвтоМаксимальноеЗначение = Ложь; - Диаграмма.АвтоМинимальноеЗначение = Ложь; - Диаграмма.МаксимальноеЗначение = 1; - Диаграмма.МинимальноеЗначение = 0; - Диаграмма.БазовоеЗначение = 0; - Диаграмма.ПропускатьБазовоеЗначение = Истина; - - Диаграмма.Очистить(); - Элементы.Диаграмма.Заголовок = "Диаграмма производительности с " + Формат(Объект.Период.ДатаНачала, "ДФ=dd.MM.yyyy") + - " по " + Формат(Объект.Период.ДатаОкончания, "ДФ=dd.MM.yyyy") + " - " + "шаг: " + Объект.Шаг; - - ТЗ.Колонки.Удалить(1); // НомерСтроки - ТЗ.Колонки.Удалить(1); // ЦелевоеВремя - - Для Каждого СтрокаТЗ Из ТЗ Цикл - - Серия = Диаграмма.Серии.Добавить(СтрокаТЗ.КлючеваяОперация); - Серия.Текст = СтрокаТЗ.КлючеваяОперация; - - КонецЦикла; - - ТЗ.Колонки.Удалить(0); // КлючеваяОперация - - Для Каждого КолонкаТЗ Из ТЗ.Колонки Цикл - - Точка = Диаграмма.Точки.Добавить(КолонкаТЗ.Имя); - Точка.Текст = ?(Объект.Шаг = "Час", Лев(КолонкаТЗ.Заголовок, 2), КолонкаТЗ.Заголовок); //Для отображения только часов если шаг Час - Строка = 0; - Столбец = ТЗ.Колонки.Индекс(КолонкаТЗ); - Для Каждого Серия Из Диаграмма.Серии Цикл - - ЗначениеТочки = ТЗ[Строка][Столбец]; - Диаграмма.УстановитьЗначение(Точка, Серия, ?(ЗначениеТочки = 0.001 ИЛИ ЗначениеТочки = 0, ЗначениеТочки, ЗначениеТочки - 0.001)); - Строка = Строка + 1; - - КонецЦикла; - - КонецЦикла; - - Диаграмма.ТипДиаграммы = ТипДиаграммы.График; - - Диаграмма.Обновление = Истина; + ОбновитьДиаграмму(ТЗ); ИначеЕсли Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаТаблица" Тогда - - РеквизитыОбъекта = ПолучитьРеквизиты("Объект.Производительность"); - УдаляемыеРеквизиты = ПолучитьУдаляемыеРеквизиты(РеквизитыОбъекта); - - Если НЕ УдаляемыеРеквизиты.Количество() = ТЗ.Колонки.Количество() - 3 Тогда - - // Удаление колонок из табличной части "Производительность" - Для а = 0 По УдаляемыеРеквизиты.Количество() - 1 Цикл - - Элемент = Элементы.Найти(Сред(УдаляемыеРеквизиты[а], 27)); - Если Элемент <> Неопределено Тогда - Элементы.Удалить(Элемент); - КонецЕсли; - - КонецЦикла; - - ДобавляемыеРеквизиты = ПолучитьДобавляемыеРеквизиты(ТЗ.Колонки); - ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты); - - // Добавление колонок в табличную часть "Производительность" - РеквизитыОбъекта = ПолучитьРеквизиты("Объект.Производительность"); - Для Каждого РеквизитОбъекта Из РеквизитыОбъекта Цикл - - ИмяРеквизита = РеквизитОбъекта.Имя; - Если Лев(ИмяРеквизита, 18) = "Производительность" Тогда - Элемент = Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), Элементы.Производительность); - Элемент.Вид = ВидПоляФормы.ПолеВвода; - Элемент.ПутьКДанным = "Объект.Производительность." + ИмяРеквизита; - Элемент.Заголовок = РеквизитОбъекта.Заголовок; - Элемент.ГоризонтальноеПоложениеВШапке = ГоризонтальноеПоложениеЭлемента.Центр; - Элемент.Формат = "ЧЦ=5; ЧДЦ=2; ЧН="; - Элемент.ТолькоПросмотр = Истина; - КонецЕсли; - - КонецЦикла; - - // Формирование списков полей для условного оформления - ПоляОтбора = Новый Массив; - ПоляОформления = Новый Массив; - - Для Каждого КолонкаТЗ Из ТЗ.Колонки Цикл - - Если ТЗ.Колонки.Индекс(КолонкаТЗ) <= 2 Тогда - Продолжить; - КонецЕсли; - ПоляОтбора.Добавить("Объект.Производительность." + КолонкаТЗ.Имя); - ПоляОформления.Добавить(КолонкаТЗ.Имя); - - КонецЦикла; - - УстановитьУсловноеОформлениеТЧ(ПоляОтбора, ПоляОформления, УсловноеОформление); - Иначе - а = -1; - Для Каждого Элемент Из Элементы.Производительность.ПодчиненныеЭлементы Цикл - - а = а + 1; - // Пропускаем первые 3 элемента, чтобы не менять заголовки у колонок "Ключевая операция", "Приоритет" и "Целевое время" - Если а < 3 Тогда - Продолжить; - КонецЕсли; - Элемент.Заголовок = ТЗ.Колонки[а].Заголовок; - - КонецЦикла; - КонецЕсли; + ОбработатьРеквизитыОбъекта(ТЗ.Колонки); Объект.Производительность.Загрузить(ТЗ); КонецЕсли; КонецПроцедуры - -/////////////////////////////////////////////////////////////////////// -// РАБОТА С НАСТРОЙКАМИ (СЕРВЕР) - -// Процедура сохраняет настройки ТЧ "Производительность" +// Вычисляет целевое время для указанного значения APDEX +// +// Параметры: +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, ключевая операция, для которой следует рассчетать целевое время +// ЗначениеAPDEX - Число, APDEX, для которого необходимо подобрать целевое время +// ИндексПериода - Число, индекс периода, для которого будет вычислено целевое время +// +// Возвращаемое значение: +// Число - целевое время, при котором APDEX будет равен указанному значению // &НаСервере -Процедура СохранитьНастройкиТЧ() +Функция РассчетатьЦелевоеВремя(КлючеваяОперация, ЗначениеAPDEX, ИндексПериода) - Настройка = Новый Соответствие; - Настройка.Вставить("Объект.Производительность", Объект.Производительность.Выгрузить()); - Попытка - ХранилищеНастроекДанныхФорм.Сохранить(КлючОбъекта, КлючНастройки, Настройка); - Исключение - КонецПопытки; + ТЗ = ПолучитьТЗДляВычисленияAPDEX(); + СтрокаТЗ = ТЗ.Добавить(); + СтрокаТЗ.КлючеваяОперация = КлючеваяОперация; + СтрокаТЗ.Приоритет = 1; + + ЭтотОбъект = РеквизитФормыВЗначение("Объект"); + + ШагЧисло = 0; + КоличествоШагов = 0; + Если Не ЭтотОбъект.ПолучитьПериодичность(ШагЧисло, КоличествоШагов) Тогда + Возврат Ложь; + КонецЕсли; + + НачалоПериода = Объект.ДатаНачала + (ШагЧисло * ИндексПериода); + ОкончаниеПериода = НачалоПериода + ШагЧисло - 1; + + ПараметрыВычисления = ЭтотОбъект.ПолучитьСтруктуруПараметров(); + ПараметрыВычисления.ШагЧисло = ШагЧисло; + ПараметрыВычисления.КоличествоШагов = 1; + ПараметрыВычисления.ДатаНачала = НачалоПериода; + ПараметрыВычисления.ДатаОкончания = ОкончаниеПериода; + ПараметрыВычисления.ВыводитьИтоги = Ложь; + + ЦелевоеВремя = 0.01; + ПредыдущеецелевоеВремя = ЦелевоеВремя; + ШагСекунд = 1; + Пока Истина Цикл + + ТЗ[0].ЦелевоеВремя = ЦелевоеВремя; + ПараметрыВычисления.ТЗ = ТЗ; + + ТЗРассчитанная = ЭтотОбъект.ПолучитьAPDEX(ПараметрыВычисления); + ЗначениеAPDEXРассчитанное = ТЗРассчитанная[0][3]; + + Если ЗначениеAPDEXРассчитанное < ЗначениеAPDEX Тогда + + ПредыдущеецелевоеВремя = ЦелевоеВремя; + ЦелевоеВремя = ЦелевоеВремя + ШагСекунд; + + ИначеЕсли ЗначениеAPDEXРассчитанное > ЗначениеAPDEX Тогда + + Если ШагСекунд = 0.01 Или ЦелевоеВремя = 0.01 Тогда + Прервать; + КонецЕсли; + + ШагСекунд = ШагСекунд / 10; + ЦелевоеВремя = ПредыдущееЦелевоеВремя + ШагСекунд; + + ИначеЕсли ЗначениеAPDEXРассчитанное = ЗначениеAPDEX Тогда + + Прервать; + + КонецЕсли; + + КонецЦикла; + + Возврат ЦелевоеВремя; + +КонецФункции + + +/////////////////////////////////////////////////////////////////////// +// Работа с формой (сервер) + +// Обрабатывает реквизиты табличной части "Производительность" +// +// Параметры: +// КолонкиТЗ - КоллекцияКолонокТаблицыЗначений, из них вычисляется какие реквизиты удалить, а какие оставить +// +&НаСервере +Процедура ОбработатьРеквизитыОбъекта(КолонкиТЗ) + + РеквизитыОбъекта = ПолучитьРеквизиты("Объект.Производительность"); + УдаляемыеРеквизиты = ПолучитьУдаляемыеРеквизиты(РеквизитыОбъекта); + + // Колонки "Ключевая операция", "Приоритет" и "Целевое время" + КоличествоПредопределенныхКолонок = 3; + + // Меняется состав колонок + Если УдаляемыеРеквизиты.Количество() <> (КолонкиТЗ.Количество() - КоличествоПредопределенныхКолонок) Тогда + + ИзменитьСоставРеквизитовОбъекта(КолонкиТЗ, УдаляемыеРеквизиты); + + // Формирование списков полей для условного оформления + ПоляОтбора = Новый Массив; + ПоляОформления = Новый Массив; + Для Каждого КолонкаТЗ Из КолонкиТЗ Цикл + Если КолонкиТЗ.Индекс(КолонкаТЗ) < КоличествоПредопределенныхКолонок Тогда + Продолжить; + КонецЕсли; + ПоляОтбора.Добавить("Объект.Производительность." + КолонкаТЗ.Имя); + ПоляОформления.Добавить(КолонкаТЗ.Имя); + КонецЦикла; + + УстановитьУсловноеОформлениеТЧ(ПоляОтбора, ПоляОформления, УсловноеОформление); + + // Меняются только заголовки колонок + Иначе + + Сч = -1; + Для Каждого Элемент Из Элементы.Производительность.ПодчиненныеЭлементы Цикл + Сч = Сч + 1; + // Пропускаем первые 3 элемента, чтобы не менять заголовки у колонок "Ключевая операция", "Приоритет" и "Целевое время" + Если Сч < КоличествоПредопределенныхКолонок Тогда + Продолжить; + КонецЕсли; + Элемент.Заголовок = КолонкиТЗ[Сч].Заголовок; + КонецЦикла; + + КонецЕсли; КонецПроцедуры - -/////////////////////////////////////////////////////////////////////// -// РАБОТА С ФОРМОЙ (СЕРВЕР) +// Изменяются реквизиты формы ненужные удаляются нужные добавляются +// +// Параметры: +// КолонкиТЗ - КоллекцияКолонокТаблицыЗначений, из них вычисляется какие реквизиты удалить, а какие оставить +// УдаляемыеРеквизиты - Массив, список полных имен удаляемых реквизитов +// имена в формате Объект.Производительность.ПроизводительностьN, где N номер +// +&НаСервере +Процедура ИзменитьСоставРеквизитовОбъекта(КолонкиТЗ, УдаляемыеРеквизиты) + + // Удаление колонок из табличной части "Производительность" + Для а = 0 По УдаляемыеРеквизиты.Количество() - 1 Цикл + + // Имена удаляемых реквизитов Объект.Производительность.ПроизводительностьN + // где N номер, это выражение получает строку вида ПроизводительностьN + Элемент = Элементы.Найти(Сред(УдаляемыеРеквизиты[а], 27)); + Если Элемент <> Неопределено Тогда + Элементы.Удалить(Элемент); + КонецЕсли; + + КонецЦикла; + + ДобавляемыеРеквизиты = ПолучитьДобавляемыеРеквизиты(КолонкиТЗ); + ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты); + + // Добавление колонок в табличную часть "Производительность" + РеквизитыОбъекта = ПолучитьРеквизиты("Объект.Производительность"); + Для Каждого РеквизитОбъекта Из РеквизитыОбъекта Цикл + + ИмяРеквизита = РеквизитОбъекта.Имя; + Если Лев(ИмяРеквизита, 18) = "Производительность" Тогда + Элемент = Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), Элементы.Производительность); + Элемент.Вид = ВидПоляФормы.ПолеВвода; + Элемент.ПутьКДанным = "Объект.Производительность." + ИмяРеквизита; + Элемент.Заголовок = РеквизитОбъекта.Заголовок; + Элемент.ГоризонтальноеПоложениеВШапке = ГоризонтальноеПоложениеЭлемента.Центр; + Элемент.Формат = "ЧЦ=5; ЧДЦ=2; ЧН="; + Элемент.ТолькоПросмотр = Истина; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры // Функция создает массив реквизитов формы(колонки ТЧ "Производительность"), которые надо добавить // // Параметры: -// ТЗ - ТаблицаЗначений, в которой находятся уже рассчитанные показатели проиозводительности +// КолонкиТЗ - КоллекцияКолонокТаблицыЗначений, список колонок, которые необходимо создать // // Возвращаемое значение: // Массив - Массив реквизтов формы // &НаСервереБезКонтекста -Функция ПолучитьДобавляемыеРеквизиты(ТЗКолонки) +Функция ПолучитьДобавляемыеРеквизиты(КолонкиТЗ) ДобавляемыеРеквизиты = Новый Массив; ТипЧисло63 = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(6, 3, ДопустимыйЗнак.Неотрицательный)); - Для Каждого КолонкаТЗ Из ТЗКолонки Цикл + Для Каждого КолонкаТЗ Из КолонкиТЗ Цикл - Если ТЗКолонки.Индекс(КолонкаТЗ) < 3 Тогда + Если КолонкиТЗ.Индекс(КолонкаТЗ) < 3 Тогда Продолжить; КонецЕсли; @@ -506,42 +534,62 @@ УсловноеОформление.Элементы.Очистить(); - // Чтобы у ключевой операции ОбщаяПроизводительностьСистемы небыло приоритета + // Убрать приоритет у ключевой операции ОбщаяПроизводительностьСистемы ЭлементОформления = УсловноеОформление.Элементы.Добавить(); - // Вид оформления ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", ""); - // Условие для оформления ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Производительность.КлючеваяОперация"); - ЭлементОтбора.ПравоеЗначение = ОценкаПроизводительностиВызовСервера.ПолучитьПредопределенный(); - + ЭлементОтбора.ПравоеЗначение = ОценкаПроизводительностиВызовСервераПолныеПрава.ПолучитьПредопределенный(); // Оформляемое поле ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); - ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("НомерСтроки"); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Приоритет"); - // Чтобы если целевое время не заполнено было отмечено у всех кроме ОбщаяПроизводительностьСистемы + // Только просмотр колонки Приоритет ЭлементОформления = УсловноеОформление.Элементы.Добавить(); + // Вид оформления + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + // Условие для оформления + ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Производительность.НомерСтроки"); + ЭлементОтбора.ПравоеЗначение = 0; + // Оформляемое поле + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Приоритет"); + // Только просмотр целевого времени у ключевой операции ОбщаяПроизводительностьСистемы + ЭлементОформления = УсловноеОформление.Элементы.Добавить(); + // Вид оформления + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + // Условие для оформления + ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Производительность.КлючеваяОперация"); + ЭлементОтбора.ПравоеЗначение = ОценкаПроизводительностиВызовСервераПолныеПрава.ПолучитьПредопределенный(); + // Оформляемое поле + ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ЦелевоеВремя"); + + // Отметка незаполненного целевого времени у всех кроме ОбщаяПроизводительностьСистемы + ЭлементОформления = УсловноеОформление.Элементы.Добавить(); // Вид оформления ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина); - // Условие для оформления ГруппаОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; - + // ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Производительность.КлючеваяОперация"); - ЭлементОтбора.ПравоеЗначение = ОценкаПроизводительностиВызовСервера.ПолучитьПредопределенный(); - + ЭлементОтбора.ПравоеЗначение = ОценкаПроизводительностиВызовСервераПолныеПрава.ПолучитьПредопределенный(); + // ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Производительность.ЦелевоеВремя"); ЭлементОтбора.ПравоеЗначение = 0; - // Оформляемое поле ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ЦелевоеВремя"); @@ -553,13 +601,14 @@ ЭлементОформления = УсловноеОформление.Элементы.Добавить(); - ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 255, 255)); - + // Вид оформления + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", "Н/Д"); + // Условие для оформления ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПоляОтбора[а]); ЭлементОтбора.ПравоеЗначение = 0; - + // Оформляемое поле ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ПоляОформления[а]); @@ -575,19 +624,16 @@ // Вид оформления ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", КлючЗначение.Значение.Цвет); - // Условие для оформления ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно; ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПоляОтбора[а]); ЭлементОтбора.ПравоеЗначение = КлючЗначение.Значение.От; - // Условие для оформления ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше; ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПоляОтбора[а]); ЭлементОтбора.ПравоеЗначение = КлючЗначение.Значение.До; - // Оформляемое поле ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ПоляОформления[а]); @@ -598,9 +644,96 @@ КонецПроцедуры +// Выполняет обновление диаграммы +// +// Параметры: +// ТЗ - ТаблицаЗначений, данные, по которым будет обновлена диаграмма +// +&НаСервере +Процедура ОбновитьДиаграмму(ТЗ) + + Диаграмма = Объект.Диаграмма; + + Диаграмма.Обновление = Ложь; + + Диаграмма.АвтоМаксимальноеЗначение = Ложь; + Диаграмма.АвтоМинимальноеЗначение = Ложь; + Диаграмма.МаксимальноеЗначение = 1; + Диаграмма.МинимальноеЗначение = 0; + Диаграмма.БазовоеЗначение = 0; + Диаграмма.ПропускатьБазовоеЗначение = Истина; + + Диаграмма.Очистить(); + + ТекстЗаголовка = НСтр("ru = 'Диаграмма производительности с %1 по %2 - шаг: %3'"); + ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "%1", Формат(Объект.ДатаНачала, "ДФ=dd.MM.yyyy")); + ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "%2", Формат(Объект.ДатаОкончания, "ДФ=dd.MM.yyyy")); + ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "%3", Строка(Объект.Шаг)); + Элементы.Диаграмма.Заголовок = ТекстЗаголовка; + + ТЗ.Колонки.Удалить(1); // Приоритет + ТЗ.Колонки.Удалить(1); // ЦелевоеВремя + + Для Каждого СтрокаТЗ Из ТЗ Цикл + + Серия = Диаграмма.Серии.Добавить(СтрокаТЗ.КлючеваяОперация); + Серия.Текст = СтрокаТЗ.КлючеваяОперация; + + КонецЦикла; + + ТЗ.Колонки.Удалить(0); // КлючеваяОперация + + Для Каждого КолонкаТЗ Из ТЗ.Колонки Цикл + + Точка = Диаграмма.Точки.Добавить(КолонкаТЗ.Имя); + Точка.Текст = ?(Объект.Шаг = "Час", Лев(КолонкаТЗ.Заголовок, 2), КолонкаТЗ.Заголовок); //Для отображения только часов если шаг Час + Строка = 0; + Столбец = ТЗ.Колонки.Индекс(КолонкаТЗ); + Для Каждого Серия Из Диаграмма.Серии Цикл + + ЗначениеТочки = ТЗ[Строка][Столбец]; + Диаграмма.УстановитьЗначение(Точка, Серия, ?(ЗначениеТочки = 0.001 ИЛИ ЗначениеТочки = 0, ЗначениеТочки, ЗначениеТочки - 0.001)); + Строка = Строка + 1; + + КонецЦикла; + + КонецЦикла; + + Диаграмма.ТипДиаграммы = ТипДиаграммы.График; + + Диаграмма.Обновление = Истина; + +КонецПроцедуры + /////////////////////////////////////////////////////////////////////// -// ЭКСПОРТ ДАННЫХ +// Экспорт данных + +&НаКлиенте +Функция ПодготовитьПараметрыЭкспорта() + + КлючевыеОперации = Новый Массив; + + ОбщаяПроизводительность = ОценкаПроизводительностиВызовСервераПолныеПрава.ПолучитьПредопределенный(); + Для Каждого СтрокаТЗ Из Объект.Производительность Цикл + + Если СтрокаТЗ.КлючеваяОперация = ОбщаяПроизводительность Тогда + Продолжить; + КонецЕсли; + + КлючевыеОперации.Добавить(СтрокаТЗ.КлючеваяОперация); + + КонецЦикла; + + ПараметрыЭкспорта = Новый Структура("ДатаНачала, ДатаОкончания, Шаг, МассивКО"); + ПараметрыЭкспорта.ДатаНачала = Объект.ДатаНачала; + ПараметрыЭкспорта.ДатаОкончания = Объект.ДатаОкончания; + ПараметрыЭкспорта.Шаг = Строка(Объект.Шаг); + ПараметрыЭкспорта.МассивКО = КлючевыеОперации; + + Возврат ПараметрыЭкспорта; + +КонецФункции // Экспортировать данные замеров на указанном интервале // @@ -609,7 +742,7 @@ ВременныйКаталог = КаталогВременныхФайлов() + Строка(Новый УникальныйИдентификатор); ИмяФайла = ВременныйКаталог + "/exp.zip"; - ИмяФайлаОписания = ВременныйКаталог + "/Description.txt"; + ИмяФайлаОписания = ВременныйКаталог + "/Description.xml"; ИмяФайлаНастроек = ВременныйКаталог + "/Settings.xml"; СоздатьКаталог(ВременныйКаталог); @@ -678,11 +811,8 @@ ЗаписьXML.ОткрытьФайл(ИмяВременногоФайла); ЗаписьXML.ЗаписатьОбъявлениеXML(); - ЗаписьXML.ЗаписатьНачалоЭлемента("НаборЗаписей"); ЗаписатьXML(ЗаписьXML, НаборЗаписейЗамеры); - ЗаписьXML.ЗаписатьКонецЭлемента(); - КонецПроцедуры // ЭкспортироватьИнтервал() // Получить набор записей регистра @@ -698,26 +828,41 @@ &НаСервереБезКонтекста Функция ПолучитьНаборЗаписейЗамерыВремени(Начало, Конец, МассивКО) - НаборЗаписей = РегистрыСведений.ЗамерыВремени.СоздатьНаборЗаписей(); + МетаданныеРегистра = Метаданные.РегистрыСведений.ЗамерыВремени; + + ТекстЗапроса = + "ВЫБРАТЬ"; + Для Каждого Измерение Из МетаданныеРегистра.Измерения Цикл + ТекстЗапроса = ТекстЗапроса + " + | Замеры." + Измерение.Имя + " КАК " + Измерение.Имя + ","; + КонецЦикла; + Для Каждого Ресурс Из МетаданныеРегистра.Ресурсы Цикл + ТекстЗапроса = ТекстЗапроса + " + | Замеры." + Ресурс.Имя + " КАК " + Ресурс.Имя + ","; + КонецЦикла; + Для Каждого Реквизит Из МетаданныеРегистра.Реквизиты Цикл + ТекстЗапроса = ТекстЗапроса + " + | Замеры." + Реквизит.Имя + " КАК " + Реквизит.Имя + ","; + КонецЦикла; + + // Убираем последнюю запятую + ТекстЗапроса = Лев(ТекстЗапроса, СтрДлина(ТекстЗапроса) - 1); + + ТекстЗапроса = ТекстЗапроса + " + |ИЗ + | " + МетаданныеРегистра.ПолноеИмя() + " КАК Замеры + |ГДЕ + | Замеры.ДатаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания + | И Замеры.КлючеваяОперация В(&МассивКО)"; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаНачала", Начало); Запрос.УстановитьПараметр("ДатаОкончания", Конец); Запрос.УстановитьПараметр("МассивКО", МассивКО); - - Запрос.Текст = - "ВЫБРАТЬ - | Замеры.ДатаЗамера КАК Период, - | Замеры.КлючеваяОперация КАК КлючеваяОперация, - | Замеры.НомерСеанса КАК НомерСеанса, - | Замеры.ВремяВыполнения КАК ВремяВыполнения - |ИЗ - | РегистрСведений.ЗамерыВремени КАК Замеры - |ГДЕ - | Замеры.ДатаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания - | И Замеры.КлючеваяОперация В(&МассивКО)"; - + Запрос.Текст = ТекстЗапроса; Результат = Запрос.Выполнить(); + + НаборЗаписей = РегистрыСведений[МетаданныеРегистра.Имя].СоздатьНаборЗаписей(); Если Результат.Пустой() Тогда Возврат НаборЗаписей; КонецЕсли; @@ -726,10 +871,15 @@ Пока Выборка.Следующий() Цикл Запись = НаборЗаписей.Добавить(); - Запись.ДатаЗамера = Выборка.Период; - Запись.КлючеваяОперация = Выборка.КлючеваяОперация; - Запись.НомерСеанса = Выборка.НомерСеанса; - Запись.ВремяВыполнения = Выборка.ВремяВыполнения; + Для Каждого Измерение Из МетаданныеРегистра.Измерения Цикл + Запись[Измерение.Имя] = Выборка[Измерение.Имя]; + КонецЦикла; + Для Каждого Ресурс Из МетаданныеРегистра.Ресурсы Цикл + Запись[Ресурс.Имя] = Выборка[Ресурс.Имя]; + КонецЦикла; + Для Каждого Реквизит Из МетаданныеРегистра.Реквизиты Цикл + Запись[Реквизит.Имя] = Выборка[Реквизит.Имя]; + КонецЦикла; КонецЦикла; @@ -747,16 +897,25 @@ &НаСервереБезКонтекста Процедура ЗаполнитьОписание(ИмяФайлаОписания, Начало, Конец, МассивКО) - Текст = Новый ЗаписьТекста(ИмяФайлаОписания); - Текст.ЗаписатьСтроку("Версия : 1.0.0.1"); - Текст.ЗаписатьСтроку("Интервал : с " + Формат(Начало - Дата(1984,03,26,06,24,21), "ЧГ=0") + - " по " + Формат(Конец - Дата(1984,03,26,06,24,21), "ЧГ=0")); - Текст.ЗаписатьСтроку("Дата экспорта: " + ТекущаяДата()); - Для а = 0 По МассивКО[0].Количество() - 1 Цикл - Текст.ЗаписатьСтроку(МассивКО[0][а]); + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.ОткрытьФайл(ИмяФайлаОписания); + + ЗаписьXML.ЗаписатьОбъявлениеXML(); + ЗаписьXML.ЗаписатьНачалоЭлемента("CommonSettings"); + + ЗаписьXML.ЗаписатьАтрибут("Version", "1.0.0.3"); + ЗаписьXML.ЗаписатьАтрибут("BeginDate", Строка(Начало)); + ЗаписьXML.ЗаписатьАтрибут("EndDate", Строка(Конец)); + ЗаписьXML.ЗаписатьАтрибут("ExportDate", Строка(ТекущаяДатаСеанса())); + + Для а = 0 По МассивКО.Количество() - 1 Цикл + ЗаписьXML.ЗаписатьНачалоЭлемента("KeyOperation"); + ЗаписьXML.ЗаписатьАтрибут("name", Строка(МассивКО[а])); + ЗаписьXML.ЗаписатьКонецЭлемента(); КонецЦикла; - Текст.Закрыть(); + ЗаписьXML.ЗаписатьКонецЭлемента(); + ЗаписьXML.Закрыть(); КонецПроцедуры // ЗаполнитьОписание() @@ -766,23 +925,20 @@ Процедура ЗаполнитьНастройки(ИмяФайлаНастроек, Начало, Конец, Шаг, МассивКО) ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.ОткрытьФайл(ИмяФайлаНастроек); ЗаписьXML.ЗаписатьОбъявлениеXML(); - ЗаписьXML.ЗаписатьНачалоЭлемента("ОсновныеНастройки"); - ЗаписатьXML(ЗаписьXML, Начало); - ЗаписатьXML(ЗаписьXML, Конец); - ЗаписатьXML(ЗаписьXML, Шаг); + ЗаписьXML.ЗаписатьНачалоЭлемента("CommonSettings"); - ЗаписьXML.ЗаписатьНачалоЭлемента("НастройкиТаблицы"); - ЗаписьXML.ЗаписатьАтрибут("КоличествоСтрок", Формат(МассивКО[0].Количество(), "ЧГ=0")); + ЗаписьXML.ЗаписатьАтрибут("BeginDate", Строка(Начало)); + ЗаписьXML.ЗаписатьАтрибут("EndDate", Строка(Конец)); + ЗаписьXML.ЗаписатьАтрибут("Step", Шаг); - Для а = 0 По МассивКО[0].Количество() - 1 Цикл - - ЗаписатьXML(ЗаписьXML, МассивКО[0][а]); - ЗаписатьXML(ЗаписьXML, МассивКО[1][а]); - + ЗаписьXML.ЗаписатьНачалоЭлемента("TableSettings"); + ЗаписьXML.ЗаписатьАтрибут("RowCount", Формат(МассивКО.Количество(), "ЧГ=0")); + + Для Сч = 0 По МассивКО.Количество() - 1 Цикл + ЗаписатьXML(ЗаписьXML, МассивКО[Сч].ПолучитьОбъект()); КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); @@ -791,44 +947,93 @@ КонецПроцедуры +// Записывает файл из хранилища по указанному пути. +&НаКлиенте +Процедура СохранитьФайлНаКлиент(Знач Адрес, Знач ИмяФайла) + + #Если Не ВебКлиент Тогда + + ПолучитьФайл(Адрес, ИмяФайла, Ложь); + Предупреждение(НСтр("ru = 'Экспорт завершен.'")); + + #Иначе + + Если ИмяФайла <> Неопределено Тогда + ОписаниеПередаваемогоФайла = Новый ОписаниеПередаваемогоФайла; + ОписаниеПередаваемогоФайла.Хранение = Адрес; + ОписаниеПередаваемогоФайла.Имя = ИмяФайла; + МассивФайлов = Новый Массив; + МассивФайлов.Добавить(ОписаниеПередаваемогоФайла); + + ПолучитьФайлы(МассивФайлов, , ,Ложь); + Иначе + // Интерактивное получение с запросом имени файла + // зависит от настроек браузера + ПолучитьФайл(Адрес, , Истина); + КонецЕсли; + + #КонецЕсли + +КонецПроцедуры + /////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Прочие процедуры и функции -// Процедура при первом открытии офрмы обработки заполняет -// ТЧ "Производительность" из справочника "КлючевыеОперации" +// Сдвигает строки табличной части и меняет приоритеты ключевых операций +// +// Параметры: +// НаправлениеСдвига - Число, +// -1, сдвиг вверх +// 1, сдвиг вниз +// ТекущийИндекс - Число, индекс сдвигаемой строки +// +&НаКлиенте +Процедура ВыполнитьСдвигСтроки(НаправлениеСдвига, ТекущийИндекс) + + Врем = Объект.Производительность; + + Приоритет1 = Врем[ТекущийИндекс].Приоритет; + Приоритет2 = Врем[ТекущийИндекс + НаправлениеСдвига].Приоритет; + + ОбментяьПриоритеты( + Врем[ТекущийИндекс].КлючеваяОперация, + Приоритет1, + Врем[ТекущийИндекс + НаправлениеСдвига].КлючеваяОперация, + Приоритет2); + + Врем[ТекущийИндекс].Приоритет = Приоритет2; + Врем[ТекущийИндекс + НаправлениеСдвига].Приоритет = Приоритет1; + + Врем.Сдвинуть(ТекущийИндекс, НаправлениеСдвига); + +КонецПроцедуры + +// Выполняет обмен приоритетами ключевых операций +// +// Параметры: +// КлючеваяОперация1 - СправочникСсылка.КлючевыеОперации +// Приоритет1 - Число, будет присвоен КлючеваяОперация2 +// КлючеваяОперация2 - СправочникСсылка.КлючевыеОперации +// Приоритет2 - Число, будет присвоен КлючеваяОперация1 // &НаСервереБезКонтекста -Функция ЗагрузитьКО() +Процедура ОбментяьПриоритеты(КлючеваяОперация1, Приоритет1, КлючеваяОперация2, Приоритет2) - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ОПС", ОценкаПроизводительностиВызовСервера.ПолучитьПредопределенный()); + НачатьТранзакцию(); - Запрос.Текст = - "ВЫБРАТЬ - | КлючевыеОперации.Ссылка КАК КлючеваяОперация, - | ВЫБОР - | КОГДА КлючевыеОперации.Ссылка = &ОПС - | ТОГДА ""я"" - | ИНАЧЕ КлючевыеОперации.Порядок - | КОНЕЦ КАК Порядок, - | 0 КАК ЦелевоеВремя - |ИЗ - | Перечисление.КлючевыеОперации КАК КлючевыеОперации - | - |УПОРЯДОЧИТЬ ПО - | Порядок, - | КлючеваяОперация - |АВТОУПОРЯДОЧИВАНИЕ"; - Результат = Запрос.Выполнить(); + ОбъектКлючевойОперации = ОценкаПроизводительностиВызовСервераПолныеПрава.НачатьИзменениеОбъекта(КлючеваяОперация1); + ОбъектКлючевойОперации.Приоритет = Приоритет2; + ОбъектКлючевойОперации.ДополнительныеСвойства.Вставить(ОценкаПроизводительностиВызовСервераПолныеПрава.НеПроверятьПриоритет()); + ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьИзменениеОбъекта(ОбъектКлючевойОперации); - Если Результат.Пустой() Тогда - Возврат Новый ТаблицаЗначений; - КонецЕсли; + ОбъектКлючевойОперации = ОценкаПроизводительностиВызовСервераПолныеПрава.НачатьИзменениеОбъекта(КлючеваяОперация2); + ОбъектКлючевойОперации.Приоритет = Приоритет1; + ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьИзменениеОбъекта(ОбъектКлючевойОперации); - Возврат Результат.Выгрузить(); + ЗафиксироватьТранзакцию(); -КонецФункции +КонецПроцедуры // Процедура открывает форму выбора справочника КлючевыеОперации // и устанавливает отбор, чтобы в списке небыло операций которые уже выбраны @@ -836,44 +1041,37 @@ &НаКлиенте Процедура ОткрытьФормуВыбора() - Элемент = Элементы.Производительность; ТЧ = Объект.Производительность; Отбор = Новый Массив; Для а = 0 По ТЧ.Количество() -1 Цикл - Отбор.Добавить(ТЧ[а].КлючеваяОперация); - КонецЦикла; Структура = Новый Структура("Отбор"); Структура.Отбор = Отбор; - ТекущаяСтрока = Элементы.Производительность.ТекущиеДанные; - КлючеваяОперация = ОткрытьФормуМодально("Перечисление.КлючевыеОперации.ФормаВыбора", Структура, ЭтаФорма); + РезультатВыбора = ОткрытьФормуМодально("Справочник.КлючевыеОперации.ФормаВыбора", Структура, ЭтаФорма); - Если КлючеваяОперация = Неопределено Тогда - Врем = Элементы.Производительность.ТекущиеДанные; - Если Врем = Неопределено ИЛИ ЗначениеЗаполнено(Врем.КлючеваяОперация) Тогда + ТекущаяСтрока = Элементы.Производительность.ТекущиеДанные; + Если РезультатВыбора = Неопределено Тогда + Если ТекущаяСтрока = Неопределено ИЛИ ЗначениеЗаполнено(ТекущаяСтрока.КлючеваяОперация) Тогда Возврат; КонецЕсли; - ТЧ.Удалить(Врем.НомерСтроки - 1); + ТЧ.Удалить(ТекущаяСтрока.НомерСтроки - 1); Возврат; КонецЕсли; - ПредопределенныйЭлемент = ОценкаПроизводительностиВызовСервера.ПолучитьПредопределенный(); - ТекущаяСтрока.КлючеваяОперация = КлючеваяОперация; - ТекущаяСтрока.ЦелевоеВремя = 0; + ПредопределенныйЭлемент = ОценкаПроизводительностиВызовСервераПолныеПрава.ПолучитьПредопределенный(); + ТекущаяСтрока.КлючеваяОперация = РезультатВыбора.КлючеваяОперация; + ТекущаяСтрока.ЦелевоеВремя = РезультатВыбора.ЦелевоеВремя; + ТекущаяСтрока.Приоритет = РезультатВыбора.Приоритет; - Если КлючеваяОперация = ПредопределенныйЭлемент Тогда - ТекущийИндекс = ТекущаяСтрока.НомерСтроки - 1; + ТЧ.Сортировать("Приоритет"); + МассивСтрок = ТЧ.НайтиСтроки(Новый Структура("КлючеваяОперация", ПредопределенныйЭлемент)); + Если МассивСтрок.Количество() > 0 Тогда + ТекущийИндекс = ТЧ.Индекс(МассивСтрок[0]); ТЧ.Сдвинуть(ТекущийИндекс, ТЧ.Количество() - 1 - ТекущийИндекс); - Иначе - МассивСтрок = ТЧ.НайтиСтроки(Новый Структура("КлючеваяОперация", ПредопределенныйЭлемент)); - Если ЗначениеЗаполнено(МассивСтрок) Тогда - ТекущийИндекс = ТЧ.Индекс(МассивСтрок[0]); - ТЧ.Сдвинуть(ТекущийИндекс, ТЧ.Количество() - 1 - ТекущийИндекс); - КонецЕсли; КонецЕсли; КонецПроцедуры @@ -906,6 +1104,66 @@ КонецПроцедуры +// Вычисляет точные дату начала и окончания на выбранном отрезкпе +// +// Параметры: +// ДатаНачала [OUT] - Дата, дата начала выбранного периода +// ДатаОкончания [OUT] - Дата, дата окончания выбранного периода +// ИндексПериода [IN] - Число, индекс выбранного периода +// +// Возвращаемое значение: +// Булево - +// Истина, даты рассчитаны +// Ложь, даты не рассчитаны +// +&НаСервере +Функция ПолучитьДатыОтрезка(ДатаНачала, ДатаОкончания, ИндексПериода) + + ЭтотОбъект = РеквизитФормыВЗначение("Объект"); + + ШагЧисло = 0; + КоличествоШагов = 0; + Если Не ЭтотОбъект.ПолучитьПериодичность(ШагЧисло, КоличествоШагов) Тогда + Возврат Ложь; + КонецЕсли; + + Если КоличествоШагов <= ИндексПериода Тогда + ВызватьИсключение НСтр("ru = 'Количество шагов не может быть меньше индекса.'"); + КонецЕсли; + + ДатаНачала = Объект.ДатаНачала + (ШагЧисло * ИндексПериода); + ДатаОкончания = ДатаНачала + ШагЧисло - 1; + + Возврат Истина; + +КонецФункции + +// Создает таблицу значения, которая необходима для рассчета APDEX +// +// Возвращаемое значение: +// ТаблицаЗначений - таблица значений со структурой необходимой для рассчета APDEX +// +&НаСервереБезКонтекста +Функция ПолучитьТЗДляВычисленияAPDEX() + + ТЗ = Новый ТаблицаЗначений; + ТЗ.Колонки.Добавить( + "КлючеваяОперация", + Новый ОписаниеТипов("СправочникСсылка.КлючевыеОперации") + ); + ТЗ.Колонки.Добавить( + "Приоритет", + Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 0, ДопустимыйЗнак.Неотрицательный)) + ); + ТЗ.Колонки.Добавить( + "ЦелевоеВремя", + Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Неотрицательный)) + ); + + Возврат ТЗ; + +КонецФункции + // Функция возвращает цвет значения Неприемлимо // // Возвращаемое значение: @@ -1025,12 +1283,12 @@ Для Каждого СтрокаТЧ Из Объект.Производительность Цикл Если СтрокаТЧ.ЦелевоеВремя = 0 - И СтрокаТЧ.КлючеваяОперация <> ОценкаПроизводительностиВызовСервера.ПолучитьПредопределенный() + И СтрокаТЧ.КлючеваяОперация <> ОценкаПроизводительностиВызовСервераПолныеПрава.ПолучитьПредопределенный() Тогда СП = Новый СообщениеПользователю; СП.ПутьКДанным = "Объект"; СП.Поле = "Производительность[" + Объект.Производительность.Индекс(СтрокаТЧ) + "].ЦелевоеВремя"; - СП.Текст = "Целевое время обязательно должно быть заполнено."; + СП.Текст = НСтр("ru = 'Целевое время обязательно должно быть заполнено.'"); СП.Сообщить(); Выполнена = Ложь; @@ -1043,4 +1301,115 @@ КонецФункции +// Процедура при первом открытии офрмы обработки заполняет +// ТЧ "Производительность" из справочника "КлючевыеОперации" +// +&НаСервереБезКонтекста +Функция ЗагрузитьКО() + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ОПС", ОценкаПроизводительностиВызовСервераПолныеПрава.ПолучитьПредопределенный()); + + Запрос.Текст = + "ВЫБРАТЬ + | КлючевыеОперации.Ссылка КАК КлючеваяОперация, + | ВЫБОР + | КОГДА КлючевыеОперации.Ссылка = &ОПС + | ТОГДА ""я"" + | ИНАЧЕ КлючевыеОперации.Приоритет + | КОНЕЦ КАК Приоритет, + | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя + |ИЗ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + | + |УПОРЯДОЧИТЬ ПО + | Приоритет + |АВТОУПОРЯДОЧИВАНИЕ"; + Результат = Запрос.Выполнить(); + + Если Результат.Пустой() Тогда + Возврат Новый ТаблицаЗначений; + КонецЕсли; + + Возврат Результат.Выгрузить(); + +КонецФункции + +// Меняет целевое время ключевой операции +// +// Параметры: +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, операция, у которой необходимо изменить целеове время +// ЦелевоеВремя - Число, новое целевое время +// +&НаСервереБезКонтекста +Процедура ИзменитьЦелевоеВремя(КлючеваяОперация, ЦелевоеВремя) + + КлючеваяОперацияОбъект = ОценкаПроизводительностиВызовСервераПолныеПрава.НачатьИзменениеОбъекта(КлючеваяОперация); + КлючеваяОперацияОбъект.ЦелевоеВремя = ЦелевоеВремя; + ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьИзменениеОбъекта(КлючеваяОперацияОбъект); + +КонецПроцедуры + +// Удаляет из таблицы значений строки не подходящие под отбор +// +// Параметры: +// ТЗ - ТаблицаЗначений, таблица, которую нужно отфильтровать +// ЗначенияОтбора - Массив, массив строк со значениями отбора +// +&НаСервереБезКонтекста +Процедура УстановитьОтборТЗ(ТЗ, ЗначенияОтбора) + + Если ЗначенияОтбора.Направление > 0 Тогда + Если ВРег(ЗначенияОтбора.Состояние) = "ХОРОШО" Тогда + Предел = 0.93; + ИначеЕсли ВРег(ЗначенияОтбора.Состояние) = "УДОВЛЕТВОРИТЕЛЬНО" Тогда + Предел = 0.84; + ИначеЕсли ВРег(ЗначенияОтбора.Состояние) = "ПЛОХО" Тогда + Предел = 0.69; + КонецЕсли; + ИначеЕсли ЗначенияОтбора.Направление < 0 Тогда + Если ВРег(ЗначенияОтбора.Состояние) = "ХОРОШО" Тогда + Предел = 0.85; + ИначеЕсли ВРег(ЗначенияОтбора.Состояние) = "УДОВЛЕТВОРИТЕЛЬНО" Тогда + Предел = 0.7; + ИначеЕсли ВРег(ЗначенияОтбора.Состояние) = "ПЛОХО" Тогда + Предел = 0.5; + КонецЕсли; + КонецЕсли; + + Сч = 0; + Удалять = Ложь; + Пока Сч < ТЗ.Количество() Цикл + + Для Каждого КолонкаТЗ Из ТЗ.Колонки Цикл + Если (Лев(КолонкаТЗ.Имя, 18) <> "Производительность") Или (ТЗ[Сч][КолонкаТЗ.Имя] = 0) Тогда + Продолжить; + КонецЕсли; + + Если ЗначенияОтбора.Направление > 0 Тогда + Если ТЗ[Сч][КолонкаТЗ.Имя] > Предел Тогда + Удалять = Ложь; + Прервать; + Иначе + Удалять = Истина; + КонецЕсли; + ИначеЕсли ЗначенияОтбора.Направление < 0 Тогда + Если ТЗ[Сч][КолонкаТЗ.Имя] < Предел Тогда + Удалять = Ложь; + Прервать; + Иначе + Удалять = Истина; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если Удалять Тогда + ТЗ.Удалить(Сч); + Иначе + Сч = Сч + 1; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Form.form new file mode 100644 index 000000000..aeb618e26 --- /dev/null +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Form.form @@ -0,0 +1,462 @@ + + + + Группа1 + 20 + + Надпись1 + 14 + + <key>ru</key> + <value>Отобрать</value> + + true + true + + true + + + Надпись1 + + + Надпись1РасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + Надпись1КонтекстноеМеню + 15 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Направление + 12 + true + true + + true + + + Направление + + None + + OnChange + НаправлениеПриИзменении + + + НаправлениеРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + НаправлениеКонтекстноеМеню + 13 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Лучше + + + 1 + + + + + ru + Хуже + + + -1 + + + Vertical + + + + Надпись2 + 16 + + <key>ru</key> + <value>чем</value> + + true + true + + true + + + Надпись2 + + + Надпись2РасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + Надпись2КонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Состояние + 18 + true + true + + true + + + Состояние + + None + + OnChange + СостояниеПриИзменении + + + СостояниеРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + СостояниеКонтекстноеМеню + 19 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Хорошо + + + Хорошо + + + + + ru + Удовлетворительно + + + Удовлетворительно + + + + + ru + Плохо + + + Плохо + + + Vertical + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 24 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Условие + 21 + true + true + + true + + + Условие + + + УсловиеРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + УсловиеКонтекстноеМеню + 22 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + + ОК + 1 + true + true + + true + + + ОКРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + Left + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.ОценкаПроизводительности + + + true + + + true + +
    true
    +
    + + Направление + + <key>ru</key> + <value>Направление</value> + + 7 + + Number + + 15 + + + + true + + + true + + + + Надпись1 + + <key>ru</key> + <value>Надпись1</value> + + 2 + + String + + 1 + + + + true + + + true + + + + Надпись2 + + <key>ru</key> + <value>Надпись2</value> + + 3 + + String + + 1 + + + + true + + + true + + + + Состояние + + <key>ru</key> + <value>Состояние</value> + + 4 + + String + + 20 + + + + true + + + true + + + + Условие + + <key>ru</key> + <value>Условие</value> + + 5 + + String + + 20 + + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + Auto + Auto + + + + + + +
    diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Module.bsl new file mode 100644 index 000000000..61528bfce --- /dev/null +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Module.bsl @@ -0,0 +1,59 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура НаправлениеПриИзменении(Элемент) + + СформироватьУсловие(); + +КонецПроцедуры + +&НаКлиенте +Процедура СостояниеПриИзменении(Элемент) + + СформироватьУсловие(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ОК(Команда) + + Структура = Новый Структура("Направление, Состояние"); + Структура.Направление = Направление; + Структура.Состояние = Состояние; + + ЭтаФорма.Закрыть(Структура); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура СформироватьУсловие() + + Если Направление > 0 Тогда + Если ВРег(Состояние) = "ХОРОШО" Тогда + Предел = 0.93; + ИначеЕсли ВРег(Состояние) = "УДОВЛЕТВОРИТЕЛЬНО" Тогда + Предел = 0.84; + ИначеЕсли ВРег(Состояние) = "ПЛОХО" Тогда + Предел = 0.69; + КонецЕсли; + Условие = "apdex > " + Предел; + ИначеЕсли Направление < 0 Тогда + Если ВРег(Состояние) = "ХОРОШО" Тогда + Предел = 0.85; + ИначеЕсли ВРег(Состояние) = "УДОВЛЕТВОРИТЕЛЬНО" Тогда + Предел = 0.7; + ИначеЕсли ВРег(Состояние) = "ПЛОХО" Тогда + Предел = 0.5; + КонецЕсли; + Условие = "apdex < " + Предел; + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl index 5639c7a96..e69769463 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС //Функция формирует таблицу значений которая будет выведена пользователю // @@ -6,80 +8,54 @@ // Функция ПолучитьПоказателиПроизводительности() Экспорт - ПараметрыЗапроса = Новый Структура("ШагЧисло, КоличествоШагов"); + ПараметрыВычисления = ПолучитьСтруктуруПараметров(); - РазницаВремени = Период.ДатаОкончания - Период.ДатаНачала + 1; - - Если РазницаВремени <= 0 Тогда + ШагЧисло = 0; + КоличествоШагов = 0; + Если Не ПолучитьПериодичность(ШагЧисло, КоличествоШагов) Тогда Возврат Неопределено; КонецЕсли; - //КоличествоШагов - целое число, округленное вверх - КоличествоШагов = 0; - Если Шаг = "Час" Тогда - ШагЧисло = 86400 / 24; - КоличествоШагов = РазницаВремени / ШагЧисло; - КоличествоШагов = Цел(КоличествоШагов) + ?(КоличествоШагов - Цел(КоличествоШагов) > 0, 1, 0); - ИначеЕсли Шаг = "День" Тогда - ШагЧисло = 86400; - КоличествоШагов = РазницаВремени / ШагЧисло; - КоличествоШагов = Цел(КоличествоШагов) + ?(КоличествоШагов - Цел(КоличествоШагов) > 0, 1, 0); - ИначеЕсли Шаг = "Неделя" Тогда - ШагЧисло = 86400 * 7; - КоличествоШагов = РазницаВремени / ШагЧисло; - КоличествоШагов = Цел(КоличествоШагов) + ?(КоличествоШагов - Цел(КоличествоШагов) > 0, 1, 0); - ИначеЕсли Шаг = "Месяц" Тогда - ШагЧисло = 86400 * 30; - ДатаНачала = КонецДня(Период.ДатаНачала); - Пока ДатаНачала < Период.ДатаОкончания Цикл - ДатаНачала = ДобавитьМесяц(ДатаНачала, 1); - КоличествоШагов = КоличествоШагов + 1; - КонецЦикла; + ПараметрыВычисления.ШагЧисло = ШагЧисло; + ПараметрыВычисления.КоличествоШагов = КоличествоШагов; + ПараметрыВычисления.ДатаНачала = ДатаНачала; + ПараметрыВычисления.ДатаОкончания = ДатаОкончания; + ПараметрыВычисления.ТЗ = Производительность.Выгрузить(, "КлючеваяОперация, Приоритет, ЦелевоеВремя"); + КОИтого = ОценкаПроизводительностиВызовСервераПолныеПрава.ПолучитьПредопределенный(); + Если КОИтого.Пустая() Или Производительность.Найти(КОИтого, "КлючеваяОперация") = Неопределено Тогда + ПараметрыВычисления.ВыводитьИтоги = Ложь Иначе - ШагЧисло = 0; - КоличествоШагов = 1; + ПараметрыВычисления.ВыводитьИтоги = Истина; КонецЕсли; - ПараметрыЗапроса.ШагЧисло = ШагЧисло; - ПараметрыЗапроса.КоличествоШагов = КоличествоШагов; - - Возврат ПолучитьAPDEX(ПараметрыЗапроса); + Возврат ПолучитьAPDEX(ПараметрыВычисления); КонецФункции // Функция динамически формирует запрос и получает APDEX // // Параметры: -// ПараметрыЗапроса - Структура, с полянми "НачПериода", "КонПериода" и -// "ТЗ", в ней находится список ключевых операций и целевые времена выполнения +// ПараметрыВычисления - Структура, см. ПолучитьСтруктуруПараметров() // // Возвращаемое значение: // ТаблицаЗначений - в таблице возвращается ключевая операция и // показатель производительности за определенный период времени // -Функция ПолучитьAPDEX(ПараметрыЗапроса) - - КОИтого = ОценкаПроизводительностиВызовСервера.ПолучитьПредопределенный(); - Если Не ЗначениеЗаполнено(КОИтого) Или Производительность.Найти(КОИтого, "КлючеваяОперация") = Неопределено Тогда - ВыводитьИтоги = Ложь - Иначе - ВыводитьИтоги = Истина; - КонецЕсли; - - ТЗ = Производительность.Выгрузить(, "КлючеваяОперация, НомерСтроки, ЦелевоеВремя"); +Функция ПолучитьAPDEX(ПараметрыВычисления) Экспорт + КОИтого = ОценкаПроизводительностиВызовСервераПолныеПрава.ПолучитьПредопределенный(); МВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ТЗ", ТЗ); - Запрос.УстановитьПараметр("НачПериода", Период.ДатаНачала); - Запрос.УстановитьПараметр("КонПериода", Период.ДатаОкончания); + Запрос.УстановитьПараметр("ТЗ", ПараметрыВычисления.ТЗ); + Запрос.УстановитьПараметр("НачПериода", ПараметрыВычисления.ДатаНачала); + Запрос.УстановитьПараметр("КонПериода", ПараметрыВычисления.ДатаОкончания); Запрос.УстановитьПараметр("КОИтого", КОИтого); Запрос.МенеджерВременныхТаблиц = МВТ; Запрос.Текст = "ВЫБРАТЬ | КлючевыеОперации.КлючеваяОперация КАК КлючеваяОперация, - | КлючевыеОперации.НомерСтроки КАК НомерСтроки, + | КлючевыеОперации.Приоритет КАК Приоритет, | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя |ПОМЕСТИТЬ КлючевыеОперации |ИЗ @@ -89,7 +65,7 @@ ТекстЗапроса = "ВЫБРАТЬ | КлючевыеОперации.КлючеваяОперация КАК КлючеваяОперация, - | КлючевыеОперации.НомерСтроки КАК Приоритет, + | КлючевыеОперации.Приоритет КАК Приоритет, | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя%Колонки% |ИЗ | КлючевыеОперации КАК КлючевыеОперации @@ -101,7 +77,7 @@ | |СГРУППИРОВАТЬ ПО | КлючевыеОперации.КлючеваяОперация, - | КлючевыеОперации.НомерСтроки, + | КлючевыеОперации.Приоритет, | КлючевыеОперации.ЦелевоеВремя |%Итоги%"; @@ -185,31 +161,31 @@ ЗаголовкиКолонок = Новый Массив; Колонки = ""; Итоги = ""; - НачПериода = Период.ДатаНачала; - Для а = 0 По ПараметрыЗапроса.КоличествоШагов - 1 Цикл + НачПериода = ПараметрыВычисления.ДатаНачала; + Для а = 0 По ПараметрыВычисления.КоличествоШагов - 1 Цикл - КонПериода = ?(а = ПараметрыЗапроса.КоличествоШагов - 1, Период.ДатаОкончания, НачПериода + ПараметрыЗапроса.ШагЧисло - 1); + КонПериода = ?(а = ПараметрыВычисления.КоличествоШагов - 1, ПараметрыВычисления.ДатаОкончания, НачПериода + ПараметрыВычисления.ШагЧисло - 1); Запрос.УстановитьПараметр("НачПериода" + а, НачПериода); Запрос.УстановитьПараметр("КонПериода" + а, КонПериода); ЗаголовкиКолонок.Добавить(ПолучитьЗаголовокКолонки(НачПериода)); - НачПериода = НачПериода + ПараметрыЗапроса.ШагЧисло; + НачПериода = НачПериода + ПараметрыВычисления.ШагЧисло; - Колонки = Колонки + ?(ВыводитьИтоги, ВыражениеДляИтогов, "") + Выражение; + Колонки = Колонки + ?(ПараметрыВычисления.ВыводитьИтоги, ВыражениеДляИтогов, "") + Выражение; Колонки = СтрЗаменить(Колонки, "%Номер%", а); - Если ВыводитьИтоги Тогда - Итоги = Итоги + Итог + ?(а = ПараметрыЗапроса.КоличествоШагов - 1, "", ","); + Если ПараметрыВычисления.ВыводитьИтоги Тогда + Итоги = Итоги + Итог + ?(а = ПараметрыВычисления.КоличествоШагов - 1, "", ","); Итоги = СтрЗаменить(Итоги, "%Номер%", а); КонецЕсли; КонецЦикла; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%Колонки%", Колонки); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%Итоги%", ?(ВыводитьИтоги, "ИТОГИ" + Итоги, "")); - ТекстЗапроса = ТекстЗапроса + ?(ВыводитьИтоги, ПоОбщие, ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%Итоги%", ?(ПараметрыВычисления.ВыводитьИтоги, "ИТОГИ" + Итоги, "")); + ТекстЗапроса = ТекстЗапроса + ?(ПараметрыВычисления.ВыводитьИтоги, ПоОбщие, ""); Запрос.Текст = ТекстЗапроса; Результат = Запрос.Выполнить(); @@ -220,7 +196,7 @@ ТЗ = Результат.Выгрузить(); ТЗ.Сортировать("Приоритет"); - Если ВыводитьИтоги Тогда + Если ПараметрыВычисления.ВыводитьИтоги Тогда ТЗ[0][0] = КОИтого; ВычислитьИтоговыйAPDEX(ТЗ); ТЗ.Сдвинуть(0, ТЗ.Количество() - 1); @@ -252,6 +228,58 @@ КонецФункции +// Вычисляет размер и количество шагов на заднном интервале +// +// Параметры: +// ШагЧисло [OUT] - Число, количество секунд, которое надо прибавить к дате начала чтобы выполнить следующий шаг +// КоличествоШагов [OUT] - Число, количество шагов на заданном интервале +// +// Возвращаемое значение: +// Булево - +// Истина, параметры рассчитаны +// Ложь, параметры не рассчитаны +// +Функция ПолучитьПериодичность(ШагЧисло, КоличествоШагов) Экспорт + + РазницаВремени = ДатаОкончания - ДатаНачала + 1; + + Если РазницаВремени <= 0 Тогда + Возврат Ложь; + КонецЕсли; + + //КоличествоШагов - целое число, округленное вверх + КоличествоШагов = 0; + Если Шаг = "Час" Тогда + ШагЧисло = 86400 / 24; + КоличествоШагов = РазницаВремени / ШагЧисло; + КоличествоШагов = Цел(КоличествоШагов) + ?(КоличествоШагов - Цел(КоличествоШагов) > 0, 1, 0); + ИначеЕсли Шаг = "День" Тогда + ШагЧисло = 86400; + КоличествоШагов = РазницаВремени / ШагЧисло; + КоличествоШагов = Цел(КоличествоШагов) + ?(КоличествоШагов - Цел(КоличествоШагов) > 0, 1, 0); + ИначеЕсли Шаг = "Неделя" Тогда + ШагЧисло = 86400 * 7; + КоличествоШагов = РазницаВремени / ШагЧисло; + КоличествоШагов = Цел(КоличествоШагов) + ?(КоличествоШагов - Цел(КоличествоШагов) > 0, 1, 0); + ИначеЕсли Шаг = "Месяц" Тогда + ШагЧисло = 86400 * 30; + Врем = КонецДня(ДатаНачала); + Пока Врем < ДатаОкончания Цикл + Врем = ДобавитьМесяц(Врем, 1); + КоличествоШагов = КоличествоШагов + 1; + КонецЦикла; + Иначе + ШагЧисло = 0; + КоличествоШагов = 1; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Процедура рассчитывает итоговое значение APDEX // // Параметры: @@ -265,7 +293,12 @@ ИндексКолонкиПриоритет = 1; ИндексПоследнейСтроки = ТЗ.Количество() - 1; ИндексПоследнейКолонки = ТЗ.Колонки.Количество() - 1; - МинимальныйПриоритет = ИндексПоследнейСтроки; + МинимальныйПриоритет = ТЗ[ИндексПоследнейСтроки][ИндексКолонкиПриоритет]; + + Если МинимальныйПриоритет < 1 Тогда + Сообщить(НСтр("ru = 'Неверно заолнены приоритеты. Рассчет итогового APDEX невозможен.'")); + Возврат; + КонецЕсли; Колонка = ИндексНачальнойКолонки; Пока Колонка < ИндексПоследнейКолонки Цикл @@ -291,7 +324,13 @@ Н = ТЗ.Итог(ТЗ.Колонки[Колонка].Имя); НС = ТЗ.Итог(ТЗ.Колонки[Колонка + 1].Имя); НТ = ТЗ.Итог(ТЗ.Колонки[Колонка + 2].Имя); - ИтоговыйAPDEX = ?(Н = 0, 0, (НС + НТ / 2) / Н); + Если Н = 0 Тогда + ИтоговыйAPDEX = 0; + ИначеЕсли НС = 0 И НТ = 0 И Н <> 0 Тогда + ИтоговыйAPDEX = 0.001; + Иначе + ИтоговыйAPDEX = (НС + НТ / 2) / Н; + КонецЕсли; ТЗ[ИндексСтрокиИтогов][Колонка + 3] = ИтоговыйAPDEX; Колонка = Колонка + 4; @@ -300,6 +339,34 @@ КонецПроцедуры +// Создает структуру параметров необходимую для рассчета APDEX +// +// Возвращаеоме значение: +// Структура - +// ШагЧисло - Число, указывается размер шага в секундах +// КоличествоШагов - Число, количество шагов в периоде +// ДатаНачала - Дата, дата начала замеров +// ДатаОкнчания - Дата, дата окончания замеров +// ТЗ - ТаблицаЗначений, +// КлючеваяОперация - СправочникСсылка.КлючевыеОперации, ключевая операция +// НомерСтроки - Число, приоритет ключевой операции +// ЦелевоеВремя - Число, целевое время ключевой операции +// ВыводитьИтоги - Булево, +// Истина, вычислять итоговую производительность +// Ложь, не вычислять итоговую производительность +// +Функция ПолучитьСтруктуруПараметров() Экспорт + + Возврат Новый Структура( + "ШагЧисло," + + "КоличествоШагов," + + "ДатаНачала," + + "ДатаОкончания," + + "ТЗ," + + "ВыводитьИтоги"); + +КонецФункции + Функция ПолучитьЗаголовокКолонки(НП) Если Шаг = "Час" Тогда diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo b/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo index c9e3f02b7..6a2871ab8 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo @@ -16,14 +16,14 @@ ru - - Период + + Диаграмма ru - Период + Диаграмма - StandardPeriod + Chart @@ -43,14 +43,28 @@ - - Диаграмма + + ДатаНачала ru - Диаграмма + Дата начала - Chart + Date + + + + + + + ДатаОкончания + + ru + Дата окончания + + + Date + @@ -80,7 +94,7 @@ Ключевая операция - EnumRef.КлючевыеОперации + CatalogRef.КлючевыеОперации @@ -105,6 +119,23 @@ + + Приоритет + + ru + Приоритет + + + Number + + 15 + true + + + + + + Форма @@ -115,7 +146,25 @@ PersonalComputer MobileDevice - + + ИсторияВыполнения + + ru + История выполнения + + PersonalComputer + MobileDevice + + + ФормаОтбора + + ru + Форма отбора + + PersonalComputer + MobileDevice + + НастройкаПодсистемы ru diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form index 26fbc78ba..365784341 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form @@ -234,6 +234,9 @@ true false false + + Style.ПоясняющийТекст + Left @@ -423,7 +426,7 @@ ВыполнитьПереносВерсийВТома <key>ru</key> - <value>Выполнить перенос файлов в тома</value> + <value>Перенести файлы в тома</value> 1 diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl index 3c9a63836..14621df4b 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl @@ -17,12 +17,12 @@ Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ - | ЕСТЬNULL(СУММА(ВерсииФайлов.Размер), 0) КАК Размер - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.ТипХраненияФайла = &ТипХраненияФайла"; + "ВЫБРАТЬ + | ЕСТЬNULL(СУММА(ВерсииФайлов.Размер), 0) КАК Размер + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | ВерсииФайлов.ТипХраненияФайла = &ТипХраненияФайла"; Запрос.УстановитьПараметр("ТипХраненияФайла", Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе); Результат = Запрос.Выполнить(); @@ -43,12 +43,12 @@ Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ - | КОЛИЧЕСТВО(*) КАК Количество - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.ТипХраненияФайла = &ТипХраненияФайла"; + "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | ВерсииФайлов.ТипХраненияФайла = &ТипХраненияФайла"; Запрос.УстановитьПараметр("ТипХраненияФайла", Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе); Результат = Запрос.Выполнить(); @@ -71,14 +71,14 @@ Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ - | ВерсииФайлов.Ссылка КАК Ссылка, - | ВерсииФайлов.ПолноеНаименование КАК ПолноеНаименование, - | ВерсииФайлов.Размер КАК Размер - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.ТипХраненияФайла = &ТипХраненияФайла"; + "ВЫБРАТЬ + | ВерсииФайлов.Ссылка КАК Ссылка, + | ВерсииФайлов.ПолноеНаименование КАК ПолноеНаименование, + | ВерсииФайлов.Размер КАК Размер + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | ВерсииФайлов.ТипХраненияФайла = &ТипХраненияФайла"; Запрос.УстановитьПараметр("ТипХраненияФайла", Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе); Результат = Запрос.Выполнить(); @@ -94,34 +94,24 @@ КонецФункции -&НаСервере -//Есть ли хоть один том хранения файлов -Функция ЕстьТомаХраненияФайлов() - - УстановитьПривилегированныйРежим(Истина); - - ТипХраненияФайлов = ФайловыеФункции.ПолучитьТипХраненияФайлов(); - - Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - Возврат Истина; // тут не проверяем наличие томов - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - |ИЗ - | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов - |ГДЕ - | ТомаХраненияФайлов.ПометкаУдаления = ЛОЖЬ"; - - РезультатЗапроса = Запрос.Выполнить(); - Возврат Не РезультатЗапроса.Пустой(); - -КонецФункции - &НаКлиенте Процедура ВыполнитьПереносФайловВТома(Команда) + Если ФайловыеФункции.ПолучитьТипХраненияФайлов() <> ТипХраненияВТомах Тогда + Предупреждение(НСтр("ru = 'Не установлен тип хранения файлов ""В томах на диске""'")); + Возврат; + КонецЕсли; + + Если Не ФайловыеФункции.ЕстьТомаХраненияФайлов() Тогда + Предупреждение(НСтр("ru = 'Нет ни одного тома для размещения файлов'")); + Возврат; + КонецЕсли; + + Если ЧислоВерсийВБазе = 0 Тогда + Предупреждение(НСтр("ru = 'Нет ни одного файла в информационной базе'")); + Возврат; + КонецЕсли; + Результат = Вопрос( НСтр("ru = 'Выполнить перенос файлов в информационной базе в тома хранения файлов? | Эта операция может занять продолжительное время.'"), @@ -131,16 +121,6 @@ Возврат; КонецЕсли; - Если ФайловыеФункции.ПолучитьТипХраненияФайлов() <> ТипХраненияВТомах Тогда - Предупреждение(НСтр("ru = 'Не установлена настройка ""Хранить файлы в томах на диске""'")); - Возврат; - КонецЕсли; - - Если Не ЕстьТомаХраненияФайлов() Тогда - Предупреждение(НСтр("ru = 'Нет ни одного тома для размещения файлов'")); - Возврат; - КонецЕсли; - Состояние(НСтр("ru = 'Выполняется получение списка файлов...'")); МассивВерсий = ПолучитьМассивВерсийВБазе(); @@ -150,6 +130,9 @@ ЧислоВерсийВПакете = 10; ПакетВерсий = Новый Массив; + МассивФайловСОшибками = Новый Массив; + ОбработкаПрервана = Ложь; + Для Каждого ВерсияСтруктура Из МассивВерсий Цикл Прогресс = 0; @@ -162,16 +145,28 @@ ПакетВерсий.Добавить(ВерсияСтруктура); Если ПакетВерсий.Количество() >= ЧислоВерсийВПакете Тогда - ЧислоПеренесенныхВПакете = ПеренестиМассивВерсийВТом(ПакетВерсий); + ЧислоПеренесенныхВПакете = ПеренестиМассивВерсийВТом(ПакетВерсий, МассивФайловСОшибками); + + Если ЧислоПеренесенныхВПакете = 0 И ПакетВерсий.Количество() = ЧислоВерсийВПакете Тогда + ОбработкаПрервана = Истина; // весь пакет не смогли перенести - прекращаем операцию + Прервать; + КонецЕсли; + ЧислоПеренесенных = ЧислоПеренесенных + ЧислоПеренесенныхВПакете; ПакетВерсий.Очистить(); + КонецЕсли; НомерЦикла = НомерЦикла + 1; КонецЦикла; Если ПакетВерсий.Количество() <> 0 Тогда - ЧислоПеренесенныхВПакете = ПеренестиМассивВерсийВТом(ПакетВерсий); + ЧислоПеренесенныхВПакете = ПеренестиМассивВерсийВТом(ПакетВерсий, МассивФайловСОшибками); + + Если ЧислоПеренесенныхВПакете = 0 Тогда + ОбработкаПрервана = Истина; // весь пакет не смогли перенести - прекращаем операцию + КонецЕсли; + ЧислоПеренесенных = ЧислоПеренесенных + ЧислоПеренесенныхВПакете; ПакетВерсий.Очистить(); КонецЕсли; @@ -180,16 +175,35 @@ РазмерВерсийВБазеВБайтах = ПолучитьРазмерВерсийВБазе(); РазмерВерсийВБазе = РазмерВерсийВБазеВБайтах / 1048576; - СтрокаСообщения - = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Завершен перенос файлов в тома. Перенесено файлов: %1'"), - ЧислоПеренесенных); - Предупреждение(СтрокаСообщения); + Если ЧислоПеренесенных <> 0 Тогда + СтрокаСообщения + = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Завершен перенос файлов в тома. Перенесено файлов: %1'"), + ЧислоПеренесенных); + Предупреждение(СтрокаСообщения); + КонецЕсли; + + Если МассивФайловСОшибками.Количество() <> 0 Тогда + + Пояснение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Количество ошибок при переносе: %1'"), + МассивФайловСОшибками.Количество()); + + Если ОбработкаПрервана Тогда + Пояснение = НСтр("ru = 'Не удалось перенести ни одного файла из пакета. Перенос прерван.'"); + КонецЕсли; + + ПараметрыФормы = Новый Структура("МассивФайловСОшибками, Пояснение", МассивФайловСОшибками, Пояснение); + ОткрытьФорму("Обработка.ПереносФайловВТома.Форма.ФормаОтчета", ПараметрыФормы); + + КонецЕсли; + + Закрыть(); КонецПроцедуры &НаСервере -Функция ПеренестиМассивВерсийВТом(ПакетВерсий) +Функция ПеренестиМассивВерсийВТом(ПакетВерсий, МассивФайловСОшибками) УстановитьПривилегированныйРежим(Истина); @@ -198,7 +212,7 @@ Для Каждого ВерсияСтруктура Из ПакетВерсий Цикл - Если ПеренестиВерсиюВТом(ВерсияСтруктура, МаксимальныйРазмерФайла) Тогда + Если ПеренестиВерсиюВТом(ВерсияСтруктура, МаксимальныйРазмерФайла, МассивФайловСОшибками) Тогда ЧислоОбработанных = ЧислоОбработанных + 1; КонецЕсли; @@ -210,13 +224,16 @@ &НаСервере // переносит одну версию в том -Функция ПеренестиВерсиюВТом(ВерсияСтруктура, МаксимальныйРазмерФайла) +Функция ПеренестиВерсиюВТом(ВерсияСтруктура, МаксимальныйРазмерФайла, МассивФайловСОшибками) Перем СсылкаНаТом; + КодВозврата = Истина; + ВерсияСсылка = ВерсияСтруктура.Ссылка; ФайлСсылка = ВерсияСсылка.Владелец; Размер = ВерсияСтруктура.Размер; + ИмяДляЖурнала = ""; Если Размер > МаксимальныйРазмерФайла Тогда @@ -298,32 +315,37 @@ Исключение ОтменитьТранзакцию(); ИнформацияОбОшибке = ИнформацияОбОшибке(); - Сообщить(КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + СтруктураОшибки = Новый Структура("ИмяФайла, Ошибка, Версия", + ИмяДляЖурнала, КраткоеПредставлениеОшибки(ИнформацияОбОшибке), ВерсияСсылка); + МассивФайловСОшибками.Добавить(СтруктураОшибки); ЗаписьЖурналаРегистрации("Ошибка переноса версии файла в том: " + ИмяДляЖурнала, УровеньЖурналаРегистрации.Информация, , ФайлСсылка, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + КодВозврата = Ложь; КонецПопытки; РазблокироватьДанныеДляРедактирования(ФайлСсылка); РазблокироватьДанныеДляРедактирования(ВерсияСсылка); - Возврат Истина; + Возврат КодВозврата; КонецФункции &НаКлиенте Процедура ПриОткрытии(Отказ) - Если ФайловыеФункции.ПолучитьТипХраненияФайлов() <> ТипХраненияВТомах Тогда - Предупреждение(НСтр("ru = 'Не установлена настройка ""Хранить файлы в томах на диске""'")); + Если Не ФайловыеФункции.ПолучитьКонстантуХранитьФайлыВТомахНаДиске() Тогда + Предупреждение(НСтр("ru = 'Не установлен тип хранения файлов ""В томах на диске""'")); Отказ = Истина; Возврат; КонецЕсли; - Если Не ЕстьТомаХраненияФайлов() Тогда + Если Не ФайловыеФункции.ЕстьТомаХраненияФайлов() Тогда Предупреждение(НСтр("ru = 'Нет ни одного тома для размещения файлов'")); Отказ = Истина; Возврат; diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Form.form b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Form.form new file mode 100644 index 000000000..0b6e44755 --- /dev/null +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Form.form @@ -0,0 +1,167 @@ + + + + <key>ru</key> + <value>Отчет об ошибках переноса в тома</value> + + + Пояснение + 4 + true + true + + true + + + Пояснение + + None + + ПояснениеРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ПояснениеКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + 2 + true + false + + System.DefaultGUIFont + true + false + false + false + + + + + Отчет + 2 + true + true + + true + + + Отчет + + None + + ОтчетРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + + ОтчетКонтекстноеМеню + 3 + true + + SpreadsheetDocumentField + Enter + true + Left + true + Left + + 50 + true + 10 + true + true + true + true + true + Special + ScrollAlways + ScrollAlways + Auto + true + true + true + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + 95 + 20 + DontBlock + true + true + Vertical + true + true + UseIfNecessary + auto + true + + Отчет + + <key>ru</key> + <value>Отчет</value> + + 1 + + SpreadsheetDocument + + + true + + + true + + + + + Пояснение + + <key>ru</key> + <value>Пояснение</value> + + 2 + + String + + + + true + + + true + + + + + + + diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Module.bsl b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Module.bsl new file mode 100644 index 000000000..581dcba10 --- /dev/null +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/ФормаОтчета/Module.bsl @@ -0,0 +1,30 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Пояснение = Параметры.Пояснение; + + ТабДок = Новый ТабличныйДокумент; + ТабМакет = Обработки.ПереносФайловВТома.ПолучитьМакет("МакетОтчета"); + + ОбластьЗаголовок = ТабМакет.ПолучитьОбласть("Заголовок"); + ОбластьЗаголовок.Параметры.Описание = "Файлы с ошибками:"; + ТабДок.Вывести(ОбластьЗаголовок); + + ОбластьСтрока = ТабМакет.ПолучитьОбласть("Строка"); + + Для Каждого Выборка Из Параметры.МассивФайловСОшибками Цикл + ОбластьСтрока.Параметры.Название = Выборка.ИмяФайла; + ОбластьСтрока.Параметры.Версия = Выборка.Версия; + ОбластьСтрока.Параметры.Ошибка = Выборка.Ошибка; + ТабДок.Вывести(ОбластьСтрока); + КонецЦикла; + + Отчет.Вывести(ТабДок); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Templates/МакетОтчета/Template.mxlx b/SSL/src/DataProcessors/ПереносФайловВТома/Templates/МакетОтчета/Template.mxlx new file mode 100644 index 000000000..62fd49bd6 --- /dev/null +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Templates/МакетОтчета/Template.mxlx @@ -0,0 +1,125 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 3 + + 0 + + 1 + + + + 1 + + 2 + + + + + 9bb67b5f-5e3e-459e-98c5-618e04892d9b + 1 + + 0 + + 3 + + + + + 1 + + 9bb67b5f-5e3e-459e-98c5-618e04892d9b + + + 4 + Описание + + + + + + 2 + + 5 + + + 6 + Название + Версия + + + + + 7 + Ошибка + + + + + 0 + + + + + true + 8 + 3 + 3 + + Заголовок + + Rows + 1 + 1 + -1 + -1 + 9bb67b5f-5e3e-459e-98c5-618e04892d9b + + + + Строка + + Rows + 2 + 2 + -1 + -1 + + + + + 317 + + + 491 + + + 383 + + + 0 + Parameter + + + 96 + + + Parameter + + + Wrap + Parameter + + + 72 + + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/ПереносФайловВТома.mdo b/SSL/src/DataProcessors/ПереносФайловВТома/ПереносФайловВТома.mdo index da1947a4b..468410bd4 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/ПереносФайловВТома.mdo +++ b/SSL/src/DataProcessors/ПереносФайловВТома/ПереносФайловВТома.mdo @@ -29,4 +29,20 @@ PersonalComputer MobileDevice + + ФормаОтчета + + ru + Форма отчета + + PersonalComputer + MobileDevice + + + МакетОтчета + + ru + Макет отчета + + diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ФормаПоиска/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ФормаПоиска/Module.bsl index e3276c72d..57084417d 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ФормаПоиска/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ФормаПоиска/Module.bsl @@ -30,10 +30,10 @@ Возврат Результат; КонецЕсли; - МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Объект)); + МетаданныеОбъекта = Объект.Метаданные(); ИмяМетаданного = МетаданныеОбъекта.Имя; - ПолноеИмяОбъекта = ВРЕГ(Метаданные.НайтиПоТипу(ТипЗнч(Объект)).ПолноеИмя()); + ПолноеИмяОбъекта = ВРЕГ(МетаданныеОбъекта.ПолноеИмя()); ЭтоРегистрСведений = (Найти(ПолноеИмяОбъекта, "РЕГИСТРСВЕДЕНИЙ.") > 0); Если Не ЭтоРегистрСведений Тогда // Регистр бухгалтерии или накопления или расчета diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form index 39e71fc71..cdbeb29f0 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form @@ -15,7 +15,7 @@ 284 <key>ru</key> - <value>Вас приветствует помощник интерактивного обмена данными!</value> + <value>Вас приветствует помощник интерактивного обмена данными</value> true true @@ -24,7 +24,7 @@ ЗаголовокСтраницыРасширеннаяПодсказка - 470 + 502 Label true true @@ -63,7 +63,7 @@ 358 <key>ru</key> - <value>Информационная база</value> + <value>Обмен данными с информационной базой</value> true true @@ -76,7 +76,7 @@ Left УзелИнформационнойБазыРасширеннаяПодсказка - 472 + 504 Label true true @@ -97,6 +97,13 @@ true true + + System.DefaultGUIFont + true + false + false + false + true @@ -108,11 +115,9 @@ ru Группа настройки обмена данными - 70 - false ГруппаНастройкиОбменаДаннымиРасширеннаяПодсказка - 471 + 503 Label true true @@ -131,25 +136,288 @@ Auto - - ВидТранспортаСообщенийОбмена - 360 + + СтраницыНастроекТранспорта + 489 + + СтраницаВыборВидаТранспортаИзДоступных + 490 + + ВидТранспортаСообщенийОбмена + 491 + true + true + + true + + + Объект.ВидТранспортаСообщенийОбмена + + None + + OnChange + ВидТранспортаСообщенийОбменаПриИзменении + + + ВидТранспортаСообщенийОбменаРасширеннаяПодсказка + 508 + Label + true + true + + Left + + + + ВидТранспортаСообщенийОбменаКонтекстноеМеню + 492 + true + + InputField + Enter + true + Left + true + + 45 + true + true + false + true + true + true + true + Normal + + + + ОткрытьКаталогОбменаИнформацией1 + 494 + true + true + + true + + false + + ОткрытьКаталогОбменаИнформацией1РасширеннаяПодсказка + 510 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОткрытьКаталогОбменаИнформацией + Normal + Auto + true + true + UserCmds + Auto + + + НастроитьПараметрыТранспортаСообщенийОбмена1 + 493 + true + true + + true + + false + + НастроитьПараметрыТранспортаСообщенийОбмена1РасширеннаяПодсказка + 511 + Label + true + true + + Left + + + Hyperlink + Form.Command.НастроитьПараметрыТранспортаСообщенийОбмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Страница выбор вида транспорта из доступных</value> + + + ru + Страница выбор вида транспорта из доступных + + + СтраницаВыборВидаТранспортаИзДоступныхРасширеннаяПодсказка + 507 + Label + true + true + + Left + + + Page + + auto + + + + СтраницаДоступенТолькоОдинВидТранспорта + 495 + + ВидТранспортаСообщенийОбменаСтрокой + 496 + + <key>ru</key> + <value>Обмен через Интернет</value> + + true + true + + true + + + ВидТранспортаСообщенийОбменаСтрокойРасширеннаяПодсказка + 513 + Label + true + true + + Left + + + + ВидТранспортаСообщенийОбменаСтрокойКонтекстноеМеню + 497 + true + + Label + true + true + + System.DefaultGUIFont + true + false + false + false + + + Left + + + + ОткрытьКаталогОбменаИнформацией + 499 + true + true + + true + + false + + ОткрытьКаталогОбменаИнформациейРасширеннаяПодсказка + 514 + Label + true + true + + Left + + + Hyperlink + Form.Command.ОткрытьКаталогОбменаИнформацией + Normal + Auto + true + true + UserCmds + Auto + + + НастроитьПараметрыТранспортаСообщенийОбмена + 498 + true + true + + true + + false + + НастроитьПараметрыТранспортаСообщенийОбменаРасширеннаяПодсказка + 515 + Label + true + true + + Left + + + Hyperlink + Form.Command.НастроитьПараметрыТранспортаСообщенийОбмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Страница доступен только один вид транспорта</value> + + + ru + Страница доступен только один вид транспорта + + + СтраницаДоступенТолькоОдинВидТранспортаРасширеннаяПодсказка + 512 + Label + true + true + + Left + + + Page + + auto + + true true true - - Объект.ВидТранспортаСообщенийОбмена - - Top - - OnChange - ВидТранспортаСообщенийОбменаПриИзменении - + + <key>ru</key> + <value>Страницы настроек транспорта</value> + + + ru + Страницы настроек транспорта + - ВидТранспортаСообщенийОбменаРасширеннаяПодсказка - 474 + СтраницыНастроекТранспортаРасширеннаяПодсказка + 506 Label true true @@ -157,87 +425,11 @@ Left - - ВидТранспортаСообщенийОбменаКонтекстноеМеню - 361 - true - - InputField - true - Enter - true - Left - true - - 40 - true - true - false - true - true - false - true - true - true - true - true - Normal + Pages + + Auto - - ОткрытьКаталогОбменаИнформацией - 368 - true - true - - true - - - ОткрытьКаталогОбменаИнформациейРасширеннаяПодсказка - 476 - Label - true - true - - Left - - - Hyperlink - Form.Command.ОткрытьКаталогОбменаИнформацией - Normal - Auto - true - true - UserCmds - Auto - - - НастроитьПараметрыТранспортаСообщенийОбмена - 369 - true - true - - true - - - НастроитьПараметрыТранспортаСообщенийОбменаРасширеннаяПодсказка - 477 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастроитьПараметрыТранспортаСообщенийОбмена - Normal - Auto - true - true - UserCmds - Auto - Декорация2 251 @@ -248,7 +440,7 @@ Декорация2РасширеннаяПодсказка - 478 + 516 Label true true @@ -275,7 +467,7 @@ 317 <key>ru</key> - <value>Выберите вид транспорта сообщений обмена и нажмите кнопку "Далее" для продолжения.</value> + <value>При необходимости укажите, как выполнять обмен данными с другой информационной базой.</value> true true @@ -284,7 +476,7 @@ Декорация8РасширеннаяПодсказка - 479 + 517 Label true true @@ -320,7 +512,7 @@ СтраницаНачалаРасширеннаяПодсказка - 469 + 501 Label true true @@ -351,7 +543,7 @@ ЗаголовокСтраницыИнформацииСтатистикиРасширеннаяПодсказка - 481 + 519 Label true true @@ -399,7 +591,7 @@ КартинкаИнформацияОНаличииНесопоставленныхОбъектовРасширеннаяПодсказка - 483 + 521 Label true true @@ -437,7 +629,7 @@ ПояснениеОНаличииНесопоставленныхОбъектовРасширеннаяПодсказка - 484 + 522 Label true true @@ -476,7 +668,7 @@ ГруппаДополнительнойИнформацииРасширеннаяПодсказка - 482 + 520 Label true true @@ -507,7 +699,7 @@ false ОткрытьФормуСопоставленияРасширеннаяПодсказка - 486 + 524 Label true true @@ -534,7 +726,7 @@ false ОбновитьИнформациюСопоставленияПолностьюРасширеннаяПодсказка - 487 + 525 Label true true @@ -561,7 +753,7 @@ false ВыполнитьАвтоматическоеСопоставлениеПоУмолчаниюРасширеннаяПодсказка - 488 + 526 Label true true @@ -588,7 +780,7 @@ false ВыполнитьЗагрузкуДанныхВсехТаблицРасширеннаяПодсказка - 489 + 527 Label true true @@ -619,7 +811,7 @@ КоманднаяПанельТаблицыСтатистикиРасширеннаяПодсказка - 485 + 523 Label true true @@ -676,7 +868,7 @@ None ДеревоИнформацииСтатистикиКартинкаРасширеннаяПодсказка - 504 + 542 Label true true @@ -718,7 +910,7 @@ ДеревоИнформацииСтатистикиСинонимРасширеннаяПодсказка - 506 + 544 Label true true @@ -759,7 +951,7 @@ ДеревоИнформацииСтатистикиКоличествоОбъектовВИсточникеРасширеннаяПодсказка - 508 + 546 Label true true @@ -802,7 +994,7 @@ ДеревоИнформацииСтатистикиГруппаРасширеннаяПодсказка - 503 + 541 Label true true @@ -831,7 +1023,7 @@ None ДеревоИнформацииСтатистикиИндексКартинкиРасширеннаяПодсказка - 510 + 548 Label true true @@ -879,7 +1071,7 @@ ДеревоИнформацииСтатистикиКоличествоОбъектовВПриемникеРасширеннаяПодсказка - 513 + 551 Label true true @@ -914,7 +1106,7 @@ ДеревоИнформацииСтатистикиГруппа1РасширеннаяПодсказка - 512 + 550 Label true true @@ -941,7 +1133,7 @@ ДеревоИнформацииСтатистикиКоличествоОбъектовНесопоставленныхРасширеннаяПодсказка - 515 + 553 Label true true @@ -982,7 +1174,7 @@ ДеревоИнформацииСтатистикиПроцентСопоставленияОбъектовРасширеннаяПодсказка - 517 + 555 Label true true @@ -1023,10 +1215,10 @@
    ДеревоИнформацииСтатистикиСтрокаПоиска - 494 + 532 ДеревоИнформацииСтатистикиСтрокаПоискаРасширеннаяПодсказка - 496 + 534 Label true true @@ -1036,7 +1228,7 @@ ДеревоИнформацииСтатистикиСтрокаПоискаКонтекстноеМеню - 495 + 533 true ДеревоИнформацииСтатистики @@ -1046,10 +1238,10 @@ ДеревоИнформацииСтатистикиСостояниеПросмотра - 497 + 535 ДеревоИнформацииСтатистикиСостояниеПросмотраРасширеннаяПодсказка - 499 + 537 Label true true @@ -1059,7 +1251,7 @@ ДеревоИнформацииСтатистикиСостояниеПросмотраКонтекстноеМеню - 498 + 536 true ViewStatusAddition @@ -1070,10 +1262,10 @@ ДеревоИнформацииСтатистикиУправлениеПоиском - 500 + 538 ДеревоИнформацииСтатистикиУправлениеПоискомРасширеннаяПодсказка - 502 + 540 Label true true @@ -1083,7 +1275,7 @@ ДеревоИнформацииСтатистикиУправлениеПоискомКонтекстноеМеню - 501 + 539 true SearchControlAddition @@ -1094,7 +1286,7 @@ ДеревоИнформацииСтатистикиРасширеннаяПодсказка - 493 + 531 Label true true @@ -1116,7 +1308,7 @@ false КонтекстноеМенюИнформацияСтатистикиОткрытьФормуСопоставленияРасширеннаяПодсказка - 490 + 528 Label true true @@ -1143,7 +1335,7 @@ false КонтекстноеМенюИнформацияСтатистикиВыполнитьЗагрузкуДанныхДляСтрокиРасширеннаяПодсказка - 491 + 529 Label true true @@ -1170,7 +1362,7 @@ false КонтекстноеМенюИнформацияСтатистикиОбновитьИнформациюСопоставленияДляСтрокиРасширеннаяПодсказка - 492 + 530 Label true true @@ -1230,7 +1422,7 @@ Декорация7РасширеннаяПодсказка - 527 + 565 Label true true @@ -1266,7 +1458,7 @@ СтраницаИнформацииСтатистикиРасширеннаяПодсказка - 480 + 518 Label true true @@ -1297,7 +1489,7 @@ ЗаголовокСтраницыОкончанияСопоставленияРасширеннаяПодсказка - 529 + 567 Label true true @@ -1354,7 +1546,7 @@ КартинкаНеопределеноРасширеннаяПодсказка - 534 + 572 Label true true @@ -1389,7 +1581,7 @@ СтатусЗагрузкиНеопределеноРасширеннаяПодсказка - 533 + 571 Label true true @@ -1420,7 +1612,7 @@ КартинкаУспехРасширеннаяПодсказка - 536 + 574 Label true true @@ -1459,7 +1651,7 @@ СтатусЗагрузкиУспехРасширеннаяПодсказка - 535 + 573 Label true true @@ -1490,7 +1682,7 @@ КартинкаОшибкаРасширеннаяПодсказка - 538 + 576 Label true true @@ -1529,7 +1721,7 @@ СтатусЗагрузкиОшибкаРасширеннаяПодсказка - 537 + 575 Label true true @@ -1560,7 +1752,7 @@ КартинкаПредупреждение1РасширеннаяПодсказка - 540 + 578 Label true true @@ -1580,7 +1772,7 @@ false - CommonPicture.Внимание + CommonPicture.Предупреждение @@ -1599,7 +1791,7 @@ СтатусЗагрузкиПредупреждениеРасширеннаяПодсказка - 539 + 577 Label true true @@ -1628,7 +1820,7 @@ СтраницыСтатусаЗагрузкиДанныхРасширеннаяПодсказка - 532 + 570 Label true true @@ -1656,7 +1848,7 @@ false ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхРасширеннаяПодсказка - 541 + 579 Label true true @@ -1688,7 +1880,7 @@ ГруппаЗагрузкиДанныхРасширеннаяПодсказка - 531 + 569 Label true true @@ -1728,7 +1920,7 @@ КартинкаНеопределено1РасширеннаяПодсказка - 545 + 583 Label true true @@ -1763,7 +1955,7 @@ СтатусВыгрузкиНеопределеноРасширеннаяПодсказка - 544 + 582 Label true true @@ -1794,7 +1986,7 @@ КартинкаУспех1РасширеннаяПодсказка - 547 + 585 Label true true @@ -1833,7 +2025,7 @@ СтатусВыгрузкиУспехРасширеннаяПодсказка - 546 + 584 Label true true @@ -1864,7 +2056,7 @@ КартинкаОшибка1РасширеннаяПодсказка - 549 + 587 Label true true @@ -1903,7 +2095,7 @@ СтатусВыгрузкиОшибкаРасширеннаяПодсказка - 548 + 586 Label true true @@ -1934,7 +2126,7 @@ КартинкаПредупреждениеРасширеннаяПодсказка - 551 + 589 Label true true @@ -1954,7 +2146,7 @@ false - CommonPicture.Внимание + CommonPicture.Предупреждение @@ -1973,7 +2165,7 @@ СтатусВыгрузкиПредупреждениеРасширеннаяПодсказка - 550 + 588 Label true true @@ -2002,7 +2194,7 @@ СтраницыСтатусаВыгрузкиДанныхРасширеннаяПодсказка - 543 + 581 Label true true @@ -2030,7 +2222,7 @@ false ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхРасширеннаяПодсказка - 552 + 590 Label true true @@ -2062,7 +2254,7 @@ ГруппаВыгрузкиДанныхРасширеннаяПодсказка - 542 + 580 Label true true @@ -2094,7 +2286,7 @@ ГруппаРезультатаВыполненияОбменаДаннымиРасширеннаяПодсказка - 530 + 568 Label true true @@ -2113,72 +2305,6 @@ Auto - - ГруппаЭлементовЗапускаВторойИнформационнойБазы - 464 - - ЗапуститьПриложение1СПредприятиеИВыполнитьИнтерактивнуюЗагрузкуДанных - 467 - true - true - - true - - - ЗапуститьПриложение1СПредприятиеИВыполнитьИнтерактивнуюЗагрузкуДанныхРасширеннаяПодсказка - 554 - Label - true - true - - Left - - - Hyperlink - Form.Command.ЗапуститьПриложение1СПредприятиеИВыполнитьИнтерактивнуюЗагрузкуДанных - Normal - Auto - true - true - UserCmds - - CommonPicture.ВыполнитьОбменДаннымиИнтерактивно - - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа элементов запуска второй информационной базы</value> - - - ru - Группа элементов запуска второй информационной базы - - - ГруппаЭлементовЗапускаВторойИнформационнойБазыРасширеннаяПодсказка - 553 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - Auto - Auto - - ИнформационнаяНадписьНастройкиРасписания 337 @@ -2195,7 +2321,7 @@ Декорация14РасширеннаяПодсказка - 557 + 593 Label true true @@ -2210,7 +2336,7 @@ 5 true - 2 + 3 true false @@ -2219,22 +2345,95 @@ - - Декорация15 - 342 - - <key>ru</key> - <value>При необходимости можно настроить расписание + <items xsi:type="form:FormGroup"> + <name>Группа1</name> + <id>478</id> + <items xsi:type="form:Decoration"> + <name>Декорация15</name> + <id>342</id> + <title> + <key>ru</key> + <value>При необходимости можно настроить расписание для выполнения обмена в автоматическом режиме.</value> - + + true + true + + true + + + Декорация15РасширеннаяПодсказка + 595 + Label + true + true + + Left + + + + Декорация15КонтекстноеМеню + 343 + true + + Label + true + 2 + true + false + + Style.ПоясняющийТекст + + + System.DefaultGUIFont + + + Left + Center + + + + ОткрытьПомощникСозданияСценарияОбменаДанными + 371 + true + true + + true + + + ОткрытьПомощникСозданияСценарияОбменаДанными + + Right + + ОткрытьПомощникСозданияСценарияОбменаДаннымиРасширеннаяПодсказка + 596 + Label + true + true + + Left + + + + ОткрытьПомощникСозданияСценарияОбменаДаннымиКонтекстноеМеню + 372 + true + + CheckBoxField + Enter + true + Left + true + + true true true - Декорация15РасширеннаяПодсказка - 558 + Группа1РасширеннаяПодсказка + 594 Label true true @@ -2242,24 +2441,14 @@ Left - - Декорация15КонтекстноеМеню - 343 - true - - Label - true - 2 - true - false - - Style.ПоясняющийТекст - - - System.DefaultGUIFont - - - Left + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -2277,7 +2466,7 @@ ГруппировкаРасширеннаяПодсказка - 556 + 592 Label true true @@ -2294,40 +2483,6 @@ Auto - - ОткрытьПомощникСозданияСценарияОбменаДанными - 371 - true - true - - true - - - ОткрытьПомощникСозданияСценарияОбменаДанными - - Right - - ОткрытьПомощникСозданияСценарияОбменаДаннымиРасширеннаяПодсказка - 559 - Label - true - true - - Left - - - - ОткрытьПомощникСозданияСценарияОбменаДаннымиКонтекстноеМеню - 372 - true - - CheckBoxField - Enter - true - Left - true - - true true @@ -2343,7 +2498,7 @@ ИнформационнаяНадписьНастройкиРасписанияРасширеннаяПодсказка - 555 + 591 Label true true @@ -2372,7 +2527,7 @@ Декорация12РасширеннаяПодсказка - 561 + 598 Label true true @@ -2399,7 +2554,7 @@ 321 <key>ru</key> - <value>Нажмите кнопку "Готово" для выхода из помощника.</value> + <value>Нажмите кнопку "Готово" для выхода из помощника или "Назад" для выполнения обмена с другими настройками.</value> true true @@ -2408,7 +2563,7 @@ Декорация10РасширеннаяПодсказка - 562 + 599 Label true true @@ -2444,7 +2599,7 @@ СтраницаОкончанияСопоставленияРасширеннаяПодсказка - 528 + 566 Label true true @@ -2475,7 +2630,7 @@ ЗаголовокСтраницы7РасширеннаяПодсказка - 564 + 601 Label true true @@ -2522,7 +2677,7 @@ Декорация6РасширеннаяПодсказка - 567 + 604 Label true true @@ -2535,9 +2690,9 @@ 460 true - 5 + 8 true - 2 + 3 true false @@ -2561,7 +2716,7 @@ ГруппаКартинки1РасширеннаяПодсказка - 566 + 603 Label true true @@ -2587,7 +2742,8 @@ 462 <key>ru</key> - <value>Выполняется анализ данных. + <value> +Выполняется анализ данных. Пожалуйста, подождите...</value> true @@ -2597,7 +2753,7 @@ Декорация9РасширеннаяПодсказка - 569 + 606 Label true true @@ -2612,7 +2768,7 @@ Label true - 2 + 3 true true false @@ -2639,7 +2795,7 @@ ГруппаСообщения1РасширеннаяПодсказка - 568 + 605 Label true true @@ -2668,7 +2824,7 @@ ГруппировкаСообщения1РасширеннаяПодсказка - 565 + 602 Label true true @@ -2701,7 +2857,265 @@ СтраницаОжиданияЗагрузкиДанныхРасширеннаяПодсказка - 563 + 600 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация + 468 + + ЗаголовокСтраницы8 + 469 + + <key>ru</key> + <value>Анализ данных для загрузки</value> + + true + true + + true + + + ЗаголовокСтраницы8РасширеннаяПодсказка + 608 + Label + true + true + + Left + + + + ЗаголовокСтраницы8КонтекстноеМеню + 470 + true + + Label + true + 2 + true + true + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + + + + ГруппировкаСообщения2 + 471 + + ГруппаКартинки2 + 472 + + ДекорацияДлительнаяОперация + 473 + + <key>ru</key> + <value>Декорация длительная операция</value> + + true + true + + true + + + ДекорацияДлительнаяОперацияРасширеннаяПодсказка + 611 + Label + true + true + + Left + + + + ДекорацияДлительнаяОперацияКонтекстноеМеню + 474 + true + + 8 + true + 3 + true + false + + + CommonPicture.ДлительнаяОперация48 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинки2РасширеннаяПодсказка + 610 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения2 + 475 + + Декорация13 + 476 + + <key>ru</key> + <value> +Выполняется анализ данных. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация13РасширеннаяПодсказка + 613 + Label + true + true + + Left + + + + Декорация13КонтекстноеМеню + 477 + true + + Label + true + 3 + true + true + false + + System.DefaultGUIFont + 10.0 + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщения2РасширеннаяПодсказка + 612 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщения2РасширеннаяПодсказка + 609 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + ru + Страница ожидания + + + СтраницаОжиданияЗагрузкиДанныхДлительнаяОперацияРасширеннаяПодсказка + 607 Label true true @@ -2732,7 +3146,7 @@ ЗаголовокСтраницы6РасширеннаяПодсказка - 571 + 615 Label true true @@ -2779,7 +3193,7 @@ Декорация5РасширеннаяПодсказка - 574 + 618 Label true true @@ -2792,9 +3206,9 @@ 311 true - 5 + 8 true - 2 + 3 true false @@ -2818,7 +3232,7 @@ ГруппаКартинкиРасширеннаяПодсказка - 573 + 617 Label true true @@ -2844,7 +3258,8 @@ 305 <key>ru</key> - <value>Выполняется выгрузка данных. + <value> +Выполняется выгрузка данных. Пожалуйста, подождите...</value> true @@ -2854,7 +3269,7 @@ Декорация4РасширеннаяПодсказка - 576 + 620 Label true true @@ -2869,7 +3284,7 @@ Label true - 2 + 3 true true false @@ -2896,7 +3311,7 @@ ГруппаСообщенияРасширеннаяПодсказка - 575 + 619 Label true true @@ -2925,7 +3340,7 @@ ГруппировкаСообщенияРасширеннаяПодсказка - 572 + 616 Label true true @@ -2958,7 +3373,261 @@ СтраницаОжиданияВыгрузкиДанныхРасширеннаяПодсказка - 570 + 614 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация + 479 + + ЗаголовокСтраницы9 + 480 + + <key>ru</key> + <value>Выгрузка данных</value> + + true + true + + true + + + ЗаголовокСтраницы9РасширеннаяПодсказка + 622 + Label + true + true + + Left + + + + ЗаголовокСтраницы9КонтекстноеМеню + 481 + true + + Label + true + 2 + true + true + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + + + + ГруппировкаСообщения3 + 482 + + ГруппаКартинки3 + 483 + + Декорация11 + 484 + true + true + + true + + + Декорация11РасширеннаяПодсказка + 625 + Label + true + true + + Left + + + + Декорация11КонтекстноеМеню + 485 + true + + 8 + true + 3 + true + false + + + CommonPicture.ДлительнаяОперация48 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинки3РасширеннаяПодсказка + 624 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения3 + 486 + + Декорация16 + 487 + + <key>ru</key> + <value> +Выполняется выгрузка данных. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация16РасширеннаяПодсказка + 627 + Label + true + true + + Left + + + + Декорация16КонтекстноеМеню + 488 + true + + Label + true + 3 + true + true + false + + System.DefaultGUIFont + 10.0 + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщения3РасширеннаяПодсказка + 626 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщения3РасширеннаяПодсказка + 623 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + ru + Страница ожидания выгрузки данных + + + СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияРасширеннаяПодсказка + 621 Label true true @@ -2987,7 +3656,7 @@ ПанельОсновнаяРасширеннаяПодсказка - 468 + 500 Label true true @@ -3022,7 +3691,7 @@ КомандаНазад4РасширеннаяПодсказка - 581 + 632 Label true true @@ -3049,7 +3718,7 @@ true КомандаДалееРасширеннаяПодсказка - 582 + 633 Label true true @@ -3075,7 +3744,7 @@ КомандаОтмена1РасширеннаяПодсказка - 583 + 634 Label true true @@ -3101,7 +3770,7 @@ СправкаРасширеннаяПодсказка - 584 + 635 Label true true @@ -3125,7 +3794,7 @@ true КоманднаяПанель1РасширеннаяПодсказка - 580 + 631 Label true true @@ -3153,7 +3822,7 @@ СтраницаНавигацииНачалоРасширеннаяПодсказка - 579 + 630 Label true true @@ -3182,7 +3851,7 @@ КомандаНазад5РасширеннаяПодсказка - 587 + 638 Label true true @@ -3209,7 +3878,7 @@ true КомандаДалее4РасширеннаяПодсказка - 588 + 639 Label true true @@ -3235,7 +3904,7 @@ КомандаОтмена5РасширеннаяПодсказка - 589 + 640 Label true true @@ -3261,7 +3930,7 @@ Справка1РасширеннаяПодсказка - 590 + 641 Label true true @@ -3285,7 +3954,7 @@ true КоманднаяПанель2РасширеннаяПодсказка - 586 + 637 Label true true @@ -3313,7 +3982,7 @@ СтраницаНавигацииПродолжениеРасширеннаяПодсказка - 585 + 636 Label true true @@ -3342,7 +4011,7 @@ КомандаНазад6РасширеннаяПодсказка - 593 + 644 Label true true @@ -3368,7 +4037,7 @@ КомандаГотово1РасширеннаяПодсказка - 594 + 645 Label true true @@ -3394,7 +4063,7 @@ КомандаОтмена6РасширеннаяПодсказка - 595 + 646 Label true true @@ -3420,7 +4089,7 @@ Справка2РасширеннаяПодсказка - 596 + 647 Label true true @@ -3444,7 +4113,7 @@ true КоманднаяПанель3РасширеннаяПодсказка - 592 + 643 Label true true @@ -3472,7 +4141,7 @@ СтраницаНавигацииОкончаниеРасширеннаяПодсказка - 591 + 642 Label true true @@ -3501,7 +4170,7 @@ КомандаНазад7РасширеннаяПодсказка - 599 + 650 Label true true @@ -3532,7 +4201,7 @@ true КомандаДалее5РасширеннаяПодсказка - 600 + 651 Label true true @@ -3558,7 +4227,7 @@ КомандаОтмена7РасширеннаяПодсказка - 601 + 652 Label true true @@ -3584,7 +4253,7 @@ Справка3РасширеннаяПодсказка - 602 + 653 Label true true @@ -3608,7 +4277,7 @@ true КоманднаяПанель4РасширеннаяПодсказка - 598 + 649 Label true true @@ -3636,7 +4305,7 @@ СтраницаНавигацииОжиданиеРасширеннаяПодсказка - 597 + 648 Label true true @@ -3661,7 +4330,7 @@ true ПанельНавигацииРасширеннаяПодсказка - 578 + 629 Label true true @@ -3689,7 +4358,7 @@ ГруппаКнопокМастераРасширеннаяПодсказка - 577 + 628 Label true true @@ -3827,7 +4496,7 @@ ОткрытьПомощникСозданияСценарияОбменаДанными <key>ru</key> - <value>Открыть форму настройки расписания</value> + <value>Открыть настройку расписания</value> 2 @@ -4404,6 +5073,41 @@ true + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 8 + + Boolean + + + true + + + true + + + + ИмяОбработчикаДлительнойОперации + + <key>ru</key> + <value>Имя обработчика длительной операции</value> + + 9 + + String + + + + true + + + true + + СтруктураПараметровПодключенияВнешнегоСоединения @@ -4433,6 +5137,184 @@ true + + ИдентификаторФайла + + <key>ru</key> + <value>Идентификатор файла</value> + + 14 + + String + + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 15 + + Boolean + + + true + + + true + + + + ИдентификаторОперации + + <key>ru</key> + <value>Идентификатор операции</value> + + 16 + + String + + + + true + + + true + + + + WSURLВебСервиса + + <key>ru</key> + <value>WSURLВеб сервиса</value> + + 17 + + String + + + + true + + + true + + + + WSИмяПользователя + + <key>ru</key> + <value>WSИмя пользователя</value> + + 18 + + String + + + + true + + + true + + + + WSПароль + + <key>ru</key> + <value>WSПароль</value> + + 19 + + String + + + + true + + + true + + + + КлючТекущейСтрокиТаблицыИнформацииСтатистики + + <key>ru</key> + <value>Ключ текущей строки таблицы информации статистики</value> + + 20 + + String + + + + true + + + true + + + + СобытиеЖурналаРегистрацииЗагрузкаДанных + + <key>ru</key> + <value>Событие журнала регистрации загрузка данных</value> + + 21 + + String + + + + true + + + true + + + + ДатаНачалаОперации + + <key>ru</key> + <value>Дата начала операции</value> + + 23 + + Date + + + + true + + + true + + + + ОбменЧерезПодключениеККорреспонденту + + <key>ru</key> + <value>Обмен через подключение к корреспонденту</value> + + 22 + + Boolean + + + true + + + true + + ОбновитьИнформациюСопоставленияДляСтроки @@ -4585,7 +5467,7 @@ <name>ОткрытьКаталогОбменаИнформацией</name> <title> <key>ru</key> - <value>Открыть каталог обмена информацией</value> + <value>Открыть каталог</value> 4 @@ -4595,15 +5477,11 @@ true - - StdPicture.OpenFile - ОткрытьКаталогОбменаИнформацией - TextPicture Auto Auto @@ -4611,25 +5489,21 @@ НастроитьПараметрыТранспортаСообщенийОбмена <key>ru</key> - <value>Настроить параметры транспорта сообщений обмена</value> + <value>Изменить</value> 6 ru - Настроить параметры транспорта сообщений обмена + Изменить настройки обмена данными true - - CommonPicture.ПараметрыОбменаДанными - НастроитьПараметрыТранспортаСообщенийОбмена - TextPicture Auto Auto @@ -4749,24 +5623,6 @@ Auto Auto - - ЗапуститьПриложение1СПредприятиеИВыполнитьИнтерактивнуюЗагрузкуДанных - - <key>ru</key> - <value>Выполнить загрузку данных во второй информационной базе</value> - - 5 - - true - - - - ЗапуститьПриложение1СПредприятиеИВыполнитьИнтерактивнуюЗагрузкуДанных - - - Auto - Auto - diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl index 7fa71acf3..4bbc4de82 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl @@ -35,7 +35,7 @@ Если Объект.УзелИнформационнойБазы.Пустая() Тогда - ОбменДаннымиСервер.СообщитьОбОшибке(НСтр("ru = 'Настройка обмена не найдена.'"), Отказ); + ОбменДаннымиСервер.СообщитьОбОшибке(НСтр("ru = 'Настройка обмена данными не найдена.'"), Отказ); Возврат; КонецЕсли; @@ -44,18 +44,16 @@ Иначе - ОбменДаннымиСервер.СообщитьОбОшибке(НСтр( - "ru = 'Работа помощника поддерживается только при вызове из командного интерфейса. Работа помощника завершена.'") - , Отказ); + ОбменДаннымиСервер.СообщитьОбОшибке(НСтр("ru = 'Непосредственное открытие помощника не предусмотрено.'"), Отказ); Возврат; КонецЕсли; Если Не ОбменДаннымиПовтИсп.ЭтоУзелУниверсальногоОбменаДанными(Объект.УзелИнформационнойБазы) Тогда - ОбменДаннымиСервер.СообщитьОбОшибке(НСтр( - "ru = 'Интерактивное выполнение обмена данными поддерживается только для универсальных обменов с использованием правил конвертации объектов.'") - , Отказ); + // Интерактивное выполнение обмена данными поддерживается только для универсальных обменов с использованием правил конвертации объектов. + ОбменДаннымиСервер.СообщитьОбОшибке( + НСтр("ru = 'Для выбранного узла выполнение обмена данными с настройкой не предусмотрено.'"), Отказ); Возврат; КонецЕсли; @@ -65,9 +63,9 @@ // проверяем настройку обмена на соответствие фильтру Если МассивУзлов.Найти(Объект.УзелИнформационнойБазы) = Неопределено Тогда - НСтрока = НСтр("ru = 'Для заданного узла информационной базы нельзя выполнить сопоставление объектов.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,,, Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Для выбранного узла сопоставление данных не предусмотрено.'"),,,, Отказ); Возврат; + КонецЕсли; Параметры.Свойство("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); @@ -76,29 +74,18 @@ Если Не ЗначениеЗаполнено(Объект.ВидТранспортаСообщенийОбмена) Тогда НастройкиТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаДляУзла(Объект.УзелИнформационнойБазы); - Объект.ВидТранспортаСообщенийОбмена = НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию; - Если Не ЗначениеЗаполнено(Объект.ВидТранспортаСообщенийОбмена) Тогда - Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE; - КонецЕсли; КонецЕсли; ОбменДаннымиСервер.ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(Объект.УзелИнформационнойБазы, Элементы.ВидТранспортаСообщенийОбмена); - Параметры.Свойство("ВыполнитьСопоставлениеПриОткрытии", ВыполнитьСопоставлениеПриОткрытии); - ВариантРаботыМастера = "ВыполнитьСопоставление"; - - Элементы.ОткрытьКаталогОбменаИнформацией.Доступность = Не (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); - - ВидТранспортаСообщенийОбменаПриИзмененииНаСервере(); - - РольДоступнаДобавлениеИзменениеОбменовДанными = ОбменДаннымиСервер.РольДоступнаДобавлениеИзменениеОбменовДанными(); - Элементы.НастроитьПараметрыТранспортаСообщенийОбмена.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными; + ОбновитьСтраницыНастроекТранспорта(); + СобытиеЖурналаРегистрацииЗагрузкаДанных = ОбменДаннымиСервер.ПолучитьКлючСообщенияЖурналаРегистрации(Объект.УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); КонецПроцедуры @@ -174,460 +161,112 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ -&НаСервере -Процедура ПолучитьЗаголовокПакетаДанныхНаСервере(Отказ, ИнформацияСтатистикиАктуальна) +//////////////////////////////////////////////////////////////////////////////// +// Страница СтраницаНачала + +&НаКлиенте +Процедура ВидТранспортаСообщенийОбменаПриИзменении(Элемент) - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + ВидТранспортаСообщенийОбменаПриИзмененииНаСервере(); - ОбработкаОбъект.ПолучитьСообщениеОбменаВоВременныйКаталог(Отказ, ИдентификаторФайлаПакетаДанных); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоИнформацииСтатистики + +&НаКлиенте +Процедура ДеревоИнформацииСтатистикиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - Если Не Отказ Тогда + ОткрытьФормуСопоставления(Неопределено); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура КомандаДалее(Команда) + + ИзменитьПорядковыйНомерПерехода(+1); + + Если Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаОжиданияВыгрузкиДанных + ИЛИ Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаОжиданияЗагрузкиДанных Тогда - ДанныеСтатистикиСопоставления = ПолучитьДанныеСтатистикиСопоставления(); - - ИнформацияСтатистикиАктуальна = (ДанныеСтатистикиСопоставления.ИдентификаторФайлаПакетаДанных = ИдентификаторФайлаПакетаДанных); - - Если Не ИнформацияСтатистикиАктуальна Тогда - - // появился новый файл пакета данных; загружаем информацию из файла - ОбработкаОбъект.ВыполнитьАнализСообщенияОбмена(Отказ); - - Если Не Отказ Тогда - - ЗаписатьДанныеСтатистикиСопоставления(Объект.ИмяПланаОбмена, Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных); - - КонецЕсли; - - Иначе - - // файл пакета данных не изменился; загружаем информацию из кэша - ОбработкаОбъект.ИнформацияСтатистики.Загрузить(ДанныеСтатистикиСопоставления.ИнформацияСтатистикиСопоставленияОбъектов.Скопировать()); - - КонецЕсли; + ПодключитьОбработчикОжидания("ОбработчикОжиданияКомандаДалее", 0.1, Истина); КонецЕсли; - Если Не Отказ Тогда +КонецПроцедуры + +&НаКлиенте +Процедура КомандаНазад(Команда) + + ИзменитьПорядковыйНомерПерехода(-1); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаОтмена(Команда) + + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаГотово(Команда) + + Если Не УзелИспользуетсяВСценарииОбмена + И ОткрытьПомощникСозданияСценарияОбменаДанными Тогда - ПолучитьДеревоИнформацииСтатистики(ОбработкаОбъект.ТаблицаИнформацииСтатистики()); + ПараметрыФормы = Новый Структура("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); + ОткрытьФормуМодально("Справочник.СценарииОбменовДанными.ФормаОбъекта", ПараметрыФормы, ЭтаФорма); КонецЕсли; - УстановитьВидимостьГруппыДополнительнойИнформации(); + // Обновляем все открытые динамические списки + ОбменДаннымиКлиент.ОбновитьВсеОткрытыеДинамическиеСписки(); + + ЗакрытьФормуБезусловно = Истина; + Закрыть(); КонецПроцедуры -&НаСервере -Процедура ОбновитьИнформациюСопоставленияПоСтрокеНаСервере(Отказ, КлючиСтрок) - - ИндексыСтрок = ПолучитьИндексыСтрокТаблицыИнформацииСтатистики(КлючиСтрок); - - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - - // получаем статистическую информацию по сопоставлению - ОбработкаОбъект.ПолучитьСтатистикуСопоставленияОбъектовПоСтроке(Отказ, ИндексыСтрок); - - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); - - // сохраняем данные статистики сопоставления - ЗаписатьДанныеСтатистикиСопоставления(Объект.ИмяПланаОбмена, Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных); - - ПолучитьДеревоИнформацииСтатистики(ОбработкаОбъект.ТаблицаИнформацииСтатистики()); - - УстановитьВидимостьГруппыДополнительнойИнформации(); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Страница СтраницаНачала -&НаСервере -Процедура ВыполнитьАвтоматическоеСопоставлениеПоУмолчаниюПоСтрокеНаСервере(Отказ, КлючиСтрок) +&НаКлиенте +Процедура ОткрытьКаталогОбменаИнформацией(Команда) - ИндексыСтрок = ПолучитьИндексыСтрокТаблицыИнформацииСтатистики(КлючиСтрок); + // Вызов сервера без контекста + ИмяКаталога = ПолучитьИмяКаталогаНаСервере(Объект.ВидТранспортаСообщенийОбмена, Объект.УзелИнформационнойБазы); - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - - // выполняем автоматическое сопоставление и получаем статистическую информацию - ОбработкаОбъект.ВыполнитьАвтоматическоеСопоставлениеПоУмолчаниюИПолучитьСтатистикуСопоставления(Отказ, ИндексыСтрок); - - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); - - // сохраняем данные статистики сопоставления - ЗаписатьДанныеСтатистикиСопоставления(Объект.ИмяПланаОбмена, Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных); - - ПолучитьДеревоИнформацииСтатистики(ОбработкаОбъект.ТаблицаИнформацииСтатистики()); - - УстановитьВидимостьГруппыДополнительнойИнформации(); - -КонецПроцедуры - -&НаСервере -Процедура ВыполнитьЗагрузкуДанныхНаСервере(Отказ, КлючиСтрок) - - ИндексыСтрок = ПолучитьИндексыСтрокТаблицыИнформацииСтатистики(КлючиСтрок); - - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - - // выполняем загрузку данных - ОбработкаОбъект.ВыполнитьЗагрузкуДанных(Отказ, ИндексыСтрок); - - // получаем статистическую информацию по сопоставлению - ОбработкаОбъект.ПолучитьСтатистикуСопоставленияОбъектовПоСтроке(Отказ, ИндексыСтрок); - - ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); - - // сохраняем данные статистики сопоставления - ЗаписатьДанныеСтатистикиСопоставления(Объект.ИмяПланаОбмена, Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных); - - ПолучитьДеревоИнформацииСтатистики(ОбработкаОбъект.ТаблицаИнформацииСтатистики()); - - УстановитьВидимостьГруппыДополнительнойИнформации(); - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьДанныеСтатистикиСопоставленияНаСервере(Отказ, ПараметрыОповещения) - - СтрокиТаблицы = Объект.ИнформацияСтатистики.НайтиСтроки(Новый Структура("Ключ", ПараметрыОповещения.КлючУникальности)); - - ЗаполнитьЗначенияСвойств(СтрокиТаблицы[0], ПараметрыОповещения, "ДанныеУспешноЗагружены"); - - КлючиСтрок = Новый Массив; - КлючиСтрок.Добавить(ПараметрыОповещения.КлючУникальности); - - ОбновитьИнформациюСопоставленияПоСтрокеНаСервере(Отказ, КлючиСтрок); - -КонецПроцедуры - -&НаСервере -Процедура ПолучитьДеревоИнформацииСтатистики(ИнформацияСтатистики) - - ОтборМассив = ИнформацияСтатистики.ВыгрузитьКолонку("ИмяТаблицыПриемника"); - - ОтборСтрока = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(ОтборМассив); - - Отбор = Новый Структура("ПолноеИмя", ОтборСтрока); - - // получаем дерево объектов метаданных конфигурации - ДеревоИнформацииСтатистикиВременное = ОбменДаннымиПовтИсп.ПолучитьДеревоМетаданныхКонфигурации(Отбор).Скопировать(); - - // добавляем колонки - ДеревоИнформацииСтатистикиВременное.Колонки.Добавить("Ключ"); - ДеревоИнформацииСтатистикиВременное.Колонки.Добавить("КоличествоОбъектовВИсточнике"); - ДеревоИнформацииСтатистикиВременное.Колонки.Добавить("КоличествоОбъектовВПриемнике"); - ДеревоИнформацииСтатистикиВременное.Колонки.Добавить("КоличествоОбъектовНесопоставленных"); - ДеревоИнформацииСтатистикиВременное.Колонки.Добавить("ПроцентСопоставленияОбъектов"); - ДеревоИнформацииСтатистикиВременное.Колонки.Добавить("ИндексКартинки"); - ДеревоИнформацииСтатистикиВременное.Колонки.Добавить("ИспользоватьПредварительныйПросмотр"); - ДеревоИнформацииСтатистикиВременное.Колонки.Добавить("ИмяТаблицыПриемника"); - ДеревоИнформацииСтатистикиВременное.Колонки.Добавить("ТипОбъектаСтрокой"); - ДеревоИнформацииСтатистикиВременное.Колонки.Добавить("ПоляТаблицы"); - ДеревоИнформацииСтатистикиВременное.Колонки.Добавить("ПоляПоиска"); - ДеревоИнформацииСтатистикиВременное.Колонки.Добавить("ТипИсточникаСтрокой"); - ДеревоИнформацииСтатистикиВременное.Колонки.Добавить("ТипПриемникаСтрокой"); - ДеревоИнформацииСтатистикиВременное.Колонки.Добавить("ЭтоУдалениеОбъекта"); - ДеревоИнформацииСтатистикиВременное.Колонки.Добавить("ДанныеУспешноЗагружены"); - - ИнформацияСтатистикиОбычныеОбъекты = ИнформацияСтатистики.Скопировать(Новый Структура("ОдинКоМногим, ЭтоУдалениеОбъекта", Ложь, Ложь)); - - // заполняем обычные строки - Для Каждого СтрокаТаблицы Из ИнформацияСтатистикиОбычныеОбъекты Цикл - - СтрокаДерева = ДеревоИнформацииСтатистикиВременное.Строки.Найти(СтрокаТаблицы.ИмяТаблицыПриемника, "ПолноеИмя", Истина); - - ЗаполнитьЗначенияСвойств(СтрокаДерева, СтрокаТаблицы); - - КонецЦикла; - - // добавляем строки с типом "ОдинКоМногим" - Отбор = Новый Структура("ОдинКоМногим", Истина); - ЗаполнитьДеревоИнформацииСтатистикиОдинКоМногим(ДеревоИнформацииСтатистикиВременное, ИнформацияСтатистики, Отбор); - - // добавляем строки удаления объектов - Отбор = Новый Структура("ЭтоУдалениеОбъекта", Истина); - ЗаполнитьДеревоИнформацииСтатистикиОдинКоМногим(ДеревоИнформацииСтатистикиВременное, ИнформацияСтатистики, Отбор); - - КоллекцияЭлементовДерева = ДеревоИнформацииСтатистики.ПолучитьЭлементы(); - КоллекцияЭлементовДерева.Очистить(); - ОбщегоНазначения.ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, ДеревоИнформацииСтатистикиВременное); - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьДеревоИнформацииСтатистикиОдинКоМногим(ДеревоИнформацииСтатистикиВременное, ИнформацияСтатистики, Отбор) - - ИнформацияСтатистикиОдинКоМногим = ИнформацияСтатистики.Скопировать(Отбор); - - Если ИнформацияСтатистикиОдинКоМногим.Количество() = 0 Тогда + Если ПустаяСтрока(ИмяКаталога) Тогда + Предупреждение(НСтр("ru = 'Не задан каталог обмена информацией.'")); Возврат; КонецЕсли; - ИнформацияСтатистикиОдинКоМногимВременная = ИнформацияСтатистикиОдинКоМногим.Скопировать(, "ИмяТаблицыПриемника"); - ИнформацияСтатистикиОдинКоМногимВременная.Свернуть("ИмяТаблицыПриемника"); - - Для Каждого СтрокаТаблицы Из ИнформацияСтатистикиОдинКоМногимВременная Цикл - - Строки = ИнформацияСтатистикиОдинКоМногим.НайтиСтроки(Новый Структура("ИмяТаблицыПриемника", СтрокаТаблицы.ИмяТаблицыПриемника)); - - СтрокаДерева = ДеревоИнформацииСтатистикиВременное.Строки.Найти(СтрокаТаблицы.ИмяТаблицыПриемника, "ПолноеИмя", Истина); - - Для Каждого Строка Из Строки Цикл - - НоваяСтрокаДерева = СтрокаДерева.Строки.Добавить(); - - ЗаполнитьЗначенияСвойств(НоваяСтрокаДерева, СтрокаДерева); - ЗаполнитьЗначенияСвойств(НоваяСтрокаДерева, Строка); - - Если Строка.ЭтоУдалениеОбъекта Тогда - - НоваяСтрокаДерева.Картинка = БиблиотекаКартинок.ПометитьНаУдаление; - - Иначе - - Синоним = "[СинонимТаблицыПриемника] ([ИмяТаблицыИсточника])"; - Синоним = СтрЗаменить(Синоним, "[СинонимТаблицыПриемника]", НоваяСтрокаДерева.Синоним); - Синоним = СтрЗаменить(Синоним, "[ИмяТаблицыИсточника]", УдалитьИмяКлассаИзИмениОбъекта(Строка.ТипИсточникаСтрокой)); - - НоваяСтрокаДерева.Синоним = Синоним; - - КонецЕсли; - - КонецЦикла; - - КонецЦикла; + // открываем каталог в приложении explorer + ЗапуститьПриложение(ИмяКаталога); КонецПроцедуры -&НаСервере -Процедура УстановитьВидимостьГруппыДополнительнойИнформации() +&НаКлиенте +Процедура НастроитьПараметрыТранспортаСообщенийОбмена(Команда) - // если в таблице информации статистике есть хотя бы одна строка с сопоставлением меньшим 100%, - // то группу дополнительной информации делаем видимой - МассивСтрок = Объект.ИнформацияСтатистики.НайтиСтроки(Новый Структура("ИндексКартинки", 1)); + Отбор = Новый Структура("Узел", Объект.УзелИнформационнойБазы); + ЗначенияЗаполнения = Новый Структура("Узел", Объект.УзелИнформационнойБазы); - Элементы.ГруппаДополнительнойИнформации.Видимость = (МассивСтрок.Количество() > 0); + ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, ЗначенияЗаполнения, "НастройкиТранспортаОбмена", ЭтаФорма); + + ОбновитьСтраницыНастроекТранспорта(); КонецПроцедуры -&НаСервере -Функция ПолучитьДанныеСтатистикиСопоставления() - Перем ДанныеСтатистикиСопоставления; - - ИмяФайла = ИмяФайлаДанныхСтатистикиСопоставления(Объект.ИмяПланаОбмена, Объект.УзелИнформационнойБазы); - - Файл = Новый Файл(ИмяФайла); - - Если Файл.Существует() Тогда - - ДанныеСтатистикиСопоставления = ЗначениеИзФайла(ИмяФайла); - - КонецЕсли; - - Если ТипЗнч(ДанныеСтатистикиСопоставления) <> Тип("Структура") Тогда - - ДанныеСтатистикиСопоставления = Новый Структура("ИдентификаторФайлаПакетаДанных, ИнформацияСтатистикиСопоставленияОбъектов"); - - КонецЕсли; - - Возврат ДанныеСтатистикиСопоставления; - -КонецФункции - -&НаСервере -Функция ПакетДанныхЗагруженПолностью() - - ТаблицаУспешныхЗагрузок = Объект.ИнформацияСтатистики.Выгрузить(Новый Структура("ДанныеУспешноЗагружены", Истина) ,"ДанныеУспешноЗагружены"); - - Возврат ТаблицаУспешныхЗагрузок.Количество() = Объект.ИнформацияСтатистики.Количество(); - -КонецФункции - -&НаСервере -Функция ВсеТаблицыОбъектовСопоставлены() - - Возврат (Объект.ИнформацияСтатистики.Выгрузить(,"КоличествоОбъектовНесопоставленных").Итог("КоличествоОбъектовНесопоставленных") = 0); - -КонецФункции - -&НаСервере -Процедура ПолучитьСтруктуруПроверокПриЗавершенииСопоставления(СтруктураПроверок) - - СтруктураПроверок.ПакетДанныхЗагруженПолностью = ПакетДанныхЗагруженПолностью(); - СтруктураПроверок.ВсеТаблицыОбъектовСопоставлены = ВсеТаблицыОбъектовСопоставлены(); - -КонецПроцедуры - -&НаСервере -Процедура ВидТранспортаСообщенийОбменаПриИзмененииНаСервере() - - ЭтоОбменЧерезВнешнееСоединение = (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM); - - Элементы.ГруппаВыгрузкиДанных.Видимость = Не ЭтоОбменЧерезВнешнееСоединение; - - Элементы.ЗаголовокСтраницыОкончанияСопоставления.Заголовок = ?(ЭтоОбменЧерезВнешнееСоединение, - НСтр("ru = 'Интерактивная загрузка данных завершена'"), - НСтр("ru = 'Интерактивный обмен данными завершен'") - ); - - Элементы.ГруппаЭлементовЗапускаВторойИнформационнойБазы.Видимость = ЭтоОбменЧерезВнешнееСоединение И Не ЭтоЗапускИзДругогоПриложения; - - Элементы.ОткрытьКаталогОбменаИнформацией.Доступность = (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE - ИЛИ Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP); - // - - СтруктураПараметровПодключенияВнешнегоСоединения = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаДляУзла(Объект.УзелИнформационнойБазы); - СтруктураПараметровПодключенияВнешнегоСоединения = ОбщегоНазначенияКлиентСервер.УдалитьПрефиксВКлючахКоллекции(СтруктураПараметровПодключенияВнешнегоСоединения, "COM"); - - Если ЭтоЗапускИзДругогоПриложения Тогда - - Элементы.ИнформационнаяНадписьНастройкиРасписания.Видимость = Ложь; - - ОткрытьПомощникСозданияСценарияОбменаДанными = Ложь; - - Иначе - - УзелИспользуетсяВСценарииОбмена = УзелИнформационнойБазыИспользуетсяВСценарииОбмена(Объект.УзелИнформационнойБазы); - - Элементы.ИнформационнаяНадписьНастройкиРасписания.Видимость = Не УзелИспользуетсяВСценарииОбмена И ОбменДаннымиСервер.РольДоступнаДобавлениеИзменениеОбменовДанными(); - - ОткрытьПомощникСозданияСценарияОбменаДанными = ОбменДаннымиСервер.РольДоступнаДобавлениеИзменениеОбменовДанными(); - - КонецЕсли; - - // Устанавливаем текущую таблицу переходов - Если ЭтоОбменЧерезВнешнееСоединение Тогда - - ТаблицаПереходовПоСценарию2(); - - Иначе - - ТаблицаПереходовПоСценарию1(); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Функция ПолучитьИндексыСтрокТаблицыИнформацииСтатистики(КлючиСтрок) - - ИндексыСтрок = Новый Массив; - - Для Каждого Ключ ИЗ КлючиСтрок Цикл - - СтрокиТаблицы = Объект.ИнформацияСтатистики.НайтиСтроки(Новый Структура("Ключ", Ключ)); - - ИндексСтроки = Объект.ИнформацияСтатистики.Индекс(СтрокиТаблицы[0]); - - ИндексыСтрок.Добавить(ИндексСтроки); - - КонецЦикла; - - Возврат ИндексыСтрок; - -КонецФункции - -&НаСервере -Функция УдалитьИмяКлассаИзИмениОбъекта(Знач Результат) - - Результат = СтрЗаменить(Результат, "ДокументСсылка.", ""); - Результат = СтрЗаменить(Результат, "СправочникСсылка.", ""); - Результат = СтрЗаменить(Результат, "ПланВидовХарактеристикСсылка.", ""); - Результат = СтрЗаменить(Результат, "ПланСчетовСсылка.", ""); - Результат = СтрЗаменить(Результат, "ПланВидовРасчетаСсылка.", ""); - Результат = СтрЗаменить(Результат, "БизнесПроцессСсылка.", ""); - Результат = СтрЗаменить(Результат, "ЗадачаСсылка.", ""); - - Возврат Результат; -КонецФункции - -&НаСервереБезКонтекста -Процедура ПолучитьСостоянияОбменовДанными(РезультатЗагрузкиДанных, РезультатВыгрузкиДанных, Знач УзелИнформационнойБазы) - - СостоянияОбменовДанными = РегистрыСведений.СостоянияОбменовДанными.СостоянияОбменовДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы); - - РезультатЗагрузкиДанных = СостоянияОбменовДанными["РезультатЗагрузкиДанных"]; - РезультатВыгрузкиДанных = СостоянияОбменовДанными["РезультатВыгрузкиДанных"]; - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция ИмяФайлаДанныхСтатистикиСопоставления(ИмяПланаОбмена, УзелИнформационнойБазы) - - Ключ = "ДанныеСтатистикиСопоставления[ИмяПланаОбмена][КодУзла]"; - - Ключ = СтрЗаменить(Ключ, "[ИмяПланаОбмена]", ИмяПланаОбмена); - Ключ = СтрЗаменить(Ключ, "[КодУзла]", ОбщегоНазначения.ПолучитьЗначениеРеквизита(УзелИнформационнойБазы, "Код")); - - Возврат ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов(), Ключ); - -КонецФункции - -&НаСервереБезКонтекста -Процедура ЗаписатьДанныеСтатистикиСопоставления(ИмяПланаОбмена, УзелИнформационнойБазы, Знач ИнформацияСтатистики, ИдентификаторФайлаПакетаДанных) - - Если ТипЗнч(ИнформацияСтатистики) = Тип("ДанныеФормыКоллекция") Тогда - - ИнформацияСтатистики = ИнформацияСтатистики.Выгрузить(); - - КонецЕсли; - - ДанныеСтатистикиСопоставления = Новый Структура; - ДанныеСтатистикиСопоставления.Вставить("ИдентификаторФайлаПакетаДанных", ИдентификаторФайлаПакетаДанных); - ДанныеСтатистикиСопоставления.Вставить("ИнформацияСтатистикиСопоставленияОбъектов", ИнформацияСтатистики); - - ЗначениеВФайл(ИмяФайлаДанныхСтатистикиСопоставления(ИмяПланаОбмена, УзелИнформационнойБазы), ДанныеСтатистикиСопоставления); - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура УдалитьВременныйКаталогСообщенийОбмена(ИмяВременногоКаталога) - - Если Не ПустаяСтрока(ИмяВременногоКаталога) Тогда - - Попытка - УдалитьФайлы(ИмяВременногоКаталога); - ИмяВременногоКаталога = ""; - Исключение - КонецПопытки; - - КонецЕсли; - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция ПолучитьИмяКаталогаНаСервере(ВидТранспортаСообщенийОбмена, УзелИнформационнойБазы) - - Возврат РегистрыСведений.НастройкиТранспортаОбмена.ИмяКаталогаОбменаИнформацией(ВидТранспортаСообщенийОбмена, УзелИнформационнойБазы); - -КонецФункции - -&НаСервереБезКонтекста -Функция УзелИнформационнойБазыИспользуетсяВСценарииОбмена(УзелИнформационнойБазы) - - ТекстЗапроса = " - |ВЫБРАТЬ ПЕРВЫЕ 1 1 - |ИЗ - | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК СценарииОбменовДаннымиНастройкиОбмена - |ГДЕ - | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы - | И НЕ СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ПометкаУдаления - |"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); - Запрос.Текст = ТекстЗапроса; - - Возврат Не Запрос.Выполнить().Пустой(); - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// -// НА КЛИЕНТЕ - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// Страница СтраницаИнформацииСтатистики &НаКлиенте Процедура ОбновитьИнформациюСопоставленияДляСтроки(Команда) @@ -895,45 +534,8 @@ КонецПроцедуры -&НаКлиенте -Процедура ДеревоИнформацииСтатистикиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ОткрытьФормуСопоставления(Неопределено); - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьКаталогОбменаИнформацией(Команда) - - // Вызов сервера без контекста - ИмяКаталога = ПолучитьИмяКаталогаНаСервере(Объект.ВидТранспортаСообщенийОбмена, Объект.УзелИнформационнойБазы); - - Если ПустаяСтрока(ИмяКаталога) Тогда - Предупреждение(НСтр("ru = 'Не задан каталог обмена информацией.'")); - Возврат; - КонецЕсли; - - // открываем каталог в приложении explorer - ЗапуститьПриложение(ИмяКаталога); - -КонецПроцедуры - -&НаКлиенте -Процедура ВидТранспортаСообщенийОбменаПриИзменении(Элемент) - - ВидТранспортаСообщенийОбменаПриИзмененииНаСервере(); - -КонецПроцедуры - -&НаКлиенте -Процедура НастроитьПараметрыТранспортаСообщенийОбмена(Команда) - - Отбор = Новый Структура("Узел", Объект.УзелИнформационнойБазы); - ЗначенияЗаполнения = Новый Структура("Узел", Объект.УзелИнформационнойБазы); - - ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, ЗначенияЗаполнения, "НастройкиТранспортаОбмена", ЭтаФорма); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Страница СтраницаОкончанияСопоставления &НаКлиенте Процедура ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных(Команда) @@ -949,15 +551,692 @@ КонецПроцедуры -&НаКлиенте -Процедура ЗапуститьПриложение1СПредприятиеИВыполнитьИнтерактивнуюЗагрузкуДанных(Команда) +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ПолучитьЗаголовокПакетаДанныхНаСервере(Отказ, ИнформацияСтатистикиАктуальна) - ОбменДаннымиКлиент.ЗапуститьПриложение1СПредприятиеИВыполнитьИнтерактивнуюЗагрузкуДанных(СтруктураПараметровПодключенияВнешнегоСоединения, Объект.ИмяПланаОбмена); + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + ОбработкаОбъект.ПолучитьСообщениеОбменаВоВременныйКаталог( + Отказ, + ИдентификаторФайлаПакетаДанных, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации + ); + + ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); + + Если ДлительнаяОперация Тогда + + // Получаем настройки подключения к веб-сервису корреспондента. + // Настройки нужны для периодического опроса корреспондента на предмет окончания длительной операции выгрузки данных. + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(Объект.УзелИнформационнойБазы); + ЗаполнитьЗначенияСвойств(ЭтаФорма, СтруктураНастроек, "WSURLВебСервиса, WSИмяПользователя, WSПароль"); + Возврат; + КонецЕсли; + + Если Не Отказ Тогда + + ПриПолученииЗаголовкаПакетаДанныхНаСервере(Отказ, ИнформацияСтатистикиАктуальна); + + КонецЕсли; + + УстановитьВидимостьГруппыДополнительнойИнформации(); + +КонецПроцедуры + +&НаСервере +Процедура ПолучитьЗаголовокПакетаДанныхНаСервереОкончаниеДлительнойОперации(Отказ, ИнформацияСтатистикиАктуальна) + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + ОбработкаОбъект.ПолучитьСообщениеОбменаВоВременныйКаталогОкончаниеДлительнойОперации( + Отказ, + ИдентификаторФайлаПакетаДанных, + ИдентификаторФайла + ); + + ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); + + Если Не Отказ Тогда + + ПриПолученииЗаголовкаПакетаДанныхНаСервере(Отказ, ИнформацияСтатистикиАктуальна); + + КонецЕсли; + + УстановитьВидимостьГруппыДополнительнойИнформации(); + +КонецПроцедуры + +&НаСервере +Процедура ПриПолученииЗаголовкаПакетаДанныхНаСервере(Отказ, ИнформацияСтатистикиАктуальна) + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + ДанныеСтатистикиСопоставления = ПолучитьДанныеСтатистикиСопоставления(); + + ИнформацияСтатистикиАктуальна = (ДанныеСтатистикиСопоставления.ИдентификаторФайлаПакетаДанных = ИдентификаторФайлаПакетаДанных); + + Если Не ИнформацияСтатистикиАктуальна Тогда + + // появился новый файл пакета данных; загружаем информацию из файла + ОбработкаОбъект.ВыполнитьАнализСообщенияОбмена(Отказ); + + Если Не Отказ Тогда + + ЗаписатьДанныеСтатистикиСопоставления(Объект.ИмяПланаОбмена, Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных); + + КонецЕсли; + + Иначе + + // файл пакета данных не изменился; загружаем информацию из кэша + ОбработкаОбъект.ИнформацияСтатистики.Загрузить(ДанныеСтатистикиСопоставления.ИнформацияСтатистикиСопоставленияОбъектов.Скопировать()); + + КонецЕсли; + + Если Не Отказ Тогда + + ПолучитьДеревоИнформацииСтатистики(ОбработкаОбъект.ТаблицаИнформацииСтатистики()); + + ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьИнформациюСопоставленияПоСтрокеНаСервере(Отказ, КлючиСтрок) + + ИндексыСтрок = ПолучитьИндексыСтрокТаблицыИнформацииСтатистики(КлючиСтрок); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + // получаем статистическую информацию по сопоставлению + ОбработкаОбъект.ПолучитьСтатистикуСопоставленияОбъектовПоСтроке(Отказ, ИндексыСтрок); + + ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); + + // сохраняем данные статистики сопоставления + ЗаписатьДанныеСтатистикиСопоставления(Объект.ИмяПланаОбмена, Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных); + + ПолучитьДеревоИнформацииСтатистики(ОбработкаОбъект.ТаблицаИнформацииСтатистики()); + + УстановитьВидимостьГруппыДополнительнойИнформации(); + +КонецПроцедуры + +&НаСервере +Процедура ВыполнитьАвтоматическоеСопоставлениеПоУмолчаниюПоСтрокеНаСервере(Отказ, КлючиСтрок) + + ИндексыСтрок = ПолучитьИндексыСтрокТаблицыИнформацииСтатистики(КлючиСтрок); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + // выполняем автоматическое сопоставление и получаем статистическую информацию + ОбработкаОбъект.ВыполнитьАвтоматическоеСопоставлениеПоУмолчаниюИПолучитьСтатистикуСопоставления(Отказ, ИндексыСтрок); + + ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); + + // сохраняем данные статистики сопоставления + ЗаписатьДанныеСтатистикиСопоставления(Объект.ИмяПланаОбмена, Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных); + + ПолучитьДеревоИнформацииСтатистики(ОбработкаОбъект.ТаблицаИнформацииСтатистики()); + + УстановитьВидимостьГруппыДополнительнойИнформации(); + +КонецПроцедуры + +&НаСервере +Процедура ВыполнитьЗагрузкуДанныхНаСервере(Отказ, КлючиСтрок) + + ИндексыСтрок = ПолучитьИндексыСтрокТаблицыИнформацииСтатистики(КлючиСтрок); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + // выполняем загрузку данных + ОбработкаОбъект.ВыполнитьЗагрузкуДанных(Отказ, ИндексыСтрок); + + // получаем статистическую информацию по сопоставлению + ОбработкаОбъект.ПолучитьСтатистикуСопоставленияОбъектовПоСтроке(Отказ, ИндексыСтрок); + + ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); + + // сохраняем данные статистики сопоставления + ЗаписатьДанныеСтатистикиСопоставления(Объект.ИмяПланаОбмена, Объект.УзелИнформационнойБазы, ОбработкаОбъект.ТаблицаИнформацииСтатистики(), ИдентификаторФайлаПакетаДанных); + + ПолучитьДеревоИнформацииСтатистики(ОбработкаОбъект.ТаблицаИнформацииСтатистики()); + + УстановитьВидимостьГруппыДополнительнойИнформации(); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьДанныеСтатистикиСопоставленияНаСервере(Отказ, ПараметрыОповещения) + + СтрокиТаблицы = Объект.ИнформацияСтатистики.НайтиСтроки(Новый Структура("Ключ", ПараметрыОповещения.КлючУникальности)); + + ЗаполнитьЗначенияСвойств(СтрокиТаблицы[0], ПараметрыОповещения, "ДанныеУспешноЗагружены"); + + КлючиСтрок = Новый Массив; + КлючиСтрок.Добавить(ПараметрыОповещения.КлючУникальности); + + ОбновитьИнформациюСопоставленияПоСтрокеНаСервере(Отказ, КлючиСтрок); + +КонецПроцедуры + +&НаСервере +Процедура ПолучитьДеревоИнформацииСтатистики(ИнформацияСтатистики) + + КоллекцияЭлементовДерева = ДеревоИнформацииСтатистики.ПолучитьЭлементы(); + КоллекцияЭлементовДерева.Очистить(); + + ОбщегоНазначения.ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, + ОбменДаннымиСервер.ПолучитьДеревоИнформацииСтатистики(ИнформацияСтатистики) + ); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимостьГруппыДополнительнойИнформации() + + // если в таблице информации статистике есть хотя бы одна строка с сопоставлением меньшим 100%, + // то группу дополнительной информации делаем видимой + МассивСтрок = Объект.ИнформацияСтатистики.НайтиСтроки(Новый Структура("ИндексКартинки", 1)); + + Элементы.ГруппаДополнительнойИнформации.Видимость = (МассивСтрок.Количество() > 0); + +КонецПроцедуры + +&НаСервере +Функция ПолучитьДанныеСтатистикиСопоставления() + Перем ДанныеСтатистикиСопоставления; + + ИмяФайла = ИмяФайлаДанныхСтатистикиСопоставления(Объект.ИмяПланаОбмена, Объект.УзелИнформационнойБазы); + + Файл = Новый Файл(ИмяФайла); + + Если Файл.Существует() Тогда + + ДанныеСтатистикиСопоставления = ЗначениеИзФайла(ИмяФайла); + + КонецЕсли; + + Если ТипЗнч(ДанныеСтатистикиСопоставления) <> Тип("Структура") Тогда + + ДанныеСтатистикиСопоставления = Новый Структура("ИдентификаторФайлаПакетаДанных, ИнформацияСтатистикиСопоставленияОбъектов"); + + КонецЕсли; + + Возврат ДанныеСтатистикиСопоставления; + +КонецФункции + +&НаСервере +Функция ПакетДанныхЗагруженПолностью() + + ТаблицаУспешныхЗагрузок = Объект.ИнформацияСтатистики.Выгрузить(Новый Структура("ДанныеУспешноЗагружены", Истина) ,"ДанныеУспешноЗагружены"); + + Возврат ТаблицаУспешныхЗагрузок.Количество() = Объект.ИнформацияСтатистики.Количество(); + +КонецФункции + +&НаСервере +Функция ВсеТаблицыОбъектовСопоставлены() + + Возврат (Объект.ИнформацияСтатистики.Выгрузить(,"КоличествоОбъектовНесопоставленных").Итог("КоличествоОбъектовНесопоставленных") = 0); + +КонецФункции + +&НаСервере +Процедура ПолучитьСтруктуруПроверокПриЗавершенииСопоставления(СтруктураПроверок) + + СтруктураПроверок.ПакетДанныхЗагруженПолностью = ПакетДанныхЗагруженПолностью(); + СтруктураПроверок.ВсеТаблицыОбъектовСопоставлены = ВсеТаблицыОбъектовСопоставлены(); + +КонецПроцедуры + +&НаСервере +Процедура ВидТранспортаСообщенийОбменаПриИзмененииНаСервере() + + ОбменЧерезВнешнееСоединение = (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM); + ОбменЧерезВебСервис = (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS); + + ОбменЧерезПодключениеККорреспонденту = ОбменЧерезВнешнееСоединение ИЛИ ОбменЧерезВебСервис; + + СтруктураПараметровПодключенияВнешнегоСоединения = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаДляУзла(Объект.УзелИнформационнойБазы); + СтруктураПараметровПодключенияВнешнегоСоединения = УдалитьПрефиксВКлючахКоллекции(СтруктураПараметровПодключенияВнешнегоСоединения, "COM"); + + Если ЭтоЗапускИзДругогоПриложения Тогда + + Элементы.ИнформационнаяНадписьНастройкиРасписания.Видимость = Ложь; + + ОткрытьПомощникСозданияСценарияОбменаДанными = Ложь; + + Иначе + + УзелИспользуетсяВСценарииОбмена = УзелИнформационнойБазыИспользуетсяВСценарииОбмена(Объект.УзелИнформационнойБазы); + + Элементы.ИнформационнаяНадписьНастройкиРасписания.Видимость = Не УзелИспользуетсяВСценарииОбмена И Пользователи.РолиДоступны("ДобавлениеИзменениеОбменовДанными"); + + ОткрытьПомощникСозданияСценарияОбменаДанными = Пользователи.РолиДоступны("ДобавлениеИзменениеОбменовДанными"); + + КонецЕсли; + + // Устанавливаем текущую таблицу переходов + Если ОбменЧерезПодключениеККорреспонденту Тогда + + СценарийОбменаЧерезВнешнееСоединениеИлиВебСервис(); + + Иначе + + СценарийОбменаЧерезОбычныеКаналыСвязи(); + + КонецЕсли; + + УстановитьВидимостьКнопкиОткрытияКаталогаОбмена(); + +КонецПроцедуры + +// Удаляет заданный литерал (префикс) в именах ключей переданной структуры. +// Создает новую структуру. +// +// Параметры: +// Структура. Тип: Структура. +// Структура элементов, на основании которой необходимо создать новую структуру с ключами без заданного литерала. +// +// Литерал. Тип: Строка. +// Строка символов, которую необходимо исключить из имени ключей переданной структуры. +// +// Возвращающее значение: +// Тип. Структура. +// Возвращаемая структура получается на основании копирования исходной структуры. +// +&НаСервере +Функция УдалитьПрефиксВКлючахКоллекции(Структура, Литерал) + + Результат = Новый Структура; + + Для Каждого Элемент Из Структура Цикл + + Результат.Вставить(СтрЗаменить(Элемент.Ключ, Литерал, ""), Элемент.Значение); + + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаСервере +Функция ПолучитьИндексыСтрокТаблицыИнформацииСтатистики(КлючиСтрок) + + ИндексыСтрок = Новый Массив; + + Для Каждого Ключ ИЗ КлючиСтрок Цикл + + СтрокиТаблицы = Объект.ИнформацияСтатистики.НайтиСтроки(Новый Структура("Ключ", Ключ)); + + ИндексСтроки = Объект.ИнформацияСтатистики.Индекс(СтрокиТаблицы[0]); + + ИндексыСтрок.Добавить(ИндексСтроки); + + КонецЦикла; + + Возврат ИндексыСтрок; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ПолучитьСостоянияОбменовДанными(РезультатЗагрузкиДанных, РезультатВыгрузкиДанных, Знач УзелИнформационнойБазы) + + СостоянияОбменовДанными = РегистрыСведений.СостоянияОбменовДанными.СостоянияОбменовДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы); + + РезультатЗагрузкиДанных = СостоянияОбменовДанными["РезультатЗагрузкиДанных"]; + РезультатВыгрузкиДанных = СостоянияОбменовДанными["РезультатВыгрузкиДанных"]; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ИмяФайлаДанныхСтатистикиСопоставления(ИмяПланаОбмена, УзелИнформационнойБазы) + + Ключ = "ДанныеСтатистикиСопоставления[ИмяПланаОбмена][КодУзла]"; + + Ключ = СтрЗаменить(Ключ, "[ИмяПланаОбмена]", ИмяПланаОбмена); + Ключ = СтрЗаменить(Ключ, "[КодУзла]", ОбщегоНазначения.ПолучитьЗначениеРеквизита(УзелИнформационнойБазы, "Код")); + + Возврат ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов(), Ключ); + +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗаписатьДанныеСтатистикиСопоставления(ИмяПланаОбмена, УзелИнформационнойБазы, Знач ИнформацияСтатистики, ИдентификаторФайлаПакетаДанных) + + Если ТипЗнч(ИнформацияСтатистики) = Тип("ДанныеФормыКоллекция") Тогда + + ИнформацияСтатистики = ИнформацияСтатистики.Выгрузить(); + + КонецЕсли; + + ДанныеСтатистикиСопоставления = Новый Структура; + ДанныеСтатистикиСопоставления.Вставить("ИдентификаторФайлаПакетаДанных", ИдентификаторФайлаПакетаДанных); + ДанныеСтатистикиСопоставления.Вставить("ИнформацияСтатистикиСопоставленияОбъектов", ИнформацияСтатистики); + + ЗначениеВФайл(ИмяФайлаДанныхСтатистикиСопоставления(ИмяПланаОбмена, УзелИнформационнойБазы), ДанныеСтатистикиСопоставления); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура УдалитьВременныйКаталогСообщенийОбмена(ИмяВременногоКаталога) + + Если Не ПустаяСтрока(ИмяВременногоКаталога) Тогда + + Попытка + УдалитьФайлы(ИмяВременногоКаталога); + ИмяВременногоКаталога = ""; + Исключение + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗаписатьОшибкуВЖурналРегистрации(СтрокаСообщенияОбОшибке, Событие) + + ЗаписьЖурналаРегистрации(Событие, УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПолучитьИмяКаталогаНаСервере(ВидТранспортаСообщенийОбмена, УзелИнформационнойБазы) + + Возврат РегистрыСведений.НастройкиТранспортаОбмена.ИмяКаталогаОбменаИнформацией(ВидТранспортаСообщенийОбмена, УзелИнформационнойБазы); + +КонецФункции + +&НаСервереБезКонтекста +Функция УзелИнформационнойБазыИспользуетсяВСценарииОбмена(УзелИнформационнойБазы) + + ТекстЗапроса = " + |ВЫБРАТЬ ПЕРВЫЕ 1 1 + |ИЗ + | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК СценарииОбменовДаннымиНастройкиОбмена + |ГДЕ + | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы + | И НЕ СценарииОбменовДаннымиНастройкиОбмена.Ссылка.ПометкаУдаления + |"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); + Запрос.Текст = ТекстЗапроса; + + Возврат Не Запрос.Выполнить().Пустой(); + +КонецФункции + +&НаСервере +Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыНаСервере(Отказ) + + ДатаНачалаОперации = ТекущаяДатаСеанса(); + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + Отказ, + Объект.УзелИнформационнойБазы, + Ложь, + Истина, + Объект.ВидТранспортаСообщенийОбмена, + ДлительнаяОперация, + ИдентификаторОперации, + ИдентификаторФайла, + Истина + ); + + Если ДлительнаяОперация Тогда + // Получаем настройки подключения к веб-сервису корреспондента. + // Настройки нужны для периодического опроса корреспондента на предмет окончания длительной операции выгрузки данных. + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(Объект.УзелИнформационнойБазы); + ЗаполнитьЗначенияСвойств(ЭтаФорма, СтруктураНастроек, "WSURLВебСервиса, WSИмяПользователя, WSПароль"); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСтраницыНастроекТранспорта() + + РольДоступнаДобавлениеИзменениеОбменовДанными = Пользователи.РолиДоступны("ДобавлениеИзменениеОбменовДанными"); + + Элементы.НастроитьПараметрыТранспортаСообщенийОбмена.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными; + Элементы.НастроитьПараметрыТранспортаСообщенийОбмена1.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными; + + НастроенныеВидыТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастроенныеВидыТранспорта(Объект.УзелИнформационнойБазы); + + ОбменДаннымиСервер.ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(Объект.УзелИнформационнойБазы, Элементы.ВидТранспортаСообщенийОбмена, НастроенныеВидыТранспорта); + + Объект.ВидТранспортаСообщенийОбмена = Неопределено; + + ВидТранспортаСообщенийОбменаПоУмолчанию = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(Объект.УзелИнформационнойБазы); + + Если Элементы.ВидТранспортаСообщенийОбмена.СписокВыбора.НайтиПоЗначению(ВидТранспортаСообщенийОбменаПоУмолчанию) <> Неопределено Тогда + + Объект.ВидТранспортаСообщенийОбмена = ВидТранспортаСообщенийОбменаПоУмолчанию; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(Объект.ВидТранспортаСообщенийОбмена) + И Элементы.ВидТранспортаСообщенийОбмена.СписокВыбора.Количество() > 0 Тогда + + Объект.ВидТранспортаСообщенийОбмена = Элементы.ВидТранспортаСообщенийОбмена.СписокВыбора[0].Значение; + + КонецЕсли; + + Элементы.ВидТранспортаСообщенийОбменаСтрокой.Заголовок = ?(Не ЗначениеЗаполнено(Объект.ВидТранспортаСообщенийОбмена), + НСтр("ru = '<Настройки транспорта не заданы>'"), + Строка(Объект.ВидТранспортаСообщенийОбмена) + ); + + Элементы.СтраницыНастроекТранспорта.ТекущаяСтраница = ?( + Элементы.ВидТранспортаСообщенийОбмена.СписокВыбора.Количество() = 1, + Элементы.СтраницаДоступенТолькоОдинВидТранспорта, + Элементы.СтраницаВыборВидаТранспортаИзДоступных + ); + + ВидТранспортаСообщенийОбменаПриИзмененииНаСервере(); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимостьКнопкиОткрытияКаталогаОбмена() + + ВидимостьКнопки = Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE + ИЛИ Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP + ; + + Элементы.ОткрытьКаталогОбменаИнформацией.Видимость = ВидимостьКнопки; + Элементы.ОткрытьКаталогОбменаИнформацией1.Видимость = ВидимостьКнопки; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МАСТЕРА +// Обработчики ожидания + +&НаКлиенте +Процедура ОбработчикОжиданияКомандаДалее() + + КомандаДалее(Неопределено); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикОжиданияЗагрузкиДанных() + + СтрокаСообщенияОбОшибке = ""; + + СостояниеОперации = ОбменДаннымиСервер.СостояниеДлительнойОперации( + ИдентификаторОперации, + WSURLВебСервиса, + WSИмяПользователя, + WSПароль, + СтрокаСообщенияОбОшибке + ); + + Если СостояниеОперации = "Active" Тогда + + ПодключитьОбработчикОжидания("ОбработчикОжиданияЗагрузкиДанных", 5, Истина); + + ИначеЕсли СостояниеОперации = "Completed" Тогда + + ДлительнаяОперация = Ложь; + + Отказ = Ложь; + ИнформацияСтатистикиАктуальна = Истина; + + ПолучитьЗаголовокПакетаДанныхНаСервереОкончаниеДлительнойОперации(Отказ, ИнформацияСтатистикиАктуальна); + + Если Отказ Тогда + + // Устанавливаем новый сценарий в случае ошибки при загрузке данных + Если ОбменЧерезПодключениеККорреспонденту Тогда + + СценарийОбменаЧерезВнешнееСоединениеИлиВебСервисПриОшибкеЗагрузки(); + + Иначе + + СценарийОбменаЧерезОбычныеКаналыСвязиПриОшибкеЗагрузки(); + + КонецЕсли; + + КомандаДалее(Неопределено); + + ИначеЕсли Не ИнформацияСтатистикиАктуальна Тогда + + // если информация устарела (есть новый файл пакета данных), то обновляем ее + ОбновитьИнформациюСопоставленияПолностью(Неопределено); + + КомандаДалее(Неопределено); + + Иначе + + РазвернутьДеревоИнформацииСтатистики(КлючТекущейСтрокиТаблицыИнформацииСтатистики); + + КомандаДалее(Неопределено); + + КонецЕсли; + + Иначе // Failed, Canceled + + ДлительнаяОперация = Ложь; + + ЗаписатьОшибкуВЖурналРегистрации(СтрокаСообщенияОбОшибке, СобытиеЖурналаРегистрацииЗагрузкаДанных); + + // Устанавливаем новый сценарий в случае ошибки при загрузке данных + Если ОбменЧерезПодключениеККорреспонденту Тогда + + СценарийОбменаЧерезВнешнееСоединениеИлиВебСервисПриОшибкеЗагрузки(); + + Иначе + + СценарийОбменаЧерезОбычныеКаналыСвязиПриОшибкеЗагрузки(); + + КонецЕсли; + + КомандаДалее(Неопределено); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикОжиданияВыгрузкиДанных() + + СтрокаСообщенияОбОшибке = ""; + + СостояниеОперации = ОбменДаннымиСервер.СостояниеДлительнойОперации( + ИдентификаторОперации, + WSURLВебСервиса, + WSИмяПользователя, + WSПароль, + СтрокаСообщенияОбОшибке + ); + + Если СостояниеОперации = "Active" Тогда + + ПодключитьОбработчикОжидания("ОбработчикОжиданияВыгрузкиДанных", 5, Истина); + + ИначеЕсли СостояниеОперации = "Completed" Тогда + + ДлительнаяОперация = Ложь; + + ОбменДаннымиСервер.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Объект.УзелИнформационнойБазы, ДатаНачалаОперации); + + КомандаДалее(Неопределено); + + Иначе // Failed, Canceled + + ДлительнаяОперация = Ложь; + + ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбменаСОшибкой( + Объект.УзелИнформационнойБазы, + "ВыгрузкаДанных", + ДатаНачалаОперации, + СтрокаСообщенияОбОшибке + ); + + КомандаДалее(Неопределено); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбработчикДлительнойОперации() + + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + // обработчик ОбработкаДлительнойОперации + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации) Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПерейтиДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации); + + Отказ = Ложь; + ПерейтиДалее = Истина; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + ИначеЕсли ПерейтиДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + + Иначе + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции мастера &НаКлиенте Процедура ВыполнитьПроверкуНаличияСопоставленныхОбъектов(Отказ, ВыделенныеСтроки) @@ -1068,7 +1347,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВНУТРЕННИЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Внутренние процедуры и функции &НаКлиенте Процедура ИзменитьПорядковыйНомерПерехода(Итератор) @@ -1099,14 +1378,51 @@ &НаКлиенте Процедура ПорядковыйНомерПереходаПриИзменении(Знач ЭтоПереходДалее) + // Выполняем обработчики событий перехода + ВыполнитьОбработчикиСобытийПерехода(ЭтоПереходДалее); + + // Устанавливаем отображение страниц СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); Если СтрокиПереходаТекущие.Количество() = 0 Тогда - Возврат; + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); КонецЕсли; СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + Элементы.ПанельОсновная.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяОсновнойСтраницы]; + Элементы.ПанельНавигации.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяСтраницыНавигации]; + + // Устанавливаем текущую кнопку по умолчанию + КнопкаДалее = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаДалее"); + + Если КнопкаДалее <> Неопределено Тогда + + КнопкаДалее.КнопкаПоУмолчанию = Истина; + + Иначе + + КнопкаГотово = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаГотово"); + + Если КнопкаГотово <> Неопределено Тогда + + КнопкаГотово.КнопкаПоУмолчанию = Истина; + + КонецЕсли; + + КонецЕсли; + + Если ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация Тогда + + ПодключитьОбработчикОжидания("ВыполнитьОбработчикДлительнойОперации", 0.1, Истина); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбработчикиСобытийПерехода(Знач ЭтоПереходДалее) + // Обработчики событий переходов Если ЭтоПереходДалее Тогда @@ -1119,14 +1435,15 @@ СтрокаПерехода = СтрокиПерехода[0]; // обработчик ПриПереходеДалее - Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) Тогда + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) + И Не СтрокаПерехода.ДлительнаяОперация Тогда - ИмяФункции = "Подключаемый_[ИмяОбработчика](Отказ)"; - ИмяФункции = СтрЗаменить(ИмяФункции, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); Отказ = Ложь; - А = Вычислить(ИмяФункции); + А = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -1149,14 +1466,15 @@ СтрокаПерехода = СтрокиПерехода[0]; // обработчик ПриПереходеНазад - Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад) Тогда + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад) + И Не СтрокаПерехода.ДлительнаяОперация Тогда - ИмяФункции = "Подключаемый_[ИмяОбработчика](Отказ)"; - ИмяФункции = СтрЗаменить(ИмяФункции, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад); + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад); Отказ = Ложь; - А = Вычислить(ИмяФункции); + А = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -1170,16 +1488,30 @@ КонецЕсли; + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + Если СтрокаПереходаТекущая.ДлительнаяОперация И Не ЭтоПереходДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + Возврат; + КонецЕсли; + // обработчик ПриОткрытии Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии) Тогда - ИмяФункции = "Подключаемый_[ИмяОбработчика](Отказ, ПропуститьСтраницу, ЭтоПереходДалее)"; - ИмяФункции = СтрЗаменить(ИмяФункции, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии); + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПропуститьСтраницу, ЭтоПереходДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии); Отказ = Ложь; ПропуститьСтраницу = Ложь; - А = Вычислить(ИмяФункции); + А = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -1207,35 +1539,6 @@ КонецЕсли; - // Установка отображения текущей страницы - Элементы.ПанельОсновная.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяОсновнойСтраницы]; - Элементы.ПанельНавигации.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяСтраницыНавигации]; - - Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяСтраницыДекорации) Тогда - - Элементы.ПанельДекорации.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяСтраницыДекорации]; - - КонецЕсли; - - // Устанавливаем текущую кнопку по умолчанию - КнопкаДалее = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаДалее"); - - Если КнопкаДалее <> Неопределено Тогда - - КнопкаДалее.КнопкаПоУмолчанию = Истина; - - Иначе - - КнопкаГотово = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаГотово"); - - Если КнопкаГотово <> Неопределено Тогда - - КнопкаГотово.КнопкаПоУмолчанию = Истина; - - КонецЕсли; - - КонецЕсли; - КонецПроцедуры &НаСервере @@ -1295,65 +1598,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// - -&НаКлиенте -Процедура КомандаДалее(Команда) - - ИзменитьПорядковыйНомерПерехода(+1); - - Если Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаОжиданияВыгрузкиДанных - ИЛИ Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаОжиданияЗагрузкиДанных Тогда - - ПодключитьОбработчикОжидания("ОбработчикОжиданияКомандаДалее", 0.1, Истина); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаНазад(Команда) - - ИзменитьПорядковыйНомерПерехода(-1); - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаОтмена(Команда) - - Закрыть(); - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаГотово(Команда) - - Если Не УзелИспользуетсяВСценарииОбмена - И ОткрытьПомощникСозданияСценарияОбменаДанными Тогда - - ПараметрыФормы = Новый Структура("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); - - ОткрытьФормуМодально("Справочник.СценарииОбменовДанными.ФормаОбъекта", ПараметрыФормы, ЭтаФорма); - - КонецЕсли; - - ЗакрытьФормуБезусловно = Истина; - Закрыть(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбработчикОжиданияКомандаДалее() - - КомандаДалее(Неопределено); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПЕРЕОПРЕДЕЛЯЕМАЯ ЧАСТЬ ПОМОЩНИКА -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// РАЗДЕЛ ОБРАБОТЧИКОВ СОБЫТИЙ ПЕРЕХОДОВ +// Переопределяемая часть - Обработчики событий переходов &НаКлиенте Функция Подключаемый_СтраницаНачала_ПриПереходеДалее(Отказ) @@ -1418,23 +1663,34 @@ Если ТекущиеДанные <> Неопределено Тогда КлючТекущейСтроки = ТекущиеДанные.Ключ; + КлючТекущейСтрокиТаблицыИнформацииСтатистики = ТекущиеДанные.Ключ; КонецЕсли; ИнформацияСтатистикиАктуальна = Истина; + ИдентификаторФайла = ""; + ДлительнаяОперация = Ложь; + ИдентификаторОперации = ""; + ПолучитьЗаголовокПакетаДанныхНаСервере(Отказ, ИнформацияСтатистикиАктуальна); + Если ДлительнаяОперация Тогда + Возврат Неопределено; + КонецЕсли; + Если Отказ Тогда - // Чтение входящего сообщения обмена произошло с ошибками - НСтрока = НСтр("ru = 'При загрузке данных возникли ошибки. - |Перейти в журнал регистрации?'"); - // - Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); - Если Ответ = КодВозвратаДиалога.Да Тогда + Отказ = Ложь; + + // Устанавливаем новый сценарий в случае ошибки при загрузке данных + Если ОбменЧерезПодключениеККорреспонденту Тогда - ОбменДаннымиКлиент.ПерейтиВЖурналРегистрацииСобытийДанныхМодально(Объект.УзелИнформационнойБазы, ЭтаФорма, "ЗагрузкаДанных"); + СценарийОбменаЧерезВнешнееСоединениеИлиВебСервисПриОшибкеЗагрузки(); + + Иначе + + СценарийОбменаЧерезОбычныеКаналыСвязиПриОшибкеЗагрузки(); КонецЕсли; @@ -1465,18 +1721,68 @@ КонецФункции &НаКлиенте -Функция Подключаемый_СтраницаОжиданияВыгрузкиДанных_ПриПереходеДалее(Отказ) +Функция Подключаемый_СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация_ПриОткрытии(Отказ, ПропуститьСтраницу, Знач ЭтоПереходДалее) - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, Объект.УзелИнформационнойБазы, Ложь, Истина, Объект.ВидТранспортаСообщенийОбмена); - - Если Отказ Тогда + Если Не ЭтоПереходДалее Тогда - Предупреждение(НСтр("ru = 'В процессе выгрузки данных возникли ошибки.'"), 15); + ПропуститьСтраницу = Истина; + Возврат Неопределено; - Отказ = Ложь; // Позволяем выполнить переход на следующую страницу + ИначеЕсли Не ДлительнаяОперация Тогда + + ПропуститьСтраницу = Истина; + Возврат Неопределено; КонецЕсли; + Если ДлительнаяОперация Тогда + + ПодключитьОбработчикОжидания("ОбработчикОжиданияЗагрузкиДанных", 5, Истина); + + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ПриОткрытии(Отказ, ПропуститьСтраницу, Знач ЭтоПереходДалее) + + Если Не ЭтоПереходДалее Тогда + + ПропуститьСтраницу = Истина; + Возврат Неопределено; + + ИначеЕсли Не ДлительнаяОперация Тогда + + ПропуститьСтраницу = Истина; + Возврат Неопределено; + + КонецЕсли; + + Если ДлительнаяОперация Тогда + + ПодключитьОбработчикОжидания("ОбработчикОжиданияВыгрузкиДанных", 5, Истина); + + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаОжиданияВыгрузкиДанных_ПриПереходеДалее(Отказ) + + ДлительнаяОперация = Ложь; + ИдентификаторОперации = ""; + ИдентификаторФайла = ""; + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыНаСервере(Отказ); + + Если ДлительнаяОперация Тогда + Возврат Неопределено; + КонецЕсли; + + Отказ = Ложь; // Позволяем выполнить переход на следующую страницу + Возврат Неопределено; КонецФункции @@ -1503,10 +1809,10 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// РАЗДЕЛ ИНИЦИАЛИЗАЦИИ ПЕРЕХОДОВ ПОМОЩНИКА +// Переопределяемая часть - Инициализация переходов помощника &НаСервере -Процедура ТаблицаПереходовПоСценарию1() +Процедура СценарийОбменаЧерезОбычныеКаналыСвязи() ТаблицаПереходов.Очистить(); @@ -1519,13 +1825,42 @@ КонецПроцедуры &НаСервере -Процедура ТаблицаПереходовПоСценарию2() +Процедура СценарийОбменаЧерезОбычныеКаналыСвязиПриОшибкеЗагрузки() ТаблицаПереходов.Очистить(); ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",,, "СтраницаНачала_ПриПереходеДалее"); ТаблицаПереходовНоваяСтрока(2, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",, "СтраницаОжиданияЗагрузкиДанных_ПриОткрытии", "СтраницаОжиданияЗагрузкиДанных_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(3, "СтраницаИнформацииСтатистики", "СтраницаНавигацииПродолжение",,, "СтраницаИнформацииСтатистики_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(3, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",, "СтраницаОжиданияВыгрузкиДанных_ПриОткрытии", "СтраницаОжиданияВыгрузкиДанных_ПриПереходеДалее"); ТаблицаПереходовНоваяСтрока(4, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание",, "СтраницаОкончанияСопоставления_ПриОткрытии"); КонецПроцедуры + +&НаСервере +Процедура СценарийОбменаЧерезВнешнееСоединениеИлиВебСервис() + + ТаблицаПереходов.Очистить(); + + ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",,, "СтраницаНачала_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(2, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",, "СтраницаОжиданияЗагрузкиДанных_ПриОткрытии", "СтраницаОжиданияЗагрузкиДанных_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(3, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация", "СтраницаНавигацииОжидание",, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация_ПриОткрытии"); + ТаблицаПереходовНоваяСтрока(4, "СтраницаИнформацииСтатистики", "СтраницаНавигацииПродолжение",,, "СтраницаИнформацииСтатистики_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(5, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",, "СтраницаОжиданияВыгрузкиДанных_ПриОткрытии", "СтраницаОжиданияВыгрузкиДанных_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(6, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация", "СтраницаНавигацииОжидание",, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ПриОткрытии"); + ТаблицаПереходовНоваяСтрока(7, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание",, "СтраницаОкончанияСопоставления_ПриОткрытии"); + +КонецПроцедуры + +&НаСервере +Процедура СценарийОбменаЧерезВнешнееСоединениеИлиВебСервисПриОшибкеЗагрузки() + + ТаблицаПереходов.Очистить(); + + ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",,, "СтраницаНачала_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(2, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",, "СтраницаОжиданияЗагрузкиДанных_ПриОткрытии", "СтраницаОжиданияЗагрузкиДанных_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(3, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация", "СтраницаНавигацииОжидание",, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация_ПриОткрытии"); + ТаблицаПереходовНоваяСтрока(4, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",, "СтраницаОжиданияВыгрузкиДанных_ПриОткрытии", "СтраницаОжиданияВыгрузкиДанных_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(5, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация", "СтраницаНавигацииОжидание",, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ПриОткрытии"); + ТаблицаПереходовНоваяСтрока(6, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание",, "СтраницаОкончанияСопоставления_ПриОткрытии"); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl index af8139cd1..c82412ff8 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl @@ -1,18 +1,33 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Экспортные служебные процедуры и функции // Получает статистику сопоставления объектов для строк таблицы ИнформацияСтатистики // // Параметры: // Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры -// ИндексыСтрок – Массив – индексы строк таблицы ИнформацияСтатистики -// для которых необходимо получить информацию статистики сопоставления +// ИндексыСтрок (необязательный) – Массив – индексы строк таблицы ИнформацияСтатистики +// для которых необходимо получить информацию статистики сопоставления. +// Если не указан, то операция будет выполнена для всех строк таблицы. // -Процедура ПолучитьСтатистикуСопоставленияОбъектовПоСтроке(Отказ, ИндексыСтрок) Экспорт +Процедура ПолучитьСтатистикуСопоставленияОбъектовПоСтроке(Отказ, ИндексыСтрок = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); + Если ИндексыСтрок = Неопределено Тогда + + ИндексыСтрок = Новый Массив; + + Для Каждого СтрокаТаблицы Из ИнформацияСтатистики Цикл + + ИндексыСтрок.Добавить(ИнформацияСтатистики.Индекс(СтрокаТаблицы)); + + КонецЦикла; + + КонецЕсли; + // выполняем загрузку данных из сообщения обмена в кэш сразу для нескольких таблиц ВыполнитьЗагрузкуДанныхИзСообщенияОбменаВКэш(Отказ, ИндексыСтрок); @@ -64,14 +79,26 @@ // // Параметры: // Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры -// ИндексыСтрок – Массив – индексы строк таблицы ИнформацияСтатистики -// для которых необходимо выполнить автоматическое сопоставление -// и получить информацию статистики +// ИндексыСтрок (необязательный) – Массив – индексы строк таблицы ИнформацияСтатистики +// для которых необходимо выполнить автоматическое сопоставление и получить информацию статистики. +// Если не указан, то операция будет выполнена для всех строк таблицы. // -Процедура ВыполнитьАвтоматическоеСопоставлениеПоУмолчаниюИПолучитьСтатистикуСопоставления(Отказ, ИндексыСтрок) Экспорт +Процедура ВыполнитьАвтоматическоеСопоставлениеПоУмолчаниюИПолучитьСтатистикуСопоставления(Отказ, ИндексыСтрок = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); + Если ИндексыСтрок = Неопределено Тогда + + ИндексыСтрок = Новый Массив; + + Для Каждого СтрокаТаблицы Из ИнформацияСтатистики Цикл + + ИндексыСтрок.Добавить(ИнформацияСтатистики.Индекс(СтрокаТаблицы)); + + КонецЦикла; + + КонецЕсли; + // выполняем загрузку данных из сообщения обмена в кэш сразу для нескольких таблиц ВыполнитьЗагрузкуДанныхИзСообщенияОбменаВКэш(Отказ, ИндексыСтрок); @@ -131,13 +158,26 @@ // // Параметры: // Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры -// ИндексыСтрок – Массив – индексы строк таблицы ИнформацияСтатистики -// для которых необходимо выполнить загрузку данных +// ИндексыСтрок (необязательный) – Массив – индексы строк таблицы ИнформацияСтатистики +// для которых необходимо выполнить загрузку данных. +// Если не указан, то операция будет выполнена для всех строк таблицы. // -Процедура ВыполнитьЗагрузкуДанных(Отказ, ИндексыСтрок) Экспорт +Процедура ВыполнитьЗагрузкуДанных(Отказ, ИндексыСтрок = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); + Если ИндексыСтрок = Неопределено Тогда + + ИндексыСтрок = Новый Массив; + + Для Каждого СтрокаТаблицы Из ИнформацияСтатистики Цикл + + ИндексыСтрок.Добавить(ИнформацияСтатистики.Индекс(СтрокаТаблицы)); + + КонецЦикла; + + КонецЕсли; + ТаблицыДляЗагрузки = Новый Массив; Для Каждого ИндексСтроки ИЗ ИндексыСтрок Цикл @@ -186,7 +226,13 @@ // ИдентификаторФайлаПакетаДанных – ДатаВремя – дата изменения сообщения обмена; // выступает в качестве идентификатора файла для подсистемы обмена данными // -Процедура ПолучитьСообщениеОбменаВоВременныйКаталог(Отказ, ИдентификаторФайлаПакетаДанных = Неопределено) Экспорт +Процедура ПолучитьСообщениеОбменаВоВременныйКаталог( + Отказ, + ИдентификаторФайлаПакетаДанных = Неопределено, + ИдентификаторФайла = "", + ДлительнаяОперация = Ложь, + ИдентификаторОперации = "" + ) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -197,6 +243,16 @@ СтруктураДанных = ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондента(Отказ, УзелИнформационнойБазы); + ИначеЕсли ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + + СтруктураДанных = ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( + Отказ, + УзелИнформационнойБазы, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации + ); + Иначе // FILE, FTP, EMAIL СтруктураДанных = ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталог(Отказ, УзелИнформационнойБазы, ВидТранспортаСообщенийОбмена); @@ -209,12 +265,41 @@ КонецПроцедуры +// Выполняет загрузку сообщения обмена из сервиса передачи файлов +// во временный каталог пользователя операционной системы +// +Процедура ПолучитьСообщениеОбменаВоВременныйКаталогОкончаниеДлительнойОперации( + Отказ, + ИдентификаторФайлаПакетаДанных, + ИдентификаторФайла + ) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // удаляем предыдущий временный каталог сообщений обмена со всеми вложенными файлами + УдалитьВременныйКаталогСообщенийОбмена(ИмяВременногоКаталогаСообщенийОбмена); + + СтруктураДанных = ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( + Отказ, + УзелИнформационнойБазы, + ИдентификаторФайла + ); + + ИмяВременногоКаталогаСообщенийОбмена = СтруктураДанных.ИмяВременногоКаталогаСообщенийОбмена; + ИдентификаторФайлаПакетаДанных = СтруктураДанных.ИдентификаторФайлаПакетаДанных; + ИмяФайлаСообщенияОбмена = СтруктураДанных.ИмяФайлаСообщенияОбмена; + +КонецПроцедуры + // Выполняет анализ входящего сообщения обмена. Заполняет данными таблицу ИнформацияСтатистики // // Параметры: // Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры -// -Процедура ВыполнитьАнализСообщенияОбмена(Отказ) Экспорт +// ПринятьСообщение - Булево - сообщение обмена считается принятым, если загружены все данные из сообщения. +// Если Истина, то номер входящего сообщения в узле плана обмена устанавливается. Если Ложь, то номер входящего сообщения +// не устанавливается, даже если все данные сообщения были успешно загружены. +// +Процедура ВыполнитьАнализСообщенияОбмена(Отказ, ПринятьСообщение = Истина) Экспорт Если ПустаяСтрока(ИмяВременногоКаталогаСообщенийОбмена) Тогда @@ -252,7 +337,7 @@ // определяем строки таблицы с признаком "ОдинКоМногим" ИнформацияСтатистикиВременная = ИнформацияСтатистики.Выгрузить(, "ИмяТаблицыПриемника, ЭтоУдалениеОбъекта"); - ОбщегоНазначения.ДобавитьИтераторТаблице(ИнформацияСтатистикиВременная, 1, "Итератор"); + ДобавитьКолонкуСоЗначениемВТаблицу(ИнформацияСтатистикиВременная, 1, "Итератор"); ИнформацияСтатистикиВременная.Свернуть("ИмяТаблицыПриемника, ЭтоУдалениеОбъекта", "Итератор"); @@ -274,7 +359,7 @@ КонецЦикла; // если загрузка всех данных выполнена, то устанавливаем номер входящего сообщения в узле информационной базы - Если ПакетДанныхЗагруженПолностью() Тогда + Если ПринятьСообщение И ПакетДанныхЗагруженПолностью() Тогда УстановитьНомерВходящегоСообщенияУзлаИнформационнойБазы(Отказ); @@ -282,21 +367,8 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ СВОЙСТВА - -// Функция-свойство: данные табличной части ИнформацияСтатистики -// -// Тип: ТаблицаЗначений -// -Функция ТаблицаИнформацииСтатистики() Экспорт - - Возврат ИнформацияСтатистики.Выгрузить(); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ВСПОМОГАТЕЛЬНЫЕ +/////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции // Выполняет загрузку данных (таблиц) из сообщения обмена в кэш // Загружаются только те таблицы, которые ранее не были загружены @@ -358,6 +430,7 @@ УзелИнформационнойБазыОбъект = УзелИнформационнойБазы.ПолучитьОбъект(); УзелИнформационнойБазыОбъект.НомерПринятого = НомерВходящегоСообщения; + УзелИнформационнойБазыОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); Попытка УзелИнформационнойБазыОбъект.Записать(); @@ -403,6 +476,14 @@ КонецПроцедуры +Процедура ДобавитьКолонкуСоЗначениемВТаблицу(Таблица, ЗначениеИтератора, ИмяПоляИтератора) + + Таблица.Колонки.Добавить(ИмяПоляИтератора); + + Таблица.ЗаполнитьЗначения(ЗначениеИтератора, ИмяПоляИтератора); + +КонецПроцедуры + Функция ПолучитьИмяТаблицыПоТипу(Тип) Возврат Метаданные.НайтиПоТипу(Тип).ПолноеИмя(); @@ -416,3 +497,16 @@ Возврат ТаблицаУспешныхЗагрузок.Количество() = ИнформацияСтатистики.Количество(); КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Функции-свойства + +// Данные табличной части ИнформацияСтатистики +// +// Тип: ТаблицаЗначений +// +Функция ТаблицаИнформацииСтатистики() Экспорт + + Возврат ИнформацияСтатистики.Выгрузить(); + +КонецФункции diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Form.form index 05f9a9e8d..52d608fe1 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Form.form @@ -66,8 +66,8 @@ Form.StandardCommand.Close - Normal PictureAndText + true true true UserCmds diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Module.bsl index 29e1c8def..4b0ce4013 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -6,7 +8,7 @@ Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - + Макет = Обработки.ПомощникСозданияОбменаДанными.ПолучитьМакет(Параметры.ИмяМакета); ПолеHTMLДокумента = Макет.ПолучитьТекст(); diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Form.form index f6aa283ce..39a67a853 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Form.form @@ -88,7 +88,8 @@ 6 <key>ru</key> - <value>Префикс для информационной базы не задан.</value> + <value>Префикс для информационной базы не задан. +При настройке обмена можно использовать любой префикс.</value> true true diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Module.bsl index ea1198720..5886488da 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Module.bsl @@ -1,4 +1,3 @@ - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form index 24214c849..975b039cf 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form @@ -15,7 +15,7 @@ 140 <key>ru</key> - <value>Вас приветствует помощник создания обмена данными!</value> + <value>Вас приветствует помощник создания обмена данными</value> true true @@ -24,7 +24,7 @@ ЗаголовокСтраницыМастера1РасширеннаяПодсказка - 1078 + 1795 Label true true @@ -71,7 +71,7 @@ Декорация6РасширеннаяПодсказка - 1079 + 1796 Label true true @@ -116,7 +116,7 @@ ВариантРаботыМастераРасширеннаяПодсказка - 1081 + 1798 Label true true @@ -170,12 +170,11 @@ ru Группа переключателя выбора режима работы помощника - 70 false false ГруппаПереключателяВыбораРежимаРаботыПомощникаРасширеннаяПодсказка - 1080 + 1797 Label true true @@ -215,7 +214,7 @@ Декорация11РасширеннаяПодсказка - 1085 + 1802 Label true true @@ -266,7 +265,7 @@ ИмяФайлаНастроекОбменаДаннымиДляЗагрузкиРасширеннаяПодсказка - 1087 + 1804 Label true true @@ -308,7 +307,7 @@ Группа20РасширеннаяПодсказка - 1086 + 1803 Label true true @@ -335,7 +334,7 @@ УтерянФайлСНастройкамиОбменаДаннымиРасширеннаяПодсказка - 1089 + 1806 Label true true @@ -367,7 +366,7 @@ СтраницаВыбораФайлаСНастройкамиОбменаРасширеннаяПодсказка - 1084 + 1801 Label true true @@ -394,7 +393,7 @@ ПустаяКартинкаРасширеннаяПодсказка - 1091 + 1808 Label true true @@ -428,7 +427,7 @@ СтраницаВыбораФайлаСНастройкамиОбменаПустаяРасширеннаяПодсказка - 1090 + 1807 Label true true @@ -457,7 +456,7 @@ СтраницыВыбораФайлаСНастройкамиОбменаРасширеннаяПодсказка - 1083 + 1800 Label true true @@ -493,7 +492,7 @@ КартинкаПервойИнформационнойБазыРасширеннаяПодсказка - 1095 + 1812 Label true true @@ -529,7 +528,7 @@ СтраницаПервойИнформационнойБазыАктивнаяРасширеннаяПодсказка - 1094 + 1811 Label true true @@ -560,7 +559,7 @@ КартинкаПервойИнформационнойБазы1РасширеннаяПодсказка - 1097 + 1814 Label true true @@ -601,7 +600,7 @@ СтраницаПервойИнформационнойБазыНеактивнаяРасширеннаяПодсказка - 1096 + 1813 Label true true @@ -630,7 +629,7 @@ СтраницыПервойИнформационнойБазыРасширеннаяПодсказка - 1093 + 1810 Label true true @@ -656,7 +655,7 @@ Декорация2РасширеннаяПодсказка - 1099 + 1816 Label true true @@ -695,7 +694,7 @@ КартинкаФайлаНастроекРасширеннаяПодсказка - 1100 + 1817 Label true true @@ -734,7 +733,7 @@ КартинкаФайлаСообщенияОбменаРасширеннаяПодсказка - 1101 + 1818 Label true true @@ -770,7 +769,7 @@ КартинкиФайловНастроекИСообщенияОбменаРасширеннаяПодсказка - 1098 + 1815 Label true true @@ -808,7 +807,7 @@ КартинкаВторойИнформационнойБазыРасширеннаяПодсказка - 1104 + 1821 Label true true @@ -844,7 +843,7 @@ СтраницаВторойИнформационнойБазыАктивнаяРасширеннаяПодсказка - 1103 + 1820 Label true true @@ -875,7 +874,7 @@ КартинкаВторойИнформационнойБазы1РасширеннаяПодсказка - 1106 + 1823 Label true true @@ -916,7 +915,7 @@ СтраницаВторойИнформационнойБазыНеактивнаяРасширеннаяПодсказка - 1105 + 1822 Label true true @@ -945,7 +944,7 @@ СтраницыВторойИнформационнойБазыРасширеннаяПодсказка - 1102 + 1819 Label true true @@ -973,7 +972,7 @@ КомпозицияКартинокПервойСтраницыПомощникаРасширеннаяПодсказка - 1092 + 1809 Label true true @@ -1000,7 +999,7 @@ Декорация1РасширеннаяПодсказка - 1107 + 1824 Label true true @@ -1031,7 +1030,7 @@ УзнатьПрефиксЭтойИнформационнойБазыРасширеннаяПодсказка - 1108 + 1825 Label true true @@ -1062,7 +1061,7 @@ НадписьДалееВариантРаботыМастераРасширеннаяПодсказка - 1109 + 1826 Label true true @@ -1098,7 +1097,3829 @@ СтраницаМастераНачалоРасширеннаяПодсказка - 1077 + 1794 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаМастераНачалоНастройкиОбменаССервисом + 1190 + + ЗаголовокСтраницыМастера3 + 1191 + + <key>ru</key> + <value>Вас приветствует помощник создания обмена данными</value> + + true + true + + true + + + ЗаголовокСтраницыМастера3РасширеннаяПодсказка + 1828 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастера3КонтекстноеМеню + 1192 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + КартинкаНастройкаОбменаССервисом + 1201 + true + true + + true + + + КартинкаНастройкаОбменаССервисомРасширеннаяПодсказка + 1829 + Label + true + true + + Left + + + + КартинкаНастройкаОбменаССервисомКонтекстноеМеню + 1202 + true + + 75 + true + 8 + true + false + + + + + + ПараметрыТранспортаПодключенияКСервису + 1235 + + WSURLВебСервиса1 + 1236 + + <key>ru</key> + <value>Адрес приложения</value> + + true + true + + true + + + Объект.WSURLВебСервиса + + + WSURLВебСервиса1РасширеннаяПодсказка + 1831 + Label + true + true + + Left + + + + WSURLВебСервиса1КонтекстноеМеню + 1237 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Группа3 + 1252 + + WSИмяПользователя1 + 1238 + + <key>ru</key> + <value>Пользователь</value> + + true + true + + true + + + Объект.WSИмяПользователя + + + WSИмяПользователя1РасширеннаяПодсказка + 1834 + Label + true + true + + Left + + + + WSИмяПользователя1КонтекстноеМеню + 1239 + true + + InputField + true + Enter + true + Left + true + + 30 + true + true + true + true + true + true + true + Normal + + + + WSПароль1 + 1240 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + Объект.WSПароль + + + WSПароль1РасширеннаяПодсказка + 1836 + Label + true + true + + Left + + + + WSПароль1КонтекстноеМеню + 1241 + true + + InputField + true + Enter + true + Left + true + + 30 + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + false + + Группа3РасширеннаяПодсказка + 1833 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + КакОпределитьПараметрыПодключенияКСервису + 1248 + true + true + + true + + + КакОпределитьПараметрыПодключенияКСервисуРасширеннаяПодсказка + 1838 + Label + true + true + + Left + + + Hyperlink + Form.Command.КакОпределитьПараметрыПодключенияКСервису + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Укажите параметры подключения к приложению в Интернете</value> + + 70 + false + + ПараметрыТранспортаПодключенияКСервисуРасширеннаяПодсказка + 1830 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + + Декорация15 + 1246 + true + true + + true + + + Декорация15РасширеннаяПодсказка + 1839 + Label + true + true + + Left + + + + Декорация15КонтекстноеМеню + 1247 + true + + Label + true + true + true + false + + Left + + + + НадписьДалееСтраницаМастераНачалоНастройкиОбменаССервисом + 1244 + + <key>ru</key> + <value>Нажмите кнопку "Далее" для задания настроек обмена.</value> + + true + true + + true + + + НадписьДалееСтраницаМастераНачалоНастройкиОбменаССервисомРасширеннаяПодсказка + 1840 + Label + true + true + + Left + + + + НадписьДалееСтраницаМастераНачалоНастройкиОбменаССервисомКонтекстноеМеню + 1245 + true + + Label + true + true + false + + Left + + + true + true + + true + + + ru + Страница мастера выбор режима работы помощника + + + СтраницаМастераНачалоНастройкиОбменаССервисомРасширеннаяПодсказка + 1827 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаМастераНастройкаПараметровОбменаДанными + 1253 + + ЗаголовокСтраницыМастера14 + 1254 + + <key>ru</key> + <value>Настройка параметров обмена данными</value> + + true + true + + true + + + ЗаголовокСтраницыМастера14РасширеннаяПодсказка + 1842 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастера14КонтекстноеМеню + 1255 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + НаименованиеЭтойБазы3 + 1256 + + <key>ru</key> + <value>Наименование этой информационной базы (программы)</value> + + true + true + + true + + + Объект.НаименованиеЭтойБазы + + Top + + НаименованиеЭтойБазы3РасширеннаяПодсказка + 1843 + Label + true + true + + Left + + + + НаименованиеЭтойБазы3КонтекстноеМеню + 1257 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ПрефиксИнформационнойБазыИсточникаОбменССервисом + 1789 + + <key>ru</key> + <value>Префикс этой информационной базы</value> + + false + + true + + + Объект.ПрефиксИнформационнойБазыИсточника + + + ПрефиксИнформационнойБазыИсточникаОбменССервисомРасширеннаяПодсказка + 1845 + Label + true + true + + Left + + + + ПрефиксИнформационнойБазыИсточникаОбменССервисомКонтекстноеМеню + 1790 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Группа9 + 1290 + + НаименованиеВторойБазы1 + 1258 + + <key>ru</key> + <value>Наименование приложения в Интернете</value> + + true + true + + true + + + Объект.НаименованиеВторойБазы + + Top + + НаименованиеВторойБазы1РасширеннаяПодсказка + 1848 + Label + true + true + + Left + + + + НаименованиеВторойБазы1КонтекстноеМеню + 1259 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ПрефиксИнформационнойБазыПриемникаОбменССервисом + 1791 + + <key>ru</key> + <value>Префикс приложения в Интернете</value> + + true + + true + + + Объект.ПрефиксИнформационнойБазыПриемника + + + ПрефиксИнформационнойБазыПриемникаОбменССервисомРасширеннаяПодсказка + 1850 + Label + true + true + + Left + + + + ПрефиксИнформационнойБазыПриемникаОбменССервисомКонтекстноеМеню + 1792 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + Группа9РасширеннаяПодсказка + 1847 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + Группа7 + 1285 + + Группа8 + 1286 + + Декорация3 + 1287 + + <key>ru</key> + <value>Правила синхронизации данных:</value> + + true + true + + true + + + Декорация3РасширеннаяПодсказка + 1854 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 1288 + true + + Label + true + true + + Left + + + + ВыполнитьНастройкуВыгрузкиДанных + 1289 + true + true + + true + + + ВыполнитьНастройкуВыгрузкиДанныхРасширеннаяПодсказка + 1855 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыполнитьНастройкуВыгрузкиДанных + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа8РасширеннаяПодсказка + 1853 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ОписаниеНастроекВыгрузкиДанных + 1283 + true + true + + true + + + ОписаниеНастроекВыгрузкиДанных + + None + + ОписаниеНастроекВыгрузкиДанныхРасширеннаяПодсказка + 1856 + Label + true + true + + Left + + + + ОписаниеНастроекВыгрузкиДанныхКонтекстноеМеню + 1284 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + Группа7РасширеннаяПодсказка + 1852 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + НадписьДалееПодтверждениеНастроек6 + 1281 + + <key>ru</key> + <value>Нажмите кнопку "Далее" для перехода к сопоставлению данных.</value> + + true + true + + true + + + НадписьДалееПодтверждениеНастроек6РасширеннаяПодсказка + 1858 + Label + true + true + + Left + + + + НадписьДалееПодтверждениеНастроек6КонтекстноеМеню + 1282 + true + + Label + true + 3 + true + false + + Left + Bottom + + + true + true + + true + + + <key>ru</key> + <value>Страница мастера настройка параметров обмена данными</value> + + + ru + Страница мастера настройка параметров + + + СтраницаМастераНастройкаПараметровОбменаДаннымиРасширеннаяПодсказка + 1841 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаМастераНастройкаПараметровОбменаДаннымиЧерезВебСервис + 1768 + + ЗаголовокСтраницыМастера16 + 1769 + + <key>ru</key> + <value>Настройка параметров обмена данными</value> + + true + true + + true + + + ЗаголовокСтраницыМастера16РасширеннаяПодсказка + 1860 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастера16КонтекстноеМеню + 1770 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + НаименованиеЭтойБазы5 + 1771 + + <key>ru</key> + <value>Наименование этой информационной базы (программы)</value> + + true + true + + true + + + Объект.НаименованиеЭтойБазы + + Top + + НаименованиеЭтойБазы5РасширеннаяПодсказка + 1861 + Label + true + true + + Left + + + + НаименованиеЭтойБазы5КонтекстноеМеню + 1772 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ПрефиксИнформационнойБазыИсточникаОбменЧерезВебСервис + 1785 + + <key>ru</key> + <value>Префикс этой информационной базы</value> + + true + true + + true + + + Объект.ПрефиксИнформационнойБазыИсточника + + + ПрефиксИнформационнойБазыИсточникаОбменЧерезВебСервисРасширеннаяПодсказка + 1863 + Label + true + true + + Left + + + + ПрефиксИнформационнойБазыИсточникаОбменЧерезВебСервисКонтекстноеМеню + 1786 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Группа14 + 1773 + + НаименованиеВторойБазы3 + 1774 + + <key>ru</key> + <value>Наименование приложения в Интернете</value> + + true + true + + true + + + Объект.НаименованиеВторойБазы + + Top + + НаименованиеВторойБазы3РасширеннаяПодсказка + 1866 + Label + true + true + + Left + + + + НаименованиеВторойБазы3КонтекстноеМеню + 1775 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис + 1787 + + <key>ru</key> + <value>Префикс приложения в Интернете</value> + + true + true + + true + + + Объект.ПрефиксИнформационнойБазыПриемника + + + ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервисРасширеннаяПодсказка + 1868 + Label + true + true + + Left + + + + ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервисКонтекстноеМеню + 1788 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + Группа14РасширеннаяПодсказка + 1865 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + Группа16 + 1776 + + Группа17 + 1777 + + Декорация22 + 1778 + + <key>ru</key> + <value>Правила синхронизации данных:</value> + + true + true + + true + + + Декорация22РасширеннаяПодсказка + 1872 + Label + true + true + + Left + + + + Декорация22КонтекстноеМеню + 1779 + true + + Label + true + true + + Left + + + + ВыполнитьНастройкуВыгрузкиДанных1 + 1780 + true + true + + true + + + ВыполнитьНастройкуВыгрузкиДанных1РасширеннаяПодсказка + 1873 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыполнитьНастройкуВыгрузкиДанных + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа17РасширеннаяПодсказка + 1871 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ОписаниеНастроекВыгрузкиДанных1 + 1781 + true + true + + true + + + ОписаниеНастроекВыгрузкиДанных + + None + + ОписаниеНастроекВыгрузкиДанных1РасширеннаяПодсказка + 1874 + Label + true + true + + Left + + + + ОписаниеНастроекВыгрузкиДанных1КонтекстноеМеню + 1782 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + Группа16РасширеннаяПодсказка + 1870 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + НадписьДалееПодтверждениеНастроек7 + 1783 + + <key>ru</key> + <value>Нажмите кнопку "Далее" для перехода к сопоставлению данных.</value> + + true + true + + true + + + НадписьДалееПодтверждениеНастроек7РасширеннаяПодсказка + 1876 + Label + true + true + + Left + + + + НадписьДалееПодтверждениеНастроек7КонтекстноеМеню + 1784 + true + + Label + true + 3 + true + false + + Left + Bottom + + + true + true + + true + + + <key>ru</key> + <value>Страница мастера настройка параметров обмена данными</value> + + + ru + Страница мастера настройка параметров + + + СтраницаМастераНастройкаПараметровОбменаДаннымиЧерезВебСервисРасширеннаяПодсказка + 1859 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаМастераСопоставлениеДанных + 1331 + + ЗаголовокСтраницыМастера + 1332 + + <key>ru</key> + <value>Сопоставление одинаковых данных</value> + + true + true + + true + + + ЗаголовокСтраницыМастераРасширеннаяПодсказка + 1878 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастераКонтекстноеМеню + 1333 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + СтраницыСтатусаСопоставленияДанных + 1674 + + СтатусСопоставленияЕстьНесопоставленныеДанные + 1675 + + ПояснениеОНаличииНесопоставленныхОбъектов1 + 1717 + + <key>ru</key> + <value>Учет ведется в обеих программах, поэтому следует выполнить сопоставление данных. +Это позволит избежать появления дублирующихся элементов справочников, которые независимо друг от друга +были введены в обеих программах, например, с одинаковыми наименованиями. +С помощью сопоставления можно указать, какие данные являются одинаковыми в двух программах.</value> + + true + true + + true + + + ПояснениеОНаличииНесопоставленныхОбъектов1РасширеннаяПодсказка + 1881 + Label + true + true + + Left + + + + ПояснениеОНаличииНесопоставленныхОбъектов1КонтекстноеМеню + 1718 + true + + Label + true + true + false + + Style.ПоясняющийТекст + + + Left + Top + + + + ДеревоИнформацииСтатистики + 1651 + true + true + + true + + + ДеревоИнформацииСтатистики + + None + Add + Change + Copy + Delete + EndEdit + MoveDown + MoveUp + SortListAsc + SortListDesc + + ДеревоИнформацииСтатистикиГруппа + 1668 + + ДеревоИнформацииСтатистикиКартинка + 1658 + true + true + + true + + + ДеревоИнформацииСтатистики.Картинка + + None + + ДеревоИнформацииСтатистикиКартинкаРасширеннаяПодсказка + 1895 + Label + true + true + + Left + + + + ДеревоИнформацииСтатистикиКартинкаКонтекстноеМеню + 1659 + true + + PictureField + true + Auto + true + Left + true + + true + true + true + + + 1 + + + + + ДеревоИнформацииСтатистикиСиноним + 1654 + true + true + + true + + + ДеревоИнформацииСтатистики.Синоним + + + ДеревоИнформацииСтатистикиСинонимРасширеннаяПодсказка + 1897 + Label + true + true + + Left + + + + ДеревоИнформацииСтатистикиСинонимКонтекстноеМеню + 1655 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + true + + ДеревоИнформацииСтатистикиГруппаРасширеннаяПодсказка + 1894 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ДеревоИнформацииСтатистикиПроцентСопоставленияОбъектов + 1656 + true + true + + true + + + ДеревоИнформацииСтатистики.ПроцентСопоставленияОбъектов + + + ДеревоИнформацииСтатистикиПроцентСопоставленияОбъектовРасширеннаяПодсказка + 1899 + Label + true + true + + Left + + + + ДеревоИнформацииСтатистикиПроцентСопоставленияОбъектовКонтекстноеМеню + 1657 + true + + InputField + true + Auto + true + Right + true + + 10 + true + true + false + true + true + true + true + Normal + + + + ДеревоИнформацииСтатистикиКоманднаяПанель + 1653 + + ДеревоИнформацииСтатистикиВыполнитьСопоставлениеДанных + 1681 + true + true + + true + + + ДеревоИнформацииСтатистикиВыполнитьСопоставлениеДанныхРасширеннаяПодсказка + 1883 + Label + true + true + + Left + + + Form.Command.ВыполнитьСопоставлениеДанных + Normal + Auto + true + true + UserCmds + Auto + + Left + + + Selection + ДеревоИнформацииСтатистикиВыбор + + + ДеревоИнформацииСтатистикиСтрокаПоиска + 1885 + + ДеревоИнформацииСтатистикиСтрокаПоискаРасширеннаяПодсказка + 1887 + Label + true + true + + Left + + + + ДеревоИнформацииСтатистикиСтрокаПоискаКонтекстноеМеню + 1886 + true + + ДеревоИнформацииСтатистики + + true + + + + ДеревоИнформацииСтатистикиСостояниеПросмотра + 1888 + + ДеревоИнформацииСтатистикиСостояниеПросмотраРасширеннаяПодсказка + 1890 + Label + true + true + + Left + + + + ДеревоИнформацииСтатистикиСостояниеПросмотраКонтекстноеМеню + 1889 + true + + ViewStatusAddition + ДеревоИнформацииСтатистики + + true + + + + ДеревоИнформацииСтатистикиУправлениеПоиском + 1891 + + ДеревоИнформацииСтатистикиУправлениеПоискомРасширеннаяПодсказка + 1893 + Label + true + true + + Left + + + + ДеревоИнформацииСтатистикиУправлениеПоискомКонтекстноеМеню + 1892 + true + + SearchControlAddition + ДеревоИнформацииСтатистики + + true + + + + ДеревоИнформацииСтатистикиРасширеннаяПодсказка + 1884 + Label + true + true + + Left + + + + ДеревоИнформацииСтатистикиКонтекстноеМеню + 1652 + + ДеревоИнформацииСтатистикиКонтекстноеМенюВыполнитьСопоставлениеДанных + 1682 + true + true + + true + + + ДеревоИнформацииСтатистикиКонтекстноеМенюВыполнитьСопоставлениеДанныхРасширеннаяПодсказка + 1882 + Label + true + true + + Left + + + Form.Command.ВыполнитьСопоставлениеДанных + Normal + Auto + true + true + UserCmds + Auto + + + Tree + true + true + true + true + Row +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + ExpandAllLevels + true + true + None + None + None + true +
    + true + true + + true + + + <key>ru</key> + <value>Статус сопоставления есть несопоставленные данные</value> + + + ru + Статус сопоставления есть несопоставленные данные + + + СтатусСопоставленияЕстьНесопоставленныеДанныеРасширеннаяПодсказка + 1880 + Label + true + true + + Left + + + Page + + Vertical + auto + +
    + + СтатусСопоставленияВсеДанныеСопоставлены + 1676 + + ГруппировкаСообщения8 + 1743 + + Декорация35 + 1745 + true + true + + true + + + Декорация35РасширеннаяПодсказка + 1911 + Label + true + true + + Left + + + + Декорация35КонтекстноеМеню + 1746 + true + + 8 + true + 3 + true + false + + + CommonPicture.Информация32 + + + + + Декорация36 + 1748 + + <key>ru</key> + <value>Все данные сопоставлены. +Перейдите далее для продолжения настройки.</value> + + true + true + + true + + + Декорация36РасширеннаяПодсказка + 1912 + Label + true + true + + Left + + + + Декорация36КонтекстноеМеню + 1749 + true + + Label + true + 3 + true + true + false + + System.DefaultGUIFont + 10.0 + + + Left + Center + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщения8РасширеннаяПодсказка + 1910 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Статус сопоставления все данные сопоставлены</value> + + + ru + Статус сопоставления все данные сопоставлены + + + СтатусСопоставленияВсеДанныеСопоставленыРасширеннаяПодсказка + 1909 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы статуса сопоставления данных</value> + + + ru + Страницы статуса сопоставления данных + + + СтраницыСтатусаСопоставленияДанныхРасширеннаяПодсказка + 1879 + Label + true + true + + Left + + + Pages + + Auto + +
    + + НадписьДалееНаСтраницеСопоставленияДанных + 1334 + + <key>ru</key> + <value>Нажмите кнопку "Далее" для синхронизации данных.</value> + + true + true + + true + + + НадписьДалееНаСтраницеСопоставленияДанныхРасширеннаяПодсказка + 1913 + Label + true + true + + Left + + + + НадписьДалееНаСтраницеСопоставленияДанныхКонтекстноеМеню + 1335 + true + + Label + true + 3 + true + false + + Left + Bottom + + + true + true + + true + + + <key>ru</key> + <value>Страница мастера сопоставление данных</value> + + + ru + Страница мастера сопоставление данных + + + СтраницаМастераСопоставлениеДанныхРасширеннаяПодсказка + 1877 + Label + true + true + + Left + + + Page + + Vertical + auto + +
    + + СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено + 1345 + + ЗаголовокСтраницыМастера15 + 1346 + + <key>ru</key> + <value>Создание обмена данными успешно завершено</value> + + true + true + + true + + + ЗаголовокСтраницыМастера15РасширеннаяПодсказка + 1915 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастера15КонтекстноеМеню + 1347 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + ГруппаРасписания + 1685 + + КартинкаЧасы + 1686 + + <key>ru</key> + <value>Картинка часы</value> + + true + true + + true + + + КартинкаЧасыРасширеннаяПодсказка + 1917 + Label + true + true + + Left + + + + КартинкаЧасыКонтекстноеМеню + 1687 + true + + 8 + true + 3 + true + + + + + + ГруппаРасписания1 + 1688 + + ВыполнятьОбменДаннымиАвтоматически + 1683 + true + true + + true + + + ВыполнятьОбменДаннымиАвтоматически + + Right + + OnChange + ВыполнятьОбменДаннымиАвтоматическиПриИзменении + + + ВыполнятьОбменДаннымиАвтоматическиРасширеннаяПодсказка + 1919 + Label + true + true + + Left + + + + ВыполнятьОбменДаннымиАвтоматическиКонтекстноеМеню + 1684 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаПредопределенногоРасписания + 1691 + + СтраницыПредопределенногоРасписания + 1710 + + СтраницаПредопределенногоРасписания + 1711 + + ПредопределенноеРасписаниеОбменаДанными + 1699 + true + true + + true + + + ПредопределенноеРасписаниеОбменаДанными + + None + + OnChange + ПредопределенноеРасписаниеОбменаДаннымиПриИзменении + + + ПредопределенноеРасписаниеОбменаДаннымиРасширеннаяПодсказка + 1924 + Label + true + true + + Left + + + + ПредопределенноеРасписаниеОбменаДаннымиКонтекстноеМеню + 1700 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Каждые 15 минут + + + Каждые15Минут + + + + + ru + Каждые 30 минут + + + Каждые30Минут + + + + + ru + Каждый час + + + КаждыйЧас + + + + + ru + Каждый день, в 8:00 + + + КаждыйДеньВ_8_00 + + + + + ru + Другое расписание + + + ДругоеРасписание + + + Vertical + + + + СтраницыПользовательскогоРасписания + 1705 + + СтраницаПользовательскогоРасписания + 1706 + + ИзменитьПользовательскоеРасписание + 1704 + true + true + + true + + + ИзменитьПользовательскоеРасписаниеРасширеннаяПодсказка + 1928 + Label + true + true + + Left + + + UsualButton + Form.Command.ИзменитьПользовательскоеРасписание + Normal + Auto + 15 + true + true + UserCmds + Auto + + + ПредставлениеПользовательскогоОписания + 1701 + true + true + + true + + + ПредставлениеПользовательскогоОписания + + None + + ПредставлениеПользовательскогоОписанияРасширеннаяПодсказка + 1929 + Label + true + true + + Left + + + + ПредставлениеПользовательскогоОписанияКонтекстноеМеню + 1702 + true + + LabelField + Enter + true + Left + true + + true + 2 + true + false + + Style.ПоясняющийТекст + + + + true + true + + true + + + <key>ru</key> + <value>Страница пользовательского расписания</value> + + + ru + Страница пользовательского расписания + + + СтраницаПользовательскогоРасписанияРасширеннаяПодсказка + 1927 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ПустаяСтраницаПользовательскогоРасписания + 1707 + + Декорация10 + 1708 + true + true + + true + + + Декорация10РасширеннаяПодсказка + 1932 + Label + true + true + + Left + + + + Декорация10КонтекстноеМеню + 1709 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Пустая страница пользовательского расписания</value> + + + ru + Пустая страница пользовательского расписания + + + ПустаяСтраницаПользовательскогоРасписанияРасширеннаяПодсказка + 1931 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + true + + СтраницыПользовательскогоРасписанияРасширеннаяПодсказка + 1926 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + СтраницаПредопределенногоРасписанияРасширеннаяПодсказка + 1923 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + НедоступнаяСтраницаПредопределенногоРасписания + 1712 + + ПредопределенноеРасписаниеОбменаДанными1 + 1715 + true + true + + true + + + ПредопределенноеРасписаниеОбменаДанными + + None + + OnChange + ПредопределенноеРасписаниеОбменаДаннымиПриИзменении + + + ПредопределенноеРасписаниеОбменаДанными1РасширеннаяПодсказка + 1934 + Label + true + true + + Left + + + + ПредопределенноеРасписаниеОбменаДанными1КонтекстноеМеню + 1716 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Каждые 15 минут + + + Каждые15Минут + + + + + ru + Каждые 30 минут + + + Каждые30Минут + + + + + ru + Каждый час + + + КаждыйЧас + + + + + ru + Каждый день, в 8:00 + + + КаждыйДеньВ_8_00 + + + + + ru + Другое расписание + + + ДругоеРасписание + + + Vertical + + + true + false + + true + + + ru + Недоступная страница предопределенного расписания + + true + + НедоступнаяСтраницаПредопределенногоРасписанияРасширеннаяПодсказка + 1933 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + СтраницыПредопределенногоРасписанияРасширеннаяПодсказка + 1922 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + ru + Группа предопределенного расписания + + + ГруппаПредопределенногоРасписанияРасширеннаяПодсказка + 1921 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа расписания1</value> + + + ru + Группа расписания1 + + + ГруппаРасписания1РасширеннаяПодсказка + 1918 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группа расписания + + + ГруппаРасписанияРасширеннаяПодсказка + 1916 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + + Декорация32 + 1348 + true + true + + true + + + Декорация32РасширеннаяПодсказка + 1936 + Label + true + true + + Left + + + + Декорация32КонтекстноеМеню + 1349 + true + + Label + true + true + true + + Left + + + + ГруппаВключитьРегистрациюВсехСобытийВЖурналеРегистрации + 1757 + + ВключитьРегистрациюВсехСобытийВЖурналеРегистрации + 1753 + true + true + + true + + + ВключитьРегистрациюВсехСобытийВЖурналеРегистрации + + Right + + ВключитьРегистрациюВсехСобытийВЖурналеРегистрацииРасширеннаяПодсказка + 1938 + Label + true + true + + Left + + + + ВключитьРегистрациюВсехСобытийВЖурналеРегистрацииКонтекстноеМеню + 1754 + true + + CheckBoxField + Enter + true + Left + true + + + + Декорация9 + 1755 + + <key>ru</key> + <value>Регистрация событий в журнале регистрации необходима для диагностики работы обмена данными.</value> + + true + true + + true + + + Декорация9РасширеннаяПодсказка + 1940 + Label + true + true + + Left + + + + Декорация9КонтекстноеМеню + 1756 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа включить регистрацию всех событий в журнале регистрации</value> + + + ru + Группа включить регистрацию всех событий в журнале регистрации + + + ГруппаВключитьРегистрациюВсехСобытийВЖурналеРегистрацииРасширеннаяПодсказка + 1937 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + НадписьГотово12 + 1350 + + <key>ru</key> + <value>Нажмите кнопку "Готово" для завершения работы с помощником.</value> + + true + true + + true + + + НадписьГотово12РасширеннаяПодсказка + 1941 + Label + true + true + + Left + + + + НадписьГотово12КонтекстноеМеню + 1351 + true + + Label + true + 3 + true + false + + Left + Bottom + + + true + true + + true + + + ru + Страница мастера сопоставление данных + + + СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершеноРасширеннаяПодсказка + 1914 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаМастераНастройкиОтраженияДокументовВУчете + 1338 + + ЗаголовокСтраницыМастера4 + 1339 + + <key>ru</key> + <value>Настройки для отражения документов в учете</value> + + true + true + + true + + + ЗаголовокСтраницыМастера4РасширеннаяПодсказка + 1943 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастера4КонтекстноеМеню + 1340 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + Группа40 + 1618 + + Группа43 + 1619 + + НаименованиеЭтойБазы4 + 1614 + true + true + + true + + + Объект.НаименованиеЭтойБазы + + None + + НаименованиеЭтойБазы4РасширеннаяПодсказка + 1946 + Label + true + true + + Left + + + + НаименованиеЭтойБазы4КонтекстноеМеню + 1615 + true + + LabelField + Enter + true + Left + true + + true + true + + System.DefaultGUIFont + true + false + false + false + + + + + НастройкиПараметровУчета + 1640 + + Декорация99 + 1641 + true + true + + true + + + Декорация99РасширеннаяПодсказка + 1949 + Label + true + true + + Left + + + + Декорация99КонтекстноеМеню + 1642 + true + + 4 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + НастройкиПараметровУчетаПоясняющаяНадпись + 1643 + true + true + + true + + + НастройкиПараметровУчетаПоясняющаяНадпись + + None + + НастройкиПараметровУчетаПоясняющаяНадписьРасширеннаяПодсказка + 1950 + Label + true + true + + Left + + + + НастройкиПараметровУчетаПоясняющаяНадписьКонтекстноеМеню + 1644 + true + + LabelField + Center + Enter + true + Left + true + + true + 2 + true + false + + Style.ПоясняющийТекст + + + + true + true + + true + + + <key>ru</key> + <value>Настройки параметров учета</value> + + + ru + Настройки параметров учета + + + НастройкиПараметровУчетаРасширеннаяПодсказка + 1948 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + РамкаГруппыЗначенийПоУмолчанию6 + 1647 + + Группа44 + 1620 + + Декорация97 + 1621 + + <key>ru</key> + <value>Значения для заполнения реквизитов документов при загрузке в эту информационную базу:</value> + + true + true + + true + + + Декорация97РасширеннаяПодсказка + 1954 + Label + true + true + + Left + + + + Декорация97КонтекстноеМеню + 1622 + true + + Label + true + true + + Left + Bottom + + + + НастройкаЗначенийПоУмолчанию6 + 1645 + true + true + + true + + + НастройкаЗначенийПоУмолчанию6РасширеннаяПодсказка + 1955 + Label + true + true + + Left + + + UsualButton + Form.Command.НастройкаЗначенийПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа44РасширеннаяПодсказка + 1953 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ОписаниеЗначенийПоУмолчанию6 + 1624 + true + true + + true + + + ОписаниеЗначенийПоУмолчанию + + None + + ОписаниеЗначенийПоУмолчанию6РасширеннаяПодсказка + 1956 + Label + true + true + + Left + + + + ОписаниеЗначенийПоУмолчанию6КонтекстноеМеню + 1625 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Рамка группы значений по умолчанию6</value> + + + РамкаГруппыЗначенийПоУмолчанию6РасширеннаяПодсказка + 1952 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value> +</value> + + + System.DefaultGUIFont + true + false + false + false + + + Группа43РасширеннаяПодсказка + 1945 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + Группа45 + 1626 + + НаименованиеВторойБазы4 + 1616 + true + true + + true + + + Объект.НаименованиеВторойБазы + + None + + НаименованиеВторойБазы4РасширеннаяПодсказка + 1959 + Label + true + true + + Left + + + + НаименованиеВторойБазы4КонтекстноеМеню + 1617 + true + + LabelField + Enter + true + Left + true + + true + true + + System.DefaultGUIFont + true + false + false + false + + + + + НастройкиПараметровУчетаКорреспондента + 1627 + + Декорация98 + 1628 + true + true + + true + + + Декорация98РасширеннаяПодсказка + 1962 + Label + true + true + + Left + + + + Декорация98КонтекстноеМеню + 1629 + true + + 4 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + НастройкиПараметровУчетаКорреспондентаПоясняющаяНадпись + 1649 + true + true + + true + + + НастройкиПараметровУчетаКорреспондентаПоясняющаяНадпись + + None + + НастройкиПараметровУчетаКорреспондентаПоясняющаяНадписьРасширеннаяПодсказка + 1963 + Label + true + true + + Left + + + + НастройкиПараметровУчетаКорреспондентаПоясняющаяНадписьКонтекстноеМеню + 1650 + true + + LabelField + Center + Enter + true + Left + true + + true + 2 + true + false + + Style.ПоясняющийТекст + + + + true + true + + true + + + <key>ru</key> + <value>Настройки параметров учета корреспондента</value> + + + ru + Настройки параметров учета корреспондента + + + НастройкиПараметровУчетаКорреспондентаРасширеннаяПодсказка + 1961 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + РамкаГруппыЗначенийПоУмолчаниюБазыКорреспондента + 1648 + + Группа46 + 1632 + + Декорация100 + 1633 + + <key>ru</key> + <value>Значения для заполнения реквизитов документов при загрузке в приложение, расположенное в Интернете:</value> + + true + true + + true + + + Декорация100РасширеннаяПодсказка + 1967 + Label + true + true + + Left + + + + Декорация100КонтекстноеМеню + 1634 + true + + Label + true + true + + Left + Bottom + + + + НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервис + 1646 + true + true + + true + + + НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервисРасширеннаяПодсказка + 1968 + Label + true + true + + Left + + + UsualButton + Form.Command.НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервис + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа46РасширеннаяПодсказка + 1966 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ОписаниеЗначенийПоУмолчаниюБазыКорреспондента + 1636 + true + true + + true + + + ОписаниеЗначенийПоУмолчаниюБазыКорреспондента + + None + + ОписаниеЗначенийПоУмолчаниюБазыКорреспондентаРасширеннаяПодсказка + 1969 + Label + true + true + + Left + + + + ОписаниеЗначенийПоУмолчаниюБазыКорреспондентаКонтекстноеМеню + 1637 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + РамкаГруппыЗначенийПоУмолчаниюБазыКорреспондентаРасширеннаяПодсказка + 1965 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + System.DefaultGUIFont + true + false + false + false + + + Группа45РасширеннаяПодсказка + 1958 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Значения для заполнения реквизитов документов</value> + + + Группа40РасширеннаяПодсказка + 1944 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + НадписьДалее3 + 1343 + + <key>ru</key> + <value>Нажмите кнопку "Далее" для выполнения синхронизации данных.</value> + + true + true + + true + + + НадписьДалее3РасширеннаяПодсказка + 1971 + Label + true + true + + Left + + + + НадписьДалее3КонтекстноеМеню + 1344 + true + + Label + true + 3 + true + false + + Left + Bottom + + + true + true + + true + + + ru + Страница мастера сопоставление данных + + + СтраницаМастераНастройкиОтраженияДокументовВУчетеРасширеннаяПодсказка + 1942 Label true true @@ -1129,7 +4950,7 @@ ЗаголовокСтраницыМастера2РасширеннаяПодсказка - 1111 + 1973 Label true true @@ -1163,427 +4984,27 @@ - Группа2 - 840 - - Группа3 - 841 - - Декорация16 - 843 - true - true - - true - - - Декорация16РасширеннаяПодсказка - 1114 - Label - true - true - - Left - - - - Декорация16КонтекстноеМеню - 844 - true - - 2 - true - 1 - true - - - - - - Декорация17 - 845 - true - true - - true - - - Декорация17РасширеннаяПодсказка - 1115 - Label - true - true - - Left - - - - Декорация17КонтекстноеМеню - 846 - true - - 2 - true - 1 - true - - - - + Группа4 + 842 + + РежимРаботыМастера + 837 true true true + + РежимРаботыМастера + + None + + OnChange + РежимРаботыМастераПриИзменении + - Группа3РасширеннаяПодсказка - 1113 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - Группа4 - 842 - - РежимРаботыМастера - 837 - true - true - - true - - - РежимРаботыМастера - - None - - OnChange - РежимРаботыМастераПриИзменении - - - РежимРаботыМастераРасширеннаяПодсказка - 1117 - Label - true - true - - Left - - - - РежимРаботыМастераКонтекстноеМеню - 838 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - Вторая информационная база расположена на данном компьютере или в локальной сети - - - ОбменЧерезВнешнееСоединение - - - - - ru - Нет возможности подключиться ко второй информационной базе напрямую - - - ОбменЧерезОбычныеКаналыСвязи - - - Vertical - - - true - true - - true - - - Группа4РасширеннаяПодсказка - 1116 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - Группа2РасширеннаяПодсказка - 1112 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - КомпозицияКартинокВыбораРежимаРаботыМастера - 828 - - ГруппаРамка - 824 - - СтраницыВнешнееСоединениеДоступно - 800 - - СтраницаВнешнееСоединениеДоступноАктивная - 801 - - КартинкаВнешнееСоединениеДоступноАктивная - 802 - - <key>ru</key> - <value>Картинка внешнее соединение доступно активная</value> - - true - true - - true - - - КартинкаВнешнееСоединениеДоступноАктивнаяРасширеннаяПодсказка - 1123 - Label - true - true - - Left - - - - КартинкаВнешнееСоединениеДоступноАктивнаяКонтекстноеМеню - 803 - true - - 20 - true - 7 - true - - - - - true - true - - true - - - <key>ru</key> - <value>Страница внешнее соединение доступно активная</value> - - - ru - Страница первой информационной базы активная - - - СтраницаВнешнееСоединениеДоступноАктивнаяРасширеннаяПодсказка - 1122 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - СтраницаВнешнееСоединениеДоступноНеактивная - 804 - - КартинкаВнешнееСоединениеДоступноНеактивная - 805 - - <key>ru</key> - <value>Картинка внешнее соединение доступно неактивная</value> - - true - true - - true - - - КартинкаВнешнееСоединениеДоступноНеактивнаяРасширеннаяПодсказка - 1125 - Label - true - true - - Left - - - - КартинкаВнешнееСоединениеДоступноНеактивнаяКонтекстноеМеню - 806 - true - - 20 - true - 7 - true - - - Click - КартинкаВнешнееСоединениеДоступноНеактивнаяНажатие - - - true - - - true - true - - true - - - <key>ru</key> - <value>Страница внешнее соединение доступно неактивная</value> - - - ru - Страница первой информационной базы активная - - - СтраницаВнешнееСоединениеДоступноНеактивнаяРасширеннаяПодсказка - 1124 - Label - true - true - - Left - - - Page - - Vertical - auto - - - true - true - - true - - - <key>ru</key> - <value>Страницы внешнее соединение доступно</value> - - - ru - Страницы первой информационной базы - - - СтраницыВнешнееСоединениеДоступноРасширеннаяПодсказка - 1121 - Label - true - true - - Left - - - Pages - - Auto - - - true - true - - true - - - <key>ru</key> - <value>Группа рамка</value> - - true - - ГруппаРамкаРасширеннаяПодсказка - 1120 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - StrongSeparation - true - true - Auto - Auto - - - - Декорация15 - 835 - true - true - - true - - - Декорация15РасширеннаяПодсказка - 1126 + РежимРаботыМастераРасширеннаяПодсказка + 1975 Label true true @@ -1592,220 +5013,45 @@ - Декорация15КонтекстноеМеню - 836 + РежимРаботыМастераКонтекстноеМеню + 838 true - Label - 8 - true - true - - Left - - - - ГруппаРамка1 - 825 - - СтраницыВнешнееСоединениеНедоступно - 814 - - СтраницаВнешнееСоединениеНедоступноАктивная - 815 - - КартинкаВнешнееСоединениеНедоступноАктивная - 816 - - <key>ru</key> - <value>Картинка внешнее соединение недоступно активная</value> - - true - true - - true - - - КартинкаВнешнееСоединениеНедоступноАктивнаяРасширеннаяПодсказка - 1130 - Label - true - true - - Left - - - - КартинкаВнешнееСоединениеНедоступноАктивнаяКонтекстноеМеню - 817 - true - - 44 - true - 7 - true - - - - - true - true - - true - - + <type>RadioButtonField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:RadioButtonsFieldExtInfo"> + <columnsCount>1</columnsCount> + <choiceList> + <presentation> <key>ru</key> - <value>Страница внешнее соединение недоступно активная</value> - - + Подключиться ко второй информационной базе напрямую + + + ОбменЧерезВнешнееСоединение + + + + ru - Страница первой информационной базы активная - - - СтраницаВнешнееСоединениеНедоступноАктивнаяРасширеннаяПодсказка - 1129 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - СтраницаВнешнееСоединениеНедоступноНеактивная - 818 - - КартинкаВнешнееСоединениеНедоступноНеактивная - 819 - - <key>ru</key> - <value>Картинка внешнее соединение недоступно неактивная</value> - - true - true - - true - - - КартинкаВнешнееСоединениеНедоступноНеактивнаяРасширеннаяПодсказка - 1132 - Label - true - true - - Left - - - - КартинкаВнешнееСоединениеНедоступноНеактивнаяКонтекстноеМеню - 820 - true - - 44 - true - 7 - true - - - Click - КартинкаВнешнееСоединениеНедоступноНеактивнаяНажатие - - - true - - - true - true - - true - - + <value>Подключиться ко второй информационной базе через Интернет</value> + </presentation> + <value xsi:type="core:StringValue"> + <value>ОбменЧерезВебСервис</value> + </value> + </choiceList> + <choiceList> + <presentation> <key>ru</key> - <value>Страница внешнее соединение недоступно неактивная</value> - - - ru - Страница первой информационной базы активная - - - СтраницаВнешнееСоединениеНедоступноНеактивнаяРасширеннаяПодсказка - 1131 - Label - true - true - - Left - - - Page - - Vertical - auto - - - true - true - - true - - - <key>ru</key> - <value>Страницы внешнее соединение недоступно</value> - - - ru - Страницы второй информационной базы - - - СтраницыВнешнееСоединениеНедоступноРасширеннаяПодсказка - 1128 - Label - true - true - - Left - - - Pages - - Auto - - - true - true - - true - - - <key>ru</key> - <value>Группа рамка1</value> - - true - - ГруппаРамка1РасширеннаяПодсказка - 1127 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - StrongSeparation - true - true - Auto - Auto + Подключиться ко второй информационной базе через обычные каналы связи + + + ОбменЧерезОбычныеКаналыСвязи + + + Vertical true @@ -1813,17 +5059,9 @@ true - - <key>ru</key> - <value>Композиция картинок выбора режима работы мастера</value> - - - ru - Композиция картинок выбора режима работы мастера - - КомпозицияКартинокВыбораРежимаРаботыМастераРасширеннаяПодсказка - 1119 + Группа4РасширеннаяПодсказка + 1974 Label true true @@ -1833,6 +5071,7 @@ UsualGroup + Vertical Auto true true @@ -1840,6 +5079,226 @@ Auto + + КартинкиВыбораРежимаРаботыПомощника + 1158 + + КартинкаДляОбменаЧерезВнешнееСоединение + 1159 + + КартинкаОбменЧерезВнешнееСоединение + 1161 + + <key>ru</key> + <value>Картинка обмен через внешнее соединение</value> + + true + true + + true + + + КартинкаОбменЧерезВнешнееСоединениеРасширеннаяПодсказка + 1979 + Label + true + true + + Left + + + + КартинкаОбменЧерезВнешнееСоединениеКонтекстноеМеню + 1162 + true + + 20 + true + 7 + true + + + + + true + true + + true + + + ru + Картинка для обмена через внешнее соединение + + + КартинкаДляОбменаЧерезВнешнееСоединениеРасширеннаяПодсказка + 1978 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + КартинкаДляОбменаЧерезВебСервис + 1165 + + КартинкаОбменЧерезВебСервис + 1166 + + <key>ru</key> + <value>Картинка обмен через веб сервис</value> + + true + true + + true + + + КартинкаОбменЧерезВебСервисРасширеннаяПодсказка + 1981 + Label + true + true + + Left + + + + КартинкаОбменЧерезВебСервисКонтекстноеМеню + 1167 + true + + 45 + true + 7 + true + + + + + true + true + + true + + + ru + Картинка для обмена через обычные каналы связи + + + КартинкаДляОбменаЧерезВебСервисРасширеннаяПодсказка + 1980 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + КартинкаДляОбменаЧерезОбычныеКаналыСвязи + 1160 + + КартинкаОбменЧерезОбычныеКаналыСвязи + 1163 + + <key>ru</key> + <value>Картинка обмен через обычные каналы связи</value> + + true + true + + true + + + КартинкаОбменЧерезОбычныеКаналыСвязиРасширеннаяПодсказка + 1983 + Label + true + true + + Left + + + + КартинкаОбменЧерезОбычныеКаналыСвязиКонтекстноеМеню + 1164 + true + + 45 + true + 7 + true + + + + + true + true + + true + + + <key>ru</key> + <value>Картинка для обмена через обычные каналы связи</value> + + + ru + Картинка для обмена через обычные каналы связи + + + КартинкаДляОбменаЧерезОбычныеКаналыСвязиРасширеннаяПодсказка + 1982 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + ru + Картинки выбора режима работы помощника + + + КартинкиВыбораРежимаРаботыПомощникаРасширеннаяПодсказка + 1977 + Label + true + true + + Left + + + Pages + + Auto + + ГруппаОтступ 839 @@ -1871,7 +5330,7 @@ COMВариантРаботыИнформационнойБазыРасширеннаяПодсказка - 1136 + 1987 Label true true @@ -1931,7 +5390,7 @@ COMКаталогИнформационнойБазыРасширеннаяПодсказка - 1140 + 1991 Label true true @@ -1988,7 +5447,7 @@ СтраницаВариантРаботыФайловыйРасширеннаяПодсказка - 1139 + 1990 Label true true @@ -2022,7 +5481,7 @@ COMИмяСервера1СПредприятияРасширеннаяПодсказка - 1143 + 1994 Label true true @@ -2071,7 +5530,7 @@ COMИмяИнформационнойБазыНаСервере1СПредприятияРасширеннаяПодсказка - 1145 + 1996 Label true true @@ -2118,7 +5577,7 @@ СтраницаВариантРаботыКлиентСерверныйРасширеннаяПодсказка - 1142 + 1993 Label true true @@ -2147,7 +5606,7 @@ ВариантыРаботыИнформационнойБазыРасширеннаяПодсказка - 1138 + 1989 Label true true @@ -2170,7 +5629,7 @@ ГиперСсылкаКакОпределитьПараметрыПодключенияРасширеннаяПодсказка - 1147 + 1998 Label true true @@ -2205,7 +5664,7 @@ COMАутентификацияОперационнойСистемыРасширеннаяПодсказка - 1148 + 1999 Label true true @@ -2241,7 +5700,7 @@ COMИмяПользователяРасширеннаяПодсказка - 1151 + 2002 Label true true @@ -2282,7 +5741,7 @@ COMПарольПользователяРасширеннаяПодсказка - 1153 + 2004 Label true true @@ -2327,7 +5786,7 @@ false COMГруппаПользовательПарольРасширеннаяПодсказка - 1150 + 2001 Label true true @@ -2358,7 +5817,7 @@ ПроверитьПодключениеCOMРасширеннаяПодсказка - 1156 + 2007 Label true true @@ -2386,7 +5845,7 @@ ИсправитьОшибкиУстановкиВнешнегоСоединенияРасширеннаяПодсказка - 1157 + 2008 Label true true @@ -2418,7 +5877,7 @@ ГруппаКнопокПроверкиПодключенияCOMРасширеннаяПодсказка - 1155 + 2006 Label true true @@ -2435,38 +5894,6 @@ Auto - - Декорация18 - 849 - true - true - - true - - - Декорация18РасширеннаяПодсказка - 1158 - Label - true - true - - Left - - - - Декорация18КонтекстноеМеню - 850 - true - - Label - true - true - true - false - - Left - - НадписьДалее 847 @@ -2481,7 +5908,7 @@ НадписьДалееРасширеннаяПодсказка - 1159 + 2009 Label true true @@ -2497,9 +5924,11 @@ Label true true + true false Left + Bottom true @@ -2517,7 +5946,294 @@ СтраницаПараметровТранспортаCOMРасширеннаяПодсказка - 1135 + 1986 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаПараметровТранспортаWS + 1076 + + WSURLВебСервиса + 1077 + true + true + + true + + + Объект.WSURLВебСервиса + + + WSURLВебСервисаРасширеннаяПодсказка + 2011 + Label + true + true + + Left + + + + WSURLВебСервисаКонтекстноеМеню + 1078 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Группа2 + 1750 + + WSИмяПользователя + 1079 + true + true + + true + + + Объект.WSИмяПользователя + + + WSИмяПользователяРасширеннаяПодсказка + 2014 + Label + true + true + + Left + + + + WSИмяПользователяКонтекстноеМеню + 1080 + true + + InputField + true + Enter + true + Left + true + + 30 + true + true + true + true + true + true + true + Normal + + + + WSПароль + 1081 + true + true + + true + + + Объект.WSПароль + + + WSПарольРасширеннаяПодсказка + 2016 + Label + true + true + + Left + + + + WSПарольКонтекстноеМеню + 1082 + true + + InputField + true + Enter + true + Left + true + + 30 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + false + + Группа2РасширеннаяПодсказка + 2013 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + КакОпределитьПараметрыПодключенияКВебСервису + 1084 + true + true + + true + + + КакОпределитьПараметрыПодключенияКВебСервисуРасширеннаяПодсказка + 2018 + Label + true + true + + Left + + + Hyperlink + Form.Command.КакОпределитьПараметрыПодключенияКВебСервису + Normal + Auto + true + true + UserCmds + Auto + + + ПроверитьПодключениеWS + 1083 + true + true + + true + + + ПроверитьПодключениеWSРасширеннаяПодсказка + 2019 + Label + true + true + + Left + + + UsualButton + Form.Command.ПроверитьПодключениеWS + Normal + Auto + 20 + true + true + UserCmds + Auto + + + НадписьДалееСтраницаМастераНачалоНастройкиОбменаЧерезВебСервис + 1751 + + <key>ru</key> + <value>Нажмите кнопку "Далее" для задания настроек обмена.</value> + + true + true + + true + + + НадписьДалееСтраницаМастераНачалоНастройкиОбменаЧерезВебСервисРасширеннаяПодсказка + 2020 + Label + true + true + + Left + + + + НадписьДалееСтраницаМастераНачалоНастройкиОбменаЧерезВебСервисКонтекстноеМеню + 1752 + true + + Label + true + true + true + false + + Left + Bottom + + + true + true + + true + + + <key>ru</key> + <value>Страница параметров транспорта WS</value> + + + ru + Страница параметров транспорта WS + + 56 + false + + СтраницаПараметровТранспортаWSРасширеннаяПодсказка + 2010 Label true true @@ -2534,38 +6250,6 @@ СтраницаПараметровТранспорта 832 - - Декорация19 - 851 - true - true - - true - - - Декорация19РасширеннаяПодсказка - 1161 - Label - true - true - - Left - - - - Декорация19КонтекстноеМеню - 852 - true - - Label - true - true - true - false - - Left - - НадписьДалее1 853 @@ -2580,7 +6264,7 @@ НадписьДалее1РасширеннаяПодсказка - 1162 + 2022 Label true true @@ -2596,9 +6280,11 @@ Label true true + true false Left + Bottom true @@ -2616,7 +6302,7 @@ СтраницаПараметровТранспортаРасширеннаяПодсказка - 1160 + 2021 Label true true @@ -2645,7 +6331,7 @@ СтраницыПараметровТранспортаРасширеннаяПодсказка - 1134 + 1985 Label true true @@ -2673,7 +6359,7 @@ ГруппаОтступРасширеннаяПодсказка - 1133 + 1984 Label true true @@ -2707,7 +6393,7 @@ СтраницаМастераВыборРежимаРаботыПомощникаРасширеннаяПодсказка - 1110 + 1972 Label true true @@ -2738,7 +6424,7 @@ ЗаголовокСтраницыМастера7РасширеннаяПодсказка - 1164 + 2024 Label true true @@ -2789,7 +6475,7 @@ ИспользоватьПараметрыТранспортаFILEРасширеннаяПодсказка - 1165 + 2025 Label true true @@ -2826,7 +6512,7 @@ ПояснениеВыбораКаталогаОбменаИнформациейНаСервереРасширеннаяПодсказка - 1168 + 2028 Label true true @@ -2862,7 +6548,7 @@ FILEКаталогОбменаИнформациейРасширеннаяПодсказка - 1169 + 2029 Label true true @@ -2916,7 +6602,7 @@ Right FILEСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка - 1171 + 2031 Label true true @@ -2949,7 +6635,7 @@ ПарольАрхиваСообщенияОбменаРасширеннаяПодсказка - 1173 + 2033 Label true true @@ -2994,7 +6680,7 @@ false ПроверитьПодключениеFILEРасширеннаяПодсказка - 1176 + 2036 Label true true @@ -3018,7 +6704,7 @@ ОтступКнопкиПроверкиПодключенияFILEРасширеннаяПодсказка - 1175 + 2035 Label true true @@ -3052,7 +6738,7 @@ НастройкиТранспортаFILEРасширеннаяПодсказка - 1167 + 2027 Label true true @@ -3081,7 +6767,7 @@ Декорация4РасширеннаяПодсказка - 1177 + 2037 Label true true @@ -3117,7 +6803,7 @@ НадписьДалееFILEРасширеннаяПодсказка - 1178 + 2038 Label true true @@ -3153,7 +6839,7 @@ СтраницаМастераЗаданиеПараметровТранспортаFILEРасширеннаяПодсказка - 1163 + 2023 Label true true @@ -3184,7 +6870,7 @@ ЗаголовокСтраницыМастера9РасширеннаяПодсказка - 1180 + 2040 Label true true @@ -3235,7 +6921,7 @@ ИспользоватьПараметрыТранспортаFTPРасширеннаяПодсказка - 1181 + 2041 Label true true @@ -3274,7 +6960,7 @@ FTPСоединениеПутьРасширеннаяПодсказка - 1185 + 2045 Label true true @@ -3317,7 +7003,7 @@ FTPСоединениеПортРасширеннаяПодсказка - 1187 + 2047 Label true true @@ -3366,7 +7052,7 @@ ГруппаСерверПортРасширеннаяПодсказка - 1184 + 2044 Label true true @@ -3399,7 +7085,7 @@ FTPСоединениеПользовательРасширеннаяПодсказка - 1190 + 2050 Label true true @@ -3440,7 +7126,7 @@ FTPСоединениеПарольРасширеннаяПодсказка - 1192 + 2052 Label true true @@ -3485,7 +7171,7 @@ ГруппаПользовательПарольРасширеннаяПодсказка - 1189 + 2049 Label true true @@ -3515,7 +7201,7 @@ FTPСоединениеМаксимальныйДопустимыйРазмерСообщенияРасширеннаяПодсказка - 1194 + 2054 Label true true @@ -3558,7 +7244,7 @@ Right FTPСоединениеПассивноеСоединениеРасширеннаяПодсказка - 1196 + 2056 Label true true @@ -3592,7 +7278,7 @@ Right FTPСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка - 1198 + 2058 Label true true @@ -3628,7 +7314,7 @@ ПарольАрхиваСообщенияОбмена1РасширеннаяПодсказка - 1201 + 2061 Label true true @@ -3674,7 +7360,7 @@ ГруппаЗаданияПароляСообщенияОбменаFTPРасширеннаяПодсказка - 1200 + 2060 Label true true @@ -3706,7 +7392,7 @@ false ПроверитьПодключениеFTPРасширеннаяПодсказка - 1204 + 2064 Label true true @@ -3734,7 +7420,7 @@ ОтступКнопкиПроверкиПодключенияFTPРасширеннаяПодсказка - 1203 + 2063 Label true true @@ -3768,7 +7454,7 @@ НастройкиТранспортаFTPРасширеннаяПодсказка - 1183 + 2043 Label true true @@ -3797,7 +7483,7 @@ Декорация8РасширеннаяПодсказка - 1205 + 2065 Label true true @@ -3833,7 +7519,7 @@ НадписьДалееFTPРасширеннаяПодсказка - 1206 + 2066 Label true true @@ -3869,7 +7555,7 @@ СтраницаМастераЗаданиеПараметровТранспортаFTPРасширеннаяПодсказка - 1179 + 2039 Label true true @@ -3900,7 +7586,7 @@ ЗаголовокСтраницыМастера8РасширеннаяПодсказка - 1208 + 2068 Label true true @@ -3951,7 +7637,7 @@ ИспользоватьПараметрыТранспортаEMAILРасширеннаяПодсказка - 1209 + 2069 Label true true @@ -3987,7 +7673,7 @@ EMAILУчетнаяЗаписьРасширеннаяПодсказка - 1212 + 2072 Label true true @@ -4030,7 +7716,7 @@ EMAILМаксимальныйДопустимыйРазмерСообщенияРасширеннаяПодсказка - 1214 + 2074 Label true true @@ -4073,7 +7759,7 @@ Right EMAILСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка - 1216 + 2076 Label true true @@ -4106,7 +7792,7 @@ ПарольАрхиваСообщенияОбмена2РасширеннаяПодсказка - 1218 + 2078 Label true true @@ -4151,7 +7837,7 @@ false ПроверитьПодключениеEMAILРасширеннаяПодсказка - 1221 + 2081 Label true true @@ -4175,7 +7861,7 @@ ОтступКнопкиПроверкиПодключенияEMAILРасширеннаяПодсказка - 1220 + 2080 Label true true @@ -4209,7 +7895,7 @@ НастройкиТранспортаEMAILРасширеннаяПодсказка - 1211 + 2071 Label true true @@ -4238,7 +7924,7 @@ Декорация7РасширеннаяПодсказка - 1222 + 2082 Label true true @@ -4274,7 +7960,7 @@ НадписьДалееEMAILРасширеннаяПодсказка - 1223 + 2083 Label true true @@ -4310,7 +7996,7 @@ СтраницаМастераЗаданиеПараметровТранспортаEMAILРасширеннаяПодсказка - 1207 + 2067 Label true true @@ -4341,7 +8027,7 @@ ЗаголовокСтраницыМастера5РасширеннаяПодсказка - 1225 + 2085 Label true true @@ -4392,7 +8078,7 @@ Left НаименованиеЭтойБазыРасширеннаяПодсказка - 1226 + 2086 Label true true @@ -4439,7 +8125,7 @@ НаименованиеВторойБазыРасширеннаяПодсказка - 1228 + 2088 Label true true @@ -4482,7 +8168,7 @@ ВидТранспортаСообщенийОбменаРасширеннаяПодсказка - 1230 + 2090 Label true true @@ -4559,7 +8245,7 @@ ПрефиксИнформационнойБазыИсточникаРасширеннаяПодсказка - 1232 + 2092 Label true true @@ -4609,7 +8295,7 @@ ПрефиксИнформационнойБазыПриемника1РасширеннаяПодсказка - 1235 + 2095 Label true true @@ -4649,7 +8335,7 @@ КакОпределитьПрефиксВторойИнформационнойБазыРасширеннаяПодсказка - 1237 + 2097 Label true true @@ -4681,7 +8367,7 @@ ГруппаЗаданияПрефиксаВторойИнформационнойБазыРасширеннаяПодсказка - 1234 + 2094 Label true true @@ -4718,7 +8404,7 @@ None ОписаниеОграниченийПередачиДанныхРасширеннаяПодсказка - 1240 + 2100 Label true true @@ -4764,7 +8450,7 @@ false НастройкаОграниченийРегистрацииДанныхРасширеннаяПодсказка - 1243 + 2103 Label true true @@ -4788,7 +8474,7 @@ Группа10РасширеннаяПодсказка - 1242 + 2102 Label true true @@ -4822,7 +8508,7 @@ false РамкаГруппыОграниченийРасширеннаяПодсказка - 1239 + 2099 Label true true @@ -4858,7 +8544,7 @@ None ОписаниеЗначенийПоУмолчаниюРасширеннаяПодсказка - 1245 + 2105 Label true true @@ -4904,7 +8590,7 @@ false НастройкаЗначенийПоУмолчаниюРасширеннаяПодсказка - 1248 + 2108 Label true true @@ -4928,7 +8614,7 @@ Группа102РасширеннаяПодсказка - 1247 + 2107 Label true true @@ -4958,7 +8644,7 @@ false РамкаГруппыЗначенийПоУмолчаниюРасширеннаяПодсказка - 1244 + 2104 Label true true @@ -4992,7 +8678,7 @@ НастройкиУзлаРасширеннаяПодсказка - 1238 + 2098 Label true true @@ -5020,7 +8706,7 @@ Декорация5РасширеннаяПодсказка - 1249 + 2109 Label true true @@ -5056,7 +8742,7 @@ НадписьДалееПодтверждениеНастроекРасширеннаяПодсказка - 1250 + 2110 Label true true @@ -5092,7 +8778,7 @@ СтраницаМастераНастройкаПараметровРасширеннаяПодсказка - 1224 + 2084 Label true true @@ -5123,7 +8809,7 @@ ЗаголовокСтраницыМастера11РасширеннаяПодсказка - 1252 + 2112 Label true true @@ -5169,7 +8855,7 @@ ВидТранспортаСообщенийОбмена1РасширеннаяПодсказка - 1253 + 2113 Label true true @@ -5249,7 +8935,7 @@ None ОписаниеОграниченийПередачиДанных2РасширеннаяПодсказка - 1257 + 2117 Label true true @@ -5295,7 +8981,7 @@ false НастройкаОграниченийРегистрацииДанных2РасширеннаяПодсказка - 1260 + 2120 Label true true @@ -5319,7 +9005,7 @@ Группа13РасширеннаяПодсказка - 1259 + 2119 Label true true @@ -5353,7 +9039,7 @@ false РамкаГруппыОграничений2РасширеннаяПодсказка - 1256 + 2116 Label true true @@ -5389,7 +9075,7 @@ None ОписаниеЗначенийПоУмолчанию2РасширеннаяПодсказка - 1262 + 2122 Label true true @@ -5435,7 +9121,7 @@ false НастройкаЗначенийПоУмолчанию2РасширеннаяПодсказка - 1265 + 2125 Label true true @@ -5459,7 +9145,7 @@ Группа104РасширеннаяПодсказка - 1264 + 2124 Label true true @@ -5489,7 +9175,7 @@ false РамкаГруппыЗначенийПоУмолчанию2РасширеннаяПодсказка - 1261 + 2121 Label true true @@ -5523,7 +9209,7 @@ НастройкиУзла2РасширеннаяПодсказка - 1255 + 2115 Label true true @@ -5551,7 +9237,7 @@ Декорация23РасширеннаяПодсказка - 1266 + 2126 Label true true @@ -5587,7 +9273,7 @@ НадписьДалееПодтверждениеНастроек3РасширеннаяПодсказка - 1267 + 2127 Label true true @@ -5623,7 +9309,7 @@ СтраницаМастераНастройкаПараметровВторогоЭтапаНастройкиРасширеннаяПодсказка - 1251 + 2111 Label true true @@ -5654,7 +9340,7 @@ ЗаголовокСтраницыМастера6РасширеннаяПодсказка - 1269 + 2129 Label true true @@ -5705,7 +9391,7 @@ Left НаименованиеЭтойБазы1РасширеннаяПодсказка - 1270 + 2130 Label true true @@ -5751,7 +9437,7 @@ ПрефиксИнформационнойБазыИсточника1РасширеннаяПодсказка - 1273 + 2133 Label true true @@ -5792,7 +9478,7 @@ ОтступРасширеннаяПодсказка - 1272 + 2132 Label true true @@ -5830,7 +9516,7 @@ None ОписаниеОграниченийПередачиДанных1РасширеннаяПодсказка - 1277 + 2137 Label true true @@ -5876,7 +9562,7 @@ false НастройкаОграниченийРегистрацииДанных1РасширеннаяПодсказка - 1280 + 2140 Label true true @@ -5900,7 +9586,7 @@ Группа12РасширеннаяПодсказка - 1279 + 2139 Label true true @@ -5934,7 +9620,7 @@ false РамкаГруппыОграничений1РасширеннаяПодсказка - 1276 + 2136 Label true true @@ -5970,7 +9656,7 @@ None ОписаниеЗначенийПоУмолчанию1РасширеннаяПодсказка - 1282 + 2142 Label true true @@ -6016,7 +9702,7 @@ false НастройкаЗначенийПоУмолчанию1РасширеннаяПодсказка - 1285 + 2145 Label true true @@ -6040,7 +9726,7 @@ Группа103РасширеннаяПодсказка - 1284 + 2144 Label true true @@ -6070,7 +9756,7 @@ false РамкаГруппыЗначенийПоУмолчанию1РасширеннаяПодсказка - 1281 + 2141 Label true true @@ -6104,7 +9790,7 @@ НастройкиУзла1РасширеннаяПодсказка - 1275 + 2135 Label true true @@ -6132,7 +9818,7 @@ Декорация20РасширеннаяПодсказка - 1286 + 2146 Label true true @@ -6168,7 +9854,7 @@ НадписьДалееПодтверждениеНастроек1РасширеннаяПодсказка - 1287 + 2147 Label true true @@ -6204,7 +9890,7 @@ СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазыРасширеннаяПодсказка - 1268 + 2128 Label true true @@ -6235,7 +9921,7 @@ ЗаголовокСтраницыМастера10РасширеннаяПодсказка - 1289 + 2149 Label true true @@ -6285,7 +9971,7 @@ НаименованиеВторойБазы2РасширеннаяПодсказка - 1290 + 2150 Label true true @@ -6331,7 +10017,7 @@ ПрефиксИнформационнойБазыПриемникаРасширеннаяПодсказка - 1293 + 2153 Label true true @@ -6370,7 +10056,7 @@ Отступ1РасширеннаяПодсказка - 1292 + 2152 Label true true @@ -6408,7 +10094,7 @@ None ОписаниеОграниченийПередачиДанных4РасширеннаяПодсказка - 1297 + 2157 Label true true @@ -6454,7 +10140,7 @@ false НастройкаОграниченийРегистрацииДанных4РасширеннаяПодсказка - 1300 + 2160 Label true true @@ -6463,7 +10149,7 @@ UsualButton - Form.Command.НастройкаОграниченийРегистрацииДанныхБазыКорреспондента + Form.Command.НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЧерезВнешнееСоединение Normal Auto true @@ -6478,7 +10164,7 @@ Группа15РасширеннаяПодсказка - 1299 + 2159 Label true true @@ -6512,7 +10198,7 @@ false РамкаГруппыОграничений4РасширеннаяПодсказка - 1296 + 2156 Label true true @@ -6548,7 +10234,7 @@ None ОписаниеЗначенийПоУмолчанию4РасширеннаяПодсказка - 1302 + 2162 Label true true @@ -6594,7 +10280,7 @@ false НастройкаЗначенийПоУмолчанию4РасширеннаяПодсказка - 1305 + 2165 Label true true @@ -6603,7 +10289,7 @@ UsualButton - Form.Command.НастройкаЗначенийПоУмолчаниюБазыКорреспондента + Form.Command.НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВнешнееСоединение Normal Auto true @@ -6618,7 +10304,7 @@ Группа106РасширеннаяПодсказка - 1304 + 2164 Label true true @@ -6648,7 +10334,7 @@ false РамкаГруппыЗначенийПоУмолчанию4РасширеннаяПодсказка - 1301 + 2161 Label true true @@ -6682,7 +10368,7 @@ НастройкиУзлаБазыКорреспондента1РасширеннаяПодсказка - 1295 + 2155 Label true true @@ -6710,7 +10396,7 @@ Декорация21РасширеннаяПодсказка - 1306 + 2166 Label true true @@ -6746,7 +10432,7 @@ НадписьДалееПодтверждениеНастроек2РасширеннаяПодсказка - 1307 + 2167 Label true true @@ -6782,7 +10468,7 @@ СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазыРасширеннаяПодсказка - 1288 + 2148 Label true true @@ -6804,7 +10490,7 @@ 176 <key>ru</key> - <value>Все готово для создания обмена данными!</value> + <value>Все готово для создания обмена данными</value> true true @@ -6813,7 +10499,7 @@ ЗаголовокСтраницыМастераГотовоРасширеннаяПодсказка - 1309 + 2169 Label true true @@ -6865,7 +10551,7 @@ Top ПредставлениеРезультатаНастройкиОбменаРасширеннаяПодсказка - 1310 + 2170 Label true true @@ -6887,9 +10573,8 @@ true true - 14 true - false + true true true true @@ -6899,101 +10584,23 @@ - СтраницыНадписиИнформацииОбОткрытииПомощникаСопоставления - 728 - - СтраницаНадписиИнформацииОбОткрытииПомощникаСопоставления - 725 - - ДекорацияИнформация - 726 - - <key>ru</key> - <value>Декорация информация</value> - - true - true - - true - - - ДекорацияИнформацияРасширеннаяПодсказка - 1314 - Label - true - true - - Left - - - - ДекорацияИнформацияКонтекстноеМеню - 727 - true - - 2 - true - 1 - true - - - CommonPicture.Информация - - - - - НадписьИнформацияОбОткрытииПомощникаСопоставления - 723 - - <key>ru</key> - <value>После завершения создания настройки обмена данными будет открыт помощник интерактивного обмена данными.</value> - - true - true - - true - - - НадписьИнформацияОбОткрытииПомощникаСопоставленияРасширеннаяПодсказка - 1315 - Label - true - true - - Left - - - - НадписьИнформацияОбОткрытииПомощникаСопоставленияКонтекстноеМеню - 724 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - + ГруппаНадписиИнформацииОбОткрытииПомощникаСопоставления + 1251 + + ДекорацияИнформация + 726 + + <key>ru</key> + <value>Декорация информация</value> + true true true - - <key>ru</key> - <value>Страница надписи информации об открытии помощника сопоставления</value> - - - ru - Страница надписи информации об открытии помощника сопоставления - - СтраницаНадписиИнформацииОбОткрытииПомощникаСопоставленияРасширеннаяПодсказка - 1313 + ДекорацияИнформацияРасширеннаяПодсказка + 2173 Label true true @@ -7001,61 +10608,36 @@ Left - Page - - auto + + ДекорацияИнформацияКонтекстноеМеню + 727 + true + + 2 + true + 1 + true + + + CommonPicture.Информация + - - СтраницаНадписиИнформацииОбОткрытииПомощникаСопоставленияПустая - 729 - - ПустаяКартинка1 - 730 - true - true - - true - - - ПустаяКартинка1РасширеннаяПодсказка - 1317 - Label - true - true - - Left - - - - ПустаяКартинка1КонтекстноеМеню - 731 - true - - 2 - true - 1 - true - - - - + + НадписьИнформацияОбОткрытииПомощникаСопоставления + 723 + + <key>ru</key> + <value>После завершения создания настройки обмена данными будет открыт помощник интерактивного обмена данными.</value> + true true true - - <key>ru</key> - <value>Страница надписи информации об открытии помощника сопоставления пустая</value> - - - ru - Страница надписи информации об открытии помощника сопоставления пустая - - СтраницаНадписиИнформацииОбОткрытииПомощникаСопоставленияПустаяРасширеннаяПодсказка - 1316 + НадписьИнформацияОбОткрытииПомощникаСопоставленияРасширеннаяПодсказка + 2174 Label true true @@ -7063,10 +10645,19 @@ Left - Page - - Vertical - auto + + НадписьИнформацияОбОткрытииПомощникаСопоставленияКонтекстноеМеню + 724 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left true @@ -7076,15 +10667,15 @@ <key>ru</key> - <value>Страницы надписи информации об открытии помощника сопоставления</value> + <value>Группа надписи информации об открытии помощника сопоставления</value> ru - Страницы надписи информации об открытии помощника сопоставления + Группа надписи информации об открытии помощника сопоставления - СтраницыНадписиИнформацииОбОткрытииПомощникаСопоставленияРасширеннаяПодсказка - 1312 + ГруппаНадписиИнформацииОбОткрытииПомощникаСопоставленияРасширеннаяПодсказка + 2172 Label true true @@ -7092,78 +10683,15 @@ Left - Pages - + UsualGroup + + Auto + true + true + Auto Auto - - Декорация10 - 196 - true - true - - true - - - Декорация10РасширеннаяПодсказка - 1318 - Label - true - true - - Left - - - - Декорация10КонтекстноеМеню - 197 - true - - Label - true - true - true - false - - Left - - - - НадписьДалееДляСозданиеНастройки - 133 - - <key>ru</key> - <value>Будет создан новый обмен данными.</value> - - true - true - - true - - - НадписьДалееДляСозданиеНастройкиРасширеннаяПодсказка - 1319 - Label - true - true - - Left - - - - НадписьДалееДляСозданиеНастройкиКонтекстноеМеню - 134 - true - - Label - true - true - false - - Left - - true true @@ -7179,7 +10707,7 @@ СтраницаМастераИтогНастройкиОбменаРасширеннаяПодсказка - 1308 + 2168 Label true true @@ -7201,7 +10729,7 @@ 331 <key>ru</key> - <value>Первый этап настройки успешно завершен!</value> + <value>Первый этап настройки успешно завершен</value> true true @@ -7210,7 +10738,7 @@ ЗаголовокСтраницыМастераЗакрытьРасширеннаяПодсказка - 1321 + 2176 Label true true @@ -7259,7 +10787,7 @@ Декорация111РасширеннаяПодсказка - 1324 + 2179 Label true true @@ -7290,7 +10818,7 @@ Группа91РасширеннаяПодсказка - 1323 + 2178 Label true true @@ -7325,7 +10853,7 @@ Декорация141РасширеннаяПодсказка - 1326 + 2181 Label true true @@ -7365,7 +10893,7 @@ None ИмяФайлаНастроекОбменаДаннымиРасширеннаяПодсказка - 1328 + 2183 Label true true @@ -7407,7 +10935,7 @@ false СохранитьФайлНастроекОбменаДаннымиРасширеннаяПодсказка - 1330 + 2185 Label true true @@ -7434,7 +10962,7 @@ Группа11РасширеннаяПодсказка - 1327 + 2182 Label true true @@ -7458,7 +10986,7 @@ Группа101РасширеннаяПодсказка - 1325 + 2180 Label true true @@ -7491,7 +11019,7 @@ ГруппаФайлаНастроекОбмена1РасширеннаяПодсказка - 1322 + 2177 Label true true @@ -7527,7 +11055,7 @@ Декорация181РасширеннаяПодсказка - 1334 + 2189 Label true true @@ -7567,7 +11095,7 @@ Right ВыполнитьОбменДаннымиСейчас21РасширеннаяПодсказка - 1336 + 2191 Label true true @@ -7605,7 +11133,7 @@ ПоясняющаяНадписьКФлагуСопоставленияРасширеннаяПодсказка - 1338 + 2193 Label true true @@ -7637,7 +11165,7 @@ Группа261РасширеннаяПодсказка - 1335 + 2190 Label true true @@ -7672,7 +11200,7 @@ true СтраницаВыполнитьВыгрузкуДанныхДляСопоставленияРасширеннаяПодсказка - 1333 + 2188 Label true true @@ -7698,7 +11226,7 @@ Декорация182РасширеннаяПодсказка - 1340 + 2195 Label true true @@ -7735,7 +11263,7 @@ Right ВыполнитьСозданиеНачальногоОбразаСейчасРасширеннаяПодсказка - 1342 + 2197 Label true true @@ -7769,7 +11297,7 @@ ПоясняющаяНадписьКФлагуСозданияНачальногоОбразаРасширеннаяПодсказка - 1344 + 2199 Label true true @@ -7801,7 +11329,7 @@ Группа1РасширеннаяПодсказка - 1341 + 2196 Label true true @@ -7835,7 +11363,7 @@ СтраницаВыполнитьСозданиеНачальногоОбразаПодчиненногоУзлаРасширеннаяПодсказка - 1339 + 2194 Label true true @@ -7863,7 +11391,7 @@ СтраницыОтображенияФинальногоДействияРасширеннаяПодсказка - 1332 + 2187 Label true true @@ -7887,7 +11415,7 @@ ГруппаДляСтраницФинальногоДействияРасширеннаяПодсказка - 1331 + 2186 Label true true @@ -7916,7 +11444,7 @@ Декорация103РасширеннаяПодсказка - 1345 + 2200 Label true true @@ -7938,6 +11466,114 @@ Left + + ГруппаВключитьРегистрациюВсехСобытийВЖурналеРегистрации1 + 1758 + + ВключитьРегистрациюВсехСобытийВЖурналеРегистрации1 + 1759 + true + true + + true + + + ВключитьРегистрациюВсехСобытийВЖурналеРегистрации + + Right + + ВключитьРегистрациюВсехСобытийВЖурналеРегистрации1РасширеннаяПодсказка + 2202 + Label + true + true + + Left + + + + ВключитьРегистрациюВсехСобытийВЖурналеРегистрации1КонтекстноеМеню + 1760 + true + + CheckBoxField + Enter + true + Left + true + + + + Декорация18 + 1761 + + <key>ru</key> + <value>Регистрация событий в журнале регистрации необходима для диагностики работы обмена данными.</value> + + true + true + + true + + + Декорация18РасширеннаяПодсказка + 2204 + Label + true + true + + Left + + + + Декорация18КонтекстноеМеню + 1762 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа включить регистрацию всех событий в журнале регистрации</value> + + + ru + Группа включить регистрацию всех событий в журнале регистрации + + + ГруппаВключитьРегистрациюВсехСобытийВЖурналеРегистрации1РасширеннаяПодсказка + 2201 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + НадписьГотово 349 @@ -7952,7 +11588,7 @@ НадписьГотовоРасширеннаяПодсказка - 1346 + 2205 Label true true @@ -7988,7 +11624,7 @@ СтраницаМастераОкончаниеСВыгрузкойНастройкиРасширеннаяПодсказка - 1320 + 2175 Label true true @@ -8010,7 +11646,7 @@ 866 <key>ru</key> - <value>Создание обмена данными успешно завершено!</value> + <value>Создание обмена данными успешно завершено</value> true true @@ -8019,7 +11655,7 @@ ЗаголовокСтраницыМастераЗакрыть2РасширеннаяПодсказка - 1348 + 2207 Label true true @@ -8065,7 +11701,7 @@ Декорация183РасширеннаяПодсказка - 1350 + 2209 Label true true @@ -8102,7 +11738,7 @@ Right ВыполнитьИнтерактивныйОбменДаннымиСейчасРасширеннаяПодсказка - 1352 + 2211 Label true true @@ -8140,7 +11776,7 @@ ПоясняющаяНадписьКФлагуСопоставления1РасширеннаяПодсказка - 1354 + 2213 Label true true @@ -8176,7 +11812,7 @@ ЗапуститьПриложение1СПредприятиеИВыполнитьИнтерактивнуюЗагрузкуДанных1РасширеннаяПодсказка - 1355 + 2214 Label true true @@ -8185,15 +11821,12 @@ Hyperlink - Form.Command.ЗапуститьПриложение1СПредприятиеИВыполнитьИнтерактивнуюЗагрузкуДанных + Form.Command.ВыполнитьЗагрузкуДанныхВоВторойИнформационнойБазе Normal Auto true true UserCmds - - CommonPicture.ВыполнитьОбменДаннымиИнтерактивно - Auto true @@ -8211,7 +11844,7 @@ ГруппаРасширеннаяПодсказка - 1351 + 2210 Label true true @@ -8236,7 +11869,7 @@ Группа5РасширеннаяПодсказка - 1349 + 2208 Label true true @@ -8264,7 +11897,7 @@ Декорация104РасширеннаяПодсказка - 1356 + 2215 Label true true @@ -8286,6 +11919,114 @@ Left + + ГруппаВключитьРегистрациюВсехСобытийВЖурналеРегистрации2 + 1763 + + ВключитьРегистрациюВсехСобытийВЖурналеРегистрации2 + 1764 + true + true + + true + + + ВключитьРегистрациюВсехСобытийВЖурналеРегистрации + + Right + + ВключитьРегистрациюВсехСобытийВЖурналеРегистрации2РасширеннаяПодсказка + 2217 + Label + true + true + + Left + + + + ВключитьРегистрациюВсехСобытийВЖурналеРегистрации2КонтекстноеМеню + 1765 + true + + CheckBoxField + Enter + true + Left + true + + + + Декорация19 + 1766 + + <key>ru</key> + <value>Регистрация событий в журнале регистрации необходима для диагностики работы обмена данными.</value> + + true + true + + true + + + Декорация19РасширеннаяПодсказка + 2219 + Label + true + true + + Left + + + + Декорация19КонтекстноеМеню + 1767 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа включить регистрацию всех событий в журнале регистрации</value> + + + ru + Группа включить регистрацию всех событий в журнале регистрации + + + ГруппаВключитьРегистрациюВсехСобытийВЖурналеРегистрации2РасширеннаяПодсказка + 2216 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + НадписьГотово1 899 @@ -8300,7 +12041,7 @@ НадписьГотово1РасширеннаяПодсказка - 1357 + 2220 Label true true @@ -8336,7 +12077,7 @@ СтраницаМастераОкончаниеСОбменомПоВнешнемуСоединениюРасширеннаяПодсказка - 1347 + 2206 Label true true @@ -8367,7 +12108,7 @@ ЗаголовокСтраницыМастераЗакрыть1РасширеннаяПодсказка - 1359 + 2222 Label true true @@ -8405,18 +12146,18 @@ 760 ГруппаКартинки - 761 + 1364 - Декорация9 - 762 + Декорация16 + 1365 true true true - Декорация9РасширеннаяПодсказка - 1362 + Декорация16РасширеннаяПодсказка + 2225 Label true true @@ -8425,13 +12166,13 @@ - Декорация9КонтекстноеМеню - 763 + Декорация16КонтекстноеМеню + 1366 true - 5 + 8 true - 2 + 3 true false @@ -8455,7 +12196,7 @@ ГруппаКартинкиРасширеннаяПодсказка - 1361 + 2224 Label true true @@ -8481,7 +12222,8 @@ 765 <key>ru</key> - <value>Выполняется создание нового обмена данными. + <value> +Выполняется создание нового обмена данными. Пожалуйста, подождите...</value> true @@ -8491,7 +12233,7 @@ Декорация12РасширеннаяПодсказка - 1364 + 2227 Label true true @@ -8506,7 +12248,7 @@ Label true - 2 + 3 true true false @@ -8533,7 +12275,7 @@ ГруппаСообщенияРасширеннаяПодсказка - 1363 + 2226 Label true true @@ -8562,7 +12304,7 @@ ГруппировкаСообщенияРасширеннаяПодсказка - 1360 + 2223 Label true true @@ -8595,7 +12337,2323 @@ СтраницаМастераОжиданиеСозданияНастройкиОбменаДаннымиРасширеннаяПодсказка - 1358 + 2221 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена + 1380 + + ЗаголовокСтраницыМастераЗакрыть6 + 1381 + + <key>ru</key> + <value>Анализ данных</value> + + true + true + + true + + + ЗаголовокСтраницыМастераЗакрыть6РасширеннаяПодсказка + 2229 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастераЗакрыть6КонтекстноеМеню + 1382 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + ГруппировкаСообщения4 + 1383 + + ГруппаКартинки4 + 1384 + + Декорация26 + 1385 + true + true + + true + + + Декорация26РасширеннаяПодсказка + 2232 + Label + true + true + + Left + + + + Декорация26КонтекстноеМеню + 1386 + true + + 8 + true + 3 + true + false + + + CommonPicture.Информация32 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинки4РасширеннаяПодсказка + 2231 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения4 + 1387 + + Декорация33 + 1388 + + <key>ru</key> + <value>Выполняется создание настройки обмена данными. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация33РасширеннаяПодсказка + 2234 + Label + true + true + + Left + + + + Декорация33КонтекстноеМеню + 1389 + true + + Label + true + 3 + true + true + false + + System.DefaultGUIFont + 10.0 + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщения4РасширеннаяПодсказка + 2233 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщения4РасширеннаяПодсказка + 2230 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница мастера ожидание анализа данных создание настройки обмена</value> + + + ru + Страница 14 + + + СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбменаРасширеннаяПодсказка + 2228 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения + 1291 + + ЗаголовокСтраницыМастераЗакрыть5 + 1292 + + <key>ru</key> + <value>Анализ данных</value> + + true + true + + true + + + ЗаголовокСтраницыМастераЗакрыть5РасширеннаяПодсказка + 2236 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастераЗакрыть5КонтекстноеМеню + 1293 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + ГруппировкаСообщения3 + 1294 + + ГруппаКартинки3 + 1377 + + Декорация25 + 1378 + true + true + + true + + + Декорация25РасширеннаяПодсказка + 2239 + Label + true + true + + Left + + + + Декорация25КонтекстноеМеню + 1379 + true + + 8 + true + 3 + true + false + + + CommonPicture.Информация32 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинки3РасширеннаяПодсказка + 2238 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения3 + 1298 + + Декорация17 + 1299 + + <key>ru</key> + <value>Выполняется получение данных. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация17РасширеннаяПодсказка + 2241 + Label + true + true + + Left + + + + Декорация17КонтекстноеМеню + 1300 + true + + Label + true + 3 + true + true + false + + System.DefaultGUIFont + 10.0 + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщения3РасширеннаяПодсказка + 2240 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщения3РасширеннаяПодсказка + 2237 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница мастера ожидание анализа данных получение сообщения</value> + + + ru + Страница 14 + + + СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияРасширеннаяПодсказка + 2235 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление + 1528 + + ЗаголовокСтраницыМастераЗакрыть18 + 1529 + + <key>ru</key> + <value>Анализ данных</value> + + true + true + + true + + + ЗаголовокСтраницыМастераЗакрыть18РасширеннаяПодсказка + 2243 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастераЗакрыть18КонтекстноеМеню + 1530 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + ГруппировкаСообщения16 + 1531 + + ГруппаКартинки16 + 1532 + + Декорация75 + 1533 + true + true + + true + + + Декорация75РасширеннаяПодсказка + 2246 + Label + true + true + + Left + + + + Декорация75КонтекстноеМеню + 1534 + true + + 8 + true + 3 + true + false + + + CommonPicture.Информация32 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинки16РасширеннаяПодсказка + 2245 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения16 + 1535 + + Декорация76 + 1536 + + <key>ru</key> + <value>Выполняется автоматическое сопоставление данных. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация76РасширеннаяПодсказка + 2248 + Label + true + true + + Left + + + + Декорация76КонтекстноеМеню + 1537 + true + + Label + true + 3 + true + true + false + + System.DefaultGUIFont + 10.0 + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщения16РасширеннаяПодсказка + 2247 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщения16РасширеннаяПодсказка + 2244 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница мастера ожидание анализа данных автоматическое сопоставление</value> + + + ru + Страница 14 + + + СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставлениеРасширеннаяПодсказка + 2242 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаМастераОжиданиеСинхронизацииСправочниковЗагрузка + 1486 + + ЗаголовокСтраницыМастераЗакрыть15 + 1487 + + <key>ru</key> + <value>Синхронизация справочников</value> + + true + true + + true + + + ЗаголовокСтраницыМастераЗакрыть15РасширеннаяПодсказка + 2250 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастераЗакрыть15КонтекстноеМеню + 1488 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + ГруппировкаСообщения13 + 1489 + + ГруппаКартинки13 + 1490 + + Декорация63 + 1491 + true + true + + true + + + Декорация63РасширеннаяПодсказка + 2253 + Label + true + true + + Left + + + + Декорация63КонтекстноеМеню + 1492 + true + + 8 + true + 3 + true + false + + + CommonPicture.Информация32 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинки13РасширеннаяПодсказка + 2252 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения13 + 1493 + + Декорация64 + 1494 + + <key>ru</key> + <value>Выполняется загрузка справочников в эту программу. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация64РасширеннаяПодсказка + 2255 + Label + true + true + + Left + + + + Декорация64КонтекстноеМеню + 1495 + true + + Label + true + 3 + true + true + false + + System.DefaultGUIFont + 10.0 + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщения13РасширеннаяПодсказка + 2254 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщения13РасширеннаяПодсказка + 2251 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + ru + Страница 14 + + + СтраницаМастераОжиданиеСинхронизацииСправочниковЗагрузкаРасширеннаяПодсказка + 2249 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка + 1500 + + ЗаголовокСтраницыМастераЗакрыть16 + 1501 + + <key>ru</key> + <value>Синхронизация справочников</value> + + true + true + + true + + + ЗаголовокСтраницыМастераЗакрыть16РасширеннаяПодсказка + 2257 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастераЗакрыть16КонтекстноеМеню + 1502 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + ГруппировкаСообщения14 + 1503 + + ГруппаКартинки14 + 1504 + + Декорация67 + 1505 + true + true + + true + + + Декорация67РасширеннаяПодсказка + 2260 + Label + true + true + + Left + + + + Декорация67КонтекстноеМеню + 1506 + true + + 8 + true + 3 + true + false + + + CommonPicture.Информация32 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинки14РасширеннаяПодсказка + 2259 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения14 + 1507 + + Декорация68 + 1508 + + <key>ru</key> + <value>Выполняется выгрузка справочников из этой программы. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация68РасширеннаяПодсказка + 2262 + Label + true + true + + Left + + + + Декорация68КонтекстноеМеню + 1509 + true + + Label + true + 3 + true + true + false + + System.DefaultGUIFont + 10.0 + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщения14РасширеннаяПодсказка + 2261 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщения14РасширеннаяПодсказка + 2258 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + ru + Страница 14 + + + СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаРасширеннаяПодсказка + 2256 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаМастераОжиданиеСохраненияНастроек + 1321 + + ЗаголовокСтраницыМастераЗакрыть8 + 1322 + + <key>ru</key> + <value>Сохранение настроек</value> + + true + true + + true + + + ЗаголовокСтраницыМастераЗакрыть8РасширеннаяПодсказка + 2264 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастераЗакрыть8КонтекстноеМеню + 1323 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + ГруппировкаСообщения6 + 1324 + + ГруппаКартинки6 + 1325 + + Декорация29 + 1326 + true + true + + true + + + Декорация29РасширеннаяПодсказка + 2267 + Label + true + true + + Left + + + + Декорация29КонтекстноеМеню + 1327 + true + + 8 + true + 3 + true + false + + + CommonPicture.Информация32 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинки6РасширеннаяПодсказка + 2266 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения6 + 1328 + + Декорация30 + 1329 + + <key>ru</key> + <value>Выполняется сохранение настроек. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация30РасширеннаяПодсказка + 2269 + Label + true + true + + Left + + + + Декорация30КонтекстноеМеню + 1330 + true + + Label + true + 3 + true + true + false + + System.DefaultGUIFont + 10.0 + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщения6РасширеннаяПодсказка + 2268 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщения6РасширеннаяПодсказка + 2265 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + ru + Страница 14 + + + СтраницаМастераОжиданиеСохраненияНастроекРасширеннаяПодсказка + 2263 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка + 1311 + + ЗаголовокСтраницыМастераЗакрыть7 + 1312 + + <key>ru</key> + <value>Синхронизация данных</value> + + true + true + + true + + + ЗаголовокСтраницыМастераЗакрыть7РасширеннаяПодсказка + 2271 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастераЗакрыть7КонтекстноеМеню + 1313 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + ГруппировкаСообщения5 + 1314 + + ГруппаКартинки5 + 1315 + + Декорация27 + 1316 + true + true + + true + + + Декорация27РасширеннаяПодсказка + 2274 + Label + true + true + + Left + + + + Декорация27КонтекстноеМеню + 1317 + true + + 8 + true + 3 + true + false + + + CommonPicture.Информация32 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинки5РасширеннаяПодсказка + 2273 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения5 + 1318 + + Декорация28 + 1319 + + <key>ru</key> + <value>Выполняется загрузка данных в эту программу. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация28РасширеннаяПодсказка + 2276 + Label + true + true + + Left + + + + Декорация28КонтекстноеМеню + 1320 + true + + Label + true + 3 + true + true + false + + System.DefaultGUIFont + 10.0 + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщения5РасширеннаяПодсказка + 2275 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщения5РасширеннаяПодсказка + 2272 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + ru + Страница 14 + + + СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаРасширеннаяПодсказка + 2270 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка + 1410 + + ЗаголовокСтраницыМастераЗакрыть11 + 1411 + + <key>ru</key> + <value>Синхронизация данных</value> + + true + true + + true + + + ЗаголовокСтраницыМастераЗакрыть11РасширеннаяПодсказка + 2278 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастераЗакрыть11КонтекстноеМеню + 1412 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + ГруппировкаСообщения9 + 1413 + + ГруппаКартинки9 + 1414 + + Декорация38 + 1415 + true + true + + true + + + Декорация38РасширеннаяПодсказка + 2281 + Label + true + true + + Left + + + + Декорация38КонтекстноеМеню + 1416 + true + + 8 + true + 3 + true + false + + + CommonPicture.Информация32 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинки9РасширеннаяПодсказка + 2280 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения9 + 1417 + + Декорация39 + 1418 + + <key>ru</key> + <value>Выполняется выгрузка данных из этой программы. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация39РасширеннаяПодсказка + 2283 + Label + true + true + + Left + + + + Декорация39КонтекстноеМеню + 1419 + true + + Label + true + 3 + true + true + false + + System.DefaultGUIFont + 10.0 + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщения9РасширеннаяПодсказка + 2282 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщения9РасширеннаяПодсказка + 2279 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + ru + Страница 14 + + + СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаРасширеннаяПодсказка + 2277 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаМастераОжиданиеПроверкиПодключенияКСервису + 1733 + + ЗаголовокСтраницыМастераОжидание1 + 1734 + + <key>ru</key> + <value>Проверка подключения</value> + + true + true + + true + + + ЗаголовокСтраницыМастераОжидание1РасширеннаяПодсказка + 2285 + Label + true + true + + Left + + + + ЗаголовокСтраницыМастераОжидание1КонтекстноеМеню + 1735 + true + + Label + true + 2 + true + true + false + false + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + ГруппировкаСообщения7 + 1736 + + ГруппаКартинки7 + 1737 + + Декорация31 + 1738 + true + true + + true + + + Декорация31РасширеннаяПодсказка + 2288 + Label + true + true + + Left + + + + Декорация31КонтекстноеМеню + 1739 + true + + 8 + true + 3 + true + false + + + CommonPicture.Информация32 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинки7РасширеннаяПодсказка + 2287 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения7 + 1740 + + Декорация34 + 1741 + + <key>ru</key> + <value>Выполняется проверка установки соединения с приложением в Интернете. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация34РасширеннаяПодсказка + 2290 + Label + true + true + + Left + + + + Декорация34КонтекстноеМеню + 1742 + true + + Label + true + 3 + true + true + false + + System.DefaultGUIFont + 10.0 + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщения7РасширеннаяПодсказка + 2289 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщения7РасширеннаяПодсказка + 2286 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + ru + Страница 14 + + + СтраницаМастераОжиданиеПроверкиПодключенияКСервисуРасширеннаяПодсказка + 2284 Label true true @@ -8626,7 +14684,7 @@ ЗаголовокСтраницыМастераОжиданиеРасширеннаяПодсказка - 1366 + 2292 Label true true @@ -8675,7 +14733,7 @@ Декорация13РасширеннаяПодсказка - 1369 + 2295 Label true true @@ -8688,9 +14746,9 @@ 861 true - 5 + 8 true - 2 + 3 true false @@ -8714,7 +14772,7 @@ ГруппаКартинки1РасширеннаяПодсказка - 1368 + 2294 Label true true @@ -8740,7 +14798,8 @@ 863 <key>ru</key> - <value>Выполняется проверка установки соединения со второй информационной базой. + <value> +Выполняется проверка установки соединения со второй информационной базой. Пожалуйста, подождите...</value> true @@ -8750,7 +14809,7 @@ Декорация14РасширеннаяПодсказка - 1371 + 2297 Label true true @@ -8765,7 +14824,7 @@ Label true - 2 + 3 true true false @@ -8792,7 +14851,7 @@ ГруппаСообщения1РасширеннаяПодсказка - 1370 + 2296 Label true true @@ -8821,7 +14880,7 @@ ГруппировкаСообщения1РасширеннаяПодсказка - 1367 + 2293 Label true true @@ -8854,7 +14913,7 @@ СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединенияРасширеннаяПодсказка - 1365 + 2291 Label true true @@ -8879,7 +14938,7 @@ ПанельОсновнаяРасширеннаяПодсказка - 1076 + 1793 Label true true @@ -8914,7 +14973,7 @@ КомандаНазад5РасширеннаяПодсказка - 1376 + 2302 Label true true @@ -8941,7 +15000,7 @@ true КомандаДалее3РасширеннаяПодсказка - 1377 + 2303 Label true true @@ -8967,7 +15026,7 @@ КомандаОтмена6РасширеннаяПодсказка - 1378 + 2304 Label true true @@ -8993,7 +15052,7 @@ СправкаРасширеннаяПодсказка - 1379 + 2305 Label true true @@ -9017,7 +15076,7 @@ true КоманднаяПанель1РасширеннаяПодсказка - 1375 + 2301 Label true true @@ -9045,7 +15104,7 @@ СтраницаНавигацииНачалоРасширеннаяПодсказка - 1374 + 2300 Label true true @@ -9074,7 +15133,7 @@ КомандаНазад6РасширеннаяПодсказка - 1382 + 2308 Label true true @@ -9101,7 +15160,7 @@ true КомандаДалее4РасширеннаяПодсказка - 1383 + 2309 Label true true @@ -9127,7 +15186,7 @@ КомандаОтмена7РасширеннаяПодсказка - 1384 + 2310 Label true true @@ -9153,7 +15212,7 @@ Справка1РасширеннаяПодсказка - 1385 + 2311 Label true true @@ -9177,7 +15236,7 @@ true КоманднаяПанель2РасширеннаяПодсказка - 1381 + 2307 Label true true @@ -9205,7 +15264,163 @@ СтраницаНавигацииПродолжениеРасширеннаяПодсказка - 1380 + 2306 + Label + true + true + + Left + + + Page + + auto + + + + СтраницаНавигацииПродолжениеТолькоДалее + 1566 + + КоманднаяПанель3 + 1567 + + КомандаНазад7 + 1568 + true + false + + true + + + КомандаНазад7РасширеннаяПодсказка + 2314 + Label + true + true + + Left + + + Form.Command.КомандаНазад + Normal + Auto + true + true + UserCmds + Auto + + + КомандаДалее6 + 1569 + true + true + + true + + true + + КомандаДалее6РасширеннаяПодсказка + 2315 + Label + true + true + + Left + + + Form.Command.КомандаДалее + Normal + Auto + true + true + UserCmds + Auto + + + КомандаОтмена8 + 1570 + true + true + + true + + + КомандаОтмена8РасширеннаяПодсказка + 2316 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + + Справка2 + 1571 + true + true + + true + + + Справка2РасширеннаяПодсказка + 2317 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + true + + КоманднаяПанель3РасширеннаяПодсказка + 2313 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + ru + Страница навигации1 + + + СтраницаНавигацииПродолжениеТолькоДалееРасширеннаяПодсказка + 2312 Label true true @@ -9234,7 +15449,7 @@ КомандаНазад8РасширеннаяПодсказка - 1388 + 2320 Label true true @@ -9265,7 +15480,7 @@ true КомандаДалее5РасширеннаяПодсказка - 1389 + 2321 Label true true @@ -9291,7 +15506,7 @@ КомандаОтмена9РасширеннаяПодсказка - 1390 + 2322 Label true true @@ -9317,7 +15532,7 @@ Справка3РасширеннаяПодсказка - 1391 + 2323 Label true true @@ -9341,7 +15556,7 @@ true КоманднаяПанель4РасширеннаяПодсказка - 1387 + 2319 Label true true @@ -9369,7 +15584,7 @@ СтраницаНавигацииОжиданиеРасширеннаяПодсказка - 1386 + 2318 Label true true @@ -9383,22 +15598,22 @@ - СтраницаНавигацииОкончаниеПервогоЭтапа - 953 + СтраницаНавигацииОкончание + 1168 - КоманднаяПанель3 - 954 + КоманднаяПанель7 + 1169 - КомандаНазад7 - 955 + КомандаНазад11 + 1170 true - true + false true - КомандаНазад7РасширеннаяПодсказка - 1394 + КомандаНазад11РасширеннаяПодсказка + 2326 Label true true @@ -9415,16 +15630,16 @@ Auto - КомандаГотово3 - 956 + КомандаГотово6 + 1171 true true true - КомандаГотово3РасширеннаяПодсказка - 1395 + КомандаГотово6РасширеннаяПодсказка + 2327 Label true true @@ -9432,7 +15647,7 @@ Left - Form.Command.КомандаГотовоПервыйЭтап + Form.Command.КомандаГотово Normal Auto true @@ -9441,16 +15656,16 @@ Auto - КомандаОтмена8 - 957 + КомандаОтмена11 + 1172 true true true - КомандаОтмена8РасширеннаяПодсказка - 1396 + КомандаОтмена11РасширеннаяПодсказка + 2328 Label true true @@ -9467,16 +15682,16 @@ Auto - Справка2 - 958 + Справка6 + 1173 true true true - Справка2РасширеннаяПодсказка - 1397 + Справка6РасширеннаяПодсказка + 2329 Label true true @@ -9499,8 +15714,8 @@ true - КоманднаяПанель3РасширеннаяПодсказка - 1393 + КоманднаяПанель7РасширеннаяПодсказка + 2325 Label true true @@ -9518,335 +15733,13 @@ true - - <key>ru</key> - <value>Страница навигации окончание первого этапа</value> - ru Страница навигации1 - СтраницаНавигацииОкончаниеПервогоЭтапаРасширеннаяПодсказка - 1392 - Label - true - true - - Left - - - Page - - auto - - - - СтраницаНавигацииОкончаниеПервогоЭтапаЧерезВнешнееСоединение - 965 - - КоманднаяПанель5 - 966 - - КомандаНазад9 - 967 - true - true - - true - - - КомандаНазад9РасширеннаяПодсказка - 1400 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - - - КомандаГотово4 - 968 - true - true - - true - - - КомандаГотово4РасширеннаяПодсказка - 1401 - Label - true - true - - Left - - - Form.Command.КомандаГотовоПервыйЭтапВнешнееСоединение - Normal - Auto - true - true - UserCmds - Auto - - - КомандаОтмена10 - 969 - true - true - - true - - - КомандаОтмена10РасширеннаяПодсказка - 1402 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - - - Справка4 - 970 - true - true - - true - - - Справка4РасширеннаяПодсказка - 1403 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - true - - КоманднаяПанель5РасширеннаяПодсказка - 1399 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница навигации окончание первого этапа через внешнее соединение</value> - - - ru - Страница навигации1 - - - СтраницаНавигацииОкончаниеПервогоЭтапаЧерезВнешнееСоединениеРасширеннаяПодсказка - 1398 - Label - true - true - - Left - - - Page - - auto - - - - СтраницаНавигацииОкончаниеВторогоЭтапа - 971 - - КоманднаяПанель6 - 972 - - КомандаНазад10 - 973 - true - true - - true - - - КомандаНазад10РасширеннаяПодсказка - 1406 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - - - КомандаГотово5 - 974 - true - true - - true - - - КомандаГотово5РасширеннаяПодсказка - 1407 - Label - true - true - - Left - - - Form.Command.КомандаГотовоВторойЭтап - Normal - Auto - true - true - UserCmds - Auto - - - КомандаОтмена12 - 975 - true - true - - true - - - КомандаОтмена12РасширеннаяПодсказка - 1408 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - - - Справка5 - 976 - true - true - - true - - - Справка5РасширеннаяПодсказка - 1409 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - true - - КоманднаяПанель6РасширеннаяПодсказка - 1405 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница навигации окончание второго этапа</value> - - - ru - Страница навигации1 - - - СтраницаНавигацииОкончаниеВторогоЭтапаРасширеннаяПодсказка - 1404 + СтраницаНавигацииОкончаниеРасширеннаяПодсказка + 2324 Label true true @@ -9871,7 +15764,7 @@ true ПанельНавигацииРасширеннаяПодсказка - 1373 + 2299 Label true true @@ -9899,7 +15792,7 @@ РамкаПанелиНавигацииРасширеннаяПодсказка - 1372 + 2298 Label true true @@ -9926,6 +15819,10 @@ Left true + + NotificationProcessing + ОбработкаОповещения + OnOpen ПриОткрытии @@ -10439,6 +16336,41 @@ true + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 8 + + Boolean + + + true + + + true + + + + ИмяОбработчикаДлительнойОперации + + <key>ru</key> + <value>Имя обработчика длительной операции</value> + + 9 + + String + + + + true + + + true + + ПорядковыйНомерПерехода @@ -10666,6 +16598,760 @@ true + + СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису + + <key>ru</key> + <value>Событие журнала регистрации установка подключения к web сервису</value> + + 34 + + String + + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 35 + + Boolean + + + true + + + true + + + + СобытиеЖурналаРегистрацииСозданиеОбменаДанными + + <key>ru</key> + <value>Событие журнала регистрации создание обмена данными</value> + + 37 + + String + + + + true + + + true + + + + НастройкаОбменаССервисом + + <key>ru</key> + <value>Настройка обмена с сервисом</value> + + 38 + + Boolean + + + true + + + true + + + + ОписаниеНастроекВыгрузкиДанных + + <key>ru</key> + <value>Описание настроек выгрузки данных</value> + + 39 + + String + + + + true + + + true + + + + КонтекстФормыНастройкиУзлов + + <key>ru</key> + <value>Контекст формы настройки узлов</value> + + 40 + + + true + + + true + + + + ИдентификаторДлительнойОперации + 41 + + String + + + + true + + + true + + + + ИдентификаторФайлаСообщенияВСервисе + + <key>ru</key> + <value>Идентификатор файла сообщения в сервисе</value> + + 42 + + String + + + + true + + + true + + + + ДлительнаяОперацияЗавершена + + <key>ru</key> + <value>Длительная операция завершена</value> + + 44 + + Boolean + + + true + + + true + + + + ДатаНачалаОперации + + <key>ru</key> + <value>Дата начала операции</value> + + 45 + + Date + + + + true + + + true + + + + НастройкиПараметровУчетаПоясняющаяНадпись + + <key>ru</key> + <value>Настройки параметров учета поясняющая надпись</value> + + 46 + + String + + + + true + + + true + + + + ДополнительныеНастройкиПоясняющаяНадпись + + <key>ru</key> + <value>Дополнительные настройки поясняющая надпись</value> + + 47 + + String + + + + true + + + true + + + + НастройкиПараметровУчетаЗаданы + + <key>ru</key> + <value>Настройки параметров учета заданы</value> + + 48 + + Boolean + + + true + + + true + + + + НастройкиПараметровУчетаКорреспондентаЗаданы + + <key>ru</key> + <value>Настройки параметров учета корреспондента заданы</value> + + 49 + + Boolean + + + true + + + true + + + + НастройкиПараметровУчетаКорреспондентаПоясняющаяНадпись + + <key>ru</key> + <value>Настройки параметров учета корреспондента поясняющая надпись</value> + + 50 + + String + + + + true + + + true + + + + ДеревоИнформацииСтатистики + + <key>ru</key> + <value>Дерево информации статистики</value> + + 36 + + ValueTree + + + true + + + true + + + Синоним + + <key>ru</key> + <value>Данные</value> + + 1 + + String + + + + true + + + true + + + + ПроцентСопоставленияОбъектов + + <key>ru</key> + <value>Сопоставлено, %</value> + + 2 + + Number + + 3 + true + + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 3 + + Picture + + + true + + + true + + + + КоличествоОбъектовВИсточнике + + <key>ru</key> + <value>Объектов в сообщении, шт</value> + + 4 + + Number + + 10 + + + + true + + + true + + + + КоличествоОбъектовВПриемнике + + <key>ru</key> + <value>Объектов в этой базе, шт</value> + + 5 + + Number + + 10 + + + + true + + + true + + + + КоличествоОбъектовНесопоставленных + + <key>ru</key> + <value>Осталось сопоставить, шт</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + ИндексКартинки + 7 + + Number + + 1 + true + + + + true + + + true + + + + Ключ + + <key>ru</key> + <value>Ключ</value> + + 8 + + String + + + + true + + + true + + + + ИспользоватьПредварительныйПросмотр + + <key>ru</key> + <value>Использовать предварительный просмотр</value> + + 9 + + Boolean + + + true + + + true + + + + ИмяПравила + + <key>ru</key> + <value>Имя правила</value> + + 10 + + String + + + + true + + + true + + + + ИмяТаблицыПриемника + + <key>ru</key> + <value>Имя таблицы приемника</value> + + 11 + + String + + + + true + + + true + + + + ТипОбъектаСтрокой + + <key>ru</key> + <value>Тип объекта строкой</value> + + 12 + + String + + + + true + + + true + + + + ПоляТаблицы + + <key>ru</key> + <value>Поля таблицы</value> + + 13 + + String + + + + true + + + true + + + + ПоляПоиска + + <key>ru</key> + <value>Поля поиска</value> + + 14 + + String + + + + true + + + true + + + + ТипИсточникаСтрокой + + <key>ru</key> + <value>Тип источника строкой</value> + + 15 + + String + + + + true + + + true + + + + ТипПриемникаСтрокой + + <key>ru</key> + <value>Тип приемника строкой</value> + + 16 + + String + + + + true + + + true + + + + ДанныеУспешноЗагружены + + <key>ru</key> + <value>Данные успешно загружены</value> + + 17 + + Boolean + + + true + + + true + + + + ЭтоУдалениеОбъекта + + <key>ru</key> + <value>Это удаление объекта</value> + + 18 + + Boolean + + + true + + + true + + + + + ВсеДанныеСопоставлены + + <key>ru</key> + <value>Все данные сопоставлены</value> + + 43 + + Boolean + + + true + + + true + + + + ВыполнятьОбменДаннымиАвтоматически + + <key>ru</key> + <value>Выполнять обмен данными автоматически</value> + + 51 + + Boolean + + + true + + + true + + + + ПредопределенноеРасписаниеОбменаДанными + + <key>ru</key> + <value>Предопределенное расписание обмена данными</value> + + 52 + + String + + + + true + + + true + + + + ПредставлениеПользовательскогоОписания + + <key>ru</key> + <value>Представление пользовательского описания</value> + + 53 + + String + + + + true + + + true + + + + РасписаниеВыполненияОбменаДанными + + <key>ru</key> + <value>Расписание выполнения обмена данными</value> + + 54 + + + true + + + true + + + + СостояниеДлительнойОперации + + <key>ru</key> + <value>Состояние длительной операции</value> + + 55 + + String + + + + true + + + true + + + + ЗаголовокСтраницыДлительнойОперации + 56 + + String + + + + true + + + true + + + + ЖурналРегистрацииВключен + + <key>ru</key> + <value>Журнал регистрации включен</value> + + 57 + + Boolean + + + true + + + true + + + + ВключитьРегистрациюВсехСобытийВЖурналеРегистрации + + <key>ru</key> + <value>Включить регистрацию всех событий в журнале регистрации (рекомендуется)</value> + + 58 + + Boolean + + + true + + + true + + КомандаДалее @@ -10798,7 +17484,7 @@ <name>НастройкаЗначенийПоУмолчанию</name> <title> <key>ru</key> - <value>Настроить значения</value> + <value>Изменить</value> 16 @@ -10886,42 +17572,6 @@ Auto Auto - - КомандаГотовоПервыйЭтап - - <key>ru</key> - <value>Готово</value> - - 6 - - true - - - - КомандаГотовоПервыйЭтап - - - Auto - Auto - - - КомандаГотовоВторойЭтап - - <key>ru</key> - <value>Готово</value> - - 11 - - true - - - - КомандаГотовоВторойЭтап - - - Auto - Auto - ПроверитьПодключениеCOM @@ -10931,7 +17581,7 @@ <id>4</id> <toolTip> <key>ru</key> - <value>Проверить подключение к информационной базе корреспонденту</value> + <value>Проверить подключение к базе-корреспонденту</value> </toolTip> <use> <common>true</common> @@ -10944,24 +17594,6 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>КомандаГотовоПервыйЭтапВнешнееСоединение</name> - <title> - <key>ru</key> - <value>Готово</value> - - 14 - - true - - - - КомандаГотовоПервыйЭтапВнешнееСоединение - - - Auto - Auto - КакОпределитьПараметрыПодключения @@ -10989,7 +17621,7 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>НастройкаОграниченийРегистрацииДанныхБазыКорреспондента</name> + <name>НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЧерезВнешнееСоединение</name> <title> <key>ru</key> <value>Настроить ограничения</value> @@ -11007,7 +17639,7 @@ </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>НастройкаОграниченийРегистрацииДанныхБазыКорреспондента</name> + <name>НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЧерезВнешнееСоединение</name> </handler> </action> <representation>TextPicture</representation> @@ -11015,7 +17647,7 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>НастройкаЗначенийПоУмолчаниюБазыКорреспондента</name> + <name>НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВнешнееСоединение</name> <title> <key>ru</key> <value>Настроить значения</value> @@ -11033,7 +17665,7 @@ </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>НастройкаЗначенийПоУмолчаниюБазыКорреспондента</name> + <name>НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВнешнееСоединение</name> </handler> </action> <representation>TextPicture</representation> @@ -11081,18 +17713,25 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>ЗапуститьПриложение1СПредприятиеИВыполнитьИнтерактивнуюЗагрузкуДанных</name> + <name>ВыполнитьЗагрузкуДанныхВоВторойИнформационнойБазе</name> <title> <key>ru</key> <value>Выполнить загрузку данных во второй информационной базе</value> 20 + + ru + Выполнить загрузку данных во второй информационной базе + true + + CommonPicture.ВыполнитьОбменДаннымиИнтерактивно + - ЗапуститьПриложение1СПредприятиеИВыполнитьИнтерактивнуюЗагрузкуДанных + ВыполнитьЗагрузкуДанныхВоВторойИнформационнойБазе Auto @@ -11146,6 +17785,212 @@ Auto Auto + + ПроверитьПодключениеWS + + <key>ru</key> + <value>Проверить подключение</value> + + 23 + + true + + + + ПроверитьПодключениеWS + + + Auto + Auto + + + КакОпределитьПараметрыПодключенияКВебСервису + + <key>ru</key> + <value>Как определить параметры подключения ко второй информационной базе</value> + + 24 + + ru + Как определить параметры подключения к веб сервису + + + true + + + CommonPicture.Информация + + + + КакОпределитьПараметрыПодключенияКВебСервису + + + TextPicture + Auto + Auto + + + НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервис + + <key>ru</key> + <value>Изменить</value> + + 26 + + ru + Настройка значений по умолчанию + + + true + + + StdPicture.Properties + + + + НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервис + + + TextPicture + Auto + Auto + + + НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЧерезВебСервис + + <key>ru</key> + <value>Настроить ограничения</value> + + 27 + + ru + Настройка ограничений регистрации данных + + + true + + + StdPicture.FilterCriterion + + + + НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЧерезВебСервис + + + TextPicture + Auto + Auto + + + КомандаГотово + + <key>ru</key> + <value>Готово</value> + + 25 + + ru + Команда готово + + + true + + + + КомандаГотово + + + Auto + Auto + + + КакОпределитьПараметрыПодключенияКСервису + + <key>ru</key> + <value>Как определить параметры подключения</value> + + 6 + + true + + + CommonPicture.Информация + + + + КакОпределитьПараметрыПодключенияКСервису + + + TextPicture + Auto + Auto + + + ВыполнитьНастройкуВыгрузкиДанных + + <key>ru</key> + <value>Изменить...</value> + + 11 + + true + + + StdPicture.FilterCriterion + + + + ВыполнитьНастройкуВыгрузкиДанных + + + TextPicture + Auto + Auto + + + ВыполнитьСопоставлениеДанных + + <key>ru</key> + <value>Выполнить сопоставление</value> + + 14 + + ru + Выполнить сопоставление данных + + + true + + + StdPicture.ChooseValue + + + + ВыполнитьСопоставлениеДанных + + + TextPicture + Auto + Auto + + + ИзменитьПользовательскоеРасписание + + <key>ru</key> + <value>Настроить...</value> + + 28 + + true + + + + ИзменитьПользовательскоеРасписание + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/Декорация16/Picture.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/Декорация16/Picture.png deleted file mode 100644 index 692b15491..000000000 Binary files a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/Декорация16/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/Декорация17/Picture.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/Декорация17/Picture.png deleted file mode 100644 index 10e3fe606..000000000 Binary files a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/Декорация17/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаВнешнееСоединениеДоступноАктивная/Picture.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаВнешнееСоединениеДоступноАктивная/Picture.png deleted file mode 100644 index 7fa93a6fa..000000000 Binary files a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаВнешнееСоединениеДоступноАктивная/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаВнешнееСоединениеДоступноНеактивная/Picture.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаВнешнееСоединениеДоступноНеактивная/Picture.png deleted file mode 100644 index b490d7b0f..000000000 Binary files a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаВнешнееСоединениеДоступноНеактивная/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаВнешнееСоединениеНедоступноАктивная/Picture.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаВнешнееСоединениеНедоступноАктивная/Picture.png deleted file mode 100644 index 5cd46587a..000000000 Binary files a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаВнешнееСоединениеНедоступноАктивная/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаВнешнееСоединениеНедоступноНеактивная/Picture.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаВнешнееСоединениеНедоступноНеактивная/Picture.png deleted file mode 100644 index 9d45328c5..000000000 Binary files a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаВнешнееСоединениеНедоступноНеактивная/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаНастройкаОбменаССервисом/Picture.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаНастройкаОбменаССервисом/Picture.png new file mode 100644 index 000000000..f02445597 Binary files /dev/null and b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаНастройкаОбменаССервисом/Picture.png differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаОбменЧерезВебСервис/Picture.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаОбменЧерезВебСервис/Picture.png new file mode 100644 index 000000000..41d68e873 Binary files /dev/null and b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаОбменЧерезВебСервис/Picture.png differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаОбменЧерезВнешнееСоединение/Picture.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаОбменЧерезВнешнееСоединение/Picture.png new file mode 100644 index 000000000..01995d908 Binary files /dev/null and b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаОбменЧерезВнешнееСоединение/Picture.png differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаОбменЧерезОбычныеКаналыСвязи/Picture.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаОбменЧерезОбычныеКаналыСвязи/Picture.png new file mode 100644 index 000000000..94c5003ac Binary files /dev/null and b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаОбменЧерезОбычныеКаналыСвязи/Picture.png differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаЧасы/Picture.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаЧасы/Picture.png new file mode 100644 index 000000000..81d507e30 Binary files /dev/null and b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/КартинкаЧасы/Picture.png differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/ПустаяКартинка1/Picture.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/ПустаяКартинка1/Picture.png deleted file mode 100644 index f02154247..000000000 Binary files a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Items/ПустаяКартинка1/Picture.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl index 697fba89c..b2ef866e7 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl @@ -1,4 +1,3 @@ - &НаКлиенте Перем ЗакрытьФормуБезусловно; @@ -13,7 +12,7 @@ Возврат; КонецЕсли; - Если Не ОбменДаннымиСервер.РольДоступнаДобавлениеИзменениеОбменовДанными() Тогда + Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеОбменовДанными") Тогда ОбменДаннымиСервер.СообщитьОбОшибке(НСтр("ru = 'Нет прав на добавление/изменение обменов данными.'"), Отказ); Возврат; КонецЕсли; @@ -22,8 +21,7 @@ Если Не Параметры.Свойство("ИмяПланаОбмена", Объект.ИмяПланаОбмена) Тогда ОбменДаннымиСервер.СообщитьОбОшибке( - НСтр("ru = 'Работа помощника поддерживается только при вызове из командного интерфейса. Работа помощника завершена.'") - , Отказ); + НСтр("ru = 'Работа помощника поддерживается только при вызове из командного интерфейса. Работа помощника завершена.'"), Отказ); ИначеЕсли ПустаяСтрока(Объект.ИмяПланаОбмена) Тогда @@ -35,6 +33,8 @@ Возврат; КонецЕсли; + НастройкаОбменаССервисом = Параметры.Свойство("НастройкаОбменаССервисом"); + УстановитьПривилегированныйРежим(Истина); // установка значений по умолчанию - общих @@ -64,6 +64,10 @@ НастройкаОтборовНаУзле = ОбменДаннымиСервер.ЗначениеПоТипу(МенеджерПланаОбмена.НастройкаОтборовНаУзле(), "Структура"); ЗначенияПоУмолчаниюНаУзле = ОбменДаннымиСервер.ЗначениеПоТипу(МенеджерПланаОбмена.ЗначенияПоУмолчаниюНаУзле(), "Структура"); + НастройкиПараметровУчетаПоясняющаяНадпись = МенеджерПланаОбмена.ПояснениеДляНастройкиПараметровУчета(); + + КонтекстФормыНастройкиУзлов = Новый Структура; + ПредусмотреныНастройкиОтборовНаУзле = НастройкаОтборовНаУзле.Количество() > 0; ПредусмотреныЗначенияПоУмолчаниюНаУзле = ЗначенияПоУмолчаниюНаУзле.Количество() > 0; @@ -73,6 +77,7 @@ Элементы.РамкаГруппыЗначенийПоУмолчанию.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзле; Элементы.РамкаГруппыЗначенийПоУмолчанию1.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзле; Элементы.РамкаГруппыЗначенийПоУмолчанию2.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзле; + Элементы.РамкаГруппыЗначенийПоУмолчанию6.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзле; Элементы.ИсправитьОшибкиУстановкиВнешнегоСоединения.Видимость = Ложь; ОписаниеОграниченийПередачиДанных = МенеджерПланаОбмена.ОписаниеОграниченийПередачиДанных(НастройкаОтборовНаУзле); @@ -88,8 +93,10 @@ ИспользоватьТранспортСообщенийОбменаFILE = (ИспользуемыеТранспортыСообщенийОбмена.Найти(Перечисления.ВидыТранспортаСообщенийОбмена.FILE) <> Неопределено); ИспользоватьТранспортСообщенийОбменаFTP = (ИспользуемыеТранспортыСообщенийОбмена.Найти(Перечисления.ВидыТранспортаСообщенийОбмена.FTP) <> Неопределено); ИспользоватьТранспортСообщенийОбменаCOM = (ИспользуемыеТранспортыСообщенийОбмена.Найти(Перечисления.ВидыТранспортаСообщенийОбмена.COM) <> Неопределено); + ИспользоватьТранспортСообщенийОбменаWS = (ИспользуемыеТранспортыСообщенийОбмена.Найти(Перечисления.ВидыТранспортаСообщенийОбмена.WS) <> Неопределено); - Если ИспользоватьТранспортСообщенийОбменаCOM Тогда + Если ИспользоватьТранспортСообщенийОбменаCOM + ИЛИ ИспользоватьТранспортСообщенийОбменаWS Тогда НастройкаОтборовНаУзлеБазыКорреспондента = ОбменДаннымиСервер.ЗначениеПоТипу(МенеджерПланаОбмена.НастройкаОтборовНаУзлеБазыКорреспондента(), "Структура"); ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента = ОбменДаннымиСервер.ЗначениеПоТипу(МенеджерПланаОбмена.ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(), "Структура"); @@ -100,22 +107,40 @@ Элементы.РамкаГруппыОграничений4.Видимость = ПредусмотреныНастройкиОтборовНаУзлеБазыКорреспондента; Элементы.РамкаГруппыЗначенийПоУмолчанию4.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента; + Элементы.РамкаГруппыЗначенийПоУмолчаниюБазыКорреспондента.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента; + ОписаниеОграниченийПередачиДанныхБазыКорреспондента = МенеджерПланаОбмена.ОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзлеБазыКорреспондента); ОписаниеЗначенийПоУмолчаниюБазыКорреспондента = МенеджерПланаОбмена.ОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); + НастройкиПараметровУчетаКорреспондентаПоясняющаяНадпись = МенеджерПланаОбмена.ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента(); + КонецЕсли; // получаем другие настройки Объект.ПрефиксИнформационнойБазыИсточника = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); Объект.ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(Объект.ПрефиксИнформационнойБазыИсточника); - Если Не Объект.ПрефиксИнформационнойБазыИсточникаУстановлен Тогда + Если Не Объект.ПрефиксИнформационнойБазыИсточникаУстановлен + И Не НастройкаОбменаССервисом Тогда + Объект.ПрефиксИнформационнойБазыИсточника = ОбменДаннымиПереопределяемый.ПрефиксИнформационнойБазыПоУмолчанию(); КонецЕсли; ВариантРаботыМастера = "НастроитьНовыйОбменДанными"; - РежимРаботыМастера = ?(ИспользоватьТранспортСообщенийОбменаCOM, "ОбменЧерезВнешнееСоединение", "ОбменЧерезОбычныеКаналыСвязи"); + Если НастройкаОбменаССервисом Тогда + + РежимРаботыМастера = "ОбменЧерезВебСервис"; + + ИначеЕсли ИспользоватьТранспортСообщенийОбменаCOM Тогда + + РежимРаботыМастера = "ОбменЧерезВнешнееСоединение"; + + Иначе + + РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи"; + + КонецЕсли; МетаданныеПланаОбмена = Метаданные.ПланыОбмена[Объект.ИмяПланаОбмена]; @@ -213,9 +238,7 @@ Если Не ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда - ЭтоПодчиненныйУзелРИБ = ПланыОбмена.ГлавныйУзел() <> Неопределено; - - Если ЭтоПодчиненныйУзелРИБ Тогда + Если ОбменДаннымиСервер.ЭтоПодчиненныйУзелРИБ() Тогда ИмяПланаОбменаРИБ = ПланыОбмена.ГлавныйУзел().Метаданные().Имя; @@ -250,21 +273,24 @@ РежимРаботыМастераПриИзмененииНаСервере(); + СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(); + СобытиеЖурналаРегистрацииСозданиеОбменаДанными = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(); + + ДлительнаяОперация = Ложь; + ПредопределенноеРасписаниеОбменаДанными = "КаждыйЧас"; + РасписаниеВыполненияОбменаДанными = ПредопределенноеРасписаниеКаждыйЧас(); + ПредставлениеПользовательскогоОписания = Строка(РасписаниеВыполненияОбменаДанными); + + ВключитьРегистрациюВсехСобытийВЖурналеРегистрации = Не ОбщегоНазначения.ПроверитьВключениеЖурналаРегистрации("Ошибка"); + Элементы.ГруппаВключитьРегистрациюВсехСобытийВЖурналеРегистрации.Видимость = ВключитьРегистрациюВсехСобытийВЖурналеРегистрации; + Элементы.ГруппаВключитьРегистрациюВсехСобытийВЖурналеРегистрации1.Видимость = ВключитьРегистрациюВсехСобытийВЖурналеРегистрации; + Элементы.ГруппаВключитьРегистрациюВсехСобытийВЖурналеРегистрации2.Видимость = ВключитьРегистрациюВсехСобытийВЖурналеРегистрации; + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - // проверка для работы мастера в Веб-клиенте - Если Не ПодключитьРасширениеРаботыСФайлами() Тогда - - НСтрока = НСтр("ru = 'Для работы помощника необходимо установить расширение работы с файлами.'"); - - Предупреждение(НСтрока); - Отказ = Истина; - Возврат; - КонецЕсли; - ЗакрытьФормуБезусловно = Ложь; АутентификацияОперационнойСистемыПриИзменении(); @@ -278,6 +304,14 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + Если ДлительнаяОперация Тогда + Предупреждение(НСтр("ru = 'Выполняется создание обмена данными. + |Работа помощника не может быть завершена.'") + ); + Отказ = Истина; + Возврат; + КонецЕсли; + Если ЗакрытьФормуБезусловно = Истина Тогда Возврат; КонецЕсли; @@ -301,21 +335,205 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "ЗакрытиеФормыСопоставленияОбъектов" Тогда + + Отказ = Ложь; + + Состояние(НСтр("ru = 'Выполняется сбор информации сопоставления...'")); + + ОбновитьДанныеСтатистикиСопоставленияНаСервере(Отказ, Параметр); + + Если Отказ Тогда + Предупреждение(НСтр("ru = 'При получении информации статистики возникли ошибки.'")); + Иначе + + РазвернутьДеревоИнформацииСтатистики(Параметр.КлючУникальности); + + Состояние(НСтр("ru = 'Сбор информации завершен'")); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ МАСТЕРА +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +//////////////////////////////////////////////////////////////////////////////// +// Страница СтраницаМастераНачало + +&НаКлиенте +Процедура ИмяФайлаНастроекОбменаДаннымиДляЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ВыбратьФайлНастроекОбмена(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаНастроекОбменаДаннымиДляЗагрузкиПриИзменении(Элемент) + + Файл = Новый Файл(Объект.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки); + + Если Не Файл.Существует() + ИЛИ Не Файл.ЭтоФайл() Тогда + + Предупреждение(НСтр("ru = 'Укажите корректное имя файла настроек.'")); + Объект.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки = ""; + Возврат; + КонецЕсли; + + ВыбратьФайлНастроекОбмена(Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура КартинкаПервойИнформационнойБазы1Нажатие(Элемент) + + ВариантРаботыМастера = "НастроитьНовыйОбменДанными"; + + ВариантРаботыМастераПриИзмененииНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура КартинкаВторойИнформационнойБазы1Нажатие(Элемент) + + ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; + + ВариантРаботыМастераПриИзмененииНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВариантРаботыМастераПриИзменении(Элемент) + + ВариантРаботыМастераПриИзмененииНаСервере(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено + +&НаКлиенте +Процедура ПредопределенноеРасписаниеОбменаДаннымиПриИзменении(Элемент) + + ПредопределенноеРасписаниеОбменаДаннымиПриИзмененииЗначения(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнятьОбменДаннымиАвтоматическиПриИзменении(Элемент) + + ВыполнятьОбменДаннымиАвтоматическиПриИзмененииЗначения(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница СтраницаМастераВыборРежимаРаботыПомощника + +&НаКлиенте +Процедура РежимРаботыМастераПриИзменении(Элемент) + + РежимРаботыМастераПриИзмененииНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура COMКаталогИнформационнойБазыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Объект, "COMКаталогИнформационнойБазы", СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура COMКаталогИнформационнойБазыОткрытие(Элемент, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Объект, "COMКаталогИнформационнойБазы", СтандартнаяОбработка) + +КонецПроцедуры + +&НаКлиенте +Процедура COMАутентификацияОперационнойСистемыПриИзменении(Элемент) + + АутентификацияОперационнойСистемыПриИзменении(); + +КонецПроцедуры + +&НаКлиенте +Процедура COMВариантРаботыИнформационнойБазыПриИзменении(Элемент) + + ВариантРаботыИнформационнойБазыПриИзменении(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница СтраницаМастераЗаданиеПараметровТранспортаFILE + +&НаКлиенте +Процедура FILEКаталогОбменаИнформациейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Объект, "FILEКаталогОбменаИнформацией", СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура FILEКаталогОбменаИнформациейОткрытие(Элемент, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Объект, "FILEКаталогОбменаИнформацией", СтандартнаяОбработка) + +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьПараметрыТранспортаFILEПриИзменении(Элемент) + + Элементы.НастройкиТранспортаFILE.Доступность = Объект.ИспользоватьПараметрыТранспортаFILE; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница СтраницаМастераЗаданиеПараметровТранспортаFTP + +&НаКлиенте +Процедура ИспользоватьПараметрыТранспортаFTPПриИзменении(Элемент) + + Элементы.НастройкиТранспортаFTP.Доступность = Объект.ИспользоватьПараметрыТранспортаFTP; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Страница СтраницаМастераЗаданиеПараметровТранспортаEMAIL + +&НаКлиенте +Процедура ИспользоватьПараметрыТранспортаEMAILПриИзменении(Элемент) + + Элементы.НастройкиТранспортаEMAIL.Доступность = Объект.ИспользоватьПараметрыТранспортаEMAIL; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоИнформацииСтатистики + +&НаКлиенте +Процедура ДеревоИнформацииСтатистикиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ОткрытьФормуСопоставления(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +//////////////////////////////////////////////////////////////////////////////// +// Поставляемая часть &НаКлиенте Процедура КомандаДалее(Команда) ИзменитьПорядковыйНомерПерехода(+1); - Если Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными - ИЛИ Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения Тогда - - ПодключитьОбработчикОжидания("ОбработчикОжиданияКомандаДалее", 0.1, Истина); - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -326,100 +544,56 @@ КонецПроцедуры &НаКлиенте -Процедура КомандаГотовоПервыйЭтап(Команда) +Процедура КомандаГотово(Команда) - Отказ = Ложь; - - ОчиститьСообщения(); - - Если Не Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы - И ПустаяСтрока(Объект.ИмяФайлаНастроекОбменаДанными) Тогда + // Включаем журнал регистрации при необходимости + Если ВключитьРегистрациюВсехСобытийВЖурналеРегистрации Тогда - НСтрока = НСтр("ru = 'Сохраните файл с настройками для информационной базы-приемника'"); + Предупреждение = ""; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,"Объект.ИмяФайлаНастроекОбменаДанными",, Отказ); - Возврат; - КонецЕсли; - - Если Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда + ВключитьИспользованиеЖурналаРегистрации(СобытиеЖурналаРегистрацииСозданиеОбменаДанными, Предупреждение); - Если ВыполнитьСозданиеНачальногоОбразаСейчас Тогда + Если Не ПустаяСтрока(Предупреждение) Тогда - ПараметрыФормы = Новый Структура("Ключ, Узел", Объект.УзелИнформационнойБазы, Объект.УзелИнформационнойБазы); - - ОткрытьФормуМодально(ИмяФормыСозданияНачальногоОбраза, ПараметрыФормы); - - КонецЕсли; - - Иначе - - Если ВыполнитьОбменДаннымиСейчас Тогда - - ИнициализацияОбменаДаннымиНаКлиенте(Отказ); + Предупреждение(Предупреждение); КонецЕсли; КонецЕсли; - ЗакрытьФормуБезусловно = Истина; - Закрыть(); - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаГотовоПервыйЭтапВнешнееСоединение(Команда) - - Если ВыполнитьИнтерактивныйОбменДаннымиСейчас Тогда - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); - ПараметрыФормы.Вставить("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); - ПараметрыФормы.Вставить("ВыполнитьСопоставлениеПриОткрытии", Ложь); - - ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы); - - КонецЕсли; - - ЗакрытьФормуБезусловно = Истина; - Закрыть(); - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаГотовоВторойЭтап(Команда) - Отказ = Ложь; - Состояние(НСтр("ru = 'Выполняется создание настройки обмена данными'")); - - НастроитьНовыйОбменДаннымиНаСервере(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле); + Если РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" Тогда + + ЗавершениеНастройкиОбменаЧерезВнешнееСоединение(); + + ИначеЕсли РежимРаботыМастера = "ОбменЧерезВебСервис" Тогда + + ЗавершениеНастройкиОбменаЧерезВебСервис(); + + ИначеЕсли РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи" Тогда + + Если ВариантРаботыМастера = "НастроитьНовыйОбменДанными" Тогда + + ЗавершениеПервогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ); + + ИначеЕсли ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда + + ЗавершениеВторогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ); + + КонецЕсли; + + КонецЕсли; Если Отказ Тогда - - Предупреждение(НСтр("ru = 'При создании настройки обмена данными возникли ошибки.'")); - Возврат; - КонецЕсли; - // закрываем форму; открываем помщник сопоставления с заданной настройкой обмена + ОбменДаннымиКлиентПереопределяемый.ПриЗавершенииРаботыПомощникаСозданияОбмена(ЭтаФорма, ЗапуститьМенеджерЗаданий()); + ЗакрытьФормуБезусловно = Истина; - Закрыть(); - ОткрытьПомощникСопоставления = Не Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы И Не Объект.ЭтоНастройкаСтандартногоОбмена; - - Если ОткрытьПомощникСопоставления Тогда - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); - ПараметрыФормы.Вставить("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); - ПараметрыФормы.Вставить("ВыполнитьСопоставлениеПриОткрытии", Ложь); - - ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы); - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -436,241 +610,40 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбработчикОжиданияКомандаДалее() - - КомандаДалее(Неопределено); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// ВНУТРЕННИЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Переопределяемая часть &НаКлиенте -Процедура ИзменитьПорядковыйНомерПерехода(Итератор) +Процедура ВыполнитьСопоставлениеДанных(Команда) - ОчиститьСообщения(); - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + Итератор); + ОткрытьФормуСопоставления(); КонецПроцедуры &НаКлиенте -Процедура УстановитьПорядковыйНомерПерехода(Знач Значение) +Процедура ВыполнитьНастройкуВыгрузкиДанных(Команда) - ЭтоПереходДалее = (Значение > ПорядковыйНомерПерехода); + ТипСоединения = "ВебСервис"; - ПорядковыйНомерПерехода = Значение; + ИмяФормыНастройкиУзла = "ПланОбмена.[ИмяПланаОбмена].Форма.ФормаНастройкиУзлов"; + ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); - Если ПорядковыйНомерПерехода < 0 Тогда - - ПорядковыйНомерПерехода = 0; - - КонецЕсли; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПараметрыПодключения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); + ПараметрыФормы.Вставить("Настройки", КонтекстФормыНастройкиУзлов); - ПорядковыйНомерПереходаПриИзменении(ЭтоПереходДалее); + РезультатОткрытия = ОткрытьФормуМодально(ИмяФормыНастройкиУзла, ПараметрыФормы, ЭтаФорма); -КонецПроцедуры - -&НаКлиенте -Процедура ПорядковыйНомерПереходаПриИзменении(Знач ЭтоПереходДалее) - - // Обработчики событий переходов - Если ЭтоПереходДалее Тогда + Если РезультатОткрытия <> Неопределено Тогда - СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - 1)); + КонтекстФормыНастройкиУзлов = РезультатОткрытия; - Если СтрокиПерехода.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - СтрокаПерехода = СтрокиПерехода[0]; - - // обработчик ПриПереходеДалее - Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) Тогда - - ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; - ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); - - Отказ = Ложь; - - А = Вычислить(ИмяПроцедуры); - - Если Отказ Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); - - Возврат; - - КонецЕсли; - - КонецЕсли; - - Иначе - - СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода + 1)); - - Если СтрокиПерехода.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - СтрокаПерехода = СтрокиПерехода[0]; - - // обработчик ПриПереходеНазад - Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад) Тогда - - ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; - ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад); - - Отказ = Ложь; - - А = Вычислить(ИмяПроцедуры); - - Если Отказ Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); - - Возврат; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); - - Если СтрокиПереходаТекущие.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; - - // обработчик ПриОткрытии - Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии) Тогда - - ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПропуститьСтраницу, ЭтоПереходДалее)"; - ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии); - - Отказ = Ложь; - ПропуститьСтраницу = Ложь; - - А = Вычислить(ИмяПроцедуры); - - Если Отказ Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); - - Возврат; - - ИначеЕсли ПропуститьСтраницу Тогда - - Если ЭтоПереходДалее Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); - - Возврат; - - Иначе - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); - - Возврат; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - // Установка отображения текущей страницы - Элементы.ПанельОсновная.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяОсновнойСтраницы]; - Элементы.ПанельНавигации.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяСтраницыНавигации]; - - // Устанавливаем текущую кнопку по умолчанию - КнопкаДалее = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаДалее"); - - Если КнопкаДалее <> Неопределено Тогда - - КнопкаДалее.КнопкаПоУмолчанию = Истина; - - Иначе - - КнопкаГотово = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаГотово"); - - Если КнопкаГотово <> Неопределено Тогда - - КнопкаГотово.КнопкаПоУмолчанию = Истина; - - КонецЕсли; + ОписаниеНастроекВыгрузкиДанных = РезультатОткрытия.ОписаниеКонтекста; КонецЕсли; КонецПроцедуры -&НаСервере -Процедура ТаблицаПереходовНоваяСтрока(ПорядковыйНомерПерехода, - ИмяОсновнойСтраницы, - ИмяСтраницыДекорации, - ИмяСтраницыНавигации, - ИмяОбработчикаПриПереходеДалее = "", - ИмяОбработчикаПриПереходеНазад = "", - ИмяОбработчикаПриОткрытии = "" - ) - // - НоваяСтрока = ТаблицаПереходов.Добавить(); - - НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; - НоваяСтрока.ИмяОсновнойСтраницы = ИмяОсновнойСтраницы; - НоваяСтрока.ИмяСтраницыДекорации = ИмяСтраницыДекорации; - НоваяСтрока.ИмяСтраницыНавигации = ИмяСтраницыНавигации; - - НоваяСтрока.ИмяОбработчикаПриПереходеДалее = ИмяОбработчикаПриПереходеДалее; - НоваяСтрока.ИмяОбработчикаПриПереходеНазад = ИмяОбработчикаПриПереходеНазад; - НоваяСтрока.ИмяОбработчикаПриОткрытии = ИмяОбработчикаПриОткрытии; - -КонецПроцедуры - -&НаКлиенте -Функция ПолучитьКнопкуФормыПоИмениКоманды(ЭлементФормы, ИмяКоманды) - - Для Каждого Элемент Из ЭлементФормы.ПодчиненныеЭлементы Цикл - - Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда - - //Возврат ПолучитьКнопкуФормыПоИмениКоманды(Элемент, ИмяКоманды); - ЭлементФормыПоИмениКоманды = ПолучитьКнопкуФормыПоИмениКоманды(Элемент, ИмяКоманды); - - Если ЭлементФормыПоИмениКоманды <> Неопределено Тогда - - Возврат ЭлементФормыПоИмениКоманды; - - КонецЕсли; - - ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") - И Найти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда - - Возврат Элемент; - - Иначе - - Продолжить; - - КонецЕсли; - - КонецЦикла; - - Возврат Неопределено; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ПРИКЛАДНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРИКЛАДНЫЕ ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - &НаКлиенте Процедура НастройкаОграниченийРегистрацииДанных(Команда) @@ -695,29 +668,16 @@ КонецПроцедуры &НаКлиенте -Процедура НастройкаОграниченийРегистрацииДанныхБазыКорреспондента(Команда) +Процедура НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЧерезВебСервис(Команда) - ИмяФормыНастройкиУзла = "ПланОбмена.[ИмяПланаОбмена].Форма.ФормаНастройкиУзлаБазыКорреспондента"; - ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); + НастройкаОграниченийРегистрацииДанныхБазыКорреспондента("ВебСервис"); - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения()); - ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзлеБазыКорреспондента); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкаОграниченийРегистрацииДанныхБазыКорреспондентаЧерезВнешнееСоединение(Команда) - РезультатОткрытия = ОткрытьФормуМодально(ИмяФормыНастройкиУзла, ПараметрыФормы, ЭтаФорма); - - Если РезультатОткрытия <> Неопределено Тогда - - Для Каждого НастройкаОтбора ИЗ НастройкаОтборовНаУзлеБазыКорреспондента Цикл - - НастройкаОтборовНаУзлеБазыКорреспондента[НастройкаОтбора.Ключ] = РезультатОткрытия[НастройкаОтбора.Ключ]; - - КонецЦикла; - - // вызов сервера - ПолучитьОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзлеБазыКорреспондента); - - КонецЕсли; + НастройкаОграниченийРегистрацииДанныхБазыКорреспондента("ВнешнееСоединение"); КонецПроцедуры @@ -748,53 +708,16 @@ КонецПроцедуры &НаКлиенте -Процедура НастройкаЗначенийПоУмолчаниюБазыКорреспондента(Команда) +Процедура НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервис(Команда) - ИмяФормыНастройкиУзла = "ПланОбмена.[ИмяПланаОбмена].Форма.ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента"; - ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения()); - ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); - - РезультатОткрытия = ОткрытьФормуМодально(ИмяФормыНастройкиУзла, ПараметрыФормы, ЭтаФорма); - - Если РезультатОткрытия <> Неопределено Тогда - - Для Каждого НастройкаОтбора ИЗ ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента Цикл - - ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента[НастройкаОтбора.Ключ] = РезультатОткрытия[НастройкаОтбора.Ключ]; - - КонецЦикла; - - // вызов сервера - ПолучитьОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); - - КонецЕсли; + НастройкаЗначенийПоУмолчаниюБазыКорреспондента("ВебСервис"); КонецПроцедуры &НаКлиенте -Процедура ИмяФайлаНастроекОбменаДаннымиДляЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) +Процедура НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВнешнееСоединение(Команда) - ВыбратьФайлНастроекОбмена(Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура ИмяФайлаНастроекОбменаДаннымиДляЗагрузкиПриИзменении(Элемент) - - Файл = Новый Файл(Объект.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки); - - Если Не Файл.Существует() - ИЛИ Не Файл.ЭтоФайл() Тогда - - Предупреждение(НСтр("ru = 'Укажите корректное имя файла настроек.'")); - Объект.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки = ""; - Возврат; - КонецЕсли; - - ВыбратьФайлНастроекОбмена(Ложь); + НастройкаЗначенийПоУмолчаниюБазыКорреспондента("ВнешнееСоединение"); КонецПроцедуры @@ -848,48 +771,6 @@ КонецПроцедуры -&НаКлиенте -Процедура FILEКаталогОбменаИнформациейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Объект, "FILEКаталогОбменаИнформацией", СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура FILEКаталогОбменаИнформациейОткрытие(Элемент, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Объект, "FILEКаталогОбменаИнформацией", СтандартнаяОбработка) - -КонецПроцедуры - -&НаКлиенте -Процедура COMКаталогИнформационнойБазыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Объект, "COMКаталогИнформационнойБазы", СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура COMКаталогИнформационнойБазыОткрытие(Элемент, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Объект, "COMКаталогИнформационнойБазы", СтандартнаяОбработка) - -КонецПроцедуры - -&НаКлиенте -Процедура COMАутентификацияОперационнойСистемыПриИзменении(Элемент) - - АутентификацияОперационнойСистемыПриИзменении(); - -КонецПроцедуры - -&НаКлиенте -Процедура COMВариантРаботыИнформационнойБазыПриИзменении(Элемент) - - ВариантРаботыИнформационнойБазыПриИзменении(); - -КонецПроцедуры - &НаКлиенте Процедура ПроверитьПодключениеFILE(Команда) @@ -948,6 +829,21 @@ КонецПроцедуры +&НаКлиенте +Процедура ПроверитьПодключениеWS(Команда) + + Отказ = Ложь; + + ПроверитьПодключениеWSНаКлиенте(Отказ); + + Если Не Отказ Тогда + + Предупреждение(НСтр("ru = 'Подключение успешно установлено.'")); + + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ИсправитьОшибкиУстановкиВнешнегоСоединения(Команда) @@ -957,73 +853,24 @@ КонецПроцедуры &НаКлиенте -Процедура ИспользоватьПараметрыТранспортаFILEПриИзменении(Элемент) +Процедура КакОпределитьПараметрыПодключенияКВебСервису(Команда) - Элементы.НастройкиТранспортаFILE.Доступность = Объект.ИспользоватьПараметрыТранспортаFILE; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ИмяМакета", "КакОпределитьПараметрыПодключенияКВебСервису"); + ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Как определить параметры подключения ко второй информационной базе'")); + + ОткрытьФормуМодально("Обработка.ПомощникСозданияОбменаДанными.Форма.ДополнительноеОписание", ПараметрыФормы, ЭтаФорма); КонецПроцедуры &НаКлиенте -Процедура ИспользоватьПараметрыТранспортаFTPПриИзменении(Элемент) +Процедура КакОпределитьПараметрыПодключенияКСервису(Команда) - Элементы.НастройкиТранспортаFTP.Доступность = Объект.ИспользоватьПараметрыТранспортаFTP; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ИмяМакета", "КакОпределитьПараметрыПодключенияКСервису"); + ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Как определить параметры подключения к приложению, расположенному в сервисе'")); -КонецПроцедуры - -&НаКлиенте -Процедура ИспользоватьПараметрыТранспортаEMAILПриИзменении(Элемент) - - Элементы.НастройкиТранспортаEMAIL.Доступность = Объект.ИспользоватьПараметрыТранспортаEMAIL; - -КонецПроцедуры - -&НаКлиенте -Процедура КартинкаПервойИнформационнойБазы1Нажатие(Элемент) - - ВариантРаботыМастера = "НастроитьНовыйОбменДанными"; - - ВариантРаботыМастераПриИзменении(Неопределено); - -КонецПроцедуры - -&НаКлиенте -Процедура КартинкаВторойИнформационнойБазы1Нажатие(Элемент) - - ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; - - ВариантРаботыМастераПриИзменении(Неопределено); - -КонецПроцедуры - -&НаКлиенте -Процедура КартинкаВнешнееСоединениеДоступноНеактивнаяНажатие(Элемент) - - РежимРаботыМастера = "ОбменЧерезВнешнееСоединение"; - - РежимРаботыМастераПриИзмененииНаСервере(); - -КонецПроцедуры - -&НаКлиенте -Процедура КартинкаВнешнееСоединениеНедоступноНеактивнаяНажатие(Элемент) - - РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи"; - - РежимРаботыМастераПриИзмененииНаСервере(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВариантРаботыМастераПриИзменении(Элемент) - - ВариантРаботыМастераПриИзмененииНаСервере(); - -КонецПроцедуры - -&НаКлиенте -Процедура РежимРаботыМастераПриИзменении(Элемент) - - РежимРаботыМастераПриИзмененииНаСервере(); + ОткрытьФормуМодально("Обработка.ПомощникСозданияОбменаДанными.Форма.ДополнительноеОписание", ПараметрыФормы, ЭтаФорма); КонецПроцедуры @@ -1068,14 +915,396 @@ КонецПроцедуры &НаКлиенте -Процедура ЗапуститьПриложение1СПредприятиеИВыполнитьИнтерактивнуюЗагрузкуДанных(Команда) +Процедура ВыполнитьЗагрузкуДанныхВоВторойИнформационнойБазе(Команда) ОбменДаннымиКлиент.ЗапуститьПриложение1СПредприятиеИВыполнитьИнтерактивнуюЗагрузкуДанных(СтруктураПараметровПодключенияВнешнегоСоединения(), Объект.ИмяПланаОбмена); КонецПроцедуры -////////////////////////////////////////////////////////// -// ПРИКЛАДНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаКлиенте +Процедура ИзменитьПользовательскоеРасписание(Команда) + + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(РасписаниеВыполненияОбменаДанными); + + Если Диалог.ОткрытьМодально() Тогда + + РасписаниеВыполненияОбменаДанными = Диалог.Расписание; + + ПредставлениеПользовательскогоОписания = Строка(РасписаниеВыполненияОбменаДанными); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ПредопределенноеРасписаниеОбменаДаннымиПриИзмененииЗначения() + + ИспользоватьПользовательскоеРасписание = (ПредопределенноеРасписаниеОбменаДанными = "ДругоеРасписание"); + + Элементы.СтраницыПользовательскогоРасписания.ТекущаяСтраница = ?(ИспользоватьПользовательскоеРасписание, + Элементы.СтраницаПользовательскогоРасписания, + Элементы.ПустаяСтраницаПользовательскогоРасписания + ); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнятьОбменДаннымиАвтоматическиПриИзмененииЗначения() + + Элементы.СтраницыПредопределенногоРасписания.ТекущаяСтраница = ?(ВыполнятьОбменДаннымиАвтоматически, + Элементы.СтраницаПредопределенногоРасписания, + Элементы.НедоступнаяСтраницаПредопределенногоРасписания + ); + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьПорядковыйНомерПерехода(Итератор) + + ОчиститьСообщения(); + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + Итератор); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПорядковыйНомерПерехода(Знач Значение) + + ЭтоПереходДалее = (Значение > ПорядковыйНомерПерехода); + + ПорядковыйНомерПерехода = Значение; + + Если ПорядковыйНомерПерехода < 1 Тогда + + ПорядковыйНомерПерехода = 1; + + КонецЕсли; + + ПорядковыйНомерПереходаПриИзменении(ЭтоПереходДалее); + +КонецПроцедуры + +&НаКлиенте +Процедура ПорядковыйНомерПереходаПриИзменении(Знач ЭтоПереходДалее) + + // Выполняем обработчики событий перехода + ВыполнитьОбработчикиСобытийПерехода(ЭтоПереходДалее); + + // Устанавливаем отображение страниц + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + Элементы.ПанельОсновная.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяОсновнойСтраницы]; + Элементы.ПанельНавигации.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяСтраницыНавигации]; + + // Устанавливаем текущую кнопку по умолчанию + КнопкаДалее = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаДалее"); + + Если КнопкаДалее <> Неопределено Тогда + + КнопкаДалее.КнопкаПоУмолчанию = Истина; + + Иначе + + КнопкаГотово = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаГотово"); + + Если КнопкаГотово <> Неопределено Тогда + + КнопкаГотово.КнопкаПоУмолчанию = Истина; + + КонецЕсли; + + КонецЕсли; + + Если ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация Тогда + + ПодключитьОбработчикОжидания("ВыполнитьОбработчикДлительнойОперации", 0.1, Истина); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбработчикиСобытийПерехода(Знач ЭтоПереходДалее) + + // Обработчики событий переходов + Если ЭтоПереходДалее Тогда + + СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - 1)); + + Если СтрокиПерехода.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СтрокаПерехода = СтрокиПерехода[0]; + + // обработчик ПриПереходеДалее + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) + И Не СтрокаПерехода.ДлительнаяОперация Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); + + Отказ = Ложь; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + + Иначе + + СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода + 1)); + + Если СтрокиПерехода.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СтрокаПерехода = СтрокиПерехода[0]; + + // обработчик ПриПереходеНазад + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад) + И Не СтрокаПерехода.ДлительнаяОперация Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад); + + Отказ = Ложь; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + Если СтрокаПереходаТекущая.ДлительнаяОперация И Не ЭтоПереходДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + Возврат; + КонецЕсли; + + // обработчик ПриОткрытии + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии) Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПропуститьСтраницу, ЭтоПереходДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии); + + Отказ = Ложь; + ПропуститьСтраницу = Ложь; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + ИначеЕсли ПропуститьСтраницу Тогда + + Если ЭтоПереходДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + Иначе + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбработчикДлительнойОперации() + + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + // обработчик ОбработкаДлительнойОперации + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации) Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПерейтиДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации); + + Отказ = Ложь; + ПерейтиДалее = Истина; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + ИначеЕсли ПерейтиДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + + Иначе + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ТаблицаПереходовНоваяСтрока(ПорядковыйНомерПерехода, + ИмяОсновнойСтраницы, + ИмяСтраницыДекорации, + ИмяСтраницыНавигации, + ИмяОбработчикаПриПереходеДалее = "", + ИмяОбработчикаПриПереходеНазад = "", + ИмяОбработчикаПриОткрытии = "", + ДлительнаяОперация = Ложь, + ИмяОбработчикаДлительнойОперации = "" + ) + НоваяСтрока = ТаблицаПереходов.Добавить(); + + НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; + НоваяСтрока.ИмяОсновнойСтраницы = ИмяОсновнойСтраницы; + НоваяСтрока.ИмяСтраницыДекорации = ИмяСтраницыДекорации; + НоваяСтрока.ИмяСтраницыНавигации = ИмяСтраницыНавигации; + + НоваяСтрока.ИмяОбработчикаПриПереходеДалее = ИмяОбработчикаПриПереходеДалее; + НоваяСтрока.ИмяОбработчикаПриПереходеНазад = ИмяОбработчикаПриПереходеНазад; + НоваяСтрока.ИмяОбработчикаПриОткрытии = ИмяОбработчикаПриОткрытии; + + НоваяСтрока.ДлительнаяОперация = ДлительнаяОперация; + НоваяСтрока.ИмяОбработчикаДлительнойОперации = ИмяОбработчикаДлительнойОперации; + +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьКнопкуФормыПоИмениКоманды(ЭлементФормы, ИмяКоманды) + + Для Каждого Элемент Из ЭлементФормы.ПодчиненныеЭлементы Цикл + + Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда + + //Возврат ПолучитьКнопкуФормыПоИмениКоманды(Элемент, ИмяКоманды); + ЭлементФормыПоИмениКоманды = ПолучитьКнопкуФормыПоИмениКоманды(Элемент, ИмяКоманды); + + Если ЭлементФормыПоИмениКоманды <> Неопределено Тогда + + Возврат ЭлементФормыПоИмениКоманды; + + КонецЕсли; + + ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") + И Найти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда + + Возврат Элемент; + + Иначе + + Продолжить; + + КонецЕсли; + + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики ожидания + +&НаКлиенте +Процедура ОбработчикОжиданияДлительнойОперации() + + СтрокаСообщенияОбОшибке = ""; + + СостояниеОперации = ОбменДаннымиСервер.СостояниеДлительнойОперации(ИдентификаторДлительнойОперации, + Объект.WSURLВебСервиса, + Объект.WSИмяПользователя, + Объект.WSПароль, + СтрокаСообщенияОбОшибке + ); + + Если СостояниеОперации = "Active" Тогда + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + + ИначеЕсли СостояниеОперации = "Completed" Тогда + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Истина; + + КомандаДалее(Неопределено); + + Иначе // Failed, Canceled + + ЗаписатьОшибкуВЖурналРегистрации(СтрокаСообщенияОбОшибке, СобытиеЖурналаРегистрацииСозданиеОбменаДанными); + + ДлительнаяОперация = Ложь; + + КомандаНазад(Неопределено); + + ТекстВопроса = НСтр("ru = 'При создании обмена данными возникли ошибки. + |Перейти в журнал регистрации?'" + ); + + ПредложитьПерейтиВЖурналРегистрации(ТекстВопроса, СобытиеЖурналаРегистрацииСозданиеОбменаДанными); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Прикладные служебные процедуры и функции &НаСервере Процедура НастроитьНовыйОбменДаннымиНаСервере(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле) @@ -1103,6 +1332,39 @@ КонецПроцедуры +&НаСервере +Процедура НастроитьНовыйОбменДаннымиНаСервереЧерезВебСервис(Отказ) + + Объект.ВариантРаботыМастера = ВариантРаботыМастера; + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + ОбработкаОбъект.ВыполнитьДействияПоНастройкеНовогоОбменаДаннымиЧерезВебСервисВДвухБазах(Отказ, + КонтекстФормыНастройкиУзлов, + ДлительнаяОперация, + ИдентификаторДлительнойОперации + ); + + ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьНастройкиОбменаДанными(Отказ) + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + ОбработкаОбъект.ОбновитьНастройкиОбменаДанными(Отказ, + ЗначенияПоУмолчаниюНаУзле, + ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, + ДлительнаяОперация, + ИдентификаторДлительнойОперации + ); + + ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); + +КонецПроцедуры + &НаСервере Процедура УстановитьВидимостьНаСервере() @@ -1112,6 +1374,12 @@ Элементы.ПрефиксИнформационнойБазыИсточника1.Видимость = Не Объект.ПрефиксИнформационнойБазыИсточникаУстановлен; Элементы.ПрефиксИнформационнойБазыПриемника.Видимость = Ложь; + Элементы.ПрефиксИнформационнойБазыИсточникаОбменЧерезВебСервис.Видимость = Не Объект.ПрефиксИнформационнойБазыИсточникаУстановлен; + Элементы.ПрефиксИнформационнойБазыИсточникаОбменЧерезВебСервис.ТолькоПросмотр = Объект.ПрефиксИнформационнойБазыИсточникаУстановлен; + + Элементы.ПрефиксИнформационнойБазыИсточникаОбменССервисом.ТолькоПросмотр = Объект.ПрефиксИнформационнойБазыИсточникаУстановлен; + Элементы.ПрефиксИнформационнойБазыПриемникаОбменССервисом.ТолькоПросмотр = Истина; + Элементы.СтраницыОтображенияФинальногоДействия.ТекущаяСтраница = ?(Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы, Элементы.СтраницаВыполнитьСозданиеНачальногоОбразаПодчиненногоУзла, Элементы.СтраницаВыполнитьВыгрузкуДанныхДляСопоставления); @@ -1138,12 +1406,21 @@ &НаКлиенте Функция ПредставлениеРезультатаТранспортСообщений() - Результат = Строка(Объект.ВидТранспортаСообщенийОбмена) - + НСтр("ru = ', параметры:'") + Символы.ПС - + ПолучитьОписаниеНастроекТранспортаОбмена(); - // - Возврат Результат + Символы.ПС; + Если НастройкаОбменаССервисом Тогда + + Результат = НСтр("ru = 'Параметры подключения к приложению в сервисе: + |%1'"); + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат, ПолучитьОписаниеНастроекТранспортаОбмена()); + + Иначе + + Результат = Строка(Объект.ВидТранспортаСообщенийОбмена) + + НСтр("ru = ', параметры:'") + Символы.ПС + + ПолучитьОписаниеНастроекТранспортаОбмена() + ; + КонецЕсли; + Возврат Результат; КонецФункции &НаКлиенте @@ -1368,6 +1645,140 @@ КонецПроцедуры +&НаСервере +Процедура ПроверитьПодключениеWSНаСервере(Отказ, РасширеннаяПроверка, ПредлагатьПерейтиВЖурналРегистрации) + + ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); + + ЗаполнитьЗначенияСвойств(ПараметрыПодключения, Объект); + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения); + + Если WSПрокси = Неопределено Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + ВерсииКорреспондента = ОбменДаннымиПовтИсп.ВерсииКорреспондента(ПараметрыПодключения); + + Объект.ВерсияКорреспондента_2_0_1_6 = (ВерсииКорреспондента.Найти("2.0.1.6") <> Неопределено); + + Если Объект.ВерсияКорреспондента_2_0_1_6 Тогда + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения); + + Если WSПрокси = Неопределено Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + КонецЕсли; + + Если РасширеннаяПроверка Тогда + + // Получаем параметры второй информационной базы + ПредлагатьПерейтиВЖурналРегистрации = Ложь; + + Если Объект.ВерсияКорреспондента_2_0_1_6 Тогда + ПараметрыПриемника = СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetIBParameters(Объект.ИмяПланаОбмена, "", "")); + Иначе + ПараметрыПриемника = ЗначениеИзСтрокиВнутр(WSПрокси.GetIBParameters(Объект.ИмяПланаОбмена, "", "")); + КонецЕсли; + + Если Не ПараметрыПриемника.ПланОбменаСуществует Тогда + + Сообщение = НСтр("ru = 'Вторая информационная база не предназначена для обмена с текущей информационной базой.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение,,,, Отказ); + Возврат; + + КонецЕсли; + + Объект.КодУзлаКорреспондента = ПараметрыПриемника.КодЭтогоУзла; + + Объект.ПрефиксИнформационнойБазыПриемника = ПараметрыПриемника.ПрефиксИнформационнойБазы; + Объект.ПрефиксИнформационнойБазыПриемникаУстановлен = ЗначениеЗаполнено(Объект.ПрефиксИнформационнойБазыПриемника); + + Если Не Объект.ПрефиксИнформационнойБазыПриемникаУстановлен Тогда + Объект.ПрефиксИнформационнойБазыПриемника = ПараметрыПриемника.ПрефиксИнформационнойБазыПоУмолчанию; + КонецЕсли; + + Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.Видимость = Не Объект.ПрефиксИнформационнойБазыПриемникаУстановлен; + Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.ТолькоПросмотр = Объект.ПрефиксИнформационнойБазыПриемникаУстановлен; + + // Проверка на существование обмена с базой-корреспондентом + ПроверитьНаличиеСуществующегоОбменаДаннымиСВторойБазой(Отказ); + Если Отказ Тогда + Возврат; + КонецЕсли; + + Объект.НаименованиеВторойБазы = ПараметрыПриемника.НаименованиеИнформационнойБазы; + ЗаданоНаименованиеВторойБазы = Не ПустаяСтрока(Объект.НаименованиеВторойБазы); + + Элементы.НаименованиеВторойБазы1.ТолькоПросмотр = ЗаданоНаименованиеВторойБазы; + + Если Не ЗаданоНаименованиеВторойБазы Тогда + + Объект.НаименованиеВторойБазы = ПараметрыПриемника.НаименованиеИнформационнойБазыПоУмолчанию; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключениеWSНаКлиенте(Отказ, РасширеннаяПроверка = Ложь) + + Если ПустаяСтрока(Объект.WSURLВебСервиса) Тогда + + НСтрока = НСтр("ru = 'Укажите адрес приложения в Интернете.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.WSURLВебСервиса",, Отказ); + + ИначеЕсли ПустаяСтрока(Объект.WSИмяПользователя) Тогда + + НСтрока = НСтр("ru = 'Укажите имя пользователя.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.WSИмяПользователя",, Отказ); + + ИначеЕсли ПустаяСтрока(Объект.WSПароль) Тогда + + НСтрока = НСтр("ru = 'Укажите пароль пользователя.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.WSПароль",, Отказ); + + Иначе + + ПредлагатьПерейтиВЖурналРегистрации = Истина; + + ПроверитьПодключениеWSНаСервере(Отказ, РасширеннаяПроверка, ПредлагатьПерейтиВЖурналРегистрации); + + Если Отказ И ПредлагатьПерейтиВЖурналРегистрации Тогда + + ТекстВопроса = НСтр("ru = 'Ошибка установки подключения. + |Перейти в журнал регистрации?'" + ); + + ПредложитьПерейтиВЖурналРегистрации(ТекстВопроса, СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПредложитьПерейтиВЖурналРегистрации(ТекстВопроса, Знач Событие) + + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); + + Если Ответ = КодВозвратаДиалога.Да Тогда + + Отбор = Новый Структура("СобытиеЖурналаРегистрации", Событие); + + ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма", Отбор, ЭтаФорма); + + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ЗаполнитьТаблицуПереходов() @@ -1375,12 +1786,24 @@ Если РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" Тогда - ТаблицаПереходовПервогоЭтапаНастройкиОбменаЧерезВнешнееСоединение(); + ТаблицаПереходовНастройкиОбменаЧерезВнешнееСоединение(); - Иначе // "ОбменЧерезОбычныеКаналыСвязи" + ИначеЕсли РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи" Тогда ТаблицаПереходовПервогоЭтапаНастройкиОбмена(); + ИначеЕсли РежимРаботыМастера = "ОбменЧерезВебСервис" Тогда + + Если НастройкаОбменаССервисом Тогда + + ТаблицаПереходовРасширеннойНастройкиОбменаССервисом(); + + Иначе + + ТаблицаПереходовНастройкиОбменаЧерезВебСервис(); + + КонецЕсли; + КонецЕсли; Иначе // "ПродолжитьНастройкуОбменаДанными" @@ -1410,25 +1833,6 @@ КонецПроцедуры -&НаСервере -Процедура ОтображениеЭлементовКомпозицииКартинокВыбораРежимаРаботыМастера() - - ЭтоОбменЧерезВнешнееСоединение = (РежимРаботыМастера = "ОбменЧерезВнешнееСоединение"); - - Постфикс1 = ?(ЭтоОбменЧерезВнешнееСоединение, "Активная", "Неактивная"); - Постфикс2 = ?(ЭтоОбменЧерезВнешнееСоединение, "Неактивная", "Активная"); - - ИмяСтраницыВнешнееСоединениеДоступно = "СтраницаВнешнееСоединениеДоступно[Постфикс]"; - ИмяСтраницыВнешнееСоединениеДоступно = СтрЗаменить(ИмяСтраницыВнешнееСоединениеДоступно, "[Постфикс]", Постфикс1); - - ИмяСтраницыВнешнееСоединениеНедоступно = "СтраницаВнешнееСоединениеНедоступно[Постфикс]"; - ИмяСтраницыВнешнееСоединениеНедоступно = СтрЗаменить(ИмяСтраницыВнешнееСоединениеНедоступно, "[Постфикс]", Постфикс2); - - Элементы.СтраницыВнешнееСоединениеДоступно.ТекущаяСтраница = Элементы[ИмяСтраницыВнешнееСоединениеДоступно]; - Элементы.СтраницыВнешнееСоединениеНедоступно.ТекущаяСтраница = Элементы[ИмяСтраницыВнешнееСоединениеНедоступно]; - -КонецПроцедуры - &НаКлиенте Процедура ВариантРаботыИнформационнойБазыПриИзменении() @@ -1456,6 +1860,28 @@ Элементы.СтраницаВыбораФайлаСНастройкамиОбменаПустая); // + Если ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда + + РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи"; + + Иначе + + Если НастройкаОбменаССервисом Тогда + + РежимРаботыМастера = "ОбменЧерезВебСервис"; + + ИначеЕсли ИспользоватьТранспортСообщенийОбменаCOM Тогда + + РежимРаботыМастера = "ОбменЧерезВнешнееСоединение"; + + Иначе + + РежимРаботыМастера = "ОбменЧерезОбычныеКаналыСвязи"; + + КонецЕсли; + + КонецЕсли; + ЗаполнитьТаблицуПереходов(); КонецПроцедуры @@ -1463,17 +1889,29 @@ &НаСервере Процедура РежимРаботыМастераПриИзмененииНаСервере() - ОтображениеЭлементовКомпозицииКартинокВыбораРежимаРаботыМастера(); + СтраницыКартинок = Новый Структура; + СтраницыКартинок.Вставить("ОбменЧерезВнешнееСоединение", Элементы.КартинкаДляОбменаЧерезВнешнееСоединение); + СтраницыКартинок.Вставить("ОбменЧерезВебСервис", Элементы.КартинкаДляОбменаЧерезВебСервис); + СтраницыКартинок.Вставить("ОбменЧерезОбычныеКаналыСвязи", Элементы.КартинкаДляОбменаЧерезОбычныеКаналыСвязи); - Элементы.СтраницыПараметровТранспорта.ТекущаяСтраница = ?(РежимРаботыМастера = "ОбменЧерезВнешнееСоединение", - Элементы.СтраницаПараметровТранспортаCOM, - Элементы.СтраницаПараметровТранспорта); - // + Элементы.КартинкиВыбораРежимаРаботыПомощника.ТекущаяСтраница = СтраницыКартинок[РежимРаботыМастера]; + + СтраницыПараметровТранспорта = Новый Структура; + СтраницыПараметровТранспорта.Вставить("ОбменЧерезВнешнееСоединение", Элементы.СтраницаПараметровТранспортаCOM); + СтраницыПараметровТранспорта.Вставить("ОбменЧерезОбычныеКаналыСвязи", Элементы.СтраницаПараметровТранспорта); + СтраницыПараметровТранспорта.Вставить("ОбменЧерезВебСервис", Элементы.СтраницаПараметровТранспортаWS); + + ВидыТранспортаСообщенийОбмена = Новый Структура; + ВидыТранспортаСообщенийОбмена.Вставить("ОбменЧерезВнешнееСоединение", Перечисления.ВидыТранспортаСообщенийОбмена.COM); + ВидыТранспортаСообщенийОбмена.Вставить("ОбменЧерезОбычныеКаналыСвязи", Перечисления.ВидыТранспортаСообщенийОбмена.FILE); + ВидыТранспортаСообщенийОбмена.Вставить("ОбменЧерезВебСервис", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + + Элементы.СтраницыПараметровТранспорта.ТекущаяСтраница = СтраницыПараметровТранспорта[РежимРаботыМастера]; + + Объект.ВидТранспортаСообщенийОбмена = ВидыТранспортаСообщенийОбмена[РежимРаботыМастера]; ЗаполнитьТаблицуПереходов(); - Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM; - КонецПроцедуры &НаКлиенте @@ -1507,26 +1945,44 @@ КонецПроцедуры &НаКлиенте -Функция СтруктураПараметровПодключенияВнешнегоСоединения() +Функция СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения = "ВнешнееСоединение") - Результат = ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения(); + Результат = Неопределено; - Результат.ВариантРаботыИнформационнойБазы = Объект.COMВариантРаботыИнформационнойБазы; - Результат.КаталогИнформационнойБазы = Объект.COMКаталогИнформационнойБазы; - Результат.ИмяСервера1СПредприятия = Объект.COMИмяСервера1СПредприятия; - Результат.ИмяИнформационнойБазыНаСервере1СПредприятия = Объект.COMИмяИнформационнойБазыНаСервере1СПредприятия; - Результат.АутентификацияОперационнойСистемы = Объект.COMАутентификацияОперационнойСистемы; - Результат.ИмяПользователя = Объект.COMИмяПользователя; - Результат.ПарольПользователя = Объект.COMПарольПользователя; + Если ТипСоединения = "ВнешнееСоединение" Тогда + + Результат = ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения(); + + Результат.ВариантРаботыИнформационнойБазы = Объект.COMВариантРаботыИнформационнойБазы; + Результат.КаталогИнформационнойБазы = Объект.COMКаталогИнформационнойБазы; + Результат.ИмяСервера1СПредприятия = Объект.COMИмяСервера1СПредприятия; + Результат.ИмяИнформационнойБазыНаСервере1СПредприятия = Объект.COMИмяИнформационнойБазыНаСервере1СПредприятия; + Результат.АутентификацияОперационнойСистемы = Объект.COMАутентификацияОперационнойСистемы; + Результат.ИмяПользователя = Объект.COMИмяПользователя; + Результат.ПарольПользователя = Объект.COMПарольПользователя; + + Результат.Вставить("ТипСоединения", ТипСоединения); + Результат.Вставить("ВерсияКорреспондента_2_0_1_6", Объект.ВерсияКорреспондента_2_0_1_6); + + ИначеЕсли ТипСоединения = "ВебСервис" Тогда + + Результат = Новый Структура; + Результат.Вставить("WSURLВебСервиса"); + Результат.Вставить("WSИмяПользователя"); + Результат.Вставить("WSПароль"); + + ЗаполнитьЗначенияСвойств(Результат, Объект); + + Результат.Вставить("ТипСоединения", ТипСоединения); + Результат.Вставить("ВерсияКорреспондента_2_0_1_6", Объект.ВерсияКорреспондента_2_0_1_6); + + КонецЕсли; Возврат Результат; КонецФункции &НаКлиенте -Процедура ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ИмяФормыДляПроверки, ПараметрыФормы) - - ЭтоФормаНастройкиУзла = (Найти(ИмяФормыДляПроверки, "ФормаНастройкиУзла") <> 0); - ЭтоФормаНастройкиБазыКорреспондента = (Найти(ИмяФормыДляПроверки, "БазыКорреспондента") <> 0); +Процедура ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ИмяФормыДляПроверки, ПараметрыФормы, ИмяРеквизитаФормы) ИмяФормыНастройки = "ПланОбмена.[ИмяПланаОбмена].Форма.[ИмяФормы]"; ИмяФормыНастройки = СтрЗаменить(ИмяФормыНастройки, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); @@ -1536,59 +1992,530 @@ Если Не ФормаНастройки.ПроверитьЗаполнение() Тогда - Сообщение = ?(ЭтоФормаНастройкиУзла, - НСтр("ru = 'Необходимо задать настройки ограничения передачи данных.'"), - НСтр("ru = 'Необходимо задать дополнительные настройки.'")) - ; - - Если ЭтоФормаНастройкиБазыКорреспондента Тогда - - ИмяРеквизитаФормы = ?(ЭтоФормаНастройкиУзла, "ОписаниеОграниченийПередачиДанныхБазыКорреспондента", "ОписаниеЗначенийПоУмолчаниюБазыКорреспондента"); - - Иначе - - ИмяРеквизитаФормы = ?(ЭтоФормаНастройкиУзла, "ОписаниеОграниченийПередачиДанных", "ОписаниеЗначенийПоУмолчанию"); - - КонецЕсли; - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение,,, ИмяРеквизитаФормы, Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Необходимо задать обязательные настройки.'"),,, ИмяРеквизитаФормы, Отказ); КонецЕсли; КонецПроцедуры -// ЗНАЧЕНИЯ КОНСТАНТ +&НаСервереБезКонтекста +Процедура ЗаписатьОшибкуВЖурналРегистрации(СтрокаСообщенияОбОшибке, Событие) + + ЗаписьЖурналаРегистрации(Событие, УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + +КонецПроцедуры +&НаКлиенте +Процедура НастройкаОграниченийРегистрацииДанныхБазыКорреспондента(ТипСоединения) + + ИмяФормыНастройкиУзла = "ПланОбмена.[ИмяПланаОбмена].Форма.ФормаНастройкиУзлаБазыКорреспондента"; + ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); + ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзлеБазыКорреспондента); + + РезультатОткрытия = ОткрытьФормуМодально(ИмяФормыНастройкиУзла, ПараметрыФормы, ЭтаФорма); + + Если РезультатОткрытия <> Неопределено Тогда + + Для Каждого НастройкаОтбора ИЗ НастройкаОтборовНаУзлеБазыКорреспондента Цикл + + НастройкаОтборовНаУзлеБазыКорреспондента[НастройкаОтбора.Ключ] = РезультатОткрытия[НастройкаОтбора.Ключ]; + + КонецЦикла; + + // вызов сервера + ПолучитьОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзлеБазыКорреспондента); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НастройкаЗначенийПоУмолчаниюБазыКорреспондента(ТипСоединения) + + ИмяФормыНастройкиУзла = "ПланОбмена.[ИмяПланаОбмена].Форма.ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента"; + ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); + ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); + + РезультатОткрытия = ОткрытьФормуМодально(ИмяФормыНастройкиУзла, ПараметрыФормы, ЭтаФорма); + + Если РезультатОткрытия <> Неопределено Тогда + + Для Каждого НастройкаОтбора ИЗ ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента Цикл + + ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента[НастройкаОтбора.Ключ] = РезультатОткрытия[НастройкаОтбора.Ключ]; + + КонецЦикла; + + // вызов сервера + ПолучитьОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершениеНастройкиОбменаЧерезВнешнееСоединение() + + Если ВыполнитьИнтерактивныйОбменДаннымиСейчас Тогда + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); + ПараметрыФормы.Вставить("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); + ПараметрыФормы.Вставить("ВыполнитьСопоставлениеПриОткрытии", Ложь); + + ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершениеНастройкиОбменаЧерезВебСервис() + + Если ВыполнятьОбменДаннымиАвтоматически Тогда + + ЗавершениеНастройкиОбменаЧерезВебСервисНаСервере(Объект.УзелИнформационнойБазы, ПредопределенноеРасписаниеОбменаДанными, РасписаниеВыполненияОбменаДанными); + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗавершениеНастройкиОбменаЧерезВебСервисНаСервере(УзелИнформационнойБазы, ПредопределенноеРасписание, Расписание) + + УстановитьПривилегированныйРежим(Истина); + + РасписаниеСценария = Неопределено; + + Если ПредопределенноеРасписание = "Каждые15Минут" Тогда + + РасписаниеСценария = ПредопределенноеРасписаниеКаждые15Минут(); + + ИначеЕсли ПредопределенноеРасписание = "Каждые30Минут" Тогда + + РасписаниеСценария = ПредопределенноеРасписаниеКаждые30Минут(); + + ИначеЕсли ПредопределенноеРасписание = "КаждыйЧас" Тогда + + РасписаниеСценария = ПредопределенноеРасписаниеКаждыйЧас(); + + ИначеЕсли ПредопределенноеРасписание = "КаждыйДеньВ_8_00" Тогда + + РасписаниеСценария = ПредопределенноеРасписаниеКаждыйДеньВ_8_00(); + + ИначеЕсли ПредопределенноеРасписание = "ДругоеРасписание" Тогда + + РасписаниеСценария = Расписание; + + КонецЕсли; + + Если РасписаниеСценария <> Неопределено Тогда + + Справочники.СценарииОбменовДанными.СоздатьСценарий(УзелИнформационнойБазы, РасписаниеСценария); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершениеПервогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ) + + ОчиститьСообщения(); + + Если Не Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы + И ПустаяСтрока(Объект.ИмяФайлаНастроекОбменаДанными) Тогда + + НСтрока = НСтр("ru = 'Сохраните файл с настройками для информационной базы-приемника'"); + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,"Объект.ИмяФайлаНастроекОбменаДанными",, Отказ); + Возврат; + КонецЕсли; + + Если Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда + + Если ВыполнитьСозданиеНачальногоОбразаСейчас Тогда + + ПараметрыФормы = Новый Структура("Ключ, Узел", Объект.УзелИнформационнойБазы, Объект.УзелИнформационнойБазы); + + ОткрытьФормуМодально(ИмяФормыСозданияНачальногоОбраза, ПараметрыФормы); + + КонецЕсли; + + Иначе + + Если ВыполнитьОбменДаннымиСейчас Тогда + + ИнициализацияОбменаДаннымиНаКлиенте(Отказ); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершениеВторогоЭтапаНастройкиОбменаЧерезОбычныеКаналыСвязи(Отказ) + + Состояние(НСтр("ru = 'Выполняется создание настройки обмена данными'")); + + НастроитьНовыйОбменДаннымиНаСервере(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'При создании настройки обмена данными возникли ошибки.'")); + Возврат; + КонецЕсли; + + ОткрытьПомощникСопоставления = Не Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы И Не Объект.ЭтоНастройкаСтандартногоОбмена; + + Если ОткрытьПомощникСопоставления Тогда + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); + ПараметрыФормы.Вставить("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); + ПараметрыФормы.Вставить("ВыполнитьСопоставлениеПриОткрытии", Ложь); + + ОткрытьФорму("Обработка.ПомощникИнтерактивногоОбменаДанными.Форма", ПараметрыФормы); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ЗапуститьМенеджерЗаданий() + + Возврат ( РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" + ИЛИ РежимРаботыМастера = "ОбменЧерезВебСервис") + И ИнформационнаяБазаФайловая + И ВыполнятьОбменДаннымиАвтоматически + ; +КонецФункции + +&НаСервереБезКонтекста +Процедура ВключитьИспользованиеЖурналаРегистрации(Знач СобытиеЖурналаРегистрации, Предупреждение) + + Попытка + ОбщегоНазначения.ВключитьИспользованиеЖурналаРегистрации(); + Исключение + Предупреждение = НСтр("ru = 'Не удалось включить использование журнала регистрации: %1'"); + Предупреждение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Предупреждение, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации, УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуСопоставления() + + ТекущиеДанные = Элементы.ДеревоИнформацииСтатистики.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ПустаяСтрока(ТекущиеДанные.Ключ) Тогда + Возврат; + КонецЕсли; + + Если Не ТекущиеДанные.ИспользоватьПредварительныйПросмотр Тогда + Предупреждение(НСтр("ru = 'Для этих данных нельзя выполнить сопоставление.'")); + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ИмяТаблицыПриемника", ТекущиеДанные.ИмяТаблицыПриемника); + ПараметрыФормы.Вставить("ИмяТипаОбъектаТаблицыИсточника", ТекущиеДанные.ТипОбъектаСтрокой); + ПараметрыФормы.Вставить("ПоляТаблицыПриемника", ТекущиеДанные.ПоляТаблицы); + ПараметрыФормы.Вставить("ПоляПоискаТаблицыПриемника", ТекущиеДанные.ПоляПоиска); + ПараметрыФормы.Вставить("ТипИсточникаСтрокой", ТекущиеДанные.ТипИсточникаСтрокой); + ПараметрыФормы.Вставить("ТипПриемникаСтрокой", ТекущиеДанные.ТипПриемникаСтрокой); + ПараметрыФормы.Вставить("ЭтоУдалениеОбъекта", ТекущиеДанные.ЭтоУдалениеОбъекта); + ПараметрыФормы.Вставить("ДанныеУспешноЗагружены", ТекущиеДанные.ДанныеУспешноЗагружены); + + ПараметрыФормы.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); + ПараметрыФормы.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); + + ПараметрыФормы.Вставить("ВыполнятьЗагрузкуДанных", Ложь); + + ОткрытьФорму("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма", ПараметрыФормы, ЭтаФорма, ТекущиеДанные.Ключ); + +КонецПроцедуры + +&НаКлиенте +Процедура РазвернутьДеревоИнформацииСтатистики(КлючСтроки = "") + + КоллекцияЭлементов = ДеревоИнформацииСтатистики.ПолучитьЭлементы(); + + Для Каждого СтрокаДерева Из КоллекцияЭлементов Цикл + + Элементы.ДеревоИнформацииСтатистики.Развернуть(СтрокаДерева.ПолучитьИдентификатор(), Истина); + + КонецЦикла; + + // Позиционирование курсора в дереве значений + Если Не ПустаяСтрока(КлючСтроки) Тогда + + ИдентификаторСтроки = 0; + + ОбщегоНазначенияКлиентСервер.ПолучитьИдентификаторСтрокиДереваПоЗначениюПоля("Ключ", ИдентификаторСтроки, ДеревоИнформацииСтатистики.ПолучитьЭлементы(), КлючСтроки, Ложь); + + Элементы.ДеревоИнформацииСтатистики.ТекущаяСтрока = ИдентификаторСтроки; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьДанныеСтатистикиСопоставленияНаСервере(Отказ, ПараметрыОповещения) + + СтрокиТаблицы = Объект.ИнформацияСтатистики.НайтиСтроки(Новый Структура("Ключ", ПараметрыОповещения.КлючУникальности)); + + ЗаполнитьЗначенияСвойств(СтрокиТаблицы[0], ПараметрыОповещения, "ДанныеУспешноЗагружены"); + + КлючиСтрок = Новый Массив; + КлючиСтрок.Добавить(ПараметрыОповещения.КлючУникальности); + + ОбновитьИнформациюСопоставленияПоСтрокеНаСервере(Отказ, КлючиСтрок); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьИнформациюСопоставленияПоСтрокеНаСервере(Отказ, КлючиСтрок) + + ИндексыСтрок = ПолучитьИндексыСтрокТаблицыИнформацииСтатистики(КлючиСтрок); + + ПомощникИнтерактивногоОбменаДанными = Обработки.ПомощникИнтерактивногоОбменаДанными.Создать(); + + ЗаполнитьЗначенияСвойств(ПомощникИнтерактивногоОбменаДанными, Объект,, "ИнформацияСтатистики"); + + ПомощникИнтерактивногоОбменаДанными.ИнформацияСтатистики.Загрузить(Объект.ИнформацияСтатистики.Выгрузить()); + + ПомощникИнтерактивногоОбменаДанными.ПолучитьСтатистикуСопоставленияОбъектовПоСтроке(Отказ, ИндексыСтрок); + + Если Не Отказ Тогда + + ЗаполнитьЗначенияСвойств(Объект, ПомощникИнтерактивногоОбменаДанными, "НомерВходящегоСообщения"); + + Объект.ИнформацияСтатистики.Загрузить(ПомощникИнтерактивногоОбменаДанными.ТаблицаИнформацииСтатистики()); + + ПолучитьДеревоИнформацииСтатистики(ПомощникИнтерактивногоОбменаДанными.ТаблицаИнформацииСтатистики()); + + УстановитьВидимостьГруппыДополнительнойИнформации(); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ПолучитьИндексыСтрокТаблицыИнформацииСтатистики(КлючиСтрок) + + ИндексыСтрок = Новый Массив; + + Для Каждого Ключ ИЗ КлючиСтрок Цикл + + СтрокиТаблицы = Объект.ИнформацияСтатистики.НайтиСтроки(Новый Структура("Ключ", Ключ)); + + ИндексСтроки = Объект.ИнформацияСтатистики.Индекс(СтрокиТаблицы[0]); + + ИндексыСтрок.Добавить(ИндексСтроки); + + КонецЦикла; + + Возврат ИндексыСтрок; + +КонецФункции + +&НаСервере +Процедура ПолучитьДеревоИнформацииСтатистики(ИнформацияСтатистики) + + КоллекцияЭлементовДерева = ДеревоИнформацииСтатистики.ПолучитьЭлементы(); + КоллекцияЭлементовДерева.Очистить(); + + ОбщегоНазначения.ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, + ОбменДаннымиСервер.ПолучитьДеревоИнформацииСтатистики(ИнформацияСтатистики) + ); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Значения констант + +&НаКлиентеНаСервереБезКонтекста Функция НадписьДалееFILE() Возврат НСтр("ru = 'Нажмите кнопку ""Далее"" для задания настроек обмена через локальный или сетевой каталог.'"); КонецФункции +&НаКлиентеНаСервереБезКонтекста Функция НадписьДалееFTP() Возврат НСтр("ru = 'Нажмите кнопку ""Далее"" для задания настроек обмена через FTP-ресурс.'"); КонецФункции +&НаКлиентеНаСервереБезКонтекста Функция НадписьДалееEMAIL() Возврат НСтр("ru = 'Нажмите кнопку ""Далее"" для задания настроек обмена по почте.'"); КонецФункции +&НаКлиентеНаСервереБезКонтекста Функция НадписьДалееНастройки() Возврат НСтр("ru = 'Нажмите кнопку ""Далее"" для настройки дополнительных параметров обмена данными.'"); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ПЕРЕОПРЕДЕЛЯЕМАЯ ЧАСТЬ ПОМОЩНИКА -//////////////////////////////////////////////////////////////////////////////// +&НаСервереБезКонтекста +Функция ПредопределенноеРасписаниеКаждые15Минут() + + Месяцы = Новый Массив; + Месяцы.Добавить(1); + Месяцы.Добавить(2); + Месяцы.Добавить(3); + Месяцы.Добавить(4); + Месяцы.Добавить(5); + Месяцы.Добавить(6); + Месяцы.Добавить(7); + Месяцы.Добавить(8); + Месяцы.Добавить(9); + Месяцы.Добавить(10); + Месяцы.Добавить(11); + Месяцы.Добавить(12); + + ДниНедели = Новый Массив; + ДниНедели.Добавить(1); + ДниНедели.Добавить(2); + ДниНедели.Добавить(3); + ДниНедели.Добавить(4); + ДниНедели.Добавить(5); + ДниНедели.Добавить(6); + ДниНедели.Добавить(7); + + Расписание = Новый РасписаниеРегламентногоЗадания; + Расписание.Месяцы = Месяцы; + Расписание.ДниНедели = ДниНедели; + Расписание.ПериодПовтораВТечениеДня = 60*15; // 15 минут + Расписание.ПериодПовтораДней = 1; // каждый день + + Возврат Расписание; +КонецФункции + +&НаСервереБезКонтекста +Функция ПредопределенноеРасписаниеКаждые30Минут() + + Месяцы = Новый Массив; + Месяцы.Добавить(1); + Месяцы.Добавить(2); + Месяцы.Добавить(3); + Месяцы.Добавить(4); + Месяцы.Добавить(5); + Месяцы.Добавить(6); + Месяцы.Добавить(7); + Месяцы.Добавить(8); + Месяцы.Добавить(9); + Месяцы.Добавить(10); + Месяцы.Добавить(11); + Месяцы.Добавить(12); + + ДниНедели = Новый Массив; + ДниНедели.Добавить(1); + ДниНедели.Добавить(2); + ДниНедели.Добавить(3); + ДниНедели.Добавить(4); + ДниНедели.Добавить(5); + ДниНедели.Добавить(6); + ДниНедели.Добавить(7); + + Расписание = Новый РасписаниеРегламентногоЗадания; + Расписание.Месяцы = Месяцы; + Расписание.ДниНедели = ДниНедели; + Расписание.ПериодПовтораВТечениеДня = 60*30; // 30 минут + Расписание.ПериодПовтораДней = 1; // каждый день + + Возврат Расписание; +КонецФункции + +&НаСервереБезКонтекста +Функция ПредопределенноеРасписаниеКаждыйЧас() + + Месяцы = Новый Массив; + Месяцы.Добавить(1); + Месяцы.Добавить(2); + Месяцы.Добавить(3); + Месяцы.Добавить(4); + Месяцы.Добавить(5); + Месяцы.Добавить(6); + Месяцы.Добавить(7); + Месяцы.Добавить(8); + Месяцы.Добавить(9); + Месяцы.Добавить(10); + Месяцы.Добавить(11); + Месяцы.Добавить(12); + + ДниНедели = Новый Массив; + ДниНедели.Добавить(1); + ДниНедели.Добавить(2); + ДниНедели.Добавить(3); + ДниНедели.Добавить(4); + ДниНедели.Добавить(5); + ДниНедели.Добавить(6); + ДниНедели.Добавить(7); + + Расписание = Новый РасписаниеРегламентногоЗадания; + Расписание.Месяцы = Месяцы; + Расписание.ДниНедели = ДниНедели; + Расписание.ПериодПовтораВТечениеДня = 60*60; // 60 минут + Расписание.ПериодПовтораДней = 1; // каждый день + + Возврат Расписание; +КонецФункции + +&НаСервереБезКонтекста +Функция ПредопределенноеРасписаниеКаждыйДеньВ_8_00() + + Месяцы = Новый Массив; + Месяцы.Добавить(1); + Месяцы.Добавить(2); + Месяцы.Добавить(3); + Месяцы.Добавить(4); + Месяцы.Добавить(5); + Месяцы.Добавить(6); + Месяцы.Добавить(7); + Месяцы.Добавить(8); + Месяцы.Добавить(9); + Месяцы.Добавить(10); + Месяцы.Добавить(11); + Месяцы.Добавить(12); + + ДниНедели = Новый Массив; + ДниНедели.Добавить(1); + ДниНедели.Добавить(2); + ДниНедели.Добавить(3); + ДниНедели.Добавить(4); + ДниНедели.Добавить(5); + ДниНедели.Добавить(6); + ДниНедели.Добавить(7); + + Расписание = Новый РасписаниеРегламентногоЗадания; + Расписание.Месяцы = Месяцы; + Расписание.ДниНедели = ДниНедели; + Расписание.ВремяНачала = Дата('00010101080000'); // 8:00 + Расписание.ПериодПовтораДней = 1; // каждый день + + Возврат Расписание; +КонецФункции //////////////////////////////////////////////////////////////////////////////// -// РАЗДЕЛ ОБРАБОТЧИКОВ СОБЫТИЙ ПЕРЕХОДОВ +// Переопределяемая часть - Обработчики событий переходов &НаКлиенте Функция Подключаемый_СтраницаМастераЗаданиеПараметровТранспортаFILE_ПриПереходеДалее(Отказ) @@ -1704,7 +2631,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзле); - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиУзла", ПараметрыФормы); + ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиУзла", ПараметрыФормы, "ОписаниеОграниченийПередачиДанных"); КонецЕсли; @@ -1714,7 +2641,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзле); - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиЗначенийПоУмолчанию", ПараметрыФормы); + ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиЗначенийПоУмолчанию", ПараметрыФормы, "ОписаниеЗначенийПоУмолчанию"); КонецЕсли; @@ -1738,7 +2665,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзле); - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиУзла", ПараметрыФормы); + ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиУзла", ПараметрыФормы, "ОписаниеОграниченийПередачиДанных"); КонецЕсли; @@ -1748,54 +2675,45 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзле); - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиЗначенийПоУмолчанию", ПараметрыФормы); + ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиЗначенийПоУмолчанию", ПараметрыФормы, "ОписаниеЗначенийПоУмолчанию"); КонецЕсли; КонецФункции +&НаКлиенте +Функция Подключаемый_СтраницаМастераНастройкаПараметровОбменаДанными_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Если ЭтоПереходДалее Тогда + + // Получаем описание контекста формы настройки узлов + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПолучениеОписанияКонтекста"); + ПараметрыФормы.Вставить("Настройки", КонтекстФормыНастройкиУзлов); + + ИмяФормыНастройки = "ПланОбмена.[ИмяПланаОбмена].Форма.ФормаНастройкиУзлов"; + ИмяФормыНастройки = СтрЗаменить(ИмяФормыНастройки, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); + + ФормаНастройки = ПолучитьФорму(ИмяФормыНастройки, ПараметрыФормы, ЭтаФорма); + + ОписаниеНастроекВыгрузкиДанных = ФормаНастройки.ОписаниеКонтекста; + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераНастройкаПараметровОбменаДанными_ПриПереходеДалее(Отказ) + + ПроверитьЗаданиеНастроекДляПервойБазы(Отказ, "ВебСервис"); + +КонецФункции + &НаКлиенте Функция Подключаемый_СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазы_ПриПереходеДалее(Отказ) - Если ПустаяСтрока(Объект.НаименованиеВторойБазы) Тогда - - НСтрока = НСтр("ru = 'Укажите наименование информационной базы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.НаименованиеВторойБазы",, Отказ); - - КонецЕсли; - - Если СокрЛП(Объект.ПрефиксИнформационнойБазыИсточника) = СокрЛП(Объект.ПрефиксИнформационнойБазыПриемника) Тогда - - НСтрока = НСтр("ru = 'Префиксы информационных баз должны быть различными.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыПриемника",, Отказ); - - КонецЕсли; - - Если Отказ Тогда - Возврат Неопределено; - КонецЕсли; - - Если ПредусмотреныНастройкиОтборовНаУзлеБазыКорреспондента Тогда - - // Проверяем заполнение реквизитов в форме настроек ограничения миграции данных - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения()); - ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзлеБазыКорреспондента); - - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиУзлаБазыКорреспондента", ПараметрыФормы); - - КонецЕсли; - - Если ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента Тогда - - // Проверяем заполнение реквизитов в форме дополнительных настроек - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения()); - ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); - - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента", ПараметрыФормы); - - КонецЕсли; + ПроверитьЗаданиеНастроекДляВторойБазы(Отказ, "ВнешнееСоединение"); КонецФункции @@ -1808,7 +2726,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзле); - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиУзла", ПараметрыФормы); + ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиУзла", ПараметрыФормы, "ОписаниеОграниченийПередачиДанных"); КонецЕсли; @@ -1818,7 +2736,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзле); - ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиЗначенийПоУмолчанию", ПараметрыФормы); + ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиЗначенийПоУмолчанию", ПараметрыФормы, "ОписаниеЗначенийПоУмолчанию"); КонецЕсли; @@ -1892,10 +2810,10 @@ КонецЕсли; // выводим поясняющую надпись - Элементы.СтраницыНадписиИнформацииОбОткрытииПомощникаСопоставления.ТекущаяСтраница = ?( - (ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" И Не Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы И Не Объект.ЭтоНастройкаСтандартногоОбмена), - Элементы.СтраницаНадписиИнформацииОбОткрытииПомощникаСопоставления, - Элементы.СтраницаНадписиИнформацииОбОткрытииПомощникаСопоставленияПустая + Элементы.ГруппаНадписиИнформацииОбОткрытииПомощникаСопоставления.Видимость = + (ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" + И Не Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы + И Не Объект.ЭтоНастройкаСтандартногоОбмена ); КонецФункции @@ -1904,14 +2822,29 @@ Функция Подключаемый_СтраницаМастераИтогНастройкиОбмена_ПриОткрытии_ВнешнееСоединение(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) // Представление результата настройки обмена - СтрокаСообщения = НСтр("ru = '%1 - |Настройки обмена данными для этой информационной базы: - |======================================================== - |%2%3Префикс информационной базы: %4 - | - |Настройки обмена данными для второй информационной базы: - |======================================================== - |%5%6Префикс информационной базы: %7'"); + Если НастройкаОбменаССервисом Тогда + + СтрокаСообщения = НСтр("ru = '%1 + |Настройки для этой информационной базы: + |======================================================== + |%2%3Префикс информационной базы: %4 + | + |Настройки для приложения, расположенного в сервисе: + |======================================================== + |%5%6Префикс приложения: %7'"); + + Иначе + + СтрокаСообщения = НСтр("ru = '%1 + |Настройки обмена данными для этой информационной базы: + |======================================================== + |%2%3Префикс информационной базы: %4 + | + |Настройки обмена данными для второй информационной базы: + |======================================================== + |%5%6Префикс информационной базы: %7'"); + + КонецЕсли; ПредставлениеРезультатаНастройкиОбмена = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ПредставлениеРезультатаТранспортСообщений(), @@ -1924,23 +2857,19 @@ ); // выводим поясняющую надпись - Элементы.СтраницыНадписиИнформацииОбОткрытииПомощникаСопоставления.ТекущаяСтраница = ?( - (ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" И Не Объект.ЭтоНастройкаРаспределеннойИнформационнойБазы), - Элементы.СтраницаНадписиИнформацииОбОткрытииПомощникаСопоставления, - Элементы.СтраницаНадписиИнформацииОбОткрытииПомощникаСопоставленияПустая - ); + Элементы.ГруппаНадписиИнформацииОбОткрытииПомощникаСопоставления.Видимость = Ложь; КонецФункции &НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными_ПриПереходеДалее(Отказ) +Функция Подключаемый_СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными_ПриПереходеДалееНаСервере(Отказ); + СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными_ОбработкаДлительнойОперацииНаСервере(Отказ); КонецФункции &НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСозданияНастройкиОбменаДаннымиЧерезВнешнееСоединение_ПриПереходеДалее(Отказ) +Функция Подключаемый_СтраницаМастераОжиданиеСозданияНастройкиОбменаДаннымиЧерезВнешнееСоединение_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) // создаем настройку обмена через внешнее соединение НастроитьНовыйОбменДаннымиНаСервереЧерезВнешнееСоединение(Отказ, НастройкаОтборовНаУзлеБазыКорреспондента, ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); @@ -1948,29 +2877,52 @@ КонецФункции &НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) +Функция Подключаемый_СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - Если Не ЭтоПереходДалее Тогда + СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения_ОбработкаДлительнойОперацииНаСервере(Отказ); + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеПроверкиПодключенияЧерезВебСервис_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ПроверитьПодключениеWSНаКлиенте(Отказ, Истина); + +КонецФункции + +// + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + // Создание настройки обмена данными: + // - создание узлов в этой базе и в корреспонденте с настройками выгрузки данных + // - регистрация справочников к выгрузке в этой базе и в корреспонденте + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ИдентификаторДлительнойОперации = ""; + + НастроитьНовыйОбменДаннымиНаСервереЧерезВебСервис(Отказ); + + Если Отказ Тогда - ПропуститьСтраницу = Истина; + Предупреждение(НСтр("ru = 'Возникли ошибки на этапе создания настройки обмена данными. + |Для решения проблем воспользуйтесь журналом регистрации.'") + ); КонецЕсли; КонецФункции &НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения_ПриПереходеДалее(Отказ) +Функция Подключаемый_СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбменаДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения_ПриПереходеДалееНаСервере(Отказ); - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - Если Не ЭтоПереходДалее Тогда + Если ДлительнаяОперация Тогда - ПропуститьСтраницу = Истина; + ПерейтиДалее = Ложь; + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); КонецЕсли; @@ -1978,6 +2930,758 @@ // +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ИдентификаторФайлаСообщенияВСервисе = ""; + ИдентификаторДлительнойОперации = ""; + + СтруктураДанных = ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( + Отказ, + Объект.УзелИнформационнойБазы, + ИдентификаторФайлаСообщенияВСервисе, + ДлительнаяОперация, + ИдентификаторДлительнойОперации + ); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'Возникли ошибки на этапе анализа данных. + |Для решения проблем воспользуйтесь журналом регистрации.'") + ); + + ИначеЕсли Не ДлительнаяОперация Тогда + + Объект.ИмяВременногоКаталогаСообщенийОбмена = СтруктураДанных.ИмяВременногоКаталогаСообщенийОбмена; + Объект.ИмяФайлаСообщенияОбмена = СтруктураДанных.ИмяФайлаСообщенияОбмена; + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперация Тогда + + ПерейтиДалее = Ложь; + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперацияЗавершена Тогда + + СтруктураДанных = ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( + Отказ, + Объект.УзелИнформационнойБазы, + ИдентификаторФайлаСообщенияВСервисе + ); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'Возникли ошибки на этапе анализа данных. + |Для решения проблем воспользуйтесь журналом регистрации.'") + ); + + Иначе + + Объект.ИмяВременногоКаталогаСообщенийОбмена = СтруктураДанных.ИмяВременногоКаталогаСообщенийОбмена; + Объект.ИмяФайлаСообщенияОбмена = СтруктураДанных.ИмяФайлаСообщенияОбмена; + + КонецЕсли; + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление_ОбработкаДлительнойОперации(Отказ); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'Возникли ошибки на этапе анализа данных.'")); + + КонецЕсли; + +КонецФункции + +&НаСервере +Процедура СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление_ОбработкаДлительнойОперации(Отказ) + + ПомощникИнтерактивногоОбменаДанными = Обработки.ПомощникИнтерактивногоОбменаДанными.Создать(); + + ЗаполнитьЗначенияСвойств(ПомощникИнтерактивногоОбменаДанными, Объект,, "ИнформацияСтатистики"); + + ПомощникИнтерактивногоОбменаДанными.ИнформацияСтатистики.Загрузить(Объект.ИнформацияСтатистики.Выгрузить()); + + ПомощникИнтерактивногоОбменаДанными.ВыполнитьАнализСообщенияОбмена(Отказ, Ложь); + + ПомощникИнтерактивногоОбменаДанными.ВыполнитьАвтоматическоеСопоставлениеПоУмолчаниюИПолучитьСтатистикуСопоставления(Отказ); + + Если Не Отказ Тогда + + ТаблицаИнформацииСтатистики = ПомощникИнтерактивногоОбменаДанными.ТаблицаИнформацииСтатистики(); + + // Удаляем строки, в которых сопоставление 100% + ОбратныйИндекс = ТаблицаИнформацииСтатистики.Количество() - 1; + + Пока ОбратныйИндекс >= 0 Цикл + + СтрокаТаблицы = ТаблицаИнформацииСтатистики[ОбратныйИндекс]; + + Если СтрокаТаблицы.КоличествоОбъектовНесопоставленных = 0 Тогда + + ТаблицаИнформацииСтатистики.Удалить(СтрокаТаблицы); + + КонецЕсли; + + ОбратныйИндекс = ОбратныйИндекс - 1; + КонецЦикла; + + ЗаполнитьЗначенияСвойств(Объект, ПомощникИнтерактивногоОбменаДанными, "НомерВходящегоСообщения"); + + Объект.ИнформацияСтатистики.Загрузить(ТаблицаИнформацииСтатистики); + + ПолучитьДеревоИнформацииСтатистики(ТаблицаИнформацииСтатистики); + + УстановитьВидимостьГруппыДополнительнойИнформации(); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимостьГруппыДополнительнойИнформации() + + // если в таблице информации статистике есть хотя бы одна строка с сопоставлением меньшим 100%, + // то группу дополнительной информации делаем видимой + МассивСтрок = Объект.ИнформацияСтатистики.НайтиСтроки(Новый Структура("ИндексКартинки", 1)); + + ВсеДанныеСопоставлены = (МассивСтрок.Количество() = 0); + + Элементы.СтраницыСтатусаСопоставленияДанных.ТекущаяСтраница = ?(ВсеДанныеСопоставлены, + Элементы.СтатусСопоставленияВсеДанныеСопоставлены, + Элементы.СтатусСопоставленияЕстьНесопоставленныеДанные + ); + +КонецПроцедуры + +&НаКлиенте +Функция Подключаемый_СтраницаМастераСопоставлениеДанных_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Если ЭтоПереходДалее И ВсеДанныеСопоставлены Тогда + + ПропуститьСтраницу = Истина; + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераСопоставлениеДанных_ПриПереходеДалее(Отказ) + + Если Не ВсеДанныеСопоставлены Тогда + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(КодВозвратаДиалога.Да, "Продолжить"); + Кнопки.Добавить(КодВозвратаДиалога.Нет, "Отмена"); + + Сообщение = НСтр("ru = 'Не все данные сопоставлены. Наличие несопоставленных данных + |может привести к появлению одинаковых элементов справочников (дублей). + |Продолжить?'" + ); + + Ответ = Вопрос(Сообщение, Кнопки,, КодВозвратаДиалога.Нет); + + Если Ответ = КодВозвратаДиалога.Нет Тогда + + Отказ = Истина; + + КонецЕсли; + + КонецЕсли; + +КонецФункции + +// + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииСправочниковЗагрузка_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезФайл(Отказ, Объект.УзелИнформационнойБазы, Объект.ИмяФайлаСообщенияОбмена); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'Возникли ошибки на этапе синхронизации справочников. + |Для решения проблем воспользуйтесь журналом регистрации.'") + ); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ИдентификаторФайлаСообщенияВСервисе = ""; + ИдентификаторДлительнойОперации = ""; + + СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка_ОбработкаДлительнойОперации( + Отказ, + Объект.УзелИнформационнойБазы, + ДлительнаяОперация, + ИдентификаторДлительнойОперации, + ИдентификаторФайлаСообщенияВСервисе, + ДатаНачалаОперации + ); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'Возникли ошибки на этапе синхронизации справочников. + |Для решения проблем воспользуйтесь журналом регистрации.'") + ); + + КонецЕсли; + +КонецФункции + +&НаСервереБезКонтекста +Процедура СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка_ОбработкаДлительнойОперации( + Отказ, + УзелИнформационнойБазы, + ДлительнаяОперация, + ИдентификаторОперации, + ИдентификаторФайла, + ДатаНачалаОперации + ) + + ДатаНачалаОперации = ТекущаяДатаСеанса(); + + // запускаем выполнение обмена + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + Отказ, + УзелИнформационнойБазы, + Ложь, + Истина, + Перечисления.ВидыТранспортаСообщенийОбмена.WS, + ДлительнаяОперация, + ИдентификаторОперации, + ИдентификаторФайла, + Истина + ); + +КонецПроцедуры + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперация Тогда + + ПерейтиДалее = Ложь; + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперацияЗавершена Тогда + + ОбменДаннымиСервер.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Объект.УзелИнформационнойБазы, ДатаНачалаОперации); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеСохраненияНастроек_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + // Обновление настройки обмена данными в этой базе и корреспонденте: + // - обновление информации значений по умолчанию в узлах планов обмена + // - регистрация всех данных, кроме справочников и ПВХ к выгрузке в этой базе и в корреспонденте + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ИдентификаторДлительнойОперации = ""; + + ОбновитьНастройкиОбменаДанными(Отказ); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'Возникли ошибки на этапе сохранения настроек. + |Для решения проблем воспользуйтесь журналом регистрации.'") + ); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеСохраненияНастроекДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперация Тогда + + ПерейтиДалее = Ложь; + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + + КонецЕсли; + +КонецФункции + +// + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ИдентификаторФайлаСообщенияВСервисе = ""; + ИдентификаторДлительнойОперации = ""; + + СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка_ОбработкаДлительнойОперации( + Отказ, + Объект.УзелИнформационнойБазы, + ДлительнаяОперация, + ИдентификаторДлительнойОперации, + ИдентификаторФайлаСообщенияВСервисе, + ДатаНачалаОперации + ); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'Возникли ошибки на этапе синхронизации данных. + |Для решения проблем воспользуйтесь журналом регистрации.'") + ); + + КонецЕсли; + +КонецФункции + +&НаСервереБезКонтекста +Процедура СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка_ОбработкаДлительнойОперации( + Отказ, + УзелИнформационнойБазы, + ДлительнаяОперация, + ИдентификаторОперации, + ИдентификаторФайла, + ДатаНачалаОперации + ) + + ДатаНачалаОперации = ТекущаяДатаСеанса(); + + // запускаем выполнение обмена + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + Отказ, + УзелИнформационнойБазы, + Истина, + Ложь, + Перечисления.ВидыТранспортаСообщенийОбмена.WS, + ДлительнаяОперация, + ИдентификаторОперации, + ИдентификаторФайла, + Истина + ); + +КонецПроцедуры + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперация Тогда + + ПерейтиДалее = Ложь; + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперацияЗавершена Тогда + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( + Отказ, + Объект.УзелИнформационнойБазы, + ИдентификаторФайлаСообщенияВСервисе, + ДатаНачалаОперации + ); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'Возникли ошибки на этапе синхронизации данных. + |Для решения проблем воспользуйтесь журналом регистрации.'") + ); + + КонецЕсли; + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ИдентификаторФайлаСообщенияВСервисе = ""; + ИдентификаторДлительнойОперации = ""; + + СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка_ОбработкаДлительнойОперации( + Отказ, + Объект.УзелИнформационнойБазы, + ДлительнаяОперация, + ИдентификаторДлительнойОперации, + ИдентификаторФайлаСообщенияВСервисе, + ДатаНачалаОперации + ); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'Возникли ошибки на этапе синхронизации данных. + |Для решения проблем воспользуйтесь журналом регистрации.'") + ); + + КонецЕсли; + +КонецФункции + +&НаСервереБезКонтекста +Процедура СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка_ОбработкаДлительнойОперации( + Отказ, + УзелИнформационнойБазы, + ДлительнаяОперация, + ИдентификаторОперации, + ИдентификаторФайла, + ДатаНачалаОперации + ) + + ДатаНачалаОперации = ТекущаяДатаСеанса(); + + // запускаем выполнение обмена + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + Отказ, + УзелИнформационнойБазы, + Ложь, + Истина, + Перечисления.ВидыТранспортаСообщенийОбмена.WS, + ДлительнаяОперация, + ИдентификаторОперации, + ИдентификаторФайла, + Истина + ); + +КонецПроцедуры + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперация Тогда + + ПерейтиДалее = Ложь; + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперацияЗавершена Тогда + + ОбменДаннымиСервер.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Объект.УзелИнформационнойБазы, ДатаНачалаОперации); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Если ЭтоПереходДалее Тогда + + ТипСоединения = "ВебСервис"; + + ПроверитьНастройкиПараметровУчетаНаСервере( + Ложь, + ТипСоединения, + Объект.ИмяПланаОбмена, + СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения) + ); + + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриПереходеДалее(Отказ) + + ТипСоединения = "ВебСервис"; + + ПроверитьНастройкиОтраженияДокументовВУчете(Отказ, ТипСоединения); + + Если Отказ Тогда + Возврат Неопределено; + КонецЕсли; + + ПроверитьНастройкиПараметровУчетаНаСервере( + Отказ, + ТипСоединения, + Объект.ИмяПланаОбмена, + СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения) + ); + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + ПредопределенноеРасписаниеОбменаДаннымиПриИзмененииЗначения(); + + ВыполнятьОбменДаннымиАвтоматическиПриИзмененииЗначения(); + +КонецФункции + +// + +&НаКлиенте +Процедура ПроверитьНастройкиОтраженияДокументовВУчете(Отказ, ТипСоединения) + + Если ПредусмотреныЗначенияПоУмолчаниюНаУзле Тогда + + // Проверяем заполнение реквизитов в форме дополнительных настроек + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзле); + + ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиЗначенийПоУмолчанию", ПараметрыФормы, "ОписаниеЗначенийПоУмолчанию"); + + КонецЕсли; + + Если ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента Тогда + + // Проверяем заполнение реквизитов в форме дополнительных настроек + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); + ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); + + ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента", ПараметрыФормы, "ОписаниеЗначенийПоУмолчаниюБазыКорреспондента"); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьНастройкиПараметровУчетаНаСервере( + Отказ, + Знач ТипСоединения, + Знач ИмяПланаОбмена, + ПараметрыПодключения + ) + + СообщениеОбОшибке = ""; + СообщениеОбОшибкеКорреспондента = ""; + + КодУзла = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.УзелИнформационнойБазы, "Код"); + + НастройкиПараметровУчетаЗаданы = ОбменДаннымиСервер.НастройкиПараметровУчетаВСистемеУстановлены(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке); + + Если ТипСоединения = "ВебСервис" Тогда + + СтрокаСообщенияОбОшибке = ""; + + Если Объект.ВерсияКорреспондента_2_0_1_6 Тогда + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + Иначе + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + КонецЕсли; + + Если WSПрокси = Неопределено Тогда + ОбменДаннымиСервер.СообщитьОбОшибке(СтрокаСообщенияОбОшибке, Отказ); + Возврат; + КонецЕсли; + + КодУзла = ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(Объект.ИмяПланаОбмена); + + // Получаем параметры второй информационной базы + Если Объект.ВерсияКорреспондента_2_0_1_6 Тогда + ПараметрыПриемника = СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetIBParameters(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); + Иначе + ПараметрыПриемника = ЗначениеИзСтрокиВнутр(WSПрокси.GetIBParameters(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); + КонецЕсли; + + НастройкиПараметровУчетаКорреспондентаЗаданы = ПараметрыПриемника.НастройкиПараметровУчетаЗаданы; + + ИначеЕсли ТипСоединения = "ВнешнееСоединение" Тогда + + СтрокаСообщенияОбОшибке = ""; + + ВнешнееСоединение = ОбменДаннымиСервер.УстановитьВнешнееСоединение(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + + Если ВнешнееСоединение = Неопределено Тогда + ОбменДаннымиСервер.СообщитьОбОшибке(СтрокаСообщенияОбОшибке, Отказ); + Возврат; + КонецЕсли; + + КодУзла = ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(Объект.ИмяПланаОбмена); + + // Получаем параметры второй информационной базы + Если Объект.ВерсияКорреспондента_2_0_1_6 Тогда + ПараметрыПриемника = ОбщегоНазначения.ЗначениеИзСтрокиXML(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы_2_0_1_6(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); + Иначе + ПараметрыПриемника = ЗначениеИзСтрокиВнутр(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); + КонецЕсли; + + НастройкиПараметровУчетаКорреспондентаЗаданы = ПараметрыПриемника.НастройкиПараметровУчетаЗаданы; + + КонецЕсли; + + Если Отказ Тогда + Возврат; + КонецЕсли; + + Если Не НастройкиПараметровУчетаЗаданы Тогда + + Если ПустаяСтрока(СообщениеОбОшибке) Тогда + СообщениеОбОшибке = НСтр("ru = 'Не заданы параметры учета в этой программе.'"); + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке,, "НастройкиПараметровУчетаПоясняющаяНадпись",, Отказ); + + КонецЕсли; + + Если Не НастройкиПараметровУчетаКорреспондентаЗаданы Тогда + + Если ПустаяСтрока(СообщениеОбОшибкеКорреспондента) Тогда + СообщениеОбОшибкеКорреспондента = НСтр("ru = 'Не заданы параметры учета в приложении, расположенном в Интернете.'"); + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибкеКорреспондента,, "НастройкиПараметровУчетаКорреспондентаПоясняющаяНадпись",, Отказ); + + КонецЕсли; + + Элементы.НастройкиПараметровУчета.Видимость = Не НастройкиПараметровУчетаЗаданы; + Элементы.НастройкиПараметровУчетаКорреспондента.Видимость = Не НастройкиПараметровУчетаКорреспондентаЗаданы; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьЗаданиеНастроекДляПервойБазы(Отказ, ТипСоединения = "ВебСервис") + + Если ПустаяСтрока(Объект.НаименованиеЭтойБазы) Тогда + + НСтрока = НСтр("ru = 'Укажите наименование этой программы.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.НаименованиеЭтойБазы",, Отказ); + + КонецЕсли; + + Если ПустаяСтрока(Объект.НаименованиеВторойБазы) Тогда + + НСтрока = НСтр("ru = 'Укажите наименование приложения в Интернете.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.НаименованиеВторойБазы",, Отказ); + + КонецЕсли; + + Если СокрЛП(Объект.ПрефиксИнформационнойБазыИсточника) = СокрЛП(Объект.ПрефиксИнформационнойБазыПриемника) Тогда + + НСтрока = НСтр("ru = 'Префиксы информационных баз должны быть различными.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыИсточника",, Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыПриемника",, Отказ); + + Элементы.ПрефиксИнформационнойБазыИсточникаОбменССервисом.Видимость = Истина; + Элементы.ПрефиксИнформационнойБазыИсточникаОбменССервисом.Доступность = Истина; + Элементы.ПрефиксИнформационнойБазыПриемникаОбменССервисом.Видимость = Истина; + + Элементы.ПрефиксИнформационнойБазыИсточникаОбменЧерезВебСервис.Видимость = Истина; + Элементы.ПрефиксИнформационнойБазыИсточникаОбменЧерезВебСервис.Доступность = Истина; + Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.Видимость = Истина; + Элементы.ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервис.Доступность = Истина; + + КонецЕсли; + + Если Отказ Тогда + Возврат; + КонецЕсли; + + Если ПредусмотреныНастройкиОтборовНаУзле Тогда + + // Проверяем заполнение реквизитов в форме + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПараметрыПодключения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); + ПараметрыФормы.Вставить("Настройки", КонтекстФормыНастройкиУзлов); + ПараметрыФормы.Вставить("ПроверкаЗаполнения"); + + ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиУзлов", ПараметрыФормы, "ОписаниеНастроекВыгрузкиДанных"); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьЗаданиеНастроекДляВторойБазы(Отказ, ТипСоединения) + + Если ПустаяСтрока(Объект.НаименованиеВторойБазы) Тогда + + НСтрока = НСтр("ru = 'Укажите наименование информационной базы.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.НаименованиеВторойБазы",, Отказ); + + КонецЕсли; + + Если СокрЛП(Объект.ПрефиксИнформационнойБазыИсточника) = СокрЛП(Объект.ПрефиксИнформационнойБазыПриемника) Тогда + + НСтрока = НСтр("ru = 'Префиксы информационных баз должны быть различными.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ПрефиксИнформационнойБазыПриемника",, Отказ); + + КонецЕсли; + + Если Отказ Тогда + Возврат; + КонецЕсли; + + Если ПредусмотреныНастройкиОтборовНаУзлеБазыКорреспондента Тогда + + // Проверяем заполнение реквизитов в форме настроек ограничения миграции данных + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); + ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзлеБазыКорреспондента); + + ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиУзлаБазыКорреспондента", ПараметрыФормы, "ОписаниеОграниченийПередачиДанныхБазыКорреспондента"); + + КонецЕсли; + + Если ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента Тогда + + // Проверяем заполнение реквизитов в форме дополнительных настроек + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); + ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); + + ПроверитьЗаполнениеРеквизитовВФорме(Отказ, "ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента", ПараметрыФормы, "ОписаниеЗначенийПоУмолчаниюБазыКорреспондента"); + + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура СтраницаМастераЗаданиеПараметровТранспортаFILE_ПриПереходеДалееНаСервере(Отказ) @@ -2075,7 +3779,7 @@ КонецПроцедуры &НаСервере -Процедура СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными_ПриПереходеДалееНаСервере(Отказ) +Процедура СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными_ОбработкаДлительнойОперацииНаСервере(Отказ) // создаем настройку обмена НастроитьНовыйОбменДаннымиНаСервере(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле); @@ -2117,7 +3821,7 @@ КонецПроцедуры &НаСервере -Процедура СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения_ПриПереходеДалееНаСервере(Отказ) +Процедура СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения_ОбработкаДлительнойОперацииНаСервере(Отказ) ОшибкаПодключенияКомпоненты = Ложь; СтрокаСообщенияОбОшибке = ""; @@ -2133,6 +3837,10 @@ Возврат; КонецЕсли; + ВерсииКорреспондента = ОбменДаннымиСервер.ВерсииКорреспондентаЧерезВнешнееСоединение(ВнешнееСоединение); + + Объект.ВерсияКорреспондента_2_0_1_6 = (ВерсииКорреспондента.Найти("2.0.1.6") <> Неопределено); + Попытка ПланОбменаСуществует = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПланОбменаСуществует(Объект.ИмяПланаОбмена); Исключение @@ -2165,13 +3873,9 @@ Элементы.ПрефиксИнформационнойБазыПриемника.Видимость = Не Объект.ПрефиксИнформационнойБазыПриемникаУстановлен; // Проверка на существование обмена с базой-корреспондентом - Если Объект.ПрефиксИнформационнойБазыПриемникаУстановлен - И Не ПланыОбмена[Объект.ИмяПланаОбмена].НайтиПоКоду(ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(Объект.ПрефиксИнформационнойБазыПриемника)).Пустая() Тогда - - Сообщение = НСтр("ru = 'Обмен данными уже настроен в системе. Используйте существующий обмен.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение,,,, Отказ); + ПроверитьНаличиеСуществующегоОбменаДаннымиСВторойБазой(Отказ); + Если Отказ Тогда Возврат; - КонецЕсли; Объект.НаименованиеВторойБазы = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.НаименованиеПредопределенногоУзлаПланаОбмена(Объект.ИмяПланаОбмена); @@ -2187,8 +3891,26 @@ КонецПроцедуры +&НаСервере +Процедура ПроверитьНаличиеСуществующегоОбменаДаннымиСВторойБазой(Отказ) + + КодУзла = ?(ПустаяСтрока(Объект.КодУзлаКорреспондента), + ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(Объект.ПрефиксИнформационнойБазыПриемника), + Объект.КодУзлаКорреспондента + ); + + Если Не ПустаяСтрока(КодУзла) + И Не ПланыОбмена[Объект.ИмяПланаОбмена].НайтиПоКоду(КодУзла).Пустая() Тогда + + Сообщение = НСтр("ru = 'Обмен данными уже настроен в системе. Используйте существующий обмен.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение,,,, Отказ); + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// РАЗДЕЛ ИНИЦИАЛИЗАЦИИ ПЕРЕХОДОВ ПОМОЩНИКА +// Переопределяемая часть - Инициализация переходов помощника &НаСервере Процедура ТаблицаПереходовПервогоЭтапаНастройкиОбмена() @@ -2202,24 +3924,8 @@ ТаблицаПереходовНоваяСтрока(5, "СтраницаМастераЗаданиеПараметровТранспортаEMAIL", "", "СтраницаНавигацииПродолжение", "СтраницаМастераЗаданиеПараметровТранспортаEMAIL_ПриПереходеДалее",,"СтраницаМастераЗаданиеПараметровТранспортаEMAIL_ПриОткрытии"); ТаблицаПереходовНоваяСтрока(6, "СтраницаМастераНастройкаПараметров", "", "СтраницаНавигацииПродолжение", "СтраницаМастераНастройкаПараметров_ПриПереходеДалее",, "СтраницаМастераНастройкаПараметров_ПриОткрытии"); ТаблицаПереходовНоваяСтрока(7, "СтраницаМастераИтогНастройкиОбмена", "", "СтраницаНавигацииПродолжение",,,"СтраницаМастераИтогНастройкиОбмена_ПриОткрытии"); - ТаблицаПереходовНоваяСтрока(8, "СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными", "", "СтраницаНавигацииОжидание", "СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными_ПриПереходеДалее",,"СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными_ПриОткрытии"); - ТаблицаПереходовНоваяСтрока(9, "СтраницаМастераОкончаниеСВыгрузкойНастройки", "", "СтраницаНавигацииОкончаниеПервогоЭтапа"); - -КонецПроцедуры - -&НаСервере -Процедура ТаблицаПереходовПервогоЭтапаНастройкиОбменаЧерезВнешнееСоединение() - - ТаблицаПереходов.Очистить(); - - ТаблицаПереходовНоваяСтрока(1, "СтраницаМастераНачало", "", "СтраницаНавигацииНачало"); - ТаблицаПереходовНоваяСтрока(2, "СтраницаМастераВыборРежимаРаботыПомощника", "", "СтраницаНавигацииПродолжение"); - ТаблицаПереходовНоваяСтрока(3, "СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения", "", "СтраницаНавигацииОжидание", "СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения_ПриПереходеДалее",,"СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения_ПриОткрытии"); - ТаблицаПереходовНоваяСтрока(4, "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазы", "", "СтраницаНавигацииПродолжение", "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазы_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(5, "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазы", "", "СтраницаНавигацииПродолжение", "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазы_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(6, "СтраницаМастераИтогНастройкиОбмена", "", "СтраницаНавигацииПродолжение",,,"СтраницаМастераИтогНастройкиОбмена_ПриОткрытии_ВнешнееСоединение"); - ТаблицаПереходовНоваяСтрока(7, "СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными", "", "СтраницаНавигацииОжидание", "СтраницаМастераОжиданиеСозданияНастройкиОбменаДаннымиЧерезВнешнееСоединение_ПриПереходеДалее",,"СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными_ПриОткрытии"); - ТаблицаПереходовНоваяСтрока(8, "СтраницаМастераОкончаниеСОбменомПоВнешнемуСоединению", "", "СтраницаНавигацииОкончаниеПервогоЭтапаЧерезВнешнееСоединение"); + ТаблицаПереходовНоваяСтрока(8, "СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными", "", "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(9, "СтраницаМастераОкончаниеСВыгрузкойНастройки", "", "СтраницаНавигацииОкончание"); КонецПроцедуры @@ -2233,6 +3939,128 @@ ТаблицаПереходовНоваяСтрока(3, "СтраницаМастераЗаданиеПараметровТранспортаFTP", "", "СтраницаНавигацииПродолжение", "СтраницаМастераЗаданиеПараметровТранспортаFTP_ПриПереходеДалее",,"СтраницаМастераЗаданиеПараметровТранспортаFTP_ПриОткрытии"); ТаблицаПереходовНоваяСтрока(4, "СтраницаМастераЗаданиеПараметровТранспортаEMAIL", "", "СтраницаНавигацииПродолжение", "СтраницаМастераЗаданиеПараметровТранспортаEMAIL_ПриПереходеДалее",,"СтраницаМастераЗаданиеПараметровТранспортаEMAIL_ПриОткрытии"); ТаблицаПереходовНоваяСтрока(5, "СтраницаМастераНастройкаПараметровВторогоЭтапаНастройки", "", "СтраницаНавигацииПродолжение", "СтраницаМастераНастройкаПараметровВторогоЭтапаНастройки_ПриПереходеДалее",, "СтраницаМастераНастройкаПараметров_ПриОткрытии"); - ТаблицаПереходовНоваяСтрока(6, "СтраницаМастераИтогНастройкиОбмена", "", "СтраницаНавигацииОкончаниеВторогоЭтапа",,,"СтраницаМастераИтогНастройкиОбмена_ПриОткрытии"); + ТаблицаПереходовНоваяСтрока(6, "СтраницаМастераИтогНастройкиОбмена", "", "СтраницаНавигацииОкончание",,,"СтраницаМастераИтогНастройкиОбмена_ПриОткрытии"); + +КонецПроцедуры + +&НаСервере +Процедура ТаблицаПереходовНастройкиОбменаЧерезВнешнееСоединение() + + ТаблицаПереходов.Очистить(); + + ТаблицаПереходовНоваяСтрока(1, "СтраницаМастераНачало", "", "СтраницаНавигацииНачало"); + ТаблицаПереходовНоваяСтрока(2, "СтраницаМастераВыборРежимаРаботыПомощника", "", "СтраницаНавигацииПродолжение"); + ТаблицаПереходовНоваяСтрока(3, "СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения", "", "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединения_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(4, "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазы", "", "СтраницаНавигацииПродолжение", "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазы_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(5, "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазы", "", "СтраницаНавигацииПродолжение", "СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазы_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(6, "СтраницаМастераИтогНастройкиОбмена", "", "СтраницаНавигацииПродолжение",,,"СтраницаМастераИтогНастройкиОбмена_ПриОткрытии_ВнешнееСоединение"); + ТаблицаПереходовНоваяСтрока(7, "СтраницаМастераОжиданиеСозданияНастройкиОбменаДанными", "", "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСозданияНастройкиОбменаДаннымиЧерезВнешнееСоединение_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(8, "СтраницаМастераОкончаниеСОбменомПоВнешнемуСоединению", "", "СтраницаНавигацииОкончание"); + +КонецПроцедуры + +&НаСервере +Процедура ТаблицаПереходовНастройкиОбменаЧерезВебСервис() + + ТаблицаПереходов.Очистить(); + + ТаблицаПереходовНоваяСтрока(1, "СтраницаМастераНачало",, "СтраницаНавигацииНачало"); + ТаблицаПереходовНоваяСтрока(2, "СтраницаМастераВыборРежимаРаботыПомощника", , "СтраницаНавигацииПродолжение"); + + // Задание параметров подключения; Проверка подключения + ТаблицаПереходовНоваяСтрока(3, "СтраницаМастераОжиданиеПроверкиПодключенияКСервису", "", "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеПроверкиПодключенияЧерезВебСервис_ОбработкаДлительнойОперации"); + + // Настройка параметров для выгрузки данных (отборы на узлах) + ТаблицаПереходовНоваяСтрока(4, "СтраницаМастераНастройкаПараметровОбменаДаннымиЧерезВебСервис", "", "СтраницаНавигацииПродолжение", "СтраницаМастераНастройкаПараметровОбменаДанными_ПриПереходеДалее",, "СтраницаМастераНастройкаПараметровОбменаДанными_ПриОткрытии"); + + // Создание настройки обмена; Регистрация справочников для выгрузки + ТаблицаПереходовНоваяСтрока(5, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена", "", "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(6, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбменаДлительнаяОперация_ОбработкаДлительнойОперации"); + + // Получение справочников от корреспондента + ТаблицаПереходовНоваяСтрока(7, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(8, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(9, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Выполнение автоматического сопоставления данных; Получение статистики сопоставления + ТаблицаПереходовНоваяСтрока(10, "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление_ОбработкаДлительнойОперации"); + + // Ручное сопоставление данных + ТаблицаПереходовНоваяСтрока(11, "СтраницаМастераСопоставлениеДанных",, "СтраницаНавигацииПродолжениеТолькоДалее", "СтраницаМастераСопоставлениеДанных_ПриПереходеДалее",, "СтраницаМастераСопоставлениеДанных_ПриОткрытии"); + + // Синхронизация справочников + ТаблицаПереходовНоваяСтрока(12, "СтраницаМастераОжиданиеСинхронизацииСправочниковЗагрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковЗагрузка_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(13, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(14, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(15, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Настройки параметров учета; Значения по умолчанию при загрузке данных. + ТаблицаПереходовНоваяСтрока(16, "СтраницаМастераНастройкиОтраженияДокументовВУчете",, "СтраницаНавигацииПродолжениеТолькоДалее", "СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриПереходеДалее",, "СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриОткрытии"); + + // Сохранение настроек; Регистрация всех данных к выгрузке, кроме справочников + ТаблицаПереходовНоваяСтрока(17, "СтраницаМастераОжиданиеСохраненияНастроек",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСохраненияНастроек_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(18, "СтраницаМастераОжиданиеСохраненияНастроек",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСохраненияНастроекДлительнаяОперация_ОбработкаДлительнойОперации"); + + // Синхронизация всех данных, кроме справочников + ТаблицаПереходовНоваяСтрока(19, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(20, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(21, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(22, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(23, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(24, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + ТаблицаПереходовНоваяСтрока(25, "СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено",, "СтраницаНавигацииОкончание",,, "СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено_ПриОткрытии"); + +КонецПроцедуры + +&НаСервере +Процедура ТаблицаПереходовРасширеннойНастройкиОбменаССервисом() + + ТаблицаПереходов.Очистить(); + + // Задание параметров подключения; Проверка подключения + ТаблицаПереходовНоваяСтрока(1, "СтраницаМастераНачалоНастройкиОбменаССервисом", "", "СтраницаНавигацииНачало"); + ТаблицаПереходовНоваяСтрока(2, "СтраницаМастераОжиданиеПроверкиПодключенияКСервису", "", "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеПроверкиПодключенияЧерезВебСервис_ОбработкаДлительнойОперации"); + + // Настройка параметров для выгрузки данных (отборы на узлах) + ТаблицаПереходовНоваяСтрока(3, "СтраницаМастераНастройкаПараметровОбменаДанными", "", "СтраницаНавигацииПродолжение", "СтраницаМастераНастройкаПараметровОбменаДанными_ПриПереходеДалее",, "СтраницаМастераНастройкаПараметровОбменаДанными_ПриОткрытии"); + + // Создание настройки обмена; Регистрация справочников для выгрузки + ТаблицаПереходовНоваяСтрока(4, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена", "", "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(5, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбмена",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбменаДлительнаяОперация_ОбработкаДлительнойОперации"); + + // Получение справочников от корреспондента + ТаблицаПереходовНоваяСтрока(6, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(7, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(8, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщения",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Выполнение автоматического сопоставления данных; Получение статистики сопоставления + ТаблицаПереходовНоваяСтрока(9, "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставление_ОбработкаДлительнойОперации"); + + // Ручное сопоставление данных + ТаблицаПереходовНоваяСтрока(10, "СтраницаМастераСопоставлениеДанных",, "СтраницаНавигацииПродолжениеТолькоДалее", "СтраницаМастераСопоставлениеДанных_ПриПереходеДалее",, "СтраницаМастераСопоставлениеДанных_ПриОткрытии"); + + // Синхронизация справочников + ТаблицаПереходовНоваяСтрока(11, "СтраницаМастераОжиданиеСинхронизацииСправочниковЗагрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковЗагрузка_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(12, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(13, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(14, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Настройки параметров учета; Значения по умолчанию при загрузке данных. + ТаблицаПереходовНоваяСтрока(15, "СтраницаМастераНастройкиОтраженияДокументовВУчете",, "СтраницаНавигацииПродолжениеТолькоДалее", "СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриПереходеДалее",, "СтраницаМастераНастройкиОтраженияДокументовВУчете_ПриОткрытии"); + + // Сохранение настроек; Регистрация всех данных к выгрузке, кроме справочников + ТаблицаПереходовНоваяСтрока(16, "СтраницаМастераОжиданиеСохраненияНастроек",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСохраненияНастроек_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(17, "СтраницаМастераОжиданиеСохраненияНастроек",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСохраненияНастроекДлительнаяОперация_ОбработкаДлительнойОперации"); + + // Синхронизация всех данных, кроме справочников + ТаблицаПереходовНоваяСтрока(18, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(19, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(20, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(21, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(22, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(23, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузка",, "СтраницаНавигацииОжидание",,,, Истина, "СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + ТаблицаПереходовНоваяСтрока(24, "СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено",, "СтраницаНавигацииОкончание",,, "СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершено_ПриОткрытии"); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html index 513520e53..2ec5985cc 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html @@ -5,5 +5,5 @@
  • Ограничения миграции данных между парой обменивающихся информационных баз;
  • Значения по умолчанию для использования при загрузке данных;
  • Префикс информационной базы, если он не был задан ранее.

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

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

    -

    Особенности настройки обмена в клиент-серверном варианте

    -

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

    \ No newline at end of file +

    Особенности настройки обмена в клиент-серверном варианте

    +


    При настройке обмена данными в клиент-серверном варианте информационной базы необходимо иметь в виду, что обмен данными выполняется на компьютере, на котором установлен сервер 1С:Предприятия. Для сервера 1С:Предприятия под управлением операционной системы Microsoft Windows это путь вида:
    \\servername\resource
    а для сервера под управлением Linux:
    //servername/resource.
    Необходимо убедиться, что каталог обмена информацией доступен для чтения и записи пользователю операционной системы, от имени которого запущен сервер 1С:Предприятия. Если это не так, то необходимо дать этому пользователю необходимые права, или выбрать другого пользователя для запуска сервера 1С:Предприятия с необходимыми правами на каталог обмена. Эти же рекомендации актуальны и для доступа к ресурсам FTP и электронной почты. Подробнее об администрировании сервера 1С:Предприятия см. документацию к платформе 1С:Предприятие.

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl index 3573e28ea..97d0f7c59 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl @@ -1,11 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// -// ПРИКЛАДНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ МАСТЕРА -//////////////////////////////////////////////////////////////////////////////// - Перем ПолеСтрокаСообщенияОбОшибке; // Строка - переменная содержит строку с сообщением об ошибке //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции // Выполняет действия при создании нового обмена данными: // - создает или обновляет узлы текущего плана обмена @@ -18,16 +17,23 @@ // Параметры: // Отказ – Булево – флаг отказа; поднимается в случае возникновения ошибок при работе процедуры // -Процедура ВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле) Экспорт +Процедура ВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, + НастройкаОтборовНаУзле, + ЗначенияПоУмолчаниюНаУзле, + РегистрироватьДанныеДляВыгрузки = Истина) Экспорт КодЭтогоУзла = ПолучитьКодУзлаЭтойБазы(ПрефиксИнформационнойБазыИсточника); КодНовогоУзла = ?(ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными", КодНовогоУзлаВторойБазы, ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ПрефиксИнформационнойБазыПриемника)); - ВыполнитьДействияПоНастройкеОбменаДанными(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла); + ВыполнитьДействияПоНастройкеОбменаДанными(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла, РегистрироватьДанныеДляВыгрузки); КонецПроцедуры -Процедура ВыполнитьДействияПоНастройкеНовогоОбменаДаннымиЧерезВебСервис(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла) Экспорт +Процедура ВыполнитьДействияПоНастройкеНовогоОбменаДаннымиВСервисе(Отказ, + НастройкаОтборовНаУзле, + ЗначенияПоУмолчаниюНаУзле, + Знач КодЭтогоУзла, + Знач КодНовогоУзла) Экспорт НастройкаОтборовНаУзле = ПолучитьЗначенияНастройкиОтборов(НастройкаОтборовНаУзле); ЗначенияПоУмолчаниюНаУзле = ПолучитьЗначенияНастройкиОтборов(ЗначенияПоУмолчаниюНаУзле); @@ -36,7 +42,120 @@ КонецПроцедуры -Процедура ВыполнитьДействияПоНастройкеНовогоОбменаДаннымиЧерезВнешнееСоединение(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, НастройкаОтборовНаУзлеБазыКорреспондента, ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента) Экспорт +Процедура ВыполнитьДействияПоНастройкеНовогоОбменаДаннымиЧерезВебСервисВДвухБазах(Отказ, + НастройкаОтборовНаУзле, + ДлительнаяОперация, + ИдентификаторОперацииСозданияОбменаДанными) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ЗначенияПоУмолчаниюНаУзле = Новый Структура; + + ПолеСтрокаСообщенияОбОшибке = Неопределено; + ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; + ИспользоватьПараметрыТранспортаCOM = Ложь; + + КодЭтогоУзла = ПолучитьКодУзлаЭтойБазы(ПрефиксИнформационнойБазыИсточника); + КодНовогоУзла = ПолучитьКодУзлаКорреспондента(); + + ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); + + ЗаполнитьЗначенияСвойств(ПараметрыПодключения, ЭтотОбъект); + + Если ВерсияКорреспондента_2_0_1_6 Тогда + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения); + Иначе + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения); + КонецЕсли; + + Если WSПрокси = Неопределено Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + + // создаем новый узел + СоздатьОбновитьУзлыПланаОбмена(НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла); + + // устанавливаем признак начальной выгрузки данных для узла + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьПризнакНачальнойВыгрузкиДанных(УзелИнформационнойБазы); + + // загружаем настройки транспорта сообщений + ОбновитьНастройкиТранспортаСообщенийОбмена(); + + // обновляем значение константы префикса ИБ + Если Не ПрефиксИнформационнойБазыИсточникаУстановлен Тогда + + ОбновитьЗначениеКонстантыПрефиксаИнформационнойБазы(); + + КонецЕсли; + + // Выгружаем параметры помощника в строку + СтрокаПараметровМастераXML = ВыполнитьВыгрузкуПараметровМастера(Отказ); + + Если Отказ Тогда + ВызватьИсключение НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки.'"); + КонецЕсли; + + Если ВерсияКорреспондента_2_0_1_6 Тогда + + Сериализатор = Новый СериализаторXDTO(WSПрокси.ФабрикаXDTO); + + WSПрокси.CreateExchange(ИмяПланаОбмена, + СтрокаПараметровМастераXML, + Сериализатор.ЗаписатьXDTO(НастройкаОтборовНаУзле), + Сериализатор.ЗаписатьXDTO(ЗначенияПоУмолчаниюНаУзле) + ); + + Иначе + + WSПрокси.CreateExchange(ИмяПланаОбмена, + СтрокаПараметровМастераXML, + ЗначениеВСтрокуВнутр(НастройкаОтборовНаУзле), + ЗначениеВСтрокуВнутр(ЗначенияПоУмолчаниюНаУзле) + ); + + КонецЕсли; + + Исключение + + СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); + + КонецПопытки; + + Если Отказ Тогда + + ОтменитьТранзакцию(); + + Возврат; + + Иначе + ЗафиксироватьТранзакцию(); + КонецЕсли; + + // обновляем повторно используемые значения МРО + ОбменДаннымиСервер.ОбновитьПовторноИспользуемыеЗначенияМРОПриНеобходимости(); + + // выполняем регистрацию изменений только справочников и ПВХ + ЗарегистрироватьИзмененияСправочников(Отказ); + + // выполняем регистрацию изменений во второй ИБ + WSПрокси.RegisterOnlyCatalogData( + ИмяПланаОбмена, + ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена), + ДлительнаяОперация, + ИдентификаторОперацииСозданияОбменаДанными + ); + +КонецПроцедуры + +Процедура ВыполнитьДействияПоНастройкеНовогоОбменаДаннымиЧерезВнешнееСоединение(Отказ, + НастройкаОтборовНаУзле, + ЗначенияПоУмолчаниюНаУзле, + НастройкаОтборовНаУзлеБазыКорреспондента, + ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента) Экспорт ПолеСтрокаСообщенияОбОшибке = Неопределено; ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM; @@ -64,20 +183,6 @@ // устанавливаем признак начальной выгрузки данных для узла РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьПризнакНачальнойВыгрузкиДанных(УзелИнформационнойБазы); - // загружаем правила конвертации - Если ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбмена") Тогда - - ОбменДаннымиСервер.ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, "ПравилаКонвертацииОбъектов", "ПравилаОбмена"); - - КонецЕсли; - - // загружаем правила регистрации - Если ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаРегистрации") Тогда - - ОбменДаннымиСервер.ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, "ПравилаРегистрацииОбъектов", "ПравилаРегистрации"); - - КонецЕсли; - // загружаем настройки транспорта сообщений ОбновитьНастройкиТранспортаСообщенийОбменаCOM(); @@ -109,7 +214,25 @@ КонецЕсли; // Выполняем создание настройки обмена во второй ИБ через внешнее соединение - ПомощникСозданияОбменаДанными.ВнешнееСоединениеВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, ЗначениеВСтрокуВнутр(НастройкаОтборовНаУзлеБазыКорреспондента), ЗначениеВСтрокуВнутр(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента), ПрефиксИнформационнойБазыПриемникаУстановлен, ПрефиксИнформационнойБазыПриемника); + Если ВерсияКорреспондента_2_0_1_6 Тогда + + ПомощникСозданияОбменаДанными.ВнешнееСоединениеВыполнитьДействияПоНастройкеНовогоОбменаДанными_2_0_1_6(Отказ, + ОбщегоНазначения.ЗначениеВСтрокуXML(НастройкаОтборовНаУзлеБазыКорреспондента), + ОбщегоНазначения.ЗначениеВСтрокуXML(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента), + ПрефиксИнформационнойБазыПриемникаУстановлен, + ПрефиксИнформационнойБазыПриемника + ); + + Иначе + + ПомощникСозданияОбменаДанными.ВнешнееСоединениеВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, + ЗначениеВСтрокуВнутр(НастройкаОтборовНаУзлеБазыКорреспондента), + ЗначениеВСтрокуВнутр(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента), + ПрефиксИнформационнойБазыПриемникаУстановлен, + ПрефиксИнформационнойБазыПриемника + ); + + КонецЕсли; Если Отказ Тогда Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'"); @@ -144,10 +267,102 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ ДЛЯ РАБОТЫ ЧЕРЕЗ ВНЕШНЕЕ СОЕДИНЕНИЕ +Процедура ОбновитьНастройкиОбменаДанными(Отказ, + ЗначенияПоУмолчаниюНаУзле, + ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, + ДлительнаяОперация, + ИдентификаторОперацииСозданияОбменаДанными) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПолеСтрокаСообщенияОбОшибке = Неопределено; + + ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); + + ЗаполнитьЗначенияСвойств(ПараметрыПодключения, ЭтотОбъект); + + Если ВерсияКорреспондента_2_0_1_6 Тогда + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения); + Иначе + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения); + КонецЕсли; + + Если WSПрокси = Неопределено Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + + // обновляем настройки для узла + УзелИнформационнойБазыОбъект = УзелИнформационнойБазы.ПолучитьОбъект(); + + // установка значений по умолчанию + УстановитьЗначенияПоУмолчаниюНаУзле(УзелИнформационнойБазыОбъект, ЗначенияПоУмолчаниюНаУзле); + + УзелИнформационнойБазыОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + УзелИнформационнойБазыОбъект.Записать(); + + // устанавливаем признак начальной выгрузки данных для узла + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьПризнакНачальнойВыгрузкиДанных(УзелИнформационнойБазы); + + Если ВерсияКорреспондента_2_0_1_6 Тогда + + Сериализатор = Новый СериализаторXDTO(WSПрокси.ФабрикаXDTO); + + WSПрокси.UpdateExchange( + ИмяПланаОбмена, + ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена), + Сериализатор.ЗаписатьXDTO(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента) + ); + Иначе + + WSПрокси.UpdateExchange( + ИмяПланаОбмена, + ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена), + ЗначениеВСтрокуВнутр(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента) + ); + КонецЕсли; + + Исключение + + СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); + + КонецПопытки; + + Если Отказ Тогда + + ОтменитьТранзакцию(); + + Возврат; + + Иначе + ЗафиксироватьТранзакцию(); + КонецЕсли; + + // выполняем регистрацию изменений всех данных, кроме справочников и ПВХ + ЗарегистрироватьИзмененияВсехДанныхКромеСправочников(Отказ); + + // выполняем регистрацию изменений во второй ИБ + WSПрокси.RegisterAllDataExceptCatalogs( + ИмяПланаОбмена, + ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена), + ДлительнаяОперация, + ИдентификаторОперацииСозданияОбменаДанными + ); + +КонецПроцедуры -Процедура ВнешнееСоединениеВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, НастройкаОтборовНаУзлеБазыКорреспондента, ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, ПрефиксИнформационнойБазыУстановлен, ПрефиксИнформационнойБазы) Экспорт +//////////////////////////////////////////////////////////////////////////////// +// Для работы через внешнее соединение + +Процедура ВнешнееСоединениеВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, + НастройкаОтборовНаУзлеБазыКорреспондента, + ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, + ПрефиксИнформационнойБазыУстановлен, + ПрефиксИнформационнойБазы + ) Экспорт НастройкаОтборовНаУзле = ПолучитьЗначенияНастройкиОтборов(ЗначениеИзСтрокиВнутр(НастройкаОтборовНаУзлеБазыКорреспондента)); ЗначенияПоУмолчаниюНаУзле = ПолучитьЗначенияНастройкиОтборов(ЗначениеИзСтрокиВнутр(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента)); @@ -175,20 +390,73 @@ // устанавливаем признак начальной выгрузки данных для узла РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьПризнакНачальнойВыгрузкиДанных(УзелИнформационнойБазы); - // загружаем правила конвертации - Если ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбмена") Тогда + // загружаем настройки транспорта сообщений + ОбновитьНастройкиТранспортаСообщенийОбменаCOM(); + + // обновляем значение константы префикса ИБ + Если Не ПрефиксИнформационнойБазыУстановлен Тогда - ОбменДаннымиСервер.ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, "ПравилаКонвертацииОбъектов", "ПравилаОбмена"); + ЗначениеДоОбновления = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); + + Если ЗначениеДоОбновления <> ПрефиксИнформационнойБазы Тогда + + Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Установить(СокрЛП(ПрефиксИнформационнойБазы)); + + КонецЕсли; КонецЕсли; - // загружаем правила регистрации - Если ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаРегистрации") Тогда + Исключение + + СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); + + КонецПопытки; + + Если Отказ Тогда + + ОтменитьТранзакцию(); + + Возврат; + + Иначе + ЗафиксироватьТранзакцию(); + КонецЕсли; + +КонецПроцедуры + +Процедура ВнешнееСоединениеВыполнитьДействияПоНастройкеНовогоОбменаДанными_2_0_1_6(Отказ, + НастройкаОтборовНаУзлеБазыКорреспондента, + ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, + ПрефиксИнформационнойБазыУстановлен, + ПрефиксИнформационнойБазы + ) Экспорт + + НастройкаОтборовНаУзле = ПолучитьЗначенияНастройкиОтборов(ОбщегоНазначения.ЗначениеИзСтрокиXML(НастройкаОтборовНаУзлеБазыКорреспондента)); + ЗначенияПоУмолчаниюНаУзле = ПолучитьЗначенияНастройкиОтборов(ОбщегоНазначения.ЗначениеИзСтрокиXML(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента)); + + ПолеСтрокаСообщенияОбОшибке = Неопределено; + ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; + + КодЭтогоУзла = ПолучитьКодУзлаЭтойБазы(ПрефиксИнформационнойБазыИсточника); + КодНовогоУзла = КодНовогоУзлаВторойБазы; + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + + Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменДанными") = Ложь Тогда - ОбменДаннымиСервер.ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, "ПравилаРегистрацииОбъектов", "ПравилаРегистрации"); + Константы.ИспользоватьОбменДанными.Установить(Истина); КонецЕсли; + // создаем новый узел + СоздатьОбновитьУзлыПланаОбмена(НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла); + + // устанавливаем признак начальной выгрузки данных для узла + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьПризнакНачальнойВыгрузкиДанных(УзелИнформационнойБазы); + // загружаем настройки транспорта сообщений ОбновитьНастройкиТранспортаСообщенийОбменаCOM(); @@ -239,8 +507,48 @@ КонецПроцедуры +Процедура ВнешнееСоединениеОбновитьНастройкиОбменаДанными(ЗначенияПоУмолчаниюНаУзле) Экспорт + + ЗначенияПоУмолчаниюНаУзле = ПолучитьЗначенияНастройкиОтборов(ЗначенияПоУмолчаниюНаУзле); + + НачатьТранзакцию(); + Попытка + + // обновляем настройки для узла + УзелИнформационнойБазыОбъект = УзелИнформационнойБазы.ПолучитьОбъект(); + + // установка значений по умолчанию + УстановитьЗначенияПоУмолчаниюНаУзле(УзелИнформационнойБазыОбъект, ЗначенияПоУмолчаниюНаУзле); + + УзелИнформационнойБазыОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + УзелИнформационнойБазыОбъект.Записать(); + + // устанавливаем признак начальной выгрузки данных для узла + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьПризнакНачальнойВыгрузкиДанных(УзелИнформационнойБазы); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + // +Процедура ВебСервисВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле) Экспорт + + НастройкаОтборовНаУзле = ПолучитьЗначенияНастройкиОтборов(НастройкаОтборовНаУзле); + ЗначенияПоУмолчаниюНаУзле = ПолучитьЗначенияНастройкиОтборов(ЗначенияПоУмолчаниюНаУзле); + + ВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, + НастройкаОтборовНаУзле, + ЗначенияПоУмолчаниюНаУзле, + Ложь + ); + +КонецПроцедуры + // Выполняет выгрузку параметров помощника во временное хранилище для продолжения настройки обмена во второй базе // // Параметры: @@ -389,9 +697,9 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ СВОЙСТВА +// Функции-свойства -// Функция-свойство: строка, которая содержит сообщение об ошибке при обмене данными +// Сообщение об ошибке при обмене данными // // Тип: Строка // @@ -408,9 +716,9 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +// Вспомогательные служебные процедуры и функции -Процедура ВыполнитьДействияПоНастройкеОбменаДанными(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла) +Процедура ВыполнитьДействияПоНастройкеОбменаДанными(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла, РегистрироватьДанныеДляВыгрузки = Истина) УстановитьПривилегированныйРежим(Истина); @@ -427,21 +735,6 @@ КонецЕсли; - // загружаем правила конвертации - Если Не ЭтоНастройкаРаспределеннойИнформационнойБазы - И ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбмена") Тогда - - ОбменДаннымиСервер.ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, "ПравилаКонвертацииОбъектов", "ПравилаОбмена"); - - КонецЕсли; - - // загружаем правила регистрации - Если ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаРегистрации") Тогда - - ОбменДаннымиСервер.ЗагрузитьПравилаДляОбменаДанными(Отказ, ИмяПланаОбмена, "ПравилаРегистрацииОбъектов", "ПравилаРегистрации"); - - КонецЕсли; - // загружаем настройки транспорта сообщений ОбновитьНастройкиТранспортаСообщенийОбмена(); @@ -475,13 +768,17 @@ ЗафиксироватьТранзакцию(); КонецЕсли; - // обновляем повторно используемые значения МРО - ОбменДаннымиСервер.ОбновитьПовторноИспользуемыеЗначенияМРОПриНеобходимости(); - - Если Не ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда + Если РегистрироватьДанныеДляВыгрузки Тогда - // выполняем регистрацию изменений на узле плана обмена - ЗарегистрироватьИзмененияДляОбмена(Отказ); + // обновляем повторно используемые значения МРО + ОбменДаннымиСервер.ОбновитьПовторноИспользуемыеЗначенияМРОПриНеобходимости(); + + Если Не ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда + + // выполняем регистрацию изменений на узле плана обмена + ЗарегистрироватьИзмененияДляОбмена(Отказ); + + КонецЕсли; КонецЕсли; @@ -501,6 +798,7 @@ ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); ЭтотУзелОбъект.Код = КодЭтогоУзла; ЭтотУзелОбъект.Наименование = НаименованиеЭтойБазы; + ЭтотУзелОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); ЭтотУзелОбъект.Записать(); КонецЕсли; @@ -547,6 +845,7 @@ НовыйУзел.НомерОтправленного = 0; НовыйУзел.НомерПринятого = 0; + НовыйУзел.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); НовыйУзел.Записать(); УзелИнформационнойБазы = НовыйУзел.Ссылка; @@ -562,6 +861,8 @@ СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", 200); СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", 200); + СтруктураЗаписи.Вставить("WSИспользоватьПередачуБольшогоОбъемаДанных", Истина); + ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "CombiВидТранспортаСообщенийОбмена"); ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "EMAILМаксимальныйДопустимыйРазмерСообщения"); ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "EMAILСжиматьФайлИсходящегоСообщения"); @@ -576,9 +877,7 @@ ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "FTPСоединениеПорт"); ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "FTPСоединениеПуть"); ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "WSURLВебСервиса"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "WSURLПространстваИменСервиса"); ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "WSИмяПользователя"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "WSИмяСервиса"); ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "WSПароль"); ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "ПарольАрхиваСообщенияОбмена"); @@ -619,7 +918,8 @@ ЗначениеДоОбновления = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); - Если ЗначениеДоОбновления <> ПрефиксИнформационнойБазыИсточника Тогда + Если ПустаяСтрока(ЗначениеДоОбновления) + И ЗначениеДоОбновления <> ПрефиксИнформационнойБазыИсточника Тогда Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Установить(СокрЛП(ПрефиксИнформационнойБазыИсточника)); @@ -643,44 +943,87 @@ КонецПроцедуры -Процедура ЗарегистрироватьИзмененияДляОбмена(Отказ) +Процедура ЗарегистрироватьИзмененияДляОбмена(Отказ, Данные = Неопределено) Попытка - - СтандартнаяОбработка = Истина; - - ОбменДаннымиПереопределяемый.РегистрацияИзмененийНачальнойВыгрузкиДанных(УзелИнформационнойБазы, СтандартнаяОбработка); - + ОбменДаннымиСервер.ЗарегистрироватьДанныеДляНачальнойВыгрузки(УзелИнформационнойБазы, Данные); Исключение СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); Возврат; КонецПопытки; - Если СтандартнаяОбработка Тогда - - ПланыОбмена.ЗарегистрироватьИзменения(УзелИнформационнойБазы); - - КонецЕсли; +КонецПроцедуры + +Процедура ЗарегистрироватьИзмененияСправочников(Отказ) - Если ОбменДаннымиПовтИсп.ПланОбменаСодержитОбъект(ИмяПланаОбмена, Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ПолноеИмя()) Тогда + Данные = ОбменДаннымиСервер.СправочникиПланаОбмена(ИмяПланаОбмена); + + Если Данные.Количество() > 0 Тогда - ПланыОбмена.УдалитьРегистрациюИзменений(УзелИнформационнойБазы, Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз); + ЗарегистрироватьИзмененияДляОбмена(Отказ, Данные); КонецЕсли; КонецПроцедуры -Процедура УстановитьЗначенияОтборовНаУзле(УзелПланаОбмена, НастройкаОтборовНаУзле) +Процедура ЗарегистрироватьИзмененияВсехДанныхКромеСправочников(Отказ) - Для Каждого НастройкаОтбора ИЗ НастройкаОтборовНаУзле Цикл + Данные = ОбменДаннымиСервер.ВсеДанныеПланаОбменаКромеСправочников(ИмяПланаОбмена); + + Если Данные.Количество() > 0 Тогда - Если ТипЗнч(НастройкаОтбора.Значение) = Тип("Структура") Тогда + ЗарегистрироватьИзмененияДляОбмена(Отказ, Данные); + + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьЗначенияОтборовНаУзле(УзелПланаОбмена, Настройки) + + НастройкаОтборов = ПланыОбмена[ИмяПланаОбмена].НастройкаОтборовНаУзле(); + + Для Каждого Элемент Из НастройкаОтборов Цикл + + Ключ = Элемент.Ключ; + Значение = Неопределено; + + Если Настройки.Свойство(Ключ, Значение) Тогда - ЗаполнитьТаблицуУзлаПланаОбмена(УзелПланаОбмена, НастройкаОтбора.Значение, НастройкаОтбора.Ключ); - - Иначе // примитивные типы - - УзелПланаОбмена[НастройкаОтбора.Ключ] = НастройкаОтбора.Значение; + Если ТипЗнч(Значение) = Тип("Массив") Тогда + + ДанныеРеквизита = ПолучитьСсылочныйТипИзПервогоРеквизитаТабличнойЧастиПланаОбмена(ИмяПланаОбмена, Ключ); + + Если ДанныеРеквизита = Неопределено Тогда + Продолжить; + КонецЕсли; + + ТаблицаУзла = УзелПланаОбмена[Ключ]; + + ТаблицаУзла.Очистить(); + + Для Каждого СтрокаТаблицы Из Значение Цикл + + Если СтрокаТаблицы.Использовать Тогда + + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДанныеРеквизита.Тип.ПривестиЗначение()); + + ЗначениеРеквизита = МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаТаблицы.УникальныйИдентификаторСсылки)); + + ТаблицаУзла.Добавить()[ДанныеРеквизита.Имя] = ЗначениеРеквизита; + + КонецЕсли; + + КонецЦикла; + + ИначеЕсли ТипЗнч(Значение) = Тип("Структура") Тогда + + ЗаполнитьТаблицуУзлаПланаОбмена(УзелПланаОбмена, Значение, Ключ); + + Иначе // примитивные типы + + УзелПланаОбмена[Ключ] = Значение; + + КонецЕсли; КонецЕсли; @@ -868,7 +1211,7 @@ Возврат Результат; КонецФункции -Функция ПолучитьКодУзлаЭтойБазы(ПрефиксИнформационнойБазыЗаданныйПользователем) +Функция ПолучитьКодУзлаЭтойБазы(Знач ПрефиксИнформационнойБазыЗаданныйПользователем) Если ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" И ВерсияФорматаФайлаНастроекОбменаДанными = "1.0" Тогда @@ -894,7 +1237,35 @@ Возврат ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(Результат); КонецФункции -// +Функция ПолучитьКодУзлаКорреспондента() + + Если Не ПустаяСтрока(КодУзлаКорреспондента) Тогда + + Возврат КодУзлаКорреспондента; + + КонецЕсли; + + Возврат ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ПрефиксИнформационнойБазыПриемника); +КонецФункции + +Функция ПолучитьСсылочныйТипИзПервогоРеквизитаТабличнойЧастиПланаОбмена(Знач ИмяПланаОбмена, Знач ИмяТабличнойЧасти) + + ТабличнаяЧасть = Метаданные.ПланыОбмена[ИмяПланаОбмена].ТабличныеЧасти[ИмяТабличнойЧасти]; + + Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл + + Тип = Реквизит.Тип.Типы()[0]; + + Если ОбщегоНазначения.ЭтоСсылка(Тип) Тогда + + Возврат Новый Структура("Имя, Тип", Реквизит.Имя, Реквизит.Тип); + + КонецЕсли; + + КонецЦикла; + + Возврат Неопределено; +КонецФункции Процедура ПрочитатьПараметрыВСтруктуру(Отказ, СтрокаXML, СтруктураНастроек) @@ -939,7 +1310,7 @@ КонецПроцедуры -Процедура ВыполнитьЗагрузкуПараметровМастера(Отказ, СтрокаXML) +Процедура ВыполнитьЗагрузкуПараметровМастера(Отказ, СтрокаXML) Экспорт Перем СтруктураНастроек; @@ -1120,27 +1491,13 @@ КонецПроцедуры -// - Процедура СообщитьИнформациюОбОшибке(ИнформацияОбОшибке, Отказ) - ПолучитьПервуюИнформациюОбОшибке(ИнформацияОбОшибке); + ПолеСтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); - ПолеСтрокаСообщенияОбОшибке = ИнформацияОбОшибке.Описание; + ОбменДаннымиСервер.СообщитьОбОшибке(КраткоеПредставлениеОшибки(ИнформацияОбОшибке), Отказ); - ОбменДаннымиСервер.СообщитьОбОшибке(СтрокаСообщенияОбОшибке(), Отказ); - -КонецПроцедуры - -Процедура ПолучитьПервуюИнформациюОбОшибке(ИнформацияОбОшибке) - - Если ИнформацияОбОшибке.Причина <> Неопределено Тогда - - ИнформацияОбОшибке = ИнформацияОбОшибке.Причина; - - ПолучитьПервуюИнформациюОбОшибке(ИнформацияОбОшибке); - - КонецЕсли; + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке()); КонецПроцедуры @@ -1149,4 +1506,3 @@ Возврат "1.1"; КонецФункции - diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключения/_files/ПараметрыПодключения.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключения/_files/ПараметрыПодключения.png deleted file mode 100644 index 01ca0675d..000000000 Binary files a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключения/_files/ПараметрыПодключения.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключения/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключения/ru.html index 82dac87f3..adb72f566 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключения/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключения/ru.html @@ -1,14 +1,10 @@ - -

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

    + +

    Параметры подключения +

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

    -

    Параметры подключения 

    -

    Обратите внимание на следующие параметры (все они могут быть скопированы из формы):

    -

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

    -

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

    -

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

    -

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

    -

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

    -

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

    -

    Режим - файловый

    -

    Каталог - C:\Bases\Библиотека стандартных подсистем (демо)

    -

    Пользователь - Фёдоров

    \ No newline at end of file +

    Обратите внимание на следующие параметры (все они могут быть скопированы из формы "О программе..."):

    +
    • Режим - либо файловый либо серверный. Если режим файловый, то информационная база находится в каталоге на данном компьютере или в локальной сети. Если режим серверный, то для подключения нужно знать имя сервера и имя информационной базы на сервере. +
    • Каталог - для файлового режима указывается каталог, в котором располагается информационная база. +
    • Сервер - для серверного режима указывается имя сервера 1С:Предприятия, на котором расположена информационная база. +
    • База - для серверного режима указывается имя информационной базы на сервере 1С:Предприятия. +
    • Пользователь - имя пользователя, который вошел в информационную базу. Если в имени пользователя присутствует ";", то в качестве имени пользователя для подключения нужно использовать имя от начала строки до ";".
    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКВебСервису/Template.htmldoc b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКВебСервису/Template.htmldoc new file mode 100644 index 000000000..1621f1d23 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКВебСервису/Template.htmldoc @@ -0,0 +1,4 @@ + + + + diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКВебСервису/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКВебСервису/ru.html new file mode 100644 index 000000000..55605b3ca --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКВебСервису/ru.html @@ -0,0 +1,7 @@ + +

    Параметры подключения +

    +

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

    +

    Обратите внимание на следующие параметры (все они могут быть скопированы из формы "О программе..."):

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

     

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКСервису/Template.htmldoc b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКСервису/Template.htmldoc new file mode 100644 index 000000000..1621f1d23 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКСервису/Template.htmldoc @@ -0,0 +1,4 @@ + + + + diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКСервису/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКСервису/ru.html new file mode 100644 index 000000000..f2ea212cc --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКСервису/ru.html @@ -0,0 +1,4 @@ + +

    Параметры подключения +

    +

    Для настройки обмена данными с приложением, расположенном в Интернете, необходимо указать в поле Адрес веб-ссылку к этому приложению (точно такую же, как при открытии этого приложения в браузере).
    Например: http://www.1cfresh.com/ea_demo/123/
    В полях Пользователь и Пароль необходимо указать имя и пароль администратора приложения.

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПрефиксВторойИнформационнойБазы/_files/КакОпределитьПрефиксВторойИнформационнойБазы.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПрефиксВторойИнформационнойБазы/_files/КакОпределитьПрефиксВторойИнформационнойБазы.png deleted file mode 100644 index 715cc4ec0..000000000 Binary files a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПрефиксВторойИнформационнойБазы/_files/КакОпределитьПрефиксВторойИнформационнойБазы.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПрефиксВторойИнформационнойБазы/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПрефиксВторойИнформационнойБазы/ru.html index a1afccd04..73e6c70e5 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПрефиксВторойИнформационнойБазы/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПрефиксВторойИнформационнойБазы/ru.html @@ -1,5 +1,4 @@ - -

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

    -

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

    -

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

    -

     

    \ No newline at end of file + +

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

    +

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

    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакСформироватьФайлСНастройкамиОбменаДанными/_files/pp1.png b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакСформироватьФайлСНастройкамиОбменаДанными/_files/pp1.png deleted file mode 100644 index d5bf74662..000000000 Binary files a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакСформироватьФайлСНастройкамиОбменаДанными/_files/pp1.png and /dev/null differ diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакСформироватьФайлСНастройкамиОбменаДанными/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакСформироватьФайлСНастройкамиОбменаДанными/ru.html index 4226cda12..8b9547d9c 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакСформироватьФайлСНастройкамиОбменаДанными/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакСформироватьФайлСНастройкамиОбменаДанными/ru.html @@ -1,7 +1,8 @@ - -

      Файл с настройками обмена данными

    + +

    Файл с настройками обмена данными +

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

    • перейти в первую информационную базу
    • перейти в форму обменов данными
    • выбрать требуемый обмен данными и открыть его форму -
    • в командной панели формы следует выбрать пункт меню: "Параметры обмена данными" –> "Получить настройки обмена данными для второй информационной базы..."

    \ No newline at end of file +
  • в командной панели формы следует выбрать пункт меню: "Параметры обмена данными" –> "Получить настройки обмена данными для второй информационной базы..."
  • \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo index 3545cce39..a1018c292 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo @@ -83,7 +83,7 @@ COMИмяПользователя ru - Имя пользователя + Пользователь String @@ -134,7 +134,7 @@ COMПарольПользователя ru - Пароль пользователя + Пароль String @@ -323,20 +323,7 @@ WSURLВебСервиса ru - Строка подключения к базе корреспонденту - - - String - - - - - - - WSURLПространстваИменСервиса - - ru - URL Пространства имен сервиса + Адрес String @@ -349,7 +336,7 @@ WSИмяПользователя ru - WSИмя пользователя + Пользователь String @@ -360,26 +347,11 @@ - - WSИмяСервиса - - ru - Имя сервиса - - - String - - 150 - - - - - WSПароль ru - WSПароль + Пароль String @@ -387,6 +359,7 @@ 50 + true @@ -405,6 +378,18 @@ + + ВерсияКорреспондента_2_0_1_6 + + ru + Версия корреспондента 2 0 1 6 + + + Boolean + + + + ВерсияФорматаФайлаНастроекОбменаДанными @@ -432,6 +417,19 @@ + + ИмяВременногоКаталогаСообщенийОбмена + + ru + Имя временного каталога сообщений обмена + + + String + + + + + ИмяПланаОбмена @@ -473,6 +471,19 @@ + + ИмяФайлаСообщенияОбмена + + ru + Имя файла сообщения обмена + + + String + + + + + ИспользоватьПараметрыТранспортаCOM @@ -530,7 +541,7 @@ String - 3 + 9 @@ -545,7 +556,22 @@ String - 3 + 9 + + + + + + + КодУзлаКорреспондента + + ru + Код узла корреспондента + + + String + + 9 @@ -581,6 +607,22 @@ + + НомерВходящегоСообщения + + ru + Номер входящего сообщения + + + Number + + 10 + true + + + + + ПарольАрхиваСообщенияОбмена @@ -684,6 +726,284 @@ + + + + + + ИнформацияСтатистики + + ru + Информация статистики + + + Use + LineNumber + + Use + + + + + ДанныеУспешноЗагружены + + ru + Данные успешно загружены + + + Boolean + + + + + + + ИмяТаблицыПриемника + + ru + Имя таблицы + + + String + + + + + + + + ИндексКартинки + + Number + + 1 + + + + + + + + ИспользоватьПредварительныйПросмотр + + ru + Использовать предварительный просмотр + + + Boolean + + + + + + + Ключ + + ru + Ключ + + Ключ строки для связи с деревом значений на форме + + String + + + + + + + + КоличествоОбъектовВИсточнике + + ru + Объектов в базе-источнике, шт + + + Number + + 10 + + + + + + + + КоличествоОбъектовВПриемнике + + ru + Объектов в этой базе, шт + + + Number + + 10 + + + + + + + + КоличествоОбъектовНесопоставленных + + ru + Осталось сопоставить, шт + + + Number + + 10 + + + + + + + + КоличествоОбъектовСопоставленных + + ru + Объектов сопоставленных, шт + + + Number + + 10 + + + + + + + + ОдинКоМногим + + ru + Один ко многим + + + Boolean + + + + + + + ПоляПоиска + + ru + Поля поиска + + Поля поиска по умолчанию + + String + + + + + + + + ПоляТаблицы + + ru + Поля таблицы + + Поля таблицы, для которых определены правила конвертации свойств + + String + + + + + + + + ПроцентСопоставленияОбъектов + + ru + Сопоставление, % + + + Number + + 3 + true + + + + + + + + СинхронизироватьПоИдентификатору + + ru + Синхронизировать по идентификатору + + + Boolean + + + + + + + ТипИсточникаСтрокой + + ru + Тип источника строкой + + + String + + + + + + + + ТипОбъектаСтрокой + + ru + Тип объекта строкой + + + String + + + + + + + + ТипПриемникаСтрокой + + ru + Тип приемника строкой + + + String + + + + + + + + ЭтоУдалениеОбъекта + + ru + Это удаление объекта + + + Boolean + + + + + + Форма @@ -719,6 +1039,22 @@ HTMLDocument + + КакОпределитьПараметрыПодключенияКВебСервису + + ru + Как определить параметры подключения + + HTMLDocument + + + КакОпределитьПараметрыПодключенияКСервису + + ru + Как определить параметры подключения + + HTMLDocument + КакОпределитьПрефиксВторойИнформационнойБазы diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Commands/РегламентныеИФоновыеЗадания/CommandModule.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Commands/РегламентныеИФоновыеЗадания/CommandModule.bsl index 57629c9d9..1052a23d0 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Commands/РегламентныеИФоновыеЗадания/CommandModule.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Commands/РегламентныеИФоновыеЗадания/CommandModule.bsl @@ -2,6 +2,10 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ОткрытьФорму("Обработка.РегламентныеИФоновыеЗадания.Форма", , ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + ОткрытьФорму("Обработка.РегламентныеИФоновыеЗадания.Форма", + , + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/ConditionalAppearance.dcssca new file mode 100644 index 000000000..e2647b945 --- /dev/null +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/ConditionalAppearance.dcssca @@ -0,0 +1,23 @@ + + + + + + РегламентныеЗаданияВыполнено + + + + + ТаблицаРегламентныхЗаданий.Изменено + Equal + true + + + + + ЦветТекста + style:ПоясняющийТекст + + + + diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Form.form index 394bc743c..f292a91f0 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Form.form @@ -4,21 +4,401 @@ ru Автоматическое выполнение регламентных заданий - - СтрокаСостояния - 2 + + ГруппаПояснение + 18 + + ДекорацияИнформация + 16 + + <key>ru</key> + <value>Декорация информация</value> + + true + true + + true + + + ДекорацияИнформацияРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + ДекорацияИнформацияКонтекстноеМеню + 17 + true + + 8 + true + 3 + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ГруппаСостояние + 24 + + Надпись + 14 + + <key>ru</key> + <value>Запущен отдельный сеанс для выполнения регламентных заданий в файловом режиме работы. +Сеанс закроется автоматически при закрытии основного сеанса программы.</value> + + true + true + + true + + + НадписьРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + НадписьКонтекстноеМеню + 15 + true + + Label + true + 2 + true + false + + Style.ПоясняющийТекст + + + Left + Center + + + + СтрокаСостояния + 22 + + <key>ru</key> + <value>Выполняются регламентные задания...</value> + + true + true + + true + + + СтрокаСостоянияРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + СтрокаСостоянияКонтекстноеМеню + 23 + true + + Label + true + 1 + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа состояние</value> + + + ГруппаСостояниеРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа пояснение</value> + + + ГруппаПояснениеРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + + РегламентныеЗадания + 7 true true true - СтрокаСостояния + ТаблицаРегламентныхЗаданий None + + РегламентныеЗаданияНомер + 25 + true + true + + true + + + ТаблицаРегламентныхЗаданий.Номер + + + РегламентныеЗаданияНомерРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + РегламентныеЗаданияНомерКонтекстноеМеню + 26 + true + + InputField + Auto + true + Left + true + + 2 + true + true + true + true + true + true + Normal + + + + РегламентныеЗаданияРегламентноеЗадание + 10 + true + true + + true + + + ТаблицаРегламентныхЗаданий.РегламентноеЗадание + + + РегламентныеЗаданияРегламентноеЗаданиеРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + РегламентныеЗаданияРегламентноеЗаданиеКонтекстноеМеню + 11 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + РегламентныеЗаданияВыполнено + 12 + true + true + + true + + + ТаблицаРегламентныхЗаданий.Выполнено + + + РегламентныеЗаданияВыполненоРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + РегламентныеЗаданияВыполненоКонтекстноеМеню + 13 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + None + + РегламентныеЗаданияКоманднаяПанель + 9 + Left + true + + + РегламентныеЗаданияСтрокаПоиска + 43 + + РегламентныеЗаданияСтрокаПоискаРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + РегламентныеЗаданияСтрокаПоискаКонтекстноеМеню + 44 + true + + РегламентныеЗадания + + true + + + + РегламентныеЗаданияСостояниеПросмотра + 46 + + РегламентныеЗаданияСостояниеПросмотраРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + РегламентныеЗаданияСостояниеПросмотраКонтекстноеМеню + 47 + true + + ViewStatusAddition + РегламентныеЗадания + + true + + + + РегламентныеЗаданияУправлениеПоиском + 49 + + РегламентныеЗаданияУправлениеПоискомРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + РегламентныеЗаданияУправлениеПоискомКонтекстноеМеню + 50 + true + + SearchControlAddition + РегламентныеЗадания + + true + + - СтрокаСостоянияРасширеннаяПодсказка - 7 + РегламентныеЗаданияРасширеннаяПодсказка + 42 Label true true @@ -27,20 +407,151 @@ - СтрокаСостоянияКонтекстноеМеню - 3 + РегламентныеЗаданияКонтекстноеМеню + 8 true - LabelField - Enter - true - Left - true - - 60 + true + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + None + None + None + true + +
    + + ГруппаИнтервалВремениВыполнения + 21 + + ПериодВыполнения + 19 + true + true + + true + + + ИнтервалВремениПроверкиВыполнения + + + ПериодВыполненияРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + + ПериодВыполненияКонтекстноеМеню + 20 + true + + InputField + Enter + true + Left + true + + 2 + true + true + true + true + true + true + + 5 + + + 600 + + Normal + + + + ПояснениеСекунды + 5 + + <key>ru</key> + <value>(сек.)</value> + + true + true + + true + + + ПояснениеСекундыРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + + ПояснениеСекундыКонтекстноеМеню + 6 + true + + Label true - 2 + 1 true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа интервал времени выполнения</value> + + + ГруппаИнтервалВремениВыполненияРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto Top @@ -49,7 +560,7 @@ ФормаКоманднаяПанель -1 - ПрекратитьОбработкуИЗавершитьСеанс + ФормаПрекратитьВыполнениеИЗавершитьСеанс 1 true true @@ -59,8 +570,8 @@ true false - ПрекратитьОбработкуИЗавершитьСеансРасширеннаяПодсказка - 5 + ФормаПрекратитьВыполнениеИЗавершитьСеансРасширеннаяПодсказка + 31 Label true true @@ -77,6 +588,114 @@ Auto + + КомандыСписка + 30 + + ФормаНайти + 28 + true + true + + true + + + ФормаНайтиРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Form.Item.РегламентныеЗадания.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаОтменитьПоиск + 29 + true + true + + true + + + ФормаОтменитьПоискРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + Form.Item.РегламентныеЗадания.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаВывестиСписок + 27 + true + true + + true + + + ФормаВывестиСписокРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + Form.Item.РегламентныеЗадания.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды списка</value> + + + ru + Команды списка + + + КомандыСпискаРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ФормаНастройкаВыполненияРегламентныхЗаданий 4 @@ -87,7 +706,7 @@ ФормаНастройкаВыполненияРегламентныхЗаданийРасширеннаяПодсказка - 6 + 36 Label true true @@ -102,8 +721,10 @@ true UserCmds Auto + InAdditionalSubmenu Left + true OnOpen @@ -116,7 +737,6 @@ Abort Cancel Close - Help Ignore No OK @@ -124,7 +744,9 @@ Retry SaveValues Yes + 75 DontBlock + Use true true Vertical @@ -133,28 +755,10 @@ auto true - СтрокаСостояния + ИнтервалВремениПроверкиВыполнения <key>ru</key> - <value>Строка состояния</value> - - 1 - - String - - - - true - - - true - - - - ПериодВыполнения - - <key>ru</key> - <value>Период выполнения</value> + <value>Интервал времени проверки выполнения</value> 2 @@ -170,37 +774,19 @@ true + + ИнтервалВремениПроверкиВыполнения + - ОсталосьДоНачалаВыполнения + ТаблицаРегламентныхЗаданий <key>ru</key> - <value>Осталось до начала выполнения</value> + <value>Таблица регламентных заданий</value> - 3 + 1 - Number - - 10 - true - - - - true - - - true - - - - УстановленаБлокировка - - <key>ru</key> - <value>Установлена блокировка</value> - - 4 - - Boolean + ValueTable true @@ -208,6 +794,97 @@ true + + РегламентноеЗадание + + <key>ru</key> + <value>Регламентное задание</value> + + 1 + + String + + + + true + + + true + + + + Выполнено + + <key>ru</key> + <value>Выполнено</value> + + 2 + + Date + + + + true + + + true + + + + Номер + + <key>ru</key> + <value>п/п</value> + + 3 + + Number + + 10 + true + + + + true + + + true + + + + Изменено + + <key>ru</key> + <value>Изменено</value> + + 4 + + Boolean + + + true + + + true + + + + Идентификатор + + <key>ru</key> + <value>Идентификатор</value> + + 5 + + UUID + + + true + + + true + + ПрекратитьВыполнениеИЗавершитьСеанс diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Module.bsl index 9eaa3dfd9..f3fb759a4 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Module.bsl @@ -1,26 +1,40 @@ +&НаКлиенте +Перем ОсталосьДоНачалаВыполнения; // Интервал времени в секундах до следующей +// проверки выполнения регламентных заданий. + //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ПериодВыполнения = 3; // Секунды. - ОсталосьДоНачалаВыполнения = ПериодВыполнения + 1; // Секунды. + ИнтервалВремениПроверкиВыполнения = 5; // 5 секунд. + ОбновитьТаблицуРегламентныхЗаданий(); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) + ОсталосьДоНачалаВыполнения = ИнтервалВремениПроверкиВыполнения + 1; ВыполнитьРегламентныеЗадания(); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура НастройкаВыполненияРегламентныхЗаданий(Команда) + + ПараметрыФормы = Новый Структура("СкрытьКомандуЗапускаОтдельногоСеанса", Истина); + + ОткрытьФормуМодально( + "Обработка.РегламентныеИФоновыеЗадания.Форма.НастройкаВыполненияРегламентныхЗаданий", + ПараметрыФормы); + +КонецПроцедуры &НаКлиенте Процедура ПрекратитьВыполнениеИЗавершитьСеанс(Команда) @@ -29,18 +43,8 @@ КонецПроцедуры -&НаКлиенте -Процедура НастройкаВыполненияРегламентныхЗаданий(Команда) - - ПараметрыФормы = Новый Структура("СкрытьКомандуЗапускаОтдельногоСеанса", Истина); - - ОткрытьФормуМодально("Обработка.РегламентныеИФоновыеЗадания.Форма.НастройкаВыполненияРегламентныхЗаданий", ПараметрыФормы); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура ПрекратитьВыполнениеИЗавершитьСеансВыполнить() @@ -52,44 +56,94 @@ &НаКлиенте Процедура ВыполнитьРегламентныеЗадания() - Перезапустить = Ложь; - Если НужноПрекратитьВыполнение(ПараметрЗапуска, Перезапустить) Тогда - Закрыть(?(Перезапустить, "Перезапустить", Неопределено)); - Иначе - ОсталосьДоНачалаВыполнения = ОсталосьДоНачалаВыполнения - 1; - Если ОсталосьДоНачалаВыполнения <= 0 Тогда - - ОсталосьДоНачалаВыполнения = ПериодВыполнения; - - СтрокаСостояния = НСтр("ru = 'Выполняются задания, дождитесь завершения... '"); - ОбновитьОтображениеДанных(); - - РегламентныеЗаданияСервер.ВыполнитьРегламентныеЗадания(); + ОсталосьДоНачалаВыполнения = ОсталосьДоНачалаВыполнения - 1; + Если ОсталосьДоНачалаВыполнения <= 0 Тогда + + ОсталосьДоНачалаВыполнения = ИнтервалВремениПроверкиВыполнения; + Элементы.СтрокаСостояния.Заголовок = НСтр("ru = 'Выполняются регламентные задания... '"); + ОбновитьОтображениеДанных(); + + Результат = ВыполнитьРегламентныеЗаданияСервер(ПараметрЗапуска); + Если Результат.ПрекратитьВыполнение Тогда + Закрыть(?(Результат.Перезапустить, "Перезапустить", Неопределено)); КонецЕсли; КонецЕсли; - // Прекращение выполнения, если пользователь нажал CTRL+BREAK - ПодключитьОбработчикОжидания("ПрекратитьВыполнениеИЗавершитьСеансВыполнить", 1, Истина); + // Прекращение выполнения, если пользователь нажал CTRL+BREAK. + ПодключитьОбработчикОжидания( + "ПрекратитьВыполнениеИЗавершитьСеансВыполнить", 1, Истина); + ОбработкаПрерыванияПользователя(); - ОтключитьОбработчикОжидания("ПрекратитьВыполнениеИЗавершитьСеансВыполнить"); + + ОтключитьОбработчикОжидания( + "ПрекратитьВыполнениеИЗавершитьСеансВыполнить"); ПодключитьОбработчикОжидания("ВыполнитьРегламентныеЗадания", 1, Истина); - СтрокаСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'До начала выполнения осталось секунд: %1'"), - Строка(ОсталосьДоНачалаВыполнения) ); + Элементы.СтрокаСостояния.Заголовок = НСтр("ru = 'Ожидание выполнения регламентных заданий...'"); КонецПроцедуры &НаСервере -Функция НужноПрекратитьВыполнение(ПараметрЗапуска, Перезапустить) +Функция ВыполнитьРегламентныеЗаданияСервер(ПараметрЗапуска) - УстановитьПривилегированныйРежим(Истина); + РегламентныеЗаданияСервер.ВыполнитьРегламентныеЗадания(); + ОбновитьТаблицуРегламентныхЗаданий(); - Перезапустить = КонфигурацияБазыДанныхИзмененаДинамически(); + Результат = Новый Структура; + Результат.Вставить("Перезапустить", КонфигурацияБазыДанныхИзмененаДинамически()); + Результат.Вставить( + "ПрекратитьВыполнение", + Результат.Перезапустить + ИЛИ РегламентныеЗаданияСервер.РодительскийСеансЗаданИЗавершен(ПараметрЗапуска) + ИЛИ НЕ РегламентныеЗаданияСервер.ТекущийСеансВыполняетРегламентныеЗадания() ); - Возврат Перезапустить ИЛИ - РегламентныеЗаданияСервер.РодительскийСеансЗаданИЗавершен(ПараметрЗапуска) ИЛИ - НЕ РегламентныеЗаданияСервер.ТекущийСеансВыполняетРегламентныеЗадания(); + Возврат Результат; КонецФункции +&НаСервере +Процедура ОбновитьТаблицуРегламентныхЗаданий() + + УстановитьПривилегированныйРежим(Истина); + ТекущиеЗадания = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Новый Структура("Использование", Истина)); + + НоваяТаблицаЗаданий = РеквизитФормыВЗначение("ТаблицаРегламентныхЗаданий"); + НоваяТаблицаЗаданий.Очистить(); + + Для Каждого Задание Из ТекущиеЗадания Цикл + СтрокаЗадания = НоваяТаблицаЗаданий.Добавить(); + + СтрокаЗадания.РегламентноеЗадание + = РегламентныеЗаданияСервер.ПредставлениеРегламентногоЗадания(Задание); + СтрокаЗадания.Выполнено = Дата(1, 1, 1); + СтрокаЗадания.Идентификатор = Задание.УникальныйИдентификатор; + + СвойстваПоследнегоФоновогоЗадания = РегламентныеЗаданияСервер + .ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); + + Если СвойстваПоследнегоФоновогоЗадания <> Неопределено + И ЗначениеЗаполнено(СвойстваПоследнегоФоновогоЗадания.Конец) Тогда + + СтрокаЗадания.Выполнено = СвойстваПоследнегоФоновогоЗадания.Конец; + КонецЕсли; + + СвойстваЗадания = ТаблицаРегламентныхЗаданий.НайтиСтроки( + Новый Структура("Идентификатор", СтрокаЗадания.Идентификатор)); + + СтрокаЗадания.Изменено = (СвойстваЗадания = Неопределено) + ИЛИ (СвойстваЗадания.Количество() = 0) + ИЛИ (СвойстваЗадания[0].Выполнено <> СтрокаЗадания.Выполнено); + КонецЦикла; + + НоваяТаблицаЗаданий.Сортировать("РегламентноеЗадание"); + + НомерЗадания = 1; + Для Каждого СтрокаЗадания Из НоваяТаблицаЗаданий Цикл + СтрокаЗадания.Номер = НомерЗадания; + НомерЗадания = НомерЗадания + 1; + КонецЦикла; + + ЗначениеВРеквизитФормы(НоваяТаблицаЗаданий, "ТаблицаРегламентныхЗаданий"); + +КонецПроцедуры + diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Form.form index de6a86f91..04eb46f03 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Form.form @@ -4,36 +4,6 @@ ru Настройка выполнения регламентных заданий - - Отступ - 26 - true - true - - true - - - ОтступРасширеннаяПодсказка - 31 - Label - true - true - - Left - - - - ОтступКонтекстноеМеню - 27 - true - - Label - true - true - - Left - - СеансВыполненияРегламентныхЗаданий 6 @@ -51,7 +21,7 @@ Right АвтоматическиЗапускатьОтдельныйСеансДляВыполненияРегламентныхЗаданийРасширеннаяПодсказка - 33 + 32 Label true true @@ -83,7 +53,7 @@ СеансВыполненияРегламентныхЗаданийРасширеннаяПодсказка - 32 + 31 Label true true @@ -122,7 +92,7 @@ УведомлятьОНекорректномВыполненииРегламентныхЗаданийРасширеннаяПодсказка - 36 + 35 Label true true @@ -145,10 +115,6 @@ ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий 20 - - <key>ru</key> - <value>Период уведомления, минут</value> - true true @@ -157,13 +123,14 @@ ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий + None OnChange ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданийПриИзменении ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданийРасширеннаяПодсказка - 38 + 37 Label true true @@ -190,6 +157,40 @@ Normal + + НадписьМинуты + 26 + + <key>ru</key> + <value>(мин.)</value> + + true + true + + true + + + НадписьМинутыРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + НадписьМинутыКонтекстноеМеню + 27 + true + + Label + true + true + + Left + + true true @@ -211,7 +212,7 @@ УведомлениеОНекорректномВыполненииРегламентныхЗаданийРасширеннаяПодсказка - 35 + 34 Label true true @@ -221,9 +222,7 @@ UsualGroup - Vertical Auto - NormalSeparation true true Auto @@ -327,7 +326,6 @@ Abort Cancel - CustomizeForm Ignore No OK @@ -367,7 +365,7 @@ УведомлятьОНекорректномВыполненииРегламентныхЗаданий <key>ru</key> - <value>Уведомлять о некорректном выполнении регламентных заданий</value> + <value>Уведомлять о некорректном выполнении регламентных заданий каждые:</value> 2 @@ -425,7 +423,7 @@ ЗаписатьИЗакрытьВыполнить - TextPicture + Text Auto Auto diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Module.bsl index 3e392e5f5..913167d87 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Module.bsl @@ -1,7 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -13,33 +11,41 @@ Настройки = РегламентныеЗаданияСервер.ПолучитьНастройкиВыполненияРегламентныхЗаданий(); ЗаполнитьЗначенияСвойств(ЭтаФорма, Настройки); - Если НЕ ПравоДоступа("Администрирование", Метаданные) Тогда + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда Элементы.АвтоматическиЗапускатьОтдельныйСеансДляВыполненияРегламентныхЗаданий.Доступность = Ложь; КонецЕсли; - Элементы.ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий.Видимость = НЕ Параметры.СкрытьКомандуЗапускаОтдельногоСеанса; + Элементы.ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий.Видимость + = НЕ Параметры.СкрытьКомандуЗапускаОтдельногоСеанса; КонецПроцедуры &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - Если Модифицированность Тогда - КодВозврата = Вопрос(НСтр("ru = 'Записать изменения?'"), РежимДиалогаВопрос.ДаНетОтмена); - Если КодВозврата = КодВозвратаДиалога.Да Тогда - ЗаписатьИзменения(); - ИначеЕсли КодВозврата = КодВозвратаДиалога.Отмена Тогда - Отказ = Истина; - КонецЕсли; + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, Модифицированность); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданийПриИзменении(Элемент) + + Если ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий <= 0 Тогда + ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий = 1; КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте -Процедура ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий(Команда) +Процедура Записать(Команда) - ПодключитьОбработчикОжидания("ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданийЧерезОбработчикОжидания", 1, Истина); + ЗаписатьИзменения(); КонецПроцедуры @@ -52,36 +58,33 @@ КонецПроцедуры &НаКлиенте -Процедура Записать(Команда) +Процедура ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий(Команда) - ЗаписатьИзменения(); + ПодключитьОбработчикОжидания( + "ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданийЧерезОбработчикОжидания", + 1, + Истина); КонецПроцедуры -&НаКлиенте -Процедура ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданийПриИзменении(Элемент) - - Если ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий <= 0 Тогда - ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий = 1; - КонецЕсли; - -КонецПроцедуры - - //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура ЗаписатьИзменения() ЗаписатьИзмененияНаСервере(); Модифицированность = Ложь; - РегламентныеЗаданияКлиент.ОтключитьГлобальныйОбработчикОжидания("УведомлятьОНекорректномВыполненииРегламентныхЗаданий"); + + РегламентныеЗаданияКлиент.ОтключитьГлобальныйОбработчикОжидания( + "УведомлятьОНекорректномВыполненииРегламентныхЗаданий"); + Если УведомлятьОНекорректномВыполненииРегламентныхЗаданий Тогда - РегламентныеЗаданияКлиент.ПодключитьГлобальныйОбработчикОжидания("УведомлятьОНекорректномВыполненииРегламентныхЗаданий", - ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий * 60, - Истина); + + РегламентныеЗаданияКлиент.ПодключитьГлобальныйОбработчикОжидания( + "УведомлятьОНекорректномВыполненииРегламентныхЗаданий", + ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий * 60, + Истина); КонецЕсли; КонецПроцедуры @@ -90,7 +93,8 @@ Процедура ЗаписатьИзмененияНаСервере() Настройки = РегламентныеЗаданияСервер.ПолучитьНастройкиВыполненияРегламентныхЗаданий(); - Если ПравоДоступа("Администрирование", Метаданные) Тогда + + Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда ЗаполнитьЗначенияСвойств(Настройки, ЭтаФорма); Иначе ЗаполнитьЗначенияСвойств( @@ -99,6 +103,7 @@ , "АвтоматическиЗапускатьОтдельныйСеансДляВыполненияРегламентныхЗаданий"); КонецЕсли; + РегламентныеЗаданияСервер.УстановитьНастройкиВыполненияРегламентныхЗаданий(Настройки); ЗаполнитьЗначенияСвойств(ЭтаФорма, Настройки); diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РабочийСтолОтдельногоСеансаВыполненияРегламентныхЗаданий/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РабочийСтолОтдельногоСеансаВыполненияРегламентныхЗаданий/Form.form index feb1bd322..5675c9b27 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РабочийСтолОтдельногоСеансаВыполненияРегламентныхЗаданий/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РабочийСтолОтдельногоСеансаВыполненияРегламентныхЗаданий/Form.form @@ -1,116 +1,5 @@ - - - ГоризонтальнаяГруппа - 1 - - Картинка - 2 - - <key>ru</key> - <value>Картинка</value> - - true - true - - true - - - КартинкаРасширеннаяПодсказка - 7 - Label - true - true - - Left - - - - КартинкаКонтекстноеМеню - 3 - true - - 4 - true - 2 - true - false - - - CommonPicture.Информация32 - - - - - Надпись - 4 - - <key>ru</key> - <value>Запущен отдельный сеанс для выполнения регламентных заданий. -Сеанс закроется автоматически при закрытии основного сеанса.</value> - - true - true - - true - - - НадписьРасширеннаяПодсказка - 8 - Label - true - true - - Left - - - - НадписьКонтекстноеМеню - 5 - true - - Label - true - 2 - true - false - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Горизонтальная группа</value> - - - ru - Горизонтальная группа - - - ГоризонтальнаяГруппаРасширеннаяПодсказка - 6 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - + ФормаКоманднаяПанель -1 @@ -118,7 +7,6 @@ DontBlock true - true true Vertical true diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl index cc443b665..9edd65f45 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl @@ -1,57 +1,86 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Отказ от инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Возврат при получении формы для анализа. Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - Если НЕ ПравоДоступа("Администрирование", Метаданные) Тогда - ВызватьИсключение(НСтр("ru = 'У пользователя нет права администрирования.'")); + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа. + | + |Изменение свойств регламентного задания + |выполняется только администраторами.'"); КонецЕсли; Действие = Параметры.Действие; Если Найти(", Добавить, Скопировать, Изменить,", ", " + Действие + ",") = 0 Тогда - ВызватьИсключение(НСтр("ru = 'Неверные параметры в форме ""Регламентное задание"".'")); + + ВызватьИсключение НСтр("ru = 'Неверные параметры открытия формы ""Регламентное задание"".'"); КонецЕсли; + Элементы.ИмяПользователя.Доступность = НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая(); Если Действие = "Добавить" Тогда + Расписание = Новый РасписаниеРегламентногоЗадания; + Для каждого РегламентноеЗаданиеМетаданные ИЗ Метаданные.РегламентныеЗадания Цикл - ОписанияМетаданныхРегламентныхЗаданий.Добавить - (РегламентноеЗаданиеМетаданные.Имя + " - |" + РегламентноеЗаданиеМетаданные.Синоним + " - |" + РегламентноеЗаданиеМетаданные.ИмяМетода, - ?(ПустаяСтрока(РегламентноеЗаданиеМетаданные.Синоним), - РегламентноеЗаданиеМетаданные.Имя, - РегламентноеЗаданиеМетаданные.Синоним) ); + ОписанияМетаданныхРегламентныхЗаданий.Добавить( + РегламентноеЗаданиеМетаданные.Имя + + Символы.ПС + + РегламентноеЗаданиеМетаданные.Синоним + + Символы.ПС + + РегламентноеЗаданиеМетаданные.ИмяМетода, + ?(ПустаяСтрока(РегламентноеЗаданиеМетаданные.Синоним), + РегламентноеЗаданиеМетаданные.Имя, + РегламентноеЗаданиеМетаданные.Синоним) ); КонецЦикла; Иначе Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(Параметры.Идентификатор); - ЗаполнитьЗначенияСвойств(ЭтаФорма, Задание, "Ключ, Наименование, Использование, ИмяПользователя, ИнтервалПовтораПриАварийномЗавершении, КоличествоПовторовПриАварийномЗавершении"); + ЗаполнитьЗначенияСвойств( + ЭтаФорма, + Задание, + "Ключ, + |Наименование, + |Использование, + |ИмяПользователя, + |ИнтервалПовтораПриАварийномЗавершении, + |КоличествоПовторовПриАварийномЗавершении"); + Идентификатор = Строка(Задание.УникальныйИдентификатор); - ИмяМетаданных = ?(Задание.Метаданные <> Неопределено, Задание.Метаданные.Имя, НСтр("ru = '<нет метаданных>'")); - СинонимМетаданных = ?(Задание.Метаданные <> Неопределено, Задание.Метаданные.Синоним, НСтр("ru = '<нет метаданных>'")); - ИмяМетодаМетаданных = ?(Задание.Метаданные <> Неопределено, Задание.Метаданные.ИмяМетода, НСтр("ru = '<нет метаданных>'")); + Если Задание.Метаданные = Неопределено Тогда + ИмяМетаданных = НСтр("ru = '<нет метаданных>'"); + СинонимМетаданных = НСтр("ru = '<нет метаданных>'"); + ИмяМетодаМетаданных = НСтр("ru = '<нет метаданных>'"); + Иначе + ИмяМетаданных = Задание.Метаданные.Имя; + СинонимМетаданных = Задание.Метаданные.Синоним; + ИмяМетодаМетаданных = Задание.Метаданные.ИмяМетода; + КонецЕсли; Расписание = Задание.Расписание; - СообщенияПользователюИОписаниеИнформацииОбОшибке = РегламентныеЗаданияСервер.СообщенияИОписанияОшибокРегламентногоЗадания(Задание); + + СообщенияПользователюИОписаниеИнформацииОбОшибке = РегламентныеЗаданияСервер + .СообщенияИОписанияОшибокРегламентногоЗадания(Задание); КонецЕсли; Если Действие <> "Изменить" Тогда Идентификатор = НСтр("ru = '<будет создан при записи>'"); Использование = Ложь; - Наименование = ?(Действие = "Добавить", "", РегламентныеЗаданияСервер.ПредставлениеРегламентногоЗадания(Задание)); + + Наименование = ?( + Действие = "Добавить", + "", + РегламентныеЗаданияСервер.ПредставлениеРегламентногоЗадания(Задание)); КонецЕсли; - // Заполнение списка выбора имени пользователя + // Заполнение списка выбора имени пользователя. МассивПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей(); + Для каждого Пользователь Из МассивПользователей Цикл Элементы.ИмяПользователя.СписокВыбора.Добавить(Пользователь.Имя); КонецЦикла; @@ -62,8 +91,11 @@ Процедура ПриОткрытии(Отказ) Если Действие = "Добавить" Тогда - // Выбор шаблона регламентного задания (метаданные) - ЭлементСписка = ОписанияМетаданныхРегламентныхЗаданий.ВыбратьЭлемент(НСтр("ru = 'Выберите предопределенный шаблон регламентного задания'")); + + // Выбор шаблона регламентного задания (метаданные). + ЭлементСписка = ОписанияМетаданныхРегламентныхЗаданий.ВыбратьЭлемент( + НСтр("ru = 'Выберите шаблон регламентного задания'")); + Если ЭлементСписка = Неопределено Тогда Отказ = Истина; Возврат; @@ -75,7 +107,6 @@ КонецЕсли; КонецЕсли; - мЗаданиеЗаписано = Ложь; ОбновитьЗаголовокФормы(); КонецПроцедуры @@ -83,20 +114,29 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - Если Модифицированность Тогда - КодВозврата = Вопрос(НСтр("ru = 'Записать изменения?'"), РежимДиалогаВопрос.ДаНетОтмена); - Если КодВозврата = КодВозвратаДиалога.Да Тогда - ЗаписатьРегламентноеЗадание(); - ИначеЕсли КодВозврата = КодВозвратаДиалога.Отмена Тогда - Отказ = Истина; - КонецЕсли; - КонецЕсли; + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, Модифицированность); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура НаименованиеПриИзменении(Элемент) + + ОбновитьЗаголовокФормы(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Записать(Команда) + + ЗаписатьРегламентноеЗадание(); + +КонецПроцедуры &НаКлиенте Процедура ЗаписатьИЗакрытьВыполнить() @@ -106,17 +146,11 @@ КонецПроцедуры -&НаКлиенте -Процедура Записать(Команда) - - ЗаписатьРегламентноеЗадание(); - -КонецПроцедуры - &НаКлиенте Процедура ОткрытьРасписаниеВыполнить() Диалог = Новый ДиалогРасписанияРегламентногоЗадания(Расписание); + Если Диалог.ОткрытьМодально() Тогда Расписание = Диалог.Расписание; Модифицированность = Истина; @@ -124,16 +158,8 @@ КонецПроцедуры -&НаКлиенте -Процедура НаименованиеПриИзменении(Элемент) - - ОбновитьЗаголовокФормы(); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура ЗаписатьРегламентноеЗадание() @@ -150,12 +176,23 @@ Если Действие = "Изменить" Тогда Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(Идентификатор); Иначе - Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(Метаданные.РегламентныеЗадания[ИмяМетаданных]); + Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание( + Метаданные.РегламентныеЗадания[ИмяМетаданных]); + Идентификатор = Строка(Задание.УникальныйИдентификатор); Действие = "Изменить"; КонецЕсли; - ЗаполнитьЗначенияСвойств(Задание, ЭтаФорма, "Ключ, Наименование, Использование, ИмяПользователя, ИнтервалПовтораПриАварийномЗавершении, КоличествоПовторовПриАварийномЗавершении"); + ЗаполнитьЗначенияСвойств( + Задание, + ЭтаФорма, + "Ключ, + |Наименование, + |Использование, + |ИмяПользователя, + |ИнтервалПовтораПриАварийномЗавершении, + |КоличествоПовторовПриАварийномЗавершении"); + Задание.Расписание = Расписание; Задание.Записать(); @@ -168,16 +205,18 @@ Если НЕ ПустаяСтрока(Наименование) Тогда Представление = Наименование; + ИначеЕсли НЕ ПустаяСтрока(СинонимМетаданных) Тогда Представление = СинонимМетаданных; Иначе Представление = ИмяМетаданных; КонецЕсли; - Если Действие <> "Изменить" Тогда - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Регламентное задание (создание)'"), Представление); + + Если Действие = "Изменить" Тогда + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (Регламентное задание)'"), Представление); Иначе - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (Регламентное задание)'"), Представление); + Заголовок = НСтр("ru = 'Регламентное задание (создание)'"); КонецЕсли; КонецПроцедуры - diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl index a1db637f7..d23c53270 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl @@ -1,18 +1,19 @@ - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Отказ от инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Возврат при получении формы для анализа. Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - Если НЕ ПравоДоступа("Администрирование", Метаданные) Тогда - ВызватьИсключение(НСтр("ru = 'У пользователя нет права администрирования.'")); + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа. + | + |Работа с регламентными и фоновыми заданиями + |выполняется только администраторами.'"); КонецЕсли; ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); @@ -32,8 +33,9 @@ Процедура ПриОткрытии(Отказ) Если НЕ НастройкиЗагружены Тогда - ПриЗагрузкеДанныхИзНастроекНаСервере(Новый Соответствие); + ЗаполнитьНастройкиФормы(Новый Соответствие); КонецЕсли; + ОбновитьСписокВыбораРегламентногоЗадания(); КонецПроцедуры @@ -42,10 +44,11 @@ Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "Запись_РегламентныеИФоновыеЗадания" Тогда + Если ЗначениеЗаполнено(Параметр) Тогда ОбновитьТаблицуРегламентныхЗаданий(Параметр); Иначе - ПодключитьОбработчикОжидания("ОбновитьДанныеВыполнить", 0.1, Истина); + ПодключитьОбработчикОжидания("ОтложенноеОбновленияДанных", 0.1, Истина); КонецЕсли; КонецЕсли; @@ -53,248 +56,43 @@ &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - - ОбновитьТаблицуРегламентныхЗаданий(); - - // Настроим отбор фоновых заданий - Если Настройки.Получить("ОтборПоСостояниюАктивно") = Неопределено Тогда - Настройки.Вставить("ОтборПоСостояниюАктивно", Истина); - КонецЕсли; - - Если Настройки.Получить("ОтборПоСостояниюЗавершено") = Неопределено Тогда - Настройки.Вставить("ОтборПоСостояниюЗавершено", Истина); - КонецЕсли; - - Если Настройки.Получить("ОтборПоСостояниюЗавершеноАварийно") = Неопределено Тогда - Настройки.Вставить("ОтборПоСостояниюЗавершеноАварийно", Истина); - КонецЕсли; - - Если Настройки.Получить("ОтборПоСостояниюОтменено") = Неопределено Тогда - Настройки.Вставить("ОтборПоСостояниюОтменено", Истина); - КонецЕсли; - - Если Настройки.Получить("ОтбиратьПоРегламентномуЗаданию") = Неопределено - ИЛИ Настройки.Получить("РегламентноеЗаданиеДляОтбораИдентификатор") = Неопределено Тогда - Настройки.Вставить("ОтбиратьПоРегламентномуЗаданию", Ложь); - Настройки.Вставить("РегламентноеЗаданиеДляОтбораИдентификатор", ПустойИдентификатор); - КонецЕсли; - - // Настроим отбор по периоду "Без отбора" - // (см. обработчик события ВидОтбораПоПериодуПриИзменении переключателя) - Если Настройки.Получить("ВидОтбораПоПериоду") = Неопределено - ИЛИ Настройки.Получить("ОтборПериодС") = Неопределено - ИЛИ Настройки.Получить("ОтборПериодПо") = Неопределено Тогда - Настройки.Вставить("ВидОтбораПоПериоду", 0); - ТекущаяДата = ТекущаяДатаСеанса(); - Настройки.Вставить("ОтборПериодС", НачалоДня(ТекущаяДата) - 3*3600); - Настройки.Вставить("ОтборПериодПо", НачалоДня(ТекущаяДата) + 9*3600); - КонецЕсли; - - Для каждого КлючИЗначение Из Настройки Цикл - Попытка - ЭтаФорма[КлючИЗначение.Ключ] = КлючИЗначение.Значение; - Исключение - КонецПопытки; - КонецЦикла; - // Настроим видимость и доступность. - Элементы.ОтборПериодС.ТолькоПросмотр = НЕ (ВидОтбораПоПериоду = 4); - Элементы.ОтборПериодПо.ТолькоПросмотр = НЕ (ВидОтбораПоПериоду = 4); - Элементы.РегламентноеЗаданиеДляОтбора.Доступность = ОтбиратьПоРегламентномуЗаданию; - - ОбновитьТаблицуФоновыхЗаданий(); + ЗаполнитьНастройкиФормы(Настройки); НастройкиЗагружены = Истина; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// - -&НаКлиенте -Процедура ИзменитьРегламентноеЗаданиеВыполнить() - - ДобавитьСкопироватьИзменитьРегламентноеЗадание("Изменить"); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбновитьДанныеВыполнить() - - ОбновитьДанные(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьФоновоеЗаданиеВыполнить() - - Если Элементы.ТаблицаФоновыеЗадания.ТекущиеДанные = Неопределено Тогда - Предупреждение (НСтр("ru = 'Выберите фоновое задание.'")); - Иначе - СписокПередаваемыхСвойств = - "Идентификатор, - |Ключ, - |Наименование, - |ИмяМетода, - |Состояние, - |Начало, - |Конец, - |Расположение, - |СообщенияПользователюИОписаниеИнформацииОбОшибке, - |ИдентификаторРегламентногоЗадания, - |НаименованиеРегламентногоЗадания"; - ЗначенияТекущихДанных = Новый Структура(СписокПередаваемыхСвойств); - ЗаполнитьЗначенияСвойств(ЗначенияТекущихДанных, Элементы.ТаблицаФоновыеЗадания.ТекущиеДанные); - ОткрытьФормуМодально("Обработка.РегламентныеИФоновыеЗадания.Форма.ФоновоеЗадание", - Новый Структура("Идентификатор, СвойстваФоновогоЗадания", - Элементы.ТаблицаФоновыеЗадания.ТекущиеДанные.Идентификатор, - ЗначенияТекущихДанных)); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОтменитьФоновоеЗаданиеВыполнить() - - Если Элементы.ТаблицаФоновыеЗадания.ТекущиеДанные = Неопределено Тогда - Предупреждение( НСтр("ru = 'Выберите фоновое задание.'") ); - - Иначе - ОтменитьФоновоеЗаданиеНаСервере(Элементы.ТаблицаФоновыеЗадания.ТекущиеДанные.Идентификатор); - Предупреждение( НСтр("ru = 'Задание отменено, но состояние отмены будет - |установлено сервером только через секунды, - |возможно потребуется обновить данные вручную.'") ); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьРасписаниеРегламентногоЗаданияВыполнить() - - ТекущиеДанные = Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные; - - Если ТекущиеДанные = Неопределено Тогда - Предупреждение( НСтр("ru = 'Выберите регламентное задание.'") ); - Иначе - Диалог = Новый ДиалогРасписанияРегламентногоЗадания(РегламентныеЗаданияКлиент.ПолучитьРасписаниеРегламентногоЗадания(ТекущиеДанные.Идентификатор)); - Если Диалог.ОткрытьМодально() Тогда - РегламентныеЗаданияКлиент.УстановитьРасписаниеРегламентногоЗадания(ТекущиеДанные.Идентификатор, Диалог.Расписание); - ОбновитьТаблицуРегламентныхЗаданий(ТекущиеДанные.Идентификатор); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗапуститьОтдельныйСеанс(Команды) - - ПодключитьОбработчикОжидания("ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданийЧерезОбработчикОжидания", 1, Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкаВыполненияРегламентныхЗаданий(Команда) - - ПараметрыФормы = Новый Структура("СкрытьКомандуЗапускаОтдельногоСеанса", Истина); - - ОткрытьФормуМодально("Обработка.РегламентныеИФоновыеЗадания.Форма.НастройкаВыполненияРегламентныхЗаданий", ПараметрыФормы); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьРегламентноеЗаданиеВручную(Команда) - - Если Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные = Неопределено Тогда - Предупреждение( НСтр("ru = 'Выберите регламентное задание.'") ); - Иначе - ВыделенныеСтроки = Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки; - ВыделенныеСтроки = Новый Массив; - Для каждого ВыделеннаяСтрока Из Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки Цикл - ВыделенныеСтроки.Добавить(ВыделеннаяСтрока); - КонецЦикла; - Индекс = 0; - Для каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл - ОбновитьВсе = Индекс = ВыделенныеСтроки.Количество()-1; - ПроцедураУжеВыполняется = Неопределено; - ТекущиеДанные = ТаблицаРегламентныеЗадания.НайтиПоИдентификатору(ВыделеннаяСтрока); - Если ИнформационнаяБазаФайловая Тогда - МоментЗапуска = ТекущаяДата(); - МоментОкончания = Неопределено; - НомерСеанса = Неопределено; - НачалоСеанса = Неопределено; - Если ВыполнитьРегламентноеЗаданиеВручнуюНаСервере(ТекущиеДанные.Идентификатор, МоментЗапуска, , МоментОкончания, НомерСеанса, НачалоСеанса, , ОбновитьВсе, ПроцедураУжеВыполняется) Тогда - ПоказатьОповещениеПользователя(НСтр("ru = 'Выполнена процедура регламентного задания'"), , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1. - |Процедура выполнялась с %2 по %3'"), - ТекущиеДанные.Наименование, - Строка(МоментЗапуска), - Строка(МоментОкончания)), - БиблиотекаКартинок.ВыполнитьРегламентноеЗаданиеВручную); - Иначе - Если ПроцедураУжеВыполняется Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Процедура регламентного задания ""%1"" уже выполняется в сеансе %2, открытом %3.'"), - ТекущиеДанные.Наименование, - Строка(НомерСеанса), - Строка(НачалоСеанса))); - Иначе - Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Удалить(Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Найти(ВыделеннаяСтрока)); - КонецЕсли; - КонецЕсли; - Иначе - МоментЗапуска = Неопределено; - ИдентификаторФоновогоЗадания = ""; - ПредставлениеФоновогоЗадания = ""; - Если ВыполнитьРегламентноеЗаданиеВручнуюНаСервере(ТекущиеДанные.Идентификатор, МоментЗапуска, ИдентификаторФоновогоЗадания, , , , ПредставлениеФоновогоЗадания, ОбновитьВсе, ПроцедураУжеВыполняется) Тогда - ПоказатьОповещениеПользователя(НСтр("ru = 'Запущена процедура регламентного задания'"), , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1. - |Процедура запущена в фоновом задании %2'"), - ТекущиеДанные.Наименование, - Строка(МоментЗапуска)), - БиблиотекаКартинок.ВыполнитьРегламентноеЗаданиеВручную); - ИдентификаторыФоновыхЗаданийПриРучномВыполнении.Добавить(ИдентификаторФоновогоЗадания, ТекущиеДанные.Наименование); - ПодключитьОбработчикОжидания("СообщитьОбОкончанииРучногоВыполненияРегламентногоЗадания", 0.1, Истина); - Иначе - Если ПроцедураУжеВыполняется Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Процедура регламентного задания ""%1"" уже выполняется в фоновом задании ""%2"", начатом %3.'"), - ТекущиеДанные.Наименование, - ПредставлениеФоновогоЗадания, - Строка(МоментЗапуска))); - Иначе - Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Удалить(Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Найти(ВыделеннаяСтрока)); - КонецЕсли; - КонецЕсли; - КонецЕсли; - Индекс = Индекс + 1; - КонецЦикла; - КонецЕсли; - -КонецПроцедуры +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ВидОтбораПоПериодуПриИзменении(Элемент) - + + ТекущаяДатаСеанса = ТекущаяДатаСеансаНаСервере(); + Элементы.ОтборПериодС.ТолькоПросмотр = НЕ (ВидОтбораПоПериоду = 4); Элементы.ОтборПериодПо.ТолькоПросмотр = НЕ (ВидОтбораПоПериоду = 4); + Если ВидОтбораПоПериоду = 0 Тогда - ОтборПериодС = '00010101'; - ОтборПериодПо = '00010101'; + ОтборПериодС = '00010101'; + ОтборПериодПо = '00010101'; + ИначеЕсли ВидОтбораПоПериоду = 1 Тогда - ОтборПериодС = НачалоДня(ТекущаяДата()) - 3*3600; - ОтборПериодПо = НачалоДня(ТекущаяДата()) + 9*3600; + ОтборПериодС = НачалоДня(ТекущаяДатаСеанса) - 3*3600; + ОтборПериодПо = НачалоДня(ТекущаяДатаСеанса) + 9*3600; + ИначеЕсли ВидОтбораПоПериоду = 2 Тогда - ОтборПериодС = НачалоДня(ТекущаяДата()) - 24*3600; - ОтборПериодПо = КонецДня(ОтборПериодС); + ОтборПериодС = НачалоДня(ТекущаяДатаСеанса) - 24*3600; + ОтборПериодПо = КонецДня(ОтборПериодС); + ИначеЕсли ВидОтбораПоПериоду = 3 Тогда - ОтборПериодС = НачалоДня(ТекущаяДата()); - ОтборПериодПо = КонецДня(ОтборПериодС); + ОтборПериодС = НачалоДня(ТекущаяДатаСеанса); + ОтборПериодПо = КонецДня(ОтборПериодС); + ИначеЕсли ВидОтбораПоПериоду = 4 Тогда - ОтборПериодС = НачалоДня(ТекущаяДата()); - ОтборПериодПо = ОтборПериодС; + ОтборПериодС = НачалоДня(ТекущаяДатаСеанса); + ОтборПериодПо = ОтборПериодС; КонецЕсли; КонецПроцедуры @@ -325,17 +123,23 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаФоновыеЗадания + &НаКлиенте Процедура ТаблицаФоновыеЗаданияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ОткрытьФоновоеЗаданиеВыполнить(); + ОткрытьФоновоеЗадание(); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаРегламентныеЗадания + &НаКлиенте Процедура ТаблицаРегламентныеЗаданияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ИзменитьРегламентноеЗаданиеВыполнить(); + ДобавитьСкопироватьИзменитьРегламентноеЗадание("Изменить"); КонецПроцедуры @@ -355,36 +159,340 @@ Если Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Количество() > 1 Тогда Предупреждение(НСтр("ru = 'Выберите одно регламентное задание.'")); + ИначеЕсли Элемент.ТекущиеДанные.Предопределенное Тогда - Предупреждение( НСтр("ru = 'Невозможно удалить предопределенное регламентное задание.'") ); + Предупреждение(НСтр("ru = 'Невозможно удалить предопределенное регламентное задание.'") ); Иначе Ответ = Вопрос(НСтр("ru = 'Удалить регламентное задание?'"), РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Да Тогда - УдалитьРегламентноеЗаданиеВыполнитьНаСервере(Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные.Идентификатор); + + УдалитьРегламентноеЗаданиеВыполнитьНаСервере( + Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные.Идентификатор); КонецЕсли; КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ВыполнитьРегламентноеЗаданиеВручную(Команда) + + Если Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные = Неопределено Тогда + Предупреждение( НСтр("ru = 'Выберите регламентное задание.'") ); + Иначе + ВыделенныеСтроки = Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки; + ВыделенныеСтроки = Новый Массив; + Для каждого ВыделеннаяСтрока Из Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки Цикл + ВыделенныеСтроки.Добавить(ВыделеннаяСтрока); + КонецЦикла; + Индекс = 0; + + Для каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл + ОбновитьВсе = Индекс = ВыделенныеСтроки.Количество()-1; + ПроцедураУжеВыполняется = Неопределено; + ТекущиеДанные = ТаблицаРегламентныеЗадания.НайтиПоИдентификатору(ВыделеннаяСтрока); + + Если ИнформационнаяБазаФайловая Тогда + + МоментЗапуска = Неопределено; + МоментОкончания = Неопределено; + НомерСеанса = Неопределено; + НачалоСеанса = Неопределено; + Если ВыполнитьРегламентноеЗаданиеВручнуюНаСервере( + ТекущиеДанные.Идентификатор, + МоментЗапуска, + , + МоментОкончания, + НомерСеанса, + НачалоСеанса, + , + ОбновитьВсе, + ПроцедураУжеВыполняется) Тогда + + ПоказатьОповещениеПользователя( + НСтр("ru = 'Выполнена процедура регламентного задания'"), + , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1. + |Процедура выполнялась с %2 по %3'"), + ТекущиеДанные.Наименование, + Строка(МоментЗапуска), + Строка(МоментОкончания)), + БиблиотекаКартинок.ВыполнитьРегламентноеЗаданиеВручную); + Иначе + Если ПроцедураУжеВыполняется Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедура регламентного задания ""%1"" уже выполняется в сеансе %2, открытом %3.'"), + ТекущиеДанные.Наименование, + Строка(НомерСеанса), + Строка(НачалоСеанса))); + Иначе + Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Удалить( + Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Найти(ВыделеннаяСтрока)); + КонецЕсли; + КонецЕсли; + Иначе + МоментЗапуска = Неопределено; + ИдентификаторФоновогоЗадания = ""; + ПредставлениеФоновогоЗадания = ""; + + Если ВыполнитьРегламентноеЗаданиеВручнуюНаСервере( + ТекущиеДанные.Идентификатор, + МоментЗапуска, + ИдентификаторФоновогоЗадания, + , + , + , + ПредставлениеФоновогоЗадания, + ОбновитьВсе, + ПроцедураУжеВыполняется) Тогда + + ПоказатьОповещениеПользователя( + НСтр("ru = 'Запущена процедура регламентного задания'"), + , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1. + |Процедура запущена в фоновом задании %2'"), + ТекущиеДанные.Наименование, + Строка(МоментЗапуска)), + БиблиотекаКартинок.ВыполнитьРегламентноеЗаданиеВручную); + + ИдентификаторыФоновыхЗаданийПриРучномВыполнении.Добавить( + ИдентификаторФоновогоЗадания, + ТекущиеДанные.Наименование); + + ПодключитьОбработчикОжидания( + "СообщитьОбОкончанииРучногоВыполненияРегламентногоЗадания", 0.1, Истина); + Иначе + Если ПроцедураУжеВыполняется Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Процедура регламентного задания ""%1"" уже выполняется в фоновом задании ""%2"", начатом %3.'"), + ТекущиеДанные.Наименование, + ПредставлениеФоновогоЗадания, + Строка(МоментЗапуска))); + Иначе + Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Удалить( + Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Найти(ВыделеннаяСтрока)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Индекс = Индекс + 1; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗапуститьОтдельныйСеанс(Команда) + + Состояние(НСтр("ru = 'Запуск отдельного сеанса для выполнения регламентных заданий.'"), + , + НСтр("ru = 'Пожалуйста, подождите...'")); + + ПодключитьОбработчикОжидания( + "ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданийЧерезОбработчикОжидания", 1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьРегламентноеЗаданиеВыполнить(Команда) + + ДобавитьСкопироватьИзменитьРегламентноеЗадание("Изменить"); + +КонецПроцедуры + +&НаКлиенте +Процедура НастройкаВыполненияРегламентныхЗаданий(Команда) + + ПараметрыФормы = Новый Структура("СкрытьКомандуЗапускаОтдельногоСеанса", Истина); + + ОткрытьФормуМодально( + "Обработка.РегламентныеИФоновыеЗадания.Форма.НастройкаВыполненияРегламентныхЗаданий", + ПараметрыФормы); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьДанныеВыполнить(Команда) + + ОбновитьДанные(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьРасписаниеРегламентногоЗаданияВыполнить(Команда) + + ТекущиеДанные = Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Предупреждение( НСтр("ru = 'Выберите регламентное задание.'") ); + Иначе + Диалог = Новый ДиалогРасписанияРегламентногоЗадания( + РегламентныеЗаданияКлиент.ПолучитьРасписаниеРегламентногоЗадания(ТекущиеДанные.Идентификатор)); + + Если Диалог.ОткрытьМодально() Тогда + + РегламентныеЗаданияКлиент.УстановитьРасписаниеРегламентногоЗадания( + ТекущиеДанные.Идентификатор, + Диалог.Расписание); + + ОбновитьТаблицуРегламентныхЗаданий(ТекущиеДанные.Идентификатор); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФоновоеЗаданиеВыполнить(Команда) + + ОткрытьФоновоеЗадание(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьФоновоеЗаданиеВыполнить(Команда) + + Если Элементы.ТаблицаФоновыеЗадания.ТекущиеДанные = Неопределено Тогда + Предупреждение( НСтр("ru = 'Выберите фоновое задание.'") ); + + Иначе + ОтменитьФоновоеЗаданиеНаСервере(Элементы.ТаблицаФоновыеЗадания.ТекущиеДанные.Идентификатор); + + Предупреждение(НСтр("ru = 'Задание отменено, но состояние отмены будет + |установлено сервером только через секунды, + |возможно потребуется обновить данные вручную.'")); + КонецЕсли; + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЗаполнитьНастройкиФормы(Знач Настройки) + + ОбновитьТаблицуРегламентныхЗаданий(); + + // Настройка отбора фоновых заданий. + Если Настройки.Получить("ОтборПоСостояниюАктивно") = Неопределено Тогда + Настройки.Вставить("ОтборПоСостояниюАктивно", Истина); + КонецЕсли; + + Если Настройки.Получить("ОтборПоСостояниюЗавершено") = Неопределено Тогда + Настройки.Вставить("ОтборПоСостояниюЗавершено", Истина); + КонецЕсли; + + Если Настройки.Получить("ОтборПоСостояниюЗавершеноАварийно") = Неопределено Тогда + Настройки.Вставить("ОтборПоСостояниюЗавершеноАварийно", Истина); + КонецЕсли; + + Если Настройки.Получить("ОтборПоСостояниюОтменено") = Неопределено Тогда + Настройки.Вставить("ОтборПоСостояниюОтменено", Истина); + КонецЕсли; + + Если Настройки.Получить("ОтбиратьПоРегламентномуЗаданию") = Неопределено + ИЛИ Настройки.Получить("РегламентноеЗаданиеДляОтбораИдентификатор") = Неопределено Тогда + Настройки.Вставить("ОтбиратьПоРегламентномуЗаданию", Ложь); + Настройки.Вставить("РегламентноеЗаданиеДляОтбораИдентификатор", ПустойИдентификатор); + КонецЕсли; + + // Настройка отбора по периоду "Без отбора". + // См. также обработчик события ВидОтбораПоПериодуПриИзменении переключателя. + Если Настройки.Получить("ВидОтбораПоПериоду") = Неопределено + ИЛИ Настройки.Получить("ОтборПериодС") = Неопределено + ИЛИ Настройки.Получить("ОтборПериодПо") = Неопределено Тогда + + Настройки.Вставить("ВидОтбораПоПериоду", 0); + ТекущаяДатаСеанса = ТекущаяДатаСеанса(); + Настройки.Вставить("ОтборПериодС", НачалоДня(ТекущаяДатаСеанса) - 3*3600); + Настройки.Вставить("ОтборПериодПо", НачалоДня(ТекущаяДатаСеанса) + 9*3600); + КонецЕсли; + + Для каждого КлючИЗначение Из Настройки Цикл + Попытка + ЭтаФорма[КлючИЗначение.Ключ] = КлючИЗначение.Значение; + Исключение + КонецПопытки; + КонецЦикла; + + // Настройка видимости и доступности. + Элементы.ОтборПериодС.ТолькоПросмотр = НЕ (ВидОтбораПоПериоду = 4); + Элементы.ОтборПериодПо.ТолькоПросмотр = НЕ (ВидОтбораПоПериоду = 4); + Элементы.РегламентноеЗаданиеДляОтбора.Доступность = ОтбиратьПоРегламентномуЗаданию; + + ОбновитьТаблицуФоновыхЗаданий(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФоновоеЗадание() + + Если Элементы.ТаблицаФоновыеЗадания.ТекущиеДанные = Неопределено Тогда + Предупреждение (НСтр("ru = 'Выберите фоновое задание.'")); + Иначе + СписокПередаваемыхСвойств = + "Идентификатор, + |Ключ, + |Наименование, + |ИмяМетода, + |Состояние, + |Начало, + |Конец, + |Расположение, + |СообщенияПользователюИОписаниеИнформацииОбОшибке, + |ИдентификаторРегламентногоЗадания, + |НаименованиеРегламентногоЗадания"; + ЗначенияТекущихДанных = Новый Структура(СписокПередаваемыхСвойств); + ЗаполнитьЗначенияСвойств(ЗначенияТекущихДанных, Элементы.ТаблицаФоновыеЗадания.ТекущиеДанные); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Идентификатор", Элементы.ТаблицаФоновыеЗадания.ТекущиеДанные.Идентификатор); + ПараметрыФормы.Вставить("СвойстваФоновогоЗадания", ЗначенияТекущихДанных); + + ОткрытьФормуМодально("Обработка.РегламентныеИФоновыеЗадания.Форма.ФоновоеЗадание", ПараметрыФормы); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ТекущаяДатаСеансаНаСервере() + + Возврат ТекущаяДатаСеанса(); + +КонецФункции &НаСервере Функция ОповещенияОбОкончанииВыполненияРегламентныхЗаданий() ОповещенияОбОкончанииВыполнения = Новый Массив; + Если ИдентификаторыФоновыхЗаданийПриРучномВыполнении.Количество() > 0 Тогда Индекс = ИдентификаторыФоновыхЗаданийПриРучномВыполнении.Количество() - 1; + УстановитьПривилегированныйРежим(Истина); Пока Индекс >= 0 Цикл - Отбор = Новый Структура("УникальныйИдентификатор", Новый УникальныйИдентификатор(ИдентификаторыФоновыхЗаданийПриРучномВыполнении[Индекс].Значение)); + + Отбор = Новый Структура("УникальныйИдентификатор", Новый УникальныйИдентификатор( + ИдентификаторыФоновыхЗаданийПриРучномВыполнении[Индекс].Значение)); + МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + Если МассивФоновыхЗаданий.Количество() = 1 Тогда МоментОкончания = МассивФоновыхЗаданий[0].Конец; + Если ЗначениеЗаполнено(МоментОкончания) Тогда - ОповещенияОбОкончанииВыполнения.Добавить(Новый Структура("ПредставлениеРегламентногоЗадания, МоментОкончания", ИдентификаторыФоновыхЗаданийПриРучномВыполнении[Индекс].Представление, МоментОкончания)); + + ОповещенияОбОкончанииВыполнения.Добавить( + Новый Структура( + "ПредставлениеРегламентногоЗадания, + |МоментОкончания", + ИдентификаторыФоновыхЗаданийПриРучномВыполнении[Индекс].Представление, + МоментОкончания)); + ИдентификаторыФоновыхЗаданийПриРучномВыполнении.Удалить(Индекс); КонецЕсли; Иначе @@ -405,17 +513,24 @@ Процедура СообщитьОбОкончанииРучногоВыполненияРегламентногоЗадания() ОповещенияОбОкончанииВыполнения = ОповещенияОбОкончанииВыполненияРегламентныхЗаданий(); + Для каждого Оповещение Из ОповещенияОбОкончанииВыполнения Цикл - ПоказатьОповещениеПользователя(НСтр("ru = 'Выполнена процедура регламентного задания'"), , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1. - |Процедура завершена в фоновом задании %2'"), - Оповещение.ПредставлениеРегламентногоЗадания, - Строка(Оповещение.МоментОкончания)), - БиблиотекаКартинок.ВыполнитьРегламентноеЗаданиеВручную); + + ПоказатьОповещениеПользователя( + НСтр("ru = 'Выполнена процедура регламентного задания'"), + , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1. + |Процедура завершена в фоновом задании %2'"), + Оповещение.ПредставлениеРегламентногоЗадания, + Строка(Оповещение.МоментОкончания)), + БиблиотекаКартинок.ВыполнитьРегламентноеЗаданиеВручную); КонецЦикла; Если ИдентификаторыФоновыхЗаданийПриРучномВыполнении.Количество() > 0 Тогда - ПодключитьОбработчикОжидания("СообщитьОбОкончанииРучногоВыполненияРегламентногоЗадания", 2, Истина); + + ПодключитьОбработчикОжидания( + "СообщитьОбОкончанииРучногоВыполненияРегламентногоЗадания", 2, Истина); КонецЕсли; КонецПроцедуры @@ -424,28 +539,33 @@ Процедура ОбновитьСписокВыбораРегламентногоЗадания() Таблица = ТаблицаРегламентныеЗадания; - Список = Элементы.РегламентноеЗаданиеДляОтбора.СписокВыбора; + Список = Элементы.РегламентноеЗаданиеДляОтбора.СписокВыбора; + // Добавление предопределенного элемента. Если Список.Количество() = 0 Тогда Список.Добавить(ПустойИдентификатор, ТекстНеОпределено); КонецЕсли; + Индекс = 1; Для каждого Задание ИЗ Таблица Цикл - Если Индекс >= Список.Количество() ИЛИ Список[Индекс].Значение <> Задание.Идентификатор Тогда - // Вставка нового задания + Если Индекс >= Список.Количество() + ИЛИ Список[Индекс].Значение <> Задание.Идентификатор Тогда + // Вставка нового задания. Список.Вставить(Индекс, Задание.Идентификатор, Задание.Наименование); Иначе Список[Индекс].Представление = Задание.Наименование; КонецЕсли; Индекс = Индекс + 1; КонецЦикла; - // Удаление лишних строк + + // Удаление лишних строк. Пока Индекс < Список.Количество() Цикл Список.Удалить(Индекс); КонецЦикла; ЭлементСписка = Список.НайтиПоЗначению(РегламентноеЗаданиеДляОтбораИдентификатор); Если ЭлементСписка = Неопределено Тогда + РегламентноеЗаданиеДляОтбораИдентификатор = ПустойИдентификатор; РегламентноеЗаданиеДляОтбораПредставление = ТекстНеОпределено; Иначе @@ -455,9 +575,29 @@ КонецПроцедуры &НаСервере -Функция ВыполнитьРегламентноеЗаданиеВручнуюНаСервере(Знач ИдентификаторРегламентногоЗадания, МоментЗапуска, ИдентификаторФоновогоЗадания, МоментОкончания = Неопределено, НомерСеанса = Неопределено, НачалоСеанса = Неопределено, ПредставлениеФоновогоЗадания = Неопределено, ОбновитьВсе = Ложь, ПроцедураУжеВыполняется = Неопределено) +Функция ВыполнитьРегламентноеЗаданиеВручнуюНаСервере(Знач ИдентификаторРегламентногоЗадания, + МоментЗапуска, + ИдентификаторФоновогоЗадания, + МоментОкончания = Неопределено, + НомерСеанса = Неопределено, + НачалоСеанса = Неопределено, + ПредставлениеФоновогоЗадания = Неопределено, + ОбновитьВсе = Ложь, + ПроцедураУжеВыполняется = Неопределено) - ЗапускВыполнен = РегламентныеЗаданияСервер.ВыполнитьРегламентноеЗаданиеВручную(ИдентификаторРегламентногоЗадания, МоментЗапуска, ИдентификаторФоновогоЗадания, МоментОкончания, НомерСеанса, НачалоСеанса, ПредставлениеФоновогоЗадания, ПроцедураУжеВыполняется); + Если ИнформационнаяБазаФайловая Тогда + МоментЗапуска = ТекущаяДатаСеанса(); + КонецЕсли; + + ЗапускВыполнен = РегламентныеЗаданияСервер.ВыполнитьРегламентноеЗаданиеВручную( + ИдентификаторРегламентногоЗадания, + МоментЗапуска, + ИдентификаторФоновогоЗадания, + МоментОкончания, + НомерСеанса, + НачалоСеанса, + ПредставлениеФоновогоЗадания, + ПроцедураУжеВыполняется); Если ОбновитьВсе Тогда ОбновитьДанные(); @@ -470,7 +610,7 @@ КонецФункции &НаСервере -Процедура ОтменитьФоновоеЗаданиеНаСервере(Идентификатор) +Процедура ОтменитьФоновоеЗаданиеНаСервере(Знач Идентификатор) РегламентныеЗаданияСервер.ОтменитьФоновоеЗадание(Идентификатор); @@ -478,9 +618,8 @@ КонецПроцедуры - &НаСервере -Процедура УдалитьРегламентноеЗаданиеВыполнитьНаСервере(Идентификатор) +Процедура УдалитьРегламентноеЗаданиеВыполнитьНаСервере(Знач Идентификатор) Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(Идентификатор); Строка = ТаблицаРегламентныеЗадания.НайтиСтроки(Новый Структура("Идентификатор", Идентификатор))[0]; @@ -490,22 +629,32 @@ КонецПроцедуры &НаКлиенте -Процедура ДобавитьСкопироватьИзменитьРегламентноеЗадание(Действие) +Процедура ДобавитьСкопироватьИзменитьРегламентноеЗадание(Знач Действие) Если Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные = Неопределено Тогда Предупреждение ( НСтр("ru = 'Выберите регламентное задание.'") ); - ИначеЕсли Действие = "Изменить" И Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Количество() > 1 Тогда + ИначеЕсли Действие = "Изменить" + И Элементы.ТаблицаРегламентныеЗадания.ВыделенныеСтроки.Количество() > 1 Тогда + Предупреждение(НСтр("ru = 'Выберите одно регламентное задание.'")); Иначе - ОткрытьФормуМодально("Обработка.РегламентныеИФоновыеЗадания.Форма.РегламентноеЗадание", - Новый Структура("Идентификатор, Действие", - Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные.Идентификатор, - Действие)); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Идентификатор", Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные.Идентификатор); + ПараметрыФормы.Вставить("Действие", Действие); + + ОткрытьФормуМодально("Обработка.РегламентныеИФоновыеЗадания.Форма.РегламентноеЗадание", ПараметрыФормы); КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ОтложенноеОбновленияДанных() + + ОбновитьДанные(); + +КонецПроцедуры + &НаСервере Процедура ОбновитьДанные() @@ -523,14 +672,18 @@ Таблица = ТаблицаРегламентныеЗадания; Если ИдентификаторРегламентногоЗадания = Неопределено Тогда - // + Индекс = 0; Для каждого Задание ИЗ ТекущиеЗадания Цикл Идентификатор = Строка(Задание.УникальныйИдентификатор); - Если Индекс >= Таблица.Количество() ИЛИ Таблица[Индекс].Идентификатор <> Идентификатор Тогда - // Вставка нового задания + + Если Индекс >= Таблица.Количество() + ИЛИ Таблица[Индекс].Идентификатор <> Идентификатор Тогда + + // Вставка нового задания. Обновляемое = Таблица.Вставить(Индекс); - // Установка уникального идентификатора + + // Установка уникального идентификатора. Обновляемое.Идентификатор = Идентификатор; Иначе Обновляемое = Таблица[Индекс]; @@ -539,14 +692,20 @@ Индекс = Индекс + 1; КонецЦикла; - // Удаление лишних строк + // Удаление лишних строк. Пока Индекс < Таблица.Количество() Цикл Таблица.Удалить(Индекс); КонецЦикла; Иначе - Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(ИдентификаторРегламентногоЗадания)); - Строки = Таблица.НайтиСтроки(Новый Структура("Идентификатор", ИдентификаторРегламентногоЗадания)); - Если Задание <> Неопределено И Строки.Количество() > 0 Тогда + Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору( + Новый УникальныйИдентификатор(ИдентификаторРегламентногоЗадания)); + + Строки = Таблица.НайтиСтроки( + Новый Структура("Идентификатор", ИдентификаторРегламентногоЗадания)); + + Если Задание <> Неопределено + И Строки.Количество() > 0 Тогда + ОбновитьСтрокуТаблицыРегламентныхЗаданий(Строки[0], Задание); КонецЕсли; КонецЕсли; @@ -555,20 +714,26 @@ КонецПроцедуры +&НаСервере Процедура ОбновитьСтрокуТаблицыРегламентныхЗаданий(Строка, Задание); ЗаполнитьЗначенияСвойств(Строка, Задание); + // Уточнение наименования Строка.Наименование = РегламентныеЗаданияСервер.ПредставлениеРегламентногоЗадания(Задание); + // Установка Даты завершения и Состояния завершения по последней фоновой процедуре - СвойстваПоследнегоФоновогоЗадания = РегламентныеЗаданияСервер.ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); + СвойстваПоследнегоФоновогоЗадания = РегламентныеЗаданияСервер + .ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); + Если СвойстваПоследнегоФоновогоЗадания = Неопределено Тогда + Строка.ДатаОкончания = ТекстНеОпределено; Строка.СостояниеВыполнения = ТекстНеОпределено; Иначе Строка.ДатаОкончания = ?(ЗначениеЗаполнено(СвойстваПоследнегоФоновогоЗадания.Конец), - СвойстваПоследнегоФоновогоЗадания.Конец, - "<>"); + СвойстваПоследнегоФоновогоЗадания.Конец, + "<>"); Строка.СостояниеВыполнения = СвойстваПоследнегоФоновогоЗадания.Состояние; КонецЕсли; @@ -577,22 +742,28 @@ &НаСервере Процедура ОбновитьТаблицуФоновыхЗаданий() - // 1. Подготовка отбора + // 1. Подготовка отбора. Отбор = Новый Структура; - // 1.1. Добавление отбора по состояниям + + // 1.1. Добавление отбора по состояниям. МассивСостояний = Новый Массив; + Если ОтборПоСостояниюАктивно Тогда МассивСостояний.Добавить(СостояниеФоновогоЗадания.Активно); КонецЕсли; + Если ОтборПоСостояниюЗавершено Тогда МассивСостояний.Добавить(СостояниеФоновогоЗадания.Завершено); КонецЕсли; + Если ОтборПоСостояниюЗавершеноАварийно Тогда МассивСостояний.Добавить(СостояниеФоновогоЗадания.ЗавершеноАварийно); КонецЕсли; + Если ОтборПоСостояниюОтменено Тогда МассивСостояний.Добавить(СостояниеФоновогоЗадания.Отменено); КонецЕсли; + Если МассивСостояний.Количество() <> 4 Тогда Если МассивСостояний.Количество() = 1 Тогда Отбор.Вставить("Состояние", МассивСостояний[0]); @@ -600,7 +771,8 @@ Отбор.Вставить("Состояние", МассивСостояний); КонецЕсли; КонецЕсли; - // 1.2. Добавление отбор по регламентному заданию + + // 1.2. Добавление отбора по регламентному заданию. Если ОтбиратьПоРегламентномуЗаданию Тогда Отбор.Вставить( "ИдентификаторРегламентногоЗадания", @@ -608,42 +780,61 @@ "", РегламентноеЗаданиеДляОтбораИдентификатор)); КонецЕсли; - // 1.3. Добавление отбор по периоду + + // 1.3. Добавление отбора по периоду. Если ВидОтбораПоПериоду <> 0 Тогда Отбор.Вставить("Начало", ОтборПериодС); Отбор.Вставить("Конец", ОтборПериодПо); КонецЕсли; - // 2. Обновление списока фоновых заданий + // 2. Обновление списка фоновых заданий. Таблица = ТаблицаФоновыеЗадания; КоличествоФоновыхЗаданийВсего = 0; - ТекущаяТаблица = РегламентныеЗаданияСервер.ПолучитьТаблицуСвойствФоновыхЗаданий(Отбор, КоличествоФоновыхЗаданийВсего); + + ТекущаяТаблица = РегламентныеЗаданияСервер.ПолучитьТаблицуСвойствФоновыхЗаданий( + Отбор, КоличествоФоновыхЗаданийВсего); + Индекс = 0; Для каждого Задание ИЗ ТекущаяТаблица Цикл - Если Индекс >= Таблица.Количество() ИЛИ Таблица[Индекс].Идентификатор <> Задание.Идентификатор Тогда - // Вставка нового задания + + Если Индекс >= Таблица.Количество() + ИЛИ Таблица[Индекс].Идентификатор <> Задание.Идентификатор Тогда + // Вставка нового задания. Обновляемое = Таблица.Вставить(Индекс); - // Установка уникального идентификатора + // Установка уникального идентификатора. Обновляемое.Идентификатор = Задание.Идентификатор; Иначе Обновляемое = Таблица[Индекс]; КонецЕсли; + ЗаполнитьЗначенияСвойств(Обновляемое, Задание); - // Установка наименования регламентного задания из коллекции ТаблицаРегламентныеЗадания + + // Установка наименования регламентного задания из коллекции ТаблицаРегламентныеЗадания. Если ЗначениеЗаполнено(Обновляемое.ИдентификаторРегламентногоЗадания) Тогда - Обновляемое.ИдентификаторРегламентногоЗадания = Обновляемое.ИдентификаторРегламентногоЗадания; - Строки = ТаблицаРегламентныеЗадания.НайтиСтроки(Новый Структура("Идентификатор", Обновляемое.ИдентификаторРегламентногоЗадания)); - Обновляемое.НаименованиеРегламентногоЗадания = ?(Строки.Количество() = 0, НСтр("ru = '<не найдено>'"), Строки[0].Наименование); + + Обновляемое.ИдентификаторРегламентногоЗадания + = Обновляемое.ИдентификаторРегламентногоЗадания; + + Строки = ТаблицаРегламентныеЗадания.НайтиСтроки( + Новый Структура("Идентификатор", Обновляемое.ИдентификаторРегламентногоЗадания)); + + Обновляемое.НаименованиеРегламентногоЗадания + = ?(Строки.Количество() = 0, НСтр("ru = '<не найдено>'"), Строки[0].Наименование); Иначе Обновляемое.НаименованиеРегламентногоЗадания = ТекстНеОпределено; Обновляемое.ИдентификаторРегламентногоЗадания = ТекстНеОпределено; КонецЕсли; - // Получение информации об ошибках - Обновляемое.СообщенияПользователюИОписаниеИнформацииОбОшибке = РегламентныеЗаданияСервер.СообщенияИОписанияОшибокФоновогоЗадания(Обновляемое.Идентификатор, Задание); + + // Получение информации об ошибках. + Обновляемое.СообщенияПользователюИОписаниеИнформацииОбОшибке + = РегламентныеЗаданияСервер.СообщенияИОписанияОшибокФоновогоЗадания( + Обновляемое.Идентификатор, Задание); + // Увеличение индекса Индекс = Индекс + 1; КонецЦикла; - // Удаление лишних строк + + // Удаление лишних строк. Пока Индекс < Таблица.Количество() Цикл Таблица.Удалить(Таблица.Количество()-1); КонецЦикла; @@ -652,3 +843,4 @@ Элементы.ТаблицаФоновыеЗадания.Обновить(); КонецПроцедуры + diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl index 9a3562772..3ed9586aa 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl @@ -1,35 +1,59 @@ - - //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Отказ от инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Возврат при получении формы для анализа. Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; Если Параметры.СвойстваФоновогоЗадания = Неопределено Тогда - СвойстваФоновогоЗадания = РегламентныеЗаданияСервер.ПолучитьСвойстваФоновогоЗадания(Параметры.Идентификатор); + + СвойстваФоновогоЗадания = РегламентныеЗаданияСервер + .ПолучитьСвойстваФоновогоЗадания(Параметры.Идентификатор); + Если СвойстваФоновогоЗадания = Неопределено Тогда ВызватьИсключение(НСтр("ru = 'Фоновое задание не найдено.'")); КонецЕсли; - СообщенияПользователюИОписаниеИнформацииОбОшибке = РегламентныеЗаданияСервер.СообщенияИОписанияОшибокФоновогоЗадания(Параметры.Идентификатор); + + СообщенияПользователюИОписаниеИнформацииОбОшибке = РегламентныеЗаданияСервер + .СообщенияИОписанияОшибокФоновогоЗадания(Параметры.Идентификатор); + Если ЗначениеЗаполнено(СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания) Тогда - ИдентификаторРегламентногоЗадания = СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания; - НаименованиеРегламентногоЗадания = РегламентныеЗаданияСервер.ПредставлениеРегламентногоЗадания(СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания); + + ИдентификаторРегламентногоЗадания + = СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания; + + НаименованиеРегламентногоЗадания + = РегламентныеЗаданияСервер.ПредставлениеРегламентногоЗадания( + СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания); Иначе НаименованиеРегламентногоЗадания = РегламентныеЗаданияСервер.ТекстНеОпределено(); ИдентификаторРегламентногоЗадания = РегламентныеЗаданияСервер.ТекстНеОпределено(); КонецЕсли; Иначе СвойстваФоновогоЗадания = Параметры.СвойстваФоновогоЗадания; - ЗаполнитьЗначенияСвойств(ЭтаФорма, СвойстваФоновогоЗадания, "СообщенияПользователюИОписаниеИнформацииОбОшибке, ИдентификаторРегламентногоЗадания, НаименованиеРегламентногоЗадания"); + ЗаполнитьЗначенияСвойств( + ЭтаФорма, + СвойстваФоновогоЗадания, + "СообщенияПользователюИОписаниеИнформацииОбОшибке, + |ИдентификаторРегламентногоЗадания, + |НаименованиеРегламентногоЗадания"); КонецЕсли; - ЗаполнитьЗначенияСвойств(ЭтаФорма, СвойстваФоновогоЗадания, "Идентификатор, Ключ, Наименование, Начало, Конец, Расположение, Состояние, ИмяМетода"); + + ЗаполнитьЗначенияСвойств( + ЭтаФорма, + СвойстваФоновогоЗадания, + "Идентификатор, + |Ключ, + |Наименование, + |Начало, + |Конец, + |Расположение, + |Состояние, + |ИмяМетода"); КонецПроцедуры diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Form.form b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Form.form index 4604cd20b..5794b4c6f 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Form.form +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Form.form @@ -1843,6 +1843,10 @@ OnCreateAtServer ПриСозданииНаСервере
    + + OnClose + ПриЗакрытии + LockOwner true true diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Module.bsl index cab30b12a..84b8cdfcf 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Module.bsl @@ -1,9 +1,9 @@ - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; @@ -14,13 +14,25 @@ КонецЕсли; Элементы.АктивныеПользователи1.Видимость = (ПолучитьСеансыИнформационнойБазы().Количество() > 1); + КонецПроцедуры &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - Если НЕ ОбработкаЗакрытияФормы() Тогда + + Если НЕ ОбработкаЗакрытияФормы() Тогда Отказ = Истина; КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + + ОтключитьОбработчикОжидания("ИстечениеВремениОжидания"); + ОтключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения"); + ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей"); + КонецПроцедуры &НаКлиенте @@ -36,7 +48,9 @@ &НаКлиенте Процедура ПутьККаталогуАрхивов2НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ОБъект.ФайлЗагрузкиРезервнойКопии = ПолучитьПуть(РежимДиалогаВыбораФайла.Открытие, "Архив резервной копии(*.zip)|*.zip"); + + ОБъект.ФайлЗагрузкиРезервнойКопии = ПолучитьПуть(РежимДиалогаВыбораФайла.Открытие, НСтр("ru = 'Архив резервной копии(*.zip)|*.zip'")); + КонецПроцедуры &НаКлиенте @@ -51,22 +65,30 @@ &НаКлиенте Процедура НадписьСписокДействий1Нажатие(Элемент) + ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); + КонецПроцедуры &НаКлиенте Процедура СписокПользователейНажатие(Элемент) + ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); + КонецПроцедуры &НаКлиенте Процедура ПроводитьРезервноеКопированиеПриВосстановленииДанныхПриИзменении(Элемент) + Элементы.ГруппаРезервнойКопииПриВосстановлении.Доступность = Объект.ПроводитьРезервноеКопированиеПриВосстановленииДанных; + КонецПроцедуры &НаКлиенте Процедура НадписьПерейтиВЖурналРегистрации1Нажатие(Элемент) + ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации"); + КонецПроцедуры @@ -75,17 +97,22 @@ &НаКлиенте Процедура Назад(Команда) + Элементы.СтраницыЗагрузкиДанных.ТекущаяСтраница = Элементы.СтраницыЗагрузкиДанных.ПодчиненныеЭлементы.СтраницаНастройкиЗагрузки; Элементы.Назад.Видимость = Ложь; + КонецПроцедуры &НаКлиенте Процедура ФормаОтмена(Команда) + Закрыть(); + КонецПроцедуры &НаКлиенте Процедура Готово(Команда) + ОчиститьСообщения(); ТекстСообщения = ""; @@ -114,53 +141,145 @@ УстановитьОбработчикОжиданияНачалаРезервногоКопирования(); УстановитьОбработчикОжиданияИстеченияТаймаутаРезервногоКопирования(); КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьВерсиюКомпоненты(Команда) + +#Если НЕ ВебКлиент Тогда + ТекстКоманды = ""; + + Попытка + ИмяБатФайла = ПолучитьИмяВременногоФайла("bat"); + ИмяФайлаЛога = ПолучитьИмяВременногоФайла("log"); + БатФайл = Новый ЗаписьТекста(ИмяБатФайла); + ТекстКоманды = "echo off"; + ТекстКоманды = ТекстКоманды + Символы.ПС + """regsvr32.exe"" /s """ + КаталогПрограммы() + "comcntr.dll"""; + ТекстКоманды = ТекстКоманды + Символы.ПС + "echo %errorlevel% >>""" + ИмяФайлаЛога + """"; + БатФайл.ЗаписатьСтроку(ТекстКоманды); + БатФайл.Закрыть(); + Shell = Новый COMОбъект("WScript.Shell"); + Shell.Run(ИмяБатФайла, 0, Истина); // запуск бат-файла со спрятанным окном (0) и с ожиданием завершения (Истина) + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстСообщения = НСтр("ru = 'Ошибка при регистрации компоненты comcntr.'") + Символы.ПС; + ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(РезервноеКопированиеИБКлиент.СобытиеЖурналаРегистрации(), + "Ошибка", + ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); + Предупреждение(ТекстСообщения + НСтр("ru = 'Подробности см. в Журнале регистрации.'")); + Возврат; + КонецПопытки; + + СтрокаФайла = ""; + Попытка + + УдалитьФайлы(ИмяБатФайла); + ФайлЛога = Новый ЧтениеТекста(ИмяФайлаЛога); + СтрокаФайла = ФайлЛога.ПрочитатьСтроку(); + ФайлЛога.Закрыть(); + УдалитьФайлы(ИмяФайлаЛога); + + Исключение + + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстСообщения = НСтр("ru = 'Ошибка при регистрации компоненты comcntr.'") + Символы.ПС; + + ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(РезервноеКопированиеИБКлиент.СобытиеЖурналаРегистрации(), + "Ошибка", + ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); + Предупреждение(ТекстСообщения + НСтр("ru = 'Подробности см. в Журнале регистрации.'")); + Возврат; + + КонецПопытки; + + Если СокрЛП(СтрокаФайла) <> "0" Тогда + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); + ТекстСообщения = НСтр("ru = 'Ошибка при регистрации компоненты comcntr.'") + Символы.ПС; + ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(РезервноеКопированиеИБКлиент.СобытиеЖурналаРегистрации(), + "Ошибка", + Строка(ТекущаяДата) + " " + ТекстСообщения + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Код ошибки regsvr32: %1. + | (Код ошибки 5 означает, что недостаточно прав доступа. Выполните командну от имени пользователя с правами администратора на локальной машине.) + | + |Текст команды: + |%2'"), СтрокаФайла, ТекстКоманды)); + ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); + Предупреждение(ТекстСообщения + НСтр("ru = ' + |Подробности см. в Журнале регистрации.'")); + Возврат; + + КонецЕсли; + + Ответ = Вопрос(НСтр("ru = 'Для завершения перерегистрации компоненты comcntr необходимо перезапустить сеанс 1С:Предприятия. + |Перезапустить сейчас?'"), РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Да Тогда + ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; + ЗавершитьРаботуСистемы(Истина, Истина); + КонецЕсли; +#КонецЕсли + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Процедура обработки открытия другой страницы формы восстановления данных. &НаКлиенте Процедура ПриОткрытииНовойСтраницы(СтраницаПомощника) + ПодчиненныеСтраницы = Элементы.СтраницыЗагрузкиДанных.ПодчиненныеЭлементы; Если СтраницаПомощника = ПодчиненныеСтраницы.ДополнительныеНастройки Тогда Элементы.Назад.Видимость = Истина; КонецЕсли; Элементы.СтраницыЗагрузкиДанных.ТекущаяСтраница = СтраницаПомощника; + КонецПроцедуры // Устанавливает заговолок кнопки "Далее" в зависимости от текущей страницы помощника &НаКлиенте Процедура УстановитьЗаголовокКнопкиДалее(ПараметрЗаголовка) + Если ПараметрЗаголовка Тогда Элементы.Готово.Заголовок = НСтр("ru = 'Далее >>'"); Иначе Элементы.Готово.Заголовок = НСтр("ru = 'Готово'"); КонецЕсли; + КонецПроцедуры // Подключает обработкчик ожидания истечения таймаута перед принудительным стартом резервного копирования/восстановления данных. &НаКлиенте Процедура УстановитьОбработчикОжиданияИстеченияТаймаутаРезервногоКопирования() + ПодключитьОбработчикОжидания("ИстечениеВремениОжидания", 300, Истина); + КонецПроцедуры // Подключает обработчик ожидания при отложенном резервном копировании &НаКлиенте Процедура УстановитьОбработчикОжиданияНачалаРезервногоКопирования() + ПодключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения", 120); + КонецПроцедуры // Процедура обновляет заголовок гиперссылки количества активных пользователей. &НаКлиенте Процедура ОбновитьКоличествоАктивныхПользователей() + Элементы.КоличествоАктивныхПользователей.Заголовок = РезервноеКопированиеИБСервер.ПолучитьКоличествоАктивныхПользователей(); + КонецПроцедуры // Функция запрашивает у пользователя и возвращает путь к файлу или каталогу. &НаКлиенте Функция ПолучитьПуть(РежимДиалога, Фильтр = "") + Режим = РежимДиалога; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); @@ -181,117 +300,35 @@ Возврат ДиалогОткрытияФайла.ПолноеИмяФайла; КонецЕсли; КонецЕсли; + КонецФункции -// Процедура обновления компоненты comcntr. -&НаКлиенте -Процедура ОбновитьВерсиюКомпоненты(Команда) -#Если НЕ ВебКлиент Тогда - ТекстКоманды = ""; - - Попытка - ИмяБатФайла = ПолучитьИмяВременногоФайла("bat"); - ИмяФайлаЛога = ПолучитьИмяВременногоФайла("log"); - БатФайл = Новый ЗаписьТекста(ИмяБатФайла); - ТекстКоманды = "echo off"; - ТекстКоманды = ТекстКоманды + Символы.ПС + """regsvr32.exe"" /s """ + КаталогПрограммы() + "comcntr.dll"""; - ТекстКоманды = ТекстКоманды + Символы.ПС + "echo %errorlevel% >>""" + ИмяФайлаЛога + """"; - БатФайл.ЗаписатьСтроку(ТекстКоманды); - БатФайл.Закрыть(); - Shell = Новый COMОбъект("WScript.Shell"); - Shell.Run(ИмяБатФайла, 0, Истина); // запуск бат-файла со спрятанным окном (0) и с ожиданием завершения (Истина) - - Исключение - - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстСообщения = НСтр("ru = 'Ошибка при регистрации компоненты comcntr.'") + Символы.ПС; - - ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(РезервноеКопированиеИБКлиент.СобытиеЖурналаРегистрации(), - "Ошибка", - ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - - ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - Предупреждение(ТекстСообщения + НСтр("ru = 'Подробности см. в Журнале регистрации.'")); - Возврат; - - КонецПопытки; - - Стр = ""; - Попытка - - УдалитьФайлы(ИмяБатФайла); - ФайлЛога = Новый ЧтениеТекста(ИмяФайлаЛога); - Стр = ФайлЛога.ПрочитатьСтроку(); - ФайлЛога.Закрыть(); - УдалитьФайлы(ИмяФайлаЛога); - - Исключение - - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстСообщения = НСтр("ru = 'Ошибка при регистрации компоненты comcntr.'") + Символы.ПС; - - ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(РезервноеКопированиеИБКлиент.СобытиеЖурналаРегистрации(), - "Ошибка", - ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - - ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - Предупреждение(ТекстСообщения + НСтр("ru = 'Подробности см. в Журнале регистрации.'")); - Возврат; - - КонецПопытки; - - Если СокрЛП(Стр) <> "0" Тогда - - ТекстСообщения = НСтр("ru = 'Ошибка при регистрации компоненты comcntr.'") + Символы.ПС; - ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(РезервноеКопированиеИБКлиент.СобытиеЖурналаРегистрации(), - "Ошибка", - Строка(ТекущаяДата()) + " " + ТекстСообщения + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Код ошибки regsvr32: %1. - | (Код ошибки 5 означает, что недостаточно прав доступа. Выполните командну от имени пользователя с правами администратора на локальной машине.) - | - |Текст команды: - |%2'"), Стр, ТекстКоманды)); - ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - Предупреждение(ТекстСообщения + НСтр("ru = ' - |Подробности см. в Журнале регистрации.'")); - Возврат; - - КонецЕсли; - - Ответ = Вопрос(НСтр("ru = 'Для завершения перерегистрации компоненты comcntr необходимо перезапустить сеанс 1С:Предприятия. - |Перезапустить сейчас?'"), РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Да Тогда - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; - ЗавершитьРаботуСистемы(Истина, Истина); - КонецЕсли; -#КонецЕсли -КонецПроцедуры - &НаКлиенте Функция ОбработкаЗакрытияФормы() + ТекущаяСтраница = Элементы.СтраницыЗагрузкиДанных.ТекущаяСтраница; Если ТекущаяСтраница = Элементы.СтраницыЗагрузкиДанных.ПодчиненныеЭлементы.СтраницаИнформацииИВыполненияРезервногоКопирования Тогда - ТекстВопроса = НСтр("ru = 'Прервать подготовку к восстановлению данных?'"); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет, НСтр("ru = 'Отмена резервного копирования.'")); + ТекстВопроса = НСтр("ru = 'Прервать подготовку к восстановлению данных?'"); + ЗаголовокВопроса = НСтр("ru = 'Отмена резервного копирования.'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет, ЗаголовокВопроса); Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат Ложь; КонецЕсли; КонецЕсли; - ОтключитьОбработчикОжидания("ИстечениеВремениОжидания"); - ОтключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения"); - ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей"); Возврат Истина; + КонецФункции // Проверка заполнения необходимых реквизитов формы. &НаКлиенте Функция ПроверитьЗаполнениеРеквизитов(ТекстСообщения) - Если ПустаяСтрока (Объект.ФайлЗагрузкиРезервнойКопии) Тогда + + Если ПустаяСтрока(Объект.ФайлЗагрузкиРезервнойКопии) Тогда ТекстСообщения = НСтр("ru = 'Не выбрана резервная копия для восстановления.'"); Возврат Ложь; КонецЕсли; - Если (Объект.ПроводитьРезервноеКопированиеПриВосстановленииДанных И ПустаяСтрока(Объект.КаталогСРезервнымиКопиями)) Тогда + Если (Объект.ПроводитьРезервноеКопированиеПриВосстановленииДанных И ПустаяСтрока(Объект.КаталогСРезервнымиКопиями)) Тогда ТекстСообщения = НСтр("ru = 'Не выбран каталог для резервной копии.'"); Попытка ТестовыйФайл = Новый ЗаписьXML; @@ -350,37 +387,38 @@ КонецПопытки; Возврат Результат; + КонецФункции - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ОБРАБОТЧИКОВ ОЖИДАНИЯ +// Процедуры обработчиков ожидания &НаКлиенте Процедура ИстечениеВремениОжидания() + ОтключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения"); - ТекстВопроса = НСтр("ru = 'Не удалось отключить всех пользователей от базы. Провести резервное копирование? (возможны ошибки при архивации)'"); - ТекстПояснения = НСтр("ru = 'Не удалось отключить пользователя.'"); + ТекстВопроса = НСтр("ru = 'Не удалось отключить всех пользователей от базы. Провести резервное копирование? (возможны ошибки при архивации)'"); + ТекстПояснения = НСтр("ru = 'Не удалось отключить пользователя.'"); Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 30, КодВозвратаДиалога.Нет, ТекстПояснения, КодВозвратаДиалога.Нет); Если Ответ = КодВозвратаДиалога.Да Тогда НачатьРезервноеКопирование(); КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура ПроверкаНаЕдинственностьПодключения() + Если РезервноеКопированиеИБСервер.ПолучитьКоличествоАктивныхПользователей() = 1 Тогда НачатьРезервноеКопирование(); КонецЕсли; + КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ - &НаКлиенте Процедура НачатьРезервноеКопирование() + ИмяГлавногоФайлаСкрипта = СформироватьФайлыСкриптаОбновления(); ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(РезервноеКопированиеИБКлиент.СобытиеЖурналаРегистрации(), "Информация", @@ -389,13 +427,15 @@ ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; ЗавершитьРаботуСистемы(Ложь); ЗапуститьПриложение("""" + ИмяГлавногоФайлаСкрипта + """", РезервноеКопированиеИБКлиент.ПолучитьКаталогФайла(ИмяГлавногоФайлаСкрипта)); + КонецПроцедуры ////////////////////////////////////////////////////////////////////////////////////////////////////////// -//процедуры и функции подготовки восстановления данных +// Процедуры и функции подготовки восстановления данных &НаКлиенте Функция СформироватьФайлыСкриптаОбновления() + ПараметрыКопирования = РезервноеКопированиеИБКлиент.КлиентскиеПараметрыРезервногоКопирования(); ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); СоздатьКаталог(ПараметрыКопирования.КаталогВременныхФайловОбновления); @@ -442,10 +482,12 @@ ФайлСкрипта.Записать(ИмяГлавногоФайлаСкрипта, КодировкаТекста.UTF16); Возврат ИмяГлавногоФайлаСкрипта; + КонецФункции &НаКлиенте Функция ПолучитьПараметрыАутентификацииАдминистратораОбновления() + Результат = Новый Структура("ИмяПользователя, |ПарольПользователя, |СтрокаПодключения, @@ -468,10 +510,12 @@ Результат.СтрокаПодключения = "Usr=""" + Пользователь + """;Pwd=""" + ПарольАдминистратораИБ + """;"; Результат.ПараметрыАутентификации = "/N""" + Пользователь + """ /P""" + ПарольАдминистратораИБ + """ /WA-"; Возврат Результат; + КонецФункции &НаСервере Функция ПолучитьТекстыМакетов(ИменаМакетов, СтруктураПараметров, СообщенияДляЖурналаРегистрации) + // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); @@ -484,10 +528,12 @@ Результат.Добавить(Обработки.РезервноеКопированиеИБ.ПолучитьМакет(ИмяМакета).ПолучитьТекст()); КонецЦикла; Возврат Результат; + КонецФункции &НаСервере Функция ПолучитьТекстСкрипта(СтруктураПараметров) + // Файл обновления конфигурации: main.js ШаблонСкрипта = Обработки.РезервноеКопированиеИБ.ПолучитьМакет("МакетФайлаЗагрузкаИБ"); @@ -524,33 +570,35 @@ СтрокаПутиКИнформационнойБазе = ?(ПризнакФайловогоРежима, ПутьКИнформационнойБазе, ""); Результат = СтрЗаменить(Результат, "[ИменаФайловОбновления]" , ИменаФайловОбновления); - Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаПрограммы]" , Подг(ИмяИсполняемогоФайлаПрограммы)); - Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , Подг(ПараметрПутиКИнформационнойБазе)); - Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы]" , Подг(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", "")))); - Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы2]" , Подг("1Cv8.1CD")); - Результат = СтрЗаменить(Результат, "[СтрокаСоединенияИнформационнойБазы]" , Подг(СтрокаСоединенияИнформационнойБазы)); - Результат = СтрЗаменить(Результат, "[ПараметрыАутентификацииПользователя]" , Подг(СтруктураПараметров.ПараметрыСкрипта.ПараметрыАутентификации)); - Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]" , Подг(СтруктураПараметров.СобытиеЖурналаРегистрации)); + Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаПрограммы]" , ПодготовитьТекст(ИмяИсполняемогоФайлаПрограммы)); + Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , ПодготовитьТекст(ПараметрПутиКИнформационнойБазе)); + Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы]" , ПодготовитьТекст(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", "")))); + Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы2]" , ПодготовитьТекст("1Cv8.1CD")); + Результат = СтрЗаменить(Результат, "[СтрокаСоединенияИнформационнойБазы]" , ПодготовитьТекст(СтрокаСоединенияИнформационнойБазы)); + Результат = СтрЗаменить(Результат, "[ПараметрыАутентификацииПользователя]" , ПодготовитьТекст(СтруктураПараметров.ПараметрыСкрипта.ПараметрыАутентификации)); + Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]" , ПодготовитьТекст(СтруктураПараметров.СобытиеЖурналаРегистрации)); Результат = СтрЗаменить(Результат, "[АдресЭлектроннойПочты]", ""); - Результат = СтрЗаменить(Результат, "[ИмяАдминистратораОбновления]" , Подг(ИмяПользователя())); + Результат = СтрЗаменить(Результат, "[ИмяАдминистратораОбновления]" , ПодготовитьТекст(ИмяПользователя())); Результат = СтрЗаменить(Результат, "[СоздаватьРезервнуюКопию]" ,"true"); - Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]",Подг(Объект.ФайлЗагрузкиРезервнойКопии)); + Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]",ПодготовитьТекст(Объект.ФайлЗагрузкиРезервнойКопии)); СтрокаКаталога = ПроверитьКаталогНаУказаниеКорневогоЭлемента(Объект.КаталогСРезервнымиКопиями); - Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии2]" ,Подг(СтрокаКаталога+"\backup"+СтрокаКаталогаИзДаты())); + Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии2]" ,ПодготовитьТекст(СтрокаКаталога+"\backup"+СтрокаКаталогаИзДаты())); Результат = СтрЗаменить(Результат, "[ПроводитьДопРезервноеКопирование]",?(Объект.ПроводитьРезервноеКопированиеПриВосстановленииДанных,"true","false")); Результат = СтрЗаменить(Результат, "[ВосстанавливатьИнформационнуюБазу]" , "false"); Результат = СтрЗаменить(Результат, "[БлокироватьСоединенияИБ]" , ?(СтруктураПараметров.ИнформационнаяБазаФайловая, "false", "true")); - Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , Подг(СтруктураПараметров.ИмяCOMСоединителя)); + Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , ПодготовитьТекст(СтруктураПараметров.ИмяCOMСоединителя)); Результат = СтрЗаменить(Результат, "[ИспользоватьCOMСоединитель]" , ?(СтруктураПараметров.ЭтоБазоваяВерсияКонфигурации, "false", "true")); - Результат = СтрЗаменить(Результат, "[КаталогВременныхФайлов]" , Подг(КаталогВременныхФайлов())); + Результат = СтрЗаменить(Результат, "[КаталогВременныхФайлов]" , ПодготовитьТекст(КаталогВременныхФайлов())); Возврат Результат; + КонецФункции &НаСервере Функция ПроверитьКаталогНаУказаниеКорневогоЭлемента(СтрокаКаталога) + Если Прав(СтрокаКаталога, 2) = ":\" Тогда Возврат Лев(СтрокаКаталога, СтрДлина(СтрокаКаталога) - 1) ; Иначе @@ -561,58 +609,64 @@ &НаСервере Функция СтрокаКаталогаИзДаты() + СтрокаВозврата = ""; - ДатаСейчас = ТекущаяДата(); + ДатаСейчас = ТекущаяДатаСеанса(); СтрокаВозврата = Формат(ДатаСейчас, "ДФ = гггг_ММ_дд_ЧЧ_мм_сс"); Возврат СтрокаВозврата; + КонецФункции &НаСервереБезКонтекста -Функция Подг(Знач Текст) +Функция ПодготовитьТекст(Знач Текст) + Возврат "'" + СтрЗаменить(Текст, "\", "\\") + "'"; + КонецФункции &НаСервере Функция ПолучитьСтрокуСоединенияИИнформациюОСоединениях(СообщенияДляЖурналаРегистрации) + // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); Результат = ПолучитьИнформациюОНаличииСоединений(); Результат.Вставить("СтрокаСоединенияИнформационнойБазы", СоединенияИБКлиентСервер.ПолучитьСтрокуСоединенияИнформационнойБазы(0)); Возврат Результат; + КонецФункции &НаСервереБезКонтекста Функция ПолучитьИнформациюОНаличииСоединений(СообщенияДляЖурналаРегистрации = Неопределено) + // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); УстановитьПривилегированныйРежим(Истина); Результат = Новый Структура( - "НаличиеАктивныхСоединений, НаличиеCOMСоединений, НаличиеСоединенияКонфигуратором, ЕстьАктивныеПользователи", - НаличиеАктивныхСоединений(), НаличиеCOMСоединений(), - НаличиеСоединенияКонфигуратором(), ЕстьАктивныеПользователи()); - + "НаличиеАктивныхСоединений, НаличиеCOMСоединений, НаличиеСоединенияКонфигуратором, ЕстьАктивныеПользователи", + НаличиеАктивныхСоединений(), НаличиеCOMСоединений(), НаличиеСоединенияКонфигуратором(), ЕстьАктивныеПользователи()); Возврат Результат; + КонецФункции &НаСервереБезКонтекста Функция ЭтоСеансКонфигуратором(СеансИнформационнойБазы) + Возврат ВРег(СеансИнформационнойБазы.ИмяПриложения) = ВРег("Designer"); + КонецФункции &НаСервереБезКонтекста Функция ЭтоCOMСоединение(СеансИнформационнойБазы) + Возврат ВРег(СеансИнформационнойБазы.ИмяПриложения) = ВРег("COMConnection"); + КонецФункции -// Проверка наличия соединения конфигуратором. -// -// Возвращаемое значение: -// Булево - Истина, если соединение есть, -// Ложь, если соединения нет. &НаСервереБезКонтекста Функция НаличиеСоединенияКонфигуратором() + МассивСеансов = ПолучитьСеансыИнформационнойБазы(); Для Каждого Сеанс Из МассивСеансов Цикл @@ -622,10 +676,12 @@ КонецЦикла; Возврат Ложь; + КонецФункции &НаСервереБезКонтекста Функция НаличиеCOMСоединений() + МассивСеансов = ПолучитьСеансыИнформационнойБазы(); Для Каждого Сеанс Из МассивСеансов Цикл @@ -635,27 +691,24 @@ КонецЦикла; Возврат Ложь; + КонецФункции -// Проверка наличия активных соединений с информационной базой. -// -// Возвращаемое значение: -// Булево - Истина, если соединения есть, -// Ложь, если соединений нет. &НаСервереБезКонтекста Функция НаличиеАктивныхСоединений(СообщенияДляЖурналаРегистрации = Неопределено) + // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); Возврат ПолучитьСеансыИнформационнойБазы().Количество() > 1; + КонецФункции &НаСервереБезКонтекста Функция ЕстьАктивныеПользователи(СообщенияДляЖурналаРегистрации = Неопределено) + // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); УстановитьПривилегированныйРежим(Истина); Возврат ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0; + Конецфункции - - - diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl index 961744dea..8d8429b69 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl @@ -1,4 +1,3 @@ - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -29,6 +28,7 @@ Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; + Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда ВызватьИсключение НСтр("ru = 'В клиент-серверном варианте работы резервное копирование следует выполнять сторонними средствами (средствами СУБД).'"); КонецЕсли; @@ -92,18 +92,26 @@ Элементы.ПараметрыИнтерактивногоРезервногоКопирования.ТекущаяСтраница = Элементы.ПараметрыИнтерактивногоРезервногоКопирования.ПодчиненныеЭлементы.СтраницаКопированиеСейчас; Элементы.НадписьПояснениеКИнтерактивномуКопированию.Заголовок = НСтр("ru = 'Нажмите ""Далее"" для выполнения резервного копирования прямо сейчас.'"); КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + Если НЕ ОбработкаЗакрытияФормы() Тогда Отказ = Истина; КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура ПриЗакрытии() + СоединенияИБ.РазрешитьРаботуПользователей(); + ОтключитьОбработчикОжидания("ИстечениеВремениОжидания"); + ОтключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения"); + ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей"); + ПараметрыРезервногоКопированияИБ.ПроцессВыполняется = Ложь; КонецПроцедуры @@ -114,21 +122,28 @@ &НаКлиенте Процедура НадписьСписокДействийНажатие(Элемент) + ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); + КонецПроцедуры &НаКлиенте Процедура СписокПользователейНажатие(Элемент) + ОткрытьФормуМодально("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); + КонецПроцедуры &НаКлиенте Процедура НадписьЖурналРегистрацииНажатие(Элемент) + ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации"); + КонецПроцедуры &НаКлиенте Процедура ПереключательИнтерактивногоРезервногоКопированияПриИзменении(Элемент) + ПараметрПереключения = Объект.КодТипаИнтерактивногоРезервногоКопирования; Если ПараметрПереключения = 1 Тогда УстановитьЗаголовокКнопкиДалее(Истина); @@ -143,6 +158,7 @@ Элементы.ПараметрыИнтерактивногоРезервногоКопирования.ТекущаяСтраница = Элементы.ПараметрыИнтерактивногоРезервногоКопирования.ПодчиненныеЭлементы.СтраницаПустая; Элементы.НадписьПояснениеКИнтерактивномуКопированию.Заголовок = НСтр("ru = 'Нажмите ""Готово"", чтобы закрыть помощник. Резервное копирование начнется перед закрытием программы.'"); КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -157,13 +173,17 @@ &НаКлиенте Процедура НадписьПерейтиВЖурналРегистрации1Нажатие(Элемент) + ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации"); + КонецПроцедуры &НаКлиенте Процедура ТекстПутиОткрытие(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; ЗапуститьПриложение(ТекстПути); + КонецПроцедуры @@ -172,6 +192,7 @@ &НаКлиенте Процедура Далее(Команда) + ОчиститьСообщения(); ИнформацияОбОшибке = ""; @@ -191,24 +212,29 @@ Иначе Закрыть(); КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура Назад(Команда) + ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ТекущаяСтраница; Если ТекущаяСтраницаПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.ДополнительныеНастройки Тогда ПриОткрытииНовойСтраницы(Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаВыполненияРезервногоКопирования); КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура Отмена(Команда) + Закрыть(); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Обработчик изменения страницы помощника. Открывает новую страницу и выполняет необходимые действия. // Параметры : @@ -256,7 +282,8 @@ НачатьРезервноеКопирование(); Иначе ОчиститьСообщения(); - Если ДатаОтложенногоРезервногоКопирования <= ТекущаяДата() Тогда + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); + Если ДатаОтложенногоРезервногоКопирования <= ТекущаяДата Тогда НазванияСоединенийИБ = ""; Если НЕ АктивныТолькоКлиентскиеПриложения(НазванияСоединенийИБ) Тогда @@ -296,6 +323,7 @@ Иначе Элементы.СтраницыПомощника.ТекущаяСтраница = НоваяСтраница; КонецЕсли; + КонецПроцедуры &НаСервереБезКонтекста @@ -321,11 +349,14 @@ &НаКлиенте Процедура ОповещениеПользователю(ТекстОповещения) - ПоказатьОповещениеПользователя("Резервное копирование", , ТекстОповещения) + + ПоказатьОповещениеПользователя("Резервное копирование", , ТекстОповещения); + КонецПроцедуры &НаКлиенте Функция ПроверитьДоступКИБ() + Результат = Истина; // В базовых версиях проверку подключения не осуществляем; // при некорректном вводе имени и пароля обновление завершится неуспешно. @@ -365,6 +396,7 @@ КонецЕсли; Возврат Результат; + КонецФункции &НаКлиенте @@ -402,6 +434,7 @@ // Обработчик значения переключателя "Код типа резервного копирования" при нажатии на кнопку "Далее". &НаКлиенте Процедура ОбработатьВыборРежимаИнтерактивногоКопирования() + НоваяСтраницаПомощника = Неопределено; Если НЕ ПроверитьДоступКИБ() Тогда @@ -418,7 +451,8 @@ ИначеЕсли КодПереключателя = 2 Тогда - ПериодОтложенногоКопирования = ТекущаяДата() + (Объект.ПериодОтложенногоОповещения*ПолучитьПериодОтложенногоКопирования()); + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); + ПериодОтложенногоКопирования = ТекущаяДата + (Объект.ПериодОтложенногоОповещения*ПолучитьПериодОтложенногоКопирования()); ДатаОтложенногоРезервногоКопирования = ПериодОтложенногоКопирования; РезервноеКопированиеИБКлиент.ПодключитьОжиданиеРезервногоКопирования(); ОповещениеПользователю(НСтр("ru ='Резервное копирование будет проведено через указанный срок.'")); @@ -430,24 +464,30 @@ КонецЕсли; ПриОткрытииНовойСтраницы(НоваяСтраницаПомощника); + КонецПроцедуры &НаКлиенте Функция ПолучитьПериодОтложенногоКопирования() - ТекущаяДата = ТекущаяДата(); + + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); ПериодОповещения = ?(Объект.ЕдиницаИзмеренияПериодаОтложенногоОповещения = "Месяц", (ДобавитьМесяц(ТекущаяДата, Объект.ПериодОтложенногоОповещения) - ТекущаяДата), РезервноеКопированиеИБСервер.ПолучитьВременнойПараметрПоСтроке(Объект.ЕдиницаИзмеренияПериодаОтложенногоОповещения)); Возврат ПериодОповещения; + КонецФункции &НаКлиенте Процедура УстановитьОбработчикОжиданияИстеченияТаймаутаРезервногоКопирования() + ПодключитьОбработчикОжидания("ИстечениеВремениОжидания", 300, Истина); + КонецПроцедуры &НаКлиенте Процедура ИстечениеВремениОжидания() + ОтключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения"); ТекстВопроса = НСтр("ru = 'Не удалось отключить всех пользователей от базы. Провести резервное копирование? (возможны ошибки при архивации)'"); ТекстПояснения = НСтр("ru = 'Не удалось отключить пользователя.'"); @@ -455,31 +495,41 @@ Если Ответ = КодВозвратаДиалога.Да Тогда НачатьРезервноеКопирование(); КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура УстановитьОбработчикОжиданияНачалаРезервногоКопирования() + ПодключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения", 30); + КонецПроцедуры &НаКлиенте Процедура ПроверкаНаЕдинственностьПодключения() - Если РезервноеКопированиеИБСервер.ПолучитьКоличествоАктивныхПользователей() = 1 Тогда + + КоличествоПользователей = РезервноеКопированиеИБСервер.ПолучитьКоличествоАктивныхПользователей(); + Элементы.КоличествоАктивныхПользователей.Заголовок = Строка(КоличествоПользователей); + Если КоличествоПользователей = 1 Тогда НачатьРезервноеКопирование(); КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура УстановитьЗаголовокКнопкиДалее(ПараметрЗаголовка) + Если ПараметрЗаголовка Тогда Элементы.Далее.Заголовок = НСтр("ru = 'Далее >>'"); Иначе Элементы.Далее.Заголовок = НСтр("ru = 'Готово'"); КонецЕсли; + КонецПроцедуры &НаКлиенте Функция ПолучитьПуть(РежимДиалога) + Режим = РежимДиалога; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); Если Режим = РежимДиалогаВыбораФайла.ВыборКаталога Тогда @@ -495,11 +545,14 @@ Возврат ДиалогОткрытияФайла.ПолноеИмяФайла; КонецЕсли; КонецЕсли; + КонецФункции &НаКлиенте Процедура ОбновитьКоличествоАктивныхПользователей() + Элементы.КоличествоАктивныхПользователей.Заголовок = РезервноеКопированиеИБСервер.ПолучитьКоличествоАктивныхПользователей(); + КонецПроцедуры &НаКлиенте @@ -516,15 +569,19 @@ ЗавершитьРаботуСистемы(Ложь); ЗапуститьПриложение("""" + ИмяГлавногоФайлаСкрипта + """", РезервноеКопированиеИБКлиент.ПолучитьКаталогФайла(ИмяГлавногоФайлаСкрипта)); + КонецПроцедуры &НаКлиенте Процедура ОбновитьВерсиюКомпоненты(Команда) + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(); + КонецПроцедуры &НаКлиенте Функция ОбработкаЗакрытияФормы() + ТекущаяСтраница = Элементы.СтраницыПомощника.ТекущаяСтраница; Если ТекущаяСтраница = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаИнформацииИВыполненияРезервногоКопирования Тогда @@ -535,11 +592,8 @@ КонецЕсли; КонецЕсли; - СоединенияИБ.РазрешитьРаботуПользователей(); - ОтключитьОбработчикОжидания("ИстечениеВремениОжидания"); - ОтключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения"); - ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей"); Возврат Истина; + КонецФункции @@ -555,9 +609,10 @@ // Состав элементов функциональной страницы зависит от архитектуры информационной базы. &НаСервере Функция ОпределитьСтраницуПоПравамИАрхитектуре() + СтраницыПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; СтартоваяСтраница = Неопределено; - Если Пользователи.ЭтоПолноправныйПользовательИБ() Тогда + Если Пользователи.ЭтоПолноправныйПользователь() Тогда Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда СтартоваяСтраница = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаВыполненияРезервногоКопирования; КонецЕсли; @@ -565,10 +620,12 @@ СтартоваяСтраница = СтраницыПомощника.СтраницаДляПользователяБезПрав; КонецЕсли; Возврат СтартоваяСтраница; + КонецФункции &НаСервереБезКонтекста Процедура ПриИзмененииВремениОповещения(ПараметрКоличества, ПараметрТипа, ПараметрыРезервногоКопированияИБНаКлиенте) + ПараметрыОповещенияОРезервномКопировании = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); ТекущаяДата = ТекущаяДатаСеанса(); Если ПараметрКоличества = -1 Тогда // если пользователь отказался от оповещений @@ -585,27 +642,34 @@ ПараметрыОповещенияОРезервномКопировании.НастроеноПользователем = Истина; ПараметрыРезервногоКопированияИБНаКлиенте = ПараметрыОповещенияОРезервномКопировании; РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(ПараметрыОповещенияОРезервномКопировании); + Конецпроцедуры &НаСервереБезКонтекста Процедура ОстановитьСервисОповещенияОРезервномКопировании() + ПараметрыОповещенияОРезервномКопировании= РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); ПараметрыОповещенияОРезервномКопировании.ДатаПоследнегоОповещения = Дата('00010101'); ПараметрыОповещенияОРезервномКопировании.ПериодОповещения = 0; РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(ПараметрыОповещенияОРезервномКопировании); + КонецПроцедуры &НаСервереБезКонтекста Процедура УстановитьПутьАрхиваСКопиями(Путь, ПараметрыРезервногоКопированияИБНаКлиенте) + НастройкиПути = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(); НастройкиПути.КаталогХраненияРезервныхКопий = Путь; ПараметрыРезервногоКопированияИБНаКлиенте = НастройкиПути; РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(НастройкиПути); + КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьДоступность() + Возврат ПолучитьСеансыИнформационнойБазы().Количество() > 1; + КонецФункции ////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -692,8 +756,8 @@ &НаСервере Функция ПолучитьТекстыМакетов(ИменаМакетов, СтруктураПараметров, СообщенияДляЖурналаРегистрации) - // запись накопленных событий ЖР + // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); Результат = Новый Массив(); @@ -748,23 +812,23 @@ СтрокаПутиКИнформационнойБазе = ?(ПризнакФайловогоРежима, ПутьКИнформационнойБазе, ""); Результат = СтрЗаменить(Результат, "[ИменаФайловОбновления]" , ИменаФайловОбновления); - Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаПрограммы]" , Подг(ИмяИсполняемогоФайлаПрограммы)); - Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , Подг(ПараметрПутиКИнформационнойБазе)); - Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы]" , Подг(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", "")) + + Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаПрограммы]" , ПодготовитьТекст(ИмяИсполняемогоФайлаПрограммы)); + Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , ПодготовитьТекст(ПараметрПутиКИнформационнойБазе)); + Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы]" , ПодготовитьТекст(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", "")) + "1Cv8.1CD")); - Результат = СтрЗаменить(Результат, "[СтрокаСоединенияИнформационнойБазы]" , Подг(СтрокаСоединенияИнформационнойБазы)); - Результат = СтрЗаменить(Результат, "[ПараметрыАутентификацииПользователя]" , Подг(СтруктураПараметров.ПараметрыСкрипта.ПараметрыАутентификации)); - Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]" , Подг(СтруктураПараметров.СобытиеЖурналаРегистрации)); + Результат = СтрЗаменить(Результат, "[СтрокаСоединенияИнформационнойБазы]" , ПодготовитьТекст(СтрокаСоединенияИнформационнойБазы)); + Результат = СтрЗаменить(Результат, "[ПараметрыАутентификацииПользователя]" , ПодготовитьТекст(СтруктураПараметров.ПараметрыСкрипта.ПараметрыАутентификации)); + Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]" , ПодготовитьТекст(СтруктураПараметров.СобытиеЖурналаРегистрации)); Результат = СтрЗаменить(Результат, "[АдресЭлектроннойПочты]", ""); - Результат = СтрЗаменить(Результат, "[ИмяАдминистратораОбновления]" , Подг(ИмяПользователя())); + Результат = СтрЗаменить(Результат, "[ИмяАдминистратораОбновления]" , ПодготовитьТекст(ИмяПользователя())); Результат = СтрЗаменить(Результат, "[СоздаватьРезервнуюКопию]" ,"true"); СтрокаКаталога = ПроверитьКаталогНаУказаниеКорневогоЭлемента(Объект.КаталогСРезервнымиКопиями); - Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]" ,Подг(СтрокаКаталога+"\backup"+СтрокаКаталогаИзДаты())); + Результат = СтрЗаменить(Результат, "[КаталогРезервнойКопии]" ,ПодготовитьТекст(СтрокаКаталога+"\backup"+СтрокаКаталогаИзДаты())); Результат = СтрЗаменить(Результат, "[ВосстанавливатьИнформационнуюБазу]" , "false"); Результат = СтрЗаменить(Результат, "[БлокироватьСоединенияИБ]" , ?(СтруктураПараметров.ИнформационнаяБазаФайловая, "false", "true")); - Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , Подг(СтруктураПараметров.ИмяCOMСоединителя)); + Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , ПодготовитьТекст(СтруктураПараметров.ИмяCOMСоединителя)); Результат = СтрЗаменить(Результат, "[ИспользоватьCOMСоединитель]" , ?(СтруктураПараметров.ЭтоБазоваяВерсияКонфигурации, "false", "true")); Возврат Результат; @@ -773,6 +837,7 @@ &НаСервере Функция ПроверитьКаталогНаУказаниеКорневогоЭлемента(СтрокаКаталога) + Если Прав(СтрокаКаталога, 2) = ":\" Тогда Возврат Лев(СтрокаКаталога, СтрДлина(СтрокаКаталога) - 1) ; Иначе @@ -783,29 +848,36 @@ &НаСервере Функция СтрокаКаталогаИзДаты() + СтрокаВозврата = ""; ДатаСейчас = ТекущаяДатаСеанса(); СтрокаВозврата = Формат(ДатаСейчас, "ДФ = гггг_ММ_дд_ЧЧ_мм_сс"); Возврат СтрокаВозврата; + КонецФункции &НаСервереБезКонтекста -Функция Подг(Знач Текст) +Функция ПодготовитьТекст(Знач Текст) + Возврат "'" + СтрЗаменить(Текст, "\", "\\") + "'"; + КонецФункции &НаСервере Функция ПолучитьСтрокуСоединенияИИнформациюОСоединениях(СообщенияДляЖурналаРегистрации) + // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); Результат = ПолучитьИнформациюОНаличииСоединений(); Результат.Вставить("СтрокаСоединенияИнформационнойБазы", СоединенияИБКлиентСервер.ПолучитьСтрокуСоединенияИнформационнойБазы(0)); Возврат Результат; + КонецФункции &НаСервереБезКонтекста Функция ПолучитьИнформациюОНаличииСоединений(СообщенияДляЖурналаРегистрации = Неопределено) + // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); УстановитьПривилегированныйРежим(Истина); @@ -814,25 +886,26 @@ НаличиеАктивныхСоединений(), НаличиеCOMСоединений(), НаличиеСоединенияКонфигуратором(), ЕстьАктивныеПользователи()); Возврат Результат; + КонецФункции &НаСервереБезКонтекста Функция ЭтоСеансКонфигуратором(СеансИнформационнойБазы) + Возврат ВРег(СеансИнформационнойБазы.ИмяПриложения) = ВРег("Designer"); + КонецФункции &НаСервереБезКонтекста Функция ЭтоCOMСоединение(СеансИнформационнойБазы) + Возврат ВРег(СеансИнформационнойБазы.ИмяПриложения) = ВРег("COMConnection"); + КонецФункции -// Проверка наличия соединения конфигуратором. -// -// Возвращаемое значение: -// Булево - Истина, если соединение есть, -// Ложь, если соединения нет. &НаСервереБезКонтекста Функция НаличиеСоединенияКонфигуратором() + МассивСеансов = ПолучитьСеансыИнформационнойБазы(); Для Каждого Сеанс Из МассивСеансов Цикл Если ЭтоСеансКонфигуратором(Сеанс) Тогда @@ -840,10 +913,12 @@ КонецЕсли; КонецЦикла; Возврат Ложь; + КонецФункции &НаСервереБезКонтекста Функция НаличиеCOMСоединений() + МассивСеансов = ПолучитьСеансыИнформационнойБазы(); Для Каждого Cеанс Из МассивСеансов Цикл Если ЭтоCOMСоединение(Cеанс) Тогда @@ -851,24 +926,24 @@ КонецЕсли; КонецЦикла; Возврат Ложь; + КонецФункции -// Проверка наличия активных соединений с информационной базой. -// -// Возвращаемое значение: -// Булево - Истина, если соединения есть, -// Ложь, если соединений нет. &НаСервереБезКонтекста Функция НаличиеАктивныхСоединений(СообщенияДляЖурналаРегистрации = Неопределено) + // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); Возврат ПолучитьСеансыИнформационнойБазы().Количество() > 1; + КонецФункции &НаСервереБезКонтекста Функция ЕстьАктивныеПользователи(СообщенияДляЖурналаРегистрации = Неопределено) + // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); УстановитьПривилегированныйРежим(Истина); Возврат ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0; + Конецфункции diff --git a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Form.form b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Form.form index 78a4b5e16..aeb3e650b 100644 --- a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Form.form @@ -936,11 +936,8 @@ OnCreateAtServer ПриСозданииНаСервере - - OnClose - ПриЗакрытии - DontBlock + Use true true true @@ -1077,6 +1074,9 @@ true + + Организация + ДатаСогласия @@ -1115,6 +1115,9 @@ true + + ОтветственныйЗаОбработкуПерсональныхДанных + АдресОрганизации @@ -1133,6 +1136,9 @@ true + + АдресОрганизации + Объект diff --git a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl index 7df12f45a..ef066b849 100644 --- a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl @@ -1,3 +1,80 @@ +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если НЕ Параметры.Свойство("ДатаСогласия", ДатаСогласия) Тогда + ДатаСогласия = ТекущаяДатаСеанса(); + КонецЕсли; + + Если Параметры.Свойство("Организация", Организация) Тогда + ЗаполнитьДанныеОрганизации(); + КонецЕсли; + + Если ЗначениеЗаполнено(Параметры.Субъекты) Тогда + ВариантПечатиСогласия = "ВыводитьПоСубъектам"; + Для Каждого Субъект Из Параметры.Субъекты Цикл + НоваяСтрока = СубъектыПерсональныхДанных.Добавить(); + НоваяСтрока.Субъект = Субъект; + КонецЦикла; + ЗаполнитьДанныеСубъектовПерсональныхДанных(); + Иначе + ВариантПечатиСогласия = "ВыводитьБланк"; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + УстановитьДоступностьСпискаВыбораСубъектов(); + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ + +&НаКлиенте +Процедура ВариантПечатиСогласияПриИзменении(Элемент) + + УстановитьДоступностьСпискаВыбораСубъектов(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОрганизацияПриИзменении(Элемент) + + ЗаполнитьДанныеОрганизации(); + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД + +&НаКлиенте +Процедура Печать(Команда) + + УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Обработка.СогласиеНаОбработкуПерсональныхДанных", "СогласиеНаОбработкуПерсональныхДанных", ДанныеПечатиСогласия(), ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ПечатьMSWord(Команда) + + ПечатьСогласияНаОбработкуПерсональныхДанных("Обработка.СогласиеНаОбработкуПерсональныхДанных", "СогласиеНаОбработкуПерсональныхДанных(MSWord)", ДанныеПечатиСогласия(), ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ПечатьOOWritter(Команда) + + ПечатьСогласияНаОбработкуПерсональныхДанных("Обработка.СогласиеНаОбработкуПерсональныхДанных", "СогласиеНаОбработкуПерсональныхДанных(ODT)", ДанныеПечатиСогласия(), ЭтаФорма); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура УстановитьДоступностьСпискаВыбораСубъектов() @@ -10,7 +87,7 @@ Функция ДанныеПечатиСогласия() ОбщиеДанные = Новый Структура; - ОбщиеДанные.Вставить("ДатаСогласия", ?(ЗначениеЗаполнено(ДатаСогласия), Формат(ДатаСогласия, "ДФ='дд ММММ гггг'") + " г.", "«____»_______________20___г.")); + ОбщиеДанные.Вставить("ДатаСогласия", ?(ЗначениеЗаполнено(ДатаСогласия), Формат(ДатаСогласия, "ДЛФ=DD"), "«____»_______________20___г.")); ОбщиеДанные.Вставить("Организация", ?(ЗначениеЗаполнено(Организация), Организация, "<Организация>")); ОбщиеДанные.Вставить("АдресОрганизации", ?(ЗначениеЗаполнено(АдресОрганизации), АдресОрганизации, "<Адрес организации>")); ОбщиеДанные.Вставить("ОтветственныйЗаОбработкуПерсональныхДанных", ?(ЗначениеЗаполнено(ОтветственныйЗаОбработкуПерсональныхДанных), ОтветственныйЗаОбработкуПерсональныхДанных, "<ФИО ответственного лица>")); @@ -35,30 +112,26 @@ Возврат Субъекты; -КонецФункции // ДанныеПечатиСогласия +КонецФункции &НаСервере Процедура ЗаполнитьДанныеОрганизации() - АдресОрганизации = УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта(Организация, Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации); + ДанныеОрганизацииОператора = Новый Структура("АдресОрганизации, ОтветственныйЗаОбработкуПерсональныхДанных"); + + ЗащитаПерсональныхДанныхПереопределяемый.ДополнитьДанныеОрганизацииОператораПерсональныхДанных(Организация, ДанныеОрганизацииОператора, ДатаСогласия); + + ЗаполнитьЗначенияСвойств(ЭтаФорма, ДанныеОрганизацииОператора); КонецПроцедуры &НаСервере Процедура ЗаполнитьДанныеСубъектовПерсональныхДанных() - // заполнение данных субъектов - физических лиц - Для каждого СтрокаСубъект Из СубъектыПерсональныхДанных Цикл - Если ТипЗнч(СтрокаСубъект.Субъект) = Тип("СправочникСсылка.ФизическиеЛица") Тогда - СтрокаСубъект.ФИО = ОбщегоНазначения.ПолучитьЗначениеРеквизита(СтрокаСубъект.Субъект, "Наименование"); - СтрокаСубъект.ПаспортныеДанные = РегистрыСведений.ДокументыФизическихЛиц.ДокументУдостоверяющийЛичностьФизлица(СтрокаСубъект.Субъект, ДатаСогласия); - КонецЕсли; - КонецЦикла; - - // заполнение данных субъектов других типов + // заполнение данных субъектов ЗащитаПерсональныхДанныхПереопределяемый.ДополнитьДанныеСубъектовПерсональныхДанных(СубъектыПерсональныхДанных, ДатаСогласия); -КонецПроцедуры // ЗаполнитьДанныеСубъектовПерсональныхДанных +КонецПроцедуры &НаКлиенте Процедура ПечатьСогласияНаОбработкуПерсональныхДанных(ИмяМенеджераПечати, ИмяМакета, Субъекты, ФормаИсточник) @@ -132,134 +205,4 @@ УправлениеПечатьюКлиент.ОчиститьСсылки(ПечатнаяФорма, Ложь); УправлениеПечатьюКлиент.ОчиститьСсылки(Макет); -КонецПроцедуры // НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта - -/////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаСервереБезКонтекста -Функция СохраняемыеЗначения() - - СохраняемыеЗначения = Новый Массив; - СохраняемыеЗначения.Добавить("Организация"); - СохраняемыеЗначения.Добавить("АдресОрганизации"); - СохраняемыеЗначения.Добавить("ОтветственныйЗаОбработкуПерсональныхДанных"); - - Возврат СохраняемыеЗначения; - -КонецФункции - -&НаСервере -Процедура СохранитьЗначения() - - СохраняемыеЗначения = СохраняемыеЗначения(); - - Для Каждого СохраняемоеЗначение Из СохраняемыеЗначения Цикл - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "СогласиеНаОбработкуПерсональныхДанных", - СохраняемоеЗначение, - ЭтаФорма[СохраняемоеЗначение] - ); - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ВосстановитьЗначения() - - СохраняемыеЗначения = СохраняемыеЗначения(); - - Для Каждого СохраняемоеЗначение Из СохраняемыеЗначения Цикл - Если НЕ ЗначениеЗаполнено(ЭтаФорма[СохраняемоеЗначение]) Тогда - ЭтаФорма[СохраняемоеЗначение] = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "СогласиеНаОбработкуПерсональныхДанных", - СохраняемоеЗначение - ); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если НЕ Параметры.Свойство("ДатаСогласия", ДатаСогласия) Тогда - ДатаСогласия = ТекущаяДатаСеанса(); - КонецЕсли; - - Если Параметры.Свойство("Организация", Организация) Тогда - ЗаполнитьДанныеОрганизации(); - КонецЕсли; - - Если ЗначениеЗаполнено(Параметры.Субъекты) Тогда - ВариантПечатиСогласия = "ВыводитьПоСубъектам"; - Для Каждого Субъект Из Параметры.Субъекты Цикл - НоваяСтрока = СубъектыПерсональныхДанных.Добавить(); - НоваяСтрока.Субъект = Субъект; - КонецЦикла; - ЗаполнитьДанныеСубъектовПерсональныхДанных(); - Иначе - ВариантПечатиСогласия = "ВыводитьБланк"; - КонецЕсли; - - ВосстановитьЗначения(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - УстановитьДоступностьСпискаВыбораСубъектов(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриЗакрытии() - - СохранитьЗначения(); - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД - -&НаКлиенте -Процедура Печать(Команда) - - УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Обработка.СогласиеНаОбработкуПерсональныхДанных", "СогласиеНаОбработкуПерсональныхДанных", ДанныеПечатиСогласия(), ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура ПечатьMSWord(Команда) - - ПечатьСогласияНаОбработкуПерсональныхДанных("Обработка.СогласиеНаОбработкуПерсональныхДанных", "СогласиеНаОбработкуПерсональныхДанных(MSWord)", ДанныеПечатиСогласия(), ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура ПечатьOOWritter(Команда) - - ПечатьСогласияНаОбработкуПерсональныхДанных("Обработка.СогласиеНаОбработкуПерсональныхДанных", "СогласиеНаОбработкуПерсональныхДанных(ODT)", ДанныеПечатиСогласия(), ЭтаФорма); - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура ВариантПечатиСогласияПриИзменении(Элемент) - - УстановитьДоступностьСпискаВыбораСубъектов(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОрганизацияПриИзменении(Элемент) - - ЗаполнитьДанныеОрганизации(); - КонецПроцедуры diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl index c6666e9db..d8cafa2b4 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаАвтоматическогоСопоставления/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -18,7 +20,18 @@ КонецПроцедуры -// +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура СписокПолейСопоставленияПриИзменении(Элемент) + + ОбновитьТекстПоясняющейНадписи(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ВыполнитьСопоставление(Команда) @@ -34,14 +47,8 @@ КонецПроцедуры -&НаКлиенте -Процедура СписокПолейСопоставленияПриИзменении(Элемент) - - ОбновитьТекстПоясняющейНадписи(); - -КонецПроцедуры - -// +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура ОбновитьТекстПоясняющейНадписи() diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl index 006d2af16..62bf3acf3 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицы/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -11,6 +13,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура Применить(Команда) diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl index f12a4f1e3..f9d234761 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаПолейТаблицыСопоставления/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -11,6 +13,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура Применить(Команда) @@ -49,7 +54,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СВОЙСТВА +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Функция МаксимальноеКоличествоПользовательскихПолей() diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl index a64259ef2..2f616e521 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/НастройкаСортировки/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -11,6 +13,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура Применить(Команда) diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form index 17eed8fc6..09f27af74 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form @@ -818,7 +818,6 @@ AutoUse true true - false true Auto Auto diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl index b8b3a047e..67284c08e 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl @@ -7,6 +7,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + мВыдаватьПредупреждениеПриЗакрытииФормы = Истина; + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; @@ -67,7 +69,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура Применить(Команда) @@ -103,7 +105,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Функция ПоместитьТаблицуАвтоматическиСопоставленныхОбъектовВоВременноеХранилище() @@ -159,8 +161,3 @@ Объект.ТаблицаАвтоматическиСопоставленныхОбъектов.Загрузить(ТаблицаЗначений); КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ИНИЦИАЛИЗАЦИЯ - -мВыдаватьПредупреждениеПриЗакрытииФормы = Истина; diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form index 164d8784d..85c897b76 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form @@ -3,6 +3,45 @@ СтраницаСопоставления 80 + + Декорация1 + 302 + + <key>ru</key> + <value>Для сопоставления данных этой программы (колонка слева) с данными другой программы (колонка справа) +воспользуйтесь командой "Сопоставить автоматически...". +Оставшиеся несопоставленные данные можно связать друг с другом вручную.</value> + + true + true + + true + + + Декорация1РасширеннаяПодсказка + 309 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 303 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + ГруппаЗаголовкаТаблицы 210 @@ -23,7 +62,7 @@ ОтборПоСтатусуСопоставленияРасширеннаяПодсказка - 307 + 311 Label true true @@ -42,138 +81,17 @@ Left true + 50 true true + false true - true - false true true true Normal - - ИнформацияДайджестаСопоставления - 272 - - ПроцентСопоставленияОбъектов - 275 - true - true - - true - - - ПроцентСопоставленияОбъектов - - - ПроцентСопоставленияОбъектовРасширеннаяПодсказка - 310 - Label - true - true - - Left - - - - ПроцентСопоставленияОбъектовКонтекстноеМеню - 276 - true - - InputField - true - Enter - true - Left - true - - 4 - true - true - true - true - true - true - Normal - - - - КоличествоОбъектовНесопоставленных - 277 - true - true - - true - - - КоличествоОбъектовНесопоставленных - - - КоличествоОбъектовНесопоставленныхРасширеннаяПодсказка - 312 - Label - true - true - - Left - - - - КоличествоОбъектовНесопоставленныхКонтекстноеМеню - 278 - true - - InputField - true - Enter - true - Left - true - - 6 - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Дайджест сопоставления</value> - - - ru - Информация дайджеста сопоставления - - - ИнформацияДайджестаСопоставленияРасширеннаяПодсказка - 309 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - true true @@ -189,7 +107,7 @@ ГруппаЗаголовкаТаблицыРасширеннаяПодсказка - 306 + 310 Label true true @@ -215,6 +133,33 @@ ГруппаСвязи 294 + + ВыполнитьАвтоматическоеСопоставление + 71 + true + true + + true + + false + + ВыполнитьАвтоматическоеСопоставлениеРасширеннаяПодсказка + 316 + Label + true + true + + Left + + + Form.Command.ВыполнитьАвтоматическоеСопоставление + Normal + Auto + true + true + UserCmds + Auto + ДобавитьСопоставление 163 @@ -284,7 +229,7 @@ ГруппаСвязиРасширеннаяПодсказка - 316 + 315 Label true true @@ -349,6 +294,33 @@ UserCmds Auto + + Сортировка + 167 + true + true + + true + + false + + СортировкаРасширеннаяПодсказка + 322 + Label + true + true + + Left + + + Form.Command.Сортировка + Normal + Auto + true + true + UserCmds + Auto + true true @@ -375,8 +347,8 @@ - Сортировка - 167 + ВыполнитьЗагрузкуДанных + 282 true true @@ -384,8 +356,8 @@ false - СортировкаРасширеннаяПодсказка - 322 + ВыполнитьЗагрузкуДанныхРасширеннаяПодсказка + 323 Label true true @@ -393,13 +365,14 @@ Left - Form.Command.Сортировка + Form.Command.ВыполнитьЗагрузкуДанных Normal Auto true true UserCmds Auto + InAdditionalSubmenu Обновить @@ -412,7 +385,7 @@ false ОбновитьРасширеннаяПодсказка - 323 + 324 Label true true @@ -427,6 +400,90 @@ true UserCmds Auto + InAdditionalSubmenu + + + ПодменюНастройки + 268 + + ИзменитьПоляТаблицы + 281 + true + + true + + false + + ИзменитьПоляТаблицыРасширеннаяПодсказка + 326 + Label + true + true + + Left + + + Form.Command.ИзменитьПоляТаблицы + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ИзменитьСписокПолейТаблицы + 266 + true + true + + true + + false + + ИзменитьСписокПолейТаблицыРасширеннаяПодсказка + 327 + Label + true + true + + Left + + + Form.Command.НастройкаСпискаПолейТаблицы + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Настройка</value> + + + ru + Подменю настройки + + + ПодменюНастройкиРасширеннаяПодсказка + 325 + Label + true + true + + Left + + + true true @@ -439,7 +496,7 @@ КоманднаяПанельРасширеннаяПодсказка - 315 + 314 Label true true @@ -467,7 +524,7 @@ КнопкиТаблицыРасширеннаяПодсказка - 314 + 313 Label true true @@ -487,10 +544,6 @@ ТаблицаСопоставления 22 - - <key>ru</key> - <value>Сопоставление объектов этой базы (слева) с объектами второй информационной базы (справа)</value> - Style.ПоясняющийТекст @@ -503,7 +556,7 @@ ТаблицаСопоставления false - Top + None Add Change Copy @@ -534,7 +587,7 @@ None ТаблицаСопоставленияПриемникИндексКартинкиРасширеннаяПодсказка - 343 + 347 Label true true @@ -579,7 +632,7 @@ ТаблицаСопоставленияПриемникПоле1РасширеннаяПодсказка - 345 + 349 Label true true @@ -620,7 +673,7 @@ ТаблицаСопоставленияПриемникПоле2РасширеннаяПодсказка - 347 + 351 Label true true @@ -661,7 +714,7 @@ ТаблицаСопоставленияПриемникПоле3РасширеннаяПодсказка - 349 + 353 Label true true @@ -702,7 +755,7 @@ ТаблицаСопоставленияПриемникПоле4РасширеннаяПодсказка - 351 + 355 Label true true @@ -743,7 +796,7 @@ ТаблицаСопоставленияПриемникПоле5РасширеннаяПодсказка - 353 + 357 Label true true @@ -786,7 +839,7 @@ ПоляПриемникаРасширеннаяПодсказка - 342 + 346 Label true true @@ -817,7 +870,7 @@ ТаблицаСопоставленияИсточникИндексКартинкиРасширеннаяПодсказка - 356 + 360 Label true true @@ -861,7 +914,7 @@ ТаблицаСопоставленияИсточникПоле1РасширеннаяПодсказка - 358 + 362 Label true true @@ -902,7 +955,7 @@ ТаблицаСопоставленияИсточникПоле2РасширеннаяПодсказка - 360 + 364 Label true true @@ -943,7 +996,7 @@ ТаблицаСопоставленияИсточникПоле3РасширеннаяПодсказка - 362 + 366 Label true true @@ -984,7 +1037,7 @@ ТаблицаСопоставленияИсточникПоле4РасширеннаяПодсказка - 364 + 368 Label true true @@ -1025,7 +1078,7 @@ ТаблицаСопоставленияИсточникПоле5РасширеннаяПодсказка - 366 + 370 Label true true @@ -1068,7 +1121,7 @@ ПоляИсточникаРасширеннаяПодсказка - 355 + 359 Label true true @@ -1092,14 +1145,14 @@ Selection - рТаблицаСопоставленияВыбор + ТаблицаСопоставленияВыбор ТаблицаСопоставленияСтрокаПоиска - 333 + 337 ТаблицаСопоставленияСтрокаПоискаРасширеннаяПодсказка - 335 + 339 Label true true @@ -1109,7 +1162,7 @@ ТаблицаСопоставленияСтрокаПоискаКонтекстноеМеню - 334 + 338 true ТаблицаСопоставления @@ -1119,10 +1172,10 @@ ТаблицаСопоставленияСостояниеПросмотра - 336 + 340 ТаблицаСопоставленияСостояниеПросмотраРасширеннаяПодсказка - 338 + 342 Label true true @@ -1132,7 +1185,7 @@ ТаблицаСопоставленияСостояниеПросмотраКонтекстноеМеню - 337 + 341 true ViewStatusAddition @@ -1143,10 +1196,10 @@ ТаблицаСопоставленияУправлениеПоиском - 339 + 343 ТаблицаСопоставленияУправлениеПоискомРасширеннаяПодсказка - 341 + 345 Label true true @@ -1156,7 +1209,7 @@ ТаблицаСопоставленияУправлениеПоискомКонтекстноеМеню - 340 + 344 true SearchControlAddition @@ -1167,7 +1220,7 @@ ТаблицаСопоставленияРасширеннаяПодсказка - 332 + 336 Label true true @@ -1192,7 +1245,7 @@ false КонтекстноеМенюТаблицаСопоставленияДобавитьСопоставлениеРасширеннаяПодсказка - 325 + 329 Label true true @@ -1219,7 +1272,7 @@ false КонтекстноеМенюТаблицаСопоставленияОтменитьСопоставлениеРасширеннаяПодсказка - 326 + 330 Label true true @@ -1250,7 +1303,7 @@ ТаблицаСопоставленияКонтекстноеМенюГруппаСвязиРасширеннаяПодсказка - 324 + 328 Label true true @@ -1273,7 +1326,7 @@ ТаблицаСопоставленияКонтекстноеМенюНайтиРасширеннаяПодсказка - 328 + 332 Label true true @@ -1299,7 +1352,7 @@ ТаблицаСопоставленияКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка - 329 + 333 Label true true @@ -1330,7 +1383,7 @@ ТаблицаСопоставленияКонтекстноеМенюГруппаНайтиРасширеннаяПодсказка - 327 + 331 Label true true @@ -1350,7 +1403,7 @@ ТаблицаСопоставленияКонтекстноеМенюСортировкаРасширеннаяПодсказка - 330 + 334 Label true true @@ -1376,7 +1429,7 @@ ТаблицаСопоставленияКонтекстноеМенюОбновитьРасширеннаяПодсказка - 331 + 335 Label true true @@ -1409,7 +1462,6 @@ AutoUse true true - false true Auto Auto @@ -1423,6 +1475,246 @@ true + + ИнформацияДайджестаСопоставления + 272 + + КартинкаИнформацияОНаличииНесопоставленныхОбъектов + 304 + + <key>ru</key> + <value>Картинка информация о наличии несопоставленных объектов</value> + + true + true + + true + + + КартинкаИнформацияОНаличииНесопоставленныхОбъектовРасширеннаяПодсказка + 381 + Label + true + true + + Left + + + + КартинкаИнформацияОНаличииНесопоставленныхОбъектовКонтекстноеМеню + 305 + true + + 2 + true + 1 + true + false + + + CommonPicture.Информация + + + + + ПроцентСопоставленияОбъектов + 275 + true + true + + true + + + ПроцентСопоставленияОбъектов + + + ПроцентСопоставленияОбъектовРасширеннаяПодсказка + 382 + Label + true + true + + Left + + + + ПроцентСопоставленияОбъектовКонтекстноеМеню + 276 + true + + LabelField + true + Enter + true + Left + true + + 4 + true + true + + ru + ЧН=0 + + + System.DefaultGUIFont + true + false + false + false + + + + + НадписьПроцент + 298 + + <key>ru</key> + <value>%</value> + + true + true + + true + + + НадписьПроцентРасширеннаяПодсказка + 384 + Label + true + true + + Left + + + + НадписьПроцентКонтекстноеМеню + 299 + true + + Label + 2 + true + true + + Left + + + + КоличествоОбъектовНесопоставленных + 277 + true + true + + true + + + КоличествоОбъектовНесопоставленных + + + КоличествоОбъектовНесопоставленныхРасширеннаяПодсказка + 385 + Label + true + true + + Left + + + + КоличествоОбъектовНесопоставленныхКонтекстноеМеню + 278 + true + + LabelField + true + Enter + true + Left + true + + 6 + true + true + + ru + ЧН=0 + + + System.DefaultGUIFont + true + false + false + false + + + + + НадписьШт + 300 + + <key>ru</key> + <value>шт.</value> + + true + true + + true + + + НадписьШтРасширеннаяПодсказка + 387 + Label + true + true + + Left + + + + НадписьШтКонтекстноеМеню + 301 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Дайджест сопоставления</value> + + + ru + Информация дайджеста сопоставления + + + ИнформацияДайджестаСопоставленияРасширеннаяПодсказка + 380 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + true true @@ -1438,7 +1730,7 @@ СтраницаСопоставленияРасширеннаяПодсказка - 305 + 308 Label true true @@ -1470,7 +1762,7 @@ false ЗаписатьИЗакрытьРасширеннаяПодсказка - 298 + 306 Label true true @@ -1500,7 +1792,7 @@ false ЗаписатьОбновитьРасширеннаяПодсказка - 299 + 307 Label true true @@ -1516,146 +1808,6 @@ UserCmds Auto
    - - ВыполнитьАвтоматическоеСопоставление - 71 - true - true - - true - - false - - ВыполнитьАвтоматическоеСопоставлениеРасширеннаяПодсказка - 300 - Label - true - true - - Left - - - Form.Command.ВыполнитьАвтоматическоеСопоставление - Normal - Auto - true - true - UserCmds - Auto - - - ВыполнитьЗагрузкуДанных - 282 - true - true - - true - - false - - ВыполнитьЗагрузкуДанныхРасширеннаяПодсказка - 301 - Label - true - true - - Left - - - Form.Command.ВыполнитьЗагрузкуДанных - Normal - Auto - true - true - UserCmds - Auto - - - ПодменюНастройки - 268 - - ИзменитьСписокПолейТаблицы - 266 - true - true - - true - - false - - ИзменитьСписокПолейТаблицыРасширеннаяПодсказка - 303 - Label - true - true - - Left - - - Form.Command.НастройкаСпискаПолейТаблицы - Normal - Auto - true - true - UserCmds - Auto - - - ИзменитьПоляТаблицы - 281 - true - true - - true - - false - - ИзменитьПоляТаблицыРасширеннаяПодсказка - 304 - Label - true - true - - Left - - - Form.Command.ИзменитьПоляТаблицы - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Настройка</value> - - - ru - Подменю настройки - - - ПодменюНастройкиРасширеннаяПодсказка - 302 - Label - true - true - - Left - - - Popup - - Auto - Normal - - Left true @@ -2196,7 +2348,7 @@ ОтборПоСтатусуСопоставления <key>ru</key> - <value>Отбор</value> + <value>Выводить</value> 6 @@ -2214,7 +2366,7 @@ ПроцентСопоставленияОбъектов <key>ru</key> - <value>Сопоставлено, %</value> + <value>Сопоставлено</value> 2 @@ -2287,7 +2439,7 @@ КоличествоОбъектовНесопоставленных <key>ru</key> - <value>Осталось сопоставить, шт</value> + <value>Осталось сопоставить</value> 8 @@ -2327,7 +2479,7 @@ ДобавитьСопоставление <key>ru</key> - <value>Создать связь</value> + <value>Связать</value> 1 @@ -2337,9 +2489,6 @@ true - - StdPicture.CreateListItem - ДобавитьСопоставление @@ -2363,9 +2512,6 @@ true - - StdPicture.DeleteDirectly - ОтменитьСопоставление @@ -2405,7 +2551,7 @@ ВыполнитьАвтоматическоеСопоставление <key>ru</key> - <value>Автоматическое сопоставление...</value> + <value>Сопоставить автоматически...</value> 6 @@ -2471,7 +2617,7 @@ НастройкаСпискаПолейТаблицы <key>ru</key> - <value>Список полей таблицы</value> + <value>Настроить колонки таблицы...</value> 22 @@ -2540,7 +2686,7 @@ ВыполнитьЗагрузкуДанных <key>ru</key> - <value>Загрузить данные</value> + <value>Загрузить данные из другой программы</value> 3 diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl index 9dfff12ab..657b4dd98 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl @@ -1,15 +1,14 @@ &НаКлиенте Перем ВыдаватьПредупреждениеПриЗакрытииФормы; -//////////////////////////////////////////////////////////////////////////////// -// НА СЕРВЕРЕ - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ВыдаватьПредупреждениеПриЗакрытииФормы = Истина; + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; @@ -24,6 +23,17 @@ КонецЕсли; + ВыполнятьСопоставлениеДанных = Истина; + ВыполнятьЗагрузкуДанных = Истина; + + Если Параметры.Свойство("ВыполнятьСопоставлениеДанных") Тогда + ВыполнятьСопоставлениеДанных = Параметры.ВыполнятьСопоставлениеДанных; + КонецЕсли; + + Если Параметры.Свойство("ВыполнятьЗагрузкуДанных") Тогда + ВыполнятьЗагрузкуДанных = Параметры.ВыполнятьЗагрузкуДанных; + КонецЕсли; + // инициализируем обработку переданными параметрами ЗаполнитьЗначенияСвойств(Объект, Параметры); @@ -34,26 +44,385 @@ // заполняем список отборов СписокВыбора = Элементы.ОтборПоСтатусуСопоставления.СписокВыбора; - СписокВыбора.Добавить("ВсеОбъекты", "Все объекты"); - СписокВыбора.Добавить("СопоставленныеОбъектыНеутвержденные", "Изменения"); - СписокВыбора.Добавить("СопоставленныеОбъекты", "Сопоставленные объекты"); - СписокВыбора.Добавить("НесопоставленныеОбъекты", "Несопоставленные объекты"); - СписокВыбора.Добавить("НесопоставленныеОбъектыПриемника", "Несопоставленные объекты этой базы"); - СписокВыбора.Добавить("НесопоставленныеОбъектыИсточника", "Несопоставленные объекты второй базы"); + СписокВыбора.Добавить("ВсеОбъекты", НСтр("ru = 'Все данные'")); + СписокВыбора.Добавить("СопоставленныеОбъектыНеутвержденные", НСтр("ru = 'Изменения'")); + СписокВыбора.Добавить("СопоставленныеОбъекты", НСтр("ru = 'Сопоставленные данные'")); + СписокВыбора.Добавить("НесопоставленныеОбъекты", НСтр("ru = 'Несопоставленные данные'")); + СписокВыбора.Добавить("НесопоставленныеОбъектыПриемника", НСтр("ru = 'Несопоставленные данные этой базы'")); + СписокВыбора.Добавить("НесопоставленныеОбъектыИсточника", НСтр("ru = 'Несопоставленные данные второй базы'")); // установка отбора по умолчанию - ОтборПоСтатусуСопоставления = "ВсеОбъекты"; + ОтборПоСтатусуСопоставления = "НесопоставленныеОбъекты"; // установка заголока формы - ЗаголовокФормы = Объект.ИмяТаблицыПриемника + "#"; - ЗаголовокФормы = СтрЗаменить(ЗаголовокФормы, ".", " #"); + ПредставлениеДанных = Строка(Метаданные.НайтиПоТипу(Тип(Объект.ТипПриемникаСтрокой))); + Заголовок = НСтр("ru = 'Сопоставление данных ""[ПредставлениеДанных]""'"); + Заголовок = СтрЗаменить(Заголовок, "[ПредставлениеДанных]", ПредставлениеДанных); - Заголовок = СтрЗаменить(ЗаголовокФормы, "#", """"); + // Устанавливаем видимость элементов управления в зависимости от установленных опций + Элементы.ГруппаСвязи.Видимость = ВыполнятьСопоставлениеДанных; + Элементы.ВыполнитьАвтоматическоеСопоставление.Видимость = ВыполнятьСопоставлениеДанных; + Элементы.ИнформацияДайджестаСопоставления.Видимость = ВыполнятьСопоставлениеДанных; + Элементы.ТаблицаСопоставленияКонтекстноеМенюГруппаСвязи.Видимость = ВыполнятьСопоставлениеДанных; + + Элементы.ВыполнитьЗагрузкуДанных.Видимость = ВыполнятьЗагрузкуДанных; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Обновить(Неопределено); + + // устанавливает флаг модифицированности формы + ПодключитьОбработчикОжидания("УстановитьМодифицированностьФормы", 2); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Если Объект.ТаблицаНеутвержденныхСвязей.Количество() > 0 Тогда + + Если ВыдаватьПредупреждениеПриЗакрытииФормы = Истина Тогда + + НСтрока = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + + Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНетОтмена, ,КодВозвратаДиалога.Да); + + Если Ответ = КодВозвратаДиалога.Нет Тогда + + Возврат; // закрываем форму без сохранения данных + + ИначеЕсли Ответ = КодВозвратаДиалога.Да Тогда + + // закрываем форму с сохранением данных + + ИначеЕсли Ответ = КодВозвратаДиалога.Отмена Тогда + + // форму не закрываем; данные не сохраняем + Отказ = Истина; + Возврат; + + КонецЕсли; + + КонецЕсли; + + ВыдаватьПредупреждениеПриЗакрытииФормы = Истина; + + // применяем таблицу неутвержденных связей + ПрименитьТаблицуНеутвержденныхЗаписей(Отказ); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'Возникли ошибки.'")); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("КлючУникальности", КлючУникальности); + ПараметрыОповещения.Вставить("ДанныеУспешноЗагружены", Объект.ДанныеУспешноЗагружены); + + Оповестить("ЗакрытиеФормыСопоставленияОбъектов", ПараметрыОповещения); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ОтборПоСтатусуСопоставленияПриИзменении(Элемент) + + УстановитьОтборТабличныхЧастей(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаСопоставления + +&НаКлиенте +Процедура ТаблицаСопоставленияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + УстановитьСвязьИнтерактивно(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Обновить(Команда) + + Отказ = Ложь; + + // проверка на количество пользовательских полей для отображения + ВыполнитьПроверкуЗаданияПользовательскихПолей(Отказ, Объект.СписокИспользуемыхПолей.ВыгрузитьЗначения()); + + Если Отказ Тогда + Возврат; + КонецЕсли; + + // оповещение состояния + Состояние(НСтр("ru = 'Выполняется сопоставление объектов. Пожалуйста, подождите...'")); + + ВыполнитьОбновлениеНаСервере(Отказ); + + // устанавливаем текущий отбор в табличной части сопоставления + УстановитьОтборТабличныхЧастей(); + + // устанавливаем видимость и заголовки полей таблицы сопоставления + УстановитьВидимостьПолейТаблицы("ТаблицаСопоставления"); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'При выполнении операции сопоставления возникли ошибки.'")); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьАвтоматическоеСопоставление(Команда) + + Отказ = Ложь; + + // проверка на количество пользовательских полей для отображения + ВыполнитьПроверкуЗаданияПользовательскихПолей(Отказ, Объект.СписокИспользуемыхПолей.ВыгрузитьЗначения()); + + Если Отказ Тогда + Возврат; + КонецЕсли; + + // получаем список полей сопоставления от пользователя + ПараметрыДляФормы = Новый Структура("СписокПолейСопоставления", Объект.СписокПолейТаблицы.Скопировать()); + + СписокПолейСопоставления = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаАвтоматическогоСопоставления", ПараметрыДляФормы, ЭтаФорма); + + Если ТипЗнч(СписокПолейСопоставления) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + // выполняем автоматическое сопоставление объектов + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ИмяТаблицыПриемника", Объект.ИмяТаблицыПриемника); + ПараметрыФормы.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); + ПараметрыФормы.Вставить("ИмяТипаОбъектаТаблицыИсточника", Объект.ИмяТипаОбъектаТаблицыИсточника); + ПараметрыФормы.Вставить("ТипИсточникаСтрокой", Объект.ТипИсточникаСтрокой); + ПараметрыФормы.Вставить("ТипПриемникаСтрокой", Объект.ТипПриемникаСтрокой); + ПараметрыФормы.Вставить("ПоляТаблицыПриемника", Объект.ПоляТаблицыПриемника); + ПараметрыФормы.Вставить("ПоляПоискаТаблицыПриемника", Объект.ПоляПоискаТаблицыПриемника); + ПараметрыФормы.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); + ПараметрыФормы.Вставить("СписокПолейТаблицы", Объект.СписокПолейТаблицы.Скопировать()); + ПараметрыФормы.Вставить("СписокИспользуемыхПолей", Объект.СписокИспользуемыхПолей.Скопировать()); + ПараметрыФормы.Вставить("СписокПолейСопоставления", СписокПолейСопоставления.Скопировать()); + ПараметрыФормы.Вставить("МаксимальноеКоличествоПользовательскихПолей", МаксимальноеКоличествоПользовательскихПолей()); + ПараметрыФормы.Вставить("Заголовок", Заголовок); + + ПараметрыФормы.Вставить("АдресВременногоХранилищаТаблицыНеутвержденныхСвязей", ПоместитьТаблицуНеутвержденныхСвязейВоВременноеХранилище()); + + Состояние(НСтр("ru = 'Выполняется автоматическое сопоставление. Пожалуйста, подождите...'")); + + // открываем форму выполнения автоматического сопоставления объектов + АдресВременногоХранилища = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.РезультатАвтоматическогоСопоставления", ПараметрыФормы, ЭтаФорма); + + Если ТипЗнч(АдресВременногоХранилища) = Тип("Строка") Тогда + + // Применяем результат и обновляем таблицу сопоставления с учетом полученного сопоставления объектов + ПрименитьРезультатАвтоматическогоСопоставленияОбъектовИОбновить(Отказ, АдресВременногоХранилища); + + Если Не Отказ Тогда + + // устанавливаем текущий отбор + УстановитьОтборТабличныхЧастей(); + + КонецЕсли; + + КонецЕсли; + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'Во время выполнения автоматического сопоставления возникли ошибки.'")); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьЗагрузкуДанных(Команда) + + Отказ = Ложь; + + НСтрока = НСтр("ru = 'Выполнить загрузку данных в информационную базу?'"); + Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Да); + Если Ответ = КодВозвратаДиалога.Нет Тогда + Возврат; + КонецЕсли; + + Если Объект.ДанныеУспешноЗагружены Тогда + + НСтрока = НСтр("ru = 'Данные уже были успешно загружены. Выполнить загрузку данных повторно?'"); + Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); + Если Ответ = КодВозвратаДиалога.Нет Тогда + Возврат; + КонецЕсли; + + КонецЕсли; + + // оповещение состояния + Состояние(НСтр("ru = 'Выполняется загрузка данных. Пожалуйста, подождите...'")); + + // выполняем загрузку данных на сервере + ВыполнитьЗагрузкуДанныхНаСервере(Отказ); + + // обновляем данные в таблице сопоставления + Обновить(Команда); + + Если Отказ Тогда + + НСтрока = НСтр("ru = 'При загрузке данных возникли ошибки. + |Перейти в журнал регистрации?'"); + // + Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); + Если Ответ = КодВозвратаДиалога.Да Тогда + + ОбменДаннымиКлиент.ПерейтиВЖурналРегистрацииСобытийДанныхМодально(Объект.УзелИнформационнойБазы, ЭтаФорма, "ЗагрузкаДанных"); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьПоляТаблицы(Команда) + + ПараметрыДляФормы = Новый Структура("СписокПолей", Объект.СписокИспользуемыхПолей.Скопировать()); + + СписокПолейФормыНастройки = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаПолейТаблицы", ПараметрыДляФормы, ЭтаФорма); + + Если ТипЗнч(СписокПолейФормыНастройки) <> Тип("СписокЗначений") Тогда + + Возврат; + + КонецЕсли; + + Объект.СписокИспользуемыхПолей = СписокПолейФормыНастройки.Скопировать(); + + // устанавливаем видимость и заголовки полей таблицы сопоставления + УстановитьВидимостьПолейТаблицы("ТаблицаСопоставления"); + +КонецПроцедуры + +&НаКлиенте +Процедура НастройкаСпискаПолейТаблицы(Команда) + + Отказ = Ложь; + + ПараметрыДляФормы = Новый Структура("СписокПолей", Объект.СписокПолейТаблицы.Скопировать()); + + СписокПолейФормыНастройки = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаПолейТаблицыСопоставления", ПараметрыДляФормы, ЭтаФорма); + + Если ТипЗнч(СписокПолейФормыНастройки) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + Объект.СписокПолейТаблицы = СписокПолейФормыНастройки.Скопировать(); + + ЗаполнитьСписокОтмеченнымиЭлементами(Объект.СписокПолейТаблицы, Объект.СписокИспользуемыхПолей); + + // формируем Таблицу сортировки + ЗаполнитьТаблицуСортировки(Объект.СписокИспользуемыхПолей); + + // обновляем таблицу сопоставления с учетом новых полей таблицы + Обновить(Команда); + +КонецПроцедуры + +&НаКлиенте +Процедура Сортировка(Команда) + + ПараметрыДляФормы = Новый Структура("ТаблицаСортировки", Объект.ТаблицаСортировки); + + ТаблицаСортировкиРезультат = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаСортировки", ПараметрыДляФормы, ЭтаФорма); + + Если ТипЗнч(ТаблицаСортировкиРезультат) <> Тип("ДанныеФормыКоллекция") Тогда + + Возврат; + + КонецЕсли; + + Объект.ТаблицаСортировки.Очистить(); + + // заполняем коллекцию формы полученными настройками + Для Каждого СтрокаТаблицы ИЗ ТаблицаСортировкиРезультат Цикл + + ЗаполнитьЗначенияСвойств(Объект.ТаблицаСортировки.Добавить(), СтрокаТаблицы); + + КонецЦикла; + + // сортируем таблицу сопоставления + ВыполнитьСортировкуТаблицы(); + + // обновляем отбор в таблицах + УстановитьОтборТабличныхЧастей(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьСопоставление(Команда) + + УстановитьСвязьИнтерактивно(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьСопоставление(Команда) + + ВыделенныеСтроки = Элементы.ТаблицаСопоставления.ВыделенныеСтроки; + + ОтменитьСопоставлениеНаСервере(ВыделенныеСтроки); + + // обновляем отбор в табличных частях + УстановитьОтборТабличныхЧастей(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьОбновить(Команда) + + Отказ = Ложь; + + // применяем таблицу неутвержденных связей + ПрименитьТаблицуНеутвержденныхЗаписейИОбновить(Отказ); + + // устанавливаем текущий отбор в табличной части сопоставления + УстановитьОтборТабличныхЧастей(); + + Если Отказ Тогда + Предупреждение(НСтр("ru = 'Возникли ошибки.'")); + Иначе + Модифицированность = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + + ВыдаватьПредупреждениеПриЗакрытииФормы = Ложь; + Закрыть(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ВыполнитьОбновлениеНаСервере(Отказ) @@ -305,360 +674,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// НА КЛИЕНТЕ - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - Обновить(Неопределено); - - // устанавливает флаг модифицированности формы - ПодключитьОбработчикОжидания("УстановитьМодифицированностьФормы", 2); - -КонецПроцедуры - -&НаКлиенте -Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - - Если Объект.ТаблицаНеутвержденныхСвязей.Количество() > 0 Тогда - - Если ВыдаватьПредупреждениеПриЗакрытииФормы = Истина Тогда - - НСтрока = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); - - Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНетОтмена, ,КодВозвратаДиалога.Да); - - Если Ответ = КодВозвратаДиалога.Нет Тогда - - Возврат; // закрываем форму без сохранения данных - - ИначеЕсли Ответ = КодВозвратаДиалога.Да Тогда - - // закрываем форму с сохранением данных - - ИначеЕсли Ответ = КодВозвратаДиалога.Отмена Тогда - - // форму не закрываем; данные не сохраняем - Отказ = Истина; - Возврат; - - КонецЕсли; - - КонецЕсли; - - ВыдаватьПредупреждениеПриЗакрытииФормы = Истина; - - // применяем таблицу неутвержденных связей - ПрименитьТаблицуНеутвержденныхЗаписей(Отказ); - - Если Отказ Тогда - - Предупреждение(НСтр("ru = 'Возникли ошибки.'")); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриЗакрытии() - - ПараметрыОповещения = Новый Структура; - ПараметрыОповещения.Вставить("КлючУникальности", КлючУникальности); - ПараметрыОповещения.Вставить("ДанныеУспешноЗагружены", Объект.ДанныеУспешноЗагружены); - - Оповестить("ЗакрытиеФормыСопоставленияОбъектов", ПараметрыОповещения); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура Обновить(Команда) - - Отказ = Ложь; - - // проверка на количество пользовательских полей для отображения - ВыполнитьПроверкуЗаданияПользовательскихПолей(Отказ, Объект.СписокИспользуемыхПолей.ВыгрузитьЗначения()); - - Если Отказ Тогда - Возврат; - КонецЕсли; - - // оповещение состояния - Состояние(НСтр("ru = 'Выполняется сопоставление объектов. Пожалуйста, подождите...'")); - - ВыполнитьОбновлениеНаСервере(Отказ); - - // устанавливаем текущий отбор в табличной части сопоставления - УстановитьОтборТабличныхЧастей(); - - // устанавливаем видимость и заголовки полей таблицы сопоставления - УстановитьВидимостьПолейТаблицы("ТаблицаСопоставления"); - - Если Отказ Тогда - - Предупреждение(НСтр("ru = 'При выполнении операции сопоставления возникли ошибки.'")); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьАвтоматическоеСопоставление(Команда) - - Отказ = Ложь; - - // проверка на количество пользовательских полей для отображения - ВыполнитьПроверкуЗаданияПользовательскихПолей(Отказ, Объект.СписокИспользуемыхПолей.ВыгрузитьЗначения()); - - Если Отказ Тогда - Возврат; - КонецЕсли; - - // получаем список полей сопоставления от пользователя - ПараметрыДляФормы = Новый Структура("СписокПолейСопоставления", Объект.СписокПолейТаблицы.Скопировать()); - - СписокПолейСопоставления = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаАвтоматическогоСопоставления", ПараметрыДляФормы, ЭтаФорма); - - Если ТипЗнч(СписокПолейСопоставления) <> Тип("СписокЗначений") Тогда - Возврат; - КонецЕсли; - - // выполняем автоматическое сопоставление объектов - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ИмяТаблицыПриемника", Объект.ИмяТаблицыПриемника); - ПараметрыФормы.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); - ПараметрыФормы.Вставить("ИмяТипаОбъектаТаблицыИсточника", Объект.ИмяТипаОбъектаТаблицыИсточника); - ПараметрыФормы.Вставить("ТипИсточникаСтрокой", Объект.ТипИсточникаСтрокой); - ПараметрыФормы.Вставить("ТипПриемникаСтрокой", Объект.ТипПриемникаСтрокой); - ПараметрыФормы.Вставить("ПоляТаблицыПриемника", Объект.ПоляТаблицыПриемника); - ПараметрыФормы.Вставить("ПоляПоискаТаблицыПриемника", Объект.ПоляПоискаТаблицыПриемника); - ПараметрыФормы.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); - ПараметрыФормы.Вставить("СписокПолейТаблицы", Объект.СписокПолейТаблицы.Скопировать()); - ПараметрыФормы.Вставить("СписокИспользуемыхПолей", Объект.СписокИспользуемыхПолей.Скопировать()); - ПараметрыФормы.Вставить("СписокПолейСопоставления", СписокПолейСопоставления.Скопировать()); - ПараметрыФормы.Вставить("МаксимальноеКоличествоПользовательскихПолей", МаксимальноеКоличествоПользовательскихПолей()); - ПараметрыФормы.Вставить("Заголовок", Заголовок); - - ПараметрыФормы.Вставить("АдресВременногоХранилищаТаблицыНеутвержденныхСвязей", ПоместитьТаблицуНеутвержденныхСвязейВоВременноеХранилище()); - - Состояние(НСтр("ru = 'Выполняется автоматическое сопоставление. Пожалуйста, подождите...'")); - - // открываем форму выполнения автоматического сопоставления объектов - АдресВременногоХранилища = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.РезультатАвтоматическогоСопоставления", ПараметрыФормы, ЭтаФорма); - - Если ТипЗнч(АдресВременногоХранилища) = Тип("Строка") Тогда - - // Применяем результат и обновляем таблицу сопоставления с учетом полученного сопоставления объектов - ПрименитьРезультатАвтоматическогоСопоставленияОбъектовИОбновить(Отказ, АдресВременногоХранилища); - - Если Не Отказ Тогда - - // устанавливаем текущий отбор - УстановитьОтборТабличныхЧастей(); - - КонецЕсли; - - КонецЕсли; - - Если Отказ Тогда - - Предупреждение(НСтр("ru = 'Во время выполнения автоматического сопоставления возникли ошибки.'")); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьЗагрузкуДанных(Команда) - - Отказ = Ложь; - - НСтрока = НСтр("ru = 'Выполнить загрузку данных в информационную базу?'"); - Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Да); - Если Ответ = КодВозвратаДиалога.Нет Тогда - Возврат; - КонецЕсли; - - Если Объект.ДанныеУспешноЗагружены Тогда - - НСтрока = НСтр("ru = 'Данные уже были успешно загружены. Выполнить загрузку данных повторно?'"); - Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); - Если Ответ = КодВозвратаДиалога.Нет Тогда - Возврат; - КонецЕсли; - - КонецЕсли; - - // оповещение состояния - Состояние(НСтр("ru = 'Выполняется загрузка данных. Пожалуйста, подождите...'")); - - // выполняем загрузку данных на сервере - ВыполнитьЗагрузкуДанныхНаСервере(Отказ); - - // обновляем данные в таблице сопоставления - Обновить(Команда); - - Если Отказ Тогда - - НСтрока = НСтр("ru = 'При загрузке данных возникли ошибки. - |Перейти в журнал регистрации?'"); - // - Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); - Если Ответ = КодВозвратаДиалога.Да Тогда - - ОбменДаннымиКлиент.ПерейтиВЖурналРегистрацииСобытийДанныхМодально(Объект.УзелИнформационнойБазы, ЭтаФорма, "ЗагрузкаДанных"); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// - -&НаКлиенте -Процедура ИзменитьПоляТаблицы(Команда) - - ПараметрыДляФормы = Новый Структура("СписокПолей", Объект.СписокИспользуемыхПолей.Скопировать()); - - СписокПолейФормыНастройки = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаПолейТаблицы", ПараметрыДляФормы, ЭтаФорма); - - Если ТипЗнч(СписокПолейФормыНастройки) <> Тип("СписокЗначений") Тогда - - Возврат; - - КонецЕсли; - - Объект.СписокИспользуемыхПолей = СписокПолейФормыНастройки.Скопировать(); - - // устанавливаем видимость и заголовки полей таблицы сопоставления - УстановитьВидимостьПолейТаблицы("ТаблицаСопоставления"); - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкаСпискаПолейТаблицы(Команда) - - Отказ = Ложь; - - ПараметрыДляФормы = Новый Структура("СписокПолей", Объект.СписокПолейТаблицы.Скопировать()); - - СписокПолейФормыНастройки = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаПолейТаблицыСопоставления", ПараметрыДляФормы, ЭтаФорма); - - Если ТипЗнч(СписокПолейФормыНастройки) <> Тип("СписокЗначений") Тогда - Возврат; - КонецЕсли; - - Объект.СписокПолейТаблицы = СписокПолейФормыНастройки.Скопировать(); - - ЗаполнитьСписокОтмеченнымиЭлементами(Объект.СписокПолейТаблицы, Объект.СписокИспользуемыхПолей); - - // формируем Таблицу сортировки - ЗаполнитьТаблицуСортировки(Объект.СписокИспользуемыхПолей); - - // обновляем таблицу сопоставления с учетом новых полей таблицы - Обновить(Команда); - -КонецПроцедуры - -&НаКлиенте -Процедура Сортировка(Команда) - - ПараметрыДляФормы = Новый Структура("ТаблицаСортировки", Объект.ТаблицаСортировки); - - ТаблицаСортировкиРезультат = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.НастройкаСортировки", ПараметрыДляФормы, ЭтаФорма); - - Если ТипЗнч(ТаблицаСортировкиРезультат) <> Тип("ДанныеФормыКоллекция") Тогда - - Возврат; - - КонецЕсли; - - Объект.ТаблицаСортировки.Очистить(); - - // заполняем коллекцию формы полученными настройками - Для Каждого СтрокаТаблицы ИЗ ТаблицаСортировкиРезультат Цикл - - ЗаполнитьЗначенияСвойств(Объект.ТаблицаСортировки.Добавить(), СтрокаТаблицы); - - КонецЦикла; - - // сортируем таблицу сопоставления - ВыполнитьСортировкуТаблицы(); - - // обновляем отбор в таблицах - УстановитьОтборТабличныхЧастей(); - -КонецПроцедуры - -&НаКлиенте -Процедура ДобавитьСопоставление(Команда) - - УстановитьСвязьИнтерактивно(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтменитьСопоставление(Команда) - - ВыделенныеСтроки = Элементы.ТаблицаСопоставления.ВыделенныеСтроки; - - ОтменитьСопоставлениеНаСервере(ВыделенныеСтроки); - - // обновляем отбор в табличных частях - УстановитьОтборТабличныхЧастей(); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаписатьОбновить(Команда) - - Отказ = Ложь; - - // применяем таблицу неутвержденных связей - ПрименитьТаблицуНеутвержденныхЗаписейИОбновить(Отказ); - - // устанавливаем текущий отбор в табличной части сопоставления - УстановитьОтборТабличныхЧастей(); - - Если Отказ Тогда - Предупреждение(НСтр("ru = 'Возникли ошибки.'")); - Иначе - Модифицированность = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаписатьИЗакрыть(Команда) - - ВыдаватьПредупреждениеПриЗакрытииФормы = Ложь; - Закрыть(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтборПоСтатусуСопоставленияПриИзменении(Элемент) - - УстановитьОтборТабличныхЧастей(); - -КонецПроцедуры - -&НаКлиенте -Процедура рТаблицаСопоставленияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - УстановитьСвязьИнтерактивно(); - -КонецПроцедуры - &НаКлиенте Процедура УстановитьМодифицированностьФормы() @@ -667,7 +682,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ПРИКЛАДНЫЕ +// Прикладные &НаКлиенте Процедура ЗаполнитьТаблицуСортировки(СписокЗначенийИсточник) @@ -810,6 +825,7 @@ ПараметрыФормы.Вставить("НомерПоПорядкуСтрокиНачала", ТекущиеДанные.НомерПоПорядку); ПараметрыФормы.Вставить("СписокИспользуемыхПолей", Объект.СписокИспользуемыхПолей.Скопировать()); ПараметрыФормы.Вставить("МаксимальноеКоличествоПользовательскихПолей", МаксимальноеКоличествоПользовательскихПолей()); + ПараметрыФормы.Вставить("ОбъектДляСопоставления", ПолучитьОбъектДляСопоставления(ТекущиеДанные)); // вызов сервера НомерПоПорядкуСтрокиОкончания = ОткрытьФормуМодально("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма.ФормаВыбораСвязиСопоставления", ПараметрыФормы, ЭтаФорма); @@ -831,6 +847,35 @@ КонецПроцедуры +&НаКлиенте +Функция ПолучитьОбъектДляСопоставления(Данные) + + Результат = Новый Массив; + + ШаблонИмениПоля = ?(Данные.СтатусСопоставления = -1, "ИсточникПолеNN", "ПриемникПолеNN"); + + Для НомерПоля = 1 По МаксимальноеКоличествоПользовательскихПолей() Цикл + + Поле = СтрЗаменить(ШаблонИмениПоля, "NN", Строка(НомерПоля)); + + Если Элементы["ТаблицаСопоставления" + Поле].Видимость + И ЗначениеЗаполнено(Данные[Поле]) Тогда + + Результат.Добавить(Данные[Поле]); + + КонецЕсли; + + КонецЦикла; + + Если Результат.Количество() = 0 Тогда + + Результат.Добавить(НСтр("ru = '<не задан>'")); + + КонецЕсли; + + Возврат СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(Результат, ", "); +КонецФункции + &НаКлиенте Процедура ДобавитьНеутвержденноеСопоставлениеНаКлиенте(ИдентификаторСтрокиНачала, ИдентификаторСтрокиОкончания) @@ -927,7 +972,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// СВОЙСТВА +// Свойства &НаКлиенте Функция МаксимальноеКоличествоПользовательскихПолей() @@ -936,7 +981,3 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ИНИЦИАЛИЗАЦИЯ - -ВыдаватьПредупреждениеПриЗакрытииФормы = Истина; diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form index 35d1000df..427be77c7 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Form.form @@ -4,6 +4,48 @@ ru Выбор объекта для сопоставления + + ОбъектДляСопоставления + 25 + true + true + + true + + + ОбъектДляСопоставления + + + ОбъектДляСопоставленияРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ОбъектДляСопоставленияКонтекстноеМеню + 26 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ТаблицаВыбора 1 @@ -46,7 +88,7 @@ None ТаблицаВыбораИндексКартинкиРасширеннаяПодсказка - 42 + 45 Label true true @@ -90,7 +132,7 @@ ТаблицаВыбораПолеСортировки1РасширеннаяПодсказка - 44 + 47 Label true true @@ -131,7 +173,7 @@ ТаблицаВыбораПолеСортировки2РасширеннаяПодсказка - 46 + 49 Label true true @@ -172,7 +214,7 @@ ТаблицаВыбораПолеСортировки3РасширеннаяПодсказка - 48 + 51 Label true true @@ -213,7 +255,7 @@ ТаблицаВыбораПолеСортировки4РасширеннаяПодсказка - 50 + 53 Label true true @@ -254,7 +296,7 @@ ТаблицаВыбораПолеСортировки5РасширеннаяПодсказка - 52 + 55 Label true true @@ -298,7 +340,7 @@ true ГруппировкаПолейРасширеннаяПодсказка - 41 + 44 Label true true @@ -313,10 +355,144 @@ true - None ТаблицаВыбораКоманднаяПанель 3 + + ФормаГруппаВыбратьОтменить + 23 + + Выбрать + 16 + true + true + + true + + false + + ВыбратьРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + Form.Command.Выбрать + Auto + true + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Форма группа выбрать отменить</value> + + + ru + Форма группа выбрать отменить + + + ФормаГруппаВыбратьОтменитьРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + + + ФормаГруппаНайти + 24 + + ФормаНайти + 21 + true + true + + true + + + ФормаНайтиРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + Form.Item.ТаблицаВыбора.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОтменитьПоиск + 22 + true + true + + true + + + ФормаОтменитьПоискРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Form.Item.ТаблицаВыбора.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Форма группа найти</value> + + + ru + Форма группа найти + + + ФормаГруппаНайтиРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + Left true @@ -326,32 +502,9 @@ ТаблицаВыбораСтрокаПоиска - 32 - - ТаблицаВыбораСтрокаПоискаРасширеннаяПодсказка - 34 - Label - true - true - - Left - - - - ТаблицаВыбораСтрокаПоискаКонтекстноеМеню - 33 - true - - ТаблицаВыбора - - true - - - - ТаблицаВыбораСостояниеПросмотра 35 - ТаблицаВыбораСостояниеПросмотраРасширеннаяПодсказка + ТаблицаВыбораСтрокаПоискаРасширеннаяПодсказка 37 Label true @@ -361,10 +514,33 @@ - ТаблицаВыбораСостояниеПросмотраКонтекстноеМеню + ТаблицаВыбораСтрокаПоискаКонтекстноеМеню 36 true + ТаблицаВыбора + + true + + + + ТаблицаВыбораСостояниеПросмотра + 38 + + ТаблицаВыбораСостояниеПросмотраРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ТаблицаВыбораСостояниеПросмотраКонтекстноеМеню + 39 + true + ViewStatusAddition ТаблицаВыбора @@ -373,10 +549,10 @@ ТаблицаВыбораУправлениеПоиском - 38 + 41 ТаблицаВыбораУправлениеПоискомРасширеннаяПодсказка - 40 + 43 Label true true @@ -386,7 +562,7 @@ ТаблицаВыбораУправлениеПоискомКонтекстноеМеню - 39 + 42 true SearchControlAddition @@ -397,7 +573,7 @@ ТаблицаВыбораРасширеннаяПодсказка - 31 + 34 Label true true @@ -423,7 +599,6 @@ AutoUse true true - false true Auto Auto @@ -437,176 +612,11 @@ true
    - Top - true + None + false ФормаКоманднаяПанель -1 - - ФормаГруппаВыбратьОтменить - 23 - - Выбрать - 16 - true - true - - true - - false - - ВыбратьРасширеннаяПодсказка - 26 - Label - true - true - - Left - - - Form.Command.Выбрать - Auto - true - true - true - UserCmds - Auto - - - Закрыть - 18 - - <key>ru</key> - <value>Отмена</value> - - true - true - - true - - false - - ЗакрытьРасширеннаяПодсказка - 27 - Label - true - true - - Left - - - Form.StandardCommand.Close - Normal - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Форма группа выбрать отменить</value> - - - ru - Форма группа выбрать отменить - - - ФормаГруппаВыбратьОтменитьРасширеннаяПодсказка - 25 - Label - true - true - - Left - - - - - - ФормаГруппаНайти - 24 - - ФормаНайти - 21 - true - true - - true - - - ФормаНайтиРасширеннаяПодсказка - 29 - Label - true - true - - Left - - - Form.Item.ТаблицаВыбора.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ФормаОтменитьПоиск - 22 - true - true - - true - - - ФормаОтменитьПоискРасширеннаяПодсказка - 30 - Label - true - true - - Left - - - Form.Item.ТаблицаВыбора.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Форма группа найти</value> - - - ru - Форма группа найти - - - ФормаГруппаНайтиРасширеннаяПодсказка - 28 - Label - true - true - - Left - - - - Left true @@ -786,6 +796,24 @@ + + ОбъектДляСопоставления + + <key>ru</key> + <value>Объект для сопоставления</value> + + 3 + + String + + + + true + + + true + + Выбрать diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl index 6e3e28a2f..16b6ee895 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/ФормаВыбораСвязиСопоставления/Module.bsl @@ -1,4 +1,3 @@ - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -10,6 +9,8 @@ Возврат; КонецЕсли; + ОбъектДляСопоставления = Параметры.ОбъектДляСопоставления; + ТаблицаВыбора.Загрузить(ПолучитьИзВременногоХранилища(Параметры.АдресВременногоХранилища)); // удаляем переданную таблицу из временного хранилища @@ -24,7 +25,17 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаВыбора + +&НаКлиенте +Процедура ТаблицаВыбораВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + Выбрать(Неопределено); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура Выбрать(Команда) @@ -39,16 +50,8 @@ КонецПроцедуры -&НаКлиенте -Процедура ТаблицаВыбораВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - Выбрать(Неопределено); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// - -// ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ПозиционированиеКурсораТаблицыВыбора(Знач НомерПоПорядкуСтрокиНачала) @@ -106,4 +109,3 @@ КонецЦикла; КонецПроцедуры - diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl index 08583c3d2..a0f59028d 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl @@ -1,13 +1,13 @@ -//////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ МОДУЛЯ - Перем ПолеТаблицаСопоставления; Перем ПолеИнформацияСтатистикиСопоставленияОбъектов; Перем ПолеДайджестСопоставления; Перем ПолеТипСтрокаНеограниченнойДлины; //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции // Выполняет сопоставление объектов этой информационной базы и информационной базы источника. // Формирует таблицу сопоставления для вывода пользователю. @@ -175,8 +175,6 @@ КонецПроцедуры -// - // Конструктор обработки // // Параметры: @@ -244,9 +242,9 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ СВОЙСТВА +// Функции-свойства -// Функция-свойство: таблица сопоставления объектов +// Таблица сопоставления объектов // // Тип: ТаблицаЗначений // @@ -262,9 +260,10 @@ КонецФункции -// ДАЙДЖЕСТ СОПОСТАВЛЕНИЯ +//////////////////////////////////////////////////////////////////////////////// +// Функции-свойства - дайджест сопоставления -// Функция-свойство: количество объектов текущего типа данных в файле сообщения обмена +// Количество объектов текущего типа данных в файле сообщения обмена // // Тип: Число // @@ -274,7 +273,7 @@ КонецФункции -// Функция-свойство: количество объектов текущего типа данных в этой информационной базе +// Количество объектов текущего типа данных в этой информационной базе // // Тип: Число // @@ -284,7 +283,7 @@ КонецФункции -// Функция-свойство: количество объектов, которые сопоставлены для текущего типа данных +// Количество объектов, которые сопоставлены для текущего типа данных // // Тип: Число // @@ -294,7 +293,7 @@ КонецФункции -// Функция-свойство: количество объектов, которые не сопоставлены для текущего типа данных +// Количество объектов, которые не сопоставлены для текущего типа данных // // Тип: Число // @@ -304,7 +303,7 @@ КонецФункции -// Функция-свойство: процент сопоставления объектов для текущего типа данных +// Процент сопоставления объектов для текущего типа данных // // Тип: Число // @@ -315,7 +314,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ВНУТРЕННИЕ СВОЙСТВА +// Локальные функции-свойства Функция ДайджестСопоставления() @@ -363,7 +362,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ПОЛУЧЕНИЯ ТАБЛИЦЫ СОПОСТАВЛЕНИЯ +// Получение таблицы сопоставления Процедура ВыполнитьСопоставлениеОбъектовИнформационныхБаз(Отказ) @@ -1771,7 +1770,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ВСПОМОГАТЕЛЬНЫЕ +// Вспомогательные служебные процедуры и функции Процедура ЗаполнитьСписокОтмеченнымиЭлементами(СписокИсточник, СписокПриемник) diff --git a/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Module.bsl b/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Module.bsl index b885dbe77..e6443f206 100644 --- a/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Module.bsl +++ b/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Module.bsl @@ -1,6 +1,40 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("Респондент") Тогда + Объект.Респондент = Параметры.Респондент; + КонецЕсли; + + УстановитьРеспондентаСогласноТекущемуВнешнемуПользователю(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ОтвеченныеАнкетыВыборЗначения(Элемент, Значение, СтандартнаяОбработка) + + ТекущиеДанные = Элементы.ОтвеченныеАнкеты.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("Ключ",ТекущиеДанные.Анкета); + СтруктураПараметров.Вставить("ТолькоФормаЗаполнения",Истина); + СтруктураПараметров.Вставить("ТолькоПросмотр",Истина); + + ОткрытьФорму("Документ.Анкета.Форма.ФормаДокумента",СтруктураПараметров,Элемент); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура УстановитьПараметрыДинамическогоСпискаДереваАнкет() @@ -22,33 +56,3 @@ УстановитьПараметрыДинамическогоСпискаДереваАнкет(); КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("Респондент") Тогда - Объект.Респондент = Параметры.Респондент; - КонецЕсли; - УстановитьРеспондентаСогласноТекущемуВнешнемуПользователю() - -КонецПроцедуры - -&НаКлиенте -Процедура ОтвеченныеАнкетыВыборЗначения(Элемент, Значение, СтандартнаяОбработка) - - ТекущиеДанные = Элементы.ОтвеченныеАнкеты.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - СтруктураПараметров = Новый Структура; - СтруктураПараметров.Вставить("Ключ",ТекущиеДанные.Анкета); - СтруктураПараметров.Вставить("ТолькоФормаЗаполнения",Истина); - СтруктураПараметров.Вставить("ТолькоПросмотр",Истина); - - ОткрытьФорму("Документ.Анкета.Форма.ФормаДокумента",СтруктураПараметров,Элемент); - -КонецПроцедуры diff --git a/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Form.form b/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Form.form index 60eec7a4a..a8bea68c7 100644 --- a/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Form.form @@ -4,72 +4,278 @@ <key>ru</key> <value>Доступные анкеты</value> - - Обновить - 13 - true - true - - true - - - ОбновитьРасширеннаяПодсказка - 14 - Label - true - true - - Left - - - UsualButton - Form.Command.Обновить - Normal - PictureAndText - true - true - UserCmds - Auto - - - ТаблицаАнкет - 3 - true - true - - true - - - ТаблицаАнкет - - false - None - Add - Copy - CopyToClipboard - Delete - EndEdit - MoveDown - MoveUp - OutputList - SelectAll - SortListAsc - SortListDesc - - ДеревоАнкетПредставление - 10 + + Страницы + 14 + + Анкеты + 15 + + Обновить + 13 + true + true + + true + + + ОбновитьРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + UsualButton + Form.Command.Обновить + Normal + PictureAndText + true + true + UserCmds + Auto + + + ТаблицаАнкет + 3 + true + true + + true + + + ТаблицаАнкет + + false + None + Add + Copy + CopyToClipboard + Delete + EndEdit + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + + ДеревоАнкетПредставление + 10 + true + true + + true + + + ТаблицаАнкет.Представление + + None + + ДеревоАнкетПредставлениеРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ДеревоАнкетПредставлениеКонтекстноеМеню + 11 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + None + + ТаблицаАнкетКоманднаяПанель + 5 + Left + + + BeforeRowChange + ДеревоАнкетПередНачаломИзменения + + + ТаблицаАнкетСтрокаПоиска + 25 + + ТаблицаАнкетСтрокаПоискаРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ТаблицаАнкетСтрокаПоискаКонтекстноеМеню + 26 + true + + ТаблицаАнкет + + true + + + + ТаблицаАнкетСостояниеПросмотра + 28 + + ТаблицаАнкетСостояниеПросмотраРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + ТаблицаАнкетСостояниеПросмотраКонтекстноеМеню + 29 + true + + ViewStatusAddition + ТаблицаАнкет + + true + + + + ТаблицаАнкетУправлениеПоиском + 31 + + ТаблицаАнкетУправлениеПоискомРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ТаблицаАнкетУправлениеПоискомКонтекстноеМеню + 32 + true + + SearchControlAddition + ТаблицаАнкет + + true + + + + ТаблицаАнкетРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ТаблицаАнкетКонтекстноеМеню + 4 + true + + Tree + true + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + + ТаблицаАнкет.КодКартинки + + + CommonPicture.КоллекцияДоступныеАнкеты + + None + None + None + true + + + + АрхивАнкет + 12 + true + true + + true + + false + + АрхивАнкетРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Hyperlink + Form.Command.АрхивАнкет + Normal + Auto + true + true + UserCmds + Auto + true true true - - ТаблицаАнкет.Представление - - None + + <key>ru</key> + <value>Анкеты</value> + + + ru + Анкеты + - ДеревоАнкетПредставлениеРасширеннаяПодсказка - 25 + АнкетыРасширеннаяПодсказка + 22 Label true true @@ -77,65 +283,104 @@ Left - - ДеревоАнкетПредставлениеКонтекстноеМеню - 11 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal + Page + + Vertical + auto - None - - ТаблицаАнкетКоманднаяПанель - 5 - Left - - - BeforeRowChange - ДеревоАнкетПередНачаломИзменения - - - ТаблицаАнкетСтрокаПоиска + + ИнформацияДляПользователя 16 - - ТаблицаАнкетСтрокаПоискаРасширеннаяПодсказка - 18 - Label - true - true - - Left - - - - ТаблицаАнкетСтрокаПоискаКонтекстноеМеню + + КартинкаИнформацияДляПользователя 17 - true - - ТаблицаАнкет - + + <key>ru</key> + <value>Картинка информация для пользователя</value> + + true + true + + true + + + КартинкаИнформацияДляПользователяРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + КартинкаИнформацияДляПользователяКонтекстноеМеню + 18 + true + + 5 true - - - - ТаблицаАнкетСостояниеПросмотра - 19 + 2 + true + + + CommonPicture.Информация32 + + + + + НадписьИнформацияДляПользователя + 19 + + <key>ru</key> + <value>Список анкет выводится только для респондентов, +у которых имеются соответствующие права доступа.</value> + + true + true + + true + + + НадписьИнформацияДляПользователяРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + НадписьИнформацияДляПользователяКонтекстноеМеню + 20 + true + + Label + true + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Информация для пользователя</value> + + + ru + Информация для пользователя + - ТаблицаАнкетСостояниеПросмотраРасширеннаяПодсказка - 21 + ИнформацияДляПользователяРасширеннаяПодсказка + 45 Label true true @@ -143,101 +388,27 @@ Left - - ТаблицаАнкетСостояниеПросмотраКонтекстноеМеню - 20 - true - - ViewStatusAddition - ТаблицаАнкет - - true + Page + + auto - - - ТаблицаАнкетУправлениеПоиском - 22 - - ТаблицаАнкетУправлениеПоискомРасширеннаяПодсказка - 24 - Label - true - true - - Left - - - - ТаблицаАнкетУправлениеПоискомКонтекстноеМеню - 23 - true - - SearchControlAddition - ТаблицаАнкет - - true - - - - ТаблицаАнкетРасширеннаяПодсказка - 15 - Label - true - true - - Left - - - - ТаблицаАнкетКонтекстноеМеню - 4 - true - - Tree - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - true - true - true - true - - ТаблицаАнкет.КодКартинки - - - CommonPicture.КоллекцияДоступныеАнкеты - - None - None - None - true - - - - АрхивАнкет - 12 + true true true - false + + <key>ru</key> + <value>Страницы</value> + + + ru + Страницы + - АрхивАнкетРасширеннаяПодсказка - 35 + СтраницыРасширеннаяПодсказка + 21 Label true true @@ -245,14 +416,10 @@ Left - Hyperlink - Form.Command.АрхивАнкет - Normal - Auto - true - true - UserCmds - Auto + Pages + + Auto + ФормаКоманднаяПанель diff --git a/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl index 81a9b2afb..e9f0d679c 100644 --- a/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Module.bsl @@ -1,6 +1,87 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); + Если ТипЗнч(ТекущийПользователь) <> Тип("СправочникСсылка.ВнешниеПользователи") Тогда + Элементы.Страницы.ТекущаяСтраница = Элементы.ИнформацияДляПользователя; + Иначе + Объект.Респондент = ВнешниеПользователи.ПолучитьОбъектАвторизацииВнешнегоПользователя(ТекущийПользователь); + ПолучитьТаблицуАнкетРеспондента(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "Запись_Анкета" ИЛИ ИмяСобытия = "Проведение_Анкета" Тогда + ПолучитьТаблицуАнкетРеспондента(); + КонецЕсли; + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ДеревоАнкетПередНачаломИзменения(Элемент, Отказ) + + Отказ = Истина; + + ТекущиеДанные = Элементы.ТаблицаАнкет.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ТекущиеДанные.АнкетаОпрос) = Тип("ДокументСсылка.Анкета") Тогда + + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("Ключ",ТекущиеДанные.АнкетаОпрос); + СтруктураПараметров.Вставить("ТолькоФормаЗаполнения",Истина); + Если ТекущиеДанные.Статус = "Отвеченные анкеты" Тогда + СтруктураПараметров.Вставить("ТолькоПросмотр",Истина); + КонецЕсли; + + ОткрытьФорму("Документ.Анкета.Форма.ФормаДокумента",СтруктураПараметров,Элемент); + + ИначеЕсли ТипЗнч(ТекущиеДанные.АнкетаОпрос) = Тип("ДокументСсылка.НазначениеОпросов") Тогда + + СтруктураПараметров = Новый Структура; + ЗначенияЗаполнения = Новый Структура; + + ЗначенияЗаполнения.Вставить("Респондент",Объект.Респондент); + ЗначенияЗаполнения.Вставить("Опрос",ТекущиеДанные.АнкетаОпрос); + СтруктураПараметров.Вставить("ЗначенияЗаполнения",ЗначенияЗаполнения); + СтруктураПараметров.Вставить("ТолькоФормаЗаполнения",Истина); + + ОткрытьФорму("Документ.Анкета.Форма.ФормаДокумента",СтруктураПараметров,Элемент); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура АрхивАнкет(Команда) + + ОткрытьФорму("Обработка.СписокРеспондента.Форма.АрхивАнкет",Новый Структура("Респондент",Объект.Респондент),ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура Обновить(Команда) + + ПолучитьТаблицуАнкетРеспондента(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ПолучитьТаблицуАнкетРеспондента() @@ -50,111 +131,21 @@ ?(ТекущаяДатаСеанса() <= СтрокаДерева.ДатаОкончания, Ложь, Истина), Ложь); Если ТипЗнч(СтрокаДерева.АнкетаОпрос) = Тип("ДокументСсылка.НазначениеОпросов") Тогда - СтрокаВозврата = СтрокаВозврата + "Анкета " + "'" + СтрокаДерева.Наименование + "'"; + СтрокаВозврата = СтрокаВозврата + НСтр("ru = 'Анкета '") + "'" + СтрокаДерева.Наименование + "'"; ИначеЕсли ТипЗнч(СтрокаДерева.АнкетаОпрос) = Тип("ДокументСсылка.Анкета") Тогда - СтрокаВозврата = СтрокаВозврата + "Анкета " + "'" + СтрокаДерева.Наименование + - "'" + ", последний раз редактировавшаяся " + Формат(СтрокаДерева.ДатаАнкеты, "ДФ=dd.MM.yyyy"); + СтрокаВозврата = СтрокаВозврата + НСтр("ru = 'Анкета '") + "'" + СтрокаДерева.Наименование + + "'" + НСтр("ru = ', последний раз редактировавшаяся '") + Формат(СтрокаДерева.ДатаАнкеты, "ДФ=dd.MM.yyyy"); Иначе - Возврат СтрокаВозврата; + Возврат СтрокаВозврата; КонецЕсли; Если ЕстьОграниченияПоСроку Тогда - СтрокаВозврата = СтрокаВозврата + ", к заполнению до " + Формат(НачалоДня(КонецДня(СтрокаДерева.ДатаОкончания) + 1),"ДФ=dd.MM.yyyy"); + СтрокаВозврата = СтрокаВозврата + НСтр("ru = ', к заполнению до '") + Формат(НачалоДня(КонецДня(СтрокаДерева.ДатаОкончания) + 1),"ДФ=dd.MM.yyyy"); КонецЕсли; СтрокаВозврата = СтрокаВозврата + "."; - Возврат СтрокаВозврата; + Возврат СтрокаВозврата; -КонецФункции// - -// Устанавливает значение Респондент, согласно значению текущего внешнего пользователя -&НаСервере -Процедура УстановитьРеспондентаСогласноТекущемуВнешнемуПользователю() - - Объект.Респондент = ВнешниеПользователи.ПолучитьОбъектАвторизацииВнешнегоПользователя(ВнешниеПользователи.ТекущийВнешнийПользователь()); - ПолучитьТаблицуАнкетРеспондента(); - -КонецПроцедуры - -////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ - -&НаКлиенте -Процедура АрхивАнкет(Команда) - - ОткрытьФорму("Обработка.СписокРеспондента.Форма.АрхивАнкет",Новый Структура("Респондент",Объект.Респондент),ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура Обновить(Команда) - - ПолучитьТаблицуАнкетРеспондента(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - УстановитьРеспондентаСогласноТекущемуВнешнемуПользователю(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - - Если ИмяСобытия = "Запись_Анкета" ИЛИ ИмяСобытия = "Проведение_Анкета" Тогда - ПолучитьТаблицуАнкетРеспондента(); - КонецЕсли; - -КонецПроцедуры - -////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура ДеревоАнкетПередНачаломИзменения(Элемент, Отказ) - - Отказ = Истина; - - ТекущиеДанные = Элементы.ТаблицаАнкет.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ТипЗнч(ТекущиеДанные.АнкетаОпрос) = Тип("ДокументСсылка.Анкета") Тогда - - СтруктураПараметров = Новый Структура; - СтруктураПараметров.Вставить("Ключ",ТекущиеДанные.АнкетаОпрос); - СтруктураПараметров.Вставить("ТолькоФормаЗаполнения",Истина); - Если ТекущиеДанные.Статус = "Отвеченные анкеты" Тогда - СтруктураПараметров.Вставить("ТолькоПросмотр",Истина); - КонецЕсли; - - ОткрытьФорму("Документ.Анкета.Форма.ФормаДокумента",СтруктураПараметров,Элемент); - - ИначеЕсли ТипЗнч(ТекущиеДанные.АнкетаОпрос) = Тип("ДокументСсылка.НазначениеОпросов") Тогда - - СтруктураПараметров = Новый Структура; - ЗначенияЗаполнения = Новый Структура; - - ЗначенияЗаполнения.Вставить("Респондент",Объект.Респондент); - ЗначенияЗаполнения.Вставить("Опрос",ТекущиеДанные.АнкетаОпрос); - СтруктураПараметров.Вставить("ЗначенияЗаполнения",ЗначенияЗаполнения); - СтруктураПараметров.Вставить("ТолькоФормаЗаполнения",Истина); - - ОткрытьФорму("Документ.Анкета.Форма.ФормаДокумента",СтруктураПараметров,Элемент); - - КонецЕсли; - -КонецПроцедуры - - - - - +КонецФункции diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl index f6009a7c1..3aacbbd1e 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl @@ -1,12 +1,6 @@ -/////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ ЭКСПОРТНЫЕ - Перем СтрокаСообщенияОбОшибке Экспорт; Перем СтрокаСообщенияОбОшибкеЖР Экспорт; -/////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ МОДУЛЯ - Перем мСообщенияОшибок; // соответствие с предопределенными сообщениями ошибок обработки Перем мИмяОбъекта; // имя объекта метаданных @@ -18,8 +12,11 @@ Перем мТелоСообщенияСжатое; // текст тела сообщения с вложением - сжатым файлом Перем мТелоСообщенияПакетное; // текст тела сообщения с вложением - сжатый файл, в котором с набор файлов -/////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции // Создает временный каталог в каталоге временных файлов пользователя операционной системы. // @@ -140,8 +137,6 @@ Возврат Ложь; КонецФункции -// Инициализация - // Выполняет инициализацию свойств обработки начальными значениями и константами // // Параметры: @@ -151,7 +146,7 @@ ИнициализацияСообщений(); - мТемаСообщения = "Exchange message (%1)"; + мТемаСообщения = "Exchange message (%1)"; // строка не подлежит локализации мТемаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(мТемаСообщения, ШаблонИмениФайлаСообщения); мТелоСообщенияПростое = НСтр("ru = 'Сообщение обмена данными'"); @@ -160,8 +155,6 @@ КонецПроцедуры -// ПРОВЕРКА ПОДКЛЮЧЕНИЯ - // Выполняет проверку возможности установки подключения к заданному ресурсу // // Параметры: @@ -194,9 +187,9 @@ КонецФункции /////////////////////////////////////////////////////////////////////////////// -// СВОЙСТВА ОБРАБОТКИ +// Функции-свойства -// Функция-свойство: время изменения файла сообщения обмена +// Время изменения файла сообщения обмена // // Тип: Дата // @@ -218,7 +211,7 @@ КонецФункции -// Функция-свойство: полное имя файла сообщения обмена +// Полное имя файла сообщения обмена // // Тип: Строка // @@ -236,7 +229,7 @@ КонецФункции -// Функция-свойство: полное имя каталога сообщения обмена +// Полное имя каталога сообщения обмена // // Тип: Строка // @@ -254,16 +247,8 @@ КонецФункции -// - -Функция СжиматьФайлИсходящегоСообщения() - - Возврат EMAILСжиматьФайлИсходящегоСообщения; - -КонецФункции - /////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +// Локальные служебные процедуры и функции Функция СоздатьВременныйКаталогСообщенийОбмена() @@ -315,7 +300,7 @@ Попытка - Архиватор = Новый ЗаписьZipФайла(ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена, "Файл сообщения обмена"); + Архиватор = Новый ЗаписьZipФайла(ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена, НСтр("ru = 'Файл сообщения обмена'")); Архиватор.Добавить(ИмяФайлаСообщенияОбмена()); Архиватор.Записать(); @@ -515,7 +500,7 @@ Процедура УстановитьСтрокуСообщенияОбОшибке(Знач Сообщение) Если Сообщение = Неопределено Тогда - Сообщение = "Внутренняя ошибка"; + Сообщение = НСтр("ru = 'Внутренняя ошибка'"); КонецЕсли; СтрокаСообщенияОбОшибке = Сообщение; @@ -539,7 +524,18 @@ КонецФункции /////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ИНИЦИАЛИЗАЦИИ +// Функции-свойства + +// Флаг сжатия файла исходящего сообщения +// +Функция СжиматьФайлИсходящегоСообщения() + + Возврат EMAILСжиматьФайлИсходящегоСообщения; + +КонецФункции + +/////////////////////////////////////////////////////////////////////////////// +// Инициализация Процедура ИнициализацияСообщений() @@ -574,7 +570,7 @@ КонецПроцедуры /////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С E-MAIL +// Работа с E-MAIL Функция ОтправитьСообщениеПоЭлектроннойПочте(Тело, ИмяФайлаИсходящегоСообщения, ПутьКФайлу) @@ -601,8 +597,8 @@ КонецФункции -/////////////////////////////////////////////////////////////////////////////// -// ИНИЦИАЛИЗАЦИЯ +//////////////////////////////////////////////////////////////////////////////// +// Операторы основной программы ИнициализацияСообщений(); ИнициализацияСообщенийОшибок(); diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl index 3c8754b78..c0adbd06e 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl @@ -1,12 +1,6 @@ -/////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ ЭКСПОРТНЫЕ - Перем СтрокаСообщенияОбОшибке Экспорт; Перем СтрокаСообщенияОбОшибкеЖР Экспорт; -/////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ МОДУЛЯ - Перем мСообщенияОшибок; // соответствие с сообщениями ошибок обработки Перем мИмяОбъекта; // имя объекта метаданных @@ -14,8 +8,11 @@ Перем мВременныйКаталогСообщенийОбмена; // временный каталог для сообщений обмена Перем мКаталогОбменаИнформацией; // сетевой каталог для обмена сообщениями -/////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции // Создает временный каталог в каталоге временных файлов пользователя операционной системы. // @@ -119,8 +116,6 @@ КонецФункции -// Инициализация - // Выполняет инициализацию свойств обработки начальными значениями и константами // // Параметры: @@ -132,8 +127,6 @@ КонецПроцедуры -// ПРОВЕРКА ПОДКЛЮЧЕНИЯ - // Выполняет проверку возможности установки подключения к заданному ресурсу // // Параметры: @@ -173,7 +166,7 @@ КонецФункции /////////////////////////////////////////////////////////////////////////////// -// СВОЙСТВА ОБРАБОТКИ +// Функции-свойства // Функция-свойство: полное имя файла сообщения обмена // @@ -250,22 +243,8 @@ Возврат Результат; КонецФункции -// - -Функция СжиматьФайлИсходящегоСообщения() - - Возврат FILEСжиматьФайлИсходящегоСообщения; - -КонецФункции - -Функция ИмяВременногоФайлаФлага() - - Возврат "flag.tmp"; - -КонецФункции - /////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +// Локальные служебные процедуры и функции Функция СоздатьВременныйКаталогСообщенийОбмена() @@ -408,8 +387,8 @@ СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаОбменаИнформацией()); ДополнитьСообщениеОбОшибке(СтрокаСообщения); - СтрокаСообщения = НСтр("ru = 'Имя файла сообщения обмена: ""%1""'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ШаблонИмениФайлаСообщения + ".[xml|zip]"); + СтрокаСообщения = НСтр("ru = 'Имя файла сообщения обмена: ""%1"" или ""%2""'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ШаблонИмениФайлаСообщения + ".xml", ШаблонИмениФайлаСообщения + ".zip"); ДополнитьСообщениеОбОшибке(СтрокаСообщения); Возврат Ложь; @@ -477,6 +456,7 @@ ТекстовыйДокумент.Записать(ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаОбменаИнформацией(), ИмяВременногоФайлаФлага())); Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат Ложь; КонецПопытки; @@ -490,14 +470,15 @@ УдалитьФайлы(ИмяКаталогаОбменаИнформацией(), ИмяВременногоФайлаФлага()); Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат Ложь; КонецПопытки; Возврат Истина; КонецФункции -// выполняет копирование файла Функция ВыполнитьКопированиеФайла(Знач ИмяФайлаИсточника, Знач ИмяФайлаПриемника) + // выполняет копирование файла Попытка @@ -505,7 +486,7 @@ Исключение - СтрокаСообщения = НСтр("ru = 'Ошибка при копировании файла из %1 в %2. Описание ошибки: %3"); + СтрокаСообщения = НСтр("ru = 'Ошибка при копировании файла из %1 в %2. Описание ошибки: %3'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяФайлаИсточника, ИмяФайлаПриемника, @@ -545,7 +526,22 @@ КонецПроцедуры /////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ИНИЦИАЛИЗАЦИИ +// Функции-свойства + +Функция СжиматьФайлИсходящегоСообщения() + + Возврат FILEСжиматьФайлИсходящегоСообщения; + +КонецФункции + +Функция ИмяВременногоФайлаФлага() + + Возврат "flag.tmp"; + +КонецФункции + +/////////////////////////////////////////////////////////////////////////////// +// Инициализация Процедура ИнициализацияСообщений() @@ -571,8 +567,8 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// ИНИЦИАЛИЗАЦИЯ +//////////////////////////////////////////////////////////////////////////////// +// Операторы основной программы ИнициализацияСообщений(); ИнициализацияСообщенийОшибок(); diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl index fda356d4b..c33b05ec1 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl @@ -1,12 +1,6 @@ -/////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ ЭКСПОРТНЫЕ - Перем СтрокаСообщенияОбОшибке Экспорт; Перем СтрокаСообщенияОбОшибкеЖР Экспорт; -/////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ МОДУЛЯ - Перем мСообщенияОшибок; // соответствие с предопределенными сообщениями ошибок обработки Перем мИмяОбъекта; // имя объекта метаданных Перем мИмяСервера; // Адрес FTP сервера - имя или ip адрес @@ -15,8 +9,11 @@ Перем мВременныйФайлСообщенияОбмена; // временный файл сообщения обмена для выгрузки/загрузки данных Перем мВременныйКаталогСообщенийОбмена; // временный каталог для сообщений обмена -/////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции // Создает временный каталог в каталоге временных файлов пользователя операционной системы. // @@ -130,8 +127,6 @@ КонецФункции -// Инициализация - // Выполняет инициализацию свойств обработки начальными значениями и константами // // Параметры: @@ -147,8 +142,6 @@ КонецПроцедуры -// ПРОВЕРКА ПОДКЛЮЧЕНИЯ - // Выполняет проверку возможности установки подключения к заданному ресурсу // // Параметры: @@ -201,7 +194,7 @@ КонецФункции /////////////////////////////////////////////////////////////////////////////// -// СВОЙСТВА ОБРАБОТКИ +// Функции-свойства // Функция-свойство: время изменения файла сообщения обмена // @@ -261,16 +254,8 @@ КонецФункции -// - -Функция СжиматьФайлИсходящегоСообщения() - - Возврат FTPСжиматьФайлИсходящегоСообщения; - -КонецФункции - /////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +// Локальные служебные процедуры и функции Функция СоздатьВременныйКаталогСообщенийОбмена() @@ -442,8 +427,8 @@ СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, мКаталогНаСервере); ДополнитьСообщениеОбОшибке(СтрокаСообщения); - СтрокаСообщения = НСтр("ru = 'Имя файла сообщения обмена: ""%1""'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ШаблонИмениФайлаСообщения + ".[xml|zip]"); + СтрокаСообщения = НСтр("ru = 'Имя файла сообщения обмена: ""%1"" или ""%2""'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ШаблонИмениФайлаСообщения + ".xml", ШаблонИмениФайлаСообщения + ".zip"); ДополнитьСообщениеОбОшибке(СтрокаСообщения); Возврат Ложь; @@ -539,7 +524,16 @@ КонецФункции /////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ИНИЦИАЛИЗАЦИИ +// Функции-свойства + +Функция СжиматьФайлИсходящегоСообщения() + + Возврат FTPСжиматьФайлИсходящегоСообщения; + +КонецФункции + +/////////////////////////////////////////////////////////////////////////////// +// Инициализация Процедура ИнициализацияСообщений() @@ -572,7 +566,7 @@ КонецПроцедуры /////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С FTP +// Работа с FTP Функция ПолучитьFTPСоединение() @@ -706,8 +700,8 @@ КонецФункции -/////////////////////////////////////////////////////////////////////////////// -// ИНИЦИАЛИЗАЦИЯ +//////////////////////////////////////////////////////////////////////////////// +// Операторы основной программы ИнициализацияСообщений(); ИнициализацияСообщенийОшибок(); diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form index 5e189b3b7..0a68a82e1 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form @@ -32,7 +32,7 @@ РежимУдаленияРасширеннаяПодсказка - 55 + 67 Label true true @@ -88,7 +88,7 @@ ВыборРежимаУдаленияРасширеннаяПодсказка - 54 + 66 Label true true @@ -122,6 +122,17 @@ false Top + Add + Copy + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree СтрокаСпискаПомеченных 29 @@ -142,7 +153,7 @@ ПометкаРасширеннаяПодсказка - 71 + 85 Label true true @@ -173,7 +184,7 @@ ПредставлениеРасширеннаяПодсказка - 73 + 87 Label true true @@ -187,7 +198,6 @@ true InputField - true Enter Left @@ -217,7 +227,7 @@ СтрокаСпискаПомеченныхРасширеннаяПодсказка - 70 + 84 Label true true @@ -236,18 +246,97 @@ СписокПомеченныхНаУдалениеКоманднаяПанель 28 - - КомандаСписокПомеченныхУстановитьВсе - 37 + + КомандыВыбора + 57 + + КомандаСписокПомеченныхУстановитьВсе + 37 + true + true + + true + + false + + КомандаСписокПомеченныхУстановитьВсеРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Form.Command.КомандаСписокПомеченныхУстановитьВсе + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + КомандаСписокПомеченныхСнятьВсе + 38 + true + true + + true + + false + + КомандаСписокПомеченныхСнятьВсеРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + Form.Command.КомандаСписокПомеченныхСнятьВсе + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + true true true - false + + <key>ru</key> + <value>Команды выбора</value> + + + ru + Команды выбора + - КомандаСписокПомеченныхУстановитьВсеРасширеннаяПодсказка - 58 + КомандыВыбораРасширеннаяПодсказка + 70 Label true true @@ -255,35 +344,27 @@ Left - Form.Command.КомандаСписокПомеченныхУстановитьВсе - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto + - - КомандаСписокПомеченныхСнятьВсе - 38 + + СтандартныеКоманды + 56 true true true - false + + <key>ru</key> + <value>Стандартные команды</value> + + + ru + Стандартные команды + - КомандаСписокПомеченныхСнятьВсеРасширеннаяПодсказка - 59 + СтандартныеКомандыРасширеннаяПодсказка + 73 Label true true @@ -291,22 +372,9 @@ Left - Form.Command.КомандаСписокПомеченныхСнятьВсе - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto + + Item.СписокПомеченныхНаУдаление + Left @@ -316,10 +384,10 @@ СписокПомеченныхНаУдалениеСтрокаПоиска - 61 + 75 СписокПомеченныхНаУдалениеСтрокаПоискаРасширеннаяПодсказка - 63 + 77 Label true true @@ -329,7 +397,7 @@ СписокПомеченныхНаУдалениеСтрокаПоискаКонтекстноеМеню - 62 + 76 true СписокПомеченныхНаУдаление @@ -339,10 +407,10 @@ СписокПомеченныхНаУдалениеСостояниеПросмотра - 64 + 78 СписокПомеченныхНаУдалениеСостояниеПросмотраРасширеннаяПодсказка - 66 + 80 Label true true @@ -352,7 +420,7 @@ СписокПомеченныхНаУдалениеСостояниеПросмотраКонтекстноеМеню - 65 + 79 true ViewStatusAddition @@ -363,10 +431,10 @@ СписокПомеченныхНаУдалениеУправлениеПоиском - 67 + 81 СписокПомеченныхНаУдалениеУправлениеПоискомРасширеннаяПодсказка - 69 + 83 Label true true @@ -376,7 +444,7 @@ СписокПомеченныхНаУдалениеУправлениеПоискомКонтекстноеМеню - 68 + 82 true SearchControlAddition @@ -387,7 +455,7 @@ СписокПомеченныхНаУдалениеРасширеннаяПодсказка - 60 + 74 Label true true @@ -440,7 +508,7 @@ ПомеченныеНаУдалениеРасширеннаяПодсказка - 57 + 69 Label true true @@ -475,16 +543,13 @@ false Top Add - Change Copy - CopyToClipboard + Delete EndEdit HierarchicalList List MoveDown MoveUp - OutputList - SelectAll SortListAsc SortListDesc Tree @@ -501,7 +566,7 @@ ПредставлениеОставшегосяРасширеннаяПодсказка - 94 + 109 Label true true @@ -515,7 +580,6 @@ true InputField - true Enter true Left @@ -532,10 +596,35 @@ Normal
    - None ДеревоОставшихсяОбъектовКоманднаяПанель 42 + + ДеревоОставшихсяОбъектовИзменить + 58 + true + true + + true + + + ДеревоОставшихсяОбъектовИзменитьРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + Form.Item.ДеревоОставшихсяОбъектов.StandardCommand.Change + Normal + PictureAndText + true + true + UserCmds + Auto + Left true @@ -543,12 +632,16 @@ Selection ДеревоОставшихсяОбъектовВыбор + + BeforeRowChange + ДеревоОставшихсяОбъектовПередНачаломИзменения + ДеревоОставшихсяОбъектовСтрокаПоиска - 85 + 100 ДеревоОставшихсяОбъектовСтрокаПоискаРасширеннаяПодсказка - 87 + 102 Label true true @@ -558,7 +651,7 @@ ДеревоОставшихсяОбъектовСтрокаПоискаКонтекстноеМеню - 86 + 101 true ДеревоОставшихсяОбъектов @@ -568,10 +661,10 @@ ДеревоОставшихсяОбъектовСостояниеПросмотра - 88 + 103 ДеревоОставшихсяОбъектовСостояниеПросмотраРасширеннаяПодсказка - 90 + 105 Label true true @@ -581,7 +674,7 @@ ДеревоОставшихсяОбъектовСостояниеПросмотраКонтекстноеМеню - 89 + 104 true ViewStatusAddition @@ -592,10 +685,10 @@ ДеревоОставшихсяОбъектовУправлениеПоиском - 91 + 106 ДеревоОставшихсяОбъектовУправлениеПоискомРасширеннаяПодсказка - 93 + 108 Label true true @@ -605,7 +698,7 @@ ДеревоОставшихсяОбъектовУправлениеПоискомКонтекстноеМеню - 92 + 107 true SearchControlAddition @@ -616,7 +709,7 @@ ДеревоОставшихсяОбъектовРасширеннаяПодсказка - 84 + 99 Label true true @@ -630,7 +723,6 @@ true Tree - true true true true @@ -677,7 +769,145 @@ true ПричиныНевозможностиУдаленияРасширеннаяПодсказка - 83 + 97 + Label + true + true + + Left + + + Page + + Vertical + auto + +
    + + ДлительнаяОперация + 59 + + ОсновнаяГруппаДлительнойОперации + 62 + + КартинкаДлительнаяОперация + 60 + + <key>ru</key> + <value>Картинка длительная операция</value> + + true + true + + true + + + КартинкаДлительнаяОперацияРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + + КартинкаДлительнаяОперацияКонтекстноеМеню + 61 + true + + true + 3 + true + + + CommonPicture.ДлительнаяОперация48 + + + + + УдалениеПомеченныхОбъектов + 63 + + <key>ru</key> + <value>Удаление помеченных объектов</value> + + true + true + + true + + + УдалениеПомеченныхОбъектовРасширеннаяПодсказка + 122 + Label + true + true + + Left + + + + УдалениеПомеченныхОбъектовКонтекстноеМеню + 64 + true + + Label + true + 3 + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Основная группа длительной операции</value> + + + ru + Основная группа длительной операции + + + ОсновнаяГруппаДлительнойОперацииРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Длительная операция</value> + + + ru + Длительная операция + + + ДлительнаяОперацияРасширеннаяПодсказка + 119 Label true true @@ -707,7 +937,7 @@ true СтраницыФормыРасширеннаяПодсказка - 53 + 65 Label true true @@ -738,7 +968,7 @@ false КомандаНазадРасширеннаяПодсказка - 105 + 124 Label true true @@ -769,7 +999,7 @@ false КомандаДалееРасширеннаяПодсказка - 106 + 125 Label true true @@ -805,7 +1035,7 @@ false КомандаУдалитьРасширеннаяПодсказка - 107 + 126 Label true true @@ -845,7 +1075,7 @@ false ЗакрытьРасширеннаяПодсказка - 108 + 127 Label true true @@ -880,7 +1110,7 @@ false СправкаРасширеннаяПодсказка - 109 + 128 Label true true @@ -921,7 +1151,7 @@ true КомандыФормыРасширеннаяПодсказка - 104 + 123 Label true true @@ -1133,7 +1363,7 @@ String AnyRef - 200 + 40 @@ -1258,6 +1488,54 @@ true + + ПараметрыОбработчикаОжидания + + <key>ru</key> + <value>Параметры обработчика ожидания</value> + + 11 + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 12 + + + true + + + true + + + + АдресХранилища + + <key>ru</key> + <value>Адрес хранилища</value> + + 13 + + String + + + + true + + + true + + КомандаДалее @@ -1280,7 +1558,7 @@ <name>КомандаСписокПомеченныхУстановитьВсе</name> <title> <key>ru</key> - <value>Команда список помеченных установить все</value> + <value>Пометить все объекты на удаление</value> 2 @@ -1305,7 +1583,7 @@ КомандаСписокПомеченныхСнятьВсе <key>ru</key> - <value>Команда список помеченных снять все</value> + <value>Снять все пометки удаления</value> 3 diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl index eba55f490..2f325e5e2 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl @@ -1,14 +1,26 @@ -/////////////////////////////////////////////////////////////// -// Обработки событий +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + РежимУдаления = "Полный"; + КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + &НаКлиенте Процедура РежимУдаленияПриИзменении(Элемент) + ДоступностьКнопок(); + КонецПроцедуры // Обработчик события "при изменнии" поля "Пометка" @@ -28,12 +40,64 @@ КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ "Список помеченных на удаление" + +// Обработчик события "выбор" строки дерева СписокПомеченныхНаУдаление +// Пытается открыть выбранное значение +// +&НаКлиенте +Процедура СписокПомеченныхНаУдалениеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Если Элемент.ТекущиеДанные <> Неопределено Тогда + ОткрытьЗначение(Элемент.ТекущиеДанные.Значение); + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ "Дерево оставшихся объектов" + +// Обработчик события "выбор" строки дерева ДеревоОставшихсяОбъектов +// Пытается открыть выбранное значение +// +&НаКлиенте +Процедура ДеревоОставшихсяОбъектовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Если Элемент.ТекущиеДанные <> Неопределено Тогда + ОткрытьЗначение(Элемент.ТекущиеДанные.Значение); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоОставшихсяОбъектовПередНачаломИзменения(Элемент, Отказ) + + Отказ = Истина; + + Если Элемент.ТекущиеДанные <> Неопределено Тогда + ОткрытьЗначение(Элемент.ТекущиеДанные.Значение); + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + // Обработчик нажания на кнопку "установить все" командной панели списка // дерева СписокПомеченныхНаУдаление. // Устанавливает пометку всем найденым объектам // &НаКлиенте Процедура КомандаСписокПомеченныхУстановитьВсе() + ЭлементыСписка = СписокПомеченныхНаУдаление.ПолучитьЭлементы(); Для Каждого Элемент Из ЭлементыСписка Цикл УстановитьПометкуВСписке(Элемент, Истина, Истина); @@ -42,6 +106,7 @@ ПроверитьРодителя(Элемент) КонецЕсли; КонецЦикла; + КонецПроцедуры // Обработчик нажания на кнопку "снять все" командной панели списка @@ -50,6 +115,7 @@ // &НаКлиенте Процедура КомандаСписокПомеченныхСнятьВсе() + ЭлементыСписка = СписокПомеченныхНаУдаление.ПолучитьЭлементы(); Для Каждого Элемент Из ЭлементыСписка Цикл УстановитьПометкуВСписке(Элемент, Ложь, Истина); @@ -58,42 +124,6 @@ ПроверитьРодителя(Элемент) КонецЕсли; КонецЦикла; -КонецПроцедуры - -// Обработчик события "выбор" строки дерева ДеревоОставшихсяОбъектов -// Пытается открыть выбранное значение -// -&НаКлиенте -Процедура ДеревоОставшихсяОбъектовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ТекущиеДанные = Элементы.ДеревоОставшихсяОбъектов.ТекущиеДанные; - - Если ТекущиеДанные = Неопределено ИЛИ ТипЗнч(ТекущиеДанные.Значение) = Тип("Строка") Тогда - Возврат; - КонецЕсли; - - // это строка отображает объект, из-за которого не удалось удалить помеченный и выбранный - СтандартнаяОбработка = Ложь; - ОткрытьЗначение(ТекущиеДанные.Значение); - -КонецПроцедуры - -// Обработчик события "выбор" строки дерева СписокПомеченныхНаУдаление -// Пытается открыть выбранное значение -// -&НаКлиенте -Процедура СписокПомеченныхНаУдалениеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ТекущиеДанные = Элементы.СписокПомеченныхНаУдаление.ТекущиеДанные; - - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ТекущиеДанные.ПолучитьЭлементы().Количество() = 0 Тогда - СтандартнаяОбработка = Ложь; - ОткрытьЗначение(ТекущиеДанные.Значение); - КонецЕсли; КонецПроцедуры @@ -155,12 +185,34 @@ Состояние(НСтр("ru = 'Выполняется удаление выбранных объектов'")); КонецЕсли; - СообщениеОбОшибке = ""; - Если УдалениеВыбранныхНаСервере(СообщениеОбОшибке, ТипыУдаленныхОбъектов) Тогда + Результат = УдалениеВыбранныхНаСервере(ТипыУдаленныхОбъектов); + Если НЕ Результат.ЗаданиеВыполнено Тогда + ИдентификаторЗадания = Результат.ИдентификаторЗадания; + АдресХранилища = Результат.АдресХранилища; + + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ДлительнаяОперация; + Иначе + ОбновитьСодержание(Результат.РезультатУдаления, Результат.СообщениеОбОшибке, + Результат.РезультатУдаления.ТипыУдаленныхОбъектов); + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ОбновитьСодержание(Результат, СообщениеОбОшибке, ТипыУдаленныхОбъектов) + + Если Результат.Статус Тогда Для Каждого ТипУдаленногоОбъекта Из ТипыУдаленныхОбъектов Цикл ОповеститьОбИзменении(ТипУдаленногоОбъекта); КонецЦикла; Иначе + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыборРежимаУдаления; Предупреждение(СообщениеОбОшибке); Возврат; КонецЕсли; @@ -176,6 +228,7 @@ |Удалено объектов: %1.'"), УдаленныхОбъектов); КонецЕсли; + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыборРежимаУдаления; Предупреждение(Текст); Иначе Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ПричиныНевозможностиУдаления; @@ -197,11 +250,8 @@ КонецЦикла; КонецЕсли; КонецЕсли; - -КонецПроцедуры -///////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры +КонецПроцедуры // Изменяет доступность кнопок на форме в зависимости от // текущей страницы и состояния реквизитов формы @@ -255,6 +305,7 @@ &НаСервере Функция НайтиИлиДобавитьВетвьДереваСКартинкой(СтрокиДерева, Значение, Представление, НомерКартинки) + // Попытка найти существующую ветвь в СтрокиДерева без вложенных Ветвь = СтрокиДерева.Найти(Значение, "Значение", Ложь); Если Ветвь = Неопределено Тогда @@ -266,6 +317,7 @@ КонецЕсли; Возврат Ветвь; + КонецФункции // Заполняет дерево объектов помеченных на удаление @@ -321,10 +373,12 @@ Если проверятьРодителя И Родитель <> Неопределено Тогда ПроверитьРодителя(Родитель); КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура ПроверитьРодителя(Родитель) + ПометкаРодителя = Истина; ЭлементыСтроки = Родитель.ПолучитьЭлементы(); Для Каждого Элемент Из ЭлементыСтроки Цикл @@ -334,43 +388,83 @@ КонецЕсли; КонецЦикла; Родитель.Пометка = ПометкаРодителя; + КонецПроцедуры - // Производит попытку удаления выбранных объектов // Объекты, которые не были удалены показываются в отдельной таблице // &НаСервере -Функция УдалениеВыбранныхНаСервере(СообщениеОбОшибке, ТипыУдаленныхОбъектов) +Функция УдалениеВыбранныхНаСервере(ТипыУдаленныхОбъектов) - Удаляемые = Новый Массив; + ПараметрыУдаления = Новый Структура("СписокПомеченныхНаУдаление, РежимУдаления, ТипыУдаленныхОбъектов, ", + СписокПомеченныхНаУдаление, РежимУдаления, ТипыУдаленныхОбъектов); + + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + Обработки.УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты(ПараметрыУдаления, АдресХранилища); + Результат = Новый Структура("ЗаданиеВыполнено", Истина); - Если РежимУдаления = "Полный" Тогда - // При полном удалении получаем весь список помеченных на удаление - Удаляемые = Обработки.УдалениеПомеченныхОбъектов.ПолучитьПомеченныеНаУдаление(); - Иначе - // Заполняем массив ссылками на выбранные элементы, помеченные на удаление - КоллекцияСтрокМетаданных = СписокПомеченныхНаУдаление.ПолучитьЭлементы(); - Для Каждого СтрокаОбъектаМетаданных Из КоллекцияСтрокМетаданных Цикл - КоллекцияСтрокСсылок = СтрокаОбъектаМетаданных.ПолучитьЭлементы(); - Для Каждого СтрокаСсылки Из КоллекцияСтрокСсылок Цикл - Если СтрокаСсылки.Пометка Тогда - Удаляемые.Добавить(СтрокаСсылки.Значение); - КонецЕсли; - КонецЦикла; - КонецЦикла; + Если Результат.ЗаданиеВыполнено Тогда + Результат = ЗаполнитьРезультаты(АдресХранилища, Результат); КонецЕсли; - КоличествоУдаляемых = Удаляемые.Количество(); + Возврат Результат; - // Выполняем удаление - Результат = Обработки.УдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты(Удаляемые, ТипыУдаленныхОбъектов); +КонецФункции + +&НаСервере +Функция ЗаполнитьРезультаты(АдресХранилища, Результат) - Если Не Результат.Статус Тогда - СообщениеОбОшибке = Результат.Значение; - Возврат Ложь; + РезультатУдаления = ПолучитьИзВременногоХранилища(АдресХранилища); + Если Не РезультатУдаления.Статус Тогда + Результат.Вставить("РезультатУдаления", РезультатУдаления); + Результат.Вставить("СообщениеОбОшибке", РезультатУдаления.Значение); + Возврат Результат; КонецЕсли; + Дерево = ЗаполнитьДеревоОставшихсяОбъектов(РезультатУдаления); + ЗначениеВРеквизитФормы(Дерево, "ДеревоОставшихсяОбъектов"); + + КоличествоУдаляемых = РезультатУдаления.КоличествоУдаляемых; + КоличествоНеУдаленныхОбъектов = РезультатУдаления.КоличествоНеУдаленныхОбъектов; + ЗаполнитьСтрокуРезультатов(КоличествоУдаляемых); + + Если ТипЗнч(РезультатУдаления.Значение) = Тип("Структура") Тогда + РезультатУдаления.Удалить("Значение"); + КонецЕсли; + + Результат.Вставить("РезультатУдаления", РезультатУдаления); + Результат.Вставить("СообщениеОбОшибке", ""); + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеЗадания() + + Попытка + Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ДлительнаяОперация Тогда + Если ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + Результат = ЗаполнитьРезультаты(АдресХранилища, Новый Структура); + ТипыУдаленныхОбъектов = Неопределено; + ОбновитьСодержание(Результат.РезультатУдаления, Результат.РезультатУдаления.Значение, Результат.РезультатУдаления.ТипыУдаленныхОбъектов); + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания( + "Подключаемый_ПроверитьВыполнениеЗадания", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); + КонецЕсли; + КонецЕсли; + Исключение + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +&НаСервере +Функция ЗаполнитьДеревоОставшихсяОбъектов(Результат) + Найденные = Результат.Значение.Найденные; НеУдаленные = Результат.Значение.НеУдаленные; @@ -397,7 +491,12 @@ Дерево.Строки.Сортировать("Значение", Истина); - ЗначениеВРеквизитФормы(Дерево, "ДеревоОставшихсяОбъектов"); + Возврат Дерево; + +КонецФункции + +&НаСервере +Процедура ЗаполнитьСтрокуРезультатов(КоличествоУдаляемых) УдаленныхОбъектов = КоличествоУдаляемых - КоличествоНеУдаленныхОбъектов; @@ -419,7 +518,5 @@ |Нажмите ОК для просмотра списка оставшихся (не удаленных) объектов.'"), Строка(КоличествоНеУдаленныхОбъектов)); КонецЕсли; - - Возврат Истина; - -КонецФункции + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl index a55cbf0a4..067a95214 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl @@ -1,9 +1,13 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Возвращает помеченные на удаление объекты. Возможен отбор по фильтру. // Функция ПолучитьПомеченныеНаУдаление() Экспорт + УстановитьПривилегированныйРежим(Истина); МассивПомеченные = НайтиПомеченныеНаУдаление(); + УстановитьПривилегированныйРежим(Ложь); Результат = Новый Массив; Для Каждого ЭлементПомеченный Из МассивПомеченные Цикл @@ -16,27 +20,136 @@ КонецФункции -// Функция удаления объектов помеченных на удаление -// Параметры: -// Удаляемые - Массив - ссылки на объекты, которые требуется удалить -// ПроверятьСсылочнуюЦелостность - требуется проверка ссылочной целостности -// если Истина, объекты на которые есть ссыки в ИБ -// не будут удалены, а будут возвращены как результат функции +// Инициализирует таблицу типов удаляемых объектов. // -// Возвращаемое значение -// таблица значений, характеризующая ссылки на удаляемые объекты +// Возвращаемое значение: +// ТаблицаЗначений - таблица типов. // -Функция УдалитьПомеченныеОбъекты(знач Удаляемые, ТипыУдаленныхОбъектовМассив) Экспорт +Функция ПолучитьТаблицуТиповУдаляемыхОбъектов() - МонопольныйДоступ = Ложь; + УдаляемыеТипыОбъектов = Новый ТаблицаЗначений; + УдаляемыеТипыОбъектов.Колонки.Добавить("Тип", Новый ОписаниеТипов("Тип")); + + Возврат УдаляемыеТипыОбъектов; + +КонецФункции + +// Обновляет таблицу типов обновляемых объектов. +// +// Параметры: +// Таблица - ТаблицаЗначений - таблица с типами. +// УдаляемыеОбъекты - Массив - массив удаляемых объектов. +// +Процедура ОбновитьТаблицуТиповУдаляемыхОбъектов(Таблица, знач УдаляемыеОбъекты) + + Для Каждого УдаляемыйОбъект Из УдаляемыеОбъекты Цикл + НовыйТип = Таблица.Добавить(); + НовыйТип.Тип = ТипЗнч(УдаляемыйОбъект); + КонецЦикла; + + Таблица.Свернуть("Тип"); + +КонецПроцедуры + +// Возвращает структуру с полями Статус и Значение по переданным параметрам. +// +// Возвращаемое значение: +// Структура - структура статуса операции. +// +Функция ЗаполнитьСтатусОперации(знач Значение, знач Статус = Истина) + + Возврат Новый Структура("Статус, Значение", Статус, Значение); + +КонецФункции + +// Получает массив помеченных для удаления объектов. +// +// Параметры: +// СписокПомеченныхНаУдаление - ДеревоЗначений - дерево помеченных на удаление объектов. +// РежимУдаления - Строка - режим удаоения. +// +// Возвращаемое значение: +// Массив- массив помеченных на удаление объектов. +// +Функция ПолучитьМассивПомеченныхОбъектовНаУдаление(СписокПомеченныхНаУдаление, РежимУдаления) + + Удаляемые = Новый Массив; + + Если РежимУдаления = "Полный" Тогда + // При полном удалении получаем весь список помеченных на удаление + Удаляемые = ПолучитьПомеченныеНаУдаление(); + Иначе + // Заполняем массив ссылками на выбранные элементы, помеченные на удаление + КоллекцияСтрокМетаданных = СписокПомеченныхНаУдаление.ПолучитьЭлементы(); + Для Каждого СтрокаОбъектаМетаданных Из КоллекцияСтрокМетаданных Цикл + КоллекцияСтрокСсылок = СтрокаОбъектаМетаданных.ПолучитьЭлементы(); + Для Каждого СтрокаСсылки Из КоллекцияСтрокСсылок Цикл + Если СтрокаСсылки.Пометка Тогда + Удаляемые.Добавить(СтрокаСсылки.Значение); + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЕсли; + + Возврат Удаляемые; + +КонецФункции + +// Выполняет процесс по удалению объектов. +// +// Параметры: +// ПараметрыУдаления - Структура - параметры, необходимые для удаления. +// АдресХранилища - Строка - адрес внутреннего хранилища. +// +Процедура УдалитьПомеченныеОбъекты(ПараметрыУдаления, АдресХранилища) Экспорт + + // Извлекаем параметры + СписокПомеченныхНаУдаление = ПараметрыУдаления.СписокПомеченныхНаУдаление; + РежимУдаления = ПараметрыУдаления.РежимУдаления; + ТипыУдаленныхОбъектов = ПараметрыУдаления.ТипыУдаленныхОбъектов; + + Удаляемые = ПолучитьМассивПомеченныхОбъектовНаУдаление(СписокПомеченныхНаУдаление, РежимУдаления); + КоличествоУдаляемых = Удаляемые.Количество(); + + // Выполняем удаление + Результат = ВыполнитьУдаление(Удаляемые, ТипыУдаленныхОбъектов); + + // Добавляем параметры + Если ТипЗнч(Результат.Значение) = Тип("Структура") Тогда + КоличествоНеУдаленныхОбъектов = Результат.Значение.НеУдаленные.Количество(); + Иначе + КоличествоНеУдаленныхОбъектов = 0; + КонецЕсли; + Результат.Вставить("КоличествоНеУдаленныхОбъектов", КоличествоНеУдаленныхОбъектов); + Результат.Вставить("КоличествоУдаляемых", КоличествоУдаляемых); + Результат.Вставить("ТипыУдаленныхОбъектов", ТипыУдаленныхОбъектов); + + ПоместитьВоВременноеХранилище(Результат, АдресХранилища); + +КонецПроцедуры + +// Выполняет удаление объектов. +// +// Параметры: +// Удаляемые - Массив - массив помеченных на удаление. +// ТипыУдаленныхОбъектовМассив - Массив - массив типов удаленных объектов. +// +// Возвращаемое значение: +// Структура - структура с результатом удаления. +// +Функция ВыполнитьУдаление(знач Удаляемые, ТипыУдаленныхОбъектовМассив) + + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав для выполнения операции.'"); + КонецЕсли; Попытка - Если Не МонопольныйРежим() Тогда - УстановитьМонопольныйРежим(Истина); - КонецЕсли; - МонопольныйДоступ = МонопольныйРежим(); + ОбщегоНазначения.ЗаблокироватьИБ(); Исключение - Возврат ЗаполнитьСтатусОперации(НСтр("ru = 'Не удалось установить монопольный режим'"), Ложь); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить монопольный режим (%1)'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат ЗаполнитьСтатусОперации(Сообщение, Ложь); КонецПопытки; ТипыУдаленныхОбъектов = ПолучитьТаблицуТиповУдаляемыхОбъектов(); @@ -61,7 +174,9 @@ // пробуем удалить с контролем Попытка + УстановитьПривилегированныйРежим(Истина); УдалитьОбъекты(УдаляемыеОбъекты, Истина, НайденныеДанные); + УстановитьПривилегированныйРежим(Ложь); Исключение СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); УстановитьМонопольныйРежим(Ложь); @@ -113,38 +228,8 @@ ТипыУдаленныхОбъектовМассив = ТипыУдаленныхОбъектов.ВыгрузитьКолонку("Тип"); - Если МонопольныйДоступ Тогда - УстановитьМонопольныйРежим(Ложь); - КонецЕсли; + ОбщегоНазначения.РазблокироватьИБ(); Возврат ЗаполнитьСтатусОперации(Новый Структура("Найденные, НеУдаленные", Найденные, НеУдаленные)); КонецФункции - -Функция ПолучитьТаблицуТиповУдаляемыхОбъектов() - - УдаляемыеТипыОбъектов = Новый ТаблицаЗначений; - УдаляемыеТипыОбъектов.Колонки.Добавить("Тип", Новый ОписаниеТипов("Тип")); - - Возврат УдаляемыеТипыОбъектов; - -КонецФункции - -Процедура ОбновитьТаблицуТиповУдаляемыхОбъектов(Таблица, знач УдаляемыеОбъекты) - - Для Каждого УдаляемыйОбъект Из УдаляемыеОбъекты Цикл - НовыйТип = Таблица.Добавить(); - НовыйТип.Тип = ТипЗнч(УдаляемыйОбъект); - КонецЦикла; - - Таблица.Свернуть("Тип"); - -КонецПроцедуры - -// Возвращает структуру с полями Статус и Значение по переданным параметрам -// -Функция ЗаполнитьСтатусОперации(знач Значение, знач Статус = Истина) - - Возврат Новый Структура("Статус, Значение", Статус, Значение); - -КонецФункции \ No newline at end of file diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/Форма/Form.oform b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/Форма/Form.oform index 83320f420..9ec8934a2 100644 Binary files a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/Форма/Form.oform and b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/Форма/Form.oform differ diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаНастройкиОтладкиОбработчиков/Form.oform b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаНастройкиОтладкиОбработчиков/Form.oform index 1d1671115..ddc3470ee 100644 Binary files a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаНастройкиОтладкиОбработчиков/Form.oform and b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаНастройкиОтладкиОбработчиков/Form.oform differ diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаРедактораТекстовогоДокумента/Form.oform b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаРедактораТекстовогоДокумента/Form.oform index d974995ea..196307fed 100644 Binary files a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаРедактораТекстовогоДокумента/Form.oform and b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаРедактораТекстовогоДокумента/Form.oform differ diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl index 22fb2ed6c..ea9c67116 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl @@ -194,6 +194,65 @@ КонецФункции // МассивИзСтроки() +// Разбивает строку на несколько строк по разделителю. Разделитель может иметь любую длину. +// +// Параметры: +// Строка - Строка - текст с разделителями; +// Разделитель - Строка - разделитель строк текста, минимум 1 символ; +// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк. +// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией: +// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки +// включаются в результат. +// - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в +// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а +// при других разделителях результатом функции будет пустой массив. +// +// +// Возвращаемое значение: +// Массив - массив строк. +// +// Примеры: +// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") - возвратит массив из 5 элементов, три из которых - пустые строки; +// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) - возвратит массив из двух элементов; +// РазложитьСтрокуВМассивПодстрок(" один два ", " ") - возвратит массив из двух элементов; +// РазложитьСтрокуВМассивПодстрок("") - возвратит пустой массив; +// РазложитьСтрокуВМассивПодстрок("",,Ложь) - возвратит массив с одним элементом "" (пустой строкой); +// РазложитьСтрокуВМассивПодстрок("", " ") - возвратит массив с одним элементом "" (пустой строкой); +// +Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Экспорт + + Результат = Новый Массив; + + // для обеспечения обратной совместимости + Если ПропускатьПустыеСтроки = Неопределено Тогда + ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); + Если ПустаяСтрока(Строка) Тогда + Если Разделитель = " " Тогда + Результат.Добавить(""); + КонецЕсли; + Возврат Результат; + КонецЕсли; + КонецЕсли; + // + + Позиция = Найти(Строка, Разделитель); + Пока Позиция > 0 Цикл + Подстрока = Лев(Строка, Позиция - 1); + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда + Результат.Добавить(Подстрока); + КонецЕсли; + Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); + Позиция = Найти(Строка, Разделитель); + КонецЦикла; + + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда + Результат.Добавить(Строка); + КонецЕсли; + + Возврат Результат; + +КонецФункции + // Возвращает строку номера без символьных префиксов // Например: // ПолучитьСтроковыйНомерБезПрефиксов("УТ0000001234") = "0000001234" @@ -2231,23 +2290,12 @@ СтрокаТаблицы = ТаблицаПоискПоТЧ.Добавить(); СтрокаТаблицы.ИмяЭлемента = ТекущаяСтрока; - СтрокаТаблицы.ПоляПоискаТЧ = Новый Массив(); - Пока Истина Цикл - - ТекущееПоле = ОтделитьРазделителем(СтрокаПоиска, ","); - Если ПустаяСтрока(ТекущееПоле) Тогда - Прервать; - КонецЕсли; - СтрокаТаблицы.ПоляПоискаТЧ.Добавить(СокрЛП(ТекущееПоле)); - - КонецЦикла; + СтрокаТаблицы.ПоляПоискаТЧ = РазложитьСтрокуВМассивПодстрок(СтрокаПоиска); - СтрокаТаблицы.ПоляПоискаТЧ.Добавить(СокрЛП(СтрокаПоиска)); - - КонецЦикла; - + КонецЦикла; + ИначеЕсли (ИмяУзла = "Правило") И (ПравилаОбмена.ТипУзла = одТипУзлаXML_КонецЭлемента) Тогда - + Прервать; КонецЕсли; @@ -7882,7 +7930,19 @@ Исключение - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(49); + ЗП = ПолучитьСтруктуруЗаписиПротокола(49, ОписаниеОшибки()); + ЗП.ПКО = ПКО.Имя + " (" + ПКО.Наименование + ")"; + ЗП.ПКГС = ПКГС.Имя + " (" + ПКГС.Наименование + ")"; + + Попытка + ЗП.Объект = Строка(Источник) + " (" + ТипЗнч(Источник) + ")"; + Исключение + ЗП.Объект = "(" + ТипЗнч(Источник) + ")"; + КонецПопытки; + + ЗП.Обработчик = "ПослеОбработкиВыгрузкиГруппыСвойств"; + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(49, ЗП); + Если Не ФлагРежимОтладки Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -7907,21 +7967,43 @@ КоллекцияОбъектов = ВходящиеДанные[ПКГС.Приемник]; + Если ТипЗнч(КоллекцияОбъектов) = Тип("РезультатЗапроса") Тогда + + КоллекцияОбъектов = КоллекцияОбъектов.Выгрузить(); + + КонецЕсли; + Исключение - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(66); + ЗП = ПолучитьСтруктуруЗаписиПротокола(66, ОписаниеОшибки()); + ЗП.ПКО = ПКО.Имя + " (" + ПКО.Наименование + ")"; + ЗП.ПКГС = ПКГС.Имя + " (" + ПКГС.Наименование + ")"; + + Попытка + ЗП.Объект = Строка(Источник) + " (" + ТипЗнч(Источник) + ")"; + Исключение + ЗП.Объект = "(" + ТипЗнч(Источник) + ")"; + КонецПопытки; + + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(66, ЗП); + Если Не ФлагРежимОтладки Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; Возврат; - КонецПопытки; ИначеЕсли ВидИсточника = "ТабличнаяЧасть" Тогда КоллекцияОбъектов = Источник[ПКГС.Источник]; + Если ТипЗнч(КоллекцияОбъектов) = Тип("РезультатЗапроса") Тогда + + КоллекцияОбъектов = КоллекцияОбъектов.Выгрузить(); + + КонецЕсли; + ИначеЕсли ВидИсточника = "ПодчиненныйСправочник" Тогда ИначеЕсли Найти(ВидИсточника, "НаборДвижений") > 0 Тогда @@ -7932,6 +8014,12 @@ КоллекцияОбъектов = Источник[ПКГС.Приемник]; + Если ТипЗнч(КоллекцияОбъектов) = Тип("РезультатЗапроса") Тогда + + КоллекцияОбъектов = КоллекцияОбъектов.Выгрузить(); + + КонецЕсли; + КонецЕсли; ВыгружатьГруппуЧерезФайл = ВыгружатьГруппуЧерезФайл ИЛИ (КоллекцияОбъектов.Количество() > 1000); @@ -8137,7 +8225,22 @@ Исключение - ЗаписатьВПротоколВыполнения(49); + ЗП = ПолучитьСтруктуруЗаписиПротокола(49, ОписаниеОшибки()); + ЗП.ПКО = ПКО.Имя + " (" + ПКО.Наименование + ")"; + ЗП.ПКГС = ПКГС.Имя + " (" + ПКГС.Наименование + ")"; + + Попытка + ЗП.Объект = Строка(Источник) + " (" + ТипЗнч(Источник) + ")"; + Исключение + ЗП.Объект = "(" + ТипЗнч(Источник) + ")"; + КонецПопытки; + + ЗП.Обработчик = "ПослеОбработкиВыгрузкиГруппыСвойств"; + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(49, ЗП); + + Если Не ФлагРежимОтладки Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; КонецПопытки; @@ -9891,7 +9994,7 @@ // Возвращает фрагмент текста языка запросов, который выражает условие ограничения на интервал дат // -Функция ПолучитьСтрокуОграниченияПоДатеДляЗапроса(Свойства, ИмяТипа, ИмяГруппыТаблицы, ВыборкаДляОчисткиДанных = Ложь) Экспорт +Функция ПолучитьСтрокуОграниченияПоДатеДляЗапроса(Свойства, ИмяТипа, ИмяГруппыТаблицы = "", ВыборкаДляОчисткиДанных = Ложь) Экспорт ИтоговоеОграничениеПоДате = ""; @@ -9910,7 +10013,11 @@ КонецЕсли; - ИмяПоляОграничения = ИмяГруппыТаблицы + "." + ?(ИмяТипа = "Документ", "Дата", "Период"); + Если ПустаяСтрока(ИмяГруппыТаблицы) Тогда + ИмяПоляОграничения = ?(ИмяТипа = "Документ", "Дата", "Период"); + Иначе + ИмяПоляОграничения = ИмяГруппыТаблицы + "." + ?(ИмяТипа = "Документ", "Дата", "Период"); + КонецЕсли; Если ДатаНачала <> ЗначениеПустаяДата Тогда @@ -10162,21 +10269,21 @@ Если Правило.ВыбиратьДанныеДляВыгрузкиОднимЗапросом Тогда // выбираем все поля объекта при выгрузке - ПоляВыборки = "Объект.*"; + ПоляВыборки = "*"; Иначе - ПоляВыборки = "Объект.Ссылка КАК Ссылка"; + ПоляВыборки = "Ссылка КАК Ссылка"; КонецЕсли; - ИтоговоеОграничениеПоДате = ПолучитьСтрокуОграниченияПоДатеДляЗапроса(Свойства, Свойства.ИмяТипа, "Объект", Ложь); + ИтоговоеОграничениеПоДате = ПолучитьСтрокуОграниченияПоДатеДляЗапроса(Свойства, Свойства.ИмяТипа,, Ложь); - ПостроительОтчета.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + " " + ПоляВыборки + " ИЗ " + ИмяМетаданных + " КАК Объект + ПостроительОтчета.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + " " + ПоляВыборки + " ИЗ " + ИмяМетаданных + " | |" + ИтоговоеОграничениеПоДате + " | - |{ГДЕ Объект.Ссылка.* КАК " + СтрЗаменить(ИмяМетаданных, ".", "_") + "}"; + |{ГДЕ Ссылка.* КАК " + СтрЗаменить(ИмяМетаданных, ".", "_") + "}"; КонецЕсли; diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form index bc83ea994..1bd1b9c0a 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form @@ -27,7 +27,7 @@ false УстановитьПериодРасчитанныхИтоговРасширеннаяПодсказка - 332 + 334 Label true true @@ -46,22 +46,23 @@ UserCmds Auto - - ПростоеОписаниеИтогов - 324 + + ОписаниеУстановкиПериода + 328 + + <key>ru</key> + <value>Установить период рассчитанных итогов для всех регистров накопления и бухгалтерии, у которых включены итоги. +Для регистров накопления - на %1. +Для регистров бухгалтерии - на %2.</value> + true true true - - ОписаниеУстановкиПериода - - None - 2 - ПростоеОписаниеИтоговРасширеннаяПодсказка - 333 + ОписаниеУстановкиПериодаРасширеннаяПодсказка + 335 Label true true @@ -70,24 +71,24 @@ - ПростоеОписаниеИтоговКонтекстноеМеню - 325 + ОписаниеУстановкиПериодаКонтекстноеМеню + 329 true - LabelField - Enter - true - Left - true - - 55 - true - 2 - true - true - - Web.DarkSlateBlue - + Label + 55 + true + 4 + true + true + false + false + + Web.DarkBlue + + + Left + Top true @@ -105,7 +106,7 @@ ГруппаУстановкаПериодаРассчитанныхИтоговРасширеннаяПодсказка - 331 + 333 Label true true @@ -136,7 +137,7 @@ false ВключитьИспользованиеИтоговРасширеннаяПодсказка - 336 + 337 Label true true @@ -160,7 +161,7 @@ 282 <key>ru</key> - <value>Включить режим использования итогов для всех регистров, у которых в данный момент выключено использование итогов</value> + <value>Включить режим использования итогов для всех регистров, у которых в данный момент выключено использование итогов.</value> true true @@ -169,7 +170,7 @@ ПростыеИтогиОписаниеРасширеннаяПодсказка - 337 + 338 Label true true @@ -213,7 +214,7 @@ ГруппаВключениеИтоговРасширеннаяПодсказка - 335 + 336 Label true true @@ -253,7 +254,7 @@ true БыстрыйДоступИтогиРасширеннаяПодсказка - 330 + 332 Label true true @@ -290,7 +291,7 @@ false ПерестроитьИЗаполнитьАгрегатыРасширеннаяПодсказка - 340 + 341 Label true true @@ -314,7 +315,7 @@ 292 <key>ru</key> - <value>Выполнить перестроение и заполнение агрегатов для всех регистров, у которых включен режим агрегатов и установлено их использование</value> + <value>Выполнить перестроение и заполнение агрегатов для всех регистров, у которых включен режим агрегатов и установлено их использование.</value> true true @@ -323,7 +324,7 @@ ПростоеПостроениеИЗаполнениеОписаниеРасширеннаяПодсказка - 341 + 342 Label true true @@ -367,7 +368,7 @@ ГруппаПерестроениеИЗаполнениеАгрегатовРасширеннаяПодсказка - 339 + 340 Label true true @@ -398,7 +399,7 @@ false ПолучитьОптимальныеАгрегатыРасширеннаяПодсказка - 343 + 344 Label true true @@ -422,7 +423,7 @@ 290 <key>ru</key> - <value>Выполнить расчет списка оптимальных агрегатов для всех регистров, для которых в Конфигураторе заданы агрегаты</value> + <value>Выполнить расчет списка оптимальных агрегатов для всех регистров, для которых в Конфигураторе заданы агрегаты.</value> true true @@ -431,7 +432,7 @@ ПростоеПолучениеОптимальныхАгрегатовРасширеннаяПодсказка - 344 + 345 Label true true @@ -475,7 +476,7 @@ ГруппаПолучениеОптимальныхАгрегатовРасширеннаяПодсказка - 342 + 343 Label true true @@ -514,7 +515,7 @@ ГруппаБыстрыйДоступАггрегатыРасширеннаяПодсказка - 338 + 339 Label true true @@ -550,7 +551,7 @@ true БыстрыйДоступРасширеннаяПодсказка - 329 + 331 Label true true @@ -608,7 +609,7 @@ ИтогиНаименованиеРасширеннаяПодсказка - 380 + 381 Label true true @@ -653,7 +654,7 @@ ИтогиИспользоватьИтогиРасширеннаяПодсказка - 382 + 383 Label true true @@ -690,7 +691,7 @@ ИтогиИспользоватьТекущиеИтогиРасширеннаяПодсказка - 384 + 385 Label true true @@ -727,7 +728,7 @@ ИтогиПериодИтоговРасширеннаяПодсказка - 386 + 387 Label true true @@ -779,7 +780,7 @@ ИтогиРазделениеИтоговРасширеннаяПодсказка - 388 + 389 Label true true @@ -817,7 +818,7 @@ ИтогиАгрегатыИтогиРасширеннаяПодсказка - 390 + 391 Label true true @@ -860,7 +861,7 @@ false ОбновитьСостояниеИтоговРасширеннаяПодсказка - 352 + 353 Label true true @@ -890,7 +891,7 @@ false ИтогиВключитьИспользованиеИтоговРасширеннаяПодсказка - 354 + 355 Label true true @@ -917,7 +918,7 @@ false ИтогиВыключитьИспользованиеИтоговРасширеннаяПодсказка - 355 + 356 Label true true @@ -948,7 +949,7 @@ ГруппаИтогиРасширеннаяПодсказка - 353 + 354 Label true true @@ -976,7 +977,7 @@ false ВключитьИспользованиеТекущихИтоговРасширеннаяПодсказка - 357 + 358 Label true true @@ -1003,7 +1004,7 @@ false ВыключитьИспользованиеТекущихИтоговРасширеннаяПодсказка - 358 + 359 Label true true @@ -1034,7 +1035,7 @@ ГруппаТекущиеИтогиРасширеннаяПодсказка - 356 + 357 Label true true @@ -1062,7 +1063,7 @@ false ВключитьРазделениеИтоговРасширеннаяПодсказка - 360 + 361 Label true true @@ -1089,7 +1090,7 @@ false ВыключитьРазделениеИтоговРасширеннаяПодсказка - 361 + 362 Label true true @@ -1120,7 +1121,7 @@ ГруппаРазделениеИтоговРасширеннаяПодсказка - 359 + 360 Label true true @@ -1145,7 +1146,7 @@ false УстановитьПериодИтоговРасширеннаяПодсказка - 362 + 363 Label true true @@ -1175,7 +1176,7 @@ false ПересчитатьИтогиРасширеннаяПодсказка - 364 + 365 Label true true @@ -1202,7 +1203,7 @@ false ПересчитатьТекущиеИтогиРасширеннаяПодсказка - 365 + 366 Label true true @@ -1229,7 +1230,7 @@ false ПересчитатьИтогиЗаПериодРасширеннаяПодсказка - 366 + 367 Label true true @@ -1260,7 +1261,7 @@ ГруппаПересчетРасширеннаяПодсказка - 363 + 364 Label true true @@ -1285,7 +1286,7 @@ false НайтиРасширеннаяПодсказка - 367 + 368 Label true true @@ -1312,7 +1313,7 @@ false ОтменитьПоискРасширеннаяПодсказка - 368 + 369 Label true true @@ -1339,7 +1340,7 @@ false ВыделитьВсеРасширеннаяПодсказка - 369 + 370 Label true true @@ -1368,10 +1369,10 @@ СписокИтоговСтрокаПоиска - 371 + 372 СписокИтоговСтрокаПоискаРасширеннаяПодсказка - 373 + 374 Label true true @@ -1381,7 +1382,7 @@ СписокИтоговСтрокаПоискаКонтекстноеМеню - 372 + 373 true СписокИтогов @@ -1391,10 +1392,10 @@ СписокИтоговСостояниеПросмотра - 374 + 375 СписокИтоговСостояниеПросмотраРасширеннаяПодсказка - 376 + 377 Label true true @@ -1404,7 +1405,7 @@ СписокИтоговСостояниеПросмотраКонтекстноеМеню - 375 + 376 true ViewStatusAddition @@ -1415,10 +1416,10 @@ СписокИтоговУправлениеПоиском - 377 + 378 СписокИтоговУправлениеПоискомРасширеннаяПодсказка - 379 + 380 Label true true @@ -1428,7 +1429,7 @@ СписокИтоговУправлениеПоискомКонтекстноеМеню - 378 + 379 true SearchControlAddition @@ -1439,7 +1440,7 @@ СписокИтоговРасширеннаяПодсказка - 370 + 371 Label true true @@ -1461,7 +1462,7 @@ false КонтекстноеМенюИтогиУстановитьПериодИтоговРасширеннаяПодсказка - 348 + 349 Label true true @@ -1488,7 +1489,7 @@ false КонтекстноеМенюИтогиПересчитатьИтогиРасширеннаяПодсказка - 349 + 350 Label true true @@ -1515,7 +1516,7 @@ false КонтекстноеМенюИтогиПересчитатьТекущиеИтогиРасширеннаяПодсказка - 350 + 351 Label true true @@ -1542,7 +1543,7 @@ false КонтекстноеМенюИтогиВыделитьВсеРасширеннаяПодсказка - 351 + 352 Label true true @@ -1601,7 +1602,7 @@ Right ПрерыватьПриОшибкеРасширеннаяПодсказка - 400 + 401 Label true true @@ -1636,7 +1637,7 @@ ГруппаИтоговРасширеннаяПодсказка - 347 + 348 Label true true @@ -1679,7 +1680,7 @@ АгрСписокНаименованиеРасширеннаяПодсказка - 429 + 430 Label true true @@ -1721,7 +1722,7 @@ АгрСписокРежимАгрегатовРасширеннаяПодсказка - 431 + 432 Label true true @@ -1774,7 +1775,7 @@ АгрСписокИспользованиеАгрегатовРасширеннаяПодсказка - 433 + 434 Label true true @@ -1808,7 +1809,7 @@ АгрСписокДатаПостроенияРасширеннаяПодсказка - 435 + 436 Label true true @@ -1850,7 +1851,7 @@ АгрСписокЭффектРасширеннаяПодсказка - 437 + 438 Label true true @@ -1892,7 +1893,7 @@ АгрСписокРазмерРасширеннаяПодсказка - 439 + 440 Label true true @@ -1934,7 +1935,7 @@ АгрСписокОграничениеРазмераРасширеннаяПодсказка - 441 + 442 Label true true @@ -1977,7 +1978,7 @@ false АгрРегОбновитьИнформациюОбАгрегатахРасширеннаяПодсказка - 407 + 408 Label true true @@ -2007,7 +2008,7 @@ false АгрРегВключитьРежимАгрегатовРасширеннаяПодсказка - 409 + 410 Label true true @@ -2034,7 +2035,7 @@ false АгрРегВключитьРежимИтоговРасширеннаяПодсказка - 410 + 411 Label true true @@ -2065,7 +2066,7 @@ ГруппаРежимРасширеннаяПодсказка - 408 + 409 Label true true @@ -2093,7 +2094,7 @@ false АгрРегВключитьИспользованиеАгрегатовРасширеннаяПодсказка - 412 + 413 Label true true @@ -2120,7 +2121,7 @@ false АгрРегОтключитьИспользованиеАгрегатовРасширеннаяПодсказка - 413 + 414 Label true true @@ -2151,7 +2152,7 @@ ГруппаИспользованиеРасширеннаяПодсказка - 411 + 412 Label true true @@ -2176,7 +2177,7 @@ false АгрРегПерестроитьРасширеннаяПодсказка - 414 + 415 Label true true @@ -2203,7 +2204,7 @@ false АгрРегЗаполнитьАгрегатыПоРегистрамРасширеннаяПодсказка - 415 + 416 Label true true @@ -2230,7 +2231,7 @@ false АгрРегОчиститьАгрегатыПоРегистрамРасширеннаяПодсказка - 416 + 417 Label true true @@ -2257,7 +2258,7 @@ false АгрРегОптимальныеРасширеннаяПодсказка - 417 + 418 Label true true @@ -2284,7 +2285,7 @@ false АгрРегВыделитьВсеРасширеннаяПодсказка - 418 + 419 Label true true @@ -2309,10 +2310,10 @@ АгрегатыПоРегистрамСтрокаПоиска - 420 + 421 АгрегатыПоРегистрамСтрокаПоискаРасширеннаяПодсказка - 422 + 423 Label true true @@ -2322,7 +2323,7 @@ АгрегатыПоРегистрамСтрокаПоискаКонтекстноеМеню - 421 + 422 true АгрегатыПоРегистрам @@ -2332,10 +2333,10 @@ АгрегатыПоРегистрамСостояниеПросмотра - 423 + 424 АгрегатыПоРегистрамСостояниеПросмотраРасширеннаяПодсказка - 425 + 426 Label true true @@ -2345,7 +2346,7 @@ АгрегатыПоРегистрамСостояниеПросмотраКонтекстноеМеню - 424 + 425 true ViewStatusAddition @@ -2356,10 +2357,10 @@ АгрегатыПоРегистрамУправлениеПоиском - 426 + 427 АгрегатыПоРегистрамУправлениеПоискомРасширеннаяПодсказка - 428 + 429 Label true true @@ -2369,7 +2370,7 @@ АгрегатыПоРегистрамУправлениеПоискомКонтекстноеМеню - 427 + 428 true SearchControlAddition @@ -2380,7 +2381,7 @@ АгрегатыПоРегистрамРасширеннаяПодсказка - 419 + 420 Label true true @@ -2402,7 +2403,7 @@ false КМАгрРегВключитьРежимАгрегатовРасширеннаяПодсказка - 403 + 404 Label true true @@ -2429,7 +2430,7 @@ false КМАгрРегПерестроитьАгрегатыРасширеннаяПодсказка - 404 + 405 Label true true @@ -2456,7 +2457,7 @@ false КМАгрРегАгрегатыОптимальныеРасширеннаяПодсказка - 405 + 406 Label true true @@ -2483,7 +2484,7 @@ false КМАгрРегВыделитьВсеРасширеннаяПодсказка - 406 + 407 Label true true @@ -2577,7 +2578,7 @@ АгрИспользованиеРасширеннаяПодсказка - 461 + 462 Label true true @@ -2610,7 +2611,7 @@ АгрПериодичностьРасширеннаяПодсказка - 463 + 464 Label true true @@ -2651,7 +2652,7 @@ АгрИзмеренияРасширеннаяПодсказка - 465 + 466 Label true true @@ -2692,7 +2693,7 @@ АгрНачалоПериодаРасширеннаяПодсказка - 467 + 468 Label true true @@ -2733,7 +2734,7 @@ АгрКонецПериодаРасширеннаяПодсказка - 469 + 470 Label true true @@ -2774,7 +2775,7 @@ АгрРазмерРасширеннаяПодсказка - 471 + 472 Label true true @@ -2810,10 +2811,10 @@ СписокАгрегатовСтрокаПоиска - 452 + 453 СписокАгрегатовСтрокаПоискаРасширеннаяПодсказка - 454 + 455 Label true true @@ -2823,7 +2824,7 @@ СписокАгрегатовСтрокаПоискаКонтекстноеМеню - 453 + 454 true СписокАгрегатов @@ -2833,10 +2834,10 @@ СписокАгрегатовСостояниеПросмотра - 455 + 456 СписокАгрегатовСостояниеПросмотраРасширеннаяПодсказка - 457 + 458 Label true true @@ -2846,7 +2847,7 @@ СписокАгрегатовСостояниеПросмотраКонтекстноеМеню - 456 + 457 true ViewStatusAddition @@ -2857,10 +2858,10 @@ СписокАгрегатовУправлениеПоиском - 458 + 459 СписокАгрегатовУправлениеПоискомРасширеннаяПодсказка - 460 + 461 Label true true @@ -2870,7 +2871,7 @@ СписокАгрегатовУправлениеПоискомКонтекстноеМеню - 459 + 460 true SearchControlAddition @@ -2881,7 +2882,7 @@ СписокАгрегатовРасширеннаяПодсказка - 451 + 452 Label true true @@ -2934,7 +2935,7 @@ ГруппаАгрегатыРасширеннаяПодсказка - 402 + 403 Label true true @@ -2963,7 +2964,7 @@ РасширенныеИнструментыРасширеннаяПодсказка - 346 + 347 Label true true @@ -2992,7 +2993,7 @@ РасширенныеВозможностиРасширеннаяПодсказка - 345 + 346 Label true true @@ -3021,7 +3022,7 @@ ОперацииРасширеннаяПодсказка - 328 + 330 Label true true @@ -3052,7 +3053,7 @@ None ГиперссылкаСТекстомРасширеннаяПодсказка - 482 + 483 Label true true @@ -3094,7 +3095,7 @@ false СправкаРасширеннаяПодсказка - 484 + 485 Label true true @@ -3127,7 +3128,7 @@ true ПодвалРасширеннаяПодсказка - 481 + 482 Label true true @@ -3152,10 +3153,6 @@ Right true - - OnOpen - ПриОткрытии - OnCreateAtServer ПриСозданииНаСервере @@ -3945,24 +3942,6 @@ ПериодПерерасчетаРегистров - - ОписаниеУстановкиПериода - - <key>ru</key> - <value>Описание установки периода</value> - - 10 - - String - - - - true - - - true - - ТекстГиперСсылки diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl index dd2049f7a..f33670dd3 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl @@ -1,9 +1,12 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ПутьКОбъектуМетаданных = РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя(); - Если НЕ ПравоДоступа("Администрирование", Метаданные) Тогда + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда СтандартнаяОбработка = Ложь; Возврат; КонецЕсли; @@ -19,8 +22,600 @@ Элементы.СписокАгрегатов.Заголовок = Префикс(); КонецЕсли; + Если СписокИтогов.Количество() = 0 Тогда + Элементы.ГруппаИтогов.Доступность = Ложь; + Элементы.УстановитьПериодРасчитанныхИтогов.Доступность = Ложь; + Элементы.ВключитьИспользованиеИтогов.Доступность = Ложь; + КонецЕсли; + + Если АгрегатыПоРегистрам.Количество() = 0 Тогда + Элементы.ГруппаАгрегаты.Доступность = Ложь; + Элементы.ПерестроитьИЗаполнитьАгрегаты.Доступность = Ложь; + Элементы.ПолучитьОптимальныеАгрегаты.Доступность = Ложь; + КонецЕсли; + + Элементы.Операции.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; + + УстановитьРасширенныйРежим(); + + РассчитатьИтогиНа = ТекущаяДатаСеанса(); + + Элементы.ОписаниеУстановкиПериода.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Элементы.ОписаниеУстановкиПериода.Заголовок, + Формат(ОкончаниеПериода(ДобавитьМесяц(РассчитатьИтогиНа, -1)), "DLF=D"), + Формат(ОкончаниеПериода(РассчитатьИтогиНа), "DLF=D") ); + КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ГиперссылкаСТекстомНажатие(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ПолныеВозможности = НЕ ПолныеВозможности; + УстановитьРасширенныйРежим(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокИтогов + +&НаКлиенте +Процедура СписокИтоговПриАктивизацииСтроки(Элемент) + + Элементы.ГруппаРазделениеИтогов.Доступность + = Элементы.СписокИтогов.ТекущиеДанные.РазрешитьРазделениеИтогов; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокИтоговВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ИмяМетаданного = СписокИтогов.НайтиПоИдентификатору(ВыбраннаяСтрока).ИмяМетаданного; + Если Поле.Имя = "ИтогиАгрегатыИтоги" Тогда + + СтандартнаяОбработка = Ложь; + + МассивРезультата = АгрегатыПоРегистрам.НайтиСтроки( + Новый Структура("ИмяМетаданного", ИмяМетаданного)); + + Если МассивРезультата.Количество() > 0 Тогда + + Индекс = АгрегатыПоРегистрам.Индекс(МассивРезультата[0]); + ТекущийЭлемент = Элементы.АгрегатыПоРегистрам; + Элементы.АгрегатыПоРегистрам.ТекущаяСтрока = Индекс; + Элементы.АгрегатыПоРегистрам.ТекущийЭлемент = Элементы.АгрСписокНаименование; + + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ВключитьИспользованиеИтогов(Команда) + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Включение использования итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Включение использования итогов завершено'")); + ПараметрыИтогов.Вставить("Действие", "УстановитьИспользованиеИтогов"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "ИспользоватьИтоги"); + ПараметрыИтогов.Вставить("Значение1", Истина); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка включения использования итогов.'")); + + УправлениеИтогами(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ВключитьИспользованиеТекущихИтогов(Команда) + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Включение использования текущих итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Включение использования текущих итогов завершено'")); + ПараметрыИтогов.Вставить("Действие", "ИспользоватьТекущиеИтоги"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "ИспользоватьТекущиеИтоги"); + ПараметрыИтогов.Вставить("Значение1", Истина); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка включения использования текущих итогов.'")); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыключитьИспользованиеИтогов(Команда) + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Выключение использования итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Выключение использования итогов завершено'")); + ПараметрыИтогов.Вставить("Действие", "УстановитьИспользованиеИтогов"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "ИспользоватьИтоги"); + ПараметрыИтогов.Вставить("Значение1", Ложь); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка выключения использования итогов.'")); + + УправлениеИтогами(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыключитьИспользованиеТекущихИтогов(Команда) + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Выключение использования текущих итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Выключение использования текущих итогов завершено'")); + ПараметрыИтогов.Вставить("Действие", "ИспользоватьТекущиеИтоги"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "ИспользоватьТекущиеИтоги"); + ПараметрыИтогов.Вставить("Значение1", Ложь); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка выключения использования текущих итогов.'")); + + УправлениеИтогами(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьСостояниеИтогов(Команда) + + ОбновитьСписокИтоговНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПериодИтогов(Команда) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РегНакопления", Ложь); + ПараметрыФормы.Вставить("РегБухгалтерии", Ложь); + + Для Каждого Индекс Из Элементы.СписокИтогов.ВыделенныеСтроки Цикл + ИнформацияПоРегистру = СписокИтогов.НайтиПоИдентификатору(Индекс); + ПараметрыФормы.РегНакопления = ПараметрыФормы.РегНакопления ИЛИ ИнформацияПоРегистру.Тип = 0; + ПараметрыФормы.РегБухгалтерии = ПараметрыФормы.РегБухгалтерии ИЛИ ИнформацияПоРегистру.Тип = 1; + КонецЦикла; + + Результат = ОткрытьФормуМодально("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаВыбораПериода", ПараметрыФормы); + + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Установка периода рассчитанных итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Установка периода рассчитанных итогов завершена'")); + ПараметрыИтогов.Вставить("Действие", "УстановитьПериодИтогов"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "ПериодИтогов"); + ПараметрыИтогов.Вставить("Значение1", Результат.ПериодДляРегНакоп); + ПараметрыИтогов.Вставить("Значение2", Результат.ПериодДляРегБухг); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка установки периода рассчитанных итогов.'")); + + УправлениеИтогами(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ВключитьРазделениеИтогов(Команда) + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Включение разделения итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Включение разделения итогов завершено'")); + ПараметрыИтогов.Вставить("Действие", "УстановитьРазделениеИтогов"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "РазделениеИтогов"); + ПараметрыИтогов.Вставить("Значение1", Истина); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка включения разделения итогов.'")); + + УправлениеИтогами(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыключитьРазделениеИтогов(Команда) + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Выключение разделения итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Выключение разделения итогов завершено'")); + ПараметрыИтогов.Вставить("Действие", "УстановитьРазделениеИтогов"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "РазделениеИтогов"); + ПараметрыИтогов.Вставить("Значение1", Ложь); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка выключения разделения итогов.'")); + + УправлениеИтогами(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИнформациюОбАгрегатах(Команда) + + ОбновитьАгрегатыПоРегистрамНаСервере(); + УстановитьФильтрСпискаАгрегатов(); + +КонецПроцедуры + +&НаКлиенте +Процедура АгрегатыПоРегистрамПриАктивизацииСтроки(Элемент) + + УстановитьФильтрСпискаАгрегатов(); + + Если Элементы.АгрегатыПоРегистрам.РежимВыделения = РежимВыделенияТаблицы.Одиночный Тогда + ДоступностьЭлементов = Элементы.АгрегатыПоРегистрам.ТекущиеДанные.РежимАгрегатов; + Иначе + ДоступностьЭлементов = Истина; + КонецЕсли; + + Элементы.АгрРегПерестроить.Доступность = ДоступностьЭлементов; + Элементы.АгрРегОчиститьАгрегатыПоРегистрам.Доступность = ДоступностьЭлементов; + Элементы.АгрРегЗаполнитьАгрегатыПоРегистрам.Доступность = ДоступностьЭлементов; + Элементы.АгрРегОптимальные.Доступность = ДоступностьЭлементов; + Элементы.АгрРегОтключитьИспользованиеАгрегатов.Доступность = ДоступностьЭлементов; + Элементы.АгрРегВключитьИспользованиеАгрегатов.Доступность = ДоступностьЭлементов; + +КонецПроцедуры + +&НаКлиенте +Процедура ВключитьРежимАгрегатов(Команда) + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Включение режима агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Включение режима агрегатов завершено'")); + ПараметрыИтогов.Вставить("Действие", "УстановитьРежимАгрегатов"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "РежимАгрегатов"); + ПараметрыИтогов.Вставить("Значение1", Истина); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка включения режима агрегатов.'")); + + УправлениеАгрегатом(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ВключитьРежимИтогов(Команда) + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Включение режима итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Включение режима итогов завершено'")); + ПараметрыИтогов.Вставить("Действие", "УстановитьРежимАгрегатов"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "РежимАгрегатов"); + ПараметрыИтогов.Вставить("Значение1", Ложь); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка включения режима итогов.'")); + + УправлениеАгрегатом(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ВключитьИспользованиеАгрегатов(Команда) + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Включение использования агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Включение использования агрегатов завершено'")); + ПараметрыИтогов.Вставить("Действие", "УстановитьИспользованиеАгрегатов"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "ИспользованиеАгрегатов"); + ПараметрыИтогов.Вставить("Значение1", Истина); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка включения использования агрегатов.'")); + + УправлениеАгрегатом(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыключитьИспользованиеАгрегатов(Команда) + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Выключение использования агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Выключение использования агрегатов завершено'")); + ПараметрыИтогов.Вставить("Действие", "УстановитьИспользованиеАгрегатов"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "ИспользованиеАгрегатов"); + ПараметрыИтогов.Вставить("Значение1", Ложь); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка выключения использования агрегатов.'")); + + УправлениеАгрегатом(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерестроитьАгрегаты(Команда) + + Результат = ПолучитьПараметрыПерестроения(Истина); + + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Перестроение агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Перестроение агрегатов завершено'")); + ПараметрыИтогов.Вставить("Действие", "ПерестроитьАгрегаты"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "Наименование"); + ПараметрыИтогов.Вставить("Значение1", Результат.ОтносительныйРазмер); + ПараметрыИтогов.Вставить("Значение2", Результат.МинимальныйЭффект); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка перестроения агрегатов.'")); + + УправлениеАгрегатом(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ОчиститьАгрегатыПоРегистрам(Команда) + + ТекстВопроса = НСтр("ru='Очистка агрегатов приведет к существенному замедлению отчетов. + |Выполнить очистку?'"); + + Результат = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + + Если Результат = КодВозвратаДиалога.Нет Тогда + Возврат; + КонецЕсли; + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Очистка агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Очистка агрегатов завершена'")); + ПараметрыИтогов.Вставить("Действие", "ОчиститьАгрегаты"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "Наименование"); + ПараметрыИтогов.Вставить("Значение1", Неопределено); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка очистки агрегатов.'")); + + УправлениеАгрегатом(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьАгрегатыПоРегистрам(Команда) + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Заполнение агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Заполнение агрегатов завершено'")); + ПараметрыИтогов.Вставить("Действие", "ЗаполнитьАгрегаты"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "Наименование"); + ПараметрыИтогов.Вставить("Значение1", Неопределено); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка заполнения агрегатов.'")); + + УправлениеАгрегатом(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура АгрегатыОптимальные(Команда) + + Результат = ПолучитьПараметрыПерестроения(Ложь); + + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + ПутьКОптимальнымАгрегатам = ВыборПутиККаталогу(ПутьКОптимальнымАгрегатам); + + Если ПустаяСтрока(ПутьКОптимальнымАгрегатам) Тогда + Возврат; + КонецЕсли; + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Получение списка оптимальных агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Получение списка оптимальных агрегатов завершено'")); + ПараметрыИтогов.Вставить("Действие", "ПолучитьОптимальныеАгрегаты"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "Наименование"); + ПараметрыИтогов.Вставить("Значение1", Результат.ОтносительныйРазмер); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка получения списка оптимальных агрегатов.'")); + + УправлениеАгрегатом(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПериодРасчитанныхИтогов(Команда) + + Результат = Истина; + ОчиститьСообщения(); + + МассивДействий = СписокИтогов.НайтиСтроки(Новый Структура("ОборотныйРег", Истина)); + + Если МассивДействий.Количество() = 0 Тогда + Предупреждение(НСтр("ru='Отсутствуют регистры, для которых можно выполнить данную операцию.'")); + Возврат; + КонецЕсли; + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Установка периода рассчитанных итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Установка периода рассчитанных итогов завершена'")); + ПараметрыИтогов.Вставить("Действие", "УстановитьПериодИтогов"); + ПараметрыИтогов.Вставить("МассивСтрок", МассивДействий); + ПараметрыИтогов.Вставить("Поле", "ПериодИтогов"); + ПараметрыИтогов.Вставить("Значение1", ОкончаниеПериода(ДобавитьМесяц(РассчитатьИтогиНа, -1)) ); + ПараметрыИтогов.Вставить("Значение2", ОкончаниеПериода(РассчитатьИтогиНа) ); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка установки периода рассчитанных итогов.'")); + ПараметрыИтогов.Вставить("ГрупповаяОбработка", Истина); + + УправлениеИтогами(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ВключитьИспользованиеИтоговБыстрыйДоступ(Команда) + + Результат = Истина; + ОчиститьСообщения(); + + МассивДействий = СписокИтогов.НайтиСтроки(Новый Структура("ИспользоватьИтоги", Ложь)); + + Если МассивДействий.Количество() = 0 Тогда + Предупреждение(НСтр("ru='Отсутствуют регистры, для которых можно выполнить данную операцию.'")); + Возврат; + КонецЕсли; + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Включение использования итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Включение использования итогов завершено'")); + ПараметрыИтогов.Вставить("Действие", "УстановитьИспользованиеИтогов"); + ПараметрыИтогов.Вставить("МассивСтрок", МассивДействий); + ПараметрыИтогов.Вставить("Поле", ""); + ПараметрыИтогов.Вставить("Значение1", Истина); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка включения использования итогов.'")); + ПараметрыИтогов.Вставить("ГрупповаяОбработка", Истина); + + УправлениеИтогами(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьАгрегатыИВыполнитьПерестроение(Команда) + + ОчиститьСообщения(); + + МассивДействий = АгрегатыПоРегистрам.НайтиСтроки(Новый Структура("РежимАгрегатов,ИспользованиеАгрегатов", Истина, Истина)); + + Если МассивДействий.Количество() = 0 Тогда + Предупреждение(НСтр("ru='Отсутствуют регистры, для которых можно выполнить выбранное действие.'")); + Возврат; + КонецЕсли; + + ШагПроцесса = 100/МассивДействий.Количество(); + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Перестроение агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Перестроение агрегатов завершено'")); + ПараметрыИтогов.Вставить("Действие", "ПерестроитьАгрегаты"); + ПараметрыИтогов.Вставить("МассивСтрок", МассивДействий); + ПараметрыИтогов.Вставить("Поле", ""); + ПараметрыИтогов.Вставить("Значение1", 0); + ПараметрыИтогов.Вставить("Значение2", 0); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка перестроения агрегатов.'")); + ПараметрыИтогов.Вставить("ГрупповаяОбработка", Истина); + + УправлениеАгрегатом(ПараметрыИтогов); + + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Заполнение агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Заполнение агрегатов завершено'")); + ПараметрыИтогов.Вставить("Действие", "ЗаполнитьАгрегаты"); + ПараметрыИтогов.Вставить("МассивСтрок", МассивДействий); + ПараметрыИтогов.Вставить("Поле", ""); + ПараметрыИтогов.Вставить("Значение1", Неопределено); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка заполнения агрегатов.'")); + + УправлениеАгрегатом(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьОптимальныеАгрегаты(Команда) + + Если АгрегатыПоРегистрам.Количество() = 0 Тогда + Предупреждение(НСтр("ru='Отсутствуют регистры, для которых можно выполнить данную операцию.'")); + Возврат; + КонецЕсли; + + ПутьКОптимальнымАгрегатам = ВыборПутиККаталогу(ПутьКОптимальнымАгрегатам); + Если ПустаяСтрока(ПутьКОптимальнымАгрегатам) Тогда + + Возврат; + КонецЕсли; + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Получение списка оптимальных агрегатов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Получение списка оптимальных агрегатов завершено'")); + ПараметрыИтогов.Вставить("Действие", "ПолучитьОптимальныеАгрегаты"); + ПараметрыИтогов.Вставить("МассивСтрок", АгрегатыПоРегистрам); + ПараметрыИтогов.Вставить("Поле", ""); + ПараметрыИтогов.Вставить("Значение1", 0); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка получения списка оптимальных агрегатов.'")); + ПараметрыИтогов.Вставить("ГрупповаяОбработка", Истина); + + УправлениеАгрегатом(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ПересчитатьИтоги(Команда) + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Пересчет итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Пересчет итогов завершен'")); + ПараметрыИтогов.Вставить("Действие", "ПересчитатьИтоги"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "Наименование"); + ПараметрыИтогов.Вставить("Значение1", Ложь); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка пересчета итогов.'")); + + УправлениеИтогами(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ПересчитатьТекущиеИтоги(Команда) + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Пересчет текущих итогов ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Пересчет текущих итогов завершен'")); + ПараметрыИтогов.Вставить("Действие", "ПересчитатьТекущиеИтоги"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "Наименование"); + ПараметрыИтогов.Вставить("Значение1", Ложь); + ПараметрыИтогов.Вставить("Значение2", Неопределено); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка пересчета текущих итогов.'")); + + УправлениеИтогами(ПараметрыИтогов); + +КонецПроцедуры + +&НаКлиенте +Процедура ПересчитатьИтогиЗаПериод(Команда) + + Диалог = Новый ДиалогРедактированияСтандартногоПериода; + Диалог.Период = ПериодПерерасчетаРегистров; + Если Диалог.Редактировать() Тогда + + ПериодПерерасчетаРегистров = Диалог.Период; + + ПараметрыИтогов = Новый Структура; + ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru='Пересчет итогов за период ...'")); + ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru='Пересчет итогов за период завершен'")); + ПараметрыИтогов.Вставить("Действие", "ПересчитатьИтогиЗаПериод"); + ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки); + ПараметрыИтогов.Вставить("Поле", "Наименование"); + ПараметрыИтогов.Вставить("Значение1", ПериодПерерасчетаРегистров.ДатаНачала); + ПараметрыИтогов.Вставить("Значение2", ПериодПерерасчетаРегистров.ДатаОкончания); + ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru='Ошибка пересчета итогов за период.'")); + + УправлениеИтогами(ПараметрыИтогов); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервере Процедура ПрочитатьИнформациюПоРегистрам() @@ -34,15 +629,15 @@ Продолжить; КонецЕсли; - Представление = Регистр.Представление() + НСтр("ru=' (регистр бухгалтерии)'"); + Представление = Регистр.Представление() + НСтр("ru = ' (Регистр Бухгалтерии)'"); Картинка = БиблиотекаКартинок.РегистрБухгалтерии; СтрокаТаблицы = СписокИтогов.Добавить(); - СтрокаТаблицы.Тип = 1; - СтрокаТаблицы.ИмяМетаданного = Регистр.Имя; - СтрокаТаблицы.Картинка = Картинка; - СтрокаТаблицы.ОборотныйРег = Истина; - СтрокаТаблицы.Наименование = Представление; + СтрокаТаблицы.Тип = 1; + СтрокаТаблицы.ИмяМетаданного = Регистр.Имя; + СтрокаТаблицы.Картинка = Картинка; + СтрокаТаблицы.ОборотныйРег = Истина; + СтрокаТаблицы.Наименование = Представление; СтрокаТаблицы.РазрешитьРазделениеИтогов = Регистр.РазрешитьРазделениеИтогов ; КонецЦикла; @@ -53,10 +648,10 @@ Оборотный = Истина; Если Регистр.ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Обороты Тогда Оборотный = Ложь; - Постфикс = НСтр("ru=' (оборотный регистр накопления)'"); + Постфикс = НСтр("ru = ' (Оборотный Регистр Накопления)'"); Иначе Оборотный = Истина; - Постфикс = НСтр("ru=' (регистр накопления)'"); + Постфикс = НСтр("ru = ' (Регистр Накопления)'"); КонецЕсли; Если НЕ ПравоДоступа("УправлениеИтогами", Регистр) Тогда @@ -67,11 +662,11 @@ Картинка = БиблиотекаКартинок.РегистрНакопления; СтрокаТаблицы = СписокИтогов.Добавить(); - СтрокаТаблицы.Тип = 0; - СтрокаТаблицы.ИмяМетаданного = Регистр.Имя; - СтрокаТаблицы.Картинка = Картинка; - СтрокаТаблицы.ОборотныйРег = Оборотный; - СтрокаТаблицы.Наименование = Представление; + СтрокаТаблицы.Тип = 0; + СтрокаТаблицы.ИмяМетаданного = Регистр.Имя; + СтрокаТаблицы.Картинка = Картинка; + СтрокаТаблицы.ОборотныйРег = Оборотный; + СтрокаТаблицы.Наименование = Представление; СтрокаТаблицы.РазрешитьРазделениеИтогов = Регистр.РазрешитьРазделениеИтогов ; КонецЦикла; @@ -96,9 +691,9 @@ КонецЕсли; СтрокаТаблицы = АгрегатыПоРегистрам.Добавить(); - СтрокаТаблицы.ИмяМетаданного = Регистр.Имя; - СтрокаТаблицы.Картинка = Картинка; - СтрокаТаблицы.Наименование = Представление; + СтрокаТаблицы.ИмяМетаданного = Регистр.Имя; + СтрокаТаблицы.Картинка = Картинка; + СтрокаТаблицы.Наименование = Представление; СтрокаТаблицы.ПостроениеОптимально = Истина; КонецЦикла; @@ -106,31 +701,34 @@ СписокИтогов.Сортировать("Наименование Возр"); АгрегатыПоРегистрам.Сортировать("Наименование Возр"); -КонецПроцедуры // ПрочитатьИнформациюПоРегистрам +КонецПроцедуры &НаСервере Процедура ОбновитьСписокИтоговНаСервере() - Менеджер = Новый Массив; - Менеджер.Добавить(РегистрыНакопления); - Менеджер.Добавить(РегистрыБухгалтерии); + Менеджеры = Новый Массив; + Менеджеры.Добавить(РегистрыНакопления); + Менеджеры.Добавить(РегистрыБухгалтерии); Для Каждого СтрокаТаблицы Из СписокИтогов Цикл - Регистр = Менеджер[СтрокаТаблицы.Тип][СтрокаТаблицы.ИмяМетаданного]; + Регистр = Менеджеры[СтрокаТаблицы.Тип][СтрокаТаблицы.ИмяМетаданного]; + СтрокаТаблицы.ИспользоватьИтоги = Регистр.ПолучитьИспользованиеИтогов(); - СтрокаТаблицы.РазделениеИтогов = Регистр.ПолучитьРежимРазделенияИтогов(); + СтрокаТаблицы.РазделениеИтогов = Регистр.ПолучитьРежимРазделенияИтогов(); + Если СтрокаТаблицы.ОборотныйРег Тогда СтрокаТаблицы.ИспользоватьТекущиеИтоги = Регистр.ПолучитьИспользованиеТекущихИтогов(); - СтрокаТаблицы.ПериодИтогов = Регистр.ПолучитьПериодРассчитанныхИтогов(); - СтрокаТаблицы.АгрегатыИтоги = 2; + СтрокаТаблицы.ПериодИтогов = Регистр.ПолучитьПериодРассчитанныхИтогов(); + СтрокаТаблицы.АгрегатыИтоги = 2; Иначе СтрокаТаблицы.ИспользоватьТекущиеИтоги = Ложь; - СтрокаТаблицы.ПериодИтогов = Неопределено; - СтрокаТаблицы.АгрегатыИтоги = Регистр.ПолучитьРежимАгрегатов(); + СтрокаТаблицы.ПериодИтогов = Неопределено; + СтрокаТаблицы.АгрегатыИтоги = Регистр.ПолучитьРежимАгрегатов(); + Если СтрокаТаблицы.АгрегатыИтоги Тогда СтрокаТаблицы.ИспользоватьИтоги = Ложь; КонецЕсли; @@ -139,7 +737,7 @@ КонецЦикла; -КонецПроцедуры // ОбновитьСписокИтоговНаСервере() +КонецПроцедуры &НаСервере Процедура ОбновитьАгрегатыПоРегистрамНаСервере() @@ -148,97 +746,87 @@ Для Каждого СтрокаТаблицы Из АгрегатыПоРегистрам Цикл - Менеджер = РегистрыНакопления[СтрокаТаблицы.ИмяМетаданного]; - МенеджерРегистра = Метаданные.РегистрыНакопления[СтрокаТаблицы.ИмяМетаданного]; + МенеджерРегистра = РегистрыНакопления[СтрокаТаблицы.ИмяМетаданного]; - СтрокаТаблицы.РежимАгрегатов = Менеджер.ПолучитьРежимАгрегатов(); - СтрокаТаблицы.ИспользованиеАгрегатов = Менеджер.ПолучитьИспользованиеАгрегатов(); + СтрокаТаблицы.РежимАгрегатов = МенеджерРегистра.ПолучитьРежимАгрегатов(); + СтрокаТаблицы.ИспользованиеАгрегатов = МенеджерРегистра.ПолучитьИспользованиеАгрегатов(); - Агрегаты = Менеджер.ПолучитьАгрегаты(); - СтрокаТаблицы.ДатаПостроения = Агрегаты.ДатаПостроения; - СтрокаТаблицы.Размер = Агрегаты.Размер; + Агрегаты = МенеджерРегистра.ПолучитьАгрегаты(); + СтрокаТаблицы.ДатаПостроения = Агрегаты.ДатаПостроения; + СтрокаТаблицы.Размер = Агрегаты.Размер; СтрокаТаблицы.ОграничениеРазмера = Агрегаты.ОграничениеРазмера; - СтрокаТаблицы.Эффект = Агрегаты.Эффект; + СтрокаТаблицы.Эффект = Агрегаты.Эффект; Для Каждого Агрегат Из Агрегаты.Агрегаты Цикл СтрокаСпискаАгрРег = СписокАгрегатовРегистра.Добавить(); + СтрокаИзмерений = ""; Для Каждого Измерения Из Агрегат.Измерения Цикл СтрокаИзмерений = СтрокаИзмерений + Измерения + ", "; КонецЦикла; СтрокаИзмерений = Сред(СтрокаИзмерений, 1, СтрДлина(СтрокаИзмерений)-2); + СтрокаСпискаАгрРег.ИмяМетаданного = СтрокаТаблицы.ИмяМетаданного; - СтрокаСпискаАгрРег.Периодичность = Строка(Агрегат.Периодичность); - СтрокаСпискаАгрРег.Измерения = СтрокаИзмерений; - СтрокаСпискаАгрРег.Использование = Агрегат.Использование; - СтрокаСпискаАгрРег.НачалоПериода = Агрегат.НачалоПериода; - СтрокаСпискаАгрРег.КонецПериода = Агрегат.КонецПериода; - СтрокаСпискаАгрРег.Размер = Агрегат.Размер; + СтрокаСпискаАгрРег.Периодичность = Строка(Агрегат.Периодичность); + СтрокаСпискаАгрРег.Измерения = СтрокаИзмерений; + СтрокаСпискаАгрРег.Использование = Агрегат.Использование; + СтрокаСпискаАгрРег.НачалоПериода = Агрегат.НачалоПериода; + СтрокаСпискаАгрРег.КонецПериода = Агрегат.КонецПериода; + СтрокаСпискаАгрРег.Размер = Агрегат.Размер; КонецЦикла; КонецЦикла; СписокАгрегатовРегистра.Сортировать("Использование Убыв"); -КонецПроцедуры // ОбновитьАгрегатыПоРегистрамНаСервере() - -&НаКлиентеНаСервереБезКонтекста -Функция ОкончаниеПериода(Дата) - - Возврат КонецДня(КонецМесяца(Дата)); - -КонецФункции // ОкончаниеПериода() +КонецПроцедуры &НаСервереБезКонтекста -Функция УстановитьПараметрыРегистраНаСервере(ВидРегистра, ИмяРегистра, знач Действие, Значение1, Значение2 = Неопределено, ПолеОшибки, СообщениеОбОшибке) +Функция УстановитьПараметрыРегистраНаСервере(Знач ВидРегистра, + Знач ИмяРегистра, + Знач Действие, + Знач Значение1, + Знач Значение2 = Неопределено, + Знач ПолеОшибки, + Знач СообщениеОбОшибке) Менеджеры = Новый Массив; Менеджеры.Добавить(РегистрыНакопления); Менеджеры.Добавить(РегистрыБухгалтерии); - МенеджерыРегистров = Новый Массив; - МенеджерыРегистров.Добавить(Метаданные.РегистрыНакопления); - МенеджерыРегистров.Добавить(Метаданные.РегистрыБухгалтерии); - Менеджер = Менеджеры[ВидРегистра][ИмяРегистра]; - МенеджерРегистра = МенеджерыРегистров[ВидРегистра][ИмяРегистра]; Действие = НРег(Действие); Попытка - Если Действие = "установитьиспользованиеитогов" Тогда - + Если ВРег(Действие) = ВРег("УстановитьИспользованиеИтогов") Тогда Менеджер.УстановитьИспользованиеИтогов(Значение1); - ИначеЕсли Действие = "использоватьтекущиеитоги" Тогда - + ИначеЕсли ВРег(Действие) = ВРег("ИспользоватьТекущиеИтоги") Тогда Менеджер.УстановитьИспользованиеТекущихИтогов(Значение1); - ИначеЕсли Действие = "установитьразделениеитогов" Тогда - + ИначеЕсли ВРег(Действие) = ВРег("УстановитьРазделениеИтогов") Тогда Менеджер.УстановитьРежимРазделенияИтогов(Значение1); - ИначеЕсли Действие = "установитьпериодитогов" Тогда + ИначеЕсли ВРег(Действие) = ВРег("УстановитьПериодИтогов") Тогда Если ВидРегистра = 0 Тогда Дата = Значение1; + ИначеЕсли ВидРегистра = 1 Тогда Дата = Значение2; КонецЕсли; Менеджер.УстановитьПериодРассчитанныхИтогов(Дата); - ИначеЕсли Действие = "пересчитатьитоги" Тогда - + ИначеЕсли ВРег(Действие) = ВРег("ПересчитатьИтоги") Тогда Менеджер.ПересчитатьИтоги(); - ИначеЕсли Действие = "пересчитатьтекущиеитоги" Тогда - + ИначеЕсли ВРег(Действие) = ВРег("ПересчитатьТекущиеИтоги") Тогда Менеджер.ПересчитатьТекущиеИтоги(); - ИначеЕсли Действие = "пересчитатьитогизапериод" Тогда - + ИначеЕсли ВРег(Действие) = ВРег("ПересчитатьИтогиЗаПериод") Тогда Менеджер.ПересчитатьИтогиЗаПериод(Значение1, Значение2); Иначе @@ -247,8 +835,11 @@ Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СообщениеОбОшибке + Символы.ПС - + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , ПолеОшибки); + СообщениеОбОшибке + + Символы.ПС + + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), + , + ПолеОшибки); Возврат Ложь; КонецПопытки; @@ -257,20 +848,23 @@ КонецФункции &НаСервереБезКонтекста -Функция ИзмеренияАгрегатовРавны(ОптимальныйАгрегат, КонфАгрегат) +Функция ИзмеренияАгрегатовРавны(Знач ОптимальныйАгрегат, Знач КонфАгрегат) Если ОптимальныйАгрегат.Измерения.ВГраница() <> КонфАгрегат.Измерения.ВГраница() Тогда Возврат Ложь; КонецЕсли; - Для Индекс1=0 По ОптимальныйАгрегат.Измерения.ВГраница() Цикл + Для Индекс1 = 0 По ОптимальныйАгрегат.Измерения.ВГраница() Цикл + Найдено = Ложь; - Для Индекс2=0 По КонфАгрегат.Измерения.ВГраница() Цикл + Для Индекс2 = 0 По КонфАгрегат.Измерения.ВГраница() Цикл + Если ОптимальныйАгрегат.Измерения[Индекс1] = КонфАгрегат.Измерения[Индекс2].Имя Тогда Найдено = Истина; Прервать; КонецЕсли; КонецЦикла; + Если НЕ Найдено Тогда Возврат Ложь; КонецЕсли; @@ -281,52 +875,53 @@ КонецФункции &НаСервереБезКонтекста -Функция УстановитьПараметрыАгрегатаНаСервере(ИмяРегистра, знач Действие, ЗначениеДействия1 = Истина, ЗначениеДействия2 = Неопределено, ПолеФормы, СообщениеОбОшибке = "", АдресФайлаВоВременномХранилище = "") +Функция УстановитьПараметрыАгрегатаНаСервере(Знач ИмяРегистра, + Знач Действие, + ЗначениеДействия1 = Истина, + Знач ЗначениеДействия2 = Неопределено, + Знач ПолеФормы, + Знач СообщениеОбОшибке = "", + АдресФайлаВоВременномХранилище = "") - Менеджер = РегистрыНакопления[ИмяРегистра]; - МенеджерРегистра = Метаданные.РегистрыНакопления[ИмяРегистра]; + МенеджерРегистра = РегистрыНакопления[ИмяРегистра]; + МетаданныеРегистра = Метаданные.РегистрыНакопления[ИмяРегистра]; Действие = НРег(Действие); ОК = Истина; + Попытка - Если Действие = "установитьрежимагрегатов" Тогда + Если ВРег(Действие) = ВРег("УстановитьРежимАгрегатов") Тогда + МенеджерРегистра.УстановитьРежимАгрегатов(ЗначениеДействия1); - Менеджер.УстановитьРежимАгрегатов(ЗначениеДействия1); + ИначеЕсли ВРег(Действие) = ВРег("УстановитьИспользованиеАгрегатов") Тогда + МенеджерРегистра.УстановитьИспользованиеАгрегатов(ЗначениеДействия1); - ИначеЕсли Действие = "установитьиспользованиеагрегатов" Тогда + ИначеЕсли ВРег(Действие) = ВРег("ЗаполнитьАгрегаты") Тогда + МенеджерРегистра.ОбновитьАгрегаты(Ложь); - Менеджер.УстановитьИспользованиеАгрегатов(ЗначениеДействия1); + ИначеЕсли ВРег(Действие) = ВРег("ПерестроитьАгрегаты") Тогда + МенеджерРегистра.ПерестроитьИспользованиеАгрегатов(ЗначениеДействия1, ЗначениеДействия2); - ИначеЕсли Действие = "заполнитьагрегаты" Тогда + ИначеЕсли ВРег(Действие) = ВРег("ОчиститьАгрегаты") Тогда + МенеджерРегистра.ОчиститьАгрегаты(); - Менеджер.ОбновитьАгрегаты(Ложь); - - ИначеЕсли Действие = "перестроитьагрегаты" Тогда - - Менеджер.ПерестроитьИспользованиеАгрегатов(ЗначениеДействия1, ЗначениеДействия2); - - ИначеЕсли Действие = "очиститьагрегаты" Тогда - - Менеджер.ОчиститьАгрегаты(); - - ИначеЕсли Действие = "получитьоптимальныеагрегаты" Тогда - - ОптимальныеАгрегаты = Менеджер.ОпределитьОптимальныеАгрегаты(ЗначениеДействия1); + ИначеЕсли ВРег(Действие) = ВРег("ПолучитьОптимальныеАгрегаты") Тогда + ОптимальныеАгрегаты = МенеджерРегистра.ОпределитьОптимальныеАгрегаты(ЗначениеДействия1); ЗначениеДействия1 = Ложь; - НайденыеАгрегаты = Новый Соответствие; - - МетаданныеАгрегаты = МенеджерРегистра.Агрегаты; + МетаданныеАгрегаты = МетаданныеРегистра.Агрегаты; Для Индекс1=0 По ОптимальныеАгрегаты.Агрегаты.ВГраница() Цикл ЗначениеДействия1 = Ложь; Для Индекс2=0 По МетаданныеАгрегаты.Количество() - 1 Цикл - Если ОптимальныеАгрегаты.Агрегаты[Индекс1].Периодичность = МетаданныеАгрегаты[Индекс2].Периодичность И - НайденыеАгрегаты[Индекс2] = Неопределено И - ИзмеренияАгрегатовРавны(ОптимальныеАгрегаты.Агрегаты[Индекс1], МетаданныеАгрегаты[Индекс2]) Тогда + Если ОптимальныеАгрегаты.Агрегаты[Индекс1].Периодичность + = МетаданныеАгрегаты[Индекс2].Периодичность + И НайденыеАгрегаты[Индекс2] = Неопределено + И ИзмеренияАгрегатовРавны(ОптимальныеАгрегаты.Агрегаты[Индекс1], + МетаданныеАгрегаты[Индекс2]) Тогда НайденыеАгрегаты.Вставить(Индекс2, Истина); ЗначениеДействия1 = Истина; @@ -340,9 +935,12 @@ КонецЕсли; Для Индекс2=0 По МетаданныеАгрегаты.Количество() - 1 Цикл - Если ОптимальныеАгрегаты.Агрегаты[Индекс1].Периодичность = ПериодичностьАгрегатаРегистраНакопления.Авто И - НайденыеАгрегаты[Индекс2] = Неопределено И - ИзмеренияАгрегатовРавны(ОптимальныеАгрегаты.Агрегаты[Индекс1], МетаданныеАгрегаты[Индекс2]) Тогда + + Если ОптимальныеАгрегаты.Агрегаты[Индекс1].Периодичность + = ПериодичностьАгрегатаРегистраНакопления.Авто + И НайденыеАгрегаты[Индекс2] = Неопределено + И ИзмеренияАгрегатовРавны(ОптимальныеАгрегаты.Агрегаты[Индекс1], + МетаданныеАгрегаты[Индекс2]) Тогда НайденыеАгрегаты.Вставить(Индекс2, Истина); ЗначениеДействия1 = Истина; @@ -355,7 +953,7 @@ Прервать; КонецЕсли; КонецЦикла; - + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); ЗаписьXML = Новый ЗаписьXML(); @@ -363,14 +961,15 @@ ЗаписьXML.ЗаписатьОбъявлениеXML(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ОптимальныеАгрегаты); ЗаписьXML.Закрыть(); + АдресФайлаВоВременномХранилище = ПоместитьВоВременноеХранилище( - Новый ДвоичныеДанные(ИмяВременногоФайла)); + Новый ДвоичныеДанные(ИмяВременногоФайла)); + УдалитьФайлы(ИмяВременногоФайла); - Иначе - - ВызватьИсключение "Неправильное имя параметра: " + Действие; - + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неправильное имя параметра: %1'"), + Действие); КонецЕсли; Исключение @@ -381,7 +980,21 @@ Возврат ОК; -КонецФункции // УстановитьПараметрыАгрегатаНаСервере() +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ОкончаниеПериода(Знач Дата) + + Возврат КонецДня(КонецМесяца(Дата)); + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция Префикс() + + Возврат НСтр("ru = 'Агрегаты регистра'"); + +КонецФункции &НаКлиенте Процедура УстановитьФильтрСпискаАгрегатов() @@ -402,52 +1015,76 @@ Элементы.СписокАгрегатов.Заголовок = НовыйЗаголовок; КонецЕсли; -КонецПроцедуры // УстановитьФильтрСпискаАгрегатов() +КонецПроцедуры &НаКлиенте -Процедура УправлениеАгрегатом(ПараметрыСтруктуры) +Процедура УправлениеАгрегатом(Знач ПараметрыИтогов) Результат = Истина; ОчиститьСообщения(); - Выбранные = ПараметрыСтруктуры.МассивСтрок; + Выбранные = ПараметрыИтогов.МассивСтрок; Если Выбранные.Количество() = 0 Тогда Возврат; КонецЕсли; ШагПроцесса = 100/Выбранные.Количество(); - Действие = НРег(ПараметрыСтруктуры.Действие); + Действие = НРег(ПараметрыИтогов.Действие); - Если ПараметрыСтруктуры.Свойство("ГрупповаяОбработка") Тогда - ТребуетсяПрерватьПослеОшибки = ?(ПараметрыСтруктуры.ГрупповаяОбработка, Ложь, ПрерыватьПриОшибке); + Если ПараметрыИтогов.Свойство("ГрупповаяОбработка") Тогда + ТребуетсяПрерватьПослеОшибки = ?(ПараметрыИтогов.ГрупповаяОбработка, Ложь, ПрерыватьПриОшибке); Иначе ТребуетсяПрерватьПослеОшибки = ПрерыватьПриОшибке; КонецЕсли; - Для Счетчик=1 По Выбранные.Количество() Цикл + Для Счетчик = 1 По Выбранные.Количество() Цикл - Если ТипЗнч(Выбранные[Счетчик-1]) = Тип("Число") Тогда + Если ТипЗнч(Выбранные[Счетчик - 1]) = Тип("Число") Тогда ВыбраннаяСтрока = АгрегатыПоРегистрам.НайтиПоИдентификатору(Выбранные[Счетчик-1]); Иначе ВыбраннаяСтрока = Выбранные[Счетчик-1]; КонецЕсли; - ПолеСообщенияОбОшибке = ?(ПустаяСтрока(ПараметрыСтруктуры.Поле), "", "АгрегатыПоРегистрам[" + Выбранные[Счетчик-1] + "]."+ПараметрыСтруктуры.Поле); + ПолеСообщенияОбОшибке = ?( + ПустаяСтрока(ПараметрыИтогов.Поле), + "", + "АгрегатыПоРегистрам[" + Выбранные[Счетчик-1] + "]."+ПараметрыИтогов.Поле); - Если НЕ ВыбраннаяСтрока.РежимАгрегатов И НЕ (Действие = "установитьрежимагрегатов" ИЛИ Действие = "получитьоптимальныеагрегаты") Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Операция невозможна в режиме итогов'"), , ПолеСообщенияОбОшибке); + Если НЕ ВыбраннаяСтрока.РежимАгрегатов + И НЕ ( ВРег(Действие) = ВРег("УстановитьРежимАгрегатов") + ИЛИ ВРег(Действие) = ВРег("ПолучитьОптимальныеАгрегаты") ) Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Операция невозможна в режиме итогов'"), + , + ПолеСообщенияОбОшибке); Продолжить; КонецЕсли; - Состояние(ПараметрыСтруктуры.ОбрабатыватьЗаголовок, Счетчик*ШагПроцесса, ВыбраннаяСтрока.Наименование); + Состояние(ПараметрыИтогов.ОбрабатыватьЗаголовок, + Счетчик * ШагПроцесса, + ВыбраннаяСтрока.Наименование); АдресФайлаВоВременномХранилище = ""; - Значение1 = ПараметрыСтруктуры.Значение1; - Значение2 = ПараметрыСтруктуры.Значение2; - Результат = УстановитьПараметрыАгрегатаНаСервере(ВыбраннаяСтрока.ИмяМетаданного, ПараметрыСтруктуры.Действие, Значение1, Значение2, ПолеСообщенияОбОшибке, ПараметрыСтруктуры.ТекстСообщенияОбОшибке, АдресФайлаВоВременномХранилище); + Значение1 = ПараметрыИтогов.Значение1; + Значение2 = ПараметрыИтогов.Значение2; - Если Результат И Действие = "получитьоптимальныеагрегаты" Тогда - СохранитьОптимальныеНастройкиАгрегатов(ВыбраннаяСтрока.ИмяМетаданного, АдресФайлаВоВременномХранилище, "АгрегатыПоРегистрам[" + Выбранные[Счетчик-1] + "]."+ПараметрыСтруктуры.Поле); + Результат = УстановитьПараметрыАгрегатаНаСервере( + ВыбраннаяСтрока.ИмяМетаданного, + ПараметрыИтогов.Действие, + Значение1, + Значение2, + ПолеСообщенияОбОшибке, + ПараметрыИтогов.ТекстСообщенияОбОшибке, + АдресФайлаВоВременномХранилище); + + Если Результат И ВРег(Действие) = ВРег("ПолучитьОптимальныеАгрегаты") Тогда + + СохранитьОптимальныеНастройкиАгрегатов( + ВыбраннаяСтрока.ИмяМетаданного, + АдресФайлаВоВременномХранилище, + "АгрегатыПоРегистрам[" + Выбранные[Счетчик - 1] + "]." + ПараметрыИтогов.Поле); + ВыбраннаяСтрока.ПостроениеОптимально = Значение1; КонецЕсли; @@ -459,33 +1096,35 @@ КонецЦикла; - Если Действие = "установитьрежимагрегатов" ИЛИ Действие = "установитьиспользованиеагрегатов" Тогда + Если ВРег(Действие) = ВРег("УстановитьРежимАгрегатов") + ИЛИ ВРег(Действие) = ВРег("УстановитьИспользованиеАгрегатов") Тогда + ОбновитьСписокИтоговНаСервере(); КонецЕсли; ОбновитьАгрегатыПоРегистрамНаСервере(); - Состояние(ПараметрыСтруктуры.ПослеПроцесса); + Состояние(ПараметрыИтогов.ПослеПроцесса); УстановитьФильтрСпискаАгрегатов(); -КонецПроцедуры // УправлениеАгрегатом() +КонецПроцедуры &НаКлиенте -Процедура УправлениеИтогами(ПараметрыСтруктуры) +Процедура УправлениеИтогами(Знач ПараметрыИтогов) Результат = Истина; ОчиститьСообщения(); - Выбранные = ПараметрыСтруктуры.МассивСтрок; + Выбранные = ПараметрыИтогов.МассивСтрок; Если Выбранные.Количество() = 0 Тогда Возврат; КонецЕсли; ШагПроцесса = 100/Выбранные.Количество(); - Действие = НРег(ПараметрыСтруктуры.Действие); + Действие = НРег(ПараметрыИтогов.Действие); - Если ПараметрыСтруктуры.Свойство("ГрупповаяОбработка") Тогда - ТребуетсяПрерватьПослеОшибки = ?(ПараметрыСтруктуры.ГрупповаяОбработка, Ложь, ПрерыватьПриОшибке); + Если ПараметрыИтогов.Свойство("ГрупповаяОбработка") Тогда + ТребуетсяПрерватьПослеОшибки = ?(ПараметрыИтогов.ГрупповаяОбработка, Ложь, ПрерыватьПриОшибке); Иначе ТребуетсяПрерватьПослеОшибки = ПрерыватьПриОшибке; КонецЕсли; @@ -495,95 +1134,88 @@ Если ТипЗнч(Выбранные[Счетчик-1]) = Тип("Число") Тогда ВыбраннаяСтрока = СписокИтогов.НайтиПоИдентификатору(Выбранные[Счетчик-1]); - Иначе - ВыбраннаяСтрока = Выбранные[Счетчик-1]; - КонецЕсли; - Состояние(ПараметрыСтруктуры.ОбрабатыватьЗаголовок, Счетчик*ШагПроцесса, ВыбраннаяСтрока.Наименование); - Если Действие = "установитьиспользованиеитогов" Тогда - + Состояние(ПараметрыИтогов.ОбрабатыватьЗаголовок, + Счетчик * ШагПроцесса, + ВыбраннаяСтрока.Наименование); + + Если ВРег(Действие) = ВРег("УстановитьИспользованиеИтогов") Тогда Если ВыбраннаяСтрока.АгрегатыИтоги = 1 Тогда - Продолжить; - КонецЕсли; - ИначеЕсли Действие = "использоватьтекущиеитоги" Тогда + ИначеЕсли ВРег(Действие) = ВРег("ИспользоватьТекущиеИтоги") Тогда Если ВыбраннаяСтрока.АгрегатыИтоги = 1 ИЛИ НЕ ВыбраннаяСтрока.ОборотныйРег Тогда - Продолжить; - КонецЕсли; - ИначеЕсли Действие = "установитьпериодитогов" Тогда + ИначеЕсли ВРег(Действие) = ВРег("УстановитьПериодИтогов") Тогда Если ВыбраннаяСтрока.АгрегатыИтоги = 1 ИЛИ НЕ ВыбраннаяСтрока.ОборотныйРег Тогда - Продолжить; - КонецЕсли; - ИначеЕсли Действие = "установитьразделениеитогов" Тогда + ИначеЕсли ВРег(Действие) = ВРег("УстановитьРазделениеИтогов") Тогда Если НЕ ВыбраннаяСтрока.РазрешитьРазделениеИтогов Тогда - Продолжить; - КонецЕсли; - ИначеЕсли Действие = "пересчитатьитоги" Тогда + ИначеЕсли ВРег(Действие) = ВРег("ПересчитатьИтоги") Тогда Если ВыбраннаяСтрока.АгрегатыИтоги Тогда - Продолжить; - КонецЕсли; - ИначеЕсли Действие = "пересчитатьитогизапериод" Тогда + ИначеЕсли ВРег(Действие) = ВРег("ПересчитатьИтогиЗаПериод") Тогда Если ВыбраннаяСтрока.АгрегатыИтоги = 1 ИЛИ НЕ ВыбраннаяСтрока.ОборотныйРег Тогда - Продолжить; - КонецЕсли; - ИначеЕсли Действие = "пересчитатьтекущиеитоги" Тогда + ИначеЕсли ВРег(Действие) = ВРег("ПересчитатьТекущиеИтоги") Тогда Если НЕ ВыбраннаяСтрока.ОборотныйРег Тогда - Продолжить; - КонецЕсли; КонецЕсли; - Результат = УстановитьПараметрыРегистраНаСервере(ВыбраннаяСтрока.Тип, ВыбраннаяСтрока.ИмяМетаданного, ПараметрыСтруктуры.Действие, ПараметрыСтруктуры.Значение1, ПараметрыСтруктуры.Значение2, ?(ПустаяСтрока(ПараметрыСтруктуры.Поле), "", "СписокИтогов[" + Выбранные[Счетчик-1] + "]." + ПараметрыСтруктуры.Поле), ПараметрыСтруктуры.ТекстСообщенияОбОшибке); + Результат = УстановитьПараметрыРегистраНаСервере( + ВыбраннаяСтрока.Тип, + ВыбраннаяСтрока.ИмяМетаданного, + ПараметрыИтогов.Действие, + ПараметрыИтогов.Значение1, + ПараметрыИтогов.Значение2, + ?(ПустаяСтрока(ПараметрыИтогов.Поле), + "", + "СписокИтогов[" + Выбранные[Счетчик - 1] + "]." + ПараметрыИтогов.Поле), + ПараметрыИтогов.ТекстСообщенияОбОшибке); ОбработкаПрерыванияПользователя(); + Если НЕ Результат И ТребуетсяПрерватьПослеОшибки Тогда - Прервать; - КонецЕсли; КонецЦикла; ОбновитьСписокИтоговНаСервере(); - Состояние(ПараметрыСтруктуры.ПослеПроцесса); + Состояние(ПараметрыИтогов.ПослеПроцесса); КонецПроцедуры &НаКлиенте -Функция ПолучитьПараметрыПерестроения(РежимПерестроения) +Функция ПолучитьПараметрыПерестроения(Знач РежимПерестроения) - ПараметрыСтруктуры = Новый Структура; - ПараметрыСтруктуры.Вставить("ОтносительныйРазмер", ?(РежимПерестроения, ОтносительныйРазмер, ОптимальныйОтносительныйРазмер)); - ПараметрыСтруктуры.Вставить("МинимальныйЭффект", ?(РежимПерестроения, МинимальныйЭффект, 0)); - ПараметрыСтруктуры.Вставить("РежимПерестроения", РежимПерестроения); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ОтносительныйРазмер", ?(РежимПерестроения, ОтносительныйРазмер, ОптимальныйОтносительныйРазмер)); + ПараметрыФормы.Вставить("МинимальныйЭффект", ?(РежимПерестроения, МинимальныйЭффект, 0)); + ПараметрыФормы.Вставить("РежимПерестроения", РежимПерестроения); - Результат = ОткрытьФормуМодально("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаПараметровПерестроения", ПараметрыСтруктуры); + Результат = ОткрытьФормуМодально("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаПараметровПерестроения", ПараметрыФормы); Если ТипЗнч(Результат) = Тип("Структура") Тогда Если РежимПерестроения Тогда - ОтносительныйРазмер = Результат.ОтносительныйРазмер; - МинимальныйЭффект = Результат.МинимальныйЭффект; + ОтносительныйРазмер = Результат.ОтносительныйРазмер; + МинимальныйЭффект = Результат.МинимальныйЭффект; Иначе ОптимальныйОтносительныйРазмер = Результат.ОтносительныйРазмер; КонецЕсли; @@ -593,13 +1225,17 @@ Возврат Результат; КонецЕсли; -КонецФункции // ПолучитьПараметрыПерестроения() +КонецФункции &НаКлиенте -Функция СохранитьОптимальныеНастройкиАгрегатов(ИмяМетаданного, АдресФайлаВоВременномХранилище, Поле) +Функция СохранитьОптимальныеНастройкиАгрегатов(Знач ИмяМетаданного, Знач АдресФайлаВоВременномХранилище, Знач Поле) Попытка - ПолноеИмяФайла = ?(ПутьКОптимальнымАгрегатам = "web", "", ПутьКОптимальнымАгрегатам + "\") + ИмяМетаданного + ".xml"; + Если ПутьКОптимальнымАгрегатам = "web" Тогда + ПолноеИмяФайла = ИмяМетаданного + ".xml"; + Иначе + ПолноеИмяФайла = ПутьКОптимальнымАгрегатам + "\" + ИмяМетаданного + ".xml"; + КонецЕсли; #Если ВебКлиент Тогда ПолучитьФайл(АдресФайлаВоВременномХранилище, ПолноеИмяФайла, Истина); #Иначе @@ -609,43 +1245,50 @@ Возврат Истина; Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru='Ошибка записи файла оптимальных агрегатов'") - + Символы.ПС - + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - УдалитьИзВременногоХранилища(АдресФайлаВоВременномХранилище); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Ошибка записи файла оптимальных агрегатов: + |""%1"".'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке) )); + + УдалитьИзВременногоХранилища(АдресФайлаВоВременномХранилище); Возврат Ложь; КонецПопытки; КонецФункции -&НаКлиенте +&НаСервере Процедура УстановитьРасширенныйРежим() - Элементы.Операции.ТекущаяСтраница = ?(ПолныеВозможности, Элементы.РасширенныеВозможности, Элементы.БыстрыйДоступ); + Если ПолныеВозможности Тогда + Заголовок = НСтр("ru = 'Управление итогами - полные возможности'"); + ТекстГиперСсылки = НСтр("ru = 'Часто используемые возможности'"); + Элементы.Операции.ТекущаяСтраница = Элементы.РасширенныеВозможности; + Элементы.БыстрыйДоступ.Видимость = Ложь; + Элементы.РасширенныеВозможности.Видимость = Истина; + Иначе + Заголовок = НСтр("ru = 'Управление итогами - часто используемые возможности'"); + ТекстГиперСсылки = НСтр("ru = 'Полные возможности'"); + Элементы.Операции.ТекущаяСтраница = Элементы.БыстрыйДоступ; + Элементы.БыстрыйДоступ.Видимость = Истина; + Элементы.РасширенныеВозможности.Видимость = Ложь; + КонецЕсли; - Элементы.БыстрыйДоступ.Видимость = НЕ ПолныеВозможности; - Элементы.РасширенныеВозможности.Видимость = ПолныеВозможности; - - ТекстРежимаБезПолныхВозможностей = НСтр("ru='Часто используемые возможности'"); - ТекстРежимаСПолнымиВозможностями = НСтр("ru='Полные возможности'"); - - Заголовок = НСтр("ru='Управление итогами'") + " - " + НРег(?(ПолныеВозможности, ТекстРежимаСПолнымиВозможностями, ТекстРежимаБезПолныхВозможностей)); - ТекстГиперСсылки = ?(ПолныеВозможности, ТекстРежимаБезПолныхВозможностей, ТекстРежимаСПолнымиВозможностями); - -КонецПроцедуры // УстановитьРасширенныйРежим() +КонецПроцедуры &НаКлиенте -Функция ВыборПутиККаталогу(ТекущийКаталог) +Функция ВыборПутиККаталогу(Знач ТекущийКаталог) Каталог = ""; Если ПодключитьРасширениеРаботыСФайлами() Тогда + ВыборКаталога = Новый ДиалогВыбораФайла (РежимДиалогаВыбораФайла.ВыборКаталога); ВыборКаталога.Каталог = ТекущийКаталог; - ВыборКаталога.Заголовок = НСтр("ru='Выберите каталог для размещения файлов с оптимальными агрегатами'"); + ВыборКаталога.Заголовок = НСтр("ru = 'Выберите каталог для размещения файлов с оптимальными агрегатами'"); + Если ВыборКаталога.Выбрать() Тогда Каталог = ВыборКаталога.Каталог; КонецЕсли; @@ -655,542 +1298,4 @@ Возврат Каталог; -КонецФункции // ВыборПутиККаталогу() - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - Если СписокИтогов.Количество() = 0 Тогда - Элементы.ГруппаИтогов.Доступность = Ложь; - Элементы.УстановитьПериодРасчитанныхИтогов.Доступность = Ложь; - Элементы.ВключитьИспользованиеИтогов.Доступность = Ложь; - КонецЕсли; - - Если АгрегатыПоРегистрам.Количество() = 0 Тогда - Элементы.ГруппаАгрегаты.Доступность = Ложь; - Элементы.ПерестроитьИЗаполнитьАгрегаты.Доступность = Ложь; - Элементы.ПолучитьОптимальныеАгрегаты.Доступность = Ложь; - КонецЕсли; - - Элементы.Операции.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; - - УстановитьРасширенныйРежим(); - - РассчитатьИтогиНа = ТекущаяДата(); - ОписаниеУстановкиПериода = НСтр("ru='Установить период рассчитанных итогов для всех регистров накопления и бухгалтерии, у которых включены итоги. Для регистров накопления - на %1. Для регистров бухгалтерии - на %2.'"); - ОписаниеУстановкиПериода = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ОписаниеУстановкиПериода, - Формат(ОкончаниеПериода(ДобавитьМесяц(РассчитатьИтогиНа, -1)), "DLF=D"), - Формат(ОкончаниеПериода(РассчитатьИтогиНа), "DLF=D") ); - -КонецПроцедуры - -&НаКлиенте -Процедура СписокИтоговПриАктивизацииСтроки(Элемент) - - Элементы.ГруппаРазделениеИтогов.Доступность = Элементы.СписокИтогов.ТекущиеДанные.РазрешитьРазделениеИтогов; - -КонецПроцедуры - -&НаКлиенте -Процедура СписокИтоговВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ИмяМетаданного = СписокИтогов.НайтиПоИдентификатору(ВыбраннаяСтрока).ИмяМетаданного; - Если Поле.Имя = "ИтогиАгрегатыИтоги" Тогда - - СтандартнаяОбработка = Ложь; - МассивРезультата = АгрегатыПоРегистрам.НайтиСтроки(Новый Структура("ИмяМетаданного", ИмяМетаданного)); - Если МассивРезультата.Количество() > 0 Тогда - - Индекс = АгрегатыПоРегистрам.Индекс(МассивРезультата[0]); - ТекущийЭлемент = Элементы.АгрегатыПоРегистрам; - Элементы.АгрегатыПоРегистрам.ТекущаяСтрока = Индекс; - Элементы.АгрегатыПоРегистрам.ТекущийЭлемент = Элементы.АгрСписокНаименование; - - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ВключитьИспользованиеИтогов() - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Включение использования итогов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Включение использования итогов завершено'"); - ПараметрыСтруктуры.Действие = "УстановитьИспользованиеИтогов"; - ПараметрыСтруктуры.МассивСтрок = Элементы.СписокИтогов.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "ИспользоватьИтоги"; - ПараметрыСтруктуры.Значение1 = Истина; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка включения использования итогов'"); - УправлениеИтогами(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ВключитьИспользованиеТекущихИтогов() - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Включение использования текущих итогов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Включение использования текущих итогов завершено'"); - ПараметрыСтруктуры.Действие = "ИспользоватьТекущиеИтоги"; - ПараметрыСтруктуры.МассивСтрок = Элементы.СписокИтогов.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "ИспользоватьТекущиеИтоги"; - ПараметрыСтруктуры.Значение1 = Истина; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка включения использования текущих итогов'"); - УправлениеИтогами(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыключитьИспользованиеИтогов() - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Выключение использования итогов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Выключение использования итогов завершено'"); - ПараметрыСтруктуры.Действие = "УстановитьИспользованиеИтогов"; - ПараметрыСтруктуры.МассивСтрок = Элементы.СписокИтогов.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "ИспользоватьИтоги"; - ПараметрыСтруктуры.Значение1 = Ложь; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка выключения использования итогов'"); - УправлениеИтогами(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыключитьИспользованиеТекущихИтогов() - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Выключение использования текущих итогов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Выключение использования текущих итогов завершено'"); - ПараметрыСтруктуры.Действие = "ИспользоватьТекущиеИтоги"; - ПараметрыСтруктуры.МассивСтрок = Элементы.СписокИтогов.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "ИспользоватьТекущиеИтоги"; - ПараметрыСтруктуры.Значение1 = Ложь; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка выключения использования текущих итогов'"); - УправлениеИтогами(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбновитьСостояниеИтогов() - - ОбновитьСписокИтоговНаСервере(); - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьПериодИтогов() - - ПараметрыСтруктуры = Новый Структура("РегНакопления, РегБухгалтерии", Ложь, Ложь); - Для Каждого Индекс Из Элементы.СписокИтогов.ВыделенныеСтроки Цикл - ИнформацияПоРегистру = СписокИтогов.НайтиПоИдентификатору(Индекс); - ПараметрыСтруктуры.РегНакопления = ?(ИнформацияПоРегистру.Тип = 0, Истина, ПараметрыСтруктуры.РегНакопления); - ПараметрыСтруктуры.РегБухгалтерии = ?(ИнформацияПоРегистру.Тип = 1, Истина, ПараметрыСтруктуры.РегБухгалтерии); - КонецЦикла; - - Результат = ОткрытьФормуМодально("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаВыбораПериода", ПараметрыСтруктуры); - - Если ТипЗнч(Результат) <> Тип("Структура") Тогда - Возврат; - КонецЕсли; - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Установка периода рассчитанных итогов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Установка периода рассчитанных итогов завершено'"); - ПараметрыСтруктуры.Действие = "УстановитьПериодИтогов"; - ПараметрыСтруктуры.МассивСтрок = Элементы.СписокИтогов.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "ПериодИтогов"; - ПараметрыСтруктуры.Значение1 = Результат.ПериодДляРегНакоп; - ПараметрыСтруктуры.Значение2 = Результат.ПериодДляРегБухг; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка установки периода рассчитанных итогов.'"); - - УправлениеИтогами(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ВключитьРазделениеИтогов() - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Включение разделения итогов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Включение разделения итогов завершено'"); - ПараметрыСтруктуры.Действие = "УстановитьРазделениеИтогов"; - ПараметрыСтруктуры.МассивСтрок = Элементы.СписокИтогов.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "РазделениеИтогов"; - ПараметрыСтруктуры.Значение1 = Истина; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка включения разделения итогов'"); - УправлениеИтогами(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыключитьРазделениеИтогов() - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Выключение разделения итогов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Выключение разделения итогов завершено'"); - ПараметрыСтруктуры.Действие = "УстановитьРазделениеИтогов"; - ПараметрыСтруктуры.МассивСтрок = Элементы.СписокИтогов.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "РазделениеИтогов"; - ПараметрыСтруктуры.Значение1 = Ложь; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка выключения разделения итогов'"); - УправлениеИтогами(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбновитьИнформациюОбАгрегатах() - - ОбновитьАгрегатыПоРегистрамНаСервере(); - УстановитьФильтрСпискаАгрегатов(); - -КонецПроцедуры - -&НаКлиенте -Процедура АгрегатыПоРегистрамПриАктивизацииСтроки(Элемент) - - УстановитьФильтрСпискаАгрегатов(); - - Если Элементы.АгрегатыПоРегистрам.РежимВыделения = РежимВыделенияТаблицы.Одиночный Тогда - ДоступностьЭлементов = Элементы.АгрегатыПоРегистрам.ТекущиеДанные.РежимАгрегатов; - Иначе - ДоступностьЭлементов = Истина; - КонецЕсли; - - Элементы.АгрРегПерестроить.Доступность = ДоступностьЭлементов; - Элементы.АгрРегОчиститьАгрегатыПоРегистрам.Доступность = ДоступностьЭлементов; - Элементы.АгрРегЗаполнитьАгрегатыПоРегистрам.Доступность = ДоступностьЭлементов; - Элементы.АгрРегОптимальные.Доступность = ДоступностьЭлементов; - Элементы.АгрРегОтключитьИспользованиеАгрегатов.Доступность = ДоступностьЭлементов; - Элементы.АгрРегВключитьИспользованиеАгрегатов.Доступность = ДоступностьЭлементов; - -КонецПроцедуры - -&НаКлиенте -Процедура ВключитьРежимАгрегатов() - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Включение режима агрегатов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Включение режима агрегатов завершено'"); - ПараметрыСтруктуры.Действие = "УстановитьРежимАгрегатов"; - ПараметрыСтруктуры.МассивСтрок = Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "РежимАгрегатов"; - ПараметрыСтруктуры.Значение1 = Истина; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка включения режима агрегатов'"); - УправлениеАгрегатом(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ВключитьРежимИтогов() - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Включение режима итогов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Включение режима итогов завершено'"); - ПараметрыСтруктуры.Действие = "УстановитьРежимАгрегатов"; - ПараметрыСтруктуры.МассивСтрок = Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "РежимАгрегатов"; - ПараметрыСтруктуры.Значение1 = Ложь; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка включения режима итогов'"); - УправлениеАгрегатом(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ВключитьИспользованиеАгрегатов() - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Включение использования агрегатов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Включение использования агрегатов завершено'"); - ПараметрыСтруктуры.Действие = "УстановитьИспользованиеАгрегатов"; - ПараметрыСтруктуры.МассивСтрок = Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "ИспользованиеАгрегатов"; - ПараметрыСтруктуры.Значение1 = Истина; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка включения использования агрегатов'"); - УправлениеАгрегатом(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыключитьИспользованиеАгрегатов() - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Выключение использования агрегатов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Выключение использования агрегатов завершено'"); - ПараметрыСтруктуры.Действие = "УстановитьИспользованиеАгрегатов"; - ПараметрыСтруктуры.МассивСтрок = Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "ИспользованиеАгрегатов"; - ПараметрыСтруктуры.Значение1 = Ложь; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка выключения использования агрегатов'"); - УправлениеАгрегатом(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ПерестроитьАгрегаты() - - Результат = ПолучитьПараметрыПерестроения(Истина); - - Если ТипЗнч(Результат) <> Тип("Структура") Тогда - Возврат; - КонецЕсли; - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Перестроение агрегатов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Перестроение агрегатов завершено'"); - ПараметрыСтруктуры.Действие = "ПерестроитьАгрегаты"; - ПараметрыСтруктуры.МассивСтрок = Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "Наименование"; - ПараметрыСтруктуры.Значение1 = Результат.ОтносительныйРазмер; - ПараметрыСтруктуры.Значение2 = Результат.МинимальныйЭффект; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка перестроения агрегатов'"); - УправлениеАгрегатом(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ОчиститьАгрегатыПоРегистрам(Команда) - - Результат = Вопрос(НСтр("ru='Очистка агрегатов приведет к существенному замедлению отчетов'") + Символы.ПС + НСтр("ru='Выполнить очистку?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); - - Если Результат = КодВозвратаДиалога.Нет Тогда - Возврат; - КонецЕсли; - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Очистка агрегатов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Очистка агрегатов завершена'"); - ПараметрыСтруктуры.Действие = "ОчиститьАгрегаты"; - ПараметрыСтруктуры.МассивСтрок = Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "Наименование"; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка очистки агрегатов'"); - УправлениеАгрегатом(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаполнитьАгрегатыПоРегистрам(Команда) - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Заполнение агрегатов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Заполнение агрегатов завершено'"); - ПараметрыСтруктуры.Действие = "ЗаполнитьАгрегаты"; - ПараметрыСтруктуры.МассивСтрок = Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "Наименование"; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка заполнения агрегатов'"); - УправлениеАгрегатом(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура АгрегатыОптимальные(Команда) - - Результат = ПолучитьПараметрыПерестроения(Ложь); - - Если ТипЗнч(Результат) <> Тип("Структура") Тогда - Возврат; - КонецЕсли; - - ПутьКОптимальнымАгрегатам = ВыборПутиККаталогу(ПутьКОптимальнымАгрегатам); - - Если ПустаяСтрока(ПутьКОптимальнымАгрегатам) Тогда - Возврат; - КонецЕсли; - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Получение списка оптимальных агрегатов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Получение списка оптимальных агрегатов завершено.'"); - ПараметрыСтруктуры.Действие = "ПолучитьОптимальныеАгрегаты"; - ПараметрыСтруктуры.МассивСтрок = Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "Наименование"; - ПараметрыСтруктуры.Значение1 = Результат.ОтносительныйРазмер; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка получения списка оптимальных агрегатов.'"); - УправлениеАгрегатом(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ГиперссылкаСТекстомНажатие(Элемент, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - ПолныеВозможности = НЕ ПолныеВозможности; - УстановитьРасширенныйРежим(); - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьПериодРасчитанныхИтогов(Команда) - - Результат = Истина; - ОчиститьСообщения(); - - МассивДействий = СписокИтогов.НайтиСтроки(Новый Структура("ОборотныйРег", Истина)); - - Если МассивДействий.Количество() = 0 Тогда - Предупреждение(НСтр("ru='Отсутствуют регистры, для которых можно выполнить данную операцию.'")); - Возврат; - КонецЕсли; - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Установка периода рассчитанных итогов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Установка периода рассчитанных итогов завершено'"); - ПараметрыСтруктуры.Действие = "УстановитьПериодИтогов"; - ПараметрыСтруктуры.МассивСтрок = МассивДействий; - ПараметрыСтруктуры.Поле = "ПериодИтогов"; - ПараметрыСтруктуры.Значение1 = ОкончаниеПериода(ДобавитьМесяц(РассчитатьИтогиНа, -1)); - ПараметрыСтруктуры.Значение2 = ОкончаниеПериода(РассчитатьИтогиНа); - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка установки периода рассчитанных итогов.'"); - ПараметрыСтруктуры.Вставить("ГрупповаяОбработка", Истина); - УправлениеИтогами(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ВключитьИспользованиеИтоговБыстрыйДоступ(Команда) - - Результат = Истина; - ОчиститьСообщения(); - - МассивДействий = СписокИтогов.НайтиСтроки(Новый Структура("ИспользоватьИтоги", Ложь)); - - Если МассивДействий.Количество() = 0 Тогда - Предупреждение(НСтр("ru='Отсутствуют регистры, для которых можно выполнить данную операцию.'")); - Возврат; - КонецЕсли; - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Включение использования итогов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Включение использования итогов завершено'"); - ПараметрыСтруктуры.Действие = "УстановитьИспользованиеИтогов"; - ПараметрыСтруктуры.МассивСтрок = МассивДействий; - ПараметрыСтруктуры.Поле = ""; - ПараметрыСтруктуры.Значение1 = Истина; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка включения использования итогов'"); - ПараметрыСтруктуры.Вставить("ГрупповаяОбработка", Истина); - УправлениеИтогами(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаполнитьАгрегатыИВыполнитьПерестроение(Команда) - - ОчиститьСообщения(); - - МассивДействий = АгрегатыПоРегистрам.НайтиСтроки(Новый Структура("РежимАгрегатов,ИспользованиеАгрегатов", Истина, Истина)); - - Если МассивДействий.Количество() = 0 Тогда - Предупреждение(НСтр("ru='Отсутствуют регистры, для которых можно выполнить данную операцию.'")); - Возврат; - КонецЕсли; - - ШагПроцесса = 100/МассивДействий.Количество(); - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Перестроение агрегатов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Перестроение агрегатов завершено'"); - ПараметрыСтруктуры.Действие = "ПерестроитьАгрегаты"; - ПараметрыСтруктуры.МассивСтрок = МассивДействий; - ПараметрыСтруктуры.Поле = ""; - ПараметрыСтруктуры.Значение1 = 0; - ПараметрыСтруктуры.Значение2 = 0; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка перестроения агрегатов'"); - ПараметрыСтруктуры.Вставить("ГрупповаяОбработка", Истина); - УправлениеАгрегатом(ПараметрыСтруктуры); - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Заполнение агрегатов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Заполнение агрегатов завершено'"); - ПараметрыСтруктуры.Действие = "ЗаполнитьАгрегаты"; - ПараметрыСтруктуры.МассивСтрок = МассивДействий; - ПараметрыСтруктуры.Поле = ""; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка заполнения агрегатов'"); - УправлениеАгрегатом(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ПолучитьОптимальныеАгрегаты(Команда) - - Если АгрегатыПоРегистрам.Количество() = 0 Тогда - Предупреждение(НСтр("ru='Отсутствуют регистры, для которых можно выполнить данную операцию.'")); - Возврат; - КонецЕсли; - - ПутьКОптимальнымАгрегатам = ВыборПутиККаталогу(ПутьКОптимальнымАгрегатам); - Если ПустаяСтрока(ПутьКОптимальнымАгрегатам) Тогда - - Возврат; - КонецЕсли; - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Получение списка оптимальных агрегатов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Получение списка оптимальных агрегатов завершено.'"); - ПараметрыСтруктуры.Действие = "ПолучитьОптимальныеАгрегаты"; - ПараметрыСтруктуры.МассивСтрок = АгрегатыПоРегистрам; - ПараметрыСтруктуры.Поле = ""; - ПараметрыСтруктуры.Значение1 = 0; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка получения списка оптимальных агрегатов.'"); - ПараметрыСтруктуры.Вставить("ГрупповаяОбработка", Истина); - УправлениеАгрегатом(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ПересчитатьИтоги(Команда) - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Пересчет итогов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Пересчет итогов завершен'"); - ПараметрыСтруктуры.Действие = "ПересчитатьИтоги"; - ПараметрыСтруктуры.МассивСтрок = Элементы.СписокИтогов.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "Наименование"; - ПараметрыСтруктуры.Значение1 = Ложь; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка пересчета итогов'"); - УправлениеИтогами(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ПересчитатьТекущиеИтоги(Команда) - - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Пересчет итогов ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Пересчет итогов завершен'"); - ПараметрыСтруктуры.Действие = "ПересчитатьТекущиеИтоги"; - ПараметрыСтруктуры.МассивСтрок = Элементы.СписокИтогов.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "Наименование"; - ПараметрыСтруктуры.Значение1 = Ложь; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка пересчета итогов'"); - УправлениеИтогами(ПараметрыСтруктуры); - -КонецПроцедуры - -&НаКлиенте -Процедура ПересчитатьИтогиЗаПериод(Команда) - - Диалог = Новый ДиалогРедактированияСтандартногоПериода; - Диалог.Период = ПериодПерерасчетаРегистров; - Если Диалог.Редактировать() Тогда - - ПериодПерерасчетаРегистров = Диалог.Период; - ПараметрыСтруктуры = Новый Структура("ОбрабатыватьЗаголовок,ПослеПроцесса,Действие,МассивСтрок,Поле,Значение1,Значение2,ТекстСообщенияОбОшибке"); - ПараметрыСтруктуры.ОбрабатыватьЗаголовок = НСтр("ru='Пересчет итогов за период ...'"); - ПараметрыСтруктуры.ПослеПроцесса = НСтр("ru='Пересчет итогов завершен'"); - ПараметрыСтруктуры.Действие = "ПересчитатьИтогиЗаПериод"; - ПараметрыСтруктуры.МассивСтрок = Элементы.СписокИтогов.ВыделенныеСтроки; - ПараметрыСтруктуры.Поле = "Наименование"; - ПараметрыСтруктуры.Значение1 = ПериодПерерасчетаРегистров.ДатаНачала; - ПараметрыСтруктуры.Значение2 = ПериодПерерасчетаРегистров.ДатаОкончания; - ПараметрыСтруктуры.ТекстСообщенияОбОшибке = НСтр("ru='Ошибка пересчета итогов'"); - УправлениеИтогами(ПараметрыСтруктуры); - - КонецЕсли; - -КонецПроцедуры - -Функция Префикс() - - Возврат НСтр("ru='Агрегаты регистра'"); - -КонецФункции \ No newline at end of file +КонецФункции diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl index 333c13145..7f7ea98dc 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -9,12 +12,8 @@ КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Функция КонецПериода(Дата) - - Возврат КонецДня(КонецМесяца(Дата)); - -КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ПериодДляРегНакопПриИзменении(Элемент) @@ -30,6 +29,8 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ОК(Команда) @@ -43,3 +44,15 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиентеНаСервереБезКонтекста +Функция КонецПериода(Дата) + + Возврат КонецДня(КонецМесяца(Дата)); + +КонецФункции + + + diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl index 20f99eabb..5e0322c68 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -5,10 +7,15 @@ ОтносительныйРазмер = Параметры.ОтносительныйРазмер; МинимальныйЭффект = Параметры.МинимальныйЭффект; Элементы.МинимальныйЭффект.Видимость = Параметры.РежимПерестроения; - Заголовок = ?(Параметры.РежимПерестроения, НСтр("ru='Параметры перестроения'"), НСтр("ru='Параметр расчета оптимальных агрегатов'")); + Заголовок = ?(Параметры.РежимПерестроения, + НСтр("ru='Параметры перестроения'"), + НСтр("ru='Параметр расчета оптимальных агрегатов'")); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ОК(Команда) diff --git a/SSL/src/DataProcessors/УправлениеНастройкамиФорм/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/УправлениеНастройкамиФорм/Forms/Форма/Module.bsl index 79b2692f9..7f4a7684f 100644 --- a/SSL/src/DataProcessors/УправлениеНастройкамиФорм/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеНастройкамиФорм/Forms/Форма/Module.bsl @@ -1,91 +1,39 @@ -////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере -Процедура ЗаполнитьСписокПользователей() +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - СписокПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей(); - - Для Каждого ТекПользователь Из СписокПользователей Цикл - - Элементы.Пользователь.СписокВыбора.Добавить(ТекПользователь.Имя); - - КонецЦикла; + ЗаполнитьСписокПользователей(); + Пользователь = ИмяПользователя(); + ОбновитьСписокФорм(); КонецПроцедуры -&НаСервере -Процедура ОбновитьСписокФорм() +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ПользовательПриИзменении(Элемент) - Обработка = РеквизитФормыВЗначение("Объект"); - СписокФорм = Новый СписокЗначений; - Обработка.ПолучитьСписокФорм(СписокФорм); - Формы.Очистить(); - Обработка.ПолучитьСписокСохраненныхНастроек(СписокФорм, Пользователь, Формы); + ОбновитьСписокФорм(); КонецПроцедуры -&НаСервере -Функция ПолучитьМассивВыделенныхНастроек() +&НаКлиенте +Процедура ПоискПриИзменении(Элемент) - МассивНастроек = Новый Массив; - - ВыделенныеЭлементы = Элементы.ОтфильтрованныеФормы.ВыделенныеСтроки; - - Для Каждого ВыделенныйЭлемент Из ВыделенныеЭлементы Цикл - - МассивНастроек.Добавить(Формы.НайтиПоЗначению(ОтфильтрованныеФормы.НайтиПоИдентификатору(ВыделенныйЭлемент).Значение).Значение); - - КонецЦикла; - - Возврат МассивНастроек; - -КонецФункции - -&НаСервере -Процедура СкопироватьНаСервере(ПользователиПриемник) - - МассивНастроекДляКопирования = ПолучитьМассивВыделенныхНастроек(); - - Обработка = РеквизитФормыВЗначение("Объект"); - Обработка.СкопироватьНастройкиФорм(Пользователь, ПользователиПриемник, МассивНастроекДляКопирования); - -КонецПроцедуры - -&НаСервере -Процедура УдалитьНаСервере() - - МассивНастроекДляУдаления = ПолучитьМассивВыделенныхНастроек(); - - Обработка = РеквизитФормыВЗначение("Объект"); - Обработка.УдалитьНастройкиФорм(Пользователь, МассивНастроекДляУдаления); + ПрименитьФильтр(); КонецПроцедуры -Процедура ПрименитьФильтр() - - ОтфильтрованныеФормы.Очистить(); - - Для Каждого ЭлементФорма Из Формы Цикл - - Если Поиск = "" Или Найти(ВРег(ЭлементФорма.Представление), ВРег(Поиск)) <> 0 Тогда - - ОтфильтрованныеФормы.Добавить(ЭлементФорма.Значение, ЭлементФорма.Представление, ЭлементФорма.Пометка, ЭлементФорма.Картинка); - - КонецЕсли; - - КонецЦикла; - - ПримененныйПоиск = Поиск; - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ -////////////////////////////////////////////////////////////////////// -// Обработчики команд &НаКлиенте Процедура ОбновитьВыполнить() ОбновитьСписокФорм(); - ПрименитьФильтр(); КонецПроцедуры @@ -158,8 +106,6 @@ КонецЕсли; УдалитьНаСервере(); - ОбновитьСписокФорм(); - ПрименитьФильтр(); ПоказатьОповещениеПользователя(НСтр("ru = 'Настройки удалены'")); @@ -172,32 +118,90 @@ КонецПроцедуры -////////////////////////////////////////////////////////////////////// -// Обработчики событий формы +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) +Процедура ЗаполнитьСписокПользователей() + + УстановитьПривилегированныйРежим(Истина); + СписокПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей(); + + Для Каждого ТекПользователь Из СписокПользователей Цикл + + Элементы.Пользователь.СписокВыбора.Добавить(ТекПользователь.Имя); + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСписокФорм() + + Обработка = РеквизитФормыВЗначение("Объект"); + СписокФорм = Новый СписокЗначений; + Обработка.ПолучитьСписокФорм(СписокФорм); + Формы.Очистить(); + Обработка.ПолучитьСписокСохраненныхНастроек(СписокФорм, Пользователь, Формы); - ЗаполнитьСписокПользователей(); - Пользователь = ИмяПользователя(); - ОбновитьСписокФорм(); ПрименитьФильтр(); КонецПроцедуры -////////////////////////////////////////////////////////////////////// -// Обработчики событий элементов управления -&НаКлиенте -Процедура ПользовательПриИзменении(Элемент) +&НаСервере +Функция ПолучитьМассивВыделенныхНастроек() + + МассивНастроек = Новый Массив; + + ВыделенныеЭлементы = Элементы.ОтфильтрованныеФормы.ВыделенныеСтроки; + + Для Каждого ВыделенныйЭлемент Из ВыделенныеЭлементы Цикл + + МассивНастроек.Добавить(Формы.НайтиПоЗначению(ОтфильтрованныеФормы.НайтиПоИдентификатору(ВыделенныйЭлемент).Значение).Значение); + + КонецЦикла; + + Возврат МассивНастроек; + +КонецФункции + +&НаСервере +Процедура СкопироватьНаСервере(ПользователиПриемник) + + МассивНастроекДляКопирования = ПолучитьМассивВыделенныхНастроек(); + + Обработка = РеквизитФормыВЗначение("Объект"); + Обработка.СкопироватьНастройкиФорм(Пользователь, ПользователиПриемник, МассивНастроекДляКопирования); + +КонецПроцедуры + +&НаСервере +Процедура УдалитьНаСервере() + + МассивНастроекДляУдаления = ПолучитьМассивВыделенныхНастроек(); + + Обработка = РеквизитФормыВЗначение("Объект"); + Обработка.УдалитьНастройкиФорм(Пользователь, МассивНастроекДляУдаления); ОбновитьСписокФорм(); - ПрименитьФильтр(); КонецПроцедуры -&НаКлиенте -Процедура ПоискПриИзменении(Элемент) +&НаСервере +Процедура ПрименитьФильтр() - ПрименитьФильтр(); + ОтфильтрованныеФормы.Очистить(); + + Для Каждого ЭлементФорма Из Формы Цикл + + Если Поиск = "" Или Найти(ВРег(ЭлементФорма.Представление), ВРег(Поиск)) <> 0 Тогда + + ОтфильтрованныеФормы.Добавить(ЭлементФорма.Значение, ЭлементФорма.Представление, ЭлементФорма.Пометка, ЭлементФорма.Картинка); + + КонецЕсли; + + КонецЦикла; + + ПримененныйПоиск = Поиск; КонецПроцедуры - diff --git a/SSL/src/DataProcessors/УправлениеНастройкамиФорм/ObjectModule.bsl b/SSL/src/DataProcessors/УправлениеНастройкамиФорм/ObjectModule.bsl index 6efbc6778..866858a24 100644 --- a/SSL/src/DataProcessors/УправлениеНастройкамиФорм/ObjectModule.bsl +++ b/SSL/src/DataProcessors/УправлениеНастройкамиФорм/ObjectModule.bsl @@ -1,41 +1,8 @@ -Процедура ПолучитьСписокФормИзСпискаМетаданныхФорм(Префикс, ПрефиксПредставления, МетаданныеФорм, Картинка, Список) - - Для Каждого Форма Из МетаданныеФорм Цикл - - Список.Добавить(Префикс + ".Форма." + Форма.Имя, ПрефиксПредставления + "." + Форма.Синоним, Ложь, Картинка); - - КонецЦикла; - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Процедура ДобавитьСтандартнуюФорму(Префикс, ПрефиксПредставления, ОбъектМетаданных, ИмяФормы, ПредставлениеФормы, Картинка, Список) - - Если ОбъектМетаданных["Основная" + ИмяФормы] = Неопределено Тогда - - Список.Добавить(Префикс + "." + ИмяФормы, ПрефиксПредставления + "." + ПредставлениеФормы, Ложь, Картинка); - - КонецЕсли; - -КонецПроцедуры - -Процедура ПолучитьСписокФормОбъектаМетаданных(СписокОбъектовМетаданных, ИмяОбъектаМетаданных, ПредставлениеОбъектаМетаданных, ИменаСтандартныхФорм, Картинка, Список) - - Для Каждого Объект Из СписокОбъектовМетаданных Цикл - - Префикс = ИмяОбъектаМетаданных + "." + Объект.Имя; - ПрефиксПредставления = ПредставлениеОбъектаМетаданных + "." + Объект.Синоним; - - ПолучитьСписокФормИзСпискаМетаданныхФорм(Префикс, ПрефиксПредставления, Объект.Формы, Картинка, Список); - - Для Каждого ИмяСтандартнойФормы Из ИменаСтандартныхФорм Цикл - - ДобавитьСтандартнуюФорму(Префикс, ПрефиксПредставления, Объект, ИмяСтандартнойФормы.Значение, ИмяСтандартнойФормы.Представление, Картинка, Список); - - КонецЦикла; - - КонецЦикла; - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции // Получает список форм, в конфигурации, при этом заполняются следующие поля: // Значение - имя формы, идентифицирующее ее. @@ -209,3 +176,45 @@ КонецЦикла; КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции + +Процедура ПолучитьСписокФормИзСпискаМетаданныхФорм(Префикс, ПрефиксПредставления, МетаданныеФорм, Картинка, Список) + + Для Каждого Форма Из МетаданныеФорм Цикл + + Список.Добавить(Префикс + ".Форма." + Форма.Имя, ПрефиксПредставления + "." + Форма.Синоним, Ложь, Картинка); + + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьСтандартнуюФорму(Префикс, ПрефиксПредставления, ОбъектМетаданных, ИмяФормы, ПредставлениеФормы, Картинка, Список) + + Если ОбъектМетаданных["Основная" + ИмяФормы] = Неопределено Тогда + + Список.Добавить(Префикс + "." + ИмяФормы, ПрефиксПредставления + "." + ПредставлениеФормы, Ложь, Картинка); + + КонецЕсли; + +КонецПроцедуры + +Процедура ПолучитьСписокФормОбъектаМетаданных(СписокОбъектовМетаданных, ИмяОбъектаМетаданных, ПредставлениеОбъектаМетаданных, ИменаСтандартныхФорм, Картинка, Список) + + Для Каждого Объект Из СписокОбъектовМетаданных Цикл + + Префикс = ИмяОбъектаМетаданных + "." + Объект.Имя; + ПрефиксПредставления = ПредставлениеОбъектаМетаданных + "." + Объект.Синоним; + + ПолучитьСписокФормИзСпискаМетаданныхФорм(Префикс, ПрефиксПредставления, Объект.Формы, Картинка, Список); + + Для Каждого ИмяСтандартнойФормы Из ИменаСтандартныхФорм Цикл + + ДобавитьСтандартнуюФорму(Префикс, ПрефиксПредставления, Объект, ИмяСтандартнойФормы.Значение, ИмяСтандартнойФормы.Представление, Картинка, Список); + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form index c7e790ab5..54f8a3ed1 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Form.form @@ -1078,7 +1078,7 @@ <titleLocation>Right</titleLocation> <toolTip> <key>ru</key> - <value>Данная настройка имеет смысл только при файловом варианите хранения ИБ. В клиент- серверном варианте отправки и получение писем выполняется регламентным заданием. </value> + <value>Данная настройка имеет смысл только при файловом варианте хранения ИБ. В клиент- серверном варианте отправки и получение писем выполняется регламентным заданием. </value> </toolTip> <extendedTooltip> <name>ОтправлятьСообщенияСразуРасширеннаяПодсказка</name> diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl index 52c927a95..be1111aa6 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl @@ -1,97 +1,6 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ - -&НаКлиенте -Процедура УправлениеДоступностью() - - Если ФорматПодписиДляНовыхСообщений = - ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") Тогда - - Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = Элементы.СтраницаНовоеСообщениеФорматированныйТекст; - Элементы.НовоеСообщениеФорматированныйДокумент.Доступность = ВключатьПодписьДляНовыхСообщений; - - Иначе - - Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = Элементы.СтраницаНовоеСообщениеПростойТекст; - Элементы.ПодписьДляНовыхСообщенийПростойТекст.Доступность = ВключатьПодписьДляНовыхСообщений; - - КонецЕсли; - - Если ФорматПодписиПриОтветеПересылке = - ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") Тогда - - Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = - Элементы.СтраницаПриОтветеПересылкеФорматированныйДокумент; - Элементы.ПриОтветеПересылкеФорматированныйДокумент.Доступность = ВключатьПодписьПриОтветеПересылке; - - Иначе - - Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = Элементы.СтраницаПриОтветеПересылкеПростойТекст; - Элементы.ПодписьПриОтветеПересылкеПростойТекст.Доступность = ВключатьПодписьПриОтветеПересылке; - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура СохранитьНастройки() - - Если ФорматПодписиДляНовыхСообщений <> Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - - ПодписьДляНовыхСообщенийФорматированныйДокумент = Неопределено; - - Иначе - - ПодписьДляНовыхСообщенийПростойТекст = НовоеСообщениеФорматированныйДокумент.ПолучитьТекст(); - - КонецЕсли; - - Если ФорматПодписиПриОтветеПересылке <> Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - - ПодписьПриОтветеПересылкеФорматированныйДокумент = Неопределено; - - Иначе - - ПодписьПриОтветеПересылкеПростойТекст = ПриОтветеПересылкеФорматированныйДокумент.ПолучитьТекст(); - - КонецЕсли; - - СтруктураНастройки = Новый Структура; - СтруктураНастройки.Вставить("ВключатьПодписьДляНовыхСообщений", ВключатьПодписьДляНовыхСообщений); - СтруктураНастройки.Вставить("ВключатьПодписьПриОтветеПересылке", ВключатьПодписьПриОтветеПересылке); - СтруктураНастройки.Вставить("ВсегдаЗапрашиватьУведомлениеОПрочтении", ВсегдаЗапрашиватьУведомлениеОПрочтении); - СтруктураНастройки.Вставить("ВсегдаЗапрашиватьУведомленияОДоставке", ВсегдаЗапрашиватьУведомленияОДоставке); - СтруктураНастройки.Вставить("НовоеСообщениеФорматированныйДокумент", НовоеСообщениеФорматированныйДокумент); - СтруктураНастройки.Вставить("ПодписьДляНовыхСообщенийПростойТекст", ПодписьДляНовыхСообщенийПростойТекст); - СтруктураНастройки.Вставить("ПодписьПриОтветеПересылкеПростойТекст", ПодписьПриОтветеПересылкеПростойТекст); - СтруктураНастройки.Вставить("ПорядокОтветовНаЗапросыУведомленийОПрочтении", ПорядокОтветовНаЗапросыУведомленийОПрочтении); - СтруктураНастройки.Вставить("ПриОтветеПересылкеФорматированныйДокумент", ПриОтветеПересылкеФорматированныйДокумент); - СтруктураНастройки.Вставить("ФорматПодписиДляНовыхСообщений", ФорматПодписиДляНовыхСообщений); - СтруктураНастройки.Вставить("ФорматПодписиПриОтветеПересылке", ФорматПодписиПриОтветеПересылке); - СтруктураНастройки.Вставить("ОтображатьТелоИсходногоПисьма", ОтображатьТелоИсходногоПисьма); - СтруктураНастройки.Вставить("ВключатьТелоИсходногоПисьма", ВключатьТелоИсходногоПисьма); - СтруктураНастройки.Вставить("ОтправлятьСообщенияСразу", ОтправлятьСообщенияСразу); - - Взаимодействия.СохранитьНастройкуРаботаСПочтой(СтруктураНастройки); - -КонецПроцедуры - - -//////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ - -&НаКлиенте -Процедура ЗаписатьИЗакрыть(Команда) - - СохранитьНастройки(); - Закрыть(); - -КонецПроцедуры - - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -146,7 +55,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ВключатьПодписьДляНовыйСообщенийПриИзменении(Элемент) @@ -248,5 +157,92 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + + СохранитьНастройки(); + Закрыть(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура УправлениеДоступностью() + + Если ФорматПодписиДляНовыхСообщений = + ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") Тогда + + Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = Элементы.СтраницаНовоеСообщениеФорматированныйТекст; + Элементы.НовоеСообщениеФорматированныйДокумент.Доступность = ВключатьПодписьДляНовыхСообщений; + + Иначе + + Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = Элементы.СтраницаНовоеСообщениеПростойТекст; + Элементы.ПодписьДляНовыхСообщенийПростойТекст.Доступность = ВключатьПодписьДляНовыхСообщений; + + КонецЕсли; + + Если ФорматПодписиПриОтветеПересылке = + ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") Тогда + + Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = + Элементы.СтраницаПриОтветеПересылкеФорматированныйДокумент; + Элементы.ПриОтветеПересылкеФорматированныйДокумент.Доступность = ВключатьПодписьПриОтветеПересылке; + + Иначе + + Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = Элементы.СтраницаПриОтветеПересылкеПростойТекст; + Элементы.ПодписьПриОтветеПересылкеПростойТекст.Доступность = ВключатьПодписьПриОтветеПересылке; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СохранитьНастройки() + + Если ФорматПодписиДляНовыхСообщений <> Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда + + ПодписьДляНовыхСообщенийФорматированныйДокумент = Неопределено; + + Иначе + + ПодписьДляНовыхСообщенийПростойТекст = НовоеСообщениеФорматированныйДокумент.ПолучитьТекст(); + + КонецЕсли; + + Если ФорматПодписиПриОтветеПересылке <> Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда + + ПодписьПриОтветеПересылкеФорматированныйДокумент = Неопределено; + + Иначе + + ПодписьПриОтветеПересылкеПростойТекст = ПриОтветеПересылкеФорматированныйДокумент.ПолучитьТекст(); + + КонецЕсли; + + СтруктураНастройки = Новый Структура; + СтруктураНастройки.Вставить("ВключатьПодписьДляНовыхСообщений", ВключатьПодписьДляНовыхСообщений); + СтруктураНастройки.Вставить("ВключатьПодписьПриОтветеПересылке", ВключатьПодписьПриОтветеПересылке); + СтруктураНастройки.Вставить("ВсегдаЗапрашиватьУведомлениеОПрочтении", ВсегдаЗапрашиватьУведомлениеОПрочтении); + СтруктураНастройки.Вставить("ВсегдаЗапрашиватьУведомленияОДоставке", ВсегдаЗапрашиватьУведомленияОДоставке); + СтруктураНастройки.Вставить("НовоеСообщениеФорматированныйДокумент", НовоеСообщениеФорматированныйДокумент); + СтруктураНастройки.Вставить("ПодписьДляНовыхСообщенийПростойТекст", ПодписьДляНовыхСообщенийПростойТекст); + СтруктураНастройки.Вставить("ПодписьПриОтветеПересылкеПростойТекст", ПодписьПриОтветеПересылкеПростойТекст); + СтруктураНастройки.Вставить("ПорядокОтветовНаЗапросыУведомленийОПрочтении", ПорядокОтветовНаЗапросыУведомленийОПрочтении); + СтруктураНастройки.Вставить("ПриОтветеПересылкеФорматированныйДокумент", ПриОтветеПересылкеФорматированныйДокумент); + СтруктураНастройки.Вставить("ФорматПодписиДляНовыхСообщений", ФорматПодписиДляНовыхСообщений); + СтруктураНастройки.Вставить("ФорматПодписиПриОтветеПересылке", ФорматПодписиПриОтветеПересылке); + СтруктураНастройки.Вставить("ОтображатьТелоИсходногоПисьма", ОтображатьТелоИсходногоПисьма); + СтруктураНастройки.Вставить("ВключатьТелоИсходногоПисьма", ВключатьТелоИсходногоПисьма); + СтруктураНастройки.Вставить("ОтправлятьСообщенияСразу", ОтправлятьСообщенияСразу); + + Взаимодействия.СохранитьНастройкуРаботаСПочтой(СтруктураНастройки); + +КонецПроцедуры diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl index abd518fb6..04e7cf29c 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Module.bsl @@ -1,6 +1,51 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ЗаполнитьРеквзитыФормыИзПараметров(Параметры); + УправлениеДоступностью(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, Модифицированность, ВыполненаКомандаЗакрыть); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура КомандаОК(Команда) + + ВыполненаКомандаЗакрыть = Истина; + + Если Папка <> ТекущаяПапка Тогда + ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма(Письмо,Папка); + КонецЕсли; + + Если ТипПисьма = "ЭлектронноеПисьмоИсходящее" И ОтправленоПолучено = Дата(1,1,1) И Модифицированность Тогда + Закрыть(Новый Структура("УведомитьОДоставке, УведомитьОПрочтении, ВключатьТелоИсходногоПисьма,Папка", + УведомитьОДоставке, + УведомитьОПрочтении, + ВключатьТелоИсходногоПисьма)); + Иначе + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ЗаполнитьРеквизитФормыИзПараметра(Параметры,ИмяПараметра,ИмяРеквизита = "") @@ -52,58 +97,3 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ - -&НаКлиенте -Процедура КомандаОК(Команда) - - ВыполненаКомандаЗакрыть = Истина; - - Если Папка <> ТекущаяПапка Тогда - ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма(Письмо,Папка); - КонецЕсли; - - Если ТипПисьма = "ЭлектронноеПисьмоИсходящее" И ОтправленоПолучено = Дата(1,1,1) И Модифицированность Тогда - Закрыть(Новый Структура("УведомитьОДоставке, УведомитьОПрочтении, ВключатьТелоИсходногоПисьма,Папка", - УведомитьОДоставке, - УведомитьОПрочтении, - ВключатьТелоИсходногоПисьма)); - Иначе - Закрыть(); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - ЗаполнитьРеквзитыФормыИзПараметров(Параметры); - УправлениеДоступностью(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - - Если НЕ ВыполненаКомандаЗакрыть И - Модифицированность И - Вопрос(НСтр("ru='При закрытии формы введенная в нее информация будет утеряна. Закрыть?'"), - РежимДиалогаВопрос.ДаНет) <> КодВозвратаДиалога.Да Тогда - - Отказ = Истина; - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Form.form index 68ae369a3..b0861af53 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Form.form @@ -37,6 +37,10 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:HtmlFieldExtInfo"> + <handlers> + <event>DocumentComplete</event> + <name>ТекстHTMLДокументСформирован</name> + </handlers> <handlers> <event>OnClick</event> <name>ТекстHTMLПриНажатии</name> @@ -54,10 +58,6 @@ <id>-1</id> <horizontalAlign>Left</horizontalAlign> </autoCommandBar> - <handlers> - <event>OnOpen</event> - <name>ПриОткрытии</name> - </handlers> <handlers> <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> @@ -89,6 +89,23 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ФормаДиалогаПечатиПриОткрытииОткрывалась</name> + <title> + <key>ru</key> + <value>Форма диалога печати при открытии открывалась</value> + + 2 + + Boolean + + + true + + + true + + diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl index ac67424ce..5f9015017 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl @@ -1,12 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ - -//////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -40,19 +33,24 @@ КонецПроцедуры -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - Элементы.ТекстHTML.Документ.execCommand("Print"); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ТекстHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) ВзаимодействияКлиент.ПолеHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + + +&НаКлиенте +Процедура ТекстHTMLДокументСформирован(Элемент) + + Если Не ФормаДиалогаПечатиПриОткрытииОткрывалась Тогда + Элементы.ТекстHTML.Документ.execCommand("Print"); + ФормаДиалогаПечатиПриОткрытииОткрывалась = Истина; + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form index 2b3b7381a..7c218d6aa 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form @@ -25,7 +25,7 @@ ТипВзаимодействияРасширеннаяПодсказка - 347 + 416 Label true true @@ -185,7 +185,7 @@ СтатусРасширеннаяПодсказка - 349 + 418 Label true true @@ -274,7 +274,7 @@ ПользовательРасширеннаяПодсказка - 351 + 420 Label true true @@ -303,6 +303,37 @@ Normal + + Отступ + 413 + true + true + + true + + + ОтступРасширеннаяПодсказка + 422 + Label + true + true + + Left + + + + ОтступКонтекстноеМеню + 414 + true + + Label + true + true + true + + Left + + СтрокаПоиска 89 @@ -324,7 +355,7 @@ СтрокаПоискаРасширеннаяПодсказка - 353 + 423 Label true true @@ -370,7 +401,7 @@ true ГруппаФильтрыРасширеннаяПодсказка - 346 + 415 Label true true @@ -409,7 +440,7 @@ УстановитьВариантНавигацииПоПредметуРасширеннаяПодсказка - 359 + 429 Label true true @@ -435,7 +466,7 @@ УстановитьВариантНавигацииПоКонтактуРасширеннаяПодсказка - 360 + 430 Label true true @@ -461,7 +492,7 @@ УстановитьВариантНавигацииПоЗакладкамРасширеннаяПодсказка - 361 + 431 Label true true @@ -487,7 +518,7 @@ УстановитьВариантНавигацииПоПапкамРасширеннаяПодсказка - 362 + 432 Label true true @@ -518,7 +549,7 @@ ВыборВариантаНавигацииРасширеннаяПодсказка - 358 + 428 Label true true @@ -528,6 +559,9 @@ Popup + + StdPicture.HierarchicalView + Auto Normal @@ -547,7 +581,7 @@ КоманднаяПанельВариантаНавигацииРасширеннаяПодсказка - 357 + 427 Label true true @@ -607,7 +641,7 @@ None КонтактыПредставлениеРасширеннаяПодсказка - 383 + 457 Label true true @@ -655,7 +689,7 @@ None КонтактыНомерКартинкиРасширеннаяПодсказка - 385 + 459 Label true true @@ -697,7 +731,7 @@ true КонтактыГруппаРасширеннаяПодсказка - 382 + 456 Label true true @@ -734,10 +768,10 @@ КонтактыСтрокаПоиска - 373 + 447 КонтактыСтрокаПоискаРасширеннаяПодсказка - 375 + 449 Label true true @@ -747,7 +781,7 @@ КонтактыСтрокаПоискаКонтекстноеМеню - 374 + 448 true Контакты @@ -757,10 +791,10 @@ КонтактыСостояниеПросмотра - 376 + 450 КонтактыСостояниеПросмотраРасширеннаяПодсказка - 378 + 452 Label true true @@ -770,7 +804,7 @@ КонтактыСостояниеПросмотраКонтекстноеМеню - 377 + 451 true ViewStatusAddition @@ -781,10 +815,10 @@ КонтактыУправлениеПоиском - 379 + 453 КонтактыУправлениеПоискомРасширеннаяПодсказка - 381 + 455 Label true true @@ -794,7 +828,7 @@ КонтактыУправлениеПоискомКонтекстноеМеню - 380 + 454 true SearchControlAddition @@ -805,7 +839,7 @@ КонтактыРасширеннаяПодсказка - 372 + 446 Label true true @@ -816,6 +850,164 @@ КонтактыКонтекстноеМеню 32 + + КонтактыКонтекстноеМенюГруппаРассмотрено + 390 + + КонтактыКонтекстноеМенюРассмотрено + 111 + true + true + + true + + + КонтактыКонтекстноеМенюРассмотреноРасширеннаяПодсказка + 436 + Label + true + true + + Left + + + Form.Command.Рассмотрено + Normal + Auto + true + true + UserCmds + Auto + + + КонтактыКонтекстноеМенюОтложитьРассмотрение + 113 + true + true + + true + + + КонтактыКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка + 437 + Label + true + true + + Left + + + Form.Command.ОтложитьРассмотрение + Normal + Auto + true + true + UserCmds + Auto + + + КонтактыКонтекстноеМенюОтветственный + 110 + true + true + + true + + + КонтактыКонтекстноеМенюОтветственныйРасширеннаяПодсказка + 438 + Label + true + true + + Left + + + Form.Command.Ответственный + Normal + Auto + true + true + UserCmds + Auto + + + КонтактыКонтекстноеМенюПредмет + 112 + true + true + + true + + + КонтактыКонтекстноеМенюПредметРасширеннаяПодсказка + 439 + Label + true + true + + Left + + + Form.Command.Предмет + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Контакты контекстное меню группа рассмотрено</value> + + + ru + Контакты контекстное меню группа рассмотрено + + + КонтактыКонтекстноеМенюГруппаРассмотреноРасширеннаяПодсказка + 435 + Label + true + true + + Left + + + + + + КонтактыКонтекстноеМенюДобавитьВЗакладки + 393 + true + true + + true + + + КонтактыКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка + 440 + Label + true + true + + Left + + + Form.Command.ДобавитьВЗакладки + Normal + Auto + true + true + UserCmds + Auto + КонтактыКонтекстноеМенюИзменитьЗначениеПанелиНавигации 325 @@ -826,7 +1018,7 @@ КонтактыКонтекстноеМенюИзменитьЗначениеПанелиНавигацииРасширеннаяПодсказка - 365 + 441 Label true true @@ -842,113 +1034,35 @@ UserCmds Auto - - КонтактыКонтекстноеМенюОтветственный - 110 - true - true - - true - - - КонтактыКонтекстноеМенюОтветственныйРасширеннаяПодсказка - 366 - Label - true - true - - Left - - - Form.Command.Ответственный - Normal - Auto - true - true - UserCmds - Auto - - - КонтактыКонтекстноеМенюРассмотрено - 111 - true - true - - true - - - КонтактыКонтекстноеМенюРассмотреноРасширеннаяПодсказка - 367 - Label - true - true - - Left - - - Form.Command.Рассмотрено - Normal - Auto - true - true - UserCmds - Auto - - - КонтактыКонтекстноеМенюПредмет - 112 - true - true - - true - - - КонтактыКонтекстноеМенюПредметРасширеннаяПодсказка - 368 - Label - true - true - - Left - - - Form.Command.Предмет - Normal - Auto - true - true - UserCmds - Auto - - - КонтактыКонтекстноеМенюОтложитьРассмотрение - 113 - true - true - - true - - - КонтактыКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка - 369 - Label - true - true - - Left - - - Form.Command.ОтложитьРассмотрение - Normal - Auto - true - true - UserCmds - Auto - КонтактыКонтекстноеМенюГруппаОбновить 202 + + КонтактыКонтекстноеМенюКопироватьВБуферОбмена + 391 + true + true + + true + + + КонтактыКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 443 + Label + true + true + + Left + + + Form.Item.Контакты.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + КонтактыКонтекстноеМенюОбновить 201 @@ -959,7 +1073,7 @@ КонтактыКонтекстноеМенюОбновитьРасширеннаяПодсказка - 371 + 444 Label true true @@ -975,6 +1089,32 @@ UserCmds Auto + + КонтактыКонтекстноеМенюВывестиСписок + 392 + true + true + + true + + + КонтактыКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 445 + Label + true + true + + Left + + + Form.Item.Контакты.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + true true @@ -990,7 +1130,7 @@ КонтактыКонтекстноеМенюГруппаОбновитьРасширеннаяПодсказка - 370 + 442 Label true true @@ -1052,7 +1192,7 @@ true СтраницаКонтактРасширеннаяПодсказка - 364 + 434 Label true true @@ -1090,7 +1230,6 @@ List MoveDown MoveUp - OutputList SortListAsc SortListDesc Tree @@ -1111,7 +1250,7 @@ None ПредметыПредставлениеРасширеннаяПодсказка - 415 + 492 Label true true @@ -1153,7 +1292,7 @@ None ПредметыНомерКартинкиРасширеннаяПодсказка - 417 + 494 Label true true @@ -1200,7 +1339,7 @@ true ПредметыГруппаКолонокРасширеннаяПодсказка - 414 + 491 Label true true @@ -1246,10 +1385,10 @@ ПредметыСтрокаПоиска - 405 + 482 ПредметыСтрокаПоискаРасширеннаяПодсказка - 407 + 484 Label true true @@ -1259,7 +1398,7 @@ ПредметыСтрокаПоискаКонтекстноеМеню - 406 + 483 true Предметы @@ -1269,10 +1408,10 @@ ПредметыСостояниеПросмотра - 408 + 485 ПредметыСостояниеПросмотраРасширеннаяПодсказка - 410 + 487 Label true true @@ -1282,7 +1421,7 @@ ПредметыСостояниеПросмотраКонтекстноеМеню - 409 + 486 true ViewStatusAddition @@ -1293,10 +1432,10 @@ ПредметыУправлениеПоиском - 411 + 488 ПредметыУправлениеПоискомРасширеннаяПодсказка - 413 + 490 Label true true @@ -1306,7 +1445,7 @@ ПредметыУправлениеПоискомКонтекстноеМеню - 412 + 489 true SearchControlAddition @@ -1317,7 +1456,7 @@ ПредметыРасширеннаяПодсказка - 404 + 481 Label true true @@ -1328,17 +1467,129 @@ ПредметыКонтекстноеМеню 75 - - ПредметыКонтекстноеМенюИзменитьЗначениеПанелиНавигации - 326 + + ПредметыКонтекстноеМенюГруппаРассмотрено + 395 + + ПредметыРассмотрено + 115 + true + true + + true + + + ПредметыРассмотреноРасширеннаяПодсказка + 471 + Label + true + true + + Left + + + Form.Command.Рассмотрено + Normal + Auto + true + true + UserCmds + Auto + + + ПредметыОтложитьРассмотрение + 117 + true + true + + true + + + ПредметыОтложитьРассмотрениеРасширеннаяПодсказка + 472 + Label + true + true + + Left + + + Form.Command.ОтложитьРассмотрение + Normal + Auto + true + true + UserCmds + Auto + + + ПредметыОтветственный + 114 + true + true + + true + + + ПредметыОтветственныйРасширеннаяПодсказка + 473 + Label + true + true + + Left + + + Form.Command.Ответственный + Normal + Auto + true + true + UserCmds + Auto + + + ПредметыПредмет + 116 + true + true + + true + + + ПредметыПредметРасширеннаяПодсказка + 474 + Label + true + true + + Left + + + Form.Command.Предмет + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Предметы контекстное меню группа рассмотрено</value> + + + ru + Предметы контекстное меню группа рассмотрено + - ПредметыКонтекстноеМенюИзменитьЗначениеПанелиНавигацииРасширеннаяПодсказка - 396 + ПредметыКонтекстноеМенюГруппаРассмотреноРасширеннаяПодсказка + 470 Label true true @@ -1346,117 +1597,7 @@ Left - Form.Command.ИзменитьЗначениеПанелиНавигации - Normal - Auto - true - true - UserCmds - Auto - - - ПредметыОтветственный - 114 - true - true - - true - - - ПредметыОтветственныйРасширеннаяПодсказка - 397 - Label - true - true - - Left - - - Form.Command.Ответственный - Normal - Auto - true - true - UserCmds - Auto - - - ПредметыРассмотрено - 115 - true - true - - true - - - ПредметыРассмотреноРасширеннаяПодсказка - 398 - Label - true - true - - Left - - - Form.Command.Рассмотрено - Normal - Auto - true - true - UserCmds - Auto - - - ПредметыПредмет - 116 - true - true - - true - - - ПредметыПредметРасширеннаяПодсказка - 399 - Label - true - true - - Left - - - Form.Command.Предмет - Normal - Auto - true - true - UserCmds - Auto - - - ПредметыОтложитьРассмотрение - 117 - true - true - - true - - - ПредметыОтложитьРассмотрениеРасширеннаяПодсказка - 400 - Label - true - true - - Left - - - Form.Command.ОтложитьРассмотрение - Normal - Auto - true - true - UserCmds - Auto + ПредметыКонтекстноеМенюДобавитьВЗакладки @@ -1468,7 +1609,7 @@ ПредметыКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка - 401 + 475 Label true true @@ -1484,9 +1625,61 @@ UserCmds Auto + + ПредметыКонтекстноеМенюИзменитьЗначениеПанелиНавигации + 326 + true + true + + true + + + ПредметыКонтекстноеМенюИзменитьЗначениеПанелиНавигацииРасширеннаяПодсказка + 476 + Label + true + true + + Left + + + Form.Command.ИзменитьЗначениеПанелиНавигации + Normal + Auto + true + true + UserCmds + Auto + ПредметыКонтекстноеМенюГруппаОбновить 203 + + ПредметыКонтекстноеМенюКопироватьВБуферОбмена + 396 + true + true + + true + + + ПредметыКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 478 + Label + true + true + + Left + + + Form.Item.Предметы.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + ПредметыКонтекстноеМенюОбновить 204 @@ -1497,7 +1690,7 @@ ПредметыКонтекстноеМенюОбновитьРасширеннаяПодсказка - 403 + 479 Label true true @@ -1513,6 +1706,32 @@ UserCmds Auto + + ПредметыКонтекстноеМенюВывестиСписок + 397 + true + true + + true + + + ПредметыКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 480 + Label + true + true + + Left + + + Form.Item.Предметы.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + true true @@ -1528,7 +1747,7 @@ ПредметыКонтекстноеМенюГруппаОбновитьРасширеннаяПодсказка - 402 + 477 Label true true @@ -1592,7 +1811,7 @@ ПоказыватьВсеАктивныеПредметыРасширеннаяПодсказка - 427 + 504 Label true true @@ -1627,7 +1846,7 @@ СтраницаПредметРасширеннаяПодсказка - 395 + 469 Label true true @@ -1659,7 +1878,6 @@ HierarchicalList List ListSettings - OutputList Tree ЗакладкиНаименование @@ -1678,7 +1896,7 @@ ЗакладкиНаименованиеРасширеннаяПодсказка - 444 + 524 Label true true @@ -1711,10 +1929,10 @@ ЗакладкиСтрокаПоиска - 435 + 515 ЗакладкиСтрокаПоискаРасширеннаяПодсказка - 437 + 517 Label true true @@ -1724,7 +1942,7 @@ ЗакладкиСтрокаПоискаКонтекстноеМеню - 436 + 516 true Закладки @@ -1734,10 +1952,10 @@ ЗакладкиСостояниеПросмотра - 438 + 518 ЗакладкиСостояниеПросмотраРасширеннаяПодсказка - 440 + 520 Label true true @@ -1747,7 +1965,7 @@ ЗакладкиСостояниеПросмотраКонтекстноеМеню - 439 + 519 true ViewStatusAddition @@ -1758,10 +1976,10 @@ ЗакладкиУправлениеПоиском - 441 + 521 ЗакладкиУправлениеПоискомРасширеннаяПодсказка - 443 + 523 Label true true @@ -1771,7 +1989,7 @@ ЗакладкиУправлениеПоискомКонтекстноеМеню - 442 + 522 true SearchControlAddition @@ -1782,7 +2000,7 @@ ЗакладкиРасширеннаяПодсказка - 434 + 514 Label true true @@ -1793,32 +2011,6 @@ ЗакладкиКонтекстноеМеню 120 - - ЗакладкиОтветственный - 125 - true - true - - true - - - ЗакладкиОтветственныйРасширеннаяПодсказка - 430 - Label - true - true - - Left - - - Form.Command.Ответственный - Normal - Auto - true - true - UserCmds - Auto - ЗакладкиКонтекстноеМенюРассмотрено 126 @@ -1829,7 +2021,7 @@ ЗакладкиКонтекстноеМенюРассмотреноРасширеннаяПодсказка - 431 + 507 Label true true @@ -1845,32 +2037,6 @@ UserCmds Auto - - ЗакладкиКонтекстноеМенюПредмет - 127 - true - true - - true - - - ЗакладкиКонтекстноеМенюПредметРасширеннаяПодсказка - 432 - Label - true - true - - Left - - - Form.Command.Предмет - Normal - Auto - true - true - UserCmds - Auto - ЗакладкиКонтекстноеМенюОтложитьРассмотрение 128 @@ -1881,7 +2047,7 @@ ЗакладкиКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка - 433 + 508 Label true true @@ -1897,7 +2063,140 @@ UserCmds Auto - true + + ЗакладкиОтветственный + 125 + true + true + + true + + + ЗакладкиОтветственныйРасширеннаяПодсказка + 509 + Label + true + true + + Left + + + Form.Command.Ответственный + Normal + Auto + true + true + UserCmds + Auto + + + ЗакладкиКонтекстноеМенюПредмет + 127 + true + true + + true + + + ЗакладкиКонтекстноеМенюПредметРасширеннаяПодсказка + 510 + Label + true + true + + Left + + + Form.Command.Предмет + Normal + Auto + true + true + UserCmds + Auto + + + ЗакладкиКонтекстноеМенюСтандартныеКоманды + 398 + + ЗакладкиОбновить + 399 + true + true + + true + + + ЗакладкиОбновитьРасширеннаяПодсказка + 512 + Label + true + true + + Left + + + Form.Item.Закладки.StandardCommand.Refresh + Normal + Auto + true + true + UserCmds + Auto + + + ЗакладкиВывестиСписок + 400 + true + true + + true + + + ЗакладкиВывестиСписокРасширеннаяПодсказка + 513 + Label + true + true + + Left + + + Form.Item.Закладки.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Закладки контекстное меню стандартные команды</value> + + + ru + Закладки контекстное меню стандартные команды + + + ЗакладкиКонтекстноеМенюСтандартныеКомандыРасширеннаяПодсказка + 511 + Label + true + true + + Left + + + + Item.Закладки + + Tree true @@ -1953,7 +2252,7 @@ СтраницаЗакладкиРасширеннаяПодсказка - 429 + 506 Label true true @@ -1991,7 +2290,6 @@ List MoveDown MoveUp - OutputList SortListAsc SortListDesc Tree @@ -2012,7 +2310,7 @@ None СвойстваПредставлениеРасширеннаяПодсказка - 473 + 556 Label true true @@ -2052,7 +2350,7 @@ СвойстваНомерКартинкиРасширеннаяПодсказка - 475 + 558 Label true true @@ -2097,7 +2395,7 @@ СвойстваГруппаКолонокРасширеннаяПодсказка - 472 + 555 Label true true @@ -2131,10 +2429,10 @@ СвойстваСтрокаПоиска - 463 + 546 СвойстваСтрокаПоискаРасширеннаяПодсказка - 465 + 548 Label true true @@ -2144,7 +2442,7 @@ СвойстваСтрокаПоискаКонтекстноеМеню - 464 + 547 true Свойства @@ -2154,10 +2452,10 @@ СвойстваСостояниеПросмотра - 466 + 549 СвойстваСостояниеПросмотраРасширеннаяПодсказка - 468 + 551 Label true true @@ -2167,7 +2465,7 @@ СвойстваСостояниеПросмотраКонтекстноеМеню - 467 + 550 true ViewStatusAddition @@ -2178,10 +2476,10 @@ СвойстваУправлениеПоиском - 469 + 552 СвойстваУправлениеПоискомРасширеннаяПодсказка - 471 + 554 Label true true @@ -2191,7 +2489,7 @@ СвойстваУправлениеПоискомКонтекстноеМеню - 470 + 553 true SearchControlAddition @@ -2202,7 +2500,7 @@ СвойстваРасширеннаяПодсказка - 462 + 545 Label true true @@ -2213,17 +2511,129 @@ СвойстваКонтекстноеМеню 131 - - СвойстваКонтекстноеМенюОтветственный - 138 + + СвойстваКонтекстноеМенюГруппаРассмотрено + 401 + + СвойстваКонтекстноеМенюРассмотрено + 139 + true + true + + true + + + СвойстваКонтекстноеМенюРассмотреноРасширеннаяПодсказка + 536 + Label + true + true + + Left + + + Form.Command.Рассмотрено + Normal + Auto + true + true + UserCmds + Auto + + + СвойстваКонтекстноеМенюОтложитьРассмотрение + 141 + true + true + + true + + + СвойстваКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка + 537 + Label + true + true + + Left + + + Form.Command.ОтложитьРассмотрение + Normal + Auto + true + true + UserCmds + Auto + + + СвойстваКонтекстноеМенюОтветственный + 138 + true + true + + true + + + СвойстваКонтекстноеМенюОтветственныйРасширеннаяПодсказка + 538 + Label + true + true + + Left + + + Form.Command.Ответственный + Normal + Auto + true + true + UserCmds + Auto + + + СвойстваКонтекстноеМенюПредмет + 140 + true + true + + true + + + СвойстваКонтекстноеМенюПредметРасширеннаяПодсказка + 539 + Label + true + true + + Left + + + Form.Command.Предмет + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Свойства контекстное меню группа рассмотрено</value> + + + ru + Свойства контекстное меню группа рассмотрено + - СвойстваКонтекстноеМенюОтветственныйРасширеннаяПодсказка - 455 + СвойстваКонтекстноеМенюГруппаРассмотреноРасширеннаяПодсказка + 535 Label true true @@ -2231,91 +2641,7 @@ Left - Form.Command.Ответственный - Normal - Auto - true - true - UserCmds - Auto - - - СвойстваКонтекстноеМенюРассмотрено - 139 - true - true - - true - - - СвойстваКонтекстноеМенюРассмотреноРасширеннаяПодсказка - 456 - Label - true - true - - Left - - - Form.Command.Рассмотрено - Normal - Auto - true - true - UserCmds - Auto - - - СвойстваКонтекстноеМенюПредмет - 140 - true - true - - true - - - СвойстваКонтекстноеМенюПредметРасширеннаяПодсказка - 457 - Label - true - true - - Left - - - Form.Command.Предмет - Normal - Auto - true - true - UserCmds - Auto - - - СвойстваКонтекстноеМенюОтложитьРассмотрение - 141 - true - true - - true - - - СвойстваКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка - 458 - Label - true - true - - Left - - - Form.Command.ОтложитьРассмотрение - Normal - Auto - true - true - UserCmds - Auto + СвойстваКонтекстноеМенюДобавитьВЗакладки @@ -2327,7 +2653,7 @@ СвойстваКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка - 459 + 540 Label true true @@ -2346,6 +2672,32 @@ СвойстваКонтекстноеМенюГруппаОбновить 205 + + СвойстваКонтекстноеМенюКопироватьВБуферОбмена + 402 + true + true + + true + + + СвойстваКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 542 + Label + true + true + + Left + + + Form.Item.Свойства.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + СвойстваКонтекстноеМенюОбновить 206 @@ -2356,7 +2708,7 @@ СвойстваКонтекстноеМенюОбновитьРасширеннаяПодсказка - 461 + 543 Label true true @@ -2372,6 +2724,32 @@ UserCmds Auto + + СвойстваКонтекстноеМенюВывестиСписок + 403 + true + true + + true + + + СвойстваКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 544 + Label + true + true + + Left + + + Form.Item.Свойства.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + true true @@ -2387,7 +2765,7 @@ СвойстваКонтекстноеМенюГруппаОбновитьРасширеннаяПодсказка - 460 + 541 Label true true @@ -2447,7 +2825,7 @@ СтраницаСвойстваРасширеннаяПодсказка - 454 + 534 Label true true @@ -2485,7 +2863,6 @@ List MoveDown MoveUp - OutputList SortListAsc SortListDesc Tree @@ -2506,7 +2883,7 @@ None РеквизитыПредметаНомерКартинкиРасширеннаяПодсказка - 505 + 591 Label true true @@ -2549,7 +2926,7 @@ None РеквизитыПредметаПредставлениеРасширеннаяПодсказка - 507 + 593 Label true true @@ -2593,7 +2970,7 @@ true РеквизитыПредметаГруппаКолонокРасширеннаяПодсказка - 504 + 590 Label true true @@ -2643,10 +3020,10 @@ РеквизитыПредметаСтрокаПоиска - 495 + 581 РеквизитыПредметаСтрокаПоискаРасширеннаяПодсказка - 497 + 583 Label true true @@ -2656,7 +3033,7 @@ РеквизитыПредметаСтрокаПоискаКонтекстноеМеню - 496 + 582 true РеквизитыПредмета @@ -2666,10 +3043,10 @@ РеквизитыПредметаСостояниеПросмотра - 498 + 584 РеквизитыПредметаСостояниеПросмотраРасширеннаяПодсказка - 500 + 586 Label true true @@ -2679,7 +3056,7 @@ РеквизитыПредметаСостояниеПросмотраКонтекстноеМеню - 499 + 585 true ViewStatusAddition @@ -2690,10 +3067,10 @@ РеквизитыПредметаУправлениеПоиском - 501 + 587 РеквизитыПредметаУправлениеПоискомРасширеннаяПодсказка - 503 + 589 Label true true @@ -2703,7 +3080,7 @@ РеквизитыПредметаУправлениеПоискомКонтекстноеМеню - 502 + 588 true SearchControlAddition @@ -2714,7 +3091,7 @@ РеквизитыПредметаРасширеннаяПодсказка - 494 + 580 Label true true @@ -2725,17 +3102,129 @@ РеквизитыПредметаКонтекстноеМеню 156 - - РеквизитыПредметаКонтекстноеМенюИзменитьЗначениеПанелиНавигации - 328 + + РеквизитыПредметаКонтекстноеМенюГруппаРассмотрено + 404 + + РеквизитыПредметаКонтекстноеМенюРассмотрено + 172 + true + true + + true + + + РеквизитыПредметаКонтекстноеМенюРассмотреноРасширеннаяПодсказка + 570 + Label + true + true + + Left + + + Form.Command.Рассмотрено + Normal + Auto + true + true + UserCmds + Auto + + + РеквизитыПредметаКонтекстноеМенюОтложитьРассмотрение + 174 + true + true + + true + + + РеквизитыПредметаКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка + 571 + Label + true + true + + Left + + + Form.Command.ОтложитьРассмотрение + Normal + Auto + true + true + UserCmds + Auto + + + РеквизитыПредметаКонтекстноеМенюОтветственный + 171 + true + true + + true + + + РеквизитыПредметаКонтекстноеМенюОтветственныйРасширеннаяПодсказка + 572 + Label + true + true + + Left + + + Form.Command.Ответственный + Normal + Auto + true + true + UserCmds + Auto + + + РеквизитыПредметаКонтекстноеМенюПредмет + 173 + true + true + + true + + + РеквизитыПредметаКонтекстноеМенюПредметРасширеннаяПодсказка + 573 + Label + true + true + + Left + + + Form.Command.Предмет + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Реквизиты предмета контекстное меню группа рассмотрено</value> + + + ru + Реквизиты предмета контекстное меню группа рассмотрено + - РеквизитыПредметаКонтекстноеМенюИзменитьЗначениеПанелиНавигацииРасширеннаяПодсказка - 486 + РеквизитыПредметаКонтекстноеМенюГруппаРассмотреноРасширеннаяПодсказка + 569 Label true true @@ -2743,117 +3232,7 @@ Left - Form.Command.ИзменитьЗначениеПанелиНавигации - Normal - Auto - true - true - UserCmds - Auto - - - РеквизитыПредметаКонтекстноеМенюОтветственный - 171 - true - true - - true - - - РеквизитыПредметаКонтекстноеМенюОтветственныйРасширеннаяПодсказка - 487 - Label - true - true - - Left - - - Form.Command.Ответственный - Normal - Auto - true - true - UserCmds - Auto - - - РеквизитыПредметаКонтекстноеМенюРассмотрено - 172 - true - true - - true - - - РеквизитыПредметаКонтекстноеМенюРассмотреноРасширеннаяПодсказка - 488 - Label - true - true - - Left - - - Form.Command.Рассмотрено - Normal - Auto - true - true - UserCmds - Auto - - - РеквизитыПредметаКонтекстноеМенюПредмет - 173 - true - true - - true - - - РеквизитыПредметаКонтекстноеМенюПредметРасширеннаяПодсказка - 489 - Label - true - true - - Left - - - Form.Command.Предмет - Normal - Auto - true - true - UserCmds - Auto - - - РеквизитыПредметаКонтекстноеМенюОтложитьРассмотрение - 174 - true - true - - true - - - РеквизитыПредметаКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка - 490 - Label - true - true - - Left - - - Form.Command.ОтложитьРассмотрение - Normal - Auto - true - true - UserCmds - Auto + РеквизитыПредметаКонтекстноеМенюДобавитьВЗакладки @@ -2865,7 +3244,7 @@ РеквизитыПредметаКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка - 491 + 574 Label true true @@ -2881,9 +3260,61 @@ UserCmds Auto + + РеквизитыПредметаКонтекстноеМенюИзменитьЗначениеПанелиНавигации + 328 + true + true + + true + + + РеквизитыПредметаКонтекстноеМенюИзменитьЗначениеПанелиНавигацииРасширеннаяПодсказка + 575 + Label + true + true + + Left + + + Form.Command.ИзменитьЗначениеПанелиНавигации + Normal + Auto + true + true + UserCmds + Auto + РеквизитыПредметаКонтекстноеМенюГруппаОбновить 207 + + РеквизитыПредметаКонтекстноеМенюКопироватьВБуферОбмена + 405 + true + true + + true + + + РеквизитыПредметаКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 577 + Label + true + true + + Left + + + Form.Item.РеквизитыПредмета.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + РеквизитыПредметаКонтекстноеМенюОбновить 208 @@ -2894,7 +3325,7 @@ РеквизитыПредметаКонтекстноеМенюОбновитьРасширеннаяПодсказка - 493 + 578 Label true true @@ -2910,6 +3341,32 @@ UserCmds Auto + + РеквизитыПредметаКонтекстноеМенюВывестиСписок + 406 + true + true + + true + + + РеквизитыПредметаКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 579 + Label + true + true + + Left + + + Form.Item.РеквизитыПредмета.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + true true @@ -2925,7 +3382,7 @@ РеквизитыПредметаКонтекстноеМенюГруппаОбновитьРасширеннаяПодсказка - 492 + 576 Label true true @@ -2987,7 +3444,7 @@ ПоказыватьВсеАктивныеПредметыРеквизитыПредметаРасширеннаяПодсказка - 517 + 603 Label true true @@ -3022,7 +3479,7 @@ СтраницаРеквизитыПредметаРасширеннаяПодсказка - 485 + 568 Label true true @@ -3058,7 +3515,6 @@ List MoveDown MoveUp - OutputList SortListAsc SortListDesc Tree @@ -3079,7 +3535,7 @@ None ПапкиНомерКартинкиРасширеннаяПодсказка - 539 + 632 Label true true @@ -3122,7 +3578,7 @@ None ПапкиПредставлениеРасширеннаяПодсказка - 541 + 634 Label true true @@ -3166,7 +3622,7 @@ true ПапкиГруппаКолонокРасширеннаяПодсказка - 538 + 631 Label true true @@ -3224,10 +3680,10 @@ ПапкиСтрокаПоиска - 529 + 622 ПапкиСтрокаПоискаРасширеннаяПодсказка - 531 + 624 Label true true @@ -3237,7 +3693,7 @@ ПапкиСтрокаПоискаКонтекстноеМеню - 530 + 623 true Папки @@ -3247,10 +3703,10 @@ ПапкиСостояниеПросмотра - 532 + 625 ПапкиСостояниеПросмотраРасширеннаяПодсказка - 534 + 627 Label true true @@ -3260,7 +3716,7 @@ ПапкиСостояниеПросмотраКонтекстноеМеню - 533 + 626 true ViewStatusAddition @@ -3271,10 +3727,10 @@ ПапкиУправлениеПоиском - 535 + 628 ПапкиУправлениеПоискомРасширеннаяПодсказка - 537 + 630 Label true true @@ -3284,7 +3740,7 @@ ПапкиУправлениеПоискомКонтекстноеМеню - 536 + 629 true SearchControlAddition @@ -3295,7 +3751,7 @@ ПапкиРасширеннаяПодсказка - 528 + 621 Label true true @@ -3306,17 +3762,103 @@ ПапкиКонтекстноеМеню 179 - - ПапкиКонтекстноеМенюИзменитьЗначениеПанелиНавигации - 329 + + ПапкиКонтекстноеМенюГруппаРассмотрено + 387 + + ПапкиКонтекстноеМенюРассмотрено + 187 + true + true + + true + + + ПапкиКонтекстноеМенюРассмотреноРасширеннаяПодсказка + 607 + Label + true + true + + Left + + + Form.Command.Рассмотрено + Normal + Auto + true + true + UserCmds + Auto + + + ПапкиКонтекстноеМенюОтложитьРассмотрение + 189 + true + true + + true + + + ПапкиКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка + 608 + Label + true + true + + Left + + + Form.Command.ОтложитьРассмотрение + Normal + Auto + true + true + UserCmds + Auto + + + ПапкиКонтекстноеМенюОтветственный + 186 + true + true + + true + + + ПапкиКонтекстноеМенюОтветственныйРасширеннаяПодсказка + 609 + Label + true + true + + Left + + + Form.Command.Ответственный + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Папки контекстное меню группа рассмотрено</value> + + + ru + Папки контекстное меню группа рассмотрено + - ПапкиКонтекстноеМенюИзменитьЗначениеПанелиНавигацииРасширеннаяПодсказка - 520 + ПапкиКонтекстноеМенюГруппаРассмотреноРасширеннаяПодсказка + 606 Label true true @@ -3324,25 +3866,19 @@ Left - Form.Command.ИзменитьЗначениеПанелиНавигации - Normal - Auto - true - true - UserCmds - Auto + - ПапкиКонтекстноеМенюОтветственный - 186 + ПапкиКонтекстноеМенюДобавитьВЗакладки + 394 true true true - ПапкиКонтекстноеМенюОтветственныйРасширеннаяПодсказка - 521 + ПапкиКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка + 610 Label true true @@ -3350,59 +3886,7 @@ Left - Form.Command.Ответственный - Normal - Auto - true - true - UserCmds - Auto - - - ПапкиКонтекстноеМенюРассмотрено - 187 - true - true - - true - - - ПапкиКонтекстноеМенюРассмотреноРасширеннаяПодсказка - 522 - Label - true - true - - Left - - - Form.Command.Рассмотрено - Normal - Auto - true - true - UserCmds - Auto - - - ПапкиКонтекстноеМенюОтложитьРассмотрение - 189 - true - true - - true - - - ПапкиКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка - 523 - Label - true - true - - Left - - - Form.Command.ОтложитьРассмотрение + Form.Command.ДобавитьВЗакладки Normal Auto true @@ -3420,7 +3904,7 @@ ПапкиКонтекстноеМенюПрименитьПравилаОбработкиРасширеннаяПодсказка - 524 + 611 Label true true @@ -3446,7 +3930,7 @@ ПапкиКонтекстноеМенюПеренестиВПапкуРасширеннаяПодсказка - 525 + 612 Label true true @@ -3462,9 +3946,145 @@ UserCmds Auto + + ПапкиКонтекстноеМенюГруппаИзменить + 389 + + ПапкиКонтекстноеМенюДобавить + 384 + + <key>ru</key> + <value>Создать папку</value> + + true + true + + true + + + ПапкиКонтекстноеМенюДобавитьРасширеннаяПодсказка + 614 + Label + true + true + + Left + + + Form.Item.Папки.StandardCommand.Add + Normal + Auto + true + true + UserCmds + Auto + + + ПапкиКонтекстноеМенюИзменитьЗначениеПанелиНавигации + 329 + true + true + + true + + + ПапкиКонтекстноеМенюИзменитьЗначениеПанелиНавигацииРасширеннаяПодсказка + 615 + Label + true + true + + Left + + + Form.Command.ИзменитьЗначениеПанелиНавигации + Normal + Auto + true + true + UserCmds + Auto + + + ПапкиКонтекстноеМенюУдалить + 385 + true + true + + true + + + ПапкиКонтекстноеМенюУдалитьРасширеннаяПодсказка + 616 + Label + true + true + + Left + + + Form.Item.Папки.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Папки контекстное меню группа изменить</value> + + + ru + Папки контекстное меню группа изменить + + + ПапкиКонтекстноеМенюГруппаИзменитьРасширеннаяПодсказка + 613 + Label + true + true + + Left + + + + ПапкиКонтекстноеМенюГруппаОбновить 209 + + ПапкиКонтекстноеМенюКопироватьВБуферОбмена + 388 + true + true + + true + + + ПапкиКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 618 + Label + true + true + + Left + + + Form.Item.Папки.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + ПапкиКонтекстноеМенюОбновить 210 @@ -3475,7 +4095,7 @@ ПапкиКонтекстноеМенюОбновитьРасширеннаяПодсказка - 527 + 619 Label true true @@ -3491,6 +4111,32 @@ UserCmds Auto + + ПапкиКонтекстноеМенюВывестиСписок + 386 + true + true + + true + + + ПапкиКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 620 + Label + true + true + + Left + + + Form.Item.Папки.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + true true @@ -3506,7 +4152,7 @@ ПапкиКонтекстноеМенюГруппаОбновитьРасширеннаяПодсказка - 526 + 617 Label true true @@ -3566,7 +4212,7 @@ СтраницаПапкиРасширеннаяПодсказка - 519 + 605 Label true true @@ -3623,7 +4269,7 @@ None КатегорииНомерКартинкиРасширеннаяПодсказка - 570 + 666 Label true true @@ -3669,7 +4315,7 @@ None КатегорииПредставлениеРасширеннаяПодсказка - 572 + 668 Label true true @@ -3706,7 +4352,7 @@ true КатегорииГруппаКолонокРасширеннаяПодсказка - 569 + 665 Label true true @@ -3732,10 +4378,10 @@ КатегорииСтрокаПоиска - 560 + 656 КатегорииСтрокаПоискаРасширеннаяПодсказка - 562 + 658 Label true true @@ -3745,7 +4391,7 @@ КатегорииСтрокаПоискаКонтекстноеМеню - 561 + 657 true Категории @@ -3755,10 +4401,10 @@ КатегорииСостояниеПросмотра - 563 + 659 КатегорииСостояниеПросмотраРасширеннаяПодсказка - 565 + 661 Label true true @@ -3768,7 +4414,7 @@ КатегорииСостояниеПросмотраКонтекстноеМеню - 564 + 660 true ViewStatusAddition @@ -3779,10 +4425,10 @@ КатегорииУправлениеПоиском - 566 + 662 КатегорииУправлениеПоискомРасширеннаяПодсказка - 568 + 664 Label true true @@ -3792,7 +4438,7 @@ КатегорииУправлениеПоискомКонтекстноеМеню - 567 + 663 true SearchControlAddition @@ -3803,7 +4449,7 @@ КатегорииРасширеннаяПодсказка - 559 + 655 Label true true @@ -3814,17 +4460,129 @@ КатегорииКонтекстноеМеню 307 - - КатегорииКонтекстноеМенюОтветственный - 316 + + КатегорииКонтекстноеМенюГруппаРассмотрено + 407 + + КатегорииКонтекстноеМенюРассмотрено + 318 + true + true + + true + + + КатегорииКонтекстноеМенюРассмотреноРасширеннаяПодсказка + 646 + Label + true + true + + Left + + + Form.Command.Рассмотрено + Normal + Auto + true + true + UserCmds + Auto + + + КатегорииКонтекстноеМенюОтложитьРассмотрение + 320 + true + true + + true + + + КатегорииКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка + 647 + Label + true + true + + Left + + + Form.Command.ОтложитьРассмотрение + Normal + Auto + true + true + UserCmds + Auto + + + КатегорииКонтекстноеМенюОтветственный + 316 + true + true + + true + + + КатегорииКонтекстноеМенюОтветственныйРасширеннаяПодсказка + 648 + Label + true + true + + Left + + + Form.Command.Ответственный + Normal + Auto + true + true + UserCmds + Auto + + + КатегорииКонтекстноеМенюПредмет + 319 + true + true + + true + + + КатегорииКонтекстноеМенюПредметРасширеннаяПодсказка + 649 + Label + true + true + + Left + + + Form.Command.Предмет + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Категории контекстное меню группа рассмотрено</value> + + + ru + Категории контекстное меню группа рассмотрено + - КатегорииКонтекстноеМенюОтветственныйРасширеннаяПодсказка - 552 + КатегорииКонтекстноеМенюГруппаРассмотреноРасширеннаяПодсказка + 645 Label true true @@ -3832,91 +4590,7 @@ Left - Form.Command.Ответственный - Normal - Auto - true - true - UserCmds - Auto - - - КатегорииКонтекстноеМенюРассмотрено - 318 - true - true - - true - - - КатегорииКонтекстноеМенюРассмотреноРасширеннаяПодсказка - 553 - Label - true - true - - Left - - - Form.Command.Рассмотрено - Normal - Auto - true - true - UserCmds - Auto - - - КатегорииКонтекстноеМенюПредмет - 319 - true - true - - true - - - КатегорииКонтекстноеМенюПредметРасширеннаяПодсказка - 554 - Label - true - true - - Left - - - Form.Command.Предмет - Normal - Auto - true - true - UserCmds - Auto - - - КатегорииКонтекстноеМенюОтложитьРассмотрение - 320 - true - true - - true - - - КатегорииКонтекстноеМенюОтложитьРассмотрениеРасширеннаяПодсказка - 555 - Label - true - true - - Left - - - Form.Command.ОтложитьРассмотрение - Normal - Auto - true - true - UserCmds - Auto + КатегорииКонтекстноеМенюДобавитьВЗакладки @@ -3928,7 +4602,7 @@ КатегорииКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка - 556 + 650 Label true true @@ -3947,6 +4621,32 @@ КатегорииКонтекстноеМенюГруппаОбновить 315 + + КатегорииКонтекстноеМенюКопироватьВБуферОбмена + 408 + true + true + + true + + + КатегорииКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 652 + Label + true + true + + Left + + + Form.Item.Категории.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + КатегорииКонтекстноеМенюОбновить 314 @@ -3957,7 +4657,7 @@ КатегорииКонтекстноеМенюОбновитьРасширеннаяПодсказка - 558 + 653 Label true true @@ -3973,6 +4673,32 @@ UserCmds Auto + + КатегорииКонтекстноеМенюВывестиСписок + 409 + true + true + + true + + + КатегорииКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 654 + Label + true + true + + Left + + + Form.Item.Категории.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + true true @@ -3988,7 +4714,7 @@ КатегорииКонтекстноеМенюГруппаОбновитьРасширеннаяПодсказка - 557 + 651 Label true true @@ -4048,7 +4774,7 @@ СтраницаКатегорииРасширеннаяПодсказка - 551 + 644 Label true true @@ -4077,7 +4803,7 @@ СтраницыПанелиНавигацииРасширеннаяПодсказка - 363 + 433 Label true true @@ -4105,7 +4831,7 @@ ГруппаПанельНавигацииРасширеннаяПодсказка - 356 + 426 Label true true @@ -4158,7 +4884,7 @@ ВажностьНомерКартинкиРасширеннаяПодсказка - 626 + 730 Label true true @@ -4173,6 +4899,9 @@ PictureField Enter + + CommonPicture.ВосклицательныйЗнакСерый + Left true @@ -4205,7 +4934,7 @@ ЕстьВложенияРасширеннаяПодсказка - 628 + 732 Label true true @@ -4252,7 +4981,7 @@ НомерКартинкиРасширеннаяПодсказка - 630 + 734 Label true true @@ -4298,7 +5027,7 @@ ДатаРасширеннаяПодсказка - 632 + 736 Label true true @@ -4333,7 +5062,7 @@ УчастникиРасширеннаяПодсказка - 634 + 738 Label true true @@ -4369,7 +5098,7 @@ ТемаРасширеннаяПодсказка - 636 + 740 Label true true @@ -4408,7 +5137,7 @@ СписокСоздатьВстречуРасширеннаяПодсказка - 588 + 693 Label true true @@ -4434,7 +5163,7 @@ СписокСоздатьЗапланированноеВзаимодействиеРасширеннаяПодсказка - 589 + 694 Label true true @@ -4460,7 +5189,7 @@ СписокСоздатьТелефонныйЗвонокРасширеннаяПодсказка - 590 + 695 Label true true @@ -4486,7 +5215,7 @@ СписокСоздатьЭлектронноеПисьмоРасширеннаяПодсказка - 591 + 696 Label true true @@ -4517,7 +5246,7 @@ ГруппаСоздатьРасширеннаяПодсказка - 587 + 692 Label true true @@ -4548,7 +5277,7 @@ СписокСоздатьЭлектронноеПисьмоОтдельнаяКнопкаРасширеннаяПодсказка - 592 + 697 Label true true @@ -4567,6 +5296,191 @@ Auto + + СписокОтправитьПолучитьПочту + 59 + true + true + + true + + + СписокОтправитьПолучитьПочтуРасширеннаяПодсказка + 698 + Label + true + true + + Left + + + Form.Command.ОтправитьПолучитьПочту + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаРассмотрено + 410 + + СписокРассмотрено + 40 + true + true + + true + + + СписокРассмотреноРасширеннаяПодсказка + 700 + Label + true + true + + Left + + + Form.Command.УстановитьПризнакРассмотрено + Normal + PictureAndText + true + true + UserCmds + Auto + + + СписокОтложитьРассмотрение + 42 + true + true + + true + + + СписокОтложитьРассмотрениеРасширеннаяПодсказка + 701 + Label + true + true + + Left + + + Form.Command.ОтложитьРассмотрениеСписок + Normal + Auto + true + true + UserCmds + Auto + + + СписокНеРассмотрено + 191 + true + true + + true + + + СписокНеРассмотреноРасширеннаяПодсказка + 702 + Label + true + true + + Left + + + Form.Command.СнятьПризнакРассмотрено + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокОтветственный + 39 + true + true + + true + + + СписокОтветственныйРасширеннаяПодсказка + 703 + Label + true + true + + Left + + + Form.Command.ОтветственныйСписок + Normal + Auto + true + true + UserCmds + Auto + + + СписокПредмет + 41 + true + true + + true + + + СписокПредметРасширеннаяПодсказка + 704 + Label + true + true + + Left + + + Form.Command.ПредметСписок + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа рассмотрено</value> + + + ru + Группа рассмотрено + + + ГруппаРассмотреноРасширеннаяПодсказка + 699 + Label + true + true + + Left + + + + ГруппаКомандыСписка 48 @@ -4580,7 +5494,7 @@ ИзменитьРасширеннаяПодсказка - 594 + 706 Label true true @@ -4606,7 +5520,7 @@ СкопироватьРасширеннаяПодсказка - 595 + 707 Label true true @@ -4621,6 +5535,7 @@ true UserCmds Auto + InAdditionalSubmenu ГруппаСписокУстановитьПометкуУдаления @@ -4635,7 +5550,7 @@ УстановитьПометкуУдаленияРасширеннаяПодсказка - 597 + 709 Label true true @@ -4650,6 +5565,7 @@ true UserCmds Auto + InAdditionalSubmenu true true @@ -4666,61 +5582,7 @@ ГруппаСписокУстановитьПометкуУдаленияРасширеннаяПодсказка - 596 - Label - true - true - - Left - - - -
    - - ГруппаУстановитьИнтервал - 53 - - УстановитьИнтервалДат - 54 - true - true - - true - - - УстановитьИнтервалДатРасширеннаяПодсказка - 599 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.SetDateInterval - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа установить интервал</value> - - - ru - Группа установить интервал - - - ГруппаУстановитьИнтервалРасширеннаяПодсказка - 598 + 708 Label true true @@ -4743,7 +5605,7 @@ НайтиРасширеннаяПодсказка - 601 + 711 Label true true @@ -4758,6 +5620,60 @@ true UserCmds Auto + InAdditionalSubmenu + + + ОтменитьПоиск + 58 + true + true + + true + + + ОтменитьПоискРасширеннаяПодсказка + 712 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + УстановитьИнтервалДат + 54 + true + true + + true + + + УстановитьИнтервалДатРасширеннаяПодсказка + 713 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.SetDateInterval + Normal + Auto + true + true + UserCmds + Auto true true @@ -4774,57 +5690,7 @@ ГруппаНайтиРасширеннаяПодсказка - 600 - Label - true - true - - Left - - - -
    - - ГруппаОтменитьПоиск - 57 - - ОтменитьПоиск - 58 - true - true - - true - - - ОтменитьПоискРасширеннаяПодсказка - 603 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - ru - Группа отменить поиск - - - ГруппаОтменитьПоискРасширеннаяПодсказка - 602 + 710 Label true true @@ -4849,7 +5715,7 @@ ГруппаКомандыСпискаРасширеннаяПодсказка - 593 + 705 Label true true @@ -4859,163 +5725,6 @@ - - СписокОтветственный - 39 - true - true - - true - - - СписокОтветственныйРасширеннаяПодсказка - 604 - Label - true - true - - Left - - - Form.Command.ОтветственныйСписок - Normal - Auto - true - true - UserCmds - Auto - - - СписокНеРассмотрено - 191 - true - true - - true - - - СписокНеРассмотреноРасширеннаяПодсказка - 605 - Label - true - true - - Left - - - Form.Command.СнятьПризнакРассмотрено - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокРассмотрено - 40 - true - true - - true - - - СписокРассмотреноРасширеннаяПодсказка - 606 - Label - true - true - - Left - - - Form.Command.УстановитьПризнакРассмотрено - Normal - Auto - true - true - UserCmds - Auto - - - СписокОтложитьРассмотрение - 42 - true - true - - true - - - СписокОтложитьРассмотрениеРасширеннаяПодсказка - 607 - Label - true - true - - Left - - - Form.Command.ОтложитьРассмотрениеСписок - Normal - Auto - true - true - UserCmds - Auto - - - СписокПредмет - 41 - true - true - - true - - - СписокПредметРасширеннаяПодсказка - 608 - Label - true - true - - Left - - - Form.Command.ПредметСписок - Normal - Auto - true - true - UserCmds - Auto - - - СписокОтправитьПолучитьПочту - 59 - true - true - - true - - - СписокОтправитьПолучитьПочтуРасширеннаяПодсказка - 609 - Label - true - true - - Left - - - Form.Command.ОтправитьПолучитьПочту - Normal - Auto - true - true - UserCmds - Auto - СписокОбновить 60 @@ -5026,7 +5735,7 @@ СписокОбновитьРасширеннаяПодсказка - 610 + 714 Label true true @@ -5053,7 +5762,7 @@ СписокНастройкаСпискаРасширеннаяПодсказка - 611 + 715 Label true true @@ -5079,7 +5788,7 @@ СписокВывестиСписокРасширеннаяПодсказка - 612 + 716 Label true true @@ -5105,7 +5814,7 @@ СписокСправкаРасширеннаяПодсказка - 613 + 717 Label true true @@ -5131,7 +5840,7 @@ СписокИзменитьФормуРасширеннаяПодсказка - 614 + 718 Label true true @@ -5157,7 +5866,7 @@ ФормаПерсональныеНастройкиРасширеннаяПодсказка - 615 + 719 Label true true @@ -5198,10 +5907,10 @@ СписокСтрокаПоиска - 617 + 721 СписокСтрокаПоискаРасширеннаяПодсказка - 619 + 723 Label true true @@ -5211,7 +5920,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 618 + 722 true Список @@ -5221,10 +5930,10 @@ СписокСостояниеПросмотра - 620 + 724 СписокСостояниеПросмотраРасширеннаяПодсказка - 622 + 726 Label true true @@ -5234,7 +5943,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 621 + 725 true ViewStatusAddition @@ -5245,10 +5954,10 @@ СписокУправлениеПоиском - 623 + 727 СписокУправлениеПоискомРасширеннаяПодсказка - 625 + 729 Label true true @@ -5258,7 +5967,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 624 + 728 true SearchControlAddition @@ -5269,7 +5978,7 @@ СписокРасширеннаяПодсказка - 616 + 720 Label true true @@ -5280,6 +5989,112 @@ СписокКонтекстноеМеню 3 + + СписокКонтекстноеМенюГруппаРассмотрениеПредмет + 373 + + СписокКонтекстноеМенюУстановитьПризнакРассмотрено + 377 + true + true + + true + + + СписокКонтекстноеМенюУстановитьПризнакРассмотреноРасширеннаяПодсказка + 682 + Label + true + true + + Left + + + Form.Command.УстановитьПризнакРассмотрено + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОтложитьРассмотрениеСписок + 378 + true + true + + true + + + СписокКонтекстноеМенюОтложитьРассмотрениеСписокРасширеннаяПодсказка + 683 + Label + true + true + + Left + + + Form.Command.ОтложитьРассмотрениеСписок + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюПредметСписок + 379 + true + true + + true + + + СписокКонтекстноеМенюПредметСписокРасширеннаяПодсказка + 684 + Label + true + true + + Left + + + Form.Command.ПредметСписок + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список входящие контекстное меню группа рассмотрение предмет входящие</value> + + + ru + Список входящие контекстное меню группа рассмотрение предмет входящие + + + СписокКонтекстноеМенюГруппаРассмотрениеПредметРасширеннаяПодсказка + 681 + Label + true + true + + Left + + + + СписокКонтекстноеМенюДобавитьВЗакладки 142 @@ -5290,7 +6105,7 @@ СписокКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка - 585 + 685 Label true true @@ -5306,6 +6121,32 @@ UserCmds Auto + + СписокКонтекстноеМенюИзменить + 372 + true + true + + true + + + СписокКонтекстноеМенюИзменитьРасширеннаяПодсказка + 686 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + СписокКонтекстноеМенюПеренестиВПапку 198 @@ -5316,7 +6157,7 @@ СписокКонтекстноеМенюПеренестиВПапкуРасширеннаяПодсказка - 586 + 687 Label true true @@ -5332,7 +6173,112 @@ UserCmds Auto - true + + СписокКонтекстноеМенюВзаимодействияПоПредмету + 380 + true + true + + true + + + СписокКонтекстноеМенюВзаимодействияПоПредметуРасширеннаяПодсказка + 688 + Label + true + true + + Left + + + Form.Command.ВзаимодействияПоПредмету + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюГруппаУдалитьКопировать + 381 + + СписокКонтекстноеМенюУстановитьПометкуУдаления + 382 + true + true + + true + + + СписокКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка + 690 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюСкопировать + 383 + true + true + + true + + + СписокКонтекстноеМенюСкопироватьРасширеннаяПодсказка + 691 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа удалить копировать</value> + + + ru + Список контекстное меню группа удалить копировать + + + СписокКонтекстноеМенюГруппаУдалитьКопироватьРасширеннаяПодсказка + 689 + Label + true + true + + Left + + + + HierarchicalList true @@ -5386,7 +6332,7 @@ СтраницаСписокОбычнаяРасширеннаяПодсказка - 584 + 680 Label true true @@ -5430,7 +6376,7 @@ ВажностьНомерКартинкиВходящиеРасширеннаяПодсказка - 685 + 800 Label true true @@ -5445,6 +6391,9 @@ PictureField Enter + + CommonPicture.ВосклицательныйЗнакСерый + Left true @@ -5477,7 +6426,7 @@ ЕстьВложенияВходящиеРасширеннаяПодсказка - 687 + 802 Label true true @@ -5524,7 +6473,7 @@ НомерКартинкиВходящиеРасширеннаяПодсказка - 689 + 804 Label true true @@ -5574,7 +6523,7 @@ УчастникиВходящиеРасширеннаяПодсказка - 691 + 806 Label true true @@ -5611,7 +6560,7 @@ ТемаВходящиеРасширеннаяПодсказка - 693 + 808 Label true true @@ -5651,7 +6600,7 @@ ПолученоОтправленоРасширеннаяПодсказка - 695 + 810 Label true true @@ -5695,7 +6644,7 @@ РазмерВходящиеРасширеннаяПодсказка - 697 + 812 Label true true @@ -5735,7 +6684,7 @@ СписокСоздатьЭлектронноеПисьмоВходящиеРасширеннаяПодсказка - 649 + 764 Label true true @@ -5764,7 +6713,7 @@ СписокВходящиеОтветитьРасширеннаяПодсказка - 650 + 765 Label true true @@ -5793,7 +6742,7 @@ СписокВходящиеОтветитьВсемРасширеннаяПодсказка - 651 + 766 Label true true @@ -5819,7 +6768,7 @@ СписокВходящиеПереслатьРасширеннаяПодсказка - 652 + 767 Label true true @@ -5835,6 +6784,191 @@ UserCmds Auto + + СписокОтправитьПолучитьПочтуВходящие + 248 + true + true + + true + + + СписокОтправитьПолучитьПочтуВходящиеРасширеннаяПодсказка + 768 + Label + true + true + + Left + + + Form.Command.ОтправитьПолучитьПочту + Normal + Auto + true + true + UserCmds + Auto + + + СписокВходящиеГруппаРассмотрено + 411 + + СписокРассмотреноВходящие + 245 + true + true + + true + + + СписокРассмотреноВходящиеРасширеннаяПодсказка + 770 + Label + true + true + + Left + + + Form.Command.УстановитьПризнакРассмотрено + Normal + PictureAndText + true + true + UserCmds + Auto + + + СписокОтложитьРассмотрениеВходящие + 246 + true + true + + true + + + СписокОтложитьРассмотрениеВходящиеРасширеннаяПодсказка + 771 + Label + true + true + + Left + + + Form.Command.ОтложитьРассмотрениеСписок + Normal + Auto + true + true + UserCmds + Auto + + + СписокНеРассмотреноВходящие + 244 + true + true + + true + + + СписокНеРассмотреноВходящиеРасширеннаяПодсказка + 772 + Label + true + true + + Left + + + Form.Command.СнятьПризнакРассмотрено + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокОтветственныйВходящие + 243 + true + true + + true + + + СписокОтветственныйВходящиеРасширеннаяПодсказка + 773 + Label + true + true + + Left + + + Form.Command.ОтветственныйСписок + Normal + Auto + true + true + UserCmds + Auto + + + СписокПредметВходящие + 247 + true + true + + true + + + СписокПредметВходящиеРасширеннаяПодсказка + 774 + Label + true + true + + Left + + + Form.Command.ПредметСписок + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список входящие группа рассмотрено</value> + + + ru + Список входящие группа рассмотрено + + + СписокВходящиеГруппаРассмотреноРасширеннаяПодсказка + 769 + Label + true + true + + Left + + + + ГруппаКомандыСпискаВходящие 232 @@ -5848,7 +6982,7 @@ ИзменитьВходящиеРасширеннаяПодсказка - 654 + 776 Label true true @@ -5874,7 +7008,7 @@ СкопироватьВходящиеРасширеннаяПодсказка - 655 + 777 Label true true @@ -5903,7 +7037,7 @@ УстановитьПометкуУдаленияВходящиеРасширеннаяПодсказка - 657 + 779 Label true true @@ -5918,6 +7052,7 @@ true UserCmds Auto + InAdditionalSubmenu true true @@ -5934,61 +7069,7 @@ ГруппаСписокУстановитьПометкуУдаленияВходящиеРасширеннаяПодсказка - 656 - Label - true - true - - Left - - - - - - ГруппаУстановитьИнтервалВходящие - 237 - - УстановитьИнтервалДатВходящие - 238 - true - true - - true - - - УстановитьИнтервалДатВходящиеРасширеннаяПодсказка - 659 - Label - true - true - - Left - - - Form.Item.СписокВходящие.StandardCommand.SetDateInterval - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа установить интервал</value> - - - ru - Группа установить интервал - - - ГруппаУстановитьИнтервалВходящиеРасширеннаяПодсказка - 658 + 778 Label true true @@ -6011,7 +7092,7 @@ НайтиВходящиеРасширеннаяПодсказка - 661 + 781 Label true true @@ -6026,6 +7107,60 @@ true UserCmds Auto + InAdditionalSubmenu + + + ОтменитьПоискВходящие + 242 + true + true + + true + + + ОтменитьПоискВходящиеРасширеннаяПодсказка + 782 + Label + true + true + + Left + + + Form.Item.СписокВходящие.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + УстановитьИнтервалДатВходящие + 238 + true + true + + true + + + УстановитьИнтервалДатВходящиеРасширеннаяПодсказка + 783 + Label + true + true + + Left + + + Form.Item.СписокВходящие.StandardCommand.SetDateInterval + Normal + Auto + true + true + UserCmds + Auto true true @@ -6042,7 +7177,7 @@ ГруппаНайтиВходящиеРасширеннаяПодсказка - 660 + 780 Label true true @@ -6055,32 +7190,6 @@ ГруппаОтменитьПоискВходящие 241 - - ОтменитьПоискВходящие - 242 - true - true - - true - - - ОтменитьПоискВходящиеРасширеннаяПодсказка - 663 - Label - true - true - - Left - - - Form.Item.СписокВходящие.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - true true @@ -6096,7 +7205,7 @@ ГруппаОтменитьПоискВходящиеРасширеннаяПодсказка - 662 + 784 Label true true @@ -6121,7 +7230,7 @@ ГруппаКомандыСпискаВходящиеРасширеннаяПодсказка - 653 + 775 Label true true @@ -6131,163 +7240,6 @@ - - СписокОтветственныйВходящие - 243 - true - true - - true - - - СписокОтветственныйВходящиеРасширеннаяПодсказка - 664 - Label - true - true - - Left - - - Form.Command.ОтветственныйСписок - Normal - Auto - true - true - UserCmds - Auto - - - СписокНеРассмотреноВходящие - 244 - true - true - - true - - - СписокНеРассмотреноВходящиеРасширеннаяПодсказка - 665 - Label - true - true - - Left - - - Form.Command.СнятьПризнакРассмотрено - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокРассмотреноВходящие - 245 - true - true - - true - - - СписокРассмотреноВходящиеРасширеннаяПодсказка - 666 - Label - true - true - - Left - - - Form.Command.УстановитьПризнакРассмотрено - Normal - Auto - true - true - UserCmds - Auto - - - СписокОтложитьРассмотрениеВходящие - 246 - true - true - - true - - - СписокОтложитьРассмотрениеВходящиеРасширеннаяПодсказка - 667 - Label - true - true - - Left - - - Form.Command.ОтложитьРассмотрениеСписок - Normal - Auto - true - true - UserCmds - Auto - - - СписокПредметВходящие - 247 - true - true - - true - - - СписокПредметВходящиеРасширеннаяПодсказка - 668 - Label - true - true - - Left - - - Form.Command.ПредметСписок - Normal - Auto - true - true - UserCmds - Auto - - - СписокОтправитьПолучитьПочтуВходящие - 248 - true - true - - true - - - СписокОтправитьПолучитьПочтуВходящиеРасширеннаяПодсказка - 669 - Label - true - true - - Left - - - Form.Command.ОтправитьПолучитьПочту - Normal - Auto - true - true - UserCmds - Auto - СписокОбновитьВходящие 249 @@ -6298,7 +7250,7 @@ СписокОбновитьВходящиеРасширеннаяПодсказка - 670 + 785 Label true true @@ -6325,7 +7277,7 @@ СписокНастройкаСпискаВходящиеРасширеннаяПодсказка - 671 + 786 Label true true @@ -6351,7 +7303,7 @@ СписокВывестиСписокВходящиеРасширеннаяПодсказка - 672 + 787 Label true true @@ -6377,7 +7329,7 @@ СписокСправкаВходящиеРасширеннаяПодсказка - 673 + 788 Label true true @@ -6403,7 +7355,7 @@ ФормаПерсональныеНастройкиВходящиеРасширеннаяПодсказка - 674 + 789 Label true true @@ -6444,10 +7396,10 @@ СписокВходящиеСтрокаПоиска - 676 + 791 СписокВходящиеСтрокаПоискаРасширеннаяПодсказка - 678 + 793 Label true true @@ -6457,7 +7409,7 @@ СписокВходящиеСтрокаПоискаКонтекстноеМеню - 677 + 792 true СписокВходящие @@ -6467,10 +7419,10 @@ СписокВходящиеСостояниеПросмотра - 679 + 794 СписокВходящиеСостояниеПросмотраРасширеннаяПодсказка - 681 + 796 Label true true @@ -6480,7 +7432,7 @@ СписокВходящиеСостояниеПросмотраКонтекстноеМеню - 680 + 795 true ViewStatusAddition @@ -6491,10 +7443,10 @@ СписокВходящиеУправлениеПоиском - 682 + 797 СписокВходящиеУправлениеПоискомРасширеннаяПодсказка - 684 + 799 Label true true @@ -6504,7 +7456,7 @@ СписокВходящиеУправлениеПоискомКонтекстноеМеню - 683 + 798 true SearchControlAddition @@ -6515,7 +7467,7 @@ СписокВходящиеРасширеннаяПодсказка - 675 + 790 Label true true @@ -6526,6 +7478,216 @@ СписокВходящиеКонтекстноеМеню 215 + + СписокВходящиеКонтекстноеМенюОтветить + 346 + true + true + + true + + + СписокВходящиеКонтекстноеМенюОтветитьРасширеннаяПодсказка + 751 + Label + true + true + + Left + + + Form.Command.Ответить + Normal + Auto + true + true + UserCmds + Auto + + + СписокВходящиеКонтекстноеМенюОтветитьВсем + 347 + true + true + + true + + + СписокВходящиеКонтекстноеМенюОтветитьВсемРасширеннаяПодсказка + 752 + Label + true + true + + Left + + + Form.Command.ОтветитьВсем + Normal + Auto + true + true + UserCmds + Auto + + + СписокВходящиеКонтекстноеМенюПереслать + 348 + true + true + + true + + + СписокВходящиеКонтекстноеМенюПереслатьРасширеннаяПодсказка + 753 + Label + true + true + + Left + + + Form.Command.Переслать + Normal + Auto + true + true + UserCmds + Auto + + + СписокВходящиеКонтекстноеМенюИзменить + 358 + true + true + + true + + + СписокВходящиеКонтекстноеМенюИзменитьРасширеннаяПодсказка + 754 + Label + true + true + + Left + + + Form.Item.СписокВходящие.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + СписокВходящиеКонтекстноеМенюГруппаРассмотрениеПредмет + 350 + + СписокВходящиеКонтекстноеМенюУстановитьПризнакРассмотрено + 351 + true + true + + true + + + СписокВходящиеКонтекстноеМенюУстановитьПризнакРассмотреноРасширеннаяПодсказка + 756 + Label + true + true + + Left + + + Form.Command.УстановитьПризнакРассмотрено + Normal + Auto + true + true + UserCmds + Auto + + + СписокВходящиеКонтекстноеМенюОтложитьРассмотрениеСписок + 352 + true + true + + true + + + СписокВходящиеКонтекстноеМенюОтложитьРассмотрениеСписокРасширеннаяПодсказка + 757 + Label + true + true + + Left + + + Form.Command.ОтложитьРассмотрениеСписок + Normal + Auto + true + true + UserCmds + Auto + + + СписокВходящиеКонтекстноеМенюПредметСписок + 353 + true + true + + true + + + СписокВходящиеКонтекстноеМенюПредметСписокРасширеннаяПодсказка + 758 + Label + true + true + + Left + + + Form.Command.ПредметСписок + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список входящие контекстное меню группа рассмотрение предмет</value> + + + ru + Список входящие контекстное меню группа рассмотрение предмет + + + СписокВходящиеКонтекстноеМенюГруппаРассмотрениеПредметРасширеннаяПодсказка + 755 + Label + true + true + + Left + + + + СписокКонтекстноеМенюДобавитьВЗакладкиВходящие 225 @@ -6536,7 +7698,7 @@ СписокКонтекстноеМенюДобавитьВЗакладкиВходящиеРасширеннаяПодсказка - 647 + 759 Label true true @@ -6562,7 +7724,7 @@ СписокКонтекстноеМенюПеренестиВПапкуВходящиеРасширеннаяПодсказка - 648 + 760 Label true true @@ -6578,7 +7740,86 @@ UserCmds Auto - true + + СписокВходящиеКонтекстноеМенюВзаимодействияПоПредмету + 360 + true + true + + true + + + СписокВходящиеКонтекстноеМенюВзаимодействияПоПредметуРасширеннаяПодсказка + 761 + Label + true + true + + Left + + + Form.Command.ВзаимодействияПоПредмету + Normal + Auto + true + true + UserCmds + Auto + + + СписокВходящиеКонтекстноеМенюГруппаКопироватьУдалить + 355 + + СписокВходящиеКонтекстноеМенюУстановитьПометкуУдаления + 359 + true + true + + true + + + СписокВходящиеКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка + 763 + Label + true + true + + Left + + + Form.Item.СписокВходящие.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список входящие контекстное меню группа копировать удалить</value> + + + ru + Список входящие контекстное меню группа копировать удалить + + + СписокВходящиеКонтекстноеМенюГруппаКопироватьУдалитьРасширеннаяПодсказка + 762 + Label + true + true + + Left + + + + HierarchicalList true @@ -6631,7 +7872,7 @@ СтраницаСписокВходящиеРасширеннаяПодсказка - 646 + 750 Label true true @@ -6675,7 +7916,7 @@ ВажностьНомерКартинкиИсходящиеРасширеннаяПодсказка - 744 + 869 Label true true @@ -6690,6 +7931,9 @@ PictureField Enter + + CommonPicture.ВосклицательныйЗнакСерый + Left true @@ -6722,7 +7966,7 @@ ЕстьВложенияИсходящиеРасширеннаяПодсказка - 746 + 871 Label true true @@ -6769,7 +8013,7 @@ НомерКартинкиИсходящиеРасширеннаяПодсказка - 748 + 873 Label true true @@ -6819,7 +8063,7 @@ УчастникиИсходящиеРасширеннаяПодсказка - 750 + 875 Label true true @@ -6855,7 +8099,7 @@ ТемаИсходящиеРасширеннаяПодсказка - 752 + 877 Label true true @@ -6895,7 +8139,7 @@ ПолученоОтправленоИсходящиеРасширеннаяПодсказка - 754 + 879 Label true true @@ -6939,7 +8183,7 @@ РазмерИсходящиеРасширеннаяПодсказка - 756 + 881 Label true true @@ -6979,7 +8223,7 @@ СписокСоздатьЭлектронноеПисьмоИсходящиеРасширеннаяПодсказка - 710 + 836 Label true true @@ -7008,7 +8252,7 @@ СписокИсходящиеПереслатьРасширеннаяПодсказка - 711 + 837 Label true true @@ -7024,6 +8268,191 @@ UserCmds Auto + + СписокОтправитьПолучитьПочтуИсходящие + 290 + true + true + + true + + + СписокОтправитьПолучитьПочтуИсходящиеРасширеннаяПодсказка + 838 + Label + true + true + + Left + + + Form.Command.ОтправитьПолучитьПочту + Normal + Auto + true + true + UserCmds + Auto + + + СписокИсходящиеРассмотрено + 412 + + СписокРассмотреноИсходящие + 287 + true + true + + true + + + СписокРассмотреноИсходящиеРасширеннаяПодсказка + 840 + Label + true + true + + Left + + + Form.Command.УстановитьПризнакРассмотрено + Normal + PictureAndText + true + true + UserCmds + Auto + + + СписокОтложитьРассмотрениеИсходящие + 288 + true + true + + true + + + СписокОтложитьРассмотрениеИсходящиеРасширеннаяПодсказка + 841 + Label + true + true + + Left + + + Form.Command.ОтложитьРассмотрениеСписок + Normal + Auto + true + true + UserCmds + Auto + + + СписокНеРассмотреноИсходящие + 286 + true + true + + true + + + СписокНеРассмотреноИсходящиеРасширеннаяПодсказка + 842 + Label + true + true + + Left + + + Form.Command.СнятьПризнакРассмотрено + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокОтветственныйИсходящие + 285 + true + true + + true + + + СписокОтветственныйИсходящиеРасширеннаяПодсказка + 843 + Label + true + true + + Left + + + Form.Command.ОтветственныйСписок + Normal + Auto + true + true + UserCmds + Auto + + + СписокПредметИсходящие + 289 + true + true + + true + + + СписокПредметИсходящиеРасширеннаяПодсказка + 844 + Label + true + true + + Left + + + Form.Command.ПредметСписок + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список исходящие рассмотрено</value> + + + ru + Список исходящие рассмотрено + + + СписокИсходящиеРассмотреноРасширеннаяПодсказка + 839 + Label + true + true + + Left + + + + ГруппаКомандыСпискаИсходящие 274 @@ -7037,7 +8466,7 @@ ИзменитьИсходящиеРасширеннаяПодсказка - 713 + 846 Label true true @@ -7063,7 +8492,7 @@ СкопироватьИсходящиеРасширеннаяПодсказка - 714 + 847 Label true true @@ -7092,7 +8521,7 @@ УстановитьПометкуУдаленияИсходящиеРасширеннаяПодсказка - 716 + 849 Label true true @@ -7107,6 +8536,7 @@ true UserCmds Auto + InAdditionalSubmenu true true @@ -7123,61 +8553,7 @@ ГруппаСписокУстановитьПометкуУдаленияИсходящиеРасширеннаяПодсказка - 715 - Label - true - true - - Left - - - - - - ГруппаУстановитьИнтервалИсходящие - 279 - - УстановитьИнтервалДатИсходящие - 280 - true - true - - true - - - УстановитьИнтервалДатИсходящиеРасширеннаяПодсказка - 718 - Label - true - true - - Left - - - Form.Item.СписокИсходящие.StandardCommand.SetDateInterval - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа установить интервал</value> - - - ru - Группа установить интервал - - - ГруппаУстановитьИнтервалИсходящиеРасширеннаяПодсказка - 717 + 848 Label true true @@ -7200,7 +8576,7 @@ НайтиИсходящиеРасширеннаяПодсказка - 720 + 851 Label true true @@ -7215,6 +8591,60 @@ true UserCmds Auto + InAdditionalSubmenu + + + ОтменитьПоискИсходящие + 284 + true + true + + true + + + ОтменитьПоискИсходящиеРасширеннаяПодсказка + 852 + Label + true + true + + Left + + + Form.Item.СписокИсходящие.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + УстановитьИнтервалДатИсходящие + 280 + true + true + + true + + + УстановитьИнтервалДатИсходящиеРасширеннаяПодсказка + 853 + Label + true + true + + Left + + + Form.Item.СписокИсходящие.StandardCommand.SetDateInterval + Normal + Auto + true + true + UserCmds + Auto true true @@ -7231,61 +8661,7 @@ ГруппаНайтиИсходящиеРасширеннаяПодсказка - 719 - Label - true - true - - Left - - - - - - ГруппаОтменитьПоискИсходящие - 283 - - ОтменитьПоискИсходящие - 284 - true - true - - true - - - ОтменитьПоискИсходящиеРасширеннаяПодсказка - 722 - Label - true - true - - Left - - - Form.Item.СписокИсходящие.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа отменить поиск исходящие</value> - - - ru - Группа отменить поиск - - - ГруппаОтменитьПоискИсходящиеРасширеннаяПодсказка - 721 + 850 Label true true @@ -7310,7 +8686,7 @@ ГруппаКомандыСпискаИсходящиеРасширеннаяПодсказка - 712 + 845 Label true true @@ -7320,163 +8696,6 @@ - - СписокОтветственныйИсходящие - 285 - true - true - - true - - - СписокОтветственныйИсходящиеРасширеннаяПодсказка - 723 - Label - true - true - - Left - - - Form.Command.ОтветственныйСписок - Normal - Auto - true - true - UserCmds - Auto - - - СписокНеРассмотреноИсходящие - 286 - true - true - - true - - - СписокНеРассмотреноИсходящиеРасширеннаяПодсказка - 724 - Label - true - true - - Left - - - Form.Command.СнятьПризнакРассмотрено - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокРассмотреноИсходящие - 287 - true - true - - true - - - СписокРассмотреноИсходящиеРасширеннаяПодсказка - 725 - Label - true - true - - Left - - - Form.Command.УстановитьПризнакРассмотрено - Normal - Auto - true - true - UserCmds - Auto - - - СписокОтложитьРассмотрениеИсходящие - 288 - true - true - - true - - - СписокОтложитьРассмотрениеИсходящиеРасширеннаяПодсказка - 726 - Label - true - true - - Left - - - Form.Command.ОтложитьРассмотрениеСписок - Normal - Auto - true - true - UserCmds - Auto - - - СписокПредметИсходящие - 289 - true - true - - true - - - СписокПредметИсходящиеРасширеннаяПодсказка - 727 - Label - true - true - - Left - - - Form.Command.ПредметСписок - Normal - Auto - true - true - UserCmds - Auto - - - СписокОтправитьПолучитьПочтуИсходящие - 290 - true - true - - true - - - СписокОтправитьПолучитьПочтуИсходящиеРасширеннаяПодсказка - 728 - Label - true - true - - Left - - - Form.Command.ОтправитьПолучитьПочту - Normal - Auto - true - true - UserCmds - Auto - СписокОбновитьИсходящие 291 @@ -7487,7 +8706,7 @@ СписокОбновитьИсходящиеРасширеннаяПодсказка - 729 + 854 Label true true @@ -7514,7 +8733,7 @@ СписокНастройкаСпискаИсходящиеРасширеннаяПодсказка - 730 + 855 Label true true @@ -7540,7 +8759,7 @@ СписокВывестиСписокИсходящиеРасширеннаяПодсказка - 731 + 856 Label true true @@ -7566,7 +8785,7 @@ СписокСправкаИсходящиеРасширеннаяПодсказка - 732 + 857 Label true true @@ -7592,7 +8811,7 @@ ФормаПерсональныеНастройкиИсходящиеРасширеннаяПодсказка - 733 + 858 Label true true @@ -7633,10 +8852,10 @@ СписокИсходящиеСтрокаПоиска - 735 + 860 СписокИсходящиеСтрокаПоискаРасширеннаяПодсказка - 737 + 862 Label true true @@ -7646,7 +8865,7 @@ СписокИсходящиеСтрокаПоискаКонтекстноеМеню - 736 + 861 true СписокИсходящие @@ -7656,10 +8875,10 @@ СписокИсходящиеСостояниеПросмотра - 738 + 863 СписокИсходящиеСостояниеПросмотраРасширеннаяПодсказка - 740 + 865 Label true true @@ -7669,7 +8888,7 @@ СписокИсходящиеСостояниеПросмотраКонтекстноеМеню - 739 + 864 true ViewStatusAddition @@ -7680,10 +8899,10 @@ СписокИсходящиеУправлениеПоиском - 741 + 866 СписокИсходящиеУправлениеПоискомРасширеннаяПодсказка - 743 + 868 Label true true @@ -7693,7 +8912,7 @@ СписокИсходящиеУправлениеПоискомКонтекстноеМеню - 742 + 867 true SearchControlAddition @@ -7704,7 +8923,7 @@ СписокИсходящиеРасширеннаяПодсказка - 734 + 859 Label true true @@ -7715,6 +8934,58 @@ СписокИсходящиеКонтекстноеМеню 257 + + СписокИсходящиеКонтекстноеМенюПереслать + 361 + true + true + + true + + + СписокИсходящиеКонтекстноеМенюПереслатьРасширеннаяПодсказка + 823 + Label + true + true + + Left + + + Form.Command.Переслать + Normal + Auto + true + true + UserCmds + Auto + + + СписокИсходящиеКонтекстноеМенюИзменить + 362 + true + true + + true + + + СписокИсходящиеКонтекстноеМенюИзменитьРасширеннаяПодсказка + 824 + Label + true + true + + Left + + + Form.Item.СписокИсходящие.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + СписокКонтекстноеМенюДобавитьВЗакладкиИсходящие 267 @@ -7725,7 +8996,7 @@ СписокКонтекстноеМенюДобавитьВЗакладкиИсходящиеРасширеннаяПодсказка - 708 + 825 Label true true @@ -7751,7 +9022,7 @@ СписокКонтекстноеМенюПеренестиВПапкуИсходящиеРасширеннаяПодсказка - 709 + 826 Label true true @@ -7767,7 +9038,244 @@ UserCmds Auto - true + + СписокИсходящиеКонтекстноеМенюГруппаРассмотрениеПредмет + 363 + + СписокИсходящиеКонтекстноеМенюУстановитьПризнакРассмотрено + 364 + true + true + + true + + + СписокИсходящиеКонтекстноеМенюУстановитьПризнакРассмотреноРасширеннаяПодсказка + 828 + Label + true + true + + Left + + + Form.Command.УстановитьПризнакРассмотрено + Normal + Auto + true + true + UserCmds + Auto + + + СписокИсходящиеКонтекстноеМенюОтложитьРассмотрениеСписок + 365 + true + true + + true + + + СписокИсходящиеКонтекстноеМенюОтложитьРассмотрениеСписокРасширеннаяПодсказка + 829 + Label + true + true + + Left + + + Form.Command.ОтложитьРассмотрениеСписок + Normal + Auto + true + true + UserCmds + Auto + + + СписокИсходящиеКонтекстноеМенюПредметСписок + 366 + true + true + + true + + + СписокИсходящиеКонтекстноеМенюПредметСписокРасширеннаяПодсказка + 830 + Label + true + true + + Left + + + Form.Command.ПредметСписок + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список исходящие контекстное меню группа рассмотрение предмет</value> + + + ru + Список входящие контекстное меню группа рассмотрение предмет входящие + + + СписокИсходящиеКонтекстноеМенюГруппаРассмотрениеПредметРасширеннаяПодсказка + 827 + Label + true + true + + Left + + + + + + СписокИсходящиеКонтекстноеМенюДобавитьВЗакладки + 367 + true + true + + true + + + СписокИсходящиеКонтекстноеМенюДобавитьВЗакладкиРасширеннаяПодсказка + 831 + Label + true + true + + Left + + + Form.Command.ДобавитьВЗакладки + Normal + Auto + true + true + UserCmds + Auto + + + СписокИсходящиеКонтекстноеМенюПеренестиВПапку + 368 + true + true + + true + + + СписокИсходящиеКонтекстноеМенюПеренестиВПапкуРасширеннаяПодсказка + 832 + Label + true + true + + Left + + + Form.Command.ПеренестиВПапку + Normal + Auto + true + true + UserCmds + Auto + + + СписокИсходящиеКонтекстноеМенюВзаимодействияПоПредмету + 369 + true + true + + true + + + СписокИсходящиеКонтекстноеМенюВзаимодействияПоПредметуРасширеннаяПодсказка + 833 + Label + true + true + + Left + + + Form.Command.ВзаимодействияПоПредмету + Normal + Auto + true + true + UserCmds + Auto + + + СписокИсходящиеКонтекстноеМенюГруппаУдалить + 370 + + СписокИсходящиеКонтекстноеМенюУстановитьПометкуУдаления + 371 + true + true + + true + + + СписокИсходящиеКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка + 835 + Label + true + true + + Left + + + Form.Item.СписокИсходящие.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список исходящие контекстное меню группа удалить</value> + + + ru + Список исходящие контекстное меню группа удалить + + + СписокИсходящиеКонтекстноеМенюГруппаУдалитьРасширеннаяПодсказка + 834 + Label + true + true + + Left + + + + HierarchicalList true @@ -7820,7 +9328,7 @@ СтраницаСписокИсходящиеРасширеннаяПодсказка - 707 + 822 Label true true @@ -7849,7 +9357,7 @@ СтраницыСписокРасширеннаяПодсказка - 583 + 679 Label true true @@ -7866,7 +9374,7 @@ СтраницыПредпросмотр 147 - СтраницаПредпросмотрОбычыйТекст + СтраницаПредпросмотрОбычныйТекст 148 ПредпросмотрОбычныйТекст @@ -7882,7 +9390,7 @@ None ПредпросмотрОбычныйТекстРасширеннаяПодсказка - 768 + 893 Label true true @@ -7916,16 +9424,16 @@ <key>ru</key> - <value>Страница предпросмотр обычый текст</value> + <value>Страница предпросмотр обычный текст</value> ru - Страница предпросмотр обычый текст + Страница предпросмотр обычный текст true - СтраницаПредпросмотрОбычыйТекстРасширеннаяПодсказка - 767 + СтраницаПредпросмотрОбычныйТекстРасширеннаяПодсказка + 892 Label true true @@ -7956,7 +9464,7 @@ None ПредпросмотрHTMLРасширеннаяПодсказка - 771 + 896 Label true true @@ -8002,7 +9510,7 @@ СтраницаПредпросмотрHTMLРасширеннаяПодсказка - 770 + 895 Label true true @@ -8031,7 +9539,7 @@ СтраницыПредпросмотрРасширеннаяПодсказка - 766 + 891 Label true true @@ -8058,7 +9566,7 @@ None ОписаниеНайденоППРасширеннаяПодсказка - 773 + 898 Label true true @@ -8099,7 +9607,7 @@ ГруппаСписокРасширеннаяПодсказка - 582 + 678 Label true true @@ -8132,7 +9640,7 @@ ГруппаОсновноеРасширеннаяПодсказка - 355 + 425 Label true true @@ -8145,6 +9653,7 @@ Auto true true + LeftNarrowest Auto Auto @@ -9865,7 +11374,7 @@ Рассмотрено <key>ru</key> - <value>Установить признак раcсмотрено</value> + <value>Раcсмотрено</value> 5 @@ -10044,7 +11553,7 @@ ОтправитьПолучитьПочту <key>ru</key> - <value>Отправить и получить почту</value> + <value>Отправить и получить</value> 12 @@ -10238,7 +11747,7 @@ УстановитьПризнакРассмотрено <key>ru</key> - <value>Установить признак рассмотрено</value> + <value>Рассмотрено</value> 20 @@ -10349,7 +11858,7 @@ 23 ru - Отложить рассмотрение список + Отложить рассмотрение true @@ -10407,6 +11916,9 @@ true + + CommonPicture.ОтветитьНаЭлектронноеПисьмо + Ответить @@ -10465,6 +11977,28 @@ Auto Auto + + ВзаимодействияПоПредмету + + <key>ru</key> + <value>Взаимодействия по предмету</value> + + 28 + + ru + Взаимодействия по предмету + + + true + + + + ВзаимодействияПоПредмету + + + Auto + Auto + diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl index 2aeb674e8..3671de15a 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl @@ -1,8 +1,1203 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + + Взаимодействия.ИнициализироватьФормуСпискаВзаимодействий(ЭтаФорма); + ОпределитьДоступностьПолнотекстовыйПоиск(); + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Закладки.Отбор, "Владелец", Пользователи.ТекущийПользователь(),,, Истина); + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); + + ДополнитьМенюПанелиНавигации(); + + Для Каждого ТипПредмета Из Метаданные.Документы.ЭлектронноеПисьмоИсходящее.Реквизиты.Предмет.Тип.Типы() Цикл + Если ТолькоПочта И + (ТипПредмета = Тип("ДокументСсылка.Встреча") ИЛИ ТипПредмета = Тип("ДокументСсылка.ТелефонныйЗвонок") ИЛИ + ТипПредмета = Тип("ДокументСсылка.ЗапланированноеВзаимодействие")) Тогда + Продолжить; + КонецЕсли; + СписокВыбораТипаПредмета.Добавить(Метаданные.НайтиПоТипу(ТипПредмета).ПолноеИмя(), Строка(ТипПредмета)); + КонецЦикла; + + Если НЕ ИнформационнаяБазаФайловая Тогда + Элементы.СписокОтправитьПолучитьПочту.Видимость = Ложь; + Элементы.СписокОтправитьПолучитьПочтуВходящие.Видимость = Ложь; + Элементы.СписокОтправитьПолучитьПочтуИсходящие.Видимость = Ложь; + КонецЕсли; + + ТипВзаимодействия = ?(ТолькоПочта, "ВсеПисьма","Все"); + Статус = "Все"; + + Взаимодействия.ЗаполнитьСписокДоступныхДляСозданияДокументов(ДокументыДоступныеДляСоздания); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + + ИмяТекущейПанелиНавигации = Настройки.Получить("ИмяТекущейПанелиНавигации"); + Если ПустаяСтрока(ИмяТекущейПанелиНавигации) Тогда + ИмяТекущейПанелиНавигации = "СтраницаПредмет"; + ИначеЕсли ИмяТекущейПанелиНавигации = "СтраницаСвойства" Тогда + Если ТаблицаДопРеквизитовСвойств.НайтиСтроки(Новый + Структура("ДопРеквизитСведение",ТекущееСвойствоПанелиНавигации)).Количество() = 0 Тогда + ИмяТекущейПанелиНавигации = "СтраницаПредмет"; + КонецЕсли; + ИначеЕсли ИмяТекущейПанелиНавигации = "СтраницаРеквизитыПредмета" Тогда + МассивОписаний = + ВзаимодействияКлиентСерверПовтИспПереопределяемый.ПолучитьМассивОписанияВидовНавигацииОтРеквизитовПредмета(); + ОписаниеНайдено = Ложь; + Для каждого ЭлементМассива Из МассивОписаний Цикл + Если ЭлементМассива.Представление = ТекущееПредставлениеОтбораПоРеквизитуПредмета Тогда + ОписаниеНайдено = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не ОписаниеНайдено Тогда + ИмяТекущейПанелиНавигации = "СтраницаПредмет"; + КонецЕсли; + + КонецЕсли; + + Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы[ИмяТекущейПанелиНавигации]; + + Статус = Настройки.Получить("Статус"); + Если Статус <> Неопределено Тогда + Настройки.Удалить("Статус"); + КонецЕсли; + Если Не ИспользоватьПризнакРассмотрено Тогда + Статус = "Все"; + КонецЕсли; + Если ЗначениеЗаполнено(Статус) И Статус <> "Все" Тогда + ПриИзмененииСтатусаСервер(Ложь); + Иначе + Статус = "Все"; + КонецЕсли; + + Ответственный = Настройки.Получить("Ответственный"); + ПриИзмененииОтветственногоСервер(Ложь); + + Взаимодействия.ПриЗагрузкеТипаВзаимодействийИзНастроек(ЭтаФорма, Настройки); + + ПриИзмененииТипаСервер(Ложь); + ОбновитьПанельНавигации(); + УстановитьЗаголовокВидаПанелиНавигации(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если Врег(ИмяСобытия) = Врег("Запись_ЗакладкиВзаимодействий") Тогда + Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаЗакладки Тогда + Элементы.Закладки.Обновить(); + ОбработатьАктивизациюСтрокиПанелиНавигации(); + КонецЕсли; + ИначеЕсли Врег(ИмяСобытия) = Врег("Запись_ПапкиЭлектронныхПисем") ИЛИ + Врег(ИмяСобытия) = Врег("ПримененыПравилаОбработкиПисем") Тогда + Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки Тогда + ОбновитьПанельНавигации(); + ВосстановитьРаскрытыеУзлыДерева(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКонтакт И + Контакты.ПолучитьЭлементы().Количество() = 0 Тогда + ПереключитьПанельНавигацииСервер("УстановитьВариантНавигацииПоКонтакту"); + КонецЕсли; + + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ПанельНавигацииПриАктивизацииСтроки(Элемент) + + ТекущийЭлементСписок = ТекущийЭлементСписок(); + + Если Элемент.Имя = "Предметы" И + Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаПредмет Тогда + Возврат; + ИначеЕсли Элемент.Имя = "Контакты" И + Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаКонтакт Тогда + Возврат; + ИначеЕсли Элемент.Имя = "Закладки" И + Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаЗакладки Тогда + Возврат; + ИначеЕсли Элемент.Имя = "Свойства" И + Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаСвойства Тогда + Возврат; + ИначеЕсли Элемент.Имя = "РеквизитыПредмета" И + Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаРеквизитыПредмета Тогда + Возврат; + ИначеЕсли Элемент.Имя = "Папки" И + Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаПапки Тогда + Возврат; + ИначеЕсли Элемент.Имя = "Категории" И + Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаКатегории Тогда + Возврат; + КонецЕсли; + + Если НеОтрабатыватьАктивизациюПанелиНавигации Тогда + НеОтрабатыватьАктивизациюПанелиНавигации = Ложь; + Иначе + ПодключитьОбработчикОжидания("ОбработатьАктивизациюСтрокиПанелиНавигации",0.3,Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СтатусПриИзменении(Элемент) + + ПриИзмененииСтатусаСервер(Истина); + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтветственныйПриИзменении(Элемент) + + ПриИзмененииОтветственногоСервер(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ТипВзаимодействияПриИзменении(Элемент) + + ПриИзмененииТипаСервер(); + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПриИзменении(Элемент) + + Если Элементы.СтраницыСписок.ТекущаяСтраница = Элементы.СтраницаСписокОбычная И + Элемент.Имя <> "Список" Тогда + + Возврат; + + ИначеЕсли Элементы.СтраницыСписок.ТекущаяСтраница = Элементы.СтраницаСписокВходящие И + Элемент.Имя <> "СписокВходящие" Тогда + + Возврат; + + ИначеЕсли Элементы.СтраницыСписок.ТекущаяСтраница = Элементы.СтраницаСписокИсходящие И + Элемент.Имя <> "СписокИсходящие" Тогда + + Возврат; + + КонецЕсли; + + ОбновитьПанельНавигации(); + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерсональныеНастройки(Команда) + + ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.НастройкиРаботыСПочтой", , ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПриАктивизацииСтроки(Элемент) + + ТекущийЭлементСписок = ТекущийЭлементСписок(); + + Если ТекущийЭлементСписок = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТекущийЭлементСписок.ТекущиеДанные = Неопределено Тогда + Если Элементы.СтраницыПредпросмотр.ТекущаяСтраница <> Элементы.СтраницаПредпросмотрОбычныйТекст Тогда + Элементы.СтраницыПредпросмотр.ТекущаяСтраница = Элементы.СтраницаПредпросмотрОбычныйТекст; + КонецЕсли; + Предпросмотр = ""; + ПредпросмотрHTML = ""; + ВзаимодействиеДляКоторогоСформированПредпросмотр = Неопределено; + + Иначе + + Если Элемент.Имя = "Список" И Элементы.СтраницыСписок.ТекущаяСтраница <> Элементы.СтраницаСписокОбычная Тогда + Возврат; + ИначеЕсли Элемент.Имя = "СписокВходящие" И + Элементы.СтраницыСписок.ТекущаяСтраница <> Элементы.СтраницаСписокВходящие Тогда + Возврат; + ИначеЕсли Элемент.Имя = "СписокИсходящие" И + Элементы.СтраницыСписок.ТекущаяСтраница <> Элементы.СтраницаСписокИсходящие Тогда + Возврат; + КонецЕсли; + + Если ВыборКорректен(Элемент.Имя,Истина) И + ВзаимодействиеДляКоторогоСформированПредпросмотр <> ТекущийЭлементСписок.ТекущиеДанные.Ссылка Тогда + + Если ТекущийЭлементСписок.ВыделенныеСтроки.Количество() = 1 Тогда + + ПодключитьОбработчикОжидания("ОбработатьАктивизациюСтрокиСписка",0.1,Истина); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПредметыКонтактыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ТекущиеДанные = Элемент.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено И ТипЗнч(ТекущиеДанные.Значение) <> Тип("Строка") Тогда + СтандартнаяОбработка = Ложь; + ОткрытьЗначение(ТекущиеДанные.Значение); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ТолькоПоАктивнымПредметамПриИзменении(Элемент) + + ОбновитьПанельНавигации(); + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПапкиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + + Отказ = Истина; + + ТекущиеДанные = Элементы.Папки.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТекущиеДанные.ЕстьПравоНаИзменение = 0 Тогда + Предупреждение(НСтр("ru = 'Недостаточно прав для создания папки.'")); + Возврат; + КонецЕсли; + + СтруктураПараметры = Новый Структура; + СтруктураПараметры.Вставить("Владелец", ТекущиеДанные.УчетнаяЗапись); + Если ТипЗнч(ТекущиеДанные.Значение) = Тип("СправочникСсылка.ПапкиЭлектронныхПисем") Тогда + СтруктураПараметры.Вставить("Родитель", ТекущиеДанные.Значение); + КонецЕсли; + + ОткрытьФормуМодально("Справочник.ПапкиЭлектронныхПисем.ФормаОбъекта",Новый Структура("ЗначенияЗаполнения",СтруктураПараметры), ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ПапкиПередУдалением(Элемент, Отказ) + + Отказ = Истина; + + ТекущиеДанные = Элементы.Папки.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ТекущиеДанные.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") + ИЛИ ТекущиеДанные.ЕстьПравоНаИзменение = 0 ИЛИ ТекущиеДанные.ПредопределеннаяПапка Тогда + Возврат; + КонецЕсли; + + ТекстВопроса = НСтр("ru = 'Удалить папку ""'") + Строка(ТекущиеДанные.Значение) + + НСтр("ru = '"" и переместить все ее содержимое в папку ""Удаленные""'"); + Ответ = Вопрос(ТекстВопроса,РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Да Тогда + + ОписаниеОшибки = УдалитьПапкуСервер(ТекущиеДанные.Значение); + Если НЕ ПустаяСтрока(ОписаниеОшибки) Тогда + Предупреждение(ОписаниеОшибки); + Иначе + ВосстановитьРаскрытыеУзлыДерева(); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция УдалитьПапкуСервер(Папка) + + ОписаниеОшибки = ""; + Взаимодействия.ВыполнитьУдалениеПапкиЭлектронныхПисем(Папка, ОписаниеОшибки); + Если ПустаяСтрока(ОписаниеОшибки) Тогда + ОбновитьПанельНавигации(); + КонецЕсли; + + Возврат ОписаниеОшибки; + +КонецФункции + +&НаКлиенте +Процедура ТипВзаимодействияСтатусОчистка(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура СтрокаПоискаПриИзменении(Элемент) + + ОписанияНайденоПП.Очистить(); + + Если СтрокаПоиска <> "" Тогда + + ПроверитьИндексППД(); + ЭтаФорма.ТекущийЭлемент = ?(НЕ РасширенныйПоиск, Элементы.СтрокаПоиска, ТекущийЭлементСписок()); + + Иначе + РасширенныйПоиск = Ложь; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + Список.Отбор, + "Поиск", + Неопределено, + ВидСравненияКомпоновкиДанных.Равно,,Ложь); + ОснованиеВыбора = ""; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СтрокаПоискаАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ДанныеВыбора = Новый СписокЗначений; + + КоличествоНайденных = 0; + Для каждого ЭлементСписка Из Элементы.СтрокаПоиска.СписокВыбора Цикл + Если ЛЕВ(ВРег(ЭлементСписка.Значение), СтрДлина(СокрЛП(Текст))) = ВРег(СокрЛП(Текст)) Тогда + ДанныеВыбора.Добавить(ЭлементСписка.Значение); + КоличествоНайденных = КоличествоНайденных + 1; + Если КоличествоНайденных > 7 Тогда + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + + ВзаимодействияКлиент.СписокПередНачаломДобавления(Элемент, Отказ, Копирование, ТолькоПочта, ДокументыДоступныеДляСоздания); + +КонецПроцедуры + +&НаКлиенте +Процедура УзелДереваПанелиНавигацииПередСворачиванием(Элемент, Строка, Отказ) + + ИмяДерева = Элемент.Имя; + + Если Элемент.ТекущаяСтрока <> Неопределено Тогда + ДанныеСтроки = Элементы[ИмяДерева].ДанныеСтроки(Строка); + Если ДанныеСтроки <> Неопределено Тогда + СохранитьСостояниеУзлаВНастройках(ИмяДерева, ДанныеСтроки.Значение, Ложь); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УзелДереваПанелиНавигацииПередРазворачиванием(Элемент, Строка, Отказ) + + ИмяДерева = Элемент.Имя; + + Если Элемент.ТекущаяСтрока <> Неопределено Тогда + ДанныеСтроки = Элементы[ИмяДерева].ДанныеСтроки(Строка); + Если ДанныеСтроки <> Неопределено Тогда + СохранитьСостояниеУзлаВНастройках(ИмяДерева, ДанныеСтроки.Значение, Истина); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПредпросмотрHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) + + ВзаимодействияКлиент.ПолеHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////////// +// Обработка перетаскивания + +&НаКлиенте +Процедура ПредметыПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + + Если (Строка = Неопределено) ИЛИ (ПараметрыПеретаскивания.Значение = Неопределено) Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + + СтрокаНазначение = Предметы.НайтиПоИдентификатору(Строка); + + Если Не ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтрокаНазначение.Значение) И + Не ВзаимодействияКлиентСервер.ЯвляетсяПредметом(СтрокаНазначение.Значение) Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + КонецЕсли; + + Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда + Для каждого ЭлементМассива Из ПараметрыПеретаскивания.Значение Цикл + Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(ЭлементМассива) Тогда + Возврат; + КонецЕсли; + КонецЦикла; + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Число") Тогда + СтрокаПеретаскивание = Предметы.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + + Если Не ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтрокаПеретаскивание.Значение) Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + КонецЕсли; + + Иначе + + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПредметыПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + + СтандартнаяОбработка = Ложь; + + СтрокаНазначение = Предметы.НайтиПоИдентификатору(Строка); + + Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда + ВзаимодействияВызовСервера.УстановитьПредметДляМассиваВзаимодействий(ПараметрыПеретаскивания.Значение, + СтрокаНазначение.Значение, Истина); + Иначе + СтрокаПеретаскивание = Предметы.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + ВзаимодействияВызовСервера.ЗаменитьПредметВЦепочкеВзаимодействий(СтрокаПеретаскивание.Значение, + СтрокаНазначение.Значение); + КонецЕсли; + + ОбновитьПанельНавигации(); + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПапкиПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + + Если (Строка = Неопределено) ИЛИ (ПараметрыПеретаскивания.Значение = Неопределено) Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + + СтрокаНазначение = Папки.НайтиПоИдентификатору(Строка); + + Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда + + Если ТипЗнч(СтрокаНазначение.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") ИЛИ + СтрокаНазначение.ЕстьПравоНаИзменение = 0 Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + + + Для каждого ЭлементМассива Из ПараметрыПеретаскивания.Значение Цикл + Если ВзаимодействияКлиентСервер.ЯвляетсяЭлектроннымПисьмом(ЭлементМассива) Тогда + ТекущийЭлементСписок = ТекущийЭлементСписок(); + Если ТекущийЭлементСписок = Неопределено Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + КонецЕсли; + ДанныеСтроки = ТекущийЭлементСписок.ДанныеСтроки(ЭлементМассива); + Если ДанныеСтроки.УчетнаяЗапись = СтрокаНазначение.УчетнаяЗапись Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение; + Возврат; + КонецЕсли; + КонецЕсли; + КонецЦикла; + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + + ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Число") Тогда + + СтрокаПеретаскивание = Папки.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + Если СтрокаПеретаскивание.УчетнаяЗапись <> СтрокаНазначение.УчетнаяЗапись Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + + СтрокаРодитель = СтрокаНазначение; + Пока ТипЗнч(СтрокаРодитель.Значение) <> Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") Цикл + Если СтрокаПеретаскивание = СтрокаРодитель Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + СтрокаРодитель = СтрокаРодитель.ПолучитьРодителя(); + КонецЦикла; + + Иначе + + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПапкиПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + + СтандартнаяОбработка = Ложь; + + СтрокаНазначение = Папки.НайтиПоИдентификатору(Строка); + + Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда + ВыполнитьПереносВПапкуМассиваПисем(ПараметрыПеретаскивания.Значение, СтрокаНазначение.Значение); + ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Число") Тогда + ДанныеСтрокиПеретаскивания = Папки.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + Если НЕ ДанныеСтрокиПеретаскивания.ПолучитьРодителя() = СтрокаНазначение Тогда + УстановитьРодителяУПапки(ДанныеСтрокиПеретаскивания.Значение, + ?(ТипЗнч(СтрокаНазначение.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты"), + ПредопределенноеЗначение("Справочник.ПапкиЭлектронныхПисем.ПустаяСсылка"), + СтрокаНазначение.Значение)); + КонецЕсли; + + КонецЕсли; + + ОбновитьПанельНавигации(СтрокаНазначение.Значение); + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПапкиНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение) + + Если ПараметрыПеретаскивания.Значение = Неопределено Тогда + Возврат; + КонецЕсли; + + ДанныеСтроки = Папки.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + Если ТипЗнч(ДанныеСтроки.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") ИЛИ + ДанныеСтроки.ПредопределеннаяПапка ИЛИ ДанныеСтроки.ЕстьПравоНаИзменение = 0 Тогда + Выполнение = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура РеквизитыПредметаПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + + Если (Строка = Неопределено) ИЛИ (ПараметрыПеретаскивания.Значение = Неопределено) Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + + СтрокаНазначение = РеквизитыПредмета.НайтиПоИдентификатору(Строка); + + Если Не ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтрокаНазначение.Значение) И + Не ВзаимодействияКлиентСервер.ЯвляетсяПредметом(СтрокаНазначение.Значение) Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + КонецЕсли; + + Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда + Для каждого ЭлементМассива Из ПараметрыПеретаскивания.Значение Цикл + Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(ЭлементМассива) Тогда + Возврат; + КонецЕсли; + КонецЦикла; + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + + ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Число") Тогда + + СтрокаПеретаскивание = РеквизитыПредмета.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + + Если Не ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтрокаПеретаскивание.Значение) Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + КонецЕсли; + + Иначе + + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура РеквизитыПредметаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + + СтандартнаяОбработка = Ложь; + + СтрокаНазначение = РеквизитыПредмета.НайтиПоИдентификатору(Строка); + + Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда + ВзаимодействияВызовСервера.УстановитьПредметДляМассиваВзаимодействий(ПараметрыПеретаскивания.Значение, + СтрокаНазначение.Значение, Истина); + Иначе + СтрокаПеретаскивание = РеквизитыПредмета.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + ВзаимодействияВызовСервера.ЗаменитьПредметВЦепочкеВзаимодействий(СтрокаПеретаскивание.Значение, + СтрокаНазначение.Значение); + КонецЕсли; + + ОбновитьПанельНавигации(); + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура РеквизитыПредметаНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение) + + Если ПараметрыПеретаскивания.Значение = Неопределено Тогда + Возврат; + КонецЕсли; + + ДанныеСтроки = РеквизитыПредмета.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + Если Не ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(ДанныеСтроки.Значение) Тогда + Выполнение = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + + СтандартнаяОбработка = Ложь; + + СписокИменФайлов = Новый СписокЗначений; + + Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл") И + ПараметрыПеретаскивания.Значение.ЭтоФайл() = Истина Тогда + + СписокИменФайлов.Добавить(ПараметрыПеретаскивания.Значение.ПолноеИмя,ПараметрыПеретаскивания.Значение.Имя); + + ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда + + Если ПараметрыПеретаскивания.Значение.Количество() >= 1 И + ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Файл") Тогда + + Для Каждого ФайлПринятый Из ПараметрыПеретаскивания.Значение Цикл + Если ТипЗнч(ФайлПринятый) = Тип("Файл") И ФайлПринятый.ЭтоФайл() Тогда + СписокИменФайлов.Добавить(ФайлПринятый.ПолноеИмя,ФайлПринятый.Имя); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + ОткрытьФормуМодально("Документ.ЭлектронноеПисьмоИсходящее.ФормаОбъекта", Новый Структура("Вложения",СписокИменФайлов), ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Обновить(Команда) + + ОбновитьНаСервере(); + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +// Получить и отправить входящую электронную почту +&НаКлиенте +Процедура ОтправитьПолучитьПочтуВыполнить(Команда) + + Если НЕ ИнформационнаяБазаФайловая Тогда + Возврат; + КонецЕсли; + + ОчиститьСообщения(); + + УправлениеЭлектроннойПочтойКлиент.ОтправитьЗагрузитьПочтуПользователя(ТекущийЭлементСписок()); + ОбновитьПанельНавигации(); + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура Ответить(Команда) + + ТекущийЭлементСписок = ТекущийЭлементСписок(); + + Если ТекущийЭлементСписок = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ВыборКорректен(ТекущийЭлементСписок.Имя, Истина) Тогда + ТекущееВзаимодействие = ТекущийЭлементСписок.ТекущиеДанные.Ссылка; + Если ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда + Предупреждение(НСтр("ru = 'Команда ""Ответить"" может быть выполнена только для входящего письма.'")); + Возврат; + КонецЕсли; + Иначе + Возврат; + КонецЕсли; + + Основание = Новый Структура("Основание,Команда",ТекущееВзаимодействие, "Ответить"); + ПараметрыОткрытия = Новый Структура("Основание", Основание); + ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыОткрытия); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтветитьВсем(Команда) + + ТекущийЭлементСписок = ТекущийЭлементСписок(); + + Если ТекущийЭлементСписок = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ВыборКорректен(ТекущийЭлементСписок.Имя, Истина) Тогда + ТекущееВзаимодействие = ТекущийЭлементСписок.ТекущиеДанные.Ссылка; + Если ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда + Предупреждение(НСтр("ru = 'Команда ""Ответить всем"" может быть выполнена только для входящего письма.'")); + Возврат; + КонецЕсли; + Иначе + Возврат; + КонецЕсли; + + Основание = Новый Структура("Основание,Команда",ТекущееВзаимодействие, "ОтветитьВсем"); + ПараметрыОткрытия = Новый Структура("Основание", Основание); + ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыОткрытия); + +КонецПроцедуры + +&НаКлиенте +Процедура Переслать(Команда) + + ТекущийЭлементСписок = ТекущийЭлементСписок(); + + Если ТекущийЭлементСписок = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ВыборКорректен(ТекущийЭлементСписок.Имя, Истина) Тогда + ТекущееВзаимодействие = ТекущийЭлементСписок.ТекущиеДанные.Ссылка; + Если ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") И + ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда + Предупреждение(НСтр("ru = 'Команда ""Переслать"" может быть выполнена только для писем.'")); + Возврат; + КонецЕсли; + Иначе + Возврат; + КонецЕсли; + + Основание = Новый Структура("Основание,Команда", ТекущееВзаимодействие, "Переслать"); + ПараметрыОткрытия = Новый Структура("Основание", Основание); + ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыОткрытия); + +КонецПроцедуры + +&НаКлиенте +Процедура ПереключитьПанельНавигации(Команда) + + ПереключитьПанельНавигацииСервер(Команда.Имя); + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьВариантНавигацииПоКонтакту(Команда) + + ПереключитьПанельНавигации(Команда); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьВариантНавигацииПоПредмету(Команда) + + ПереключитьПанельНавигации(Команда); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьВариантНавигацииПоЗакладкам(Команда) + + ПереключитьПанельНавигации(Команда); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьВариантНавигацииПоПапкам(Команда) + + ПереключитьПанельНавигации(Команда); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтветственныйВыполнить(Команда) + + ВыбранныйОтветственный = ОткрытьФормуМодально("Справочник.Пользователи.Форма.ФормаСписка", + Новый Структура("РежимВыбора",Истина)); + Если ВыбранныйОтветственный <> Неопределено Тогда + + УстановитьОтветственного(ВыбранныйОтветственный,Неопределено); + + КонецЕсли; + + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтветственныйСписок(Команда) + + ИмяТекущегоЭлемента = ТекущийЭлементСписок().Имя; + Если Лев(ИмяТекущегоЭлемента,6) = "Список" И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда + Возврат; + КонецЕсли; + + ВыбранныйОтветственный = ОткрытьФормуМодально("Справочник.Пользователи.Форма.ФормаСписка", + Новый Структура("РежимВыбора",Истина)); + Если ВыбранныйОтветственный <> Неопределено Тогда + + УстановитьОтветственного(ВыбранныйОтветственный,Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки); + + КонецЕсли; + + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура РассмотреноВыполнить(Команда) + + УстановитьФлагРассмотрено(Неопределено,Истина); + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПризнакРассмотрено(Команда) + + РассмотреноВыполнитьСписок(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ВзаимодействияПоПредмету(Команда) + + ИмяТекущегоЭлемента = ТекущийЭлементСписок().Имя; + Если Не ВыборКорректен(ИмяТекущегоЭлемента,Истина) Тогда + Возврат; + КонецЕсли; + + Предмет = Элементы[ИмяТекущегоЭлемента].ТекущиеДанные.Предмет; + + Если ВзаимодействияКлиентСервер.ЯвляетсяПредметом(Предмет) Тогда + + СтруктураОтбора = Новый Структура; + СтруктураОтбора.Вставить("Предмет", Предмет); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ТипВзаимодействия", "Предмет"); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Отбор", СтруктураОтбора); + ПараметрыФормы.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + + ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Предмет) Тогда + + СтруктураОтбора = Новый Структура; + СтруктураОтбора.Вставить("Предмет", Предмет); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ТипВзаимодействия", "Взаимодействие"); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Отбор", СтруктураОтбора); + ПараметрыФормы.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + + Иначе + Возврат; + КонецЕсли; + + ОткрытьФорму( + "ЖурналДокументов.Взаимодействия.Форма.ФормаСпискаПараметрическая", + ПараметрыФормы, + ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура СнятьПризнакРассмотрено(Команда) + + РассмотреноВыполнитьСписок(Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура РассмотреноВыполнитьСписок(ЗначенияПризнака) + + ИмяТекущегоЭлемента = ТекущийЭлементСписок().Имя; + Если Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда + Возврат; + КонецЕсли; + + УстановитьФлагРассмотрено(Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки, ЗначенияПризнака); + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +// Установить предмет в выбранных взаимодействиях - клиентская часть +&НаКлиенте +Процедура ПредметВыполнить(Команда) + + ВыбранныйТипПредмета = СписокВыбораТипаПредмета.ВыбратьЭлемент(Нстр("ru = 'Выберите тип предмета'")); + Если ВыбранныйТипПредмета = Неопределено Тогда + Возврат; + КонецЕсли; + + Предмет = ОткрытьФормуМодально(ВыбранныйТипПредмета.Значение + ".ФормаВыбора"); + Если Предмет <> Неопределено Тогда + УстановитьПредмет(Предмет,Неопределено); + КонецЕсли; + + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПредметСписок(Команда) + + ИмяТекущегоЭлемента = ТекущийЭлементСписок().Имя; + Если Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда + Возврат; + КонецЕсли; + + ВыбранныйТипПредмета = СписокВыбораТипаПредмета.ВыбратьЭлемент(Нстр("ru = 'Выберите тип предмета'")); + Если ВыбранныйТипПредмета = Неопределено Тогда + Возврат; + КонецЕсли; + + Предмет = ОткрытьФормуМодально(ВыбранныйТипПредмета.Значение + ".ФормаВыбора"); + Если Предмет <> Неопределено Тогда + УстановитьПредмет(Предмет,Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки); + КонецЕсли; + + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьВЗакладки(Команда) + + ИмяТекущегоЭлемента = ТекущийЭлемент.Имя; + Если Лев(ИмяТекущегоЭлемента, 6) = "Список" И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда + Предупреждение(НСтр("ru = 'Не выбран элемент для добавления в закладки.'")); + Возврат; + КонецЕсли; + + ЭлементДляДобавления = Неопределено; + Если Лев(ИмяТекущегоЭлемента, 6) = "Список" Тогда + ЭлементДляДобавления = Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки; + ИначеЕсли ИмяТекущегоЭлемента = "Свойства" Или ИмяТекущегоЭлемента = "Категории" Или ИмяТекущегоЭлемента = "Папки" Тогда + ТекущиеДанные = Элементы[ИмяТекущегоЭлемента].ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + ЭлементДляДобавления = Новый Структура("Значение", ТекущиеДанные.Значение); + КонецЕсли; + ИначеЕсли ИмяТекущегоЭлемента = "РеквизитыПредмета" Тогда + ТекущиеДанные = Элементы[ИмяТекущегоЭлемента].ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + ЭлементДляДобавления = Новый Структура("Значение,Группировка", ТекущиеДанные.Значение, ТекущиеДанные.Группировка); + КонецЕсли; + Иначе + ТекущиеДанные = Элементы[ИмяТекущегоЭлемента].ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + ЭлементДляДобавления = Новый Структура("Значение,ОписаниеТипов", ТекущиеДанные.Значение, ТекущиеДанные.ОписаниеТипов); + КонецЕсли; + КонецЕсли; + + Если ЭлементДляДобавления = Неопределено Тогда + Предупреждение(НСтр("ru = 'Не выбран элемент для добавления в закладки.'")); + Возврат; + КонецЕсли; + + Результат = ДобавитьВЗакладкиСервер(ЭлементДляДобавления, ИмяТекущегоЭлемента); + Если Не Результат.ЭлементДобавлен Тогда + Предупреждение(Результат.ТекстСообщенияОшибка); + Возврат; + КонецЕсли; + ПоказатьОповещениеПользователя(НСтр("ru = 'Добавлены в закладки:'"), + Результат.НавигационнаяСсылкаЭлемента, Результат.ПредставлениеЭлемента, БиблиотекаКартинок.Информация32); + +КонецПроцедуры + +// Устанавливает реквизит "отработать после" в выбранных взаимодействиях - клиентская часть +&НаКлиенте +Процедура ОтложитьРассмотрениеВыполнить(Команда) + + ИмяТекущегоЭлемента = ТекущийЭлемент.Имя; + Если Лев(ИмяТекущегоЭлемента,6) = "Список" И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда + Возврат; + КонецЕсли; + + ДатаОтработки = ОбщегоНазначенияКлиент.ДатаСеанса(); + Если ВвестиДату(ДатаОтработки, "Отработать после") Тогда + ОтложитьРассмотрение(ДатаОтработки,Неопределено); + КонецЕсли; + + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтложитьРассмотрениеСписок(Команда) + + ИмяТекущегоЭлемента = ТекущийЭлементСписок().Имя; + Если Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда + Возврат; + КонецЕсли; + + ДатаОтработки = ОбщегоНазначенияКлиент.ДатаСеанса(); + Если ВвестиДату(ДатаОтработки, "Отработать после") Тогда + ОтложитьРассмотрение(ДатаОтработки, Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки); + КонецЕсли; + + ВосстановитьРаскрытыеУзлыДерева(); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьВстречу(Команда) + + СоздатьНовоеВзаимодействие("Встреча"); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьЗапланированноеВзаимодействие(Команда) + + СоздатьНовоеВзаимодействие("ЗапланированноеВзаимодействие"); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьТелефонныйЗвонок(Команда) + + СоздатьНовоеВзаимодействие("ТелефонныйЗвонок"); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьЭлектронноеПисьмо(Команда) + + СоздатьНовоеВзаимодействие("ЭлектронноеПисьмоИсходящее"); + +КонецПроцедуры + +&НаКлиенте +Процедура ПрименитьПравилаОбработки(Команда) + + ТекущиеДанные = Элементы.Папки.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТекущиеДанные.ЕстьПравоНаИзменение = 0 ИЛИ + ТипЗнч(ТекущиеДанные.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") Тогда + Возврат; + КонецЕсли; + + СтруктураПараметры = Новый Структура; + СтруктураПараметры.Вставить("УчетнаяЗапись", ТекущиеДанные.УчетнаяЗапись); + СтруктураПараметры.Вставить("ДляПисемВПапке", ТекущиеДанные.Значение); + + ОткрытьФорму("Справочник.ПравилаОбработкиЭлектроннойПочты.Форма.ПрименениеПравил", СтруктураПараметры); + +КонецПроцедуры + +&НаКлиенте +Процедура ПеренестиВПапку(Команда) + + ИмяТекущегоЭлемента = ТекущийЭлемент.Имя; + Если Лев(ИмяТекущегоЭлемента,6) = "Список" И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда + Возврат; + КонецЕсли; + + ПапкиТекущиеДанные = Элементы.Папки.ТекущиеДанные; + Если ПапкиТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ИмяТекущегоЭлемента = "Папки" Тогда + Если ТипЗнч(ПапкиТекущиеДанные.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") ИЛИ + ПапкиТекущиеДанные.ПредопределеннаяПапка Тогда + Предупреждение(НСтр("ru = 'Команда не может быть выполнена для данного объекта'")); + Возврат; + ИначеЕсли ПапкиТекущиеДанные.ЕстьПравоНаИзменение = 0 Тогда + Предупреждение(НСтр("ru = 'Недостаточно прав для изменения папок.'")); + Возврат; + КонецЕсли; + КонецЕсли; + + ВыбраннаяПапка = ОткрытьФормуМодально("Справочник.ПапкиЭлектронныхПисем.ФормаВыбора", + Новый Структура("Отбор",Новый Структура("Владелец", ПапкиТекущиеДанные.УчетнаяЗапись))); + Если ВыбраннаяПапка <> Неопределено Тогда + + Если Лев(ИмяТекущегоЭлемента,6) = "Список" Тогда + ВыполнитьПереносВПапкуМассиваПисем(Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки, ВыбраннаяПапка); + Иначе + УстановитьРодителяУПапки(ПапкиТекущиеДанные.Значение, ВыбраннаяПапка); + КонецЕсли; + + ВосстановитьРаскрытыеУзлыДерева(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьЗначениеПанелиНавигации(Команда) + + Элемент = ТекущийЭлементСписокПанелиНавигации(); + Если Элемент = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекущиеДанные = Элемент.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено И ТипЗнч(ТекущиеДанные.Значение) <> Тип("Строка") Тогда + СтандартнаяОбработка = Ложь; + ОткрытьЗначение(ТекущиеДанные.Значение); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ///////////////////////////////////////////////////////////////////////////////// -// Обработка изменения быстрых отборов +// Обработка изменения быстрых отборов &НаСервере Процедура ПриИзмененииСтатусаСервер(ОбновлятьПанельНавигации) @@ -13,7 +1208,7 @@ ОбновитьПанельНавигации(); КонецЕсли; -КонецПроцедуры +КонецПроцедуры &НаСервере Процедура ПриИзмененииОтветственногоСервер(ОбновлятьПанельНавигации) @@ -67,8 +1262,8 @@ Иначе - Если Элементы.СтраницыПредпросмотр.ТекущаяСтраница <> Элементы.СтраницаПредпросмотрОбычыйТекст Тогда - Элементы.СтраницыПредпросмотр.ТекущаяСтраница = Элементы.СтраницаПредпросмотрОбычыйТекст; + Если Элементы.СтраницыПредпросмотр.ТекущаяСтраница <> Элементы.СтраницаПредпросмотрОбычныйТекст Тогда + Элементы.СтраницыПредпросмотр.ТекущаяСтраница = Элементы.СтраницаПредпросмотрОбычныйТекст; КонецЕсли; Предпросмотр = ""; ПредпросмотрHTML = ""; @@ -630,7 +1825,7 @@ Иначе - ИмяТекущейСтраницы = Элементы.СтраницаПредпросмотрОбычыйТекст.Имя; + ИмяТекущейСтраницы = Элементы.СтраницаПредпросмотрОбычныйТекст.Имя; Предпросмотр = СсылкаДокументВзаимодействий.Описание; ПредпросмотрHTML = ""; @@ -638,7 +1833,7 @@ ВзаимодействиеДляКоторогоСформированПредпросмотр = СсылкаДокументВзаимодействий; -КонецПроцедуры +КонецПроцедуры ///////////////////////////////////////////////////////////////////////////////// // Переключение и заполнение панелей навигации @@ -1629,77 +2824,79 @@ Папки.ПолучитьЭлементы().Очистить(); Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ЕСТЬNULL(ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма, ЗНАЧЕНИЕ(Справочник.ПапкиЭлектронныхПисем.ПустаяСсылка)) КАК Папка, - | ЕСТЬNULL(ПапкиЭлектронныхПисем.Владелец, Взаимодействия.УчетнаяЗапись) КАК УчетнаяЗапись, - | СУММА(ВЫБОР - | КОГДА Взаимодействия.Рассмотрено - | ТОГДА 0 - | ИНАЧЕ 1 - | КОНЕЦ) КАК НеРассмотрено - |ПОМЕСТИТЬ НеРассмотреноПапки - |ИЗ - | ЖурналДокументов.Взаимодействия КАК Взаимодействия - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем - | ПО ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма = ПапкиЭлектронныхПисем.Ссылка - | И ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма = ПапкиЭлектронныхПисем.Ссылка - | ПО Взаимодействия.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие - |ГДЕ - | (Взаимодействия.Тип = ТИП(Документ.ЭлектронноеПисьмоВходящее) - | ИЛИ Взаимодействия.Тип = ТИП(Документ.ЭлектронноеПисьмоИсходящее)) - | - |СГРУППИРОВАТЬ ПО - | ЕСТЬNULL(ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма, ЗНАЧЕНИЕ(Справочник.ПапкиЭлектронныхПисем.ПустаяСсылка)), - | ЕСТЬNULL(ПапкиЭлектронныхПисем.Владелец, Взаимодействия.УчетнаяЗапись) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ПапкиЭлектронныхПисем.Владелец КАК УчетнаяЗапись, - | ПапкиЭлектронныхПисем.Ссылка КАК Значение, - | ЕСТЬNULL(НеРассмотреноПапки.НеРассмотрено, 0) КАК НеРассмотрено, - | ПапкиЭлектронныхПисем.ПредопределеннаяПапка, - | ВЫБОР - | КОГДА НастройкиУчетныхЗаписейЭлектроннойПочты.ОтветственныйЗаВедениеПапок = &ТекущийПользователь - | ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ КАК ЕстьПравоНаИзменение, - | ВЫБОР - | КОГДА (НЕ ПапкиЭлектронныхПисем.ПредопределеннаяПапка) - | ТОГДА 7 - | ИНАЧЕ ВЫБОР - | КОГДА ПапкиЭлектронныхПисем.Наименование = &Входящие - | ТОГДА 1 - | КОГДА ПапкиЭлектронныхПисем.Наименование = &Отправленные - | ТОГДА 2 - | КОГДА ПапкиЭлектронныхПисем.Наименование = &Черновики - | ТОГДА 3 - | КОГДА ПапкиЭлектронныхПисем.Наименование = &Исходящие - | ТОГДА 4 - | КОГДА ПапкиЭлектронныхПисем.Наименование = &НежелательнаяПочта - | ТОГДА 5 - | КОГДА ПапкиЭлектронныхПисем.Наименование = &Удаленные - | ТОГДА 6 - | КОНЕЦ - | КОНЕЦ КАК НомерКартинки - |ИЗ - | Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем - | ЛЕВОЕ СОЕДИНЕНИЕ НеРассмотреноПапки КАК НеРассмотреноПапки - | ПО (НеРассмотреноПапки.Папка = ПапкиЭлектронныхПисем.Ссылка) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты - | ПО ПапкиЭлектронныхПисем.Владелец = НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты - | - |УПОРЯДОЧИТЬ ПО - | ПапкиЭлектронныхПисем.Код - |ИТОГИ - | СУММА(НеРассмотрено), - | СУММА(ЕстьПравоНаИзменение) - |ПО - | УчетнаяЗапись, - | Значение ИЕРАРХИЯ"; + Запрос.Текст = " + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ЕСТЬNULL(ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма, ЗНАЧЕНИЕ(Справочник.ПапкиЭлектронныхПисем.ПустаяСсылка)) КАК Папка, + | ЕСТЬNULL(ПапкиЭлектронныхПисем.Владелец, Взаимодействия.УчетнаяЗапись) КАК УчетнаяЗапись, + | СУММА(ВЫБОР + | КОГДА Взаимодействия.Рассмотрено + | ТОГДА 0 + | ИНАЧЕ 1 + | КОНЕЦ) КАК НеРассмотрено + |ПОМЕСТИТЬ НеРассмотреноПапки + |ИЗ + | ЖурналДокументов.Взаимодействия КАК Взаимодействия + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем + | ПО ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма = ПапкиЭлектронныхПисем.Ссылка + | И ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма = ПапкиЭлектронныхПисем.Ссылка + | ПО Взаимодействия.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие + |ГДЕ + | (Взаимодействия.Тип = ТИП(Документ.ЭлектронноеПисьмоВходящее) + | ИЛИ Взаимодействия.Тип = ТИП(Документ.ЭлектронноеПисьмоИсходящее)) + | + |СГРУППИРОВАТЬ ПО + | ЕСТЬNULL(ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма, ЗНАЧЕНИЕ(Справочник.ПапкиЭлектронныхПисем.ПустаяСсылка)), + | ЕСТЬNULL(ПапкиЭлектронныхПисем.Владелец, Взаимодействия.УчетнаяЗапись) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ПапкиЭлектронныхПисем.Владелец КАК УчетнаяЗапись, + | ПапкиЭлектронныхПисем.Ссылка КАК Значение, + | ЕСТЬNULL(НеРассмотреноПапки.НеРассмотрено, 0) КАК НеРассмотрено, + | ПапкиЭлектронныхПисем.ПредопределеннаяПапка, + | ВЫБОР + | КОГДА НастройкиУчетныхЗаписейЭлектроннойПочты.ОтветственныйЗаВедениеПапок = &ТекущийПользователь ИЛИ &РольПолныеПравДоступна + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК ЕстьПравоНаИзменение, + | ВЫБОР + | КОГДА (НЕ ПапкиЭлектронныхПисем.ПредопределеннаяПапка) + | ТОГДА 7 + | ИНАЧЕ ВЫБОР + | КОГДА ПапкиЭлектронныхПисем.Наименование = &Входящие + | ТОГДА 1 + | КОГДА ПапкиЭлектронныхПисем.Наименование = &Отправленные + | ТОГДА 2 + | КОГДА ПапкиЭлектронныхПисем.Наименование = &Черновики + | ТОГДА 3 + | КОГДА ПапкиЭлектронныхПисем.Наименование = &Исходящие + | ТОГДА 4 + | КОГДА ПапкиЭлектронныхПисем.Наименование = &НежелательнаяПочта + | ТОГДА 5 + | КОГДА ПапкиЭлектронныхПисем.Наименование = &Удаленные + | ТОГДА 6 + | КОНЕЦ + | КОНЕЦ КАК НомерКартинки + |ИЗ + | Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем + | ЛЕВОЕ СОЕДИНЕНИЕ НеРассмотреноПапки КАК НеРассмотреноПапки + | ПО (НеРассмотреноПапки.Папка = ПапкиЭлектронныхПисем.Ссылка) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты + | ПО ПапкиЭлектронныхПисем.Владелец = НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты + | + |УПОРЯДОЧИТЬ ПО + | ПапкиЭлектронныхПисем.Код + |ИТОГИ + | СУММА(НеРассмотрено), + | СУММА(ЕстьПравоНаИзменение) + |ПО + | УчетнаяЗапись, + | Значение ИЕРАРХИЯ"; Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); + Запрос.УстановитьПараметр("РольПолныеПравДоступна", Пользователи.ЭтоПолноправныйПользователь()); Взаимодействия.УстановитьПараметрыЗапросаИменаПредопределенныеПапки(Запрос); Результат = Запрос.Выполнить(); Дерево = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); @@ -2520,13 +3717,13 @@ КонецПроцедуры /////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции обработки команд +// Процедуры и функции обработки команд -&НаСервере -//установить ответственного в выбранных взаимодействиях - серверная часть +// Установить ответственного в выбранных взаимодействиях - серверная часть //Параметры: // Взаимодействия - список выбранных взаимодействий // Ответственный - устанавливаемый ответственный +&НаСервере Процедура УстановитьОтветственного(Ответственный, Знач ДанныеДляОбработки) ОбновлятьПанельНавигации = Ложь; @@ -2566,10 +3763,10 @@ КонецПроцедуры -&НаСервере -//установить флаг "Рассмотрено" в выбранных взаимодействиях - серверная часть +// Установить флаг "Рассмотрено" в выбранных взаимодействиях - серверная часть //Параметры: // Взаимодействия - список выбранных взаимодействий +&НаСервере Процедура УстановитьФлагРассмотрено(Знач ДанныеДляОбработки, ЗначениеПризнака) ОбновлятьПанельНавигации = Ложь; @@ -2606,8 +3803,10 @@ КонецПроцедуры &НаСервере -Процедура ДобавитьВЗакладкиСервер(Знач ДанныеДляОбработки, ИмяЭлементаФормы) +Функция ДобавитьВЗакладкиСервер(Знач ДанныеДляОбработки, ИмяЭлементаФормы) + Результат = Новый Структура("ЭлементДобавлен,НавигационнаяСсылкаЭлемента, ПредставлениеЭлемента, ТекстСообщенияОшибка", Ложь, "", "", ""); + СхемаКомпоновки = ЖурналыДокументов.Взаимодействия.ПолучитьМакет("СхемаОтборВзаимодействия"); АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновки, УникальныйИдентификатор); @@ -2615,8 +3814,7 @@ КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию); - - Если ИмяЭлементаФормы = "Список" Тогда + Если Лев(ИмяЭлементаФормы, 6) = "Список" Тогда СписокВзаимодействий = Новый СписокЗначений; @@ -2627,50 +3825,62 @@ КонецЦикла; Если СписокВзаимодействий.Количество() = 0 Тогда - Возврат; + Результат.ТекстСообщенияОшибка = НСтр("ru = 'Не выбран элемент для добавления в закладки.'"); + Возврат Результат; КонецЕсли; ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(КомпоновщикНастроек.Настройки.Отбор, - "Ссылка",ВидСравненияКомпоновкиДанных.ВСписке,СписокВзаимодействий); + "Ссылка", ВидСравненияКомпоновкиДанных.ВСписке, СписокВзаимодействий); НаименованиеЗакладки = ?(ТолькоПочта, НСтр("ru = 'Избранные письма'"), НСтр("ru = 'Избранные взаимодействия'")); - + Если СписокВзаимодействий.Количество() > 1 Тогда + Текст = ?(ТолькоПочта, НСтр("ru = 'Выбранные письма (%1)'"), НСтр("ru = 'выбранные взаимодействия (%1)'")); + Результат.ПредставлениеЭлемента = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, СписокВзаимодействий.Количество()); + Иначе + Результат.ПредставлениеЭлемента = ОбщегоНазначения.ПредметСтрокой(СписокВзаимодействий[0].Значение); + Результат.НавигационнаяСсылкаЭлемента = ПолучитьНавигационнуюСсылку(СписокВзаимодействий[0].Значение); + КонецЕсли; Иначе Если ДанныеДляОбработки.Значение = НСтр("ru = 'Все'") Тогда - - Возврат; - + Результат.ТекстСообщенияОшибка = НСтр("ru = 'Закладку без отбора создать нельзя.'"); + Возврат Результат; КонецЕсли; ГруппаОтбораПоПанелиНавигации = ОбщегоНазначенияКлиентСервер.НайтиЭлементОтбораПоПредставлению(Список.Отбор.Элементы, "Отбор панели навигации"); Если ГруппаОтбораПоПанелиНавигации = Неопределено Тогда - Возврат; + Результат.ТекстСообщенияОшибка = НСтр("ru = 'Не выбран элемент для добавления в закладки.'"); + Возврат Результат; КонецЕсли; - СкопироватьОтбор(КомпоновщикНастроек.Настройки.Отбор,ГруппаОтбораПоПанелиНавигации,Истина); - + СкопироватьОтбор(КомпоновщикНастроек.Настройки.Отбор, ГруппаОтбораПоПанелиНавигации, Истина); Если ИмяЭлементаФормы = "РеквизитыПредмета" Тогда СтруктураОписание = ПолучитьСтруктуруОписанияПоПредставлению(ТекущееПредставлениеОтбораПоРеквизитуПредмета); - Если ОбщегоНазначения.ЗначениеСсылочногоТипа(ДанныеДляОбработки.Группировка) Тогда НаименованиеЗакладки = ?(ДанныеДляОбработки.Группировка.Пустая(), СтруктураОписание.ПредставлениеНеУказан, ТекущееПредставлениеОтбораПоРеквизитуПредмета + " = " + Строка(ДанныеДляОбработки.Группировка)); + Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма'"), НСтр("ru = 'Взаимодействия'")); + Результат.НавигационнаяСсылкаЭлемента = ПолучитьНавигационнуюСсылку(ДанныеДляОбработки.Группировка); ИначеЕсли ОбщегоНазначения.ЗначениеСсылочногоТипа(ДанныеДляОбработки.Значение) Тогда НаименованиеЗакладки = НСтр("ru = 'Тип предмета '") + Строка(ДанныеДляОбработки.Значение); + Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма'"), НСтр("ru = 'Взаимодействия'")); + Результат.НавигационнаяСсылкаЭлемента = ПолучитьНавигационнуюСсылку(ДанныеДляОбработки.Значение); ИначеЕсли ДанныеДляОбработки.Значение = НСтр("ru = 'Предмет не указан'") Тогда НаименованиеЗакладки = НСтр("ru = 'Предмет не указан'"); + Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма без предмета'"), НСтр("ru = 'Взаимодействия без предмета'")); Иначе - НаименованиеЗакладки = СтруктураОписание.ПредставлениеНеУказан ; + НаименованиеЗакладки = СтруктураОписание.ПредставлениеНеУказан; + Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма'"), НСтр("ru = 'Взаимодействия'")); КонецЕсли; @@ -2678,53 +3888,133 @@ Если ОбщегоНазначения.ЗначениеСсылочногоТипа(ДанныеДляОбработки.Значение) Тогда - НаименованиеЗакладки = НСтр("ru='Предмет'") + " = " + Строка(ДанныеДляОбработки.Значение); + НаименованиеЗакладки = НСтр("ru = 'Предмет'") + " = " + Строка(ДанныеДляОбработки.Значение); + Текст = ?(ТолькоПочта, НСтр("ru = 'Письма по предмету %1'"), НСтр("ru = 'Взаимодействия по предмету %1'")); + Результат.ПредставлениеЭлемента = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ОбщегоНазначения.ПредметСтрокой(ДанныеДляОбработки.Значение)); + Результат.НавигационнаяСсылкаЭлемента = ПолучитьНавигационнуюСсылку(ДанныеДляОбработки.Значение); ИначеЕсли ДанныеДляОбработки.Значение = НСтр("ru = 'Не указан'") Тогда НаименованиеЗакладки = НСтр("ru = 'Предмет не указан'"); + Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма без предмета'"), НСтр("ru = 'Взаимодействия без предмета'")); ИначеЕсли ДанныеДляОбработки.Значение = НСтр("ru = 'Прочие вопросы'") Тогда НаименованиеЗакладки = НСтр("ru = 'Прочие вопросы'"); + Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Прочие письма'"), НСтр("ru = 'Прочие взаимодействия'")); Иначе НаименованиеЗакладки = НСтр("ru = 'Тип предмета '") + Строка(ДанныеДляОбработки.ОписаниеТипов.Типы()[0]); + Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма по: %1'"), НСтр("ru = 'Взаимодействия по: %1'")); + Результат.ПредставлениеЭлемента = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат.ПредставлениеЭлемента, + ДанныеДляОбработки.ОписаниеТипов.Типы()[0]); КонецЕсли; ИначеЕсли ИмяЭлементаФормы = "Свойства" Тогда Если ТипЗнч(ДанныеДляОбработки.Значение) = Тип("Строка") И - ДанныеДляОбработки.Значение = Нстр("ru = 'Не указан'") Тогда - НаименованиеЗакладки = ТекущееСвойствоПанелиНавигации.Наименование + НСтр("ru = ' не указан'"); + ДанныеДляОбработки.Значение = Нстр("ru = 'Не указан'") Тогда + НаименованиеЗакладки = ТекущееСвойствоПанелиНавигации.Наименование + " " + НСтр("ru = 'не указан'"); + Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма'"), НСтр("ru = 'Взаимодействия'")); Иначе НаименованиеЗакладки = ТекущееСвойствоПанелиНавигации.Наименование + " = " + Строка(ДанныеДляОбработки.Значение); + Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма с заданным свойством: %1'"), НСтр("ru = 'Взаимодействия с заданным свойством: %1'")); + Результат.ПредставлениеЭлемента = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат.ПредставлениеЭлемента, ДанныеДляОбработки.Значение); КонецЕсли; ИначеЕсли ИмяЭлементаФормы = "Категории" Тогда НаименованиеЗакладки = НСтр("ru = 'Входит в категорию '") + Строка(ДанныеДляОбработки.Значение); + Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма из категории: %1'"), НСтр("ru = 'Взаимодействия из категории: %1'")); + Результат.ПредставлениеЭлемента = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат.ПредставлениеЭлемента, ДанныеДляОбработки.Значение); + + ИначеЕсли ИмяЭлементаФормы = "Контакты" Тогда + + Если ОбщегоНазначения.ЗначениеСсылочногоТипа(ДанныеДляОбработки.Значение) Тогда + + НаименованиеЗакладки = НСтр("ru = 'Контакт'") + " = " + Строка(ДанныеДляОбработки.Значение); + Текст = ?(ТолькоПочта, НСтр("ru = 'Письма по контакту %1'"), НСтр("ru = 'Взаимодействия по контакту %1'")); + Результат.ПредставлениеЭлемента = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ОбщегоНазначения.ПредметСтрокой(ДанныеДляОбработки.Значение)); + Результат.НавигационнаяСсылкаЭлемента = ПолучитьНавигационнуюСсылку(ДанныеДляОбработки.Значение); + + ИначеЕсли ДанныеДляОбработки.Значение = НСтр("ru = 'Контакт не подобран'") Тогда + + НаименованиеЗакладки = НСтр("ru = 'Контакт не указан'"); + Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма без подобранных контактов'"), НСтр("ru = 'Взаимодействия без подобранных контактов'")); + + Иначе + + НаименованиеЗакладки = НСтр("ru = 'Тип контакта '") + Строка(ДанныеДляОбработки.ОписаниеТипов.Типы()[0]); + Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма по контактам: %1'"), НСтр("ru = 'Взаимодействия по контактам: %1'")); + Результат.ПредставлениеЭлемента = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат.ПредставлениеЭлемента, + ДанныеДляОбработки.ОписаниеТипов.Типы()[0]); + + КонецЕсли; + + ИначеЕсли ИмяЭлементаФормы = "Папки" Тогда + + НаименованиеЗакладки = НСтр("ru = 'В папке '") + Строка(ДанныеДляОбработки.Значение); + Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма в папке: %1'"), НСтр("ru = 'Взаимодействия в папке: %1'")); + Результат.ПредставлениеЭлемента = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат.ПредставлениеЭлемента, ДанныеДляОбработки.Значение); КонецЕсли; КонецЕсли; + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ЗакладкиВзаимодействий.Ссылка, + | ЗакладкиВзаимодействий.Наименование, + | ЗакладкиВзаимодействий.КомпоновщикНастроек + |ИЗ + | Справочник.ЗакладкиВзаимодействий КАК ЗакладкиВзаимодействий + |ГДЕ + | НЕ ЗакладкиВзаимодействий.ЭтоГруппа + | И НЕ ЗакладкиВзаимодействий.ПометкаУдаления"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + Если ПолучитьXML(КомпоновщикНастроек.ПолучитьНастройки()) = ПолучитьXML(Выборка.КомпоновщикНастроек.Получить()) Тогда + Результат.ТекстСообщенияОшибка = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Закладка с такими настройками уже существует : %1'"), Выборка.Наименование); + Возврат Результат; + КонецЕсли; + КонецЦикла; + Закладка = Справочники.ЗакладкиВзаимодействий.СоздатьЭлемент(); Закладка.Владелец = Пользователи.АвторизованныйПользователь(); Закладка.Наименование = НаименованиеЗакладки; - Закладка.КомпоновщикНастроек = Новый ХранилищеЗначения(КомпоновщикНастроек.ПолучитьНастройки()); - Закладка.Записать(); Элементы.Закладки.Обновить(); -КонецПроцедуры + Результат.ЭлементДобавлен = Истина; + Возврат Результат; + +КонецФункции -//Установить предмет в выбранных взаимодействиях - серверная часть +Функция ПолучитьXML(Значение) + + Запись = Новый ЗаписьXML(); + Запись.УстановитьСтроку(); + СериализаторXDTO.ЗаписатьXML(Запись, Значение); + Возврат Запись.Закрыть(); + +КонецФункции + +// Установить предмет в выбранных взаимодействиях - серверная часть //Параметры: // Взаимодействия - список выбранных взаимодействий // Предмет - устанавливаемый предмет взаимодействий @@ -2759,7 +4049,7 @@ КонецПроцедуры -//Устанавливает реквизит "отработать после" в выбранных взаимодействиях - серверная часть +// Устанавливает реквизит "отработать после" в выбранных взаимодействиях - серверная часть //Параметры: // Взаимодействия - список выбранных взаимодействий // Предмет - устанавливаемая дата отработки @@ -2859,184 +4149,8 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции - -&НаКлиентеНаСервереБезКонтекста -Функция ПолучитьСтруктуруОписанияПоПредставлению(Представление) - - МассивОписаний = - ВзаимодействияКлиентСерверПовтИспПереопределяемый.ПолучитьМассивОписанияВидовНавигацииОтРеквизитовПредмета(); - - Для каждого ЭлементМассиваОписаний Из МассивОписаний Цикл - - Если ЭлементМассиваОписаний.Представление = Представление Тогда - - Возврат ЭлементМассиваОписаний; - - КонецЕсли; - - КонецЦикла; - - Возврат Неопределено; - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция ПолучитьНомерОписанияВМассивеПоПредставлению(Представление) - - МассивОписаний = - ВзаимодействияКлиентСерверПовтИспПереопределяемый.ПолучитьМассивОписанияВидовНавигацииОтРеквизитовПредмета(); - - Для инд = 0 По МассивОписаний.Количество() - 1 Цикл - - Если МассивОписаний[инд].Представление = Представление Тогда - - Возврат инд; - - КонецЕсли; - - КонецЦикла; - - Возврат Неопределено; - -КонецФункции - -&НаСервере -Функция НайтиСтрокуВДанныхФормыКоллекция(ГдеИскать, Значение, Колонка) - - НайденныеСтроки = ГдеИскать.НайтиСтроки(Новый Структура(Колонка, Значение)); - Если НайденныеСтроки.Количество() > 0 Тогда - Возврат НайденныеСтроки[0].ПолучитьИдентификатор(); - КонецЕсли; - - Возврат -1; - -КонецФункции - -//Находит первую строку в заданной колонке, с заданным значением в коллекции ДанныеФормыДерево -&НаСервере -Функция НайтиСтрокуВДанныхФормыДерево(ГдеИскать, Значение, Колонка, ИскатьВПодчиненных) - - ЭлементыДерева = ГдеИскать.ПолучитьЭлементы(); - - Для каждого ЭлементДерева Из ЭлементыДерева Цикл - Если ЭлементДерева[Колонка] = Значение Тогда - Возврат ЭлементДерева.ПолучитьИдентификатор(); - ИначеЕсли ИскатьВПодчиненных Тогда - НайденныйИдентификаторСтроки = НайтиСтрокуВДанныхФормыДерево(ЭлементДерева, Значение,Колонка, ИскатьВПодчиненных); - Если НайденныйИдентификаторСтроки >=0 Тогда - Возврат НайденныйИдентификаторСтроки; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат -1; - -КонецФункции - -&НаКлиенте -Функция ТекущийЭлементСписок() - - Если Элементы.СтраницыСписок.ТекущаяСтраница = Элементы.СтраницаСписокОбычная Тогда - - Возврат Элементы.Список; - - ИначеЕсли Элементы.СтраницыСписок.ТекущаяСтраница = Элементы.СтраницаСписокВходящие Тогда - - Возврат Элементы.СписокВходящие; - - ИначеЕсли Элементы.СтраницыСписок.ТекущаяСтраница = Элементы.СтраницаСписокИсходящие Тогда - - Возврат Элементы.СписокИсходящие; - - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция ТекущийЭлементСписокПанелиНавигации() - - Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКонтакт Тогда - Возврат Элементы.Контакты; - ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет Тогда - Возврат Элементы.Предметы; - ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки Тогда - Возврат Элементы.Папки; - ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаСвойства Тогда - Возврат Элементы.Свойства; - ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаРеквизитыПредмета Тогда - Возврат Элементы.РеквизитыПредмета; - ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКатегории Тогда - Возврат Элементы.Категории; - Иначе - Возврат Неопределено; - КонецЕсли; - -КонецФункции - -&НаКлиенте -Функция ВыборКорректен(ИмяСписка, ПоТекущейСтроке = Ложь) - - ТипГруппировка = Тип("СтрокаГруппировкиДинамическогоСписка"); - Если ПоТекущейСтроке Тогда - - Если ТипЗнч(Элементы[ИмяСписка].ТекущаяСтрока) <> ТипГруппировка И Элементы[ИмяСписка].ТекущиеДанные <> Неопределено Тогда - Возврат Истина; - КонецЕсли; - - Иначе - - Для Каждого Элемент Из Элементы[ИмяСписка].ВыделенныеСтроки Цикл - Если ТипЗнч(Элемент) <> ТипГруппировка Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -&НаСервере -Процедура СкопироватьОтбор(Приемник, Источник, УдалятьПредставлениеГруппы = Ложь, УдалятьНеиспользуемые = Истина, НеВключатьОтборПанелиНавигации = Ложь) - - Для каждого ЭлементОтбораИсточник Из Источник.Элементы Цикл - - Если УдалятьНеиспользуемые И (Не ЭлементОтбораИсточник.Использование) Тогда - Продолжить; - КонецЕсли; - - Если НеВключатьОтборПанелиНавигации И - ТипЗнч(ЭлементОтбораИсточник) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") И - ЭлементОтбораИсточник.Представление = "Отбор панели навигации" Тогда - - Продолжить; - - КонецЕсли; - - Если ТипЗнч(ЭлементОтбораИсточник) = Тип("ЭлементОтбораКомпоновкиДанных") И - ЭлементОтбораИсточник.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Поиск") Тогда - Продолжить; - КонецЕсли; - - ЭлементОтбора = Приемник.Элементы.Добавить(ТипЗнч(ЭлементОтбораИсточник)); - ЗаполнитьЗначенияСвойств(ЭлементОтбора, ЭлементОтбораИсточник); - Если ТипЗнч(ЭлементОтбораИсточник) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда - Если УдалятьПредставлениеГруппы Тогда - ЭлементОтбора.Представление = ""; - КонецЕсли; - СкопироватьОтбор(ЭлементОтбора, ЭлементОтбораИсточник); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - ///////////////////////////////////////////////////////////////////////////////////////// -// ПОЛНОТЕКСТОВЫЙ ПОИСК +// Полнотекстовый поиск &НаСервере Процедура ОпределитьДоступностьПолнотекстовыйПоиск() @@ -3050,6 +4164,7 @@ Если ИнформационнаяБазаФайловая Тогда ИндексППДАктуален = ПолнотекстовыйПоиск.ИндексАктуален(); Если НЕ ИндексППДАктуален Тогда + //Текущая дата используется так как дата актуальности полнотекстового поиска это серверное время Если ТекущаяДата() - ПолнотекстовыйПоиск.ДатаАктуальности() < 300 Тогда ИндексППДАктуален = Истина; КонецЕсли; @@ -3063,8 +4178,8 @@ КонецПроцедуры +// Обновить индекс полнотектового поиска. &НаСервереБезКонтекста -//Обновить индекс полнотектового поиска Процедура ОбновитьИндексППД() УстановитьПривилегированныйРежим(Истина); @@ -3072,8 +4187,8 @@ КонецПроцедуры +// Проверяет актуальность индекса и, в случае необходимости, актуализирует его. &НаКлиенте -//Проверяет актуальность индекса и, в случае необходимости, актуализирует его Процедура ПроверитьИндексППД() Если Не ИндексППДАктуален Тогда @@ -3275,1141 +4390,179 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ +/////////////////////////////////////////////////////////////////////////////// +// Прочее -&НаКлиенте -Процедура Обновить(Команда) +&НаКлиентеНаСервереБезКонтекста +Функция ПолучитьСтруктуруОписанияПоПредставлению(Представление) - ОбновитьНаСервере(); - ВосстановитьРаскрытыеУзлыДерева(); + МассивОписаний = + ВзаимодействияКлиентСерверПовтИспПереопределяемый.ПолучитьМассивОписанияВидовНавигацииОтРеквизитовПредмета(); -КонецПроцедуры - -&НаКлиенте -//получить и отправить входящую электронную почту -Процедура ОтправитьПолучитьПочтуВыполнить(Команда) - - Если НЕ ИнформационнаяБазаФайловая Тогда - Возврат; - КонецЕсли; - - ОчиститьСообщения(); - - УправлениеЭлектроннойПочтойКлиент.ОтправитьЗагрузитьПочтуПользователя(ТекущийЭлементСписок()); - ОбновитьПанельНавигации(); - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура Ответить(Команда) - - ТекущийЭлементСписок = ТекущийЭлементСписок(); - - Если ТекущийЭлементСписок = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ВыборКорректен(ТекущийЭлементСписок.Имя, Истина) Тогда - ТекущееВзаимодействие = ТекущийЭлементСписок.ТекущиеДанные.Ссылка; - Если ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда - Предупреждение(НСтр("ru = 'Команда ""Ответить"" может быть выполнена только для входящего письма.'")); - Возврат; - КонецЕсли; - Иначе - Возврат; - КонецЕсли; - - Основание = Новый Структура("Основание,Команда",ТекущееВзаимодействие, "Ответить"); - ПараметрыОткрытия = Новый Структура("Основание", Основание); - ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыОткрытия); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтветитьВсем(Команда) - - ТекущийЭлементСписок = ТекущийЭлементСписок(); - - Если ТекущийЭлементСписок = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ВыборКорректен(ТекущийЭлементСписок.Имя, Истина) Тогда - ТекущееВзаимодействие = ТекущийЭлементСписок.ТекущиеДанные.Ссылка; - Если ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда - Предупреждение(НСтр("ru = 'Команда ""Ответить всем"" может быть выполнена только для входящего письма.'")); - Возврат; - КонецЕсли; - Иначе - Возврат; - КонецЕсли; - - Основание = Новый Структура("Основание,Команда",ТекущееВзаимодействие, "ОтветитьВсем"); - ПараметрыОткрытия = Новый Структура("Основание", Основание); - ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыОткрытия); - -КонецПроцедуры - -&НаКлиенте -Процедура Переслать(Команда) - - ТекущийЭлементСписок = ТекущийЭлементСписок(); - - Если ТекущийЭлементСписок = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ВыборКорректен(ТекущийЭлементСписок.Имя, Истина) Тогда - ТекущееВзаимодействие = ТекущийЭлементСписок.ТекущиеДанные.Ссылка; - Если ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") И - ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда - Предупреждение(НСтр("ru = 'Команда ""Переслать"" может быть выполнена только для писем.'")); - Возврат; - КонецЕсли; - Иначе - Возврат; - КонецЕсли; - - Основание = Новый Структура("Основание,Команда", ТекущееВзаимодействие, "Переслать"); - ПараметрыОткрытия = Новый Структура("Основание", Основание); - ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыОткрытия); - -КонецПроцедуры - -&НаКлиенте -Процедура ПереключитьПанельНавигации(Команда) - - ПереключитьПанельНавигацииСервер(Команда.Имя); - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьВариантНавигацииПоКонтакту(Команда) - - ПереключитьПанельНавигации(Команда); - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьВариантНавигацииПоПредмету(Команда) - - ПереключитьПанельНавигации(Команда); - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьВариантНавигацииПоЗакладкам(Команда) - - ПереключитьПанельНавигации(Команда); - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьВариантНавигацииПоПапкам(Команда) - - ПереключитьПанельНавигации(Команда); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтветственныйВыполнить(Команда) - - ВыбранныйОтветственный = ОткрытьФормуМодально("Справочник.Пользователи.Форма.ФормаСписка", - Новый Структура("РежимВыбора",Истина)); - Если ВыбранныйОтветственный <> Неопределено Тогда + Для каждого ЭлементМассиваОписаний Из МассивОписаний Цикл - УстановитьОтветственного(ВыбранныйОтветственный,Неопределено); - - КонецЕсли; - - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтветственныйСписок(Команда) - - ИмяТекущегоЭлемента = ТекущийЭлементСписок().Имя; - Если Лев(ИмяТекущегоЭлемента,6) = "Список" И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда - Возврат; - КонецЕсли; - - ВыбранныйОтветственный = ОткрытьФормуМодально("Справочник.Пользователи.Форма.ФормаСписка", - Новый Структура("РежимВыбора",Истина)); - Если ВыбранныйОтветственный <> Неопределено Тогда - - УстановитьОтветственного(ВыбранныйОтветственный,Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки); - - КонецЕсли; - - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура РассмотреноВыполнить(Команда) - - УстановитьФлагРассмотрено(Неопределено,Истина); - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьПризнакРассмотрено(Команда) - - РассмотреноВыполнитьСписок(Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура СнятьПризнакРассмотрено(Команда) - - РассмотреноВыполнитьСписок(Ложь); - -КонецПроцедуры - -&НаКлиенте -Процедура РассмотреноВыполнитьСписок(ЗначенияПризнака) - - ИмяТекущегоЭлемента = ТекущийЭлементСписок().Имя; - Если Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда - Возврат; - КонецЕсли; - - УстановитьФлагРассмотрено(Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки, ЗначенияПризнака); - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -//установить предмет в выбранных взаимодействиях - клиентская часть -Процедура ПредметВыполнить(Команда) - - ВыбранныйТипПредмета = СписокВыбораТипаПредмета.ВыбратьЭлемент(Нстр("ru = 'Выберите тип предмета'")); - Если ВыбранныйТипПредмета = Неопределено Тогда - Возврат; - КонецЕсли; - - Предмет = ОткрытьФормуМодально(ВыбранныйТипПредмета.Значение + ".ФормаВыбора"); - Если Предмет <> Неопределено Тогда - УстановитьПредмет(Предмет,Неопределено); - КонецЕсли; - - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПредметСписок(Команда) - - ИмяТекущегоЭлемента = ТекущийЭлементСписок().Имя; - Если Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда - Возврат; - КонецЕсли; - - ВыбранныйТипПредмета = СписокВыбораТипаПредмета.ВыбратьЭлемент(Нстр("ru = 'Выберите тип предмета'")); - Если ВыбранныйТипПредмета = Неопределено Тогда - Возврат; - КонецЕсли; - - Предмет = ОткрытьФормуМодально(ВыбранныйТипПредмета.Значение + ".ФормаВыбора"); - Если Предмет <> Неопределено Тогда - УстановитьПредмет(Предмет,Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки); - КонецЕсли; - - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура ДобавитьВЗакладки(Команда) - - ИмяТекущегоЭлемента = ТекущийЭлемент.Имя; - Если Лев(ИмяТекущегоЭлемента,6) = "Список" И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда - Возврат; - КонецЕсли; - - Если Лев(ИмяТекущегоЭлемента,6) = "Список" Тогда - ДобавитьВЗакладкиСервер(Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки, ИмяТекущегоЭлемента); - ИначеЕсли ИмяТекущегоЭлемента = "Свойства" ИЛИ ИмяТекущегоЭлемента = "Категории" Тогда - ТекущиеДанные = Элементы[ИмяТекущегоЭлемента].ТекущиеДанные; - Если ТекущиеДанные <> Неопределено Тогда - ДобавитьВЗакладкиСервер(Новый Структура("Значение",ТекущиеДанные.Значение), ИмяТекущегоЭлемента); - КонецЕсли; - ИначеЕсли ИмяТекущегоЭлемента = "РеквизитыПредмета" Тогда - ТекущиеДанные = Элементы[ИмяТекущегоЭлемента].ТекущиеДанные; - Если ТекущиеДанные <> Неопределено Тогда - ДобавитьВЗакладкиСервер(Новый Структура("Значение,Группировка",ТекущиеДанные.Значение, - ТекущиеДанные.Группировка), ИмяТекущегоЭлемента); - КонецЕсли; - Иначе - ТекущиеДанные = Элементы[ИмяТекущегоЭлемента].ТекущиеДанные; - Если ТекущиеДанные <> Неопределено Тогда - ДобавитьВЗакладкиСервер(Новый Структура("Значение,ОписаниеТипов", ТекущиеДанные.Значение, - ТекущиеДанные.ОписаниеТипов), ИмяТекущегоЭлемента); - КонецЕсли - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -//устанавливает реквизит "отработать после" в выбранных взаимодействиях - клиентская часть -Процедура ОтложитьРассмотрениеВыполнить(Команда) - - ИмяТекущегоЭлемента = ТекущийЭлемент.Имя; - Если Лев(ИмяТекущегоЭлемента,6) = "Список" И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда - Возврат; - КонецЕсли; - - ДатаОтработки = ТекущаяДата(); - Если ВвестиДату(ДатаОтработки, "Отработать после") Тогда - ОтложитьРассмотрение(ДатаОтработки,Неопределено); - КонецЕсли; - - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтложитьРассмотрениеСписок(Команда) - - ИмяТекущегоЭлемента = ТекущийЭлементСписок().Имя; - Если Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда - Возврат; - КонецЕсли; - - ДатаОтработки = ТекущаяДата(); - Если ВвестиДату(ДатаОтработки, "Отработать после") Тогда - ОтложитьРассмотрение(ДатаОтработки, Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки); - КонецЕсли; - - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура СоздатьВстречу(Команда) - - СоздатьНовоеВзаимодействие("Встреча"); - -КонецПроцедуры - -&НаКлиенте -Процедура СоздатьЗапланированноеВзаимодействие(Команда) - - СоздатьНовоеВзаимодействие("ЗапланированноеВзаимодействие"); - -КонецПроцедуры - -&НаКлиенте -Процедура СоздатьТелефонныйЗвонок(Команда) - - СоздатьНовоеВзаимодействие("ТелефонныйЗвонок"); - -КонецПроцедуры - -&НаКлиенте -Процедура СоздатьЭлектронноеПисьмо(Команда) - - СоздатьНовоеВзаимодействие("ЭлектронноеПисьмоИсходящее"); - -КонецПроцедуры - -&НаКлиенте -Процедура ПрименитьПравилаОбработки(Команда) - - ТекущиеДанные = Элементы.Папки.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ТекущиеДанные.ЕстьПравоНаИзменение = 0 ИЛИ - ТипЗнч(ТекущиеДанные.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") Тогда - Возврат; - КонецЕсли; - - СтруктураПараметры = Новый Структура; - СтруктураПараметры.Вставить("УчетнаяЗапись", ТекущиеДанные.УчетнаяЗапись); - СтруктураПараметры.Вставить("ДляПисемВПапке", ТекущиеДанные.Значение); - - ОткрытьФорму("Справочник.ПравилаОбработкиЭлектроннойПочты.Форма.ПрименениеПравил", СтруктураПараметры); - -КонецПроцедуры - -&НаКлиенте -Процедура ПеренестиВПапку(Команда) - - ИмяТекущегоЭлемента = ТекущийЭлемент.Имя; - Если Лев(ИмяТекущегоЭлемента,6) = "Список" И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда - Возврат; - КонецЕсли; - - ПапкиТекущиеДанные = Элементы.Папки.ТекущиеДанные; - Если ПапкиТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ИмяТекущегоЭлемента = "Папки" Тогда - Если ТипЗнч(ПапкиТекущиеДанные.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") ИЛИ - ПапкиТекущиеДанные.ПредопределеннаяПапка Тогда - Предупреждение(НСтр("ru = 'Команда не может быть выполнена для данного объекта'")); - Возврат; - ИначеЕсли ПапкиТекущиеДанные.ЕстьПравоНаИзменение = 0 Тогда - Предупреждение(НСтр("ru = 'Недостаточно прав для изменения папок.'")); - Возврат; - КонецЕсли; - КонецЕсли; - - ВыбраннаяПапка = ОткрытьФормуМодально("Справочник.ПапкиЭлектронныхПисем.ФормаВыбора", - Новый Структура("Отбор",Новый Структура("Владелец", ПапкиТекущиеДанные.УчетнаяЗапись))); - Если ВыбраннаяПапка <> Неопределено Тогда - - Если Лев(ИмяТекущегоЭлемента,6) = "Список" Тогда - ВыполнитьПереносВПапкуМассиваПисем(Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки, ВыбраннаяПапка); - Иначе - УстановитьРодителяУПапки(ПапкиТекущиеДанные.Значение, ВыбраннаяПапка); + Если ЭлементМассиваОписаний.Представление = Представление Тогда + + Возврат ЭлементМассиваОписаний; + КонецЕсли; - ВосстановитьРаскрытыеУзлыДерева(); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ИзменитьЗначениеПанелиНавигации(Команда) - - Элемент = ТекущийЭлементСписокПанелиНавигации(); - Если Элемент = Неопределено Тогда - Возврат; - КонецЕсли; - - ТекущиеДанные = Элемент.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено И ТипЗнч(ТекущиеДанные.Значение) <> Тип("Строка") Тогда - СтандартнаяОбработка = Ложь; - ОткрытьЗначение(ТекущиеДанные.Значение); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); - - Взаимодействия.ИнициализироватьФормуСпискаВзаимодействий(ЭтаФорма); - ОпределитьДоступностьПолнотекстовыйПоиск(); - - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Закладки.Отбор, "Владелец", Пользователи.ТекущийПользователь(),,, Истина); - ТекущийПользователь = Пользователи.АвторизованныйПользователь(); - - ДополнитьМенюПанелиНавигации(); - - Для Каждого ТипПредмета Из Метаданные.Документы.ЭлектронноеПисьмоИсходящее.Реквизиты.Предмет.Тип.Типы() Цикл - Если ТолькоПочта И - (ТипПредмета = Тип("ДокументСсылка.Встреча") ИЛИ ТипПредмета = Тип("ДокументСсылка.ТелефонныйЗвонок") ИЛИ - ТипПредмета = Тип("ДокументСсылка.ЗапланированноеВзаимодействие")) Тогда - Продолжить; - КонецЕсли; - СписокВыбораТипаПредмета.Добавить(Метаданные.НайтиПоТипу(ТипПредмета).ПолноеИмя(), Строка(ТипПредмета)); КонецЦикла; - Если НЕ ИнформационнаяБазаФайловая Тогда - Элементы.СписокОтправитьПолучитьПочту.Видимость = Ложь; - Элементы.СписокОтправитьПолучитьПочтуВходящие.Видимость = Ложь; - Элементы.СписокОтправитьПолучитьПочтуИсходящие.Видимость = Ложь; - КонецЕсли; + Возврат Неопределено; - ТипВзаимодействия = ?(ТолькоПочта, "ВсеПисьма","Все"); - Статус = "Все"; - - Взаимодействия.ЗаполнитьСписокДоступныхДляСозданияДокументов(ДокументыДоступныеДляСоздания); - -КонецПроцедуры +КонецФункции -&НаСервере -Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) +&НаКлиентеНаСервереБезКонтекста +Функция ПолучитьНомерОписанияВМассивеПоПредставлению(Представление) + + МассивОписаний = + ВзаимодействияКлиентСерверПовтИспПереопределяемый.ПолучитьМассивОписанияВидовНавигацииОтРеквизитовПредмета(); - ИмяТекущейПанелиНавигации = Настройки.Получить("ИмяТекущейПанелиНавигации"); - Если ПустаяСтрока(ИмяТекущейПанелиНавигации) Тогда - ИмяТекущейПанелиНавигации = "СтраницаПредмет"; - ИначеЕсли ИмяТекущейПанелиНавигации = "СтраницаСвойства" Тогда - Если ТаблицаДопРеквизитовСвойств.НайтиСтроки(Новый - Структура("ДопРеквизитСведение",ТекущееСвойствоПанелиНавигации)).Количество() = 0 Тогда - ИмяТекущейПанелиНавигации = "СтраницаПредмет"; - КонецЕсли; - ИначеЕсли ИмяТекущейПанелиНавигации = "СтраницаРеквизитыПредмета" Тогда - МассивОписаний = - ВзаимодействияКлиентСерверПовтИспПереопределяемый.ПолучитьМассивОписанияВидовНавигацииОтРеквизитовПредмета(); - ОписаниеНайдено = Ложь; - Для каждого ЭлементМассива Из МассивОписаний Цикл - Если ЭлементМассива.Представление = ТекущееПредставлениеОтбораПоРеквизитуПредмета Тогда - ОписаниеНайдено = Истина; - Прервать; - КонецЕсли; - КонецЦикла; + Для инд = 0 По МассивОписаний.Количество() - 1 Цикл - Если Не ОписаниеНайдено Тогда - ИмяТекущейПанелиНавигации = "СтраницаПредмет"; - КонецЕсли; - - КонецЕсли; - - Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы[ИмяТекущейПанелиНавигации]; - - Статус = Настройки.Получить("Статус"); - Если Статус <> Неопределено Тогда - Настройки.Удалить("Статус"); - КонецЕсли; - Если Не ИспользоватьПризнакРассмотрено Тогда - Статус = "Все"; - КонецЕсли; - Если ЗначениеЗаполнено(Статус) И Статус <> "Все" Тогда - ПриИзмененииСтатусаСервер(Ложь); - Иначе - Статус = "Все"; - КонецЕсли; - - Ответственный = Настройки.Получить("Ответственный"); - ПриИзмененииОтветственногоСервер(Ложь); - - Взаимодействия.ПриЗагрузкеТипаВзаимодействийИзНастроек(ЭтаФорма, Настройки); - - ПриИзмененииТипаСервер(Ложь); - ОбновитьПанельНавигации(); - УстановитьЗаголовокВидаПанелиНавигации(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - - Если Врег(ИмяСобытия) = Врег("Запись_ЗакладкиВзаимодействий") Тогда - Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаЗакладки Тогда - Элементы.Закладки.Обновить(); - ОбработатьАктивизациюСтрокиПанелиНавигации(); - КонецЕсли; - ИначеЕсли Врег(ИмяСобытия) = Врег("Запись_ПапкиЭлектронныхПисем") ИЛИ - Врег(ИмяСобытия) = Врег("ПримененыПравилаОбработкиПисем") Тогда - Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки Тогда - ОбновитьПанельНавигации(); - ВосстановитьРаскрытыеУзлыДерева(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКонтакт И - Контакты.ПолучитьЭлементы().Количество() = 0 Тогда - ПереключитьПанельНавигацииСервер("УстановитьВариантНавигацииПоКонтакту"); - КонецЕсли; - - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура ПанельНавигацииПриАктивизацииСтроки(Элемент) - - ТекущийЭлементСписок = ТекущийЭлементСписок(); - - Если Элемент.Имя = "Предметы" И - Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаПредмет Тогда - Возврат; - ИначеЕсли Элемент.Имя = "Контакты" И - Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаКонтакт Тогда - Возврат; - ИначеЕсли Элемент.Имя = "Закладки" И - Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаЗакладки Тогда - Возврат; - ИначеЕсли Элемент.Имя = "Свойства" И - Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаСвойства Тогда - Возврат; - ИначеЕсли Элемент.Имя = "РеквизитыПредмета" И - Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаРеквизитыПредмета Тогда - Возврат; - ИначеЕсли Элемент.Имя = "Папки" И - Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаПапки Тогда - Возврат; - ИначеЕсли Элемент.Имя = "Категории" И - Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаКатегории Тогда - Возврат; - КонецЕсли; - - Если НеОтрабатыватьАктивизациюПанелиНавигации Тогда - НеОтрабатыватьАктивизациюПанелиНавигации = Ложь; - Иначе - ПодключитьОбработчикОжидания("ОбработатьАктивизациюСтрокиПанелиНавигации",0.3,Истина); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СтатусПриИзменении(Элемент) - - ПриИзмененииСтатусаСервер(Истина); - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтветственныйПриИзменении(Элемент) - - ПриИзмененииОтветственногоСервер(Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура ТипВзаимодействияПриИзменении(Элемент) - - ПриИзмененииТипаСервер(); - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура СписокПриИзменении(Элемент) - - Если Элементы.СтраницыСписок.ТекущаяСтраница = Элементы.СтраницаСписокОбычная И - Элемент.Имя <> "Список" Тогда - - Возврат; - - ИначеЕсли Элементы.СтраницыСписок.ТекущаяСтраница = Элементы.СтраницаСписокВходящие И - Элемент.Имя <> "СписокВходящие" Тогда - - Возврат; - - ИначеЕсли Элементы.СтраницыСписок.ТекущаяСтраница = Элементы.СтраницаСписокИсходящие И - Элемент.Имя <> "СписокИсходящие" Тогда - - Возврат; - - КонецЕсли; - - ОбновитьПанельНавигации(); - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПерсональныеНастройки(Команда) - - ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.НастройкиРаботыСПочтой", , ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура СписокПриАктивизацииСтроки(Элемент) - - ТекущийЭлементСписок = ТекущийЭлементСписок(); - - Если ТекущийЭлементСписок = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ТекущийЭлементСписок.ТекущиеДанные = Неопределено Тогда - Если Элементы.СтраницыПредпросмотр.ТекущаяСтраница <> Элементы.СтраницаПредпросмотрОбычыйТекст Тогда - Элементы.СтраницыПредпросмотр.ТекущаяСтраница = Элементы.СтраницаПредпросмотрОбычыйТекст; - КонецЕсли; - Предпросмотр = ""; - ПредпросмотрHTML = ""; - ВзаимодействиеДляКоторогоСформированПредпросмотр = Неопределено; - - Иначе - - Если Элемент.Имя = "Список" И Элементы.СтраницыСписок.ТекущаяСтраница <> Элементы.СтраницаСписокОбычная Тогда - Возврат; - ИначеЕсли Элемент.Имя = "СписокВходящие" И - Элементы.СтраницыСписок.ТекущаяСтраница <> Элементы.СтраницаСписокВходящие Тогда - Возврат; - ИначеЕсли Элемент.Имя = "СписокИсходящие" И - Элементы.СтраницыСписок.ТекущаяСтраница <> Элементы.СтраницаСписокИсходящие Тогда - Возврат; - КонецЕсли; - - Если ВыборКорректен(Элемент.Имя,Истина) И - ВзаимодействиеДляКоторогоСформированПредпросмотр <> ТекущийЭлементСписок.ТекущиеДанные.Ссылка Тогда + Если МассивОписаний[инд].Представление = Представление Тогда - Если ТекущийЭлементСписок.ВыделенныеСтроки.Количество() = 1 Тогда - - ПодключитьОбработчикОжидания("ОбработатьАктивизациюСтрокиСписка",0.1,Истина); - - КонецЕсли; + Возврат инд; КонецЕсли; - КонецЕсли; + КонецЦикла; -КонецПроцедуры + Возврат Неопределено; -&НаКлиенте -Процедура ПредметыКонтактыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ТекущиеДанные = Элемент.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено И ТипЗнч(ТекущиеДанные.Значение) <> Тип("Строка") Тогда - СтандартнаяОбработка = Ложь; - ОткрытьЗначение(ТекущиеДанные.Значение); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ТолькоПоАктивнымПредметамПриИзменении(Элемент) - - ОбновитьПанельНавигации(); - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПапкиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) - - Отказ = Истина; - - ТекущиеДанные = Элементы.Папки.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ТекущиеДанные.ЕстьПравоНаИзменение = 0 Тогда - Предупреждение(НСтр("ru = 'Недостаточно прав для создания папки.'")); - Возврат; - КонецЕсли; - - СтруктураПараметры = Новый Структура; - СтруктураПараметры.Вставить("Владелец", ТекущиеДанные.УчетнаяЗапись); - Если ТипЗнч(ТекущиеДанные.Значение) = Тип("СправочникСсылка.ПапкиЭлектронныхПисем") Тогда - СтруктураПараметры.Вставить("Родитель", ТекущиеДанные.Значение); - КонецЕсли; - - ОткрытьФормуМодально("Справочник.ПапкиЭлектронныхПисем.ФормаОбъекта",Новый Структура("ЗначенияЗаполнения",СтруктураПараметры), ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура ПапкиПередУдалением(Элемент, Отказ) - - Отказ = Истина; - - ТекущиеДанные = Элементы.Папки.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ТипЗнч(ТекущиеДанные.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") - ИЛИ ТекущиеДанные.ЕстьПравоНаИзменение = 0 ИЛИ ТекущиеДанные.ПредопределеннаяПапка Тогда - Возврат; - КонецЕсли; - - ТекстВопроса = НСтр("ru = 'Удалить папку ""'") + Строка(ТекущиеДанные.Значение) - + НСтр("ru = '"" и переместить все ее содержимое в папку ""Удаленные""'"); - Ответ = Вопрос(ТекстВопроса,РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Да Тогда - - ОписаниеОшибки = УдалитьПапкуСервер(ТекущиеДанные.Значение); - Если НЕ ПустаяСтрока(ОписаниеОшибки) Тогда - Предупреждение(ОписаниеОшибки); - Иначе - ВосстановитьРаскрытыеУзлыДерева(); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры +КонецФункции &НаСервере -Функция УдалитьПапкуСервер(Папка) - - ОписаниеОшибки = ""; - Взаимодействия.ВыполнитьУдалениеПапкиЭлектронныхПисем(Папка, ОписаниеОшибки); - Если ПустаяСтрока(ОписаниеОшибки) Тогда - ОбновитьПанельНавигации(); +Функция НайтиСтрокуВДанныхФормыКоллекция(ГдеИскать, Значение, Колонка) + + НайденныеСтроки = ГдеИскать.НайтиСтроки(Новый Структура(Колонка, Значение)); + Если НайденныеСтроки.Количество() > 0 Тогда + Возврат НайденныеСтроки[0].ПолучитьИдентификатор(); КонецЕсли; - Возврат ОписаниеОшибки; + Возврат -1; + +КонецФункции + +// Находит первую строку в заданной колонке, с заданным значением в коллекции ДанныеФормыДерево +&НаСервере +Функция НайтиСтрокуВДанныхФормыДерево(ГдеИскать, Значение, Колонка, ИскатьВПодчиненных) + + ЭлементыДерева = ГдеИскать.ПолучитьЭлементы(); + + Для каждого ЭлементДерева Из ЭлементыДерева Цикл + Если ЭлементДерева[Колонка] = Значение Тогда + Возврат ЭлементДерева.ПолучитьИдентификатор(); + ИначеЕсли ИскатьВПодчиненных Тогда + НайденныйИдентификаторСтроки = НайтиСтрокуВДанныхФормыДерево(ЭлементДерева, Значение,Колонка, ИскатьВПодчиненных); + Если НайденныйИдентификаторСтроки >=0 Тогда + Возврат НайденныйИдентификаторСтроки; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат -1; КонецФункции &НаКлиенте -Процедура ТипВзаимодействияСтатусОчистка(Элемент, СтандартнаяОбработка) +Функция ТекущийЭлементСписок() - СтандартнаяОбработка = Ложь; - -КонецПроцедуры - -&НаКлиенте -Процедура СтрокаПоискаПриИзменении(Элемент) - - ОписанияНайденоПП.Очистить(); - - Если СтрокаПоиска <> "" Тогда + Если Элементы.СтраницыСписок.ТекущаяСтраница = Элементы.СтраницаСписокОбычная Тогда + + Возврат Элементы.Список; + + ИначеЕсли Элементы.СтраницыСписок.ТекущаяСтраница = Элементы.СтраницаСписокВходящие Тогда + + Возврат Элементы.СписокВходящие; + + ИначеЕсли Элементы.СтраницыСписок.ТекущаяСтраница = Элементы.СтраницаСписокИсходящие Тогда + + Возврат Элементы.СписокИсходящие; - ПроверитьИндексППД(); - ЭтаФорма.ТекущийЭлемент = ?(НЕ РасширенныйПоиск, Элементы.СтрокаПоиска, ТекущийЭлементСписок()); - - Иначе - РасширенныйПоиск = Ложь; - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( - Список.Отбор, - "Поиск", - Неопределено, - ВидСравненияКомпоновкиДанных.Равно,,Ложь); - ОснованиеВыбора = ""; КонецЕсли; -КонецПроцедуры + Возврат Неопределено; + +КонецФункции &НаКлиенте -Процедура СтрокаПоискаАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) +Функция ТекущийЭлементСписокПанелиНавигации() + + Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКонтакт Тогда + Возврат Элементы.Контакты; + ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет Тогда + Возврат Элементы.Предметы; + ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки Тогда + Возврат Элементы.Папки; + ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаСвойства Тогда + Возврат Элементы.Свойства; + ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаРеквизитыПредмета Тогда + Возврат Элементы.РеквизитыПредмета; + ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКатегории Тогда + Возврат Элементы.Категории; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция ВыборКорректен(ИмяСписка, ПоТекущейСтроке = Ложь) - СтандартнаяОбработка = Ложь; - ДанныеВыбора = Новый СписокЗначений; - - КоличествоНайденных = 0; - Для каждого ЭлементСписка Из Элементы.СтрокаПоиска.СписокВыбора Цикл - Если ЛЕВ(ВРег(ЭлементСписка.Значение), СтрДлина(СокрЛП(Текст))) = ВРег(СокрЛП(Текст)) Тогда - ДанныеВыбора.Добавить(ЭлементСписка.Значение); - КоличествоНайденных = КоличествоНайденных + 1; - Если КоличествоНайденных > 7 Тогда - Прервать; + ТипГруппировка = Тип("СтрокаГруппировкиДинамическогоСписка"); + Если ПоТекущейСтроке Тогда + + Если ТипЗнч(Элементы[ИмяСписка].ТекущаяСтрока) <> ТипГруппировка И Элементы[ИмяСписка].ТекущиеДанные <> Неопределено Тогда + Возврат Истина; + КонецЕсли; + + Иначе + + Для Каждого Элемент Из Элементы[ИмяСписка].ВыделенныеСтроки Цикл + Если ТипЗнч(Элемент) <> ТипГруппировка Тогда + Возврат Истина; КонецЕсли; + КонецЦикла; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +&НаСервере +Процедура СкопироватьОтбор(Приемник, Источник, УдалятьПредставлениеГруппы = Ложь, УдалятьНеиспользуемые = Истина, НеВключатьОтборПанелиНавигации = Ложь) + + Для каждого ЭлементОтбораИсточник Из Источник.Элементы Цикл + + Если УдалятьНеиспользуемые И (Не ЭлементОтбораИсточник.Использование) Тогда + Продолжить; + КонецЕсли; + + Если НеВключатьОтборПанелиНавигации И + ТипЗнч(ЭлементОтбораИсточник) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") И + ЭлементОтбораИсточник.Представление = "Отбор панели навигации" Тогда + + Продолжить; + + КонецЕсли; + + Если ТипЗнч(ЭлементОтбораИсточник) = Тип("ЭлементОтбораКомпоновкиДанных") И + ЭлементОтбораИсточник.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Поиск") Тогда + Продолжить; + КонецЕсли; + + ЭлементОтбора = Приемник.Элементы.Добавить(ТипЗнч(ЭлементОтбораИсточник)); + ЗаполнитьЗначенияСвойств(ЭлементОтбора, ЭлементОтбораИсточник); + Если ТипЗнч(ЭлементОтбораИсточник) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + Если УдалятьПредставлениеГруппы Тогда + ЭлементОтбора.Представление = ""; + КонецЕсли; + СкопироватьОтбор(ЭлементОтбора, ЭлементОтбораИсточник); КонецЕсли; КонецЦикла; -КонецПроцедуры - -&НаКлиенте -Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) - - ВзаимодействияКлиент.СписокПередНачаломДобавления(Элемент, Отказ, Копирование, ТолькоПочта, ДокументыДоступныеДляСоздания); - -КонецПроцедуры - -&НаКлиенте -Процедура УзелДереваПанелиНавигацииПередСворачиванием(Элемент, Строка, Отказ) - - ИмяДерева = Элемент.Имя; - - Если Элемент.ТекущаяСтрока <> Неопределено Тогда - ДанныеСтроки = Элементы[ИмяДерева].ДанныеСтроки(Строка); - Если ДанныеСтроки <> Неопределено Тогда - СохранитьСостояниеУзлаВНастройках(ИмяДерева, ДанныеСтроки.Значение, Ложь); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура УзелДереваПанелиНавигацииПередРазворачиванием(Элемент, Строка, Отказ) - - ИмяДерева = Элемент.Имя; - - Если Элемент.ТекущаяСтрока <> Неопределено Тогда - ДанныеСтроки = Элементы[ИмяДерева].ДанныеСтроки(Строка); - Если ДанныеСтроки <> Неопределено Тогда - СохранитьСостояниеУзлаВНастройках(ИмяДерева, ДанныеСтроки.Значение, Истина); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПредпросмотрHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) - - ВзаимодействияКлиент.ПолеHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////////// -// Обработка перетаскивания - -&НаКлиенте -Процедура ПредметыПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - - Если (Строка = Неопределено) ИЛИ (ПараметрыПеретаскивания.Значение = Неопределено) Тогда - Возврат; - КонецЕсли; - - СтандартнаяОбработка = Ложь; - - СтрокаНазначение = Предметы.НайтиПоИдентификатору(Строка); - - Если Не ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтрокаНазначение.Значение) И - Не ВзаимодействияКлиентСервер.ЯвляетсяПредметом(СтрокаНазначение.Значение) Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - КонецЕсли; - - Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда - Для каждого ЭлементМассива Из ПараметрыПеретаскивания.Значение Цикл - Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(ЭлементМассива) Тогда - Возврат; - КонецЕсли; - КонецЦикла; - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Число") Тогда - СтрокаПеретаскивание = Предметы.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); - - Если Не ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтрокаПеретаскивание.Значение) Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - КонецЕсли; - - Иначе - - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПредметыПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - - СтандартнаяОбработка = Ложь; - - СтрокаНазначение = Предметы.НайтиПоИдентификатору(Строка); - - Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда - ВзаимодействияВызовСервера.УстановитьПредметДляМассиваВзаимодействий(ПараметрыПеретаскивания.Значение, - СтрокаНазначение.Значение, Истина); - Иначе - СтрокаПеретаскивание = Предметы.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); - ВзаимодействияВызовСервера.ЗаменитьПредметВЦепочкеВзаимодействий(СтрокаПеретаскивание.Значение, - СтрокаНазначение.Значение); - КонецЕсли; - - ОбновитьПанельНавигации(); - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПапкиПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - - Если (Строка = Неопределено) ИЛИ (ПараметрыПеретаскивания.Значение = Неопределено) Тогда - Возврат; - КонецЕсли; - - СтандартнаяОбработка = Ложь; - - СтрокаНазначение = Папки.НайтиПоИдентификатору(Строка); - - Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда - - Если ТипЗнч(СтрокаНазначение.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") ИЛИ - СтрокаНазначение.ЕстьПравоНаИзменение = 0 Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - Возврат; - КонецЕсли; - - - Для каждого ЭлементМассива Из ПараметрыПеретаскивания.Значение Цикл - Если ВзаимодействияКлиентСервер.ЯвляетсяЭлектроннымПисьмом(ЭлементМассива) Тогда - ТекущийЭлементСписок = ТекущийЭлементСписок(); - Если ТекущийЭлементСписок = Неопределено Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - КонецЕсли; - ДанныеСтроки = ТекущийЭлементСписок.ДанныеСтроки(ЭлементМассива); - Если ДанныеСтроки.УчетнаяЗапись = СтрокаНазначение.УчетнаяЗапись Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение; - Возврат; - КонецЕсли; - КонецЕсли; - КонецЦикла; - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - - ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Число") Тогда - - СтрокаПеретаскивание = Папки.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); - Если СтрокаПеретаскивание.УчетнаяЗапись <> СтрокаНазначение.УчетнаяЗапись Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - Возврат; - КонецЕсли; - - СтрокаРодитель = СтрокаНазначение; - Пока ТипЗнч(СтрокаРодитель.Значение) <> Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") Цикл - Если СтрокаПеретаскивание = СтрокаРодитель Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - Возврат; - КонецЕсли; - СтрокаРодитель = СтрокаРодитель.ПолучитьРодителя(); - КонецЦикла; - - Иначе - - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПапкиПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - - СтандартнаяОбработка = Ложь; - - СтрокаНазначение = Папки.НайтиПоИдентификатору(Строка); - - Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда - ВыполнитьПереносВПапкуМассиваПисем(ПараметрыПеретаскивания.Значение, СтрокаНазначение.Значение); - ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Число") Тогда - ДанныеСтрокиПеретаскивания = Папки.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); - Если НЕ ДанныеСтрокиПеретаскивания.ПолучитьРодителя() = СтрокаНазначение Тогда - УстановитьРодителяУПапки(ДанныеСтрокиПеретаскивания.Значение, - ?(ТипЗнч(СтрокаНазначение.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты"), - ПредопределенноеЗначение("Справочник.ПапкиЭлектронныхПисем.ПустаяСсылка"), - СтрокаНазначение.Значение)); - КонецЕсли; - - КонецЕсли; - - ОбновитьПанельНавигации(СтрокаНазначение.Значение); - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПапкиНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение) - - Если ПараметрыПеретаскивания.Значение = Неопределено Тогда - Возврат; - КонецЕсли; - - ДанныеСтроки = Папки.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); - Если ТипЗнч(ДанныеСтроки.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") ИЛИ - ДанныеСтроки.ПредопределеннаяПапка ИЛИ ДанныеСтроки.ЕстьПравоНаИзменение = 0 Тогда - Выполнение = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура РеквизитыПредметаПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - - Если (Строка = Неопределено) ИЛИ (ПараметрыПеретаскивания.Значение = Неопределено) Тогда - Возврат; - КонецЕсли; - - СтандартнаяОбработка = Ложь; - - СтрокаНазначение = РеквизитыПредмета.НайтиПоИдентификатору(Строка); - - Если Не ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтрокаНазначение.Значение) И - Не ВзаимодействияКлиентСервер.ЯвляетсяПредметом(СтрокаНазначение.Значение) Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - КонецЕсли; - - Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда - Для каждого ЭлементМассива Из ПараметрыПеретаскивания.Значение Цикл - Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(ЭлементМассива) Тогда - Возврат; - КонецЕсли; - КонецЦикла; - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - - ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Число") Тогда - - СтрокаПеретаскивание = РеквизитыПредмета.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); - - Если Не ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтрокаПеретаскивание.Значение) Тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - КонецЕсли; - - Иначе - - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура РеквизитыПредметаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - - СтандартнаяОбработка = Ложь; - - СтрокаНазначение = РеквизитыПредмета.НайтиПоИдентификатору(Строка); - - Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда - ВзаимодействияВызовСервера.УстановитьПредметДляМассиваВзаимодействий(ПараметрыПеретаскивания.Значение, - СтрокаНазначение.Значение, Истина); - Иначе - СтрокаПеретаскивание = РеквизитыПредмета.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); - ВзаимодействияВызовСервера.ЗаменитьПредметВЦепочкеВзаимодействий(СтрокаПеретаскивание.Значение, - СтрокаНазначение.Значение); - КонецЕсли; - - ОбновитьПанельНавигации(); - ВосстановитьРаскрытыеУзлыДерева(); - -КонецПроцедуры - -&НаКлиенте -Процедура РеквизитыПредметаНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение) - - Если ПараметрыПеретаскивания.Значение = Неопределено Тогда - Возврат; - КонецЕсли; - - ДанныеСтроки = РеквизитыПредмета.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); - Если Не ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(ДанныеСтроки.Значение) Тогда - Выполнение = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СписокПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - - СтандартнаяОбработка = Ложь; - - СписокИменФайлов = Новый СписокЗначений; - - Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл") И - ПараметрыПеретаскивания.Значение.ЭтоФайл() = Истина Тогда - - СписокИменФайлов.Добавить(ПараметрыПеретаскивания.Значение.ПолноеИмя,ПараметрыПеретаскивания.Значение.Имя); - - ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда - - Если ПараметрыПеретаскивания.Значение.Количество() >= 1 И - ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Файл") Тогда - - Для Каждого ФайлПринятый Из ПараметрыПеретаскивания.Значение Цикл - Если ТипЗнч(ФайлПринятый) = Тип("Файл") И ФайлПринятый.ЭтоФайл() Тогда - СписокИменФайлов.Добавить(ФайлПринятый.ПолноеИмя,ФайлПринятый.Имя); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - КонецЕсли; - - ОткрытьФормуМодально("Документ.ЭлектронноеПисьмоИсходящее.ФормаОбъекта", Новый Структура("Вложения",СписокИменФайлов), ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура СписокПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - - СтандартнаяОбработка = Ложь; - КонецПроцедуры diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form index 1e68126d7..9878e0e61 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form @@ -17,7 +17,7 @@ ПереключитьРежимПросмотраРасширеннаяПодсказка - 145 + 147 Label true true @@ -33,9 +33,6 @@ true UserCmds true - - CommonPicture.ИерархическийСписок - Auto @@ -56,7 +53,7 @@ ТипВзаимодействияРасширеннаяПодсказка - 146 + 148 Label true true @@ -215,7 +212,7 @@ СтатусРасширеннаяПодсказка - 148 + 150 Label true true @@ -303,7 +300,7 @@ ОтветственныйРасширеннаяПодсказка - 150 + 152 Label true true @@ -343,7 +340,7 @@ true ГруппаФильтрыРасширеннаяПодсказка - 144 + 146 Label true true @@ -394,7 +391,7 @@ ДатаРасширеннаяПодсказка - 196 + 197 Label true true @@ -439,7 +436,7 @@ УчастникиРасширеннаяПодсказка - 198 + 199 Label true true @@ -483,7 +480,7 @@ ТемаРасширеннаяПодсказка - 200 + 201 Label true true @@ -527,7 +524,7 @@ СписокСоздатьЭлектронноеПисьмоОтдельнаяКнопкаРасширеннаяПодсказка - 158 + 160 Label true true @@ -559,7 +556,7 @@ СписокСоздатьВстречуРасширеннаяПодсказка - 160 + 162 Label true true @@ -585,7 +582,7 @@ СписокСоздатьЗапланированноеВзаимодействиеРасширеннаяПодсказка - 161 + 163 Label true true @@ -611,7 +608,7 @@ СписокСоздатьТелефонныйЗвонокРасширеннаяПодсказка - 162 + 164 Label true true @@ -637,7 +634,7 @@ СписокСоздатьЭлектронноеПисьмоРасширеннаяПодсказка - 163 + 165 Label true true @@ -668,7 +665,7 @@ ГруппаСоздатьРасширеннаяПодсказка - 159 + 161 Label true true @@ -685,298 +682,6 @@ Normal - - ГруппаКомандыСписка - 82 - - Изменить - 83 - true - true - - true - - - ИзменитьРасширеннаяПодсказка - 165 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - - - Скопировать - 84 - true - true - - true - - - СкопироватьРасширеннаяПодсказка - 166 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Copy - Normal - Auto - true - true - UserCmds - Auto - - - ГруппаСписокУстановитьПометкуУдаления - 86 - - УстановитьПометкуУдаления - 85 - true - true - - true - - - УстановитьПометкуУдаленияРасширеннаяПодсказка - 168 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.SetDeletionMark - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа список установить пометку удаления</value> - - - ru - Группа список установить пометку удаления - - - ГруппаСписокУстановитьПометкуУдаленияРасширеннаяПодсказка - 167 - Label - true - true - - Left - - - - - - ГруппаУстановитьИнтервал - 87 - - УстановитьИнтервалДат - 88 - true - true - - true - - - УстановитьИнтервалДатРасширеннаяПодсказка - 170 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.SetDateInterval - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа установить интервал</value> - - - ru - Группа установить интервал - - - ГруппаУстановитьИнтервалРасширеннаяПодсказка - 169 - Label - true - true - - Left - - - - - - ГруппаНайти - 89 - - Найти - 90 - true - true - - true - - - НайтиРасширеннаяПодсказка - 172 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа найти</value> - - - ru - Группа найти - - - ГруппаНайтиРасширеннаяПодсказка - 171 - Label - true - true - - Left - - - - - - ГруппаОтменитьПоиск - 91 - - ОтменитьПоиск - 92 - true - true - - true - - - ОтменитьПоискРасширеннаяПодсказка - 174 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - ru - Группа отменить поиск - - - ГруппаОтменитьПоискРасширеннаяПодсказка - 173 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value>Группа команды списка</value> - - - ru - Группа команды списка - - - ГруппаКомандыСпискаРасширеннаяПодсказка - 164 - Label - true - true - - Left - - - - ГруппаКомандыВзаимодействий 77 @@ -991,7 +696,7 @@ false КомандаРассмотреноРасширеннаяПодсказка - 176 + 167 Label true true @@ -1001,7 +706,7 @@ Form.Command.Рассмотрено Normal - Auto + PictureAndText true true UserCmds @@ -1017,7 +722,7 @@ СписокНеРассмотреноРасширеннаяПодсказка - 177 + 168 Label true true @@ -1045,7 +750,7 @@ false ОтложитьРассмотрениеРасширеннаяПодсказка - 178 + 169 Label true true @@ -1072,7 +777,7 @@ false КомандаОтветственныйРасширеннаяПодсказка - 179 + 170 Label true true @@ -1099,7 +804,7 @@ false КомандаПредметРасширеннаяПодсказка - 180 + 171 Label true true @@ -1130,7 +835,249 @@ ГруппаКомандыВзаимодействийРасширеннаяПодсказка - 175 + 166 + Label + true + true + + Left + + + + + + ГруппаКомандыСписка + 82 + + ГруппаНайти + 89 + + Найти + 90 + true + true + + true + + + НайтиРасширеннаяПодсказка + 174 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ОтменитьПоиск + 92 + true + true + + true + + + ОтменитьПоискРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + + УстановитьИнтервалДат + 88 + true + true + + true + + + УстановитьИнтервалДатРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.SetDateInterval + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа найти</value> + + + ru + Группа найти + + + ГруппаНайтиРасширеннаяПодсказка + 173 + Label + true + true + + Left + + + + + + Изменить + 83 + true + true + + true + + + ИзменитьРасширеннаяПодсказка + 177 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + Скопировать + 84 + true + true + + true + + + СкопироватьРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ГруппаСписокУстановитьПометкуУдаления + 86 + + УстановитьПометкуУдаления + 85 + true + true + + true + + + УстановитьПометкуУдаленияРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Группа список установить пометку удаления</value> + + + ru + Группа список установить пометку удаления + + + ГруппаСписокУстановитьПометкуУдаленияРасширеннаяПодсказка + 179 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Группа команды списка</value> + + + ru + Группа команды списка + + + ГруппаКомандыСпискаРасширеннаяПодсказка + 172 Label true true @@ -1166,6 +1113,33 @@ UserCmds Auto + + СписокПереключитьРежимПросмотра + 144 + true + true + + true + + + СписокПереключитьРежимПросмотраРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + Form.Command.ПереключитьРежимПросмотра + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + СписокНастройкаСписка 97 @@ -1176,7 +1150,7 @@ СписокНастройкаСпискаРасширеннаяПодсказка - 182 + 183 Label true true @@ -1202,7 +1176,7 @@ СписокВывестиСписокРасширеннаяПодсказка - 183 + 184 Label true true @@ -1228,7 +1202,7 @@ СписокСправкаРасширеннаяПодсказка - 184 + 185 Label true true @@ -1254,7 +1228,7 @@ СписокИзменитьФормуРасширеннаяПодсказка - 185 + 186 Label true true @@ -1278,10 +1252,10 @@ СписокСтрокаПоиска - 187 + 188 СписокСтрокаПоискаРасширеннаяПодсказка - 189 + 190 Label true true @@ -1291,7 +1265,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 188 + 189 true Список @@ -1301,10 +1275,10 @@ СписокСостояниеПросмотра - 190 + 191 СписокСостояниеПросмотраРасширеннаяПодсказка - 192 + 193 Label true true @@ -1314,7 +1288,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 191 + 192 true ViewStatusAddition @@ -1325,10 +1299,10 @@ СписокУправлениеПоиском - 193 + 194 СписокУправлениеПоискомРасширеннаяПодсказка - 195 + 196 Label true true @@ -1338,7 +1312,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 194 + 195 true SearchControlAddition @@ -1349,7 +1323,7 @@ СписокРасширеннаяПодсказка - 186 + 187 Label true true @@ -1371,7 +1345,7 @@ false ОтложитьРасширеннаяПодсказка - 154 + 156 Label true true @@ -1398,7 +1372,7 @@ false УстановитьРассмотреноРасширеннаяПодсказка - 155 + 157 Label true true @@ -1425,7 +1399,7 @@ false УстановитьОтветственногоРасширеннаяПодсказка - 156 + 158 Label true true @@ -1452,7 +1426,7 @@ false УстановитьПредметРасширеннаяПодсказка - 157 + 159 Label true true @@ -1523,7 +1497,7 @@ СтраницаСписокРасширеннаяПодсказка - 153 + 155 Label true true @@ -1579,7 +1553,7 @@ None ДеревоВзаимодействийНомерКартинкиРасширеннаяПодсказка - 240 + 242 Label true true @@ -1624,7 +1598,7 @@ ДеревоВзаимодействийДатаРасширеннаяПодсказка - 242 + 244 Label true true @@ -1669,7 +1643,7 @@ ДатаКартинкаРасширеннаяПодсказка - 239 + 241 Label true true @@ -1697,7 +1671,7 @@ ДеревоВзаимодействийУчастникиРасширеннаяПодсказка - 244 + 246 Label true true @@ -1740,7 +1714,7 @@ ДеревоВзаимодействийТемаРасширеннаяПодсказка - 246 + 248 Label true true @@ -1789,7 +1763,7 @@ СписокСоздатьЭлектронноеПисьмоОтдельнаяКнопкаДеревоРасширеннаяПодсказка - 211 + 212 Label true true @@ -1821,7 +1795,7 @@ СписокСоздатьВстречуДеревоРасширеннаяПодсказка - 213 + 214 Label true true @@ -1847,7 +1821,7 @@ СписокСоздатьЗапланированноеВзаимодействиеДеревоРасширеннаяПодсказка - 214 + 215 Label true true @@ -1873,7 +1847,7 @@ СписокСоздатьТелефонныйЗвонокДеревоРасширеннаяПодсказка - 215 + 216 Label true true @@ -1899,7 +1873,7 @@ СписокСоздатьЭлектронноеПисьмоДеревоРасширеннаяПодсказка - 216 + 217 Label true true @@ -1930,7 +1904,7 @@ ГруппаСоздатьДеревоРасширеннаяПодсказка - 212 + 213 Label true true @@ -1947,138 +1921,6 @@ Normal - - ГруппаСтандартныеКомандыДерево - 125 - - ДеревоВзаимодействийИзменить - 141 - true - true - - true - - - ДеревоВзаимодействийИзменитьРасширеннаяПодсказка - 218 - Label - true - true - - Left - - - Form.Item.ДеревоВзаимодействий.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - - - ДеревоВзаимодействийСкопировать - 142 - true - true - - true - - - ДеревоВзаимодействийСкопироватьРасширеннаяПодсказка - 219 - Label - true - true - - Left - - - Form.Item.ДеревоВзаимодействий.StandardCommand.Copy - Normal - Auto - true - true - UserCmds - Auto - - - ДеревоВзаимодействийУдалить - 143 - true - true - - true - - - ДеревоВзаимодействийУдалитьРасширеннаяПодсказка - 220 - Label - true - true - - Left - - - Form.Item.ДеревоВзаимодействий.StandardCommand.Delete - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа стандартные команды дерево</value> - - - ru - Группа стандартные команды дерево - - - ГруппаСтандартныеКомандыДеревоРасширеннаяПодсказка - 217 - Label - true - true - - Left - - - - - - ДеревоВзаимодействийУстановитьИнтервал - 132 - true - true - - true - - - ДеревоВзаимодействийУстановитьИнтервалРасширеннаяПодсказка - 221 - Label - true - true - - Left - - - Form.Command.УстановитьИнтервал - Normal - Auto - true - true - UserCmds - Auto - ГруппаКомандыВзаимодействийДерево 126 @@ -2093,7 +1935,7 @@ false КомандаРассмотреноДеревоРасширеннаяПодсказка - 223 + 219 Label true true @@ -2103,7 +1945,7 @@ Form.Command.Рассмотрено Normal - Auto + PictureAndText true true UserCmds @@ -2119,7 +1961,7 @@ ДеревоВзаимодействийНеРассмотреноРасширеннаяПодсказка - 224 + 220 Label true true @@ -2147,7 +1989,7 @@ false ОтложитьРассмотрениеДеревоРасширеннаяПодсказка - 225 + 221 Label true true @@ -2174,7 +2016,7 @@ false КомандаОтветственныйДеревоРасширеннаяПодсказка - 226 + 222 Label true true @@ -2201,7 +2043,7 @@ false КомандаПредметДеревоРасширеннаяПодсказка - 227 + 223 Label true true @@ -2232,7 +2074,7 @@ ГруппаКомандыВзаимодействийДеревоРасширеннаяПодсказка - 222 + 218 Label true true @@ -2242,6 +2084,174 @@ + + ДеревоВзаимодействийУстановитьИнтервал + 132 + true + true + + true + + + ДеревоВзаимодействийУстановитьИнтервалРасширеннаяПодсказка + 224 + Label + true + true + + Left + + + Form.Command.УстановитьИнтервал + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаСтандартныеКомандыДерево + 125 + + ДеревоВзаимодействийИзменить + 141 + true + true + + true + + + ДеревоВзаимодействийИзменитьРасширеннаяПодсказка + 226 + Label + true + true + + Left + + + Form.Item.ДеревоВзаимодействий.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ДеревоВзаимодействийСкопировать + 142 + true + true + + true + + + ДеревоВзаимодействийСкопироватьРасширеннаяПодсказка + 227 + Label + true + true + + Left + + + Form.Item.ДеревоВзаимодействий.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ДеревоВзаимодействийУдалить + 143 + + <key>ru</key> + <value>Пометить на удаление / Cнять пометку</value> + + true + true + + true + + + ДеревоВзаимодействийУдалитьРасширеннаяПодсказка + 228 + Label + true + true + + Left + + + Form.Item.ДеревоВзаимодействий.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + + StdPicture.MarkToDelete + + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Группа стандартные команды дерево</value> + + + ru + Группа стандартные команды дерево + + + ГруппаСтандартныеКомандыДеревоРасширеннаяПодсказка + 225 + Label + true + true + + Left + + + + + + ДеревоВзаимодействийПереключитьРежимПросмотра + 145 + true + true + + true + + + ДеревоВзаимодействийПереключитьРежимПросмотраРасширеннаяПодсказка + 229 + Label + true + true + + Left + + + Form.Command.ПереключитьРежимПросмотра + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + ОбновитьДерево 131 @@ -2256,7 +2266,7 @@ ОбновитьДеревоРасширеннаяПодсказка - 228 + 230 Label true true @@ -2296,10 +2306,10 @@ ДеревоВзаимодействийСтрокаПоиска - 230 + 232 ДеревоВзаимодействийСтрокаПоискаРасширеннаяПодсказка - 232 + 234 Label true true @@ -2309,7 +2319,7 @@ ДеревоВзаимодействийСтрокаПоискаКонтекстноеМеню - 231 + 233 true ДеревоВзаимодействий @@ -2319,10 +2329,10 @@ ДеревоВзаимодействийСостояниеПросмотра - 233 + 235 ДеревоВзаимодействийСостояниеПросмотраРасширеннаяПодсказка - 235 + 237 Label true true @@ -2332,7 +2342,7 @@ ДеревоВзаимодействийСостояниеПросмотраКонтекстноеМеню - 234 + 236 true ViewStatusAddition @@ -2343,10 +2353,10 @@ ДеревоВзаимодействийУправлениеПоиском - 236 + 238 ДеревоВзаимодействийУправлениеПоискомРасширеннаяПодсказка - 238 + 240 Label true true @@ -2356,7 +2366,7 @@ ДеревоВзаимодействийУправлениеПоискомКонтекстноеМеню - 237 + 239 true SearchControlAddition @@ -2367,7 +2377,7 @@ ДеревоВзаимодействийРасширеннаяПодсказка - 229 + 231 Label true true @@ -2430,7 +2440,7 @@ СтраницаДеревоРасширеннаяПодсказка - 210 + 211 Label true true @@ -2459,7 +2469,7 @@ СтраницыСписокДеревоРасширеннаяПодсказка - 152 + 154 Label true true @@ -3211,7 +3221,7 @@ ПереключитьРежимПросмотра <key>ru</key> - <value>В виде дерева</value> + <value>В виде дерева / списка</value> 6 @@ -3221,6 +3231,9 @@ true + + CommonPicture.ИерархическийСписок + ПереключитьРежимПросмотра diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl index c12005283..e65f569be 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl @@ -1,6 +1,501 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Взаимодействия.ИнициализироватьФормуСпискаВзаимодействий(ЭтаФорма); + Элементы.СписокСоздатьЭлектронноеПисьмоОтдельнаяКнопкаДерево.Видимость = ТолькоПочта; + Элементы.ГруппаСоздатьДерево.Видимость = НЕ ТолькоПочта; + Если ТолькоПочта Тогда + ЗаголовокУчастникиПочта = НСтр("ru = 'Кому, от'"); + Элементы.ДеревоВзаимодействийУчастники.Заголовок = ЗаголовокУчастникиПочта; + Элементы.Участники.Заголовок = ЗаголовокУчастникиПочта; + КонецЕсли; + + Если Параметры.Свойство("Отбор") Тогда + Если Параметры.Отбор.Свойство("Предмет") Тогда + + Если Параметры.Свойство("ДополнительныеПараметры") + И Параметры.ДополнительныеПараметры.Свойство("ТипВзаимодействия") Тогда + + Если Параметры.ДополнительныеПараметры.ТипВзаимодействия = "Взаимодействие" Тогда + ПредметДляОтбора = Взаимодействия.ПолучитьЗначениеПредмета(Параметры.Отбор.Предмет); + Параметры.Отбор.Предмет = ПредметДляОтбора ; + ИначеЕсли Параметры.ДополнительныеПараметры.ТипВзаимодействия = "Предмет" Тогда + ПредметДляОтбора = Параметры.Отбор.Предмет; + КонецЕсли; + КонецЕсли; + + ОтборПоПредмету = Истина; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "Предмет", + ПредметДляОтбора,ВидСравненияКомпоновкиДанных.Равно,,Истина); + + ИначеЕсли Параметры.Отбор.Свойство("Контакт") Тогда + + Контакт = Параметры.Отбор.Контакт; + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ + | ВстречаУчастники.Ссылка КАК Ссылка + |ИЗ + | Документ.Встреча.Участники КАК ВстречаУчастники + |ГДЕ + | ВстречаУчастники.Контакт В(&Контакт) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ТелефонныйЗвонок.Ссылка + |ИЗ + | Документ.ТелефонныйЗвонок КАК ТелефонныйЗвонок + |ГДЕ + | ТелефонныйЗвонок.АбонентКонтакт В(&Контакт) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЭлектронноеПисьмоВходящее.Ссылка + |ИЗ + | Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее + |ГДЕ + | ЭлектронноеПисьмоВходящее.ОтправительКонтакт В(&Контакт) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Ссылка + |ИЗ + | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиПисьма КАК ЭлектронноеПисьмоИсходящееПолучателиПисьма + |ГДЕ + | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Контакт В(&Контакт) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ЗапланированноеВзаимодействиеУчастники.Ссылка + |ИЗ + | Документ.ЗапланированноеВзаимодействие.Участники КАК ЗапланированноеВзаимодействиеУчастники + |ГДЕ + | ЗапланированноеВзаимодействиеУчастники.Контакт В(&Контакт)"); + + + МассивПараметрКонтакт = ПолучитьПараметрКонтактВЗависимостиОтТипа(Контакт); + Если МассивПараметрКонтакт.Количество() = 0 Тогда + МассивПараметрКонтакт.Добавить(Контакт); + КонецЕсли; + + Запрос.УстановитьПараметр("Контакт",МассивПараметрКонтакт); + + Параметры.Отбор.Удалить("Контакт"); + СписокОтбора = Новый СписокЗначений; + СписокОтбора.ЗагрузитьЗначения( + Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка") + ); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, + "Ссылка",СписокОтбора,ВидСравненияКомпоновкиДанных.ВСписке,,Истина); + + КонецЕсли; + КонецЕсли; + + Для Каждого ТипПредмета Из Метаданные.Документы.ЭлектронноеПисьмоИсходящее.Реквизиты.Предмет.Тип.Типы() Цикл + СписокВыбораТипаПредмета.Добавить(Метаданные.НайтиПоТипу(ТипПредмета).ПолноеИмя(),Строка(ТипПредмета)); + КонецЦикла; + + Взаимодействия.ЗаполнитьСписокДоступныхДляСозданияДокументов(ДокументыДоступныеДляСоздания); + + ТипВзаимодействия = ?(ТолькоПочта,"ВсеПисьма","Все"); + Статус = "Все"; + +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + + Статус = Настройки.Получить("Статус"); + Если Статус <> Неопределено Тогда + Настройки.Удалить("Статус"); + КонецЕсли; + Если Не ИспользоватьПризнакРассмотрено Или НЕ ЗначениеЗаполнено(Статус) Тогда + Статус = "Все"; + КонецЕсли; + Ответственный = Настройки.Получить("Ответственный"); + ВВидеДерева = Настройки.Получить("ВВидеДерева"); + + Взаимодействия.ПриЗагрузкеТипаВзаимодействийИзНастроек(ЭтаФорма, Настройки); + + УправлениеСтраницамиСервер(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = + Элементы.СтраницаДерево И ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Источник) Тогда + ЗаполнитьДеревоВзаимодействийКлиент(); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ОтветственныйПриИзменении(Элемент) + + Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда + + ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтаФорма,Элемент.Имя,ОтборПоПредмету); + + Иначе + + ЗаполнитьДеревоВзаимодействийКлиент(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СтатусПриИзменении(Элемент) + + Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда + + ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтаФорма,Элемент.Имя,ОтборПоПредмету); + + Иначе + + ЗаполнитьДеревоВзаимодействийКлиент(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + + ВзаимодействияКлиент.СписокПередНачаломДобавления( + Элемент,Отказ,Копирование,ТолькоПочта,ДокументыДоступныеДляСоздания, + Новый Структура("ЗначенияЗаполнения",Новый Структура("Предмет,Контакт",ПредметДляОтбора,Контакт))); + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоВзаимодействийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ТекущиеДанные = Элемент.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + СтандартнаяОбработка = Ложь; + ОткрытьЗначение(ТекущиеДанные.Ссылка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоВзаимодействийПередУдалением(Элемент, Отказ) + + Отказ = Истина; + Если Элементы.ДеревоВзаимодействий.ВыделенныеСтроки.Количество() > 0 Тогда + + ЕстьПомеченныеНаУдаление = Ложь; + Для каждого ВыделеннаяСтрока Из Элементы.ДеревоВзаимодействий.ВыделенныеСтроки Цикл + Если Элементы.ДеревоВзаимодействий.ДанныеСтроки(ВыделеннаяСтрока).ПометкаУдаления Тогда + ЕстьПомеченныеНаУдаление = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ЕстьПомеченныеНаУдаление Тогда + ТекстВопроса = НСтр("ru = 'Снять с выделенных элементов пометку на удаление?'"); + Иначе + ТекстВопроса = НСтр("ru = 'Пометить выделенные строки на удаление?'"); + КонецЕсли; + + Результат = Вопрос(ТекстВопроса,РежимДиалогаВопрос.ДаНет); + Если Результат=КодВозвратаДиалога.Да Тогда + ОбработатьИзменениеПометкиУдаленияВДереве(Элементы.ДеревоВзаимодействий.ВыделенныеСтроки, ЕстьПомеченныеНаУдаление); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоВзаимодействийПередНачаломИзменения(Элемент, Отказ) + + Отказ = Истина; + ТекущиеДанные = Элемент.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + СтандартнаяОбработка = Ложь; + ОткрытьЗначение(ТекущиеДанные.Ссылка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоВзаимодействийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + + Отказ = Истина; + Если Копирование Тогда + ТекущиеДанные = Элемент.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + Если ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") ИЛИ + ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда + + Предупреждение(НСтр("ru = 'Копирование электронных писем запрещено'")); + + ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.Встреча") Тогда + + ОткрытьФормуМодально("Документ.Встреча.ФормаОбъекта", + Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтаФорма); + + ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") Тогда + + ОткрытьФормуМодально("Документ.ЗапланированноеВзаимодействие.ФормаОбъекта", + Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтаФорма); + + ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда + + ОткрытьФормуМодально("Документ.ТелефонныйЗвонок.ФормаОбъекта", + Новый Структура("ЗначениеКопирования",ТекущиеДанные.Ссылка), ЭтаФорма); + + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ТипВзаимодействияПриИзменении(Элемент) + + Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда + ВзаимодействияКлиентСервер.ПриИзмененииОтбораТипВзаимодействий(Список.Отбор, ТипВзаимодействия); + Иначе + ЗаполнитьДеревоВзаимодействийКлиент(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ТипВзаимодействияСтатусОчистка(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +//установить флаг "Рассмотрено" в выбранных взаимодействиях - клиентская часть +Процедура РассмотреноВыполнить(Команда) + + Если НЕ ВыборКорректен() Тогда + Возврат; + КонецЕсли; + + ФлагРассмотрено = (Не Команда.Имя = "НеРассмотрено"); + + ВыполненаЗамена = Ложь; + УстановитьФлагРассмотрено(ВыполненаЗамена, ФлагРассмотрено); + + Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда + + Если ВыполненаЗамена Тогда + Элементы.Список.Обновить(); + КонецЕсли; + + Иначе + + Если ВыполненаЗамена Тогда + РазвернутьВсеСтрокиДерева(); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +//установить ответственного в выбранных взаимодействиях - клиентская часть +Процедура ОтветственныйВыполнить() + + Если НЕ ВыборКорректен() Тогда + Возврат; + КонецЕсли; + + ВыбранныйОтветственный = + ОткрытьФормуМодально("Справочник.Пользователи.Форма.ФормаСписка", Новый Структура("РежимВыбора",Истина)); + + Если ВыбранныйОтветственный <> Неопределено Тогда + + ВыполненаЗамена = Ложь; + УстановитьОтветственного(ВыбранныйОтветственный,ВыполненаЗамена); + + Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда + + Если ВыполненаЗамена Тогда + Элементы.Список.Обновить(); + КонецЕсли; + + Иначе + + Если ВыполненаЗамена Тогда + РазвернутьВсеСтрокиДерева(); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +//установить предмет в выбранных взаимодействиях - клиентская часть +Процедура ПредметВыполнить() + + Если НЕ ВыборКорректен() Тогда + Возврат; + КонецЕсли; + + ВыбранныйТипПредмета = + СписокВыбораТипаПредмета.ВыбратьЭлемент(Нстр("ru = 'Выберите тип предмета'")); + Если ВыбранныйТипПредмета = Неопределено Тогда + Возврат; + КонецЕсли; + + ВыбранныйПредмет = + ОткрытьФормуМодально(ВыбранныйТипПредмета.Значение + ".ФормаВыбора"); + + Если ВыбранныйПредмет <> Неопределено Тогда + + Если ОтборПоПредмету И ПредметДляОтбора = ВыбранныйПредмет Тогда + Возврат; + КонецЕсли; + + ВыполненаЗамена = Ложь; + УстановитьПредмет(ВыбранныйПредмет,ВыполненаЗамена); + + Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда + + Если ВыполненаЗамена Тогда + Элементы.Список.Обновить(); + КонецЕсли; + + Иначе + + Если ВыполненаЗамена Тогда + РазвернутьВсеСтрокиДерева(); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьИнтервал(Команда) + + Диалог = Новый ДиалогРедактированияСтандартногоПериода(); + Диалог.Период = Интервал; + Если Диалог.Редактировать() Тогда + Интервал = Диалог.Период; + ЗаполнитьДеревоВзаимодействийКлиент(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +//устанавливает реквизит "отработать после" в выбранных взаимодействиях - клиентская часть +Процедура ОтложитьРассмотрениеВыполнить(Команда) + + Если НЕ ВыборКорректен() Тогда + Возврат; + КонецЕсли; + + ДатаОтработки = ОбщегоНазначенияКлиент.ДатаСеанса(); + Если ВвестиДату(ДатаОтработки, "Отработать после") Тогда + + ВыполненаЗамена = Ложь; + ОтложитьРассмотрение(ДатаОтработки,ВыполненаЗамена); + + Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда + + Если ВыполненаЗамена Тогда + Элементы.Список.Обновить(); + КонецЕсли; + + Иначе + + Если ВыполненаЗамена Тогда + РазвернутьВсеСтрокиДерева(); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьВстречу(Команда) + + СоздатьНовоеВзаимодействие("Встреча"); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьЗапланированноеВзаимодействие(Команда) + + СоздатьНовоеВзаимодействие("ЗапланированноеВзаимодействие"); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьТелефонныйЗвонок(Команда) + + СоздатьНовоеВзаимодействие("ТелефонныйЗвонок"); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьЭлектронноеПисьмо(Команда) + + СоздатьНовоеВзаимодействие("ЭлектронноеПисьмоИсходящее"); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьНовоеВзаимодействие(ТипОбъекта) + + ВзаимодействияКлиент.СоздатьНовоеВзаимодействие( + ТипОбъекта, + Новый Структура("ЗначенияЗаполнения",Новый Структура("Предмет,Контакт",ПредметДляОтбора,Контакт))); + +КонецПроцедуры + +&НаКлиенте +Процедура ПереключитьРежимПросмотра(Команда) + + ПереключитьРежимПросмотраСервер(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьДерево(Команда) + + ЗаполнитьДеревоВзаимодействийКлиент(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере //установить флаг "Рассмотрено" в выбранных взаимодействиях - серверная часть @@ -190,7 +685,6 @@ КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -299,7 +793,7 @@ ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок, "Рассмотрено", ВидСравненияКомпоновкиДанных.Равно, Ложь); ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок, - "РассмотретьПосле", ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, ТекущаяДата()); + "РассмотретьПосле", ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, ТекущаяДатаСеанса()); ИначеЕсли Статус = "Отложенные" Тогда ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок, "Рассмотрено", ВидСравненияКомпоновкиДанных.Равно, Ложь); @@ -408,7 +902,7 @@ ДеревоОбъект.Строки.Очистить(); // Получение результата - ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений = + ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.УстановитьОбъект(ДеревоОбъект); ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.Вывести(ПроцессорКомпоновкиДанных); @@ -530,498 +1024,3 @@ КонецЕсли; КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - Взаимодействия.ИнициализироватьФормуСпискаВзаимодействий(ЭтаФорма); - Элементы.СписокСоздатьЭлектронноеПисьмоОтдельнаяКнопкаДерево.Видимость = ТолькоПочта; - Элементы.ГруппаСоздатьДерево.Видимость = НЕ ТолькоПочта; - Если ТолькоПочта Тогда - ЗаголовокУчастникиПочта = НСтр("ru = 'Кому, от'"); - Элементы.ДеревоВзаимодействийУчастники.Заголовок = ЗаголовокУчастникиПочта; - Элементы.Участники.Заголовок = ЗаголовокУчастникиПочта; - КонецЕсли; - - Если Параметры.Свойство("Отбор") Тогда - Если Параметры.Отбор.Свойство("Предмет") Тогда - - Если Параметры.Свойство("ДополнительныеПараметры") - И Параметры.ДополнительныеПараметры.Свойство("ТипВзаимодействия") Тогда - - Если Параметры.ДополнительныеПараметры.ТипВзаимодействия = "Взаимодействие" Тогда - ПредметДляОтбора = Взаимодействия.ПолучитьЗначениеПредмета(Параметры.Отбор.Предмет); - Параметры.Отбор.Предмет = ПредметДляОтбора ; - ИначеЕсли Параметры.ДополнительныеПараметры.ТипВзаимодействия = "Предмет" Тогда - ПредметДляОтбора = Параметры.Отбор.Предмет; - КонецЕсли; - КонецЕсли; - - ОтборПоПредмету = Истина; - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "Предмет", - ПредметДляОтбора,ВидСравненияКомпоновкиДанных.Равно,,Истина); - - ИначеЕсли Параметры.Отбор.Свойство("Контакт") Тогда - - Контакт = Параметры.Отбор.Контакт; - - Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ - | ВстречаУчастники.Ссылка КАК Ссылка - |ИЗ - | Документ.Встреча.Участники КАК ВстречаУчастники - |ГДЕ - | ВстречаУчастники.Контакт В(&Контакт) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ТелефонныйЗвонок.Ссылка - |ИЗ - | Документ.ТелефонныйЗвонок КАК ТелефонныйЗвонок - |ГДЕ - | ТелефонныйЗвонок.АбонентКонтакт В(&Контакт) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ЭлектронноеПисьмоВходящее.Ссылка - |ИЗ - | Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее - |ГДЕ - | ЭлектронноеПисьмоВходящее.ОтправительКонтакт В(&Контакт) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Ссылка - |ИЗ - | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиПисьма КАК ЭлектронноеПисьмоИсходящееПолучателиПисьма - |ГДЕ - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Контакт В(&Контакт) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ЗапланированноеВзаимодействиеУчастники.Ссылка - |ИЗ - | Документ.ЗапланированноеВзаимодействие.Участники КАК ЗапланированноеВзаимодействиеУчастники - |ГДЕ - | ЗапланированноеВзаимодействиеУчастники.Контакт В(&Контакт)"); - - - МассивПараметрКонтакт = ПолучитьПараметрКонтактВЗависимостиОтТипа(Контакт); - Если МассивПараметрКонтакт.Количество() = 0 Тогда - МассивПараметрКонтакт.Добавить(Контакт); - КонецЕсли; - - Запрос.УстановитьПараметр("Контакт",МассивПараметрКонтакт); - - Параметры.Отбор.Удалить("Контакт"); - СписокОтбора = Новый СписокЗначений; - СписокОтбора.ЗагрузитьЗначения( - Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка") - ); - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, - "Ссылка",СписокОтбора,ВидСравненияКомпоновкиДанных.ВСписке,,Истина); - - КонецЕсли; - КонецЕсли; - - Для Каждого ТипПредмета Из Метаданные.Документы.ЭлектронноеПисьмоИсходящее.Реквизиты.Предмет.Тип.Типы() Цикл - СписокВыбораТипаПредмета.Добавить(Метаданные.НайтиПоТипу(ТипПредмета).ПолноеИмя(),Строка(ТипПредмета)); - КонецЦикла; - - Взаимодействия.ЗаполнитьСписокДоступныхДляСозданияДокументов(ДокументыДоступныеДляСоздания); - - ТипВзаимодействия = ?(ТолькоПочта,"ВсеПисьма","Все"); - Статус = "Все"; - -КонецПроцедуры - -&НаСервере -Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - - Статус = Настройки.Получить("Статус"); - Если Статус <> Неопределено Тогда - Настройки.Удалить("Статус"); - КонецЕсли; - Если Не ИспользоватьПризнакРассмотрено Или НЕ ЗначениеЗаполнено(Статус) Тогда - Статус = "Все"; - КонецЕсли; - Ответственный = Настройки.Получить("Ответственный"); - ВВидеДерева = Настройки.Получить("ВВидеДерева"); - - Взаимодействия.ПриЗагрузкеТипаВзаимодействийИзНастроек(ЭтаФорма, Настройки); - - УправлениеСтраницамиСервер(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - - Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = - Элементы.СтраницаДерево И ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Источник) Тогда - ЗаполнитьДеревоВзаимодействийКлиент(); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ - -&НаКлиенте -//установить флаг "Рассмотрено" в выбранных взаимодействиях - клиентская часть -Процедура РассмотреноВыполнить(Команда) - - Если НЕ ВыборКорректен() Тогда - Возврат; - КонецЕсли; - - ФлагРассмотрено = (Не Команда.Имя = "НеРассмотрено"); - - ВыполненаЗамена = Ложь; - УстановитьФлагРассмотрено(ВыполненаЗамена, ФлагРассмотрено); - - Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - - Если ВыполненаЗамена Тогда - Элементы.Список.Обновить(); - КонецЕсли; - - Иначе - - Если ВыполненаЗамена Тогда - РазвернутьВсеСтрокиДерева(); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -//установить ответственного в выбранных взаимодействиях - клиентская часть -Процедура ОтветственныйВыполнить() - - Если НЕ ВыборКорректен() Тогда - Возврат; - КонецЕсли; - - ВыбранныйОтветственный = - ОткрытьФормуМодально("Справочник.Пользователи.Форма.ФормаСписка", Новый Структура("РежимВыбора",Истина)); - - Если ВыбранныйОтветственный <> Неопределено Тогда - - ВыполненаЗамена = Ложь; - УстановитьОтветственного(ВыбранныйОтветственный,ВыполненаЗамена); - - Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - - Если ВыполненаЗамена Тогда - Элементы.Список.Обновить(); - КонецЕсли; - - Иначе - - Если ВыполненаЗамена Тогда - РазвернутьВсеСтрокиДерева(); - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -//установить предмет в выбранных взаимодействиях - клиентская часть -Процедура ПредметВыполнить() - - Если НЕ ВыборКорректен() Тогда - Возврат; - КонецЕсли; - - ВыбранныйТипПредмета = - СписокВыбораТипаПредмета.ВыбратьЭлемент(Нстр("ru = 'Выберите тип предмета'")); - Если ВыбранныйТипПредмета = Неопределено Тогда - Возврат; - КонецЕсли; - - ВыбранныйПредмет = - ОткрытьФормуМодально(ВыбранныйТипПредмета.Значение + ".ФормаВыбора"); - - Если ВыбранныйПредмет <> Неопределено Тогда - - Если ОтборПоПредмету И ПредметДляОтбора = ВыбранныйПредмет Тогда - Возврат; - КонецЕсли; - - ВыполненаЗамена = Ложь; - УстановитьПредмет(ВыбранныйПредмет,ВыполненаЗамена); - - Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - - Если ВыполненаЗамена Тогда - Элементы.Список.Обновить(); - КонецЕсли; - - Иначе - - Если ВыполненаЗамена Тогда - РазвернутьВсеСтрокиДерева(); - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьИнтервал(Команда) - - Диалог = Новый ДиалогРедактированияСтандартногоПериода(); - Диалог.Период = Интервал; - Если Диалог.Редактировать() Тогда - Интервал = Диалог.Период; - ЗаполнитьДеревоВзаимодействийКлиент(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -//устанавливает реквизит "отработать после" в выбранных взаимодействиях - клиентская часть -Процедура ОтложитьРассмотрениеВыполнить(Команда) - - Если НЕ ВыборКорректен() Тогда - Возврат; - КонецЕсли; - - ДатаОтработки = ТекущаяДата(); - Если ВвестиДату(ДатаОтработки, "Отработать после") Тогда - - ВыполненаЗамена = Ложь; - ОтложитьРассмотрение(ДатаОтработки,ВыполненаЗамена); - - Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - - Если ВыполненаЗамена Тогда - Элементы.Список.Обновить(); - КонецЕсли; - - Иначе - - Если ВыполненаЗамена Тогда - РазвернутьВсеСтрокиДерева(); - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СоздатьВстречу(Команда) - - СоздатьНовоеВзаимодействие("Встреча"); - -КонецПроцедуры - -&НаКлиенте -Процедура СоздатьЗапланированноеВзаимодействие(Команда) - - СоздатьНовоеВзаимодействие("ЗапланированноеВзаимодействие"); - -КонецПроцедуры - -&НаКлиенте -Процедура СоздатьТелефонныйЗвонок(Команда) - - СоздатьНовоеВзаимодействие("ТелефонныйЗвонок"); - -КонецПроцедуры - -&НаКлиенте -Процедура СоздатьЭлектронноеПисьмо(Команда) - - СоздатьНовоеВзаимодействие("ЭлектронноеПисьмоИсходящее"); - -КонецПроцедуры - -&НаКлиенте -Процедура СоздатьНовоеВзаимодействие(ТипОбъекта) - - ВзаимодействияКлиент.СоздатьНовоеВзаимодействие( - ТипОбъекта, - Новый Структура("ЗначенияЗаполнения",Новый Структура("Предмет,Контакт",ПредметДляОтбора,Контакт))); - -КонецПроцедуры - -&НаКлиенте -Процедура ПереключитьРежимПросмотра(Команда) - - ПереключитьРежимПросмотраСервер(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбновитьДерево(Команда) - - ЗаполнитьДеревоВзаимодействийКлиент(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура ОтветственныйПриИзменении(Элемент) - - Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - - ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтаФорма,Элемент.Имя,ОтборПоПредмету); - - Иначе - - ЗаполнитьДеревоВзаимодействийКлиент(); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СтатусПриИзменении(Элемент) - - Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - - ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтаФорма,Элемент.Имя,ОтборПоПредмету); - - Иначе - - ЗаполнитьДеревоВзаимодействийКлиент(); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) - - ВзаимодействияКлиент.СписокПередНачаломДобавления( - Элемент,Отказ,Копирование,ТолькоПочта,ДокументыДоступныеДляСоздания, - Новый Структура("ЗначенияЗаполнения",Новый Структура("Предмет,Контакт",ПредметДляОтбора,Контакт))); - -КонецПроцедуры - -&НаКлиенте -Процедура ДеревоВзаимодействийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ТекущиеДанные = Элемент.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено Тогда - СтандартнаяОбработка = Ложь; - ОткрытьЗначение(ТекущиеДанные.Ссылка); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ДеревоВзаимодействийПередУдалением(Элемент, Отказ) - - Отказ = Истина; - Если Элементы.ДеревоВзаимодействий.ВыделенныеСтроки.Количество() > 0 Тогда - - ЕстьПомеченныеНаУдаление = Ложь; - Для каждого ВыделеннаяСтрока Из Элементы.ДеревоВзаимодействий.ВыделенныеСтроки Цикл - Если Элементы.ДеревоВзаимодействий.ДанныеСтроки(ВыделеннаяСтрока).ПометкаУдаления Тогда - ЕстьПомеченныеНаУдаление = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - Если ЕстьПомеченныеНаУдаление Тогда - ТекстВопроса = НСтр("ru = 'Снять с выделенных элементов пометку на удаление?'"); - Иначе - ТекстВопроса = НСтр("ru = 'Пометить выделенные строки на удаление?'"); - КонецЕсли; - - Результат = Вопрос(ТекстВопроса,РежимДиалогаВопрос.ДаНет); - Если Результат=КодВозвратаДиалога.Да Тогда - ОбработатьИзменениеПометкиУдаленияВДереве(Элементы.ДеревоВзаимодействий.ВыделенныеСтроки, ЕстьПомеченныеНаУдаление); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ДеревоВзаимодействийПередНачаломИзменения(Элемент, Отказ) - - Отказ = Истина; - ТекущиеДанные = Элемент.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено Тогда - СтандартнаяОбработка = Ложь; - ОткрытьЗначение(ТекущиеДанные.Ссылка); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ДеревоВзаимодействийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) - - Отказ = Истина; - Если Копирование Тогда - ТекущиеДанные = Элемент.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено Тогда - Если ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") ИЛИ - ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда - - Предупреждение(НСтр("ru = 'Копирование электронных писем запрещено'")); - - ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.Встреча") Тогда - - ОткрытьФормуМодально("Документ.Встреча.ФормаОбъекта", - Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтаФорма); - - ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") Тогда - - ОткрытьФормуМодально("Документ.ЗапланированноеВзаимодействие.ФормаОбъекта", - Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтаФорма); - - ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда - - ОткрытьФормуМодально("Документ.ТелефонныйЗвонок.ФормаОбъекта", - Новый Структура("ЗначениеКопирования",ТекущиеДанные.Ссылка), ЭтаФорма); - - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ТипВзаимодействияПриИзменении(Элемент) - - Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - ВзаимодействияКлиентСервер.ПриИзмененииОтбораТипВзаимодействий(Список.Отбор, ТипВзаимодействия); - Иначе - ЗаполнитьДеревоВзаимодействийКлиент(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ТипВзаимодействияСтатусОчистка(Элемент, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - -КонецПроцедуры diff --git a/SSL/src/DocumentJournals/Взаимодействия/Взаимодействия.mdo b/SSL/src/DocumentJournals/Взаимодействия/Взаимодействия.mdo index 5069884f2..e334b283c 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Взаимодействия.mdo +++ b/SSL/src/DocumentJournals/Взаимодействия/Взаимодействия.mdo @@ -288,6 +288,26 @@ DataCompositionSchema + + ЗапланироватьВстречу + + ru + Запланировать встречу + + CommandGroup.Взаимодействия + + DocumentRef.ЭлектронноеПисьмоИсходящее + DocumentRef.ЗапланированноеВзаимодействие + DocumentRef.ЭлектронноеПисьмоВходящее + DocumentRef.ТелефонныйЗвонок + DocumentRef.Встреча + CatalogRef.Пользователи + + Auto + + CommonPicture.Встреча + + ВзаимодействияПоКонтакту @@ -304,26 +324,6 @@ Перейти к просмотру списка взаимодействий - - ВзаимодействияПоПредмету - - ru - Взаимодействия по предмету - - FormNavigationPanelGoTo - - DocumentRef.ЭлектронноеПисьмоИсходящее - DocumentRef.ЗапланированноеВзаимодействие - DocumentRef.ЭлектронноеПисьмоВходящее - DocumentRef.ТелефонныйЗвонок - DocumentRef.Встреча - - Auto - - ru - Перейти к просмотру списка взаимодействий - - ЗапланироватьВзаимодействие @@ -344,26 +344,6 @@ CommonPicture.ЗапланированноеВзаимодействие - - ЗапланироватьВстречу - - ru - Запланировать встречу - - CommandGroup.Взаимодействия - - DocumentRef.ЭлектронноеПисьмоИсходящее - DocumentRef.ЗапланированноеВзаимодействие - DocumentRef.ЭлектронноеПисьмоВходящее - DocumentRef.ТелефонныйЗвонок - DocumentRef.Встреча - CatalogRef.Пользователи - - Auto - - CommonPicture.Встреча - - НаписатьЭлектронноеПисьмо @@ -382,6 +362,26 @@ CommonPicture.ЭлектронноеПисьмоИсходящее + + Позвонить + + ru + Позвонить + + CommandGroup.Взаимодействия + + DocumentRef.ЭлектронноеПисьмоИсходящее + DocumentRef.ЗапланированноеВзаимодействие + DocumentRef.ЭлектронноеПисьмоВходящее + DocumentRef.ТелефонныйЗвонок + DocumentRef.Встреча + CatalogRef.Пользователи + + Auto + + CommonPicture.ТелефонныйЗвонок + + НастройкиРаботыСПочтой @@ -404,24 +404,24 @@ Picture - - Позвонить + + ВзаимодействияПоПредмету ru - Позвонить + Взаимодействия по предмету - CommandGroup.Взаимодействия + FormNavigationPanelGoTo DocumentRef.ЭлектронноеПисьмоИсходящее DocumentRef.ЗапланированноеВзаимодействие DocumentRef.ЭлектронноеПисьмоВходящее DocumentRef.ТелефонныйЗвонок DocumentRef.Встреча - CatalogRef.Пользователи Auto - - CommonPicture.ТелефонныйЗвонок - + + ru + Перейти к просмотру списка взаимодействий + diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form index 8129aeaeb..6058f5c56 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form @@ -19,7 +19,7 @@ НомерРасширеннаяПодсказка - 119 + 121 Label true true @@ -60,7 +60,7 @@ ДатаРасширеннаяПодсказка - 121 + 123 Label true true @@ -101,7 +101,7 @@ ДатаРедактированияРасширеннаяПодсказка - 123 + 125 Label true true @@ -144,7 +144,7 @@ ГруппаНомерДатаРасширеннаяПодсказка - 118 + 120 Label true true @@ -177,7 +177,7 @@ ОпросРасширеннаяПодсказка - 126 + 128 Label true true @@ -218,7 +218,7 @@ РеспондентРасширеннаяПодсказка - 128 + 130 Label true true @@ -265,7 +265,7 @@ ГруппаРеквизитыОсновноеРасширеннаяПодсказка - 125 + 127 Label true true @@ -298,7 +298,7 @@ ГруппаОсновныеРеквизитыРасширеннаяПодсказка - 117 + 119 Label true true @@ -336,7 +336,7 @@ false СкрытьПоказатьДеревоРазделовРасширеннаяПодсказка - 131 + 133 Label true true @@ -363,7 +363,7 @@ ДекорацияКнопкиШапкаРасширеннаяПодсказка - 132 + 134 Label true true @@ -400,7 +400,7 @@ false ПредыдущийРазделРасширеннаяПодсказка - 133 + 135 Label true true @@ -433,7 +433,7 @@ false СледующийРазделРасширеннаяПодсказка - 134 + 136 Label true true @@ -466,7 +466,7 @@ ГруппаКнопкиШапкаРасширеннаяПодсказка - 130 + 132 Label true true @@ -536,7 +536,7 @@ None ДеревоРазделовФормулировкаРасширеннаяПодсказка - 150 + 152 Label true true @@ -573,7 +573,7 @@ ГруппаПолныйКодНаименованиеРасширеннаяПодсказка - 149 + 151 Label true true @@ -599,10 +599,10 @@ ДеревоРазделовСтрокаПоиска - 140 + 142 ДеревоРазделовСтрокаПоискаРасширеннаяПодсказка - 142 + 144 Label true true @@ -612,7 +612,7 @@ ДеревоРазделовСтрокаПоискаКонтекстноеМеню - 141 + 143 true ДеревоРазделов @@ -622,10 +622,10 @@ ДеревоРазделовСостояниеПросмотра - 143 + 145 ДеревоРазделовСостояниеПросмотраРасширеннаяПодсказка - 145 + 147 Label true true @@ -635,7 +635,7 @@ ДеревоРазделовСостояниеПросмотраКонтекстноеМеню - 144 + 146 true ViewStatusAddition @@ -646,10 +646,10 @@ ДеревоРазделовУправлениеПоиском - 146 + 148 ДеревоРазделовУправлениеПоискомРасширеннаяПодсказка - 148 + 150 Label true true @@ -659,7 +659,7 @@ ДеревоРазделовУправлениеПоискомКонтекстноеМеню - 147 + 149 true SearchControlAddition @@ -670,7 +670,7 @@ ДеревоРазделовРасширеннаяПодсказка - 139 + 141 Label true true @@ -696,7 +696,7 @@ false КонтекстноеМенюДеревоРазделовПерейтиРасширеннаяПодсказка - 137 + 139 Label true true @@ -723,7 +723,7 @@ false КонтекстноеМенюДеревоРазделовКопироватьРасширеннаяПодсказка - 138 + 140 Label true true @@ -790,7 +790,7 @@ ГруппаДеревоРазделовРасширеннаяПодсказка - 136 + 138 Label true true @@ -824,7 +824,7 @@ НадписьВступлениеРасширеннаяПодсказка - 162 + 164 Label true true @@ -854,7 +854,7 @@ true ГруппаТелоАнкетыРасширеннаяПодсказка - 161 + 163 Label true true @@ -884,7 +884,7 @@ ДекорацияОжиданиеОтступРасширеннаяПодсказка - 165 + 167 Label true true @@ -921,7 +921,7 @@ ГруппаОжиданиеОтступРасширеннаяПодсказка - 164 + 166 Label true true @@ -956,7 +956,7 @@ ДекорацияОжиданиеЭлементыРасширеннаяПодсказка - 167 + 169 Label true true @@ -990,7 +990,7 @@ КартинкаДлительныйПроцессРасширеннаяПодсказка - 168 + 170 Label true true @@ -1032,7 +1032,7 @@ НадписьПодождитеРасширеннаяПодсказка - 169 + 171 Label true true @@ -1073,7 +1073,7 @@ ГруппаОжиданиеЭлементыРасширеннаяПодсказка - 166 + 168 Label true true @@ -1107,7 +1107,7 @@ false СтраницаОжиданиеРасширеннаяПодсказка - 163 + 165 Label true true @@ -1136,7 +1136,7 @@ ГруппаСтраницыФормаЗаполненияРасширеннаяПодсказка - 160 + 162 Label true true @@ -1164,7 +1164,7 @@ ГруппаДеревоРазделовФормаЗаполненияРасширеннаяПодсказка - 135 + 137 Label true true @@ -1195,7 +1195,7 @@ ДекорацияКнопкиПодвалРасширеннаяПодсказка - 171 + 173 Label true true @@ -1232,7 +1232,7 @@ false ПредыдущийРазделПодвалРасширеннаяПодсказка - 172 + 174 Label true true @@ -1265,7 +1265,7 @@ false СледующийРазделПодвалРасширеннаяПодсказка - 173 + 175 Label true true @@ -1294,7 +1294,7 @@ ГруппаКнопкиПодвалРасширеннаяПодсказка - 170 + 172 Label true true @@ -1311,6 +1311,54 @@ Auto + + Комментарий + 111 + true + true + + true + + + Объект.Комментарий + + Left + + КомментарийРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 112 + true + + InputField + Enter + true + Left + true + + + StartChoice + КомментарийНачалоВыбора + + true + 2 + true + true + true + true + true + true + Normal + + ФормаКоманднаяПанель -1 @@ -1325,7 +1373,7 @@ false ФормаКоманднаяПанельПровестиИЗакрытьРасширеннаяПодсказка - 111 + 113 Label true true @@ -1352,7 +1400,7 @@ false ФормаКоманднаяПанельЗаписатьРасширеннаяПодсказка - 112 + 114 Label true true @@ -1383,7 +1431,7 @@ false ФормаЗаполненияПровестиЗакрытьРасширеннаяПодсказка - 113 + 115 Label true true @@ -1417,7 +1465,7 @@ false ФормаЗаполненияЗаписатьРасширеннаяПодсказка - 114 + 116 Label true true @@ -1451,7 +1499,7 @@ false ФормаЗакрытьРасширеннаяПодсказка - 115 + 117 Label true true @@ -1478,7 +1526,7 @@ false СправкаРасширеннаяПодсказка - 116 + 118 Label true true diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl index 693af089d..5e3066580 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl @@ -1,32 +1,258 @@ -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ -// Отвечает за построение формы заполнения +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере -Процедура ПостроениеФормыСогласноРаздела() +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - //определение выбранного раздела - ТекущиеДанныеДеревоРазделов = ДеревоРазделов.НайтиПоИдентификатору(Элементы.ДеревоРазделов.ТекущаяСтрока); - Если ТекущиеДанныеДеревоРазделов = Неопределено Тогда + //Для предотвращения открытия документа "Анкета" другими внешними пользователями + Если ЗначениеЗаполнено(ВнешниеПользователи.ТекущийВнешнийПользователь()) Тогда + Если НЕ Объект.Ссылка.Пустая() Тогда + Если Объект.Респондент <> ВнешниеПользователи.ПолучитьОбъектАвторизацииВнешнегоПользователя(ВнешниеПользователи.ТекущийВнешнийПользователь()) Тогда + Отказ = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если НЕ Объект.Опрос.Пустая() Тогда + + РеквизитыОпрос = ПолучитьЗначенияРеквизитовНазначениеОпроса(Объект.Опрос); + УстановитьЗначенияРеквизитовСогласноОпросу(РеквизитыОпрос); + + Если Не ШаблонАнкеты.Пустая() Тогда + + Если Параметры.Свойство("ТолькоФормаЗаполнения") Тогда + АвтоЗаголовок = Ложь; + УстановитьЗаголовкиНадписей(РеквизитыОпрос); + КонецЕсли; + + Анкетирование.УстановитьЭлементДереваРазделовАнкетыВступлениеЗаключение(ДеревоРазделов,"Вступление"); + Анкетирование.ЗаполнитьДеревоРазделов(ЭтаФорма,ДеревоРазделов); + Анкетирование.УстановитьЭлементДереваРазделовАнкетыВступлениеЗаключение(ДеревоРазделов,"Заключение"); + АнкетированиеКлиентСервер.СформироватьНумерациюДерева(ДеревоРазделов,Истина); + + Если (НЕ Объект.Проведен) И ЗначениеЗаполнено(Объект.РедактируемыйРаздел) Тогда + + + Если ТипЗнч(Объект.РедактируемыйРаздел) = Тип("СправочникСсылка.ВопросыШаблонаАнкеты") Тогда + + НомерТекущегоРаздела = АнкетированиеКлиентСервер.НайтиСтрокуВДанныхФормыДерево(ДеревоРазделов,Объект.РедактируемыйРаздел,"Ссылка",Истина); + + Иначе + + НомерТекущегоРаздела = АнкетированиеКлиентСервер.НайтиСтрокуВДанныхФормыДерево(ДеревоРазделов,Объект.РедактируемыйРаздел,"ТипСтроки",Истина); + + КонецЕсли; + + Если НомерТекущегоРаздела >= 0 Тогда + + Элементы.ДеревоРазделов.ТекущаяСтрока = НомерТекущегоРаздела; + ПостроениеФормыСогласноРаздела(); + + КонецЕсли; + + КонецЕсли; + + Иначе + + Отказ = Истина; + Возврат; + + КонецЕсли; + + КонецЕсли; + + Элементы.ПредыдущийРазделПодвал.Видимость = Ложь; + Элементы.СледующийРазделПодвал.Видимость = Ложь; + + ДействияВЗависимостиОтВидаФормы(); + + Элементы.ГруппаДеревоРазделов.Видимость = Ложь; + Элементы.СкрытьПоказатьДеревоРазделов.Заголовок = НСтр("ru = 'Показать разделы'"); + Элементы.ДекорацияОжиданиеЭлементы.Ширина = 45; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Элементы.ДеревоРазделов.ТекущаяСтрока = НомерТекущегоРаздела; + УправлениеДоступностьюКнопкиНавигацияРазделов(); + + Если (Не ЭтаФорма.ТолькоПросмотр) Тогда + УправлениеДоступностьюПодчиненныеВопросы(Ложь); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Если Элементы.ГруппаТелоАнкеты.ТолькоПросмотр Тогда + Модифицированность = Ложь; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура РеспондентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + МассивОтбора = Новый Массив; + Если ОтборРеспондентов.Количество() > 0 Тогда + МассивОтбора.Добавить(АнкетированиеКлиент.СоздатьСтруктуруПараметраОтбора(Тип("ЭлементОтбораКомпоновкиДанных"),"Ссылка",ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии,ОтборРеспондентов)); + КонецЕсли; + + ОткрытьФорму(ИмяМетаданныхРеспонент + ".ФормаВыбора",Новый Структура("МассивОтбора",МассивОтбора),Элемент); + +КонецПроцедуры + +//Обработчик события ПриИзменении для вопросов с условием +&НаКлиенте +Процедура Подключаемый_ПриИзмененииВопросовСУсловием(Элемент) + + УправлениеДоступностьюПодчиненныеВопросы(); + +КонецПроцедуры + +//Обработчик события при изменении для простых и табличных вопросов +&НаКлиенте +Процедура ПриИзмененииВопроса(Элемент) + + Модифицированность = Истина; + +КонецПроцедуры + +//Обработчик начало выбора текстовых ячеек табличных вопросов +&НаКлиенте +Процедура Подключаемый_НачалоВыбораТекстовыхЯчеекТабличныхВопросов(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Результат = ""; + ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияМногострочногоТекста(Элемент.ТекстРедактирования,Результат,Модифицированность); + Если ТипЗнч(Элемент.Родитель) = Тип("ГруппаФормы") Тогда + ЭтаФорма[Элемент.Имя] = Результат; + Иначе + + НайденнаяСтрока = ЭтаФорма[Элемент.Родитель.Имя].НайтиПоИдентификатору(Элемент.Родитель.ТекущаяСтрока); + ИндексСтроки = ЭтаФорма[Элемент.Родитель.Имя].Индекс(НайденнаяСтрока); + ЭтаФорма[Элемент.Родитель.Имя][ИндексСтроки][Элемент.Имя] = Результат; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоРазделовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ТекущиеДанные = Элементы.ДеревоРазделов.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; + + ВыполнитьПостроениеФормыЗаполнения(); + УправлениеДоступностьюКнопкиНавигацияРазделов(); - Если НЕ Элементы.ГруппаТелоАнкеты.ТолькоПросмотр Тогда - ПреобразоватьРезультатыЗаполненияРазделаВТабличнуюЧасть(); - КонецЕсли; - НомерТекущегоРаздела = Элементы.ДеревоРазделов.ТекущаяСтрока; - Анкетирование.ПостроениеФормыЗаполненияПоРазделу(ЭтаФорма,ТекущиеДанныеДеревоРазделов); - УстановитьЗначенияРеквизитовФормыЗаполненияРаздела(); - Анкетирование.СформироватьТаблицуПодчиненияВопросов(ЭтаФорма); - УстановитьОбработчикСобытияПриИзмененииДляВопросов(); +КонецПроцедуры + +&НаКлиенте +Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - Элементы.ПредыдущийРазделПодвал.Видимость = (ТаблицаВопросовРаздела.Количество() > 0); - Элементы.СледующийРазделПодвал.Видимость = (ТаблицаВопросовРаздела.Количество() > 0); + ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияКомментария(Элемент.ТекстРедактирования, Объект.Комментарий, Модифицированность); - КонецПроцедуры +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// УСТАНОВКА ЗНАЧЕНИЙ РЕКВИЗИТОВ ФОРМЫ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ФормаЗаполненияЗаписать(Команда) + + Отказ = ОкончаниеРедактированиеФормыЗаполнения(РежимЗаписиДокумента.Запись); + + Если НЕ Отказ Тогда + + ПоказатьОповещениеПользователя(НСтр("ru = 'Изменение'"), + , + Строка(Объект.Ссылка), + БиблиотекаКартинок.Информация32); + + Оповестить("Запись_Анкета",Новый Структура,Объект.Ссылка); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ФормаЗаполненияПровестиЗакрыть(Команда) + + Отказ = Ложь; + + Ответ = Вопрос(НСтр("ru='Ваша анкета будет принята. + |Дальнейшее заполнение анкеты будет невозможно + |Продолжить?'"),РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Нет Тогда + Отказ = Истина; + КонецЕсли; + + Если НЕ Отказ Тогда + Отказ = ОкончаниеРедактированиеФормыЗаполнения(РежимЗаписиДокумента.Проведение); + КонецЕсли; + + Если НЕ Отказ Тогда + + ПоказатьОповещениеПользователя(НСтр("ru = 'Изменение'"), + , + Строка(Объект.Ссылка), + БиблиотекаКартинок.Информация32); + + Оповестить("Проведение_Анкета",Новый Структура,Объект.Ссылка); + Модифицированность = Ложь; + Закрыть(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СкрытьПоказатьДеревоРазделов(Команда) + + ИзменитьВидимостьДеревоРазделов(); + +КонецПроцедуры + +&НаКлиенте +Процедура СледующийРаздел(Команда) + + ИзменитьРаздел("Вперед"); + +КонецПроцедуры + +&НаКлиенте +Процедура ПредыдущийРаздел(Команда) + + ИзменитьРаздел("Назад"); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыборРаздела(Команда) + + ВыполнитьПостроениеФормыЗаполнения(); + УправлениеДоступностьюКнопкиНавигацияРазделов(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Установка значений реквизитов формы // Устанавливает значения реквизитов формы заполнения, согласно данным ранее ответам // @@ -324,7 +550,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРЕОБРАЗОВАНИЕ РЕЗУЛЬТОВ ЗАПОЛНЕНИЯ АНКЕТЫ В ТАБЛИЧНУЮ ЧАСТЬ ДОКУМЕНТА +// Преобразование результатов заполнения анкеты в табличную часть документа &НаСервере Функция ОкончаниеРедактированиеФормыЗаполнения(РежимЗаписи) @@ -608,14 +834,14 @@ КонецЦикла; -КонецПроцедуры // () +КонецПроцедуры //Получает ответы, данные респондентом на простой вопрос и // аккамулирует их в общей таблице ответов. // // Параметры // СтрокаДерева - СтрокаДереваЗначений - строка дерева шаблона анкеты -// +// &НаСервере Процедура ЗаполнитьОтветПростойВопрос(СтрокаДерева) @@ -670,14 +896,38 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Прочее + +// Отвечает за построение формы заполнения +&НаСервере +Процедура ПостроениеФормыСогласноРаздела() + + //определение выбранного раздела + ТекущиеДанныеДеревоРазделов = ДеревоРазделов.НайтиПоИдентификатору(Элементы.ДеревоРазделов.ТекущаяСтрока); + Если ТекущиеДанныеДеревоРазделов = Неопределено Тогда + Возврат; + КонецЕсли; + + Если НЕ Элементы.ГруппаТелоАнкеты.ТолькоПросмотр Тогда + ПреобразоватьРезультатыЗаполненияРазделаВТабличнуюЧасть(); + КонецЕсли; + НомерТекущегоРаздела = Элементы.ДеревоРазделов.ТекущаяСтрока; + Анкетирование.ПостроениеФормыЗаполненияПоРазделу(ЭтаФорма,ТекущиеДанныеДеревоРазделов); + УстановитьЗначенияРеквизитовФормыЗаполненияРаздела(); + Анкетирование.СформироватьТаблицуПодчиненияВопросов(ЭтаФорма); + УстановитьОбработчикСобытияПриИзмененииДляВопросов(); + + Элементы.ПредыдущийРазделПодвал.Видимость = (ТаблицаВопросовРаздела.Количество() > 0); + Элементы.СледующийРазделПодвал.Видимость = (ТаблицаВопросовРаздела.Количество() > 0); + +КонецПроцедуры // Добавляет пустые элементы в Коллекцию // // Параметры // Таблица - Коллекция - коллеция в которую добавляются строки // ЧислоСтрок - Число - число добавляемых строк -// +// &НаСервереБезКонтекста Процедура ДобавитьСтрокиВТаблицу(Коллекция,ЧислоСтрок); @@ -698,114 +948,115 @@ Отказ = Ложь; Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | СоставОтветов.Вопрос, - | СоставОтветов.ЭлементарныйВопрос, - | СоставОтветов.НомерЯчейки, - | СоставОтветов.Ответ, - | СоставОтветов.ОткрытыйОтвет - |ПОМЕСТИТЬ СоставОтветов - |ИЗ - | &ВнешнийИсточник КАК СоставОтветов - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ВопросыБезОтветов.Ссылка - |ПОМЕСТИТЬ ОбязательныеВопросыБезОтветов - |ИЗ - | (ВЫБРАТЬ - | ВопросыШаблонаАнкеты.Ссылка КАК Ссылка, - | СУММА(ВЫБОР - | КОГДА СоставОтветов.Ответ ЕСТЬ NULL - | ТОГДА 0 - | ИНАЧЕ 1 - | КОНЕЦ) КАК КоличествоОтветов - | ИЗ - | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты - | ЛЕВОЕ СОЕДИНЕНИЕ СоставОтветов КАК СоставОтветов - | ПО (СоставОтветов.Вопрос = ВопросыШаблонаАнкеты.Ссылка) - | ГДЕ - | ВопросыШаблонаАнкеты.Обязательный - | И (НЕ ВопросыШаблонаАнкеты.ПометкаУдаления) - | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа) - | И ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты - | И ВопросыШаблонаАнкеты.РодительВопрос = ЗНАЧЕНИЕ(Справочник.ВопросыШаблонаАнкеты.ПустаяСсылка) - | - | СГРУППИРОВАТЬ ПО - | ВопросыШаблонаАнкеты.Ссылка - | - | ИМЕЮЩИЕ - | СУММА(ВЫБОР - | КОГДА СоставОтветов.Ответ ЕСТЬ NULL - | ТОГДА 0 - | ИНАЧЕ 1 - | КОНЕЦ) = 0 - | - | ОБЪЕДИНИТЬ ВСЕ - | - | ВЫБРАТЬ - | ВопросыШаблонаАнкеты.Ссылка, - | СУММА(ВЫБОР - | КОГДА СоставОтветов.Ответ ЕСТЬ NULL - | ТОГДА 0 - | ИНАЧЕ 1 - | КОНЕЦ) - | ИЗ - | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты - | ЛЕВОЕ СОЕДИНЕНИЕ СоставОтветов КАК СоставОтветов - | ПО ВопросыШаблонаАнкеты.Ссылка = СоставОтветов.Вопрос - | ГДЕ - | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты - | И (НЕ ВопросыШаблонаАнкеты.ПометкаУдаления) - | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа) - | И ВопросыШаблонаАнкеты.РодительВопрос <> ЗНАЧЕНИЕ(Справочник.ВопросыШаблонаАнкеты.ПустаяСсылка) - | И ВопросыШаблонаАнкеты.РодительВопрос В - | (ВЫБРАТЬ РАЗЛИЧНЫЕ - | ВложенныйЗапрос.Ссылка - | ИЗ - | (ВЫБРАТЬ - | ВопросыШаблонаАнкеты.Ссылка КАК Ссылка, - | ЕСТЬNULL(СоставОтветов.Ответ, ЛОЖЬ) КАК Ответ - | ИЗ - | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты ЛЕВОЕ СОЕДИНЕНИЕ СоставОтветов КАК СоставОтветов - | ПО - | ВопросыШаблонаАнкеты.Ссылка = СоставОтветов.Вопрос - | ГДЕ - | ВопросыШаблонаАнкеты.ТипВопроса = ЗНАЧЕНИЕ(Перечисление.ТипыВопросовШаблонаАнкеты.ВопросСУсловием) - | И (НЕ ВопросыШаблонаАнкеты.ПометкаУдаления) - | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа) - | И ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты - | И ЕСТЬNULL(СоставОтветов.Ответ, ЛОЖЬ) = ИСТИНА - | ) КАК ВложенныйЗапрос) - | И ВопросыШаблонаАнкеты.Обязательный - | - | СГРУППИРОВАТЬ ПО - | ВопросыШаблонаАнкеты.Ссылка - | - | ИМЕЮЩИЕ - | СУММА(ВЫБОР - | КОГДА СоставОтветов.Ответ ЕСТЬ NULL - | ТОГДА 0 - | ИНАЧЕ 1 - | КОНЕЦ) = 0) КАК ВопросыБезОтветов - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВопросыШаблонаАнкеты.Ссылка, - | ВопросыШаблонаАнкеты.Формулировка - |ИЗ - | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты - |ГДЕ - | ВопросыШаблонаАнкеты.Ссылка В - | (ВЫБРАТЬ - | ОбязательныеВопросыБезОтветов.Ссылка - | ИЗ - | ОбязательныеВопросыБезОтветов КАК ОбязательныеВопросыБезОтветов) - | - |УПОРЯДОЧИТЬ ПО - | ВопросыШаблонаАнкеты.Ссылка"; + Запрос.Текст = " + |ВЫБРАТЬ + | СоставОтветов.Вопрос, + | СоставОтветов.ЭлементарныйВопрос, + | СоставОтветов.НомерЯчейки, + | СоставОтветов.Ответ, + | СоставОтветов.ОткрытыйОтвет + |ПОМЕСТИТЬ СоставОтветов + |ИЗ + | &ВнешнийИсточник КАК СоставОтветов + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВопросыБезОтветов.Ссылка + |ПОМЕСТИТЬ ОбязательныеВопросыБезОтветов + |ИЗ + | (ВЫБРАТЬ + | ВопросыШаблонаАнкеты.Ссылка КАК Ссылка, + | СУММА(ВЫБОР + | КОГДА СоставОтветов.Ответ ЕСТЬ NULL + | ТОГДА 0 + | ИНАЧЕ 1 + | КОНЕЦ) КАК КоличествоОтветов + | ИЗ + | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты + | ЛЕВОЕ СОЕДИНЕНИЕ СоставОтветов КАК СоставОтветов + | ПО (СоставОтветов.Вопрос = ВопросыШаблонаАнкеты.Ссылка) + | ГДЕ + | ВопросыШаблонаАнкеты.Обязательный + | И (НЕ ВопросыШаблонаАнкеты.ПометкаУдаления) + | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа) + | И ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты + | И ВопросыШаблонаАнкеты.РодительВопрос = ЗНАЧЕНИЕ(Справочник.ВопросыШаблонаАнкеты.ПустаяСсылка) + | + | СГРУППИРОВАТЬ ПО + | ВопросыШаблонаАнкеты.Ссылка + | + | ИМЕЮЩИЕ + | СУММА(ВЫБОР + | КОГДА СоставОтветов.Ответ ЕСТЬ NULL + | ТОГДА 0 + | ИНАЧЕ 1 + | КОНЕЦ) = 0 + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ВопросыШаблонаАнкеты.Ссылка, + | СУММА(ВЫБОР + | КОГДА СоставОтветов.Ответ ЕСТЬ NULL + | ТОГДА 0 + | ИНАЧЕ 1 + | КОНЕЦ) + | ИЗ + | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты + | ЛЕВОЕ СОЕДИНЕНИЕ СоставОтветов КАК СоставОтветов + | ПО ВопросыШаблонаАнкеты.Ссылка = СоставОтветов.Вопрос + | ГДЕ + | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты + | И (НЕ ВопросыШаблонаАнкеты.ПометкаУдаления) + | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа) + | И ВопросыШаблонаАнкеты.РодительВопрос <> ЗНАЧЕНИЕ(Справочник.ВопросыШаблонаАнкеты.ПустаяСсылка) + | И ВопросыШаблонаАнкеты.РодительВопрос В + | (ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВложенныйЗапрос.Ссылка + | ИЗ + | (ВЫБРАТЬ + | ВопросыШаблонаАнкеты.Ссылка КАК Ссылка, + | ЕСТЬNULL(СоставОтветов.Ответ, ЛОЖЬ) КАК Ответ + | ИЗ + | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты ЛЕВОЕ СОЕДИНЕНИЕ СоставОтветов КАК СоставОтветов + | ПО + | ВопросыШаблонаАнкеты.Ссылка = СоставОтветов.Вопрос + | ГДЕ + | ВопросыШаблонаАнкеты.ТипВопроса = ЗНАЧЕНИЕ(Перечисление.ТипыВопросовШаблонаАнкеты.ВопросСУсловием) + | И (НЕ ВопросыШаблонаАнкеты.ПометкаУдаления) + | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа) + | И ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты + | И ЕСТЬNULL(СоставОтветов.Ответ, ЛОЖЬ) = ИСТИНА + | ) КАК ВложенныйЗапрос) + | И ВопросыШаблонаАнкеты.Обязательный + | + | СГРУППИРОВАТЬ ПО + | ВопросыШаблонаАнкеты.Ссылка + | + | ИМЕЮЩИЕ + | СУММА(ВЫБОР + | КОГДА СоставОтветов.Ответ ЕСТЬ NULL + | ТОГДА 0 + | ИНАЧЕ 1 + | КОНЕЦ) = 0) КАК ВопросыБезОтветов + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВопросыШаблонаАнкеты.Ссылка, + | ВопросыШаблонаАнкеты.Формулировка + |ИЗ + | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты + |ГДЕ + | ВопросыШаблонаАнкеты.Ссылка В + | (ВЫБРАТЬ + | ОбязательныеВопросыБезОтветов.Ссылка + | ИЗ + | ОбязательныеВопросыБезОтветов КАК ОбязательныеВопросыБезОтветов) + | + |УПОРЯДОЧИТЬ ПО + | ВопросыШаблонаАнкеты.Ссылка"; Запрос.УстановитьПараметр("ВнешнийИсточник",Объект.Состав.Выгрузить()); Запрос.УстановитьПараметр("ШаблонАнкеты",ШаблонАнкеты); @@ -822,7 +1073,7 @@ Возврат Истина; -КонецФункции // ПроверитьЗаполнениеАнкеты() +КонецФункции // Находит ответ в массиве содержащем строки таблицы значений // @@ -868,24 +1119,25 @@ Функция ПолучитьЗначенияРеквизитовНазначениеОпроса(Опрос) Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | НазначениеОпросов.ШаблонАнкеты, - | НазначениеОпросов.ТипРеспондентов, - | НазначениеОпросов.ВозможностьПредварительногоСохранения, - | НазначениеОпросов.Респонденты.( - | Ссылка, - | НомерСтроки, - | Респондент - | ), - | ШаблоныАнкет.Заголовок, - | ШаблоныАнкет.Вступление, - | ШаблоныАнкет.Заключение - |ИЗ - | Документ.НазначениеОпросов КАК НазначениеОпросов - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ШаблоныАнкет КАК ШаблоныАнкет - | ПО НазначениеОпросов.ШаблонАнкеты = ШаблоныАнкет.Ссылка - |ГДЕ - | НазначениеОпросов.Ссылка = &Опрос"; + Запрос.Текст = " + |ВЫБРАТЬ + | НазначениеОпросов.ШаблонАнкеты, + | НазначениеОпросов.ТипРеспондентов, + | НазначениеОпросов.ВозможностьПредварительногоСохранения, + | НазначениеОпросов.Респонденты.( + | Ссылка, + | НомерСтроки, + | Респондент + | ), + | ШаблоныАнкет.Заголовок, + | ШаблоныАнкет.Вступление, + | ШаблоныАнкет.Заключение + |ИЗ + | Документ.НазначениеОпросов КАК НазначениеОпросов + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ШаблоныАнкет КАК ШаблоныАнкет + | ПО НазначениеОпросов.ШаблонАнкеты = ШаблоныАнкет.Ссылка + |ГДЕ + | НазначениеОпросов.Ссылка = &Опрос"; Запрос.УстановитьПараметр("Опрос",Опрос); @@ -934,7 +1186,7 @@ ОтключитьОтметкуНезаполненного(); -КонецПроцедуры // УправлениеДоступностью() +КонецПроцедуры //Устанавливает доступность и видимость реквзитов в зависимости от вида формы &НаСервере @@ -946,6 +1198,7 @@ Элементы.Дата.Доступность = Ложь; Элементы.ФормаКоманднаяПанельПровестиИЗакрыть.Видимость = Ложь; Элементы.ФормаКоманднаяПанельЗаписать.Видимость = Ложь; + Элементы.Комментарий.Видимость = Ложь; Если Объект.Ссылка.Пустая() Тогда Объект.Дата = ТекущаяДатаСеанса(); КонецЕсли; @@ -1044,7 +1297,7 @@ Процедура ИзменитьВидимостьДеревоРазделов() Элементы.ГруппаДеревоРазделов.Видимость = НЕ Элементы.ГруппаДеревоРазделов.Видимость; - Элементы.СкрытьПоказатьДеревоРазделов.Заголовок = ?(Элементы.ГруппаДеревоРазделов.Видимость,"Скрыть разделы","Показать разделы"); + Элементы.СкрытьПоказатьДеревоРазделов.Заголовок = ?(Элементы.ГруппаДеревоРазделов.Видимость,НСтр("ru = 'Скрыть разделы'"),НСтр("ru = 'Показать разделы'")); Элементы.ДекорацияОжиданиеЭлементы.Ширина = ?(Элементы.ГруппаДеревоРазделов.Видимость,20,45); КонецПроцедуры @@ -1072,241 +1325,4 @@ КонецЕсли; ВыполнитьПостроениеФормыЗаполнения(); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ МОДУЛЯ - -&НаКлиенте -Процедура ФормаЗаполненияЗаписать(Команда) - - Отказ = ОкончаниеРедактированиеФормыЗаполнения(РежимЗаписиДокумента.Запись); - - Если НЕ Отказ Тогда - - ПоказатьОповещениеПользователя(НСтр("ru = 'Изменение'"), - , - Строка(Объект.Ссылка), - БиблиотекаКартинок.Информация32); - - Оповестить("Запись_Анкета",Новый Структура,Объект.Ссылка); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ФормаЗаполненияПровестиЗакрыть(Команда) - - Отказ = Ложь; - - Ответ = Вопрос(НСтр("ru='Ваша анкета будет принята. - |Дальнейшее заполнение анкеты будет невозможно - |Продолжить?'"),РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Нет Тогда - Отказ = Истина; - КонецЕсли; - - Если НЕ Отказ Тогда - Отказ = ОкончаниеРедактированиеФормыЗаполнения(РежимЗаписиДокумента.Проведение); - КонецЕсли; - - Если НЕ Отказ Тогда - - ПоказатьОповещениеПользователя(НСтр("ru = 'Изменение'"), - , - Строка(Объект.Ссылка), - БиблиотекаКартинок.Информация32); - - Оповестить("Проведение_Анкета",Новый Структура,Объект.Ссылка); - Модифицированность = Ложь; - Закрыть(); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СкрытьПоказатьДеревоРазделов(Команда) - - ИзменитьВидимостьДеревоРазделов(); - -КонецПроцедуры - -&НаКлиенте -Процедура СледующийРаздел(Команда) - - ИзменитьРаздел("Вперед"); - -КонецПроцедуры - -&НаКлиенте -Процедура ПредыдущийРаздел(Команда) - - ИзменитьРаздел("Назад"); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыборРаздела(Команда) - - ВыполнитьПостроениеФормыЗаполнения(); - УправлениеДоступностьюКнопкиНавигацияРазделов(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - //Для предотвращения открытия документа "Анкета" другими внешними пользователями - Если ЗначениеЗаполнено(ВнешниеПользователи.ТекущийВнешнийПользователь()) Тогда - Если НЕ Объект.Ссылка.Пустая() Тогда - Если Объект.Респондент <> ВнешниеПользователи.ПолучитьОбъектАвторизацииВнешнегоПользователя(ВнешниеПользователи.ТекущийВнешнийПользователь()) Тогда - Отказ = Истина; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если НЕ Объект.Опрос.Пустая() Тогда - - РеквизитыОпрос = ПолучитьЗначенияРеквизитовНазначениеОпроса(Объект.Опрос); - УстановитьЗначенияРеквизитовСогласноОпросу(РеквизитыОпрос); - - Если Не ШаблонАнкеты.Пустая() Тогда - - Если Параметры.Свойство("ТолькоФормаЗаполнения") Тогда - АвтоЗаголовок = Ложь; - УстановитьЗаголовкиНадписей(РеквизитыОпрос); - КонецЕсли; - - Анкетирование.УстановитьЭлементДереваРазделовАнкетыВступлениеЗаключение(ДеревоРазделов,"Вступление"); - Анкетирование.ЗаполнитьДеревоРазделов(ЭтаФорма,ДеревоРазделов); - Анкетирование.УстановитьЭлементДереваРазделовАнкетыВступлениеЗаключение(ДеревоРазделов,"Заключение"); - АнкетированиеКлиентСервер.СформироватьНумерациюДерева(ДеревоРазделов,Истина); - - Если (НЕ Объект.Проведен) И ЗначениеЗаполнено(Объект.РедактируемыйРаздел) Тогда - - - Если ТипЗнч(Объект.РедактируемыйРаздел) = Тип("СправочникСсылка.ВопросыШаблонаАнкеты") Тогда - - НомерТекущегоРаздела = АнкетированиеКлиентСервер.НайтиСтрокуВДанныхФормыДерево(ДеревоРазделов,Объект.РедактируемыйРаздел,"Ссылка",Истина); - - Иначе - - НомерТекущегоРаздела = АнкетированиеКлиентСервер.НайтиСтрокуВДанныхФормыДерево(ДеревоРазделов,Объект.РедактируемыйРаздел,"ТипСтроки",Истина); - - КонецЕсли; - - Если НомерТекущегоРаздела >= 0 Тогда - - Элементы.ДеревоРазделов.ТекущаяСтрока = НомерТекущегоРаздела; - ПостроениеФормыСогласноРаздела(); - - КонецЕсли; - - КонецЕсли; - - Иначе - - Отказ = Истина; - Возврат; - - КонецЕсли; - - КонецЕсли; - - Элементы.ПредыдущийРазделПодвал.Видимость = Ложь; - Элементы.СледующийРазделПодвал.Видимость = Ложь; - - ДействияВЗависимостиОтВидаФормы(); - - Элементы.ГруппаДеревоРазделов.Видимость = Ложь; - Элементы.СкрытьПоказатьДеревоРазделов.Заголовок = "Показать разделы"; - Элементы.ДекорацияОжиданиеЭлементы.Ширина = 45; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - Элементы.ДеревоРазделов.ТекущаяСтрока = НомерТекущегоРаздела; - УправлениеДоступностьюКнопкиНавигацияРазделов(); - - Если (Не ЭтаФорма.ТолькоПросмотр) Тогда - УправлениеДоступностьюПодчиненныеВопросы(Ложь); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - - Если Элементы.ГруппаТелоАнкеты.ТолькоПросмотр Тогда - Модифицированность = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура РеспондентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - МассивОтбора = Новый Массив; - Если ОтборРеспондентов.Количество() > 0 Тогда - МассивОтбора.Добавить(АнкетированиеКлиент.СоздатьСтруктуруПараметраОтбора(Тип("ЭлементОтбораКомпоновкиДанных"),"Ссылка",ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии,ОтборРеспондентов)); - КонецЕсли; - - ОткрытьФорму(ИмяМетаданныхРеспонент + ".ФормаВыбора",Новый Структура("МассивОтбора",МассивОтбора),Элемент); - -КонецПроцедуры - -//Обработчик события ПриИзменении для вопросов с условием -&НаКлиенте -Процедура Подключаемый_ПриИзмененииВопросовСУсловием(Элемент) - - УправлениеДоступностьюПодчиненныеВопросы(); - -КонецПроцедуры - -//Обработчик события при изменении для простых и табличных вопросов -&НаКлиенте -Процедура ПриИзмененииВопроса(Элемент) - - Модифицированность = Истина; - -КонецПроцедуры - -//Обработчик начало выбора текстовых ячеек табличных вопросов -&НаКлиенте -Процедура Подключаемый_НачалоВыбораТекстовыхЯчеекТабличныхВопросов(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - Если ТипЗнч(Элемент.Родитель) = Тип("ГруппаФормы") Тогда - ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияМногострочногоТекста(Элемент.ТекстРедактирования,ЭтаФорма[Элемент.Имя],Модифицированность); - //ПутьКДанным = ЭтаФорма[Элемент.Имя]; - Иначе - ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияМногострочногоТекста(Элемент.ТекстРедактирования,ЭтаФорма[Элемент.Родитель.Имя][Элемент.Родитель.ТекущаяСтрока][Элемент.Имя],Модифицированность); - //ПутьКДанным = ЭтаФорма[Элемент.Родитель.Имя][Элемент.Родитель.ТекущаяСтрока][Элемент.Имя]; - КонецЕсли; - - //ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияМногострочногоТекста(Элемент.ТекстРедактирования,ПутьКДанным,Модифицированность); - -КонецПроцедуры - -&НаКлиенте -Процедура ДеревоРазделовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ТекущиеДанные = Элементы.ДеревоРазделов.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - ВыполнитьПостроениеФормыЗаполнения(); - УправлениеДоступностьюКнопкиНавигацияРазделов(); - -КонецПроцедуры +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl index ea76c5bff..49c67ae13 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/Documents/Анкета/ObjectModule.bsl b/SSL/src/Documents/Анкета/ObjectModule.bsl index 23f7869bb..2e096fe7a 100644 --- a/SSL/src/Documents/Анкета/ObjectModule.bsl +++ b/SSL/src/Documents/Анкета/ObjectModule.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + Процедура ОбработкаПроведения(Отказ, РежимПроведения) Движения.ОтветыНаВопросыАнкет.Записывать = Истина; @@ -37,7 +40,6 @@ КонецПроцедуры - Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ДанныеЗаполнения <> Неопределено Тогда diff --git a/SSL/src/Documents/Анкета/Анкета.mdo b/SSL/src/Documents/Анкета/Анкета.mdo index 40a721800..6d4651949 100644 --- a/SSL/src/Documents/Анкета/Анкета.mdo +++ b/SSL/src/Documents/Анкета/Анкета.mdo @@ -160,6 +160,28 @@ Use Use + + Комментарий + + ru + Комментарий + + + String + + + + ru + Произвольный текст + + true + true + + + + Use + Use + ФормаДокумента diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form index 5497b16d9..f981c6e54 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form @@ -22,7 +22,7 @@ ПредметРасширеннаяПодсказка - 107 + 110 Label true true @@ -66,7 +66,7 @@ ВажностьРасширеннаяПодсказка - 109 + 112 Label true true @@ -108,7 +108,7 @@ ОтветственныйРасширеннаяПодсказка - 111 + 114 Label true true @@ -148,7 +148,7 @@ ГруппаПредметВажностьОтветственныйРасширеннаяПодсказка - 106 + 109 Label true true @@ -193,7 +193,7 @@ ДатаНачалаРасширеннаяПодсказка - 115 + 118 Label true true @@ -241,7 +241,7 @@ ВремяНачалаРасширеннаяПодсказка - 117 + 120 Label true true @@ -296,7 +296,7 @@ true ГруппаНачалаРасширеннаяПодсказка - 114 + 117 Label true true @@ -337,7 +337,7 @@ ДатаОкончанияРасширеннаяПодсказка - 120 + 123 Label true true @@ -385,7 +385,7 @@ ВремяОкончанияРасширеннаяПодсказка - 122 + 125 Label true true @@ -440,7 +440,7 @@ true ГруппаОкончаниеРасширеннаяПодсказка - 119 + 122 Label true true @@ -473,7 +473,7 @@ РассмотретьПослеРасширеннаяПодсказка - 125 + 128 Label true true @@ -523,7 +523,7 @@ РассмотреноРасширеннаяПодсказка - 127 + 130 Label true true @@ -558,7 +558,7 @@ ГруппаИсполнениеРасширеннаяПодсказка - 124 + 127 Label true true @@ -592,7 +592,7 @@ true ГруппаПериодПроведенияРасширеннаяПодсказка - 113 + 116 Label true true @@ -625,7 +625,7 @@ ГруппаПериодПредметВажностьРасширеннаяПодсказка - 105 + 108 Label true true @@ -659,7 +659,7 @@ МестоПроведенияВстречиРасширеннаяПодсказка - 129 + 132 Label true true @@ -701,7 +701,7 @@ ТемаРасширеннаяПодсказка - 131 + 134 Label true true @@ -742,7 +742,7 @@ ГруппаШапкаРасширеннаяПодсказка - 104 + 107 Label true true @@ -780,7 +780,7 @@ None ОписаниеРасширеннаяПодсказка - 135 + 138 Label true true @@ -824,7 +824,7 @@ true СтраницаОписаниеРасширеннаяПодсказка - 134 + 137 Label true true @@ -856,7 +856,81 @@ СтраницаДополнительныеРеквизитыРасширеннаяПодсказка - 137 + 140 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаКомментарий + 104 + + Комментарий + 105 + true + true + + true + + + Объект.Комментарий + + None + + КомментарийРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 106 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Комментарий</value> + + + ru + Комментарий + + + СтраницаКомментарийРасширеннаяПодсказка + 141 Label true true @@ -885,7 +959,7 @@ СтраницыОписаниеДополнительноРасширеннаяПодсказка - 133 + 136 Label true true @@ -916,7 +990,7 @@ ДекорацияЗаголовокУчастникиРасширеннаяПодсказка - 139 + 145 Label true true @@ -946,7 +1020,7 @@ ДекорацияУчастникиПустаяРасширеннаяПодсказка - 140 + 146 Label true true @@ -987,7 +1061,7 @@ ДекорацияКонтактыНеЗаполненыРасширеннаяПодсказка - 143 + 149 Label true true @@ -1025,7 +1099,7 @@ СтраницаКонтактыНеЗаполненыРасширеннаяПодсказка - 142 + 148 Label true true @@ -1052,7 +1126,7 @@ ДекорацияКонтактыЗаполненыРасширеннаяПодсказка - 145 + 151 Label true true @@ -1090,7 +1164,7 @@ СтраницаКонтактыЗаполненыРасширеннаяПодсказка - 144 + 150 Label true true @@ -1119,7 +1193,7 @@ СтраницыУказаныКонтактыРасширеннаяПодсказка - 141 + 147 Label true true @@ -1147,7 +1221,7 @@ ГруппаЗаголовокУчастникиРасширеннаяПодсказка - 138 + 144 Label true true @@ -1201,7 +1275,7 @@ ПредставлениеКонтактаРасширеннаяПодсказка - 158 + 164 Label true true @@ -1242,7 +1316,7 @@ КакСвязатьсяРасширеннаяПодсказка - 160 + 166 Label true true @@ -1287,7 +1361,7 @@ КонтактРасширеннаяПодсказка - 162 + 168 Label true true @@ -1334,7 +1408,7 @@ false СоздатьКонтактРасширеннаяПодсказка - 147 + 153 Label true true @@ -1363,10 +1437,10 @@ УчастникиСтрокаПоиска - 149 + 155 УчастникиСтрокаПоискаРасширеннаяПодсказка - 151 + 157 Label true true @@ -1376,7 +1450,7 @@ УчастникиСтрокаПоискаКонтекстноеМеню - 150 + 156 true Участники @@ -1386,10 +1460,10 @@ УчастникиСостояниеПросмотра - 152 + 158 УчастникиСостояниеПросмотраРасширеннаяПодсказка - 154 + 160 Label true true @@ -1399,7 +1473,7 @@ УчастникиСостояниеПросмотраКонтекстноеМеню - 153 + 159 true ViewStatusAddition @@ -1410,10 +1484,10 @@ УчастникиУправлениеПоиском - 155 + 161 УчастникиУправлениеПоискомРасширеннаяПодсказка - 157 + 163 Label true true @@ -1423,7 +1497,7 @@ УчастникиУправлениеПоискомКонтекстноеМеню - 156 + 162 true SearchControlAddition @@ -1434,7 +1508,7 @@ УчастникиРасширеннаяПодсказка - 148 + 154 Label true true @@ -1488,7 +1562,7 @@ ГруппаУчастникиРасширеннаяПодсказка - 146 + 152 Label true true @@ -1523,7 +1597,7 @@ Left АвторРасширеннаяПодсказка - 173 + 179 Label true true @@ -1569,7 +1643,7 @@ Left ДатаРасширеннаяПодсказка - 175 + 181 Label true true @@ -1620,7 +1694,7 @@ ГруппаАвторДатаРегистрацииРасширеннаяПодсказка - 172 + 178 Label true true @@ -1947,6 +2021,10 @@ AfterWrite ПослеЗаписи + + AfterWriteAtServer + ПослеЗаписиНаСервере + OnReadAtServer ПриЧтенииНаСервере diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl index 537d144b0..7bba73571 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl @@ -1,42 +1,6 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ - -&НаКлиенте -Процедура ПроверитьДоступностьСозданияКонтакта() - - текДанные = Элементы.Участники.ТекущиеДанные; - Элементы.СоздатьКонтакт.Доступность = ((текДанные <> Неопределено) И (НЕ ЗначениеЗаполнено(текДанные.Контакт))); - -КонецПроцедуры - -&НаКлиенте -Функция ВыделитьВремя(Дата) - - Возврат Час(Дата) * 3600 + Минута(Дата) * 60; - -КонецФункции - -&НаСервере -Процедура ПриСозданииЧтенииНаСервере() - - ДатаНачала = Объект.ДатаНачала; - ВремяНачала = Объект.ДатаНачала; - ДатаОкончания = Объект.ДатаОкончания; - ВремяОкончания = Объект.ДатаОкончания; - Продолжительность = Объект.ДатаОкончания - Объект.ДатаНачала; - - Если Не Объект.Ссылка.Пустая() Тогда - Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Объект.Ссылка); - КонецЕсли; - - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "Встреча"); - Элементы.РассмотретьПосле.Доступность = НЕ Объект.Рассмотрено; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -58,12 +22,11 @@ //подготовить оповещения взаимодействий Взаимодействия.ПодготовитьОповещения(ЭтаФорма, Параметры); - // Свойства + // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект, "СтраницаДополнительныеРеквизиты"); - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства ПриСозданииЧтенииНаСервере(); - Взаимодействия.УстановитьВидимостьСтраницДопРеквизитов(ЭтаФорма, Истина); КонецПроцедуры @@ -86,11 +49,11 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - // Свойства + // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); КонецЕсли; - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма, ИмяСобытия, Параметр, Источник); ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "Встреча"); @@ -100,9 +63,9 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, РежимЗаписи, РежимПроведения) - // Свойства + // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект); - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтаФорма, ТекущийОбъект); @@ -119,64 +82,19 @@ Процедура ПослеЗаписи(ПараметрыЗаписи) ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтаФорма, Объект, ПараметрыЗаписи, "Встреча"); + ПроверитьДоступностьСозданияКонтакта(); + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура СоздатьКонтактВыполнить() - - текДанные = Элементы.Участники.ТекущиеДанные; - Если текДанные <> Неопределено Тогда - ВзаимодействияКлиент.СоздатьКонтакт( - текДанные.ПредставлениеКонтакта, текДанные.КакСвязаться, Объект.Ссылка, СписокИнтерактивноСоздаваемыхКонтактов - ); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура КонтактНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - текДанные = Элементы.Участники.ТекущиеДанные; - Если ВзаимодействияКлиент.ВыбратьКонтакт(Предмет, текДанные.КакСвязаться, текДанные.ПредставлениеКонтакта, - текДанные.Контакт, Ложь, Ложь, Истина) Тогда - - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект,ЭтаФорма,"ЗапланированноеВзаимодействие"); - Модифицированность = Истина; - ПроверитьДоступностьСозданияКонтакта(); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура УчастникиПриАктивизацииСтроки(Элемент) - - ПроверитьДоступностьСозданияКонтакта(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПредставлениеКонтактаПриИзменении(Элемент) - - ПроверитьДоступностьСозданияКонтакта(); - -КонецПроцедуры - -&НаКлиенте -Процедура КонтактПриИзменении(Элемент) - - ПроверитьДоступностьСозданияКонтакта(); - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "Встреча"); - -КонецПроцедуры +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -275,6 +193,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Участники + &НаКлиенте Процедура УчастникиПриИзменении(Элемент) @@ -282,8 +203,61 @@ КонецПроцедуры +&НаКлиенте +Процедура УчастникиПриАктивизацииСтроки(Элемент) + + ПроверитьДоступностьСозданияКонтакта(); + +КонецПроцедуры + +&НаКлиенте +Процедура КонтактНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + текДанные = Элементы.Участники.ТекущиеДанные; + Если ВзаимодействияКлиент.ВыбратьКонтакт(Предмет, текДанные.КакСвязаться, текДанные.ПредставлениеКонтакта, + текДанные.Контакт, Ложь, Ложь, Истина) Тогда + + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект,ЭтаФорма,"ЗапланированноеВзаимодействие"); + Модифицированность = Истина; + ПроверитьДоступностьСозданияКонтакта(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПредставлениеКонтактаПриИзменении(Элемент) + + ПроверитьДоступностьСозданияКонтакта(); + +КонецПроцедуры + +&НаКлиенте +Процедура КонтактПриИзменении(Элемент) + + ПроверитьДоступностьСозданияКонтакта(); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "Встреча"); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ПОДСИСТЕМЫ СВОЙСТВ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура СоздатьКонтактВыполнить() + + текДанные = Элементы.Участники.ТекущиеДанные; + Если текДанные <> Неопределено Тогда + ВзаимодействияКлиент.СоздатьКонтакт( + текДанные.ПредставлениеКонтакта, текДанные.КакСвязаться, Объект.Ссылка, СписокИнтерактивноСоздаваемыхКонтактов + ); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Команды подсистемы свойств &НаКлиенте Процедура Подключаемый_РедактироватьСоставСвойств() @@ -299,4 +273,41 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ПроверитьДоступностьСозданияКонтакта() + + текДанные = Элементы.Участники.ТекущиеДанные; + Элементы.СоздатьКонтакт.Доступность = (Не Объект.Ссылка.Пустая()) И + ((текДанные <> Неопределено) И (НЕ ЗначениеЗаполнено(текДанные.Контакт))); + +КонецПроцедуры + +&НаКлиенте +Функция ВыделитьВремя(Дата) + + Возврат Час(Дата) * 3600 + Минута(Дата) * 60; + +КонецФункции + +&НаСервере +Процедура ПриСозданииЧтенииНаСервере() + + ДатаНачала = Объект.ДатаНачала; + ВремяНачала = Объект.ДатаНачала; + ДатаОкончания = Объект.ДатаОкончания; + ВремяОкончания = Объект.ДатаОкончания; + Продолжительность = Объект.ДатаОкончания - Объект.ДатаНачала; + + Если Не Объект.Ссылка.Пустая() Тогда + Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Объект.Ссылка); + КонецЕсли; + + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "Встреча"); + Элементы.РассмотретьПосле.Доступность = НЕ Объект.Рассмотрено; + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + +КонецПроцедуры diff --git a/SSL/src/Documents/Встреча/ManagerModule.bsl b/SSL/src/Documents/Встреча/ManagerModule.bsl index 268c31bb6..e072606e6 100644 --- a/SSL/src/Documents/Встреча/ManagerModule.bsl +++ b/SSL/src/Documents/Встреча/ManagerModule.bsl @@ -1,10 +1,16 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + Функция ПолучитьКонтакты(Ссылка) Экспорт Возврат Взаимодействия.ПолучитьУчастниковПоТаблице(Ссылка); КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Взаимодействия.ОбработкаПолученияДанныхВыбора( @@ -13,4 +19,6 @@ СтандартнаяОбработка, "Встреча"); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + + diff --git a/SSL/src/Documents/Встреча/ObjectModule.bsl b/SSL/src/Documents/Встреча/ObjectModule.bsl index e4bd02de6..4de8af8a8 100644 --- a/SSL/src/Documents/Встреча/ObjectModule.bsl +++ b/SSL/src/Documents/Встреча/ObjectModule.bsl @@ -1,8 +1,6 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ - - +// ПРОГРАММНЫЙ ИНТЕРФЕЙС //Процедура формирует строки списка участников Процедура ЗаполнитьКонтакты(Контакты) Экспорт @@ -11,8 +9,9 @@ КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) @@ -39,8 +38,8 @@ ДатаОкончания = Неопределено; РассмотретьПосле = Неопределено; Рассмотрено = Ложь; - Ответственный = ПараметрыСеанса.ТекущийПользователь; - Автор = ПараметрыСеанса.ТекущийПользователь; + Ответственный = Пользователи.ТекущийПользователь(); + Автор = Пользователи.ТекущийПользователь(); КонецПроцедуры @@ -58,3 +57,11 @@ КонецЕсли; КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + + + + diff --git a/SSL/src/Documents/Встреча/Встреча.mdo b/SSL/src/Documents/Встреча/Встреча.mdo index 8e3262023..064f1247a 100644 --- a/SSL/src/Documents/Встреча/Встреча.mdo +++ b/SSL/src/Documents/Встреча/Встреча.mdo @@ -273,28 +273,6 @@ Use Use - - Предмет - - ru - Предмет - - - DocumentRef.ЭлектронноеПисьмоИсходящее - DocumentRef.ЗапланированноеВзаимодействие - DocumentRef.ЭлектронноеПисьмоВходящее - DocumentRef.ТелефонныйЗвонок - DocumentRef.Встреча - - - ru - Ссылка на предмет обсуждения. - - - - - Use - Рассмотрено @@ -334,6 +312,28 @@ Use + + Предмет + + ru + Предмет + + + DocumentRef.ЭлектронноеПисьмоИсходящее + DocumentRef.ЗапланированноеВзаимодействие + DocumentRef.ЭлектронноеПисьмоВходящее + DocumentRef.ТелефонныйЗвонок + DocumentRef.Встреча + + + ru + Ссылка на предмет обсуждения. + + + + + Use + СписокУчастников @@ -412,6 +412,28 @@ Use Use + + Комментарий + + ru + Комментарий + + + String + + + + ru + Произвольный текст + + true + true + + + + Use + Use + ФормаДокумента @@ -451,6 +473,10 @@ Контакт + + ru + Контакт + CatalogRef.Пользователи diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form index d9e793591..21bba11e8 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form @@ -19,7 +19,7 @@ ПредметРасширеннаяПодсказка - 91 + 94 Label true true @@ -63,7 +63,7 @@ ОтветственныйРасширеннаяПодсказка - 93 + 96 Label true true @@ -107,7 +107,7 @@ ГруппаПредметОтветственныйРасширеннаяПодсказка - 90 + 93 Label true true @@ -141,7 +141,7 @@ ВажностьРасширеннаяПодсказка - 96 + 99 Label true true @@ -186,7 +186,7 @@ РассмотретьПослеРасширеннаяПодсказка - 99 + 102 Label true true @@ -236,7 +236,7 @@ РассмотреноРасширеннаяПодсказка - 101 + 104 Label true true @@ -271,7 +271,7 @@ ГруппаОтработатьРасширеннаяПодсказка - 98 + 101 Label true true @@ -303,7 +303,7 @@ ГруппаВажностьОтработатьРасширеннаяПодсказка - 95 + 98 Label true true @@ -336,7 +336,7 @@ ГруппаРеквизитыВзаимодействияРасширеннаяПодсказка - 89 + 92 Label true true @@ -366,7 +366,7 @@ ТемаРасширеннаяПодсказка - 103 + 106 Label true true @@ -416,7 +416,7 @@ None ОписаниеРасширеннаяПодсказка - 107 + 110 Label true true @@ -459,7 +459,7 @@ true СтраницаОписаниеРасширеннаяПодсказка - 106 + 109 Label true true @@ -491,7 +491,81 @@ СтраницаДополнительныеРеквизитыРасширеннаяПодсказка - 109 + 112 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаКомментарий + 89 + + Комментарий + 90 + true + true + + true + + + Объект.Комментарий + + None + + КомментарийРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 91 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Комментарий</value> + + + ru + Комментарий + + + СтраницаКомментарийРасширеннаяПодсказка + 113 Label true true @@ -520,7 +594,7 @@ СтраницыОписаниеДополнительноРасширеннаяПодсказка - 105 + 108 Label true true @@ -551,7 +625,7 @@ ДекорацияЗаголовокУчастникиРасширеннаяПодсказка - 111 + 117 Label true true @@ -581,7 +655,7 @@ ДекорацияУчастникиПустаяРасширеннаяПодсказка - 112 + 118 Label true true @@ -622,7 +696,7 @@ ДекорацияКонтактыНеЗаполненыРасширеннаяПодсказка - 115 + 121 Label true true @@ -660,7 +734,7 @@ СтраницаКонтактыНеЗаполненыРасширеннаяПодсказка - 114 + 120 Label true true @@ -687,7 +761,7 @@ ДекорацияКонтактыЗаполненыРасширеннаяПодсказка - 117 + 123 Label true true @@ -725,7 +799,7 @@ СтраницаКонтактыЗаполненыРасширеннаяПодсказка - 116 + 122 Label true true @@ -754,7 +828,7 @@ СтраницыУказаныКонтактыРасширеннаяПодсказка - 113 + 119 Label true true @@ -782,7 +856,7 @@ ГруппаЗаголовокУчастникиРасширеннаяПодсказка - 110 + 116 Label true true @@ -833,7 +907,7 @@ ПредставлениеКонтактаРасширеннаяПодсказка - 130 + 136 Label true true @@ -873,7 +947,7 @@ КакСвязатьсяРасширеннаяПодсказка - 132 + 138 Label true true @@ -917,7 +991,7 @@ КонтактРасширеннаяПодсказка - 134 + 140 Label true true @@ -962,7 +1036,7 @@ false СоздатьКонтактРасширеннаяПодсказка - 119 + 125 Label true true @@ -991,10 +1065,10 @@ УчастникиСтрокаПоиска - 121 + 127 УчастникиСтрокаПоискаРасширеннаяПодсказка - 123 + 129 Label true true @@ -1004,7 +1078,7 @@ УчастникиСтрокаПоискаКонтекстноеМеню - 122 + 128 true Участники @@ -1014,10 +1088,10 @@ УчастникиСостояниеПросмотра - 124 + 130 УчастникиСостояниеПросмотраРасширеннаяПодсказка - 126 + 132 Label true true @@ -1027,7 +1101,7 @@ УчастникиСостояниеПросмотраКонтекстноеМеню - 125 + 131 true ViewStatusAddition @@ -1038,10 +1112,10 @@ УчастникиУправлениеПоиском - 127 + 133 УчастникиУправлениеПоискомРасширеннаяПодсказка - 129 + 135 Label true true @@ -1051,7 +1125,7 @@ УчастникиУправлениеПоискомКонтекстноеМеню - 128 + 134 true SearchControlAddition @@ -1062,7 +1136,7 @@ УчастникиРасширеннаяПодсказка - 120 + 126 Label true true @@ -1115,7 +1189,7 @@ ГруппаУчастникиРасширеннаяПодсказка - 118 + 124 Label true true @@ -1150,7 +1224,7 @@ Left АвторРасширеннаяПодсказка - 145 + 151 Label true true @@ -1196,7 +1270,7 @@ Left ДатаРасширеннаяПодсказка - 147 + 153 Label true true @@ -1247,7 +1321,7 @@ ГруппаАвторДатаРегистрацииРасширеннаяПодсказка - 144 + 150 Label true true @@ -1477,6 +1551,10 @@ AfterWrite ПослеЗаписи + + AfterWriteAtServer + ПослеЗаписиНаСервере + OnReadAtServer ПриЧтенииНаСервере diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl index e794ecc37..bb84e85d1 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl @@ -1,28 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ - -&НаКлиенте -Процедура ПроверитьДоступностьСозданияКонтакта() - - текДанные = Элементы.Участники.ТекущиеДанные; - Элементы.СоздатьКонтакт.Доступность = ((текДанные <> Неопределено) И (НЕ ЗначениеЗаполнено(текДанные.Контакт))); - -КонецПроцедуры - -&НаСервере -Процедура ПриСозданииЧтенииНаСервере() - - Если Не Объект.Ссылка.Пустая() Тогда - Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Объект.Ссылка); - КонецЕсли; - - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЗапланированноеВзаимодействие"); - Элементы.РассмотретьПосле.Доступность = НЕ Объект.Рассмотрено; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -44,12 +21,11 @@ //подготовить оповещения взаимодействий Взаимодействия.ПодготовитьОповещения(ЭтаФорма,Параметры); - // Свойства + // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект, "СтраницаДополнительныеРеквизиты"); - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства ПриСозданииЧтенииНаСервере(); - Взаимодействия.УстановитьВидимостьСтраницДопРеквизитов(ЭтаФорма,Истина); КонецПроцедуры @@ -72,11 +48,11 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - // Свойства + // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); КонецЕсли; - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма, ИмяСобытия, Параметр, Источник); ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЗапланированноеВзаимодействие"); @@ -86,9 +62,9 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, РежимЗаписи, РежимПроведения) - // Свойства + // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект); - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтаФорма, ТекущийОбъект); @@ -105,26 +81,44 @@ Процедура ПослеЗаписи(ПараметрыЗаписи) ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтаФорма, Объект, ПараметрыЗаписи, "ЗапланированноеВзаимодействие"); + ПроверитьДоступностьСозданияКонтакта(); + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте -Процедура СоздатьКонтактВыполнить() +Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - текДанные = Элементы.Участники.ТекущиеДанные; - Если текДанные <> Неопределено Тогда - ВзаимодействияКлиент.СоздатьКонтакт( - текДанные.ПредставлениеКонтакта, текДанные.КакСвязаться, Объект.Ссылка, СписокИнтерактивноСоздаваемыхКонтактов - ); - КонецЕсли; + ВзаимодействияКлиент.ОбработатьВыборВПолеРассмотретьПосле(Объект.РассмотретьПосле, + ВыбранноеЗначение, СтандартнаяОбработка, Модифицированность); + +КонецПроцедуры + +&НаКлиенте +Процедура РассмотреноПриИзменении(Элемент) + + Элементы.РассмотретьПосле.Доступность = НЕ Объект.Рассмотрено; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Участники + +&НаКлиенте +Процедура УчастникиПриАктивизацииСтроки(Элемент) + + ПроверитьДоступностьСозданияКонтакта(); + +КонецПроцедуры &НаКлиенте Процедура КонтактНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -140,13 +134,6 @@ КонецПроцедуры -&НаКлиенте -Процедура УчастникиПриАктивизацииСтроки(Элемент) - - ПроверитьДоступностьСозданияКонтакта(); - -КонецПроцедуры - &НаКлиенте Процедура ПредставлениеКонтактаПриИзменении(Элемент) @@ -162,21 +149,6 @@ КонецПроцедуры -&НаКлиенте -Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - ВзаимодействияКлиент.ОбработатьВыборВПолеРассмотретьПосле(Объект.РассмотретьПосле, - ВыбранноеЗначение, СтандартнаяОбработка, Модифицированность); - -КонецПроцедуры - -&НаКлиенте -Процедура РассмотреноПриИзменении(Элемент) - - Элементы.РассмотретьПосле.Доступность = НЕ Объект.Рассмотрено; - -КонецПроцедуры - &НаКлиенте Процедура УчастникиПриИзменении(Элемент) @@ -185,7 +157,22 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ПОДСИСТЕМЫ СВОЙСТВ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура СоздатьКонтактВыполнить() + + текДанные = Элементы.Участники.ТекущиеДанные; + Если текДанные <> Неопределено Тогда + ВзаимодействияКлиент.СоздатьКонтакт( + текДанные.ПредставлениеКонтакта, текДанные.КакСвязаться, Объект.Ссылка, СписокИнтерактивноСоздаваемыхКонтактов + ); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Команды подсистемы свойств &НаКлиенте Процедура Подключаемый_РедактироватьСоставСвойств() @@ -201,3 +188,28 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ПроверитьДоступностьСозданияКонтакта() + + текДанные = Элементы.Участники.ТекущиеДанные; + Элементы.СоздатьКонтакт.Доступность = (НЕ Объект.Ссылка.Пустая()) И + ((текДанные <> Неопределено) И (НЕ ЗначениеЗаполнено(текДанные.Контакт))); + +КонецПроцедуры + +&НаСервере +Процедура ПриСозданииЧтенииНаСервере() + + Если Не Объект.Ссылка.Пустая() Тогда + Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Объект.Ссылка); + КонецЕсли; + + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЗапланированноеВзаимодействие"); + Элементы.РассмотретьПосле.Доступность = НЕ Объект.Рассмотрено; + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + +КонецПроцедуры + diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl index aaa29bd1a..3208d622e 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС Функция ПолучитьКонтакты(Ссылка) Экспорт @@ -5,6 +7,9 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Взаимодействия.ОбработкаПолученияДанныхВыбора( @@ -13,4 +18,6 @@ СтандартнаяОбработка, "ЗапланированноеВзаимодействие"); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + + diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl index ba29a973e..4b8000e21 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl @@ -1,8 +1,6 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ - - +// ПРОГРАММНЫЙ ИНТЕРФЕЙС //Процедура формирует строки списка участников Процедура ЗаполнитьКонтакты(Контакты) Экспорт @@ -12,7 +10,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) @@ -34,7 +32,13 @@ РассмотретьПосле = Неопределено; Рассмотрено = Ложь; - Ответственный = ПараметрыСеанса.ТекущийПользователь; - Автор = ПараметрыСеанса.ТекущийПользователь; + Ответственный = Пользователи.ТекущийПользователь(); + Автор = Пользователи.ТекущийПользователь(); КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + + + diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo b/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo index 32074d0c0..52cf85512 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ЗапланированноеВзаимодействие.mdo @@ -203,30 +203,6 @@ Use Use - - Предмет - - ru - Предмет - - - DocumentRef.ЭлектронноеПисьмоИсходящее - DocumentRef.ЗапланированноеВзаимодействие - DocumentRef.ЭлектронноеПисьмоВходящее - DocumentRef.ТелефонныйЗвонок - DocumentRef.Встреча - - - ru - Ссылка на предмет обсуждения. - - - - - Document.ТелефонныйЗвонок.EmptyRef - - Use - Рассмотрено @@ -266,6 +242,30 @@ Use + + Предмет + + ru + Предмет + + + DocumentRef.ЭлектронноеПисьмоИсходящее + DocumentRef.ЗапланированноеВзаимодействие + DocumentRef.ЭлектронноеПисьмоВходящее + DocumentRef.ТелефонныйЗвонок + DocumentRef.Встреча + + + ru + Ссылка на предмет обсуждения. + + + + + Document.ТелефонныйЗвонок.EmptyRef + + Use + СписокУчастников @@ -344,6 +344,28 @@ Use Use + + Комментарий + + ru + Комментарий + + + String + + + + ru + Произвольный текст + + true + true + + + + Use + Use + ФормаДокумента @@ -382,6 +404,10 @@ Контакт + + ru + Контакт + CatalogRef.Пользователи diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl index adf9cff02..857b9e967 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl @@ -1,56 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ - -//Обрабатывет изменение типа респондента -&НаКлиенте -Процедура ОбработатьИзменениеТипаРеспондента() - - Элементы.РеспондентыРеспондент.ОграничениеТипа = ТипРеспондентов; - Элементы.РеспондентыРеспондент.ДоступныеТипы = ТипРеспондентов; - - Если Объект.ТипРеспондентов <> Неопределено Тогда - Объект.ТипРеспондентов = Новый(ТипРеспондентов.Типы()[0]); - КонецЕсли; - - Для каждого СтрокаРеспонденты Из Объект.Респонденты Цикл - - Если Не ТипРеспондентов.СодержитТип(ТипЗнч(СтрокаРеспонденты.Респондент)) Тогда - Объект.Респонденты.Очистить(); - Элементы.Респонденты.Обновить(); - КонецЕсли; - - Прервать; - - КонецЦикла; - -КонецПроцедуры // () - -// Управляет доступностью элементов формы -&НаКлиенте -Процедура УправлениеДоступностью() - - Элементы.Респонденты.ТолькоПросмотр = Объект.СвободныйОпрос; - Элементы.КнопкаПодборРеспондентов.Доступность = НЕ Объект.СвободныйОпрос; - -КонецПроцедуры // УправлениеДоступностью() - -//////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ - -//Открывает форму подбора респондентов -&НаКлиенте -Процедура ПодборРеспондентов(Команда) - - СтруктураОтбора = Новый Структура; - СтруктураОтбора.Вставить("ТипРеспондента",Объект.ТипРеспондентов); - СтруктураОтбора.Вставить("Респонденты",Объект.Респонденты); - - ОткрытьФорму("Документ.НазначениеОпросов.Форма.ФормаПодбораРеспондентов",СтруктураОтбора,ЭтаФорма); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -58,7 +7,7 @@ ДоступныеТипы = РеквизитФормыВЗначение("Объект").Метаданные().Реквизиты.ТипРеспондентов.Тип.Типы(); Для каждого ДоступныйТип Из ДоступныеТипы Цикл - + МассивТипов = Новый Массив; МассивТипов.Добавить(ДоступныйТип); Элементы.ТипРеспондентов.СписокВыбора.Добавить(Новый ОписаниеТипов(МассивТипов),Строка(ДоступныйТип)); @@ -71,10 +20,10 @@ ТипРеспондентов = Элементы.ТипРеспондентов.СписокВыбора[0].Значение; КонецЕсли; Иначе - МассивТипов = Новый Массив; - МассивТипов.Добавить(ТипЗнч(Объект.ТипРеспондентов)); - ТипРеспондентов = Новый ОписаниеТипов(МассивТипов); - КонецЕсли; + МассивТипов = Новый Массив; + МассивТипов.Добавить(ТипЗнч(Объект.ТипРеспондентов)); + ТипРеспондентов = Новый ОписаниеТипов(МассивТипов); + КонецЕсли; КонецПроцедуры @@ -118,25 +67,46 @@ КонецПроцедуры -////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ТипРеспондентовПриИзменении(Элемент) - ОбработатьИзменениеТипаРеспондента(); - УправлениеДоступностью(); + ОбработатьИзменениеТипаРеспондента(); + УправлениеДоступностью(); КонецПроцедуры +&НаКлиенте +Процедура СвободныйОпросПриИзменении(Элемент) + + УправлениеДоступностью(); + Если Объект.Респонденты.Количество() > 0 Тогда + Объект.Респонденты.Очистить(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияКомментария(Элемент.ТекстРедактирования, + Объект.Комментарий, Модифицированность); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Респонденты + &НаКлиенте Процедура РеспондентыРеспондентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ТекущиеДанные = Элементы.Респонденты.ТекущиеДанные; - Значение = ТекущиеДанные.Респондент; - ТекущиеДанные.Респондент = ТипРеспондентов.ПривестиЗначение(Значение); - Элемент.ВыбиратьТип = Ложь; + Значение = ТекущиеДанные.Респондент; + ТекущиеДанные.Респондент = ТипРеспондентов.ПривестиЗначение(Значение); + Элемент.ВыбиратьТип = Ложь; КонецПроцедуры @@ -145,25 +115,60 @@ ТекущиеДанные = Элементы.Респонденты.ТекущиеДанные; - Значение = ТекущиеДанные.Респондент; - ТекущиеДанные.Респондент = ТипРеспондентов.ПривестиЗначение(Значение); - -КонецПроцедуры - -&НаКлиенте -Процедура СвободныйОпросПриИзменении(Элемент) - - УправлениеДоступностью(); - Если Объект.Респонденты.Количество() > 0 Тогда - Объект.Респонденты.Очистить(); - КонецЕсли; + Значение = ТекущиеДанные.Респондент; + ТекущиеДанные.Респондент = ТипРеспондентов.ПривестиЗначение(Значение); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +//Открывает форму подбора респондентов &НаКлиенте -Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияКомментария(Элемент.ТекстРедактирования, - Объект.Комментарий, Модифицированность); +Процедура ПодборРеспондентов(Команда) + + СтруктураОтбора = Новый Структура; + СтруктураОтбора.Вставить("ТипРеспондента",Объект.ТипРеспондентов); + СтруктураОтбора.Вставить("Респонденты",Объект.Респонденты); + + ОткрытьФорму("Документ.НазначениеОпросов.Форма.ФормаПодбораРеспондентов",СтруктураОтбора,ЭтаФорма); + КонецПроцедуры - + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//Обрабатывет изменение типа респондента +&НаКлиенте +Процедура ОбработатьИзменениеТипаРеспондента() + + Элементы.РеспондентыРеспондент.ОграничениеТипа = ТипРеспондентов; + Элементы.РеспондентыРеспондент.ДоступныеТипы = ТипРеспондентов; + + Если Объект.ТипРеспондентов <> Неопределено Тогда + Объект.ТипРеспондентов = Новый(ТипРеспондентов.Типы()[0]); + КонецЕсли; + + Для каждого СтрокаРеспонденты Из Объект.Респонденты Цикл + + Если Не ТипРеспондентов.СодержитТип(ТипЗнч(СтрокаРеспонденты.Респондент)) Тогда + Объект.Респонденты.Очистить(); + Элементы.Респонденты.Обновить(); + КонецЕсли; + + Прервать; + + КонецЦикла; + +КонецПроцедуры + +// Управляет доступностью элементов формы +&НаКлиенте +Процедура УправлениеДоступностью() + + Элементы.Респонденты.ТолькоПросмотр = Объект.СвободныйОпрос; + Элементы.КнопкаПодборРеспондентов.Доступность = НЕ Объект.СвободныйОпрос; + +КонецПроцедуры + + diff --git a/SSL/src/Documents/НазначениеОпросов/НазначениеОпросов.mdo b/SSL/src/Documents/НазначениеОпросов/НазначениеОпросов.mdo index 47584acd1..697eab80b 100644 --- a/SSL/src/Documents/НазначениеОпросов/НазначениеОпросов.mdo +++ b/SSL/src/Documents/НазначениеОпросов/НазначениеОпросов.mdo @@ -59,10 +59,6 @@ Use Managed Use - - ru - Назначение опросов - ru Назначения опросов diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form index 68439dc18..2c418931b 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form @@ -27,7 +27,7 @@ АбонентПредставлениеРасширеннаяПодсказка - 91 + 94 Label true true @@ -73,7 +73,7 @@ АбонентКакСвязатьсяРасширеннаяПодсказка - 93 + 96 Label true true @@ -123,7 +123,7 @@ АбонентКонтактРасширеннаяПодсказка - 95 + 98 Label true true @@ -171,7 +171,7 @@ Right ВходящийРасширеннаяПодсказка - 97 + 100 Label true true @@ -206,7 +206,7 @@ ГруппаВажностьВходящийОтработатьРасширеннаяПодсказка - 90 + 93 Label true true @@ -240,7 +240,7 @@ ПредметРасширеннаяПодсказка - 100 + 103 Label true true @@ -284,7 +284,7 @@ ОтветственныйРасширеннаяПодсказка - 102 + 105 Label true true @@ -333,7 +333,7 @@ ДекорацияВажностьРасширеннаяПодсказка - 106 + 109 Label true true @@ -368,7 +368,7 @@ None ВажностьЗаполненыРасширеннаяПодсказка - 107 + 110 Label true true @@ -413,7 +413,7 @@ СтраницаКонтактыЗаполненыРасширеннаяПодсказка - 105 + 108 Label true true @@ -446,7 +446,7 @@ ДекорацияКонтактыНеЗаполненыРасширеннаяПодсказка - 111 + 114 Label true true @@ -485,7 +485,7 @@ true ГруппаКонтактыНеЗаполненыРасширеннаяПодсказка - 110 + 113 Label true true @@ -516,7 +516,7 @@ ВажностьРасширеннаяПодсказка - 112 + 115 Label true true @@ -561,7 +561,7 @@ true СтраницаКонтактыНеЗаполненыРасширеннаяПодсказка - 109 + 112 Label true true @@ -590,7 +590,7 @@ true СтраницыУказаныКонтактыРасширеннаяПодсказка - 104 + 107 Label true true @@ -619,7 +619,7 @@ РассмотретьПослеРасширеннаяПодсказка - 115 + 118 Label true true @@ -673,7 +673,7 @@ РассмотреноРасширеннаяПодсказка - 117 + 120 Label true true @@ -708,7 +708,7 @@ ГруппаОтработатьРасширеннаяПодсказка - 114 + 117 Label true true @@ -736,7 +736,7 @@ ГруппаПредметВажностьОтветственныйРасширеннаяПодсказка - 99 + 102 Label true true @@ -765,7 +765,7 @@ ГруппаШапкаРасширеннаяПодсказка - 89 + 92 Label true true @@ -795,7 +795,7 @@ ТемаРасширеннаяПодсказка - 119 + 122 Label true true @@ -842,7 +842,7 @@ ГруппаТемаКакРасширеннаяПодсказка - 121 + 124 Label true true @@ -880,7 +880,7 @@ None ОписаниеРасширеннаяПодсказка - 124 + 127 Label true true @@ -923,7 +923,7 @@ true СтраницаОписаниеРасширеннаяПодсказка - 123 + 126 Label true true @@ -955,7 +955,81 @@ СтраницаДополнительныеРеквизитыРасширеннаяПодсказка - 126 + 129 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаКомментарий + 88 + + Комментарий + 89 + true + true + + true + + + Объект.Комментарий + + None + + КомментарийРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 90 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Комментарий</value> + + + ru + Комментарий + + + СтраницаКомментарийРасширеннаяПодсказка + 130 Label true true @@ -984,7 +1058,7 @@ СтраницыОписаниеДополнительноРасширеннаяПодсказка - 122 + 125 Label true true @@ -1015,7 +1089,7 @@ Left АвторРасширеннаяПодсказка - 128 + 134 Label true true @@ -1061,7 +1135,7 @@ Left ДатаРасширеннаяПодсказка - 130 + 136 Label true true @@ -1112,7 +1186,7 @@ ГруппаАвторДатаРегистрацииРасширеннаяПодсказка - 127 + 133 Label true true @@ -1143,7 +1217,7 @@ false СоздатьКонтактРасширеннаяПодсказка - 88 + 91 Label true true @@ -1381,6 +1455,10 @@ AfterWrite ПослеЗаписи + + AfterWriteAtServer + ПослеЗаписиНаСервере + OnReadAtServer ПриЧтенииНаСервере diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl index 54f4c00de..52d34b708 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl @@ -1,50 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ФОРМЫ - - -&НаСервере -Процедура ЗаполнитьНаОснованииУчастника(ДанныеУчастника) - - Объект.АбонентКонтакт = ДанныеУчастника.Контакт; - Если ПустаяСтрока(ДанныеУчастника.КакСвязаться) Тогда - - Объект.АбонентКакСвязаться = ""; - Взаимодействия.ДозаполнитьПоляКонтактов(Объект.АбонентКонтакт, - Объект.АбонентПредставление, - Объект.АбонентКакСвязаться, - Перечисления.ТипыКонтактнойИнформации.Телефон); - - Иначе - - Объект.АбонентКакСвязаться = ДанныеУчастника.КакСвязаться; - - - КонецЕсли; - - Объект.АбонентПредставление = ДанныеУчастника.Представление; - -КонецПроцедуры - -&НаСервере -Процедура ПриСозданииЧтенииНаСервере() - - Если Не Объект.Ссылка.Пустая() Тогда - Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Объект.Ссылка); - КонецЕсли; - Элементы.РассмотретьПосле.Доступность = НЕ Объект.Рассмотрено; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьДоступностьСозданияКонтакта() - - Элементы.СоздатьКонтакт.Доступность = (Не ЗначениеЗаполнено(Объект.АбонентКонтакт)) И - (Не ПустаяСтрока(Объект.АбонентПредставление)); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -71,9 +26,9 @@ // подготовить оповещения взаимодействий Взаимодействия.ПодготовитьОповещения(ЭтаФорма,Параметры); - // Свойства + // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект, "СтраницаДополнительныеРеквизиты"); - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства Если Параметры.Свойство("ДанныеУчастника") И Объект.АбонентКонтакт <> Параметры.ДанныеУчастника.Контакт Тогда ЗаполнитьНаОснованииУчастника(Параметры.ДанныеУчастника); @@ -81,7 +36,6 @@ ПриСозданииЧтенииНаСервере(); ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ТелефонныйЗвонок"); - Взаимодействия.УстановитьВидимостьСтраницДопРеквизитов(ЭтаФорма, Истина); КонецПроцедуры @@ -104,9 +58,9 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, РежимЗаписи, РежимПроведения) - // Свойства + // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект); - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтаФорма, ТекущийОбъект); @@ -123,47 +77,33 @@ Процедура ПослеЗаписи(ПараметрыЗаписи) ВзаимодействияКлиент.ВзаимодействиеПредметПослеЗаписи(ЭтаФорма, Объект, ПараметрыЗаписи, "ТелефонныйЗвонок"); - + ПроверитьДоступностьСозданияКонтакта(); + КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - // Свойства + // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); КонецЕсли; - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма,ИмяСобытия, Параметр, Источник); ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ТелефонныйЗвонок"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура СоздатьКонтактВыполнить() - - ВзаимодействияКлиент.СоздатьКонтакт( - Объект.АбонентПредставление, Объект.АбонентКакСвязаться, Объект.Ссылка, СписокИнтерактивноСоздаваемыхКонтактов - ); - -КонецПроцедуры - -&НаКлиенте -Процедура СвязанныеВзаимодействияВыполнить() - - ПараметрыОтбора = Новый Структура; - ПараметрыОтбора.Вставить("Предмет", Объект.Предмет); - - ОткрытьФорму("ЖурналДокументов.Взаимодействия.ФормаСписка", ПараметрыОтбора, ЭтаФорма, , Окно); - +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура КонтактНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -173,6 +113,7 @@ Объект.АбонентПредставление, Объект.АбонентКонтакт, Ложь, Ложь, Истина) Тогда ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект,ЭтаФорма,"ТелефонныйЗвонок"); Модифицированность = Истина; + ПроверитьДоступностьСозданияКонтакта(); КонецЕсли; КонецПроцедуры @@ -208,7 +149,29 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ПОДСИСТЕМЫ СВОЙСТВ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура СоздатьКонтактВыполнить() + + ВзаимодействияКлиент.СоздатьКонтакт( + Объект.АбонентПредставление, Объект.АбонентКакСвязаться, Объект.Ссылка, СписокИнтерактивноСоздаваемыхКонтактов + ); + +КонецПроцедуры + +&НаКлиенте +Процедура СвязанныеВзаимодействияВыполнить() + + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("Предмет", Объект.Предмет); + + ОткрытьФорму("ЖурналДокументов.Взаимодействия.ФормаСписка", ПараметрыОтбора, ЭтаФорма, , Окно); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Команды подсистемы свойств &НаКлиенте Процедура Подключаемый_РедактироватьСоставСвойств() @@ -224,4 +187,48 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаСервере +Процедура ЗаполнитьНаОснованииУчастника(ДанныеУчастника) + + Объект.АбонентКонтакт = ДанныеУчастника.Контакт; + Если ПустаяСтрока(ДанныеУчастника.КакСвязаться) Тогда + + Объект.АбонентКакСвязаться = ""; + Взаимодействия.ДозаполнитьПоляКонтактов(Объект.АбонентКонтакт, + Объект.АбонентПредставление, + Объект.АбонентКакСвязаться, + Перечисления.ТипыКонтактнойИнформации.Телефон); + + Иначе + + Объект.АбонентКакСвязаться = ДанныеУчастника.КакСвязаться; + + + КонецЕсли; + + Объект.АбонентПредставление = ДанныеУчастника.Представление; + +КонецПроцедуры + +&НаСервере +Процедура ПриСозданииЧтенииНаСервере() + + Если Не Объект.Ссылка.Пустая() Тогда + Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Объект.Ссылка); + КонецЕсли; + Элементы.РассмотретьПосле.Доступность = НЕ Объект.Рассмотрено; + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьДоступностьСозданияКонтакта() + + Элементы.СоздатьКонтакт.Доступность = (НЕ Объект.Ссылка.Пустая()) И + (Не ЗначениеЗаполнено(Объект.АбонентКонтакт)) И + (Не ПустаяСтрока(Объект.АбонентПредставление)); + +КонецПроцедуры diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl index 9593b41a0..041b3dbb5 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + Функция ПолучитьКонтакты(Ссылка) Экспорт Запрос = Новый Запрос; @@ -23,6 +26,9 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Взаимодействия.ОбработкаПолученияДанныхВыбора( @@ -31,4 +37,6 @@ СтандартнаяОбработка, "ТелефонныйЗвонок"); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + + diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl index 8e18f21ff..483df0547 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl @@ -1,8 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ - - +// ПРОГРАММНЫЙ ИНТЕРФЕЙС //Процедура формирует строки списка участников Процедура ЗаполнитьКонтакты(Контакты) Экспорт @@ -27,7 +24,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) @@ -47,8 +44,13 @@ РассмотретьПосле = Неопределено; Рассмотрено = Ложь; - Ответственный = ПараметрыСеанса.ТекущийПользователь; - Автор = ПараметрыСеанса.ТекущийПользователь; + Ответственный = Пользователи.ТекущийПользователь(); + Автор = Пользователи.ТекущийПользователь(); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + + + diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo b/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo index 0fa31436b..4659966dc 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo +++ b/SSL/src/Documents/ТелефонныйЗвонок/ТелефонныйЗвонок.mdo @@ -289,30 +289,6 @@ Use Use - - Предмет - - ru - Предмет - - - DocumentRef.ЭлектронноеПисьмоИсходящее - DocumentRef.ЗапланированноеВзаимодействие - DocumentRef.ЭлектронноеПисьмоВходящее - DocumentRef.ТелефонныйЗвонок - DocumentRef.Встреча - - - ru - Ссылка на предмет обсуждения. - - - - - Document.ТелефонныйЗвонок.EmptyRef - - Use - Рассмотрено @@ -352,6 +328,30 @@ Use + + Предмет + + ru + Предмет + + + DocumentRef.ЭлектронноеПисьмоИсходящее + DocumentRef.ЗапланированноеВзаимодействие + DocumentRef.ЭлектронноеПисьмоВходящее + DocumentRef.ТелефонныйЗвонок + DocumentRef.Встреча + + + ru + Ссылка на предмет обсуждения. + + + + + Document.ТелефонныйЗвонок.EmptyRef + + Use + ВзаимодействиеОснование @@ -409,6 +409,28 @@ Use Use + + Комментарий + + ru + Комментарий + + + String + + + + ru + Произвольный текст + + true + true + + + + Use + Use + ФормаДокумента diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form index dcdb85cc8..3111aa0ff 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form @@ -19,7 +19,7 @@ ОтправительПредставлениеРасширеннаяПодсказка - 242 + 245 Label true true @@ -64,7 +64,7 @@ ПолучателиПредставлениеРасширеннаяПодсказка - 244 + 247 Label true true @@ -105,7 +105,7 @@ ПолучателиКопийПредставлениеРасширеннаяПодсказка - 246 + 249 Label true true @@ -145,7 +145,7 @@ ТемаРасширеннаяПодсказка - 248 + 251 Label true true @@ -186,7 +186,7 @@ ГруппаПолучателиРасширеннаяПодсказка - 241 + 244 Label true true @@ -220,7 +220,7 @@ ПредметРасширеннаяПодсказка - 251 + 254 Label true true @@ -272,7 +272,7 @@ ДекорацияВажностьРасширеннаяПодсказка - 256 + 259 Label true true @@ -307,7 +307,7 @@ None ВажностьЗаполненыРасширеннаяПодсказка - 257 + 260 Label true true @@ -352,7 +352,7 @@ СтраницаКонтактыЗаполненыРасширеннаяПодсказка - 255 + 258 Label true true @@ -381,7 +381,7 @@ УточнитьКонтактыРасширеннаяПодсказка - 261 + 264 Label true true @@ -414,7 +414,7 @@ true ГруппаКонтактыНеЗаполненыРасширеннаяПодсказка - 260 + 263 Label true true @@ -445,7 +445,7 @@ ВажностьРасширеннаяПодсказка - 262 + 265 Label true true @@ -491,7 +491,7 @@ true СтраницаКонтактыНеЗаполненыРасширеннаяПодсказка - 259 + 262 Label true true @@ -520,7 +520,7 @@ true СтраницыУказаныКонтактыРасширеннаяПодсказка - 254 + 257 Label true true @@ -548,7 +548,7 @@ ГруппаВажностьУточнениеКонтактовРасширеннаяПодсказка - 253 + 256 Label true true @@ -578,7 +578,7 @@ ОтветственныйРасширеннаяПодсказка - 264 + 267 Label true true @@ -621,7 +621,7 @@ РассмотретьПослеРасширеннаяПодсказка - 267 + 270 Label true true @@ -672,7 +672,7 @@ РассмотреноРасширеннаяПодсказка - 269 + 272 Label true true @@ -707,7 +707,7 @@ ГруппаОтработатьРасширеннаяПодсказка - 266 + 269 Label true true @@ -739,7 +739,7 @@ ГруппаПрочееРасширеннаяПодсказка - 250 + 253 Label true true @@ -772,7 +772,7 @@ ГруппаПолучателиПрочееРасширеннаяПодсказка - 240 + 243 Label true true @@ -819,7 +819,7 @@ ВложенияПодписанЭЦПРасширеннаяПодсказка - 285 + 288 Label true true @@ -868,7 +868,7 @@ None ИндексКартинкиРасширеннаяПодсказка - 288 + 291 Label true true @@ -914,7 +914,7 @@ ИмяФайлаРасширеннаяПодсказка - 290 + 293 Label true true @@ -947,7 +947,7 @@ ГруппаРасширеннаяПодсказка - 287 + 290 Label true true @@ -975,7 +975,7 @@ ВложенияРазмерПредставлениеРасширеннаяПодсказка - 292 + 295 Label true true @@ -1015,34 +1015,15 @@ Selection ВложенияВыбор + + OnActivateRow + ВложенияПриАктивизацииСтроки + ВложенияСтрокаПоиска - 276 - - ВложенияСтрокаПоискаРасширеннаяПодсказка - 278 - Label - true - true - - Left - - - - ВложенияСтрокаПоискаКонтекстноеМеню - 277 - true - - Вложения - - true - - - - ВложенияСостояниеПросмотра 279 - ВложенияСостояниеПросмотраРасширеннаяПодсказка + ВложенияСтрокаПоискаРасширеннаяПодсказка 281 Label true @@ -1052,10 +1033,33 @@ - ВложенияСостояниеПросмотраКонтекстноеМеню + ВложенияСтрокаПоискаКонтекстноеМеню 280 true + Вложения + + true + + + + ВложенияСостояниеПросмотра + 282 + + ВложенияСостояниеПросмотраРасширеннаяПодсказка + 284 + Label + true + true + + Left + + + + ВложенияСостояниеПросмотраКонтекстноеМеню + 283 + true + ViewStatusAddition Вложения @@ -1064,10 +1068,10 @@ ВложенияУправлениеПоиском - 282 + 285 ВложенияУправлениеПоискомРасширеннаяПодсказка - 284 + 287 Label true true @@ -1077,7 +1081,7 @@ ВложенияУправлениеПоискомКонтекстноеМеню - 283 + 286 true SearchControlAddition @@ -1088,7 +1092,7 @@ ВложенияРасширеннаяПодсказка - 275 + 278 Label true true @@ -1110,7 +1114,7 @@ false ОткрытьВложениеРасширеннаяПодсказка - 272 + 275 Label true true @@ -1137,7 +1141,7 @@ false СохранитьВложениеРасширеннаяПодсказка - 273 + 276 Label true true @@ -1163,7 +1167,7 @@ ВложенияКонтекстноеМенюСвойстваВложенияРасширеннаяПодсказка - 274 + 277 Label true true @@ -1224,7 +1228,7 @@ true ГруппаВложенияРасширеннаяПодсказка - 271 + 274 Label true true @@ -1262,7 +1266,7 @@ None ТекстПисьмаРасширеннаяПодсказка - 304 + 307 Label true true @@ -1310,7 +1314,7 @@ true СтраницаОписаниеРасширеннаяПодсказка - 303 + 306 Label true true @@ -1342,7 +1346,81 @@ СтраницаДополнительныеРеквизитыРасширеннаяПодсказка - 306 + 309 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаКомментарий + 226 + + Комментарий + 227 + true + true + + true + + + Объект.Комментарий + + None + + КомментарийРасширеннаяПодсказка + 311 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 228 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Комментарий</value> + + + ru + Комментарий + + + СтраницаКомментарийРасширеннаяПодсказка + 310 Label true true @@ -1371,7 +1449,7 @@ СтраницыОписаниеДополнительноРасширеннаяПодсказка - 302 + 305 Label true true @@ -1401,7 +1479,7 @@ НомерРасширеннаяПодсказка - 308 + 314 Label true true @@ -1444,7 +1522,7 @@ ДатаОтправленияРасширеннаяПодсказка - 310 + 316 Label true true @@ -1497,7 +1575,7 @@ ГруппаОтправленоНомерРасширеннаяПодсказка - 307 + 313 Label true true @@ -1530,7 +1608,7 @@ ФормаДокументЭлектронноеПисьмоВходящееОтветитьРасширеннаяПодсказка - 226 + 229 Label true true @@ -1559,7 +1637,7 @@ ФормаДокументЭлектронноеПисьмоВходящееОтветитьВсемРасширеннаяПодсказка - 227 + 230 Label true true @@ -1588,7 +1666,7 @@ ФормаДокументЭлектронноеПисьмоВходящееПереслатьРасширеннаяПодсказка - 228 + 231 Label true true @@ -1614,7 +1692,7 @@ ФормаЗаписатьИЗакрытьРасширеннаяПодсказка - 229 + 232 Label true true @@ -1640,7 +1718,7 @@ ФормаПеречитатьРасширеннаяПодсказка - 230 + 233 Label true true @@ -1667,7 +1745,7 @@ ФормаУстановитьПометкуУдаленияРасширеннаяПодсказка - 231 + 234 Label true true @@ -1695,7 +1773,7 @@ false ЗаписатьРасширеннаяПодсказка - 232 + 235 Label true true @@ -1729,7 +1807,7 @@ ГруппаОтветитьПереслатьРасширеннаяПодсказка - 233 + 236 Label true true @@ -1754,7 +1832,7 @@ false ИзменитьФормуРасширеннаяПодсказка - 234 + 237 Label true true @@ -1782,7 +1860,7 @@ false ИзменитьКодировкуРасширеннаяПодсказка - 235 + 238 Label true true @@ -1810,7 +1888,7 @@ false КнопкаДополнительноРасширеннаяПодсказка - 236 + 239 Label true true @@ -1845,7 +1923,7 @@ ГруппаВажноКПРасширеннаяПодсказка - 237 + 240 Label true true @@ -1868,7 +1946,7 @@ false СправкаРасширеннаяПодсказка - 238 + 241 Label true true @@ -1894,7 +1972,7 @@ ФормаУточнитьКонтактыРасширеннаяПодсказка - 239 + 242 Label true true @@ -2534,6 +2612,10 @@ + + AfterWriteAtServer + ПослеЗаписиНаСервере + OnReadAtServer ПриЧтенииНаСервере diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl index 6847f1168..d82bca972 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl @@ -1,5 +1,419 @@ + //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + // Запретим создание новых + Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + Взаимодействия.УстановитьЗаголовокФормыЭлектронногоПисьма(ЭтаФорма); + + // Заполним список выбора для поля РассмотретьПосле + Взаимодействия.ЗаполнитьСписокВыбораДляРассмотретьПосле(Элементы.РассмотретьПосле.СписокВыбора); + Если Объект.Рассмотрено Тогда + Элементы.РассмотретьПосле.Доступность = Ложь; + КонецЕсли; + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект, "СтраницаДополнительныеРеквизиты"); + // Конец СтандартныеПодсистемы.Свойства + + Если Объект.Ссылка.Пустая() Тогда + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Объект.Ссылка); + + Вложения.Очистить(); + ТаблицаВложения = УправлениеЭлектроннойПочтой.ПолучитьВложенияЭлектронногоПисьма(Объект.Ссылка, Истина); + + Если ТаблицаВложения.Количество() > 0 Тогда + + НайденныеСтроки = ТаблицаВложения.НайтиСтроки(Новый Структура("ИДФайлаЭлектронногоПисьма", "")); + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(НайденныеСтроки, Вложения); + + КонецЕсли; + + Для Каждого УдаленноеВложение Из ТекущийОбъект.НепринятыеВложения Цикл + + НовоеВложение = Вложения.Добавить(); + НовоеВложение.ИмяФайла = УдаленноеВложение.ИмяВложение; + НовоеВложение.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(".msg") + 1; + + КонецЦикла; + + Если Вложения.Количество() = 0 Тогда + + Элементы.Вложения.Видимость = Ложь; + + КонецЕсли; + + // Установим текст и вид текста + Если Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML Тогда + ТекстПисьма = Взаимодействия.ОбработатьТекстHTML(Объект.Ссылка); + Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеHTMLДокумента; + Элементы.ТекстПисьма.ТолькоПросмотр = Ложь; + Иначе + ТекстПисьма = Объект.Текст; + Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента; + КонецЕсли; + + // Сформируем представление отправителя + ОтправительПредставление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата( + Объект.ОтправительПредставление, Объект.ОтправительАдрес,""); + + // Сформируем представление Кому и Копии + ПолучателиПредставление = + ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь); + ПолучателиКопийПредставление = + ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиКопий, Ложь); + ПолучателиОтветаПредставление = + ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиОтвета, Ложь); + + ЗаполнитьДополнительнуюИнформацию(); + + ОбработатьНеобходимостьУведомленияОПрочтении(); + + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоВходящее"); + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + // СтандартныеПодсистемы.Свойства + Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда + ОбновитьЭлементыДополнительныхРеквизитов(); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + + ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма, ИмяСобытия, Параметр, Источник); + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, РежимЗаписи, РежимПроведения) + + Если Объект.Рассмотрено И ТребуетсяУстановкаФлагаОтправкиУведомления Тогда + УправлениеЭлектроннойПочтой.УстановитьПризнакОтправкиУведомления(Объект.Ссылка, Истина); + КонецЕсли; + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект); + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, Предмет); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) + + Если Объект.Рассмотрено И ТребуетсяЗапросУведомленияОПрочтении Тогда + + Результат = Вопрос(НСтр("ru='Отправитель запросил уведомление о прочтении. Отправить?'"), + РежимДиалогаВопрос.ДаНет, + , + КодВозвратаДиалога.Да, + НСтр("ru='Запрос уведомления'")); + + Если Результат = КодВозвратаДиалога.Да Тогда + УправлениеЭлектроннойПочтой.УстановитьПризнакОтправкиУведомления(Объект.Ссылка, Истина); + ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда + УправлениеЭлектроннойПочтой.УстановитьПризнакОтправкиУведомления(Объект.Ссылка, Ложь); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + ВзаимодействияКлиент.ОбработатьВыборВПолеРассмотретьПосле(Объект.РассмотретьПосле, + ВыбранноеЗначение, + СтандартнаяОбработка, + Модифицированность); + +КонецПроцедуры + +&НаКлиенте +Процедура РассмотреноПриИзменении(Элемент) + + Элементы.РассмотретьПосле.Доступность = НЕ Объект.Рассмотрено; + +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьПолучателей() + + // Получим список адресатов + масОтправитель = Новый Массив; + масОтправитель.Добавить(Новый Структура("Адрес,Представление,Контакт", + Объект.ОтправительАдрес, + Объект.ОтправительПредставление, + Объект.ОтправительКонтакт)); + + спсПолучатели = Новый СписокЗначений; + спсПолучатели.Добавить(масОтправитель, "Отправитель"); + спсПолучатели.Добавить( + УправлениеЭлектроннойПочтойКлиент.ТаблицуКонтактовВМассив(Объект.ПолучателиПисьма), "Получатели"); + спсПолучатели.Добавить( + УправлениеЭлектроннойПочтойКлиент.ТаблицуКонтактовВМассив(Объект.ПолучателиКопий), "Копии"); + спсПолучатели.Добавить( + УправлениеЭлектроннойПочтойКлиент.ТаблицуКонтактовВМассив(Объект.ПолучателиОтвета), "Ответ"); + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); + ПараметрыОткрытия.Вставить("СписокВыбранных", спсПолучатели); + ПараметрыОткрытия.Вставить("Предмет", Предмет); + ПараметрыОткрытия.Вставить("Письмо", Объект.Ссылка); + + // Откроем форму для редактирования списка адресатов + Результат = ОткрытьФормуМодально("ОбщаяФорма.УточнениеКонтактов", ПараметрыОткрытия); + Если ТипЗнч(Результат) <> Тип("Массив") Тогда + Возврат; + КонецЕсли; + + ЗаполнитьУточненныеКонтакты(Результат); + Модифицированность = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьУточненныеКонтакты(Результат) + + Объект.ПолучателиКопий.Очистить(); + Объект.ПолучателиОтвета.Очистить(); + Объект.ПолучателиПисьма.Очистить(); + + Для каждого ЭлементМассива Из Результат Цикл + + Если ЭлементМассива.Группа = "Получатели" Тогда + ТаблицаПолучателей = Объект.ПолучателиПисьма; + ИначеЕсли ЭлементМассива.Группа = "Копии" Тогда + ТаблицаПолучателей = Объект.ПолучателиКопий; + ИначеЕсли ЭлементМассива.Группа = "Ответ" Тогда + ТаблицаПолучателей = Объект.ПолучателиОтвета; + ИначеЕсли ЭлементМассива.Группа = "Отправитель" Тогда + Объект.ОтправительАдрес = ЭлементМассива.Адрес; + Объект.ОтправительКонтакт = ЭлементМассива.Контакт; + Продолжить; + Иначе + Продолжить; + КонецЕсли; + + СтрокаПолучатели = ТаблицаПолучателей.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаПолучатели,ЭлементМассива); + + КонецЦикла; + + // Сформируем представление отправителя + ОтправительПредставление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата( + Объект.ОтправительПредставление, Объект.ОтправительАдрес, ""); + + // Сформируем представление Кому и Копии + ПолучателиПредставление = + ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь); + ПолучателиКопийПредставление = + ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиКопий, Ложь); + ПолучателиОтветаПредставление = + ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиОтвета, Ложь); + + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоВходящее"); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтправительПредставлениеОткрытие(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Если ЗначениеЗаполнено(Объект.ОтправительКонтакт) Тогда + ОткрытьЗначение(Объект.ОтправительКонтакт); + Иначе + РедактироватьПолучателей(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ТекстПисьмаПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) + + ВзаимодействияКлиент.ПолеHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Вложения + +&НаКлиенте +Процедура ВложенияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ОткрытьВложение(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВложенияПриАктивизацииСтроки(Элемент) + + ТекущиеДанные = Элементы.Вложения.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ВложениеСуществует = ЗначениеЗаполнено(ТекущиеДанные.Ссылка); + Элементы.ВложенияКонтекстноеМенюСвойстваВложения.Доступность = ВложениеСуществует; + Элементы.ОткрытьВложение.Доступность = ВложениеСуществует; + Элементы.СохранитьВложение.Доступность = ВложениеСуществует; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ОткрытьВложениеВыполнить() + + ОткрытьВложение(); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьВложениеВыполнить() + + ТекущиеДанные = Элементы.Вложения.ТекущиеДанные; + + Если ТекущиеДанные <> Неопределено Тогда + + Если НЕ ЗначениеЗаполнено(ТекущиеДанные.Ссылка) Тогда + Возврат; + КонецЕсли; + + ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ПрисоединенныеФайлыКлиент.СохранитьФайлКак(ДанныеФайла); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УточнитьКонтакты(Команда) + + РедактироватьПолучателей(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПараметрыПисьма(Команда) + + ТекстЗаголовкиИнтернета = Новый ТекстовыйДокумент; + ТекстЗаголовкиИнтернета.ДобавитьСтроку(Объект.ВнутреннийЗаголовок); + + СтруктураПараметры = Новый Структура; + СтруктураПараметры.Вставить("Создано", Объект.Дата); + СтруктураПараметры.Вставить("Получено", Объект.ДатаПолучения); + СтруктураПараметры.Вставить("УведомитьОДоставке", Объект.УведомитьОДоставке); + СтруктураПараметры.Вставить("УведомитьОПрочтении", Объект.УведомитьОПрочтении); + СтруктураПараметры.Вставить("ЗаголовкиИнтернета", ТекстЗаголовкиИнтернета); + СтруктураПараметры.Вставить("Письмо", Объект.Ссылка); + СтруктураПараметры.Вставить("ТипПисьма", "ЭлектронноеПисьмоВходящее"); + СтруктураПараметры.Вставить("Кодировка", Объект.Кодировка); + СтруктураПараметры.Вставить("ВнутреннийНомер", Объект.Номер); + СтруктураПараметры.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); + + ОткрытьФормуМодально("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма", + СтруктураПараметры, ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура СвязанныеВзаимодействияВыполнить() + + ОткрытьФормуМодально("ЖурналДокументов.Взаимодействия.ФормаСписка", + Новый Структура("ОбъектОтбора", Объект.Предмет)); + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьКодировку(Команда) + + СписокКодировок = УправлениеЭлектроннойПочтой.ПолучитьСписокКодировок(); + ВыбраннаяКодировка = СписокКодировок.ВыбратьЭлемент("Выберите кодировку", + СписокКодировок.НайтиПоЗначению(НРег(Объект.Кодировка))); + Если ВыбраннаяКодировка <> Неопределено Тогда + ПреобразоватьКодировкуПисьма(ВыбраннаяКодировка.Значение); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СвойстваВложения(Команда) + + ТекущиеДанные = Элементы.Вложения.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ТекущиеДанные.Ссылка) Тогда + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура("ПрисоединенныйФайл, ТолькоПросмотр", ТекущиеДанные.Ссылка,Истина); + ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы,, ТекущиеДанные.Ссылка); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Команды подсистемы свойств + +&НаКлиенте +Процедура Подключаемый_РедактироватьСоставСвойств() + + УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма, Объект.Ссылка); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьЭлементыДополнительныхРеквизитов() + + УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма, РеквизитФормыВЗначение("Объект")); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура ОткрытьВложение() @@ -8,6 +422,9 @@ Если ТекущиеДанные <> Неопределено Тогда + Если НЕ ЗначениеЗаполнено(ТекущиеДанные.Ссылка) Тогда + Возврат; + КонецЕсли; УправлениеЭлектроннойПочтойКлиент.ОткрытьВложение(ТекущиеДанные.Ссылка,УникальныйИдентификатор); КонецЕсли; @@ -102,381 +519,4 @@ КонецЕсли; -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - // Запретим создание новых - Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - Взаимодействия.УстановитьЗаголовокФормыЭлектронногоПисьма(ЭтаФорма); - - // Заполним список выбора для поля РассмотретьПосле - Взаимодействия.ЗаполнитьСписокВыбораДляРассмотретьПосле(Элементы.РассмотретьПосле.СписокВыбора); - Если Объект.Рассмотрено Тогда - Элементы.РассмотретьПосле.Доступность = Ложь; - КонецЕсли; - - // Свойства - УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект, "СтраницаДополнительныеРеквизиты"); - // Конец Свойства - - Взаимодействия.УстановитьВидимостьСтраницДопРеквизитов(ЭтаФорма, Ложь); - -КонецПроцедуры - -&НаСервере -Процедура ПриЧтенииНаСервере(ТекущийОбъект) - - Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Объект.Ссылка); - - Вложения.Очистить(); - ТаблицаВложения = УправлениеЭлектроннойПочтой.ПолучитьВложенияЭлектронногоПисьма(Объект.Ссылка, Истина); - - Если ТаблицаВложения.Количество() > 0 Тогда - - НайденныеСтроки = ТаблицаВложения.НайтиСтроки(Новый Структура("ИДФайлаЭлектронногоПисьма", "")); - ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(НайденныеСтроки, Вложения); - - Иначе - - Элементы.Вложения.Видимость = Ложь; - - КонецЕсли; - - Если Вложения.Количество() = 0 Тогда - - Элементы.Вложения.Видимость = Ложь; - - КонецЕсли; - - // Установим текст и вид текста - Если Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML Тогда - ТекстПисьма = Взаимодействия.ОбработатьТекстHTML(Объект.Ссылка); - Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеHTMLДокумента; - Элементы.ТекстПисьма.ТолькоПросмотр = Ложь; - Иначе - ТекстПисьма = Объект.Текст; - Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента; - КонецЕсли; - - // Сформируем представление отправителя - ОтправительПредставление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата( - Объект.ОтправительПредставление, Объект.ОтправительАдрес,""); - - // Сформируем представление Кому и Копии - ПолучателиПредставление = - ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь); - ПолучателиКопийПредставление = - ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиКопий, Ложь); - ПолучателиОтветаПредставление = - ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиОтвета, Ложь); - - ЗаполнитьДополнительнуюИнформацию(); - - ОбработатьНеобходимостьУведомленияОПрочтении(); - - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоВходящее"); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - - // Свойства - Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда - ОбновитьЭлементыДополнительныхРеквизитов(); - КонецЕсли; - // Конец Свойства - - ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма, ИмяСобытия, Параметр, Источник); - -КонецПроцедуры - -&НаСервере -Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, РежимЗаписи, РежимПроведения) - - Если Объект.Рассмотрено И ТребуетсяУстановкаФлагаОтправкиУведомления Тогда - УправлениеЭлектроннойПочтой.УстановитьПризнакОтправкиУведомления(Объект.Ссылка, Истина); - КонецЕсли; - - // Свойства - УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект); - // Конец Свойства - -КонецПроцедуры - -&НаСервере -Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - - Взаимодействия.ПриЗаписиВзаимодействияИзФормы(ТекущийОбъект, Предмет); - -КонецПроцедуры - -&НаКлиенте -Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) - - Если Объект.Рассмотрено И ТребуетсяЗапросУведомленияОПрочтении Тогда - - Результат = Вопрос(НСтр("ru='Отправитель запросил уведомление о прочтении. Отправить?'"), - РежимДиалогаВопрос.ДаНет, - , - КодВозвратаДиалога.Да, - НСтр("ru='Запрос уведомления'")); - - Если Результат = КодВозвратаДиалога.Да Тогда - УправлениеЭлектроннойПочтой.УстановитьПризнакОтправкиУведомления(Объект.Ссылка, Истина); - ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда - УправлениеЭлектроннойПочтой.УстановитьПризнакОтправкиУведомления(Объект.Ссылка, Ложь); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура ОткрытьВложениеВыполнить() - - ОткрытьВложение(); - -КонецПроцедуры - -&НаКлиенте -Процедура СохранитьВложениеВыполнить() - - ТекущиеДанные = Элементы.Вложения.ТекущиеДанные; - - Если ТекущиеДанные <> Неопределено Тогда - - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); - ПрисоединенныеФайлыКлиент.СохранитьФайлКак(ДанныеФайла); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПараметрыПисьма(Команда) - - ТекстЗаголовкиИнтернета = Новый ТекстовыйДокумент; - ТекстЗаголовкиИнтернета.ДобавитьСтроку(Объект.ВнутреннийЗаголовок); - - СтруктураПараметры = Новый Структура; - СтруктураПараметры.Вставить("Создано", Объект.Дата); - СтруктураПараметры.Вставить("Получено", Объект.ДатаПолучения); - СтруктураПараметры.Вставить("УведомитьОДоставке", Объект.УведомитьОДоставке); - СтруктураПараметры.Вставить("УведомитьОПрочтении", Объект.УведомитьОПрочтении); - СтруктураПараметры.Вставить("ЗаголовкиИнтернета", ТекстЗаголовкиИнтернета); - СтруктураПараметры.Вставить("Письмо", Объект.Ссылка); - СтруктураПараметры.Вставить("ТипПисьма", "ЭлектронноеПисьмоВходящее"); - СтруктураПараметры.Вставить("Кодировка", Объект.Кодировка); - СтруктураПараметры.Вставить("ВнутреннийНомер", Объект.Номер); - СтруктураПараметры.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); - - ОткрытьФормуМодально("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма", - СтруктураПараметры, ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура СвязанныеВзаимодействияВыполнить() - - ОткрытьФормуМодально("ЖурналДокументов.Взаимодействия.ФормаСписка", - Новый Структура("ОбъектОтбора", Объект.Предмет)); - -КонецПроцедуры - -&НаКлиенте -Процедура ИзменитьКодировку(Команда) - - СписокКодировок = УправлениеЭлектроннойПочтой.ПолучитьСписокКодировок(); - ВыбраннаяКодировка = СписокКодировок.ВыбратьЭлемент("Выберите кодировку", - СписокКодировок.НайтиПоЗначению(НРег(Объект.Кодировка))); - Если ВыбраннаяКодировка <> Неопределено Тогда - ПреобразоватьКодировкуПисьма(ВыбраннаяКодировка.Значение); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СвойстваВложения(Команда) - - ТекущиеДанные = Элементы.Вложения.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - ПараметрыФормы = Новый Структура("ПрисоединенныйФайл, ТолькоПросмотр", ТекущиеДанные.Ссылка,Истина); - ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы,, ТекущиеДанные.Ссылка); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура ВложенияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ОткрытьВложение(); - -КонецПроцедуры - -&НаКлиенте -Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - ВзаимодействияКлиент.ОбработатьВыборВПолеРассмотретьПосле(Объект.РассмотретьПосле, - ВыбранноеЗначение, - СтандартнаяОбработка, - Модифицированность); - -КонецПроцедуры - -&НаКлиенте -Процедура РассмотреноПриИзменении(Элемент) - - Элементы.РассмотретьПосле.Доступность = НЕ Объект.Рассмотрено; - -КонецПроцедуры - -&НаКлиенте -Процедура РедактироватьПолучателей() - - // Получим список адресатов - масОтправитель = Новый Массив; - масОтправитель.Добавить(Новый Структура("Адрес,Представление,Контакт", - Объект.ОтправительАдрес, - Объект.ОтправительПредставление, - Объект.ОтправительКонтакт)); - - спсПолучатели = Новый СписокЗначений; - спсПолучатели.Добавить(масОтправитель, "Отправитель"); - спсПолучатели.Добавить( - УправлениеЭлектроннойПочтойКлиент.ТаблицуКонтактовВМассив(Объект.ПолучателиПисьма), "Получатели"); - спсПолучатели.Добавить( - УправлениеЭлектроннойПочтойКлиент.ТаблицуКонтактовВМассив(Объект.ПолучателиКопий), "Копии"); - спсПолучатели.Добавить( - УправлениеЭлектроннойПочтойКлиент.ТаблицуКонтактовВМассив(Объект.ПолучателиОтвета), "Ответ"); - - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); - ПараметрыОткрытия.Вставить("СписокВыбранных", спсПолучатели); - ПараметрыОткрытия.Вставить("Предмет", Предмет); - ПараметрыОткрытия.Вставить("Письмо", Объект.Ссылка); - - // Откроем форму для редактирования списка адресатов - Результат = ОткрытьФормуМодально("ОбщаяФорма.УточнениеКонтактов", ПараметрыОткрытия); - Если ТипЗнч(Результат) <> Тип("Массив") Тогда - Возврат; - КонецЕсли; - - ЗаполнитьУточненныеКонтакты(Результат); - Модифицированность = Истина; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаполнитьУточненныеКонтакты(Результат) - - Объект.ПолучателиКопий.Очистить(); - Объект.ПолучателиОтвета.Очистить(); - Объект.ПолучателиПисьма.Очистить(); - - Для каждого ЭлементМассива Из Результат Цикл - - Если ЭлементМассива.Группа = "Получатели" Тогда - ТаблицаПолучателей = Объект.ПолучателиПисьма; - ИначеЕсли ЭлементМассива.Группа = "Копии" Тогда - ТаблицаПолучателей = Объект.ПолучателиКопий; - ИначеЕсли ЭлементМассива.Группа = "Ответ" Тогда - ТаблицаПолучателей = Объект.ПолучателиОтвета; - ИначеЕсли ЭлементМассива.Группа = "Отправитель" Тогда - Объект.ОтправительАдрес = ЭлементМассива.Адрес; - Объект.ОтправительКонтакт = ЭлементМассива.Контакт; - Продолжить; - Иначе - Продолжить; - КонецЕсли; - - СтрокаПолучатели = ТаблицаПолучателей.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаПолучатели,ЭлементМассива); - - КонецЦикла; - - // Сформируем представление отправителя - ОтправительПредставление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата( - Объект.ОтправительПредставление, Объект.ОтправительАдрес, ""); - - // Сформируем представление Кому и Копии - ПолучателиПредставление = - ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь); - ПолучателиКопийПредставление = - ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиКопий, Ложь); - ПолучателиОтветаПредставление = - ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиОтвета, Ложь); - - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоВходящее"); - -КонецПроцедуры - -&НаКлиенте -Процедура УточнитьКонтакты(Команда) - - РедактироватьПолучателей(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтправительПредставлениеОткрытие(Элемент, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - Если ЗначениеЗаполнено(Объект.ОтправительКонтакт) Тогда - ОткрытьЗначение(Объект.ОтправительКонтакт); - Иначе - РедактироватьПолучателей(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ТекстПисьмаПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) - - ВзаимодействияКлиент.ПолеHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка); - -КонецПроцедуры - - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ПОДСИСТЕМЫ СВОЙСТВ - -&НаКлиенте -Процедура Подключаемый_РедактироватьСоставСвойств() - - УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма, Объект.Ссылка); - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьЭлементыДополнительныхРеквизитов() - - УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма, РеквизитФормыВЗначение("Объект")); - -КонецПроцедуры - - - - +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl index 6b050c677..85b353289 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + Функция ПолучитьКонтакты(Ссылка) Экспорт ТекстЗапроса = @@ -77,6 +80,9 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Взаимодействия.ОбработкаПолученияДанныхВыбора( diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl index 5b4ae1338..515efe422 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl @@ -1,11 +1,6 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ - - - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ПриЗаписи(Отказ) @@ -26,8 +21,17 @@ Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + ДополнительныеСвойства.Вставить("ПометкаУдаления", ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка,"ПометкаУдаления")); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + + + diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo index be1c870c4..58b040ada 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ЭлектронноеПисьмоВходящее.mdo @@ -329,7 +329,7 @@ ОтправительАдрес ru - Отправитель адрес + Адрес отправителя String @@ -664,6 +664,28 @@ Use + + Комментарий + + ru + Комментарий + + + String + + + + ru + Произвольный текст + + true + true + + + + Use + Use + ФормаДокумента @@ -1235,6 +1257,42 @@ Use + + + + + + НепринятыеВложения + + ru + Непринятые вложения + + + Use + LineNumber + + Use + + + + + ИмяВложение + + ru + Непринятое вложение + + + String + + 150 + + + + + Use + Use + + Ответить diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form index 24320d92a..3726d727c 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form @@ -26,7 +26,7 @@ ОтправительПредставлениеРасширеннаяПодсказка - 301 + 304 Label true true @@ -70,7 +70,7 @@ СписокПолучателейПисьмаРасширеннаяПодсказка - 303 + 306 Label true true @@ -127,7 +127,7 @@ СписокПолучателейКопийРасширеннаяПодсказка - 305 + 308 Label true true @@ -188,7 +188,7 @@ СписокПолучателейСкрытыхКопийРасширеннаяПодсказка - 307 + 310 Label true true @@ -248,7 +248,7 @@ ГруппаПолучателиРасширеннаяПодсказка - 300 + 303 Label true true @@ -282,7 +282,7 @@ ПредметРасширеннаяПодсказка - 310 + 313 Label true true @@ -337,7 +337,7 @@ ДекорацияВажностьРасширеннаяПодсказка - 316 + 319 Label true true @@ -372,7 +372,7 @@ None ВажностьЗаполненыРасширеннаяПодсказка - 317 + 320 Label true true @@ -417,7 +417,7 @@ СтраницаКонтактыЗаполненыРасширеннаяПодсказка - 315 + 318 Label true true @@ -446,7 +446,7 @@ УточнитьКонтактыРасширеннаяПодсказка - 321 + 324 Label true true @@ -479,7 +479,7 @@ true ГруппаКонтактыНеЗаполненыРасширеннаяПодсказка - 320 + 323 Label true true @@ -510,7 +510,7 @@ ВажностьРасширеннаяПодсказка - 322 + 325 Label true true @@ -555,7 +555,7 @@ true СтраницаКонтактыНеЗаполненыРасширеннаяПодсказка - 319 + 322 Label true true @@ -584,7 +584,7 @@ true СтраницыУказаныКонтактыРасширеннаяПодсказка - 314 + 317 Label true true @@ -612,7 +612,7 @@ ГруппаВажностьУточнениеКонтактовРасширеннаяПодсказка - 313 + 316 Label true true @@ -644,7 +644,7 @@ ГруппаВажностьОтработкаРасширеннаяПодсказка - 312 + 315 Label true true @@ -674,7 +674,7 @@ ОтветственныйРасширеннаяПодсказка - 324 + 327 Label true true @@ -722,7 +722,7 @@ НаКонтролеРасширеннаяПодсказка - 327 + 330 Label true true @@ -756,7 +756,7 @@ None РассмотретьПослеРасширеннаяПодсказка - 329 + 332 Label true true @@ -804,7 +804,7 @@ ГруппаНаКонтролеРасширеннаяПодсказка - 326 + 329 Label true true @@ -837,7 +837,7 @@ false ГруппаПрочееРасширеннаяПодсказка - 309 + 312 Label true true @@ -870,7 +870,7 @@ ГруппаПолучателиПрочееРасширеннаяПодсказка - 299 + 302 Label true true @@ -905,7 +905,7 @@ ДекорацияТемаРасширеннаяПодсказка - 332 + 335 Label true true @@ -940,7 +940,7 @@ None ТемаРасширеннаяПодсказка - 333 + 336 Label true true @@ -978,7 +978,7 @@ ГруппаТемаРасширеннаяПодсказка - 331 + 334 Label true true @@ -1006,7 +1006,7 @@ ГруппаШапкаРасширеннаяПодсказка - 298 + 301 Label true true @@ -1040,7 +1040,7 @@ ДобавитьВложениеСкрепкаРасширеннаяПодсказка - 337 + 340 Label true true @@ -1088,7 +1088,7 @@ ВложенияПодписанЭЦПРасширеннаяПодсказка - 353 + 356 Label true true @@ -1137,7 +1137,7 @@ None ИндексКартинкиРасширеннаяПодсказка - 356 + 359 Label true true @@ -1183,7 +1183,7 @@ ИмяФайлаРасширеннаяПодсказка - 358 + 361 Label true true @@ -1216,7 +1216,7 @@ ГруппаРасширеннаяПодсказка - 355 + 358 Label true true @@ -1244,7 +1244,7 @@ РазмерПредставлениеРасширеннаяПодсказка - 360 + 363 Label true true @@ -1303,32 +1303,9 @@ ВложенияСтрокаПоиска - 344 - - ВложенияСтрокаПоискаРасширеннаяПодсказка - 346 - Label - true - true - - Left - - - - ВложенияСтрокаПоискаКонтекстноеМеню - 345 - true - - Вложения - - true - - - - ВложенияСостояниеПросмотра 347 - ВложенияСостояниеПросмотраРасширеннаяПодсказка + ВложенияСтрокаПоискаРасширеннаяПодсказка 349 Label true @@ -1338,10 +1315,33 @@ - ВложенияСостояниеПросмотраКонтекстноеМеню + ВложенияСтрокаПоискаКонтекстноеМеню 348 true + Вложения + + true + + + + ВложенияСостояниеПросмотра + 350 + + ВложенияСостояниеПросмотраРасширеннаяПодсказка + 352 + Label + true + true + + Left + + + + ВложенияСостояниеПросмотраКонтекстноеМеню + 351 + true + ViewStatusAddition Вложения @@ -1350,10 +1350,10 @@ ВложенияУправлениеПоиском - 350 + 353 ВложенияУправлениеПоискомРасширеннаяПодсказка - 352 + 355 Label true true @@ -1363,7 +1363,7 @@ ВложенияУправлениеПоискомКонтекстноеМеню - 351 + 354 true SearchControlAddition @@ -1374,7 +1374,7 @@ ВложенияРасширеннаяПодсказка - 343 + 346 Label true true @@ -1396,7 +1396,7 @@ false ДобавитьВложениеРасширеннаяПодсказка - 338 + 341 Label true true @@ -1423,7 +1423,7 @@ false ОткрытьВложениеРасширеннаяПодсказка - 339 + 342 Label true true @@ -1450,7 +1450,7 @@ false СохранитьВложениеРасширеннаяПодсказка - 340 + 343 Label true true @@ -1481,7 +1481,7 @@ false УдалитьВложениеРасширеннаяПодсказка - 341 + 344 Label true true @@ -1507,7 +1507,7 @@ ВложенияКонтекстноеМенюСвойстваВложенияРасширеннаяПодсказка - 342 + 345 Label true true @@ -1574,7 +1574,7 @@ СтраницаРедактированиеРасширеннаяПодсказка - 336 + 339 Label true true @@ -1598,7 +1598,7 @@ ДобавитьВложениеГиперссылкаРасширеннаяПодсказка - 371 + 374 Label true true @@ -1635,7 +1635,7 @@ 1 СтраницаДобавитьРасширеннаяПодсказка - 370 + 373 Label true true @@ -1664,7 +1664,7 @@ СтраницыВложенияРасширеннаяПодсказка - 335 + 338 Label true true @@ -1706,7 +1706,7 @@ None ТекстПисьмаРасширеннаяПодсказка - 377 + 380 Label true true @@ -1753,7 +1753,7 @@ true СтраницаОбычныйТекстРасширеннаяПодсказка - 376 + 379 Label true true @@ -1788,7 +1788,7 @@ ГруппаКоманднаяПанельФорматированногоДокументаРасширеннаяПодсказка - 380 + 383 Label true true @@ -1816,7 +1816,7 @@ None ТекстПисьмаФорматированныйДокументРасширеннаяПодсказка - 381 + 384 Label true true @@ -1858,7 +1858,7 @@ СтраницаФорматированныйДокументРасширеннаяПодсказка - 379 + 382 Label true true @@ -1887,7 +1887,7 @@ СтраницыТекстПисьмаРасширеннаяПодсказка - 375 + 378 Label true true @@ -1921,7 +1921,7 @@ None ТекстВходящегоПисьмаРасширеннаяПодсказка - 384 + 387 Label true true @@ -1968,7 +1968,7 @@ ГруппаВходящееРасширеннаяПодсказка - 383 + 386 Label true true @@ -2002,7 +2002,7 @@ НомерРасширеннаяПодсказка - 387 + 390 Label true true @@ -2045,7 +2045,7 @@ ДатаОтправленияРасширеннаяПодсказка - 389 + 392 Label true true @@ -2098,7 +2098,7 @@ ГруппаОтправленоНомерРасширеннаяПодсказка - 386 + 389 Label true true @@ -2130,7 +2130,7 @@ СтраницаПисьмоРасширеннаяПодсказка - 374 + 377 Label true true @@ -2164,7 +2164,7 @@ true СтраницаОписаниеРасширеннаяПодсказка - 373 + 376 Label true true @@ -2196,7 +2196,81 @@ СтраницаДополнительныеРеквизитыРасширеннаяПодсказка - 391 + 394 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаКомментарий + 283 + + Комментарий + 284 + true + true + + true + + + Объект.Комментарий + + None + + КомментарийРасширеннаяПодсказка + 396 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 285 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Комментарий</value> + + + ru + Комментарий + + + СтраницаКомментарийРасширеннаяПодсказка + 395 Label true true @@ -2225,7 +2299,7 @@ СтраницыОписаниеДополнительноРасширеннаяПодсказка - 372 + 375 Label true true @@ -2253,7 +2327,7 @@ false СправкаРасширеннаяПодсказка - 283 + 286 Label true true @@ -2280,7 +2354,7 @@ false ОтправитьРасширеннаяПодсказка - 284 + 287 Label true true @@ -2306,7 +2380,7 @@ ФормаЗаписатьИЗакрытьРасширеннаяПодсказка - 285 + 288 Label true true @@ -2333,7 +2407,7 @@ false ЗаписатьРасширеннаяПодсказка - 286 + 289 Label true true @@ -2359,7 +2433,7 @@ ФормаПеречитатьРасширеннаяПодсказка - 287 + 290 Label true true @@ -2386,7 +2460,7 @@ ФормаУстановитьПометкуУдаленияРасширеннаяПодсказка - 288 + 291 Label true true @@ -2414,7 +2488,7 @@ false ИзменитьФормуРасширеннаяПодсказка - 289 + 292 Label true true @@ -2440,7 +2514,7 @@ ИзменитьКодировкуРасширеннаяПодсказка - 290 + 293 Label true true @@ -2468,7 +2542,7 @@ false ДополнительноРасширеннаяПодсказка - 291 + 294 Label true true @@ -2495,7 +2569,7 @@ ФормаУточнитьКонтактыРасширеннаяПодсказка - 292 + 295 Label true true @@ -2522,7 +2596,7 @@ ОтображатьТекстПисьмаОснованияРасширеннаяПодсказка - 293 + 296 Label true true @@ -2551,7 +2625,7 @@ ФормаHTMLРасширеннаяПодсказка - 295 + 298 Label true true @@ -2577,7 +2651,7 @@ ФормаОбычныйТекстРасширеннаяПодсказка - 296 + 299 Label true true @@ -2607,7 +2681,7 @@ ФорматСообщенияРасширеннаяПодсказка - 294 + 297 Label true true @@ -2639,7 +2713,7 @@ ГруппаГлобальныеКомандыРасширеннаяПодсказка - 297 + 300 Label true true diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl index c9a4547f9..863d04e4e 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl @@ -1,1191 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ - -// Определяет способ редактирования письма и -// отображает текст письма согласно способу редактирования -&НаСервере -Процедура ОпределитьСпособРедактированияПисьма() - - Если Объект.ТипТекста.Пустая() Тогда - - ФорматСообщения = Взаимодействия.ФорматСообщенияПоУмолчанию(Пользователи.ТекущийПользователь()); - - // Если тип текста не был заполнен, то может оказаться, что формат выбран некорректно, поэтому: - // 1) Если текст заполнен, но не заполнен HTML - то формат сообщения исправляем на "текст" - // 2) Если HTML заполнен, но не заполнен текст - то формат сообщения исправляем на "HTML" - Если ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст - И СокрЛП(Объект.Текст) = "" И СокрЛП(Объект.ТекстHTML) <> "" Тогда - ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML; - ИначеЕсли ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML - И СокрЛП(Объект.Текст) <> "" И СокрЛП(Объект.ТекстHTML) = "" Тогда - ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; - КонецЕсли; - - Иначе - Если Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст Тогда - ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; - Иначе - ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML; - КонецЕсли; - - КонецЕсли; - - Если Объект.Ссылка.Пустая() Тогда - - Если Не ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML") - И ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; - КонецЕсли; - - ПараметрыРаботыПользователяПользователя = - Взаимодействия.ПолучитьПараметрыРаботыПользователяДляИсходящегоЭлектронногоПисьма( - Объект.УчетнаяЗапись, - ФорматСообщения, - ?(Объект.ВзаимодействиеОснование = Неопределено, Истина, Ложь)); - - Объект.УведомитьОДоставке = ПараметрыРаботыПользователяПользователя.УведомитьОДоставке; - Объект.УведомитьОПрочтении = ПараметрыРаботыПользователяПользователя.УведомитьОПрочтении; - Объект.ВключатьТелоИсходногоПисьма = ПараметрыРаботыПользователяПользователя.ВключатьТелоИсходногоПисьма; - Объект.ОтображатьТелоИсходногоПисьма = ПараметрыРаботыПользователяПользователя.ОтображатьТелоИсходногоПисьма; - - КонецЕсли; - - Если ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - - Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаФорматированныйДокумент; - Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML; - Если Не Объект.Ссылка.Пустая() Тогда - СтруктураВложений = Новый Структура; - Объект.ТекстHTML = Взаимодействия.ОбработатьТекстHTMLДляФорматированногоДокумента( - Объект.Ссылка, Объект.ТекстHTML,СтруктураВложений); - ТекстПисьмаФорматированныйДокумент.УстановитьHTML(Объект.ТекстHTML, СтруктураВложений); - ИначеЕсли ПараметрыРаботыПользователяПользователя.Подпись <> Неопределено Тогда - ТекстПисьмаФорматированныйДокумент = ПараметрыРаботыПользователяПользователя.Подпись; - КонецЕсли; - - Иначе - - Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаОбычныйТекст; - Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента; - Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст; - ТекстПисьма = Объект.Текст; - Если Объект.Ссылка.Пустая() И ПараметрыРаботыПользователяПользователя.Подпись <> Неопределено Тогда - - ТекстПисьма = ПараметрыРаботыПользователяПользователя.Подпись; - - КонецЕсли; - Объект.Кодировка = "UTF-8"; - - КонецЕсли; - - Элементы.ФорматСообщения.Видимость = Истина; - Элементы.ФорматСообщения.Заголовок = ФорматСообщения; - -КонецПроцедуры - -//Обрабатывает переданные параметры при создании письма -&НаСервере -Процедура ОбработатьПереданныеПараметры(Параметры) - - Если Объект.Ссылка.Пустая() Тогда - - Если Параметры.Свойство("Вложения") Тогда - - Для каждого Вложение Из Параметры.Вложения Цикл - - новСтр = Вложения.Добавить(); - Если ЭтоАдресВременногоХранилища(Вложение.Значение) Тогда - новСтр.Расположение = 4; - Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(Вложение.Представление); - Иначе - новСтр.Расположение = 2; - ИмяФайла = ""; - Расширение = ""; - ВзаимодействияКлиентСервер.ПолучитьКаталогИИмяФайла(Вложение.Значение, "", ИмяФайла); - Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ИмяФайла); - КонецЕсли; - - новСтр.ИмяФайлаНаКомпьютере = Вложение.Значение; - новСтр.ИмяФайла = Вложение.Представление; - новСтр.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); - - КонецЦикла; - - КонецЕсли; - - Если НЕ ПустаяСтрока(Параметры.Тема) Тогда - Объект.Тема = Параметры.Тема; - КонецЕсли; - - Если НЕ ПустаяСтрока(Параметры.Тело) Тогда - Объект.Текст = Параметры.Тело; - КонецЕсли; - - Если НЕ Параметры.УчетнаяЗапись.Пустая() Тогда - - Объект.УчетнаяЗапись = Параметры.УчетнаяЗапись; - РеквизитыОтправителя = ОбщегоНазначения.ПолучитьЗначенияРеквизитов( - Параметры.УчетнаяЗапись,"Ссылка, ИмяПользователя, АдресЭлектроннойПочты"); - Объект.ОтправительПредставление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата( - РеквизитыОтправителя.ИмяПользователя, РеквизитыОтправителя.АдресЭлектроннойПочты, ""); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -//Определяет необходимость отображения письма основания -&НаСервере -Процедура ОтобразитьПисьмоОснование() - - Если Не Объект.ВзаимодействиеОснование = Неопределено И НЕ Объект.ВзаимодействиеОснование.Пустая() - И Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик - И (ТипЗнч(Объект.ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") - ИЛИ ТипЗнч(Объект.ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")) Тогда - - ЗначенияРеквизитовВходящегоПисьма = ОбщегоНазначения.ПолучитьЗначенияРеквизитов( - Объект.ВзаимодействиеОснование,"ТипТекста,ТекстHTML,Текст"); - - ТипТекстаВходящегоПисьма = ?(ЗначенияРеквизитовВходящегоПисьма.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст, - Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст, - Перечисления.ТипыТекстовЭлектронныхПисем.HTML); - - Если ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML") Тогда - - Если ЗначенияРеквизитовВходящегоПисьма.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст Тогда - - ТекстВходящегоПисьма = ЗначенияРеквизитовВходящегоПисьма.Текст; - - Иначе - - ТекстВходящегоПисьма = Взаимодействия.ОбработатьТекстHTML(Объект.ВзаимодействиеОснование); - Элементы.ТекстВходящегоПисьма.Вид = ВидПоляФормы.ПолеHTMLДокумента; - Элементы.ТекстВходящегоПисьма.ТолькоПросмотр = Ложь - - КонецЕсли; - - Если Не Объект.ОтображатьТелоИсходногоПисьма Тогда - Элементы.ГруппаВходящее.Видимость = Ложь; - Иначе - Элементы.ОтображатьТекстПисьмаОснования.Пометка = Истина; - КонецЕсли; - - Иначе - - Элементы.ГруппаВходящее.Видимость = Ложь; - ТекстПисьма = СформироватьТекстПисьмаВключаяПисьмоОснование(Неопределено, Объект); - - КонецЕсли; - - Иначе - - Элементы.ГруппаВходящее.Видимость = Ложь; - Элементы.ОтображатьТекстПисьмаОснования.Видимость = Ложь; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОтправитьВыполнить() - - ОчиститьСообщения(); - - НайденныеСтроки = ДоступныеДляОтправкиУчетныеЗаписи.НайтиСтроки(Новый Структура("УчетнаяЗапись", Объект.УчетнаяЗапись)); - Если НайденныеСтроки.Количество() = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru ='Выбранная учетная запись не доступна для отправки писем'"),, "ОтправительПредставление", "Объект"); - Возврат; - Иначе - - Если НайденныеСтроки[0].УдалятьПослеОтправки Тогда - СписокКнопок = Новый СписокЗначений; - СписокКнопок.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Отправить'")); - СписокКнопок.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Отправить и сохранить'")); - СписокКнопок.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'")); - - Результат = Вопрос(НСтр("ru = 'Для данной учетной записи не предусмотрено сохранение отправленных писем в системе. - |Продолжить?'"), - СписокКнопок,, КодВозвратаДиалога.Да, - НСтр("ru = 'Отправка письма'")); - - Если Результат = КодВозвратаДиалога.Да Тогда - Объект.УдалятьПослеОтправки = Истина; - ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда - Объект.УдалятьПослеОтправки = Ложь; - ИначеЕсли Результат = КодВозвратаДиалога.Отмена Тогда - Возврат; - КонецЕсли; - - КонецЕсли; - - Если Не ОтправлятьСообщенияСразу Тогда - ОтправлятьСообщенияСразу = ( - Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее")); - КонецЕсли; - - КонецЕсли; - - ВыполняетсяОтправка = Истина; - - Если Объект.Ссылка.Пустая() ИЛИ - Модифицированность ИЛИ - Объект.ВключатьТелоИсходногоПисьма ИЛИ - (Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик")) Тогда - Записать(); - КонецЕсли; - - ВыполняетсяОтправка = Ложь; - - Если ОтправлятьСообщенияСразу Тогда - Результат = ВыполнитьОтправкуНаСервере(); - Иначе - Закрыть(); - Возврат; - КонецЕсли; - - Если Результат = "" Тогда - Закрыть(); - Иначе - Предупреждение(Результат); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПереслатьВыполнить() - - Основание = Новый Структура("Основание,Команда", Объект.Ссылка, "Переслать"); - ПараметрыОткрытия = Новый Структура("Основание", Основание); - ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыОткрытия); - -КонецПроцедуры - -&НаСервере -Процедура УстановитьЗаголовокКнопкиПоУмолчанию() - - Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено Тогда - Элементы.Отправить.Заголовок = Нстр("ru = 'Переслать'"); - ИначеЕсли Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее Тогда - Элементы.Отправить.Заголовок = Нстр("ru = 'Отправить сейчас'"); - ИначеЕсли Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик Тогда - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - НастройкиРаботыСПочтой = Взаимодействия.ПолучитьНастройкуРаботаСПочтой(); - Если НастройкиРаботыСПочтой.Свойство("ОтправлятьСообщенияСразу") И НастройкиРаботыСПочтой.ОтправлятьСообщенияСразу Тогда - ОтправлятьСообщенияСразу = Истина; - КонецЕсли; - КонецЕсли; - - Элементы.Отправить.Заголовок = Нстр("ru = 'Отправить'"); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ФорматСообщенияПриИзменении() - - Если Объект.ТипТекста <> ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.ПростойТекст") И - ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") Тогда - - Если Не ВзаимодействияКлиент.ПриИзмененииФорматаСообщенияНаОбычныйТекст() Тогда - ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML"); - Возврат; - КонецЕсли; - - ТекстПисьма = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст(); - Объект.ТипТекста = ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.ПростойТекст"); - ТекстПисьмаФорматированныйДокумент.Удалить(); - Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента; - Объект.ТекстHTML = ""; - Объект.Кодировка = "UTF-8"; - Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаОбычныйТекст; - - Иначе - - ТекстПисьмаФорматированныйДокумент.Добавить(ТекстПисьма); - Объект.Текст = ""; - Объект.ТипТекста = ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.HTML"); - Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаФорматированныйДокумент; - - КонецЕсли; - - Элементы.ФорматСообщения.Заголовок = ФорматСообщения; - -КонецПроцедуры - -&НаСервере -Процедура ПриСозданииЧтенииНаСервере() - - Взаимодействия.УстановитьЗаголовокФормыЭлектронногоПисьма(ЭтаФорма); - УстановитьЗаголовокКнопкиПоУмолчанию(); - ОбработатьПереданныеПараметры(Параметры); - ЗаполнитьВложения(Параметры); - - Для Каждого Стр Из Объект.ПолучателиПисьма Цикл - Если ЗначениеЗаполнено(Стр.Контакт) Тогда - СоответствияАдресовИКонтактов.Добавить(Стр.Контакт, Стр.Адрес); - КонецЕсли; - КонецЦикла; - - ОпределитьВидимостьДоступностьЭлементовВЗависимостиОтСтатусаПисьма(); - ОтобразитьПисьмоОснование(); - - НаКонтроле = НЕ Объект.Рассмотрено; - - Если Не Объект.Ссылка.Пустая() Тогда - Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Объект.Ссылка); - ТекущийСтатусПисьма = Объект.СтатусПисьма; - КонецЕсли; - - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоИсходящее"); - - Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено Тогда - Элементы.СписокПолучателейКопий.КнопкаВыбора = Ложь; - Элементы.СписокПолучателейПисьма.КнопкаВыбора = Ложь; - Элементы.СписокПолучателейСкрытыхКопий.КнопкаВыбора = Ложь; - Элементы.Тема.РедактированиеТекста = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция ПолучитьДанныеВыбораДляЭлектронногоПисьма(Текст, ИндексВСпискеПолучателей) - - ВозвращаемыйСписок = Новый СписокЗначений; - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); - - ТекстЗапроса = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | Таблица.Ссылка КАК Контакт, - | ПРЕДСТАВЛЕНИЕ(Таблица.Ссылка) КАК Представление, - | ТаблицаКонтактнаяИнформация.АдресЭП КАК АдресЭП - |ИЗ - | Справочник.Пользователи КАК Таблица - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК ТаблицаКонтактнаяИнформация - | ПО (ТаблицаКонтактнаяИнформация.Ссылка = Таблица.Ссылка) - | И (ТаблицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) И (ТаблицаКонтактнаяИнформация.АдресЭП <> """")) - |ГДЕ - | (Таблица.Наименование ПОДОБНО &ВведеннаяСтрока - | ИЛИ ТаблицаКонтактнаяИнформация.АдресЭП ПОДОБНО &ВведеннаяСтрока - | ИЛИ ТаблицаКонтактнаяИнформация.ДоменноеИмяСервера ПОДОБНО &ВведеннаяСтрока - | ИЛИ ТаблицаКонтактнаяИнформация.Представление ПОДОБНО &ВведеннаяСтрока)"; - - Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл - - Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда - Продолжить; - Иначе - - УсловиеПолейВводаПоСтроке = ""; - СписокПолей = Взаимодействия.ПолучитьСвойствоМетаданныхПоТипу(ЭлементМассиваОписания.Тип, "ВводПоСтроке"); - Для Каждого Поле Из СписокПолей Цикл - УсловиеПолейВводаПоСтроке = УсловиеПолейВводаПоСтроке + " ИЛИ Таблица." + Поле.Имя + " ПОДОБНО &ВведеннаяСтрока"; - КонецЦикла; - - ТекстЗапроса = ТекстЗапроса + " - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | Таблица.Ссылка КАК Контакт, - | ПРЕДСТАВЛЕНИЕ(Таблица.Ссылка) КАК Представление, - | ТаблицаКонтактнаяИнформация.АдресЭП КАК АдресЭП - |ИЗ - | Справочник." + ЭлементМассиваОписания.Имя + " КАК Таблица - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник." + ЭлементМассиваОписания.Имя + ".КонтактнаяИнформация КАК ТаблицаКонтактнаяИнформация - | ПО (ТаблицаКонтактнаяИнформация.Ссылка = Таблица.Ссылка) - | И (ТаблицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) И (ТаблицаКонтактнаяИнформация.АдресЭП <> """")) - |ГДЕ - | (ТаблицаКонтактнаяИнформация.АдресЭП ПОДОБНО &ВведеннаяСтрока - | ИЛИ ТаблицаКонтактнаяИнформация.ДоменноеИмяСервера ПОДОБНО &ВведеннаяСтрока - | ИЛИ ТаблицаКонтактнаяИнформация.Представление ПОДОБНО &ВведеннаяСтрока - |" + УсловиеПолейВводаПоСтроке + ") - |"; - - КонецЕсли; - - КонецЦикла; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ВведеннаяСтрока", Текст + "%"); - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - Возврат ВозвращаемыйСписок; - КонецЕсли; - - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - - ЗначениеВыбора = Новый Структура; - ЗначениеВыбора.Вставить("Контакт", Выборка.Контакт); - ЗначениеВыбора.Вставить("Адрес", Выборка.АдресЭП); - ЗначениеВыбора.Вставить("Представление", Выборка.Представление); - ЗначениеВыбора.Вставить("ИндексВСпискеПолучателей", ИндексВСпискеПолучателей); - ВозвращаемыйСписок.Добавить(ЗначениеВыбора, - ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата(Выборка.Представление, Выборка.АдресЭП, "")); - - КонецЦикла; - - Возврат ВозвращаемыйСписок; - -КонецФункции - -&НаКлиенте -Функция ПолучитьИмяСвязаннойТаблицы(ИмяЭлемента) - - Если ИмяЭлемента = "СписокПолучателейПисьма" Тогда - Возврат "ПолучателиПисьма"; - ИначеЕсли ИмяЭлемента = "СписокПолучателейКопий" Тогда - Возврат "ПолучателиКопий"; - ИначеЕсли ИмяЭлемента = "СписокПолучателейСкрытыхКопий" Тогда - Возврат "ПолучателиСкрытыхКопий"; - Иначе - Возврат Неопределено; - КонецЕсли; - -КонецФункции - -&НаСервере -Функция ПолучитьКонтактПоАдресу(Адрес) - - Для Каждого Элемент Из СоответствияАдресовИКонтактов Цикл - Если Элемент.Представление = Адрес Тогда - Возврат Элемент.Значение; - КонецЕсли; - КонецЦикла; - - Контакт = Адрес; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ОбъектСКонтактнойИнформацией.Ссылка - |ИЗ - | Справочник.Пользователи.КонтактнаяИнформация КАК ОбъектСКонтактнойИнформацией - |ГДЕ - | ОбъектСКонтактнойИнформацией.АдресЭП = &АдресЭП - | И ОбъектСКонтактнойИнформацией.Тип = &Тип - | И (НЕ ОбъектСКонтактнойИнформацией.Ссылка.ПометкаУдаления)"; - - МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); - Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл - - Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда - Продолжить; - КонецЕсли; - - Запрос.Текст = Запрос.Текст + " - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ОбъектСКонтактнойИнформацией.Ссылка - |ИЗ - | Справочник." + ЭлементМассиваОписания.Имя + ".КонтактнаяИнформация КАК ОбъектСКонтактнойИнформацией - |ГДЕ - | ОбъектСКонтактнойИнформацией.АдресЭП = &АдресЭП - | И ОбъектСКонтактнойИнформацией.Тип = &Тип - | И (НЕ ОбъектСКонтактнойИнформацией.Ссылка.ПометкаУдаления) - |"; - - КонецЦикла; - - Запрос.УстановитьПараметр("АдресЭП", Адрес); - Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Количество() = 1 Тогда - Выборка.Следующий(); - Контакт = Выборка.Ссылка; - КонецЕсли; - - СоответствияАдресовИКонтактов.Добавить(Контакт, Адрес); - Возврат Контакт; - -КонецФункции - -&НаКлиенте -Функция ПолучитьПредставлениеИдентификаторовОснований(Знач Идентификаторы) - - Идентификаторы = СтрЗаменить(Идентификаторы, "<", " "); - Идентификаторы = СтрЗаменить(Идентификаторы, ">", " "); - Идентификаторы = СтрЗаменить(Идентификаторы, " ", " "); - Идентификаторы = СокрЛП(СтрЗаменить(Идентификаторы, " ", " ")); - Идентификаторы = СтрЗаменить(Идентификаторы, " ", Символы.ПС + " "); - - Возврат Идентификаторы; - -КонецФункции - -&НаСервере -Процедура ПреобразоватьИменаПолучателей(СтрокаИмен, ИмяТаблицы, ИмяЭлемента) - - табПолучатели = Объект[ИмяТаблицы]; - - табПолучатели.Очистить(); - Если ПустаяСтрока(СтрокаИмен) Тогда - Возврат; - КонецЕсли; - - Попытка - Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(СтрокаИмен); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,ИмяЭлемента,"Объект"); - Возврат; - КонецПопытки; - - Если Результат.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - Для Каждого Стр Из Результат Цикл - новСтр = табПолучатели.Добавить(); - новСтр.Адрес = Стр.Адрес; - новСтр.Представление = Стр.Представление; - новСтр.Контакт = ?(ПустаяСтрока(Стр.Адрес), "", ПолучитьКонтактПоАдресу(Стр.Адрес)); - КонецЦикла; - - Модифицированность = Истина; - - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект,ЭтаФорма,"ЭлектронноеПисьмоИсходящее"); - -КонецПроцедуры - -&НаКлиенте -Процедура РедактироватьСписокПолучателей(ДляПодбора,ГруппаПодбора = "") - - // Получим список адресатов - соотвТабЧастей = Новый Соответствие; - соотвТабЧастей.Вставить("Кому", Объект.ПолучателиПисьма); - соотвТабЧастей.Вставить("Копии", Объект.ПолучателиКопий); - соотвТабЧастей.Вставить("Скрытые", Объект.ПолучателиСкрытыхКопий); - соотвТабЧастей.Вставить("Ответ", Объект.ПолучателиОтвета); - - СписокВыбранных = Новый СписокЗначений; - Для Каждого ТабЧасть Из соотвТабЧастей Цикл - СписокВыбранных.Добавить( - УправлениеЭлектроннойПочтойКлиент.ТаблицуКонтактовВМассив(ТабЧасть.Значение), ТабЧасть.Ключ); - КонецЦикла; - - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); - ПараметрыОткрытия.Вставить("СписокВыбранных", СписокВыбранных); - ПараметрыОткрытия.Вставить("Предмет", Предмет); - ПараметрыОткрытия.Вставить("Письмо", Объект.Ссылка); - ПараметрыОткрытия.Вставить("ГруппаПоУмолчанию",?(ПустаяСтрока(ГруппаПодбора),НСтр("ru = 'Кому'"), ГруппаПодбора)); - - // Откроем форму для редактирования списка адресатов - ИмяОбщейФормы = ?(ДляПодбора, "ОбщаяФорма.АдреснаяКнига", "ОбщаяФорма.УточнениеКонтактов"); - Результат = ОткрытьФормуМодально(ИмяОбщейФормы, ПараметрыОткрытия); - Если (ТипЗнч(Результат) <> Тип("Массив")) И (ТипЗнч(Результат) <> Тип("Соответствие")) Тогда - Возврат; - КонецЕсли; - - // Заполним адресатов - Если ДляПодбора Тогда - ЗаполнитьПодобранныхПолучателей(соотвТабЧастей, Результат); - Иначе - ЗаполнитьУточненныеКонтакты(Результат); - КонецЕсли; - - // Установим признак модифицированности - ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоИсходящее"); - Модифицированность = Истина; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаполнитьПодобранныхПолучателей(соотвТабЧастей, Результат) - - Для Каждого ТабЧасть Из соотвТабЧастей Цикл - ТабЧасть.Значение.Очистить(); - КонецЦикла; - - Для Каждого Элемент Из Результат Цикл - - ТабЧасть = соотвТабЧастей.Получить(Элемент.Группа); - Если ТабЧасть = Неопределено Тогда - ТабЧасть = Объект.ПолучателиПисьма; - КонецЕсли; - - новСтр = ТабЧасть.Добавить(); - новСтр.Адрес = Элемент.Адрес; - новСтр.Представление = Элемент.Представление; - новСтр.Контакт = Элемент.Контакт; - - КонецЦикла; - - СформироватьСпискиПолучателей(); - -КонецПроцедуры - -&НаКлиенте -Процедура СформироватьСпискиПолучателей() - - Объект.СписокПолучателейПисьма = - ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь); - Объект.СписокПолучателейКопий = - ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиКопий, Ложь); - Объект.СписокПолучателейСкрытыхКопий = - ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиСкрытыхКопий, Ложь); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаполнитьУточненныеКонтакты(Результат) - - Объект.ПолучателиКопий.Очистить(); - Объект.ПолучателиОтвета.Очистить(); - Объект.ПолучателиПисьма.Очистить(); - Объект.ПолучателиСкрытыхКопий.Очистить(); - - Для каждого ЭлементМассива Из Результат Цикл - - Если ЭлементМассива.Группа = "Кому" Тогда - ТаблицаПолучателей = Объект.ПолучателиПисьма; - ИначеЕсли ЭлементМассива.Группа = "Копии" Тогда - ТаблицаПолучателей = Объект.ПолучателиКопий; - ИначеЕсли ЭлементМассива.Группа = "Скрытые" Тогда - ТаблицаПолучателей = Объект.ПолучателиСкрытыхКопий; - Иначе - ТаблицаПолучателей = Объект.ПолучателиОтвета; - КонецЕсли; - - СтрокаПолучатели = ТаблицаПолучателей.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаПолучатели, ЭлементМассива); - - КонецЦикла; - - СформироватьСпискиПолучателей(); - -КонецПроцедуры - -&НаСервере -Функция ВыполнитьОтправкуНаСервере() - - ПисьмоОбъект = РеквизитФормыВЗначение("Объект"); - - Попытка - ИдентификаторПисьма = Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект); - Исключение - ЗначениеВРеквизитФормы(ПисьмоОбъект, "Объект"); - Возврат КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; - - Если НЕ ПисьмоОбъект.УдалятьПослеОтправки Тогда - - ПисьмоОбъект.ИдентификаторСообщения = ИдентификаторПисьма; - ПисьмоОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено; - ПисьмоОбъект.ДатаОтправления = ТекущаяДатаСеанса(); - ПисьмоОбъект.Записать(РежимЗаписиДокумента.Запись); - ЗначениеВРеквизитФормы(ПисьмоОбъект, "Объект"); - - ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма( - Объект.Ссылка, Взаимодействия.ОпределитьПапкуДляПисьма(Объект.Ссылка)); - ТекущийСтатусПисьма = Объект.СтатусПисьма; - - Иначе - - ПисьмоОбъект.Прочитать(); - ПисьмоОбъект.Удалить(); - - КонецЕсли; - - Возврат ""; - -КонецФункции - -&НаСервере -Функция ОценитьРазмерПисьма() - - Размер = СтрДлина(Объект.Тема)*2; - Размер = Размер + - ?(Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML, - СтрДлина(Объект.ТекстHTML), - СтрДлина(Объект.Текст))*2; - - Для каждого Вложение Из Вложения Цикл - Размер = Размер + Вложение.Размер * 1.5; - КонецЦикла; - - Для каждого СтрокаТаблицыСоответствий Из ТаблицаСоответствийИменВложенийИдентификаторам Цикл - Размер = Размер + СтрокаТаблицыСоответствий.Картинка.ПолучитьДвоичныеДанные().Размер()*1.5; - КонецЦикла; - - Возврат Размер; - -КонецФункции - -///////////////////////////////////////////////////////////////////////////////// -// Управление доступностью элементов формы - -&НаКлиенте -Процедура УправлениеДоступностью() - - Элементы.РассмотретьПосле.Доступность = НаКонтроле; - -КонецПроцедуры - -&НаСервере -Процедура ОпределитьВидимостьДоступностьЭлементовВЗависимостиОтСтатусаПисьма() - - Если Объект.СтатусПисьма <> Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено Тогда - УправлениеЭлектроннойПочтой.ПолучитьДоступныеУчетныеЗаписиДляОтправки( - Элементы.ОтправительПредставление.СписокВыбора,ДоступныеДляОтправкиУчетныеЗаписи); - Иначе - - Элементы.ОтправительПредставление.ТолькоПросмотр = Истина; - Элементы.СписокПолучателейПисьма.РедактированиеТекста = Ложь; - Элементы.СписокПолучателейКопий.РедактированиеТекста = Ложь; - Элементы.СписокПолучателейСкрытыхКопий.РедактированиеТекста = Ложь; - - КонецЕсли; - - Если Объект.СтатусПисьма <> Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик Тогда - - Если Вложения.Количество() > 0 Тогда - Элементы.СтраницыВложения.ТекущаяСтраница = Элементы.СтраницаРедактирование; - Элементы.ДобавитьВложение.Доступность = Ложь; - Элементы.УдалитьВложение.Доступность = Ложь; - Элементы.ДобавитьВложениеСкрепка.Видимость = Ложь; - Иначе - Элементы.СтраницыВложения.Видимость = Ложь; - КонецЕсли; - - Если Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML Тогда - ТекстПисьма = Объект.ТекстHTML; - ТекстПисьма = Взаимодействия.ОбработатьТекстHTML(Объект.Ссылка); - Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеHTMLДокумента; - Элементы.ТекстПисьма.ТолькоПросмотр = Ложь; - Иначе - ТекстПисьма = Объект.Текст; - Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента; - Элементы.ТекстПисьма.ТолькоПросмотр = Истина; - КонецЕсли; - - Если Вложения.Количество() > 0 Тогда - Элементы.СтраницыВложения.ТекущаяСтраница = Элементы.СтраницаРедактирование; - Элементы.Вложения.ВысотаВСтрокахТаблицы = 2; - КонецЕсли; - - Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее И - НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - Элементы.Отправить.Доступность = Ложь; - КонецЕсли; - - Иначе - - Элементы.СтраницыВложения.ТекущаяСтраница = Элементы.СтраницаРедактирование; - Если Вложения.Количество() > 0 Тогда - Элементы.Вложения.ВысотаВСтрокахТаблицы = 2; - Иначе - Элементы.Вложения.ВысотаВСтрокахТаблицы = 1; - КонецЕсли; - - ОпределитьСпособРедактированияПисьма(); - - КонецЕсли; - -КонецПроцедуры - - -///////////////////////////////////////////////////////////////////////////////// -// РАБОТА С ВЛОЖЕНИЯМИ - -&НаКлиенте -Процедура ВложенияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) - - Отказ = Истина; - ДобавитьВложениеВыполнить(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВложенияПередУдалением(Элемент, Отказ) - - Если Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик") Тогда - УдалитьВложениеВыполнить(); - КонецЕсли; - - Отказ = Истина; - -КонецПроцедуры - -&НаКлиенте -Процедура ДобавитьВложениеВыполнить() - - #Если Не ВебКлиент Тогда - - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - Диалог.МножественныйВыбор = Истина; - Если Не Диалог.Выбрать() Тогда - Возврат; - КонецЕсли; - - Для Каждого ВыбранныйФайл Из Диалог.ВыбранныеФайлы Цикл - новСтр = Вложения.Добавить(); - новСтр.Расположение = 2; - новСтр.ИмяФайлаНаКомпьютере = ВыбранныйФайл; - - ИмяФайла = ""; - Расширение = ""; - ВзаимодействияКлиентСервер.ПолучитьКаталогИИмяФайла(ВыбранныйФайл, "", ИмяФайла); - новСтр.ИмяФайла = ИмяФайла; - - Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ИмяФайла); - новСтр.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); - Файл = Новый Файл(ВыбранныйФайл); - новСтр.Размер = Файл.Размер(); - новСтр.РазмерПредставление = ВзаимодействияКлиентСервер.ПолучитьСтроковоеПредставлениеРазмераФайла(новСтр.Размер); - КонецЦикла; - - #Иначе - - Адрес = ""; - ВыбранныйФайл = ""; - Если Не ПоместитьФайл(Адрес, "", ВыбранныйФайл, Истина, УникальныйИдентификатор) Тогда - Возврат; - КонецЕсли; - - новСтр = Вложения.Добавить(); - новСтр.Расположение = 4; - новСтр.ИмяФайлаНаКомпьютере = Адрес; - новСтр.ИмяФайла = ВыбранныйФайл; - - Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ВыбранныйФайл); - новСтр.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); - - ОбновитьОтображениеДанных(); - - #КонецЕсли - - ВидимостьДоступностьЭлементовВложений(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВидимостьДоступностьЭлементовВложений() - - Если Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда - Возврат; - КонецЕсли; - - Если Вложения.Количество() > 0 Тогда - Элементы.СтраницыВложения.ТекущаяСтраница = Элементы.СтраницаРедактирование; - Элементы.Вложения.ВысотаВСтрокахТаблицы = 2; - Иначе - Если Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик") Тогда - Элементы.СтраницыВложения.ТекущаяСтраница = Элементы.СтраницаДобавить; - КонецЕсли; - Элементы.Вложения.ВысотаВСтрокахТаблицы = 1; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура УдалитьВложениеВыполнить() - - ДобавитьВложениеВСписокУдаленных(); - - текДанные = Элементы.Вложения.ТекущиеДанные; - Если текДанные <> Неопределено Тогда - Индекс = Вложения.Индекс(текДанные); - Вложения.Удалить(Индекс); - ОбновитьОтображениеДанных(); - КонецЕсли; - - ВидимостьДоступностьЭлементовВложений(); - -КонецПроцедуры - -&НаКлиенте -Процедура ДобавитьВложениеВСписокУдаленных() - - текДанные = Элементы.Вложения.ТекущиеДанные; - Если (текДанные <> Неопределено) И (текДанные.Расположение = 0) Тогда - УдаленныеВложения.Добавить(текДанные.Ссылка); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьВложениеВыполнить() - - текДанные = Элементы.Вложения.ТекущиеДанные; - Если текДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Если (текДанные.Расположение = 0) ИЛИ (текДанные.Расположение = 1) Тогда - - УправлениеЭлектроннойПочтойКлиент.ОткрытьВложение(текДанные.Ссылка, УникальныйИдентификатор); - - ИначеЕсли текДанные.Расположение = 2 Тогда - - ПутьКФайлу = текДанные.ИмяФайлаНаКомпьютере; - #Если Не ВебКлиент Тогда - ЗапуститьПриложение("""" + ПутьКФайлу + """"); - #Иначе - ПолучитьФайл(ПутьКФайлу, текДанные.ИмяФайла, Истина); - #КонецЕсли - - ИначеЕсли текДанные.Расположение = 4 Тогда - - ПутьКФайлу = текДанные.ИмяФайлаНаКомпьютере; - #Если Не ВебКлиент Тогда - Если ЭтоАдресВременногоХранилища(текДанные.ИмяФайлаНаКомпьютере) Тогда - ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ИмяВременнойПапки); - ПутьКФайлу = ИмяВременнойПапки + "\" + текДанные.ИмяФайла; - ДвоичныеДанные = ПолучитьИзВременногоХранилища(текДанные.ИмяФайлаНаКомпьютере); - ДвоичныеДанные.Записать(ПутьКФайлу); - КонецЕсли; - ЗапуститьПриложение("""" + ПутьКФайлу + """"); - #Иначе - ПолучитьФайл(ПутьКФайлу, текДанные.ИмяФайла, Истина); - #КонецЕсли - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьВложения(Параметры = Неопределено) - - Если Объект.Ссылка.Пустая() И Параметры <> Неопределено Тогда - Если Параметры.Свойство("Основание") И - ТипЗнч(Параметры.Основание) = Тип("Структура") И - Параметры.Основание.Команда = "Переслать" Тогда - - табВложения = УправлениеЭлектроннойПочтой.ПолучитьВложенияЭлектронногоПисьма(Параметры.Основание.Основание, Истина); - Для Каждого Стр Из табВложения Цикл - Если ПустаяСтрока(Стр.ИДФайлаЭлектронногоПисьма) Тогда - новСтр = Вложения.Добавить(); - новСтр.Ссылка = Стр.Ссылка; - новСтр.ИмяФайла = Стр.ИмяФайла; - новСтр.ИндексКартинки = Стр.ИндексКартинки; - новСтр.Размер = Стр.Размер; - новСтр.РазмерПредставление = Стр.РазмерПредставление; - новСтр.Расположение = 1; - КонецЕсли; - КонецЦикла; - - КонецЕсли; - Иначе - - Вложения.Очистить(); - табВложения = УправлениеЭлектроннойПочтой.ПолучитьВложенияЭлектронногоПисьма(Объект.Ссылка, Истина); - Для Каждого Стр Из табВложения Цикл - Если ПустаяСтрока(Стр.ИДФайлаЭлектронногоПисьма) Тогда - новСтр = Вложения.Добавить(); - новСтр.Ссылка = Стр.Ссылка; - новСтр.ИмяФайла = Стр.ИмяФайла; - новСтр.ИндексКартинки = Стр.ИндексКартинки; - новСтр.Размер = Стр.Размер; - новСтр.РазмерПредставление = Стр.РазмерПредставление; - новСтр.ПодписанЭЦП = Стр.ПодписанЭЦП; - новСтр.Расположение = 0; - КонецЕсли; - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПрикрепитьВходящееПисьмоОснованиеКакВложениеЕслиНеобходимо(ТекущийОбъект) - - Если ТекущийОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее И - Не ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML") И - (ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") ИЛИ - ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")) И - ТипТекстаВходящегоПисьма = Перечисления.ТипыТекстовЭлектронныхПисем.HTML Тогда - - Если ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда - ТекстHTMLВходящее = Взаимодействия.СформироватьТекстHTMLДляВходящегоПисьма(ВзаимодействиеОснование, Истина, Истина); - Иначе - ТекстHTMLВходящее = Взаимодействия.СформироватьТекстHTMLДляИсходящегоПисьма(ВзаимодействиеОснование, Истина, Истина); - КонецЕсли; - - ВременныйКаталог = КаталогВременныхФайлов(); - ИмяФайла = ВременныйКаталог + НСтр("ru = 'Пересылаемое сообщение'") + ".htm"; - ФайлИсходноеСообщение = Новый ЗаписьТекста(ИмяФайла,КодировкаТекста.UTF16); - ФайлИсходноеСообщение.Записать(ТекстHTMLВходящее); - ФайлИсходноеСообщение.Закрыть(); - ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла); - АдресФайлаВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные); - - ПрисоединенныеФайлы.ДобавитьФайл( - ТекущийОбъект.Ссылка, - НСтр("ru = 'Пересылаемое сообщение'"), - "html", - ТекущаяДатаСеанса(), - ТекущаяДатаСеанса(), - АдресФайлаВХранилище, - ""); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СвойстваВложения(Команда) - - ТекущиеДанные = Элементы.Вложения.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - ТекущийИндексВКоллекции = Вложения.Индекс(ТекущиеДанные); - - Если ТекущиеДанные.Ссылка = Неопределено Тогда - Результат = Вопрос(НСтр("ru = 'Свойства файла доступны только после его записи. Записать?'"),РежимДиалогаВопрос.ДаНет); - Если Результат = КодВозвратаДиалога.Да Тогда - Записать(); - Иначе - Возврат; - КонецЕсли; - КонецЕсли; - - ТекущиеДанные = Вложения.Получить(ТекущийИндексВКоллекции); - Если ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - Элементы.Вложения.ТекущаяСтрока = ТекущиеДанные.ПолучитьИдентификатор(); - - ФайлДоступенДляРедактирования = - (Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик")); - ПараметрыФормы = Новый Структура("ПрисоединенныйФайл, ТолькоПросмотр", - ТекущиеДанные.Ссылка,НЕ ФайлДоступенДляРедактирования); - ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы,, ТекущиеДанные.Ссылка); - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////// -// ФОРМИРОВАНИЕ ТЕКСТА ПИСЬМА - -&НаСервере -Функция СформироватьТекстПисьмаВключаяПисьмоОснование(ДокументHTMLТекущееРедактирование, ТекущийОбъект) - - Выборка = Взаимодействия.ПолучитьДанныеПисьмаОснования(Объект.ВзаимодействиеОснование); - - Если ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст Тогда - - Возврат СформироватьИсходящееОбычныйТекст(Выборка, ТекущийОбъект); - - Иначе - - Возврат СформироватьИсходящееHTML(Выборка,ДокументHTMLТекущееРедактирование, ТекущийОбъект); - - КонецЕсли; - -КонецФункции - -&НаСервере -Функция СформироватьИсходящееHTML(Выборка,ДокументHTMLТекущееРедактирование, ТекущийОбъект) - - //Получим ДокументHTML входящего письма - Если Выборка.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст Тогда - ДокументHTML = Взаимодействия.ПолучитьДокументHTMLИзОбычногоТекста(Выборка.Текст); - Иначе - ДокументHTML = Взаимодействия.ПолучитьОбъектДокументHTMLИзТекстаHTML(Выборка.ТекстHTML); - КонецЕсли; - - ЭлементТелоПисьма = ДокументHTML.Тело; - Если ЭлементТелоПисьма = Неопределено Тогда - Если ДокументHTMLТекущееРедактирование = Неопределено Тогда - Возврат ТекущийОбъект.ТекстHTML; - Иначе - Возврат Взаимодействия.ПолучитьТекстHTMLИзОбъектаДокументHTML(ДокументHTMLТекущееРедактирование); - КонецЕсли - КонецЕсли; - - Если ДокументHTMLТекущееРедактирование = Неопределено Тогда - ДокументHTMLТекущееРедактирование = Взаимодействия.ПолучитьОбъектДокументHTMLИзТекстаHTML(ТекущийОбъект.ТекстHTML); - КонецЕсли; - - МассивДочернихУзловТела = Взаимодействия.ПолучитьМассивДочернихУзловСодержащихHTML(ЭлементТелоПисьма); - - //Добавляем текст отредактированный в поле форматированного документа - Если ДокументHTMLТекущееРедактирование.Тело <> Неопределено Тогда - Для каждого ДочернийУзел Из ДокументHTMLТекущееРедактирование.Тело.ДочерниеУзлы Цикл - - ЭлементТелоПисьма.ДобавитьДочерний(ДокументHTML.ИмпортироватьУзел(ДочернийУзел,Истина)); - - КонецЦикла; - КонецЕсли; - - ЭлементDIV = Взаимодействия.ДобавитьЭлементСАтрибутами( - ЭлементТелоПисьма, - "div", - Новый Структура("style", "border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt")); - - Для каждого ДочернийУзел Из МассивДочернихУзловТела Цикл - - ЭлементDIV.ДобавитьДочерний(ДочернийУзел); - - КонецЦикла; - - //Подготовим шапку письма основания - //Горизонтальный разделитель - ЭлементHR = Взаимодействия.ДобавитьЭлементСАтрибутами( - ЭлементDIV, - "hr", - Новый Структура("size, width, align, tabindex", "2", "100%", "center", "-1")); - Взаимодействия.ВставитьЭлементHTMLПервымДочернимЭлементом(ЭлементDIV ,ЭлементHR, МассивДочернихУзловТела); - - //Данные письма основания - ЭлементШрифт = Взаимодействия.СформироватьЭлементДанныхШапкиПисьма(ЭлементDIV, Выборка); - Взаимодействия.ВставитьЭлементHTMLПервымДочернимЭлементом(ЭлементDIV, ЭлементШрифт, МассивДочернихУзловТела); - - Возврат Взаимодействия.ПолучитьТекстHTMLИзОбъектаДокументHTML(ДокументHTML); - -КонецФункции - -&НаСервере -Функция СформироватьИсходящееОбычныйТекст(ВыборкаДанныеВходящегоПисьма, ТекущийОбъект) - - //Формирование шапки входящего письма - СтрокаШапка = НСтр("ru = '-----Пересылаемое сообщение-----'"); - - СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'От: '") + ВыборкаДанныеВходящегоПисьма.ОтправительПредставление + - ?(ВыборкаДанныеВходящегоПисьма.ИмяОбъектаМетаданных = "ЭлектронноеПисьмоВходящее", - "[" + ВыборкаДанныеВходящегоПисьма.ОтправительАдрес +"]", - ""); - - СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Отправлено: '") + Формат(ВыборкаДанныеВходящегоПисьма.Дата,"ДФ='dd MMMM yyyy'"); - - СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Кому: '") + - Взаимодействия.ПолучитьПредставленияПолучателейВходящегоПисьма( - ВыборкаДанныеВходящегоПисьма.ПолучателиПисьма.Выгрузить()); - - ТаблицаПолучателейКопий = ВыборкаДанныеВходящегоПисьма.ПолучателиКопий.Выгрузить(); - - Если ТаблицаПолучателейКопий.Количество() > 0 Тогда - СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Копии: '") + - Взаимодействия.ПолучитьПредставленияПолучателейВходящегоПисьма(ТаблицаПолучателейКопий); - КонецЕсли; - - СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Тема: '") + ВыборкаДанныеВходящегоПисьма.Тема; - - //Преобразование к обычному тексту текста HTML если это необходимо - Если ВыборкаДанныеВходящегоПисьма.ТипТекста <> Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст Тогда - - ТекстВходящегоПисьма = Взаимодействия.ПолучитьОбычныйТекстИзHTML(ВыборкаДанныеВходящегоПисьма.ТекстHTML); - - Иначе - - ТекстВходящегоПисьма = ВыборкаДанныеВходящегоПисьма.Текст - - КонецЕсли; - - Возврат ТекущийОбъект.Текст + Символы.ПС + Символы.ПС + СтрокаШапка + Символы.ПС + Символы.ПС + ТекстВходящегоПисьма; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -1205,20 +19,18 @@ //подготовить оповещения взаимодействий Взаимодействия.ПодготовитьОповещения(ЭтаФорма,Параметры); - // Свойства + // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект, "СтраницаДополнительныеРеквизиты"); - // Конец Свойства - - Взаимодействия.УстановитьВидимостьСтраницДопРеквизитов(ЭтаФорма, Ложь); + // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) - ПриСозданииЧтенииНаСервере(); + ПриСозданииЧтенииНаСервере(); -КонецПроцедуры +КонецПроцедуры &НаКлиенте Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) @@ -1237,11 +49,11 @@ #Если Не ВебКлиент Тогда - Для Каждого Стр Из Вложения Цикл - Если Стр.Расположение = 2 Тогда - Данные = Новый ДвоичныеДанные(Стр.ИмяФайлаНаКомпьютере); - Стр.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(Данные, ""); - Стр.Расположение = 4; + Для Каждого СтрокаТаблицыВложений Из Вложения Цикл + Если СтрокаТаблицыВложений.Расположение = 2 Тогда + Данные = Новый ДвоичныеДанные(СтрокаТаблицыВложений.ИмяФайлаНаКомпьютере); + СтрокаТаблицыВложений.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(Данные, ""); + СтрокаТаблицыВложений.Расположение = 4; КонецЕсли; КонецЦикла; #КонецЕсли @@ -1309,7 +121,7 @@ ДокументHTML = Взаимодействия.ПолучитьОбъектДокументHTMLИзТекстаHTML(ТекущийОбъект.ТекстHTML); Взаимодействия.ЗаменитьИменаКартинокНаИдентификаторыПочтовыхВложенийВHTML( - ДокументHTML, ТаблицаСоответствийИменВложенийИдентификаторам.Выгрузить()); + ДокументHTML, ТаблицаСоответствийИменВложенийИдентификаторам.Выгрузить()); ДокументHTMLТекущегоПисьмаПодготовлен = Истина; КонецЕсли; @@ -1365,9 +177,9 @@ ТекущийОбъект.Размер = ОценитьРазмерПисьма(); - // Свойства + // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект); - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ЭтаФорма, ТекущийОбъект); @@ -1443,30 +255,30 @@ КонецЕсли; - Для Каждого Стр Из Вложения Цикл + Для Каждого СтрокаТаблицыВложений Из Вложения Цикл Размер = 0; - ИмяФайла = Стр.ИмяФайла; + ИмяФайла = СтрокаТаблицыВложений.ИмяФайла; - Если Стр.Расположение = 4 Тогда + Если СтрокаТаблицыВложений.Расположение = 4 Тогда // из временного хранилища УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища( - Письмо, Стр.ИмяФайлаНаКомпьютере, ИмяФайла, Размер); + Письмо, СтрокаТаблицыВложений.ИмяФайлаНаКомпьютере, ИмяФайла, Размер); - ИначеЕсли Стр.Расположение = 3 Тогда + ИначеЕсли СтрокаТаблицыВложений.Расположение = 3 Тогда // из файла на сервере - ИначеЕсли Стр.Расположение = 1 Тогда + ИначеЕсли СтрокаТаблицыВложений.Расположение = 1 Тогда УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаСкопировавВложениеДругогоПисьма( - Письмо, Стр.Ссылка, УникальныйИдентификатор); + Письмо, СтрокаТаблицыВложений.Ссылка, УникальныйИдентификатор); - ИначеЕсли Стр.Расположение = 0 Тогда + ИначеЕсли СтрокаТаблицыВложений.Расположение = 0 Тогда // перезаписать вложение КонецЕсли; - Стр.Расположение = 0; + СтрокаТаблицыВложений.Расположение = 0; КонецЦикла; @@ -1500,6 +312,8 @@ КонецЕсли; + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + КонецПроцедуры &НаКлиенте @@ -1517,11 +331,11 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - // Свойства + // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); КонецЕсли; - // Конец Свойства + // Конец СтандартныеПодсистемы.Свойства ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма, ИмяСобытия, Параметр, Источник); @@ -1553,134 +367,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ - -&НаКлиенте -Процедура ИзменитьКодировку(Команда) - - СписокКодировок = УправлениеЭлектроннойПочтой.ПолучитьСписокКодировок(); - ВыбраннаяКодировка = СписокКодировок.ВыбратьЭлемент("Выберите кодировку", - СписокКодировок.НайтиПоЗначению(НРег(Объект.Кодировка))); - - Если ВыбраннаяКодировка <> Неопределено Тогда - Кодировка = ВыбраннаяКодировка.Значение; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОтправитьПереслатьВыполнить(Команда) - - ОчиститьСообщения(); - - Если Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда - ПереслатьВыполнить(); - Иначе - - Если ПроверитьЗаполнениеСписковАдресатов() Тогда - Возврат; - КонецЕсли; - - Если Объект.ПолучателиПисьма.Количество() = 0 Тогда - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru='Необходимо указать хотя бы одного получателя письма.'"),, "Объект.СписокПолучателейПисьма"); - Возврат; - - КонецЕсли; - - ОтправитьВыполнить(); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура HTML(Команда) - - Если ФорматСообщения <> ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") Тогда - - ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML"); - ФорматСообщенияПриИзменении(); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОбычныйТекст(Команда) - - Если ФорматСообщения <> ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") Тогда - - ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст"); - ФорматСообщенияПриИзменении(); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОтображатьТекстПисьмаОснования(Команда) - - Элементы.ОтображатьТекстПисьмаОснования.Пометка = НЕ Элементы.ОтображатьТекстПисьмаОснования.Пометка; - Элементы.ГруппаВходящее.Видимость = Элементы.ОтображатьТекстПисьмаОснования.Пометка; - Объект.ОтображатьТелоИсходногоПисьма = Не Объект.ОтображатьТелоИсходногоПисьма; - -КонецПроцедуры - -&НаКлиенте -Процедура УточнитьКонтакты(Команда) - - Если Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда - - РедактироватьСписокПолучателей(Истина,НСтр("ru = 'Копии'")); - - Иначе - - РедактироватьСписокПолучателей(Ложь); - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - - -&НаКлиенте -Процедура ПараметрыПисьма(Команда) - - ТекстИдентификаторы = Новый ТекстовыйДокумент; - ТекстИдентификаторы.ДобавитьСтроку("Идентификатор сообщения: " + Объект.ИдентификаторСообщения); - ТекстИдентификаторы.ДобавитьСтроку("Идентификатор основания: " + Объект.ИдентификаторОснования); - ТекстИдентификаторы.ДобавитьСтроку("Идентификаторы оснований: " + - ПолучитьПредставлениеИдентификаторовОснований(Объект.ИдентификаторыОснований)); - - СтруктураПараметры = Новый Структура; - СтруктураПараметры.Вставить("Создано", Объект.Дата); - СтруктураПараметры.Вставить("Отправлено", Объект.ДатаОтправления); - СтруктураПараметры.Вставить("УведомитьОДоставке", Объект.УведомитьОДоставке); - СтруктураПараметры.Вставить("УведомитьОПрочтении", Объект.УведомитьОПрочтении); - СтруктураПараметры.Вставить("ЗаголовкиИнтернета", ТекстИдентификаторы); - СтруктураПараметры.Вставить("Письмо", Объект.Ссылка); - СтруктураПараметры.Вставить("ТипПисьма", "ЭлектронноеПисьмоИсходящее"); - СтруктураПараметры.Вставить("Кодировка", Объект.Кодировка); - СтруктураПараметры.Вставить("ВнутреннийНомер", Объект.Номер); - СтруктураПараметры.Вставить("ВключатьТелоИсходногоПисьма", Объект.ВключатьТелоИсходногоПисьма); - СтруктураПараметры.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); - - Результат = ОткрытьФормуМодально("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма", - СтруктураПараметры, ЭтаФорма); - Если Результат <> Неопределено И Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда - - Объект.УведомитьОДоставке = Результат.УведомитьОДоставке; - Объект.УведомитьОПрочтении = Результат.УведомитьОПрочтении; - Объект.ВключатьТелоИсходногоПисьма = Результат.ВключатьТелоИсходногоПисьма; - Модифицированность = Истина; - - КонецЕсли; - -КонецПроцедуры +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура РассмотретьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -1705,12 +392,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ВложенияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ОткрытьВложениеВыполнить(); -КонецПроцедуры - &НаКлиенте Процедура НаКонтролеПриИзменении() @@ -1931,6 +612,18 @@ КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Вложения + +&НаКлиенте +Процедура ВложенияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ОткрытьВложениеВыполнить(); + +КонецПроцедуры + &НаКлиенте Процедура ВложенияПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) @@ -1969,20 +662,20 @@ Для Каждого ВыбранныйФайл Из МассивИменФайлов Цикл - новСтр = Вложения.Добавить(); - новСтр.Расположение = 2; - новСтр.ИмяФайлаНаКомпьютере = ВыбранныйФайл; + НоваяСтрока = Вложения.Добавить(); + НоваяСтрока.Расположение = 2; + НоваяСтрока.ИмяФайлаНаКомпьютере = ВыбранныйФайл; ИмяФайла = ""; Расширение = ""; ВзаимодействияКлиентСервер.ПолучитьКаталогИИмяФайла(ВыбранныйФайл, "", ИмяФайла); - новСтр.ИмяФайла = ИмяФайла; + НоваяСтрока.ИмяФайла = ИмяФайла; - Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ИмяФайла); - новСтр.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); - Файл = Новый Файл(ВыбранныйФайл); - новСтр.Размер = Файл.Размер(); - новСтр.РазмерПредставление = ВзаимодействияКлиентСервер.ПолучитьСтроковоеПредставлениеРазмераФайла(новСтр.Размер); + Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ИмяФайла); + НоваяСтрока.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); + Файл = Новый Файл(ВыбранныйФайл); + НоваяСтрока.Размер = Файл.Размер(); + НоваяСтрока.РазмерПредставление = ВзаимодействияКлиентСервер.ПолучитьСтроковоеПредставлениеРазмераФайла(НоваяСтрока.Размер); КонецЦикла; @@ -1990,9 +683,134 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ИзменитьКодировку(Команда) + + СписокКодировок = УправлениеЭлектроннойПочтой.ПолучитьСписокКодировок(); + ВыбраннаяКодировка = СписокКодировок.ВыбратьЭлемент("Выберите кодировку", + СписокКодировок.НайтиПоЗначению(НРег(Объект.Кодировка))); + + Если ВыбраннаяКодировка <> Неопределено Тогда + Кодировка = ВыбраннаяКодировка.Значение; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОтправитьПереслатьВыполнить(Команда) + + ОчиститьСообщения(); + + Если Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда + ПереслатьВыполнить(); + Иначе + + Если ПроверитьЗаполнениеСписковАдресатов() Тогда + Возврат; + КонецЕсли; + + Если Объект.ПолучателиПисьма.Количество() = 0 Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru='Необходимо указать хотя бы одного получателя письма.'"),, "Объект.СписокПолучателейПисьма"); + Возврат; + + КонецЕсли; + + ОтправитьВыполнить(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура HTML(Команда) + + Если ФорматСообщения <> ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") Тогда + + ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML"); + ФорматСообщенияПриИзменении(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбычныйТекст(Команда) + + Если ФорматСообщения <> ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") Тогда + + ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст"); + ФорматСообщенияПриИзменении(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОтображатьТекстПисьмаОснования(Команда) + + Элементы.ОтображатьТекстПисьмаОснования.Пометка = НЕ Элементы.ОтображатьТекстПисьмаОснования.Пометка; + Элементы.ГруппаВходящее.Видимость = Элементы.ОтображатьТекстПисьмаОснования.Пометка; + Объект.ОтображатьТелоИсходногоПисьма = Не Объект.ОтображатьТелоИсходногоПисьма; + +КонецПроцедуры + +&НаКлиенте +Процедура УточнитьКонтакты(Команда) + + Если Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда + + РедактироватьСписокПолучателей(Истина,НСтр("ru = 'Копии'")); + + Иначе + + РедактироватьСписокПолучателей(Ложь); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПараметрыПисьма(Команда) + + ТекстИдентификаторы = Новый ТекстовыйДокумент; + ТекстИдентификаторы.ДобавитьСтроку("Идентификатор сообщения: " + Объект.ИдентификаторСообщения); + ТекстИдентификаторы.ДобавитьСтроку("Идентификатор основания: " + Объект.ИдентификаторОснования); + ТекстИдентификаторы.ДобавитьСтроку("Идентификаторы оснований: " + + ПолучитьПредставлениеИдентификаторовОснований(Объект.ИдентификаторыОснований)); + + СтруктураПараметры = Новый Структура; + СтруктураПараметры.Вставить("Создано", Объект.Дата); + СтруктураПараметры.Вставить("Отправлено", Объект.ДатаОтправления); + СтруктураПараметры.Вставить("УведомитьОДоставке", Объект.УведомитьОДоставке); + СтруктураПараметры.Вставить("УведомитьОПрочтении", Объект.УведомитьОПрочтении); + СтруктураПараметры.Вставить("ЗаголовкиИнтернета", ТекстИдентификаторы); + СтруктураПараметры.Вставить("Письмо", Объект.Ссылка); + СтруктураПараметры.Вставить("ТипПисьма", "ЭлектронноеПисьмоИсходящее"); + СтруктураПараметры.Вставить("Кодировка", Объект.Кодировка); + СтруктураПараметры.Вставить("ВнутреннийНомер", Объект.Номер); + СтруктураПараметры.Вставить("ВключатьТелоИсходногоПисьма", Объект.ВключатьТелоИсходногоПисьма); + СтруктураПараметры.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); + + Результат = ОткрытьФормуМодально("ЖурналДокументов.Взаимодействия.Форма.ПараметрыЭлектронногоПисьма", + СтруктураПараметры, ЭтаФорма); + Если Результат <> Неопределено И Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда + + Объект.УведомитьОДоставке = Результат.УведомитьОДоставке; + Объект.УведомитьОПрочтении = Результат.УведомитьОПрочтении; + Объект.ВключатьТелоИсходногоПисьма = Результат.ВключатьТелоИсходногоПисьма; + Модифицированность = Истина; + + КонецЕсли; + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ПОДСИСТЕМЫ СВОЙСТВ +// Команды подсистемы свойств &НаКлиенте Процедура Подключаемый_РедактироватьСоставСвойств() @@ -2007,3 +825,1204 @@ УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма, РеквизитФормыВЗначение("Объект")); КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +///////////////////////////////////////////////////////////////////////////////// +// Управление доступностью элементов формы + +&НаКлиенте +Процедура УправлениеДоступностью() + + Элементы.РассмотретьПосле.Доступность = НаКонтроле; + +КонецПроцедуры + +&НаСервере +Процедура ОпределитьВидимостьДоступностьЭлементовВЗависимостиОтСтатусаПисьма() + + Если Объект.СтатусПисьма <> Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено Тогда + УправлениеЭлектроннойПочтой.ПолучитьДоступныеУчетныеЗаписиДляОтправки( + Элементы.ОтправительПредставление.СписокВыбора,ДоступныеДляОтправкиУчетныеЗаписи); + Иначе + + Элементы.ОтправительПредставление.ТолькоПросмотр = Истина; + Элементы.СписокПолучателейПисьма.РедактированиеТекста = Ложь; + Элементы.СписокПолучателейКопий.РедактированиеТекста = Ложь; + Элементы.СписокПолучателейСкрытыхКопий.РедактированиеТекста = Ложь; + + КонецЕсли; + + Если Объект.СтатусПисьма <> Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик Тогда + + Если Вложения.Количество() > 0 Тогда + Элементы.СтраницыВложения.ТекущаяСтраница = Элементы.СтраницаРедактирование; + Элементы.ДобавитьВложение.Доступность = Ложь; + Элементы.УдалитьВложение.Доступность = Ложь; + Элементы.ДобавитьВложениеСкрепка.Видимость = Ложь; + Иначе + Элементы.СтраницыВложения.Видимость = Ложь; + КонецЕсли; + + Если Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML Тогда + ТекстПисьма = Объект.ТекстHTML; + ТекстПисьма = Взаимодействия.ОбработатьТекстHTML(Объект.Ссылка); + Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеHTMLДокумента; + Элементы.ТекстПисьма.ТолькоПросмотр = Ложь; + Иначе + ТекстПисьма = Объект.Текст; + Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента; + Элементы.ТекстПисьма.ТолькоПросмотр = Истина; + КонецЕсли; + + Если Вложения.Количество() > 0 Тогда + Элементы.СтраницыВложения.ТекущаяСтраница = Элементы.СтраницаРедактирование; + Элементы.Вложения.ВысотаВСтрокахТаблицы = 2; + КонецЕсли; + + Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее И + НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Элементы.Отправить.Доступность = Ложь; + КонецЕсли; + + Иначе + + Элементы.СтраницыВложения.ТекущаяСтраница = Элементы.СтраницаРедактирование; + Если Вложения.Количество() > 0 Тогда + Элементы.Вложения.ВысотаВСтрокахТаблицы = 2; + Иначе + Элементы.Вложения.ВысотаВСтрокахТаблицы = 1; + КонецЕсли; + + ОпределитьСпособРедактированияПисьма(); + + КонецЕсли; + +КонецПроцедуры + + +///////////////////////////////////////////////////////////////////////////////// +// Работа с вложениями + +&НаКлиенте +Процедура ВложенияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + + Отказ = Истина; + ДобавитьВложениеВыполнить(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВложенияПередУдалением(Элемент, Отказ) + + Если Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик") Тогда + УдалитьВложениеВыполнить(); + КонецЕсли; + + Отказ = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьВложениеВыполнить() + + #Если Не ВебКлиент Тогда + + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + Диалог.МножественныйВыбор = Истина; + Если Не Диалог.Выбрать() Тогда + Возврат; + КонецЕсли; + + Для Каждого ВыбранныйФайл Из Диалог.ВыбранныеФайлы Цикл + НоваяСтрока = Вложения.Добавить(); + НоваяСтрока.Расположение = 2; + НоваяСтрока.ИмяФайлаНаКомпьютере = ВыбранныйФайл; + + ИмяФайла = ""; + Расширение = ""; + ВзаимодействияКлиентСервер.ПолучитьКаталогИИмяФайла(ВыбранныйФайл, "", ИмяФайла); + НоваяСтрока.ИмяФайла = ИмяФайла; + + Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ИмяФайла); + НоваяСтрока.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); + Файл = Новый Файл(ВыбранныйФайл); + НоваяСтрока.Размер = Файл.Размер(); + НоваяСтрока.РазмерПредставление = ВзаимодействияКлиентСервер.ПолучитьСтроковоеПредставлениеРазмераФайла(НоваяСтрока.Размер); + КонецЦикла; + + #Иначе + + Адрес = ""; + ВыбранныйФайл = ""; + Если Не ПоместитьФайл(Адрес, "", ВыбранныйФайл, Истина, УникальныйИдентификатор) Тогда + Возврат; + КонецЕсли; + + НоваяСтрока = Вложения.Добавить(); + НоваяСтрока.Расположение = 4; + НоваяСтрока.ИмяФайлаНаКомпьютере = Адрес; + НоваяСтрока.ИмяФайла = ВыбранныйФайл; + + Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ВыбранныйФайл); + НоваяСтрока.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); + + ОбновитьОтображениеДанных(); + + #КонецЕсли + + ВидимостьДоступностьЭлементовВложений(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВидимостьДоступностьЭлементовВложений() + + Если Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено") Тогда + Возврат; + КонецЕсли; + + Если Вложения.Количество() > 0 Тогда + Элементы.СтраницыВложения.ТекущаяСтраница = Элементы.СтраницаРедактирование; + Элементы.Вложения.ВысотаВСтрокахТаблицы = 2; + Иначе + Если Объект.СтатусПисьма <> ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик") Тогда + Элементы.СтраницыВложения.ТекущаяСтраница = Элементы.СтраницаДобавить; + КонецЕсли; + Элементы.Вложения.ВысотаВСтрокахТаблицы = 1; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьВложениеВыполнить() + + ДобавитьВложениеВСписокУдаленных(); + + текДанные = Элементы.Вложения.ТекущиеДанные; + Если текДанные <> Неопределено Тогда + Индекс = Вложения.Индекс(текДанные); + Вложения.Удалить(Индекс); + ОбновитьОтображениеДанных(); + КонецЕсли; + + ВидимостьДоступностьЭлементовВложений(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьВложениеВСписокУдаленных() + + текДанные = Элементы.Вложения.ТекущиеДанные; + Если (текДанные <> Неопределено) И (текДанные.Расположение = 0) Тогда + УдаленныеВложения.Добавить(текДанные.Ссылка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьВложениеВыполнить() + + текДанные = Элементы.Вложения.ТекущиеДанные; + Если текДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если (текДанные.Расположение = 0) ИЛИ (текДанные.Расположение = 1) Тогда + + УправлениеЭлектроннойПочтойКлиент.ОткрытьВложение(текДанные.Ссылка, УникальныйИдентификатор); + + ИначеЕсли текДанные.Расположение = 2 Тогда + + ПутьКФайлу = текДанные.ИмяФайлаНаКомпьютере; + #Если Не ВебКлиент Тогда + ЗапуститьПриложение("""" + ПутьКФайлу + """"); + #Иначе + ПолучитьФайл(ПутьКФайлу, текДанные.ИмяФайла, Истина); + #КонецЕсли + + ИначеЕсли текДанные.Расположение = 4 Тогда + + ПутьКФайлу = текДанные.ИмяФайлаНаКомпьютере; + #Если Не ВебКлиент Тогда + Если ЭтоАдресВременногоХранилища(текДанные.ИмяФайлаНаКомпьютере) Тогда + ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(ИмяВременнойПапки); + ПутьКФайлу = ИмяВременнойПапки + "\" + текДанные.ИмяФайла; + ДвоичныеДанные = ПолучитьИзВременногоХранилища(текДанные.ИмяФайлаНаКомпьютере); + ДвоичныеДанные.Записать(ПутьКФайлу); + КонецЕсли; + ЗапуститьПриложение("""" + ПутьКФайлу + """"); + #Иначе + ПолучитьФайл(ПутьКФайлу, текДанные.ИмяФайла, Истина); + #КонецЕсли + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьВложения(Параметры = Неопределено) + + Если Объект.Ссылка.Пустая() И Параметры <> Неопределено Тогда + Если Параметры.Свойство("Основание") И + ТипЗнч(Параметры.Основание) = Тип("Структура") И + Параметры.Основание.Команда = "Переслать" Тогда + + табВложения = УправлениеЭлектроннойПочтой.ПолучитьВложенияЭлектронногоПисьма(Параметры.Основание.Основание, Истина); + Для Каждого СтрокаТаблицыВложений Из табВложения Цикл + Если ПустаяСтрока(СтрокаТаблицыВложений.ИДФайлаЭлектронногоПисьма) Тогда + НоваяСтрока = Вложения.Добавить(); + НоваяСтрока.Ссылка = СтрокаТаблицыВложений.Ссылка; + НоваяСтрока.ИмяФайла = СтрокаТаблицыВложений.ИмяФайла; + НоваяСтрока.ИндексКартинки = СтрокаТаблицыВложений.ИндексКартинки; + НоваяСтрока.Размер = СтрокаТаблицыВложений.Размер; + НоваяСтрока.РазмерПредставление = СтрокаТаблицыВложений.РазмерПредставление; + НоваяСтрока.Расположение = 1; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + Иначе + + Вложения.Очистить(); + табВложения = УправлениеЭлектроннойПочтой.ПолучитьВложенияЭлектронногоПисьма(Объект.Ссылка, Истина); + Для Каждого СтрокаТаблицыВложений Из табВложения Цикл + Если ПустаяСтрока(СтрокаТаблицыВложений.ИДФайлаЭлектронногоПисьма) Тогда + НоваяСтрока = Вложения.Добавить(); + НоваяСтрока.Ссылка = СтрокаТаблицыВложений.Ссылка; + НоваяСтрока.ИмяФайла = СтрокаТаблицыВложений.ИмяФайла; + НоваяСтрока.ИндексКартинки = СтрокаТаблицыВложений.ИндексКартинки; + НоваяСтрока.Размер = СтрокаТаблицыВложений.Размер; + НоваяСтрока.РазмерПредставление = СтрокаТаблицыВложений.РазмерПредставление; + НоваяСтрока.ПодписанЭЦП = СтрокаТаблицыВложений.ПодписанЭЦП; + НоваяСтрока.Расположение = 0; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПрикрепитьВходящееПисьмоОснованиеКакВложениеЕслиНеобходимо(ТекущийОбъект) + + Если ТекущийОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее И + Не ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML") И + (ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") ИЛИ + ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")) И + ТипТекстаВходящегоПисьма = Перечисления.ТипыТекстовЭлектронныхПисем.HTML Тогда + + Если ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда + ТекстHTMLВходящее = Взаимодействия.СформироватьТекстHTMLДляВходящегоПисьма(ВзаимодействиеОснование, Истина, Истина); + Иначе + ТекстHTMLВходящее = Взаимодействия.СформироватьТекстHTMLДляИсходящегоПисьма(ВзаимодействиеОснование, Истина, Истина); + КонецЕсли; + + ВременныйКаталог = КаталогВременныхФайлов(); + ИмяФайла = ВременныйКаталог + НСтр("ru = 'Пересылаемое сообщение'") + ".htm"; + ФайлИсходноеСообщение = Новый ЗаписьТекста(ИмяФайла,КодировкаТекста.UTF16); + ФайлИсходноеСообщение.Записать(ТекстHTMLВходящее); + ФайлИсходноеСообщение.Закрыть(); + ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла); + АдресФайлаВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные); + + ПрисоединенныеФайлы.ДобавитьФайл( + ТекущийОбъект.Ссылка, + НСтр("ru = 'Пересылаемое сообщение'"), + "html", + ТекущаяДатаСеанса(), + ТекущаяДатаСеанса(), + АдресФайлаВХранилище, + ""); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СвойстваВложения(Команда) + + ТекущиеДанные = Элементы.Вложения.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекущийИндексВКоллекции = Вложения.Индекс(ТекущиеДанные); + + Если ТекущиеДанные.Ссылка = Неопределено Тогда + Результат = Вопрос(НСтр("ru = 'Свойства файла доступны только после его записи. Записать?'"),РежимДиалогаВопрос.ДаНет); + Если Результат = КодВозвратаДиалога.Да Тогда + Записать(); + Иначе + Возврат; + КонецЕсли; + КонецЕсли; + + ТекущиеДанные = Вложения.Получить(ТекущийИндексВКоллекции); + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + Элементы.Вложения.ТекущаяСтрока = ТекущиеДанные.ПолучитьИдентификатор(); + + ФайлДоступенДляРедактирования = + (Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик")); + ПараметрыФормы = Новый Структура("ПрисоединенныйФайл, ТолькоПросмотр", + ТекущиеДанные.Ссылка,НЕ ФайлДоступенДляРедактирования); + ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы,, ТекущиеДанные.Ссылка); + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////// +// Формирование текста письма + +&НаСервере +Функция СформироватьТекстПисьмаВключаяПисьмоОснование(ДокументHTMLТекущееРедактирование, ТекущийОбъект) + + Выборка = Взаимодействия.ПолучитьДанныеПисьмаОснования(Объект.ВзаимодействиеОснование); + + Если ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст Тогда + + Возврат СформироватьИсходящееОбычныйТекст(Выборка, ТекущийОбъект); + + Иначе + + Возврат СформироватьИсходящееHTML(Выборка,ДокументHTMLТекущееРедактирование, ТекущийОбъект); + + КонецЕсли; + +КонецФункции + +&НаСервере +Функция СформироватьИсходящееHTML(Выборка,ДокументHTMLТекущееРедактирование, ТекущийОбъект) + + //Получим ДокументHTML входящего письма + Если Выборка.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст Тогда + ДокументHTML = Взаимодействия.ПолучитьДокументHTMLИзОбычногоТекста(Выборка.Текст); + Иначе + ДокументHTML = Взаимодействия.ПолучитьОбъектДокументHTMLИзТекстаHTML(Выборка.ТекстHTML); + КонецЕсли; + + ЭлементТелоПисьма = ДокументHTML.Тело; + Если ЭлементТелоПисьма = Неопределено Тогда + Если ДокументHTMLТекущееРедактирование = Неопределено Тогда + Возврат ТекущийОбъект.ТекстHTML; + Иначе + Возврат Взаимодействия.ПолучитьТекстHTMLИзОбъектаДокументHTML(ДокументHTMLТекущееРедактирование); + КонецЕсли + КонецЕсли; + + Если ДокументHTMLТекущееРедактирование = Неопределено Тогда + ДокументHTMLТекущееРедактирование = Взаимодействия.ПолучитьОбъектДокументHTMLИзТекстаHTML(ТекущийОбъект.ТекстHTML); + КонецЕсли; + + МассивДочернихУзловТела = Взаимодействия.ПолучитьМассивДочернихУзловСодержащихHTML(ЭлементТелоПисьма); + + //Добавляем текст отредактированный в поле форматированного документа + Если ДокументHTMLТекущееРедактирование.Тело <> Неопределено Тогда + Для каждого ДочернийУзел Из ДокументHTMLТекущееРедактирование.Тело.ДочерниеУзлы Цикл + + ЭлементТелоПисьма.ДобавитьДочерний(ДокументHTML.ИмпортироватьУзел(ДочернийУзел,Истина)); + + КонецЦикла; + КонецЕсли; + + ЭлементDIV = Взаимодействия.ДобавитьЭлементСАтрибутами( + ЭлементТелоПисьма, + "div", + Новый Структура("style", "border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt")); + + Для каждого ДочернийУзел Из МассивДочернихУзловТела Цикл + + ЭлементDIV.ДобавитьДочерний(ДочернийУзел); + + КонецЦикла; + + //Подготовим шапку письма основания + //Горизонтальный разделитель + ЭлементHR = Взаимодействия.ДобавитьЭлементСАтрибутами( + ЭлементDIV, + "hr", + Новый Структура("size, width, align, tabindex", "2", "100%", "center", "-1")); + Взаимодействия.ВставитьЭлементHTMLПервымДочернимЭлементом(ЭлементDIV ,ЭлементHR, МассивДочернихУзловТела); + + //Данные письма основания + ЭлементШрифт = Взаимодействия.СформироватьЭлементДанныхШапкиПисьма(ЭлементDIV, Выборка); + Взаимодействия.ВставитьЭлементHTMLПервымДочернимЭлементом(ЭлементDIV, ЭлементШрифт, МассивДочернихУзловТела); + + Возврат Взаимодействия.ПолучитьТекстHTMLИзОбъектаДокументHTML(ДокументHTML); + +КонецФункции + +&НаСервере +Функция СформироватьИсходящееОбычныйТекст(ВыборкаДанныеВходящегоПисьма, ТекущийОбъект) + + //Формирование шапки входящего письма + СтрокаШапка = НСтр("ru = '-----Пересылаемое сообщение-----'"); + + СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'От: '") + ВыборкаДанныеВходящегоПисьма.ОтправительПредставление + + ?(ВыборкаДанныеВходящегоПисьма.ИмяОбъектаМетаданных = "ЭлектронноеПисьмоВходящее", + "[" + ВыборкаДанныеВходящегоПисьма.ОтправительАдрес +"]", + ""); + + СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Отправлено: '") + Формат(ВыборкаДанныеВходящегоПисьма.Дата,"ДФ='dd MMMM yyyy'"); + + СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Кому: '") + + Взаимодействия.ПолучитьПредставленияПолучателейВходящегоПисьма( + ВыборкаДанныеВходящегоПисьма.ПолучателиПисьма.Выгрузить()); + + ТаблицаПолучателейКопий = ВыборкаДанныеВходящегоПисьма.ПолучателиКопий.Выгрузить(); + + Если ТаблицаПолучателейКопий.Количество() > 0 Тогда + СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Копии: '") + + Взаимодействия.ПолучитьПредставленияПолучателейВходящегоПисьма(ТаблицаПолучателейКопий); + КонецЕсли; + + СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Тема: '") + ВыборкаДанныеВходящегоПисьма.Тема; + + //Преобразование к обычному тексту текста HTML если это необходимо + Если ВыборкаДанныеВходящегоПисьма.ТипТекста <> Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст Тогда + + ТекстВходящегоПисьма = Взаимодействия.ПолучитьОбычныйТекстИзHTML(ВыборкаДанныеВходящегоПисьма.ТекстHTML); + + Иначе + + ТекстВходящегоПисьма = ВыборкаДанныеВходящегоПисьма.Текст + + КонецЕсли; + + Возврат ТекущийОбъект.Текст + Символы.ПС + Символы.ПС + СтрокаШапка + Символы.ПС + Символы.ПС + ТекстВходящегоПисьма; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Прочее + +// Определяет способ редактирования письма и +// отображает текст письма согласно способу редактирования +&НаСервере +Процедура ОпределитьСпособРедактированияПисьма() + + Если Объект.ТипТекста.Пустая() Тогда + + ФорматСообщения = Взаимодействия.ФорматСообщенияПоУмолчанию(Пользователи.ТекущийПользователь()); + + // Если тип текста не был заполнен, то может оказаться, что формат выбран некорректно, поэтому: + // 1) Если текст заполнен, но не заполнен HTML - то формат сообщения исправляем на "текст" + // 2) Если HTML заполнен, но не заполнен текст - то формат сообщения исправляем на "HTML" + Если ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст + И СокрЛП(Объект.Текст) = "" И СокрЛП(Объект.ТекстHTML) <> "" Тогда + ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML; + ИначеЕсли ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML + И СокрЛП(Объект.Текст) <> "" И СокрЛП(Объект.ТекстHTML) = "" Тогда + ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; + КонецЕсли; + + Иначе + Если Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст Тогда + ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; + Иначе + ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML; + КонецЕсли; + + КонецЕсли; + + Если Объект.Ссылка.Пустая() Тогда + + Если Не ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML") + И ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда + ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст; + КонецЕсли; + + ПараметрыРаботыПользователяПользователя = + Взаимодействия.ПолучитьПараметрыРаботыПользователяДляИсходящегоЭлектронногоПисьма( + Объект.УчетнаяЗапись, + ФорматСообщения, + ?(Объект.ВзаимодействиеОснование = Неопределено, Истина, Ложь)); + + Объект.УведомитьОДоставке = ПараметрыРаботыПользователяПользователя.УведомитьОДоставке; + Объект.УведомитьОПрочтении = ПараметрыРаботыПользователяПользователя.УведомитьОПрочтении; + Объект.ВключатьТелоИсходногоПисьма = ПараметрыРаботыПользователяПользователя.ВключатьТелоИсходногоПисьма; + Объект.ОтображатьТелоИсходногоПисьма = ПараметрыРаботыПользователяПользователя.ОтображатьТелоИсходногоПисьма; + + КонецЕсли; + + Если ФорматСообщения = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда + + Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаФорматированныйДокумент; + Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML; + Если Не Объект.Ссылка.Пустая() Тогда + СтруктураВложений = Новый Структура; + Объект.ТекстHTML = Взаимодействия.ОбработатьТекстHTMLДляФорматированногоДокумента( + Объект.Ссылка, Объект.ТекстHTML,СтруктураВложений); + ТекстПисьмаФорматированныйДокумент.УстановитьHTML(Объект.ТекстHTML, СтруктураВложений); + ИначеЕсли ПараметрыРаботыПользователяПользователя.Подпись <> Неопределено Тогда + ТекстПисьмаФорматированныйДокумент = ПараметрыРаботыПользователяПользователя.Подпись; + КонецЕсли; + + Иначе + + Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаОбычныйТекст; + Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента; + Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст; + ТекстПисьма = Объект.Текст; + Если Объект.Ссылка.Пустая() И ПараметрыРаботыПользователяПользователя.Подпись <> Неопределено Тогда + + ТекстПисьма = ПараметрыРаботыПользователяПользователя.Подпись; + + КонецЕсли; + Объект.Кодировка = "UTF-8"; + + КонецЕсли; + + Элементы.ФорматСообщения.Видимость = Истина; + Элементы.ФорматСообщения.Заголовок = ФорматСообщения; + +КонецПроцедуры + +//Обрабатывает переданные параметры при создании письма +&НаСервере +Процедура ОбработатьПереданныеПараметры(Параметры) + + Если Объект.Ссылка.Пустая() Тогда + + Если Параметры.Свойство("Вложения") И Параметры.Вложения <> Неопределено Тогда + + Для каждого Вложение Из Параметры.Вложения Цикл + + НоваяСтрока = Вложения.Добавить(); + Если ЭтоАдресВременногоХранилища(Вложение.Значение) Тогда + НоваяСтрока.Расположение = 4; + Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(Вложение.Представление); + Иначе + НоваяСтрока.Расположение = 2; + ИмяФайла = ""; + Расширение = ""; + ВзаимодействияКлиентСервер.ПолучитьКаталогИИмяФайла(Вложение.Значение, "", ИмяФайла); + Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ИмяФайла); + КонецЕсли; + + НоваяСтрока.ИмяФайлаНаКомпьютере = Вложение.Значение; + НоваяСтрока.ИмяФайла = Вложение.Представление; + НоваяСтрока.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); + + КонецЦикла; + + КонецЕсли; + + Если НЕ ПустаяСтрока(Параметры.Тема) Тогда + Объект.Тема = Параметры.Тема; + КонецЕсли; + + Если НЕ ПустаяСтрока(Параметры.Тело) Тогда + Объект.Текст = Параметры.Тело; + КонецЕсли; + + Если Параметры.Свойство("Кому") И Не ПустаяСтрока(Параметры.Кому) Тогда + Объект.СписокПолучателейПисьма = Параметры.Кому; + НоваяСтрока = Объект.ПолучателиПисьма.Добавить(); + НоваяСтрока.Адрес = Параметры.Кому; + КонецЕсли; + + Если НЕ Параметры.УчетнаяЗапись.Пустая() Тогда + + Объект.УчетнаяЗапись = Параметры.УчетнаяЗапись; + РеквизитыОтправителя = ОбщегоНазначения.ПолучитьЗначенияРеквизитов( + Параметры.УчетнаяЗапись,"Ссылка, ИмяПользователя, АдресЭлектроннойПочты"); + Объект.ОтправительПредставление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата( + РеквизитыОтправителя.ИмяПользователя, РеквизитыОтправителя.АдресЭлектроннойПочты, ""); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +//Определяет необходимость отображения письма основания +&НаСервере +Процедура ОтобразитьПисьмоОснование() + + Если Не Объект.ВзаимодействиеОснование = Неопределено И НЕ Объект.ВзаимодействиеОснование.Пустая() + И Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик + И (ТипЗнч(Объект.ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") + ИЛИ ТипЗнч(Объект.ВзаимодействиеОснование) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")) Тогда + + ЗначенияРеквизитовВходящегоПисьма = ОбщегоНазначения.ПолучитьЗначенияРеквизитов( + Объект.ВзаимодействиеОснование,"ТипТекста,ТекстHTML,Текст"); + + ТипТекстаВходящегоПисьма = ?(ЗначенияРеквизитовВходящегоПисьма.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст, + Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст, + Перечисления.ТипыТекстовЭлектронныхПисем.HTML); + + Если ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML") Тогда + + Если ЗначенияРеквизитовВходящегоПисьма.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст Тогда + + ТекстВходящегоПисьма = ЗначенияРеквизитовВходящегоПисьма.Текст; + Элементы.ТекстВходящегоПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента; + + Иначе + + ТекстВходящегоПисьма = Взаимодействия.ОбработатьТекстHTML(Объект.ВзаимодействиеОснование); + Элементы.ТекстВходящегоПисьма.Вид = ВидПоляФормы.ПолеHTMLДокумента; + Элементы.ТекстВходящегоПисьма.ТолькоПросмотр = Ложь + + КонецЕсли; + + Если Не Объект.ОтображатьТелоИсходногоПисьма Тогда + Элементы.ГруппаВходящее.Видимость = Ложь; + Иначе + Элементы.ОтображатьТекстПисьмаОснования.Пометка = Истина; + КонецЕсли; + + Иначе + + Элементы.ГруппаВходящее.Видимость = Ложь; + ТекстПисьма = СформироватьТекстПисьмаВключаяПисьмоОснование(Неопределено, Объект); + + КонецЕсли; + + Иначе + + Элементы.ГруппаВходящее.Видимость = Ложь; + Элементы.ОтображатьТекстПисьмаОснования.Видимость = Ложь; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОтправитьВыполнить() + + ОчиститьСообщения(); + + НайденныеСтроки = ДоступныеДляОтправкиУчетныеЗаписи.НайтиСтроки(Новый Структура("УчетнаяЗапись", Объект.УчетнаяЗапись)); + Если НайденныеСтроки.Количество() = 0 Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru ='Выбранная учетная запись не доступна для отправки писем'"),, "ОтправительПредставление", "Объект"); + Возврат; + Иначе + + Если НайденныеСтроки[0].УдалятьПослеОтправки Тогда + СписокКнопок = Новый СписокЗначений; + СписокКнопок.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Отправить'")); + СписокКнопок.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Отправить и сохранить'")); + СписокКнопок.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'")); + + Результат = Вопрос(НСтр("ru = 'Для данной учетной записи не предусмотрено сохранение отправленных писем в системе. + |Продолжить?'"), + СписокКнопок,, КодВозвратаДиалога.Да, + НСтр("ru = 'Отправка письма'")); + + Если Результат = КодВозвратаДиалога.Да Тогда + Объект.УдалятьПослеОтправки = Истина; + ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда + Объект.УдалятьПослеОтправки = Ложь; + ИначеЕсли Результат = КодВозвратаДиалога.Отмена Тогда + Возврат; + КонецЕсли; + + КонецЕсли; + + Если Не ОтправлятьСообщенияСразу Тогда + ОтправлятьСообщенияСразу = ( + Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Исходящее")); + КонецЕсли; + + КонецЕсли; + + ВыполняетсяОтправка = Истина; + + Если Объект.Ссылка.Пустая() ИЛИ + Модифицированность ИЛИ + Объект.ВключатьТелоИсходногоПисьма ИЛИ + (Объект.СтатусПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Черновик")) Тогда + Записать(); + КонецЕсли; + + ВыполняетсяОтправка = Ложь; + + Если ОтправлятьСообщенияСразу Тогда + Результат = ВыполнитьОтправкуНаСервере(); + Иначе + Закрыть(); + Возврат; + КонецЕсли; + + Если Результат = "" Тогда + Закрыть(); + Иначе + Предупреждение(Результат); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПереслатьВыполнить() + + Основание = Новый Структура("Основание,Команда", Объект.Ссылка, "Переслать"); + ПараметрыОткрытия = Новый Структура("Основание", Основание); + ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.Форма.ФормаДокумента", ПараметрыОткрытия); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьЗаголовокКнопкиПоУмолчанию() + + Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено Тогда + Элементы.Отправить.Заголовок = Нстр("ru = 'Переслать'"); + ИначеЕсли Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее Тогда + Элементы.Отправить.Заголовок = Нстр("ru = 'Отправить сейчас'"); + ИначеЕсли Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик Тогда + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + НастройкиРаботыСПочтой = Взаимодействия.ПолучитьНастройкуРаботаСПочтой(); + Если НастройкиРаботыСПочтой.Свойство("ОтправлятьСообщенияСразу") И НастройкиРаботыСПочтой.ОтправлятьСообщенияСразу Тогда + ОтправлятьСообщенияСразу = Истина; + КонецЕсли; + КонецЕсли; + + Элементы.Отправить.Заголовок = Нстр("ru = 'Отправить'"); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ФорматСообщенияПриИзменении() + + Если Объект.ТипТекста <> ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.ПростойТекст") И + ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст") Тогда + + Если Не ВзаимодействияКлиент.ПриИзмененииФорматаСообщенияНаОбычныйТекст() Тогда + ФорматСообщения = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML"); + Возврат; + КонецЕсли; + + ТекстПисьма = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст(); + Объект.ТипТекста = ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.ПростойТекст"); + ТекстПисьмаФорматированныйДокумент.Удалить(); + Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента; + Объект.ТекстHTML = ""; + Объект.Кодировка = "UTF-8"; + Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаОбычныйТекст; + + Иначе + + ТекстПисьмаФорматированныйДокумент.Добавить(ТекстПисьма); + Объект.Текст = ""; + Объект.ТипТекста = ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.HTML"); + Элементы.СтраницыТекстПисьма.ТекущаяСтраница = Элементы.СтраницаФорматированныйДокумент; + + КонецЕсли; + + Элементы.ФорматСообщения.Заголовок = ФорматСообщения; + +КонецПроцедуры + +&НаСервере +Процедура ПриСозданииЧтенииНаСервере() + + Взаимодействия.УстановитьЗаголовокФормыЭлектронногоПисьма(ЭтаФорма); + УстановитьЗаголовокКнопкиПоУмолчанию(); + ОбработатьПереданныеПараметры(Параметры); + ЗаполнитьВложения(Параметры); + + Для Каждого ПолучательПисьма Из Объект.ПолучателиПисьма Цикл + Если ЗначениеЗаполнено(ПолучательПисьма.Контакт) Тогда + СоответствияАдресовИКонтактов.Добавить(ПолучательПисьма.Контакт, ПолучательПисьма.Адрес); + КонецЕсли; + КонецЦикла; + + ОпределитьВидимостьДоступностьЭлементовВЗависимостиОтСтатусаПисьма(); + ОтобразитьПисьмоОснование(); + + НаКонтроле = НЕ Объект.Рассмотрено; + + Если Не Объект.Ссылка.Пустая() Тогда + Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Объект.Ссылка); + ТекущийСтатусПисьма = Объект.СтатусПисьма; + КонецЕсли; + + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоИсходящее"); + + Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено Тогда + Элементы.СписокПолучателейКопий.КнопкаВыбора = Ложь; + Элементы.СписокПолучателейПисьма.КнопкаВыбора = Ложь; + Элементы.СписокПолучателейСкрытыхКопий.КнопкаВыбора = Ложь; + Элементы.Тема.РедактированиеТекста = Ложь; + КонецЕсли; + + Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПолучитьДанныеВыбораДляЭлектронногоПисьма(Текст, ИндексВСпискеПолучателей) + + ВозвращаемыйСписок = Новый СписокЗначений; + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); + + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | Таблица.Ссылка КАК Контакт, + | ПРЕДСТАВЛЕНИЕ(Таблица.Ссылка) КАК Представление, + | ТаблицаКонтактнаяИнформация.АдресЭП КАК АдресЭП + |ИЗ + | Справочник.Пользователи КАК Таблица + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи.КонтактнаяИнформация КАК ТаблицаКонтактнаяИнформация + | ПО (ТаблицаКонтактнаяИнформация.Ссылка = Таблица.Ссылка) + | И (ТаблицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) И (ТаблицаКонтактнаяИнформация.АдресЭП <> """")) + |ГДЕ + | (Таблица.Наименование ПОДОБНО &ВведеннаяСтрока + | ИЛИ ТаблицаКонтактнаяИнформация.АдресЭП ПОДОБНО &ВведеннаяСтрока + | ИЛИ ТаблицаКонтактнаяИнформация.ДоменноеИмяСервера ПОДОБНО &ВведеннаяСтрока + | ИЛИ ТаблицаКонтактнаяИнформация.Представление ПОДОБНО &ВведеннаяСтрока)"; + + Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл + + Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда + Продолжить; + Иначе + + УсловиеПолейВводаПоСтроке = ""; + СписокПолей = Взаимодействия.ПолучитьСвойствоМетаданныхПоТипу(ЭлементМассиваОписания.Тип, "ВводПоСтроке"); + Для Каждого Поле Из СписокПолей Цикл + УсловиеПолейВводаПоСтроке = УсловиеПолейВводаПоСтроке + " ИЛИ Таблица." + Поле.Имя + " ПОДОБНО &ВведеннаяСтрока"; + КонецЦикла; + + ТекстЗапроса = ТекстЗапроса + " + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | Таблица.Ссылка КАК Контакт, + | ПРЕДСТАВЛЕНИЕ(Таблица.Ссылка) КАК Представление, + | ТаблицаКонтактнаяИнформация.АдресЭП КАК АдресЭП + |ИЗ + | Справочник." + ЭлементМассиваОписания.Имя + " КАК Таблица + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник." + ЭлементМассиваОписания.Имя + ".КонтактнаяИнформация КАК ТаблицаКонтактнаяИнформация + | ПО (ТаблицаКонтактнаяИнформация.Ссылка = Таблица.Ссылка) + | И (ТаблицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) И (ТаблицаКонтактнаяИнформация.АдресЭП <> """")) + |ГДЕ + | (ТаблицаКонтактнаяИнформация.АдресЭП ПОДОБНО &ВведеннаяСтрока + | ИЛИ ТаблицаКонтактнаяИнформация.ДоменноеИмяСервера ПОДОБНО &ВведеннаяСтрока + | ИЛИ ТаблицаКонтактнаяИнформация.Представление ПОДОБНО &ВведеннаяСтрока + |" + УсловиеПолейВводаПоСтроке + ") + |"; + + КонецЕсли; + + КонецЦикла; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ВведеннаяСтрока", Текст + "%"); + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат ВозвращаемыйСписок; + КонецЕсли; + + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + + ЗначениеВыбора = Новый Структура; + ЗначениеВыбора.Вставить("Контакт", Выборка.Контакт); + ЗначениеВыбора.Вставить("Адрес", Выборка.АдресЭП); + ЗначениеВыбора.Вставить("Представление", Выборка.Представление); + ЗначениеВыбора.Вставить("ИндексВСпискеПолучателей", ИндексВСпискеПолучателей); + ВозвращаемыйСписок.Добавить(ЗначениеВыбора, + ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата(Выборка.Представление, Выборка.АдресЭП, "")); + + КонецЦикла; + + Возврат ВозвращаемыйСписок; + +КонецФункции + +&НаКлиенте +Функция ПолучитьИмяСвязаннойТаблицы(ИмяЭлемента) + + Если ИмяЭлемента = "СписокПолучателейПисьма" Тогда + Возврат "ПолучателиПисьма"; + ИначеЕсли ИмяЭлемента = "СписокПолучателейКопий" Тогда + Возврат "ПолучателиКопий"; + ИначеЕсли ИмяЭлемента = "СписокПолучателейСкрытыхКопий" Тогда + Возврат "ПолучателиСкрытыхКопий"; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +&НаСервере +Функция ПолучитьКонтактПоАдресу(Адрес) + + Для Каждого Элемент Из СоответствияАдресовИКонтактов Цикл + Если Элемент.Представление = Адрес Тогда + Возврат Элемент.Значение; + КонецЕсли; + КонецЦикла; + + Контакт = Адрес; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ОбъектСКонтактнойИнформацией.Ссылка + |ИЗ + | Справочник.Пользователи.КонтактнаяИнформация КАК ОбъектСКонтактнойИнформацией + |ГДЕ + | ОбъектСКонтактнойИнформацией.АдресЭП = &АдресЭП + | И ОбъектСКонтактнойИнформацией.Тип = &Тип + | И (НЕ ОбъектСКонтактнойИнформацией.Ссылка.ПометкаУдаления)"; + + МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); + Для каждого ЭлементМассиваОписания Из МассивОписанияТиповКонтактов Цикл + + Если ЭлементМассиваОписания.Имя = "Пользователи" Тогда + Продолжить; + КонецЕсли; + + Запрос.Текст = Запрос.Текст + " + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ОбъектСКонтактнойИнформацией.Ссылка + |ИЗ + | Справочник." + ЭлементМассиваОписания.Имя + ".КонтактнаяИнформация КАК ОбъектСКонтактнойИнформацией + |ГДЕ + | ОбъектСКонтактнойИнформацией.АдресЭП = &АдресЭП + | И ОбъектСКонтактнойИнформацией.Тип = &Тип + | И (НЕ ОбъектСКонтактнойИнформацией.Ссылка.ПометкаУдаления) + |"; + + КонецЦикла; + + Запрос.УстановитьПараметр("АдресЭП", Адрес); + Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Количество() = 1 Тогда + Выборка.Следующий(); + Контакт = Выборка.Ссылка; + КонецЕсли; + + СоответствияАдресовИКонтактов.Добавить(Контакт, Адрес); + Возврат Контакт; + +КонецФункции + +&НаКлиенте +Функция ПолучитьПредставлениеИдентификаторовОснований(Знач Идентификаторы) + + Идентификаторы = СтрЗаменить(Идентификаторы, "<", " "); + Идентификаторы = СтрЗаменить(Идентификаторы, ">", " "); + Идентификаторы = СтрЗаменить(Идентификаторы, " ", " "); + Идентификаторы = СокрЛП(СтрЗаменить(Идентификаторы, " ", " ")); + Идентификаторы = СтрЗаменить(Идентификаторы, " ", Символы.ПС + " "); + + Возврат Идентификаторы; + +КонецФункции + +&НаСервере +Процедура ПреобразоватьИменаПолучателей(СтрокаИмен, ИмяТаблицы, ИмяЭлемента) + + ТаблицаПолучатели = Объект[ИмяТаблицы]; + + ТаблицаПолучатели.Очистить(); + Если ПустаяСтрока(СтрокаИмен) Тогда + Возврат; + КонецЕсли; + + Попытка + Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(СтрокаИмен); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,ИмяЭлемента,"Объект"); + Возврат; + КонецПопытки; + + Если Результат.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого ЭлементМассива Из Результат Цикл + НоваяСтрока = ТаблицаПолучатели.Добавить(); + НоваяСтрока.Адрес = ЭлементМассива.Адрес; + НоваяСтрока.Представление = ЭлементМассива.Представление; + НоваяСтрока.Контакт = ?(ПустаяСтрока(ЭлементМассива.Адрес), "", ПолучитьКонтактПоАдресу(ЭлементМассива.Адрес)); + КонецЦикла; + + Модифицированность = Истина; + + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект,ЭтаФорма,"ЭлектронноеПисьмоИсходящее"); + +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьСписокПолучателей(ДляПодбора,ГруппаПодбора = "") + + // Получим список адресатов + СоответствиеТабличныхЧастей = Новый Соответствие; + СоответствиеТабличныхЧастей.Вставить("Кому", Объект.ПолучателиПисьма); + СоответствиеТабличныхЧастей.Вставить("Копии", Объект.ПолучателиКопий); + СоответствиеТабличныхЧастей.Вставить("Скрытые", Объект.ПолучателиСкрытыхКопий); + СоответствиеТабличныхЧастей.Вставить("Ответ", Объект.ПолучателиОтвета); + + СписокВыбранных = Новый СписокЗначений; + Для Каждого ТабличнаяЧасть Из СоответствиеТабличныхЧастей Цикл + СписокВыбранных.Добавить( + УправлениеЭлектроннойПочтойКлиент.ТаблицуКонтактовВМассив(ТабличнаяЧасть.Значение), ТабличнаяЧасть.Ключ); + КонецЦикла; + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("УчетнаяЗапись", Объект.УчетнаяЗапись); + ПараметрыОткрытия.Вставить("СписокВыбранных", СписокВыбранных); + ПараметрыОткрытия.Вставить("Предмет", Предмет); + ПараметрыОткрытия.Вставить("Письмо", Объект.Ссылка); + ПараметрыОткрытия.Вставить("ГруппаПоУмолчанию",?(ПустаяСтрока(ГруппаПодбора),НСтр("ru = 'Кому'"), ГруппаПодбора)); + + // Откроем форму для редактирования списка адресатов + ИмяОбщейФормы = ?(ДляПодбора, "ОбщаяФорма.АдреснаяКнига", "ОбщаяФорма.УточнениеКонтактов"); + Результат = ОткрытьФормуМодально(ИмяОбщейФормы, ПараметрыОткрытия); + Если (ТипЗнч(Результат) <> Тип("Массив")) И (ТипЗнч(Результат) <> Тип("Соответствие")) Тогда + Возврат; + КонецЕсли; + + // Заполним адресатов + Если ДляПодбора Тогда + ЗаполнитьПодобранныхПолучателей(СоответствиеТабличныхЧастей, Результат); + Иначе + ЗаполнитьУточненныеКонтакты(Результат); + КонецЕсли; + + // Установим признак модифицированности + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоИсходящее"); + Модифицированность = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьПодобранныхПолучателей(СоответствиеТабличныхЧастей, Результат) + + Для Каждого ТабличнаяЧасть Из СоответствиеТабличныхЧастей Цикл + ТабличнаяЧасть.Значение.Очистить(); + КонецЦикла; + + Для Каждого Элемент Из Результат Цикл + + ТабличнаяЧасть = СоответствиеТабличныхЧастей.Получить(Элемент.Группа); + Если ТабличнаяЧасть = Неопределено Тогда + ТабличнаяЧасть = Объект.ПолучателиПисьма; + КонецЕсли; + + НоваяСтрока = ТабличнаяЧасть.Добавить(); + НоваяСтрока.Адрес = Элемент.Адрес; + НоваяСтрока.Представление = Элемент.Представление; + НоваяСтрока.Контакт = Элемент.Контакт; + + КонецЦикла; + + СформироватьСпискиПолучателей(); + +КонецПроцедуры + +&НаКлиенте +Процедура СформироватьСпискиПолучателей() + + Объект.СписокПолучателейПисьма = + ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь); + Объект.СписокПолучателейКопий = + ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиКопий, Ложь); + Объект.СписокПолучателейСкрытыхКопий = + ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиСкрытыхКопий, Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьУточненныеКонтакты(Результат) + + Объект.ПолучателиКопий.Очистить(); + Объект.ПолучателиОтвета.Очистить(); + Объект.ПолучателиПисьма.Очистить(); + Объект.ПолучателиСкрытыхКопий.Очистить(); + + Для каждого ЭлементМассива Из Результат Цикл + + Если ЭлементМассива.Группа = "Кому" Тогда + ТаблицаПолучателей = Объект.ПолучателиПисьма; + ИначеЕсли ЭлементМассива.Группа = "Копии" Тогда + ТаблицаПолучателей = Объект.ПолучателиКопий; + ИначеЕсли ЭлементМассива.Группа = "Скрытые" Тогда + ТаблицаПолучателей = Объект.ПолучателиСкрытыхКопий; + Иначе + ТаблицаПолучателей = Объект.ПолучателиОтвета; + КонецЕсли; + + СтрокаПолучатели = ТаблицаПолучателей.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаПолучатели, ЭлементМассива); + + КонецЦикла; + + СформироватьСпискиПолучателей(); + +КонецПроцедуры + +&НаСервере +Функция ВыполнитьОтправкуНаСервере() + + ПисьмоОбъект = РеквизитФормыВЗначение("Объект"); + + Попытка + ИдентификаторПисьма = Взаимодействия.ВыполнитьОтправкуПисьма(ПисьмоОбъект); + Исключение + ЗначениеВРеквизитФормы(ПисьмоОбъект, "Объект"); + Возврат КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если НЕ ПисьмоОбъект.УдалятьПослеОтправки Тогда + + ПисьмоОбъект.ИдентификаторСообщения = ИдентификаторПисьма; + ПисьмоОбъект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено; + ПисьмоОбъект.ДатаОтправления = ТекущаяДатаСеанса(); + ПисьмоОбъект.Записать(РежимЗаписиДокумента.Запись); + ЗначениеВРеквизитФормы(ПисьмоОбъект, "Объект"); + + ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма( + Объект.Ссылка, Взаимодействия.ОпределитьПапкуДляПисьма(Объект.Ссылка)); + ТекущийСтатусПисьма = Объект.СтатусПисьма; + + Иначе + + ПисьмоОбъект.Прочитать(); + ПисьмоОбъект.Удалить(); + + КонецЕсли; + + Возврат ""; + +КонецФункции + +&НаСервере +Функция ОценитьРазмерПисьма() + + Размер = СтрДлина(Объект.Тема)*2; + Размер = Размер + + ?(Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML, + СтрДлина(Объект.ТекстHTML), + СтрДлина(Объект.Текст))*2; + + Для каждого Вложение Из Вложения Цикл + Размер = Размер + Вложение.Размер * 1.5; + КонецЦикла; + + Для каждого СтрокаТаблицыСоответствий Из ТаблицаСоответствийИменВложенийИдентификаторам Цикл + Размер = Размер + СтрокаТаблицыСоответствий.Картинка.ПолучитьДвоичныеДанные().Размер()*1.5; + КонецЦикла; + + Возврат Размер; + +КонецФункции + + + diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl index ca88365b0..4dfd30a2d 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + Функция ПолучитьКонтакты(Ссылка) Экспорт ТекстЗапроса = @@ -53,6 +56,9 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Взаимодействия.ОбработкаПолученияДанныхВыбора( diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl index 5661ed05c..e18a3395c 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl @@ -1,11 +1,80 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + + +//Вызывается при заполнении документа на основании +Процедура ЗаполнитьКонтакты(Контакты) Экспорт + + Если Не Взаимодействия.КонтактыЗаполнены(Контакты) Тогда + Возврат; + КонецЕсли; + + Для Каждого СтрокаТаблицы Из Контакты Цикл + + Адрес = Неопределено; + + Если ТипЗнч(СтрокаТаблицы) = Тип("Структура") Тогда + // В документ попадут только те контакты, для которых заданы адреса электронной почты + МассивАдресов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаТаблицы.Адрес,","); + Для каждого ЭлементМассиваАдресов Из МассивАдресов Цикл + Попытка + Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ЭлементМассиваАдресов); + Если Результат.Количество() > 0 И НЕ ПустаяСтрока(Результат[0]) Тогда + Адрес = Результат[0]; + КонецЕсли; + Исключение + КонецПопытки; + Если НЕ Адрес = Неопределено Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Если Адрес = Неопределено И ЗначениеЗаполнено(СтрокаТаблицы.Контакт) Тогда + МассивАдресовЭП = ВзаимодействияВызовСервера.ПолучитьАдресаЭлектроннойПочтыКонтакта(СтрокаТаблицы.Контакт); + Если МассивАдресовЭП.Количество() > 0 Тогда + Адрес = Новый Структура("Адрес",МассивАдресовЭП[0].АдресЭП); + КонецЕсли; + КонецЕсли; + + Если НЕ Адрес = Неопределено Тогда + + НоваяСтрока = ПолучателиПисьма.Добавить(); + + НоваяСтрока.Контакт = СтрокаТаблицы.Контакт; + НоваяСтрока.Представление = СтрокаТаблицы.Представление; + НоваяСтрока.Адрес = Адрес.Адрес; + Иначе + Продолжить; + КонецЕсли; + + Иначе + НоваяСтрока = ПолучателиПисьма.Добавить(); + НоваяСтрока.Контакт = СтрокаТаблицы; + КонецЕсли; + + Взаимодействия.ДозаполнитьПоляКонтактов(НоваяСтрока.Контакт, НоваяСтрока.Представление, + НоваяСтрока.Адрес, Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); + + КонецЦикла; + + СформироватьПредставленияКонтактов(); + +КонецПроцедуры + +//Формирует представления контактов для всех типов получателей письма +Процедура СформироватьПредставленияКонтактов() Экспорт + + СписокПолучателейПисьма = + ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(ПолучателиПисьма, Ложь); + СписокПолучателейКопий = + ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(ПолучателиКопий, Ложь); + СписокПолучателейСкрытыхКопий = + ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(ПолучателиСкрытыхКопий, Ложь); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ - - - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ПриЗаписи(Отказ) @@ -20,6 +89,10 @@ Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + ЭтотОбъект.ДополнительныеСвойства.Вставить("ПометкаУдаления", ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "ПометкаУдаления")); @@ -59,7 +132,9 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + + Процедура ЗаполнитьНаОснованииПисьма(Основание, ТипОтвета) @@ -111,18 +186,18 @@ Процедура ДобавитьПолучателя(Адрес, Представление, Контакт) - новСтр = ПолучателиПисьма.Добавить(); - новСтр.Адрес = Адрес; - новСтр.Контакт = Контакт; - новСтр.Представление = Представление; + НоваяСтрока = ПолучателиПисьма.Добавить(); + НоваяСтрока.Адрес = Адрес; + НоваяСтрока.Контакт = Контакт; + НоваяСтрока.Представление = Представление; КонецПроцедуры Процедура ДобавитьПолучателейИзТаблицы(Таблица) - Для Каждого Стр Из Таблица Цикл - новСтр = ПолучателиПисьма.Добавить(); - ЗаполнитьЗначенияСвойств(новСтр, Стр); + Для Каждого СтрокаТаблицы Из Таблица Цикл + НоваяСтрока = ПолучателиПисьма.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы); КонецЦикла; КонецПроцедуры @@ -237,78 +312,3 @@ СписокПолучателейПисьма = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(ПолучателиПисьма, Ложь); КонецПроцедуры - - -//Вызывается при заполнении документа на основании -Процедура ЗаполнитьКонтакты(Контакты) Экспорт - - Если Не Взаимодействия.КонтактыЗаполнены(Контакты) Тогда - Возврат; - КонецЕсли; - - Для Каждого Стр Из Контакты Цикл - - Адрес = Неопределено; - - Если ТипЗнч(Стр) = Тип("Структура") Тогда - // В документ попадут только те контакты, для которых заданы адреса электронной почты - МассивАдресов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Стр.Адрес,","); - Для каждого ЭлементМассиваАдресов Из МассивАдресов Цикл - Попытка - Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ЭлементМассиваАдресов); - Если Результат.Количество() > 0 И НЕ ПустаяСтрока(Результат[0]) Тогда - Адрес = Результат[0]; - КонецЕсли; - Исключение - КонецПопытки; - Если НЕ Адрес = Неопределено Тогда - Прервать; - КонецЕсли; - КонецЦикла; - - Если Адрес = Неопределено И ЗначениеЗаполнено(Стр.Контакт) Тогда - МассивАдресовЭП = ВзаимодействияВызовСервера.ПолучитьАдресаЭлектроннойПочтыКонтакта(Стр.Контакт); - Если МассивАдресовЭП.Количество() > 0 Тогда - Адрес = Новый Структура("Адрес",МассивАдресовЭП[0].АдресЭП); - КонецЕсли; - КонецЕсли; - - Если НЕ Адрес = Неопределено Тогда - - новСтр = ПолучателиПисьма.Добавить(); - - новСтр.Контакт = Стр.Контакт; - новСтр.Представление = Стр.Представление; - новСтр.Адрес = Адрес.Адрес; - Иначе - Продолжить; - КонецЕсли; - - Иначе - новСтр = ПолучателиПисьма.Добавить(); - новСтр.Контакт = Стр; - КонецЕсли; - - Взаимодействия.ДозаполнитьПоляКонтактов(новСтр.Контакт, новСтр.Представление, - новСтр.Адрес, Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); - - КонецЦикла; - - СформироватьПредставленияКонтактов(); - -КонецПроцедуры - -//Формирует представления контактов для всех типов получателей письма -Процедура СформироватьПредставленияКонтактов() Экспорт - - СписокПолучателейПисьма = - ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(ПолучателиПисьма, Ложь); - СписокПолучателейКопий = - ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(ПолучателиКопий, Ложь); - СписокПолучателейСкрытыхКопий = - ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(ПолучателиСкрытыхКопий, Ложь); - -КонецПроцедуры - - - diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo index b2fb556dd..b89cfbd67 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ЭлектронноеПисьмоИсходящее.mdo @@ -699,6 +699,28 @@ Use + + Комментарий + + ru + Комментарий + + + String + + + + ru + Произвольный текст + + true + true + + + + Use + Use + ФормаДокумента diff --git a/SSL/src/Enums/ВидыДнейПроизводственногоКалендаря/ВидыДнейПроизводственногоКалендаря.mdo b/SSL/src/Enums/ВидыДнейПроизводственногоКалендаря/ВидыДнейПроизводственногоКалендаря.mdo new file mode 100644 index 000000000..bd2f8ad6f --- /dev/null +++ b/SSL/src/Enums/ВидыДнейПроизводственногоКалендаря/ВидыДнейПроизводственногоКалендаря.mdo @@ -0,0 +1,66 @@ + + + + + + + + ВидыДнейПроизводственногоКалендаря + + ru + Виды дней производственного календаря + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Рабочий + + ru + Рабочий + + + + Суббота + + ru + Суббота + + + + Воскресенье + + ru + Воскресенье + + + + Предпраздничный + + ru + Предпраздничный + + + + Праздник + + ru + Праздник + + + diff --git a/SSL/src/Enums/ВидыКалендарей/ВидыКалендарей.mdo b/SSL/src/Enums/ВидыКалендарей/ВидыКалендарей.mdo new file mode 100644 index 000000000..27c9ac153 --- /dev/null +++ b/SSL/src/Enums/ВидыКалендарей/ВидыКалендарей.mdo @@ -0,0 +1,45 @@ + + + + + + + + ВидыКалендарей + + ru + Виды календарей + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Пятидневка + + ru + Пятидневка + + + + Шестидневка + + ru + Шестидневка + + + diff --git a/SSL/src/Enums/ВидыПоставляемыхДанных/ВидыПоставляемыхДанных.mdo b/SSL/src/Enums/ВидыПоставляемыхДанных/ВидыПоставляемыхДанных.mdo new file mode 100644 index 000000000..a2d77fab8 --- /dev/null +++ b/SSL/src/Enums/ВидыПоставляемыхДанных/ВидыПоставляемыхДанных.mdo @@ -0,0 +1,115 @@ + + + + + + + + ВидыПоставляемыхДанных + + ru + Виды поставляемых данных + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + РегистрСведений_АдресныеСокращения + + ru + Адресные сокращения + + + + РегистрСведений_АдресныйКлассификатор + + ru + Адресный классификатор + + + + РегистрСведений_ДанныеПроизводственногоКалендаря + + ru + Данные производственного календаря + + + + РегистрСведений_КурсыВалют + + ru + Регистр сведений курсы валют + + + + РегистрСведений_СтавкаРефинансированияЦБ + + ru + Ставки рефинансирования ЦБ РФ + + + + Справочник_Банки + + ru + Справочник банков РФ + + + + Справочник_Валюты + + ru + Общероссийский классификатор валют + + + + Справочник_ЕдиныеНормыАмортизационныхОтчисленийОсновныхФондов + + ru + Единные нормы амортизации основных фондов + + + + Справочник_КлассификаторЕдиницИзмерения + + ru + Общероссийский классификатор единиц измерения + + + + Справочник_ОбщероссийскийКлассификаторОсновныхФондов + + ru + Общероссийский классификатор основных фондов + + + + Справочник_СтраныМира + + ru + Общероссийский классификатор стран мира + + + + Справочник_ПроизводственныеКалендари + + ru + Производственные календари + + + diff --git a/SSL/src/Enums/ВидыТранспортаСообщенийОбмена/ВидыТранспортаСообщенийОбмена.mdo b/SSL/src/Enums/ВидыТранспортаСообщенийОбмена/ВидыТранспортаСообщенийОбмена.mdo index 5f25ebb7c..7d2086a49 100644 --- a/SSL/src/Enums/ВидыТранспортаСообщенийОбмена/ВидыТранспортаСообщенийОбмена.mdo +++ b/SSL/src/Enums/ВидыТранспортаСообщенийОбмена/ВидыТранспортаСообщенийОбмена.mdo @@ -49,6 +49,13 @@ Обмен через FTP-ресурс + + WS + + ru + Обмен через Интернет + + COM @@ -56,4 +63,11 @@ Обмен через прямое подключение к базе-корреспонденту + + Combi + + ru + Комбинированный обмен данными + + diff --git a/SSL/src/Enums/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl b/SSL/src/Enums/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl deleted file mode 100644 index 074d339ff..000000000 --- a/SSL/src/Enums/КлючевыеОперации/Forms/ФормаВыбора/Module.bsl +++ /dev/null @@ -1,11 +0,0 @@ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Список.Отбор.Элементы.Очистить(); - ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке; - ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); - ЭлементОтбора.ПравоеЗначение = Параметры.Отбор; - -КонецПроцедуры diff --git a/SSL/src/Enums/ПериодичностиРасписанийРассылокОтчетов/ПериодичностиРасписанийРассылокОтчетов.mdo b/SSL/src/Enums/ПериодичностиРасписанийРассылокОтчетов/ПериодичностиРасписанийРассылокОтчетов.mdo new file mode 100644 index 000000000..7e7b9ce59 --- /dev/null +++ b/SSL/src/Enums/ПериодичностиРасписанийРассылокОтчетов/ПериодичностиРасписанийРассылокОтчетов.mdo @@ -0,0 +1,59 @@ + + + + + + + + ПериодичностиРасписанийРассылокОтчетов + + ru + Периодичности расписаний рассылок отчетов + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Ежедневно + + ru + Ежедневно + + + + Еженедельно + + ru + Еженедельно + + + + Ежемесячно + + ru + Ежемесячно + + + + Произвольное + + ru + Произвольное + + + diff --git a/SSL/src/Enums/РежимыИспользованияИнформационнойБазы/РежимыИспользованияИнформационнойБазы.mdo b/SSL/src/Enums/РежимыИспользованияИнформационнойБазы/РежимыИспользованияИнформационнойБазы.mdo new file mode 100644 index 000000000..4e8c3900c --- /dev/null +++ b/SSL/src/Enums/РежимыИспользованияИнформационнойБазы/РежимыИспользованияИнформационнойБазы.mdo @@ -0,0 +1,45 @@ + + + + + + + + РежимыИспользованияИнформационнойБазы + + ru + Режимы использования информационной базы + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Рабочий + + ru + Рабочий + + + + Демонстрационный + + ru + Демонстрационный + + + diff --git a/SSL/src/Enums/СостоянияЗаданий/СостоянияЗаданий.mdo b/SSL/src/Enums/СостоянияЗаданий/СостоянияЗаданий.mdo new file mode 100644 index 000000000..580947465 --- /dev/null +++ b/SSL/src/Enums/СостоянияЗаданий/СостоянияЗаданий.mdo @@ -0,0 +1,59 @@ + + + + + + + + СостоянияЗаданий + + ru + Состояния заданий + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Запланировано + + ru + Запланировано + + + + Выполняется + + ru + Выполняется + + + + Завершено + + ru + Завершено + + + + НеЗапланировано + + ru + Не запланировано + + + diff --git a/SSL/src/Enums/СпособыОткрытияФайлаНаПросмотр/СпособыОткрытияФайлаНаПросмотр.mdo b/SSL/src/Enums/СпособыОткрытияФайлаНаПросмотр/СпособыОткрытияФайлаНаПросмотр.mdo new file mode 100644 index 000000000..957a7c33e --- /dev/null +++ b/SSL/src/Enums/СпособыОткрытияФайлаНаПросмотр/СпособыОткрытияФайлаНаПросмотр.mdo @@ -0,0 +1,45 @@ + + + + + + + + СпособыОткрытияФайлаНаПросмотр + + ru + Способы открытия файла на просмотр + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + ВоВнешнемПриложении + + ru + Стандартным приложением + + + + ВоВстроенномРедакторе + + ru + Во встроенном редакторе + + + diff --git a/SSL/src/Enums/СтатусыОбластейДанных/СтатусыОбластейДанных.mdo b/SSL/src/Enums/СтатусыОбластейДанных/СтатусыОбластейДанных.mdo new file mode 100644 index 000000000..5f221fed4 --- /dev/null +++ b/SSL/src/Enums/СтатусыОбластейДанных/СтатусыОбластейДанных.mdo @@ -0,0 +1,66 @@ + + + + + + + + СтатусыОбластейДанных + + ru + Статусы областей данных + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Новая + + ru + Новая + + + + Используется + + ru + Используется + + + + КУдалению + + ru + К удалению + + + + Удалена + + ru + Удалена + + + + УдалитьГотова + + ru + (Не используется) Готова + + + diff --git a/SSL/src/Enums/ТипыДанныхКэшаПрограммныхИнтерфейсов/ТипыДанныхКэшаПрограммныхИнтерфейсов.mdo b/SSL/src/Enums/ТипыДанныхКэшаПрограммныхИнтерфейсов/ТипыДанныхКэшаПрограммныхИнтерфейсов.mdo new file mode 100644 index 000000000..ee36f202e --- /dev/null +++ b/SSL/src/Enums/ТипыДанныхКэшаПрограммныхИнтерфейсов/ТипыДанныхКэшаПрограммныхИнтерфейсов.mdo @@ -0,0 +1,45 @@ + + + + + + + + ТипыДанныхКэшаПрограммныхИнтерфейсов + + ru + Типы данных кэша программных интерфейсов + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + ОписаниеWebСервиса + + ru + Описание web-сервиса + + + + ВерсииИнтерфейса + + ru + Версии интерфейса + + + diff --git a/SSL/src/Enums/ТипыПользователей/ТипыПользователей.mdo b/SSL/src/Enums/ТипыПользователей/ТипыПользователей.mdo new file mode 100644 index 000000000..2cc78df53 --- /dev/null +++ b/SSL/src/Enums/ТипыПользователей/ТипыПользователей.mdo @@ -0,0 +1,52 @@ + + + + + + + + ТипыПользователей + + ru + Типы пользователей + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + ВнешнийПользователь + + ru + Внешний пользователь + + + + ПользовательЛокальногоРешения + + ru + Пользователь локального решения + + + + ПользовательОбластиДанных + + ru + Пользователь области данных + + + diff --git a/SSL/src/Enums/ТипыФайловДляВстроенногоРедактора/ТипыФайловДляВстроенногоРедактора.mdo b/SSL/src/Enums/ТипыФайловДляВстроенногоРедактора/ТипыФайловДляВстроенногоРедактора.mdo new file mode 100644 index 000000000..84ba6e202 --- /dev/null +++ b/SSL/src/Enums/ТипыФайловДляВстроенногоРедактора/ТипыФайловДляВстроенногоРедактора.mdo @@ -0,0 +1,59 @@ + + + + + + + + ТипыФайловДляВстроенногоРедактора + + ru + Типы файлов для встроенного редактора + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + ГеографическиеСхемы + + ru + Географические схемы + + + + ГрафическиеСхемы + + ru + Графические схемы + + + + ТабличныеФайлы + + ru + Табличные файлы + + + + ТекстовыеФайлы + + ru + Текстовые файлы + + + diff --git a/SSL/src/Enums/КлючевыеОперации/КлючевыеОперации.mdo b/SSL/src/Enums/УдалитьКлючевыеОперации/УдалитьКлючевыеОперации.mdo similarity index 52% rename from SSL/src/Enums/КлючевыеОперации/КлючевыеОперации.mdo rename to SSL/src/Enums/УдалитьКлючевыеОперации/УдалитьКлючевыеОперации.mdo index 50a0cf8d6..1e9a710dc 100644 --- a/SSL/src/Enums/КлючевыеОперации/КлючевыеОперации.mdo +++ b/SSL/src/Enums/УдалитьКлючевыеОперации/УдалитьКлючевыеОперации.mdo @@ -1,15 +1,16 @@ - + - - - + + + - КлючевыеОперации + УдалитьКлючевыеОперации ru - Ключевые операции + Удалить ключевые операции + true Use Order @@ -27,21 +28,11 @@ BothWays - Enum.КлючевыеОперации.Form.ФормаВыбора - + ОбщаяПроизводительностьСистемы ru Общая производительность системы - - ФормаВыбора - - ru - Форма выбора - - PersonalComputer - MobileDevice - diff --git a/SSL/src/Enums/УровниПроизводительности/УровниПроизводительности.mdo b/SSL/src/Enums/УровниПроизводительности/УровниПроизводительности.mdo new file mode 100644 index 000000000..b6a15c1bb --- /dev/null +++ b/SSL/src/Enums/УровниПроизводительности/УровниПроизводительности.mdo @@ -0,0 +1,66 @@ + + + + + + + + УровниПроизводительности + + ru + Уровни производительности + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + Идеально + + ru + Идеально (apdex = 1) + + + + Отлично + + ru + Отлично (apdex >= 0.94) + + + + Хорошо + + ru + Хорошо (apdex >= 0.85) + + + + Удовлетворительно + + ru + Удовлетворительно (apdex >= 0.70) + + + + Плохо + + ru + Плохо (apdex >= 0.50) + + + diff --git a/SSL/src/Enums/ФорматыСохраненияОтчетов/ФорматыСохраненияОтчетов.mdo b/SSL/src/Enums/ФорматыСохраненияОтчетов/ФорматыСохраненияОтчетов.mdo new file mode 100644 index 000000000..de73ffd56 --- /dev/null +++ b/SSL/src/Enums/ФорматыСохраненияОтчетов/ФорматыСохраненияОтчетов.mdo @@ -0,0 +1,99 @@ + + + + + + + + ФорматыСохраненияОтчетов + + ru + Форматы сохранения отчетов + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + ru + Имя перечисления - краткое наименование формата (используется для представления формата в составе сформированных отчетов) +Синоним - полное наименование формата (используется как пользовательское представление формата в режиме выбора) + + + HTML4 + + ru + Документ HTML (.html) + + + + PDF + + ru + Документ PDF (.pdf) + + + + XLSX + + ru + Excel 2007 (.xlsx) + + + + XLS + + ru + Excel 1997 (.xls) + + + + ODS + + ru + OpenOffice Calc (.ods) + + + + MXL + + ru + Табличный документ (.mxl) + + + + DOCX + + ru + Word 2007 (.docx) + + + + TXT + + ru + Текст в кодировке UTF-8 (.txt) + + + + ANSITXT + + ru + Текст в кодировке ANSI (.txt) + + + diff --git a/SSL/src/EventSubscriptions/ЗарегистрироватьИзмененияОбщихДанныхУзлов/ЗарегистрироватьИзмененияОбщихДанныхУзлов.mdo b/SSL/src/EventSubscriptions/ЗарегистрироватьИзмененияОбщихДанныхУзлов/ЗарегистрироватьИзмененияОбщихДанныхУзлов.mdo new file mode 100644 index 000000000..71d500d25 --- /dev/null +++ b/SSL/src/EventSubscriptions/ЗарегистрироватьИзмененияОбщихДанныхУзлов/ЗарегистрироватьИзмененияОбщихДанныхУзлов.mdo @@ -0,0 +1,13 @@ + + + ЗарегистрироватьИзмененияОбщихДанныхУзлов + + ru + Зарегистрировать изменения общих данных узлов + + + ExchangePlanObject + + BeforeWrite + CommonModule.ОбменДаннымиСобытия.ЗарегистрироватьИзмененияОбщихДанныхУзлов + diff --git a/SSL/src/EventSubscriptions/ПриОтправкеДанныхПодчиненному/ПриОтправкеДанныхПодчиненному.mdo b/SSL/src/EventSubscriptions/ПриОтправкеДанныхПодчиненному/ПриОтправкеДанныхПодчиненному.mdo new file mode 100644 index 000000000..ba77050af --- /dev/null +++ b/SSL/src/EventSubscriptions/ПриОтправкеДанныхПодчиненному/ПриОтправкеДанныхПодчиненному.mdo @@ -0,0 +1,13 @@ + + + ПриОтправкеДанныхПодчиненному + + ru + При отправке данных подчиненному + + + ExchangePlanObject + + OnSendDataToSlave + CommonModule.ОбменДаннымиСобытия.ПриОтправкеДанныхПодчиненному + diff --git a/SSL/src/EventSubscriptions/ПриПолученииДанныхОтПодчиненного/ПриПолученииДанныхОтПодчиненного.mdo b/SSL/src/EventSubscriptions/ПриПолученииДанныхОтПодчиненного/ПриПолученииДанныхОтПодчиненного.mdo new file mode 100644 index 000000000..3d9291db5 --- /dev/null +++ b/SSL/src/EventSubscriptions/ПриПолученииДанныхОтПодчиненного/ПриПолученииДанныхОтПодчиненного.mdo @@ -0,0 +1,13 @@ + + + ПриПолученииДанныхОтПодчиненного + + ru + При получении данных от подчиненного + + + ExchangePlanObject + + OnReceiveDataFromSlave + CommonModule.ОбменДаннымиСобытия.ПриПолученииДанныхОтПодчиненного + diff --git a/SSL/src/EventSubscriptions/СправочникиОбщихПоставляемыхДанныхПередЗаписью/СправочникиОбщихПоставляемыхДанныхПередЗаписью.mdo b/SSL/src/EventSubscriptions/СправочникиОбщихПоставляемыхДанныхПередЗаписью/СправочникиОбщихПоставляемыхДанныхПередЗаписью.mdo new file mode 100644 index 000000000..55ab34a3b --- /dev/null +++ b/SSL/src/EventSubscriptions/СправочникиОбщихПоставляемыхДанныхПередЗаписью/СправочникиОбщихПоставляемыхДанныхПередЗаписью.mdo @@ -0,0 +1,14 @@ + + + СправочникиОбщихПоставляемыхДанныхПередЗаписью + + ru + Справочники общих поставляемых данных перед записью + + + CatalogObject.КлассификаторВалют + CatalogObject.ПроизводственныеКалендари + + BeforeWrite + CommonModule.ПоставляемыеДанные.СправочникиОбщихПоставляемыхДанныхПередЗаписью + diff --git a/SSL/src/EventSubscriptions/СправочникиРазделенныхПоставляемыхДанныхПередУдалением/СправочникиРазделенныхПоставляемыхДанныхПередУдалением.mdo b/SSL/src/EventSubscriptions/СправочникиРазделенныхПоставляемыхДанныхПередУдалением/СправочникиРазделенныхПоставляемыхДанныхПередУдалением.mdo new file mode 100644 index 000000000..483e96da7 --- /dev/null +++ b/SSL/src/EventSubscriptions/СправочникиРазделенныхПоставляемыхДанныхПередУдалением/СправочникиРазделенныхПоставляемыхДанныхПередУдалением.mdo @@ -0,0 +1,13 @@ + + + СправочникиРазделенныхПоставляемыхДанныхПередУдалением + + ru + Справочники разделенных поставляемых данных перед удалением + + + CatalogObject.Валюты + + BeforeDelete + CommonModule.ПоставляемыеДанные.СправочникиРазделенныхПоставляемыхДанныхПередУдалением + diff --git a/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/Commands/ЗаполнитьСписокУзлов/CommandModule.bsl b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/Commands/ЗаполнитьСписокУзлов/CommandModule.bsl new file mode 100644 index 000000000..4b0436346 --- /dev/null +++ b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/Commands/ЗаполнитьСписокУзлов/CommandModule.bsl @@ -0,0 +1,29 @@ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ЗаполнитьСписокУзлов(); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСписокУзлов() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбластиДанных.ОбластьДанных КАК ОбластьДанных + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + | ЛЕВОЕ СОЕДИНЕНИЕ ПланОбмена.ИзмененияПоставляемыхДанных КАК ИзмененияПоставляемыхДанных + | ПО ОбластиДанных.ОбластьДанных = ИзмененияПоставляемыхДанных.ОбластьДанных + |ГДЕ + | ИзмененияПоставляемыхДанных.Ссылка ЕСТЬ NULL "; + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + ПоставляемыеДанные.СоздатьУзелОбластиДанных(Выборка.ОбластьДанных); + КонецЦикла; + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..91027f589 --- /dev/null +++ b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,15 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + diff --git a/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/Forms/ФормаСписка/Form.form b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..e22b6b4ec --- /dev/null +++ b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/Forms/ФормаСписка/Form.form @@ -0,0 +1,369 @@ + + + + Список + 1 + true + true + + true + + + Список + + true + None + + Код + 4 + true + true + + true + + + Список.Code + + + КодРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + КодКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Наименование + 6 + true + true + + true + + + Список.Description + + true + + НаименованиеРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 7 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ОбластьДанных + 12 + true + true + + true + + + Список.Абонент + + + ОбластьДанныхРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ОбластьДанныхКонтекстноеМеню + 13 + true + + LabelField + Enter + true + Left + true + + true + true + + + + НомерОтправленного + 8 + true + true + + true + + + Список.SentNo + + + НомерОтправленногоРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + НомерОтправленногоКонтекстноеМеню + 9 + true + + LabelField + Enter + true + Left + true + + true + true + + + + НомерПринятого + 10 + true + true + + true + + + Список.ReceivedNo + + + НомерПринятогоРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + НомерПринятогоКонтекстноеМеню + 11 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска + 15 + + СписокСтрокаПоискаРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 16 + true + + Список + + true + + + + СписокСостояниеПросмотра + 18 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 19 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 21 + + СписокУправлениеПоискомРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 22 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
    + + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
    true
    + + ExchangePlan.ИзмененияПоставляемыхДанных + true + true + true + true + +
    + + + + + +
    diff --git a/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/Forms/ФормаУзла/Form.form b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/Forms/ФормаУзла/Form.form new file mode 100644 index 000000000..4a1b4ce81 --- /dev/null +++ b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/Forms/ФормаУзла/Form.form @@ -0,0 +1,245 @@ + + + + Код + 1 + true + true + + true + + + Объект.Code + + + КодРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + КодКонтекстноеМеню + 2 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Наименование + 3 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 4 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ОбластьДанных + 9 + true + true + + true + + + Объект.ОбластьДанных + + + ОбластьДанныхРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ОбластьДанныхКонтекстноеМеню + 10 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + НомерОтправленного + 5 + true + true + + true + + + Объект.SentNo + + + НомерОтправленногоРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + НомерОтправленногоКонтекстноеМеню + 6 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + НомерПринятого + 7 + true + true + + true + + + Объект.ReceivedNo + + + НомерПринятогоРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + НомерПринятогоКонтекстноеМеню + 8 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + Left + true + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + ExchangePlanObject.ИзмененияПоставляемыхДанных + + + true + + + true + +
    true
    + true +
    + + + + + +
    diff --git a/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ManagerModule.bsl b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ManagerModule.bsl new file mode 100644 index 000000000..14fdca9af --- /dev/null +++ b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ManagerModule.bsl @@ -0,0 +1,28 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +Функция ВерсияОбменаДанными() Экспорт + + Возврат Неопределено; + +КонецФункции + +Функция ПланОбменаИспользуетсяВМоделиСервиса() Экспорт + + Возврат Ложь; + +КонецФункции + +// Определяет использование механизма регистрации объектов +// +// Возвращаемое значение: +// Тип: Булево. Истина – механизм регистрации объектов необходимо использовать для текущего плана обмена; +// Ложь – механизм регистрации объектов использовать не требуется. +// +Функция ИспользоватьМеханизмРегистрацииОбъектов() Экспорт + + Возврат Истина; + +КонецФункции + diff --git a/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ObjectModule.bsl b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ObjectModule.bsl new file mode 100644 index 000000000..cb8f25e1a --- /dev/null +++ b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ObjectModule.bsl @@ -0,0 +1,11 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +Процедура ПередЗаписью(Отказ) + + Если ПустаяСтрока(Наименование) Тогда + Наименование = Код; + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ИзмененияПоставляемыхДанных.mdo b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ИзмененияПоставляемыхДанных.mdo new file mode 100644 index 000000000..6f322d3a0 --- /dev/null +++ b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ИзмененияПоставляемыхДанных.mdo @@ -0,0 +1,153 @@ + + + + + + + + + + ИзмененияПоставляемыхДанных + + ru + Изменения поставляемых данных + + true + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.Code + DontUse + + Use + ThisNode + + Use + + + + + Use + ReceivedNo + + Use + + + + + Use + SentNo + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + Description + + ShowError + Use + + + + + Use + Code + + ShowError + Use + + + + DontUse + Managed + Use + + ru + Узлы плана обмена: Подсистема поставляемых данных + + 7 + Variable + 7 + + InformationRegister.ДанныеПроизводственногоКалендаря + + + Catalog.ПроизводственныеКалендари + Allow + + + Catalog.КлассификаторВалют + Allow + + + InformationRegister.КурсыВалютПоКлассификатору + + InDialog + BothWays + ExchangePlan.ИзмененияПоставляемыхДанных.Form.ФормаУзла + ExchangePlan.ИзмененияПоставляемыхДанных.Form.ФормаСписка + + ОбластьДанных + + ru + Область данных + + + Number + + 7 + + + + + + Index + Use + Use + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаУзла + + ru + Форма узла + + PersonalComputer + MobileDevice + + + ЗаполнитьСписокУзлов + + ru + Заполнить список узлов + + FormCommandBarImportant + + ExchangePlanRef.ИзмененияПоставляемыхДанных + + Auto + + diff --git a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ManagerModule.bsl b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ManagerModule.bsl index 76da26410..29ffe2f48 100644 --- a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ManagerModule.bsl +++ b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ManagerModule.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Возвращает имя файла настроек по умолчанию; // В этот файл будут выгружены настройки обмена для приемника; // Это значение должно быть одинаковым в плане обмена источника и приемника. @@ -147,6 +150,18 @@ КонецФункции +// Возвращает признак использования плана обмена для организации обмена в модели сервиса. +// Если признак установлен, то в сервисе можно включить обмен данными +// с использованием этого плана обмена. +// Если признак не установлен, то план обмена будет использоваться только +// для обмена в локальном режиме работы конфигурации. +// +Функция ПланОбменаИспользуетсяВМоделиСервиса() Экспорт + + Возврат Ложь; + +КонецФункции + ////////////////////////////////////////////////////////////////////////////// // ФУНКЦИИ ДЛЯ РАБОТЫ ОБМЕНА ЧЕРЕЗ ВНЕШНЕЕ СОЕДИНЕНИЕ @@ -242,3 +257,24 @@ КонецФункции +// + +Функция ОбщиеДанныеУзлов() Экспорт + + Возврат ""; + +КонецФункции + +Функция ПояснениеДляНастройкиПараметровУчета() Экспорт + + Возврат ""; +КонецФункции + +Функция ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента() Экспорт + + Возврат ""; +КонецФункции + +Процедура ОбработчикПроверкиПараметровУчета(Отказ, Получатель, Сообщение) Экспорт + +КонецПроцедуры diff --git a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/Templates/ПравилаОбмена/Template.txt b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/Templates/ПравилаОбмена/Template.txt index 95f3d26fd..5ccb4a7de 100644 --- a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/Templates/ПравилаОбмена/Template.txt +++ b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/Templates/ПравилаОбмена/Template.txt @@ -2,7 +2,7 @@ <ВерсияФормата>2.01 <Ид>0000000000000000000000000000000000000002 <Наименование>БиблиотекаСтандартныхПодсистемДемо --> БиблиотекаСтандартныхПодсистемДемо - <ДатаВремяСоздания>2011-05-10T10:24:31 + <ДатаВремяСоздания>2012-01-11T13:11:33 <Источник ВерсияПлатформы="8.0" ВерсияКонфигурации="1.1.2.5" СинонимКонфигурации="Демонстрационная конфигурация "Библиотека стандартных подсистем", редакция 1.1">БиблиотекаСтандартныхПодсистемДемо <Приемник ВерсияПлатформы="8.0" ВерсияКонфигурации="1.1.2.5" СинонимКонфигурации="Демонстрационная конфигурация "Библиотека стандартных подсистем", редакция 1.1">БиблиотекаСтандартныхПодсистемДемо <ПередЗагрузкойДанных>Параметры.Вставить("ТипХраненияФайловВТомахНаДиске", ФайловыеФункции.ПолучитьТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске); @@ -187,78 +187,13 @@ <Код>ВерсииФайлов <Наименование>Справочник: Версии файлов <Порядок>50 - <ПриВыгрузке>Если Источник.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НЕ Источник.Том.Пустая() Тогда - // если файл в томе - поместим его в ФайлХранилище, и поменяем Источник.ТипХраненияФайла на ВИнформационнойБазе - Источник.ФайлХранилище = ФайловыеФункции.ПоместитьДвоичныеДанныеВХранилище(Источник.Том, Источник.ПутьКФайлу, Источник.Ссылка.УникальныйИдентификатор()); - Источник.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - Источник.ПутьКФайлу = ""; - Источник.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - КонецЕсли; -Иначе - ФайловыеФункцииПереопределяемый.ВыполнитьДополнительнуюОбработкуПриОтправкеДанных(Источник); -КонецЕсли; - <ПослеЗагрузки>Если Объект.ЭтоНовый() Тогда // добавлен новый файл - ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункции.ПолучитьЗапретЗагрузкиФайловПоРасширению(); - СписокЗапрещенныхРасширений = ФайловыеФункции.ПолучитьСписокЗапрещенныхРасширений(); - РасширениеФайла = Объект.Расширение; - - Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки(ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, РасширениеФайла) Тогда - Отказ = Истина; - КонецЕсли; -КонецЕсли; - -Если НЕ Отказ Тогда - Если НЕ Объект.ЭтоНовый() Тогда // изменен уже существующий Объект - - // файл был на томе - удалим его - т.к. при обмене придет новый - Если ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Ссылка, "ТипХраненияФайла") = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - - Том = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Ссылка, "Том"); - ПутьКФайлу = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Ссылка, "ПутьКФайлу"); - - ПрежнийПутьНаТоме = ФайловыеФункции.ПолныйПутьТома(Том) + ПутьКФайлу; - ФайловыеФункции.УдалитьФайлыНаСервере(Объект.Ссылка, ПрежнийПутьНаТоме); - КонецЕсли; - КонецЕсли; - - // при обмене сюда приходит только Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе - // если тип хранения базы-приемника такой же (в базе) - ничего не делаем - // а вот если в базе приемнике - тип хранения в томах - то разместим на диске - Если Параметры.ТипХраненияФайловВТомахНаДиске Тогда - // тип отличается от типа по умолчанию для данной базы - поменяем - - // по обмену пришел Объект с хранением в базе - но в базе приемнике принято хранить в томах - // - из ФайлХранилище размещаем на томе и меняем ТипХраненияФайла на ВТомахНаДиске - - ДвоичныеДанные = Объект.ФайлХранилище.Получить(); - - ВремяИзменения = Объект.ДатаМодификацииУниверсальная; - РазмерФайла = Объект.Размер; - ИмяБезРасширения = Объект.Наименование; - Расширение = Объект.Расширение; - Зашифрован = Объект.Зашифрован; - - ПутьКФайлуНаТоме = ""; - СсылкаНаТом = Неопределено; - - // добавить в один из томов (где есть свободное место) - ФайловыеФункцииПереопределяемый.ДобавитьНаДискПриПолученииДанныхФайла( - Объект, ДвоичныеДанные, - ПутьКФайлуНаТоме, СсылкаНаТом, ВремяИзменения, - ИмяБезРасширения, Расширение, РазмерФайла, Зашифрован); - - Объект.ПутьКФайлу = ПутьКФайлуНаТоме; - Объект.Том = СсылкаНаТом; - Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; - - Объект.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); - - Иначе - ФайловыеФункцииПереопределяемый.ВыполнитьДополнительнуюОбработкуПриПолученииДанных(Объект); - КонецЕсли; - -КонецЕсли; + <ПриВыгрузке>ОбменФайламиСобытия.ПриОтправкеДанныхФайла(Источник, Неопределено); + <ПослеЗагрузки>ПолучениеЭлемента = Неопределено; +ОбменФайламиСобытия.ПриПолученииДанныхФайла(Объект, ПолучениеЭлемента); +Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + Отказ = Истина; +КонецЕсли; + <СинхронизироватьПоИдентификатору>true <Источник>СправочникСсылка.ВерсииФайлов <Приемник>СправочникСсылка.ВерсииФайлов @@ -497,6 +432,12 @@ <Код>Файлы <Наименование>Справочник: Файлы <Порядок>150 + <ПослеЗагрузки>ПолучениеЭлемента = Неопределено; +ОбменФайламиСобытия.ПриПолученииДанныхФайла(Объект, ПолучениеЭлемента); +Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + Отказ = Истина; +КонецЕсли; + <СинхронизироватьПоИдентификатору>true <Источник>СправочникСсылка.Файлы <Приемник>СправочникСсылка.Файлы diff --git a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ManagerModule.bsl b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ManagerModule.bsl index 2f471e6af..e661dde20 100644 --- a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ManagerModule.bsl +++ b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ManagerModule.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Возвращает имя файла настроек по умолчанию; // В этот файл будут выгружены настройки обмена для приемника; // Это значение должно быть одинаковым в плане обмена источника и приемника. @@ -147,6 +150,18 @@ КонецФункции +// Возвращает признак использования плана обмена для организации обмена в модели сервиса. +// Если признак установлен, то в сервисе можно включить обмен данными +// с использованием этого плана обмена. +// Если признак не установлен, то план обмена будет использоваться только +// для обмена в локальном режиме работы конфигурации. +// +Функция ПланОбменаИспользуетсяВМоделиСервиса() Экспорт + + Возврат Ложь; + +КонецФункции + ////////////////////////////////////////////////////////////////////////////// // ФУНКЦИИ ДЛЯ РАБОТЫ ОБМЕНА ЧЕРЕЗ ВНЕШНЕЕ СОЕДИНЕНИЕ @@ -242,3 +257,24 @@ КонецФункции +// + +Функция ОбщиеДанныеУзлов() Экспорт + + Возврат ""; + +КонецФункции + +Функция ПояснениеДляНастройкиПараметровУчета() Экспорт + + Возврат ""; +КонецФункции + +Функция ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента() Экспорт + + Возврат ""; +КонецФункции + +Процедура ОбработчикПроверкиПараметровУчета(Отказ, Получатель, Сообщение) Экспорт + +КонецПроцедуры diff --git a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/Templates/ПравилаОбмена/Template.txt b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/Templates/ПравилаОбмена/Template.txt index 124424ea9..89c6ad01c 100644 --- a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/Templates/ПравилаОбмена/Template.txt +++ b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/Templates/ПравилаОбмена/Template.txt @@ -2,7 +2,7 @@ <ВерсияФормата>2.01 <Ид>1ce40aae-8962-4d88-88ba-8816f3987f77 <Наименование>БиблиотекаСтандартныхПодсистемДемо --> ДокументооборотБиблиотека - <ДатаВремяСоздания>2011-05-10T10:25:04 + <ДатаВремяСоздания>2012-01-11T13:10:34 <Источник ВерсияПлатформы="8.0" ВерсияКонфигурации="1.1.2.5" СинонимКонфигурации="Демонстрационная конфигурация "Библиотека стандартных подсистем", редакция 1.1">БиблиотекаСтандартныхПодсистемДемо <Приемник ВерсияПлатформы="8.0" ВерсияКонфигурации="1.1.3.6" СинонимКонфигурации="1С:Документооборот 8, библиотека">ДокументооборотБиблиотека <ПередЗагрузкойДанных>Параметры.Вставить("ТипХраненияФайловВТомахНаДиске", ФайловыеФункции.ПолучитьТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске); @@ -187,80 +187,13 @@ <Код>ВерсииФайлов <Наименование>Справочник: Версии файлов <Порядок>50 - <ПриВыгрузке>Если Источник.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НЕ Источник.Том.Пустая() Тогда - // если файл в томе - поместим его в ФайлХранилище, и поменяем Источник.ТипХраненияФайла на ВИнформационнойБазе - Источник.ФайлХранилище = ФайловыеФункции.ПоместитьДвоичныеДанныеВХранилище(Источник.Том, Источник.ПутьКФайлу, Источник.Ссылка.УникальныйИдентификатор()); - Источник.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - Источник.ПутьКФайлу = ""; - Источник.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - КонецЕсли; -Иначе - ФайловыеФункцииПереопределяемый.ВыполнитьДополнительнуюОбработкуПриОтправкеДанных(Источник); -КонецЕсли; - - <ПослеЗагрузки>Если Объект.ЭтоНовый() Тогда // добавлен новый файл - ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункции.ПолучитьЗапретЗагрузкиФайловПоРасширению(); - СписокЗапрещенныхРасширений = ФайловыеФункции.ПолучитьСписокЗапрещенныхРасширений(); - РасширениеФайла = Объект.Расширение; - - Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки(ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, РасширениеФайла) Тогда - Отказ = Истина; - КонецЕсли; -КонецЕсли; - -Если НЕ Отказ Тогда - Если НЕ Объект.ЭтоНовый() Тогда // изменен уже существующий Объект - - // файл был на томе - удалим его - т.к. при обмене придет новый - Если ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Ссылка, "ТипХраненияФайла") = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - - Том = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Ссылка, "Том"); - ПутьКФайлу = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Ссылка, "ПутьКФайлу"); - - ПрежнийПутьНаТоме = ФайловыеФункции.ПолныйПутьТома(Том) + ПутьКФайлу; - ФайловыеФункции.УдалитьФайлыНаСервере(Объект.Ссылка, ПрежнийПутьНаТоме); - КонецЕсли; - КонецЕсли; - - // при обмене сюда приходит только Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе - // если тип хранения базы-приемника такой же (в базе) - ничего не делаем - // а вот если в базе приемнике - тип хранения в томах - то разместим на диске - Если Параметры.ТипХраненияФайловВТомахНаДиске Тогда - // тип отличается от типа по умолчанию для данной базы - поменяем - - // по обмену пришел Объект с хранением в базе - но в базе приемнике принято хранить в томах - // - из ФайлХранилище размещаем на томе и меняем ТипХраненияФайла на ВТомахНаДиске - - ДвоичныеДанные = Объект.ФайлХранилище.Получить(); - - ВремяИзменения = Объект.ДатаМодификацииУниверсальная; - РазмерФайла = Объект.Размер; - ИмяБезРасширения = Объект.Наименование; - Расширение = Объект.Расширение; - Зашифрован = Объект.Зашифрован; - - ПутьКФайлуНаТоме = ""; - СсылкаНаТом = Неопределено; - - // добавить в один из томов (где есть свободное место) - ФайловыеФункцииПереопределяемый.ДобавитьНаДискПриПолученииДанныхФайла( - Объект, ДвоичныеДанные, - ПутьКФайлуНаТоме, СсылкаНаТом, ВремяИзменения, - ИмяБезРасширения, Расширение, РазмерФайла, Зашифрован); - - Объект.ПутьКФайлу = ПутьКФайлуНаТоме; - Объект.Том = СсылкаНаТом; - Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; - - Объект.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); - - Иначе - ФайловыеФункцииПереопределяемый.ВыполнитьДополнительнуюОбработкуПриПолученииДанных(Объект); - КонецЕсли; - - -КонецЕсли; + <ПриВыгрузке>ОбменФайламиСобытия.ПриОтправкеДанныхФайла(Источник, Неопределено); + <ПослеЗагрузки>ПолучениеЭлемента = Неопределено; +ОбменФайламиСобытия.ПриПолученииДанныхФайла(Объект, ПолучениеЭлемента); +Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + Отказ = Истина; +КонецЕсли; + <СинхронизироватьПоИдентификатору>true <Источник>СправочникСсылка.ВерсииФайлов <Приемник>СправочникСсылка.ВерсииФайлов @@ -492,6 +425,12 @@ <Код>Файлы <Наименование>Справочник: Файлы <Порядок>150 + <ПослеЗагрузки>ПолучениеЭлемента = Неопределено; +ОбменФайламиСобытия.ПриПолученииДанныхФайла(Объект, ПолучениеЭлемента); +Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + Отказ = Истина; +КонецЕсли; + <СинхронизироватьПоИдентификатору>true <Источник>СправочникСсылка.Файлы <Приемник>СправочникСсылка.Файлы diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..91027f589 --- /dev/null +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,15 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаВыбора/Form.form b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаВыбора/Form.form new file mode 100644 index 000000000..59c1e51bf --- /dev/null +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаВыбора/Form.form @@ -0,0 +1,230 @@ + + + + Список + 1 + true + true + + true + + + Список + + true + None + Change + Copy + Create + Delete + SetDeletionMark + + Наименование + 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 + + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
    + + ФормаКоманднаяПанель + -1 + Left + true + + Change + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
    true
    + + ExchangePlan.ОбменСообщениями + true + true + true + true + +
    + + + + + +
    diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..08f080c77 --- /dev/null +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,31 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + + + + + Ведущая + Equal + true + + + + + Шрифт + + + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаСписка/Form.form b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..5085e8b6c --- /dev/null +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаСписка/Form.form @@ -0,0 +1,225 @@ + + + + Список + 1 + true + true + + true + + + Список + + true + None + + Наименование + 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 + + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
    + + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
    true
    + + ExchangePlan.ОбменСообщениями + true + true + true + true + +
    + + + + + +
    diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Form.form b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Form.form new file mode 100644 index 000000000..017c51c65 --- /dev/null +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Form.form @@ -0,0 +1,213 @@ + + + + Наименование + 3 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 4 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаИнформационныхСообщений + 10 + + ИнформационноеСообщение + 7 + + <key>ru</key> + <value>Эта конечная точка является ведомой, т.е. выполняет отправку и получение сообщений обмена только по требованию текущей информационной системы.</value> + + true + true + + true + + + ИнформационноеСообщениеРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + ИнформационноеСообщениеКонтекстноеМеню + 8 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + 2 + + + + СделатьЭтуКонечнуюТочкуВедомой + 9 + true + true + + true + + + СделатьЭтуКонечнуюТочкуВедомойРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + UsualButton + Form.Command.СделатьЭтуКонечнуюТочкуВедомой + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа информационных сообщений</value> + + + ГруппаИнформационныхСообщенийРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + true + + + NotificationProcessing + ОбработкаОповещения + + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + ExchangePlanObject.ОбменСообщениями + + + true + + + true + +
    true
    + true +
    + + СделатьЭтуКонечнуюТочкуВедомой + + <key>ru</key> + <value>Сделать эту конечную точку ведомой...</value> + + 1 + + ru + Сделать эту конечную точку ведомой по отношению к текущей информационной системе. + + + true + + + + СделатьЭтуКонечнуюТочкуВедомой + + + Auto + Auto + + + + + + +
    diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Module.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Module.bsl new file mode 100644 index 000000000..2a98a5cdf --- /dev/null +++ b/SSL/src/ExchangePlans/ОбменСообщениями/Forms/ФормаУзла/Module.bsl @@ -0,0 +1,60 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ЭтоЭтотУзел = (Объект.Ссылка = ОбменСообщениямиВнутренний.ЭтотУзел()); + + Элементы.ГруппаИнформационныхСообщений.Видимость = Не ЭтоЭтотУзел; + + Если Не ЭтоЭтотУзел Тогда + + Если Объект.Ведущая Тогда + Элементы.ИнформационноеСообщение.Заголовок + = НСтр("ru = 'Эта конечная точка является ведущей, т.е. инициирует отправку и получение сообщений обмена для текущей информационной системы.'"); + // + Иначе + Элементы.ИнформационноеСообщение.Заголовок + = НСтр("ru = 'Эта конечная точка является ведомой, т.е. выполняет отправку и получение сообщений обмена только по требованию текущей информационной системы.'"); + // + КонецЕсли; + + Элементы.СделатьЭтуКонечнуюТочкуВедомой.Видимость = Объект.Ведущая; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + + Оповестить(ОбменСообщениямиКлиент.ИмяСобытияЗакрытаФормаКонечнойТочки()); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = ОбменСообщениямиКлиент.ИмяСобытияУстановленаВедущаяКонечнаяТочка() Тогда + + Закрыть(); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура СделатьЭтуКонечнуюТочкуВедомой(Команда) + + ПараметрыФормы = Новый Структура("КонечнаяТочка", Объект.Ссылка); + + ОткрытьФорму("ОбщаяФорма.УстановкаВедущейКонечнойТочки", ПараметрыФормы, ЭтаФорма, Объект.Ссылка); + +КонецПроцедуры + + diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl new file mode 100644 index 000000000..5ef2cd890 --- /dev/null +++ b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl @@ -0,0 +1,310 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает имя файла настроек по умолчанию; +// В этот файл будут выгружены настройки обмена для приемника; +// Это значение должно быть одинаковым в плане обмена источника и приемника. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// Строка, 255 - имя файла по умолчанию для выгрузки настроек обмена данными +// +Функция ИмяФайлаНастроекДляПриемника() Экспорт + + Возврат ""; + +КонецФункции + +// Возвращает структуру отборов на узле плана обмена с установленными значениями по умолчанию; +// Структура настроек повторяет состав реквизитов шапки и табличных частей плана обмена; +// Для реквизитов шапки используются аналогичные по ключу и значению элементы структуры, +// а для табличных частей используются структуры, +// содержащие массивы значений полей табличных частей плана обмена. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// СтруктураНастроек - Структура - структура отборов на узле плана обмена +// +Функция НастройкаОтборовНаУзле() Экспорт + + Возврат Новый Структура; + +КонецФункции + +// Возвращает структуру значений по умолчению для узла; +// Структура настроек повторяет состав реквизитов шапки плана обмена; +// Для реквизитов шапки используются аналогичные по ключу и значению элементы структуры. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// СтруктураНастроек - Структура - структура значений по умолчанию на узле плана обмена +// +Функция ЗначенияПоУмолчаниюНаУзле() Экспорт + + Возврат Новый Структура; + +КонецФункции + +// Возвращает строку описания ограничений миграции данных для пользователя; +// Прикладной разработчик на основе установленных отборов на узле должен сформировать строку описания ограничений +// удобную для восприятия пользователем. +// +// Параметры: +// НастройкаОтборовНаУзле - Структура - структура отборов на узле плана обмена, +// полученная при помощи функции НастройкаОтборовНаУзле(). +// +// Возвращаемое значение: +// Строка, Неогранич. - строка описания ограничений миграции данных для пользователя +// +Функция ОписаниеОграниченийПередачиДанных(НастройкаОтборовНаУзле) Экспорт + + Возврат ""; + +КонецФункции + +// Возвращает строку описания значений по умолчанию для пользователя; +// Прикладной разработчик на основе установленных значений по умолчанию на узле должен сформировать строку описания +// удобную для восприятия пользователем. +// +// Параметры: +// ЗначенияПоУмолчаниюНаУзле - Структура - структура значений по умолчанию на узле плана обмена, +// полученная при помощи функции ЗначенияПоУмолчаниюНаУзле(). +// +// Возвращаемое значение: +// Строка, Неогранич. - строка описания для пользователя значений по умолчанию +// +Функция ОписаниеЗначенийПоУмолчанию(ЗначенияПоУмолчаниюНаУзле) Экспорт + + Возврат ""; + +КонецФункции + +// Возвращает представление команды создания нового обмена данными. +// +// Возвращаемое значение: +// Строка, Неогранич - представление команды, выводимое в пользовательском интерфейсе. +// +// Например: +// Возврат НСтр("ru = 'Создать обмен в распределенной информационной базе'"); +// +Функция ЗаголовокКомандыДляСозданияНовогоОбменаДанными() Экспорт + + Возврат ""; + +КонецФункции + +// Определяет, будет ли использоваться помощник для создания новых узлов плана обмена. +// +// Возвращаемое значение: +// Булево - признак использования помощника. +// +Функция ИспользоватьПомощникСозданияОбменаДанными() Экспорт + + Возврат Ложь; + +КонецФункции + +// Определяет использование механизма регистрации объектов +// +// Возвращаемое значение: +// Тип: Булево. Истина – механизм регистрации объектов необходимо использовать для текущего плана обмена; +// Ложь – механизм регистрации объектов использовать не требуется. +// +Функция ИспользоватьМеханизмРегистрацииОбъектов() Экспорт + + Возврат Ложь; + +КонецФункции + +// Возвращает пользовательскую форму для создания начального образа базы. +// Эта форма будет открыта после завершения настройки обмена с помощью помощника. +// Для планов обмена не РИБ функция возвращает пустую строку +// +// Возвращаемое значение: +// Строка, Неогранич - имя формы +// +// Например: +// Возврат "ПланОбмена.РаспределеннаяИнформационнаяБаза.Форма.ФормаСозданияНачальногоОбраза"; +// +Функция ИмяФормыСозданияНачальногоОбраза() Экспорт + + Возврат ""; + +КонецФункции + +// Возвращает массив используемых транспортов сообщений для этого плана обмена +// +// 1. Например, если план обмена поддерживает только два транспорта сообщений FILE и FTP, +// то тело функции следует определить следующим образом: +// +// Результат = Новый Массив; +// Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); +// Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); +// Возврат Результат; +// +// 2. Например, если план обмена поддерживает все транспорты сообщений, определенных в конфигурации, +// то тело функции следует определить следующим образом: +// +// Возврат ОбменДаннымиСервер.ВсеТранспортыСообщенийОбменаКонфигурации(); +// +// Возвращаемое значение: +// Массив - массив содержит значения перечисления ВидыТранспортаСообщенийОбмена +// +Функция ИспользуемыеТранспортыСообщенийОбмена() Экспорт + + Результат = Новый Массив; + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WS); + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); + + Возврат Результат; + +КонецФункции + +Функция ПланОбменаИспользуетсяВМоделиСервиса() Экспорт + + Возврат Ложь; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий для обмена без использования правил обмена + +// Обработчик события коллизий изменений объектов. +// Условие возникновения: +// Событие возникает при загрузке данных, +// в случае коллизии изменений загружаемого объекта. +// Коллизия изменений возникает, когда в информационной базе +// зарегистрированы изменения для загружаемого объекта. +// +// Параметры: +// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена для которого выполняется загрузка данных. +// Объект – объект, для которого возникла коллизия изменений. +// +// Возвращаемое значение: +// Тип: Булево. Истина – загружаемый объект будет записан в информационную базу; +// Ложь – загружаемый объект записан не будет. +// +Функция ПрименитьОбъектПриКоллизииИзменений(УзелИнформационнойБазы, Объект) Экспорт + + Возврат Ложь; + +КонецФункции + +// Определяет режим удаления объектов при загрузке данных. +// +// Возвращающее значение: +// Булево. Истина – при получении информации удаления объект будет физически удален из ИБ; +// Ложь – объект будет помечен на удаление. +// +Функция РазрешитьУдалениеОбъектов() Экспорт + + Возврат Истина; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Для работы через внешнее соединение + +// Возвращает структуру отборов на узле плана обмена базы корреспондента с установленными значениями по умолчанию; +// Структура настроек повторяет состав реквизитов шапки и табличных частей плана обмена базы корреспондента; +// Для реквизитов шапки используются аналогичные по ключу и значению элементы структуры, +// а для табличных частей используются структуры, +// содержащие массивы значений полей табличных частей плана обмена. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// СтруктураНастроек - Структура - структура отборов на узле плана обмена базы корреспондента +// +Функция НастройкаОтборовНаУзлеБазыКорреспондента() Экспорт + + Возврат Новый Структура; + +КонецФункции + +// Возвращает структуру значений по умолчению для узла базы корреспондента; +// Структура настроек повторяет состав реквизитов шапки плана обмена базы корреспондента; +// Для реквизитов шапки используются аналогичные по ключу и значению элементы структуры. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// СтруктураНастроек - Структура - структура значений по умолчанию на узле плана обмена базы корреспондента +// +Функция ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента() Экспорт + + Возврат Новый Структура; + +КонецФункции + +// Возвращает строку описания ограничений миграции данных для базы корреспондента, которая отображается пользователю; +// Прикладной разработчик на основе установленных отборов на узле базы корреспондента должен сформировать строку описания ограничений +// удобную для восприятия пользователем. +// +// Параметры: +// НастройкаОтборовНаУзле - Структура - структура отборов на узле плана обмена базы корреспондента, +// полученная при помощи функции НастройкаОтборовНаУзлеБазыКорреспондента(). +// +// Возвращаемое значение: +// Строка, Неогранич. - строка описания ограничений миграции данных для пользователя +// +Функция ОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзле) Экспорт + + Возврат ""; + +КонецФункции + +// Возвращает строку описания значений по умолчанию для базы корреспондента, которая отображается пользователю; +// Прикладной разработчик на основе установленных значений по умолчанию на узле базы корреспондента должен сформировать строку описания +// удобную для восприятия пользователем. +// +// Параметры: +// ЗначенияПоУмолчаниюНаУзле - Структура - структура значений по умолчанию на узле плана обмена базы корреспондента, +// полученная при помощи функции ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(). +// +// Возвращаемое значение: +// Строка, Неогранич. - строка описания для пользователя значений по умолчанию +// +Функция ОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзле) Экспорт + + Возврат ""; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Константы и проверка параметров учета + +Функция ОбщиеДанныеУзлов() Экспорт + + Возврат ""; + +КонецФункции + +Функция ПояснениеДляНастройкиПараметровУчета() Экспорт + + Возврат ""; + +КонецФункции + +Функция ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента() Экспорт + + Возврат ""; + +КонецФункции + +Процедура ОбработчикПроверкиПараметровУчета(Отказ, Получатель, Сообщение) Экспорт + + + +КонецПроцедуры diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/ОбменСообщениями.mdo b/SSL/src/ExchangePlans/ОбменСообщениями/ОбменСообщениями.mdo new file mode 100644 index 000000000..59cfd785f --- /dev/null +++ b/SSL/src/ExchangePlans/ОбменСообщениями/ОбменСообщениями.mdo @@ -0,0 +1,145 @@ + + + + + + + + + + ОбменСообщениями + + ru + Обмен сообщениями + + ExchangePlan.ОбменСообщениями.StandardAttribute.Description + ExchangePlan.ОбменСообщениями.StandardAttribute.Code + DontUse + + Use + ThisNode + + Use + + + + + Use + ReceivedNo + + Use + + + + + Use + SentNo + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + Description + + ShowError + Use + + + + + Use + Code + + ShowError + Use + + + + DontUse + Managed + Use + + ru + Конечная точка + + + ru + Конечные точки + + 36 + Variable + 150 + + InformationRegister.ПодпискиПолучателей + + + Catalog.СообщенияСистемы + + AsDescription + InDialog + BothWays + ExchangePlan.ОбменСообщениями.Form.ФормаУзла + ExchangePlan.ОбменСообщениями.Form.ФормаСписка + ExchangePlan.ОбменСообщениями.Form.ФормаВыбора + + Ведущая + + ru + Ведущая + + Признак того, что конечная точка является инициатором отправки и получения сообщений, а также инициатором обработки очереди сообщений в этой и других (ведомых) конечных точках. + + Boolean + + + + + Index + Use + + + ФормаУзла + + ru + Форма узла + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаВыбора + + ru + Форма выбора + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/FunctionalOptions/ЗарегистрированыИзмененияДанных/ЗарегистрированыИзмененияДанных.mdo b/SSL/src/FunctionalOptions/ЗарегистрированыИзмененияДанных/ЗарегистрированыИзмененияДанных.mdo new file mode 100644 index 000000000..05d4c7b47 --- /dev/null +++ b/SSL/src/FunctionalOptions/ЗарегистрированыИзмененияДанных/ЗарегистрированыИзмененияДанных.mdo @@ -0,0 +1,10 @@ + + + ЗарегистрированыИзмененияДанных + + ru + Зарегистрированы изменения данных + + Constant.ЗарегистрированыИзмененияДанных + true + diff --git a/SSL/src/FunctionalOptions/ИспользоватьБизнесПроцессыИЗадачи/ИспользоватьБизнесПроцессыИЗадачи.mdo b/SSL/src/FunctionalOptions/ИспользоватьБизнесПроцессыИЗадачи/ИспользоватьБизнесПроцессыИЗадачи.mdo index 34aefd423..9492d04aa 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьБизнесПроцессыИЗадачи/ИспользоватьБизнесПроцессыИЗадачи.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьБизнесПроцессыИЗадачи/ИспользоватьБизнесПроцессыИЗадачи.mdo @@ -16,7 +16,6 @@ Report.ЗависшиеЗадачи Report.ЗадачиИстекающиеНаДату Report.ПросроченныеЗадачи - Report.СправкаОбИсполнительскойДисциплине Report.Задачи CommonCommand.ЗадачиПоПредмету CommonCommand.РолиИИсполнителиЗадач diff --git a/SSL/src/FunctionalOptions/ИспользоватьОбменДанными/ИспользоватьОбменДанными.mdo b/SSL/src/FunctionalOptions/ИспользоватьОбменДанными/ИспользоватьОбменДанными.mdo index 6bd767631..86b363c0a 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьОбменДанными/ИспользоватьОбменДанными.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьОбменДанными/ИспользоватьОбменДанными.mdo @@ -1,5 +1,5 @@ - + ИспользоватьОбменДанными ru @@ -7,38 +7,4 @@ Constant.ИспользоватьОбменДанными true - Subsystem.СтандартныеПодсистемы.Subsystem.ОбменДанными - Catalog.СценарииОбменовДанными - DataProcessor.ЗагрузкаПравилРегистрацииОбъектов - DataProcessor.КонвертацияОбъектовИнформационныхБаз - DataProcessor.ТранспортСообщенийОбменаFILE - InformationRegister.НастройкиТранспортаОбмена - InformationRegister.СостоянияОбменовДанными - CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена - CommonCommand.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - Constant.ДатаОбновленияПовторноИспользуемыхЗначенийМРО - InformationRegister.СоответствияОбъектовИнформационныхБаз - Enum.ВидыПравилДляОбменаДанными - InformationRegister.ПравилаДляОбменаДанными - Enum.ИсточникиПравилДляОбменаДанными - CommonCommand.ОткрытьПравилаКонвертацииОбъектов - CommonCommand.ОткрытьПравилаРегистрацииОбъектов - DataProcessor.ПомощникСозданияОбменаДанными - DataProcessor.СопоставлениеОбъектовИнформационныхБаз - DataProcessor.ПомощникИнтерактивногоОбменаДанными - InformationRegister.СостоянияУспешныхОбменовДанными - DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз - CommonCommand.ОткрытьОбменыДанными - CommonCommand.ВыполнитьОбменДанными - CommonCommand.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - CommonCommand.ОткрытьСценарииОбменовДанными - Enum.РежимыВыгрузкиОбъектовОбмена - InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз - Constant.НастройкиПодчиненногоУзлаРИБ - CommonCommand.ВыполнитьОбменДаннымиИнтерактивно - CommonForm.ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение - CommonForm.ВыполнениеОбменаДанными - CommonForm.ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации - CommonForm.ОбменыДанными - CommonCommand.ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы diff --git a/SSL/src/FunctionalOptions/ИспользоватьОбменДаннымиВЛокальномРежиме/ИспользоватьОбменДаннымиВЛокальномРежиме.mdo b/SSL/src/FunctionalOptions/ИспользоватьОбменДаннымиВЛокальномРежиме/ИспользоватьОбменДаннымиВЛокальномРежиме.mdo new file mode 100644 index 000000000..11156c3e4 --- /dev/null +++ b/SSL/src/FunctionalOptions/ИспользоватьОбменДаннымиВЛокальномРежиме/ИспользоватьОбменДаннымиВЛокальномРежиме.mdo @@ -0,0 +1,44 @@ + + + ИспользоватьОбменДаннымиВЛокальномРежиме + + ru + Использовать обмен данными в локальном режиме + + Constant.ИспользоватьОбменДаннымиВЛокальномРежиме + true + Subsystem.СтандартныеПодсистемы.Subsystem.ОбменДанными + Catalog.СценарииОбменовДанными + DataProcessor.ЗагрузкаПравилРегистрацииОбъектов + DataProcessor.КонвертацияОбъектовИнформационныхБаз + DataProcessor.ТранспортСообщенийОбменаFILE + InformationRegister.НастройкиТранспортаОбмена + InformationRegister.СостоянияОбменовДанными + CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена + CommonCommand.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + Constant.ДатаОбновленияПовторноИспользуемыхЗначенийМРО + InformationRegister.СоответствияОбъектовИнформационныхБаз + Enum.ВидыПравилДляОбменаДанными + InformationRegister.ПравилаДляОбменаДанными + Enum.ИсточникиПравилДляОбменаДанными + CommonCommand.ОткрытьПравилаКонвертацииОбъектов + CommonCommand.ОткрытьПравилаРегистрацииОбъектов + DataProcessor.ПомощникСозданияОбменаДанными + DataProcessor.СопоставлениеОбъектовИнформационныхБаз + DataProcessor.ПомощникИнтерактивногоОбменаДанными + InformationRegister.СостоянияУспешныхОбменовДанными + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз + CommonCommand.ОткрытьОбменыДанными + CommonCommand.ВыполнитьОбменДанными + CommonCommand.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + CommonCommand.ОткрытьСценарииОбменовДанными + Enum.РежимыВыгрузкиОбъектовОбмена + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз + Constant.НастройкиПодчиненногоУзлаРИБ + CommonCommand.ВыполнитьОбменДаннымиИнтерактивно + CommonForm.ВыборОбъектовИнформационнойБазыКорреспондента + CommonForm.ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации + CommonForm.ОбменыДанными + CommonCommand.ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы + CommonForm.ВыполнениеОбменаДанными + diff --git a/SSL/src/FunctionalOptions/ИспользоватьОбменДаннымиВМоделиСервиса/ИспользоватьОбменДаннымиВМоделиСервиса.mdo b/SSL/src/FunctionalOptions/ИспользоватьОбменДаннымиВМоделиСервиса/ИспользоватьОбменДаннымиВМоделиСервиса.mdo new file mode 100644 index 000000000..158e1f2c0 --- /dev/null +++ b/SSL/src/FunctionalOptions/ИспользоватьОбменДаннымиВМоделиСервиса/ИспользоватьОбменДаннымиВМоделиСервиса.mdo @@ -0,0 +1,12 @@ + + + ИспользоватьОбменДаннымиВМоделиСервиса + + ru + Использовать обмен данными в модели сервиса + + Constant.ИспользоватьОбменДаннымиВМоделиСервиса + true + CommonForm.ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами + CommonCommand.СинхронизироватьДанные + diff --git a/SSL/src/FunctionalOptions/ИспользоватьРазделениеПоОбластямДанных/ИспользоватьРазделениеПоОбластямДанных.mdo b/SSL/src/FunctionalOptions/ИспользоватьРазделениеПоОбластямДанных/ИспользоватьРазделениеПоОбластямДанных.mdo new file mode 100644 index 000000000..c8d46456c --- /dev/null +++ b/SSL/src/FunctionalOptions/ИспользоватьРазделениеПоОбластямДанных/ИспользоватьРазделениеПоОбластямДанных.mdo @@ -0,0 +1,10 @@ + + + ИспользоватьРазделениеПоОбластямДанных + + ru + Использовать разделение по областям данных + + Constant.ИспользоватьРазделениеПоОбластямДанных + true + diff --git a/SSL/src/FunctionalOptions/НеИспользоватьРазделениеПоОбластямДанных/НеИспользоватьРазделениеПоОбластямДанных.mdo b/SSL/src/FunctionalOptions/НеИспользоватьРазделениеПоОбластямДанных/НеИспользоватьРазделениеПоОбластямДанных.mdo new file mode 100644 index 000000000..dbdf7ab6b --- /dev/null +++ b/SSL/src/FunctionalOptions/НеИспользоватьРазделениеПоОбластямДанных/НеИспользоватьРазделениеПоОбластямДанных.mdo @@ -0,0 +1,10 @@ + + + НеИспользоватьРазделениеПоОбластямДанных + + ru + Не использовать разделение по областям данных + + Constant.НеИспользоватьРазделениеПоОбластямДанных + true + diff --git a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВЛокальномРежиме/СтандартныеПодсистемыВЛокальномРежиме.mdo b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВЛокальномРежиме/СтандартныеПодсистемыВЛокальномРежиме.mdo new file mode 100644 index 000000000..10998cb8d --- /dev/null +++ b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВЛокальномРежиме/СтандартныеПодсистемыВЛокальномРежиме.mdo @@ -0,0 +1,18 @@ + + + СтандартныеПодсистемыВЛокальномРежиме + + ru + Стандартные подсистемы в локальном режиме + + Constant.НеИспользоватьРазделениеПоОбластямДанных + true + Catalog.Пользователи.Command.ПользователиИБ + Catalog.Валюты.Attribute.ЗагружаетсяИзИнтернета + DataProcessor.РезервноеКопированиеИБ + Catalog.Календари.Attribute.ВидКалендаря + CommonCommand.ВыгрузитьДанныеДляПереходаВСервис + CommonCommand.ЗагрузитьДанныеИзСервиса + DataProcessor.ОбновлениеКонфигурации + DataProcessor.НастройкаРезервногоКопированияИБ + diff --git a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВМоделиСервиса/СтандартныеПодсистемыВМоделиСервиса.mdo b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВМоделиСервиса/СтандартныеПодсистемыВМоделиСервиса.mdo new file mode 100644 index 000000000..0dfcb2da6 --- /dev/null +++ b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВМоделиСервиса/СтандартныеПодсистемыВМоделиСервиса.mdo @@ -0,0 +1,29 @@ + + + СтандартныеПодсистемыВМоделиСервиса + + ru + Стандартные подсистемы в модели сервиса + + Constant.ИспользоватьРазделениеПоОбластямДанных + true + Catalog.КлассификаторВалют + InformationRegister.КурсыВалютПоКлассификатору + CommonForm.ВходВОбластьДанных + CommonForm.ЗагрузкаДанныхВОбласть + CommonCommand.ВыгрузитьДанныеВЛокальнуюВерсию + CommonCommand.ЗагрузитьДанныеВОбласть + CommonCommand.ЗагрузитьДанныеИзЛокальнойВерсии + CommonCommand.ОбновлениеОбщихПоставляемыхДанных + CommonCommand.ОбновлениеПоставляемыхДанных + CommonCommand.ОчиститьРегистрациюИзмененийПоставляемыхДанных + InformationRegister.БлокировкиСеансовОбластиДанных + InformationRegister.ВерсииПоставляемыхДанных + InformationRegister.НеразделенныеПользователи + InformationRegister.ОбластиДанных + InformationRegister.ОчередьЗаданий + InformationRegister.РазделенныеРегламентныеЗадания + InformationRegister.СвязиПоставляемыхДанных + DataProcessor.АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных + CommonCommand.ДобавитьПользователейСервиса + diff --git a/SSL/src/FunctionalOptionsParameters/ТипВерсионируемогоОбъекта/ТипВерсионируемогоОбъекта.mdo b/SSL/src/FunctionalOptionsParameters/ТипВерсионируемогоОбъекта/ТипВерсионируемогоОбъекта.mdo index 54b1352ed..82d1f0aa6 100644 --- a/SSL/src/FunctionalOptionsParameters/ТипВерсионируемогоОбъекта/ТипВерсионируемогоОбъекта.mdo +++ b/SSL/src/FunctionalOptionsParameters/ТипВерсионируемогоОбъекта/ТипВерсионируемогоОбъекта.mdo @@ -1,5 +1,5 @@ - + ТипВерсионируемогоОбъекта ru diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АутентификацияНаПользовательскомСайте/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АутентификацияНаПользовательскомСайте/Module.bsl index 4d0b23772..b55d7e08e 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АутентификацияНаПользовательскомСайте/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АутентификацияНаПользовательскомСайте/Module.bsl @@ -1,19 +1,5 @@ -//------------------------------------------------------------------------------ -// -// ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ -// -// Неопределено - пользователь отказался от ввода пароля -// Структура - -// ключ "Статус", булево - истина или ложь в зависмости от успеха вызова -// ключ "КодПользователя", строка - в случае если статус Истина содержит -// код пользователя -// ключ "Пароль", строка - в случае если статус Истина содержит пароль -// -//------------------------------------------------------------------------------ - //////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ ОБРАБОТЧИКОВ СОБЫТИЙ ФОРМЫ И ЭЛЕМЕНТОВ ФОРМЫ -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -26,24 +12,9 @@ КонецПроцедуры -// Обработчик события нажатия на кнопку "Продолжить" -// -&НаКлиенте -Процедура СохранитьДанныеАутентификацииИПродолжитьВыполнить() - - Если СохранятьПароль Тогда - АдресныйКлассификатор.СохранитьПараметрыАутентификации(КодПользователя, Пароль); - Иначе - АдресныйКлассификатор.СохранитьПараметрыАутентификации(КодПользователя, Неопределено); - КонецЕсли; - - Закрыть (Новый Структура("Статус, КодПользователя ,Пароль", Истина, КодПользователя, Пароль)); - -КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ СЕРВИСНЫХ ФУНКЦИЙ -// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ // Реализует переход к пользовательскому сайту 1С // @@ -54,3 +25,30 @@ ЗапуститьПриложение("http://users.v8.1c.ru/"); КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +// Обработчик события нажатия на кнопку "Продолжить" +// +// Параметр закрытия формы: Неопределено - пользователь отказался от ввода пароля +// Структура - +// ключ "Статус", булево - истина или ложь в зависмости от успеха вызова +// ключ "КодПользователя", строка - в случае если статус Истина содержит +// код пользователя +// ключ "Пароль", строка - в случае если статус Истина содержит пароль +&НаКлиенте +Процедура СохранитьДанныеАутентификацииИПродолжитьВыполнить() + + Если СохранятьПароль Тогда + АдресныйКлассификатор.СохранитьПараметрыАутентификации(КодПользователя, Пароль); + Иначе + АдресныйКлассификатор.СохранитьПараметрыАутентификации(КодПользователя, Неопределено); + КонецЕсли; + + Закрыть(Новый Структура("Статус, КодПользователя ,Пароль", Истина, КодПользователя, Пароль)); + +КонецПроцедуры + + diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss index f904178b0..5bfbf8f14 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss @@ -62,7 +62,7 @@ ЦветТекста - style:УдаленныйДополнительныйРеквизитЦвет + style:НедоступныеДанныеЦвет diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Form.form b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Form.form index c745fe1dc..c78766a3c 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Form.form +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Form.form @@ -672,10 +672,6 @@ OnOpen ПриОткрытии - - BeforeClose - ПередЗакрытием - OnCreateAtServer ПриСозданииНаСервере @@ -713,6 +709,9 @@ true + + Список.Код + Список.КодАдресногоОбъектаВКоде @@ -831,6 +830,12 @@ + + СкрыватьНеактуальныеАдреса + + Boolean + + diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl index f64a2f2cc..dee4afd6a 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl @@ -39,13 +39,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ВводАдреса", "СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ @@ -94,6 +87,7 @@ Результат.Вставить("Сокращение", ТекущиеДанные.Сокращение); Результат.Вставить("ПризнакАктуальности", ТекущиеДанные.ПризнакАктуальности); Результат.Вставить("КодРегиона", ТекущиеДанные.КодАдресногоОбъектаВКоде); + Результат.Вставить("Код", ТекущиеДанные.Код); Если ТекущиеДанные.ПризнакАктуальности <> 0 Тогда СписокКнопок = Новый СписокЗначений; @@ -106,6 +100,11 @@ КонецЕсли; КонецЕсли; + Результат.Вставить("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); + Результат.Вставить("Уровень", Уровень); + Результат.Вставить("СтруктураАдреса", УправлениеКонтактнойИнформациейКлассификаторы.ПолучитьСтруктуруАдресаНаСервере(Результат.Код)); + + ПослеВыбораАдресногоЭлемента(Результат, Результат.СтруктураАдреса, Уровень); Закрыть(Результат); @@ -155,4 +154,145 @@ КонецЕсли; КонецПроцедуры +&НаСервереБезКонтекста +Процедура ПослеВыбораАдресногоЭлемента(СтруктураРезультата, СтруктураАдреса, Уровень) + + // Восстанавливаем значение флага "Скрывать неактуальные адреса" + Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ВводАдреса", "СкрыватьНеактуальныеАдреса"); + Если Значение = Неопределено Тогда + СтруктураРезультата.Вставить("СкрыватьНеактуальныеАдреса", Ложь); + Иначе + СтруктураРезультата.Вставить("СкрыватьНеактуальныеАдреса", Значение); + КонецЕсли; + + // Заполнение дополнительных свойств структуры результата + СтруктураПолей = ИсправитьПоля(СтруктураАдреса, Уровень); + СтруктураРезультата.Вставить("СтруктураОшибок", СтруктураПолей.СтруктураОшибок); + СтруктураРезультата.Вставить("СтруктураЗагруженных", ЗагруженныеПоляПоРегиону(СтруктураАдреса)); + СтруктураРезультата.Вставить("МожноЗагружатьРегион", ЗагружатьРегион(СтруктураАдреса.Регион)); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ИсправитьПоля(СтруктураАдреса, Уровень) + + // Получаем поля из структуры адреса + Индекс = СтруктураАдреса.Индекс; + Регион = СтруктураАдреса.Регион; + Район = СтруктураАдреса.Район; + Город = СтруктураАдреса.Город; + НаселенныйПункт = СтруктураАдреса.НаселенныйПункт; + Улица = СтруктураАдреса.Улица; + Дом = СтруктураАдреса.Дом; + Корпус = СтруктураАдреса.Корпус; + Квартира = СтруктураАдреса.Квартира; + + Если Не УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(Регион) Тогда + СтруктураПолей = Новый Структура("СтруктураОшибок,СтруктураАдреса", Новый Структура, СтруктураАдреса); + Возврат СтруктураПолей; + КонецЕсли; + + СтруктураПроверки = УправлениеКонтактнойИнформациейКлассификаторы.ПроверитьСоответствиеАдресаКЛАДРу("" + , Регион, Район, Город, НаселенныйПункт, Улица, Дом, Корпус); + + // Очищаем не подходящие поля + Если СтруктураПроверки.ЕстьОшибки Тогда + + УправлениеКонтактнойИнформациейКлассификаторы.ОчиститьПотомковПоУровнюАдресногоЭлемента(Регион, Район + , Город, НаселенныйПункт, Улица, Дом, Корпус, Квартира, Уровень); + + КонецЕсли; + + // Заполняем или исправляем промежуточные поля + Если Уровень > 2 И (ПустаяСтрока(Район) Или СтруктураПроверки.СтруктураОшибок.Свойство("Район")) Тогда + Район = СокрЛП(СтруктураПроверки.Район.Наименование + " " + СтруктураПроверки.Район.Сокращение); + КонецЕсли; + + Если Уровень > 3 И (ПустаяСтрока(Город) Или СтруктураПроверки.СтруктураОшибок.Свойство("Город")) Тогда + Город = СокрЛП(СтруктураПроверки.Город.Наименование + " " + СтруктураПроверки.Город.Сокращение); + КонецЕсли; + + Если Уровень > 4 И (ПустаяСтрока(НаселенныйПункт) Или СтруктураПроверки.СтруктураОшибок.Свойство("НаселенныйПункт")) Тогда + НаселенныйПункт = СокрЛП(СтруктураПроверки.НаселенныйПункт.Наименование + " " + + СтруктураПроверки.НаселенныйПункт.Сокращение); + КонецЕсли; + + // Исправляем индекс + НовыйИндекс = УправлениеКонтактнойИнформациейКлассификаторы.ПолучитьИндекс(Регион + , Район, Город, НаселенныйПункт, Улица, Дом, Корпус); + + Если Не ПустаяСтрока(НовыйИндекс) Тогда + Индекс = НовыйИндекс; + КонецЕсли; + + // Обновляем структуру адреса + СтруктураАдреса.Индекс = Индекс; + СтруктураАдреса.Регион = Регион; + СтруктураАдреса.Район = Район; + СтруктураАдреса.Город = Город; + СтруктураАдреса.НаселенныйПункт = НаселенныйПункт; + СтруктураАдреса.Улица = Улица; + СтруктураАдреса.Дом = Дом; + СтруктураАдреса.Корпус = Корпус; + СтруктураАдреса.Квартира = Квартира; + + // Проверяем ещё раз и возвращаем структуру ошибок + СтруктураПроверки = УправлениеКонтактнойИнформациейКлассификаторы.ПроверитьСоответствиеАдресаКЛАДРу("" + , Регион, Район, Город, НаселенныйПункт, Улица, Дом, Корпус); + + СтруктураПроверки.Вставить("СтруктураАдреса", СтруктураАдреса); + + Возврат СтруктураПроверки; + +КонецФункции + +&НаСервереБезКонтекста +Функция ЗагружатьРегион(Регион) + + // Загрузить регион могут только администраторы или пользователи с правом добавления/изменения базовой НСИ + Если НЕ Пользователи.РолиДоступны("ДобавлениеИзменениеБазовойНСИ") Тогда + Возврат Ложь; + КонецЕсли; + + // Разбиваем регион на наименование и сокращение + АдресноеСокращение = ""; + НаименованиеРегиона = УправлениеКонтактнойИнформациейКлассификаторы.ПолучитьИмяИАдресноеСокращение(Регион, АдресноеСокращение); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | АдресныйКлассификатор.Код + |ИЗ + | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор + |ГДЕ + | АдресныйКлассификатор.ТипАдресногоЭлемента = 1 + | И АдресныйКлассификатор.Наименование = &НаименованиеРегиона"; + Запрос.УстановитьПараметр("НаименованиеРегиона", НаименованиеРегиона); + + Если Запрос.Выполнить().Пустой() Тогда + Возврат Ложь; // Загружаются только регионы, которые есть в списке регионов. + Иначе + РегионЗагружен = УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(Регион); + Возврат Не РегионЗагружен; // Загружаем регион, если он не загружен. + КонецЕсли; + +КонецФункции + +&НаСервереБезКонтекста +Функция ЗагруженныеПоляПоРегиону(СтруктураАдреса) + + Если УправлениеКонтактнойИнформациейКлассификаторы.АдресныйЭлементЗагружен(СтруктураАдреса.Регион) Тогда + + СтруктураЗагруженных = УправлениеКонтактнойИнформациейКлассификаторы.СтруктураЗагруженныхЭлементовАдреса( + СтруктураАдреса.Регион, СтруктураАдреса.Район, СтруктураАдреса.Город, СтруктураАдреса.НаселенныйПункт, СтруктураАдреса.Улица); + + Возврат СтруктураЗагруженных; + + Иначе + + Возврат Новый Структура("Регион", Ложь); + + КонецЕсли; + +КонецФункции diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Form.form index 5ca2fba25..bf7d3bc97 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Form.form @@ -51,7 +51,7 @@ ПометкаРасширеннаяПодсказка - 81 + 84 Label true true @@ -88,7 +88,7 @@ НаименованиеАдресногоОбъектаРасширеннаяПодсказка - 83 + 86 Label true true @@ -133,7 +133,7 @@ false ВыделитьВсеРасширеннаяПодсказка - 67 + 70 Label true true @@ -161,7 +161,7 @@ false ОтменитьВыделитьВсеРасширеннаяПодсказка - 68 + 71 Label true true @@ -188,7 +188,7 @@ false НайтиРасширеннаяПодсказка - 69 + 72 Label true true @@ -215,7 +215,7 @@ false ОтменитьПоискРасширеннаяПодсказка - 70 + 73 Label true true @@ -243,32 +243,9 @@ ТаблицаАдресныхОбъектовСтрокаПоиска - 72 - - ТаблицаАдресныхОбъектовСтрокаПоискаРасширеннаяПодсказка - 74 - Label - true - true - - Left - - - - ТаблицаАдресныхОбъектовСтрокаПоискаКонтекстноеМеню - 73 - true - - ТаблицаАдресныхОбъектов - - true - - - - ТаблицаАдресныхОбъектовСостояниеПросмотра 75 - ТаблицаАдресныхОбъектовСостояниеПросмотраРасширеннаяПодсказка + ТаблицаАдресныхОбъектовСтрокаПоискаРасширеннаяПодсказка 77 Label true @@ -278,10 +255,33 @@ - ТаблицаАдресныхОбъектовСостояниеПросмотраКонтекстноеМеню + ТаблицаАдресныхОбъектовСтрокаПоискаКонтекстноеМеню 76 true + ТаблицаАдресныхОбъектов + + true + + + + ТаблицаАдресныхОбъектовСостояниеПросмотра + 78 + + ТаблицаАдресныхОбъектовСостояниеПросмотраРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + + ТаблицаАдресныхОбъектовСостояниеПросмотраКонтекстноеМеню + 79 + true + ViewStatusAddition ТаблицаАдресныхОбъектов @@ -290,10 +290,10 @@ ТаблицаАдресныхОбъектовУправлениеПоиском - 78 + 81 ТаблицаАдресныхОбъектовУправлениеПоискомРасширеннаяПодсказка - 80 + 83 Label true true @@ -303,7 +303,7 @@ ТаблицаАдресныхОбъектовУправлениеПоискомКонтекстноеМеню - 79 + 82 true SearchControlAddition @@ -314,7 +314,7 @@ ТаблицаАдресныхОбъектовРасширеннаяПодсказка - 71 + 74 Label true true @@ -369,7 +369,7 @@ ГруппаВыборАдресныхОбъектовДляЗагрузкиРасширеннаяПодсказка - 66 + 69 Label true true @@ -401,7 +401,7 @@ СтраницаВыборАдресныхОбъектовРасширеннаяПодсказка - 65 + 68 Label true true @@ -439,7 +439,7 @@ СпособЗагрузкиРасширеннаяПодсказка - 95 + 98 Label true true @@ -504,7 +504,7 @@ ВыборСпособаЗагрузкиРасширеннаяПодсказка - 94 + 97 Label true true @@ -542,7 +542,7 @@ None ПустРасширеннаяПодсказка - 99 + 102 Label true true @@ -580,7 +580,7 @@ ПустаяСтраницаРасширеннаяПодсказка - 98 + 101 Label true true @@ -610,7 +610,7 @@ ДискИТСРасширеннаяПодсказка - 102 + 105 Label true true @@ -659,7 +659,7 @@ СтраницаЗагрузкаСДискаИТСРасширеннаяПодсказка - 101 + 104 Label true true @@ -689,7 +689,7 @@ ПутьКФайламДанныхНаДискеРасширеннаяПодсказка - 105 + 108 Label true true @@ -738,7 +738,7 @@ СтраницаЗагрузкаФайловРасширеннаяПодсказка - 104 + 107 Label true true @@ -767,7 +767,7 @@ СтраницыСпособаЗагрузкиРасширеннаяПодсказка - 97 + 100 Label true true @@ -795,7 +795,7 @@ СтраницаВыборИсточникаРасширеннаяПодсказка - 93 + 96 Label true true @@ -826,7 +826,7 @@ ТекстСообщенияОЗагрузкеРасширеннаяПодсказка - 108 + 111 Label true true @@ -864,7 +864,7 @@ false ЗагрузитьРасширеннаяПодсказка - 109 + 112 Label true true @@ -901,7 +901,7 @@ None ПустойРеквРасширеннаяПодсказка - 112 + 115 Label true true @@ -939,7 +939,7 @@ ГруппаПустаяГруппаРасширеннаяПодсказка - 111 + 114 Label true true @@ -955,21 +955,101 @@ СтраницаСтатусЗагрузки 52 - - ИндикаторЗагрузки - 48 + + ГруппаИндикатора + 62 + + ДлительнаяОперация + 60 + + <key>ru</key> + <value>Длительная операция</value> + + true + true + + true + + + ДлительнаяОперацияРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + + ДлительнаяОперацияКонтекстноеМеню + 61 + true + + 6 + true + 3 + true + + + CommonPicture.ДлительнаяОперация48 + + + + + СтатусЗагрузки + 55 + true + true + + true + + + СтатусЗагрузки + + None + + СтатусЗагрузкиРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + + СтатусЗагрузкиКонтекстноеМеню + 56 + true + + LabelField + Enter + true + Left + true + + true + true + true + + true true true - - ИндикаторЗагрузки - - None + + <key>ru</key> + <value>Группа индикатора</value> + + + ru + Группа индикатора + + false - ИндикаторЗагрузкиРасширеннаяПодсказка - 115 + ГруппаИндикатораРасширеннаяПодсказка + 118 Label true true @@ -977,61 +1057,13 @@ Left - - ИндикаторЗагрузкиКонтекстноеМеню - 49 - true - - ProgressBarField - Enter - true - Left - true - - 32 - true - 1 - true - true - 100 - Broken - - - - СтатусЗагрузки - 55 - true - true - - true - - - СтатусЗагрузки - - None - - СтатусЗагрузкиРасширеннаяПодсказка - 117 - Label - true - true - - Left - - - - СтатусЗагрузкиКонтекстноеМеню - 56 - true - - LabelField - Enter - true - Left - true - - true - true + UsualGroup + + Auto + true + true + Auto + Auto true @@ -1049,7 +1081,7 @@ СтраницаСтатусЗагрузкиРасширеннаяПодсказка - 114 + 117 Label true true @@ -1078,7 +1110,7 @@ СтраницыЗагрузкиРасширеннаяПодсказка - 110 + 113 Label true true @@ -1107,7 +1139,7 @@ 50 СтраницаЗагрузкаРасширеннаяПодсказка - 107 + 110 Label true true @@ -1136,7 +1168,7 @@ СтраницыФормыРасширеннаяПодсказка - 64 + 67 Label true true @@ -1165,7 +1197,7 @@ false НазадРасширеннаяПодсказка - 60 + 63 Label true true @@ -1192,7 +1224,7 @@ false ДалееРасширеннаяПодсказка - 61 + 64 Label true true @@ -1232,7 +1264,7 @@ false ОтменаРасширеннаяПодсказка - 62 + 65 Label true true @@ -1268,7 +1300,7 @@ false СправкаРасширеннаяПодсказка - 63 + 66 Label true true @@ -1294,6 +1326,10 @@ OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + 52 LockOwner true @@ -1429,26 +1465,6 @@ true - - ИндикаторЗагрузки - - <key>ru</key> - <value>Индикатор загрузки</value> - - 2 - - Number - - 3 - - - - true - - - true - - СтатусЗагрузки @@ -1487,6 +1503,54 @@ <itemValueType/> </extInfo> </attributes> + <attributes> + <name>АдресХранилища</name> + <title> + <key>ru</key> + <value>Адрес хранилища</value> + + 9 + + String + + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 10 + + + true + + + true + + + + ПараметрыОбработчикаОжидания + + <key>ru</key> + <value>Параметры обработчика ожидания</value> + + 11 + + + true + + + true + + КомандаДалее diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Module.bsl index 299820e10..f1073f7e6 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Module.bsl @@ -1,11 +1,6 @@ - //////////////////////////////////////////////////////////////////////////////// -// БЛОК ОБРАБОТЧИКОВ СОБЫТИЙ -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ -// Обработчик события "при создании на сервере" формы. -// Заполняет список выбора адресных объектов для загрузки. -// &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -25,9 +20,6 @@ КонецПроцедуры -// Обработчик события "при открытии" формы -// Вызывает функциональность обновления интерфейса -// &НаКлиенте Процедура ПриОткрытии(Отказ) @@ -40,38 +32,16 @@ КонецПроцедуры -// Обработчик нажатия на "кнопку "ВыделитьВсе" -// командной панели элемента управления "АдресныеОбъектыДляЗагрузки" -// Выделяет все адресные объекты в списке адресных объектов для загрузки -// &НаКлиенте -Процедура ВыделитьВсеВыполнить() - - Для Каждого ЭлементАдресныйОбъект Из АдресныеОбъектыДляЗагрузки Цикл - ЭлементАдресныйОбъект.Пометка = Истина; - КонецЦикла; - - УстановитьИзмененияВИнтерфейсе(); - +Процедура ПриЗакрытии() + Если ИдентификаторЗадания <> Неопределено Тогда + ДлительныеОперацииКлиент.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); + КонецЕсли; КонецПроцедуры -// Обработчик нажатия на "кнопку "ОтменитьВыделитьВсе" -// командной панели элемента управления "АдресныеОбъектыДляЗагрузки" -// Снимает выделение со всех адресных объектов в списке -// адресных объектов для загрузки -// -&НаКлиенте -Процедура ОтменитьВыделитьВсеВыполнить() - - Для Каждого ЭлементАдресныйОбъект Из АдресныеОбъектыДляЗагрузки Цикл - ЭлементАдресныйОбъект.Пометка = Ложь; - КонецЦикла; - - ОтметитьОбязательные(ЭтаФорма); - - УстановитьИзмененияВИнтерфейсе(); - -КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ // Обработчик события НачалоВыбора поля ввода формы ПутьКФайламДанныхНаДиске. // Вызывает диалог выбора директории, после выбора проверяет, существуют @@ -93,11 +63,10 @@ Если АдресныйКлассификаторКлиент.ПроверитьНаличиеФайловДанныхВКаталоге(ПутьКФайламДанныхНаДиске) Тогда УстановитьИзмененияВИнтерфейсе (); Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файлы данных не найдены в каталоге ""%1"".'"), - ПутьКФайламДанныхНаДиске), , - "ПутьКФайламДанныхНаДиске"); + СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Файлы данных не найдены в каталоге ""%1"".'"), + ПутьКФайламДанныхНаДиске); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю, , "ПутьКФайламДанныхНаДиске"); КонецЕсли; КонецЕсли; #Иначе @@ -128,12 +97,11 @@ Если ФайлыСуществуют Тогда УстановитьИзмененияВИнтерфейсе(); Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Файлы данных КЛАДР не найдены: ""%1"". |Проверьте правильность указанного пути к Диску ИТС.'"), - ДискИТС), , - "ДискИТС"); + ДискИТС); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю, , "ДискИТС"); КонецЕсли; КонецЕсли; #Иначе @@ -172,25 +140,54 @@ КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +// Обработчик нажатия на "кнопку "ВыделитьВсе" +// командной панели элемента управления "АдресныеОбъектыДляЗагрузки" +// Выделяет все адресные объекты в списке адресных объектов для загрузки +// +&НаКлиенте +Процедура ВыделитьВсеВыполнить() + + Для Каждого ЭлементАдресныйОбъект Из АдресныеОбъектыДляЗагрузки Цикл + ЭлементАдресныйОбъект.Пометка = Истина; + КонецЦикла; + + УстановитьИзмененияВИнтерфейсе(); + +КонецПроцедуры + +// Обработчик нажатия на "кнопку "ОтменитьВыделитьВсе" +// командной панели элемента управления "АдресныеОбъектыДляЗагрузки" +// Снимает выделение со всех адресных объектов в списке +// адресных объектов для загрузки +// +&НаКлиенте +Процедура ОтменитьВыделитьВсеВыполнить() + + Для Каждого ЭлементАдресныйОбъект Из АдресныеОбъектыДляЗагрузки Цикл + ЭлементАдресныйОбъект.Пометка = Ложь; + КонецЦикла; + + ОтметитьОбязательные(ЭтаФорма); + + УстановитьИзмененияВИнтерфейсе(); + +КонецПроцедуры + &НаКлиенте Процедура ЗагрузитьВыполнить() ОчиститьСообщения(); - Если ЗагрузитьКЛАДР() Тогда - Состояние(НСтр("ru = 'Адресный классификатор успешно загружен.'")); - Оповестить("Запись_АдресныйКлассификатор", Новый Структура("Событие", "Загрузить")); - СохранитьПараметрыЗагрузки(); - Закрыть(Истина); - КонецЕсли; + УстановитьДоступностьКнопокПриЗагрузке(Ложь); - УстановитьСтатусЗагрузки(""); + ЗагрузитьКЛАДР(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Управление мастером загрузки - // Обработчик нажатия на кнопку "Далее" // &НаКлиенте @@ -200,9 +197,8 @@ Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборАдресныхОбъектов Тогда Если КоличествоОтмеченныхАдресныхОбъектов() = 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Требуется выбрать хотя бы один адресный объект.'"), , - "АдресныеОбъектыДляЗагрузки"); + СообщениеПользователю = НСтр("ru = 'Требуется выбрать хотя бы один адресный объект.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю, , "АдресныеОбъектыДляЗагрузки"); Возврат; КонецЕсли; Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника; @@ -210,16 +206,14 @@ Если ИсточникДанныхДляЗагрузки = 2 И (ПустаяСтрока(ДискИТС) ИЛИ НЕ АдресныйКлассификаторКлиент.ПроверитьНаличиеФайловНаДискеИТС(ДискИТС))Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Проверьте правильность указания пути к диску ИТС.'"), , - "ДискИТС"); + СообщениеПользователю = НСтр("ru = 'Проверьте правильность указания пути к диску ИТС.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю, , "ДискИТС"); Возврат; ИначеЕсли ИсточникДанныхДляЗагрузки = 3 И (ПустаяСтрока(ПутьКФайламДанныхНаДиске) ИЛИ НЕ АдресныйКлассификаторКлиент.ПроверитьНаличиеФайловДанныхВКаталоге(ПутьКФайламДанныхНаДиске))Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Проверьте правильность указания пути к файлам КЛАДР, а так же состав файлов.'"), , - "ПутьКФайламДанныхНаДиске"); + СообщениеПользователю = НСтр("ru = 'Проверьте правильность указания пути к файлам КЛАДР, а так же состав файлов.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю, , "ПутьКФайламДанныхНаДиске"); Возврат; КонецЕсли; Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаЗагрузка; @@ -244,9 +238,17 @@ КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// БЛОК СЕРВИСНЫХ ФУНКЦИЙ -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура УстановитьДоступностьКнопокПриЗагрузке(Флаг = Истина) + + Элементы.Назад.Доступность = Флаг; + Элементы.Загрузить.Доступность = Флаг; + +КонецПроцедуры &НаСервере Процедура СохранитьПараметрыЗагрузки() @@ -324,17 +326,15 @@ КонецПроцедуры -// Релизация загрузки классификатора -// &НаКлиенте -Функция ЗагрузитьКЛАДР() +Процедура ЗагрузитьКЛАДР() // Требуется для аутентификации на пользовательском сайте Перем ЗапросФормыАутентификации, ДанныеАутентификации, ПутьКДанным; - ИндикаторЗагрузки = 0; + ТекстСообщенияОшибки = НСтр("ru = 'Ошибка при загрузке адресных сведений: '"); - ВозвращаемоеЗначение = Истина; + РезультатВыполнения = Истина; Если ИсточникДанныхДляЗагрузки = 2 Тогда // загрузка с диска ИТС Если Прав(ДискИТС, 1) <> "\" Тогда @@ -359,177 +359,206 @@ АдресныеОбъекты.Добавить("SO"); КонецЕсли; + // Первый этап - загрузка адаптированной базы данных КЛАДР на клиент. + // В зависимости от выбора метода загрузка осуществляется по разному. Попытка - // Первый этап - загрузка адаптированной базы данных КЛАДР на сервер. - // В зависимости от выбора метода загрузка осуществляется по разному. - - Если ИсточникДанныхДляЗагрузки = 1 Тогда - // Загрузка с пользовательского сайта 1С - Если Не ПолучитьДанныеАутентификации(ДанныеАутентификации, ЗапросФормыАутентификации) Тогда - Возврат Ложь; - КонецЕсли; - - Состояние(НСтр("ru = 'Загружается адресный классификатор...'")); - - Результат = ЗагрузитьАдресныеОбъектыССервера(АдресныеОбъекты, ДанныеАутентификации, ПутьКДанным); - Если Не Результат.Статус И Не ЗапросФормыАутентификации Тогда - Если Не ПолучитьДанныеАутентификации(ДанныеАутентификации, ЗапросФормыАутентификации, Истина) Тогда - Возврат Ложь; - КонецЕсли; - Результат = ЗагрузитьАдресныеОбъектыССервера(АдресныеОбъекты, ДанныеАутентификации, ПутьКДанным); - КонецЕсли; - - Если Не Результат.Статус Тогда - ВызватьИсключение Результат.СообщениеОбОшибке; - КонецЕсли; - - Если Прав(ПутьКДанным, 1) <> "\" Тогда - ПутьКДанным = ПутьКДанным + "\"; - КонецЕсли; - - Иначе - Если ИсточникДанныхДляЗагрузки = 2 Тогда - // Загрузка с диска ИТС - Состояние(НСтр("ru = 'Загружается адресный классификатор...'")); - УстановитьСтатусЗагрузки(НСтр("ru = 'Приведение файлов с диска ИТС к требуемому формату.'")); - ПутьКДанным = АдресныйКлассификаторКлиент.ПреобразоватьФайлыКЛАДРEXEВZIP(ДискИТС); - Если ПутьКДанным = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Загрузка адресного классификатора была отменена.'")); - Возврат Ложь; - КонецЕсли; - ИндикаторЗагрузки = 25; - // - ИначеЕсли ИсточникДанныхДляЗагрузки = 3 Тогда - // Загрузка из файлов на диске - Состояние(НСтр("ru = 'Загружается адресный классификатор...'")); - УстановитьСтатусЗагрузки(НСтр("ru = 'Сжатие файлов перед передачей на сервер.'")); - МассивФайловДляЗагрузки = АдресныйКлассификаторКлиент.СписокФайловДанных(); - Для Каждого ИмяФайла Из МассивФайловДляЗагрузки Цикл - АдресныйКлассификаторКлиент.СжатьФайл(ПутьКФайламДанныхНаДиске, ИмяФайла, ПутьКДанным); - ИндикаторЗагрузки = (МассивФайловДляЗагрузки.Найти(ИмяФайла)+1) * 25 / МассивФайловДляЗагрузки.Количество(); - ОбновитьОтображениеДанных(); - КонецЦикла; - КонецЕсли; - - ZipФайл = Новый ЧтениеZipФайла(ПутьКДанным + "kladr.zip"); - ВерсияЗагружаемогоКЛАДР = НачалоДня(ZipФайл.Элементы[0].ВремяИзменения); - - КонецЕсли; - - ОбновитьОтображениеДанных(); - - // Второй этап - передача файлов на сервер 1с:Предприятия - УстановитьСтатусЗагрузки(НСтр("ru = 'Передача файлов на сервер 1С:Предприятия.'")); - - ПутьКДаннымНаСервере = Неопределено; - Если ИсточникДанныхДляЗагрузки = 1 Тогда - // - Для Каждого АдресныйОбъект Из АдресныеОбъекты Цикл - // - Если АдресныйОбъект = "SO" Тогда - АдресныйКлассификаторКлиент.ПередатьФайлНаСервер(ПутьКДанным, "socrbase.zip", ПутьКДаннымНаСервере); - Иначе - АдресныйКлассификаторКлиент.ПередатьФайлыНаСерверПоАдреснымОбъектам(ПутьКДанным, ПутьКДаннымНаСервере, АдресныйОбъект); - КонецЕсли; - ИндикаторЗагрузки = 25 + (АдресныеОбъекты.Найти(АдресныйОбъект)+1) * 25 / АдресныеОбъекты.Количество(); - ОбновитьОтображениеДанных(); - КонецЦикла; - Иначе - МассивФайловДляЗагрузки = АдресныйКлассификаторКлиент.СписокФайловДанных(); - Для Каждого ИмяФайла Из МассивФайловДляЗагрузки Цикл - АдресныйКлассификаторКлиент.ПередатьФайлНаСервер(ПутьКДанным, ИмяФайла, ПутьКДаннымНаСервере); - ИндикаторЗагрузки = 25 + (МассивФайловДляЗагрузки.Найти(ИмяФайла)+1) * 25 / МассивФайловДляЗагрузки.Количество(); - ОбновитьОтображениеДанных(); - КонецЦикла; - КонецЕсли; - - // Третий этап - загрузка адресных сведений в регистр сведений. - // Предполагается что к текущему моменту на сервере в каталоге ПутьКДаннымНаСервере - // содержатся все необходимые файлы данных - - Если ИсточникДанныхДляЗагрузки = 1 Тогда - Результат = АдресныйКлассификаторКлиентСервер.ПолучитьВерсииДоступныеНаСайте1С(); - Если НЕ Результат.Статус Тогда - Возврат Ложь; - КонецЕсли; - ДоступныеВерсии = Результат.ДоступныеВерсии; - Иначе - ДоступныеВерсии = Новый Соответствие; - Для Каждого АдресныйОбъект Из АдресныеОбъекты Цикл - ДоступныеВерсии.Вставить(АдресныйОбъект, ВерсияЗагружаемогоКЛАДР); - КонецЦикла; - КонецЕсли; - - ВерсииХранимыхСведений = АдресныйКлассификатор.ПолучитьВерсииАдресныхОбъектов(); - ТекущиеВерсии = Новый Соответствие; - Для каждого ЭлементСписка Из ВерсииХранимыхСведений Цикл - ТекущиеВерсии.Вставить(ЭлементСписка.Представление, ЭлементСписка.Значение); - КонецЦикла; - НовыеВерсииАдресныхОбъектов = Новый Соответствие; - - Для Каждого АдресныйОбъект Из АдресныеОбъекты Цикл - - Если АдресныйОбъект = "AL" Тогда - // Альтернативные названия загружаются с регионом - Продолжить; - ИначеЕсли АдресныйОбъект = "SO" Тогда - // Адресные сокращения загружаются отдельно (ниже) - Продолжить; - КонецЕсли; - - АдресныеСведения = АдресныйКлассификатор.ИнформацияПоАдресномуОбъекту(АдресныйОбъект); - ТекущаяВерсия = ?(ТекущиеВерсии[АдресныйОбъект] = Неопределено, '00000000', ТекущиеВерсии[АдресныйОбъект]); - ДоступнаяВерсия = ?(ДоступныеВерсии[АдресныйОбъект] = Неопределено, '00000000', ДоступныеВерсии[АдресныйОбъект]); - Если ДоступнаяВерсия <= ТекущаяВерсия Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сведения по объекту: %1 %2 не загружены, так как - |текущая версия от %3, а загружаемая от %4.'"), - АдресныеСведения.Наименование, - АдресныеСведения.Сокращение, - Формат(ТекущаяВерсия, "ДФ=dd.MM.yyyy"), - Формат(ДоступнаяВерсия, "ДФ=dd.MM.yyyy"))); - ВозвращаемоеЗначение = Ложь; - Продолжить; - КонецЕсли; - - НовыеВерсииАдресныхОбъектов.Вставить(АдресныйОбъект, ДоступнаяВерсия); - - УстановитьСтатусЗагрузки( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загружаются сведения по объекту: %1 %2.'"), - АдресныеСведения.Наименование, - АдресныеСведения.Сокращение)); - - АдресныйКлассификатор.ЗагрузитьКлассификаторПоАдресномуОбъекту( - АдресныйОбъект, - ПутьКДаннымНаСервере, - ИсточникДанныхДляЗагрузки = 1); - - ИндикаторЗагрузки = 50 + (АдресныеОбъекты.Найти(АдресныйОбъект)+1) * 50 / АдресныеОбъекты.Количество(); - ОбновитьОтображениеДанных(); - КонецЦикла; - - ТекущаяВерсия = ?(ТекущиеВерсии["SO"] = Неопределено, '00000000', ТекущиеВерсии["SO"]); - ДоступнаяВерсия = ?(ДоступныеВерсии["SO"] = Неопределено, '00000000', ДоступныеВерсии["SO"]); - Если ДоступнаяВерсия > ТекущаяВерсия Тогда - УстановитьСтатусЗагрузки(НСтр("ru = 'Загружаются адресные сокращения.'")); - АдресныйКлассификатор.ЗагрузитьАдресныеСокращения(ПутьКДаннымНаСервере); - НовыеВерсииАдресныхОбъектов.Вставить("SO", ДоступнаяВерсия); - КонецЕсли; - - АдресныйКлассификатор.ОбновитьВерсииАдресныхСведений(НовыеВерсииАдресныхОбъектов); + ВерсияЗагружаемогоКЛАДР = Неопределено; + РезультатВыполнения = ЗагрузитьФайлыКЛАДРНаКлиент(ДанныеАутентификации, ЗапросФормыАутентификации, АдресныеОбъекты, ПутьКДанным, ВерсияЗагружаемогоКЛАДР); + Если Не РезультатВыполнения Тогда + Возврат; + КонецЕсли; Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Ошибка при загрузке адресных сведений: '") - + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - ВозвращаемоеЗначение = Ложь; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОшибки + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбщегоНазначенияКлиентСервер.УдалитьКаталогСФайлами(ПутьКДанным); + Возврат; КонецПопытки; - ОбщегоНазначенияКлиентСервер.УдалитьКаталогСФайлами(ПутьКДанным); - УдалитьФайлыНаСервере(ПутьКДаннымНаСервере); + // Второй этап - передача файлов на сервер 1С:Предприятия + Попытка + ПутьКДаннымНаСервере = Неопределено; + ПередачаФайловКЛАДРСКлиентаНаСервер(ПутьКДанным, ПутьКДаннымНаСервере, АдресныеОбъекты); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОшибки + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + + ОбщегоНазначенияКлиентСервер.УдалитьКаталогСФайлами(ПутьКДанным); + УдалитьФайлыНаСервере(ПутьКДаннымНаСервере); + Возврат; + КонецПопытки; + + // Третий этап - загрузка адресных сведений в регистр сведений. + // Предполагается что к текущему моменту на сервере в каталоге ПутьКДаннымНаСервере + // содержатся все необходимые файлы данных + + УстановитьСтатусЗагрузки(НСтр("ru = 'Загружаются данные по адресным объектам.'")); - Возврат ВозвращаемоеЗначение; + СообщениеОбОшибке = ""; + Результат = ЗагрузкаАдресныхСведенийНаСервере(АдресныеОбъекты, ПутьКДанным, ПутьКДаннымНаСервере, ВерсияЗагружаемогоКЛАДР, ИсточникДанныхДляЗагрузки); + Если НЕ Результат.ЗаданиеВыполнено Тогда + ИдентификаторЗадания = Результат.ИдентификаторЗадания; + АдресХранилища = Результат.АдресХранилища; + + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); + Иначе + ОбновитьСодержание(Результат); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеЗадания() + + Попытка + Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаЗагрузка Тогда + Если ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + Результат = Новый Структура; + Результат.Вставить("РезультатЗагрузки", ПолучитьИзВременногоХранилища(АдресХранилища)); + ОбновитьСодержание(Результат); + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания( + "Подключаемый_ПроверитьВыполнениеЗадания", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); + КонецЕсли; + КонецЕсли; + Исключение + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьСодержание(Результат) + + УстановитьДоступностьКнопокПриЗагрузке(); + + ОбщегоНазначенияКлиентСервер.УдалитьКаталогСФайлами(Результат.РезультатЗагрузки.ПутьКДанным); + УдалитьФайлыНаСервере(Результат.РезультатЗагрузки.ПутьКДаннымНаСервере); + + Если Результат.РезультатЗагрузки.СтатусВыполнения Тогда + Состояние(НСтр("ru = 'Адресный классификатор успешно загружен.'")); + Оповестить("Запись_АдресныйКлассификатор", Новый Структура("Событие", "Загрузить")); + СохранитьПараметрыЗагрузки(); + Закрыть(Истина); + КонецЕсли; + + Если Не ПустаяСтрока(Результат.РезультатЗагрузки.СообщениеПользователю) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.РезультатЗагрузки.СообщениеПользователю); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ЗагрузитьФайлыКЛАДРНаКлиент(ДанныеАутентификации, ЗапросФормыАутентификации, АдресныеОбъекты, ПутьКДанным, ВерсияЗагружаемогоКЛАДР) + + Если ИсточникДанныхДляЗагрузки = 1 Тогда + // Загрузка с пользовательского сайта 1С + Если Не ПолучитьДанныеАутентификации(ДанныеАутентификации, ЗапросФормыАутентификации) Тогда + Возврат Ложь; + КонецЕсли; + + Состояние(НСтр("ru = 'Загружается адресный классификатор...'")); + + Результат = ЗагрузитьАдресныеОбъектыССервера(АдресныеОбъекты, ДанныеАутентификации, ПутьКДанным); + Если Не Результат.Статус И Не ЗапросФормыАутентификации Тогда + Если Не ПолучитьДанныеАутентификации(ДанныеАутентификации, ЗапросФормыАутентификации, Истина) Тогда + Возврат Ложь; + КонецЕсли; + Результат = ЗагрузитьАдресныеОбъектыССервера(АдресныеОбъекты, ДанныеАутентификации, ПутьКДанным); + КонецЕсли; + + Если Не Результат.Статус Тогда + ВызватьИсключение Результат.СообщениеОбОшибке; + КонецЕсли; + + Если Прав(ПутьКДанным, 1) <> "\" Тогда + ПутьКДанным = ПутьКДанным + "\"; + КонецЕсли; + + Иначе + Если ИсточникДанныхДляЗагрузки = 2 Тогда + // Загрузка с диска ИТС + Состояние(НСтр("ru = 'Загружается адресный классификатор...'")); + УстановитьСтатусЗагрузки(НСтр("ru = 'Приведение файлов с диска ИТС к требуемому формату.'")); + ПутьКДанным = АдресныйКлассификаторКлиент.ПреобразоватьФайлыКЛАДРEXEВZIP(ДискИТС); + Если ПутьКДанным = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Загрузка адресного классификатора была отменена.'")); + Возврат Ложь; + КонецЕсли; + // + ИначеЕсли ИсточникДанныхДляЗагрузки = 3 Тогда + // Загрузка из файлов на диске + Состояние(НСтр("ru = 'Загружается адресный классификатор...'")); + УстановитьСтатусЗагрузки(НСтр("ru = 'Сжатие файлов.'")); + МассивФайловДляЗагрузки = АдресныйКлассификаторКлиент.СписокФайловДанных(); + Для Каждого ИмяФайла Из МассивФайловДляЗагрузки Цикл + АдресныйКлассификаторКлиент.СжатьФайл(ПутьКФайламДанныхНаДиске, ИмяФайла, ПутьКДанным); + КонецЦикла; + КонецЕсли; + + ZipФайл = Новый ЧтениеZipФайла(ПутьКДанным + "kladr.zip"); + ВерсияЗагружаемогоКЛАДР = НачалоДня(ZipФайл.Элементы[0].ВремяИзменения); + + КонецЕсли; + + ОбновитьОтображениеДанных(); + + Возврат Истина; + +КонецФункции + +&НаКлиенте +Процедура ПередачаФайловКЛАДРСКлиентаНаСервер(ПутьКДанным, ПутьКДаннымНаСервере, АдресныеОбъекты) + + УстановитьСтатусЗагрузки(НСтр("ru = 'Передача файлов на сервер 1С:Предприятия.'")); + + Если ИсточникДанныхДляЗагрузки = 1 Тогда + // + Для Каждого АдресныйОбъект Из АдресныеОбъекты Цикл + // + Если АдресныйОбъект = "SO" Тогда + АдресныйКлассификаторКлиент.ПередатьФайлНаСервер(ПутьКДанным, "socrbase.zip", ПутьКДаннымНаСервере); + Иначе + АдресныйКлассификаторКлиент.ПередатьФайлыНаСерверПоАдреснымОбъектам(ПутьКДанным, ПутьКДаннымНаСервере, АдресныйОбъект); + КонецЕсли; + КонецЦикла; + Иначе + МассивФайловДляЗагрузки = АдресныйКлассификаторКлиент.СписокФайловДанных(); + Для Каждого ИмяФайла Из МассивФайловДляЗагрузки Цикл + АдресныйКлассификаторКлиент.ПередатьФайлНаСервер(ПутьКДанным, ИмяФайла, ПутьКДаннымНаСервере); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ЗагрузкаАдресныхСведенийНаСервере(АдресныеОбъекты, ПутьКДанным, ПутьКДаннымНаСервере, ВерсияЗагружаемогоКЛАДР, ИсточникДанныхДляЗагрузки) + + ПараметрыЗагрузки = Новый Структура("АдресныеОбъекты, ПутьКДанным, ПутьКДаннымНаСервере, ВерсияЗагружаемогоКЛАДР, ИсточникДанныхДляЗагрузки", + АдресныеОбъекты, ПутьКДанным, ПутьКДаннымНаСервере, ВерсияЗагружаемогоКЛАДР, ИсточникДанныхДляЗагрузки); + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + АдресныйКлассификатор.ЗагрузкаАдресныхСведенийИзФайловКЛАДРВРегистрСведений(ПараметрыЗагрузки, АдресХранилища); + Результат = Новый Структура("ЗаданиеВыполнено", Истина); + Иначе + НаименованиеЗадания = НСтр("ru = 'Загрузка адресного классификатора'"); + + Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "АдресныйКлассификатор.ЗагрузкаАдресныхСведенийИзФайловКЛАДРВРегистрСведений", + ПараметрыЗагрузки, + НаименованиеЗадания); + + АдресХранилища = Результат.АдресХранилища; + КонецЕсли; + + Если Результат.ЗаданиеВыполнено Тогда + Результат.Вставить("РезультатЗагрузки", ПолучитьИзВременногоХранилища(АдресХранилища)); + КонецЕсли; + + Возврат Результат; КонецФункции @@ -583,7 +612,6 @@ Если Не Результат.Статус Тогда Прервать; КонецЕсли; - ИндикаторЗагрузки = (АдресныеОбъекты.Найти(АдресныйОбъект)+1) * 25 / АдресныеОбъекты.Количество(); КонецЦикла; Возврат Результат; @@ -733,4 +761,3 @@ КонецЦикла КонецПроцедуры - diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаОчисткиАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаОчисткиАдресногоКлассификатора/Module.bsl index 9bb6a19af..f0a563502 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаОчисткиАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаОчисткиАдресногоКлассификатора/Module.bsl @@ -1,6 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// Блок функций - обработчиков событий -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ // Обработчик события "при создании на сервере" формы // Заполняет таблицу по макету @@ -12,6 +11,10 @@ КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + // Обработчик события "выбор" элемента формы АдресныеОбъекты // Инвертирует флаг выбора адресного объекта // @@ -20,6 +23,10 @@ Элемент.ТекущиеДанные.Пометка = НЕ Элемент.ТекущиеДанные.Пометка; КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + // Обработчик события нажатия на кнопку командной панели // элемента управления АдресныеОбъекты. // Устанавливает флаг выбора всем адресным объектам в списке @@ -75,9 +82,9 @@ КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// -// Блок сервисных функций -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Заполняет переданную таблицу значений по значениям таблицы адресных объектов. // Выбирается код, наименование и сокращение типа объекта. diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index 4717bc4c1..8c2b035f4 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -59,11 +59,11 @@ <dcscor:item xsi:type="SettingsParameterValue"> <dcscor:use>false</dcscor:use> <dcscor:parameter>ЦветФона</dcscor:parameter> - <dcscor:value xsi:type="v8ui:Color">style:УдаленныйДополнительныйРеквизитЦвет</dcscor:value> + <dcscor:value xsi:type="v8ui:Color">style:НедоступныеДанныеЦвет</dcscor:value> </dcscor:item> <dcscor:item xsi:type="SettingsParameterValue"> <dcscor:parameter>ЦветТекста</dcscor:parameter> - <dcscor:value xsi:type="v8ui:Color">style:УдаленныйДополнительныйРеквизитЦвет</dcscor:value> + <dcscor:value xsi:type="v8ui:Color">style:НедоступныеДанныеЦвет</dcscor:value> </dcscor:item> </appearance> </item> diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Form.form index c747a8404..02780fcf6 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Form.form @@ -441,7 +441,7 @@ <id>20</id> <title> <key>ru</key> - <value>Сокр.</value> + <value>Сокращение</value> true true diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Module.bsl index fa125d984..10b76351f 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Module.bsl @@ -30,7 +30,7 @@ &НаКлиенте Процедура ПроверитьОбновление(Команда) - АдресныйКлассификаторКлиент.ПроверитьОбновлениеАдресныхОбъектов(); + АдресныйКлассификаторКлиент.ОпределитьНеобходимостьОбновленияАдресныхОбъектов(); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаУправленияАдреснымКлассификатором/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаУправленияАдреснымКлассификатором/Module.bsl index 3a81e18d3..ef207e8bb 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаУправленияАдреснымКлассификатором/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаУправленияАдреснымКлассификатором/Module.bsl @@ -19,7 +19,7 @@ //////////////////////////////////////////////////////////////////////////////// -// ДОПОЛНИТЕЛЬНЫЕ ПРОЦЕДУРЫ И ОБРАБОТКИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиентеНаСервереБезКонтекста Функция ПолучитьСостояниеАдресногоКлассификатора(Контекст) @@ -57,7 +57,7 @@ &НаКлиенте Процедура ПроверитьОбновлениеАдресногоКлассификатора(Команда) - АдресныйКлассификаторКлиент.ПроверитьОбновлениеАдресныхОбъектов(); + АдресныйКлассификаторКлиент.ОпределитьНеобходимостьОбновленияАдресныхОбъектов(); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/БлокировкиСеансовОбластиДанных/БлокировкиСеансовОбластиДанных.mdo b/SSL/src/InformationRegisters/БлокировкиСеансовОбластиДанных/БлокировкиСеансовОбластиДанных.mdo new file mode 100644 index 000000000..69c5a5a36 --- /dev/null +++ b/SSL/src/InformationRegisters/БлокировкиСеансовОбластиДанных/БлокировкиСеансовОбластиДанных.mdo @@ -0,0 +1,161 @@ + + + + + + + + + + + + БлокировкиСеансовОбластиДанных + + ru + Блокировки сеансов области данных + + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ru + Блокировка сеансов области данных + + + НачалоБлокировки + + ru + Начало блокировки + + + Date + + + + ru + Время начала действия блокировки работы пользователей области данных + + + + ShowError + Use + + Index + + + КонецБлокировки + + ru + Конец блокировки + + + Date + + + + ru + Время окончания действия блокировки работы пользователей области данных + + + + Use + + Index + + + СообщениеБлокировки + + ru + Сообщение блокировки + + + String + + 300 + + + + ru + Причина блокировки для вывода пользователю, который пытается войти в заблокированную область данных + + + + Use + Use + + + + Эксклюзивная + + ru + Эксклюзивная + + + Boolean + + + ru + Эксклюзивная блокировка сеансов области данных не может быть отменена администратором приложения + + + + Use + + + + ОбластьДанных + + ru + Область данных + + + Number + + 7 + true + + + + ru + Область данных информаиционной базы + + + + Index + Use + + true + + diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form index cde3261f6..7bd8e1687 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form @@ -849,7 +849,7 @@ - СформироватьОтчетПоИзменениямВыполнить + СформироватьОтчетПоИзменениям Auto @@ -871,7 +871,7 @@ - ОткрытьВерсиюОбъектаВыполнить + ОткрытьВерсиюОбъекта Auto diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl index c3b76f090..a7d15750d 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// Секция обработчиков событий формы и элементов формы +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -20,65 +20,27 @@ ЗначениеВРеквизитФормы(СформироватьТаблицуВерсий(Ссылка), "СписокВерсий"); - Элементы.СписокВерсийПерейтиНаВерсию.Доступность = РольДоступна(Метаданные.Роли.ПолныеПрава); + Элементы.СписокВерсийПерейтиНаВерсию.Доступность = Пользователи.ЭтоПолноправныйПользователь(); Элементы.КМ_ПерейтиНаВерсию.Доступность = Элементы.СписокВерсийПерейтиНаВерсию.Доступность; КонецПроцедуры -// Функция возвращает список номеров версий объекта переданного по ссылке -// -// Параметры: -// Ссылка - СправочникСсылка, ДокументСсылка - ссылка на объект -// -&НаСервереБезКонтекста -Функция СформироватьТаблицуВерсий(Ссылка) - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | НомерВерсии КАК НомерВерсии, - | АвторВерсии КАК АвторВерсии, - | ДатаВерсии КАК ДатаВерсии, - | Комментарий КАК Комментарий - | ИЗ - | РегистрСведений.ВерсииОбъектов - |ГДЕ - | Объект=&Ссылка - |УПОРЯДОЧИТЬ ПО НомерВерсии Убыв"; - Запрос.УстановитьПараметр("Ссылка", Ссылка); - - Возврат Запрос.Выполнить().Выгрузить(); - -КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокВерсий &НаКлиенте Процедура СписокВерсийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ОткрытьВерсиюОбъекта(); + ОткрытьОтчетПоВерсииОбъекта(); КонецПроцедуры -&НаКлиенте -Процедура ОткрытьВерсиюОбъектаВыполнить() - - ОткрытьВерсиюОбъекта(); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ -// Обработчик нажатия на кнопку "ОтчетПоИзменениям" -// &НаКлиенте -Процедура СформироватьОтчетПоИзменениямВыполнить() - - ВыделенныеСтроки = Элементы.СписокВерсий.ВыделенныеСтроки; - - СравниваемыеВерсии = СформироватьСписокВыбранныхВерсий(ВыделенныеСтроки); - - Если СравниваемыеВерсии.Количество() < 2 Тогда - Предупреждение(НСтр("ru = 'Для формирования отчета по изменениям, необходимо выбрать, как минимум, две версии.'")); - Иначе - ОткрытьФормуОтчета(СравниваемыеВерсии); - КонецЕсли; - +Процедура ОткрытьВерсиюОбъекта(Команда) + ОткрытьОтчетПоВерсииОбъекта(); КонецПроцедуры &НаКлиенте @@ -102,6 +64,44 @@ КонецПроцедуры +&НаКлиенте +Процедура СформироватьОтчетПоИзменениям(Команда) + + ВыделенныеСтроки = Элементы.СписокВерсий.ВыделенныеСтроки; + + СравниваемыеВерсии = СформироватьСписокВыбранныхВерсий(ВыделенныеСтроки); + + Если СравниваемыеВерсии.Количество() < 2 Тогда + Предупреждение(НСтр("ru = 'Для формирования отчета по изменениям, необходимо выбрать, как минимум, две версии.'")); + Иначе + ОткрытьФормуОтчета(СравниваемыеВерсии); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервереБезКонтекста +Функция СформироватьТаблицуВерсий(Ссылка) + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | НомерВерсии КАК НомерВерсии, + | АвторВерсии КАК АвторВерсии, + | ДатаВерсии КАК ДатаВерсии, + | Комментарий КАК Комментарий + | ИЗ + | РегистрСведений.ВерсииОбъектов + |ГДЕ + | Объект=&Ссылка + |УПОРЯДОЧИТЬ ПО НомерВерсии Убыв"; + Запрос.УстановитьПараметр("Ссылка", Ссылка); + + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + &НаСервере Функция ПерейтиНаВерсиюСервер(Ссылка, НомерВерсии) @@ -131,14 +131,8 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Секция вспомогательных функций - -// Проверяет, что в списке версий выбрана версия и вызывает форму -// отчета с переданным параметром - номером выбранной версии. -// &НаКлиенте -Процедура ОткрытьВерсиюОбъекта() +Процедура ОткрытьОтчетПоВерсииОбъекта() СравниваемыеВерсии = Новый Массив; СравниваемыеВерсии.Добавить(Элементы.СписокВерсий.ТекущиеДанные.НомерВерсии); @@ -146,8 +140,6 @@ КонецПроцедуры -// Открывает форму отчета по изменениям, с требуемыми параметрами -// &НаКлиенте Процедура ОткрытьФормуОтчета(СравниваемыеВерсии) @@ -162,8 +154,6 @@ КонецПроцедуры -// Функция возвращает список номеров выбранных версий -// &НаКлиенте Функция СформироватьСписокВыбранныхВерсий(ВыделенныеСтроки) diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl index 795df068f..fce9b7a0c 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl @@ -1,6 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ -// &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -61,7 +60,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ ЭКСПОРТНЫХ ФУНКЦИЙ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Основная функция модуля, отвечающая за формирование отчета. // В зависимости от числа версий в массиве вызывает либо функциональность @@ -117,9 +116,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Функции для получения отчета по объекту - // Функция предназначена для формирования отчета по версии объекта // // Параметры: @@ -215,6 +211,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Функции для получения отчета по объекту + // Выводит изменившиеся реквизиты в отчет. При этом получает их представление. // Функция ВывестиРеквизитыПоРазобранномуОбъекту(ТЧОтчета, ВерсияОбъекта) @@ -2170,7 +2169,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ СЛУЖЕБНЫХ ФУНКЦИЙ (ВНУТРЕННЯЯ ЛОГИКА) +// Прочие служебные процедуры и функции // Восстанавливает сериализованный в XML объект. // Параметры diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl index 03554dc2d..40f5a981c 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl index ff58d3712..99b740bc4 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl @@ -1,9 +1,14 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) Отказ = Истина; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура УдалитьЗаписи(Команда) @@ -16,6 +21,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервере Процедура УдалитьВерсииИЗРегистра(знач МассивКлючейЗаписей) diff --git a/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo b/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo index 437efbd9c..f75c00571 100644 --- a/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo +++ b/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo @@ -74,6 +74,25 @@ + + ОбластьДанных + + ru + Область данных + + + Number + + 7 + + + + + Use + Use + + true + ИмяПодсистемы diff --git a/SSL/src/InformationRegisters/ВерсииПоставляемыхДанных/ВерсииПоставляемыхДанных.mdo b/SSL/src/InformationRegisters/ВерсииПоставляемыхДанных/ВерсииПоставляемыхДанных.mdo new file mode 100644 index 000000000..687bb3f7c --- /dev/null +++ b/SSL/src/InformationRegisters/ВерсииПоставляемыхДанных/ВерсииПоставляемыхДанных.mdo @@ -0,0 +1,88 @@ + + + + + + + + + + + + ВерсииПоставляемыхДанных + + ru + Версии поставляемых данных + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ВерсияПоставляемыхДанных + + ru + Версия поставляемых данных + + + Number + + 20 + true + + + + + Use + Use + + + + ВидПоставляемыхДанных + + ru + Вид поставляемых данных + + + EnumRef.ВидыПоставляемыхДанных + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl index 5a1c4d714..ac01c8150 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/МоиБизнесПроцессы/Module.bsl @@ -1,12 +1,12 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) УстановитьОтбор(Новый Структура("ПоказыватьЗавершенные", ПоказыватьЗавершенные)); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( - Список.Отбор, "Автор", ОбщегоНазначения.ТекущийПользователь()); + Список.Отбор, "Автор", Пользователи.ТекущийПользователь()); КонецПроцедуры @@ -25,7 +25,17 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ПоказыватьЗавершенныеПриИзменении(Элемент) + + УстановитьОтбор(Новый Структура("ПоказыватьЗавершенные", ПоказыватьЗавершенные)); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -43,12 +53,8 @@ КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ПоказыватьЗавершенныеПриИзменении(Элемент) - - УстановитьОтбор(Новый Структура("ПоказыватьЗавершенные", ПоказыватьЗавершенные)); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ПометкаУдаления(Команда) @@ -56,7 +62,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура УстановитьОтбор(ПараметрыОтбора) diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl index 1ed3c53fe..82ca9bd2e 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) @@ -9,7 +9,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -27,6 +27,9 @@ КонецЕсли; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ПометкаУдаления(Команда) БизнесПроцессыИЗадачиКлиент.СписокБизнесПроцессовПометкаУдаления(Элементы.Список); diff --git a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/RecordSetModule.bsl new file mode 100644 index 000000000..43121fc28 --- /dev/null +++ b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/RecordSetModule.bsl @@ -0,0 +1,24 @@ +Перем Запрос; + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +Процедура ПередЗаписью(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + СтандартныеПодсистемыПереопределяемый.ДанныеПроизводственногоКалендаряПередЗаписьюНабораЗаписей(Отказ, Замещение, ЭтотОбъект, Запрос); + +КонецПроцедуры + +Процедура ПриЗаписи(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + СтандартныеПодсистемыПереопределяемый.ДанныеПроизводственногоКалендаряПриЗаписиНабораЗаписей(Отказ, Замещение, ЭтотОбъект, Запрос); + +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt new file mode 100644 index 000000000..312354bfa --- /dev/null +++ b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt @@ -0,0 +1,1098 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/ДанныеПроизводственногоКалендаря.mdo b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/ДанныеПроизводственногоКалендаря.mdo new file mode 100644 index 000000000..c965dda3a --- /dev/null +++ b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/ДанныеПроизводственногоКалендаря.mdo @@ -0,0 +1,133 @@ + + + + + + + + + + + + ДанныеПроизводственногоКалендаря + + ru + Данные производственного календаря + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ВидДня + + ru + Вид дня + + + EnumRef.ВидыДнейПроизводственногоКалендаря + + + + Use + Use + + + + ПроизводственныйКалендарь + + ru + Производственный календарь + + + CatalogRef.ПроизводственныеКалендари + + + + true + Use + Use + true + + true + + + Дата + + ru + Дата + + + Date + + Date + + + + + Use + Use + + true + + + Год + + ru + Год + + + Number + + 4 + true + + + + + Use + Use + + true + + + ДанныеПроизводственныхКалендарей + + ru + Данные производственных календарей + + TextDocument + + diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form index bb4f10f0f..c8a584459 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form @@ -198,7 +198,7 @@ ru - Причина добавления исключения для пользователя или группы пользователей + Причина отдельного запрета для пользователя или группы пользователей OnChange @@ -527,10 +527,10 @@ ДанныеПользователя 266 - ПользовательНеВыбран + СтраницаПользовательНеВыбран 267 - Заглушка4 + ПользовательНеВыбран 269 <key>ru</key> @@ -542,7 +542,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>Заглушка4РасширеннаяПодсказка</name> + <name>ПользовательНеВыбранРасширеннаяПодсказка</name> <id>354</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -552,7 +552,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>Заглушка4КонтекстноеМеню</name> + <name>ПользовательНеВыбранКонтекстноеМеню</name> <id>270</id> <autoFill>true</autoFill> </contextMenu> @@ -570,14 +570,14 @@ </userVisible> <title> <key>ru</key> - <value>Пользователь не выбран</value> + <value>Страница пользователь не выбран</value> ru - Пользователь не выбран + Страница пользователь не выбран - ПользовательНеВыбранРасширеннаяПодсказка + СтраницаПользовательНеВыбранРасширеннаяПодсказка 353 Label true @@ -593,7 +593,7 @@ - ПользовательВыбран + СтраницаПользовательВыбран 268 СпособУказанияДатыЗапрета @@ -913,7 +913,7 @@ ПроизвольнаяДатаНеИспользуется 229 - Заглушка1 + ПустаяНадписьДляОтображенияСтраницы1 230 true true @@ -921,7 +921,7 @@ true - Заглушка1РасширеннаяПодсказка + ПустаяНадписьДляОтображенияСтраницы1РасширеннаяПодсказка 369 Label true @@ -931,7 +931,7 @@ - Заглушка1КонтекстноеМеню + ПустаяНадписьДляОтображенияСтраницы1КонтекстноеМеню 231 true @@ -1201,7 +1201,7 @@ ИзменениеДанныхДоДатыЗапретаНеРазрешено 242 - Заглушка3 + ПустаяНадписьДляОтображенияСтраницы2 243 true true @@ -1209,7 +1209,7 @@ true - Заглушка3РасширеннаяПодсказка + ПустаяНадписьДляОтображенияСтраницы2РасширеннаяПодсказка 380 Label true @@ -1219,7 +1219,7 @@ - Заглушка3КонтекстноеМеню + ПустаяНадписьДляОтображенияСтраницы2КонтекстноеМеню 244 true @@ -1354,7 +1354,7 @@ НепроизвольнаяДатаНеИспользуется 247 - Заглушка2 + ПустаяНадписьДляОтображенияСтраницы3 248 true true @@ -1362,7 +1362,7 @@ true - Заглушка2РасширеннаяПодсказка + ПустаяНадписьДляОтображенияСтраницы3РасширеннаяПодсказка 383 Label true @@ -1372,7 +1372,7 @@ - Заглушка2КонтекстноеМеню + ПустаяНадписьДляОтображенияСтраницы3КонтекстноеМеню 249 true @@ -1540,11 +1540,11 @@ <key>ru</key> - <value>Даты запрета командная панель без выбора разделов</value> + <value>Даты запрета командная панель без выбора разделов без выбора объектов</value> ru - Даты запрета командная панель без выбора разделов + Даты запрета командная панель без выбора разделов без выбора объектов ДатыЗапретаКоманднаяПанельБезВыбораРазделовБезВыбораОбъектовРасширеннаяПодсказка @@ -1683,10 +1683,6 @@ ru Даты запрета командная панель с выбором разделов без выбора объектов - - ru - Даты запрета командная панель с выбором разделов - ДатыЗапретаКоманднаяПанельСВыборомРазделовБезВыбораОбъектовРасширеннаяПодсказка 391 @@ -1850,10 +1846,6 @@ ru Даты запрета командная панель без выбора разделов с выбором объектов - - ru - Даты запрета командная панель без выбора разделов с выбором объектов - ДатыЗапретаКоманднаяПанельБезВыбораРазделовСВыборомОбъектовРасширеннаяПодсказка 396 @@ -2043,10 +2035,6 @@ ru Даты запрета командная панель с выбором разделов - - ru - Даты запрета командная панель с выбором разделов - ДатыЗапретаКоманднаяПанельСВыборомРазделовРасширеннаяПодсказка 402 @@ -2240,10 +2228,6 @@ ru Даты запрета командная панель с выбором общей даты с выбором объектов - - ru - Даты запрета командная панель с разделами - ДатыЗапретаКоманднаяПанельСВыборомОбщейДатыСВыборомОбъектовРасширеннаяПодсказка 409 @@ -2702,10 +2686,6 @@ ru Даты запрета контекстное меню стандартные команды - - ru - Даты запрета контекстное меню стандартные команды - ДатыЗапретаКонтекстноеМенюСтандартныеКомандыРасширеннаяПодсказка 418 @@ -2812,14 +2792,14 @@ <key>ru</key> - <value>Пользователь выбран</value> + <value>Страница пользователь выбран</value> ru - Пользователь выбран + Страница пользователь выбран - ПользовательВыбранРасширеннаяПодсказка + СтраницаПользовательВыбранРасширеннаяПодсказка 355 Label true @@ -2899,10 +2879,10 @@ ФормаКоманднаяПанель -1 - ФормаОтчетыПоПользователям + Отчеты 197 - ОтчетПоПользователям + ДатыЗапретаПоПользователям 198 true true @@ -2910,7 +2890,7 @@ true - ОтчетПоПользователямРасширеннаяПодсказка + ДатыЗапретаПоПользователямРасширеннаяПодсказка 318 Label true @@ -2919,7 +2899,7 @@ Left - Form.Command.ОтчетПоПользователям + Form.Command.ДатыЗапретаПоПользователям Normal Auto true @@ -2928,7 +2908,7 @@ Auto - ОтчетПоРазделамОбъектамДляПользователей + ДатыЗапретаПоРазделамОбъектамДляПользователей 199 true true @@ -2936,7 +2916,7 @@ true - ОтчетПоРазделамОбъектамДляПользователейРасширеннаяПодсказка + ДатыЗапретаПоРазделамОбъектамДляПользователейРасширеннаяПодсказка 319 Label true @@ -2945,7 +2925,7 @@ Left - Form.Command.ОтчетПоРазделамОбъектамДляПользователей + Form.Command.ДатыЗапретаПоРазделамОбъектамДляПользователей Normal Auto true @@ -2964,10 +2944,11 @@ ru - Отчеты по датам запрета, установленным "По пользователям" + Отчеты по датам запрета изменения данных, +установленным "По пользователям" - ФормаОтчетыПоПользователямРасширеннаяПодсказка + ОтчетыРасширеннаяПодсказка 317 Label true @@ -2986,7 +2967,7 @@ - ФормаПересчитатьДаты + ПересчитатьДаты 316 true true @@ -2994,7 +2975,7 @@ true - ФормаПересчитатьДатыРасширеннаяПодсказка + ПересчитатьДатыРасширеннаяПодсказка 320 Label true @@ -3013,7 +2994,7 @@ InAdditionalSubmenu - ФормаОбновить + Обновить 200 true true @@ -3021,7 +3002,7 @@ true - ФормаОбновитьРасширеннаяПодсказка + ОбновитьРасширеннаяПодсказка 321 Label true @@ -3103,7 +3084,7 @@ Представление <key>ru</key> - <value>Раздел, объект</value> + <value>Представление</value> 3 @@ -3972,15 +3953,16 @@ - ОтчетПоПользователям + ДатыЗапретаПоПользователям <key>ru</key> - <value>Отчет по пользователям</value> + <value>Даты запрета по пользователям</value> 1 ru - Отчет по пользователям, группам пользователей + Даты запрета изменения данных +по пользователям и группам пользователей true @@ -3990,7 +3972,7 @@ - ОтчетПоПользователям + ДатыЗапретаПоПользователям TextPicture @@ -4068,15 +4050,16 @@ Auto - ОтчетПоРазделамОбъектамДляПользователей + ДатыЗапретаПоРазделамОбъектамДляПользователей <key>ru</key> - <value>Отчет по разделам и объектам для пользователей</value> + <value>Даты запрета по разделам и объектам для пользователей</value> 2 ru - Отчет по разделам и объектам для пользователей и групп пользователей + Даты запрета изменения данных +по разделам и объектам для пользователей и групп пользователей true @@ -4086,7 +4069,7 @@ - ОтчетПоРазделамОбъектамДляПользователей + ДатыЗапретаПоРазделамОбъектамДляПользователей TextPicture diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl index 1a794a0ed..756cd58e0 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl @@ -1,7 +1,6 @@ //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -27,11 +26,14 @@ Элементы.УстановкаДатыЗапрета.СписокВыбора.НайтиПоЗначению("ПоПользователям").Представление = НСтр("ru = 'По узлам планов обмена'"); // - Элементы.ФормаОтчетыПоПользователям.Подсказка = НСтр("ru = 'Отчеты по датам запрета, установленным ""По узлам планов обмена""'"); - Команды.ОтчетПоПользователям.Заголовок = НСтр("ru = 'Отчет по узлам планов обмена'"); - Команды.ОтчетПоПользователям.Подсказка = НСтр("ru = 'Отчет по узлам планов обмена, планам обмена'"); - Команды.ОтчетПоРазделамОбъектамДляПользователей.Заголовок = НСтр("ru = 'Отчет по разделам и объектам для узлов планов обмена'"); - Команды.ОтчетПоРазделамОбъектамДляПользователей.Подсказка = НСтр("ru = 'Отчет по разделам и объектам для узлов планов обмена и планов обмена'"); + Элементы.Отчеты.Подсказка = НСтр("ru = 'Отчеты по датам запрета загрузки данных, + |установленным ""По узлам планов обмена"".'"); + Команды.ДатыЗапретаПоПользователям.Заголовок = НСтр("ru = 'Даты запрета по узлам планов обмена'"); + Команды.ДатыЗапретаПоПользователям.Подсказка = НСтр("ru = 'Даты запрета загрузки данных + |по узлам планов обмена и планам обмена.'"); + Команды.ДатыЗапретаПоРазделамОбъектамДляПользователей.Заголовок = НСтр("ru = 'Даты запрета по разделам и объектам для узлов планов обмена'"); + Команды.ДатыЗапретаПоРазделамОбъектамДляПользователей.Подсказка = НСтр("ru = 'Даты запрета загрузки данных + |по разделам и объектам для узлов планов обмена и планов обмена.'"); // Элементы.ПользователиПолноеПредставление.Заголовок = НСтр("ru = 'План обмена: узел'"); // @@ -60,12 +62,12 @@ Список.Удалить(Список.НайтиПоЗначению("ПоОбъектам")); ИначеЕсли НЕ ПоказыватьРазделы Тогда - Элементы.ОтчетПоРазделамОбъектамДляПользователей.Заголовок = ТекстЗаголовкаКомандыОтчетПоОбъектам(); + Элементы.ДатыЗапретаПоРазделамОбъектамДляПользователей.Заголовок = ТекстЗаголовкаКомандыОтчетПоОбъектам(); Список.Удалить(Список.НайтиПоЗначению("ПоРазделамИОбъектам")); Список.Удалить(Список.НайтиПоЗначению("ПоРазделам")); ИначеЕсли ВсеРазделыБезОбъектов Тогда - Элементы.ОтчетПоРазделамОбъектамДляПользователей.Заголовок = ТекстЗаголовкаКомандыОтчетПоРазделам(); + Элементы.ДатыЗапретаПоРазделамОбъектамДляПользователей.Заголовок = ТекстЗаголовкаКомандыОтчетПоРазделам(); Список.Удалить(Список.НайтиПоЗначению("ПоРазделамИОбъектам")); Список.Удалить(Список.НайтиПоЗначению("ПоОбъектам")); Иначе @@ -85,11 +87,9 @@ ТекстВопроса = ТекстВопросаОНесохраненныхДанных(); Если ЗначениеЗаполнено(ТекстВопроса) Тогда - ТекстВопроса = ТекстВопроса + Символы.ПС + ТекстВопросаЗакрытьФорму(); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Нет Тогда - Отказ = Истина; - КонецЕсли; + + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, , , ТекстВопроса + Символы.ПС + ТекстВопросаЗакрытьФорму()); + КонецЕсли; КонецПроцедуры @@ -102,88 +102,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий команд и элементов формы -// - -&НаКлиенте -Процедура ПересчитатьДаты(Команда) - - ТекстВопроса = ТекстВопросаОНесохраненныхДанных(); - - Если ЗначениеЗаполнено(ТекстВопроса) Тогда - ТекстВопроса = ТекстВопроса + Символы.ПС + ТекстВопросаПересчитатьДатыЗапрета(); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Нет Тогда - Возврат; - КонецЕсли; - КонецЕсли; - - ОписаниеРезультата = ПересчитатьДатыНаСервере(); - - ОбновитьНаСервере(); - РазвернутьДанныеПользователя(); - - Предупреждение(ОписаниеРезультата); - -КонецПроцедуры - -&НаСервере -Функция ПересчитатьДатыНаСервере() - - ОписаниеРезультата = ""; - ДатыЗапретаИзмененияВызовСервера.ПересчитатьТекущиеЗначенияОтносительныхДатЗапрета(Ложь, ОписаниеРезультата); - - ОбновитьНаСервере(); - - Возврат ОписаниеРезультата; - -КонецФункции - -&НаКлиенте -Процедура Обновить(Команда) - - ТекстВопроса = ТекстВопросаОНесохраненныхДанных(); - - Если ЗначениеЗаполнено(ТекстВопроса) Тогда - ТекстВопроса = ТекстВопроса + Символы.ПС + ТекстВопросаОбновитьДанные(); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Нет Тогда - Возврат; - КонецЕсли; - КонецЕсли; - - ОбновитьНаСервере(); - РазвернутьДанныеПользователя(); - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьНаСервере() - - // Расчет установки даты запрета - УстановкаДатыЗапрета = ТекущаяУстановкаДатыЗапрета(Параметры.ДатыЗапретаЗагрузкиДанных); - // Установка видимости по рассчитанной установке дате запрета - УстановитьВидимость(); - - // Кэширование текущей даты на сервере - ТекущаяДатаНаСервере = ТекущаяДатаСеанса(); - - СтарыйПользователь = ТекущийПользователь; - - ПрочитатьПользователей(); - - Отбор = Новый Структура("Пользователь", СтарыйПользователь); - НайденныеСтроки = ПользователиДатЗапрета.НайтиСтроки(Отбор); - Если НайденныеСтроки.Количество() = 0 Тогда - ТекущийПользователь = ЗначениеДляВсехПользователей; - Иначе - Элементы.Пользователи.ТекущаяСтрока = НайденныеСтроки[0].ПолучитьИдентификатор(); - ТекущийПользователь = СтарыйПользователь; - КонецЕсли; - - ПрочитатьДанныеПользователя(ЭтаФорма); - -КонецПроцедуры +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура УстановкаДатыЗапретаОчистка(Элемент, СтандартнаяОбработка) @@ -229,45 +148,111 @@ КонецПроцедуры - &НаКлиенте -Процедура ПодобратьПользователей(Команда) +Процедура СпособУказанияДатыЗапретаОчистка(Элемент, СтандартнаяОбработка) - ВыбратьПодобратьПользователей(Истина); + СтандартнаяОбработка = Ложь; КонецПроцедуры &НаКлиенте -Процедура ОтчетПоПользователям(Команда) +Процедура СпособУказанияДатыЗапретаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - ПараметрыФормы = Новый Структура; + УдалитьЛишнее = Ложь; - Если Параметры.ДатыЗапретаЗагрузкиДанных Тогда - ИмяФормыОтчета = "Отчет.ДатыЗапретаЗагрузки.Форма.ФормаОтчета"; - Иначе - ИмяФормыОтчета = "Отчет.ДатыЗапретаИзменения.Форма.ФормаОтчета"; + Если СпособУказанияДатыЗапрета = ВыбранноеЗначение Тогда + Возврат; КонецЕсли; - ОткрытьФорму(ИмяФормыОтчета, ПараметрыФормы, ЭтаФорма); + Данные = Неопределено; + ТекущийСпособ = ТекущийСпособУказанияДатыЗапрета(ТекущийПользователь, ЕдинственныйРаздел, ПервыйРаздел, ЗначениеДляВсехПользователей, Данные); + + ТекстВопроса = ""; + Если ТекущийСпособ = "ПоРазделамИОбъектам" И ВыбранноеЗначение = "ОбщаяДата" Тогда + ТекстВопроса = ТекстВопросаУдалитьДатыЗапретаДляРазделовИОбъектов(); + + ИначеЕсли ТекущийСпособ = "ПоРазделамИОбъектам" И ВыбранноеЗначение = "ПоРазделам" + ИЛИ ТекущийСпособ = "ПоОбъектам" И ВыбранноеЗначение = "ОбщаяДата" Тогда + ТекстВопроса = ТекстВопросаУдалитьДатыЗапретаДляОбъектов(); + + ИначеЕсли ТекущийСпособ = "ПоРазделамИОбъектам" И ВыбранноеЗначение = "ПоОбъектам" + ИЛИ ТекущийСпособ = "ПоРазделам" И ВыбранноеЗначение = "ПоОбъектам" + ИЛИ ТекущийСпособ = "ПоРазделам" И ВыбранноеЗначение = "ОбщаяДата" Тогда + ТекстВопроса = ТекстВопросаУдалитьДатыЗапретаДляРазделов(); + + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстВопроса) Тогда + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Нет Тогда + СтандартнаяОбработка = Ложь; + Иначе + УдалитьЛишнее = Истина; + КонецЕсли; + КонецЕсли; + + Если СтандартнаяОбработка Тогда + СпособУказанияДатыЗапрета = ВыбранноеЗначение; + Если УдалитьЛишнее Тогда + УдалитьЛишнееПриИзмененииСпособаУказанияДатыЗапрета(ВыбранноеЗначение, ТекущийПользователь, УстановкаДатыЗапрета); + Элементы.Пользователи.Обновить(); + КонецЕсли; + ПрочитатьДанныеПользователя(ЭтаФорма, ВыбранноеЗначение, Данные); + КонецЕсли; + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Одинаковые обработчики событий форм ДатыЗапретаИзменения и РедактированиеДатыЗапрета + +&НаКлиенте +Процедура ОписаниеДатыЗапретаПриИзменении(Элемент) + + ОбщаяДатаЗапретаСОписаниемПриИзменении(ЭтаФорма); + ЗаписатьОбщуюДатуЗапретаСОписанием(); КонецПроцедуры &НаКлиенте -Процедура ОтчетПоРазделамОбъектамДляПользователей(Команда) +Процедура ДатаЗапретаПриИзменении(Элемент) - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПоРазделамОбъектам", Истина); - - Если Параметры.ДатыЗапретаЗагрузкиДанных Тогда - ИмяФормыОтчета = "Отчет.ДатыЗапретаЗагрузки.Форма.ФормаОтчета"; - Иначе - ИмяФормыОтчета = "Отчет.ДатыЗапретаИзменения.Форма.ФормаОтчета"; - КонецЕсли; - - ОткрытьФорму(ИмяФормыОтчета, ПараметрыФормы, ЭтаФорма); + ОбщаяДатаЗапретаСОписаниемПриИзменении(ЭтаФорма); + ЗаписатьОбщуюДатуЗапретаСОписанием(); КонецПроцедуры +&НаКлиенте +Процедура РазрешитьИзменениеДанныхДоДатыЗапретаПриИзменении(Элемент) + + ОбщаяДатаЗапретаСОписаниемПриИзменении(ЭтаФорма); + ЗаписатьОбщуюДатуЗапретаСОписанием(); + +КонецПроцедуры + +&НаКлиенте +Процедура КоличествоДнейРазрешенияПриИзменении(Элемент) + + ОбщаяДатаЗапретаСОписаниемПриИзменении(ЭтаФорма); + ЗаписатьОбщуюДатуЗапретаСОписанием(); + +КонецПроцедуры + +&НаКлиенте +Процедура КоличествоДнейРазрешенияАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) + + КоличествоДнейРазрешения = Текст; + + ОбщаяДатаЗапретаСОписаниемПриИзменении(ЭтаФорма); + ЗаписатьОбщуюДатуЗапретаСОписанием(); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Пользователи + &НаКлиенте Процедура ПользователиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -284,82 +269,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбновитьДанныеПользователя() - - ТекущиеДанные = Элементы.Пользователи.ТекущиеДанные; - - Если ТекущиеДанные = Неопределено - ИЛИ НЕ ЗначениеЗаполнено(ТекущиеДанные.Представление) Тогда - // - НовыйПользователь = Неопределено; - Иначе - НовыйПользователь = ТекущиеДанные.Пользователь; - КонецЕсли; - - Если НовыйПользователь = ТекущийПользователь Тогда - Возврат; - КонецЕсли; - - Если НЕ ПроверкаНесохраненныхЗаписей() Тогда - ПодключитьОбработчикОжидания("ПользователиВосстановитьТекущуюСтрокуПослеОтказаПриАктивизацииСтроки", 0.1, Истина); - Возврат; - КонецЕсли; - - СпособУказанияЗначениеВСписке = Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению(СпособУказанияДатыЗапрета); - Если ТекущийПользователь <> Неопределено И СпособУказанияЗначениеВСписке <> Неопределено Тогда - ТекущийСпособУказания = ТекущийСпособУказанияДатыЗапрета(ТекущийПользователь, ЕдинственныйРаздел, ПервыйРаздел, ЗначениеДляВсехПользователей); - ТекущийСпособУказания = ?(ЗначениеЗаполнено(ТекущийСпособУказания), ТекущийСпособУказания, "ОбщаяДата"); - СпособУказанияДатыЗапрета = ТекущийСпособУказания; - Если ТекущийСпособУказания <> СпособУказанияЗначениеВСписке.Значение Тогда - Предупреждение(ТекстСообщенияСпособУказанияНеИспользован( - СпособУказанияЗначениеВСписке.Представление, - ?(Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению(ТекущийСпособУказания) = Неопределено, - ТекущийСпособУказания, - Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению(ТекущийСпособУказания).Представление))); - КонецЕсли; - КонецЕсли; - - ТекущийПользователь = НовыйПользователь; - - // Чтение данных текущего пользователя - Если НовыйПользователь = Неопределено Тогда - СпособУказанияДатыЗапрета = "ОбщаяДата"; - ДатыЗапрета.ПолучитьЭлементы().Очистить(); - Элементы.ДанныеПользователя.ТекущаяСтраница = Элементы.ПользовательНеВыбран; - Иначе - ПрочитатьДанныеПользователя(ЭтаФорма); - РазвернутьДанныеПользователя(); - КонецЕсли; - - ОбновитьНаличиеДатЗапретаТекущегоПользователя(); - - // Блокировка команд Подобрать, Добавить (объект) пока не выбран раздел - ДатыЗапретаУстановитьДоступностьКоманд(Ложь); - -КонецПроцедуры - -&НаКлиенте -Функция ПроверкаНесохраненныхЗаписей() - - Отбор = Новый Структура("Пользователь", ТекущийПользователь); - НайденныеСтроки = ПользователиДатЗапрета.НайтиСтроки(Отбор); - Если НайденныеСтроки.Количество() > 0 Тогда - ТекстВопроса = ТекстВопросаОНесохраненныхДанных(Истина); - Если ЗначениеЗаполнено(ТекстВопроса) Тогда - ТекстВопроса = ТекстВопроса + Символы.ПС + ТекстВопросаОчиститьНезаполненыеСтроки(); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Нет Тогда - ПользователиТекущаяСтрока = НайденныеСтроки[0].ПолучитьИдентификатор(); - Возврат Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Возврат Истина; - -КонецФункции - &НаКлиенте Процедура ПользователиВосстановитьТекущуюСтрокуПослеОтказаПриАктивизацииСтроки() @@ -554,6 +463,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий элемента ПолноеПредставление таблицы формы Пользователи + &НаКлиенте Процедура ПользователиПолноеПредставлениеПриИзменении(Элемент) @@ -662,6 +574,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий элемента Комментарий таблицы формы Пользователи + &НаКлиенте Процедура ПользователиКомментарийПриИзменении(Элемент) @@ -672,94 +587,8 @@ КонецПроцедуры - -&НаКлиенте -Процедура СпособУказанияДатыЗапретаОчистка(Элемент, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - -КонецПроцедуры - -&НаКлиенте -Процедура СпособУказанияДатыЗапретаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - УдалитьЛишнее = Ложь; - - Если СпособУказанияДатыЗапрета = ВыбранноеЗначение Тогда - Возврат; - КонецЕсли; - - Данные = Неопределено; - ТекущийСпособ = ТекущийСпособУказанияДатыЗапрета(ТекущийПользователь, ЕдинственныйРаздел, ПервыйРаздел, ЗначениеДляВсехПользователей, Данные); - - ТекстВопроса = ""; - Если ТекущийСпособ = "ПоРазделамИОбъектам" И ВыбранноеЗначение = "ОбщаяДата" Тогда - ТекстВопроса = ТекстВопросаУдалитьДатыЗапретаДляРазделовИОбъектов(); - - ИначеЕсли ТекущийСпособ = "ПоРазделамИОбъектам" И ВыбранноеЗначение = "ПоРазделам" - ИЛИ ТекущийСпособ = "ПоОбъектам" И ВыбранноеЗначение = "ОбщаяДата" Тогда - ТекстВопроса = ТекстВопросаУдалитьДатыЗапретаДляОбъектов(); - - ИначеЕсли ТекущийСпособ = "ПоРазделамИОбъектам" И ВыбранноеЗначение = "ПоОбъектам" - ИЛИ ТекущийСпособ = "ПоРазделам" И ВыбранноеЗначение = "ПоОбъектам" - ИЛИ ТекущийСпособ = "ПоРазделам" И ВыбранноеЗначение = "ОбщаяДата" Тогда - ТекстВопроса = ТекстВопросаУдалитьДатыЗапретаДляРазделов(); - - КонецЕсли; - - Если ЗначениеЗаполнено(ТекстВопроса) Тогда - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Нет Тогда - СтандартнаяОбработка = Ложь; - Иначе - УдалитьЛишнее = Истина; - КонецЕсли; - КонецЕсли; - - Если СтандартнаяОбработка Тогда - СпособУказанияДатыЗапрета = ВыбранноеЗначение; - Если УдалитьЛишнее Тогда - УдалитьЛишнееПриИзмененииСпособаУказанияДатыЗапрета(ВыбранноеЗначение, ТекущийПользователь, УстановкаДатыЗапрета); - Элементы.Пользователи.Обновить(); - КонецЕсли; - ПрочитатьДанныеПользователя(ЭтаФорма, ВыбранноеЗначение, Данные); - КонецЕсли; - - СтандартнаяОбработка = Ложь; - -КонецПроцедуры - -&НаКлиенте -Процедура Разделы(Команда) - - ВыбратьРазделы(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПодобратьОбъекты(Команда) - - Если ТекущийПользователь = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияСначалаВыберитеПользователя()); - Возврат; - КонецЕсли; - - ВыбратьПодобратьОбъекты(Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура ДатыЗапретаИзменить(Команда) - - ТекущиеДанные = Элементы.ДатыЗапрета.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - Элементы.ДатыЗапрета.ИзменитьСтроку(); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДатыЗапрета &НаКлиенте Процедура ДатыЗапретаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -1117,6 +946,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий элемента ПолноеПредставление таблицы формы ДатыЗапрета + &НаКлиенте Процедура ДатыЗапретаПолноеПредставлениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -1192,6 +1024,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий элемента ДатаЗапрета таблицы формы ДатыЗапрета + &НаКлиенте Процедура ДатыЗапретаДатаЗапретаПриИзменении(Элемент) @@ -1202,55 +1037,237 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Обработчки событий этой формы и формы РедактированиеДатыЗапрета -// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте -Процедура ОписаниеДатыЗапретаПриИзменении(Элемент) +Процедура ПересчитатьДаты(Команда) - ОбщаяДатаЗапретаСОписаниемПриИзменении(ЭтаФорма); - ЗаписатьОбщуюДатуЗапретаСОписанием(); + ТекстВопроса = ТекстВопросаОНесохраненныхДанных(); + + Если ЗначениеЗаполнено(ТекстВопроса) Тогда + ТекстВопроса = ТекстВопроса + Символы.ПС + ТекстВопросаПересчитатьДатыЗапрета(); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Нет Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + ОписаниеРезультата = ПересчитатьДатыНаСервере(); + + ОбновитьНаСервере(); + РазвернутьДанныеПользователя(); + + Предупреждение(ОписаниеРезультата); КонецПроцедуры &НаКлиенте -Процедура ДатаЗапретаПриИзменении(Элемент) +Процедура Обновить(Команда) - ОбщаяДатаЗапретаСОписаниемПриИзменении(ЭтаФорма); - ЗаписатьОбщуюДатуЗапретаСОписанием(); + ТекстВопроса = ТекстВопросаОНесохраненныхДанных(); + + Если ЗначениеЗаполнено(ТекстВопроса) Тогда + ТекстВопроса = ТекстВопроса + Символы.ПС + ТекстВопросаОбновитьДанные(); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Нет Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + ОбновитьНаСервере(); + РазвернутьДанныеПользователя(); КонецПроцедуры &НаКлиенте -Процедура РазрешитьИзменениеДанныхДоДатыЗапретаПриИзменении(Элемент) +Процедура Разделы(Команда) - ОбщаяДатаЗапретаСОписаниемПриИзменении(ЭтаФорма); - ЗаписатьОбщуюДатуЗапретаСОписанием(); + ВыбратьРазделы(); КонецПроцедуры &НаКлиенте -Процедура КоличествоДнейРазрешенияПриИзменении(Элемент) +Процедура ПодобратьОбъекты(Команда) - ОбщаяДатаЗапретаСОписаниемПриИзменении(ЭтаФорма); - ЗаписатьОбщуюДатуЗапретаСОписанием(); + Если ТекущийПользователь = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияСначалаВыберитеПользователя()); + Возврат; + КонецЕсли; + + ВыбратьПодобратьОбъекты(Истина); КонецПроцедуры &НаКлиенте -Процедура КоличествоДнейРазрешенияАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) +Процедура ДатыЗапретаИзменить(Команда) - КоличествоДнейРазрешения = Текст; + ТекущиеДанные = Элементы.ДатыЗапрета.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Отказ = Истина; + Возврат; + КонецЕсли; - ОбщаяДатаЗапретаСОписаниемПриИзменении(ЭтаФорма); - ЗаписатьОбщуюДатуЗапретаСОписанием(); + Элементы.ДатыЗапрета.ИзменитьСтроку(); КонецПроцедуры +&НаКлиенте +Процедура ПодобратьПользователей(Команда) + + ВыбратьПодобратьПользователей(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ДатыЗапретаПоПользователям(Команда) + + ПараметрыФормы = Новый Структура; + + Если Параметры.ДатыЗапретаЗагрузкиДанных Тогда + ИмяФормыОтчета = "Отчет.ДатыЗапретаЗагрузки.Форма.ФормаОтчета"; + Иначе + ИмяФормыОтчета = "Отчет.ДатыЗапретаИзменения.Форма.ФормаОтчета"; + КонецЕсли; + + ОткрытьФорму(ИмяФормыОтчета, ПараметрыФормы, ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ДатыЗапретаПоРазделамОбъектамДляПользователей(Команда) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПоРазделамОбъектам", Истина); + + Если Параметры.ДатыЗапретаЗагрузкиДанных Тогда + ИмяФормыОтчета = "Отчет.ДатыЗапретаЗагрузки.Форма.ФормаОтчета"; + Иначе + ИмяФормыОтчета = "Отчет.ДатыЗапретаИзменения.Форма.ФормаОтчета"; + КонецЕсли; + + ОткрытьФорму(ИмяФормыОтчета, ПараметрыФормы, ЭтаФорма); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Функция ПересчитатьДатыНаСервере() + + ОписаниеРезультата = ""; + ДатыЗапретаИзмененияСлужебный.ПересчитатьТекущиеЗначенияОтносительныхДатЗапрета(Ложь, ОписаниеРезультата); + + ОбновитьНаСервере(); + + Возврат ОписаниеРезультата; + +КонецФункции + +&НаСервере +Процедура ОбновитьНаСервере() + + // Расчет установки даты запрета + УстановкаДатыЗапрета = ТекущаяУстановкаДатыЗапрета(Параметры.ДатыЗапретаЗагрузкиДанных); + // Установка видимости по рассчитанной установке дате запрета + УстановитьВидимость(); + + // Кэширование текущей даты на сервере + ТекущаяДатаНаСервере = ТекущаяДатаСеанса(); + + СтарыйПользователь = ТекущийПользователь; + + ПрочитатьПользователей(); + + Отбор = Новый Структура("Пользователь", СтарыйПользователь); + НайденныеСтроки = ПользователиДатЗапрета.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() = 0 Тогда + ТекущийПользователь = ЗначениеДляВсехПользователей; + Иначе + Элементы.Пользователи.ТекущаяСтрока = НайденныеСтроки[0].ПолучитьИдентификатор(); + ТекущийПользователь = СтарыйПользователь; + КонецЕсли; + + ПрочитатьДанныеПользователя(ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьДанныеПользователя() + + ТекущиеДанные = Элементы.Пользователи.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено + ИЛИ НЕ ЗначениеЗаполнено(ТекущиеДанные.Представление) Тогда + // + НовыйПользователь = Неопределено; + Иначе + НовыйПользователь = ТекущиеДанные.Пользователь; + КонецЕсли; + + Если НовыйПользователь = ТекущийПользователь Тогда + Возврат; + КонецЕсли; + + Если НЕ ПроверкаНесохраненныхЗаписей() Тогда + ПодключитьОбработчикОжидания("ПользователиВосстановитьТекущуюСтрокуПослеОтказаПриАктивизацииСтроки", 0.1, Истина); + Возврат; + КонецЕсли; + + СпособУказанияЗначениеВСписке = Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению(СпособУказанияДатыЗапрета); + Если ТекущийПользователь <> Неопределено И СпособУказанияЗначениеВСписке <> Неопределено Тогда + ТекущийСпособУказания = ТекущийСпособУказанияДатыЗапрета(ТекущийПользователь, ЕдинственныйРаздел, ПервыйРаздел, ЗначениеДляВсехПользователей); + ТекущийСпособУказания = ?(ЗначениеЗаполнено(ТекущийСпособУказания), ТекущийСпособУказания, "ОбщаяДата"); + СпособУказанияДатыЗапрета = ТекущийСпособУказания; + Если ТекущийСпособУказания <> СпособУказанияЗначениеВСписке.Значение Тогда + Предупреждение(ТекстСообщенияСпособУказанияНеИспользован( + СпособУказанияЗначениеВСписке.Представление, + ?(Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению(ТекущийСпособУказания) = Неопределено, + ТекущийСпособУказания, + Элементы.СпособУказанияДатыЗапрета.СписокВыбора.НайтиПоЗначению(ТекущийСпособУказания).Представление))); + КонецЕсли; + КонецЕсли; + + ТекущийПользователь = НовыйПользователь; + + // Чтение данных текущего пользователя + Если НовыйПользователь = Неопределено Тогда + СпособУказанияДатыЗапрета = "ОбщаяДата"; + ДатыЗапрета.ПолучитьЭлементы().Очистить(); + Элементы.ДанныеПользователя.ТекущаяСтраница = Элементы.СтраницаПользовательНеВыбран; + Иначе + ПрочитатьДанныеПользователя(ЭтаФорма); + РазвернутьДанныеПользователя(); + КонецЕсли; + + ОбновитьНаличиеДатЗапретаТекущегоПользователя(); + + // Блокировка команд Подобрать, Добавить (объект) пока не выбран раздел + ДатыЗапретаУстановитьДоступностьКоманд(Ложь); + +КонецПроцедуры + +&НаКлиенте +Функция ПроверкаНесохраненныхЗаписей() + + Отбор = Новый Структура("Пользователь", ТекущийПользователь); + НайденныеСтроки = ПользователиДатЗапрета.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + ТекстВопроса = ТекстВопросаОНесохраненныхДанных(Истина); + Если ЗначениеЗаполнено(ТекстВопроса) Тогда + ТекстВопроса = ТекстВопроса + Символы.ПС + ТекстВопросаОчиститьНезаполненыеСтроки(); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Нет Тогда + ПользователиТекущаяСтрока = НайденныеСтроки[0].ПолучитьИдентификатор(); + Возврат Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Истина; + +КонецФункции + &НаСервере Процедура ПрочитатьПользователей() @@ -1355,7 +1372,7 @@ Контекст.ТекущийПользовательПредставление = НайденныеСтроки[0].Представление; КонецЕсли; КонецЕсли; - Контекст.Элементы.ДанныеПользователя.ТекущаяСтраница = Контекст.Элементы.ПользовательВыбран; + Контекст.Элементы.ДанныеПользователя.ТекущаяСтраница = Контекст.Элементы.СтраницаПользовательВыбран; Контекст.ДатыЗапрета.ПолучитьЭлементы().Очистить(); Если ТекущийСпособУказания = Неопределено Тогда @@ -2543,7 +2560,7 @@ ИзменитьВидимость(Элементы.УстановкаПоПользователям, УстановкаДатыЗапрета <> "ДляВсехПользователей"); Если УстановкаДатыЗапрета <> "ПоПользователям" Тогда - Элементы.ДанныеПользователя.ТекущаяСтраница = Элементы.ПользовательВыбран; + Элементы.ДанныеПользователя.ТекущаяСтраница = Элементы.СтраницаПользовательВыбран; КонецЕсли; КонецПроцедуры @@ -3046,8 +3063,7 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции этой формы и формы РедактированиеДатыЗапрета -// +// Одинаковые процедуры и функции форм ДатыЗапретаИзменения и РедактированиеДатыЗапрета &НаКлиентеНаСервереБезКонтекста Процедура ОбщаяДатаЗапретаСОписаниемПриИзменении(Знач Контекст, РассчитатьДатуЗапрета = Истина); @@ -3171,7 +3187,6 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные функции строк интерфейса пользователя -// &НаКлиентеНаСервереБезКонтекста Функция СписокОписанийДатыЗапрета() @@ -3602,8 +3617,3 @@ Возврат НСтр("ru ='Выделенные строки не заполнены.'"); КонецФункции - - - - - diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form index 509b20c0a..402b932d7 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form @@ -40,10 +40,6 @@ РазделПредставление 35 - - <key>ru</key> - <value>Раздел</value> - true true @@ -81,10 +77,6 @@ ОбъектПредставление 33 - - <key>ru</key> - <value>Объект</value> - true true @@ -353,7 +345,7 @@ ПроизвольнаяДатаНеИспользуется 26 - Заглушка1 + ПустаяНадписьДляОтображенияСтраницы1 27 true true @@ -361,7 +353,7 @@ true - Заглушка1РасширеннаяПодсказка + ПустаяНадписьДляОтображенияСтраницы1РасширеннаяПодсказка 61 Label true @@ -371,7 +363,7 @@ - Заглушка1КонтекстноеМеню + ПустаяНадписьДляОтображенияСтраницы1КонтекстноеМеню 28 true @@ -641,7 +633,7 @@ ИзменениеДанныхДоДатыЗапретаНеРазрешено 11 - Заглушка3 + ПустаяНадписьДляОтображенияСтраницы2 12 true true @@ -649,7 +641,7 @@ true - Заглушка3РасширеннаяПодсказка + ПустаяНадписьДляОтображенияСтраницы2РасширеннаяПодсказка 72 Label true @@ -659,7 +651,7 @@ - Заглушка3КонтекстноеМеню + ПустаяНадписьДляОтображенияСтраницы2КонтекстноеМеню 13 true @@ -751,9 +743,7 @@ true Label - 53 true - 3 true 128 @@ -794,7 +784,7 @@ НепроизвольнаяДатаНеИспользуется 16 - Заглушка2 + ПустаяНадписьДляОтображенияСтраницы3 17 true true @@ -802,7 +792,7 @@ true - Заглушка2РасширеннаяПодсказка + ПустаяНадписьДляОтображенияСтраницы3РасширеннаяПодсказка 75 Label true @@ -812,7 +802,7 @@ - Заглушка2КонтекстноеМеню + ПустаяНадписьДляОтображенияСтраницы3КонтекстноеМеню 18 true @@ -1060,7 +1050,7 @@ ОбъектПредставление <key>ru</key> - <value>Объект представление</value> + <value>Объект</value> 6 @@ -1096,7 +1086,7 @@ РазделПредставление <key>ru</key> - <value>Раздел представление</value> + <value>Раздел</value> 8 diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl index fc17b4573..308ca4c3b 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl @@ -1,7 +1,6 @@ //////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы -// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -34,21 +33,11 @@ КонецПроцедуры -&НаКлиенте -Процедура ОК(Команда) - - Данные = Новый Структура; - Данные.Вставить("ОписаниеДатыЗапрета", ОписаниеДатыЗапрета); - Данные.Вставить("КоличествоДнейРазрешения", КоличествоДнейРазрешения); - Данные.Вставить("ДатаЗапрета", ДатаЗапрета); - - Закрыть(Данные); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ //////////////////////////////////////////////////////////////////////////////// -// Обработчки событий этой формы и формы ДатыЗапретаИзменения -// +// Одинаковые обработчики событий форм ДатыЗапретаИзменения и РедактированиеДатыЗапрета &НаКлиенте Процедура ОписаниеДатыЗапретаПриИзменении(Элемент) @@ -87,13 +76,26 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ОК(Команда) + + Данные = Новый Структура; + Данные.Вставить("ОписаниеДатыЗапрета", ОписаниеДатыЗапрета); + Данные.Вставить("КоличествоДнейРазрешения", КоличествоДнейРазрешения); + Данные.Вставить("ДатаЗапрета", ДатаЗапрета); + + Закрыть(Данные); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции формы -// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиентеНаСервереБезКонтекста -Процедура ОбщаяДатаЗапретаСОписаниемПриИзмененииДополнительно(Знач Контекст); +Процедура ОбщаяДатаЗапретаСОписаниемПриИзмененииДополнительно(Знач Контекст) Если Контекст.ОписаниеДатыЗапрета = "" Тогда Контекст.Элементы.СвойстваНепроизвольнойДаты.ТекущаяСтраница = Контекст.Элементы.НепроизвольнаяДатаНеИспользуется; @@ -108,11 +110,10 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции этой формы и формы РедактированиеДатыЗапрета -// +// Одинаковые процедуры и функции форм ДатыЗапретаИзменения и РедактированиеДатыЗапрета &НаКлиентеНаСервереБезКонтекста -Процедура ОбщаяДатаЗапретаСОписаниемПриИзменении(Знач Контекст, РассчитатьДатуЗапрета = Истина); +Процедура ОбщаяДатаЗапретаСОписаниемПриИзменении(Знач Контекст, РассчитатьДатуЗапрета = Истина) Сутки = 60*60*24; diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl index ca3bfe6a8..66fd6b025 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -68,6 +71,19 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + +&НаКлиенте +Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + + Отказ = Истина; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ДатыЗапретаИзмененияДанных(Команда) @@ -83,10 +99,3 @@ КонецПроцедуры -&НаКлиенте -Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) - - Отказ = Истина; - -КонецПроцедуры - diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Commands/ДокументыФизическогоЛица/CommandModule.bsl b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Commands/ДокументыФизическогоЛица/CommandModule.bsl index f86c27096..f12b3c4d5 100644 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Commands/ДокументыФизическогоЛица/CommandModule.bsl +++ b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Commands/ДокументыФизическогоЛица/CommandModule.bsl @@ -1,4 +1,3 @@ - &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Module.bsl b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Module.bsl index 528606fa8..bb6499371 100644 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Module.bsl +++ b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ДокументыФизическогоЛица/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаЗаписи/Module.bsl index ff7143999..12dc37c8c 100644 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Forms/ФормаЗаписи/Module.bsl @@ -1,15 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ - -&НаСервереБезКонтекста -Функция ЯвляетсяУдостоверениемЛичности(Физлицо, ВидДокумента, Дата) - - Возврат РегистрыСведений.ДокументыФизическихЛиц.ЯвляетсяУдостоверениемЛичности(Физлицо, ВидДокумента, Дата); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ВидДокументаПриИзменении(Элемент) @@ -19,3 +9,14 @@ КонецЕсли; КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервереБезКонтекста +Функция ЯвляетсяУдостоверениемЛичности(Физлицо, ВидДокумента, Дата) + + Возврат РегистрыСведений.ДокументыФизическихЛиц.ЯвляетсяУдостоверениемЛичности(Физлицо, ВидДокумента, Дата); + +КонецФункции + diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ManagerModule.bsl b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ManagerModule.bsl index 0fd934b37..0b89e9311 100644 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ManagerModule.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Функция возвращает действующий на указанную дату документ, удостоверяющий личность // // Параметры diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/RecordSetModule.bsl index db28192f1..290b557cc 100644 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/RecordSetModule.bsl @@ -1,5 +1,5 @@ -/////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ПередЗаписью(Отказ, Замещение) diff --git a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/RecordSetModule.bsl b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/RecordSetModule.bsl index cd16590e5..3c1ae6bc8 100644 --- a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/RecordSetModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ Процедура ПередЗаписью(Отказ, Замещение) diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo b/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo index e3625e3ea..e52c09a3b 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo +++ b/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo @@ -88,6 +88,25 @@ Use + + КлючеваяОперация + + ru + Ключевая операция + + + CatalogRef.КлючевыеОперации + + + + true + Use + Use + true + + true + true + ДатаЗамера @@ -103,47 +122,27 @@ true Use Use - true true - - КлючеваяОперация + + УникальныйИдентификатор ru - Ключевая операция + Уникальный идентификатор - EnumRef.КлючевыеОперации + String + + 36 + true Use Use - true - - true - true - - - НомерСеанса - - ru - Номер сеанса - - - Number - - 10 - true - - - - - true - Use - + true diff --git a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl new file mode 100644 index 000000000..682ef95cf --- /dev/null +++ b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl @@ -0,0 +1,148 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция ВыбратьИзменения(Знач Узел, Знач НомерСообщения) Экспорт + + Результат = Новый Массив; + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ИзмененияОбщихДанныхУзлов"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Узел", Узел); + Блокировка.Заблокировать(); + + ТекстЗапроса = + "ВЫБРАТЬ + | ИзмененияОбщихДанныхУзлов.Узел КАК Узел, + | ИзмененияОбщихДанныхУзлов.НомерСообщения КАК НомерСообщения + |ИЗ + | РегистрСведений.ИзмененияОбщихДанныхУзлов КАК ИзмененияОбщихДанныхУзлов + |ГДЕ + | ИзмененияОбщихДанныхУзлов.Узел = &Узел"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Узел", Узел); + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + + Результат.Добавить(Выборка.Узел); + + Если Выборка.НомерСообщения = 0 Тогда + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Узел", Узел); + СтруктураЗаписи.Вставить("НомерСообщения", НомерСообщения); + ДобавитьЗапись(СтруктураЗаписи); + + КонецЕсли; + + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Результат; +КонецФункции + +Процедура ЗарегистрироватьИзменения(Знач Узел) Экспорт + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ИзмененияОбщихДанныхУзлов"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Узел", Узел); + Блокировка.Заблокировать(); + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Узел", Узел); + СтруктураЗаписи.Вставить("НомерСообщения", 0); + ДобавитьЗапись(СтруктураЗаписи); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура УдалитьРегистрациюИзменений(Знач Узел, Знач НомерСообщения = Неопределено) Экспорт + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ИзмененияОбщихДанныхУзлов"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Узел", Узел); + Блокировка.Заблокировать(); + + Если НомерСообщения = Неопределено Тогда + + ТекстЗапроса = + "ВЫБРАТЬ + | 1 КАК Поле1 + |ИЗ + | РегистрСведений.ИзмененияОбщихДанныхУзлов КАК ИзмененияОбщихДанныхУзлов + |ГДЕ + | ИзмененияОбщихДанныхУзлов.Узел = &Узел"; + + Иначе + + ТекстЗапроса = + "ВЫБРАТЬ + | 1 КАК Поле1 + |ИЗ + | РегистрСведений.ИзмененияОбщихДанныхУзлов КАК ИзмененияОбщихДанныхУзлов + |ГДЕ + | ИзмененияОбщихДанныхУзлов.Узел = &Узел + | И ИзмененияОбщихДанныхУзлов.НомерСообщения <= &НомерСообщения + | И ИзмененияОбщихДанныхУзлов.НомерСообщения <> 0"; + + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Узел", Узел); + Запрос.УстановитьПараметр("НомерСообщения", НомерСообщения); + Запрос.Текст = ТекстЗапроса; + + Если Не Запрос.Выполнить().Пустой() Тогда + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Узел", Узел); + УдалитьЗапись(СтруктураЗаписи); + + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Процедура добавляет запись в регистр по переданным значениям структуры +Процедура ДобавитьЗапись(СтруктураЗаписи) + + ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, "ИзмененияОбщихДанныхУзлов"); + +КонецПроцедуры + +// Процедура удаляет набор записей в регистре по переданным значениям структуры +Процедура УдалитьЗапись(СтруктураЗаписи) + + ОбменДаннымиСервер.УдалитьНаборЗаписейВРегистреСведений(СтруктураЗаписи, "ИзмененияОбщихДанныхУзлов"); + +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ИзмененияОбщихДанныхУзлов.mdo b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ИзмененияОбщихДанныхУзлов.mdo new file mode 100644 index 000000000..68a5b1381 --- /dev/null +++ b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ИзмененияОбщихДанныхУзлов.mdo @@ -0,0 +1,89 @@ + + + + + + + + + + + + ИзмененияОбщихДанныхУзлов + + ru + Изменения общих данных узлов + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + НомерСообщения + + ru + Номер сообщения + + + Number + + 15 + true + + + + + Use + Use + + + + Узел + + ru + Узел + + + ExchangePlanRef + + + + Use + Use + true + + true + + diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Form.form b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Form.form index ceb918a03..9f884ef89 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Form.form +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Form.form @@ -353,6 +353,7 @@ true UserCmds Auto + InAdditionalSubmenu Left true diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Module.bsl index df6ac82c9..c4ae09859 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -23,20 +23,26 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - НазначитьИсполнителей(Неопределено); -КонецПроцедуры +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ПолеОсновнойОбъектАдресацииПриИзменении(Элемент) ОбновитьДанныеЭлементов(); КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + &НаКлиенте -Процедура ВсеНазначенияВыполнить() +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + НазначитьИсполнителей(Неопределено); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ВсеНазначенияВыполнить(Команда) ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.ФормаСписка", Новый Структура("Отбор", Новый Структура("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации)), @@ -45,7 +51,7 @@ КонецПроцедуры &НаКлиенте -Процедура ОбновитьВыполнить() +Процедура ОбновитьВыполнить(Команда) ОбновитьДанныеЭлементов(); КонецПроцедуры @@ -58,7 +64,6 @@ Возврат; КонецЕсли; - Если ИспользоватьВнешниеЗадачиИБизнесПроцессы Тогда Если Назначение.ВнешняяРоль = Истина Тогда Предупреждение(НСтр("ru = 'Исполнители внешней роли должны быть определены в другой информационной базе.'")); @@ -74,7 +79,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ОбновитьДанныеЭлементов() diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Form.form b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Form.form index d8324d263..e1fca7ada 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Form.form +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Form.form @@ -8,8 +8,8 @@ ГруппаШапка 21 - ОсновнойОбъектАдресации - 18 + Роль + 16 true true @@ -17,10 +17,10 @@ true - ОсновнойОбъектАдресации + Роль - ОсновнойОбъектАдресацииРасширеннаяПодсказка + РольРасширеннаяПодсказка 35 Label true @@ -30,8 +30,8 @@ - ОсновнойОбъектАдресацииКонтекстноеМеню - 19 + РольКонтекстноеМеню + 17 true LabelField @@ -47,8 +47,8 @@ - Роль - 16 + ОсновнойОбъектАдресации + 18 true true @@ -56,10 +56,10 @@ true - Роль + ОсновнойОбъектАдресации - РольРасширеннаяПодсказка + ОсновнойОбъектАдресацииРасширеннаяПодсказка 37 Label true @@ -69,8 +69,8 @@ - РольКонтекстноеМеню - 17 + ОсновнойОбъектАдресацииКонтекстноеМеню + 19 true LabelField diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Module.bsl index 73e2b5f27..b7f7889af 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -26,11 +26,13 @@ &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) + Оповестить("Запись_РолеваяАдресация", ПараметрыЗаписи, НаборЗаписей); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список &НаКлиенте Процедура СписокПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ) @@ -44,8 +46,10 @@ &НаКлиенте Процедура СписокПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование) + Если Элементы.ДополнительныйОбъектАдресации.Видимость Тогда Элементы.ДополнительныйОбъектАдресации.ОграничениеТипа = ТипыДополнительногоОбъектаАдресации; КонецЕсли; + КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl index 5118a91bc..685d37586 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Module.bsl @@ -1,6 +1,36 @@ //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьСостояниеЭлементов(); +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект) + Если НЕ ЗначениеЗаполнено(ТекущийОбъект.ОсновнойОбъектАдресации) Тогда + ТекущийОбъект.ОсновнойОбъектАдресации = Неопределено; + КонецЕсли; + Если НЕ ЗначениеЗаполнено(ТекущийОбъект.ДополнительныйОбъектАдресации) Тогда + ТекущийОбъект.ДополнительныйОбъектАдресации = Неопределено; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура РольИсполнителяПриИзменении(Элемент) + + Запись.ОсновнойОбъектАдресации = Неопределено; + Запись.ДополнительныйОбъектАдресации = Неопределено; + УстановитьСостояниеЭлементов(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервере Процедура УстановитьСостояниеЭлементов() @@ -36,33 +66,3 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - УстановитьСостояниеЭлементов(); -КонецПроцедуры - -&НаСервере -Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект) - Если НЕ ЗначениеЗаполнено(ТекущийОбъект.ОсновнойОбъектАдресации) Тогда - ТекущийОбъект.ОсновнойОбъектАдресации = Неопределено; - КонецЕсли; - Если НЕ ЗначениеЗаполнено(ТекущийОбъект.ДополнительныйОбъектАдресации) Тогда - ТекущийОбъект.ДополнительныйОбъектАдресации = Неопределено; - КонецЕсли; -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура РольИсполнителяПриИзменении(Элемент) - - Запись.ОсновнойОбъектАдресации = Неопределено; - Запись.ДополнительныйОбъектАдресации = Неопределено; - УстановитьСостояниеЭлементов(); - -КонецПроцедуры - diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl index 2c29aba2f..da258a039 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl index 40b958501..f80874cc2 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl @@ -1,4 +1,7 @@ -// УправлениеДоступом +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +// СтандартныеПодсистемы.УправлениеДоступом Процедура ПередЗаписью(Отказ, Замещение) @@ -30,4 +33,4 @@ КонецПроцедуры -// Конец УправлениеДоступом +// Конец СтандартныеПодсистемы.УправлениеДоступом diff --git a/SSL/src/InformationRegisters/КодировкиВерсийФайлов/КодировкиВерсийФайлов.mdo b/SSL/src/InformationRegisters/КодировкиВерсийФайлов/КодировкиВерсийФайлов.mdo new file mode 100644 index 000000000..02c17fb48 --- /dev/null +++ b/SSL/src/InformationRegisters/КодировкиВерсийФайлов/КодировкиВерсийФайлов.mdo @@ -0,0 +1,96 @@ + + + + + + + + + + + + КодировкиВерсийФайлов + + ru + Кодировки версий файлов + + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Кодировка + + ru + Кодировка + + + String + + 50 + + + + ru + Кодировка версии файла + + + + Use + Use + + + + ВерсияФайла + + ru + Версия файла + + + CatalogRef.ВерсииФайлов + + + ru + Версия файла + + + + Use + Use + true + + true + true + + diff --git a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl index cbcce537e..d0277f3a1 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаЗаписи/Module.bsl @@ -1,7 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) - Оповестить("Запись_КурсыВалют", ПараметрыЗаписи, Запись); - КонецПроцедуры diff --git a/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl b/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl index 911148a3e..f1b04be8b 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl @@ -1,7 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ -// Обработчик события ПриЗаписи регистра сведений КурсыВалют. -// При записи нового элемента(ов) вызывает функциональность записи -// курса подчиненных валют. +// При записи контролируются курсы подчиненных валют // Процедура ПриЗаписи(Отказ, Замещение) @@ -11,11 +11,7 @@ Если Количество() > 0 Тогда Для Каждого Запись Из ЭтотОбъект Цикл - // Найти все зависимые валюты от данной и изменить их курс - ЗагрузитьКурсДляПодчиненныхВалют(Запись.Валюта, - Запись.Период, - Запись.Курс, - Запись.Кратность); + ЗагрузитьКурсДляПодчиненныхВалют(Запись); КонецЦикла; Иначе УдалитьКурсДляПодчиненныхВалют(Отбор.Валюта.Значение, Отбор.Период); @@ -23,39 +19,44 @@ КонецПроцедуры -Процедура ЗагрузитьКурсДляПодчиненныхВалют(ВалютаБазовая, Период, Курс, Кратность) +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Находит все зависимые валюты и изменяет их курс +// +Процедура ЗагрузитьКурсДляПодчиненныхВалют(ЗаписьВалютыВладельца) - ТаблицаВалют = РаботаСКурсамиВалют.ПолучитьСписокЗависимыхВалют(ВалютаБазовая); - - РегистрКурсыВалют = РегистрыСведений.КурсыВалют; + ТаблицаВалют = РаботаСКурсамиВалют.ПолучитьСписокЗависимыхВалют(ЗаписьВалютыВладельца.Валюта); + Для Каждого СтрокаТаблицы Из ТаблицаВалют Цикл + ЗаписьКурсовВалют = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); - Для Каждого ЭлементВалюта Из ТаблицаВалют Цикл - ЗаписьКурсовВалют = РегистрКурсыВалют.СоздатьМенеджерЗаписи(); + ЗаписьКурсовВалют.Валюта = СтрокаТаблицы.Ссылка; + ЗаписьКурсовВалют.Период = ЗаписьВалютыВладельца.Период; + ЗаписьКурсовВалют.Курс = ЗаписьВалютыВладельца.Курс + ЗаписьВалютыВладельца.Курс * СтрокаТаблицы.Наценка / 100; + ЗаписьКурсовВалют.Кратность = ЗаписьВалютыВладельца.Кратность; - ЗаписьКурсовВалют.Валюта = ЭлементВалюта.Ссылка; - ЗаписьКурсовВалют.Период = Период; - ЗаписьКурсовВалют.Курс = Курс + Курс * ЭлементВалюта.Наценка / 100; - ЗаписьКурсовВалют.Кратность = Кратность; ЗаписьКурсовВалют.Записать(); КонецЦикла; КонецПроцедуры -Процедура УдалитьКурсДляПодчиненныхВалют(ВалютаБазовая, Период) +// Очищает курсы зависимых волют +// +Процедура УдалитьКурсДляПодчиненныхВалют(ВалютаВладелец, Период) - ТаблицаВалют = РаботаСКурсамиВалют.ПолучитьСписокЗависимыхВалют(ВалютаБазовая); - - Для Каждого ЭлементВалюта Из ТаблицаВалют Цикл - НаборЗаписейКурсовВалют = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); - НаборЗаписейКурсовВалют.Отбор.Валюта.Значение = ЭлементВалюта.Ссылка; - НаборЗаписейКурсовВалют.Отбор.Период.Значение = Период.Значение; - НаборЗаписейКурсовВалют.Отбор.Период.ЗначениеПо = Период.ЗначениеПО; - НаборЗаписейКурсовВалют.Отбор.Период.ЗначениеС = Период.ЗначениеС; - НаборЗаписейКурсовВалют.Отбор.Период.ВидСравнения = Период.ВидСравнения; - НаборЗаписейКурсовВалют.Отбор.Валюта.Использование = Истина; - НаборЗаписейКурсовВалют.Отбор.Период.Использование = Истина; + ТаблицаВалют = РаботаСКурсамиВалют.ПолучитьСписокЗависимыхВалют(ВалютаВладелец); + Для Каждого СтрокаТаблицы Из ТаблицаВалют Цикл + НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); - НаборЗаписейКурсовВалют.Записать(); + НаборЗаписей.Отбор.Валюта.Значение = СтрокаТаблицы.Ссылка; + НаборЗаписей.Отбор.Период.Значение = Период.Значение; + НаборЗаписей.Отбор.Период.ЗначениеПо = Период.ЗначениеПО; + НаборЗаписей.Отбор.Период.ЗначениеС = Период.ЗначениеС; + НаборЗаписей.Отбор.Период.ВидСравнения = Период.ВидСравнения; + НаборЗаписей.Отбор.Валюта.Использование = Истина; + НаборЗаписей.Отбор.Период.Использование = Истина; + + НаборЗаписей.Записать(); КонецЦикла; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/КурсыВалютПоКлассификатору/RecordSetModule.bsl b/SSL/src/InformationRegisters/КурсыВалютПоКлассификатору/RecordSetModule.bsl new file mode 100644 index 000000000..f49cb6af5 --- /dev/null +++ b/SSL/src/InformationRegisters/КурсыВалютПоКлассификатору/RecordSetModule.bsl @@ -0,0 +1,25 @@ + +Перем Запрос; + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +Процедура ПередЗаписью(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ПоставляемыеДанные.СформироватьВременнуюТаблицуДанныхНабораЗаписей(Запрос, ЭтотОбъект, "Период, Валюта"); + +КонецПроцедуры + +Процедура ПриЗаписи(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ПоставляемыеДанные.ЗарегистрироватьИзмененияДанныхНабораЗаписей(Запрос, ЭтотОбъект, "Валюта", "Период, Валюта", Истина); + +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/КурсыВалютПоКлассификатору/КурсыВалютПоКлассификатору.mdo b/SSL/src/InformationRegisters/КурсыВалютПоКлассификатору/КурсыВалютПоКлассификатору.mdo new file mode 100644 index 000000000..1f460691d --- /dev/null +++ b/SSL/src/InformationRegisters/КурсыВалютПоКлассификатору/КурсыВалютПоКлассификатору.mdo @@ -0,0 +1,124 @@ + + + + + + + + + + + + КурсыВалютПоКлассификатору + + ru + Курсы валют по классификатору + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Day + true + Managed + + ru + Курсы для валют + + + Курс + + ru + Курс + + + Number + + 15 + 4 + true + + + + + Use + Use + + + + Кратность + + ru + Кратность + + + Number + + 10 + true + + + + ru + Кратность валюты + + + + ShowError + Use + Use + true + + 1 + + + + Валюта + + ru + Валюта + + + CatalogRef.КлассификаторВалют + + + + ShowError + true + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/КэшПрограммныхИнтерфейсов.mdo b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/КэшПрограммныхИнтерфейсов.mdo new file mode 100644 index 000000000..c979ffe69 --- /dev/null +++ b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/КэшПрограммныхИнтерфейсов.mdo @@ -0,0 +1,123 @@ + + + + + + + + + + + + КэшПрограммныхИнтерфейсов + + ru + Кэш программных интерфейсов + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ru + Данные кэша + + + ДатаОбновления + + ru + Дата обновления + + + Date + + + + + Use + Use + + + + Данные + + ru + Данные + + + ValueStorage + + + + Use + Use + + + + Идентификатор + + ru + Идентификатор + + + String + + 400 + + + + + Use + Use + + true + + + ТипДанных + + ru + Тип данных + + + EnumRef.ТипыДанныхКэшаПрограммныхИнтерфейсов + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Form.form index 70677cf76..14d649947 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Form.form @@ -1,5 +1,5 @@ - + Объект 1 @@ -862,6 +862,9 @@ true + + CommonPicture.ЗаполнитьФорму + ЗаполнитьАвтоРеквизиты diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl index 6dd818e6f..4078a2114 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ВключитьРедактированиеАвтоРеквизитов(Команда) @@ -7,6 +10,16 @@ КонецПроцедуры +&НаКлиенте +Процедура ЗаполнитьАвтоРеквизиты(Команда) + + ЗаполнитьАвтоРеквизитыНаСервере(Истина); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + &НаКлиенте Процедура СвойствоПриИзменении(Элемент) @@ -14,6 +27,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервере Процедура ЗаполнитьАвтоРеквизитыНаСервере(ПоКомандеПользователя = Ложь) @@ -48,10 +64,3 @@ КонецЕсли; КонецПроцедуры - -&НаКлиенте -Процедура ЗаполнитьАвтоРеквизиты(Команда) - - ЗаполнитьАвтоРеквизитыНаСервере(Истина); - -КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Form.form index efecca82f..8cc3ad325 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаСписка/Form.form @@ -779,7 +779,7 @@
    true
    - ВЫБРАТЬ + ВЫБРАТЬ РАЗЛИЧНЫЕ РегистрСведенийНаборыЗначенийДоступа.Объект, РегистрСведенийНаборыЗначенийДоступа.НомерНабора, РегистрСведенийНаборыЗначенийДоступа.ВидДоступа, diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/МоиНапоминания/CommandModule.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/МоиНапоминания/CommandModule.bsl index f677d4e99..cae94cc70 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/МоиНапоминания/CommandModule.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/МоиНапоминания/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/НапоминанияПользователей/CommandModule.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/НапоминанияПользователей/CommandModule.bsl index ea856e8ee..d34664633 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/НапоминанияПользователей/CommandModule.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Commands/НапоминанияПользователей/CommandModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Module.bsl index 4593f7b34..88e2fb5a6 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Module.bsl @@ -1,17 +1,13 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Список.Параметры.УстановитьЗначениеПараметра("Пользователь", ОбщегоНазначения.ТекущийПользователь()); + Список.Параметры.УстановитьЗначениеПараметра("Пользователь", Пользователи.ТекущийПользователь()); КонецПроцедуры -&НаКлиенте -Процедура Создать(Команда) - ОткрытьФорму("РегистрСведений.НапоминанияПользователя.Форма.Напоминание"); -КонецПроцедуры - -&НаКлиенте -Процедура Изменить(Команда) - ОткрытьФорму("РегистрСведений.НапоминанияПользователя.Форма.Напоминание", Новый Структура("Ключ", Элементы.Список.ТекущаяСтрока)); -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список &НаКлиенте Процедура СписокПередНачаломИзменения(Элемент, Отказ) @@ -19,6 +15,21 @@ ОткрытьФорму("РегистрСведений.НапоминанияПользователя.Форма.Напоминание", Новый Структура("Ключ", Элементы.Список.ТекущаяСтрока)); КонецПроцедуры +&НаКлиенте +Процедура СписокПриАктивизацииСтроки(Элемент) + СтрокаВыбрана = Не Элемент.ТекущаяСтрока = Неопределено; + Элементы.КнопкаПрекратить.Доступность = СтрокаВыбрана; + Элементы.КнопкаИзменить.Доступность = СтрокаВыбрана; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Изменить(Команда) + ОткрытьФорму("РегистрСведений.НапоминанияПользователя.Форма.Напоминание", Новый Структура("Ключ", Элементы.Список.ТекущаяСтрока)); +КонецПроцедуры + &НаКлиенте Процедура Прекратить(Команда) @@ -41,9 +52,6 @@ КонецПроцедуры &НаКлиенте -Процедура СписокПриАктивизацииСтроки(Элемент) - СтрокаВыбрана = Не Элемент.ТекущаяСтрока = Неопределено; - Элементы.КнопкаПрекратить.Доступность = СтрокаВыбрана; - Элементы.КнопкаИзменить.Доступность = СтрокаВыбрана; +Процедура Создать(Команда) + ОткрытьФорму("РегистрСведений.НапоминанияПользователя.Форма.Напоминание"); КонецПроцедуры - diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl index 5c8492cd4..51d21395d 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl @@ -1,3 +1,237 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Объект.Пользователь = Пользователи.ТекущийПользователь(); + + Если Параметры.Свойство("Источник") Тогда + Объект.Источник = Параметры.Источник; + Объект.Описание = ОбщегоНазначения.ПредметСтрокой(Объект.Источник); + КонецЕсли; + + Если Параметры.Свойство("Ключ") Тогда + ИсходныеПараметры = Новый Структура("Пользователь,ВремяСобытия,Источник"); + ЗаполнитьЗначенияСвойств(ИсходныеПараметры, Параметры.Ключ); + КонецЕсли; + + Если ЗначениеЗаполнено(Объект.Источник) Тогда + ЗаполнитьСписокРеквизитовИсточника(); + КонецЕсли; + + ЗаполнитьВариантыПериодичности(); + ОпределитьВыбранныйВариантПериодичности(); + + ЭтоНовый = Не ЗначениеЗаполнено(Объект.ИсходныйКлючЗаписи); + Элементы.Прекратить.Видимость = Не ЭтоНовый; + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + Расписание = ТекущийОбъект.Расписание.Получить(); +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Если ТекущийОбъект.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ОтносительноТекущегоВремени Тогда + ТекущийОбъект.ВремяСобытия = ТекущаяДатаСеанса() + Объект.ИнтервалВремениНапоминания; + ТекущийОбъект.СрокНапоминания = ТекущийОбъект.ВремяСобытия; + ТекущийОбъект.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя; + ИначеЕсли ТекущийОбъект.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ОтносительноВремениПредмета Тогда + ДатаВИсточнике = НапоминанияПользователяСервер.ПолучитьЗначениеРеквизитаПредмета(Объект.Источник, Объект.ИмяРеквизитаИсточника); + Если ЗначениеЗаполнено(ДатаВИсточнике) Тогда + ДатаВИсточнике = ВычислитьБлижайшуюДату(ДатаВИсточнике); + ТекущийОбъект.ВремяСобытия = ДатаВИсточнике; + ТекущийОбъект.СрокНапоминания = ДатаВИсточнике - Объект.ИнтервалВремениНапоминания; + Иначе + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = НСтр("ru = 'Время в реквизите предмета не определено'"); + Сообщение.Поле = "ИмяРеквизитаИсточника"; + Сообщение.УстановитьДанные(Объект); + Сообщение.Сообщить(); + КонецЕсли; + ИначеЕсли ТекущийОбъект.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя Тогда + ТекущийОбъект.СрокНапоминания = Объект.ВремяСобытия; + ИначеЕсли ТекущийОбъект.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.Периодически Тогда + БлижайшееВремяНапоминания = НапоминанияПользователяСервер.ПолучитьБлижайшуюДатуСобытияПоРасписанию(Расписание); + Если БлижайшееВремяНапоминания = Неопределено Тогда + БлижайшееВремяНапоминания = ТекущаяДатаСеанса(); + КонецЕсли; + ТекущийОбъект.ВремяСобытия = БлижайшееВремяНапоминания; + ТекущийОбъект.СрокНапоминания = ТекущийОбъект.ВремяСобытия; + КонецЕсли; + + Если ТекущийОбъект.СпособУстановкиВремениНапоминания <> Перечисления.СпособыУстановкиВремениНапоминания.Периодически Тогда + Расписание = Неопределено; + КонецЕсли; + + ТекущийОбъект.Расписание = Новый ХранилищеЗначения(Расписание, Новый СжатиеДанных(9)); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + // если это новая запись + Если Не ЗначениеЗаполнено(Объект.ИсходныйКлючЗаписи) Тогда + Если Элементы.ИмяРеквизитаИсточника.СписокВыбора.Количество() > 0 Тогда + Объект.ИмяРеквизитаИсточника = Элементы.ИмяРеквизитаИсточника.СписокВыбора[0].Значение; + Объект.СпособУстановкиВремениНапоминания = ПредопределенноеЗначение("Перечисление.СпособыУстановкиВремениНапоминания.ОтносительноВремениПредмета"); + КонецЕсли; + Объект.ВремяСобытия = ОбщегоНазначенияКлиент.ДатаСеанса(); + КонецЕсли; + + ЗаполнитьСписокВремени(); + + ЗаполнитьСпособыОповещения(); + Если Элементы.ИмяРеквизитаИсточника.СписокВыбора.Количество() = 0 Тогда + Элементы.СпособУстановкиВремениНапоминания.СписокВыбора.Удалить(Элементы.СпособУстановкиВремениНапоминания.СписокВыбора.НайтиПоЗначению(ПолучитьКлючПоЗначениюВСоответствии(ПолучитьПредопределенныеСпособыОповещения(),ПредопределенноеЗначение("Перечисление.СпособыУстановкиВремениНапоминания.ОтносительноВремениПредмета")))); + КонецЕсли; + + Если Объект.ИнтервалВремениНапоминания > 0 Тогда + ИнтервалВремениСтрокой = НапоминанияПользователяКлиентСервер.ПредставлениеВремени(Объект.ИнтервалВремениНапоминания); + КонецЕсли; + + ПредопределенныеСпособыОповещения = ПолучитьПредопределенныеСпособыОповещения(); + ВыбранныйСпособ = ПолучитьКлючПоЗначениюВСоответствии(ПредопределенныеСпособыОповещения, Объект.СпособУстановкиВремениНапоминания); + + Если Объект.СпособУстановкиВремениНапоминания = ПредопределенноеЗначение("Перечисление.СпособыУстановкиВремениНапоминания.ОтносительноТекущегоВремени") Тогда + СпособУстановкиВремениНапоминания = НСтр("ru = 'через '") + НапоминанияПользователяКлиентСервер.ПредставлениеВремени(Объект.ИнтервалВремениНапоминания); + Иначе + СпособУстановкиВремениНапоминания = ВыбранныйСпособ; + КонецЕсли; + + УстановитьВидимость(); + + ОбновитьРасчетноеВремяНапоминания(); + ПодключитьОбработчикОжидания("ОбновитьРасчетноеВремяНапоминания", 1); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + // для обновления кэша + СтруктураПараметров = НапоминанияПользователяКлиентСервер.ПолучитьСтруктуруНапоминания(Объект, Истина); + СтруктураПараметров.Вставить("ИндексКартинки", 2); + + НапоминанияПользователяКлиент.ОбновитьЗаписьВКэшеОповещений(СтруктураПараметров); + + СброситьТаймерПроверкиТекущихОповещений(); + + Если ЗначениеЗаполнено(Объект.Источник) Тогда + ОповеститьОбИзменении(Объект.Источник); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) + Если ИсходныеПараметры <> Неопределено Тогда + НапоминанияПользователяКлиент.УдалитьЗаписьИзКэшаОповещений(ИсходныеПараметры); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура СпособУстановкиВремениНапоминанияПриИзменении(Элемент) + ОчиститьСообщения(); + + ИнтервалВремени = НапоминанияПользователяКлиентСервер.ПолучитьИнтервалВремениИзСтроки(СпособУстановкиВремениНапоминания); + Если ИнтервалВремени > 0 Тогда + ИнтервалВремениСтрокой = НапоминанияПользователяКлиентСервер.ПредставлениеВремени(ИнтервалВремени); + СпособУстановкиВремениНапоминания = НСтр("ru = 'через '") + ИнтервалВремениСтрокой; + Иначе + Если Элементы.СпособУстановкиВремениНапоминания.СписокВыбора.НайтиПоЗначению(СпособУстановкиВремениНапоминания) = Неопределено Тогда + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = НСтр("ru = 'Интервал времени не определён.'"); + Сообщение.Поле = "СпособУстановкиВремениНапоминания"; + Сообщение.УстановитьДанные(Объект); + Сообщение.Сообщить(); + КонецЕсли; + КонецЕсли; + + ПредопределенныеСпособыОповещения = ПолучитьПредопределенныеСпособыОповещения(); + ВыбранныйСпособ = ПредопределенныеСпособыОповещения.Получить(СпособУстановкиВремениНапоминания); + + Если ВыбранныйСпособ = Неопределено Тогда + Объект.СпособУстановкиВремениНапоминания = ПредопределенноеЗначение("Перечисление.СпособыУстановкиВремениНапоминания.ОтносительноТекущегоВремени"); + Иначе + Объект.СпособУстановкиВремениНапоминания = ВыбранныйСпособ; + КонецЕсли; + + Объект.ИнтервалВремениНапоминания = ИнтервалВремени; + + УстановитьВидимость(); +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииИнтервалаВремени(Элемент) + Объект.ИнтервалВремениНапоминания = НапоминанияПользователяКлиентСервер.ПолучитьИнтервалВремениИзСтроки(ИнтервалВремениСтрокой); + Если Объект.ИнтервалВремениНапоминания > 0 Тогда + ИнтервалВремениСтрокой = НапоминанияПользователяКлиентСервер.ПредставлениеВремени(Объект.ИнтервалВремениНапоминания); + Иначе + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = НСтр("ru = 'Интервал времени не определён'"); + Сообщение.Поле = "ИнтервалВремениСтрокой"; + Сообщение.УстановитьДанные(Объект); + Сообщение.Сообщить(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВариантПериодичностиПриИзменении(Элемент) + ПриИзмененииРасписания(); +КонецПроцедуры + +&НаКлиенте +Процедура ВариантПериодичностиОткрытие(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ПриИзмененииРасписания(); +КонецПроцедуры + +&НаКлиенте +Процедура ДатаПриИзменении(Элемент) + ЗаполнитьСписокВремени(); +КонецПроцедуры + +&НаКлиенте +Процедура ВремяПриИзменении(Элемент) + Объект.ВремяСобытия = НачалоМинуты(Объект.ВремяСобытия); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Прекратить(Команда) + + КнопкиДиалога = Новый СписокЗначений; + КнопкиДиалога.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Прекратить'")); + КнопкиДиалога.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Не прекращать'")); + + Ответ = Вопрос(НСтр("ru = 'Прекратить напоминание?'"), КнопкиДиалога); + Если Ответ = КодВозвратаДиалога.Да Тогда + ЭтаФорма.Модифицированность = Ложь; + Если ИсходныеПараметры <> Неопределено Тогда + НапоминанияПользователяВызовСервера.ОтключитьНапоминание(ИсходныеПараметры, Ложь); + НапоминанияПользователяКлиент.УдалитьЗаписьИзКэшаОповещений(ИсходныеПараметры); + Оповестить("Запись_НапоминанияПользователя", Новый Структура, Объект.ИсходныйКлючЗаписи); + ОповеститьОбИзменении(Объект.ИсходныйКлючЗаписи); + КонецЕсли; + Если ЭтаФорма.Открыта() Тогда + Закрыть(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервереБезКонтекста Функция РеквизитИсточникаСуществуетИСодержитТипДата(МетаданныеИсточника, ИмяРеквизита, ПроверятьДату = Ложь) Результат = Ложь; @@ -82,7 +316,7 @@ Для Каждого ИмяРеквизита Из МассивРеквизитов Цикл Если РеквизитИсточникаСуществуетИСодержитТипДата(МетаданныеИсточника, ИмяРеквизита) Тогда - Если ТипЗнч(Объект.Источник[ИмяРеквизита]) = Тип("Дата") И Объект.Источник[ИмяРеквизита] > ТекущаяДата() Тогда + Если ТипЗнч(Объект.Источник[ИмяРеквизита]) = Тип("Дата") И Объект.Источник[ИмяРеквизита] > ТекущаяДатаСеанса() Тогда Реквизит = МетаданныеИсточника.Реквизиты.Найти(ИмяРеквизита); ПредставлениеРеквизита = ?(ПустаяСтрока(Реквизит.Синоним),Реквизит.Имя, Реквизит.Синоним); Если Элементы.ИмяРеквизитаИсточника.СписокВыбора.НайтиПоЗначению(ИмяРеквизита) = Неопределено Тогда @@ -213,7 +447,7 @@ | КОНЕЦ КАК БудущаяДата"; Запрос.УстановитьПараметр("ИсходнаяДата", ИсходнаяДата); - Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата()); + Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда @@ -223,232 +457,10 @@ Возврат Результат; КонецФункции -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Объект.Пользователь = ОбщегоНазначения.ТекущийПользователь(); - - Если Параметры.Свойство("Источник") Тогда - Объект.Источник = Параметры.Источник; - Объект.Описание = ОбщегоНазначения.ПредметСтрокой(Объект.Источник); - КонецЕсли; - - Если Параметры.Свойство("Ключ") Тогда - ИсходныеПараметры = Новый Структура("Пользователь,ВремяСобытия,Источник"); - ЗаполнитьЗначенияСвойств(ИсходныеПараметры, Параметры.Ключ); - КонецЕсли; - - Если ЗначениеЗаполнено(Объект.Источник) Тогда - ЗаполнитьСписокРеквизитовИсточника(); - КонецЕсли; - - ЗаполнитьВариантыПериодичности(); - ОпределитьВыбранныйВариантПериодичности(); - - ЭтоНовый = Не ЗначениеЗаполнено(Объект.ИсходныйКлючЗаписи); - Элементы.Прекратить.Видимость = Не ЭтоНовый; - -КонецПроцедуры - -&НаСервере -Процедура ПриЧтенииНаСервере(ТекущийОбъект) - Расписание = ТекущийОбъект.Расписание.Получить(); -КонецПроцедуры - -&НаСервере -Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - - Если ТекущийОбъект.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ОтносительноТекущегоВремени Тогда - ТекущийОбъект.ВремяСобытия = ТекущаяДатаСеанса() + Объект.ИнтервалВремениНапоминания; - ТекущийОбъект.СрокНапоминания = ТекущийОбъект.ВремяСобытия; - ТекущийОбъект.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя; - ИначеЕсли ТекущийОбъект.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ОтносительноВремениПредмета Тогда - ДатаВИсточнике = НапоминанияПользователяСервер.ПолучитьЗначениеРеквизитаПредмета(Объект.Источник, Объект.ИмяРеквизитаИсточника); - Если ЗначениеЗаполнено(ДатаВИсточнике) Тогда - ДатаВИсточнике = ВычислитьБлижайшуюДату(ДатаВИсточнике); - ТекущийОбъект.ВремяСобытия = ДатаВИсточнике; - ТекущийОбъект.СрокНапоминания = ДатаВИсточнике - Объект.ИнтервалВремениНапоминания; - Иначе - Сообщение = Новый СообщениеПользователю; - Сообщение.Текст = НСтр("ru = 'Время в реквизите предмета не определено'"); - Сообщение.Поле = "ИмяРеквизитаИсточника"; - Сообщение.УстановитьДанные(Объект); - Сообщение.Сообщить(); - КонецЕсли; - ИначеЕсли ТекущийОбъект.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.ВУказанноеВремя Тогда - ТекущийОбъект.СрокНапоминания = Объект.ВремяСобытия; - ИначеЕсли ТекущийОбъект.СпособУстановкиВремениНапоминания = Перечисления.СпособыУстановкиВремениНапоминания.Периодически Тогда - БлижайшееВремяНапоминания = НапоминанияПользователяСервер.ПолучитьБлижайшуюДатуСобытияПоРасписанию(Расписание); - Если БлижайшееВремяНапоминания = Неопределено Тогда - БлижайшееВремяНапоминания = ТекущаяДатаСеанса(); - КонецЕсли; - ТекущийОбъект.ВремяСобытия = БлижайшееВремяНапоминания; - ТекущийОбъект.СрокНапоминания = ТекущийОбъект.ВремяСобытия; - КонецЕсли; - - Если ТекущийОбъект.СпособУстановкиВремениНапоминания <> Перечисления.СпособыУстановкиВремениНапоминания.Периодически Тогда - Расписание = Неопределено; - КонецЕсли; - - ТекущийОбъект.Расписание = Новый ХранилищеЗначения(Расписание, Новый СжатиеДанных(9)); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - // если это новая запись - Если Не ЗначениеЗаполнено(Объект.ИсходныйКлючЗаписи) Тогда - Если Элементы.ИмяРеквизитаИсточника.СписокВыбора.Количество() > 0 Тогда - Объект.ИмяРеквизитаИсточника = Элементы.ИмяРеквизитаИсточника.СписокВыбора[0].Значение; - Объект.СпособУстановкиВремениНапоминания = ПредопределенноеЗначение("Перечисление.СпособыУстановкиВремениНапоминания.ОтносительноВремениПредмета"); - КонецЕсли; - Объект.ВремяСобытия = ТекущаяДата(); - КонецЕсли; - - ЗаполнитьСписокВремени(); - - ЗаполнитьСпособыОповещения(); - Если Элементы.ИмяРеквизитаИсточника.СписокВыбора.Количество() = 0 Тогда - Элементы.СпособУстановкиВремениНапоминания.СписокВыбора.Удалить(Элементы.СпособУстановкиВремениНапоминания.СписокВыбора.НайтиПоЗначению(ПолучитьКлючПоЗначениюВСоответствии(ПолучитьПредопределенныеСпособыОповещения(),ПредопределенноеЗначение("Перечисление.СпособыУстановкиВремениНапоминания.ОтносительноВремениПредмета")))); - КонецЕсли; - - Если Объект.ИнтервалВремениНапоминания > 0 Тогда - ИнтервалВремениСтрокой = НапоминанияПользователяКлиентСервер.ПредставлениеВремени(Объект.ИнтервалВремениНапоминания); - КонецЕсли; - - ПредопределенныеСпособыОповещения = ПолучитьПредопределенныеСпособыОповещения(); - ВыбранныйСпособ = ПолучитьКлючПоЗначениюВСоответствии(ПредопределенныеСпособыОповещения, Объект.СпособУстановкиВремениНапоминания); - - Если Объект.СпособУстановкиВремениНапоминания = ПредопределенноеЗначение("Перечисление.СпособыУстановкиВремениНапоминания.ОтносительноТекущегоВремени") Тогда - СпособУстановкиВремениНапоминания = НСтр("ru = 'через '") + НапоминанияПользователяКлиентСервер.ПредставлениеВремени(Объект.ИнтервалВремениНапоминания); - Иначе - СпособУстановкиВремениНапоминания = ВыбранныйСпособ; - КонецЕсли; - - УстановитьВидимость(); - - ОбновитьРасчетноеВремяНапоминания(); - ПодключитьОбработчикОжидания("ОбновитьРасчетноеВремяНапоминания", 1); - -КонецПроцедуры - -&НаКлиенте -Процедура СпособУстановкиВремениНапоминанияПриИзменении(Элемент) - ОчиститьСообщения(); - - ИнтервалВремени = НапоминанияПользователяКлиентСервер.ПолучитьИнтервалВремениИзСтроки(СпособУстановкиВремениНапоминания); - Если ИнтервалВремени > 0 Тогда - ИнтервалВремениСтрокой = НапоминанияПользователяКлиентСервер.ПредставлениеВремени(ИнтервалВремени); - СпособУстановкиВремениНапоминания = НСтр("ru = 'через '") + ИнтервалВремениСтрокой; - Иначе - Если Элементы.СпособУстановкиВремениНапоминания.СписокВыбора.НайтиПоЗначению(СпособУстановкиВремениНапоминания) = Неопределено Тогда - Сообщение = Новый СообщениеПользователю; - Сообщение.Текст = НСтр("ru = 'Интервал времени не определён.'"); - Сообщение.Поле = "СпособУстановкиВремениНапоминания"; - Сообщение.УстановитьДанные(Объект); - Сообщение.Сообщить(); - КонецЕсли; - КонецЕсли; - - ПредопределенныеСпособыОповещения = ПолучитьПредопределенныеСпособыОповещения(); - ВыбранныйСпособ = ПредопределенныеСпособыОповещения.Получить(СпособУстановкиВремениНапоминания); - - Если ВыбранныйСпособ = Неопределено Тогда - Объект.СпособУстановкиВремениНапоминания = ПредопределенноеЗначение("Перечисление.СпособыУстановкиВремениНапоминания.ОтносительноТекущегоВремени"); - Иначе - Объект.СпособУстановкиВремениНапоминания = ВыбранныйСпособ; - КонецЕсли; - - Объект.ИнтервалВремениНапоминания = ИнтервалВремени; - - УстановитьВидимость(); -КонецПроцедуры - -&НаКлиенте -Процедура ПриИзмененииИнтервалаВремени(Элемент) - Объект.ИнтервалВремениНапоминания = НапоминанияПользователяКлиентСервер.ПолучитьИнтервалВремениИзСтроки(ИнтервалВремениСтрокой); - Если Объект.ИнтервалВремениНапоминания > 0 Тогда - ИнтервалВремениСтрокой = НапоминанияПользователяКлиентСервер.ПредставлениеВремени(Объект.ИнтервалВремениНапоминания); - Иначе - Сообщение = Новый СообщениеПользователю; - Сообщение.Текст = "Интервал времени не определён"; - Сообщение.Поле = "ИнтервалВремениСтрокой"; - Сообщение.УстановитьДанные(Объект); - Сообщение.Сообщить(); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ВариантПериодичностиПриИзменении(Элемент) - ПриИзмененииРасписания(); -КонецПроцедуры - -&НаКлиенте -Процедура ВариантПериодичностиОткрытие(Элемент, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ПриИзмененииРасписания(); -КонецПроцедуры - -&НаКлиенте -Процедура ДатаПриИзменении(Элемент) - ЗаполнитьСписокВремени(); -КонецПроцедуры - -&НаКлиенте -Процедура ВремяПриИзменении(Элемент) - Объект.ВремяСобытия = НачалоМинуты(Объект.ВремяСобытия); -КонецПроцедуры - -&НаКлиенте -Процедура ПослеЗаписи(ПараметрыЗаписи) - // для обновления кэша - СтруктураПараметров = НапоминанияПользователяКлиентСервер.ПолучитьСтруктуруНапоминания(Объект, Истина); - СтруктураПараметров.Вставить("ИндексКартинки", 2); - - НапоминанияПользователяКлиент.ОбновитьЗаписьВКэшеОповещений(СтруктураПараметров); - - СброситьТаймерПроверкиТекущихОповещений(); - - Если ЗначениеЗаполнено(Объект.Источник) Тогда - ОповеститьОбИзменении(Объект.Источник); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) - Если ИсходныеПараметры <> Неопределено Тогда - НапоминанияПользователяКлиент.УдалитьЗаписьИзКэшаОповещений(ИсходныеПараметры); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура Прекратить(Команда) - - КнопкиДиалога = Новый СписокЗначений; - КнопкиДиалога.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Прекратить'")); - КнопкиДиалога.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Не прекращать'")); - - Ответ = Вопрос(НСтр("ru = 'Прекратить напоминание?'"), КнопкиДиалога); - Если Ответ = КодВозвратаДиалога.Да Тогда - ЭтаФорма.Модифицированность = Ложь; - Если ИсходныеПараметры <> Неопределено Тогда - НапоминанияПользователяВызовСервера.ОтключитьНапоминание(ИсходныеПараметры, Ложь); - НапоминанияПользователяКлиент.УдалитьЗаписьИзКэшаОповещений(ИсходныеПараметры); - Оповестить("Запись_НапоминанияПользователя", Новый Структура, Объект.ИсходныйКлючЗаписи); - ОповеститьОбИзменении(Объект.ИсходныйКлючЗаписи); - КонецЕсли; - Если ЭтаФорма.Открыта() Тогда - Закрыть(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Функция РасчетноеВремяСтрокой() - ТекущаяДата = ТекущаяДата(); + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); РасчетноеВремяНапоминания = ТекущаяДата + Объект.ИнтервалВремениНапоминания; ВыводитьДату = День(РасчетноеВремяНапоминания) <> День(ТекущаяДата); diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form index 1795d45ed..7096068f2 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form @@ -390,7 +390,7 @@
    Selection - ТаблицаНапоминанийВыбор + НапоминанияВыбор OnActivateRow diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl index 0a78d5993..ea2bdd4c2 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Module.bsl @@ -1,3 +1,104 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + СрокПовторногоОповещения = "15м"; + СрокПовторногоОповещения = НапоминанияПользователяКлиентСервер.ОформитьВремя(СрокПовторногоОповещения); + + ОбновитьТаблицуНапоминаний(); + + ЗаполнитьСрокиПовторногоНапоминания(); + + ОбновитьВремяВТаблицеНапоминаний(); + ПодключитьОбработчикОжидания("ОбновитьВремяВТаблицеНапоминаний", 5); +КонецПроцедуры + +&НаКлиенте +Процедура ПриПовторномОткрытии() + ОбновитьТаблицуНапоминаний(); + ЭтаФорма.ТекущийЭлемент = Элементы.СрокПовторногоОповещения; +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + ИнтервалПроверкиНапоминаний = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиНапоминаний.ИнтервалПроверкиНапоминаний; + СрокПовторногоОповещения = НапоминанияПользователяКлиентСервер.ПредставлениеВремени(ИнтервалПроверкиНапоминаний * 60); + ОтложитьАктивныеНапоминания(); + СброситьТаймерПроверкиТекущихОповещений(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура СрокПовторногоОповещенияПриИзменении(Элемент) + СрокПовторногоОповещения = НапоминанияПользователяКлиентСервер.ОформитьВремя(СрокПовторногоОповещения); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Напоминания + +&НаКлиенте +Процедура НапоминанияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + ОткрытьНапоминание(); +КонецПроцедуры + +&НаКлиенте +Процедура НапоминанияПриАктивизацииСтроки(Элемент) + + Если Элемент.ТекущаяСтрока = Неопределено Тогда + Возврат; + КонецЕсли; + + Источник = Элемент.ТекущиеДанные.Источник; + ИсточникСтрокой = Элемент.ТекущиеДанные.ИсточникСтрокой; + + ЕстьИсточник = ЗначениеЗаполнено(Источник); + Элементы.НапоминанияКонтекстноеМенюОткрыть.Доступность = ЕстьИсточник; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Изменить(Команда) + РедактироватьНапоминание(); +КонецПроцедуры + +&НаКлиенте +Процедура КомандаОткрыть(Команда) + ОткрытьНапоминание(); +КонецПроцедуры + +&НаКлиенте +Процедура Отложить(Команда) + ОтложитьАктивныеНапоминания(); +КонецПроцедуры + +&НаКлиенте +Процедура Прекратить(Команда) + Если Элементы.Напоминания.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Для Каждого ИндексСтроки Из Элементы.Напоминания.ВыделенныеСтроки Цикл + ДанныеСтроки = Напоминания.НайтиПоИдентификатору(ИндексСтроки); + + ПараметрыНапоминания = НапоминанияПользователяКлиентСервер.ПолучитьСтруктуруНапоминания(ДанныеСтроки); + + НапоминанияПользователяВызовСервера.ОтключитьНапоминание(ПараметрыНапоминания); + НапоминанияПользователяКлиент.УдалитьЗаписьИзКэшаОповещений(ДанныеСтроки); + КонецЦикла; + + ОповеститьОбИзменении(Тип("РегистрСведенийКлючЗаписи.НапоминанияПользователя")); + + ОбновитьТаблицуНапоминаний(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура ОбновитьТаблицуНапоминаний() @@ -43,7 +144,7 @@ Интервал = 15; // обновление таблицы не реже чем 1 раз в 15 сек. Если ВремяБлижайшего <> Неопределено Тогда - Интервал = Мин(Интервал, ВремяБлижайшего - ТекущаяДата()); + Интервал = Мин(Интервал, ВремяБлижайшего - ОбщегоНазначенияКлиент.ДатаСеанса()); КонецЕсли; ПодключитьОбработчикОжидания("ОбновитьТаблицуНапоминаний", Интервал, Истина); @@ -66,7 +167,7 @@ Для Каждого СтрокаТаблицы Из Напоминания Цикл ПредставлениеВремени = ""; - Время = ТекущаяДата()-СтрокаТаблицы.ВремяСобытия; + Время = ОбщегоНазначенияКлиент.ДатаСеанса() - СтрокаТаблицы.ВремяСобытия; Если ЗначениеЗаполнено(СтрокаТаблицы.ВремяСобытия) Тогда Если Время > -60 и Время < 60 Тогда @@ -95,7 +196,7 @@ Процедура ОтложитьАктивныеНапоминания() ИнтервалВремени = НапоминанияПользователяКлиентСервер.ПолучитьИнтервалВремениИзСтроки(СрокПовторногоОповещения); Для Каждого СтрокаТаблицы Из Напоминания Цикл - СтрокаТаблицы.СрокНапоминания = ТекущаяДата() + ИнтервалВремени; + СтрокаТаблицы.СрокНапоминания = ОбщегоНазначенияКлиент.ДатаСеанса() + ИнтервалВремени; ПараметрыНапоминания = НапоминанияПользователяКлиентСервер.ПолучитьСтруктуруНапоминания(СтрокаТаблицы); @@ -146,78 +247,6 @@ КонецЦикла; КонецПроцедуры -&НаКлиенте -Процедура ПриОткрытии(Отказ) - СрокПовторногоОповещения = "15м"; - СрокПовторногоОповещения = НапоминанияПользователяКлиентСервер.ОформитьВремя(СрокПовторногоОповещения); - - ОбновитьТаблицуНапоминаний(); - - ЗаполнитьСрокиПовторногоНапоминания(); - - ОбновитьВремяВТаблицеНапоминаний(); - ПодключитьОбработчикОжидания("ОбновитьВремяВТаблицеНапоминаний", 5); -КонецПроцедуры - -&НаКлиенте -Процедура ПриПовторномОткрытии() - ОбновитьТаблицуНапоминаний(); - ЭтаФорма.ТекущийЭлемент = Элементы.СрокПовторногоОповещения; -КонецПроцедуры - -&НаКлиенте -Процедура ПриЗакрытии() - ИнтервалПроверкиНапоминаний = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиНапоминаний.ИнтервалПроверкиНапоминаний; - СрокПовторногоОповещения = НапоминанияПользователяКлиентСервер.ПредставлениеВремени(ИнтервалПроверкиНапоминаний * 60); - ОтложитьАктивныеНапоминания(); - СброситьТаймерПроверкиТекущихОповещений(); -КонецПроцедуры - -&НаКлиенте -Процедура Изменить(Команда) - РедактироватьНапоминание(); -КонецПроцедуры - -&НаКлиенте -Процедура КомандаОткрыть(Команда) - ОткрытьНапоминание(); -КонецПроцедуры - -&НаКлиенте -Процедура Прекратить(Команда) - Если Элементы.Напоминания.ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Для Каждого ИндексСтроки Из Элементы.Напоминания.ВыделенныеСтроки Цикл - ДанныеСтроки = Напоминания.НайтиПоИдентификатору(ИндексСтроки); - - ПараметрыНапоминания = НапоминанияПользователяКлиентСервер.ПолучитьСтруктуруНапоминания(ДанныеСтроки); - - НапоминанияПользователяВызовСервера.ОтключитьНапоминание(ПараметрыНапоминания); - НапоминанияПользователяКлиент.УдалитьЗаписьИзКэшаОповещений(ДанныеСтроки); - КонецЦикла; - - ОповеститьОбИзменении(Тип("РегистрСведенийКлючЗаписи.НапоминанияПользователя")); - - ОбновитьТаблицуНапоминаний(); -КонецПроцедуры - -&НаКлиенте -Процедура СрокПовторногоОповещенияПриИзменении(Элемент) - СрокПовторногоОповещения = НапоминанияПользователяКлиентСервер.ОформитьВремя(СрокПовторногоОповещения); -КонецПроцедуры - -&НаКлиенте -Процедура Отложить(Команда) - ОтложитьАктивныеНапоминания(); -КонецПроцедуры - -&НаКлиенте -Процедура ТаблицаНапоминанийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ОткрытьНапоминание(); -КонецПроцедуры - &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "Запись_НапоминанияПользователя" Тогда @@ -225,25 +254,3 @@ КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура НапоминанияПриАктивизацииСтроки(Элемент) - - Если Элемент.ТекущаяСтрока = Неопределено Тогда - Возврат; - КонецЕсли; - - Источник = Элемент.ТекущиеДанные.Источник; - ИсточникСтрокой = Элемент.ТекущиеДанные.ИсточникСтрокой; - - ЕстьИсточник = ЗначениеЗаполнено(Источник); - Элементы.НапоминанияКонтекстноеМенюОткрыть.Доступность = ЕстьИсточник; - - //НазваниеКоманды = "Открыть (предмет не задан)"; - //Если ЕстьИсточник Тогда - // НазваниеКоманды = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Открыть ""%1""'"), ИсточникСтрокой); - //КонецЕсли; - // - //Элементы.НапоминанияКонтекстноеМенюОткрыть.Заголовок = НазваниеКоманды; - -КонецПроцедуры - diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl index 9d7c94bb5..b2aac6b7d 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ПередЗаписью(Отказ, Замещение) Если ОбменДанными.Загрузка Тогда diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Form.form b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Form.form index 37874e221..a19b0bae0 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Form.form +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Form.form @@ -865,7 +865,7 @@ - УстановитьНастройкиПоУмолчаниюВыполнить + УстановитьНастройкиПоУмолчанию Auto @@ -887,7 +887,7 @@ - УстановитьВариантВерсионированияПриПроведенииВыполнить + УстановитьВариантВерсионированияПриПроведении Auto @@ -909,7 +909,7 @@ - УстановитьРежимВерсионированияПриЗаписиВыполнить + УстановитьРежимВерсионированияПриЗаписи Auto @@ -931,7 +931,7 @@ - УстановитьВариантВерсионированияНеВерсионироватьВыполнить + УстановитьВариантВерсионированияНеВерсионировать Auto diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Module.bsl b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Module.bsl index ac417fd9a..74c396bb6 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Module.bsl @@ -1,33 +1,115 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ЗаполнитьТипыОбъектовВДеревеЗначений(); + + СписокВыбораПолный = Новый СписокЗначений; + СписокВыбораПолный.Добавить(Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи); + СписокВыбораПолный.Добавить(Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении); + СписокВыбораПолный.Добавить(Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать); + + СписокВыбораБезПроведения = Новый СписокЗначений; + СписокВыбораБезПроведения.Добавить(Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи); + СписокВыбораБезПроведения.Добавить(Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Секция сервисных функций -// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ -// Функция ДокументПроводится возвращает значение свойства Проведение -// объекта метаданнх из коллекции "Метаданные.Документы". -// -// Параметры: -// ИмяДокумента - Строка, возможно два варианта ПолноеИмя и КраткоеИмя, -// например, "Документ.ПриходнаяНакладная" или "ПриходнаяНакладная". -// -// Возвращаемое значение: -// Булево. -// -Функция ДокументПроводится(знач ИмяДокумента) +&НаКлиенте +Процедура ВариантВерсионированияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - ИмяДокументаМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяДокумента, "."); + СтандартнаяОбработка = Ложь; + СтрокаДерева = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; + СтрокаДерева.ВариантВерсионирования = ВыбранноеЗначение; - Если ИмяДокументаМассив.Количество() > 1 Тогда - ИмяДокумента = ИмяДокументаМассив[1]; + ТипОбъекта = СтрокаДерева.ТипОбъекта; + ВариантВерсионирования = СтрокаДерева.ВариантВерсионирования; + + ЗаписатьНастройкуВерсионирования(ТипОбъекта, ВариантВерсионирования); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоОбъектовМетаданных + +&НаКлиенте +Процедура ДеревоОбъектовМетаданныхПередНачаломИзменения(Элемент, Отказ) + + Если Элемент.ТекущиеДанные.КлассОбъекта = "01КлассСправочникиКорень" + Или Элемент.ТекущиеДанные.КлассОбъекта = "02КлассДокументыКорень" Тогда + Отказ = Истина; КонецЕсли; - Возврат Метаданные.Документы[ИмяДокумента].Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить; + // не проверяем что это за элемент, так как это всегда ВариантВерсионирования + ЗаполнитьСписокВыбора(Элементы.ДеревоОбъектовМетаданных.ТекущийЭлемент); -КонецФункции +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура УстановитьВариантВерсионированияНеВерсионировать(Команда) + + УстановитьВариантВерсионированияДляВыделенныхСтрок( + ПредопределенноеЗначение("Перечисление.ВариантыВерсионированияОбъектов.НеВерсионировать")); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьРежимВерсионированияПриЗаписи(Команда) + + УстановитьВариантВерсионированияДляВыделенныхСтрок( + ПредопределенноеЗначение("Перечисление.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи")); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьВариантВерсионированияПриПроведении(Команда) + + Если ВыбранТипДокументовБезВозможностиПроведения() Тогда + Предупреждение(НСтр("ru = 'Документам, которые не могут быть проведены, будет установлен режим версионирования ""Версионировать при записи"".'")); + КонецЕсли; + + УстановитьВариантВерсионированияДляВыделенныхСтрок( + ПредопределенноеЗначение("Перечисление.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении")); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьНастройкиПоУмолчанию(Команда) + + УстановитьНастройкиПоУмолчаниюСервер(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ЗаполнитьСписокВыбора(Элемент) + + СтрокаДерева = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; + + Элемент.СписокВыбора.Очистить(); + + Если СтрокаДерева.КлассОбъекта = "КлассДокументы" И СтрокаДерева.Проводится Тогда + СписокВыбора = СписокВыбораПолный; + Иначе + СписокВыбора = СписокВыбораБезПроведения; + КонецЕсли; + + Для Каждого ЭлементСписка Из СписокВыбора Цикл + Элемент.СписокВыбора.Добавить(ЭлементСписка.Значение); + КонецЦикла; + +КонецПроцедуры -// Заполняет дерево значений наименованиями объектов метаданных: -// справочники и документы. -// &НаСервере Процедура ЗаполнитьТипыОбъектовВДеревеЗначений() @@ -93,8 +175,6 @@ КонецПроцедуры -// Записывает настройку версионирования -// &НаСервереБезКонтекста Процедура ЗаписатьНастройкуВерсионирования(знач ТипОбъекта, знач ВариантВерсионирования) @@ -103,11 +183,8 @@ КонецПроцедуры -// По выделенным строкам определяет какие из них являются именованиями -// документов и возвращает массив -// &НаКлиенте -Функция СредиВыделенныхДокументовЕстьНепроводящиеся() +Функция ВыбранТипДокументовБезВозможностиПроведения() Для Каждого ИдентификаторСтроки Из Элементы.ДеревоОбъектовМетаданных.ВыделенныеСтроки Цикл ЭлементДерева = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(ИдентификаторСтроки); @@ -120,230 +197,50 @@ КонецФункции -///////////////////////////////////////////////////////////////// -// Блок фунцкий устанавливающих вариант версионирования -// - -// Устанавливает все настройки версионирования по умолчанию -// и переформирует дерево -// &НаСервере -Процедура УстановитьНастройкиПоУмолчанию() - - Для Каждого ИдентификаторСтроки Из Элементы.ДеревоОбъектовМетаданных.ВыделенныеСтроки Цикл - ЭлементДерева = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(ИдентификаторСтроки); - Если ЭлементДерева.КлассОбъекта = "КлассСправочники" Тогда - ЭлементДерева.ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать; - ВерсионированиеОбъектов.ЗаписатьНастройкуВерсионированияПоОбъекту( - ЭлементДерева.ТипОбъекта, - Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать); - КонецЕсли; - Если ЭлементДерева.КлассОбъекта = "КлассДокументы" Тогда - Если ДокументПроводится(ЭлементДерева.ТипОбъекта) Тогда - ЭлементДерева.ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении; - ВерсионированиеОбъектов.ЗаписатьНастройкуВерсионированияПоОбъекту( - ЭлементДерева.ТипОбъекта, - Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении); - Иначе - ЭлементДерева.ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи; - ВерсионированиеОбъектов.ЗаписатьНастройкуВерсионированияПоОбъекту( - ЭлементДерева.ТипОбъекта, - Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи); - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Устанавливает все настройки версионирования "не версионировать" -// и переформирует дерево -// -&НаСервере -Процедура УстановитьВариантВерсионированияНеВерсионировать() +Процедура УстановитьНастройкиПоУмолчаниюСервер() Для Каждого ИдентификаторСтроки Из Элементы.ДеревоОбъектовМетаданных.ВыделенныеСтроки Цикл + ЭлементДерева = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(ИдентификаторСтроки); - Если ЭлементДерева.КлассОбъекта = "КлассСправочники" Тогда - ЭлементДерева.ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать; - ВерсионированиеОбъектов.ЗаписатьНастройкуВерсионированияПоОбъекту( - ЭлементДерева.ТипОбъекта, - Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать); + Если ПустаяСтрока(ЭлементДерева.ТипОбъекта) Тогда + Продолжить; КонецЕсли; + Если ЭлементДерева.КлассОбъекта = "КлассДокументы" Тогда - ЭлементДерева.ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать; - ВерсионированиеОбъектов.ЗаписатьНастройкуВерсионированияПоОбъекту( - ЭлементДерева.ТипОбъекта, - Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать); + УстановитьВариантВерсионированияДляЭлементаДерева(ЭлементДерева, Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении); + Иначе + УстановитьВариантВерсионированияДляЭлементаДерева(ЭлементДерева, Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать); КонецЕсли; + КонецЦикла; КонецПроцедуры -// Устанавливает все настройки версионирования "при проведении" -// и переформирует дерево -// &НаСервере -Процедура УстановитьВариантВерсионированияВсегда() +Процедура УстановитьВариантВерсионированияДляВыделенныхСтрок(Знач ВариантВерсионирования) Для Каждого ИдентификаторСтроки Из Элементы.ДеревоОбъектовМетаданных.ВыделенныеСтроки Цикл ЭлементДерева = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(ИдентификаторСтроки); - Если ЭлементДерева.КлассОбъекта = "КлассСправочники" Тогда - ЭлементДерева.ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи; - ВерсионированиеОбъектов.ЗаписатьНастройкуВерсионированияПоОбъекту( - ЭлементДерева.ТипОбъекта, - Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи); - КонецЕсли; - Если ЭлементДерева.КлассОбъекта = "КлассДокументы" Тогда - ЭлементДерева.ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи; - ВерсионированиеОбъектов.ЗаписатьНастройкуВерсионированияПоОбъекту( - ЭлементДерева.ТипОбъекта, - Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи); + Если Не ПустаяСтрока(ЭлементДерева.ТипОбъекта) Тогда + УстановитьВариантВерсионированияДляЭлементаДерева(ЭлементДерева, ВариантВерсионирования); КонецЕсли; КонецЦикла; КонецПроцедуры -// Устанавливает все настройки версионирования "при проведении" -// и переформирует дерево -// &НаСервере -Процедура УстановитьВариантВерсионированияПриПроведении() +Процедура УстановитьВариантВерсионированияДляЭлементаДерева(ЭлементДерева, Знач ВариантВерсионирования) - Для Каждого ИдентификаторСтроки Из Элементы.ДеревоОбъектовМетаданных.ВыделенныеСтроки Цикл - ЭлементДерева = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(ИдентификаторСтроки); - Если ЭлементДерева.КлассОбъекта = "КлассДокументы" И ДокументПроводится(ЭлементДерева.ТипОбъекта) Тогда - ЭлементДерева.ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении; - ВерсионированиеОбъектов.ЗаписатьНастройкуВерсионированияПоОбъекту( - ЭлементДерева.ТипОбъекта, - Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении); - ИначеЕсли (ЭлементДерева.КлассОбъекта = "КлассДокументы" И НЕ ДокументПроводится(ЭлементДерева.ТипОбъекта)) - ИЛИ (ЭлементДерева.КлассОбъекта = "КлассСправочники") Тогда - ЭлементДерева.ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи; - ВерсионированиеОбъектов.ЗаписатьНастройкуВерсионированияПоОбъекту( - ЭлементДерева.ТипОбъекта, - Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Формирует список выбора варианта версионирования по классу объекта -&НаКлиенте -Процедура ЗаполнитьСписокВыбора(Элемент) - - СтрокаДерева = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; - - Элемент.СписокВыбора.Очистить(); - - Если СтрокаДерева.КлассОбъекта = "КлассДокументы" И СтрокаДерева.Проводится Тогда - СписокВыбора = СписокВыбораПолный; - Иначе - СписокВыбора = СписокВыбораБезПроведения; + Если ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении + И Не ЭлементДерева.Проводится Тогда + ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи; КонецЕсли; - - Для Каждого ЭлементСписка Из СписокВыбора Цикл - Элемент.СписокВыбора.Добавить(ЭлементСписка.Значение); - КонецЦикла; + + ЭлементДерева.ВариантВерсионирования = ВариантВерсионирования; + ВерсионированиеОбъектов.ЗаписатьНастройкуВерсионированияПоОбъекту(ЭлементДерева.ТипОбъекта, ВариантВерсионирования); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Секция обработчиков событий -// - -// Обработчик события "при создании на сервере" формы -// Заполняет дерево формы наименованиями объектов метаданных -// -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - ЗаполнитьТипыОбъектовВДеревеЗначений(); - - СписокВыбораПолный = Новый СписокЗначений; - СписокВыбораПолный.Добавить(Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи); - СписокВыбораПолный.Добавить(Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении); - СписокВыбораПолный.Добавить(Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать); - - СписокВыбораБезПроведения = Новый СписокЗначений; - СписокВыбораБезПроведения.Добавить(Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи); - СписокВыбораБезПроведения.Добавить(Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать); - -КонецПроцедуры - -// Обработчик события "перед началом изменения" элемента формы -// ДеревоОбъектовМетаданных. -// Отказывает в измении свойств, если указатель на корневом элементе -// -&НаКлиенте -Процедура ДеревоОбъектовМетаданныхПередНачаломИзменения(Элемент, Отказ) - - Если Элемент.ТекущиеДанные.КлассОбъекта = "01КлассСправочникиКорень" - Или Элемент.ТекущиеДанные.КлассОбъекта = "02КлассДокументыКорень" Тогда - Отказ = Истина; - КонецЕсли; - - // не проверяем что это за элемент, так как это всегда ВариантВерсионирования - ЗаполнитьСписокВыбора(Элементы.ДеревоОбъектовМетаданных.ТекущийЭлемент); - -КонецПроцедуры - -// Обработчик события "обработка выбора" элемента поля дерева формы (ДеревоОбъектовМетаданных) -// Вписывает выбранное значение версионирования в таблицу и записывает регистр сведений -// -&НаКлиенте -Процедура ВариантВерсионированияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - СтрокаДерева = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; - СтрокаДерева.ВариантВерсионирования = ВыбранноеЗначение; - - ТипОбъекта = СтрокаДерева.ТипОбъекта; - ВариантВерсионирования = СтрокаДерева.ВариантВерсионирования; - - ЗаписатьНастройкуВерсионирования(ТипОбъекта, ВариантВерсионирования); - -КонецПроцедуры - -// Обработчик нажатия на кнопку "Заполнить по умолчанию" командной панели формы -// Устанавливает все настройки версионирования по умолчанию -// -&НаКлиенте -Процедура УстановитьНастройкиПоУмолчаниюВыполнить(Команда) - - УстановитьНастройкиПоУмолчанию(); - -КонецПроцедуры - -// Обработчик нажатия на кнопку "Не версионировать" командной панели формы -// -&НаКлиенте -Процедура УстановитьВариантВерсионированияНеВерсионироватьВыполнить(Команда) - - УстановитьВариантВерсионированияНеВерсионировать(); - -КонецПроцедуры - -// Обработчик нажатия на кнопку "Версионировать при проведении" командной панели формы -// -&НаКлиенте -Процедура УстановитьВариантВерсионированияПриПроведенииВыполнить(Команда) - - Если СредиВыделенныхДокументовЕстьНепроводящиеся() Тогда - Предупреждение(НСтр("ru = 'Документам, которые не могут быть проведены, будет установлен режим версонирования ""Версионировать всегда"".'")); - КонецЕсли; - - УстановитьВариантВерсионированияПриПроведении(); - -КонецПроцедуры - -// Обработчик нажатия на кнопку "Версионировать всегда" командной панели формы -// -&НаКлиенте -Процедура УстановитьРежимВерсионированияПриЗаписиВыполнить(Команда) - - УстановитьВариантВерсионированияВсегда(); - -КонецПроцедуры - diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl index 83520fb92..ea3bf402a 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + Процедура ПередЗаписью(Отказ, Замещение) Если ОбменДанными.Загрузка Тогда @@ -11,4 +14,6 @@ Строка.Использовать = Истина; КонецЕсли; КонецЦикла; -КонецПроцедуры \ No newline at end of file + +КонецПроцедуры + diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/Commands/НастройкиОтправителя/CommandModule.bsl b/SSL/src/InformationRegisters/НастройкиОтправителя/Commands/НастройкиОтправителя/CommandModule.bsl new file mode 100644 index 000000000..75dd00782 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/Commands/НастройкиОтправителя/CommandModule.bsl @@ -0,0 +1,13 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + Отбор = Новый Структура("Получатель", ПараметрКоманды); + + ПараметрыФормы = Новый Структура("Отбор", Отбор); + + ОткрытьФорму("РегистрСведений.НастройкиОтправителя.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..8af7a5f70 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,126 @@ + + + + КаналСообщений + 1 + true + true + + true + + + Запись.КаналСообщений + + + КаналСообщенийРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + + КаналСообщенийКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Получатель + 3 + true + true + + true + + + Запись.Получатель + + + ПолучательРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ПолучательКонтекстноеМеню + 4 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Запись + 1 + + InformationRegisterRecordManager.НастройкиОтправителя + + + true + + + true + +
    true
    + true +
    + + + + + +
    diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..732211e72 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,13 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если ЗначениеЗаполнено(Запись.Получатель) Тогда + + Элементы.Получатель.Видимость = Ложь; + + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..91027f589 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,15 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..f5ae44c44 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Form.form @@ -0,0 +1,266 @@ + + + + Список + 1 + true + true + + true + + + Список + + true + None + + КаналСообщений + 4 + true + true + + true + + + Список.КаналСообщений + + true + + КаналСообщенийРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + КаналСообщенийКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Получатель + 6 + true + true + + true + + + Список.Получатель + + true + + ПолучательРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + ПолучательКонтекстноеМеню + 7 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска + 9 + + СписокСтрокаПоискаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 10 + true + + Список + + true + + + + СписокСостояниеПросмотра + 12 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 13 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 15 + + СписокУправлениеПоискомРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 16 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
    + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
    true
    + + InformationRegister.НастройкиОтправителя + true + true + true + true + +
    + + + + + +
    diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..a8929cd6c --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Отбор.Свойство("Получатель") Тогда + Элементы.Получатель.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиОтправителя/ManagerModule.bsl new file mode 100644 index 000000000..2cb06fb84 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/ManagerModule.bsl @@ -0,0 +1,29 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Определяет конечные точки, для которых в текущей информационной системе +// назначен заданный канал сообщений. +// +// Параметры: +// КаналСообщений – Строка. Идентификатор адресного канала сообщений. +// +// Возвращаемое значение: +// Тип: Массив. Массив элементов конечных точек. +// Массив содержит элементы типа ПланОбменаСсылка.ОбменСообщениями. +// +Функция ПодписчикиКаналаСообщений(Знач КаналСообщений) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | НастройкиОтправителя.Получатель КАК Получатель + |ИЗ + | РегистрСведений.НастройкиОтправителя КАК НастройкиОтправителя + |ГДЕ + | НастройкиОтправителя.КаналСообщений = &КаналСообщений"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("КаналСообщений", КаналСообщений); + Запрос.Текст = ТекстЗапроса; + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Получатель"); +КонецФункции diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/НастройкиОтправителя.mdo b/SSL/src/InformationRegisters/НастройкиОтправителя/НастройкиОтправителя.mdo new file mode 100644 index 000000000..a2a42efba --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/НастройкиОтправителя.mdo @@ -0,0 +1,120 @@ + + + + + + + + + + + + НастройкиОтправителя + + ru + Настройки отправителя + + Используется для хранения связей каналов с получателями этих каналов. Регистр задает рассылку по получателям со стороны отправителя. + InDialog + InformationRegister.НастройкиОтправителя.Form.ФормаЗаписи + InformationRegister.НастройкиОтправителя.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + КаналСообщений + + ru + Канал сообщений + + + String + + 150 + + + + + Use + Use + + + + Получатель + + ru + Получатель + + + ExchangePlanRef.ОбменСообщениями + + + + true + Use + true + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + + НастройкиОтправителя + + ru + Настройки отправителя + + FormNavigationPanelGoTo + + ExchangePlanRef.ОбменСообщениями + + Auto + + diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form index b6808985d..95a8649c3 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form @@ -7,6 +7,10 @@ ВидТранспортаСообщенийОбменаПоУмолчанию 1 + + <key>ru</key> + <value>Транспорт по умолчанию</value> + true true @@ -17,7 +21,7 @@ ВидТранспортаСообщенийОбменаПоУмолчаниюРасширеннаяПодсказка - 100 + 109 Label true true @@ -36,8 +40,10 @@ Left true + 50 true true + false true true false @@ -65,14 +71,14 @@ Запись.COMВариантРаботыИнформационнойБазы - Left + None OnChange COMВариантРаботыИнформационнойБазыПриИзменении COMВариантРаботыИнформационнойБазыРасширеннаяПодсказка - 104 + 113 Label true true @@ -95,7 +101,7 @@ ru - Файловый + Файловая база-корреспондент 0 @@ -104,7 +110,7 @@ ru - Клиент-серверный + Клиент-серверная база-корреспондент 1 @@ -132,7 +138,7 @@ COMКаталогИнформационнойБазыРасширеннаяПодсказка - 108 + 117 Label true true @@ -185,7 +191,7 @@ СтраницаВариантРаботыФайловыйРасширеннаяПодсказка - 107 + 116 Label true true @@ -219,7 +225,7 @@ COMИмяСервера1СПредприятияРасширеннаяПодсказка - 111 + 120 Label true true @@ -264,7 +270,7 @@ COMИмяИнформационнойБазыНаСервере1СПредприятияРасширеннаяПодсказка - 113 + 122 Label true true @@ -307,7 +313,7 @@ СтраницаВариантРаботыКлиентСерверныйРасширеннаяПодсказка - 110 + 119 Label true true @@ -336,7 +342,7 @@ ВариантыРаботыИнформационнойБазыРасширеннаяПодсказка - 106 + 115 Label true true @@ -367,7 +373,7 @@
    COMАутентификацияОперационнойСистемыРасширеннаяПодсказка - 115 + 124 Label true true @@ -403,7 +409,7 @@ COMИмяПользователяРасширеннаяПодсказка - 118 + 127 Label true true @@ -444,7 +450,7 @@ COMПарольПользователяРасширеннаяПодсказка - 120 + 129 Label true true @@ -487,7 +493,7 @@ COMГруппаПользовательПарольРасширеннаяПодсказка - 117 + 126 Label true true @@ -517,7 +523,7 @@ ПроверитьПодключениеCOMРасширеннаяПодсказка - 123 + 132 Label true true @@ -545,7 +551,7 @@ ИсправитьОшибкиУстановкиВнешнегоСоединенияРасширеннаяПодсказка - 124 + 133 Label true true @@ -569,7 +575,7 @@ Группа2РасширеннаяПодсказка - 122 + 131 Label true true @@ -593,7 +599,7 @@ <key>ru</key> - <value>Обмен через прямое подключение к базе-корреспонденту</value> + <value>Прямое подключение к базе-корреспонденту</value> ru @@ -601,7 +607,7 @@ НастройкиТранспортаCOMРасширеннаяПодсказка - 103 + 112 Label true true @@ -631,7 +637,7 @@ WSURLВебСервисаРасширеннаяПодсказка - 126 + 135 Label true true @@ -659,101 +665,20 @@ Normal - - Группа1 - 97 - - WSИмяПользователя - 92 - true - true - - true - - - Запись.WSИмяПользователя - - - WSИмяПользователяРасширеннаяПодсказка - 129 - Label - true - true - - Left - - - - WSИмяПользователяКонтекстноеМеню - 93 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - WSПароль - 94 - true - true - - true - - - Запись.WSПароль - - - WSПарольРасширеннаяПодсказка - 131 - Label - true - true - - Left - - - - WSПарольКонтекстноеМеню - 95 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - + + WSИмяПользователя + 92 true true true - false + + Запись.WSИмяПользователя + - Группа1РасширеннаяПодсказка - 128 + WSИмяПользователяРасширеннаяПодсказка + 137 Label true true @@ -761,14 +686,66 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto + + WSИмяПользователяКонтекстноеМеню + 93 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + WSПароль + 94 + true + true + + true + + + Запись.WSПароль + + + WSПарольРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + WSПарольКонтекстноеМеню + 95 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal @@ -781,7 +758,7 @@ ПроверитьПодключениеWSРасширеннаяПодсказка - 133 + 141 Label true true @@ -798,6 +775,40 @@ UserCmds Auto + + WSИспользоватьПередачуБольшогоОбъемаДанных + 107 + true + true + + true + + + Запись.WSИспользоватьПередачуБольшогоОбъемаДанных + + Right + + WSИспользоватьПередачуБольшогоОбъемаДанныхРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + + WSИспользоватьПередачуБольшогоОбъемаДанныхКонтекстноеМеню + 108 + true + + CheckBoxField + Enter + true + Left + true + + true true @@ -805,7 +816,7 @@ <key>ru</key> - <value>Обмен через Web-сервис</value> + <value>Обмен через Интернет</value> ru @@ -813,7 +824,7 @@ НастройкиТранспортаWSРасширеннаяПодсказка - 125 + 134 Label true true @@ -843,7 +854,7 @@ FILEКаталогОбменаИнформациейРасширеннаяПодсказка - 135 + 145 Label true true @@ -881,40 +892,6 @@ Normal - - FILEСжиматьФайлИсходящегоСообщения - 10 - true - true - - true - - - Запись.FILEСжиматьФайлИсходящегоСообщения - - Right - - FILEСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка - 137 - Label - true - true - - Left - - - - FILEСжиматьФайлИсходящегоСообщенияКонтекстноеМеню - 11 - true - - CheckBoxField - Enter - true - Left - true - - ПроверитьПодключениеFILE 42 @@ -926,7 +903,7 @@ false ПроверитьПодключениеFILEРасширеннаяПодсказка - 139 + 147 Label true true @@ -943,6 +920,113 @@ UserCmds Auto + + Группа1 + 100 + + FILEСжиматьФайлИсходящегоСообщения + 10 + true + true + + true + + + Запись.FILEСжиматьФайлИсходящегоСообщения + + Right + + FILEСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + + FILEСжиматьФайлИсходящегоСообщенияКонтекстноеМеню + 11 + true + + CheckBoxField + Enter + true + Left + true + + + + ПарольАрхиваСообщенияОбмена1 + 101 + true + true + + true + + + Запись.ПарольАрхиваСообщенияОбмена + + + ПарольАрхиваСообщенияОбмена1РасширеннаяПодсказка + 151 + Label + true + true + + Left + + + + ПарольАрхиваСообщенияОбмена1КонтекстноеМеню + 102 + true + + InputField + Enter + true + Left + true + + 20 + true + true + false + true + true + true + true + true + Normal + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 148 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + true true @@ -958,7 +1042,7 @@ НастройкиТранспортаFILEРасширеннаяПодсказка - 134 + 144 Label true true @@ -991,7 +1075,7 @@ FTPСоединениеПутьРасширеннаяПодсказка - 142 + 155 Label true true @@ -1032,7 +1116,7 @@ FTPСоединениеПортРасширеннаяПодсказка - 144 + 157 Label true true @@ -1079,7 +1163,7 @@ ГруппаСерверПортРасширеннаяПодсказка - 141 + 154 Label true true @@ -1112,7 +1196,7 @@ FTPСоединениеПользовательРасширеннаяПодсказка - 147 + 160 Label true true @@ -1153,7 +1237,7 @@ FTPСоединениеПарольРасширеннаяПодсказка - 149 + 162 Label true true @@ -1197,7 +1281,7 @@ ГруппаПользовательПарольРасширеннаяПодсказка - 146 + 159 Label true true @@ -1227,7 +1311,7 @@ FTPСоединениеМаксимальныйДопустимыйРазмерСообщенияРасширеннаяПодсказка - 151 + 164 Label true true @@ -1270,7 +1354,7 @@ Right FTPСоединениеПассивноеСоединениеРасширеннаяПодсказка - 153 + 166 Label true true @@ -1290,40 +1374,6 @@ true - - FTPСжиматьФайлИсходящегоСообщения - 12 - true - true - - true - - - Запись.FTPСжиматьФайлИсходящегоСообщения - - Right - - FTPСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка - 155 - Label - true - true - - Left - - - - FTPСжиматьФайлИсходящегоСообщенияКонтекстноеМеню - 13 - true - - CheckBoxField - Enter - true - Left - true - - ПроверитьПодключениеFTP 41 @@ -1335,7 +1385,7 @@ false ПроверитьПодключениеFTPРасширеннаяПодсказка - 157 + 168 Label true true @@ -1352,6 +1402,113 @@ UserCmds Auto + + Группа3 + 103 + + FTPСжиматьФайлИсходящегоСообщения + 12 + true + true + + true + + + Запись.FTPСжиматьФайлИсходящегоСообщения + + Right + + FTPСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + + FTPСжиматьФайлИсходящегоСообщенияКонтекстноеМеню + 13 + true + + CheckBoxField + Enter + true + Left + true + + + + ПарольАрхиваСообщенияОбмена + 34 + true + true + + true + + + Запись.ПарольАрхиваСообщенияОбмена + + + ПарольАрхиваСообщенияОбменаРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + + ПарольАрхиваСообщенияОбменаКонтекстноеМеню + 35 + true + + InputField + Enter + true + Left + true + + 20 + true + true + false + true + true + true + true + true + Normal + + + true + true + + true + + + Группа3РасширеннаяПодсказка + 169 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + true true @@ -1367,7 +1524,7 @@ НастройкиТранспортаFTPРасширеннаяПодсказка - 140 + 153 Label true true @@ -1397,7 +1554,7 @@ EMAILУчетнаяЗаписьРасширеннаяПодсказка - 159 + 175 Label true true @@ -1438,7 +1595,7 @@ EMAILМаксимальныйДопустимыйРазмерСообщенияРасширеннаяПодсказка - 161 + 177 Label true true @@ -1467,40 +1624,6 @@ Normal - - EMAILСжиматьФайлИсходящегоСообщения - 28 - true - true - - true - - - Запись.EMAILСжиматьФайлИсходящегоСообщения - - Right - - EMAILСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка - 163 - Label - true - true - - Left - - - - EMAILСжиматьФайлИсходящегоСообщенияКонтекстноеМеню - 29 - true - - CheckBoxField - Enter - true - Left - true - - ПроверитьПодключениеEMAIL 43 @@ -1512,7 +1635,7 @@ false ПроверитьПодключениеEMAILРасширеннаяПодсказка - 165 + 179 Label true true @@ -1529,6 +1652,113 @@ UserCmds Auto + + Группа4 + 104 + + EMAILСжиматьФайлИсходящегоСообщения + 28 + true + true + + true + + + Запись.EMAILСжиматьФайлИсходящегоСообщения + + Right + + EMAILСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка + 181 + Label + true + true + + Left + + + + EMAILСжиматьФайлИсходящегоСообщенияКонтекстноеМеню + 29 + true + + CheckBoxField + Enter + true + Left + true + + + + ПарольАрхиваСообщенияОбмена2 + 105 + true + true + + true + + + Запись.ПарольАрхиваСообщенияОбмена + + + ПарольАрхиваСообщенияОбмена2РасширеннаяПодсказка + 183 + Label + true + true + + Left + + + + ПарольАрхиваСообщенияОбмена2КонтекстноеМеню + 106 + true + + InputField + Enter + true + Left + true + + 20 + true + true + false + true + true + true + true + true + Normal + + + true + true + + true + + + Группа4РасширеннаяПодсказка + 180 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + true true @@ -1544,7 +1774,7 @@ НастройкиТранспортаEMAILРасширеннаяПодсказка - 158 + 174 Label true true @@ -1575,7 +1805,7 @@ None CombiВидТранспортаСообщенийОбменаРасширеннаяПодсказка - 167 + 186 Label true true @@ -1629,7 +1859,7 @@ WSСтрокаПодключенияКБазеКорреспондентуРасширеннаяПодсказка - 169 + 188 Label true true @@ -1668,7 +1898,7 @@ НастройкиТранспортаCombiРасширеннаяПодсказка - 166 + 185 Label true true @@ -1697,7 +1927,7 @@ СтраницыВидовТранспортаРасширеннаяПодсказка - 102 + 111 Label true true @@ -1707,142 +1937,13 @@ Pages - TabsOnTop + TabsOnLeftHorizontal Auto - ОбщиеНастройки + ДополнительныеНастройки 36 - - ПарольАрхиваСообщенияОбмена - 34 - true - true - - true - - - Запись.ПарольАрхиваСообщенияОбмена - - - ПарольАрхиваСообщенияОбменаРасширеннаяПодсказка - 172 - Label - true - true - - Left - - - - ПарольАрхиваСообщенияОбменаКонтекстноеМеню - 35 - true - - InputField - Enter - true - Left - true - - 20 - true - true - false - true - true - true - true - true - Normal - - - - ИмяФайлаПротоколаОбмена - 32 - true - true - - true - - - Запись.ИмяФайлаПротоколаОбмена - - - ИмяФайлаПротоколаОбменаРасширеннаяПодсказка - 174 - Label - true - true - - Left - - - - ИмяФайлаПротоколаОбменаКонтекстноеМеню - 33 - true - - InputField - Enter - true - Left - true - - - StartChoice - ИмяФайлаПротоколаОбменаНачалоВыбора - - - Opening - ИмяФайлаПротоколаОбменаОткрытие - - true - true - true - true - true - true - true - true - Normal - - - - ВыполнятьОбменВРежимеОтладки - 45 - true - true - - true - - - Запись.ВыполнятьОбменВРежимеОтладки - - Right - - ВыполнятьОбменВРежимеОтладкиРасширеннаяПодсказка - 176 - Label - true - true - - Left - - - - ВыполнятьОбменВРежимеОтладкиКонтекстноеМеню - 46 - true - - CheckBoxField - Enter - true - Left - true - - КоличествоЭлементовВТранзакцииЗагрузкиДанных 70 @@ -1856,7 +1957,7 @@ КоличествоЭлементовВТранзакцииЗагрузкиДанныхРасширеннаяПодсказка - 178 + 191 Label true true @@ -1897,7 +1998,7 @@ КоличествоЭлементовВТранзакцииВыгрузкиДанныхРасширеннаяПодсказка - 180 + 193 Label true true @@ -1925,6 +2026,91 @@ Normal + + ВыполнятьОбменВРежимеОтладки + 45 + true + true + + true + + + Запись.ВыполнятьОбменВРежимеОтладки + + Right + + ВыполнятьОбменВРежимеОтладкиРасширеннаяПодсказка + 195 + Label + true + true + + Left + + + + ВыполнятьОбменВРежимеОтладкиКонтекстноеМеню + 46 + true + + CheckBoxField + Enter + true + Left + true + + + + ИмяФайлаПротоколаОбмена + 32 + true + true + + true + + + Запись.ИмяФайлаПротоколаОбмена + + + ИмяФайлаПротоколаОбменаРасширеннаяПодсказка + 197 + Label + true + true + + Left + + + + ИмяФайлаПротоколаОбменаКонтекстноеМеню + 33 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИмяФайлаПротоколаОбменаНачалоВыбора + + + Opening + ИмяФайлаПротоколаОбменаОткрытие + + true + true + true + true + true + true + true + true + Normal + + true true @@ -1932,15 +2118,15 @@ <key>ru</key> - <value>Общие настройки</value> + <value>Дополнительные настройки</value> ru - Общие настройки + Дополнительные настройки - ОбщиеНастройкиРасширеннаяПодсказка - 171 + ДополнительныеНастройкиРасширеннаяПодсказка + 190 Label true true @@ -1952,8 +2138,10 @@ Vertical Auto + StrongSeparation true true + auto Auto Auto diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl index a950ca159..915d1ec70 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl @@ -1,4 +1,3 @@ - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -10,14 +9,6 @@ Возврат; КонецЕсли; - Если Не Параметры.ЗначенияЗаполнения.Свойство("Узел") Тогда - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Сначала укажите значения параметров. Форма не может быть открыта без их заполнения.'"),,,, Отказ); - Возврат; - - КонецЕсли; - УстановитьВидимостьЭлементовФормы(); Если ЗначениеЗаполнено(Запись.ВидТранспортаСообщенийОбменаПоУмолчанию) Тогда @@ -51,7 +42,66 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура FILEКаталогОбменаИнформациейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Запись, "FILEКаталогОбменаИнформацией", СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура FILEКаталогОбменаИнформациейОткрытие(Элемент, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Запись, "FILEКаталогОбменаИнформацией", СтандартнаяОбработка) + +КонецПроцедуры + +&НаКлиенте +Процедура COMКаталогИнформационнойБазыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Запись, "COMКаталогИнформационнойБазы", СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура COMКаталогИнформационнойБазыОткрытие(Элемент, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Запись, "COMКаталогИнформационнойБазы", СтандартнаяОбработка) + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаПротоколаОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикВыбораФайла(Запись, "ИмяФайлаПротоколаОбмена", СтандартнаяОбработка, НСтр("ru = 'Текстовый документ(*.txt)|*.txt'"), Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаПротоколаОбменаОткрытие(Элемент, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Запись, "ИмяФайлаПротоколаОбмена", СтандартнаяОбработка) + +КонецПроцедуры + +&НаКлиенте +Процедура COMВариантРаботыИнформационнойБазыПриИзменении(Элемент) + + ВариантРаботыИнформационнойБазыПриИзменении(); + +КонецПроцедуры + +&НаКлиенте +Процедура COMАутентификацияОперационнойСистемыПриИзменении(Элемент) + + АутентификацияОперационнойСистемыПриИзменении(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ИсправитьОшибкиУстановкиВнешнегоСоединения(Команда) @@ -127,64 +177,8 @@ КонецПроцедуры -&НаКлиенте -Процедура FILEКаталогОбменаИнформациейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Запись, "FILEКаталогОбменаИнформацией", СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура FILEКаталогОбменаИнформациейОткрытие(Элемент, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Запись, "FILEКаталогОбменаИнформацией", СтандартнаяОбработка) - -КонецПроцедуры - -&НаКлиенте -Процедура COMКаталогИнформационнойБазыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Запись, "COMКаталогИнформационнойБазы", СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура COMКаталогИнформационнойБазыОткрытие(Элемент, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Запись, "COMКаталогИнформационнойБазы", СтандартнаяОбработка) - -КонецПроцедуры - -&НаКлиенте -Процедура ИмяФайлаПротоколаОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикВыбораФайла(Запись, "ИмяФайлаПротоколаОбмена", СтандартнаяОбработка, НСтр("ru = 'Текстовый документ(*.txt)|*.txt'"), Ложь); - -КонецПроцедуры - -&НаКлиенте -Процедура ИмяФайлаПротоколаОбменаОткрытие(Элемент, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Запись, "ИмяФайлаПротоколаОбмена", СтандартнаяОбработка) - -КонецПроцедуры - -&НаКлиенте -Процедура COMВариантРаботыИнформационнойБазыПриИзменении(Элемент) - - ВариантРаботыИнформационнойБазыПриИзменении(); - -КонецПроцедуры - -&НаКлиенте -Процедура COMАутентификацияОперационнойСистемыПриИзменении(Элемент) - - АутентификацияОперационнойСистемыПриИзменении(); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура ПроверитьПодключение(ВидТранспортаСтрокой) @@ -238,7 +232,7 @@ ЗаполнитьЗначенияСвойств(ПараметрыПодключения, Запись); - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПроксиПоПараметрамПодключения(ПараметрыПодключения); + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения); Если WSПрокси = Неопределено Тогда Отказ = Истина; diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl index 77388173e..e26c193fb 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Процедура добавляет запись в регистр по переданным значениям структуры Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт @@ -13,7 +15,7 @@ КонецПроцедуры -////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// // Функции получения значений настроек для узла плана обмена // Получает значения настроек транспорта определенного вида. @@ -154,6 +156,11 @@ ДобавитьЭлементПредставленияНастройки(Результат, "EMAILМаксимальныйДопустимыйРазмерСообщения"); ДобавитьЭлементПредставленияНастройки(Результат, "EMAILСжиматьФайлИсходящегоСообщения"); + ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + + ДобавитьЭлементПредставленияНастройки(Результат, "WSURLВебСервиса"); + ДобавитьЭлементПредставленияНастройки(Результат, "WSИмяПользователя"); + КонецЕсли; Возврат Результат; @@ -232,8 +239,48 @@ Возврат Результат; КонецФункции -////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции +Функция НастроенныеВидыТранспорта(УзелИнформационнойБазы) Экспорт + + Результат = Новый Массив; + + НастройкиТранспорта = ПолучитьНастройкиТранспортаДляУзла(УзелИнформационнойБазы); + + Если ЗначениеЗаполнено(НастройкиТранспорта.COMКаталогИнформационнойБазы) + ИЛИ ЗначениеЗаполнено(НастройкиТранспорта.COMИмяИнформационнойБазыНаСервере1СПредприятия) Тогда + + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.COM); + + КонецЕсли; + + Если ЗначениеЗаполнено(НастройкиТранспорта.EMAILУчетнаяЗапись) Тогда + + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); + + КонецЕсли; + + Если ЗначениеЗаполнено(НастройкиТранспорта.FILEКаталогОбменаИнформацией) Тогда + + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); + + КонецЕсли; + + Если ЗначениеЗаполнено(НастройкиТранспорта.FTPСоединениеПуть) Тогда + + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); + + КонецЕсли; + + Если ЗначениеЗаполнено(НастройкиТранспорта.WSURLВебСервиса) Тогда + + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WS); + + КонецЕсли; + + Возврат Результат; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции Функция ПолучитьДанныеРегистраПоСтруктуре(Узел, СтруктураНастроек) diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl index 9030589eb..ea7579553 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ПриЗаписи(Отказ, Замещение) diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo index ed3afa847..48675da21 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo @@ -66,6 +66,21 @@ ru Используется для хранения параметров транспортов сообщений обмена (сетевой каталог, обмен через FTP-ресурс, обмен по почте). + + CombiВидТранспортаСообщенийОбмена + + ru + Вид транспорта сообщений обмена + + + EnumRef.ВидыТранспортаСообщенийОбмена + + + + Use + Use + + COMАутентификацияОперационнойСистемы @@ -459,6 +474,73 @@ Use + + WSURLВебСервиса + + ru + Адрес + + + String + + + + + Use + Use + + + + WSИмяПользователя + + ru + Пользователь + + + String + + 50 + + + + + Use + Use + + + + WSИспользоватьПередачуБольшогоОбъемаДанных + + ru + Использовать передачу большого объема данных + + + Boolean + + + + Use + Use + + + + WSПароль + + ru + Пароль + + + String + + 50 + + + + + Use + Use + + ВидТранспортаСообщенийОбменаПоУмолчанию @@ -586,107 +668,6 @@ Use - - CombiВидТранспортаСообщенийОбмена - - ru - Вид транспорта сообщений обмена - - - EnumRef.ВидыТранспортаСообщенийОбмена - - - - Use - Use - - - - WSURLВебСервиса - - ru - Строка подключения к базе корреспонденту - - - String - - - - - Use - Use - - - - WSURLПространстваИменСервиса - - ru - URL Пространства имен сервиса - - - String - - - - - Use - Use - - - - WSИмяПользователя - - ru - Имя пользователя - - - String - - 50 - - - - - Use - Use - - - - WSИмяСервиса - - ru - Имя сервиса - - - String - - 150 - - - - - Use - Use - - - - WSПароль - - ru - Пароль - - - String - - 50 - - - - - Use - Use - - Узел diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl index 0a33b16a9..76bfd41fc 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl @@ -1,59 +1,6 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ - -&НаКлиенте -Процедура УправлениеДоступностью() - - Если Запись.ФорматПодписиДляНовыхСообщений = ПредопределенноеЗначение( - "Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") Тогда - - Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = - Элементы.СтраницаНовоеСообщениеФорматированныйТекст; - Элементы.НовоеСообщениеФорматированныйДокумент.Доступность = - Запись.ВключатьПодписьДляНовыхСообщений; - - Иначе - - Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = - Элементы.СтраницаНовоеСообщениеПростойТекст; - Элементы.ПодписьДляНовыхСообщенийПростойТекст.Доступность = - Запись.ВключатьПодписьДляНовыхСообщений; - - КонецЕсли; - - Если Запись.ФорматПодписиПриОтветеПересылке = ПредопределенноеЗначение( - "Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") Тогда - - Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = - Элементы.СтраницаПриОтветеПересылкеФорматированныйДокумент; - Элементы.ПриОтветеПересылкеФорматированныйДокумент.Доступность = Запись.ВключатьПодписьПриОтветеПересылке; - - Иначе - - Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = Элементы.СтраницаПриОтветеПересылкеПростойТекст; - Элементы.ПодписьПриОтветеПересылкеПростойТекст.Доступность = Запись.ВключатьПодписьПриОтветеПересылке; - - КонецЕсли; - - Если Запись.ПерсональнаяУчетнаяЗапись Тогда - - Элементы.СтраницыОтветственный.ТекущаяСтраница = Элементы.СтраницаПерсональная; - - Иначе - - Элементы.СтраницыОтветственный.ТекущаяСтраница = Элементы.СтраницаКорпоративная; - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// КОМАНДЫ ФОРМЫ - - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -94,7 +41,7 @@ Если ТекущийОбъект.ФорматПодписиДляНовыхСообщений = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда - ТекущийОбъект.ПодписьДляНовыхСообщенийПростойТекст = + ТекущийОбъект.ПодписьДляНовыхСообщенийПростойТекст = НовоеСообщениеФорматированныйДокумент.ПолучитьТекст(); ТекущийОбъект.ПодписьДляНовыхСообщенийФорматированныйДокумент = @@ -174,9 +121,8 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ВключатьПодписьДляНовыйСообщенийПриИзменении(Элемент) @@ -300,3 +246,53 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура УправлениеДоступностью() + + Если Запись.ФорматПодписиДляНовыхСообщений = ПредопределенноеЗначение( + "Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") Тогда + + Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = + Элементы.СтраницаНовоеСообщениеФорматированныйТекст; + Элементы.НовоеСообщениеФорматированныйДокумент.Доступность = + Запись.ВключатьПодписьДляНовыхСообщений; + + Иначе + + Элементы.СтраницыПодписьДляНовыхСообщений.ТекущаяСтраница = + Элементы.СтраницаНовоеСообщениеПростойТекст; + Элементы.ПодписьДляНовыхСообщенийПростойТекст.Доступность = + Запись.ВключатьПодписьДляНовыхСообщений; + + КонецЕсли; + + Если Запись.ФорматПодписиПриОтветеПересылке = ПредопределенноеЗначение( + "Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") Тогда + + Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = + Элементы.СтраницаПриОтветеПересылкеФорматированныйДокумент; + Элементы.ПриОтветеПересылкеФорматированныйДокумент.Доступность = Запись.ВключатьПодписьПриОтветеПересылке; + + Иначе + + Элементы.СтраницыПодписьПриОтветеПересылке.ТекущаяСтраница = Элементы.СтраницаПриОтветеПересылкеПростойТекст; + Элементы.ПодписьПриОтветеПересылкеПростойТекст.Доступность = Запись.ВключатьПодписьПриОтветеПересылке; + + КонецЕсли; + + Если Запись.ПерсональнаяУчетнаяЗапись Тогда + + Элементы.СтраницыОтветственный.ТекущаяСтраница = Элементы.СтраницаПерсональная; + + Иначе + + Элементы.СтраницыОтветственный.ТекущаяСтраница = Элементы.СтраницаКорпоративная; + + КонецЕсли; + +КонецПроцедуры + + diff --git a/SSL/src/InformationRegisters/НеразделенныеПользователи/ManagerModule.bsl b/SSL/src/InformationRegisters/НеразделенныеПользователи/ManagerModule.bsl new file mode 100644 index 000000000..3cd6dc81b --- /dev/null +++ b/SSL/src/InformationRegisters/НеразделенныеПользователи/ManagerModule.bsl @@ -0,0 +1,38 @@ +// Возвращает список неразделенных администраторов +// +// Возвращаемое значение: +// СписокЗначений – список уникальных идентификаторов с представлениями (имена пользователей) +// +Функция СписокАдминистраторов() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НеразделенныеПользователи.ИдентификаторПользователяИБ + |ИЗ + | РегистрСведений.НеразделенныеПользователи КАК НеразделенныеПользователи"; + Выборка = Запрос.Выполнить().Выбрать(); + СписокАдминистраторов = Новый СписокЗначений; + Пока Выборка.Следующий() Цикл + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + Выборка.ИдентификаторПользователяИБ); + Если ПользовательИБ = Неопределено Тогда + Продолжить; + КонецЕсли; + ЕстьРоли = Ложь; + Для Каждого РольПользователя Из ПользовательИБ.Роли Цикл + ЕстьРоли = Истина; + Прервать; + КонецЦикла; + Если Не ЕстьРоли Тогда + Продолжить; + КонецЕсли; + Если Не Пользователи.ЭтоПолноправныйПользователь(ПользовательИБ, Истина) Тогда + Продолжить; + КонецЕсли; + СписокАдминистраторов.Добавить(Выборка.ИдентификаторПользователяИБ, ПользовательИБ.Имя); + КонецЦикла; + СписокАдминистраторов.СортироватьПоПредставлению(); + Возврат СписокАдминистраторов; + +КонецФункции \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НеразделенныеПользователи/НеразделенныеПользователи.mdo b/SSL/src/InformationRegisters/НеразделенныеПользователи/НеразделенныеПользователи.mdo new file mode 100644 index 000000000..4edfdf315 --- /dev/null +++ b/SSL/src/InformationRegisters/НеразделенныеПользователи/НеразделенныеПользователи.mdo @@ -0,0 +1,68 @@ + + + + + + + + + + + + НеразделенныеПользователи + + ru + Неразделенные пользователи + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ИдентификаторПользователяИБ + + ru + Идентификатор пользователя ИБ + + + UUID + + + + Use + + true + + diff --git a/SSL/src/InformationRegisters/ОбластиДанных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ОбластиДанных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..91027f589 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбластиДанных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,15 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + diff --git a/SSL/src/InformationRegisters/ОбластиДанных/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ОбластиДанных/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..3554839e3 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбластиДанных/Forms/ФормаСписка/Form.form @@ -0,0 +1,410 @@ + + + + Список + 1 + true + true + + true + + + Список + + true + None + + ОбластьДанных + 4 + true + true + + true + + + Список.ОбластьДанных + + true + + ОбластьДанныхРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ОбластьДанныхКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Представление + 6 + true + true + + true + + + Список.Представление + + true + + ПредставлениеРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ПредставлениеКонтекстноеМеню + 7 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Статус + 8 + true + true + + true + + + Список.Статус + + true + + СтатусРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + СтатусКонтекстноеМеню + 9 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Повтор + 10 + true + true + + true + + + Список.Повтор + + true + + ПовторРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ПовторКонтекстноеМеню + 11 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ЧасовойПояс + 12 + true + true + + true + + + Список.ЧасовойПояс + + true + + ЧасовойПоясРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ЧасовойПоясКонтекстноеМеню + 13 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ИдентификаторВыгрузки + 14 + true + true + + true + + + Список.ИдентификаторВыгрузки + + true + + ИдентификаторВыгрузкиРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ИдентификаторВыгрузкиКонтекстноеМеню + 15 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска + 17 + + СписокСтрокаПоискаРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 18 + true + + Список + + true + + + + СписокСостояниеПросмотра + 20 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 21 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 23 + + СписокУправлениеПоискомРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 24 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
    + + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
    true
    + + InformationRegister.ОбластиДанных + true + true + true + true + +
    + + + + + +
    diff --git a/SSL/src/InformationRegisters/ОбластиДанных/ОбластиДанных.mdo b/SSL/src/InformationRegisters/ОбластиДанных/ОбластиДанных.mdo new file mode 100644 index 000000000..101716eeb --- /dev/null +++ b/SSL/src/InformationRegisters/ОбластиДанных/ОбластиДанных.mdo @@ -0,0 +1,180 @@ + + + + + + + + + + + + ОбластиДанных + + ru + Области данных + + true + InDialog + InformationRegister.ОбластиДанных.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Представление + + ru + Представление + + + String + + + + + Use + Use + + + + Статус + + ru + Статус + + + EnumRef.СтатусыОбластейДанных + + + + Use + Use + + + + Повтор + + ru + Повтор + + + Number + + 2 + true + + + + + Use + Use + + + + ЧасовойПояс + + ru + Часовой пояс + + + String + + 100 + + + + + Use + Use + + + + ИдентификаторВыгрузки + + ru + Идентификатор выгрузки + + + UUID + + + + Use + + + + ОшибкаОбработки + + ru + Ошибка обработки + + + Boolean + + + + Use + Use + + + + ОбластьДанных + + ru + Область данных + + + Number + + 7 + true + + + + + Use + Use + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/ОбластиДляОбновленияПоставляемыхДанных/ОбластиДляОбновленияПоставляемыхДанных.mdo b/SSL/src/InformationRegisters/ОбластиДляОбновленияПоставляемыхДанных/ОбластиДляОбновленияПоставляемыхДанных.mdo new file mode 100644 index 000000000..9d8d6257f --- /dev/null +++ b/SSL/src/InformationRegisters/ОбластиДляОбновленияПоставляемыхДанных/ОбластиДляОбновленияПоставляемыхДанных.mdo @@ -0,0 +1,93 @@ + + + + + + + + + + + + ОбластиДляОбновленияПоставляемыхДанных + + ru + Области для обновления поставляемых данных + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ОбластьДанных + + ru + Область данных + + + Number + + 7 + true + + + + + Use + Use + + true + + + НомерСообщения + + ru + Номер сообщения + + + Number + + 3 + true + + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl index aeddf91c4..dbba83c82 100644 --- a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Процедура добавляет запись в регистр по переданным значениям структуры Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт @@ -13,8 +15,6 @@ КонецПроцедуры -// - Процедура УстановитьПризнакНачальнойВыгрузкиДанных(УзелИнформационнойБазы) Экспорт СтруктураЗаписи = Новый Структура; @@ -57,8 +57,6 @@ Возврат Не Запрос.Выполнить().Пустой(); КонецФункции -// - Процедура ЗафиксироватьВыполнениеКорректировкиИнформацииСопоставленияБезусловно(УзелИнформационнойБазы) Экспорт СтруктураЗаписи = Новый Структура; @@ -157,7 +155,3 @@ Возврат Результат; КонецФункции - - - - diff --git a/SSL/src/InformationRegisters/ОчередьЗаданий/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ОчередьЗаданий/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..91027f589 --- /dev/null +++ b/SSL/src/InformationRegisters/ОчередьЗаданий/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,15 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + diff --git a/SSL/src/InformationRegisters/ОчередьЗаданий/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ОчередьЗаданий/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..df53e4f27 --- /dev/null +++ b/SSL/src/InformationRegisters/ОчередьЗаданий/Forms/ФормаСписка/Form.form @@ -0,0 +1,625 @@ + + + + Список + 1 + true + true + + true + + + Список + + true + None + + ОбластьДанных + 4 + true + true + + true + + + Список.ОбластьДанных + + true + + ОбластьДанныхРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + ОбластьДанныхКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Задание + 6 + true + true + + true + + + Список.Задание + + true + + ЗаданиеРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ЗаданиеКонтекстноеМеню + 7 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Использование + 8 + true + true + + true + + + Список.Использование + + true + + ИспользованиеРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ИспользованиеКонтекстноеМеню + 9 + true + + CheckBoxField + Enter + true + Left + true + + + + ЗапланированныйМоментЗапуска + 10 + true + true + + true + + + Список.ЗапланированныйМоментЗапуска + + true + + ЗапланированныйМоментЗапускаРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ЗапланированныйМоментЗапускаКонтекстноеМеню + 11 + true + + LabelField + Enter + true + Left + true + + true + true + + + + СостояниеЗадания + 12 + true + true + + true + + + Список.СостояниеЗадания + + true + + СостояниеЗаданияРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + СостояниеЗаданияКонтекстноеМеню + 13 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ИсполняющееФоновоеЗадание + 14 + true + true + + true + + + Список.ИсполняющееФоновоеЗадание + + true + + ИсполняющееФоновоеЗаданиеРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ИсполняющееФоновоеЗаданиеКонтекстноеМеню + 15 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ЭксклюзивноеВыполнение + 16 + true + true + + true + + + Список.ЭксклюзивноеВыполнение + + true + + ЭксклюзивноеВыполнениеРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ЭксклюзивноеВыполнениеКонтекстноеМеню + 17 + true + + CheckBoxField + Enter + true + Left + true + + + + НомерПопытки + 18 + true + true + + true + + + Список.НомерПопытки + + true + + НомерПопыткиРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + НомерПопыткиКонтекстноеМеню + 19 + true + + LabelField + Enter + true + Left + true + + true + true + + + + РегламентноеЗадание + 20 + true + true + + true + + + Список.РегламентноеЗадание + + true + + РегламентноеЗаданиеРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + РегламентноеЗаданиеКонтекстноеМеню + 21 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ИмяМетода + 22 + true + true + + true + + + Список.ИмяМетода + + true + + ИмяМетодаРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + ИмяМетодаКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ДатаНачалаПоследнегоЗапуска + 24 + true + true + + true + + + Список.ДатаНачалаПоследнегоЗапуска + + true + + ДатаНачалаПоследнегоЗапускаРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + ДатаНачалаПоследнегоЗапускаКонтекстноеМеню + 25 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Ключ + 26 + true + true + + true + + + Список.Ключ + + + КлючРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + КлючКонтекстноеМеню + 27 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска + 29 + + СписокСтрокаПоискаРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 30 + true + + Список + + true + + + + СписокСостояниеПросмотра + 32 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 33 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 35 + + СписокУправлениеПоискомРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 36 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
    + + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
    true
    + + InformationRegister.ОчередьЗаданий + true + true + true + true + +
    + + + + + +
    diff --git a/SSL/src/InformationRegisters/ОчередьЗаданий/ОчередьЗаданий.mdo b/SSL/src/InformationRegisters/ОчередьЗаданий/ОчередьЗаданий.mdo new file mode 100644 index 000000000..a741bde54 --- /dev/null +++ b/SSL/src/InformationRegisters/ОчередьЗаданий/ОчередьЗаданий.mdo @@ -0,0 +1,278 @@ + + + + + + + + + + + + ОчередьЗаданий + + ru + Очередь заданий + + true + InDialog + InformationRegister.ОчередьЗаданий.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Использование + + ru + Использование + + + Boolean + + + + Use + Use + + + + ЗапланированныйМоментЗапуска + + ru + Запланированный момент запуска + + + Date + + + + + Use + Use + + + + СостояниеЗадания + + ru + Состояние задания + + + EnumRef.СостоянияЗаданий + + + + Use + Use + + + + ИсполняющееФоновоеЗадание + + ru + Исполняющее фоновое задание + + + UUID + + + + Use + + + + ЭксклюзивноеВыполнение + + ru + Эксклюзивное выполнение + + + Boolean + + + + Use + Use + + + + НомерПопытки + + ru + Номер попытки + + + Number + + 3 + true + + + + + Use + Use + + + + РегламентноеЗадание + + ru + Регламентное задание + + + UUID + + + + Use + + + + ИмяМетода + + ru + Имя метода + + + String + + 255 + + + + + Use + Use + + + + Параметры + + ru + Параметры + + + ValueStorage + + + + Use + Use + + + + ДатаНачалаПоследнегоЗапуска + + ru + Дата начала последнего запуска + + + Date + + + + + Use + Use + + + + Ключ + + ru + Ключ + + + String + + 128 + + + + + Use + Use + + + + ОбластьДанных + + ru + Область данных + + + Number + + 7 + true + + + + + Index + Use + Use + + true + + + Задание + + ru + Задание + + + String + + 36 + + + + + true + Use + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..da2c79d72 --- /dev/null +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,20 @@ + + + + + Получатель + Equal + Inaccessible + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Form.form b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Form.form new file mode 100644 index 000000000..a69611f38 --- /dev/null +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Form.form @@ -0,0 +1,232 @@ + + + + Список + 1 + true + true + + true + + + Список + + None + + КаналСообщений + 4 + true + true + + true + + + Список.КаналСообщений + + + КаналСообщенийРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + КаналСообщенийКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 3 + Left + true + + + СписокСтрокаПоиска + 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 + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
    + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + + <key>ru</key> + <value>Список</value> + + 1 + + DynamicList + + + true + + + true + +
    true
    + + InformationRegister.ПодпискиПолучателей + true + true + true + true + +
    + + + + + +
    diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Module.bsl b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Module.bsl new file mode 100644 index 000000000..853dc5869 --- /dev/null +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/НастройкаПодписокЭтойКонечнойТочки/Module.bsl @@ -0,0 +1,9 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Параметры.Отбор.Вставить("Получатель", ОбменСообщениямиВнутренний.ЭтотУзел()); + +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..13e64d054 --- /dev/null +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,126 @@ + + + + КаналСообщений + 1 + true + true + + true + + + Запись.КаналСообщений + + + КаналСообщенийРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + + КаналСообщенийКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Получатель + 3 + true + true + + true + + + Запись.Получатель + + + ПолучательРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ПолучательКонтекстноеМеню + 4 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Запись + 1 + + InformationRegisterRecordManager.ПодпискиПолучателей + + + true + + + true + +
    true
    + true +
    + + + + + +
    diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..732211e72 --- /dev/null +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,13 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если ЗначениеЗаполнено(Запись.Получатель) Тогда + + Элементы.Получатель.Видимость = Ложь; + + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/ManagerModule.bsl b/SSL/src/InformationRegisters/ПодпискиПолучателей/ManagerModule.bsl new file mode 100644 index 000000000..0a1e1348b --- /dev/null +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/ManagerModule.bsl @@ -0,0 +1,29 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Определяет конечные точки (подписчиков) для широковещательного канала +// типа "Публикация/Подписка". +// +// Параметры: +// КаналСообщений – Строка. Идентификатор широковещательного канала сообщений. +// +// Возвращаемое значение: +// Тип: Массив. Массив элементов конечных точек. +// Массив содержит элементы типа ПланОбменаСсылка.ОбменСообщениями. +// +Функция ПодписчикиКаналаСообщений(Знач КаналСообщений) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | ПодпискиПолучателей.Получатель КАК Получатель + |ИЗ + | РегистрСведений.ПодпискиПолучателей КАК ПодпискиПолучателей + |ГДЕ + | ПодпискиПолучателей.КаналСообщений = &КаналСообщений"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("КаналСообщений", КаналСообщений); + Запрос.Текст = ТекстЗапроса; + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Получатель"); +КонецФункции diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/RecordSetModule.bsl b/SSL/src/InformationRegisters/ПодпискиПолучателей/RecordSetModule.bsl new file mode 100644 index 000000000..bed1ade69 --- /dev/null +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/RecordSetModule.bsl @@ -0,0 +1,27 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +Процедура ПередЗаписью(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Получатель = Отбор["Получатель"].Значение; + + Если Получатель <> Неопределено + И Получатель = ОбменСообщениямиВнутренний.ЭтотУзел() Тогда + + Получатели = ОбменСообщениямиВнутренний.ВсеПолучатели(); + + ОбменДанными.Получатели.Очистить(); + + Для Каждого Узел Из Получатели Цикл + + ОбменДанными.Получатели.Добавить(Узел); + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/ПодпискиПолучателей.mdo b/SSL/src/InformationRegisters/ПодпискиПолучателей/ПодпискиПолучателей.mdo new file mode 100644 index 000000000..23f898ef7 --- /dev/null +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/ПодпискиПолучателей.mdo @@ -0,0 +1,107 @@ + + + + + + + + + + + + ПодпискиПолучателей + + ru + Подписки получателей + + InDialog + InformationRegister.ПодпискиПолучателей.Form.ФормаЗаписи + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + КаналСообщений + + ru + Канал сообщений + + + String + + 150 + + + + + Use + Use + + + + Получатель + + ru + Получатель + + + ExchangePlanRef.ОбменСообщениями + + + + true + Use + true + + true + true + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + + НастройкаПодписокЭтойКонечнойТочки + + ru + Настройка подписок этой конечной точки + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl index 883f40282..c8457ece2 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -30,6 +32,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ОК(Команда) @@ -44,6 +49,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервереБезКонтекста Процедура СохранитьНастройкиРежимаОткрытияМакета(СпрашиватьРежимОткрытияМакета, РежимОткрытияМакетаПросмотр) diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Module.bsl index eaaedacf7..e6753256a 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ДиалогПовтораПечати/Module.bsl @@ -1,3 +1,16 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + КаталогДляСохраненияДанныхПечати = УправлениеПечатью.ПолучитьЛокальныйКаталогФайловПечати(); + Элементы.Сообщение.Заголовок = Элементы.Сообщение.Заголовок + Символы.ПС + Параметры.СообщениеОбОшибке; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ИзменитьРабочийКаталогПечати(Команда) @@ -14,11 +27,3 @@ Процедура ПовторитьПечать(Команда) Закрыть(КаталогДляСохраненияДанныхПечати); КонецПроцедуры - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - КаталогДляСохраненияДанныхПечати = УправлениеПечатью.ПолучитьЛокальныйКаталогФайловПечати(); - Элементы.Сообщение.Заголовок = Элементы.Сообщение.Заголовок + Символы.ПС + Параметры.СообщениеОбОшибке; - -КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl index a3e9f9604..762e171a4 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl @@ -1,3 +1,308 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Перем Фильтр; + + Если Параметры.Свойство("Фильтр") Тогда + Фильтр = Параметры.Фильтр.Метаданные().ПолноеИмя(); + КонецЕсли; + + ЗаполнитьСписокМетаданных(Фильтр); + + ПутьККаталогуФайловПечати = УправлениеПечатью.ПолучитьЛокальныйКаталогФайловПечати(); + + СпрашиватьРежимОткрытияМакета = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкаОткрытияМакетов", + "СпрашиватьРежимОткрытияМакета", Истина + ); + + РежимОткрытияМакетаПросмотр = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкаОткрытияМакетов", + "РежимОткрытияМакетаПросмотр", Ложь + ); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + ЕстьРедактируемые = Ложь; + + Для Каждого ГруппаМакетов Из СписокМакетов.ПолучитьЭлементы() Цикл + ЭлементыГруппы = ГруппаМакетов.ПолучитьЭлементы(); + Для Каждого ЭлементОМ Из ЭлементыГруппы Цикл + Если ЭлементОМ.Редактируется Тогда + ЕстьРедактируемые = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если ЕстьРедактируемые Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы( + Отказ, + ЕстьРедактируемые, , + НСтр("ru = 'В списке остались макеты отмеченные как редактируемые. Закрыть форму?'")); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокМакетов + +&НаКлиенте +Процедура СписокМакетовПриАктивизацииСтроки(Элемент) + + ОбновитьЭлементыУправления(); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокМакетовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + Если Элементы.СписокМакетов.ДанныеСтроки(ВыбраннаяСтрока).ЭтоКлассификатор Тогда + Возврат; + КонецЕсли; + + Если СпрашиватьРежимОткрытияМакета Тогда + + Результат = ОткрытьФормуМодально("РегистрСведений.ПользовательскиеМакетыПечати.Форма.ВыбораРежимаОткрытияМакета"); + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + РежимОткрытияМакетаПросмотр = Результат.РежимОткрытияПросмотр; + СпрашиватьРежимОткрытияМакета = НЕ Результат.БольшеНеСпрашивать; + Если Результат.БольшеНеСпрашивать Тогда + СохранитьНастройкиРежимаОткрытияМакета(СпрашиватьРежимОткрытияМакета, РежимОткрытияМакетаПросмотр); + КонецЕсли; + Иначе + Возврат; + КонецЕсли; + + КонецЕсли; + + ОткрытьМакетыПечатнойФормы(НЕ РежимОткрытияМакетаПросмотр); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ОткрытьДляПросмотра(Команда) + + ОткрытьМакетыПечатнойФормы(Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура Редактировать(Команда) + + ОткрытьМакетыПечатнойФормы(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершитьРедактирование(Команда) + + СохраняемыеМакеты = Новый Массив; + +#Если ВебКлиент Тогда + ПомещаемыеФайлы = Новый Массив; + ПомещенныеФайлы = Новый Массив; +#КонецЕсли + + ВыделенныеСтроки = Элементы.СписокМакетов.ВыделенныеСтроки; + + Для Каждого Строка Из ВыделенныеСтроки Цикл + ЭлементДерева = Элементы.СписокМакетов.ДанныеСтроки(Строка); + Если ЭлементДерева.ЭтоКлассификатор Тогда + Продолжить; + КонецЕсли; + + Файл = Новый Файл(ЭлементДерева.ПутьКФайлуМакета); + + Если Файл.Существует() Тогда +#Если ВебКлиент Тогда + ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(Файл.ПолноеИмя, "")); + СохраняемыеМакеты.Добавить(Новый Структура("ИмяОМ, ИмяМакета", + ЭлементДерева.ПолучитьРодителя().ПолноеИмяОМ, + ЭлементДерева.ИмяМакета)); +#Иначе + Попытка + ДанныеМакета = Новый ДвоичныеДанные(ЭлементДерева.ПутьКФайлуМакета) + Исключение + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + СообщениеОбОшибке = СообщениеОбОшибке + Символы.ПС + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Файл %1 открыт другим приложением. Действие не выполнено.'"), + ЭлементДерева.Представление); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); + Продолжить; + КонецПопытки; + + СохраняемыеМакеты.Добавить(Новый Структура("ИмяОМ, ИмяМакета, ДанныеМакета", + ЭлементДерева.ПолучитьРодителя().ПолноеИмяОМ, + ЭлементДерева.ИмяМакета, + ДанныеМакета)); + + УдалитьФайлы(ЭлементДерева.ПутьКФайлуМакета); + + ЭлементДерева.Использование = Истина; + ЭлементДерева.ИспользованиеСтрока = ПолучитьТекстПоИспользованию(ЭлементДерева.Использование); + ЭлементДерева.ЕстьПользовательскийМакет = Истина; + ЭлементДерева.Картинка = ПолучитьКодКартинки(ЭлементДерева.ТипМакета); +#КонецЕсли + КонецЕсли; +#Если НЕ ВебКлиент Тогда + ЭлементДерева.Редактируется = Ложь; + ЭлементДерева.ПутьКФайлуМакета = ""; +#КонецЕсли + КонецЦикла; + +#Если ВебКлиент Тогда + Попытка + Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь) Тогда + Предупреждение(НСтр("ru = 'Не удалось поместить файл макета в информационную базу.'")); + Возврат; + КонецЕсли; + Исключение + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при помещении файла макета в информационную базу: %1. Убедитесь, что приложение работы с файлом закрыто.'"), СообщениеОбОшибке)); + Возврат; + КонецПопытки; +#КонецЕсли + +#Если ВебКлиент Тогда + СохранитьМакетыВИнформационнойБазе(СохраняемыеМакеты, ПомещенныеФайлы); + + ВыделенныеСтроки = Элементы.СписокМакетов.ВыделенныеСтроки; + + Для Каждого Строка Из ВыделенныеСтроки Цикл + ЭлементДерева = Элементы.СписокМакетов.ДанныеСтроки(Строка); + Если ЭлементДерева.ЭтоКлассификатор Тогда + Продолжить; + КонецЕсли; + + Файл = Новый Файл(ЭлементДерева.ПутьКФайлуМакета); + + Если Файл.Существует() Тогда + УдалитьФайлы(ЭлементДерева.ПутьКФайлуМакета); + КонецЕсли; + + ЭлементДерева.Использование = Истина; + ЭлементДерева.ИспользованиеСтрока = ПолучитьТекстПоИспользованию(ЭлементДерева.Использование); + ЭлементДерева.ЕстьПользовательскийМакет = Истина; + ЭлементДерева.Картинка = ПолучитьКодКартинки(ЭлементДерева.ТипМакета); + ЭлементДерева.Редактируется = Ложь; + ЭлементДерева.ПутьКФайлуМакета = ""; + КонецЦикла; +#Иначе + СохранитьМакетыВИнформационнойБазе(СохраняемыеМакеты); +#КонецЕсли + + КоличествоМакетов = ВыделенныеСтроки.Количество(); + Если КоличествоМакетов = 1 Тогда + ПоказатьОповещениеПользователя(НСтр("ru = 'Макет изменен'"),, + Элементы.СписокМакетов.ДанныеСтроки(ВыделенныеСтроки[0]).Представление); + ИначеЕсли КоличествоМакетов > 1 Тогда + ПоказатьОповещениеПользователя(НСтр("ru = 'Макеты изменены'"),, + НСтр("ru = 'Количество макетов:'") + " " + КоличествоМакетов); + КонецЕсли; + + ОбновитьЭлементыУправления(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьРедактирование(Команда) + + ВыделенныеСтроки = Элементы.СписокМакетов.ВыделенныеСтроки; + + Для Каждого Строка Из ВыделенныеСтроки Цикл + ЭлементДерева = Элементы.СписокМакетов.ДанныеСтроки(Строка); + Если ЭлементДерева.ЭтоКлассификатор Тогда + Продолжить; + КонецЕсли; + УдалитьФайлы(ЭлементДерева.ПутьКФайлуМакета); + ЭлементДерева.Редактируется = Ложь; + ЭлементДерева.ПутьКФайлуМакета = ""; + КонецЦикла; + + ОбновитьЭлементыУправления(); + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьИЗИБ(Команда) + + УдаляемыеМакеты = Новый Массив; + + ВыделенныеСтроки = Элементы.СписокМакетов.ВыделенныеСтроки; + + Для Каждого Строка Из ВыделенныеСтроки Цикл + ЭлементДерева = Элементы.СписокМакетов.ДанныеСтроки(Строка); + Если ЭлементДерева.ЭтоКлассификатор Тогда + Продолжить; + КонецЕсли; + + УдаляемыеМакеты.Добавить(Новый Структура("ПолноеИмяОМ, ИмяМакета", + ЭлементДерева.ПолучитьРодителя().ПолноеИмяОМ, + ЭлементДерева.ИмяМакета)); + ЭлементДерева.ЕстьПользовательскийМакет = Ложь; + КонецЦикла; + + Если УдаляемыеМакеты.Количество() > 0 Тогда + УдалитьМакетИзИнформационнойБазы(УдаляемыеМакеты); + ОбновитьЭлементыУправления(); + КонецЕсли; + + КоличествоМакетов = ВыделенныеСтроки.Количество(); + Если КоличествоМакетов = 1 Тогда + ПоказатьОповещениеПользователя(НСтр("ru = 'Удален пользовательский макет'"),, + Элементы.СписокМакетов.ДанныеСтроки(ВыделенныеСтроки[0]).Представление); + ИначеЕсли КоличествоМакетов > 1 Тогда + ПоказатьОповещениеПользователя(НСтр("ru = 'Удалены пользовательские макеты'"),, + НСтр("ru = 'Количество макетов:'") + " " + КоличествоМакетов); + КонецЕсли; + + +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьПользовательскийМакет(Команда) + + УстановитьИспользованиеМакетаПоЗначению(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьПоставляемыйМакет(Команда) + + УстановитьИспользованиеМакетаПоЗначению(Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗадатьДействиеПриВыбореМакетаПечатнойФормы(Команда) + + Результат = ОткрытьФормуМодально("РегистрСведений.ПользовательскиеМакетыПечати.Форма.ВыбораРежимаОткрытияМакета"); + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + РежимОткрытияМакетаПросмотр = Результат.РежимОткрытияПросмотр; + СпрашиватьРежимОткрытияМакета = НЕ Результат.БольшеНеСпрашивать; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервереБезКонтекста Процедура ЗаполнитьДеревоПоКоллекцииМетаданных(СписокМакетовДерево, КоллекцияМетаданных, @@ -95,10 +400,8 @@ ЗначениеВРеквизитФормы(СписокМакетовДерево, "СписокМакетов"); -КонецПроцедуры // ЗаполнитьСписокМетаданных() +КонецПроцедуры -// Проверяет по переданному наименованию макета (из метаданных), что это печатная форма -// &НаСервереБезКонтекста Функция ЭтоПечатнаяФорма(ИмяМакета, ТипМакета = "") @@ -115,9 +418,6 @@ КонецФункции -// Процедура используется для установления доступности кнопок формы, -// в зависимости от выбранных данных -// &НаКлиенте Процедура ОбновитьЭлементыУправления() @@ -197,10 +497,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ УПРАВЛЕНИЯ МАКЕТАМИ // -//////////////////////////////////////////////////////////////////////////////// - &НаКлиентеНаСервереБезКонтекста Функция ПолучитьТекстПоИспользованию(знач Использование) @@ -291,11 +587,11 @@ Для Каждого Макет Из УстанавливаемыеМакеты Цикл Запись = РегистрыСведений.ПользовательскиеМакетыПечати.СоздатьМенеджерЗаписи(); - Запись.Объект = Макет.ИмяОМ; + Запись.Объект = Макет.ИмяОМ; Запись.ИмяМакета = Макет.ИмяМакета; Запись.Прочитать(); Если НЕ ПустаяСтрока(Запись.Объект) Тогда - Запись.Использование = Использование; + Запись.Использование = Использование; Запись.Записать(); КонецЕсли; КонецЦикла; @@ -305,7 +601,7 @@ &НаСервереБезКонтекста Функция ПолучитьМакетПечатнойФормы(знач НаименованиеОМ, знач ИмяМакета) - Возврат УправлениеПечатью.ПолучитьМакет(НаименованиеОМ+"."+ИмяМакета); + Возврат УправлениеПечатью.ПолучитьМакет(НаименованиеОМ + "." + ИмяМакета); КонецФункции @@ -352,8 +648,6 @@ КонецФункции -// Удаляет пользовательский макет из информационной базы -// &НаСервереБезКонтекста Процедура УдалитьМакетИзИнформационнойБазы(УдаляемыеМакеты) @@ -530,8 +824,6 @@ КонецПроцедуры -// Получить номер картинки по типу макету и его использованию -// &НаКлиентеНаСервереБезКонтекста Функция ПолучитьКодКартинки(ТипМакетаИмяОМ) @@ -556,11 +848,7 @@ Возврат Картинка; -КонецФункции // ПолучитьКодКартинки() - -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ УПРАВЛЕНИЯ МАКЕТАМИ // -//////////////////////////////////////////////////////////////////////////////// +КонецФункции #Если ВебКлиент Тогда &НаКлиенте @@ -574,210 +862,9 @@ ИнформацияОбОшибке().Описание)); КонецПопытки; -КонецПроцедуры // ОткрытьФайл() +КонецПроцедуры #КонецЕсли -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЯ КОМАНД ФОРМЫ // -//////////////////////////////////////////////////////////////////////////////// - -&НаКлиенте -Процедура ОткрытьДляПросмотра(Команда) - - ОткрытьМакетыПечатнойФормы(Ложь); - -КонецПроцедуры - -&НаКлиенте -Процедура Редактировать(Команда) - - ОткрытьМакетыПечатнойФормы(Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗавершитьРедактирование(Команда) - - СохраняемыеМакеты = Новый Массив; - -#Если ВебКлиент Тогда - ПомещаемыеФайлы = Новый Массив; - ПомещенныеФайлы = Новый Массив; -#КонецЕсли - - ВыделенныеСтроки = Элементы.СписокМакетов.ВыделенныеСтроки; - - Для Каждого Строка Из ВыделенныеСтроки Цикл - ЭлементДерева = Элементы.СписокМакетов.ДанныеСтроки(Строка); - Если ЭлементДерева.ЭтоКлассификатор Тогда - Продолжить; - КонецЕсли; - - Файл = Новый Файл(ЭлементДерева.ПутьКФайлуМакета); - - Если Файл.Существует() Тогда -#Если ВебКлиент Тогда - ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(Файл.ПолноеИмя, "")); - СохраняемыеМакеты.Добавить(Новый Структура("ИмяОМ, ИмяМакета", - ЭлементДерева.ПолучитьРодителя().ПолноеИмяОМ, - ЭлементДерева.ИмяМакета)); -#Иначе - Попытка - ДанныеМакета = Новый ДвоичныеДанные(ЭлементДерева.ПутьКФайлуМакета) - Исключение - СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - СообщениеОбОшибке = СообщениеОбОшибке + Символы.ПС + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Убедитесь, что приложение работы с файлом %1 закрыто'"), - ЭлементДерева.Представление); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); - Продолжить; - КонецПопытки; - - СохраняемыеМакеты.Добавить(Новый Структура("ИмяОМ, ИмяМакета, ДанныеМакета", - ЭлементДерева.ПолучитьРодителя().ПолноеИмяОМ, - ЭлементДерева.ИмяМакета, - ДанныеМакета)); - - УдалитьФайлы(ЭлементДерева.ПутьКФайлуМакета); - - ЭлементДерева.Использование = Истина; - ЭлементДерева.ИспользованиеСтрока = ПолучитьТекстПоИспользованию(ЭлементДерева.Использование); - ЭлементДерева.ЕстьПользовательскийМакет = Истина; - ЭлементДерева.Картинка = ПолучитьКодКартинки(ЭлементДерева.ТипМакета); -#КонецЕсли - КонецЕсли; -#Если НЕ ВебКлиент Тогда - ЭлементДерева.Редактируется = Ложь; - ЭлементДерева.ПутьКФайлуМакета = ""; -#КонецЕсли - КонецЦикла; - -#Если ВебКлиент Тогда - Попытка - Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь) Тогда - Предупреждение(НСтр("ru = 'Ошибка при помещении файлов в хранилище.'")); - Возврат; - КонецЕсли; - Исключение - СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при помещении файла в хранилище: %1. Убедитесь, что приложение работы с файлом закрыто.'"), СообщениеОбОшибке)); - Возврат; - КонецПопытки; -#КонецЕсли - -#Если ВебКлиент Тогда - СохранитьМакетыВИнформационнойБазе(СохраняемыеМакеты, ПомещенныеФайлы); - - ВыделенныеСтроки = Элементы.СписокМакетов.ВыделенныеСтроки; - - Для Каждого Строка Из ВыделенныеСтроки Цикл - ЭлементДерева = Элементы.СписокМакетов.ДанныеСтроки(Строка); - Если ЭлементДерева.ЭтоКлассификатор Тогда - Продолжить; - КонецЕсли; - - Файл = Новый Файл(ЭлементДерева.ПутьКФайлуМакета); - - Если Файл.Существует() Тогда - УдалитьФайлы(ЭлементДерева.ПутьКФайлуМакета); - КонецЕсли; - - ЭлементДерева.Использование = Истина; - ЭлементДерева.ИспользованиеСтрока = ПолучитьТекстПоИспользованию(ЭлементДерева.Использование); - ЭлементДерева.ЕстьПользовательскийМакет = Истина; - ЭлементДерева.Картинка = ПолучитьКодКартинки(ЭлементДерева.ТипМакета); - ЭлементДерева.Редактируется = Ложь; - ЭлементДерева.ПутьКФайлуМакета = ""; - КонецЦикла; -#Иначе - СохранитьМакетыВИнформационнойБазе(СохраняемыеМакеты); -#КонецЕсли - - КоличествоМакетов = ВыделенныеСтроки.Количество(); - Если КоличествоМакетов = 1 Тогда - ПоказатьОповещениеПользователя(НСтр("ru = 'Макет изменен'"),, - Элементы.СписокМакетов.ДанныеСтроки(ВыделенныеСтроки[0]).Представление); - ИначеЕсли КоличествоМакетов > 1 Тогда - ПоказатьОповещениеПользователя(НСтр("ru = 'Макеты изменены'"),, - НСтр("ru = 'Количество макетов: '") + КоличествоМакетов); - КонецЕсли; - - ОбновитьЭлементыУправления(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтменитьРедактирование(Команда) - - ВыделенныеСтроки = Элементы.СписокМакетов.ВыделенныеСтроки; - - Для Каждого Строка Из ВыделенныеСтроки Цикл - ЭлементДерева = Элементы.СписокМакетов.ДанныеСтроки(Строка); - Если ЭлементДерева.ЭтоКлассификатор Тогда - Продолжить; - КонецЕсли; - УдалитьФайлы(ЭлементДерева.ПутьКФайлуМакета); - ЭлементДерева.Редактируется = Ложь; - ЭлементДерева.ПутьКФайлуМакета = ""; - КонецЦикла; - - ОбновитьЭлементыУправления(); - -КонецПроцедуры - -&НаКлиенте -Процедура УдалитьИЗИБ(Команда) - - УдаляемыеМакеты = Новый Массив; - - ВыделенныеСтроки = Элементы.СписокМакетов.ВыделенныеСтроки; - - Для Каждого Строка Из ВыделенныеСтроки Цикл - ЭлементДерева = Элементы.СписокМакетов.ДанныеСтроки(Строка); - Если ЭлементДерева.ЭтоКлассификатор Тогда - Продолжить; - КонецЕсли; - - УдаляемыеМакеты.Добавить(Новый Структура("ПолноеИмяОМ, ИмяМакета", - ЭлементДерева.ПолучитьРодителя().ПолноеИмяОМ, - ЭлементДерева.ИмяМакета)); - ЭлементДерева.ЕстьПользовательскийМакет = Ложь; - КонецЦикла; - - Если УдаляемыеМакеты.Количество() > 0 Тогда - УдалитьМакетИзИнформационнойБазы(УдаляемыеМакеты); - ОбновитьЭлементыУправления(); - КонецЕсли; - - КоличествоМакетов = ВыделенныеСтроки.Количество(); - Если КоличествоМакетов = 1 Тогда - ПоказатьОповещениеПользователя(НСтр("ru = 'Удален пользовательский макет'"),, - Элементы.СписокМакетов.ДанныеСтроки(ВыделенныеСтроки[0]).Представление); - ИначеЕсли КоличествоМакетов > 1 Тогда - ПоказатьОповещениеПользователя(НСтр("ru = 'Удалены пользовательские макеты'"),, - НСтр("ru = 'Количество макетов: '" + КоличествоМакетов)); - КонецЕсли; - - -КонецПроцедуры - -&НаКлиенте -Процедура ИспользоватьПользовательскийМакет(Команда) - - УстановитьИспользованиеМакетаПоЗначению(Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура ИспользоватьПоставляемыйМакет(Команда) - - УстановитьИспользованиеМакетаПоЗначению(Ложь); - -КонецПроцедуры - &НаСервереБезКонтекста Процедура СохранитьНастройкиРежимаОткрытияМакета(СпрашиватьРежимОткрытияМакета, РежимОткрытияМакетаПросмотр) @@ -794,105 +881,3 @@ ); КонецПроцедуры - -&НаКлиенте -Процедура ЗадатьДействиеПриВыбореМакетаПечатнойФормы(Команда) - - Результат = ОткрытьФормуМодально("РегистрСведений.ПользовательскиеМакетыПечати.Форма.ВыбораРежимаОткрытияМакета"); - - Если ТипЗнч(Результат) = Тип("Структура") Тогда - РежимОткрытияМакетаПросмотр = Результат.РежимОткрытияПросмотр; - СпрашиватьРежимОткрытияМакета = НЕ Результат.БольшеНеСпрашивать; - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ И ЭЛЕМЕНТОВ УПРАВЛЕНИЯ ФОРМЫ // -//////////////////////////////////////////////////////////////////////////////// - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Перем Фильтр; - - Если Параметры.Свойство("Фильтр") Тогда - Фильтр = Параметры.Фильтр.Метаданные().ПолноеИмя(); - КонецЕсли; - - ЗаполнитьСписокМетаданных(Фильтр); - - ПутьККаталогуФайловПечати = УправлениеПечатью.ПолучитьЛокальныйКаталогФайловПечати(); - - СпрашиватьРежимОткрытияМакета = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "НастройкаОткрытияМакетов", - "СпрашиватьРежимОткрытияМакета", Истина - ); - - РежимОткрытияМакетаПросмотр = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "НастройкаОткрытияМакетов", - "РежимОткрытияМакетаПросмотр", Ложь - ); - -КонецПроцедуры - -&НаКлиенте -Процедура СписокМакетовПриАктивизацииСтроки(Элемент) - - ОбновитьЭлементыУправления(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - - ЕстьРедактируемые = Ложь; - - Для Каждого ГруппаМакетов Из СписокМакетов.ПолучитьЭлементы() Цикл - ЭлементыГруппы = ГруппаМакетов.ПолучитьЭлементы(); - Для Каждого ЭлементОМ Из ЭлементыГруппы Цикл - Если ЭлементОМ.Редактируется Тогда - ЕстьРедактируемые = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - Если ЕстьРедактируемые Тогда - Прервать; - КонецЕсли; - КонецЦикла; - - Если ЕстьРедактируемые Тогда - Результат = Вопрос(НСтр("ru = 'Внимание, в списке остались макеты отмеченные как редактируемые. Продолжить с закрытием формы?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет,); - Если Результат = КодВозвратаДиалога.Нет Тогда - Отказ = Истина; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СписокМакетовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - Если Элементы.СписокМакетов.ДанныеСтроки(ВыбраннаяСтрока).ЭтоКлассификатор Тогда - Возврат; - КонецЕсли; - - Если СпрашиватьРежимОткрытияМакета Тогда - - Результат = ОткрытьФормуМодально("РегистрСведений.ПользовательскиеМакетыПечати.Форма.ВыбораРежимаОткрытияМакета"); - - Если ТипЗнч(Результат) = Тип("Структура") Тогда - РежимОткрытияМакетаПросмотр = Результат.РежимОткрытияПросмотр; - СпрашиватьРежимОткрытияМакета = НЕ Результат.БольшеНеСпрашивать; - Если Результат.БольшеНеСпрашивать Тогда - СохранитьНастройкиРежимаОткрытияМакета(СпрашиватьРежимОткрытияМакета, РежимОткрытияМакетаПросмотр); - КонецЕсли; - Иначе - Возврат; - КонецЕсли; - - КонецЕсли; - - ОткрытьМакетыПечатнойФормы(НЕ РежимОткрытияМакетаПросмотр); - -КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Module.bsl index 16254f1aa..f0e21d716 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Module.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -5,6 +8,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + &НаКлиенте Процедура ПутьККаталогуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -13,7 +19,7 @@ ДиалогОткрытияФайла.ПолноеИмяФайла = ""; ДиалогОткрытияФайла.Каталог = КаталогДляСохраненияДанныхПечати; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; - ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите путь к каталогу для файлов печати'"); + ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите путь к каталогу для файлов печати.'"); Если ДиалогОткрытияФайла.Выбрать() Тогда КаталогДляСохраненияДанныхПечати = ДиалогОткрытияФайла.Каталог + "\"; КонецЕсли; @@ -23,6 +29,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ОК(Команда) diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаЗаписи/Form.form index 932ba206b..e3ad5535d 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаЗаписи/Form.form @@ -888,5 +888,10 @@ - + + + OnWriteAtServer + ПриЗаписиНаСервере + + diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаЗаписи/Module.bsl index 1833bc3e9..6ab28e400 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаЗаписи/Module.bsl @@ -1,4 +1,4 @@ -////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере @@ -18,8 +18,22 @@ КонецПроцедуры -////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + // кеш открытых сеансов для МРО стал неактуальным + ОбменДаннымиСервер.УстановитьДатуОбновленияПовторноИспользуемыхЗначенийМРО(); + + ОбновитьПовторноИспользуемыеЗначения(); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ИмяПланаОбменаПриИзменении(Элемент) @@ -39,6 +53,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура ЗагрузитьПравила(Команда) @@ -169,8 +186,15 @@ КонецПроцедуры -////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ +&НаКлиенте +Процедура ИнформацияОФайлеПравил(Команда) + + ОбменДаннымиКлиент.ПолучитьИнформациюОПравилах(УникальныйИдентификатор); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ОбновитьСписокВыбораПлановОбмена() @@ -314,13 +338,6 @@ КонецФункции -&НаКлиенте -Процедура ИнформацияОФайлеПравил(Команда) - - ОбменДаннымиКлиент.ПолучитьИнформациюОПравилах(УникальныйИдентификатор); - -КонецПроцедуры - &НаСервере Процедура ОбновитьИнформациюОПравилах() diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl index 5243cc216..79df0ca42 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl @@ -1,3 +1,6 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Загружает правила в регистр // // Параметры: @@ -352,8 +355,6 @@ КонецПроцедуры -// - // Процедура добавляет запись в регистр по переданным значениям структуры Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl index 36bf48ffb..e69de29bb 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl @@ -1,27 +0,0 @@ - -Процедура ПередЗаписью(Отказ, Замещение) - - // если были загружены правила, то изменять план обмена нельзя - Если Количество() > 0 Тогда - - Если ЗначениеЗаполнено(ЭтотОбъект[0].ИмяПланаОбменаИзПравил) // ранее были загружены правила для плана обмена - И Отбор.ИмяПланаОбмена.Значение <> ЭтотОбъект[0].ИмяПланаОбменаИзПравил Тогда - - ТекстСообщения = НСтр("ru = 'Изменение плана обмена после загрузки правил запрещено.'"); - ОбменДаннымиСервер.СообщитьОбОшибке(ТекстСообщения, Отказ); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -Процедура ПриЗаписи(Отказ, Замещение) - - // кеш открытых сеансов для МРО стал неактуальным - ОбменДаннымиСервер.УстановитьДатуОбновленияПовторноИспользуемыхЗначенийМРО(); - - ОбновитьПовторноИспользуемыеЗначения(); - -КонецПроцедуры - diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo index 60c3e8705..6fc2a3964 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo @@ -15,7 +15,6 @@ Правила для обмена данными
    InformationRegister.ПравилаДляОбменаДанными.Form.ФормаЗаписи - InformationRegister.ПравилаДляОбменаДанными.Form.ФормаСписка Use Active @@ -298,13 +297,4 @@ PersonalComputer MobileDevice - - ФормаСписка - - ru - Форма списка - - PersonalComputer - MobileDevice - diff --git a/SSL/src/InformationRegisters/РазделенныеРегламентныеЗадания/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/РазделенныеРегламентныеЗадания/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..b28b22840 --- /dev/null +++ b/SSL/src/InformationRegisters/РазделенныеРегламентныеЗадания/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,164 @@ + + + + РегламентноеЗадание + 3 + true + true + + true + + + ПредставлениеРегламентногоЗадания + + + РегламентноеЗаданиеРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + РегламентноеЗаданиеКонтекстноеМеню + 4 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Использование + 1 + true + true + + true + + + Запись.Использование + + + ИспользованиеРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ИспользованиеКонтекстноеМеню + 2 + true + + CheckBoxField + Enter + true + Left + true + + + + ИндивидуальнаяНастройка + 5 + true + true + + true + + + Запись.ИндивидуальнаяНастройка + + + ИндивидуальнаяНастройкаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ИндивидуальнаяНастройкаКонтекстноеМеню + 6 + true + + CheckBoxField + Enter + true + Left + true + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Запись + 1 + + InformationRegisterRecordManager.РазделенныеРегламентныеЗадания + + + true + + + true + +
    true
    + true +
    + + ПредставлениеРегламентногоЗадания + + <key>ru</key> + <value>Регламентное задание</value> + + 2 + + String + + + + true + + + true + + + + + + + +
    diff --git a/SSL/src/InformationRegisters/РазделенныеРегламентныеЗадания/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/РазделенныеРегламентныеЗадания/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..94f05f085 --- /dev/null +++ b/SSL/src/InformationRegisters/РазделенныеРегламентныеЗадания/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,28 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Запись.РегламентноеЗадание); + Если Задание = Неопределено Тогда + ШаблонПредставления = НСтр("ru = 'Задание с идентификатором %1 не найдено'"); + ПредставлениеРегламентногоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления, + Запись.РегламентноеЗадание); + Иначе + + ШаблонПредставления = НСтр("ru = '%1 (идентификатор: %2)'"); + Если ПустаяСтрока(Задание.Наименование) Тогда + НаименованиеЗадания = Задание.Метаданные.Представление(); + Иначе + НаименованиеЗадания = Задание.Наименование; + КонецЕсли; + + ПредставлениеРегламентногоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления, + НаименованиеЗадания, Запись.РегламентноеЗадание); + + КонецЕсли; + + +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/РазделенныеРегламентныеЗадания/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/РазделенныеРегламентныеЗадания/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..91027f589 --- /dev/null +++ b/SSL/src/InformationRegisters/РазделенныеРегламентныеЗадания/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,15 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + diff --git a/SSL/src/InformationRegisters/РазделенныеРегламентныеЗадания/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/РазделенныеРегламентныеЗадания/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..e856ddd3f --- /dev/null +++ b/SSL/src/InformationRegisters/РазделенныеРегламентныеЗадания/Forms/ФормаСписка/Form.form @@ -0,0 +1,292 @@ + + + + Список + 1 + true + true + + true + + + Список + + true + None + + РегламентноеЗадание + 4 + true + true + + true + + + Список.РегламентноеЗадание + + true + + РегламентноеЗаданиеРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + РегламентноеЗаданиеКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Использование + 6 + true + true + + true + + + Список.Использование + + true + + ИспользованиеРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ИспользованиеКонтекстноеМеню + 7 + true + + CheckBoxField + Enter + true + Left + true + + + + ИндивидуальнаяНастройка + 8 + true + true + + true + + + Список.ИндивидуальнаяНастройка + + + ИндивидуальнаяНастройкаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ИндивидуальнаяНастройкаКонтекстноеМеню + 9 + true + + CheckBoxField + Enter + true + Left + true + + + None + + СписокКоманднаяПанель + 3 + Left + + + СписокСтрокаПоиска + 11 + + СписокСтрокаПоискаРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 12 + true + + Список + + true + + + + СписокСостояниеПросмотра + 14 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 15 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 17 + + СписокУправлениеПоискомРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 18 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + true + true + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
    + + ФормаКоманднаяПанель + -1 + Left + true + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
    true
    + + InformationRegister.РазделенныеРегламентныеЗадания + true + true + true + true + +
    + + + + + +
    diff --git a/SSL/src/InformationRegisters/РазделенныеРегламентныеЗадания/РазделенныеРегламентныеЗадания.mdo b/SSL/src/InformationRegisters/РазделенныеРегламентныеЗадания/РазделенныеРегламентныеЗадания.mdo new file mode 100644 index 000000000..3fd628121 --- /dev/null +++ b/SSL/src/InformationRegisters/РазделенныеРегламентныеЗадания/РазделенныеРегламентныеЗадания.mdo @@ -0,0 +1,121 @@ + + + + + + + + + + + + РазделенныеРегламентныеЗадания + + ru + Разделенные регламентные задания + + true + InDialog + InformationRegister.РазделенныеРегламентныеЗадания.Form.ФормаЗаписи + InformationRegister.РазделенныеРегламентныеЗадания.Form.ФормаСписка + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Использование + + ru + Использование + + + Boolean + + + + Use + Use + + + + ИндивидуальнаяНастройка + + ru + Индивидуальная настройка + + + Boolean + + + + Use + Use + + + + РегламентноеЗадание + + ru + Регламентное задание + + + UUID + + + + ShowError + true + Index + Use + + true + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/СвязиПоставляемыхДанных/СвязиПоставляемыхДанных.mdo b/SSL/src/InformationRegisters/СвязиПоставляемыхДанных/СвязиПоставляемыхДанных.mdo new file mode 100644 index 000000000..0f8e9cae1 --- /dev/null +++ b/SSL/src/InformationRegisters/СвязиПоставляемыхДанных/СвязиПоставляемыхДанных.mdo @@ -0,0 +1,125 @@ + + + + + + + + + + + + СвязиПоставляемыхДанных + + ru + Связи поставляемых данных + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + РучноеИзменение + + ru + Ручное изменение + + + Boolean + + + + Use + Use + + + + ОбластьДанных + + ru + Область данных + + + Number + + 7 + true + + + + + Use + Use + + true + + + ЭлементРазделенныхДанных + + ru + Элемент разделенных данных + + + CatalogRef.Валюты + CatalogRef.Календари + + + + Use + Use + true + + true + + + ЭлементОбщихДанных + + ru + Элемент общих данных + + + CatalogRef.КлассификаторВалют + CatalogRef.ПроизводственныеКалендари + + + + Use + Use + true + + true + true + + diff --git a/SSL/src/InformationRegisters/СообщенияОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/СообщенияОбменаДанными/ManagerModule.bsl new file mode 100644 index 000000000..c56a2f810 --- /dev/null +++ b/SSL/src/InformationRegisters/СообщенияОбменаДанными/ManagerModule.bsl @@ -0,0 +1,14 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт + + ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, "СообщенияОбменаДанными"); + +КонецПроцедуры + +Процедура УдалитьЗапись(СтруктураЗаписи) Экспорт + + ОбменДаннымиСервер.УдалитьНаборЗаписейВРегистреСведений(СтруктураЗаписи, "СообщенияОбменаДанными"); + +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/СообщенияОбменаДанными/СообщенияОбменаДанными.mdo b/SSL/src/InformationRegisters/СообщенияОбменаДанными/СообщенияОбменаДанными.mdo new file mode 100644 index 000000000..d2b1dd294 --- /dev/null +++ b/SSL/src/InformationRegisters/СообщенияОбменаДанными/СообщенияОбменаДанными.mdo @@ -0,0 +1,108 @@ + + + + + + + + + + + + СообщенияОбменаДанными + + ru + Сообщения обмена данными + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ru + Файл + + + ИмяФайлаСообщения + + ru + Имя файла сообщения + + + String + + 255 + + + + + Use + Use + + + + ДатаЗакладкиСообщения + + ru + Дата закладки сообщения + + + Date + + + + + Use + + + + ИдентификаторСообщения + + ru + Идентификатор сообщения + + + String + + 36 + + + + + true + Use + + + diff --git a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl index fba189c51..3344d8f26 100644 --- a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Процедура добавляет запись в регистр по переданным значениям структуры Процедура ДобавитьЗапись(СтруктураЗаписи, Загрузка = Ложь) Экспорт diff --git a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl index 6e15fbf44..3337d42e8 100644 --- a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ Процедура ПередЗаписью(Отказ, Замещение) diff --git a/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl index d8283b24f..23ceb3248 100644 --- a/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Процедура добавляет запись в регистр по переданным значениям структуры Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт diff --git a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl new file mode 100644 index 000000000..1a290c074 --- /dev/null +++ b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl @@ -0,0 +1,33 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Для внутреннего использования +// +Процедура ЗафиксироватьЗапускРассылки(Рассылка) Экспорт + МенеджерЗаписи = СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Рассылка = Рассылка; + МенеджерЗаписи.ПоследнийЗапуск = ТекущаяДатаСеанса(); + МенеджерЗаписи.Выполнена = Ложь; + МенеджерЗаписи.СОшибками = Истина; + МенеджерЗаписи.Записать(Истина); +КонецПроцедуры + +// Для внутреннего использования +// +Процедура ЗафиксироватьРезультатВыполненияРассылки(Рассылка, РезультатВыполнения) Экспорт + МенеджерЗаписи = СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Рассылка = Рассылка; + МенеджерЗаписи.Прочитать(); + + МенеджерЗаписи.Выполнена = ( + РезультатВыполнения.ВыполненаВПапку + ИЛИ РезультатВыполнения.ВыполненаВСетевойКаталог + ИЛИ РезультатВыполнения.ВыполненаНаFTP + ИЛИ РезультатВыполнения.ВыполненаПоЭлектроннойПочте + ); + + МенеджерЗаписи.СОшибками = РезультатВыполнения.БылиОшибки ИЛИ РезультатВыполнения.БылиПредупреждения; + + МенеджерЗаписи.Записать(Истина); +КонецПроцедуры + diff --git a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/СостоянияРассылокОтчетов.mdo b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/СостоянияРассылокОтчетов.mdo new file mode 100644 index 000000000..de8e86997 --- /dev/null +++ b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/СостоянияРассылокОтчетов.mdo @@ -0,0 +1,116 @@ + + + + + + + + + + + + СостоянияРассылокОтчетов + + ru + Состояния рассылок отчетов + + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ПоследнийЗапуск + + ru + Последний запуск + + + Date + + + + + Use + Use + + + + Выполнена + + ru + Выполнена + + + Boolean + + + + Use + Use + + + + СОшибками + + ru + С ошибками + + + Boolean + + + + Use + Use + + + + Рассылка + + ru + Рассылка + + + CatalogRef.РассылкиОтчетов + + + + Use + Use + true + + true + true + + diff --git a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl index 3c6c3890a..900d4955f 100644 --- a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Процедура добавляет запись в регистр по переданным значениям структуры Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт diff --git a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl index a211236f1..d80fe0dbd 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl @@ -1,86 +1,7 @@ + //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ - -// Формирует отчёт -&НаСервере -Процедура СформироватьОтчёт() - - ТаблицаОтчета.Очистить(); - СКД = Отчеты.АнализОпроса.ПолучитьМакет("ПростыеВопросы"); - Настройки = СКД.ВариантыНастроек[ВариантОтчета].Настройки; - - СКД.Параметры.ВопросШаблонаАнкеты.Значение = ВопросШаблонаАнкеты; - СКД.Параметры.Опрос.Значение = Опрос; - - КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; - МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД,Настройки); - - ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; - ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки); - - ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; - ПроцессорВывода.УстановитьДокумент(ТаблицаОтчета); - ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); - - ТаблицаОтчета.ОтображатьСетку = Ложь; - ТаблицаОтчета.ОтображатьЗаголовки = Ложь; - ТаблицаОтчета.Показать(); - -КонецПроцедуры // () - -// Обрабатывает входящие параметры формы -// -// Возвращаемое значение: -// Булево - отказ от запуска формы -// -&НаСервере -Функция ОбработатьВходящиеПараметры() - - Если Параметры.Свойство("ВопросШаблонаАнкеты") Тогда - ВопросШаблонаАнкеты = Параметры.ВопросШаблонаАнкеты; - Иначе - Возврат Истина; - КонецЕсли; - - Если Параметры.Свойство("Опрос") Тогда - Опрос = Параметры.Опрос; - Иначе - Отказ = Истина; - КонецЕсли; - - Если Параметры.Свойство("ПолныйКод") Тогда - ПолныйКод = Параметры.ПолныйКод; - Иначе - Отказ = Истина; - КонецЕсли; - - Если Параметры.Свойство("НаименованиеОпроса") Тогда - НаименованиеОпроса = Параметры.НаименованиеОпроса; - Иначе - Отказ = Истина; - КонецЕсли; - - - - Если Параметры.Свойство("ДатаОпроса") Тогда - ДатаОпроса = Параметры.ДатаОпроса; - Иначе - Отказ = Истина; - КонецЕсли; - - Если Параметры.Свойство("ВариантОтчета") Тогда - ВариантОтчета = Параметры.ВариантОтчета; - Иначе - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции // () - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -104,3 +25,81 @@ СформироватьОтчёт(); КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура СформироватьОтчёт() + + ТаблицаОтчета.Очистить(); + СКД = Отчеты.АнализОпроса.ПолучитьМакет("ПростыеВопросы"); + Настройки = СКД.ВариантыНастроек[ВариантОтчета].Настройки; + + СКД.Параметры.ВопросШаблонаАнкеты.Значение = ВопросШаблонаАнкеты; + СКД.Параметры.Опрос.Значение = Опрос; + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД,Настройки); + + ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки); + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + ПроцессорВывода.УстановитьДокумент(ТаблицаОтчета); + ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); + + ТаблицаОтчета.ОтображатьСетку = Ложь; + ТаблицаОтчета.ОтображатьЗаголовки = Ложь; + ТаблицаОтчета.Показать(); + +КонецПроцедуры + +// Обрабатывает входящие параметры формы +// +// Возвращаемое значение: +// Булево - отказ от запуска формы +// +&НаСервере +Функция ОбработатьВходящиеПараметры() + + Если Параметры.Свойство("ВопросШаблонаАнкеты") Тогда + ВопросШаблонаАнкеты = Параметры.ВопросШаблонаАнкеты; + Иначе + Возврат Истина; + КонецЕсли; + + Если Параметры.Свойство("Опрос") Тогда + Опрос = Параметры.Опрос; + Иначе + Отказ = Истина; + КонецЕсли; + + Если Параметры.Свойство("ПолныйКод") Тогда + ПолныйКод = Параметры.ПолныйКод; + Иначе + Отказ = Истина; + КонецЕсли; + + Если Параметры.Свойство("НаименованиеОпроса") Тогда + НаименованиеОпроса = Параметры.НаименованиеОпроса; + Иначе + Отказ = Истина; + КонецЕсли; + + Если Параметры.Свойство("ДатаОпроса") Тогда + ДатаОпроса = Параметры.ДатаОпроса; + Иначе + Отказ = Истина; + КонецЕсли; + + Если Параметры.Свойство("ВариантОтчета") Тогда + ВариантОтчета = Параметры.ВариантОтчета; + Иначе + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + diff --git a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl index 141f4963e..5bb9bbdac 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl @@ -1,18 +1,32 @@ -Перем ФормулировкиЭлементарныхВопросов; // содержит представления элементарных вопросов табличных вопросов. //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ -// Формирует отчет -// &НаСервере -Процедура СформироватьОтчет() +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ФормулировкиЭлементарныхВопросов = Новый Соответствие; + Отказ = ОбработатьВходящиеПараметры(ФормулировкиЭлементарныхВопросов); + СформироватьОтчет(ФормулировкиЭлементарныхВопросов); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура СформироватьОтчет(ФормулировкиЭлементарныхВопросов) ТаблицаОтчета.Очистить(); РезультатЗапроса = ВыполнитьЗапросПоВопросуАнкеты(); - Если РезультатЗапроса.Пустой() Тогда - Возврат; + Если РезультатЗапроса.Пустой() Тогда + Возврат; КонецЕсли; Макет = Отчеты.АнализОпроса.ПолучитьМакет("МакетОтветы"); @@ -20,54 +34,54 @@ Область = Макет.ПолучитьОбласть("Вопрос"); Область.Параметры.ФормулировкаВопроса = Формулировка; ТаблицаОтчета.Вывести(Область,1); - - ДеревоОтветов = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); - Для каждого СтрокаДерева Из ДеревоОтветов.Строки Цикл - ВывестиВДокументРеспондентов(СтрокаДерева,Макет); - КонецЦикла; - ТаблицаОтчета.Показать() + ДеревоОтветов = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + Для каждого СтрокаДерева Из ДеревоОтветов.Строки Цикл + ВывестиВДокументРеспондентов(СтрокаДерева,Макет,ФормулировкиЭлементарныхВопросов); + КонецЦикла; + + ТаблицаОтчета.Показать(); -КонецПроцедуры // СформироватьОтчет() +КонецПроцедуры &НаСервере -Процедура ВывестиВДокументРеспондентов(СтрокаДерева,Макет) +Процедура ВывестиВДокументРеспондентов(СтрокаДерева,Макет, ФормулировкиЭлементарныхВопросов) Область = Макет.ПолучитьОбласть("Респондент"); Область.Параметры.Респондент = СтрокаДерева.Респондент; ТаблицаОтчета.Вывести(Область,1); ТаблицаОтчета.НачатьГруппуСтрок(СтрокаДерева.Респондент); - ВывестиТабличныйОтвет(СтрокаДерева,Макет); + ВывестиТабличныйОтвет(СтрокаДерева,Макет,ФормулировкиЭлементарныхВопросов); ТаблицаОтчета.ЗакончитьГруппуСтрок(); КонецПроцедуры &НаСервере -Процедура ВывестиТабличныйОтвет(СтрокаДерева,Макет) +Процедура ВывестиТабличныйОтвет(СтрокаДерева,Макет,ФормулировкиЭлементарныхВопросов) Если ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.Составной Тогда - ВывестиОтветСоставнойТабличныйВопрос(СтрокаДерева,Макет); + ВывестиОтветСоставнойТабличныйВопрос(СтрокаДерева,Макет,ФормулировкиЭлементарныхВопросов); - ИначеЕсли ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках Тогда + ИначеЕсли ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках Тогда - ВывестиОтветПредопределенныеОтветыВКолонкахТабличныйВопрос(СтрокаДерева,Макет); + ВывестиОтветПредопределенныеОтветыВКолонкахТабличныйВопрос(СтрокаДерева,Макет, ФормулировкиЭлементарныхВопросов); - ИначеЕсли ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках Тогда + ИначеЕсли ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках Тогда - ВывестиОтветПредопределенныеОтветыВСтрокахТабличныйВопрос(СтрокаДерева,Макет); + ВывестиОтветПредопределенныеОтветыВСтрокахТабличныйВопрос(СтрокаДерева,Макет, ФормулировкиЭлементарныхВопросов); - ИначеЕсли ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках Тогда + ИначеЕсли ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках Тогда - ВывестиОтветПредопределенныеОтветыВСтрокахИКолонкахТабличныйВопрос(СтрокаДерева,Макет); + ВывестиОтветПредопределенныеОтветыВСтрокахИКолонкахТабличныйВопрос(СтрокаДерева,Макет); - КонецЕсли; + КонецЕсли; -КонецПроцедуры +КонецПроцедуры &НаСервере -Процедура ВывестиОтветСоставнойТабличныйВопрос(СтрокаДерева,Макет) +Процедура ВывестиОтветСоставнойТабличныйВопрос(СтрокаДерева,Макет, ФормулировкиЭлементарныхВопросов) ПерваяКолонка = Истина; @@ -76,12 +90,12 @@ Если ПерваяКолонка Тогда Область = Макет.ПолучитьОбласть("Отступ"); ТаблицаОтчета.Вывести(Область); - ПерваяКолонка = Ложь; + ПерваяКолонка = Ложь; КонецЕсли; Область = Макет.ПолучитьОбласть("ЭлементШапкиТабличногоВопроса"); Область.Параметры.Значение = ФормулировкиЭлементарныхВопросов.Получить(Вопрос.ЭлементарныйВопрос); - ТаблицаОтчета.Присоединить(Область); + ТаблицаОтчета.Присоединить(Область); КонецЦикла; @@ -94,11 +108,11 @@ Для каждого СтрокаСоставаТабличногоВопроса Из СоставТабличногоВопроса Цикл НайденнаяСтрока = СтрокаДереваЯчейка.Строки.Найти(СтрокаСоставаТабличногоВопроса.ЭлементарныйВопрос,"ЭлементарныйВопрос"); - + Если ПерваяКолонка Тогда Область = Макет.ПолучитьОбласть("Отступ"); ТаблицаОтчета.Вывести(Область); - ПерваяКолонка = Ложь; + ПерваяКолонка = Ложь; КонецЕсли; Область = Макет.ПолучитьОбласть("ЯчейкаТабличногоВопроса"); @@ -107,12 +121,12 @@ КонецЦикла; - КонецЦикла; + КонецЦикла; КонецПроцедуры &НаСервере -Процедура ВывестиОтветПредопределенныеОтветыВКолонкахТабличныйВопрос(СтрокаДерева,Макет) +Процедура ВывестиОтветПредопределенныеОтветыВКолонкахТабличныйВопрос(СтрокаДерева,Макет, ФормулировкиЭлементарныхВопросов) Область = Макет.ПолучитьОбласть("Отступ"); ТаблицаОтчета.Вывести(Область); @@ -146,17 +160,17 @@ Область = Макет.ПолучитьОбласть("ЯчейкаТабличногоВопроса"); Если НайденныеСтроки.Количество() > 0 Тогда - Область.Параметры.Значение = НайденныеСтроки[0].Ответ; + Область.Параметры.Значение = НайденныеСтроки[0].Ответ; КонецЕсли; ТаблицаОтчета.Присоединить(Область); - КонецЦикла; - КонецЦикла; + КонецЦикла; + КонецЦикла; КонецПроцедуры &НаСервере -Процедура ВывестиОтветПредопределенныеОтветыВСтрокахТабличныйВопрос(СтрокаДерева,Макет) +Процедура ВывестиОтветПредопределенныеОтветыВСтрокахТабличныйВопрос(СтрокаДерева,Макет, ФормулировкиЭлементарныхВопросов) ПерваяКолонка = Истина; @@ -165,12 +179,12 @@ Если ПерваяКолонка Тогда Область = Макет.ПолучитьОбласть("Отступ"); ТаблицаОтчета.Вывести(Область); - ПерваяКолонка = Ложь; + ПерваяКолонка = Ложь; КонецЕсли; Область = Макет.ПолучитьОбласть("ЭлементШапкиТабличногоВопроса"); Область.Параметры.Значение = ФормулировкиЭлементарныхВопросов.Получить(Вопрос.ЭлементарныйВопрос); - ТаблицаОтчета.Присоединить(Область); + ТаблицаОтчета.Присоединить(Область); КонецЦикла; @@ -196,16 +210,16 @@ НайденнаяСтрока = СтрокаДереваЯчейка.Строки.Найти(СоставТабличногоВопроса[ИндексКолонок - 1].ЭлементарныйВопрос,"ЭлементарныйВопрос"); Область = Макет.ПолучитьОбласть("ЯчейкаТабличногоВопроса"); - Область.Параметры.Значение = ?(НайденнаяСтрока = Неопределено,"",НайденнаяСтрока.Ответ); + Область.Параметры.Значение = ?(НайденнаяСтрока = Неопределено,"",НайденнаяСтрока.Ответ); ТаблицаОтчета.Присоединить(Область); - КонецЕсли; + КонецЕсли; - КонецЦикла; + КонецЦикла; КонецЦикла; -КонецПроцедуры // +КонецПроцедуры &НаСервере Процедура ВывестиОтветПредопределенныеОтветыВСтрокахИКолонкахТабличныйВопрос(СтрокаДерева,Макет) @@ -229,7 +243,7 @@ Область.Параметры.Значение = Ответ.Ответ; ТаблицаОтчета.Присоединить(Область); - КонецЦикла; + КонецЦикла; Для ИндексСтроки = 1 По ОтветыСтроки.Количество() Цикл @@ -255,53 +269,44 @@ КонецЦикла; - КонецЦикла; + КонецЦикла; -КонецПроцедуры // +КонецПроцедуры -// Выполняет запрос по шаблону анкеты -// -// Возвращаемое значение: -// РезультатЗапроса - результат выполненного запроса -// &НаСервере Функция ВыполнитьЗапросПоВопросуАнкеты() + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ДокументАнкета.Респондент КАК Респондент, + | ОтветыНаВопросыАнкет.НомерЯчейки КАК НомерЯчейки, + | ОтветыНаВопросыАнкет.ЭлементарныйВопрос КАК ЭлементарныйВопрос, + | ОтветыНаВопросыАнкет.Ответ + |ИЗ + | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет + | ЛЕВОЕ СОЕДИНЕНИЕ Документ.Анкета КАК ДокументАнкета + | ПО ОтветыНаВопросыАнкет.Анкета = ДокументАнкета.Ссылка + |ГДЕ + | ОтветыНаВопросыАнкет.Вопрос = &ВопросШаблона + | И ДокументАнкета.Опрос = &Опрос + | + |УПОРЯДОЧИТЬ ПО + | Респондент, + | НомерЯчейки + |ИТОГИ ПО + | Респондент, + | НомерЯчейки"; + + Запрос.УстановитьПараметр("ВопросШаблона",ВопросШаблонаАнкеты); + Запрос.УстановитьПараметр("Опрос",Опрос); + + Возврат Запрос.Выполнить(); + +КонецФункции - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ДокументАнкета.Респондент КАК Респондент, - | ОтветыНаВопросыАнкет.НомерЯчейки КАК НомерЯчейки, - | ОтветыНаВопросыАнкет.ЭлементарныйВопрос КАК ЭлементарныйВопрос, - | ОтветыНаВопросыАнкет.Ответ - |ИЗ - | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет - | ЛЕВОЕ СОЕДИНЕНИЕ Документ.Анкета КАК ДокументАнкета - | ПО ОтветыНаВопросыАнкет.Анкета = ДокументАнкета.Ссылка - |ГДЕ - | ОтветыНаВопросыАнкет.Вопрос = &ВопросШаблона - | И ДокументАнкета.Опрос = &Опрос - | - |УПОРЯДОЧИТЬ ПО - | Респондент, - | НомерЯчейки - |ИТОГИ ПО - | Респондент, - | НомерЯчейки"; - - Запрос.УстановитьПараметр("ВопросШаблона",ВопросШаблонаАнкеты); - Запрос.УстановитьПараметр("Опрос",Опрос); - - Возврат Запрос.Выполнить(); - -КонецФункции // ВыполнитьЗапросПоВопросуАнкеты() - -// Обрабатывает входящие параметры формы -// -// Возвращаемое значение: -// Булево - отказ от запуска формы -// &НаСервере -Функция ОбработатьВходящиеПараметры() +Функция ОбработатьВходящиеПараметры(ФормулировкиЭлементарныхВопросов) Если Параметры.Свойство("ВопросШаблонаАнкеты") Тогда ВопросШаблонаАнкеты = Параметры.ВопросШаблонаАнкеты; @@ -309,83 +314,62 @@ Возврат Истина; КонецЕсли; - Если Параметры.Свойство("Опрос") Тогда + Если Параметры.Свойство("Опрос") Тогда Опрос = Параметры.Опрос; Иначе Возврат Истина; КонецЕсли; - Если Параметры.Свойство("ПолныйКод") Тогда - ПолныйКод = Параметры.ПолныйКод; + Если Параметры.Свойство("ПолныйКод") Тогда + ПолныйКод = Параметры.ПолныйКод; Иначе Отказ = Истина; КонецЕсли; - Если Параметры.Свойство("НаименованиеОпроса") Тогда - НаименованиеОпроса = Параметры.НаименованиеОпроса; + Если Параметры.Свойство("НаименованиеОпроса") Тогда + НаименованиеОпроса = Параметры.НаименованиеОпроса; Иначе Отказ = Истина; КонецЕсли; - Если Параметры.Свойство("ДатаОпроса") Тогда - ДатаОпроса = Параметры.ДатаОпроса; + Если Параметры.Свойство("ДатаОпроса") Тогда + ДатаОпроса = Параметры.ДатаОпроса; Иначе Отказ = Истина; - КонецЕсли; + КонецЕсли; РеквизитыВопросШаблона = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ВопросШаблонаАнкеты,"ТипТабличногоВопроса,СоставТабличногоВопроса,ПредопределенныеОтветы,Формулировка"); - Формулировка = РеквизитыВопросШаблона.Формулировка; - ТипТабличногоВопроса = РеквизитыВопросШаблона.ТипТабличногоВопроса; + Формулировка = РеквизитыВопросШаблона.Формулировка; + ТипТабличногоВопроса = РеквизитыВопросШаблона.ТипТабличногоВопроса; СоставТабличногоВопроса.Загрузить(РеквизитыВопросШаблона.СоставТабличногоВопроса.Выгрузить()); ПредопределенныеОтветы.Загрузить(РеквизитыВопросШаблона.ПредопределенныеОтветы.Выгрузить()); - ПолучитьФормулировкиЭлементарныхВопросов(); + ПолучитьФормулировкиЭлементарныхВопросов(ФормулировкиЭлементарныхВопросов); - Заголовок = "Ответы на вопрос № " + ПолныйКод + " опроса " + НаименованиеОпроса + " от " + Формат(ДатаОпроса,"ДФ=dd.MM.yyyy");; + Заголовок = НСтр("ru='Ответы на вопрос № '") + ПолныйКод + НСтр("ru=' опроса '") + НаименованиеОпроса + НСтр("ru=' от '") + Формат(ДатаОпроса,"ДФ=dd.MM.yyyy"); Возврат Ложь; -КонецФункции // () - - &НаСервере - Функция ПолучитьФормулировкиЭлементарныхВопросов() - - ФормулировкиЭлементарныхВопросов = Новый Соответствие; - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ВопросыДляАнкетирования.Ссылка, - | ВопросыДляАнкетирования.Формулировка, - | ВопросыДляАнкетирования.АгрегироватьСуммуВОтчетах - |ИЗ - | ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования - |ГДЕ - | ВопросыДляАнкетирования.Ссылка В(&МассивВопросов)"; - - Запрос.УстановитьПараметр("МассивВопросов",СоставТабличногоВопроса.Выгрузить().ВыгрузитьКолонку("ЭлементарныйВопрос")); - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - ФормулировкиЭлементарныхВопросов.Вставить(Выборка.Ссылка,Выборка.Формулировка); - КонецЦикла; - - Возврат ФормулировкиЭлементарныхВопросов; - - КонецФункции // () - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +КонецФункции &НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) +Процедура ПолучитьФормулировкиЭлементарныхВопросов(ФормулировкиЭлементарныхВопросов) - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ВопросыДляАнкетирования.Ссылка, + | ВопросыДляАнкетирования.Формулировка, + | ВопросыДляАнкетирования.АгрегироватьСуммуВОтчетах + |ИЗ + | ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования + |ГДЕ + | ВопросыДляАнкетирования.Ссылка В(&МассивВопросов)"; - Отказ = ОбработатьВходящиеПараметры(); - СформироватьОтчет(); + Запрос.УстановитьПараметр("МассивВопросов",СоставТабличногоВопроса.Выгрузить().ВыгрузитьКолонку("ЭлементарныйВопрос")); + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + ФормулировкиЭлементарныхВопросов.Вставить(Выборка.Ссылка,Выборка.Формулировка); + КонецЦикла; КонецПроцедуры - diff --git a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl index 9923c70e0..79b4b6feb 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl @@ -1,19 +1,6 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ - -&НаСервере -Процедура СформироватьОтчет() - - РеквизитФормыВЗначение("Отчет").СформироватьОтчет(ТаблицаОтчета, Опрос,ВидОтчета); - РеквизитыОпрос = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(Опрос,"Наименование,Дата"); - НаименованиеОпроса = РеквизитыОпрос.Наименование; - ДатаОпроса = РеквизитыОпрос.Дата; - -КонецПроцедуры // СформироватьОтчет() - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -23,13 +10,31 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -//КОМАНДЫ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ТаблицаОтчетаОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Если Расшифровка.ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный") Тогда + ОткрытьФорму("Отчет.АнализОпроса.Форма.РасшифровкаТабличныхВопросов",Новый Структура("Опрос,ВопросШаблонаАнкеты,ПолныйКод,НаименованиеОпроса,ДатаОпроса", + Опрос,Расшифровка.ВопросШаблона,Расшифровка.ПолныйКод,НаименованиеОпроса,ДатаОпроса),ЭтаФорма); + Иначе + ОткрытьФорму("Отчет.АнализОпроса.Форма.РасшифровкаПростыхОтветов",Новый Структура("Опрос,ВопросШаблонаАнкеты,ВариантОтчета,ПолныйКод,НаименованиеОпроса,ДатаОпроса", + Опрос,Расшифровка.ВопросШаблона,"Респонденты",Расшифровка.ПолныйКод,НаименованиеОпроса,ДатаОпроса),ЭтаФорма); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура Сформировать(Команда) Если Опрос.Пустая() Тогда - Возврат; + Возврат; КонецЕсли; СформироватьОтчет(); @@ -37,20 +42,17 @@ КонецПроцедуры -////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -&НаКлиенте -Процедура ТаблицаОтчетаОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) +&НаСервере +Процедура СформироватьОтчет() - СтандартнаяОбработка = Ложь; + РеквизитФормыВЗначение("Отчет").СформироватьОтчет(ТаблицаОтчета, Опрос,ВидОтчета); + РеквизитыОпрос = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(Опрос,"Наименование,Дата"); + НаименованиеОпроса = РеквизитыОпрос.Наименование; + ДатаОпроса = РеквизитыОпрос.Дата; - Если Расшифровка.ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный") Тогда - ОткрытьФорму("Отчет.АнализОпроса.Форма.РасшифровкаТабличныхВопросов",Новый Структура("Опрос,ВопросШаблонаАнкеты,ПолныйКод,НаименованиеОпроса,ДатаОпроса", - Опрос,Расшифровка.ВопросШаблона,Расшифровка.ПолныйКод,НаименованиеОпроса,ДатаОпроса),ЭтаФорма); - Иначе - ОткрытьФорму("Отчет.АнализОпроса.Форма.РасшифровкаПростыхОтветов",Новый Структура("Опрос,ВопросШаблонаАнкеты,ВариантОтчета,ПолныйКод,НаименованиеОпроса,ДатаОпроса", - Опрос,Расшифровка.ВопросШаблона,"Респонденты",Расшифровка.ПолныйКод,НаименованиеОпроса,ДатаОпроса),ЭтаФорма); - КонецЕсли; - -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + + diff --git a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl index 2e0397e5f..75eb164e8 100644 --- a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl +++ b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl @@ -1,20 +1,21 @@ -Перем ПредставленияВопросов; // содержит представления элементарных вопросов табличных вопросов. +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Формирует табличный документ отчет // // Параметры -// ТаблицаОтчета - ТабличныйДокумент - +// ТаблицаОтчета - ТабличныйДокумент - // Опрос - ДокументСсылка.НазначениеОпросов - Опрос, по которому формируется отчет // Процедура СформироватьОтчет(ТаблицаОтчета,Опрос,ВидОтчета) Экспорт ТаблицаОтчета.Очистить(); - Если ВидОтчета = "Анализ ответов" Тогда + Если ВидОтчета = НСтр("ru='Анализ ответов'") Тогда СформироватьОтчетАнализОтветов(ТаблицаОтчета,Опрос); - ИначеЕсли ВидОтчета = "Анализ ответивших" Тогда + ИначеЕсли ВидОтчета = НСтр("ru='Анализ ответивших'") Тогда СформироватьОтчетАнализОтветивших(ТаблицаОтчета,Опрос); @@ -22,34 +23,12 @@ Возврат; - КонецЕсли; - -КонецПроцедуры // - -////////////////////////////////////////////////////////////////////////////////////////////////// -// Общие процедуры и функции видов отчета - -// Формирует представление опроса для заголовка отчёта -Функция ПолучитьПредставлениеОпросаДляЗаголовка(РеквизитыОпрос) - - ПредставлениеОпросаДляЗаголовка = НСтр("ru='Опрос '"); - Если РеквизитыОпрос.ДатаНачала <> Дата(1,1,1) ИЛИ РеквизитыОпрос.ДатаОкончания <> Дата(1,1,1) Тогда - ПредставлениеОпросаДляЗаголовка = ПредставлениеОпросаДляЗаголовка + НСтр("ru='проводился в период '"); КонецЕсли; - - Если РеквизитыОпрос.ДатаНачала <> Дата(1,1,1) Тогда - ПредставлениеОпросаДляЗаголовка = ПредставлениеОпросаДляЗаголовка + НСтр("ru='с '") + Формат(РеквизитыОпрос.ДатаНачала,"ДФ=dd.MM.yy") + " "; - КонецЕсли; - - Если РеквизитыОпрос.ДатаОкончания <> Дата(1,1,1) Тогда - ПредставлениеОпросаДляЗаголовка = ПредставлениеОпросаДляЗаголовка + НСтр("ru = 'по '") + Формат(РеквизитыОпрос.ДатаОкончания,"ДФ=dd.MM.yy")+ " "; - КонецЕсли; - - ПредставлениеОпросаДляЗаголовка = ПредставлениеОпросаДляЗаголовка + НСтр("ru = 'на основании документа '") + РеквизитыОпрос.Представление + "."; - Возврат ПредставлениеОпросаДляЗаголовка; +КонецПроцедуры -КонецФункции // () +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ /////////////////////////////////////////////////////////////////////////////////////////////////// // Анализ ответов @@ -61,15 +40,15 @@ ПредставленияВопросов = Анкетирование.ПолучитьПредставленияЭлементарныхВопросовТабличногоВопроса(ШаблонАнкеты); РезультатЗапроса = ВыполнитьЗапросПоВопросамШаблонаАнкеты(Опрос,ШаблонАнкеты); - Если РезультатЗапроса.Пустой() Тогда + Если РезультатЗапроса.Пустой() Тогда Возврат; КонецЕсли; - Макет = ПолучитьМакет("МакетОтветы"); + Макет = ПолучитьМакет("МакетОтветы"); Область = Макет.ПолучитьОбласть("Заголовок"); Область.Параметры.Заголовок = ШаблонАнкеты.Заголовок; - Область.Параметры.Опрос = ПолучитьПредставлениеОпросаДляЗаголовка(РеквизитыОпрос); + Область.Параметры.Опрос = ПолучитьПредставлениеОпросаДляЗаголовка(РеквизитыОпрос); ТаблицаОтчета.Вывести(Область,1); Область = Макет.ПолучитьОбласть("ПустаяСтрока"); @@ -84,25 +63,25 @@ ТаблицаОтчета.Вывести(Область,1); ДеревоАнкеты = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); - Если ДеревоАнкеты.Строки.Количество() > 0 Тогда - ВывестиВТабличныйДокумент(ДеревоАнкеты.Строки,ТаблицаОтчета,Макет,1,Новый Массив); - КонецЕсли; + Если ДеревоАнкеты.Строки.Количество() > 0 Тогда + ВывестиВТабличныйДокумент(ДеревоАнкеты.Строки,ТаблицаОтчета,Макет,1,Новый Массив, ПредставленияВопросов); + КонецЕсли; КонецПроцедуры // Вызывается рекурсивно, формирует полный код, и вызывает процедуры вывода вопросов и разделов . // // Параметры -// СтрокиДерева - СтрокиДереваЗначений - -// ТаблицаОтчета - ТабличныйДокумент - -// Макет - Макет - -// УровеньРекурсии - Число - -// МассивПолныйКод - Массив - +// СтрокиДерева - СтрокиДереваЗначений - +// ТаблицаОтчета - ТабличныйДокумент - +// Макет - Макет - +// УровеньРекурсии - Число - +// МассивПолныйКод - Массив - // -Процедура ВывестиВТабличныйДокумент(СтрокиДерева,ТаблицаОтчета,Макет,УровеньРекурсии,МассивПолныйКод) +Процедура ВывестиВТабличныйДокумент(СтрокиДерева,ТаблицаОтчета,Макет,УровеньРекурсии,МассивПолныйКод, ПредставленияВопросов) Если МассивПолныйКод.Количество() < УровеньРекурсии Тогда - МассивПолныйКод.Добавить(0); + МассивПолныйКод.Добавить(0); КонецЕсли; Для каждого СтрокаДерева Из СтрокиДерева Цикл @@ -116,27 +95,27 @@ ПолныйКод = АнкетированиеКлиентСервер.УдалитьПоследниеСимволыИзСтроки(ПолныйКод,"0.","."); - Если СтрокаДерева.ЭтоРаздел Тогда + Если СтрокаДерева.ЭтоРаздел Тогда ВывестиРаздел(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод); Если СтрокаДерева.Строки.Количество() > 0 Тогда - ВывестиВТабличныйДокумент(СтрокаДерева.Строки,ТаблицаОтчета,Макет,УровеньРекурсии + 1,МассивПолныйКод); - КонецЕсли - Иначе - ВывестиВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод); + ВывестиВТабличныйДокумент(СтрокаДерева.Строки,ТаблицаОтчета,Макет,УровеньРекурсии + 1,МассивПолныйКод,ПредставленияВопросов); + КонецЕсли + Иначе + ВывестиВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод, ПредставленияВопросов); КонецЕсли; ТаблицаОтчета.ЗакончитьГруппуСтрок(); - КонецЦикла; + КонецЦикла; -КонецПроцедуры // () +КонецПроцедуры // Выводит в таблицу отчета раздел. // // Параметры -// ТаблицаОтчета - ТабличныйДокумент - -// СтрокаДерева - СтрокаДереваЗначений - -// Макет - Макет - -// Полный код - Строка +// ТаблицаОтчета - ТабличныйДокумент - +// СтрокаДерева - СтрокаДереваЗначений - +// Макет - Макет - +// Полный код - Строка // Процедура ВывестиРаздел(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод) @@ -150,12 +129,12 @@ // Выводит в таблицу отчета вопрос, и вызывает соответствующие процедуры, в зависимости от типа вопроса. // // Параметры -// ТаблицаОтчета - ТабличныйДокумент - -// СтрокаДерева - СтрокаДереваЗначений - -// Макет - Макет - -// Полный код - Строка +// ТаблицаОтчета - ТабличныйДокумент - +// СтрокаДерева - СтрокаДереваЗначений - +// Макет - Макет - +// Полный код - Строка // -Процедура ВывестиВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод) +Процедура ВывестиВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод, ПредставленияВопросов) Область = Макет.ПолучитьОбласть("Вопрос"); Область.Параметры.ФормулировкаВопроса = ПолныйКод + " " + СтрокаДерева.Наименование; @@ -166,55 +145,55 @@ Если СтрокаДерева.ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.Табличный Тогда - ВывестиОтветТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод); + ВывестиОтветТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод,ПредставленияВопросов); Иначе ВывестиОтветПростойВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод); - КонецЕсли; + КонецЕсли; - КонецЕсли; + КонецЕсли; КонецПроцедуры // Вызывает соответствующие процедуры в зависимости от типа табличного вопроса. // // Параметры -// ТаблицаОтчета - ТабличныйДокумент - -// СтрокаДерева - СтрокаДереваЗначений - -// Макет - Макет - +// ТаблицаОтчета - ТабличныйДокумент - +// СтрокаДерева - СтрокаДереваЗначений - +// Макет - Макет - // -Процедура ВывестиОтветТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод) +Процедура ВывестиОтветТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод, ПредставленияВопросов) Если СтрокаДерева.ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.Составной Тогда - ВывестиОтветСоставнойТабличныйВопрос(ТаблицаОтчета,СтрокаДерева.Строки[0],Макет,ПолныйКод); + ВывестиОтветСоставнойТабличныйВопрос(ТаблицаОтчета,СтрокаДерева.Строки[0],Макет,ПолныйКод, ПредставленияВопросов); - ИначеЕсли СтрокаДерева.ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках Тогда + ИначеЕсли СтрокаДерева.ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВКолонках Тогда - ВывестиОтветПредопределенныеОтветыВКолонкахТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод); + ВывестиОтветПредопределенныеОтветыВКолонкахТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод,ПредставленияВопросов); - ИначеЕсли СтрокаДерева.ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках Тогда + ИначеЕсли СтрокаДерева.ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтроках Тогда - ВывестиОтветПредопределенныеОтветыВСтрокахТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод); + ВывестиОтветПредопределенныеОтветыВСтрокахТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод,ПредставленияВопросов); - ИначеЕсли СтрокаДерева.ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках Тогда + ИначеЕсли СтрокаДерева.ТипТабличногоВопроса = Перечисления.ТипыТабличныхВопросов.ПредопределенныеОтветыВСтрокахИКолонках Тогда - ВывестиОтветПредопределенныеОтветыВСтрокахИКолонкахТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод); + ВывестиОтветПредопределенныеОтветыВСтрокахИКолонкахТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод, ПредставленияВопросов); - КонецЕсли; + КонецЕсли; КонецПроцедуры // Выводит в таблицу отчета ответы табличного вопроса с предопределенными ответами в колонках. // // Параметры -// ТаблицаОтчета - ТабличныйДокумент - -// СтрокаДерева - СтрокаДереваЗначений - -// Макет - Макет - -// -Процедура ВывестиОтветПредопределенныеОтветыВКолонкахТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод) +// ТаблицаОтчета - ТабличныйДокумент - +// СтрокаДерева - СтрокаДереваЗначений - +// Макет - Макет - +// +Процедура ВывестиОтветПредопределенныеОтветыВКолонкахТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод,ПредставленияВопросов) СтрокаДереваДетали = СтрокаДерева.Строки[0]; @@ -232,7 +211,7 @@ Область.Параметры.Значение = Ответ.Ответ; ТаблицаОтчета.Присоединить(Область); - КонецЦикла; + КонецЦикла; Для ИндексСтрок = 2 По СтрокаДереваДетали.СоставТабличногоВопроса.Количество() Цикл @@ -260,13 +239,13 @@ Если НайденнаяСтрока.ВариантОтвета = Истина Тогда Область.Параметры.Значение = НайденнаяСтрока.Количество; Область.Параметры.Расшифровка = Новый Структура("ВопросШаблона,ТипВопроса,ПолныйКод",СтрокаДерева.ВопросШаблона,СтрокаДерева.ТипВопроса,ПолныйКод); - КонецЕсли; + КонецЕсли; КонецЦикла; - КонецЕсли; + КонецЕсли; КонецЕсли; ТаблицаОтчета.Присоединить(Область); - КонецЦикла; + КонецЦикла; КонецЦикла; @@ -275,11 +254,11 @@ // Выводит в таблицу отчета ответы табличного вопроса с предопределенными ответами в строках. // // Параметры -// ТаблицаОтчета - ТабличныйДокумент - -// СтрокаДерева - СтрокаДереваЗначений - -// Макет - Макет - -// -Процедура ВывестиОтветПредопределенныеОтветыВСтрокахТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод) +// ТаблицаОтчета - ТабличныйДокумент - +// СтрокаДерева - СтрокаДереваЗначений - +// Макет - Макет - +// +Процедура ВывестиОтветПредопределенныеОтветыВСтрокахТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод,ПредставленияВопросов) ПерваяКолонка = Истина; СтрокаДереваДетали = СтрокаДерева.Строки[0]; @@ -291,7 +270,7 @@ Если ПерваяКолонка Тогда Область = Макет.ПолучитьОбласть("Отступ"); ТаблицаОтчета.Вывести(Область); - ПерваяКолонка = Ложь; + ПерваяКолонка = Ложь; КонецЕсли; Область = Макет.ПолучитьОбласть("ЭлементШапкиТабличногоВопроса"); @@ -333,15 +312,15 @@ Если НайденнаяСтрока.ВариантОтвета = Истина Тогда Область.Параметры.Значение = НайденнаяСтрока.Количество; Область.Параметры.Расшифровка = Новый Структура("ВопросШаблона,ТипВопроса,ПолныйКод",СтрокаДереваДетали.ВопросШаблона,СтрокаДереваДетали.ТипВопроса,ПолныйКод); - КонецЕсли; + КонецЕсли; КонецЦикла; - КонецЕсли; + КонецЕсли; КонецЕсли; ТаблицаОтчета.Присоединить(Область); - КонецЕсли; + КонецЕсли; - КонецЦикла; + КонецЦикла; КонецЦикла; КонецПроцедуры @@ -349,19 +328,19 @@ // Выводит в таблицу отчета ответы табличного вопроса с предопределенными ответами в строках и колонках. // // Параметры -// ТаблицаОтчета - ТабличныйДокумент - -// СтрокаДерева - СтрокаДереваЗначений - -// Макет - Макет - -// -Процедура ВывестиОтветПредопределенныеОтветыВСтрокахИКолонкахТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод) +// ТаблицаОтчета - ТабличныйДокумент - +// СтрокаДерева - СтрокаДереваЗначений - +// Макет - Макет - +// +Процедура ВывестиОтветПредопределенныеОтветыВСтрокахИКолонкахТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод, ПредставленияВопросов) - СтрокаДереваДетали = СтрокаДерева.Строки[0]; + СтрокаДереваДетали = СтрокаДерева.Строки[0]; СтрокаДереваДетали.ПредопределенныеОтветы.Сортировать("НомерСтроки Возр"); СтрокаДереваДетали.СоставТабличногоВопроса.Сортировать("НомерСтроки Возр"); Если СтрокаДереваДетали.СоставТабличногоВопроса.Количество() <> 3 Тогда - Возврат; + Возврат; КонецЕсли; АгрегироватьСуммуВОтчетах = ПредставленияВопросов.Получить(СтрокаДереваДетали.СоставТабличногоВопроса[2].ЭлементарныйВопрос).АгрегироватьСуммуВОтчетах; @@ -385,7 +364,7 @@ Область.Параметры.Значение = Ответ.Ответ; ТаблицаОтчета.Присоединить(Область); - КонецЦикла; + КонецЦикла; Для ИндексСтроки = 1 По ОтветыСтроки.Количество() Цикл @@ -407,31 +386,31 @@ Если НайденныеСтроки.Количество() > 0 Тогда Если ТипЗнч(НайденныеСтроки[0].ВариантОтвета) <> Тип("Булево") Тогда Область.Параметры.Значение = АгрегатныеЗначенияВСтроку(НайденныеСтроки[0],АгрегироватьСуммуВОтчетах); - Область.Параметры.Расшифровка = Новый Структура("ВопросШаблона,ТипВопроса,ПолныйКод",СтрокаДерева.ВопросШаблона,СтрокаДерева.ТипВопроса,ПолныйКод); + Область.Параметры.Расшифровка = Новый Структура("ВопросШаблона,ТипВопроса,ПолныйКод",СтрокаДерева.ВопросШаблона,СтрокаДерева.ТипВопроса,ПолныйКод); Иначе Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл Если НайденнаяСтрока.ВариантОтвета = Истина Тогда Область.Параметры.Значение = НайденнаяСтрока.Количество; Область.Параметры.Расшифровка = Новый Структура("ВопросШаблона,ТипВопроса",СтрокаДерева.ВопросШаблона,СтрокаДерева.ТипВопроса,ПолныйКод); - КонецЕсли; + КонецЕсли; КонецЦикла; - КонецЕсли; + КонецЕсли; КонецЕсли; - ТаблицаОтчета.Присоединить(Область); + ТаблицаОтчета.Присоединить(Область); КонецЦикла; - КонецЦикла; + КонецЦикла; -КонецПроцедуры +КонецПроцедуры // Выводит в таблицу отчета ответы составного табличного вопроса. // // Параметры -// ТаблицаОтчета - ТабличныйДокумент - -// СтрокаДерева - СтрокаДереваЗначений - -// Макет - Макет - -// -Процедура ВывестиОтветСоставнойТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод) +// ТаблицаОтчета - ТабличныйДокумент - +// СтрокаДерева - СтрокаДереваЗначений - +// Макет - Макет - +// +Процедура ВывестиОтветСоставнойТабличныйВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод, ПредставленияВопросов) ПерваяКолонка = Истина; @@ -441,7 +420,7 @@ Если ПерваяКолонка Тогда Область = Макет.ПолучитьОбласть("Отступ"); ТаблицаОтчета.Вывести(Область); - ПерваяКолонка = Ложь; + ПерваяКолонка = Ложь; КонецЕсли; Область = Макет.ПолучитьОбласть("ЭлементШапкиТабличногоВопроса"); @@ -459,14 +438,14 @@ Если ПерваяКолонка Тогда Область = Макет.ПолучитьОбласть("Отступ"); ТаблицаОтчета.Вывести(Область); - ПерваяКолонка = Ложь; + ПерваяКолонка = Ложь; КонецЕсли; Область = Макет.ПолучитьОбласть("ЯчейкаТабличногоВопроса"); Область.Параметры.Расшифровка = Новый Структура("ВопросШаблона,ТипВопроса,ПолныйКод",СтрокаДерева.ВопросШаблона,СтрокаДерева.ТипВопроса,ПолныйКод); - ТаблицаОтчета.Присоединить(Область); + ТаблицаОтчета.Присоединить(Область); - КонецЦикла; + КонецЦикла; КонецЦикла; КонецПроцедуры @@ -474,10 +453,10 @@ // Выводит в таблицу отчета ответ простого вопроса. // // Параметры -// ТаблицаОтчета - ТабличныйДокумент - -// СтрокаДерева - СтрокаДереваЗначений - -// Макет - Макет - -// +// ТаблицаОтчета - ТабличныйДокумент - +// СтрокаДерева - СтрокаДереваЗначений - +// Макет - Макет - +// Процедура ВывестиОтветПростойВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод) СтрокаДереваДетали = СтрокаДерева.Строки[0]; @@ -488,23 +467,23 @@ ВывестиОтветВариантыОтвета(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод); - Иначе + Иначе Область = Макет.ПолучитьОбласть("ОтветПростогоВопроса"); Область.Параметры.Значение = АгрегатныеЗначенияВСтроку(СтрокаДереваДетали); Область.Параметры.Расшифровка = Новый Структура("ВопросШаблона,ТипВопроса,ПолныйКод",СтрокаДерева.ВопросШаблона,СтрокаДерева.ТипВопроса,ПолныйКод); ТаблицаОтчета.Вывести(Область); - КонецЕсли; + КонецЕсли; КонецПроцедуры // Выводит в таблицу отчета варианты ответов для вопросов с типом Булево, ОдинВариантИз,НесколькоВариантовИз // // Параметры -// ТаблицаОтчета - ТабличныйДокумент - -// СтрокаДерева - СтрокаДереваЗначений - -// Макет - Макет - +// ТаблицаОтчета - ТабличныйДокумент - +// СтрокаДерева - СтрокаДереваЗначений - +// Макет - Макет - // Процедура ВывестиОтветВариантыОтвета(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод) @@ -512,7 +491,7 @@ Если СтрокаДерева.Строки[0].ТипОтвета = Перечисления.ТипыОтветовНаВопрос.Булево Тогда Область = Макет.ПолучитьОбласть("ВариантыОтветов"); - Область.Параметры.ВариантОтвета = "Да"; + Область.Параметры.ВариантОтвета = НСтр("ru='Да'"); НайденнаяСтрока = СтрокаДерева.Строки.Найти(Истина,"ВариантОтвета"); Если НайденнаяСтрока <> Неопределено Тогда Область.Параметры.Значение = НайденнаяСтрока.Количество; @@ -521,13 +500,13 @@ ТаблицаОтчета.Вывести(Область); Область = Макет.ПолучитьОбласть("ВариантыОтветов"); - Область.Параметры.ВариантОтвета = "Нет"; + Область.Параметры.ВариантОтвета = НСтр("ru='Нет'"); НайденнаяСтрока = СтрокаДерева.Строки.Найти(ЛОЖЬ,"ВариантОтвета"); Если НайденнаяСтрока <> Неопределено Тогда Область.Параметры.Значение = НайденнаяСтрока.Количество; Область.Параметры.Расшифровка = Новый Структура("ВопросШаблона,ТипВопроса,ПолныйКод",СтрокаДерева.ВопросШаблона,СтрокаДерева.ТипВопроса,ПолныйКод); КонецЕсли; - ТаблицаОтчета.Вывести(Область); + ТаблицаОтчета.Вывести(Область); Иначе @@ -539,7 +518,7 @@ Область.Параметры.Расшифровка = Новый Структура("ВопросШаблона,ТипВопроса,ПолныйКод",СтрокаДерева.ВопросШаблона,СтрокаДерева.ТипВопроса,ПолныйКод); ТаблицаОтчета.Вывести(Область); - КонецЦикла; + КонецЦикла; КонецЕсли; КонецПроцедуры @@ -550,10 +529,10 @@ // Опрос - ДокументСсылка.НазначениеОпросов - Опрос, по которому строится запрос // ШаблонАнкеты - СправочникСсылка.ШаблоныАнкет, по которому проводился опрос // -// Возвращаемое значение: +// Возвращаемое значение: // РезультатЗапроса - результат выполненного запроса // -Функция ВыполнитьЗапросПоВопросамШаблонаАнкеты(Опрос,ШаблонАнкеты) +Функция ВыполнитьЗапросПоВопросамШаблонаАнкеты(Опрос,ШаблонАнкеты) Запрос = Новый Запрос; Запрос.Текст = @@ -851,7 +830,7 @@ Возврат Запрос.Выполнить(); -КонецФункции // () +КонецФункции //Преобразует агрегатные значения запроса в строку, для дальнейшего вывода в отчет // @@ -859,6 +838,7 @@ //СтрокаДерева - строка дерева значений - строка дерева, данные которой будут преобразованы // //Возвращаемое значение - Строка - строка, предназначенная для вывод в отчет +// Функция АгрегатныеЗначенияВСтроку(СтрокаДерева,АгрегироватьСуммуВОтчетах = Неопределено) Если ТипЗнч(СтрокаДерева.Максимум) = Тип("Дата") Тогда @@ -873,21 +853,21 @@ Минимум = Формат(ОКР(СтрокаДерева.Минимум,2),"ЧРД=."); КонецЕсли; - Количество = Формат(СтрокаДерева.Количество,"ЧРД=."); - Среднее = Формат(ОКР(СтрокаДерева.Среднее,2),"ЧРД=."); - Сумма = Формат(ОКР(СтрокаДерева.Сумма,2),"ЧРД=."); + Количество = Формат(СтрокаДерева.Количество,"ЧРД=."); + Среднее = Формат(ОКР(СтрокаДерева.Среднее,2),"ЧРД=."); + Сумма = Формат(ОКР(СтрокаДерева.Сумма,2),"ЧРД=."); - СтрокаСлеш = " / "; + СтрокаСлеш = " / "; СтрокаВозврата = "" + ?(ПустаяСтрока(Количество),"",Количество) + Символы.ПС + ?(ПустаяСтрока(Минимум),"",Минимум + СтрокаСлеш)+ ?(ПустаяСтрока(Максимум),"",Максимум + СтрокаСлеш) + ?(ПустаяСтрока(Среднее),"",Среднее)+ ?(?(АгрегироватьСуммуВОтчетах = Неопределено,СтрокаДерева.АгрегироватьСуммуВОтчетах,АгрегироватьСуммуВОтчетах),Символы.ПС + ?(ПустаяСтрока(Сумма) = "∑ 0","","∑ " + Сумма),""); - АнкетированиеКлиентСервер.УдалитьПоследниеСимволыИзСтроки(СтрокаВозврата,СтрокаСлеш); + АнкетированиеКлиентСервер.УдалитьПоследниеСимволыИзСтроки(СтрокаВозврата,СтрокаСлеш); - Возврат СтрокаВозврата; + Возврат СтрокаВозврата; -КонецФункции // () +КонецФункции /////////////////////////////////////////////////////////////////////////////////////////////////// // Анализ ответивших @@ -895,20 +875,20 @@ // Формирует отчет в варианте анализа ответивших // // Параметры -// ТаблицаОтчета - ТабличныйДокумент - табличный документ в который выводится отчет -// Опрос - Документ.НазначениеОпросов - опрос, для которого строится отчет -// +// ТаблицаОтчета - ТабличныйДокумент - табличный документ в который выводится отчет +// Опрос - Документ.НазначениеОпросов - опрос, для которого строится отчет +// Процедура СформироватьОтчетАнализОтветивших(ТаблицаОтчета,Опрос) РеквизитыОпрос = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(Опрос,"ШаблонАнкеты,ТипРеспондентов,СвободныйОпрос,ДатаНачала,ДатаОкончания,Представление"); Если РеквизитыОпрос.СвободныйОпрос Тогда - РезультатЗапроса = ВыполнитьЗапросПоОтветившимСвободныйОпрос(Опрос, РеквизитыОпрос.ТипРеспондентов); + РезультатЗапроса = ВыполнитьЗапросПоОтветившимСвободныйОпрос(Опрос, РеквизитыОпрос.ТипРеспондентов); Иначе - РезультатЗапроса = ВыполнитьЗапросПоОтветившимОпросСОпределеннымСоставомРеспондентов(Опрос); + РезультатЗапроса = ВыполнитьЗапросПоОтветившимОпросСОпределеннымСоставомРеспондентов(Опрос); КонецЕсли; - Если РезультатЗапроса.Пустой() Тогда - Возврат; + Если РезультатЗапроса.Пустой() Тогда + Возврат; КонецЕсли; ВывестиРезультатЗапросаОтветившиеВТабличныйДокумент(РезультатЗапроса,РеквизитыОпрос,ТаблицаОтчета); @@ -919,12 +899,12 @@ // // Параметры // РезультатЗапроса - РезультатЗапроса - результат выполненного запроса -// РеквизитыОпрос - Структура - содержит значения необходимых реквизитов НазначениеОпроса +// РеквизитыОпрос - Структура - содержит значения необходимых реквизитов НазначениеОпроса // ТаблицаОтчета - ТабличныйДокумент - табличный документ в который выводится отчет // Процедура ВывестиРезультатЗапросаОтветившиеВТабличныйДокумент(РезультатЗапроса,РеквизитыОпрос,ТаблицаОтчета) - - Макет = ПолучитьМакет("МакетОтветившие"); + + Макет = ПолучитьМакет("МакетОтветившие"); Область = Макет.ПолучитьОбласть("Заголовок"); Область.Параметры.Заголовок = РеквизитыОпрос.ШаблонАнкеты.Заголовок; @@ -939,11 +919,11 @@ ВыборкаОтветил = ВыборкаОбщиеИтоги.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаОтветил.Следующий() Цикл - ВывестиСтрокуОтветившиеВТабличныйДокумент(ВыборкаОтветил,Макет,ТаблицаОтчета,"ИтогОтветил"); + ВывестиСтрокуОтветившиеВТабличныйДокумент(ВыборкаОтветил,Макет,ТаблицаОтчета,"ИтогОтветил"); ТаблицаОтчета.НачатьГруппуСтрок("ОтветилИтог"); ВыборкаДетали = ВыборкаОтветил.Выбрать(); Пока ВыборкаДетали.Следующий() Цикл - ВывестиСтрокуОтветившиеВТабличныйДокумент(ВыборкаДетали,Макет,ТаблицаОтчета,"Респондент"); + ВывестиСтрокуОтветившиеВТабличныйДокумент(ВыборкаДетали,Макет,ТаблицаОтчета,"Респондент"); КонецЦикла; ТаблицаОтчета.ЗакончитьГруппуСтрок(); КонецЦикла; @@ -955,10 +935,10 @@ // Выводит строку в табличный документ // // Параметры -// Выборка - ВыборкаИзРезультатаЗапроса - выборка, в которой содержатся данные выводимые в отчет -// Макет - ТабличныйДокумент - табличный документ, в котором находится макет отчета -// ТаблицаОтчета - ТабличныйДокумент - табличный документ, в который осуществляется вывод -// ИмяОбласти - Строка - имя области макета,которая будет использована для вывода +// Выборка - ВыборкаИзРезультатаЗапроса - выборка, в которой содержатся данные выводимые в отчет +// Макет - ТабличныйДокумент - табличный документ, в котором находится макет отчета +// ТаблицаОтчета - ТабличныйДокумент - табличный документ, в который осуществляется вывод +// ИмяОбласти - Строка - имя области макета,которая будет использована для вывода // Процедура ВывестиСтрокуОтветившиеВТабличныйДокумент(Выборка,Макет,ТаблицаОтчета,ИмяОбласти); @@ -967,134 +947,167 @@ Область.Параметры.Количество = Выборка.Респондент; ИначеЕсли Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда Область.Параметры.Количество = Выборка.Респондент; - Область.Параметры.Ответил = Выборка.Отвечал; + Область.Параметры.Ответил = Выборка.Отвечал; Иначе Область.Параметры.Респондент = Выборка.Респондент; КонецЕсли; - ТаблицаОтчета.Вывести(Область); + ТаблицаОтчета.Вывести(Область); КонецПроцедуры +// Формирует и выполняет запрос, для свободных опросов +// +// Параметры +// Опрос - Документ.НазначениеОпросов - опрос, для которого строится отчет +// Возвращаемое значение: +// РезультатЗапроса - результат выполненного запроса +// +Функция ВыполнитьЗапросПоОтветившимОпросСОпределеннымСоставомРеспондентов(Опрос) + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | Анкета.Респондент, + | Анкета.Проведен + |ПОМЕСТИТЬ ОтветившиеРеспонденты + |ИЗ + | Документ.Анкета КАК Анкета + |ГДЕ + | Анкета.Опрос = &Опрос + | И (НЕ Анкета.ПометкаУдаления) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВЫБОР + | КОГДА ОтветившиеРеспонденты.Респондент ЕСТЬ NULL + | ТОГДА &НеЗаполнял + | ИНАЧЕ ВЫБОР + | КОГДА ОтветившиеРеспонденты.Проведен + | ТОГДА &Заполнил + | ИНАЧЕ &НачалЗаполнять + | КОНЕЦ + | КОНЕЦ КАК Отвечал, + | НазначениеОпросовРеспонденты.Респондент КАК Респондент + |ИЗ + | Документ.НазначениеОпросов.Респонденты КАК НазначениеОпросовРеспонденты + | ЛЕВОЕ СОЕДИНЕНИЕ ОтветившиеРеспонденты КАК ОтветившиеРеспонденты + | ПО (ОтветившиеРеспонденты.Респондент = НазначениеОпросовРеспонденты.Респондент) + |ГДЕ + | НазначениеОпросовРеспонденты.Ссылка = &Опрос + | + |УПОРЯДОЧИТЬ ПО + | Отвечал, + | Респондент + |ИТОГИ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Респондент) + |ПО + | ОБЩИЕ, + | Отвечал"; + + Запрос.УстановитьПараметр("Опрос",Опрос); + Запрос.УстановитьПараметр("Заполнил",НСтр("ru = 'Заполнил'")); + Запрос.УстановитьПараметр("НачалЗаполнять",НСтр("ru = 'Начал заполнять'")); + Запрос.УстановитьПараметр("НеЗаполнял",НСтр("ru = 'Не заполнял'")); + + Возврат Запрос.Выполнить(); + +КонецФункции // Формирует и выполняет запрос, для свободных опросов // // Параметры -// Опрос - Документ.НазначениеОпросов - опрос, для которого строится отчет -// Возвращаемое значение: -// РезультатЗапроса - результат выполненного запроса -// -Функция ВыполнитьЗапросПоОтветившимОпросСОпределеннымСоставомРеспондентов(Опрос) - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ - | Анкета.Респондент, - | Анкета.Проведен - |ПОМЕСТИТЬ ОтветившиеРеспонденты - |ИЗ - | Документ.Анкета КАК Анкета - |ГДЕ - | Анкета.Опрос = &Опрос - | И (НЕ Анкета.ПометкаУдаления) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВЫБОР - | КОГДА ОтветившиеРеспонденты.Респондент ЕСТЬ NULL - | ТОГДА ""Не заполнял"" - | ИНАЧЕ ВЫБОР - | КОГДА ОтветившиеРеспонденты.Проведен - | ТОГДА ""Заполнил"" - | ИНАЧЕ ""Начал заполнять"" - | КОНЕЦ - | КОНЕЦ КАК Отвечал, - | НазначениеОпросовРеспонденты.Респондент КАК Респондент - |ИЗ - | Документ.НазначениеОпросов.Респонденты КАК НазначениеОпросовРеспонденты - | ЛЕВОЕ СОЕДИНЕНИЕ ОтветившиеРеспонденты КАК ОтветившиеРеспонденты - | ПО (ОтветившиеРеспонденты.Респондент = НазначениеОпросовРеспонденты.Респондент) - |ГДЕ - | НазначениеОпросовРеспонденты.Ссылка = &Опрос - | - |УПОРЯДОЧИТЬ ПО - | Отвечал, - | Респондент - |ИТОГИ - | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Респондент) - |ПО - | ОБЩИЕ, - | Отвечал"; - - Запрос.УстановитьПараметр("Опрос",Опрос); - - Возврат Запрос.Выполнить(); - - КонецФункции - - -// Формирует и выполняет запрос, для свободных опросов -// -// Параметры -// Опрос - Документ.НазначениеОпросов - опрос, для которого строится отчет -// ТипРеспондентов - СправочникСсылка - пустая ссылка на справочник, элементы которого являются -// респондентами для данного опроса +// Опрос - Документ.НазначениеОпросов - опрос, для которого строится отчет +// ТипРеспондентов - СправочникСсылка - пустая ссылка на справочник, элементы которого являются +// респондентами для данного опроса // Возвращаемое значение: // РезультатЗапроса - результат выполненного запроса // - Функция ВыполнитьЗапросПоОтветившимСвободныйОпрос(Опрос,ТипРеспондентов) - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ТаблицаСправочника.Ссылка - |ПОМЕСТИТЬ ДанныеСправочника - |ИЗ - | " + ТипРеспондентов.Метаданные().ПолноеИмя() + " КАК ТаблицаСправочника - |ГДЕ - | (НЕ ТаблицаСправочника.ПометкаУдаления) - | " + ?(ТипРеспондентов.Метаданные().Иерархический," И (НЕ ТаблицаСправочника.ЭтоГруппа)","") + " - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Анкета.Респондент, - | Анкета.Проведен - |ПОМЕСТИТЬ ОтветившиеРеспонденты - |ИЗ - | Документ.Анкета КАК Анкета - |ГДЕ - | (НЕ Анкета.ПометкаУдаления) - | И Анкета.Опрос = &Опрос - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВЫБОР - | КОГДА ОтветившиеРеспонденты.Респондент ЕСТЬ NULL - | ТОГДА ""Не заполнял"" - | ИНАЧЕ ВЫБОР - | КОГДА ОтветившиеРеспонденты.Проведен - | ТОГДА ""Заполнил"" - | ИНАЧЕ ""Начал заполнять"" - | КОНЕЦ - | КОНЕЦ КАК Отвечал, - | ДанныеСправочника.Ссылка КАК Респондент - |ИЗ - | ДанныеСправочника КАК ДанныеСправочника - | ЛЕВОЕ СОЕДИНЕНИЕ ОтветившиеРеспонденты КАК ОтветившиеРеспонденты - | ПО ДанныеСправочника.Ссылка = ОтветившиеРеспонденты.Респондент - | - |УПОРЯДОЧИТЬ ПО - | Отвечал, - | Респондент - |ИТОГИ - | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Респондент) - |ПО - | ОБЩИЕ, - | Отвечал"; - - Запрос.УстановитьПараметр("Опрос",Опрос); - - Возврат Запрос.Выполнить(); - - КонецФункции // () - +Функция ВыполнитьЗапросПоОтветившимСвободныйОпрос(Опрос,ТипРеспондентов) + + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ТаблицаСправочника.Ссылка + |ПОМЕСТИТЬ ДанныеСправочника + |ИЗ + | " + ТипРеспондентов.Метаданные().ПолноеИмя() + " КАК ТаблицаСправочника + |ГДЕ + | (НЕ ТаблицаСправочника.ПометкаУдаления) + | " + ?(ТипРеспондентов.Метаданные().Иерархический," И (НЕ ТаблицаСправочника.ЭтоГруппа)","") + " + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Анкета.Респондент, + | Анкета.Проведен + |ПОМЕСТИТЬ ОтветившиеРеспонденты + |ИЗ + | Документ.Анкета КАК Анкета + |ГДЕ + | (НЕ Анкета.ПометкаУдаления) + | И Анкета.Опрос = &Опрос + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВЫБОР + | КОГДА ОтветившиеРеспонденты.Респондент ЕСТЬ NULL + | ТОГДА &НеЗаполнял + | ИНАЧЕ ВЫБОР + | КОГДА ОтветившиеРеспонденты.Проведен + | ТОГДА &Заполнил + | ИНАЧЕ &НачалЗаполнять + | КОНЕЦ + | КОНЕЦ КАК Отвечал, + | ДанныеСправочника.Ссылка КАК Респондент + |ИЗ + | ДанныеСправочника КАК ДанныеСправочника + | ЛЕВОЕ СОЕДИНЕНИЕ ОтветившиеРеспонденты КАК ОтветившиеРеспонденты + | ПО ДанныеСправочника.Ссылка = ОтветившиеРеспонденты.Респондент + | + |УПОРЯДОЧИТЬ ПО + | Отвечал, + | Респондент + |ИТОГИ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Респондент) + |ПО + | ОБЩИЕ, + | Отвечал"; + + Запрос.УстановитьПараметр("Опрос",Опрос); + Запрос.УстановитьПараметр("Заполнил",НСтр("ru = 'Заполнил'")); + Запрос.УстановитьПараметр("НачалЗаполнять",НСтр("ru = 'Начал заполнять'")); + Запрос.УстановитьПараметр("НеЗаполнял",НСтр("ru = 'Не заполнял'")); + + + Возврат Запрос.Выполнить(); + +КонецФункции + +////////////////////////////////////////////////////////////////////////////////////////////////// +// Прочее + +// Формирует представление опроса для заголовка отчёта +Функция ПолучитьПредставлениеОпросаДляЗаголовка(РеквизитыОпрос) + + ПредставлениеОпросаДляЗаголовка = НСтр("ru='Опрос '"); + Если РеквизитыОпрос.ДатаНачала <> Дата(1,1,1) ИЛИ РеквизитыОпрос.ДатаОкончания <> Дата(1,1,1) Тогда + ПредставлениеОпросаДляЗаголовка = ПредставлениеОпросаДляЗаголовка + НСтр("ru='проводился в период '"); + КонецЕсли; + + Если РеквизитыОпрос.ДатаНачала <> Дата(1,1,1) Тогда + ПредставлениеОпросаДляЗаголовка = ПредставлениеОпросаДляЗаголовка + НСтр("ru='с '") + Формат(РеквизитыОпрос.ДатаНачала,"ДФ=dd.MM.yy") + " "; + КонецЕсли; + + Если РеквизитыОпрос.ДатаОкончания <> Дата(1,1,1) Тогда + ПредставлениеОпросаДляЗаголовка = ПредставлениеОпросаДляЗаголовка + НСтр("ru = 'по '") + Формат(РеквизитыОпрос.ДатаОкончания,"ДФ=dd.MM.yy")+ " "; + КонецЕсли; + + ПредставлениеОпросаДляЗаголовка = ПредставлениеОпросаДляЗаголовка + НСтр("ru = 'на основании документа '") + РеквизитыОпрос.Представление + "."; + + Возврат ПредставлениеОпросаДляЗаголовка; + +КонецФункции + + diff --git a/SSL/src/Reports/БизнесПроцессы/Templates/Макет/Template.dcs b/SSL/src/Reports/БизнесПроцессы/Templates/Макет/Template.dcs index 53900ddd5..9fbc28f33 100644 --- a/SSL/src/Reports/БизнесПроцессы/Templates/Макет/Template.dcs +++ b/SSL/src/Reports/БизнесПроцессы/Templates/Макет/Template.dcs @@ -333,7 +333,7 @@ ru - Статистика по видам + Статистика по видам бизнес-процессов diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl index cd2af9300..3387eae36 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/Forms/ФормаОтчета/Module.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -8,21 +11,21 @@ Если Параметры.ПоРазделамОбъектам = Истина Тогда // Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ПоРазделамОбъектамДляПользователей"); + УстановитьТекущийВариант("ДатыЗапретаЗагрузкиПоРазделамОбъектамДляПользователей"); ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ПоРазделамДляПользователей"); + УстановитьТекущийВариант("ДатыЗапретаЗагрузкиПоРазделамДляПользователей"); Иначе - УстановитьТекущийВариант("ПоОбъектамДляПользователей"); + УстановитьТекущийВариант("ДатыЗапретаЗагрузкиПоОбъектамДляПользователей"); КонецЕсли; Иначе Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ПоПользователям"); + УстановитьТекущийВариант("ДатыЗапретаЗагрузкиПоПользователям"); ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ПоПользователямБезОбъектов"); + УстановитьТекущийВариант("ДатыЗапретаЗагрузкиПоПользователямБезОбъектов"); Иначе - УстановитьТекущийВариант("ПоПользователямБезРазделов"); + УстановитьТекущийВариант("ДатыЗапретаЗагрузкиПоПользователямБезРазделов"); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl index 7295ddc43..ee1d04d25 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) // Установка обязательных параметров @@ -12,7 +15,10 @@ КонецПроцедуры -Процедура УстановитьОбязательныйПараметр(ИмяПараметра, ИмяОбязательногоПараметра, ЗначениеКогдаНеИспользуется, ЗначениеПриНеопределено, ПараметрыДанных); +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура УстановитьОбязательныйПараметр(ИмяПараметра, ИмяОбязательногоПараметра, ЗначениеКогдаНеИспользуется, ЗначениеПриНеопределено, ПараметрыДанных) Параметр = ПараметрыДанных.Пользовательские.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ИмяПараметра)); diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ДатыЗапретаЗагрузки/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 0d00fe777..8fa60e15a 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -497,11 +497,11 @@ false - ПоПользователям + ДатыЗапретаЗагрузкиПоПользователям ru - По узлам планов обмена + Даты запрета загрузки данных по узлам планов обмена @@ -552,6 +552,21 @@ + + + ВыводитьЗаголовок + Auto + + + Заголовок + + + ru + Даты запрета загрузки данных + + + + @@ -709,11 +724,11 @@ - ПоПользователямБезРазделов + ДатыЗапретаЗагрузкиПоПользователямБезРазделов ru - По узлам планов обмена + Даты запрета загрузки данных по узлам планов обмена @@ -768,6 +783,21 @@ + + + ВыводитьЗаголовок + Auto + + + Заголовок + + + ru + Даты запрета загрузки данных + + + + @@ -926,11 +956,11 @@ - ПоПользователямБезОбъектов + ДатыЗапретаЗагрузкиПоПользователямБезОбъектов ru - По узлам планов обмена + Даты запрета загрузки данных по узлам планов обмена @@ -985,6 +1015,21 @@ + + + ВыводитьЗаголовок + Auto + + + Заголовок + + + ru + Даты запрета загрузки данных + + + + @@ -1143,11 +1188,11 @@ - ПоРазделамОбъектамДляПользователей + ДатыЗапретаЗагрузкиПоРазделамОбъектамДляПользователей ru - По разделам и объектам для узлов планов обмена + Даты запрета загрузки данных по разделам и объектам для узлов планов обмена @@ -1198,6 +1243,21 @@ + + + ВыводитьЗаголовок + Auto + + + Заголовок + + + ru + Даты запрета загрузки данных + + + + @@ -1365,11 +1425,11 @@ - ПоОбъектамДляПользователей + ДатыЗапретаЗагрузкиПоОбъектамДляПользователей ru - По объектам для узлов планов обмена + Даты запрета загрузки данных по объектам для узлов планов обмена @@ -1419,6 +1479,21 @@ + + + ВыводитьЗаголовок + Auto + + + Заголовок + + + ru + Даты запрета загрузки данных + + + + @@ -1587,11 +1662,11 @@ - ПоРазделамДляПользователей + ДатыЗапретаЗагрузкиПоРазделамДляПользователей ru - По разделам для узлов планов обмена + Даты запрета загрузки данных по разделам для узлов планов обмена @@ -1641,6 +1716,21 @@ + + + ВыводитьЗаголовок + Auto + + + Заголовок + + + ru + Даты запрета загрузки данных + + + + diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl index cd2af9300..d8c7f437a 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ДатыЗапретаИзменения/Forms/ФормаОтчета/Module.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -8,21 +11,21 @@ Если Параметры.ПоРазделамОбъектам = Истина Тогда // Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ПоРазделамОбъектамДляПользователей"); + УстановитьТекущийВариант("ДатыЗапретаИзмененияПоРазделамОбъектамДляПользователей"); ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ПоРазделамДляПользователей"); + УстановитьТекущийВариант("ДатыЗапретаИзмененияПоРазделамДляПользователей"); Иначе - УстановитьТекущийВариант("ПоОбъектамДляПользователей"); + УстановитьТекущийВариант("ДатыЗапретаИзмененияПоОбъектамДляПользователей"); КонецЕсли; Иначе Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ПоПользователям"); + УстановитьТекущийВариант("ДатыЗапретаИзмененияПоПользователям"); ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда - УстановитьТекущийВариант("ПоПользователямБезОбъектов"); + УстановитьТекущийВариант("ДатыЗапретаИзмененияПоПользователямБезОбъектов"); Иначе - УстановитьТекущийВариант("ПоПользователямБезРазделов"); + УстановитьТекущийВариант("ДатыЗапретаИзмененияПоПользователямБезРазделов"); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl index 0f16e27ae..ee1d04d25 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl @@ -1,4 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) // Установка обязательных параметров @@ -12,7 +15,10 @@ КонецПроцедуры -Процедура УстановитьОбязательныйПараметр(ИмяПараметра, ИмяОбязательногоПараметра, ЗначениеКогдаНеИспользуется, ЗначениеПриНеопределено, ПараметрыДанных); +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура УстановитьОбязательныйПараметр(ИмяПараметра, ИмяОбязательногоПараметра, ЗначениеКогдаНеИспользуется, ЗначениеПриНеопределено, ПараметрыДанных) Параметр = ПараметрыДанных.Пользовательские.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ИмяПараметра)); @@ -43,4 +49,3 @@ КонецПроцедуры - diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ДатыЗапретаИзменения/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 5a9a06db1..9e837c946 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/ДатыЗапретаИзменения/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -399,11 +399,11 @@ false - ПоПользователям + ДатыЗапретаИзмененияПоПользователям ru - По пользователям + Даты запрета изменения данных по пользователям @@ -454,6 +454,21 @@ + + + ВыводитьЗаголовок + Auto + + + Заголовок + + + ru + Даты запрета изменения данных + + + + @@ -611,11 +626,11 @@ - ПоПользователямБезРазделов + ДатыЗапретаИзмененияПоПользователямБезРазделов ru - По пользователям + Даты запрета изменения данных по пользователям @@ -670,6 +685,21 @@ + + + ВыводитьЗаголовок + Auto + + + Заголовок + + + ru + Даты запрета изменения данных + + + + @@ -828,11 +858,11 @@ - ПоПользователямБезОбъектов + ДатыЗапретаИзмененияПоПользователямБезОбъектов ru - По пользователям + Даты запрета изменения данных по пользователям @@ -887,6 +917,21 @@ + + + ВыводитьЗаголовок + Auto + + + Заголовок + + + ru + Даты запрета изменения данных + + + + @@ -1045,11 +1090,11 @@ - ПоРазделамОбъектамДляПользователей + ДатыЗапретаИзмененияПоРазделамОбъектамДляПользователей ru - По разделам и объектам для пользователей + Даты запрета изменения данных по разделам и объектам для пользователей @@ -1100,6 +1145,21 @@ + + + ВыводитьЗаголовок + Auto + + + Заголовок + + + ru + Даты запрета изменения данных + + + + @@ -1267,11 +1327,11 @@ - ПоОбъектамДляПользователей + ДатыЗапретаИзмененияПоОбъектамДляПользователей ru - По объектам для пользователей + Даты запрета изменения данных по объектам для пользователей @@ -1321,6 +1381,21 @@ + + + ВыводитьЗаголовок + Auto + + + Заголовок + + + ru + Даты запрета изменения данных + + + + @@ -1489,11 +1564,11 @@ - ПоРазделамДляПользователей + ДатыЗапретаИзмененияПоРазделамДляПользователей ru - По разделам для пользователей + Даты запрета изменения данных по разделам для пользователей @@ -1543,6 +1618,21 @@ + + + ВыводитьЗаголовок + Auto + + + Заголовок + + + ru + Даты запрета изменения данных + + + + diff --git a/SSL/src/Reports/ЗависшиеЗадачи/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ЗависшиеЗадачи/Forms/ФормаОтчета/Module.bsl index e0967cd59..e1e3e25d8 100644 --- a/SSL/src/Reports/ЗависшиеЗадачи/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ЗависшиеЗадачи/Forms/ФормаОтчета/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) diff --git a/SSL/src/Reports/ЗависшиеЗадачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ЗависшиеЗадачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 2016509ce..fd8012eb0 100644 --- a/SSL/src/Reports/ЗависшиеЗадачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/ЗависшиеЗадачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -27,6 +27,12 @@ РольИсполнителя РольИсполнителя + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Исполнитель</v8:content> + </v8:item> + ПризнакНаличияИсполнителей @@ -74,35 +80,40 @@ ИЗ (ВЫБРАТЬ ВЫБОР - КОГДА ИсполнителиПоручений2.Исполнитель ЕСТЬ НЕ NULL - И ИсполнителиПоручений2.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) - ТОГДА ИсполнителиПоручений2.Исполнитель - ИНАЧЕ ИсполнителиПоручений4.Исполнитель + КОГДА ИсполнителиЗадач2.Исполнитель ЕСТЬ НЕ NULL + И ИсполнителиЗадач2.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + ТОГДА ИсполнителиЗадач2.Исполнитель + ИНАЧЕ ИсполнителиЗадач4.Исполнитель КОНЕЦ КАК Координатор, Поручения.ОсновнойОбъектАдресации КАК ОсновнойОбъектАдресации, Поручения.ДополнительныйОбъектАдресации КАК ДополнительныйОбъектАдресации, - Поручения.РольИсполнителя КАК РольИсполнителя, + ВЫБОР + КОГДА Поручения.Исполнитель ЕСТЬ НЕ NULL + И Поручения.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + ТОГДА Поручения.Исполнитель + ИНАЧЕ Поручения.РольИсполнителя + КОНЕЦ КАК РольИсполнителя, Поручения.Автор КАК Автор, Поручения.Ссылка КАК Ссылка, 1 КАК Количество, ВЫБОР КОГДА Поручения.Исполнитель = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) - И ИсполнителиПоручений.Исполнитель ЕСТЬ NULL + И ИсполнителиЗадач.Исполнитель ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ КАК ПризнакНаличияИсполнителей ИЗ Задача.ЗадачаИсполнителя КАК Поручения - ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсполнителиЗадач КАК ИсполнителиПоручений - ПО (ИсполнителиПоручений.РольИсполнителя = Поручения.РольИсполнителя) - И (ИсполнителиПоручений.ОсновнойОбъектАдресации = Поручения.ОсновнойОбъектАдресации) - И (ИсполнителиПоручений.ДополнительныйОбъектАдресации = Поручения.ДополнительныйОбъектАдресации) - ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсполнителиЗадач КАК ИсполнителиПоручений2 - ПО (ИсполнителиПоручений2.РольИсполнителя = ЗНАЧЕНИЕ(Справочник.РолиИсполнителей.ОтветственныйЗаКонтрольИсполнения)) - И (ИсполнителиПоручений2.ОсновнойОбъектАдресации = Поручения.ОсновнойОбъектАдресации) - ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсполнителиЗадач КАК ИсполнителиПоручений4 - ПО (ИсполнителиПоручений4.РольИсполнителя = ЗНАЧЕНИЕ(Справочник.РолиИсполнителей.ОтветственныйЗаКонтрольИсполнения)) - И (ИсполнителиПоручений4.ОсновнойОбъектАдресации = НЕОПРЕДЕЛЕНО) + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач + ПО (ИсполнителиЗадач.РольИсполнителя = Поручения.РольИсполнителя) + И (ИсполнителиЗадач.ОсновнойОбъектАдресации = Поручения.ОсновнойОбъектАдресации) + И (ИсполнителиЗадач.ДополнительныйОбъектАдресации = Поручения.ДополнительныйОбъектАдресации) + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач2 + ПО (ИсполнителиЗадач2.РольИсполнителя = ЗНАЧЕНИЕ(Справочник.РолиИсполнителей.ОтветственныйЗаКонтрольИсполнения)) + И (ИсполнителиЗадач2.ОсновнойОбъектАдресации = Поручения.ОсновнойОбъектАдресации) + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач4 + ПО (ИсполнителиЗадач4.РольИсполнителя = ЗНАЧЕНИЕ(Справочник.РолиИсполнителей.ОтветственныйЗаКонтрольИсполнения)) + И (ИсполнителиЗадач4.ОсновнойОбъектАдресации = НЕОПРЕДЕЛЕНО) ГДЕ Поручения.Выполнена = ЛОЖЬ И Поручения.ПометкаУдаления = ЛОЖЬ @@ -113,13 +124,13 @@ Поручения.Автор, Поручения.ОсновнойОбъектАдресации, Поручения.РольИсполнителя, - ИсполнителиПоручений.Исполнитель, - ИсполнителиПоручений2.Исполнитель, - ИсполнителиПоручений4.Исполнитель, + ИсполнителиЗадач.Исполнитель, + ИсполнителиЗадач2.Исполнитель, + ИсполнителиЗадач4.Исполнитель, Поручения.ДополнительныйОбъектАдресации, ВЫБОР КОГДА Поручения.Исполнитель = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) - И ИсполнителиПоручений.Исполнитель ЕСТЬ NULL + И ИсполнителиЗадач.Исполнитель ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ) КАК Поручения @@ -153,11 +164,11 @@ - ГруппироватьПоОбъектамАдресации + СводкаПоЗависшимЗадачам ru - Зависшие задачи по объектам адресации + Сводка по зависшим задачам @@ -204,6 +215,76 @@ Asc + + + + + ОсновнойОбъектАдресации + + + + + ОсновнойОбъектАдресации + NotFilled + + + + + Текст + + + ru + Не указан + + + + + + + + + РольИсполнителя + + + + + РольИсполнителя + NotFilled + + + + + Текст + + + ru + Исполнитель не назначен + + + + + + + + + + РольИсполнителя + NotFilled + + + + + ЦветТекста + style:ПросроченныеДанныеЦвет + + + false + Текст + + + + + ВыводитьЗаголовок @@ -281,11 +362,11 @@ - ГруппироватьПоРолям + ЗависшиеЗадачиПоИсполнителям ru - Зависшие задачи по ролям + Зависшие задачи по исполнителям @@ -322,6 +403,76 @@ Asc + + + + + ОсновнойОбъектАдресации + + + + + ОсновнойОбъектАдресации + NotFilled + + + + + Текст + + + ru + Не указан + + + + + + + + + РольИсполнителя + + + + + РольИсполнителя + NotFilled + + + + + Текст + + + ru + Исполнитель не назначен + + + + + + + + + + РольИсполнителя + NotFilled + + + + + ЦветТекста + style:ПросроченныеДанныеЦвет + + + false + Текст + + + + + ВыводитьЗаголовок @@ -409,11 +560,11 @@ - ЗависшиеЗадачи + ЗависшиеЗадачиПоОбъектамАдресации ru - Зависшие задачи + Зависшие задачи по объектам адресации @@ -450,6 +601,76 @@ Asc + + + + + ОсновнойОбъектАдресации + + + + + ОсновнойОбъектАдресации + NotFilled + + + + + Текст + + + ru + Не указан + + + + + + + + + РольИсполнителя + + + + + РольИсполнителя + NotFilled + + + + + Текст + + + ru + Исполнитель не назначен + + + + + + + + + + РольИсполнителя + NotFilled + + + + + ЦветТекста + style:ПросроченныеДанныеЦвет + + + false + Текст + + + + + ВыводитьЗаголовок @@ -518,7 +739,7 @@ - ИстекКрайнийСрокЗадач + ПросроченныеЗадачи ru @@ -591,12 +812,60 @@ ЦветТекста - style:SpecialTextColor + style:ПросроченныеДанныеЦвет 8f0025cd-eb21-4541-81ac-0c30842ca2cf Выделять задачи без назначенных исполнителей + + + + ОсновнойОбъектАдресации + + + + + ОсновнойОбъектАдресации + NotFilled + + + + + Текст + + + ru + Не указан + + + + + + + + + РольИсполнителя + + + + + РольИсполнителя + NotFilled + + + + + Текст + + + ru + Исполнитель не назначен + + + + + diff --git a/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Module.bsl index e0967cd59..e1e3e25d8 100644 --- a/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/Задачи/Forms/ФормаОтчета/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) diff --git a/SSL/src/Reports/Задачи/Help/ru.html b/SSL/src/Reports/Задачи/Help/ru.html index 0ac3193b0..6bd8bd558 100644 --- a/SSL/src/Reports/Задачи/Help/ru.html +++ b/SSL/src/Reports/Задачи/Help/ru.html @@ -1,5 +1,6 @@ -

    Для формирования отчета нажмите кнопку "Сформировать".

    +

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

    +

    Текущие задачи

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

    @@ -9,4 +10,6 @@
    АвторБудут отобраны только задачи, срок исполнения которых соответствует указанной дате
    Дата создания Будут отобраны только задачи, созданные за указанный период
    Выполнена Позволяет отобрать только выполненные или не выполненные задачи

     

    +

    Справка по исполнительской дисциплине

    +

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

    Для детальной настройки отчета используйте команду "Все действия - Изменить вариант".

    \ No newline at end of file diff --git a/SSL/src/Reports/Задачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/Задачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 6f45772a0..213ed9801 100644 --- a/SSL/src/Reports/Задачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/Задачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -22,10 +22,6 @@ Исполнитель Исполнитель - - Описание - Описание - СрокИсполнения СрокИсполнения @@ -77,20 +73,42 @@ Номер Номер - - ЗадачаВыполнена - ЗадачаВыполнена - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Задача выполнена</v8:content> - </v8:item> - - СостояниеБизнесПроцесса СостояниеБизнесПроцесса + + ВСрок + ВСрок + + + Выполнено + Выполнено + + + Выполняются + Выполняются + + + НеВСрок + НеВСрок + + + НеВыполнено + НеВыполнено + + + Просроченные + Просроченные + + + Описание + Описание + + + КоличествоЗадач + КоличествоЗадач + ИсточникДанных1 ВЫБРАТЬ РАЗРЕШЕННЫЕ Задачи.Номер, @@ -98,25 +116,84 @@ Задачи.СрокИсполнения, Задачи.ДатаИсполнения, Задачи.Важность, - Задачи.Описание, + ПОДСТРОКА(Задачи.Описание, 1, 250) КАК Описание, Задачи.Автор, - Задачи.Исполнитель, + ВЫБОР + КОГДА Задачи.Исполнитель ЕСТЬ НЕ NULL + И Задачи.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + ТОГДА Задачи.Исполнитель + ИНАЧЕ Задачи.РольИсполнителя + КОНЕЦ КАК Исполнитель, Задачи.РольИсполнителя, Задачи.Дата, Задачи.Ссылка, Задачи.БизнесПроцесс, Задачи.ТочкаМаршрута, - Задачи.СостояниеБизнесПроцесса + Задачи.СостояниеБизнесПроцесса, + КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Задачи.Ссылка) КАК КоличествоЗадач, + СУММА(ВЫБОР + КОГДА Задачи.Выполнена + И (Задачи.СрокИсполнения >= Задачи.ДатаИсполнения ИЛИ Задачи.СрокИсполнения = "00010101") + ТОГДА 1 + ИНАЧЕ 0 + КОНЕЦ) КАК ВСрок, + СУММА(ВЫБОР + КОГДА Задачи.Выполнена + И Задачи.СрокИсполнения < Задачи.ДатаИсполнения И Задачи.СрокИсполнения <> "00010101" + ТОГДА 1 + ИНАЧЕ 0 + КОНЕЦ) КАК НеВСрок, + СУММА(ВЫБОР + КОГДА Задачи.Выполнена + ТОГДА 1 + ИНАЧЕ 0 + КОНЕЦ) КАК Выполнено, + СУММА(ВЫБОР + КОГДА (НЕ Задачи.Выполнена) + ТОГДА 1 + ИНАЧЕ 0 + КОНЕЦ) КАК НеВыполнено, + СУММА(ВЫБОР + КОГДА НЕ Задачи.Выполнена + И (Задачи.СрокИсполнения >= &КрайнийСрок ИЛИ Задачи.СрокИсполнения = "00010101") + ТОГДА 1 + ИНАЧЕ 0 + КОНЕЦ) КАК Выполняются, + СУММА(ВЫБОР + КОГДА НЕ Задачи.Выполнена + И Задачи.СрокИсполнения < &КрайнийСрок И Задачи.СрокИсполнения <> "00010101" + ТОГДА 1 + ИНАЧЕ 0 + КОНЕЦ) КАК Просроченные ИЗ Задача.ЗадачаИсполнителя КАК Задачи ГДЕ Задачи.ПометкаУдаления = ЛОЖЬ И Задачи.СостояниеБизнесПроцесса = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Активен) И (ТИПЗНАЧЕНИЯ(Задачи.БизнесПроцесс) <> ТИП(БизнесПроцесс.Задание) ИЛИ Задачи.БизнесПроцесс.ЗадачаИсточник = ЗНАЧЕНИЕ(Задача.ЗадачаИсполнителя.ПустаяСсылка)) +СГРУППИРОВАТЬ ПО + Задачи.Номер, + Задачи.Наименование, + Задачи.СрокИсполнения, + Задачи.ДатаИсполнения, + Задачи.Важность, + ПОДСТРОКА(Задачи.Описание, 1, 250), + Задачи.Автор, + ВЫБОР + КОГДА Задачи.Исполнитель ЕСТЬ НЕ NULL + И Задачи.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + ТОГДА Задачи.Исполнитель + ИНАЧЕ Задачи.РольИсполнителя + КОНЕЦ, + Задачи.РольИсполнителя, + Задачи.Дата, + Задачи.Ссылка, + Задачи.БизнесПроцесс, + Задачи.ТочкаМаршрута, + Задачи.СостояниеБизнесПроцесса {ГДЕ (Задачи.Дата >= &ДатаНачала), - (Задачи.Дата <= &ДатаОкончания), - Задачи.Выполнена КАК ЗадачаВыполнена} + (Задачи.Дата <= &ДатаОкончания)} Количество @@ -128,6 +205,38 @@
    + + ВСрок + Сумма(ВСрок) + + + Выполнено + Сумма(Выполнено) + + + Выполняются + Сумма(Выполняются) + + + НеВСрок + Сумма(НеВСрок) + + + НеВыполнено + Сумма(НеВыполнено) + + + Просроченные + Сумма(Просроченные) + + + КоличествоЗадач + Сумма(КоличествоЗадач) + + + Количество + Сумма(Количество) + ДатаНачала @@ -162,6 +271,24 @@ <value xsi:type="xs:dateTime">0001-01-01T00:00:00</value> <useRestriction>false</useRestriction> </parameter> + <parameter> + <name>КрайнийСрок</name> + <title xsi:type="v8:LocalStringType"> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Крайний срок</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + 0001-01-01T00:00:00 + false + Always + ТекущиеЗадачи @@ -338,6 +465,30 @@ Выделять выполненные задачи a53cd573-1732-4bae-98d9-22ab69ed44cb + + + + Исполнитель + + + + + Исполнитель + NotFilled + + + + + Текст + + + ru + Исполнитель не назначен + + + + + @@ -393,4 +544,251 @@
    + + СправкаПоИсполнительскойДисциплине + + + ru + Справка по исполнительской дисциплине + + + + + + Исполнитель + + + КоличествоЗадач + + + ru + Количество + + + + + + + ru + Выполнено + + + + Выполнено + + + ru + Всего + + + + + ВСрок + + + ru + В срок + + + + + НеВСрок + + + ru + Не в срок + + + + Auto + + + + + ru + Не выполнено + + + + НеВыполнено + + + ru + Всего + + + + + false + Выполняются + + + ru + Из них в срок + + + + + Просроченные + + + ru + Просрочено + + + + Auto + + + + + false + Автор + Equal + 67bf6480-b72b-4014-8c7a-f8cb1c243554 + + + Дата + GreaterOrEqual + + BeginningOfThisWeek + + 1f540b31-fcf9-4a90-b831-6c8779ca3d75 + + + ru + Дата начала + + + + + Дата + LessOrEqual + + BeginningOfNextDay + + f276458f-9ac1-4bcc-a677-8a8280dab87d + + + ru + Дата окончания + + + + + + + КрайнийСрок + + BeginningOfNextWeek + + be4549b8-e388-4873-be9c-0dd5fad8cde8 + + + + + false + Исполнитель + Asc + + + НеВыполнено + Desc + + + + + + + Исполнитель + + + + + Исполнитель + NotFilled + + + + + Текст + + + ru + Исполнитель не назначен + + + + + + + + + + Исполнитель + NotFilled + + + + + ЦветТекста + style:ПросроченныеДанныеЦвет + + + false + Текст + + + + + + + + ВертикальноеРасположениеОбщихИтогов + BeginAndEnd + + + ВыводитьЗаголовок + Output + + + Заголовок + + + ru + Справка по исполнительской дисциплине + + + + + ВыводитьПараметрыДанных + DontOutput + + + ВыводитьОтбор + DontOutput + + + + + + Исполнитель + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + СистемныеПоля.НомерПоПорядку + + + + + + \ No newline at end of file diff --git a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ЗадачиИстекающиеНаДату/Forms/ФормаОтчета/Module.bsl index e0967cd59..e1e3e25d8 100644 --- a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ЗадачиИстекающиеНаДату/Forms/ФормаОтчета/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) diff --git a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ЗадачиИстекающиеНаДату/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index 3baca79da..cf34cff67 100644 --- a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/ЗадачиИстекающиеНаДату/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -83,8 +83,13 @@ false - Основной - Основной + ЗадачиИстекающиеНаДату + + + ru + Задачи, истекающие на дату + + diff --git a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl index 9cb8a4395..c8f2e0c2d 100644 --- a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -8,8 +10,8 @@ КонецЕсли; Если НЕ ЗначениеЗаполнено(Параметры.Пользователь) - ИЛИ ( НЕ Пользователи.ЭтоПолноправныйПользовательИБ() - И Параметры.Пользователь <> ОбщегоНазначения.ТекущийПользователь() ) Тогда + ИЛИ ( НЕ Пользователи.ЭтоПолноправныйПользователь() + И Параметры.Пользователь <> Пользователи.ТекущийПользователь() ) Тогда // Отказ = Истина; Возврат; @@ -24,12 +26,8 @@ КонецПроцедуры -&НаКлиенте -Процедура Сформировать(Команда) - - ВывестиОтчет(Параметры.Пользователь); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ДокументОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) @@ -43,12 +41,22 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Сформировать(Команда) + + ВывестиОтчет(Параметры.Пользователь); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ВывестиОтчет(Ссылка) - УстановитьПривилегированныйРежим(Истина); - ВыводПравГруппы = ТипЗнч(Параметры.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") ИЛИ ТипЗнч(Параметры.Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей"); @@ -94,7 +102,10 @@ СвойстваПользователяИБ = Неопределено; РолиПользователяИБ = Неопределено; - Если Пользователи.ПрочитатьПользователяИБ(ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "ИдентификаторПользователяИБ"), СвойстваПользователяИБ, РолиПользователяИБ) Тогда + УстановитьПривилегированныйРежим(Истина); + ПользовательИБПрочитан = Пользователи.ПрочитатьПользователяИБ(ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "ИдентификаторПользователяИБ"), СвойстваПользователяИБ, РолиПользователяИБ); + УстановитьПривилегированныйРежим(Ложь); + Если ПользовательИБПрочитан Тогда Область.Параметры.ДоступКИнформационнойБазеРазрешен = Истина; Документ.Вывести(Область, 2); // @@ -113,16 +124,25 @@ Документ.ЗакончитьАвтогруппировкуСтрок(); КонецЕсли; - Если ( ТипЗнч(Ссылка) = Тип("СправочникСсылка.Пользователи") - ИЛИ ТипЗнч(Ссылка) = Тип("СправочникСсылка.ВнешниеПользователи") ) - И УправлениеДоступом.ЕстьРоль("ПолныеПрава",, Ссылка) Тогда - // - Область = Макет.ПолучитьОбласть("ПолноправныйПользователь"); - Документ.Вывести(Область, 1); - Возврат; + Если ТипЗнч(Ссылка) = Тип("СправочникСсылка.Пользователи") + ИЛИ ТипЗнч(Ссылка) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + + УстановитьПривилегированныйРежим(Истина); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "ИдентификаторПользователяИБ")); + УстановитьПривилегированныйРежим(Ложь); + + Если Пользователи.ЭтоПолноправныйПользователь(ПользовательИБ, Истина) Тогда + + Область = Макет.ПолучитьОбласть("ПолноправныйПользователь"); + Документ.Вывести(Область, 1); + Возврат; + КонецЕсли; КонецЕсли; // Вывод групп доступа + УстановитьПривилегированныйРежим(Истина); + Запрос = Новый Запрос; Запрос.УстановитьПараметр("Пользователь", Ссылка); Запрос.УстановитьПараметр("ВыводПравГруппы", ВыводПравГруппы); @@ -1527,5 +1547,3 @@ Возврат Запрос.Выполнить().Выгрузить(); КонецФункции - - diff --git a/SSL/src/Reports/ПросроченныеЗадачи/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ПросроченныеЗадачи/Forms/ФормаОтчета/Module.bsl index e0967cd59..e1e3e25d8 100644 --- a/SSL/src/Reports/ПросроченныеЗадачи/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ПросроченныеЗадачи/Forms/ФормаОтчета/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) diff --git a/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/Forms/ФормаОтчета/Form.form deleted file mode 100644 index a63c95d75..000000000 --- a/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/Forms/ФормаОтчета/Form.form +++ /dev/null @@ -1,710 +0,0 @@ - - - - ГруппаВарианта - 1 - - НаименованиеТекущегоВарианта - 2 - true - true - - true - - - НаименованиеТекущегоВарианта - - Left - - НаименованиеТекущегоВариантаРасширеннаяПодсказка - 23 - Label - true - true - - Left - - - - НаименованиеТекущегоВариантаКонтекстноеМеню - 3 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ВыбратьВариантКнопка - 4 - true - true - - true - - false - - ВыбратьВариантКнопкаРасширеннаяПодсказка - 25 - Label - true - true - - Left - - - UsualButton - Form.StandardCommand.LoadVariant - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - ГруппаВариантаРасширеннаяПодсказка - 22 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ОсновнаяКоманднаяПанель - 5 - - СформироватьОтчет - 6 - true - true - - true - - false - - СформироватьОтчетРасширеннаяПодсказка - 27 - Label - true - true - - Left - - - Form.StandardCommand.Generate - Auto - true - true - true - UserCmds - Auto - - - Настройка - 7 - true - true - - true - - false - - НастройкаРасширеннаяПодсказка - 28 - Label - true - true - - Left - - - Form.StandardCommand.ReportSettings - Normal - Auto - true - true - UserCmds - Auto - - - ВыбратьНастройку - 8 - true - true - - true - - false - - ВыбратьНастройкуРасширеннаяПодсказка - 29 - Label - true - true - - Left - - - Form.StandardCommand.LoadReportSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СохранитьНастройку - 9 - true - true - - true - - false - - СохранитьНастройкуРасширеннаяПодсказка - 30 - Label - true - true - - Left - - - Form.StandardCommand.SaveReportSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СтандартнаяНастройка - 10 - true - true - - true - - false - - СтандартнаяНастройкаРасширеннаяПодсказка - 31 - Label - true - true - - Left - - - Form.StandardCommand.StandardSettings - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - НовоеОкно - 11 - true - true - - true - - false - - НовоеОкноРасширеннаяПодсказка - 32 - Label - true - true - - Left - - - Form.StandardCommand.NewWindow - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ИзменитьВариант - 12 - true - true - - true - - false - - ИзменитьВариантРасширеннаяПодсказка - 33 - Label - true - true - - Left - - - Form.StandardCommand.ChangeVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВыбратьВариант - 13 - true - true - - true - - false - - ВыбратьВариантРасширеннаяПодсказка - 34 - Label - true - true - - Left - - - Form.StandardCommand.LoadVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СохранитьВариант - 14 - true - true - - true - - false - - СохранитьВариантРасширеннаяПодсказка - 35 - Label - true - true - - Left - - - Form.StandardCommand.SaveVariant - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ИзменитьФорму - 15 - true - true - - true - - false - - ИзменитьФормуРасширеннаяПодсказка - 36 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - Справка - 16 - true - true - - true - - false - - СправкаРасширеннаяПодсказка - 37 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - ОсновнаяКоманднаяПанельРасширеннаяПодсказка - 26 - Label - true - true - - Left - - - CommandBar - - Left - - - - ПользовательскиеНастройки - 17 - true - true - - true - - - Отчет.SettingsComposer.UserSettings - - false - None - HierarchicalList - List - Tree - None - - ПользовательскиеНастройкиКоманднаяПанель - 19 - Left - true - - - ПользовательскиеНастройкиСтрокаПоиска - 39 - - ПользовательскиеНастройкиСтрокаПоискаРасширеннаяПодсказка - 41 - Label - true - true - - Left - - - - ПользовательскиеНастройкиСтрокаПоискаКонтекстноеМеню - 40 - true - - ПользовательскиеНастройки - - true - - - - ПользовательскиеНастройкиСостояниеПросмотра - 42 - - ПользовательскиеНастройкиСостояниеПросмотраРасширеннаяПодсказка - 44 - Label - true - true - - Left - - - - ПользовательскиеНастройкиСостояниеПросмотраКонтекстноеМеню - 43 - true - - ViewStatusAddition - ПользовательскиеНастройки - - true - - - - ПользовательскиеНастройкиУправлениеПоиском - 45 - - ПользовательскиеНастройкиУправлениеПоискомРасширеннаяПодсказка - 47 - Label - true - true - - Left - - - - ПользовательскиеНастройкиУправлениеПоискомКонтекстноеМеню - 46 - true - - SearchControlAddition - ПользовательскиеНастройки - - true - - - - ПользовательскиеНастройкиРасширеннаяПодсказка - 38 - Label - true - true - - Left - - - - ПользовательскиеНастройкиКонтекстноеМеню - 18 - true - - HierarchicalList - true - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - Auto - Auto - true - None - None - None - true - QuickAccess - Show - - - Результат - 20 - true - true - - true - - - Результат - - true - None - - РезультатРасширеннаяПодсказка - 56 - Label - true - true - - Left - - - - РезультатКонтекстноеМеню - 21 - true - - SpreadsheetDocumentField - Enter - true - Left - true - - - DetailProcessing - РезультатОбработкаРасшифровки - - 100 - true - 10 - true - true - true - Special - ScrollAlways - ScrollAlways - Always - Auto - true - true - true - - - None - false - - ФормаКоманднаяПанель - -1 - Left - - DontBlock - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Отчет - 1 - - ReportObject.СправкаОбИсполнительскойДисциплине - - - true - - - true - -
    true
    -
    - - НаименованиеТекущегоВарианта - - <key>ru</key> - <value>Вариант отчета</value> - - 2 - - String - - - - true - - - true - - - - Результат - - <key>ru</key> - <value>Результат</value> - - 3 - - SpreadsheetDocument - - - true - - - true - - - - - ДанныеРасшифровки - 4 - - String - - - - true - - - true - - - - - - - - ShowOnComposition - Результат - ДанныеРасшифровки - НаименованиеТекущегоВарианта - -
    diff --git a/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/Forms/ФормаОтчета/Module.bsl deleted file mode 100644 index e0967cd59..000000000 --- a/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/Forms/ФормаОтчета/Module.bsl +++ /dev/null @@ -1,9 +0,0 @@ - -&НаКлиенте -Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) - ЗначениеРасшифровки = Неопределено; - Если БизнесПроцессыИЗадачиВызовСервера.ЭтоЗадачаИсполнителю(Расшифровка, ДанныеРасшифровки, ЗначениеРасшифровки) Тогда - СтандартнаяОбработка = НЕ БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(ЗначениеРасшифровки); - КонецЕсли; -КонецПроцедуры - diff --git a/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/Help/ru.html b/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/Help/ru.html deleted file mode 100644 index b91b981f3..000000000 --- a/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/Help/ru.html +++ /dev/null @@ -1,3 +0,0 @@ - -

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

    -

    Для детальной настройки отчета используйте команду "Все действия - Изменить вариант".

    \ No newline at end of file diff --git a/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs deleted file mode 100644 index 2b8b202aa..000000000 --- a/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ /dev/null @@ -1,344 +0,0 @@ - - - - ИсточникДанных1 - Local - - - Задачи - - Выполнено - Выполнено - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Выполнено</v8:content> - </v8:item> - - - - ВСрок - ВСрок - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>В срок</v8:content> - </v8:item> - - - - НеВСрок - НеВСрок - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Не в срок</v8:content> - </v8:item> - - - - НеВыполнено - НеВыполнено - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Не выполнено</v8:content> - </v8:item> - - - - Количество - Количество - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Количество</v8:content> - </v8:item> - - - - Исполнитель - Исполнитель - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Исполнитель</v8:content> - </v8:item> - - - - Выполняются - Выполняются - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Выполняются</v8:content> - </v8:item> - - - - Просроченные - Просроченные - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Просроченные</v8:content> - </v8:item> - - - - Автор - Автор - - - ДатаСозданияЗадачи - ДатаСозданияЗадачи - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Дата создания задачи</v8:content> - </v8:item> - - - ИсточникДанных1 - ВЫБРАТЬ РАЗРЕШЕННЫЕ - СУММА(ВЫБОР - КОГДА Задачи.Выполнена - И (Задачи.СрокИсполнения >= Задачи.ДатаИсполнения ИЛИ Задачи.СрокИсполнения = "00010101") - ТОГДА 1 - ИНАЧЕ 0 - КОНЕЦ) КАК ВСрок, - СУММА(ВЫБОР - КОГДА Задачи.Выполнена - И Задачи.СрокИсполнения < Задачи.ДатаИсполнения И Задачи.СрокИсполнения <> "00010101" - ТОГДА 1 - ИНАЧЕ 0 - КОНЕЦ) КАК НеВСрок, - СУММА(ВЫБОР - КОГДА Задачи.Выполнена - ТОГДА 1 - ИНАЧЕ 0 - КОНЕЦ) КАК Выполнено, - СУММА(ВЫБОР - КОГДА (НЕ Задачи.Выполнена) - ТОГДА 1 - ИНАЧЕ 0 - КОНЕЦ) КАК НеВыполнено, - СУММА(ВЫБОР - КОГДА НЕ Задачи.Выполнена - И (Задачи.СрокИсполнения >= &КрайнийСрок ИЛИ Задачи.СрокИсполнения = "00010101") - ТОГДА 1 - ИНАЧЕ 0 - КОНЕЦ) КАК Выполняются, - СУММА(ВЫБОР - КОГДА НЕ Задачи.Выполнена - И Задачи.СрокИсполнения < &КрайнийСрок И Задачи.СрокИсполнения <> "00010101" - ТОГДА 1 - ИНАЧЕ 0 - КОНЕЦ) КАК Просроченные, - Задачи.Исполнитель КАК Исполнитель, - Задачи.Автор КАК Автор, - Задачи.Дата КАК ДатаСозданияЗадачи, - КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Задачи.Ссылка) КАК Количество -ИЗ - Задача.ЗадачаИсполнителя КАК Задачи -ГДЕ - Задачи.СостояниеБизнесПроцесса = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Активен) - И (ТИПЗНАЧЕНИЯ(Задачи.БизнесПроцесс) <> ТИП(БизнесПроцесс.Задание) ИЛИ Задачи.БизнесПроцесс.ЗадачаИсточник = ЗНАЧЕНИЕ(Задача.ЗадачаИсполнителя.ПустаяСсылка)) - -СГРУППИРОВАТЬ ПО - Задачи.Автор, - Задачи.Дата, - Задачи.Исполнитель - - - ВСрок - Сумма(ВСрок) - - - Выполнено - Сумма(Выполнено) - - - Количество - Сумма(Количество) - - - НеВСрок - Сумма(НеВСрок) - - - НеВыполнено - Сумма(НеВыполнено) - - - Выполняются - Сумма(Выполняются) - - - Просроченные - Сумма(Просроченные) - - - КрайнийСрок - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Крайний срок</v8:content> - </v8:item> - - - xs:dateTime - - DateTime - - - 0001-01-01T00:00:00 - false - - - ПоИсполнителям - - - ru - По исполнителям - - - - - - Исполнитель - - - Количество - - - Выполнено - - Выполнено - Всего - - - ВСрок - В срок - - - НеВСрок - Не в срок - - Auto - - - Не выполнено - - НеВыполнено - Всего - - - false - Выполняются - Из них в срок - - - Просроченные - Просрочено - - Auto - - Normal - - - - false - Автор - Equal - Справочник.Пользователи.ПустаяСсылка - 266006ea-d93b-4c66-80b4-1c4351ee3bc9 - - - ДатаСозданияЗадачи - GreaterOrEqual - - BeginningOfThisWeek - - 5c622f5e-03f3-49ab-b2d3-7019ad10b0da - Дата начала - - - ДатаСозданияЗадачи - LessOrEqual - - BeginningOfNextDay - - 3f6f709f-45c8-4c94-bbb2-30c025ac53bc - Дата окончания - - Normal - 8232bbf8-4f3f-4d3a-8b46-5819419fe7c7 - - - - КрайнийСрок - - Custom - 0001-01-01T00:00:00 - - ffa23fbd-3518-4a34-8ef1-742af4f2471f - - - - - НеВыполнено - Desc - - Normal - - - Normal - - - - ВертикальноеРасположениеОбщихИтогов - BeginAndEnd - - - ВыводитьЗаголовок - DontOutput - - - Заголовок - Справка об исполнительской дисциплине - - - ВыводитьПараметрыДанных - DontOutput - - - ВыводитьОтбор - DontOutput - - - - - - Исполнитель - Items - None - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - - - - - - SystemFields.SerialNumber - - - - - Normal - - - \ No newline at end of file diff --git a/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/СправкаОбИсполнительскойДисциплине.mdo b/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/СправкаОбИсполнительскойДисциплине.mdo deleted file mode 100644 index 9c820890c..000000000 --- a/SSL/src/Reports/СправкаОбИсполнительскойДисциплине/СправкаОбИсполнительскойДисциплине.mdo +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - СправкаОбИсполнительскойДисциплине - - ru - Справка об исполнительской дисциплине - - true - Report.СправкаОбИсполнительскойДисциплине.Form.ФормаОтчета - Report.СправкаОбИсполнительскойДисциплине.Template.ОсновнаяСхемаКомпоновкиДанных - true - - - ru - - - - ФормаОтчета - - ru - Форма отчета - - PersonalComputer - MobileDevice - - - ОсновнаяСхемаКомпоновкиДанных - - ru - Основная схема компоновки данных - - DataCompositionSchema - - diff --git a/SSL/src/Roles/АдминистраторСистемы/Rights.rights b/SSL/src/Roles/АдминистраторСистемы/Rights.rights index 6c1ad6c63..11d4c522f 100644 --- a/SSL/src/Roles/АдминистраторСистемы/Rights.rights +++ b/SSL/src/Roles/АдминистраторСистемы/Rights.rights @@ -3,6 +3,6854 @@ false false false + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ПоказыватьОповещение + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор.Command.ОткрытьАдресныйКлассификатор + + View + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантРасписанияРезервногоКопирования + + View + true + + + Edit + true + + + + InformationRegister.НастройкиОтправителя.Dimension.КаналСообщений + + View + true + + + Edit + true + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + Constant.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.СтрокаРасписания + + View + true + + + Edit + true + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.StandardAttribute.Period + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды + + View + true + + + Edit + true + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.Resource.СостояниеЗадания + + View + true + + + Edit + true + + + + Catalog.КлассификаторВалют.Attribute.НаименованиеПолное + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.Resource.НомерПопытки + + View + true + + + Edit + true + + + + InformationRegister.ХранимыеФайлыВерсий.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + Constant.ПараметрыАдминистрированияИБ + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + Constant.КопироватьОбластиДанныхИзЭталонной + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.СообщенияОбменаДанными + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.СообщенияОбменаДанными.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.СообщенияОбменаДанными.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.СообщенияОбменаДанными.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.СообщенияОбменаДанными.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.Dimension.Узел + + View + true + + + Edit + true + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FILEСжиматьФайлИсходящегоСообщения + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаОтложенногоОповещения + + View + true + + + Edit + true + + + + InformationRegister.ПодпискиПолучателей.Dimension.КаналСообщений + + View + true + + + Edit + true + + + + ExchangePlan.ОбменСообщениями + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.ReceivedNo + + View + true + + + Edit + true + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.SentNo + + View + true + + + Edit + true + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.Ref + + View + true + + + Edit + true + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.DeletionMark + + View + true + + + Edit + true + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.Description + + View + true + + + Edit + true + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.Code + + View + true + + + Edit + true + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.ValueType + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Description + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Code + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.IsFolder + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Parent + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Predefined + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.DeletionMark + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Ref + + View + true + + + Edit + true + + + + Catalog.СценарииОбменовДанными.Attribute.РегламентноеЗаданиеGUID + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMАутентификацияОперационнойСистемы + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаXML + + View + true + + + Edit + true + + + + CommonForm.УстановкаВедущейКонечнойТочки + + View + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаИнтерактивногоРезервногоКопирования + + View + true + + + Edit + true + + + + DataProcessor.РегламентныеИФоновыеЗадания.Command.РегламентныеИФоновыеЗадания + + View + true + + + + InformationRegister.КурсыВалют.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.ВерсииПоставляемыхДанных.Resource.ВерсияПоставляемыхДанных + + View + true + + + Edit + true + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КоличествоКопийВКаталоге + + View + true + + + Edit + true + + + + Constant.НастройкаПроксиСервера + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Resource.ДатаОкончания + + View + true + + + Edit + true + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Dimension.АдресныйОбъект + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Модификатор + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодХраненияРезервныхКопий + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ + + Use + true + + + View + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMПарольПользователя + + View + true + + + Edit + true + + + + DataProcessor.КонтрольЖурналаРегистрации + + Use + true + + + View + true + + + + InformationRegister.АдресныйКлассификатор.Resource.Наименование + + View + true + + + Edit + true + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.РазделенныеРегламентныеЗадания.Resource.Использование + + View + true + + + Edit + true + + + + InformationRegister.ПодпискиПолучателей + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.Period + + View + true + + + Edit + true + + + + Constant.ИмяСлужебногоПользователяСервисаПоставляемыхДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + ExchangePlan.ИзмененияПоставляемыхДанных.Command.ЗаполнитьСписокУзлов + + View + true + + + + InformationRegister.НеразделенныеПользователи.Dimension.ИдентификаторПользователяИБ + + View + true + + + Edit + true + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.РегламентноеЗаданиеGUID + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении + + View + true + + + Edit + true + + + + Catalog.СообщенияСистемы.Attribute.КоличествоПопытокОбработкиСообщения + + View + true + + + Edit + true + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Resource.ДатаВыпускаВерсии + + View + true + + + Edit + true + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + true + + + Edit + true + + + + CommonCommand.НастройкаОбменаСообщениями + + View + true + + + + Catalog.СтраныМира.Attribute.КодАльфа2 + + View + true + + + Edit + true + + + + InformationRegister.НастройкиОтправителя.Dimension.Получатель + + View + true + + + Edit + true + + + + InformationRegister.КэшПрограммныхИнтерфейсов.Dimension.Идентификатор + + View + true + + + Edit + true + + + + InformationRegister.РазделенныеРегламентныеЗадания.Dimension.РегламентноеЗадание + + View + true + + + Edit + true + + + + Catalog.СообщенияСистемы.Attribute.Получатель + + View + true + + + Edit + true + + + + InformationRegister.СвязиПоставляемыхДанных.Dimension.ОбластьДанных + + View + true + + + Edit + true + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.LineNumber + + View + true + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.ВерсииПодсистем.Dimension.ИмяПодсистемы + + View + true + + + Edit + true + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Resource.Наименование + + View + true + + + Edit + true + + + + Constant.ВыполнятьЗамерыПроизводительности + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + DataProcessor.РегламентныеИФоновыеЗадания + + Use + true + + + View + true + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Ответственный + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSПароль + + View + true + + + Edit + true + + + + DataProcessor.ОценкаПроизводительности + + Use + true + + + View + true + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторИсточника + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КаталогСРезервнымиКопиями + + View + true + + + Edit + true + + + + CommonCommand.ОчиститьРегистрациюИзмененийПоставляемыхДанных + + View + true + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение.Attribute.ПолноеИмяОбъектаМетаданных + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДанных.Attribute.ИдентификаторВыгрузки + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор.Dimension.ТипАдресногоЭлемента + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных + + View + true + + + Edit + true + + + + InformationRegister.ВерсииПоставляемыхДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ВерсииПоставляемыхДанных.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.ВерсииПоставляемыхДанных.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.ВерсииПоставляемыхДанных.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Resource.СообщениеБлокировки + + View + true + + + Edit + true + + + + ExchangePlan.ОбменСообщениями.Attribute.Ведущая + + View + true + + + Edit + true + + + + InformationRegister.ПодчиненныеПользователи.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДанных.Resource.Статус + + View + true + + + Edit + true + + + + Constant.РежимИспользованияИнформационнойБазы + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + Catalog.КлючевыеОперации + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + true + + + Edit + true + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + true + + + Edit + true + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + true + + + Edit + true + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + true + + + Edit + true + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + true + + + Edit + true + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + true + + + Edit + true + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + View + true + + + Edit + true + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.Dimension.ОбластьДанных + + View + true + + + Edit + true + + + + Constant.СообщениеБлокировкиПриОбновленииКонфигурации + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВыполняемоеДействие + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Идентификатор + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор.Resource.ПризнакАктуальности + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяМакетаПравил + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСжиматьФайлИсходящегоСообщения + + View + true + + + Edit + true + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторПриемника + + View + true + + + Edit + true + + + + InformationRegister.СообщенияОбменаДанными.Resource.ДатаЗакладкиСообщения + + View + true + + + Edit + true + + + + InformationRegister.ВерсииПодсистем.Resource.Версия + + View + true + + + Edit + true + + + + InformationRegister.АдресныеСокращения + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.АдресныеСокращения.StandardAttribute.LineNumber + + View + true + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Resource.ВидДня + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяПланаОбменаИзПравил + + View + true + + + Edit + true + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + Catalog.СообщенияСистемы.Attribute.ТелоСообщения + + View + true + + + Edit + true + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Комментарий + + View + true + + + Edit + true + + + + InformationRegister.СостоянияОбменовДанными.Dimension.ДействиеПриОбмене + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИсточникПравил + + View + true + + + Edit + true + + + + Catalog.СценарииОбменовДанными + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Predefined + + View + true + + + Edit + true + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Ref + + View + true + + + Edit + true + + + + Catalog.СценарииОбменовДанными.StandardAttribute.DeletionMark + + View + true + + + Edit + true + + + + Catalog.СценарииОбменовДанными.StandardAttribute.IsFolder + + View + true + + + Edit + true + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Owner + + View + true + + + Edit + true + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Parent + + View + true + + + Edit + true + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Description + + View + true + + + Edit + true + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Code + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаПравил + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Predefined + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Ref + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.DeletionMark + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.IsFolder + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Owner + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Parent + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Description + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Code + + View + true + + + Edit + true + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Resource.КонецБлокировки + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДанных.Attribute.Повтор + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.LineNumber + + View + true + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Period + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим + + View + true + + + Edit + true + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + Constant.ОбщийКаталогВременныхФайлов + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.СостоянияОбменовДанными.Resource.РезультатВыполненияОбмена + + View + true + + + Edit + true + + + + InformationRegister.КурсыВалютПоКлассификатору.Resource.Кратность + + View + true + + + Edit + true + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + true + + + Edit + true + + + + CommonForm.ВходВОбластьДанных + + View + true + + + + InformationRegister.ДанныеПроизводственногоКалендаря + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.LineNumber + + View + true + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.РазделенныеРегламентныеЗадания + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.РазделенныеРегламентныеЗадания.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.РазделенныеРегламентныеЗадания.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.РазделенныеРегламентныеЗадания.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяСервера1СПредприятия + + View + true + + + Edit + true + + + + InformationRegister.БлокировкиСеансовОбластиДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.БлокировкиСеансовОбластиДанных.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.БлокировкиСеансовОбластиДанных.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.БлокировкиСеансовОбластиДанных.StandardAttribute.Period + + View + true + + + Edit + true + + + + Constant.ПарольСлужебногоПользователяМенеджераСервиса + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + Constant.СписокРасширенийТекстовыхФайлов + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + true + + + Edit + true + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Dimension.УзелИнформационнойБазы + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.Resource.ЗапланированныйМоментЗапуска + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Версия + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.Resource.Параметры + + View + true + + + Edit + true + + + + Constant.ПарольПользователяАгентаСервиса + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор.Resource.АльтернативныеНазвания + + View + true + + + Edit + true + + + + Constant.СписокРасширенийФайловOpenDocument + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + true + + + Edit + true + + + + InformationRegister.СостоянияОбменовДанными.Dimension.УзелИнформационнойБазы + + View + true + + + Edit + true + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.Дата + + View + true + + + Edit + true + + + + InformationRegister.СвязиПоставляемыхДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.СвязиПоставляемыхДанных.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.СвязиПоставляемыхДанных.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.СвязиПоставляемыхДанных.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSИмяПользователя + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILСжиматьФайлИсходящегоСообщения + + View + true + + + Edit + true + + + + InformationRegister.НастройкиОтправителя + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.СостоянияОбменовДанными + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.LineNumber + + View + true + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПродолжатьНапоминания + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Вид + + View + true + + + Edit + true + + + + Catalog.СценарииОбменовДанными.Attribute.ИспользоватьРегламентноеЗадание + + View + true + + + Edit + true + + + + InformationRegister.ПредметыПапкиВзаимодействий.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ЗначениеПустойСсылки + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.БезДанных + + View + true + + + Edit + true + + + + InformationRegister.ВерсииПодсистем + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Period + + View + true + + + Edit + true + + + + Constant.ИзвлекатьТекстыФайловНаСервере + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.АдресныеСокращения.Resource.Наименование + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КоличествоКопийВКаталоге + + View + true + + + Edit + true + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаЗачитанные + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыОбъекта + + View + true + + + Edit + true + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + true + + + Edit + true + + + + CommonCommand.ОбновлениеОбщихПоставляемыхДанных + + View + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КодТипаРезервногоКопирования + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + true + + + Edit + true + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Attribute.ОбъектВыгруженПоСсылке + + View + true + + + Edit + true + + + + Constant.ОбщийКаталогВременныхФайловLinux + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.Dimension.ИмяПланаОбмена + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПорт + + View + true + + + Edit + true + + + + Constant.МаксимальныйРазмерФайла + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных + + View + true + + + Edit + true + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.Resource.НомерСообщения + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMКаталогИнформационнойБазы + + View + true + + + Edit + true + + + + CommonAttribute.ОбластьДанных + + View + true + + + Edit + true + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.Resource.ИсполняющееФоновоеЗадание + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИнформацияОПравилах + + View + true + + + Edit + true + + + + Catalog.СообщенияСистемы.Attribute.Заблокировано + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования + + View + true + + + Edit + true + + + + Catalog.ПроизводственныеКалендари + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Predefined + + View + true + + + Edit + true + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Ref + + View + true + + + Edit + true + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.DeletionMark + + View + true + + + Edit + true + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.IsFolder + + View + true + + + Edit + true + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Owner + + View + true + + + Edit + true + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Parent + + View + true + + + Edit + true + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Description + + View + true + + + Edit + true + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Code + + View + true + + + Edit + true + + + + InformationRegister.АктивныеПредметыВзаимодействий.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПорядокКоллекции + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.CombiВидТранспортаСообщенийОбмена + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FILEКаталогОбменаИнформацией + + View + true + + + Edit + true + + + + InformationRegister.СостоянияОбменовДанными.Resource.ДатаНачала + + View + true + + + Edit + true + + + + Catalog.СтраныМира + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.СтраныМира.StandardAttribute.Predefined + + View + true + + + Edit + true + + + + Catalog.СтраныМира.StandardAttribute.Ref + + View + true + + + Edit + true + + + + Catalog.СтраныМира.StandardAttribute.DeletionMark + + View + true + + + Edit + true + + + + Catalog.СтраныМира.StandardAttribute.IsFolder + + View + true + + + Edit + true + + + + Catalog.СтраныМира.StandardAttribute.Owner + + View + true + + + Edit + true + + + + Catalog.СтраныМира.StandardAttribute.Parent + + View + true + + + Edit + true + + + + Catalog.СтраныМира.StandardAttribute.Description + + View + true + + + Edit + true + + + + Catalog.СтраныМира.StandardAttribute.Code + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение + + View + true + + + Edit + true + + + + Catalog.СообщенияСистемы.Attribute.ПодробноеПредставлениеОшибки + + View + true + + + Edit + true + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Resource.УникальныйИдентификаторИсточникаСтрокой + + View + true + + + Edit + true + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Dimension.ОбластьДанных + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КаталогСРезервнымиКопиями + + View + true + + + Edit + true + + + + InformationRegister.РазделенныеРегламентныеЗадания.Resource.ИндивидуальнаяНастройка + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодОповещения + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.НажатиеГиперссылки + + View + true + + + Edit + true + + + + Constant.МаксимальноеКоличествоИсполняющихФоновыхЗаданий + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + Constant.АдресАгентаСервиса + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции + + View + true + + + Edit + true + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы + + View + true + + + Edit + true + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Resource.Эксклюзивная + + View + true + + + Edit + true + + + + InformationRegister.КэшПрограммныхИнтерфейсов.Dimension.ТипДанных + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДанных.Resource.Представление + + View + true + + + Edit + true + + + + InformationRegister.ИзмененияОбщихДанныхУзлов + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор.Resource.Индекс + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодОповещения + + View + true + + + Edit + true + + + + InformationRegister.СостоянияОбменовДанными.Resource.ДатаОкончания + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки + + View + true + + + Edit + true + + + + InformationRegister.НеразделенныеПользователи + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.НеразделенныеПользователи.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.НеразделенныеПользователи.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.НеразделенныеПользователи.StandardAttribute.Period + + View + true + + + Edit + true + + + + Catalog.СообщенияСистемы.Attribute.ЭтоБыстроеСообщение + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы + + View + true + + + Edit + true + + + + InformationRegister.УведомленияОПрочтении.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + DataProcessor.УправлениеПолнотекстовымПоиском + + Use + true + + + View + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаОтложенногоОповещения + + View + true + + + Edit + true + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + Catalog.ТомаХраненияФайлов.Attribute.МаксимальныйРазмер + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.Resource.РегламентноеЗадание + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ТипОграниченияКаталогаСРезервнымиКопиями + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.КоличествоЭлементовВТранзакцииЗагрузкиДанных + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Predefined + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Ref + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.DeletionMark + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.IsFolder + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Owner + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Parent + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Description + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Code + + View + true + + + Edit + true + + + + Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьLinux + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Имя + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий + + View + true + + + Edit + true + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.ВерсииПодсистем.Dimension.ОбластьДанных + + View + true + + + Edit + true + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Используется + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВариантРасписанияРезервногоКопирования + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ + + Use + true + + + View + true + + + + Constant.ИспользоватьПолнотекстовыйПоиск + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.Resource.ЭксклюзивноеВыполнение + + View + true + + + Edit + true + + + + Constant.КаталогВременныхФайловСообщенийОбменаДляWindows + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + true + + + Edit + true + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПолноеИмя + + View + true + + + Edit + true + + + + InformationRegister.КэшПрограммныхИнтерфейсов + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.КэшПрограммныхИнтерфейсов.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.КэшПрограммныхИнтерфейсов.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.КэшПрограммныхИнтерфейсов.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.КэшПрограммныхИнтерфейсов.StandardAttribute.Period + + View + true + + + Edit + true + + + + Catalog.КлассификаторВалют + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.КлассификаторВалют.StandardAttribute.Predefined + + View + true + + + Edit + true + + + + Catalog.КлассификаторВалют.StandardAttribute.Ref + + View + true + + + Edit + true + + + + Catalog.КлассификаторВалют.StandardAttribute.DeletionMark + + View + true + + + Edit + true + + + + Catalog.КлассификаторВалют.StandardAttribute.IsFolder + + View + true + + + Edit + true + + + + Catalog.КлассификаторВалют.StandardAttribute.Owner + + View + true + + + Edit + true + + + + Catalog.КлассификаторВалют.StandardAttribute.Parent + + View + true + + + Edit + true + + + + Catalog.КлассификаторВалют.StandardAttribute.Description + + View + true + + + Edit + true + + + + Catalog.КлассификаторВалют.StandardAttribute.Code + + View + true + + + Edit + true + + + + Constant.НеИспользоватьРазделениеПоОбластямДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + Constant.КаталогВременныхФайловСообщенийОбменаДляLinux + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + Constant.УдалитьТипХраненияФайлов + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.Dimension.ОбластьДанных + + View + true + + + Edit + true + + + + Constant.КонечнаяТочкаМенеджераСервиса + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаОповещения + + View + true + + + Edit + true + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Attribute.НомерОтправленного + + View + true + + + Edit + true + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.ДействиеПриОбмене + + View + true + + + Edit + true + + + + DataProcessor.АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных + + Use + true + + + View + true + + + + InformationRegister.КурсыВалютПоКлассификатору + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.LineNumber + + View + true + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Period + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.КлючОбъектаМетаданных + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.Dimension.Задание + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.Attribute.ИспользоватьФильтрВыборочнойРегистрацииОбъектов + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.Dimension.ВидПравил + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.НажатиеГиперссылки + + View + true + + + Edit + true + + + + Constant.БлокировкаОтправкиБыстрыхСообщений + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.КэшПрограммныхИнтерфейсов.Resource.ДатаОбновления + + View + true + + + Edit + true + + + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + true + + + Edit + true + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УзелИнформационнойБазы + + View + true + + + Edit + true + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.LineNumber + + View + true + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.LineNumber + + View + true + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Period + + View + true + + + Edit + true + + + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодОтложенногоОповещения + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор.Dimension.Код + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ТипОграниченияКаталогаСРезервнымиКопиями + + View + true + + + Edit + true + + + + Constant.ПарольСлужебногоПользователяСервисаПоставляемыхДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + Constant.ИмяСлужебногоПользователяМенеджераСервиса + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КодТипаИнтерактивногоРезервногоКопирования + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.LineNumber + + View + true + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.КоличествоЭлементовВТранзакцииВыгрузкиДанных + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПарольАдминистратора + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИмяФайла + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Dimension.Узел + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий + + View + true + + + Edit + true + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипПриемника + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Period + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПродолжатьНапоминания + + View + true + + + Edit + true + + + + InformationRegister.ИсточникиВнешнихЗадач.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + Catalog.ТомаХраненияФайлов.Attribute.Комментарий + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодХраненияРезервныхКопий + + View + true + + + Edit + true + + + + InformationRegister.ПодпискиПолучателей.Dimension.Получатель + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяПользователя + + View + true + + + Edit + true + + + + CommonCommand.ОбменСообщениями + + View + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ФайлЗагрузкиРезервнойКопии + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + + View + true + + + Edit + true + + + + Constant.ВнутреннийАдресМенеджераСервиса + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + CommonCommand.ЗагрузитьДанныеИзЛокальнойВерсии + + View + true + + + + Constant.СписокЗапрещенныхРасширений + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ЗамерыВремени + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодГородаВКоде + + View + true + + + Edit + true + + + + InformationRegister.СвязиПоставляемыхДанных.Dimension.ЭлементРазделенныхДанных + + View + true + + + Edit + true + + + + Constant.ИмяПользователяАгентаСервиса + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.Resource.Ключ + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодАдресногоОбъектаВКоде + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодНаселенногоПунктаВКоде + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILУчетнаяЗапись + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ХранилищеОбработки + + View + true + + + Edit + true + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Публикация + + View + true + + + Edit + true + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.Год + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДанных.Attribute.ОшибкаОбработки + + View + true + + + Edit + true + + + + Catalog.ТомаХраненияФайлов.Attribute.ПорядокЗаполнения + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.Attribute.ПравилаЗагружены + + View + true + + + Edit + true + + + + InformationRegister.ВерсииПоставляемыхДанных.Dimension.ВидПоставляемыхДанных + + View + true + + + Edit + true + + + + InformationRegister.СообщенияОбменаДанными.Dimension.ИдентификаторСообщения + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Синоним + + View + true + + + Edit + true + + + + Constant.АдресВебСервисаОбменаДанными + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДанных.Dimension.ОбластьДанных + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Представление + + View + true + + + Edit + true + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.ПроизводственныйКалендарь + + View + true + + + Edit + true + + + + ExchangePlan.ИзмененияПоставляемыхДанных + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.ReceivedNo + + View + true + + + Edit + true + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.SentNo + + View + true + + + Edit + true + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.Ref + + View + true + + + Edit + true + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.DeletionMark + + View + true + + + Edit + true + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.Description + + View + true + + + Edit + true + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.Code + + View + true + + + Edit + true + + + + Constant.ИспользоватьРазделениеПоОбластямДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + Constant.ХранитьФайлыВТомахНаДиске + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + Catalog.КлассификаторВалют.Attribute.ПараметрыПрописиНаРусском + + View + true + + + Edit + true + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.УзелИнформационнойБазы + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодУлицыВКоде + + View + true + + + Edit + true + + + + InformationRegister.КэшПрограммныхИнтерфейсов.Resource.Данные + + View + true + + + Edit + true + + + + Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьWindows + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.ВидыДоступа + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.ValueType + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Description + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Code + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.IsFolder + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Parent + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Predefined + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.DeletionMark + + View + true + + + Edit + true + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Ref + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДанных.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДанных.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДанных.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.СостоянияУспешныхОбменовДанными + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.LineNumber + + View + true + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + Constant.НомерЗагрузкиПоставляемыхДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.КурсыВалютПоКлассификатору.Resource.Курс + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + + View + true + + + Edit + true + + + + Constant.АдресСервисаПоставляемыхДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + CommonCommand.ЗагрузитьДанныеВОбласть + + View + true + + + + Catalog.ТомаХраненияФайлов + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Predefined + + View + true + + + Edit + true + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Ref + + View + true + + + Edit + true + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.DeletionMark + + View + true + + + Edit + true + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.IsFolder + + View + true + + + Edit + true + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Owner + + View + true + + + Edit + true + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Parent + + View + true + + + Edit + true + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Description + + View + true + + + Edit + true + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Code + + View + true + + + Edit + true + + + + Catalog.СтраныМира.Attribute.КодАльфа3 + + View + true + + + Edit + true + + + + CommonForm.НастройкаОбменаСообщениями + + View + true + + + + InformationRegister.НастройкиОтправителя.Command.НастройкиОтправителя + + View + true + + + + InformationRegister.ПраваПоЗначениямДоступа.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПользователь + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ВариантЗапуска + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПассивноеСоединение + + View + true + + + Edit + true + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипИсточника + + View + true + + + Edit + true + + + + Catalog.СообщенияСистемы.Attribute.Отправитель + + View + true + + + Edit + true + + + + InformationRegister.АдресныеСокращения.Dimension.Код + + View + true + + + Edit + true + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Resource.НачалоБлокировки + + View + true + + + Edit + true + + + + InformationRegister.СвязиПоставляемыхДанных.Dimension.ЭлементОбщихДанных + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяИнформационнойБазыНаСервере1СПредприятия + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.СтрокаРасписания + + View + true + + + Edit + true + + + + InformationRegister.СвязиПоставляемыхДанных.Resource.РучноеИзменение + + View + true + + + Edit + true + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.ВыполнитьКорректировкуИнформацииСопоставления + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.Resource.ИмяМетода + + View + true + + + Edit + true + + + + InformationRegister.КурсыВалютПоКлассификатору.Dimension.Валюта + + View + true + + + Edit + true + + + + InformationRegister.КодировкиВерсийФайлов.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПолныйСиноним + + View + true + + + Edit + true + + + + InformationRegister.АдресныеСокращения.Dimension.Уровень + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДанных.Attribute.ЧасовойПояс + + View + true + + + Edit + true + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Информация + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSURLВебСервиса + + View + true + + + Edit + true + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + Catalog.СценарииОбменовДанными.Attribute.Комментарий + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSИспользоватьПередачуБольшогоОбъемаДанных + + View + true + + + Edit + true + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.НачальнаяВыгрузкаДанных + + View + true + + + Edit + true + + + + InformationRegister.АдресныеСокращения.Resource.Сокращение + + View + true + + + Edit + true + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаОповещения + + View + true + + + Edit + true + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.Dimension.НомерСообщения + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПуть + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении + + View + true + + + Edit + true + + Configuration.БиблиотекаСтандартныхПодсистем @@ -94,4 +6942,363 @@ true + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена + + View + true + + + Edit + true + + + + ExchangePlan.ИзмененияПоставляемыхДанных.Attribute.ОбластьДанных + + View + true + + + Edit + true + + + + InformationRegister.СообщенияОбменаДанными.Resource.ИмяФайлаСообщения + + View + true + + + Edit + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор.Resource.Сокращение + + View + true + + + Edit + true + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде + + View + true + + + Edit + true + + + + Catalog.СтраныМира.Attribute.НаименованиеПолное + + View + true + + + Edit + true + + + + Catalog.СообщенияСистемы + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.СообщенияСистемы.StandardAttribute.Predefined + + View + true + + + Edit + true + + + + Catalog.СообщенияСистемы.StandardAttribute.Ref + + View + true + + + Edit + true + + + + Catalog.СообщенияСистемы.StandardAttribute.DeletionMark + + View + true + + + Edit + true + + + + Catalog.СообщенияСистемы.StandardAttribute.IsFolder + + View + true + + + Edit + true + + + + Catalog.СообщенияСистемы.StandardAttribute.Owner + + View + true + + + Edit + true + + + + Catalog.СообщенияСистемы.StandardAttribute.Parent + + View + true + + + Edit + true + + + + Catalog.СообщенияСистемы.StandardAttribute.Description + + View + true + + + Edit + true + + + + Catalog.СообщенияСистемы.StandardAttribute.Code + + View + true + + + Edit + true + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMВариантРаботыИнформационнойБазы + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.StandardAttribute.Period + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.Resource.ДатаНачалаПоследнегоЗапуска + + View + true + + + Edit + true + + + + CommonForm.ПодключениеКонечнойТочки + + View + true + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыСписка + + View + true + + + Edit + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодОтложенногоОповещения + + View + true + + + Edit + true + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена + + View + true + + + Edit + true + + + + InformationRegister.ОчередьЗаданий.Resource.Использование + + View + true + + + Edit + true + + diff --git a/SSL/src/Roles/БазовыеПрава/Rights.rights b/SSL/src/Roles/БазовыеПрава/Rights.rights index 768b25aa3..bd1cffe5a 100644 --- a/SSL/src/Roles/БазовыеПрава/Rights.rights +++ b/SSL/src/Roles/БазовыеПрава/Rights.rights @@ -441,6 +441,21 @@ false + + Catalog.ИдентификаторыОбъектовМетаданных + + Read + true + + + View + true + + + InputByString + true + + InformationRegister.НапоминанияПользователя.Attribute.Описание @@ -1144,17 +1159,6 @@ false - - Catalog.Заметки.Attribute.ОбщаяЗаметка - - View - false - - - Edit - false - - CommonForm.СозданиеНачальногоОбразаСФайлами @@ -1187,6 +1191,13 @@ true + + CommonForm.ОписаниеИзмененийСистемы + + View + true + + DataProcessor.ГрупповоеИзменениеОбъектов @@ -1205,6 +1216,13 @@ true + + InformationRegister.КодировкиВерсийФайлов + + Read + true + + CommonCommand.ПрисоединенныеФайлыКОбъекту diff --git a/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights b/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights index ad63448de..2efcf63ed 100644 --- a/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights +++ b/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5570,7 +5570,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9728,7 +9728,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10531,7 +10531,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -11905,37 +11905,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - Output - true - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Редактирует @@ -12905,7 +12874,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16832,7 +16801,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false @@ -18030,6 +17999,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + Output + true + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена diff --git a/SSL/src/Roles/ВыполнениеОбменовДанными/Rights.rights b/SSL/src/Roles/ВыполнениеОбменовДанными/Rights.rights index 018fec8d2..8723a5fa3 100644 --- a/SSL/src/Roles/ВыполнениеОбменовДанными/Rights.rights +++ b/SSL/src/Roles/ВыполнениеОбменовДанными/Rights.rights @@ -3,6 +3,13 @@ false true false + + WebService.Exchange.Operation.SaveFileFromParts + + Use + true + + CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена @@ -10,6 +17,27 @@ true + + WebService.Exchange.Operation.ReleaseFile + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.Upload + + Use + true + + + + WebService.Exchange.Operation.UploadData + + Use + true + + CommonForm.ВыполнениеОбменаДанными @@ -17,6 +45,27 @@ true + + WebService.Exchange_2_0_1_6.Operation.FileExists + + Use + true + + + + WebService.Exchange.Operation.PutFileIntoStorage + + Use + true + + + + WebService.Exchange.Operation.GetContinuousOperationStatus + + Use + true + + CommonCommand.ОткрытьСценарииОбменовДанными @@ -24,6 +73,20 @@ true + + WebService.Exchange_2_0_1_6.Operation.GetFilePart + + Use + true + + + + WebService.Exchange.Operation.GetFileFromStorage + + Use + true + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз @@ -35,6 +98,13 @@ true + + WebService.Exchange.Operation.Upload + + Use + true + + CommonCommand.ОткрытьОбменыДанными @@ -49,6 +119,13 @@ true + + WebService.Exchange.Operation.FileExists + + Use + true + + Catalog.СценарииОбменовДанными @@ -64,6 +141,13 @@ true + + WebService.Exchange.Operation.PutFilePart + + Use + true + + CommonCommand.ВыполнитьОбменДанными @@ -71,6 +155,20 @@ true + + WebService.Exchange.Operation.DownloadData + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.SaveFileFromParts + + Use + true + + InformationRegister.СостоянияОбменовДанными @@ -82,6 +180,13 @@ true + + CommonForm.ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации + + View + true + + CommonCommand.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных @@ -89,6 +194,27 @@ true + + WebService.Exchange_2_0_1_6.Operation.DownloadData + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.GetFileFromStorage + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.PutFileIntoStorage + + Use + true + + Subsystem.СтандартныеПодсистемы.Subsystem.ОбменДанными @@ -96,6 +222,27 @@ true + + WebService.Exchange_2_0_1_6.Operation.GetContinuousOperationStatus + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.Download + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.PutFilePart + + Use + true + + DataProcessor.ПомощникИнтерактивногоОбменаДанными @@ -107,6 +254,13 @@ true + + WebService.Exchange_2_0_1_6.Operation.UploadData + + Use + true + + InformationRegister.НастройкиТранспортаОбмена @@ -136,6 +290,20 @@ true + + WebService.Exchange_2_0_1_6.Operation.ReleaseFile + + Use + true + + + + WebService.Exchange.Operation.Download + + Use + true + + InformationRegister.СостоянияУспешныхОбменовДанными @@ -147,6 +315,27 @@ true + + WebService.Exchange.Operation.GetFilePart + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.PrepareGetFile + + Use + true + + + + WebService.Exchange.Operation.PrepareGetFile + + Use + true + + CommonCommand.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных diff --git a/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights index 2b8cd32c5..e56a583c8 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights @@ -121,6 +121,20 @@ true + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Dimension.АдресныйОбъект + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Наименование + + Edit + false + + InformationRegister.КалендарныеГрафики @@ -186,6 +200,13 @@ true + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Resource.ДатаВыпускаВерсии + + Edit + false + + Catalog.Валюты @@ -225,6 +246,38 @@ true + + Catalog.СтраныМира.Attribute.КодАльфа2 + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Resource.Наименование + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.ТипАдресногоЭлемента + + Edit + false + + Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ @@ -240,22 +293,64 @@ - InformationRegister.АдресныеСокращения + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей - Read - true + View + false - Update + Edit + false + + + + Constant.РежимИспользованияИнформационнойБазы + + Read true View true + + + InformationRegister.АдресныеСокращения + + Read + true + + + View + true + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Active Edit - true + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Period + + Edit + false @@ -264,17 +359,55 @@ Read true - - Update - true - View true + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Active Edit - true + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Period + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Город + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.АльтернативныеНазвания + + Edit + false @@ -306,6 +439,24 @@ true + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Resource.Наименование + + Edit + false + + Catalog.ВидыДокументовФизическихЛиц @@ -352,6 +503,17 @@ true + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Представление + + View + false + + + Edit + false + + Catalog.ВидыКонтактнойИнформации @@ -397,39 +559,104 @@ Read true - - Insert - true - - - Update - true - View true - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - InputByString true + + Catalog.СтраныМира.StandardAttribute.Predefined + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Ref + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.DeletionMark + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.IsFolder + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Owner + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Parent + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Description + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Code + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Тип + + View + false + + + Edit + false + + + + Catalog.Организации.Attribute.Префикс + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Регион + + View + false + + + Edit + false + + InformationRegister.СоставыГруппПользователей @@ -437,6 +664,20 @@ true + + InformationRegister.АдресныйКлассификатор.Resource.Индекс + + Edit + false + + + + InformationRegister.НеразделенныеПользователи + + Read + true + + Report.ПраваДоступа @@ -469,17 +710,55 @@ Read true - - Update - true - View true + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Active Edit - true + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Period + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Вид + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.Код + + Edit + false @@ -557,42 +836,112 @@ - Catalog.Организации + InformationRegister.АдресныйКлассификатор.Dimension.КодГородаВКоде - Read - true - - - Insert - true - - - Update - true + Edit + false + + + Catalog.Организации.StandardAttribute.Predefined View - true - - - InteractiveInsert - true + false Edit - true + false + + + + Catalog.Организации.StandardAttribute.Ref + + View + false - InteractiveSetDeletionMark - true + Edit + false + + + + Catalog.Организации.StandardAttribute.DeletionMark + + View + false - InteractiveClearDeletionMark - true + Edit + false + + + + Catalog.Организации.StandardAttribute.IsFolder + + View + false - InputByString - true + Edit + false + + + + Catalog.Организации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодАдресногоОбъектаВКоде + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодНаселенногоПунктаВКоде + + Edit + false @@ -602,6 +951,13 @@ true + + InformationRegister.АдресныйКлассификатор.Dimension.КодУлицыВКоде + + Edit + false + + ChartOfCharacteristicTypes.ВидыДоступа @@ -609,6 +965,67 @@ true + + Catalog.СтраныМира.Attribute.КодАльфа3 + + Edit + false + + + + InformationRegister.АдресныеСокращения.Dimension.Код + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Страна + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Dimension.Уровень + + Edit + false + + + + InformationRegister.АдресныеСокращения.Resource.Сокращение + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона + + View + false + + + Edit + false + + DataProcessor.ЗагрузкаКурсовВалют @@ -620,6 +1037,31 @@ true + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Сокращение + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде + + Edit + false + + CommonForm.РедактированиеЗначенийСвойств @@ -627,4 +1069,11 @@ true + + Catalog.СтраныМира.Attribute.НаименованиеПолное + + Edit + false + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights index 7db71100f..7d8b61d68 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights @@ -356,7 +356,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5478,7 +5478,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9599,7 +9599,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -12678,7 +12678,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16557,7 +16557,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false diff --git a/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/ДобавлениеИзменениеДополнительныхОтчетовИОбработок.mdo b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/ДобавлениеИзменениеДополнительныхОтчетовИОбработок.mdo index 7c51e83e9..4f09fd875 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/ДобавлениеИзменениеДополнительныхОтчетовИОбработок.mdo +++ b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/ДобавлениеИзменениеДополнительныхОтчетовИОбработок.mdo @@ -3,6 +3,6 @@ ДобавлениеИзменениеДополнительныхОтчетовИОбработок ru - Добавление изменение дополнительных отчетов и обработок + Добавление и изменение дополнительных отчетов и обработок diff --git a/SSL/src/Roles/ДобавлениеИзменениеОбменовДанными/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеОбменовДанными/Rights.rights index e753bf94c..e73f34ec0 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеОбменовДанными/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеОбменовДанными/Rights.rights @@ -3,6 +3,20 @@ false true false + + WebService.Exchange_2_0_1_6.Operation.GetFunctionalOption + + Use + true + + + + WebService.Exchange.Operation.SaveFileFromParts + + Use + true + + CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена @@ -17,6 +31,27 @@ true + + WebService.Exchange.Operation.ReleaseFile + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.Upload + + Use + true + + + + WebService.Exchange.Operation.UploadData + + Use + true + + CommonForm.ВыполнениеОбменаДанными @@ -24,6 +59,27 @@ true + + WebService.Exchange_2_0_1_6.Operation.FileExists + + Use + true + + + + WebService.Exchange.Operation.PutFileIntoStorage + + Use + true + + + + WebService.Exchange.Operation.GetContinuousOperationStatus + + Use + true + + DataProcessor.ПомощникСозданияОбменаДанными @@ -35,6 +91,13 @@ true + + WebService.Exchange_2_0_1_6.Operation.GetIBParameters + + Use + true + + CommonCommand.ОткрытьСценарииОбменовДанными @@ -42,6 +105,20 @@ true + + WebService.Exchange_2_0_1_6.Operation.GetFilePart + + Use + true + + + + WebService.Exchange.Operation.GetFileFromStorage + + Use + true + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз @@ -53,6 +130,13 @@ true + + WebService.Exchange.Operation.Upload + + Use + true + + CommonCommand.ОткрытьОбменыДанными @@ -67,6 +151,20 @@ true + + WebService.Exchange.Operation.GetIBData + + Use + true + + + + WebService.Exchange.Operation.FileExists + + Use + true + + Catalog.СценарииОбменовДанными @@ -106,6 +204,13 @@ true + + WebService.Exchange.Operation.PutFilePart + + Use + true + + CommonCommand.ВыполнитьОбменДанными @@ -113,6 +218,34 @@ true + + WebService.Exchange.Operation.CreateExchange + + Use + true + + + + WebService.Exchange.Operation.GetCommonNodsData + + Use + true + + + + WebService.Exchange.Operation.DownloadData + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.SaveFileFromParts + + Use + true + + InformationRegister.СостоянияОбменовДанными @@ -124,6 +257,13 @@ true + + CommonForm.ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации + + View + true + + CommonCommand.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных @@ -131,6 +271,41 @@ true + + WebService.Exchange_2_0_1_6.Operation.DownloadData + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.GetFileFromStorage + + Use + true + + + + WebService.Exchange.Operation.UpdateExchange + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.RegisterAllDataExceptCatalogs + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.PutFileIntoStorage + + Use + true + + Subsystem.СтандартныеПодсистемы.Subsystem.ОбменДанными @@ -139,12 +314,40 @@ - CommonForm.ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение + WebService.Exchange_2_0_1_6.Operation.CreateExchange + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.GetContinuousOperationStatus + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.Download + + Use + true + + + + CommonForm.ВыборОбъектовИнформационнойБазыКорреспондента View true + + WebService.Exchange_2_0_1_6.Operation.PutFilePart + + Use + true + + DataProcessor.ПомощникИнтерактивногоОбменаДанными @@ -156,6 +359,13 @@ true + + WebService.Exchange_2_0_1_6.Operation.UploadData + + Use + true + + InformationRegister.НастройкиТранспортаОбмена @@ -194,6 +404,13 @@ true + + WebService.Exchange.Operation.GetFunctionalOption + + Use + true + + CommonForm.ОбменыДанными @@ -201,6 +418,13 @@ true + + WebService.Exchange_2_0_1_6.Operation.ReleaseFile + + Use + true + + CommonCommand.ОткрытьПравилаКонвертацииОбъектов @@ -208,6 +432,20 @@ true + + WebService.Exchange.Operation.GetIBParameters + + Use + true + + + + WebService.Exchange.Operation.Download + + Use + true + + InformationRegister.СостоянияУспешныхОбменовДанными @@ -219,6 +457,48 @@ true + + WebService.Exchange.Operation.GetFilePart + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.UpdateExchange + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.GetIBData + + Use + true + + + + WebService.Exchange.Operation.RegisterOnlyCatalogData + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.RegisterOnlyCatalogData + + Use + true + + + + WebService.Exchange.Operation.RegisterAllDataExceptCatalogs + + Use + true + + CommonCommand.ОткрытьПравилаРегистрацииОбъектов @@ -226,6 +506,27 @@ true + + WebService.Exchange_2_0_1_6.Operation.GetCommonNodsData + + Use + true + + + + WebService.Exchange_2_0_1_6.Operation.PrepareGetFile + + Use + true + + + + WebService.Exchange.Operation.PrepareGetFile + + Use + true + + CommonCommand.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных diff --git a/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights new file mode 100644 index 000000000..1f5c354d7 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights @@ -0,0 +1,242 @@ + + + false + true + false + + InformationRegister.АдресныеСокращения + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.АдресныйКлассификатор + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ДанныеПроизводственногоКалендаря + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + Catalog.ПроизводственныеКалендари + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.СтраныМира + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.КлассификаторВалют + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + InformationRegister.КурсыВалютПоКлассификатору + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/ДобавлениеИзменениеОбщейБазовойНСИ.mdo b/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/ДобавлениеИзменениеОбщейБазовойНСИ.mdo new file mode 100644 index 000000000..3659dd8dd --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/ДобавлениеИзменениеОбщейБазовойНСИ.mdo @@ -0,0 +1,8 @@ + + + ДобавлениеИзменениеОбщейБазовойНСИ + + ru + Добавление и изменение общей базовой нормативно-справочной информации + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights index 7d4c6427d..ad1670aa2 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5519,7 +5519,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9640,7 +9640,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10443,7 +10443,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -12775,7 +12775,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16683,7 +16683,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false diff --git a/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights index 16cc606d3..f1b399780 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5559,7 +5559,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9683,7 +9683,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10475,7 +10475,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -12818,7 +12818,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16711,7 +16711,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false diff --git a/SSL/src/Roles/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц/Rights.rights index 0f4a8a80e..d860b4982 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5448,7 +5448,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9562,7 +9562,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10365,7 +10365,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -12697,7 +12697,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16591,7 +16591,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false diff --git a/SSL/src/Roles/ДобавлениеИзменениеПользователей/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеПользователей/Rights.rights index b6f62755e..610ba5128 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеПользователей/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеПользователей/Rights.rights @@ -3,6 +3,17 @@ false true false + + Constant.РежимИспользованияИнформационнойБазы + + Read + true + + + View + true + + Catalog.Пользователи @@ -49,6 +60,13 @@ true + + InformationRegister.НеразделенныеПользователи + + Read + true + + Catalog.ГруппыПользователей diff --git a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights new file mode 100644 index 000000000..27593da82 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights @@ -0,0 +1,174 @@ + + + false + true + false + + InformationRegister.СостоянияРассылокОтчетов + + Read + true + + + Update + true + + + View + true + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.Active + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.Period + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.Resource.СОшибками + + Edit + false + + + + Catalog.РассылкиОтчетов.Command.СобытияРассылки + + View + true + + + + InformationRegister.СостоянияРассылокОтчетов.Resource.ПоследнийЗапуск + + Edit + false + + + + Catalog.РассылкиОтчетов.Command.ВыполнитьСейчас + + View + true + + + + Catalog.РассылкиОтчетов + + Read + true + + РассылкиОтчетов ГДЕ (РассылкиОтчетов.Автор = &ТекущийПользователь + ИЛИ РассылкиОтчетов.Личная = ЛОЖЬ + ИЛИ РассылкиОтчетов.ЭтоГруппа = ИСТИНА) + + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + InformationRegister.СостоянияРассылокОтчетов.Dimension.Рассылка + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.Resource.Выполнена + + Edit + false + + + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + Output + true + + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/ДобавлениеИзменениеРассылокОтчетов.mdo b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/ДобавлениеИзменениеРассылокОтчетов.mdo new file mode 100644 index 000000000..ff595f3b6 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/ДобавлениеИзменениеРассылокОтчетов.mdo @@ -0,0 +1,8 @@ + + + ДобавлениеИзменениеРассылокОтчетов + + ru + Добавление изменение рассылок отчетов + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеРолейИсполнителей/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеРолейИсполнителей/Rights.rights index 0e5fb668c..6635dd0ca 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеРолейИсполнителей/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеРолейИсполнителей/Rights.rights @@ -14,17 +14,6 @@ true - - Report.СправкаОбИсполнительскойДисциплине - - Use - true - - - View - true - - Report.ЗадачиИстекающиеНаДату diff --git a/SSL/src/Roles/ДобавлениеИзменениеФизическихЛиц/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеФизическихЛиц/Rights.rights index aa8a7b227..2ceb5d7a0 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеФизическихЛиц/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеФизическихЛиц/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5521,7 +5521,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9679,7 +9679,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10482,7 +10482,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -12825,7 +12825,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16752,7 +16752,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false diff --git a/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights index 80e407f83..eaf53b01e 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights @@ -385,7 +385,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5331,7 +5331,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9434,7 +9434,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10226,7 +10226,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -12525,7 +12525,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16304,7 +16304,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false diff --git a/SSL/src/Roles/ЗапускAutomation/Rights.rights b/SSL/src/Roles/ЗапускAutomation/Rights.rights index 4ac62348a..9b84f2775 100644 --- a/SSL/src/Roles/ЗапускAutomation/Rights.rights +++ b/SSL/src/Roles/ЗапускAutomation/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5570,7 +5570,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9728,7 +9728,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10531,7 +10531,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -11905,37 +11905,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - Automation - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Редактирует @@ -12905,7 +12874,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16832,7 +16801,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false @@ -18030,6 +17999,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + Automation + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена diff --git a/SSL/src/Roles/ЗапускВебКлиента/Rights.rights b/SSL/src/Roles/ЗапускВебКлиента/Rights.rights index 0749840b7..f6b5a01eb 100644 --- a/SSL/src/Roles/ЗапускВебКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускВебКлиента/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5570,7 +5570,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9728,7 +9728,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10531,7 +10531,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -11905,37 +11905,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - WebClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Редактирует @@ -12905,7 +12874,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16832,7 +16801,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false @@ -18030,6 +17999,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + WebClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена diff --git a/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights b/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights index 0fef440a1..75c577f0a 100644 --- a/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5570,7 +5570,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9728,7 +9728,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10531,7 +10531,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -11905,37 +11905,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - ThickClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Редактирует @@ -12905,7 +12874,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16832,7 +16801,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false @@ -18030,6 +17999,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + ThickClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена diff --git a/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights b/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights index be3f8f79d..0fc11ace4 100644 --- a/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5570,7 +5570,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9728,7 +9728,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10531,7 +10531,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -11905,37 +11905,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - ThinClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Редактирует @@ -12905,7 +12874,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16832,7 +16801,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false @@ -18030,6 +17999,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + ThinClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена diff --git a/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights b/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights index 3e94a51e6..999446171 100644 --- a/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights +++ b/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights @@ -88,6 +88,10 @@ Read true + + View + true + Catalog.РолиИсполнителей diff --git a/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights b/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights index bc3946ace..591de06ae 100644 --- a/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights +++ b/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5459,7 +5459,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9617,7 +9617,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10420,7 +10420,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -12763,7 +12763,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16620,7 +16620,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false diff --git a/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights b/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights index 8ab6a9702..7d0dcbf45 100644 --- a/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights +++ b/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5559,7 +5559,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9706,7 +9706,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10484,7 +10484,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -12827,7 +12827,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16743,7 +16743,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false diff --git a/SSL/src/Roles/ИзменениеТекущегоПользователя/Rights.rights b/SSL/src/Roles/ИзменениеТекущегоПользователя/Rights.rights index 848196cbf..1ead875e9 100644 --- a/SSL/src/Roles/ИзменениеТекущегоПользователя/Rights.rights +++ b/SSL/src/Roles/ИзменениеТекущегоПользователя/Rights.rights @@ -3,6 +3,17 @@ false true false + + Constant.РежимИспользованияИнформационнойБазы + + Read + true + + + View + true + + Catalog.Пользователи @@ -42,6 +53,13 @@ + + InformationRegister.НеразделенныеПользователи + + Read + true + + Catalog.ГруппыПользователей diff --git a/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights index 928ef36dc..90173f71d 100644 --- a/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5570,7 +5570,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9728,7 +9728,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10531,7 +10531,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -11905,41 +11905,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - InteractiveOpenExtDataProcessors - true - - - InteractiveOpenExtReports - true - - Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Редактирует @@ -12909,7 +12874,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16836,7 +16801,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false @@ -18034,6 +17999,41 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + InteractiveOpenExtDataProcessors + true + + + InteractiveOpenExtReports + true + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена diff --git a/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights index 48866f23e..168f968f1 100644 --- a/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5577,7 +5577,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9756,7 +9756,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10559,7 +10559,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -12909,7 +12909,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16857,7 +16857,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false diff --git a/SSL/src/Roles/ИспользованиеИнтеграцииСДокументооборот/Rights.rights b/SSL/src/Roles/ИспользованиеИнтеграцииСДокументооборот/Rights.rights index 7778a441d..f17768fcb 100644 --- a/SSL/src/Roles/ИспользованиеИнтеграцииСДокументооборот/Rights.rights +++ b/SSL/src/Roles/ИспользованиеИнтеграцииСДокументооборот/Rights.rights @@ -194,45 +194,6 @@ true - - Configuration.БиблиотекаСтандартныхПодсистем - - ThinClient - true - - - WebClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - Output - true - - CommonCommand.ДокументооборотСоздатьБизнесПроцесс diff --git a/SSL/src/Roles/ИспользованиеЭЦП/Rights.rights b/SSL/src/Roles/ИспользованиеЭЦП/Rights.rights index 4d4516a14..d7207f3a3 100644 --- a/SSL/src/Roles/ИспользованиеЭЦП/Rights.rights +++ b/SSL/src/Roles/ИспользованиеЭЦП/Rights.rights @@ -59,45 +59,6 @@ true - - Configuration.БиблиотекаСтандартныхПодсистем - - ThinClient - true - - - WebClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - Output - true - - CommonForm.СертификатЭЦП diff --git a/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights b/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights index 1cd6207b6..a402b1bb8 100644 --- a/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights +++ b/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights @@ -41,17 +41,50 @@ - DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + Catalog.КлючевыеОперации - Edit - false + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true - - - DataProcessor.ОценкаПроизводительности.Attribute.Шаг Edit - false + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true @@ -61,51 +94,4 @@ true - - InformationRegister.ЗамерыВремени - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - - DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма - - Edit - false - - - - DataProcessor.ОценкаПроизводительности.Attribute.Период - - Edit - false - - - - DataProcessor.ОценкаПроизводительности.TabularSection.Производительность - - Edit - false - - - - DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя - - Edit - false - - diff --git a/SSL/src/Roles/ПолныеПрава/Rights.rights b/SSL/src/Roles/ПолныеПрава/Rights.rights index 7d8ddf683..1c0ef0961 100644 --- a/SSL/src/Roles/ПолныеПрава/Rights.rights +++ b/SSL/src/Roles/ПолныеПрава/Rights.rights @@ -3,6 +3,50 @@ true true false + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ПоказыватьОповещение + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантРасписанияРезервногоКопирования + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.Dimension.КаналСообщений + + View + false + + + Edit + false + + + + Constant.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания + + Update + false + + + Edit + false + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота @@ -14,6 +58,17 @@ false + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.СтрокаРасписания + + View + false + + + Edit + false + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы @@ -25,6 +80,123 @@ false + + SessionParameter.ОбластьДанныхИспользование + + Get + false + + + Set + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды + + View + false + + + Edit + false + + Catalog.ШаблоныАнкет @@ -36,6 +208,140 @@ false + + InformationRegister.ОчередьЗаданий.Resource.СостояниеЗадания + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.Attribute.НаименованиеПолное + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.НомерПопытки + + View + false + + + Edit + false + + + + Constant.ПараметрыАдминистрированияИБ + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + Constant.КопироватьОбластиДанныхИзЭталонной + + Update + false + + + Edit + false + + + + InformationRegister.СообщенияОбменаДанными + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + Catalog.НаборыДополнительныхРеквизитовИСведений @@ -70,15 +376,314 @@ - ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения + InformationRegister.НастройкиТранспортаОбмена.Resource.FILEСжиматьФайлИсходящегоСообщения + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаОтложенногоОповещения + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.Dimension.КаналСообщений + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями + + Read + false + + + Insert + false + + + Update + false + + + Delete + false + + + View + false + + + InteractiveInsert + false + + + Edit + false + InteractiveDelete false + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + + + InputByString + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.ReceivedNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.SentNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.Ref + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.Description + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения + + Insert + false + + + Update + false + + + Delete + false + + + InteractiveInsert + false + + + Edit + false + + + InteractiveDelete + false + + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + InteractiveDeletePredefinedData false + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.ValueType + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Description + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Code + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.IsFolder + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Parent + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Predefined + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.DeletionMark + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Ref + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.РегламентноеЗаданиеGUID + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMАутентификацияОперационнойСистемы + + Edit + false + + + + CommonForm.УстановкаВедущейКонечнойТочки + + View + false + Catalog.ВопросыШаблонаАнкеты @@ -91,6 +696,24 @@ false + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаИнтерактивногоРезервногоКопирования + + View + false + + + Edit + false + + + + DataProcessor.РегламентныеИФоновыеЗадания.Command.РегламентныеИФоновыеЗадания + + View + false + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения @@ -102,6 +725,304 @@ false + + InformationRegister.ВерсииПоставляемыхДанных.Resource.ВерсияПоставляемыхДанных + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КоличествоКопийВКаталоге + + View + false + + + Edit + false + + + + Constant.НастройкаПроксиСервера + + Update + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Resource.ДатаОкончания + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Dimension.АдресныйОбъект + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Модификатор + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодХраненияРезервныхКопий + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ + + Use + false + + + View + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMПарольПользователя + + Edit + false + + + + DataProcessor.КонтрольЖурналаРегистрации + + Use + false + + + View + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Наименование + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.Resource.Использование + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.Period + + View + false + + + Edit + false + + + + Constant.ИмяСлужебногоПользователяСервисаПоставляемыхДанных + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.НеразделенныеПользователи.Dimension.ИдентификаторПользователяИБ + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.РегламентноеЗаданиеGUID + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.КоличествоПопытокОбработкиСообщения + + View + false + + + Edit + false + + Catalog.Календари @@ -113,6 +1034,24 @@ false + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Resource.ДатаВыпускаВерсии + + Edit + false + + + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты @@ -124,6 +1063,211 @@ false + + CommonCommand.НастройкаОбменаСообщениями + + View + false + + + + Catalog.СтраныМира.Attribute.КодАльфа2 + + Edit + false + + + + InformationRegister.НастройкиОтправителя.Dimension.Получатель + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.Dimension.РегламентноеЗадание + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.Получатель + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз + + Update + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Active + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Period + + Edit + false + + + + InformationRegister.ВерсииПодсистем.Dimension.ИмяПодсистемы + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Resource.Наименование + + Edit + false + + + + Constant.ВыполнятьЗамерыПроизводительности + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + DataProcessor.РегламентныеИФоновыеЗадания + + Use + false + + + View + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Ответственный + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSПароль + + Edit + false + + + + DataProcessor.ОценкаПроизводительности + + Use + false + + + View + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторИсточника + + Edit + false + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы @@ -135,6 +1279,188 @@ false + + DataProcessor.РезервноеКопированиеИБ.Attribute.КаталогСРезервнымиКопиями + + View + false + + + Edit + false + + + + CommonCommand.ОчиститьРегистрациюИзмененийПоставляемыхДанных + + View + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение.Attribute.ПолноеИмяОбъектаМетаданных + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.ТипАдресногоЭлемента + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ВерсииПоставляемыхДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Resource.СообщениеБлокировки + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.Attribute.Ведущая + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена + + Edit + false + + + + InformationRegister.ОбластиДанных.Resource.Статус + + View + false + + + Edit + false + + Catalog.ФизическиеЛица @@ -146,6 +1472,190 @@ false + + Constant.РежимИспользованияИнформационнойБазы + + Update + false + + + Edit + false + + + + Catalog.КлючевыеОперации + + Insert + false + + + Update + false + + + Delete + false + + + InteractiveInsert + false + + + Edit + false + + + InteractiveDelete + false + + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Constant.СообщениеБлокировкиПриОбновленииКонфигурации + + Update + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВыполняемоеДействие + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Идентификатор + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас + + View + false + + + Edit + false + + Catalog.ВариантыОтветовАнкет @@ -157,6 +1667,20 @@ false + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСжиматьФайлИсходящегоСообщения + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторПриемника + + Edit + false + + Catalog.Заметки @@ -168,6 +1692,63 @@ false + + InformationRegister.ВерсииПодсистем.Resource.Версия + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения + + Update + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Active + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Period + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Resource.ВидДня + + Edit + false + + Task.ЗадачаИсполнителя @@ -175,6 +1756,35 @@ false + + Catalog.СообщенияСистемы.Attribute.ТелоСообщения + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Dimension.ДействиеПриОбмене + + Edit + false + + Document.НазначениеОпросов @@ -184,14 +1794,351 @@ Catalog.СценарииОбменовДанными + + Insert + false + + + Update + false + + + Delete + false + + + InteractiveInsert + false + + + Edit + false + InteractiveDelete false + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + InteractiveDeletePredefinedData false + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Predefined + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Ref + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.DeletionMark + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.IsFolder + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Owner + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Parent + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Description + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Code + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных + + Insert + false + + + Update + false + + + Delete + false + + + InteractiveInsert + false + + + Edit + false + + + InteractiveDelete + false + + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Predefined + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Ref + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.DeletionMark + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.IsFolder + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Owner + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Parent + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Description + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Code + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Resource.КонецБлокировки + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Attribute.Повтор + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор + + Update + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Active + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Period + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим + + View + false + + + Edit + false + + + + Constant.ОбщийКаталогВременныхФайлов + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Document.ТелефонныйЗвонок @@ -211,6 +2158,396 @@ false + + InformationRegister.СостоянияОбменовДанными.Resource.РезультатВыполненияОбмена + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.Resource.Кратность + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + CommonForm.ВходВОбластьДанных + + View + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря + + Update + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Period + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяСервера1СПредприятия + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + Constant.ПарольСлужебногоПользователяМенеджераСервиса + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + Constant.СписокРасширенийТекстовыхФайлов + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Dimension.УзелИнформационнойБазы + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.ЗапланированныйМоментЗапуска + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы @@ -222,6 +2559,17 @@ false + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Версия + + View + false + + + Edit + false + + Document.ЗапланированноеВзаимодействие @@ -229,6 +2577,131 @@ false + + InformationRegister.ОчередьЗаданий.Resource.Параметры + + View + false + + + Edit + false + + + + Constant.ПарольПользователяАгентаСервиса + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.АдресныйКлассификатор.Resource.АльтернативныеНазвания + + Edit + false + + + + Constant.СписокРасширенийФайловOpenDocument + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILМаксимальныйДопустимыйРазмерСообщения + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Dimension.УзелИнформационнойБазы + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.Дата + + Edit + false + + Document.Встреча @@ -236,6 +2709,101 @@ false + + InformationRegister.СвязиПоставляемыхДанных + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.СвязиПоставляемыхДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.StandardAttribute.Period + + View + false + + + Edit + false + + Catalog.Пользователи @@ -247,6 +2815,457 @@ false + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSИмяПользователя + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILСжиматьФайлИсходящегоСообщения + + Edit + false + + + + InformationRegister.НастройкиОтправителя + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными + + Update + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Active + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Period + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПродолжатьНапоминания + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Вид + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.ИспользоватьРегламентноеЗадание + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ЗначениеПустойСсылки + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.БезДанных + + Edit + false + + + + InformationRegister.ВерсииПодсистем + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Period + + View + false + + + Edit + false + + + + Constant.ИзвлекатьТекстыФайловНаСервере + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.АдресныеСокращения.Resource.Наименование + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КоличествоКопийВКаталоге + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыОбъекта + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + CommonCommand.ОбновлениеОбщихПоставляемыхДанных + + View + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КодТипаРезервногоКопирования + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Attribute.ОбъектВыгруженПоСсылке + + Edit + false + + + + Constant.ОбщийКаталогВременныхФайловLinux + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + Catalog.УчетныеЗаписиЭлектроннойПочты @@ -258,6 +3277,74 @@ false + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПорт + + Edit + false + + + + Constant.МаксимальныйРазмерФайла + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMКаталогИнформационнойБазы + + Edit + false + + Catalog.ВидыДокументовФизическихЛиц @@ -270,9 +3357,35 @@ - ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот + CommonAttribute.ОбластьДанных - InteractiveDelete + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.ИсполняющееФоновоеЗадание + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.Заблокировано + + View + false + + + Edit false @@ -283,6 +3396,128 @@ false + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари + + Insert + false + + + Update + false + + + Delete + false + + + InteractiveInsert + false + + + Edit + false + + + InteractiveDelete + false + + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Predefined + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Ref + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.DeletionMark + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.IsFolder + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Owner + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Parent + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Description + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Code + + Edit + false + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы @@ -294,6 +3529,13 @@ false + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПорядокКоллекции + + Edit + false + + Catalog.ВидыКонтактнойИнформации @@ -305,16 +3547,282 @@ false + + InformationRegister.НастройкиТранспортаОбмена.Resource.CombiВидТранспортаСообщенийОбмена + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FILEКаталогОбменаИнформацией + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.ДатаНачала + + Edit + false + + Catalog.СтраныМира + + Insert + false + + + Update + false + + + Delete + false + + + InteractiveInsert + false + + + Edit + false + InteractiveDelete false + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + InteractiveDeletePredefinedData false + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + + Catalog.СтраныМира.StandardAttribute.Predefined + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Ref + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.DeletionMark + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.IsFolder + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Owner + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Parent + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Description + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Code + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.ПодробноеПредставлениеОшибки + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Resource.УникальныйИдентификаторИсточникаСтрокой + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КаталогСРезервнымиКопиями + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодОповещения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.НажатиеГиперссылки + + View + false + + + Edit + false + + + + Constant.МаксимальноеКоличествоИсполняющихФоновыхЗаданий + + Update + false + + + Edit + false + + + + Constant.АдресАгентаСервиса + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы + + View + false + + + Edit + false + Catalog.ЗакладкиВзаимодействий @@ -327,6 +3835,237 @@ false + + InformationRegister.ОбластиДанных.Resource.Представление + + View + false + + + Edit + false + + + + InformationRegister.ИзмененияОбщихДанныхУзлов + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Индекс + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодОповещения + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.ДатаОкончания + + Edit + false + + + + Catalog.РассылкиОтчетов + + InteractiveDelete + false + + + InteractiveDeletePredefinedData + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки + + Edit + false + + + + InformationRegister.НеразделенныеПользователи + + Update + false + + + View + false + + + Edit + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.НеразделенныеПользователи.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НеразделенныеПользователи.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НеразделенныеПользователи.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НеразделенныеПользователи.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.ЭтоБыстроеСообщение + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы + + View + false + + + Edit + false + + + + DataProcessor.УправлениеПолнотекстовымПоиском + + Use + false + + + View + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаОтложенногоОповещения + + View + false + + + Edit + false + + Document.ЭлектронноеПисьмоИсходящее @@ -334,16 +4073,219 @@ false + + Catalog.ТомаХраненияФайлов.Attribute.МаксимальныйРазмер + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.РегламентноеЗадание + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ТипОграниченияКаталогаСРезервнымиКопиями + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.КоличествоЭлементовВТранзакцииЗагрузкиДанных + + Edit + false + + Catalog.ДополнительныеОтчетыИОбработки + + Insert + false + + + Update + false + + + Delete + false + + + View + false + + + InteractiveInsert + false + + + Edit + false + InteractiveDelete false + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + + + InputByString + false + InteractiveDeletePredefinedData false + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьLinux + + View + false + + + Edit + false + Catalog.ВнешниеПользователи @@ -367,6 +4309,560 @@ false + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Имя + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Используется + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВариантРасписанияРезервногоКопирования + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ + + Use + false + + + View + false + + + + Constant.ИспользоватьПолнотекстовыйПоиск + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ОчередьЗаданий.Resource.ЭксклюзивноеВыполнение + + View + false + + + Edit + false + + + + Constant.КаталогВременныхФайловСообщенийОбменаДляWindows + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПолноеИмя + + Edit + false + + + + InformationRegister.КэшПрограммныхИнтерфейсов + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + Catalog.КлассификаторВалют + + Insert + false + + + Update + false + + + Delete + false + + + InteractiveInsert + false + + + Edit + false + + + InteractiveDelete + false + + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Predefined + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Ref + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.DeletionMark + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.IsFolder + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Owner + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Parent + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Description + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Code + + Edit + false + + + + Constant.НеИспользоватьРазделениеПоОбластямДанных + + Update + false + + + Edit + false + + + + Constant.КаталогВременныхФайловСообщенийОбменаДляLinux + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + Constant.УдалитьТипХраненияФайлов + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ОчередьЗаданий.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Constant.КонечнаяТочкаМенеджераСервиса + + Update + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаОповещения + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Attribute.НомерОтправленного + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.ДействиеПриОбмене + + Edit + false + + + + DataProcessor.АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных + + Use + false + + + View + false + + + + InformationRegister.КурсыВалютПоКлассификатору + + Update + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Active + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Period + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.КлючОбъектаМетаданных + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Dimension.Задание + + View + false + + + Edit + false + + Catalog.ГруппыПользователей @@ -378,6 +4874,342 @@ false + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.НажатиеГиперссылки + + View + false + + + Edit + false + + + + Constant.БлокировкаОтправкиБыстрыхСообщений + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УзелИнформационнойБазы + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз + + Update + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Period + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора + + Update + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Period + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.Приоритет + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодОтложенногоОповещения + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.Код + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ТипОграниченияКаталогаСРезервнымиКопиями + + View + false + + + Edit + false + + + + Constant.ПарольСлужебногоПользователяСервисаПоставляемыхДанных + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + Constant.ИмяСлужебногоПользователяМенеджераСервиса + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КодТипаИнтерактивногоРезервногоКопирования + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена + + Update + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Active + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Period + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.КоличествоЭлементовВТранзакцииВыгрузкиДанных + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПарольАдминистратора + + View + false + + + Edit + false + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач @@ -389,6 +5221,104 @@ false + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИмяФайла + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Dimension.Узел + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипПриемника + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПродолжатьНапоминания + + View + false + + + Edit + false + + Catalog.ГруппыИсполнителейЗадач @@ -400,6 +5330,28 @@ false + + Catalog.ТомаХраненияФайлов.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодХраненияРезервныхКопий + + View + false + + + Edit + false + + Catalog.ЗначенияСвойствОбъектов @@ -411,6 +5363,266 @@ false + + InformationRegister.ПодпискиПолучателей.Dimension.Получатель + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяПользователя + + Edit + false + + + + CommonCommand.ОбменСообщениями + + View + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ФайлЗагрузкиРезервнойКопии + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + + Edit + false + + + + Constant.ВнутреннийАдресМенеджераСервиса + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + CommonCommand.ЗагрузитьДанныеИзЛокальнойВерсии + + View + false + + + + Catalog.КлассификаторБанковРФ + + InteractiveDelete + false + + + InteractiveDeletePredefinedData + false + + + + Constant.СписокЗапрещенныхРасширений + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ЗамерыВремени + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодГородаВКоде + + Edit + false + + Catalog.Организации @@ -422,6 +5634,132 @@ false + + InformationRegister.СвязиПоставляемыхДанных.Dimension.ЭлементРазделенныхДанных + + View + false + + + Edit + false + + + + Constant.ИмяПользователяАгентаСервиса + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ОчередьЗаданий.Resource.Ключ + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодАдресногоОбъектаВКоде + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодНаселенногоПунктаВКоде + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILУчетнаяЗапись + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ХранилищеОбработки + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Публикация + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.Год + + Edit + false + + Catalog.НазначенияСертификатовЭЦП @@ -433,6 +5771,107 @@ false + + Catalog.ТомаХраненияФайлов.Attribute.ПорядокЗаполнения + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.Dimension.ВидПоставляемыхДанных + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Синоним + + Edit + false + + + + Constant.АдресВебСервисаОбменаДанными + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ОбластиДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.ПроизводственныйКалендарь + + Edit + false + + Catalog.ГруппыВнешнихПользователей @@ -444,6 +5883,230 @@ false + + ExchangePlan.ИзмененияПоставляемыхДанных + + Read + false + + + Insert + false + + + Update + false + + + Delete + false + + + View + false + + + InteractiveInsert + false + + + Edit + false + + + InteractiveDelete + false + + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + + + InputByString + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.ReceivedNo + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.SentNo + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.Ref + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.Description + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.Code + + View + false + + + Edit + false + + + + Constant.ИспользоватьРазделениеПоОбластямДанных + + Update + false + + + Edit + false + + + + Constant.ХранитьФайлыВТомахНаДиске + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + Catalog.КлассификаторВалют.Attribute.ПараметрыПрописиНаРусском + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.УзелИнформационнойБазы + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодУлицыВКоде + + Edit + false + + Catalog.ГруппыДоступа @@ -455,16 +6118,318 @@ false + + Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьWindows + + View + false + + + Edit + false + + ChartOfCharacteristicTypes.ВидыДоступа + + Insert + false + + + Update + false + + + Delete + false + + + InteractiveInsert + false + + + Edit + false + InteractiveDelete false + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + InteractiveDeletePredefinedData false + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.ValueType + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Description + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Code + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.IsFolder + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Parent + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Predefined + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.DeletionMark + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Ref + + Edit + false + + + + InformationRegister.ОбластиДанных + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными + + Update + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Active + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Period + + Edit + false + + + + Constant.НомерЗагрузкиПоставляемыхДанных + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.КурсыВалютПоКлассификатору.Resource.Курс + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + + Edit + false + Catalog.ВстречаПрисоединенныеФайлы @@ -477,16 +6442,232 @@ false + + Constant.АдресСервисаПоставляемыхДанных + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + CommonCommand.ЗагрузитьДанныеВОбласть + + View + false + + Catalog.ТомаХраненияФайлов + + Insert + false + + + Update + false + + + Delete + false + + + View + false + + + InteractiveInsert + false + + + Edit + false + InteractiveDelete false + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + + + InputByString + false + InteractiveDeletePredefinedData false + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.СтраныМира.Attribute.КодАльфа3 + + Edit + false + + + + CommonForm.НастройкаОбменаСообщениями + + View + false + Catalog.ПравилаОбработкиЭлектроннойПочты @@ -517,6 +6698,132 @@ false + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПользователь + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ВариантЗапуска + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПассивноеСоединение + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипИсточника + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.Отправитель + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Dimension.Код + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Resource.НачалоБлокировки + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.Dimension.ЭлементОбщихДанных + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяИнформационнойБазыНаСервере1СПредприятия + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.СтрокаРасписания + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.Resource.РучноеИзменение + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.ВыполнитьКорректировкуИнформацииСопоставления + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.ИмяМетода + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.Dimension.Валюта + + Edit + false + + Catalog.Файлы @@ -528,6 +6835,20 @@ false + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПолныйСиноним + + Edit + false + + + + InformationRegister.АдресныеСокращения.Dimension.Уровень + + Edit + false + + Catalog.ВерсииФайлов @@ -539,6 +6860,85 @@ false + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Информация + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSURLВебСервиса + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.Комментарий + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.НачальнаяВыгрузкаДанных + + Edit + false + + + + InformationRegister.АдресныеСокращения.Resource.Сокращение + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаОповещения + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.Dimension.НомерСообщения + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПуть + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении + + View + false + + + Edit + false + + Catalog.ПрофилиГруппДоступа @@ -550,6 +6950,63 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + Administration + false + + + UpdateDataBaseConfiguration + false + + + ExclusiveMode + false + + + ThickClient + false + + + ExternalConnection + false + + + Automation + false + + + TechnicalSpecialistMode + false + + + InteractiveOpenExtDataProcessors + false + + + InteractiveOpenExtReports + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.Attribute.ОбластьДанных + + View + false + + + Edit + false + + Document.ЭлектронноеПисьмоВходящее @@ -558,10 +7015,415 @@ - ExchangePlan.ОбменВнешнимиЗаданиями + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Сокращение + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде + + Edit + false + + + + Catalog.СтраныМира.Attribute.НаименованиеПолное + + Edit + false + + + + Catalog.СообщенияСистемы + + Read + false + + + Insert + false + + + Update + false + + + Delete + false + + + View + false + + + InteractiveInsert + false + + + Edit + false + InteractiveDelete false + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + + + InputByString + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMВариантРаботыИнформационнойБазы + + Edit + false + + + + SessionParameter.ОбластьДанныхЗначение + + Get + false + + + Set + false + + + + InformationRegister.ОчередьЗаданий + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + InformationRegister.ОчередьЗаданий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.ДатаНачалаПоследнегоЗапуска + + View + false + + + Edit + false + + + + CommonForm.ПодключениеКонечнойТочки + + View + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыСписка + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодОтложенногоОповещения + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.Использование + + View + false + + + Edit + false + diff --git a/SSL/src/Roles/ПросмотрЖурналаРегистрации/Rights.rights b/SSL/src/Roles/ПросмотрЖурналаРегистрации/Rights.rights index 2747a194f..e4bd17c01 100644 --- a/SSL/src/Roles/ПросмотрЖурналаРегистрации/Rights.rights +++ b/SSL/src/Roles/ПросмотрЖурналаРегистрации/Rights.rights @@ -3,6 +3,24 @@ false false false + + DataProcessor.ЖурналРегистрации.Command.ЖурналРегистрации + + View + true + + + + DataProcessor.ЖурналРегистрации + + Use + true + + + View + true + + Configuration.БиблиотекаСтандартныхПодсистем @@ -34,22 +52,4 @@ true - - DataProcessor.ЖурналРегистрации.Command.ЖурналРегистрации - - View - true - - - - DataProcessor.ЖурналРегистрации - - Use - true - - - View - true - - diff --git a/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights b/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights new file mode 100644 index 000000000..cffa7eb79 --- /dev/null +++ b/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights @@ -0,0 +1,31610 @@ + + + false + true + false + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ПоказыватьОповещение + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.НаЧтение + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Контакт + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.Пользователь + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантРасписанияРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.Пользователи + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ДанныеУспешноЗагружены + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникИндексКартинки + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.РезультатВыполнения + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.СтрокаРасписания + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Resource.НаследоватьПраваРодителей + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Адрес + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Дата + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.Dimension.Папка + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовНесопоставленных + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.ИмяПоля + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ДатаОтправления + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.СвязиПараметровВыбора + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.ДобавлениеЗапрещено + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий + + Read + true + + #ПоЗначениямИНаборамРасширенный("РегистрСведений.ХранимыеФайлыВерсий", "Чтение", "", +"", +"", +"Объект","Т.ВерсияФайла.Владелец.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") + + + + View + true + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Dimension.ГруппаДоступа + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.Attribute.РольИсполнителя + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ДатаПолучения + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.УникальныйИдентификаторПриемника + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Выполнено + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Автор + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейКопий + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FILEСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаОтложенногоОповещения + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыИсточника + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Attribute.ОписаниеДатыЗапрета + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ТекстHTML + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.АбонентПредставление + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СпособSMTPАутентификации + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.РегламентноеЗаданиеGUID + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILУчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.АдресТолькоРоссийский + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаXML + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Dimension.Объект + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.СвободныйОпрос + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ТипОтвета + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаИнтерактивногоРезервногоКопирования + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.Путь + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.Attribute.ДатаРождения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Ref + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПорт + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.FILEСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Автор + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.УчетнаяЗапись + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КоличествоКопийВКаталоге + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ТипЗначенияДоступа + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Dimension.Объект + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Resource.ДатаОкончания + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Точность + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Dimension.АдресныйОбъект + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Модификатор + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляТаблицы + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗагружатьДанныеВРежимеОбмена + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.ШаблонИмениФайлаСообщения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодХраненияРезервныхКопий + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILУчетнаяЗапись + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбъектыПоСсылкеЗагружатьБезПометкиУдаления + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Наименование + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Resource.ДатаЗапрета + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.УникальныйИдентификаторИсточника + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Resource.КоличествоДнейВГрафикеСНачалаГода + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.Вопрос + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Страна + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.Заключение + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.Period + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.СписокПолучателейКопий + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.РегламентноеЗаданиеGUID + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.КодНовогоУзлаВторойБазы + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле3 + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ТипТекста + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Resource.ДатаВыпускаВерсии + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Завершен + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяПланаОбмена + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.СписокИспользуемыхПолей + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяТаблицыПриемника + + View + false + + + Edit + false + + + + CommonCommand.ПраваПоЗначениямДоступа + + View + true + + + + Catalog.СтраныМира.Attribute.КодАльфа2 + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Resource.ОтключитьПроверкуПравВедущейТаблицы + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗадаватьВопросПриЗагрузкеДанныхПриОткрытииОбработки + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.СтатусИзвлеченияТекста + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Данные + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.Dimension.ИмяПодсистемы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяВременногоФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Dimension.Пользователь + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Resource.Наименование + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.НаименованиеПолное + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FILEКаталогОбменаИнформацией + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Ответственный + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ДатаМодификацииУниверсальная + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.Attribute.Комментарий + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.АгрегироватьСуммуВОтчетах + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.РодительскаяВерсия + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ИндексКартинки + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.КлючВарианта + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.Таблица + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.Attribute.ТребуетОткрытогоОтвета + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторИсточника + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.ТипПриемника + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.Тип + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КаталогСРезервнымиКопиями + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Подсказка + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПользовательИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение.Attribute.ПолноеИмяОбъектаМетаданных + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяФайлаСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.ТипАдресногоЭлемента + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагОшибки + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Resource.Удаление + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.СписокУчастников + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПротоколаОбменаЗагрузка + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.Attribute.ОкончаниеПериодаЗагрузки + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Важность + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле1 + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Тема + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.Вступление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ПодписанЭЦП + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.ДатаРедактирования + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.Dimension.Пользователь + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Важность + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Ответственный + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.НомерЯчейки + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Кратность + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.ЧтениеЗапрещено + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Содержание + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьДляОтправки + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.TabularSection.Респонденты.Attribute.Респондент + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Формулировка + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Command.ОткрытьВерсииФайла + + View + true + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Ответственный + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВыполняемоеДействие + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ТолькоВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВИсточнике + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники.Attribute.Контакт + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Идентификатор + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ГруппаИсполнителейЗадач + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяМакетаПравил + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОткрыватьПротоколыОбменаПослеВыполненияОпераций + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторПриемника + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле5 + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.КакСвязаться + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ОдинКоМногим + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейПисьма + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.Resource.ЕстьФайлы + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.Resource.Версия + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ТипИсточника + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ВидыДоступа + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяПланаОбменаИзПравил + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Контакт + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Executed + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Description + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.RoutePoint + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.BusinessProcess + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Date + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Number + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.Номер + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВидТранспортаСообщенийОбмена + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяСервераИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ТекстХранилище + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Dimension.ДействиеПриОбмене + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FILEСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИсточникПравил + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Адрес + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.Resource.Путь + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторНаСервере + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаПравил + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ФорматСвойства + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.SMTPАутентификация + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КаталогИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.МинимальноеЗначение + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ОставлятьКопииСообщенийНаСервере + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.РежимОбмена + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ВыборГруппИЭлементов + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВПротоколСообщенийОбОшибках + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.ИдентификаторПользователяИБ + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.Resource.ХранимыйФайл + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Resource.РаспространяетсяВИерархии + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.Год + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Number + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.РедактированиеТолькоВДиалоге + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.Обязательный + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработкиНастройкиВыгрузки + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.РезультатВыполненияОбмена + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Dimension.НомерВерсии + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Комментарий + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Описание + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Проверяющий + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ШаблонИмениФайлаСообщения + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Город + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Dimension.ТипВедущейТаблицы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторСообщения + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Dimension.Таблица + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаОбработчиковСобытий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоЭлементовВТранзакцииПриВыгрузкеДляПлановОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.Resource.Кратность + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.АутентификацияWindowsИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.СрокИсполнения + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилВыгрузки + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.ДатаКурса + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.Серия + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Ответственный + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипИсточникаСтрокой + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТипИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Автор + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Профиль + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Курс + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.Удаление + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПользователь + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляПоиска + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.ДатаЗавершения + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Dimension.ТипОбъекта + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.ШаблонИмениФайлаСообщения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.МаксимальноеЗначение + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Предмет + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей + + View + false + + + Edit + false + + + + Catalog.Файлы.Command.ЗанятыеФайлы + + View + true + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Версия + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НеВыводитьНикакихИнформационныхСообщенийПользователю + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Number + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.АльтернативныеНазвания + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ВнутреннийЗаголовок + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ВидОперации + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + CommonForm.ПраваПоЗначениямДоступа + + View + true + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.Dimension.ПрисоединенныйФайл + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаПравоИзменения + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПароль + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ТипТекста + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.Использование + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Code + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Кодировка + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ОтветственныйЗаОбработкуПисем + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.Пользователи.Attribute.Пользователь + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFILE + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьЗаполнениеОбъекта + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоОбъектовНаТранзакцию + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаEMAIL + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВОкноСообщенийИнформационныхСообщений + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + Catalog.Файлы.Command.ПапкиФайлов + + View + true + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле2 + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Важность + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.СохраненныеНастройки + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Наименование + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.Роли + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ПутьКФайлу + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Том + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаБезГруппЗначенияДоступа + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ПолноеНаименование + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.ДополнительныйОтчетИлиОбработка + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаВнешнейОбработкиОбработчиковСобытий + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.НомерВходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПродолжатьНапоминания + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Вид + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторСообщения + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.ИспользоватьРегламентноеЗадание + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Attribute.Использование + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ОсновнаяВалюта + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Исполнитель + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.TabularSection.Респонденты + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.СрокИсполнения + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.Attribute.НачалоПериодаЗагрузки + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Администратор + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Ответственный + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Resource.Наименование + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КоличествоКопийВКаталоге + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаЗачитанные + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НеЗадаватьВопросПриЗагрузкеДанныхПриОткрытииОбработки + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.TabularSection.Состав + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Адрес + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыОбъекта + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Resource.Добавление + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КодТипаРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.АбонентКакСвязаться + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Тема + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗаписыватьРегистрыНаборамиЗаписей + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Attribute.ОбъектВыгруженПоСсылке + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Стартован + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Dimension.ТипОбъекта + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Добавление + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Значение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПассивноеСоединение + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Dimension.ИмяПланаОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПорт + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Resource.ПриПроверкеПраваЧтение + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ВидТранспортаСообщенийОбмена + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.РедактированиеШаблонаЗавершено + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.СинхронизироватьПоИдентификатору + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Code + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Представление + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.МестоПроведенияВстречи + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Изменять + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Состояние + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторыОснований + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ДоступРазрешен + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.Представление + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИнформацияОПравилах + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Resource.ДеньВключенВГрафик + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ДатаСоздания + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Resource.Вариант + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработкиНастройкиЗагрузки + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Number + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Dimension.ГруппаДоступа + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Resource.Изменение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Представление + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ДатаПринятияКИсполнению + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторОснования + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Dimension.БизнесПроцесс + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ТипПриемника + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.ПометкаУдаления + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.НомерИтерации + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяВременногоКаталогаСообщенийОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FILEКаталогОбменаИнформацией + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.ДатаНачала + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Контакт + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.Dimension.Свойство + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаНастройкиПараметров + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Dimension.Таблица + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.Resource.Номер + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ВысотаЭлементаФормулировкиВопроса + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КомментарийПриВыгрузкеДанных + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Тип + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.Ответ + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ГлавнаяЗадача + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.ДатаПомещенияВРабочийКаталог + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ТипПриемникаСтрокой + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.РольИсполнителя + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Resource.УникальныйИдентификаторИсточникаСтрокой + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Предмет + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилОчистки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Type + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Ref + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Date + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Posted + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Number + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВерсияПлатформыИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КаталогСРезервнымиКопиями + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Dimension.ПодчиненнаяТаблица + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ЭтоУдалениеОбъекта + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.ДоступРазрешен + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВПриемнике + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.АрхивироватьФайл + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПользовательSMTP + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПуть + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.Dimension.ИмяКомпьютера + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Attribute.СвязьСРодителем + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыгружатьТолькоРазрешенные + + View + false + + + Edit + false + + + + Catalog.Организации.Attribute.Префикс + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Регион + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.ДатаВерсии + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.МногострочноеПолеВвода + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодОповещения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.НажатиеГиперссылки + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Attribute.ОткрытыйОтвет + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ЗаблокированныйРеквизит + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.Resource.ПутьМодуляКриптографии + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Администратор + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИмяТаблицыПриемника + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Расширение + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьСозданиеСвязанныхОбъектов + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.ОткрытыйОтвет + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Важность + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Входящий + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИспользоватьПредварительныйПросмотр + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Dimension.ТолькоВидДоступа + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.Наценка + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Resource.Доступно + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВестиДополнительныйКонтрольЗаписиВXML + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.Анкета + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьДляПолучения + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.Исполнитель + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаПравоЧтения + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.Объект + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВерсияПравилОбмена + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Индекс + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаПравоДобавления + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодОповещения + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.ДатаОкончания + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ГруппаДоступа + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.Роль + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаОтложенногоОповещения + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.FILEКаталогОбменаИнформацией + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.МаксимальныйРазмер + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТипыСсылок.Attribute.ТипТаблицы + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительАдрес + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Изменение + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбрезатьСтрокиСправа + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакции + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Адрес + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ТипОграниченияКаталогаСРезервнымиКопиями + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.РезультатВыполнения + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Dimension.Объект + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьLinux + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВремяОжидания + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов + + Read + true + + #ПоЗначениям("Справочник.ПапкиФайлов", "Чтение", "", +"ПапкиФайлов", "Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + + + + Insert + true + + #ПоЗначениям("Справочник.ПапкиФайлов", "Добавление", "", +"ПапкиФайлов", "Родитель", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + + + + Update + true + + #ПоЗначениям("Справочник.ПапкиФайлов", "Изменение", "", +"ПапкиФайлов", "Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники.Attribute.ПредставлениеКонтакта + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.КодВалюты + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.Resource.Курс + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВариантРасписанияРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьОтборПоДатеДляВсехОбъектов + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.ВРабочемКаталогеВладельца + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.АдресЭлектроннойПочты + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.РеквизитДопУпорядочивания + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.УчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.Dimension.Пользователь + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.Attribute.ИдентификаторОбъекта + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ЗаполнятьАвтоматически + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ТипРеспондентов + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Чтение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторыОснований + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Dimension.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагРежимОтладкиОбработчиков + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.ИдентификаторПользователяИБ + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ПараметрыВыбора + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПравилОбмена + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПользователь + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТипыСсылок + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаОповещения + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Attribute.НомерОтправленного + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.ДействиеПриОбмене + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.ИдентификаторКоманды + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ТипыДополнительногоОбъектаАдресации + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПроцентСопоставленияОбъектов + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Подтверждено + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ЗагружаетсяИзИнтернета + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Важность + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.СрокПроверки + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ИмяРеквизита + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПропускатьПриветствие + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Регион + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Attribute.ИспользоватьФильтрВыборочнойРегистрацииОбъектов + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Dimension.ВидПравил + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.НажатиеГиперссылки + + View + false + + + Edit + false + + + + CommonForm.НастройкаЛокальногоКэшаФайлов + + View + true + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Resource.ПриПроверкеПраваИзменение + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.Формулировка + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Контакт + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Наименование + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Dimension.Пользователь + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Period + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Вид + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяПланаОбмена + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаВыгрузкиДанных + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодОтложенногоОповещения + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Длина + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.Код + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ТипОграниченияКаталогаСРезервнымиКопиями + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле1 + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.ТипИсточника + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Вид + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.Resource.Значение + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КодТипаИнтерактивногоРезервногоКопирования + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НепосредственноеЧтениеВИБПриемнике + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПарольАдминистратора + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.Attribute.Вес + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.Опрос + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИмяФайла + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Dimension.Узел + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Адрес + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЭтоИнтерактивныйРежим + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.Наименование + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипПриемника + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Resource.ПриПроверкеПраваУдаление + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПродолжатьНапоминания + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.Attribute.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодХраненияРезервныхКопий + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ОтправительПредставление + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.Dimension.Валюта + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Важность + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.Attribute.Пол + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ФайлЗагрузкиРезервнойКопии + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Resource.ПриПроверкеПраваДобавление + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.РежимОтладкиАлгоритмов + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольДляРаспаковкиФайлаОбмена + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ПояснениеКомментария + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Размер + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодГородаВКоде + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Представление + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СтатусПисьма + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПериодХраненияСообщенийНаСервере + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + CommonCommand.ПрисоединенныеФайлы + + View + true + + + + Catalog.Организации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакцииПриВыгрузкеДляПлановОбмена + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Контакт + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодАдресногоОбъектаВКоде + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Состав + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Resource.Макет + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодНаселенногоПунктаВКоде + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.УдалитьПароль + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILУчетнаяЗапись + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.РольИсполнителя + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ХранилищеОбработки + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаПравилРегистрацииОбъектов.Attribute.ИмяПланаОбменаДляЗагрузки + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТипыСсылок.Attribute.Таблица + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения.Attribute.СоставДопСведений + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПароль + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Публикация + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Dimension.ТипФормы + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ТипОбъекта + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДописыватьДанныеВПротоколОбмена + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Адрес + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Контакт + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ТипТабличногоВопроса + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.НомерВерсии + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Attribute.ВидДоступаПравоДобавления + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.ИзменениеЗапрещено + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ПредметСтрокой + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.Attribute.РеквизитДопУпорядочивания + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.Resource.Комментарий + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительКонтакт + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработчикиСобытийЧитаемИзФайлаПравилОбмена + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.СписокУчастников + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Dimension.Право + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Свойство + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПорядокЗаполнения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.СклоненияПредмета + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.СостояниеБизнесПроцесса + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Текст + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Attribute.ПравилаЗагружены + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.Вопрос + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.СоставТабличногоВопроса + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПассивноеСоединение + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипПриемникаСтрокой + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ТипИсточникаСтрокой + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.УдалениеЗапрещено + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения.Attribute.Ссылка + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ТипыОсновногоОбъектаАдресации + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.НомерЯчейки + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.НомерНабора + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.Dimension.Объект + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Представление + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Предмет + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Тип + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.Dimension.ОбъектСФайлами + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.СоставТабличногоВопроса.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Состав.Attribute.ВнешнийПользователь + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.Заголовок + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.TabularSection.Состав.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.МожноИзменятьСпособРедактирования + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторПриемника + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПостроительОтчета + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле4 + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.РедактируемыйРаздел + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодУлицыВКоде + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьWindows + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.Attribute.ВсеОбъектыАвторизации + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Resource.ВерсияОбъекта + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Attribute.ИспользоватьПраваСсылки + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаОбмена + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПуть + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьОтчеты + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.УстановитьРолиНепосредственно + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ДатаЗавершения + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Кодировка + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.РодительВопрос + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.ДатаГрафика + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Удаление + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.ОбъектАвторизации + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ТребуетсяКомментарий + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Dimension.Пользователь + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КомментарийПриЗагрузкеДанных + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.НеПоказыватьВАрхивеАнкет + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ТипВопроса + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов + + Read + true + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + Catalog.СтраныМира.Attribute.КодАльфа3 + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилКонвертации + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.Пометка + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Ref + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Started + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.HeadTask + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Completed + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Ref + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Date + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПользователь + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ВариантЗапуска + + View + false + + + Edit + false + + + + DataProcessor.СписокРеспондента.Attribute.Респондент + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПассивноеСоединение + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.Размер + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.КоличествоЭлементовВТранзакции + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипИсточника + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Важность + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.АбонентКонтакт + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольДляСжатияФайлаОбмена + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Dimension.Раздел + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Resource.ДатаПолучения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаЧерезПраваПоЗначениямДоступа + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяТипаОбъектаТаблицыИсточника + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Dimension.Код + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.КлючСообщенияЖурналаРегистрации + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПорт + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Страна + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.СтрокаРасписания + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.ВыполнитьКорректировкуИнформацииСопоставления + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.СписокПолейТаблицы + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Параметры + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Текст + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения.Attribute.СоставДопРеквизитов + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.Изменение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ТекстHTML + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Dimension.Идентификатор + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Dimension.ИмяМакета + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыИсточникаУстановлен + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле3 + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.Файлы + + Read + true + + #ПоЗначениямИНаборамРасширенный("Справочник.Файлы", "Чтение", "", +"", +"", +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") + + + + Insert + true + + #ПоЗначениямИНаборамРасширенный("Справочник.Файлы", "Добавление", "", +"", +"", +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") + + + + + Update + true + + #ПоЗначениямИНаборамРасширенный("Справочник.Файлы", "Изменение", "", +"", +"", +"Объект","Т.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") + + + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Ответственный + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Dimension.Уровень + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ДанныеУспешноЗагружены + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ПринятаКИсполнению + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Номер + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ЭтоУдалениеОбъекта + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Адрес + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяВременногоФайлаОбработчиковСобытий + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов + + Read + true + + #ПоЗначениямИНаборамРасширенный("Справочник.ВерсииФайлов", "Чтение", "", +"", +"", +"Объект","Т.Владелец.ВладелецФайла","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","") + + + + + View + true + + + InputByString + true + + + + Catalog.ВерсииФайлов.StandardAttribute.Predefined + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Ref + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.DeletionMark + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.IsFolder + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Owner + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Parent + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Description + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Code + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.НаименованиеЭтойБазы + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Информация + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Предмет + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ИспользуетсяБезОбъектовАдресации + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Dimension.УчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники.Attribute.КакСвязаться + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы.Attribute.Ответ + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.Добавление + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Resource.Сокращение + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.Attribute.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаОповещения + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.НаПроверке + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПуть + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.СписокПолучателейПисьма + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыполнитьОбменДаннымиВОптимизированномФормате + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Роли + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Роли.Attribute.Роль + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.Роли.Attribute.Роль + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Описание + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Attribute.ТипТаблицы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Контакт + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.ТипТаблицы + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Сокращение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейСкрытыхКопий + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.Респондент + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Resource.Ответ + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяФайлаСообщенияОбмена + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ВидКонтактнойИнформации + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Attribute.ГруппаИсполнителейЗадач + + View + false + + + Edit + false + + + + Catalog.СтраныМира.Attribute.НаименованиеПолное + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ДатаИсполнения + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Зашифрован + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Attribute.ВидДоступаПравоИзменения + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.ПредставлениеКонтакта + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагРежимОтладки + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ШаблонАнкеты + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.НаправлениеСортировки + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Пользователь + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.ТипПользователей + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляПоискаТаблицыПриемника + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.Dimension.ГруппаПользователей + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.Предустановленный + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.Dimension.Владелец + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВПротоколИнформационныхСообщений + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыСписка + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодОтложенногоОповещения + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Город + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ПараметрыПрописиНаРусском + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СпособPOP3Аутентификации + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Resource.Запрещено + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.Календарь + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ФайлХранилище + + Edit + false + + + + ПоЗначениям + // ПоЗначениям ( Таблица, Право, Модификатор, В1,П1, В2,Р2, ..., В(n), П(n)). +// № параметра: 1, 2, 3, 4, 5, 6, 7, ..., 2+n*2,3+n*2 . +// Читается так: "ограничение доступа по значениям". +// Параметры: +// Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". +// Право - Одна из строк "Чтение", "Добавление", "Изменение", "Удаление". +// Модификатор - изменяет шаблон. +// 1-й модификтор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// Других модификаторов в этой версии шаблона не предусмотрено. +// В(n) - Вид доступа (имя предопределённого элемента ПланВидовХарактеристик.ВидыДоступа). +// Когда В(n) = "Условие" (или ""), тогда Р(n) содержит строку условия на языке запросов, например +// "Т.Автор = &ТекущийПользователь", +// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Если по объекту с таблицей Таблица будет выполняться запись наборов значений доступа, +// то условие должно проверять значения только из объекта и/или параметров сеанса, например, &ТекущийПользователь. +// Когда В(n) = "ПравоЧтения" ИЛИ "ПравоДобавления" ИЛИ "ПравоИзменения", +// выполняется проверка наличия права на таблицу значения Т.Р(n). +// П(n) - Поле значения, проверяемого по виду доступа, кроме случая В(n) = "Условие" (или ""). +// Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но +// необходимо будет указывать все параметры шаблона, т.е. указывать пустые строки, когда количество полей меньше максимального. +// Шаблон имеет структуру: +// <Общая часть условий> <Условие по группе параметров 1> И <Условие по группе параметров 2> И ... <Условие по группе параметров(n)> +// Пример: +// ПоЗначениям("Документ.ПоступлениеТоваровИУслуг", "Чтение", "", +// "Организации","Организация", +// "Поставщики","Контрагент", "","", ...) + +// Проверка правильности параметра Модификатор. +#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйМодификатор: #Параметр(3) +#КонецЕсли +// Проверка правильности параметра Право. +#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ + "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверноеПраво: #Параметр(2) +#КонецЕсли + +// Общая проверка использования ограничений доступа на уровне записей. +#Если НЕ &ОграничиватьДоступПоВиду = "" #Тогда + +Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). + +ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + +Истина В +( // Проверка права пользователя на текущую таблицу в целом. + // Права на таблицы формируются по составу ролей профиля группы доступа. + Выбрать Первые 1 Истина + ИЗ + ( + Выбрать РАЗЛИЧНЫЕ + ТаблицыГруппДоступа.Таблица, + ТаблицыГруппДоступа.ГруппаДоступа + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + ТаблицыГруппДоступа.Таблица = "#Параметр(1)" + #Если НЕ "#Параметр(2)" = "Чтение" #Тогда + И ТаблицыГруппДоступа.#Параметр(2) + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + И ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ТаблицыГруппДоступа.Пользователь + ) КАК ТаблицыГруппДоступа + ГДЕ + ( // Поиск значений заданных полей в группах доступа (пользователей) по заданным видам доступа. + +//// Проверка значения поля группы параметров 1. +#Если "#Параметр(4)" = "Условие" ИЛИ "#Параметр(4)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(5) ) +#ИначеЕсли "#Параметр(4)" = "ПравоЧтения" ИЛИ "#Параметр(4)" = "ПравоДобавления" ИЛИ "#Параметр(4)" = "ПравоИзменения" #Тогда + #Параметр(5) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(5)) + #Если "#Параметр(4)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(4)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(4) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(4) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(4)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(4)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(5) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(4)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(5) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(4)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(5) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(5) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(4)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(5) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(5) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(4) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(4) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(4) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(5)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(4) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(4)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(5) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(4) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(4) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(4)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(5) + #ИначеЕсли "Т.#Параметр(5)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(4) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(4)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(4) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(4)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(4) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(4) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(5) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(4)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(4) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(4) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(5) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(4)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(4) + #КонецЕсли + #Иначе // "Т.##Параметр(5)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(4)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(5) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(4)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(4)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#Иначе + Истина +#КонецЕсли + +//// Проверка значения поля группы параметров 2. +#Если "#Параметр(6)" = "" И "#Параметр(7)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(7) ) +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоДобавления" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда + И #Параметр(7) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(7)) + #Если "#Параметр(6)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(6)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(6) = "" #Тогда + И + #Если &ОграничиватьДоступПоВиду#Параметр(6) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(7) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(7) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(6)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(7) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(7) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(6)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(7) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(7) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(6) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(6) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(6) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(7)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(6) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(7) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(6) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(6) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(7) + #ИначеЕсли "Т.#Параметр(7)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(6) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(6) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(6) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(6) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(7) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(6) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(6) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(7) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(6) + #КонецЕсли + #Иначе // "Т.##Параметр(7)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(7) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#КонецЕсли + +//// Проверка значения поля группы параметров 3. +#Если "#Параметр(8)" = "" И "#Параметр(9)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(8)" = "Условие" ИЛИ "#Параметр(8)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(9) ) +#ИначеЕсли "#Параметр(8)" = "ПравоЧтения" ИЛИ "#Параметр(8)" = "ПравоДобавления" ИЛИ "#Параметр(8)" = "ПравоИзменения" #Тогда + И #Параметр(9) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(9)) + #Если "#Параметр(8)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(8)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(8) = "" #Тогда + И + #Если &ОграничиватьДоступПоВиду#Параметр(8) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(8)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(8)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(9) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(8)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(9) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(8)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(9) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(9) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(8)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(9) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(9) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(8) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(8) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(8) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(9)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(8) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(8)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(9) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(8) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(8) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(8)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(9) + #ИначеЕсли "Т.#Параметр(9)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(8) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(8)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(8) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(8)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(8) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(8) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(9) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(8)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(8) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(8) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(9) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(8)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(8) + #КонецЕсли + #Иначе // "Т.##Параметр(9)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(8)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(9) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(8)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(8)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#КонецЕсли + +//// Проверка значения поля группы параметров 4. +#Если "#Параметр(10)" = "" И "#Параметр(11)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(10)" = "Условие" ИЛИ "#Параметр(10)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(11) ) +#ИначеЕсли "#Параметр(10)" = "ПравоЧтения" ИЛИ "#Параметр(10)" = "ПравоДобавления" ИЛИ "#Параметр(10)" = "ПравоИзменения" #Тогда + И #Параметр(11) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(11)) + #Если "#Параметр(10)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(10)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(10) = "" #Тогда + И + #Если &ОграничиватьДоступПоВиду#Параметр(10) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(10)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(10)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(11) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(10)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(11) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(10)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(11) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(11) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(10)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(11) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(11) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(10) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(10) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(10) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(11)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(10) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(10)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(11) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(10) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(10) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(10)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(11) + #ИначеЕсли "Т.#Параметр(11)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(10) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(10)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(10) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(10)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(10) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(10) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(11) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(10)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(10) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(10) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(11) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(10)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(10) + #КонецЕсли + #Иначе // "Т.##Параметр(11)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(10)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(11) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(10)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(10)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#КонецЕсли + +//// Проверка значения поля группы параметров 5. +#Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(13) ) +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоДобавления" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда + И #Параметр(13) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(13)) + #Если "#Параметр(12)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(12)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(12) = "" #Тогда + И + #Если &ОграничиватьДоступПоВиду#Параметр(12) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(13) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(13) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(12)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(13) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(13) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(12)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(13) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(13) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(12) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(12) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(12) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(13)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(12) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(13) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(12) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(12) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(13) + #ИначеЕсли "Т.#Параметр(13)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(12) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(12) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(12) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(12) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(13) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(12) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(12) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(13) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(12) + #КонецЕсли + #Иначе // "Т.##Параметр(13)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(13) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#КонецЕсли + +//// Проверка значения поля группы параметров 6. +#Если "#Параметр(14)" = "" И "#Параметр(15)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(14)" = "Условие" ИЛИ "#Параметр(14)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(15) ) +#ИначеЕсли "#Параметр(14)" = "ПравоЧтения" ИЛИ "#Параметр(14)" = "ПравоДобавления" ИЛИ "#Параметр(14)" = "ПравоИзменения" #Тогда + И #Параметр(15) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(15)) + #Если "#Параметр(14)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(14)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(14) = "" #Тогда + И + #Если &ОграничиватьДоступПоВиду#Параметр(14) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(14)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(14)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(15) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(14)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(15) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(14)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(15) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(15) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(14)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(15) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(15) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(14) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(14) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(14) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(15)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(14) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(14)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(15) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(14) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(14) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(14)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(15) + #ИначеЕсли "Т.#Параметр(15)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(14) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(14)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(14) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(14)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(14) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(14) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(15) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(14)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(14) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(14) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(15) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(14)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(14) + #КонецЕсли + #Иначе // "Т.##Параметр(15)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(14)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(15) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(14)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(14)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#КонецЕсли + +//// Проверка значения поля группы параметров 7. +#Если "#Параметр(16)" = "" И "#Параметр(17)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(16)" = "Условие" ИЛИ "#Параметр(16)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(17) ) +#ИначеЕсли "#Параметр(16)" = "ПравоЧтения" ИЛИ "#Параметр(16)" = "ПравоДобавления" ИЛИ "#Параметр(16)" = "ПравоИзменения" #Тогда + И #Параметр(17) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(17)) + #Если "#Параметр(16)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(16)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(16) = "" #Тогда + И + #Если &ОграничиватьДоступПоВиду#Параметр(16) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(16)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(16)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(17) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(16)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(17) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(16)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(17) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(17) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(16)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(17) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(17) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(16) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(16) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(16) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(17)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(16) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(16)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(17) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(16) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(16) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(16)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(17) + #ИначеЕсли "Т.#Параметр(17)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(16) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(16)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(16) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(16)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(16) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(16) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(17) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(16)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(16) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(16) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(17) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(16)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(16) + #КонецЕсли + #Иначе // "Т.##Параметр(17)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(16)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(17) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(16)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(16)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#КонецЕсли + +//// Проверка значения поля группы параметров 8. +#Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(19) ) +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоДобавления" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда + И #Параметр(19) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(19)) + #Если "#Параметр(18)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(18)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(18) = "" #Тогда + И + #Если &ОграничиватьДоступПоВиду#Параметр(18) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(19) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(19) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(18)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(19) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(19) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(18)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(19) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(19) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(18) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(18) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(18) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(19)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(18) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(19) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(18) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(18) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(19) + #ИначеЕсли "Т.#Параметр(19)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(18) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(18) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(18) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(18) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(19) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(18) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(18) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(19) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(18) + #КонецЕсли + #Иначе // "Т.##Параметр(19)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(19) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#КонецЕсли + +//// Проверка значения поля группы параметров 9. +#Если "#Параметр(20)" = "" И "#Параметр(21)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(20)" = "Условие" ИЛИ "#Параметр(20)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(21) ) +#ИначеЕсли "#Параметр(20)" = "ПравоЧтения" ИЛИ "#Параметр(20)" = "ПравоДобавления" ИЛИ "#Параметр(20)" = "ПравоИзменения" #Тогда + И #Параметр(21) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(21)) + #Если "#Параметр(20)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(20)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(20) = "" #Тогда + И + #Если &ОграничиватьДоступПоВиду#Параметр(20) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(20)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(20)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(21) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(20)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(21) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(20)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(21) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(21) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(20)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(21) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(21) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(20) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(20) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(20) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(21)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(20) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(20)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(21) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(20) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(20) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(20)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(21) + #ИначеЕсли "Т.#Параметр(21)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(20) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(20)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(20) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(20)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(20) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(20) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(21) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(20)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(20) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(20) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(21) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(20)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(20) + #КонецЕсли + #Иначе // "Т.##Параметр(21)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(20)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(21) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(20)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(20)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#КонецЕсли + +//// Проверка значения поля группы параметров 10. +#Если "#Параметр(22)" = "" И "#Параметр(23)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(22)" = "Условие" ИЛИ "#Параметр(22)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(23) ) +#ИначеЕсли "#Параметр(22)" = "ПравоЧтения" ИЛИ "#Параметр(22)" = "ПравоДобавления" ИЛИ "#Параметр(22)" = "ПравоИзменения" #Тогда + И #Параметр(23) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(23)) + #Если "#Параметр(22)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(22)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(22) = "" #Тогда + И + #Если &ОграничиватьДоступПоВиду#Параметр(22) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(22)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(22)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(23) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(22)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(23) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(22)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(23) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(23) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(22)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(23) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(23) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(22) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(22) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(22) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(23)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(22) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(22)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(23) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(22) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(22) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(22)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(23) + #ИначеЕсли "Т.#Параметр(23)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(22) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(22)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(22) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(22)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(22) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(22) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(23) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(22)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(22) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(22) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(23) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(22)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(22) + #КонецЕсли + #Иначе // "Т.##Параметр(23)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(22)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(23) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(22)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(22)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#КонецЕсли + +//// Проверка значения поля группы параметров 11. +#Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(25) ) +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоДобавления" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда + И #Параметр(25) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(25)) + #Если "#Параметр(24)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(24)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(24) = "" #Тогда + И + #Если &ОграничиватьДоступПоВиду#Параметр(24) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(25) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(25) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(24)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(25) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(25) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(24)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(25) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(25) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(24) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(24) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(24) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(25)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(24) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(25) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(24) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(24) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(25) + #ИначеЕсли "Т.#Параметр(25)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(24) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(24) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(24) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(24) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(25) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(24) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(24) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(25) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(24) + #КонецЕсли + #Иначе // "Т.##Параметр(25)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(25) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#КонецЕсли + +//// Проверка значения поля группы параметров 12. +#Если "#Параметр(26)" = "" И "#Параметр(27)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(26)" = "Условие" ИЛИ "#Параметр(26)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(27) ) +#ИначеЕсли "#Параметр(26)" = "ПравоЧтения" ИЛИ "#Параметр(26)" = "ПравоДобавления" ИЛИ "#Параметр(26)" = "ПравоИзменения" #Тогда + И #Параметр(27) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(27)) + #Если "#Параметр(26)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(26)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(26) = "" #Тогда + И + #Если &ОграничиватьДоступПоВиду#Параметр(26) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(26)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(26)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(27) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(26)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(27) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(26)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(27) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(27) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(26)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(27) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(27) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(26) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(26) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(26) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(27)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(26) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(26)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(27) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(26) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(26) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(26)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(27) + #ИначеЕсли "Т.#Параметр(27)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(26) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(26)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(26) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(26)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(26) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(26) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(27) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(26)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(26) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(26) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(27) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(26)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(26) + #КонецЕсли + #Иначе // "Т.##Параметр(27)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(26)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(27) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(26)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(26)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#КонецЕсли + +//// Проверка значения поля группы параметров 13. +#Если "#Параметр(28)" = "" И "#Параметр(29)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(28)" = "Условие" ИЛИ "#Параметр(28)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(29) ) +#ИначеЕсли "#Параметр(28)" = "ПравоЧтения" ИЛИ "#Параметр(28)" = "ПравоДобавления" ИЛИ "#Параметр(28)" = "ПравоИзменения" #Тогда + И #Параметр(29) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(29)) + #Если "#Параметр(28)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(28)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(28) = "" #Тогда + И + #Если &ОграничиватьДоступПоВиду#Параметр(28) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(28)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(28)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(29) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(28)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(29) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(28)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(29) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(29) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(28)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(29) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(29) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(28) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(28) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(28) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(29)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(28) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(28)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(29) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(28) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(28) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(28)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(29) + #ИначеЕсли "Т.#Параметр(29)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(28) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(28)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(28) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(28)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(28) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(28) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(29) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(28)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(28) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(28) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(29) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(28)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(28) + #КонецЕсли + #Иначе // "Т.##Параметр(29)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(28)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(29) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(28)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(28)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#КонецЕсли + +//// Проверка значения поля группы параметров 14. +#Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(31) ) +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоДобавления" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда + И #Параметр(31) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(31)) + #Если "#Параметр(30)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(30)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(30) = "" #Тогда + И + #Если &ОграничиватьДоступПоВиду#Параметр(30) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(31) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(31) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(30)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(31) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(31) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(30)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(31) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(31) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(30) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(30) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(30) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(31)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(30) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(31) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(30) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(30) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(31) + #ИначеЕсли "Т.#Параметр(31)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(30) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(30) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(30) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(30) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(31) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(30) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(30) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(31) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(30) + #КонецЕсли + #Иначе // "Т.##Параметр(31)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(31) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#КонецЕсли + +//// Проверка значения поля группы параметров 15. +#Если "#Параметр(32)" = "" И "#Параметр(33)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(32)" = "Условие" ИЛИ "#Параметр(32)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(33) ) +#ИначеЕсли "#Параметр(32)" = "ПравоЧтения" ИЛИ "#Параметр(32)" = "ПравоДобавления" ИЛИ "#Параметр(32)" = "ПравоИзменения" #Тогда + И #Параметр(33) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(33)) + #Если "#Параметр(32)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(32)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(32) = "" #Тогда + И + #Если &ОграничиватьДоступПоВиду#Параметр(32) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(32)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(32)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(33) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(32)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(33) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(32)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(33) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(33) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(32)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(33) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(33) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(32) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(32) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(32) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(33)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(32) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(32)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(33) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(32) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(32) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(32)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(33) + #ИначеЕсли "Т.#Параметр(33)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(32) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(32)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(32) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(32)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(32) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(32) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(33) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(32)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(32) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(32) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(33) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(32)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(32) + #КонецЕсли + #Иначе // "Т.##Параметр(33)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(32)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(33) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(32)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(32)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#КонецЕсли + +//// Проверка значения поля группы параметров 16. +#Если "#Параметр(34)" = "" И "#Параметр(35)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(34)" = "Условие" ИЛИ "#Параметр(34)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + И ( #Параметр(35) ) +#ИначеЕсли "#Параметр(34)" = "ПравоЧтения" ИЛИ "#Параметр(34)" = "ПравоДобавления" ИЛИ "#Параметр(34)" = "ПравоИзменения" #Тогда + И #Параметр(35) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(35)) + #Если "#Параметр(34)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(34)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(34) = "" #Тогда + И + #Если &ОграничиватьДоступПоВиду#Параметр(34) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(34)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(34)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(35) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(34)) + И ИерархияЗначений.ЗначениеДоступа = Т.#Параметр(35) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(34)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(35) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(35) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(34)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = Т.#Параметр(35) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = Т.#Параметр(35) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(34) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(34) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(34) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "Т.#Параметр(35)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(34) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(34)) + И ВидыЗначения.ЗначениеДоступа = Т.#Параметр(35) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(34) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(34) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(34)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.#Параметр(35) + #ИначеЕсли "Т.#Параметр(35)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(34) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(34)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(34) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(34)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(34) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(34) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(35) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(34)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(34) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(34) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = Т.#Параметр(35) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(34)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(34) + #КонецЕсли + #Иначе // "Т.##Параметр(35)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(34)) + И ГруппыЗначений.ЗначениеДоступа = Т.#Параметр(35) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(34)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(34)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли +#КонецЕсли + + ) +) +#КонецЕсли + + + + + ПоЗначениямИНаборамРасширенный + // ПоЗначениямИНаборамРасширенный ( Таблица, Право, Модификатор, ПрисоединяемыеТаблицы, О, В1,П1,О1, В2,П2,О2,..., В(n), П(n), О(n)). +// № параметра: 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,...,3+n*3,4+n*3,5+n*3 . +// Читается так: "ограничение доступа по наборам и значениям расширенный". +// Параметры: +// Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". +// Право - Одна из строк "Чтение", "Добавление", "Изменение", "Удаление". +// Модификатор - изменяет шаблон. +// 1-й модификтор - строка "НеОграничиватьДоступКГруппам" указывает +// безусловно выбирать группы иерархического справочника. +// Других модификаторов в этой версии шаблона не предусмотрено. +// ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, +// "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК Т1 +// ПО Т.Ссылка = Т1.Ссылка". +// Присоединение позволяет указать поля таблицы ОплатаПоставщикам, как поля основной таблицы +// для проверки их значений, как значений основной таблицы. +// Следует помнить, что при размножении строк в результате соединения, достаточно чтобы +// всего одна строка прошла условия проверки, т.е. результаты проверки строк объединяются по "ИЛИ". +// О - Начальные скобки "(". +// В(n) - ВидДоступа (имя предопределённого элемента ПланВидовХарактеристик.ВидыДоступа). +// Когда В(n) = "Условие" (или ""), тогда Р(n) содержит строку условия на языке запросов, например +// "Т.Автор = &ТекущийПользователь", +// "ТипЗначения(Т.Владелец) = Тип(Справочник.Организации)", где Т - псевдоним текущей таблицы. +// Когда В(n) = "ПравоЧтения" ИЛИ "ПравоДобавления" ИЛИ "ПравоИзменения", +// выполняется проверка наличия права на таблицу значения Т.Р(n). +// Когда В(n) = "Объект" (или " "), то +// когда есть запись зависимости прав в регистре сведений ЗависимостиПравДоступа +// тогда используется данные записи - проверка указанного права Т.Р(n) и/или наборов значений доступа +// в регистре сведений НаборыЗначенийДоступа, считываемых по ссылке Т.Р(n) для указанного ограничения права; +// иначе используется стандартное правило: +// когда Право = "Чтение" тогда выполняется проверка права чтения Т.Р(n) и наборов значений доступа +// в регистре сведений НаборыЗначенийДоступа, считываемых по ссылке Т.Р(n) для права чтения; +// когда Право = "Добавление" ИЛИ "Изменение" ИЛИ "Удаление" тогда выполняется проверка права изменения Т.Р(n) +// и наборов значений доступа, считываемых по ссылке Т.Р(n) для права изменения. +// П(n) - Поле с псевдонимом, например "Т.Организация", значение которого проверяется +// по виду доступа, кроме случая В(n) = "Условие" (или ""). +// О(n) - Логические операции "И", "ИЛИ" в сочетании с скобками "(", ")". +// Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но +// необходимо будет указывать все параметры шаблона, т.е. указывать пустые строки, когда количество полей меньше максимального. +// Шаблон имеет структуру: +// <Соединение по таблице1> <Соединение по таблице2> ... <Соединение по таблице(m)> +// <Общая часть условий> <Условие по группе параметров 1> И/ИЛИ <Условие по группе параметров 1> И/ИЛИ ... <Условие по группе параметров(n)> +// Пример: +// ПоЗначениямИНаборамРасширенный("ЖурналДокументов.СкладскиеДокументы", "Чтение", "", +// "", +// "", +// "Объект","Т.Ссылка","И", +// "Объект","Т.ОсновнойДокумент","", "","","", ...) + +// Проверка правильности параметра Модификатор. +#Если НЕ ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" ИЛИ "#Параметр(3)" = "") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверныйМодификатор: #Параметр(3) +#КонецЕсли +// Проверка правильности параметра Право. +#Если НЕ ("#Параметр(2)" = "Чтение" ИЛИ "#Параметр(2)" = "Добавление" ИЛИ + "#Параметр(2)" = "Изменение" ИЛИ "#Параметр(2)" = "Удаление") #Тогда + // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. + НеверноеПраво: #Параметр(2) +#КонецЕсли + +// Общая проверка использования ограничений доступа на уровне записей. +#Если НЕ &ОграничиватьДоступПоВиду = "" #Тогда + +Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). + +// Присоединяемые таблицы к проверяемой строке текущей таблицы "Т". +#Параметр(4) + +ГДЕ + +// Безусловная выборка групп в иерархическом объекте метаданных (если нужно). +#Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда + Т.ЭтоГруппа ИЛИ +#КонецЕсли + +Истина В +( // Проверка права пользователя на текущую таблицу в целом. + // Права на таблицы формируются по составу ролей профиля группы доступа. + Выбрать Первые 1 Истина + ИЗ + ( + Выбрать РАЗЛИЧНЫЕ + ТаблицыГруппДоступа.Таблица, + ТаблицыГруппДоступа.ГруппаДоступа + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + ТаблицыГруппДоступа.Таблица = "#Параметр(1)" + #Если НЕ "#Параметр(2)" = "Чтение" #Тогда + И ТаблицыГруппДоступа.#Параметр(2) + #КонецЕсли + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + И ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + И ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ТаблицыГруппДоступа.Пользователь + ) КАК ТаблицыГруппДоступа + ГДЕ + ( // Поиск значений заданных полей в группах доступа (пользователей) по заданным видам доступа. + + #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. + +//// Проверка значения поля группы параметров 1. +#Если "#Параметр(6)" = "Условие" ИЛИ "#Параметр(6)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(7) ) +#ИначеЕсли "#Параметр(6)" = "ПравоЧтения" ИЛИ "#Параметр(6)" = "ПравоДобавления" ИЛИ "#Параметр(6)" = "ПравоИзменения" #Тогда + #Параметр(7) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(7)) + #Если "#Параметр(6)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(6)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(6)" = "Объект" ИЛИ "#Параметр(6)" = " " #Тогда + #Параметр(7) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(7)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(7)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(7) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(7) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(6) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(6) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(7) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(7) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(6)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(7) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(7) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(6)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(7) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(7) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(6) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(6) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(6) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(7)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(6) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(7) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(6) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(6) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(7) + #ИначеЕсли "#Параметр(7)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(6) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(6) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(6) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(6) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(7) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(6) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(6) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(7) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(6) + #КонецЕсли + #Иначе // "##Параметр(7)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(7) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(6)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 2. +#Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(9)" = "Условие" ИЛИ "#Параметр(9)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(10) ) +#ИначеЕсли "#Параметр(9)" = "ПравоЧтения" ИЛИ "#Параметр(9)" = "ПравоДобавления" ИЛИ "#Параметр(9)" = "ПравоИзменения" #Тогда + #Параметр(10) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(10)) + #Если "#Параметр(9)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(9)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(9)" = "Объект" ИЛИ "#Параметр(9)" = " " #Тогда + #Параметр(10) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(10)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(10)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(10) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(10) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(9) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(9) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(9)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(9)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(10) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(9)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(10) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(9)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(10) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(10) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(9)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(10) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(10) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(9) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(9) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(9) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(10)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(9) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(9)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(10) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(9) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(9) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(9)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(10) + #ИначеЕсли "#Параметр(10)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(9) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(9)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(9) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(9)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(9) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(9) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(10) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(9)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(9) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(9) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(10) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(9)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(9) + #КонецЕсли + #Иначе // "##Параметр(10)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(9)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(9)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(9)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 3. +#Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(12)" = "Условие" ИЛИ "#Параметр(12)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(13) ) +#ИначеЕсли "#Параметр(12)" = "ПравоЧтения" ИЛИ "#Параметр(12)" = "ПравоДобавления" ИЛИ "#Параметр(12)" = "ПравоИзменения" #Тогда + #Параметр(13) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(13)) + #Если "#Параметр(12)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(12)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(12)" = "Объект" ИЛИ "#Параметр(12)" = " " #Тогда + #Параметр(13) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(13)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(13)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(13) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(13) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(12) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(12) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(13) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(13) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(12)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(13) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(13) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(12)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(13) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(13) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(12) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(12) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(12) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(13)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(12) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(13) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(12) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(12) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(13) + #ИначеЕсли "#Параметр(13)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(12) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(12) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(12) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(12) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(13) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(12) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(12) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(13) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(12) + #КонецЕсли + #Иначе // "##Параметр(13)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(13) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(12)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(14) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 4. +#Если "#Параметр(15)" = "" И "#Параметр(16)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(15)" = "Условие" ИЛИ "#Параметр(15)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(16) ) +#ИначеЕсли "#Параметр(15)" = "ПравоЧтения" ИЛИ "#Параметр(15)" = "ПравоДобавления" ИЛИ "#Параметр(15)" = "ПравоИзменения" #Тогда + #Параметр(16) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(16)) + #Если "#Параметр(15)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(15)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(15)" = "Объект" ИЛИ "#Параметр(15)" = " " #Тогда + #Параметр(16) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(16)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(16)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(16) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(16) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(15) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(15) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(15)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(15)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(16) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(15)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(16) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(15)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(16) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(16) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(15)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(16) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(16) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(15) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(15) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(15) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(16)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(15) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(15)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(16) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(15) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(15) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(15)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(16) + #ИначеЕсли "#Параметр(16)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(15) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(15)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(15) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(15)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(15) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(15) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(16) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(15)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(15) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(15) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(16) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(15)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(15) + #КонецЕсли + #Иначе // "##Параметр(16)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(15)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(16) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(15)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(15)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(17) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 5. +#Если "#Параметр(18)" = "" И "#Параметр(19)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(18)" = "Условие" ИЛИ "#Параметр(18)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(19) ) +#ИначеЕсли "#Параметр(18)" = "ПравоЧтения" ИЛИ "#Параметр(18)" = "ПравоДобавления" ИЛИ "#Параметр(18)" = "ПравоИзменения" #Тогда + #Параметр(19) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(19)) + #Если "#Параметр(18)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(18)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(18)" = "Объект" ИЛИ "#Параметр(18)" = " " #Тогда + #Параметр(19) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(19)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(19)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(19) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(19) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(18) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(18) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(19) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(19) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(18)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(19) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(19) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(18)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(19) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(19) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(18) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(18) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(18) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(19)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(18) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(19) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(18) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(18) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(19) + #ИначеЕсли "#Параметр(19)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(18) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(18) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(18) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(18) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(19) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(18) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(18) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(19) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(18) + #КонецЕсли + #Иначе // "##Параметр(19)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(19) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(18)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(20) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 6. +#Если "#Параметр(21)" = "" И "#Параметр(22)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(21)" = "Условие" ИЛИ "#Параметр(21)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(22) ) +#ИначеЕсли "#Параметр(21)" = "ПравоЧтения" ИЛИ "#Параметр(21)" = "ПравоДобавления" ИЛИ "#Параметр(21)" = "ПравоИзменения" #Тогда + #Параметр(22) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(22)) + #Если "#Параметр(21)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(21)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(21)" = "Объект" ИЛИ "#Параметр(21)" = " " #Тогда + #Параметр(22) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(22)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(22)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(22) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(22) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(21) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(21) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(21)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(21)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(22) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(21)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(22) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(21)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(22) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(22) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(21)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(22) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(22) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(21) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(21) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(21) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(22)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(21) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(21)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(22) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(21) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(21) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(21)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(22) + #ИначеЕсли "#Параметр(22)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(21) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(21)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(21) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(21)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(21) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(21) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(22) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(21)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(21) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(21) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(22) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(21)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(21) + #КонецЕсли + #Иначе // "##Параметр(22)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(21)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(22) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(21)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(21)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(23) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 7. +#Если "#Параметр(24)" = "" И "#Параметр(25)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(24)" = "Условие" ИЛИ "#Параметр(24)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(25) ) +#ИначеЕсли "#Параметр(24)" = "ПравоЧтения" ИЛИ "#Параметр(24)" = "ПравоДобавления" ИЛИ "#Параметр(24)" = "ПравоИзменения" #Тогда + #Параметр(25) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(25)) + #Если "#Параметр(24)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(24)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(24)" = "Объект" ИЛИ "#Параметр(24)" = " " #Тогда + #Параметр(25) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(25)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(25)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(25) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(25) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(24) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(24) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(25) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(25) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(24)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(25) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(25) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(24)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(25) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(25) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(24) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(24) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(24) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(25)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(24) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(25) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(24) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(24) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(25) + #ИначеЕсли "#Параметр(25)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(24) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(24) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(24) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(24) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(25) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(24) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(24) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(25) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(24) + #КонецЕсли + #Иначе // "##Параметр(25)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(25) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(24)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(26) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 8. +#Если "#Параметр(27)" = "" И "#Параметр(28)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(27)" = "Условие" ИЛИ "#Параметр(27)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(28) ) +#ИначеЕсли "#Параметр(27)" = "ПравоЧтения" ИЛИ "#Параметр(27)" = "ПравоДобавления" ИЛИ "#Параметр(27)" = "ПравоИзменения" #Тогда + #Параметр(28) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(28)) + #Если "#Параметр(27)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(27)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(27)" = "Объект" ИЛИ "#Параметр(27)" = " " #Тогда + #Параметр(28) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(28)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(28)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(28) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(28) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(27) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(27) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(27)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(27)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(28) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(27)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(28) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(27)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(28) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(28) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(27)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(28) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(28) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(27) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(27) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(27) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(28)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(27) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(27)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(28) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(27) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(27) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(27)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(28) + #ИначеЕсли "#Параметр(28)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(27) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(27)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(27) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(27)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(27) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(27) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(28) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(27)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(27) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(27) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(28) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(27)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(27) + #КонецЕсли + #Иначе // "##Параметр(28)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(27)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(28) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(27)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(27)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(29) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 9. +#Если "#Параметр(30)" = "" И "#Параметр(31)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(30)" = "Условие" ИЛИ "#Параметр(30)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(31) ) +#ИначеЕсли "#Параметр(30)" = "ПравоЧтения" ИЛИ "#Параметр(30)" = "ПравоДобавления" ИЛИ "#Параметр(30)" = "ПравоИзменения" #Тогда + #Параметр(31) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(31)) + #Если "#Параметр(30)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(30)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(30)" = "Объект" ИЛИ "#Параметр(30)" = " " #Тогда + #Параметр(31) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(31)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(31)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(31) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(31) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(30) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(30) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(31) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(31) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(30)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(31) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(31) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(30)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(31) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(31) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(30) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(30) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(30) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(31)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(30) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(31) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(30) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(30) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(31) + #ИначеЕсли "#Параметр(31)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(30) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(30) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(30) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(30) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(31) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(30) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(30) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(31) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(30) + #КонецЕсли + #Иначе // "##Параметр(31)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(31) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(30)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(32) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 10. +#Если "#Параметр(33)" = "" И "#Параметр(34)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(33)" = "Условие" ИЛИ "#Параметр(33)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(34) ) +#ИначеЕсли "#Параметр(33)" = "ПравоЧтения" ИЛИ "#Параметр(33)" = "ПравоДобавления" ИЛИ "#Параметр(33)" = "ПравоИзменения" #Тогда + #Параметр(34) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(34)) + #Если "#Параметр(33)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(33)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(33)" = "Объект" ИЛИ "#Параметр(33)" = " " #Тогда + #Параметр(34) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(34)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(34)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(34) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(34) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(33) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(33) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(33)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(33)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(34) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(33)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(34) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(33)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(34) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(34) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(33)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(34) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(34) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(33) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(33) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(33) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(34)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(33) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(33)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(34) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(33) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(33) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(33)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(34) + #ИначеЕсли "#Параметр(34)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(33) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(33)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(33) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(33)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(33) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(33) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(34) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(33)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(33) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(33) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(34) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(33)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(33) + #КонецЕсли + #Иначе // "##Параметр(34)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(33)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(34) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(33)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(33)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(35) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 11. +#Если "#Параметр(36)" = "" И "#Параметр(37)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(36)" = "Условие" ИЛИ "#Параметр(36)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(37) ) +#ИначеЕсли "#Параметр(36)" = "ПравоЧтения" ИЛИ "#Параметр(36)" = "ПравоДобавления" ИЛИ "#Параметр(36)" = "ПравоИзменения" #Тогда + #Параметр(37) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(37)) + #Если "#Параметр(36)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(36)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(36)" = "Объект" ИЛИ "#Параметр(36)" = " " #Тогда + #Параметр(37) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(37)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(37)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(37) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(37) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(36) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(36) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(36)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(36)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(37) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(36)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(37) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(36)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(37) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(37) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(36)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(37) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(37) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(36) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(36) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(36) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(37)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(36) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(36)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(37) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(36) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(36) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(36)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(37) + #ИначеЕсли "#Параметр(37)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(36) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(36)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(36) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(36)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(36) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(36) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(37) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(36)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(36) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(36) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(37) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(36)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(36) + #КонецЕсли + #Иначе // "##Параметр(37)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(36)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(37) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(36)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(36)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(38) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 12. +#Если "#Параметр(39)" = "" И "#Параметр(40)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(39)" = "Условие" ИЛИ "#Параметр(39)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(40) ) +#ИначеЕсли "#Параметр(39)" = "ПравоЧтения" ИЛИ "#Параметр(39)" = "ПравоДобавления" ИЛИ "#Параметр(39)" = "ПравоИзменения" #Тогда + #Параметр(40) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(40)) + #Если "#Параметр(39)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(39)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(39)" = "Объект" ИЛИ "#Параметр(39)" = " " #Тогда + #Параметр(40) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(40)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(40)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(40) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(40) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(39) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(39) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(39)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(39)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(40) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(39)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(40) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(39)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(40) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(40) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(39)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(40) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(40) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(39) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(39) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(39) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(40)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(39) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(39)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(40) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(39) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(39) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(39)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(40) + #ИначеЕсли "#Параметр(40)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(39) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(39)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(39) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(39)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(39) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(39) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(40) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(39)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(39) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(39) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(40) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(39)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(39) + #КонецЕсли + #Иначе // "##Параметр(40)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(39)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(40) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(39)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(39)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(41) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 13. +#Если "#Параметр(42)" = "" И "#Параметр(43)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(42)" = "Условие" ИЛИ "#Параметр(42)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(43) ) +#ИначеЕсли "#Параметр(42)" = "ПравоЧтения" ИЛИ "#Параметр(42)" = "ПравоДобавления" ИЛИ "#Параметр(42)" = "ПравоИзменения" #Тогда + #Параметр(43) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(43)) + #Если "#Параметр(42)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(42)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(42)" = "Объект" ИЛИ "#Параметр(42)" = " " #Тогда + #Параметр(43) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(43)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(43)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(43) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(43) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(42) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(42) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(42)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(42)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(43) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(42)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(43) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(42)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(43) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(43) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(42)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(43) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(43) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(42) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(42) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(42) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(43)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(42) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(42)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(43) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(42) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(42) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(42)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(43) + #ИначеЕсли "#Параметр(43)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(42) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(42)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(42) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(42)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(42) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(42) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(43) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(42)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(42) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(42) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(43) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(42)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(42) + #КонецЕсли + #Иначе // "##Параметр(43)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(42)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(43) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(42)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(42)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(44) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 14. +#Если "#Параметр(45)" = "" И "#Параметр(46)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(45)" = "Условие" ИЛИ "#Параметр(45)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(46) ) +#ИначеЕсли "#Параметр(45)" = "ПравоЧтения" ИЛИ "#Параметр(45)" = "ПравоДобавления" ИЛИ "#Параметр(45)" = "ПравоИзменения" #Тогда + #Параметр(46) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(46)) + #Если "#Параметр(45)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(45)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(45)" = "Объект" ИЛИ "#Параметр(45)" = " " #Тогда + #Параметр(46) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(46)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(46)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(46) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(46) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(45) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(45) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(45)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(45)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(46) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(45)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(46) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(45)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(46) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(46) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(45)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(46) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(46) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(45) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(45) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(45) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(46)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(45) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(45)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(46) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(45) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(45) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(45)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(46) + #ИначеЕсли "#Параметр(46)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(45) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(45)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(45) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(45)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(45) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(45) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(46) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(45)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(45) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(45) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(46) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(45)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(45) + #КонецЕсли + #Иначе // "##Параметр(46)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(45)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(46) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(45)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(45)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(47) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 15. +#Если "#Параметр(48)" = "" И "#Параметр(49)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(48)" = "Условие" ИЛИ "#Параметр(48)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(49) ) +#ИначеЕсли "#Параметр(48)" = "ПравоЧтения" ИЛИ "#Параметр(48)" = "ПравоДобавления" ИЛИ "#Параметр(48)" = "ПравоИзменения" #Тогда + #Параметр(49) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(49)) + #Если "#Параметр(48)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(48)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(48)" = "Объект" ИЛИ "#Параметр(48)" = " " #Тогда + #Параметр(49) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(49)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(49)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(49) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(49) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(48) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(48) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(48)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(48)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(49) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(48)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(49) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(48)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(49) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(49) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(48)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(49) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(49) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(48) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(48) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(48) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(49)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(48) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(48)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(49) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(48) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(48) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(48)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(49) + #ИначеЕсли "#Параметр(49)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(48) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(48)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(48) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(48)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(48) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(48) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(49) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(48)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(48) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(48) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(49) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(48)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(48) + #КонецЕсли + #Иначе // "##Параметр(49)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(48)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(49) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(48)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(48)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(50) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + +//// Проверка значения поля группы параметров 16. +#Если "#Параметр(51)" = "" И "#Параметр(52)" = "" #Тогда + // Группа параметров не используется. +#ИначеЕсли "#Параметр(51)" = "Условие" ИЛИ "#Параметр(51)" = "" #Тогда + // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. + ( #Параметр(52) ) +#ИначеЕсли "#Параметр(51)" = "ПравоЧтения" ИЛИ "#Параметр(51)" = "ПравоДобавления" ИЛИ "#Параметр(51)" = "ПравоИзменения" #Тогда + #Параметр(52) <> Неопределено + И Истина В + ( // Проверка права пользователя на таблицу Значения, установленного в поле. + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава + ГДЕ + ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТипЗначения(#Параметр(52)) + #Если "#Параметр(51)" = "ПравоДобавления" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Добавление + #ИначеЕсли "#Параметр(51)" = "ПравоИзменения" #Тогда + И ТаблицыГруппДоступаПроверкаПрава.Изменение + #КонецЕсли + ) +#ИначеЕсли "#Параметр(51)" = "Объект" ИЛИ "#Параметр(51)" = " " #Тогда + #Параметр(52) <> Неопределено + И + // Предполагается, что право Чтение может зависеть только от права Чтение + #Если "#Параметр(2)" = "Чтение" #Тогда + ( + // Проверка права Чтение + НЕ + ( + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ГДЕ + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + И ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы = Истина + ) + #Иначе + Истина В + ( + Выбрать Истина + ИЗ (Выбрать Истина) КАК ЗначениеИстина + Левое Соединение РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа + ПО + ЗависимостиПравДоступа.ПодчиненнаяТаблица = "#Параметр(1)" + И ТипЗначения(ЗависимостиПравДоступа.ТипВедущейТаблицы) = ТипЗначения(#Параметр(52)) + ГДЕ + // Проверка права Добавление или Изменение или Удаление + НЕ + ( + НЕ ЕстьNULL(ЗависимостиПравДоступа.ОтключитьПроверкуПравВедущейТаблицы, Ложь) + #КонецЕсли + И НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваОбъекта + ГДЕ + ТаблицыГруппДоступаПроверкаПраваОбъекта.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваОбъекта.ТипТаблицы) = ТипЗначения(#Параметр(52)) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И ТаблицыГруппДоступаПроверкаПраваОбъекта.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + ) + ) + // Проверка ограничения права + И Истина В + ( + Выбрать Первые 1 Истина // Выбор первого набора по которому доступ разрешен. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НомераНаборов + ГДЕ + НомераНаборов.Объект = #Параметр(52) + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + #Иначе + И НЕ + ( НомераНаборов.ВидДоступаПравоЧтения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоДобавления <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + И НомераНаборов.ВидДоступаПравоИзменения <> ЕстьNULL(ЗависимостиПравДоступа.ПриПроверкеПрава#Параметр(2), Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения)) + ) + #КонецЕсли + И НЕ Ложь В + ( + Выбрать Первые 1 Ложь // Выбор первого не разрешенного значения доступа. + ИЗ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначений + ГДЕ + НаборыЗначений.Объект = #Параметр(52) + И НаборыЗначений.НомерНабора = НомераНаборов.НомерНабора + И НЕ + Выбор + // Проверка заведомого ложного или истинного однострочного набора значений. + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + Тогда НаборыЗначений.ЗначениеДоступа <> Неопределено + // Проверка отключения ограничения по виду доступа. + Когда НаборыЗначений.ВидДоступа В (&ВидыДоступаБезОграничения) + Тогда Истина + // Проверка права доступа пользователя к таблице ЗначенияДоступа. + #Если "#Параметр(2)" = "Чтение" #Тогда + // Предполагается, что право Чтение может зависеть только от права Чтение + Когда НаборыЗначений.ТипЗначенияДоступа <> Неопределено + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + #Иначе + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Добавление = Истина + ) + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + Тогда Истина В + ( Выбрать Первые 1 Истина + ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПраваНаОбъект + ГДЕ + ТаблицыГруппДоступаПроверкаПраваНаОбъект.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И ТипЗначения(ТаблицыГруппДоступаПроверкаПраваНаОбъект.ТипТаблицы) = ТипЗначения(НаборыЗначений.ЗначениеДоступа) + И ТаблицыГруппДоступаПроверкаПраваНаОбъект.Изменение = Истина + ) + #КонецЕсли + + #Если НЕ &ВидыДоступаЧерезПраваПоЗначениямДоступа = "" #Тогда + Когда НаборыЗначений.ВидДоступаЧерезПраваПоЗначениямДоступа + Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ИерархияЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #КонецЕсли + Иначе + #Если НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" И + НЕ &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный" #Тогда // когда не КаждыйВидЕдинственный + ( + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + НаборыЗначений.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + // Проверка наличия вида доступа у значения доступа. + ИЛИ НЕ Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначений + ГДЕ + ВидыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ВидыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ВидыЗначений.ТолькоВидДоступа = Истина + ) + ) + И + #КонецЕсли + Выбор + Когда + #Если НЕ &ОграничиватьДоступПоВидуПользователи = "" + И &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #ИначеЕсли НЕ &ОграничиватьДоступПоВидуВнешниеПользователи = "" + И НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + + Выбор + Когда НаборыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = НаборыЗначений.ЗначениеДоступа + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + Иначе Ложь + Конец + ИЛИ + #КонецЕсли + #Если &ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп" ИЛИ + &ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп" #Тогда // когда КаждыйВидБезГрупп + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + #Иначе + Выбор + Когда НаборыЗначений.ВидДоступаБезГруппЗначенияДоступа + Тогда + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Иначе + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) через группы доступа значений. + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = НаборыЗначений.ВидДоступа + И ГруппыЗначений.ЗначениеДоступа = НаборыЗначений.ЗначениеДоступа + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = НаборыЗначений.ВидДоступа + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + ) + Тогда Истина + Иначе Ложь + Конец + Конец + #КонецЕсли + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = НаборыЗначений.ВидДоступа + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + Тогда Истина + Иначе Ложь + Конец + Конец + ) // НЕ Ложь В + ) + ) + +#ИначеЕсли НЕ &ОграничиватьДоступПоВиду#Параметр(51) = "" #Тогда + + #Если &ОграничиватьДоступПоВиду#Параметр(51) = "ЧерезПраваПоЗначениямДоступа" #Тогда + ( + НЕ Истина В // Проверка, что по виду доступа пользователь ограничивается. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(51)) + И Виды.ТолькоВидДоступа = Истина + ) + ИЛИ + Истина В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(51)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(52) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2) + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + И НЕ Ложь В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено + ( + Выбрать Первые 1 Ложь + ИЗ РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениям + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ИерархияЗначений + ПО + ИерархияЗначений.ИспользоватьПраваСсылки + И ИерархияЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(51)) + И ИерархияЗначений.ЗначениеДоступа = #Параметр(52) + И ПраваПоЗначениям.Таблица = "#Параметр(1)" + И ПраваПоЗначениям.ЗначениеДоступа = ИерархияЗначений.ГруппаДоступа + И ПраваПоЗначениям.#Параметр(2)Запрещено + И ПраваПоЗначениям.РаспространяетсяВИерархии >= ИерархияЗначений.СвязьСРодителем + Внутреннее Соединение РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ПО + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь + #Иначе + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + И ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийВнешнийПользователь + #КонецЕсли + И ПользователиИГруппыПользователей.ГруппаДоступа = ПраваПоЗначениям.Пользователь + ) + ) + #Иначе + ( + #Если "#Параметр(51)" = "Пользователи" #Тогда + #Если &ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.Пользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(52) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(52) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + #ИначеЕсли "#Параметр(51)" = "ВнешниеПользователи" #Тогда + #Если НЕ (&ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)) #Тогда + #Если НЕ &ДобавлятьРуководителямДоступПодчиненных #Тогда + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + ГДЕ + ПользователиИГруппыПользователей.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи) + И ПользователиИГруппыПользователей.ЗначениеДоступа = #Параметр(52) + И ПользователиИГруппыПользователей.ГруппаДоступа = &ТекущийВнешнийПользователь + ) + #Иначе + Истина В + ( + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи + ГДЕ + ПодчиненныеПользователи.Пользователь = &ТекущийВнешнийПользователь + И ПодчиненныеПользователи.ПодчиненныйПользователь = #Параметр(52) + И ПодчиненныеПользователи.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + ) + #КонецЕсли + ИЛИ + #КонецЕсли + // Если ВидПоТипуЗначенияОдинИзМногих, тогда проверка возможности доступа к значению через вид доступа. + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(51) = "ОдинИзМногихВидов,БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(51) = "ОдинИзМногихВидов,ОднаГруппа" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(51) = "ОдинИзМногихВидов,МножествоГрупп" #Тогда + ( + #Если "#Параметр(52)" = "Т.Ссылка" #Тогда + Т.ВидДоступа#Параметр(51) + #Иначе + НЕ Истина В + ( + Выбрать Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ВидыЗначения + ГДЕ + ВидыЗначения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(51)) + И ВидыЗначения.ЗначениеДоступа = #Параметр(52) + И ВидыЗначения.ТолькоВидДоступа = Истина + ) + #КонецЕсли + ) И + #КонецЕсли + Выбор + Когда Истина В // Поиск значения в группе доступа (пользователей) непосредственно или через группы доступа значений. + ( + #Если &ОграничиватьДоступПоВиду#Параметр(51) = "ЕдинственныйВид, БезГрупп" ИЛИ + &ОграничиватьДоступПоВиду#Параметр(51) = "ОдинИзМногихВидов,БезГрупп" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(51)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = #Параметр(52) + #ИначеЕсли "#Параметр(52)" = "Т.Ссылка" #Тогда + #Если &ОграничиватьДоступПоВиду#Параметр(51) = "ЕдинственныйВид, ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(51)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(51) = "ОдинИзМногихВидов,ОднаГруппа" #Тогда + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения + ГДЕ + Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(51)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = Т.ГруппаДоступа#Параметр(51) + #ИначеЕсли &ОграничиватьДоступПоВиду#Параметр(51) = "ЕдинственныйВид ,МножествоГрупп" #Тогда + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(52) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(51)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #Иначе // &ОграничиватьДоступПоВиду##Параметр(51) = "ОдинИзМногихВидов,МножествоГрупп" + Выбрать Первые 1 Истина + ИЗ #Параметр(1).ГруппыДоступа#Параметр(51) КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.Ссылка = #Параметр(52) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(51)) + И Значения.ТолькоВидДоступа = Ложь + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа#Параметр(51) + #КонецЕсли + #Иначе // "##Параметр(52)" <> "Т.Ссылка" + Выбрать Первые 1 Истина + ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + Внутреннее Соединение РегистрСведений.ЗначенияГруппДоступа КАК Значения + ПО + ГруппыЗначений.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(51)) + И ГруппыЗначений.ЗначениеДоступа = #Параметр(52) + И Значения.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Значения.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(51)) + И Значения.ТолькоВидДоступа = ГруппыЗначений.ТолькоВидДоступа + И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа + #КонецЕсли + ) + Тогда Истина + Иначе Ложь + Конец + = + Выбор + Когда Истина В // Проверка наличия ограничения по виду доступа для значений. + ( + Выбрать Истина + ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Виды + ГДЕ + Виды.ГруппаДоступа = ТаблицыГруппДоступа.ГруппаДоступа + И Виды.ВидДоступа = Значение(ПланВидовХарактеристик.ВидыДоступа.#Параметр(51)) + И Виды.ТолькоВидДоступа = Истина + ) + Тогда Истина + Иначе Ложь + Конец + ) + #КонецЕсли + +#Иначе + Истина +#КонецЕсли + + #Параметр(53) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. + + ) +) +#КонецЕсли + + + + diff --git a/SSL/src/Roles/РаботаСПапкамиФайлов/РаботаСПапкамиФайлов.mdo b/SSL/src/Roles/РаботаСПапкамиФайлов/РаботаСПапкамиФайлов.mdo new file mode 100644 index 000000000..577d64e22 --- /dev/null +++ b/SSL/src/Roles/РаботаСПапкамиФайлов/РаботаСПапкамиФайлов.mdo @@ -0,0 +1,8 @@ + + + РаботаСПапкамиФайлов + + ru + Работа с папками файлов + + diff --git a/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights b/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights index ab80e64f4..9f465aa66 100644 --- a/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights +++ b/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5570,7 +5570,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9728,7 +9728,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10531,7 +10531,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -12874,7 +12874,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16801,7 +16801,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false diff --git a/SSL/src/Roles/УдаленныйДоступБазоваяФункциональность/Rights.rights b/SSL/src/Roles/УдаленныйДоступБазоваяФункциональность/Rights.rights new file mode 100644 index 000000000..1890f446a --- /dev/null +++ b/SSL/src/Roles/УдаленныйДоступБазоваяФункциональность/Rights.rights @@ -0,0 +1,13 @@ + + + false + true + false + + WebService.InterfaceVersion.Operation.GetVersions + + Use + true + + + diff --git a/SSL/src/Roles/УдаленныйДоступБазоваяФункциональность/УдаленныйДоступБазоваяФункциональность.mdo b/SSL/src/Roles/УдаленныйДоступБазоваяФункциональность/УдаленныйДоступБазоваяФункциональность.mdo new file mode 100644 index 000000000..bbc464f07 --- /dev/null +++ b/SSL/src/Roles/УдаленныйДоступБазоваяФункциональность/УдаленныйДоступБазоваяФункциональность.mdo @@ -0,0 +1,8 @@ + + + УдаленныйДоступБазоваяФункциональность + + ru + Удаленный доступ (Базовая функциональность) + + diff --git a/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/Rights.rights b/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/Rights.rights new file mode 100644 index 000000000..a50c75746 --- /dev/null +++ b/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/Rights.rights @@ -0,0 +1,24969 @@ + + + false + true + false + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ПоказыватьОповещение + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.НаЧтение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.КодПредопределенногоУзла + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Контакт + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ФорматПодписиДляНовыхСообщений + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.Пользователь + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантРасписанияРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.Пользователи + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.Dimension.КаналСообщений + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMПарольПользователя + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ДанныеУспешноЗагружены + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникИндексКартинки + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.Code + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.РезультатВыполнения + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.СтрокаРасписания + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ДополнительныйРеквизитТип + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Resource.НаследоватьПраваРодителей + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Адрес + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Дата + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.Dimension.Папка + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.Attribute.КоррСчет + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовНесопоставленных + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ФорматПодписиПриОтветеПересылке + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.Attribute.Ответственный + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.ИмяПоля + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ДатаОтправления + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Подготовлена + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ПолноеНаименование + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.СвязиПараметровВыбора + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.СостояниеЗадания + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.Attribute.НаименованиеПолное + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.НомерПопытки + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.ФорматыОтчетов.Attribute.Отчет + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.ДобавлениеЗапрещено + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Dimension.ГруппаДоступа + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.Автор + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.Attribute.РольИсполнителя + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.СообщенияОбменаДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СообщенияОбменаДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СообщенияОбменаДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СообщенияОбменаДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ДатаПолучения + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.УникальныйИдентификаторПриемника + + View + false + + + Edit + false + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.Dimension.Узел + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.СодержаниеПредмета + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.УведомитьОДоставке + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Выполнено + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Code + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейКопий + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FILEСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыПриемника + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаОтложенногоОповещения + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыИсточника + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Attribute.ОписаниеДатыЗапрета + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ТекстHTML + + View + false + + + Edit + false + + + + InformationRegister.АктивныеПредметыВзаимодействий.Dimension.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.Dimension.КаналСообщений + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.ReceivedNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.SentNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.Ref + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.Description + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипИсточникаСтрокой + + View + false + + + Edit + false + + + + WebService.RemoteAdministrationOfExchange_2_0_1_6.Operation.StartExchangeExecutionInSecondDataBase + + Use + true + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.Attribute.ПомещатьВПапку + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMАутентификацияОперационнойСистемы + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.АбонентПредставление + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СпособSMTPАутентификации + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.РегламентноеЗаданиеGUID + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.Attribute.Пользователь + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMАутентификацияОперационнойСистемы + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILУчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.АдресТолькоРоссийский + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаXML + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Resource.СрокНапоминания + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Dimension.Объект + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ДополнительныйРеквизитID + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.СвободныйОпрос + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.Attribute.Описание + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ТипОтвета + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаИнтерактивногоРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.ФорматыОтчетов.Attribute.Формат + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMКаталогИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.Путь + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.Attribute.ДатаРождения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Ref + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПорт + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.Resource.ВерсияПоставляемыхДанных + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.FILEСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ИспользоватьЭлектроннуюПочту + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Автор + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.УчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.УчетнаяЗапись + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.ИнтервалВремениНапоминания + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КоличествоКопийВКаталоге + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ТипЗначенияДоступа + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Dimension.Объект + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Resource.ДатаОкончания + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Точность + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.Resource.ДатаПрочтения + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ИдентификаторЗначенияРеквизита + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Dimension.АдресныйОбъект + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Модификатор + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляТаблицы + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPПорт + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗагружатьДанныеВРежимеОбмена + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.ШаблонИмениФайлаСообщения + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPПароль + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодХраненияРезервныхКопий + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILУчетнаяЗапись + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMПарольПользователя + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбъектыПоСсылкеЗагружатьБезПометкиУдаления + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Наименование + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Resource.ДатаЗапрета + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.УникальныйИдентификаторИсточника + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Resource.КоличествоДнейВГрафикеСНачалаГода + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.Вопрос + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.Resource.Использование + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Страна + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.Заключение + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + InformationRegister.НеразделенныеПользователи.Dimension.ИдентификаторПользователяИБ + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.Period + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.СписокПолучателейКопий + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.РегламентноеЗаданиеGUID + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.КодНовогоУзлаВторойБазы + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле3 + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ТипТекста + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.КоличествоПопытокОбработкиСообщения + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Resource.ДатаВыпускаВерсии + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Завершен + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяПланаОбмена + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.Attribute.КомпоновщикНастроек + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ТипЗначенияРеквизита + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.СписокИспользуемыхПолей + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяТаблицыПриемника + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.Attribute.Телефоны + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияДатаМодификацииФайла + + View + false + + + Edit + false + + + + Catalog.СтраныМира.Attribute.КодАльфа2 + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Resource.ОтключитьПроверкуПравВедущейТаблицы + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.Dimension.Получатель + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗадаватьВопросПриЗагрузкеДанныхПриОткрытииОбработки + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.Dimension.РегламентноеЗадание + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИмяТаблицыПриемника + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.Получатель + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПодписьДляНовыхСообщенийПростойТекст + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Данные + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.Dimension.ИмяПодсистемы + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВИсточнике + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяВременногоФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ДанныеУспешноЗагружены + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Dimension.Пользователь + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Resource.Наименование + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.НаименованиеПолное + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FILEКаталогОбменаИнформацией + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Ответственный + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПодписьДляНовыхСообщенийФорматированныйДокумент + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПомещатьПисьмоВПапкуПисьмаОснования + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSПароль + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.Resource.СОшибками + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.Attribute.Комментарий + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.АгрегироватьСуммуВОтчетах + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.РодительскаяВерсия + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.КлючВарианта + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.Таблица + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.Attribute.ТребуетОткрытогоОтвета + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторИсточника + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.ТипПриемника + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ТипПолучателейРассылки + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.Тип + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.Dimension.Письмо + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КаталогСРезервнымиКопиями + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Подсказка + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПользовательИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение.Attribute.ПолноеИмяОбъектаМетаданных + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяФайлаСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Attribute.ИдентификаторВыгрузки + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.ТипАдресногоЭлемента + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагОшибки + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Resource.Удаление + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.СписокУчастников + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПротоколаОбменаЗагрузка + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.Attribute.ОкончаниеПериодаЗагрузки + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Важность + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле1 + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Тема + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.Вступление + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.ИмяРеквизитаИсточника + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.ДатаРедактирования + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.Dimension.Пользователь + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Важность + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Ответственный + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.НомерЯчейки + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Resource.СообщениеБлокировки + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.НаименованиеВторойБазы + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.Attribute.Ведущая + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + InformationRegister.ПодчиненныеПользователи.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПодчиненныеПользователи.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПодчиненныеПользователи.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПодчиненныеПользователи.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Кратность + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.ЧтениеЗапрещено + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Содержание + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьДляОтправки + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Resource.Статус + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.TabularSection.Респонденты.Attribute.Респондент + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Формулировка + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Code + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ВключатьТелоИсходногоПисьма + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Ответственный + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВыполняемоеДействие + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ТолькоВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВИсточнике + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + InformationRegister.ПодчиненныеПользователи.Dimension.Пользователь + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники.Attribute.Контакт + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Идентификатор + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ГруппаИсполнителейЗадач + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяМакетаПравил + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОткрыватьПротоколыОбменаПослеВыполненияОпераций + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ИспользоватьСетевойКаталог + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторПриемника + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле5 + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.КакСвязаться + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ОдинКоМногим + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPПассивноеСоединение + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейПисьма + + View + false + + + Edit + false + + + + WebService.RemoteAdministrationOfExchange.Operation.TestConnection + + Use + true + + + + InformationRegister.НаличиеПрисоединенныхФайлов.Resource.ЕстьФайлы + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + InformationRegister.СообщенияОбменаДанными.Resource.ДатаЗакладкиСообщения + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.Resource.Версия + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ТипИсточника + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Resource.ВидДня + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ВидыДоступа + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Архивировать + + View + false + + + Edit + false + + + + WebService.RemoteAdministrationOfExchange.Operation.GetExchangePlans + + Use + true + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяПланаОбменаИзПравил + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Контакт + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Executed + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Description + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.RoutePoint + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.BusinessProcess + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Date + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Number + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.Period + + View + false + + + Edit + false + + + + WebService.RemoteAdministrationOfExchange_2_0_1_6.Operation.PrepareExchangeExecution + + Use + true + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.Номер + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВидТранспортаСообщенийОбмена + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.ТелоСообщения + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяСервераИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Dimension.ДействиеПриОбмене + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FILEСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИсточникПравил + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Адрес + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПроцентСопоставленияОбъектов + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.Resource.Путь + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторНаСервере + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаПравил + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPСервер + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ФорматСвойства + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВерсияКорреспондента_2_0_1_6 + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.SMTPАутентификация + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.Attribute.Город + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Resource.КонецБлокировки + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Attribute.Повтор + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КаталогИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.МинимальноеЗначение + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ОставлятьКопииСообщенийНаСервере + + View + false + + + Edit + false + + + + Catalog.Календари.Attribute.ВидКалендаря + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.РежимОбмена + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Автор + + View + false + + + Edit + false + + + + InformationRegister.ПодчиненныеПользователи.Dimension.ГруппаДоступа + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ВыборГруппИЭлементов + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВПротоколСообщенийОбОшибках + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.ИдентификаторПользователяИБ + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.Resource.ХранимыйФайл + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Получатели + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Resource.РаспространяетсяВИерархии + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.Год + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Number + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.РедактированиеТолькоВДиалоге + + View + false + + + Edit + false + + + + InformationRegister.ИсточникиВнешнихЗадач.Resource.УзелИсточник + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.Обязательный + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработкиНастройкиВыгрузки + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.РезультатВыполненияОбмена + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Получатели.Attribute.Исключен + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Dimension.НомерВерсии + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Комментарий + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Описание + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Проверяющий + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.CombiВидТранспортаСообщенийОбмена + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.Resource.Кратность + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ШаблонИмениФайлаСообщения + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Город + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Dimension.ТипВедущейТаблицы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.УдалятьПослеОтправки + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаCOM + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторСообщения + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPЛогин + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Dimension.УчетнаяЗаписьЭлектроннойПочты + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Dimension.Таблица + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаОбработчиковСобытий + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Dimension.Источник + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоЭлементовВТранзакцииПриВыгрузкеДляПлановОбмена + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.Resource.Кратность + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяСервера1СПредприятия + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.ДатаИзменения + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Получатели.Attribute.Получатель + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.АутентификацияWindowsИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ВнешняяРоль + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.СрокИсполнения + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилВыгрузки + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.ДатаКурса + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.Серия + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Ответственный + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.WSПароль + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипИсточникаСтрокой + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТипИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Профиль + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Курс + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.Удаление + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПользователь + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляПоиска + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.ДатаЗавершения + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ОтветственныйЗаВедениеПапок + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Dimension.ТипОбъекта + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.ШаблонИмениФайлаСообщения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.МаксимальноеЗначение + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Предмет + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.ЗапланированныйМоментЗапуска + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Версия + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.ЗапретитьРаботуРегламентныхЗаданий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НеВыводитьНикакихИнформационныхСообщенийПользователю + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Number + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.Параметры + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияТом + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.АльтернативныеНазвания + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ВнутреннийЗаголовок + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ВидОперации + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.Dimension.ПрисоединенныйФайл + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.Дата + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.Attribute.ТипОбъектаДокументооборота + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаПравоИзменения + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПароль + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ТипТекста + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.Использование + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Code + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Кодировка + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ОтветственныйЗаОбработкуПисем + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.Пользователи.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.СкрытыеКопии + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFILE + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьЗаполнениеОбъекта + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсия + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоОбъектовНаТранзакцию + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаEMAIL + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВОкноСообщенийИнформационныхСообщений + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.WSURLВебСервиса + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ЗагрузкаДанныхВыполняетсяЧерезВнешнееСоединение + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле2 + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Важность + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.СинхронизироватьПоИдентификатору + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.СохраненныеНастройки + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Наименование + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.Роли + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Том + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.Period + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.АвторСтрокой + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.ДляРабочегоСтола + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИспользоватьПредварительныйПросмотр + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.Attribute.ПредставлениеОтбора + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ИсточникиВнешнихЗадач.Dimension.Объект + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаБезГруппЗначенияДоступа + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ПолноеНаименование + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыПриемникаУстановлен + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.ДополнительныйОтчетИлиОбработка + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаВнешнейОбработкиОбработчиковСобытий + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.НомерВходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПродолжатьНапоминания + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Вид + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторСообщения + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.ИспользоватьРегламентноеЗадание + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Attribute.Использование + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ОсновнаяВалюта + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ЗначениеПустойСсылки + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Исполнитель + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.TabularSection.Респонденты + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.СрокИсполнения + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.БезДанных + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.Attribute.НачалоПериодаЗагрузки + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Администратор + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Ответственный + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ЗначениеРеквизитаДокументооборота + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Resource.Наименование + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КоличествоКопийВКаталоге + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаЗачитанные + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НеЗадаватьВопросПриЗагрузкеДанныхПриОткрытииОбработки + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ПарольАрхива + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.TabularSection.Состав + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Адрес + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыОбъекта + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Resource.Добавление + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КодТипаРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.АбонентКакСвязаться + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Тема + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗаписыватьРегистрыНаборамиЗаписей + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Автор + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Attribute.ОбъектВыгруженПоСсылке + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Стартован + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.УведомитьОДоставке + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ТекстПисьмаВФорматеHTML + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Dimension.ТипОбъекта + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Добавление + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Значение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПассивноеСоединение + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Dimension.ИмяПланаОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПорт + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Resource.ПриПроверкеПраваЧтение + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.Resource.ТребуетсяОтправка + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.Resource.НомерСообщения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ВидТранспортаСообщенийОбмена + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMКаталогИнформационнойБазы + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.РедактированиеШаблонаЗавершено + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ОтображатьТелоИсходногоПисьма + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.СинхронизироватьПоИдентификатору + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.Содержание + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Представление + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ВключатьПодписьПриОтветеПересылке + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.МестоПроведенияВстречи + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.ИсполняющееФоновоеЗадание + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ИмяРеквизитаОбъектаПотребителя + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Изменять + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ЗадачаИсточник + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ИмяАрхива + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Состояние + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторыОснований + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ДоступРазрешен + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.Представление + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ИспользоватьFTPРесурс + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот.StandardAttribute.ReceivedNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот.StandardAttribute.SentNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот.StandardAttribute.Ref + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот.StandardAttribute.Description + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИнформацияОПравилах + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.Resource.Предмет + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPКаталог + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Resource.ДеньВключенВГрафик + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.Заблокировано + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Resource.Вариант + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ДатаЗаема + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВПриемнике + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработкиНастройкиЗагрузки + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Number + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Dimension.ГруппаДоступа + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Resource.Изменение + + View + false + + + Edit + false + + + + WebService.RemoteAdministrationOfExchange.Operation.PrepareExchangeExecution + + Use + true + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Представление + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ДатаПринятияКИсполнению + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.Resource.ПапкаЭлектронногоПисьма + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторОснования + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Dimension.БизнесПроцесс + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMИмяПользователя + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ТипПриемника + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.ПометкаУдаления + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.Attribute.Адрес + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.НомерИтерации + + View + false + + + Edit + false + + + + InformationRegister.АктивныеПредметыВзаимодействий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.АктивныеПредметыВзаимодействий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.АктивныеПредметыВзаимодействий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.АктивныеПредметыВзаимодействий.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПорядокКоллекции + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяВременногоКаталогаСообщенийОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.CombiВидТранспортаСообщенийОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FILEКаталогОбменаИнформацией + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.ДатаНачала + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Контакт + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.Dimension.Свойство + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляТаблицы + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаНастройкиПараметров + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Dimension.Таблица + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.Resource.Номер + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ВысотаЭлементаФормулировкиВопроса + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КомментарийПриВыгрузкеДанных + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + WebService.RemoteAdministrationOfExchange_2_0_1_6.Operation.GetExchangePlans + + Use + true + + + + InformationRegister.ПодчиненныеПользователи.Dimension.ПодчиненныйПользователь + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Тип + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.РегламентноеЗадание + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.Ответ + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ХранитьВерсии + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.ПодробноеПредставлениеОшибки + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ГлавнаяЗадача + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.ДатаПомещенияВРабочийКаталог + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ТипПриемникаСтрокой + + View + false + + + Edit + false + + + + WebService.RemoteAdministrationOfExchange_2_0_1_6.Operation.StartExchangeExecutionInFirstDataBase + + Use + true + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.РольИсполнителя + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Resource.УникальныйИдентификаторИсточникаСтрокой + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.Dimension.Взаимодействие + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Предмет + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилОчистки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Автор + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Type + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Ref + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Date + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Posted + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Number + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВерсияПлатформыИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КаталогСРезервнымиКопиями + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Dimension.ПодчиненнаяТаблица + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ЭтоУдалениеОбъекта + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.ДоступРазрешен + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВПриемнике + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.АрхивироватьФайл + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПользовательSMTP + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПуть + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.Dimension.ИмяКомпьютера + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Attribute.СвязьСРодителем + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Тема + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.Resource.ИндивидуальнаяНастройка + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыгружатьТолькоРазрешенные + + View + false + + + Edit + false + + + + Catalog.Организации.Attribute.Префикс + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Регион + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.ДатаВерсии + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.Комментарий + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.МногострочноеПолеВвода + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодОповещения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.НажатиеГиперссылки + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Attribute.ОткрытыйОтвет + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.Resource.ПоследнийЗапуск + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ЗаблокированныйРеквизит + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.Resource.ПутьМодуляКриптографии + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Администратор + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИмяТаблицыПриемника + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Расширение + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьСозданиеСвязанныхОбъектов + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.ОткрытыйОтвет + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Важность + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПодписьПриОтветеПересылкеФорматированныйДокумент + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ВыполнятьПоРасписанию + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НепринятыеВложения.Attribute.ИмяВложение + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Отчеты.Attribute.ОтправлятьЕслиПустой + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.СпособУстановкиВремениНапоминания + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Отчеты.Attribute.Отчет + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Входящий + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИспользоватьПредварительныйПросмотр + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Dimension.ТолькоВидДоступа + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.Наценка + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Resource.Доступно + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВестиДополнительныйКонтрольЗаписиВXML + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Resource.Эксклюзивная + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.Анкета + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьДляПолучения + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.Исполнитель + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаПравоЧтения + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.Объект + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВерсияПравилОбмена + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Resource.Представление + + View + false + + + Edit + false + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ИзмененияОбщихДанныхУзлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Индекс + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаПравоДобавления + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодОповещения + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.ДатаОкончания + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ГруппаДоступа + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.КраткоеПредставление + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + Catalog.Календари.Attribute.ПроизводственныйКалендарь + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки + + View + false + + + Edit + false + + + + InformationRegister.НеразделенныеПользователи.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НеразделенныеПользователи.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НеразделенныеПользователи.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НеразделенныеПользователи.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.ЭтоБыстроеСообщение + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.Роль + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаОтложенногоОповещения + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Отчеты.Attribute.Настройки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.FILEКаталогОбменаИнформацией + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.МаксимальныйРазмер + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТипыСсылок.Attribute.ТипТаблицы + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияРасширение + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительАдрес + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Папка + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Изменение + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбрезатьСтрокиСправа + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакции + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Адрес + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.РегламентноеЗадание + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ТипОграниченияКаталогаСРезервнымиКопиями + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.РезультатВыполнения + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.КоличествоЭлементовВТранзакцииЗагрузкиДанных + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Dimension.Объект + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.Attribute.РеквизитДопУпорядочивания + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьLinux + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВремяОжидания + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.СетевойКаталогWindows + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Имя + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники.Attribute.ПредставлениеКонтакта + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ПисьмоВФорматеHTML + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.КодВалюты + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипПриемникаСтрокой + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.Resource.Курс + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ВнешнееЗадание + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Используется + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВариантРасписанияРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.АдресаУведомленияОПрочтении.Attribute.Адрес + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьОтборПоДатеДляВсехОбъектов + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.ВРабочемКаталогеВладельца + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.ЭксклюзивноеВыполнение + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.АдресЭлектроннойПочты + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПолноеИмя + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.РеквизитДопУпорядочивания + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.УчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.Dimension.Пользователь + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВерсияФорматаФайлаНастроекОбменаДанными + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.Attribute.ИдентификаторОбъекта + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.УведомитьОПрочтении + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ЗаполнятьАвтоматически + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ТипРеспондентов + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Отчеты + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Чтение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторыОснований + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Dimension.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагРежимОтладкиОбработчиков + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.ИдентификаторПользователяИБ + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияНомерВерсии + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ПараметрыВыбора + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПравилОбмена + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПользователь + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТипыСсылок + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаОповещения + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Attribute.НомерОтправленного + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ДатаМодификацииФайла + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.ДействиеПриОбмене + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.ИдентификаторКоманды + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ТипыДополнительногоОбъектаАдресации + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПроцентСопоставленияОбъектов + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Тема + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Подтверждено + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ЗагружаетсяИзИнтернета + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.КлючОбъектаМетаданных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Важность + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.СрокПроверки + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.Пометка + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ИмяРеквизита + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПропускатьПриветствие + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.ФорматыОтчетов + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ВариантПравилаЗаполненияРеквизитов + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ЭтоУдалениеОбъекта + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Регион + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Dimension.Задание + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПодписьПриОтветеПересылкеПростойТекст + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Attribute.ИспользоватьФильтрВыборочнойРегистрацииОбъектов + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Dimension.ВидПравил + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.НажатиеГиперссылки + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Тема + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияКод + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ОтветственныйЗаОбработкуПисем + + View + false + + + Edit + false + + + + WebService.RemoteAdministrationOfExchange.Operation.StartExchangeExecutionInSecondDataBase + + Use + true + + + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Resource.ПриПроверкеПраваИзменение + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.Dimension.ВерсияФайла + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.Формулировка + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Контакт + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Наименование + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Dimension.Пользователь + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Period + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Вид + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяПланаОбмена + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.КодУзлаКорреспондента + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаВыгрузкиДанных + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодОтложенногоОповещения + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Длина + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.ПолеИмяФайлаСообщенияОбмена + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.Код + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ТипОграниченияКаталогаСРезервнымиКопиями + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле1 + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.ТипИсточника + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Вид + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.Resource.Значение + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КодТипаИнтерактивногоРезервногоКопирования + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НепосредственноеЧтениеВИБПриемнике + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.Расписание + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.КоличествоЭлементовВТранзакцииВыгрузкиДанных + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПарольАдминистратора + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.ПредставлениеИсточника + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.Attribute.Вес + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.Опрос + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИмяФайла + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Dimension.Узел + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Адрес + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЭтоИнтерактивныйРежим + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.Наименование + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.Attribute.ПредопределеннаяПапка + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMВариантРаботыИнформационнойБазы + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.Недействителен + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипПриемника + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Resource.ПриПроверкеПраваУдаление + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПродолжатьНапоминания + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.Attribute.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + InformationRegister.ИсточникиВнешнихЗадач.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ИсточникиВнешнихЗадач.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ИсточникиВнешнихЗадач.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ИсточникиВнешнихЗадач.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.Комментарий + + View + false + + + Edit + false + + + + WebService.RemoteAdministrationOfExchange.Operation.StartExchangeExecutionInFirstDataBase + + Use + true + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодХраненияРезервныхКопий + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ОтправительПредставление + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПерсональнаяУчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Личная + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.Dimension.Валюта + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.Dimension.Получатель + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Важность + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ТолькоУведомить + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяПользователя + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.Attribute.Пол + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ФайлЗагрузкиРезервнойКопии + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.Attribute.ТипОбъектаПотребителя + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляПоиска + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ТекстПисьма + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Resource.ПриПроверкеПраваДобавление + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.РежимОтладкиАлгоритмов + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ТемаПисьма + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольДляРаспаковкиФайлаОбмена + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Period + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ПояснениеКомментария + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.Недействителен + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодГородаВКоде + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Представление + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СтатусПисьма + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПериодХраненияСообщенийНаСервере + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.УведомитьОПрочтении + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияРазмер + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.Dimension.ЭлементРазделенныхДанных + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакцииПриВыгрузкеДляПлановОбмена + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.Ключ + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Контакт + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.АдресаУведомленияОПрочтении + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + + View + false + + + Edit + false + + + + WebService.RemoteAdministrationOfExchange_2_0_1_6.Operation.TestConnection + + Use + true + + + + InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодАдресногоОбъектаВКоде + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НепринятыеВложения + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Состав + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Resource.Макет + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ВычисляемоеВыражение + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодНаселенногоПунктаВКоде + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.Attribute.КомпоновщикНастроек + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.УдалитьПароль + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ВидПочтовогоАдресаПолучателей + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Персонализирована + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILУчетнаяЗапись + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.РольИсполнителя + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ХранилищеОбработки + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаПравилРегистрацииОбъектов.Attribute.ИмяПланаОбменаДляЗагрузки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Размер + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТипыСсылок.Attribute.Таблица + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.АвторСтрокой + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения.Attribute.СоставДопСведений + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПароль + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Публикация + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Dimension.ТипФормы + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ТипОбъекта + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДописыватьДанныеВПротоколОбмена + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.Год + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Адрес + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Контакт + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовНесопоставленных + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ТипТабличногоВопроса + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.НомерВерсии + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Attribute.ВидДоступаПравоДобавления + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Dimension.ВремяСобытия + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.ИзменениеЗапрещено + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ПредметСтрокой + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.Attribute.РеквизитДопУпорядочивания + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.Resource.Комментарий + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительКонтакт + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработчикиСобытийЧитаемИзФайлаПравилОбмена + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.СписокУчастников + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.ТекстСодержания + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Dimension.Пользователь + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаСтандартногоОбмена + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Dimension.Право + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Свойство + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Attribute.ОшибкаОбработки + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПорядокЗаполнения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.СклоненияПредмета + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.СостояниеБизнесПроцесса + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Текст + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Attribute.ПравилаЗагружены + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.Dimension.ВидПоставляемыхДанных + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + InformationRegister.СообщенияОбменаДанными.Dimension.ИдентификаторСообщения + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Синоним + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.Вопрос + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.СоставТабличногоВопроса + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПассивноеСоединение + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипПриемникаСтрокой + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ТипИсточникаСтрокой + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.УдалениеЗапрещено + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения.Attribute.Ссылка + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ТипыОсновногоОбъектаАдресации + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ИмяРеквизитаОбъектаДокументооборота + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.АдресаУведомленияОПрочтении.Attribute.Представление + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.НомерЯчейки + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.НомерНабора + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.АдресаУведомленияОПрочтении.Attribute.Контакт + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.ПроизводственныйКалендарь + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.Dimension.Объект + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Code + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.ReceivedNo + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.SentNo + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.Ref + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.Description + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.КартинкиПисьмаВФорматеHTML + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Предмет + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Тип + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.Dimension.ОбъектСФайлами + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.СоставТабличногоВопроса.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Состав.Attribute.ВнешнийПользователь + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.Заголовок + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMИмяИнформационнойБазыНаСервере1СПредприятия + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.TabularSection.Состав.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.МожноИзменятьСпособРедактирования + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.Attribute.ПараметрыПрописиНаРусском + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторПриемника + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПостроительОтчета + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле4 + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.РедактируемыйРаздел + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодУлицыВКоде + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьWindows + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.Attribute.ВсеОбъектыАвторизации + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Resource.ВерсияОбъекта + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Attribute.ИспользоватьПраваСсылки + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаОбмена + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПуть + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьОтчеты + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.УстановитьРолиНепосредственно + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ВключатьПодписьДляНовыхСообщений + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ДатаЗавершения + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Кодировка + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.РодительВопрос + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.ДатаГрафика + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.Resource.Курс + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Удаление + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.ОбъектАвторизации + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ТребуетсяКомментарий + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.WSИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Dimension.Пользователь + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КомментарийПриЗагрузкеДанных + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.НеПоказыватьВАрхивеАнкет + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ТипВопроса + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ИДФайлаЭлектронногоПисьма + + View + false + + + Edit + false + + + + Catalog.СтраныМира.Attribute.КодАльфа3 + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилКонвертации + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.Пометка + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.Раздел + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ДополнительныйРеквизит + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Ref + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Started + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.HeadTask + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Completed + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Ref + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Date + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПользователь + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ВариантЗапуска + + View + false + + + Edit + false + + + + DataProcessor.СписокРеспондента.Attribute.Респондент + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПассивноеСоединение + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.Размер + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.КоличествоЭлементовВТранзакции + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипИсточника + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.Отправитель + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.Dimension.Рассылка + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Важность + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.АбонентКонтакт + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольДляСжатияФайлаОбмена + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Dimension.Раздел + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Resource.ДатаПолучения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаЧерезПраваПоЗначениямДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.ИдентификаторПользователяСервиса + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяТипаОбъектаТаблицыИсточника + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Dimension.Код + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Resource.НачалоБлокировки + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяВременногоКаталогаСообщенийОбмена + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.Dimension.ЭлементОбщихДанных + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.КлючСообщенияЖурналаРегистрации + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПорт + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяИнформационнойБазыНаСервере1СПредприятия + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Страна + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ИДФайлаЭлектронногоПисьма + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.СтрокаРасписания + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.Resource.РучноеИзменение + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.ВыполнитьКорректировкуИнформацииСопоставления + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.СписокПолейТаблицы + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Параметры + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Текст + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения.Attribute.СоставДопРеквизитов + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.ИмяМетода + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.Dimension.Валюта + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.Изменение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ТекстHTML + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Dimension.Идентификатор + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Dimension.ИмяМакета + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ОдинКоМногим + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыИсточникаУстановлен + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле3 + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Ответственный + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПолныйСиноним + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияПутьКФайлу + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ХранилищеНастроек + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Dimension.Уровень + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ДанныеУспешноЗагружены + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.ПредставлениеПредмета + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ПринятаКИсполнению + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Attribute.ЧасовойПояс + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Номер + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ЭтоУдалениеОбъекта + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Адрес + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяВременногоФайлаОбработчиковСобытий + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.УзелОбмена + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.НаименованиеЭтойБазы + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Информация + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияАвтор + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Предмет + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSURLВебСервиса + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ИспользуетсяБезОбъектовАдресации + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Dimension.УчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники.Attribute.КакСвязаться + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMИмяСервера1СПредприятия + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.АдресОтвета + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSИспользоватьПередачуБольшогоОбъемаДанных + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.НачальнаяВыгрузкаДанных + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы.Attribute.Ответ + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.Добавление + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Resource.Сокращение + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.Attribute.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаОповещения + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.НаПроверке + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.Dimension.НомерСообщения + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.Resource.Выполнена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПуть + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.СписокПолучателейПисьма + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыполнитьОбменДаннымиВОптимизированномФормате + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Роли + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Роли.Attribute.Роль + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.Роли.Attribute.Роль + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Описание + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Attribute.ТипТаблицы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Контакт + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.Attribute.ОбластьДанных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Number + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.УдалятьПисьмаПослеОтправки + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ИспользоватьПапку + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов + + View + false + + + Edit + false + + + + InformationRegister.СообщенияОбменаДанными.Resource.ИмяФайлаСообщения + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.ТипТаблицы + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Сокращение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейСкрытыхКопий + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.Респондент + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Resource.Ответ + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяФайлаСообщенияОбмена + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ВидКонтактнойИнформации + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Attribute.ГруппаИсполнителейЗадач + + View + false + + + Edit + false + + + + Catalog.СтраныМира.Attribute.НаименованиеПолное + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ДатаИсполнения + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Зашифрован + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Attribute.ВидДоступаПравоИзменения + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.ПредставлениеКонтакта + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMВариантРаботыИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагРежимОтладки + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияДатаСоздания + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ШаблонАнкеты + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.НаправлениеСортировки + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ПериодичностьРасписания + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Пользователь + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.ТипПользователей + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляПоискаТаблицыПриемника + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.Dimension.ГруппаПользователей + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.Предустановленный + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.НомерВходящегоСообщения + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.Resource.ХранимыйФайл + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.Dimension.Владелец + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.ДатаНачалаПоследнегоЗапуска + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВПротоколИнформационныхСообщений + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.СетевойКаталогLinux + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиями.StandardAttribute.ReceivedNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиями.StandardAttribute.SentNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиями.StandardAttribute.Ref + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиями.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиями.StandardAttribute.Description + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиями.StandardAttribute.Code + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыСписка + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодОтложенногоОповещения + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Город + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ПараметрыПрописиНаРусском + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СпособPOP3Аутентификации + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Resource.Запрещено + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.Календарь + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.Использование + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИмяОбъекта + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + diff --git a/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/УдаленныйДоступОбменДаннымиВМоделиСервиса.mdo b/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/УдаленныйДоступОбменДаннымиВМоделиСервиса.mdo new file mode 100644 index 000000000..42cc7170e --- /dev/null +++ b/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/УдаленныйДоступОбменДаннымиВМоделиСервиса.mdo @@ -0,0 +1,8 @@ + + + УдаленныйДоступОбменДаннымиВМоделиСервиса + + ru + Удаленный доступ (Обмен данными в модели сервиса) + + diff --git a/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights b/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights new file mode 100644 index 000000000..daf0fc696 --- /dev/null +++ b/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights @@ -0,0 +1,24469 @@ + + + false + true + false + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ПоказыватьОповещение + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.НаЧтение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.КодПредопределенногоУзла + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Контакт + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ФорматПодписиДляНовыхСообщений + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.Пользователь + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантРасписанияРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.Пользователи + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.Dimension.КаналСообщений + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMПарольПользователя + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ДанныеУспешноЗагружены + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникИндексКартинки + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.StandardAttribute.Code + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.РезультатВыполнения + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.СтрокаРасписания + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ДополнительныйРеквизитТип + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Resource.НаследоватьПраваРодителей + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Адрес + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Дата + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.Dimension.Папка + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.Attribute.КоррСчет + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовНесопоставленных + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ФорматПодписиПриОтветеПересылке + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.Attribute.Ответственный + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.ИмяПоля + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ДатаОтправления + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Подготовлена + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ПолноеНаименование + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.СвязиПараметровВыбора + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.СостояниеЗадания + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.Attribute.НаименованиеПолное + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.НомерПопытки + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.ФорматыОтчетов.Attribute.Отчет + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.ДобавлениеЗапрещено + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Dimension.ГруппаДоступа + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.Автор + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.Attribute.РольИсполнителя + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.Предмет + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ДатаПолучения + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.УникальныйИдентификаторПриемника + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.СодержаниеПредмета + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.УведомитьОДоставке + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораКластера + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Выполнено + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.StandardAttribute.Code + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейКопий + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FILEСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыПриемника + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаОтложенногоОповещения + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пароль + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыИсточника + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Attribute.ОписаниеДатыЗапрета + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ТекстHTML + + View + false + + + Edit + false + + + + InformationRegister.АктивныеПредметыВзаимодействий.Dimension.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.Dimension.КаналСообщений + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.ReceivedNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.SentNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.Ref + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.Description + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.НестандартныеПортыСервера + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.Attribute.ПомещатьВПапку + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMАутентификацияОперационнойСистемы + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.АбонентПредставление + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СпособSMTPАутентификации + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.РегламентноеЗаданиеGUID + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.Attribute.Пользователь + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMАутентификацияОперационнойСистемы + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILУчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.АдресТолькоРоссийский + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаXML + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Resource.СрокНапоминания + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Dimension.Объект + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ДополнительныйРеквизитID + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.СвободныйОпрос + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопСведения + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.Attribute.Описание + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ТипОтвета + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаИнтерактивногоРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.ФорматыОтчетов.Attribute.Формат + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMКаталогИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.Путь + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.Attribute.ДатаРождения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.StandardAttribute.Ref + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПорт + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ПрерыватьПриОшибке + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.Resource.ВерсияПоставляемыхДанных + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.FILEСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ИспользоватьЭлектроннуюПочту + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Автор + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.УчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.УчетнаяЗапись + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.ИнтервалВремениНапоминания + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КоличествоКопийВКаталоге + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ТипЗначенияДоступа + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Dimension.Объект + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Resource.ДатаОкончания + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Точность + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.Resource.ДатаПрочтения + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ИдентификаторЗначенияРеквизита + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Dimension.АдресныйОбъект + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Модификатор + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПарольSMTP + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляТаблицы + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPПорт + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗагружатьДанныеВРежимеОбмена + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.ШаблонИмениФайлаСообщения + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPПароль + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодХраненияРезервныхКопий + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + WebService.MessageExchange_2_0_1_6.Operation.ConnectEndPoint + + Use + true + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILУчетнаяЗапись + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMПарольПользователя + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбъектыПоСсылкеЗагружатьБезПометкиУдаления + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Наименование + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Resource.ДатаЗапрета + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.УникальныйИдентификаторИсточника + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Resource.КоличествоДнейВГрафикеСНачалаГода + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.Вопрос + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.Resource.Использование + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Страна + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.Заключение + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + InformationRegister.НеразделенныеПользователи.Dimension.ИдентификаторПользователяИБ + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.StandardAttribute.Period + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ЭтоДополнительноеСведение + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.СписокПолучателейКопий + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.РегламентноеЗаданиеGUID + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.КодНовогоУзлаВторойБазы + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле3 + + View + false + + + Edit + false + + + + WebService.MessageExchange_2_0_1_6.Operation.SetLeadingEndPoint + + Use + true + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ТипТекста + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.КоличествоПопытокОбработкиСообщения + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Календари.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Resource.ДатаВыпускаВерсии + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Завершен + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяПланаОбмена + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.Attribute.КомпоновщикНастроек + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ТипЗначенияРеквизита + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Валюты.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.СписокИспользуемыхПолей + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяТаблицыПриемника + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.Attribute.Телефоны + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияДатаМодификацииФайла + + View + false + + + Edit + false + + + + Catalog.СтраныМира.Attribute.КодАльфа2 + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Resource.ОтключитьПроверкуПравВедущейТаблицы + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.Dimension.Получатель + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗадаватьВопросПриЗагрузкеДанныхПриОткрытииОбработки + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.Dimension.РегламентноеЗадание + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.Получатель + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПодписьДляНовыхСообщенийПростойТекст + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Данные + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.ЯвляетсяДокументомУдостоверяющимЛичность + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.Dimension.ИмяПодсистемы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительПредставление + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + WebService.MessageExchange_2_0_1_6.Operation.TestConnectionRecipient + + Use + true + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяВременногоФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Dimension.Пользователь + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.Resource.Наименование + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.НаименованиеПолное + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FILEКаталогОбменаИнформацией + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Ответственный + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПодписьДляНовыхСообщенийФорматированныйДокумент + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПомещатьПисьмоВПапкуПисьмаОснования + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSПароль + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.Resource.СОшибками + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.Attribute.Комментарий + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.АгрегироватьСуммуВОтчетах + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.РодительскаяВерсия + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.КлючВарианта + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.Таблица + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.Attribute.ТребуетОткрытогоОтвета + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторИсточника + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.ТипПриемника + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ТипПолучателейРассылки + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.Тип + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.Dimension.Письмо + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КаталогСРезервнымиКопиями + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Подсказка + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПользовательИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение.Attribute.ПолноеИмяОбъектаМетаданных + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяФайлаСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Attribute.ИдентификаторВыгрузки + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.ТипАдресногоЭлемента + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагОшибки + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Resource.Удаление + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.СписокУчастников + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПротоколаОбменаЗагрузка + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.Attribute.ОкончаниеПериодаЗагрузки + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Важность + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле1 + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Тема + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.Вступление + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.ИмяРеквизитаИсточника + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.ДатаРедактирования + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.Dimension.Пользователь + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Важность + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Ответственный + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.НомерЯчейки + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + WebService.MessageExchange.Operation.TestConnectionRecipient + + Use + true + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Resource.СообщениеБлокировки + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.НаименованиеВторойБазы + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + ExchangePlan.ОбменСообщениями.Attribute.Ведущая + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникОбновления + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + InformationRegister.ПодчиненныеПользователи.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПодчиненныеПользователи.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПодчиненныеПользователи.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПодчиненныеПользователи.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Кратность + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.ЧтениеЗапрещено + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Содержание + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Dimension.Физлицо + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьДляОтправки + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Resource.Статус + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.TabularSection.Респонденты.Attribute.Респондент + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия2Разряд + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Формулировка + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.StandardAttribute.Code + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ВключатьТелоИсходногоПисьма + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.РезультатОбновления + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Ответственный + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВыполняемоеДействие + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ТолькоВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВИсточнике + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантПроведенияРезервногоКопирования + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + InformationRegister.ПодчиненныеПользователи.Dimension.Пользователь + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники.Attribute.Контакт + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Идентификатор + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ГруппаИсполнителейЗадач + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяМакетаПравил + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОткрыватьПротоколыОбменаПослеВыполненияОпераций + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ИспользоватьСетевойКаталог + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УникальныйИдентификаторПриемника + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.КодПользователяСервераОбновлений + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле5 + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.КакСвязаться + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Заметки.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ОдинКоМногим + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPПассивноеСоединение + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейПисьма + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.Resource.ЕстьФайлы + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.Resource.Версия + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ТипИсточника + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Resource.ВидДня + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ВидыДоступа + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Архивировать + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяПланаОбменаИзПравил + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Контакт + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Executed + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Description + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.RoutePoint + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.BusinessProcess + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Date + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.StandardAttribute.Number + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.Номер + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле2 + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВидТранспортаСообщенийОбмена + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.ТелоСообщения + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяСервераИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ФайлОбновления + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Dimension.ДействиеПриОбмене + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FILEСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИсточникПравил + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.КодЗадачиПланировщика + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма.Attribute.Адрес + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.Resource.Путь + + View + false + + + Edit + false + + + + WebService.MessageExchange_2_0_1_6.Operation.UpdateConnectionSettings + + Use + true + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторНаСервере + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаПравил + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPСервер + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.ФорматСвойства + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.SMTPАутентификация + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.Attribute.Город + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Resource.КонецБлокировки + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Attribute.Повтор + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КаталогИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.МинимальноеЗначение + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ОставлятьКопииСообщенийНаСервере + + View + false + + + Edit + false + + + + Catalog.Календари.Attribute.ВидКалендаря + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.РежимОбмена + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Автор + + View + false + + + Edit + false + + + + InformationRegister.ПодчиненныеПользователи.Dimension.ГруппаДоступа + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ВыборГруппИЭлементов + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВПротоколСообщенийОбОшибках + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.ИдентификаторПользователяИБ + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.ДатаВыдачи + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.Resource.ХранимыйФайл + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Получатели + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Resource.РаспространяетсяВИерархии + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.Год + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.StandardAttribute.Number + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.РедактированиеТолькоВДиалоге + + View + false + + + Edit + false + + + + InformationRegister.ИсточникиВнешнихЗадач.Resource.УзелИсточник + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.Обязательный + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработкиНастройкиВыгрузки + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.РезультатВыполненияОбмена + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Получатели.Attribute.Исключен + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Dimension.НомерВерсии + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Комментарий + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Описание + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Проверяющий + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.CombiВидТранспортаСообщенийОбмена + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.Resource.Кратность + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ШаблонИмениФайлаСообщения + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Город + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.НомерДискаИТС + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Dimension.ТипВедущейТаблицы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.УдалятьПослеОтправки + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаCOM + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторСообщения + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБ + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.Исполнитель + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPЛогин + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Dimension.УчетнаяЗаписьЭлектроннойПочты + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Dimension.Таблица + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаОбработчиковСобытий + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Dimension.Источник + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоЭлементовВТранзакцииПриВыгрузкеДляПлановОбмена + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.Resource.Кратность + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяСервера1СПредприятия + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.ДатаИзменения + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Получатели.Attribute.Получатель + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.АутентификацияWindowsИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ВнешняяРоль + + View + false + + + Edit + false + + + + WebService.MessageExchange_2_0_1_6.Operation.DeliverMessages + + Use + true + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 + + View + false + + + Edit + false + + + + WebService.MessageExchange.Operation.TestConnectionSender + + Use + true + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.СрокИсполнения + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилВыгрузки + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.ДатаКурса + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.Серия + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Ответственный + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.WSПароль + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипИсточникаСтрокой + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТипИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Профиль + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Курс + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.Удаление + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПользователь + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПоляПоиска + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.ДатаЗавершения + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ОтветственныйЗаВедениеПапок + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Dimension.ТипОбъекта + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.ШаблонИмениФайлаСообщения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.МаксимальноеЗначение + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Предмет + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.ЗапланированныйМоментЗапуска + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Версия + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.ЗапретитьРаботуРегламентныхЗаданий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НеВыводитьНикакихИнформационныхСообщенийПользователю + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.StandardAttribute.Number + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.Параметры + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияТом + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.АльтернативныеНазвания + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ВнутреннийЗаголовок + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ВидОперации + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.Dimension.ПрисоединенныйФайл + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.Дата + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.Встреча.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.Attribute.ТипОбъектаДокументооборота + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаПравоИзменения + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПароль + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ТипТекста + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.Использование + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Пользователи.StandardAttribute.Code + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Кодировка + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ОтветственныйЗаОбработкуПисем + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.Пользователи.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.СкрытыеКопии + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFILE + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьЗаполнениеОбъекта + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсия + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КоличествоОбъектовНаТранзакцию + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаEMAIL + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Представление + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВОкноСообщенийИнформационныхСообщений + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.WSURLВебСервиса + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ЗагрузкаДанныхВыполняетсяЧерезВнешнееСоединение + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле2 + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Важность + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.СохраненныеНастройки + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Наименование + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.Роли + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ДатаВремяОбновления + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДаннымиДляЗагрузки + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.КемВыдан + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Том + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиОтправителя.StandardAttribute.Period + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.АвторСтрокой + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.ДляРабочегоСтола + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.Attribute.ПредставлениеОтбора + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ИсточникиВнешнихЗадач.Dimension.Объект + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаБезГруппЗначенияДоступа + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ПолноеНаименование + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыПриемникаУстановлен + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.ДополнительныйОтчетИлиОбработка + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаВнешнейОбработкиОбработчиковСобытий + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.НомерВходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПродолжатьНапоминания + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Вид + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторСообщения + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.ИспользоватьРегламентноеЗадание + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Attribute.Использование + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ОсновнаяВалюта + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ЗначениеПустойСсылки + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Исполнитель + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.TabularSection.Респонденты + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.СрокИсполнения + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.БезДанных + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.Attribute.НачалоПериодаЗагрузки + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Администратор + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Ответственный + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ЗначениеРеквизитаДокументооборота + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Resource.Наименование + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КоличествоКопийВКаталоге + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаЗачитанные + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НеЗадаватьВопросПриЗагрузкеДанныхПриОткрытииОбработки + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ПарольАрхива + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.TabularSection.Состав + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Адрес + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПортАгентаСервера + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыОбъекта + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Resource.Добавление + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КодТипаРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.АбонентКакСвязаться + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Тема + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗаписыватьРегистрыНаборамиЗаписей + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Автор + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Attribute.ОбъектВыгруженПоСсылке + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Стартован + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров + + View + false + + + Edit + false + + + + WebService.MessageExchange_2_0_1_6.Operation.GetIBParameters + + Use + true + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.УведомитьОДоставке + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ТекстПисьмаВФорматеHTML + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Dimension.ТипОбъекта + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Добавление + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Значение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПассивноеСоединение + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Dimension.ИмяПланаОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПорт + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.СрокДействия + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Resource.ПриПроверкеПраваЧтение + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.Resource.ТребуетсяОтправка + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ВидТранспортаСообщенийОбмена + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMКаталогИнформационнойБазы + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.РедактированиеШаблонаЗавершено + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ОтображатьТелоИсходногоПисьма + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.СинхронизироватьПоИдентификатору + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.Содержание + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВидыДокументовФизическихЛиц.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Представление + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ВключатьПодписьПриОтветеПересылке + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораКластера + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.МестоПроведенияВстречи + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.ИсполняющееФоновоеЗадание + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ИмяРеквизитаОбъектаПотребителя + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Изменять + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ЗадачаИсточник + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ИмяАрхива + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Состояние + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторыОснований + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ВидыДоступа.Attribute.ДоступРазрешен + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.Представление + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ИспользоватьFTPРесурс + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот.StandardAttribute.ReceivedNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот.StandardAttribute.SentNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот.StandardAttribute.Ref + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот.StandardAttribute.Description + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИнформацияОПравилах + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.Resource.Предмет + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.FTPКаталог + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Resource.ДеньВключенВГрафик + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.Заблокировано + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Resource.Вариант + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ДатаЗаема + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.РежимОбновления + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработкиНастройкиЗагрузки + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.Анкета.StandardAttribute.Number + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Dimension.ГруппаДоступа + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Resource.Изменение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Представление + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ДатаПринятияКИсполнению + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.Resource.ПапкаЭлектронногоПисьма + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторОснования + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Dimension.БизнесПроцесс + + View + false + + + Edit + false + + + + WebService.MessageExchange_2_0_1_6.Operation.TestConnectionSender + + Use + true + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMИмяПользователя + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ЗначенияДоступа + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ТипПриемника + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.Контакт + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПроизводственныеКалендари.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.ПометкаУдаления + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.Attribute.Адрес + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.НомерИтерации + + View + false + + + Edit + false + + + + InformationRegister.АктивныеПредметыВзаимодействий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.АктивныеПредметыВзаимодействий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.АктивныеПредметыВзаимодействий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.АктивныеПредметыВзаимодействий.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПорядокКоллекции + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяВременногоКаталогаСообщенийОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.CombiВидТранспортаСообщенийОбмена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FILEКаталогОбменаИнформацией + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.ДатаНачала + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Контакт + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИмяФайлаНастроекОбменаДанными + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.Dimension.Свойство + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СтраныМира.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаНастройкиПараметров + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Dimension.Таблица + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.Resource.Номер + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ВысотаЭлементаФормулировкиВопроса + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КомментарийПриВыгрузкеДанных + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + InformationRegister.ПодчиненныеПользователи.Dimension.ПодчиненныйПользователь + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Тип + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.РегламентноеЗадание + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.Ответ + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ХранитьВерсии + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.ПодробноеПредставлениеОшибки + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ГлавнаяЗадача + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.ДатаПомещенияВРабочийКаталог + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ТипПриемникаСтрокой + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиПисьма + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.РольИсполнителя + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Resource.УникальныйИдентификаторИсточникаСтрокой + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + InformationRegister.ПредметыПапкиВзаимодействий.Dimension.Взаимодействие + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Предмет + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилОчистки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИзменятьВТранзакции + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Автор + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Type + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Ref + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Date + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Posted + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + DocumentJournal.Взаимодействия.StandardAttribute.Number + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВерсияПлатформыИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КаталогСРезервнымиКопиями + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Dimension.ПодчиненнаяТаблица + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ЭтоУдалениеОбъекта + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.ДоступРазрешен + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовВПриемнике + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.АрхивироватьФайл + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПользовательSMTP + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПуть + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.Dimension.ИмяКомпьютера + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Attribute.СвязьСРодителем + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Тема + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.РазделенныеРегламентныеЗадания.Resource.ИндивидуальнаяНастройка + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыгружатьТолькоРазрешенные + + View + false + + + Edit + false + + + + Catalog.Организации.Attribute.Префикс + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Регион + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.ДатаВерсии + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.МногострочноеПолеВвода + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодОповещения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.НажатиеГиперссылки + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Attribute.ОткрытыйОтвет + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.Resource.ПоследнийЗапуск + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ЗаблокированныйРеквизит + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.Resource.ПутьМодуляКриптографии + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Администратор + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИмяТаблицыПриемника + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.КоличествоЭлементовВТранзакции + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИспользоватьРасписаниеДляПроверкиОбновления + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Расширение + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьСозданиеСвязанныхОбъектов + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.ОткрытыйОтвет + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.Attribute.ИспользуютсяДопРеквизиты + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Важность + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПодписьПриОтветеПересылкеФорматированныйДокумент + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ВыполнятьПоРасписанию + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Отчеты.Attribute.ОтправлятьЕслиПустой + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.СпособУстановкиВремениНапоминания + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Отчеты.Attribute.Отчет + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Входящий + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИспользоватьПредварительныйПросмотр + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Dimension.ТолькоВидДоступа + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.Наценка + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Resource.Доступно + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВестиДополнительныйКонтрольЗаписиВXML + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Resource.Эксклюзивная + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Dimension.Анкета + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьДляПолучения + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.Исполнитель + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаПравоЧтения + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЗакладкиВзаимодействий.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.Объект + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ВосстанавливатьИнформационнуюБазу + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВерсияПравилОбмена + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Resource.Представление + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Индекс + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаПравоДобавления + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлуОбновления + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодОповещения + + View + false + + + Edit + false + + + + InformationRegister.СостоянияОбменовДанными.Resource.ДатаОкончания + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ГруппаДоступа + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.КраткоеПредставление + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + Catalog.Календари.Attribute.ПроизводственныйКалендарь + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки + + View + false + + + Edit + false + + + + InformationRegister.НеразделенныеПользователи.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НеразделенныеПользователи.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НеразделенныеПользователи.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НеразделенныеПользователи.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.ЭтоБыстроеСообщение + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВыполнитьПриЗавершенииРаботы + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.УведомленияОПрочтении.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.Ключ + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.Роль + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаОтложенногоОповещения + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Отчеты.Attribute.Настройки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFILE.Attribute.FILEКаталогОбменаИнформацией + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.МаксимальныйРазмер + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТипыСсылок.Attribute.ТипТаблицы + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияРасширение + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительАдрес + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Папка + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Изменение + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбрезатьСтрокиСправа + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакции + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Адрес + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.РегламентноеЗадание + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ТипОграниченияКаталогаСРезервнымиКопиями + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.РезультатВыполнения + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.КоличествоЭлементовВТранзакцииЗагрузкиДанных + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Dimension.Объект + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.Attribute.РеквизитДопУпорядочивания + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьLinux + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВремяОжидания + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.СетевойКаталогWindows + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Имя + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяКаталогаРезервнойКопииИБ + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники.Attribute.ПредставлениеКонтакта + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПодсистем.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ПисьмоВФорматеHTML + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.КодВалюты + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалют.Resource.Курс + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ВнешнееЗадание + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Используется + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВариантРасписанияРезервногоКопирования + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.АдресаУведомленияОПрочтении.Attribute.Адрес + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьОтборПоДатеДляВсехОбъектов + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.ВРабочемКаталогеВладельца + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.ЭксклюзивноеВыполнение + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.АдресЭлектроннойПочты + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПолноеИмя + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.РеквизитДопУпорядочивания + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.УчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.Dimension.Пользователь + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВерсияФорматаФайлаНастроекОбменаДанными + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.Attribute.ИдентификаторОбъекта + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.УведомитьОПрочтении + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ЗаполнятьАвтоматически + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ТипРеспондентов + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.Отчеты + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Чтение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ИдентификаторыОснований + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Dimension.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагРежимОтладкиОбработчиков + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Подпись + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.ИдентификаторПользователяИБ + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияНомерВерсии + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ПараметрыВыбора + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПравилОбмена + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяФайлаОбновления + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПользователь + + View + false + + + Edit + false + + + + WebService.MessageExchange.Operation.UpdateConnectionSettings + + Use + true + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТипыСсылок + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаОповещения + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Attribute.НомерОтправленного + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ДатаМодификацииФайла + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.ДействиеПриОбмене + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.ИдентификаторКоманды + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ТипыДополнительногоОбъектаАдресации + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ПроцентСопоставленияОбъектов + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Тема + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Редактирует + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Подтверждено + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.Удаление + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ЗагружаетсяИзИнтернета + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.КлючОбъектаМетаданных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Важность + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.СрокПроверки + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.Пометка + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Dimension.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ИмяРеквизита + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПортКластераСерверов + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПропускатьПриветствие + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.TabularSection.ФорматыОтчетов + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ВариантПравилаЗаполненияРеквизитов + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Регион + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Dimension.Задание + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПодписьПриОтветеПересылкеПростойТекст + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Attribute.ИспользоватьФильтрВыборочнойРегистрацииОбъектов + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.КодПодразделения + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ПриемникПоле4 + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Предмет + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Dimension.ВидПравил + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.НажатиеГиперссылки + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Тема + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияКод + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ОтветственныйЗаОбработкуПисем + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ТекстХранилище + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Resource.ПриПроверкеПраваИзменение + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.Dimension.ВерсияФайла + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.Формулировка + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиСкрытыхКопий.Attribute.Контакт + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольИнформационнойБазыДляПодключения + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.РазмерФайлаОбновления + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Наименование + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Dimension.Пользователь + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора.StandardAttribute.Period + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Вид + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.РасписаниеПроверкиНаличияОбновления + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяПланаОбмена + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаВыгрузкиДанных + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодОтложенногоОповещения + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.Длина + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.ПолеИмяФайлаСообщенияОбмена + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.Код + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ТипОграниченияКаталогаСРезервнымиКопиями + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле1 + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаНеутвержденныхСвязей.Attribute.ТипИсточника + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Вид + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.Resource.Значение + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.КодТипаИнтерактивногоРезервногоКопирования + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НепосредственноеЧтениеВИБПриемнике + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.Расписание + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ВерсияДляОбновления + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.КоличествоЭлементовВТранзакцииВыгрузкиДанных + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПарольАдминистратора + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Attribute.ПредставлениеИсточника + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.Attribute.Вес + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.Опрос + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИмяФайла + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Dimension.Узел + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиОтвета.Attribute.Адрес + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ЭтоИнтерактивныйРежим + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.Наименование + + View + false + + + Edit + false + + + + Catalog.ПапкиЭлектронныхПисем.Attribute.ПредопределеннаяПапка + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMВариантРаботыИнформационнойБазы + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.Недействителен + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.Attribute.ТипОбъектовАвторизации + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипПриемника + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Resource.ПриПроверкеПраваУдаление + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПродолжатьНапоминания + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.Attribute.ДополнительныйОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + InformationRegister.ИсточникиВнешнихЗадач.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ИсточникиВнешнихЗадач.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ИсточникиВнешнихЗадач.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ИсточникиВнешнихЗадач.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодХраненияРезервныхКопий + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.НаборыЗначенийДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ОтправительПредставление + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПерсональнаяУчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Личная + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Code + + View + false + + + Edit + false + + + + WebService.MessageExchange.Operation.DeliverMessages + + Use + true + + + + InformationRegister.КурсыВалют.Dimension.Валюта + + View + false + + + Edit + false + + + + InformationRegister.ПодпискиПолучателей.Dimension.Получатель + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Важность + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ТолькоУведомить + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПовторныйЗапуск + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяПользователя + + View + false + + + Edit + false + + + + Catalog.ФизическиеЛица.Attribute.Пол + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяИнформационнойБазыНаСервереДляПодключения + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ФайлЗагрузкиРезервнойКопии + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.Attribute.ТипОбъектаПотребителя + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ТекстПисьма + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи + + View + false + + + Edit + false + + + + InformationRegister.ЗависимостиПравДоступа.Resource.ПриПроверкеПраваДобавление + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.РежимОтладкиАлгоритмов + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ТемаПисьма + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольДляРаспаковкиФайлаОбмена + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.EMAILСжиматьФайлИсходящегоСообщения + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Period + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ПояснениеКомментария + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.Недействителен + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.Attribute.Комментарий + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодГородаВКоде + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Представление + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СтатусПисьма + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПериодХраненияСообщенийНаСервере + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.УведомитьОПрочтении + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ЛокальныйОтносительныйКаталог + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияРазмер + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.Dimension.ЭлементРазделенныхДанных + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИспользоватьТранзакцииПриВыгрузкеДляПлановОбмена + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.Ключ + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиКопий.Attribute.Контакт + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.АдресаУведомленияОПрочтении + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ТехническаяИнформацияОбОшибке + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Resource.УдалитьВидДокумента + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют.Attribute.Валюта + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодАдресногоОбъектаВКоде + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Состав + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Resource.Макет + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ВычисляемоеВыражение + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия1Разряд + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодНаселенногоПунктаВКоде + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.Attribute.КомпоновщикНастроек + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.УдалитьПароль + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ВидПочтовогоАдресаПолучателей + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.Персонализирована + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILУчетнаяЗапись + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.AddressingAttribute.РольИсполнителя + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ХранилищеОбработки + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + DataProcessor.ЗагрузкаПравилРегистрацииОбъектов.Attribute.ИмяПланаОбменаДляЗагрузки + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Размер + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТипыСсылок.Attribute.Таблица + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания + + View + false + + + Edit + false + + + + Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.АвторСтрокой + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения.Attribute.СоставДопСведений + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПароль + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Публикация + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Dimension.ТипФормы + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ТипОбъекта + + View + false + + + Edit + false + + + + WebService.MessageExchange.Operation.GetIBParameters + + Use + true + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДописыватьДанныеВПротоколОбмена + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.Год + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ПолучателиПисьма.Attribute.Адрес + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Контакт + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольСервераОбновлений + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ТипТабличногоВопроса + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + WebService.MessageExchange.Operation.ConnectEndPoint + + Use + true + + + + Catalog.ВерсииФайлов.Attribute.НомерВерсии + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Attribute.ВидДоступаПравоДобавления + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Dimension.ВремяСобытия + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.ИзменениеЗапрещено + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ПредметСтрокой + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + Catalog.ВариантыОтветовАнкет.Attribute.РеквизитДопУпорядочивания + + View + false + + + Edit + false + + + + InformationRegister.ПутиМодулейКриптографииСерверовLinux.Resource.Комментарий + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ОтправительКонтакт + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОбработчикиСобытийЧитаемИзФайлаПравилОбмена + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.СписокУчастников + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.ТекстСодержания + + View + false + + + Edit + false + + + + InformationRegister.НапоминанияПользователя.Dimension.Пользователь + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаСтандартногоОбмена + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Dimension.Право + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Свойство + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.НазначенияСертификатовЭЦП.StandardAttribute.Code + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Attribute.ОшибкаОбработки + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПорядокЗаполнения + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Attribute.СклоненияПредмета + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.СостояниеБизнесПроцесса + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Текст + + View + false + + + Edit + false + + + + InformationRegister.ПравилаДляОбменаДанными.Attribute.ПравилаЗагружены + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока + + View + false + + + Edit + false + + + + InformationRegister.ВерсииПоставляемыхДанных.Dimension.ВидПоставляемыхДанных + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Синоним + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.Вопрос + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.СоставТабличногоВопроса + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Описание + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПассивноеСоединение + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипПриемникаСтрокой + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ТипИсточникаСтрокой + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.УдалениеЗапрещено + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения.Attribute.Ссылка + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ТипыОсновногоОбъектаАдресации + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ИмяРеквизитаОбъектаДокументооборота + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.АдресаУведомленияОПрочтении.Attribute.Представление + + View + false + + + Edit + false + + + + Document.Анкета.TabularSection.Состав.Attribute.НомерЯчейки + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Dimension.НомерНабора + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.АдресаУведомленияОПрочтении.Attribute.Контакт + + View + false + + + Edit + false + + + + InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.ПроизводственныйКалендарь + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат + + View + false + + + Edit + false + + + + InformationRegister.ДополнительныеСведения.Dimension.Объект + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.StandardAttribute.Code + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.ReceivedNo + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.SentNo + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.Ref + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.Description + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.КартинкиПисьмаВФорматеHTML + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.Предмет + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Тип + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Представление + + View + false + + + Edit + false + + + + InformationRegister.НаличиеПрисоединенныхФайлов.Dimension.ОбъектСФайлами + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.СоставТабличногоВопроса.Attribute.ЭлементарныйВопрос + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Состав.Attribute.ВнешнийПользователь + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ШаблоныАнкет.Attribute.Заголовок + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMИмяИнформационнойБазыНаСервере1СПредприятия + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + Catalog.ГруппыПользователей.TabularSection.Состав.Attribute.Пользователь + + View + false + + + Edit + false + + + + Catalog.ВидыКонтактнойИнформации.Attribute.МожноИзменятьСпособРедактирования + + View + false + + + Edit + false + + + + Catalog.КлассификаторВалют.Attribute.ПараметрыПрописиНаРусском + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторПриемника + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПостроительОтчета + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле4 + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.РедактируемыйРаздел + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодУлицыВКоде + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.Attribute.ПолныйПутьWindows + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ИндексКартинки + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.Attribute.ВсеОбъектыАвторизации + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + InformationRegister.ВерсииОбъектов.Resource.ВерсияОбъекта + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.Attribute.ИспользоватьПраваСсылки + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВидыДоступа.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа.Attribute.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаОбмена + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.FTPСоединениеПуть + + View + false + + + Edit + false + + + + InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьОтчеты + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.УстановитьРолиНепосредственно + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.StandardAttribute.Period + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ВключатьПодписьДляНовыхСообщений + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Period + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.ДатаЗавершения + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Размер + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ГруппыЗначенийДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Кодировка + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.РодительВопрос + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.ДатаГрафика + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.Resource.Курс + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.ВладелецФайла + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Resource.Удаление + + View + false + + + Edit + false + + + + Catalog.ВнешниеПользователи.Attribute.ОбъектАвторизации + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПароль + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ТребуетсяКомментарий + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.WSИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Dimension.Пользователь + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.КомментарийПриЗагрузкеДанных + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.НуженФайлОбновления + + View + false + + + Edit + false + + + + InformationRegister.ДокументыФизическихЛиц.Dimension.ВидДокумента + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ОптимизированнаяЗаписьОбъектов + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.НеПоказыватьВАрхивеАнкет + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.Attribute.ТипВопроса + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ТомаХраненияФайлов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ИДФайлаЭлектронногоПисьма + + View + false + + + Edit + false + + + + Catalog.СтраныМира.Attribute.КодАльфа3 + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ТаблицаПравилКонвертации + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.РассмотретьПосле + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.Пометка + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.Изменение + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.Автор + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.АдресЭлектроннойПочты + + View + false + + + Edit + false + + + + Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.TabularSection.ПравилаЗаполненияРеквизитов.Attribute.ДополнительныйРеквизит + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПравилаОбработкиЭлектроннойПочты.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.ValueType + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.StandardAttribute.Ref + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Started + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.HeadTask + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Completed + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Ref + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Date + + View + false + + + Edit + false + + + + BusinessProcess.Задание.StandardAttribute.Number + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.КластерТребуетАутентификации + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.Attribute.ПоставляемыйПрофильИзменен + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.StandardAttribute.Period + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПользователь + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ВариантЗапуска + + View + false + + + Edit + false + + + + DataProcessor.СписокРеспондента.Attribute.Респондент + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.Расширение + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПассивноеСоединение + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Resource.Размер + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.КоличествоЭлементовВТранзакции + + View + false + + + Edit + false + + + + InformationRegister.СоответствияОбъектовИнформационныхБаз.Dimension.ТипИсточника + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.Attribute.Отправитель + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.Dimension.Рассылка + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Важность + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.АбонентКонтакт + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ПарольДляСжатияФайлаОбмена + + View + false + + + Edit + false + + + + InformationRegister.ДатыЗапретаИзменения.Dimension.Раздел + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Resource.ДатаПолучения + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + InformationRegister.НаборыЗначенийДоступа.Attribute.ВидДоступаЧерезПраваПоЗначениямДоступа + + View + false + + + Edit + false + + + + Catalog.Пользователи.Attribute.ИдентификаторПользователяСервиса + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ИмяТипаОбъектаТаблицыИсточника + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Dimension.Код + + View + false + + + Edit + false + + + + InformationRegister.БлокировкиСеансовОбластиДанных.Resource.НачалоБлокировки + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Том + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.Attribute.СтатусИзвлеченияТекста + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.Dimension.ЭлементОбщихДанных + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Attribute.КлючСообщенияЖурналаРегистрации + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаFTP.Attribute.FTPСоединениеПорт + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяИнформационнойБазыНаСервере1СПредприятия + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Страна + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ИДФайлаЭлектронногоПисьма + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.СтрокаРасписания + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты.Attribute.Значение + + View + false + + + Edit + false + + + + InformationRegister.СвязиПоставляемыхДанных.Resource.РучноеИзменение + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.ВыполнитьКорректировкуИнформацииСопоставления + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.СписокПолейТаблицы + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.Параметры + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.НаборыЗначенийДоступа + + View + false + + + Edit + false + + + + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.Текст + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ВзаимодействиеОснование + + View + false + + + Edit + false + + + + DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.ОбъектыДляИзменения.Attribute.СоставДопРеквизитов + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.ИмяМетода + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПроверятьНаличиеОбновленияПриЗапуске + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ДатаПодписи + + View + false + + + Edit + false + + + + InformationRegister.КурсыВалютПоКлассификатору.Dimension.Валюта + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.Изменение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.ЕстьВложения + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.ТекстHTML + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Dimension.Идентификатор + + View + false + + + Edit + false + + + + InformationRegister.ПользовательскиеМакетыПечати.Dimension.ИмяМакета + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках + + View + false + + + Edit + false + + + + InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПрефиксИнформационнойБазыИсточникаУстановлен + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле3 + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Изменил + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Файлы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.Ответственный + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры + + View + false + + + Edit + false + + + + Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПолныйСиноним + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияПутьКФайлу + + View + false + + + Edit + false + + + + WebService.MessageExchange.Operation.SetLeadingEndPoint + + Use + true + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ХранилищеНастроек + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Dimension.Уровень + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ДанныеУспешноЗагружены + + View + false + + + Edit + false + + + + Catalog.Заметки.Attribute.ПредставлениеПредмета + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ПринятаКИсполнению + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДанных.Attribute.ЧасовойПояс + + View + false + + + Edit + false + + + + InformationRegister.ДанныеБизнесПроцессов.Resource.Номер + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ЭтоУдалениеОбъекта + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиКопий.Attribute.Адрес + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Сертификат + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяВременногоФайлаОбработчиковСобытий + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.УзелОбмена + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.НаименованиеЭтойБазы + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Информация + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Сертификат + + View + false + + + Edit + false + + + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.СертификатыШифрования.Attribute.Представление + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияАвтор + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Предмет + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSURLВебСервиса + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ПрисоединенныеФайлы.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ВыслатьОтчетНаПочту + + View + false + + + Edit + false + + + + DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.ПарольАрхиваСообщенияОбмена + + View + false + + + Edit + false + + + + Catalog.РолиИсполнителей.Attribute.ИспользуетсяБезОбъектовАдресации + + View + false + + + Edit + false + + + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Dimension.УчетнаяЗапись + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.УстановившийПодпись + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.TabularSection.ЗначенияДоступа.Attribute.ВидДоступа + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.Attribute.Комментарий + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверИсходящейПочтыSMTP + + View + false + + + Edit + false + + + + Document.Встреча.TabularSection.Участники.Attribute.КакСвязаться + + View + false + + + Edit + false + + + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.COMИмяСервера1СПредприятия + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.АдресОтвета + + View + false + + + Edit + false + + + + DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных + + View + false + + + Edit + false + + + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.НачальнаяВыгрузкаДанных + + View + false + + + Edit + false + + + + Catalog.ВопросыШаблонаАнкеты.TabularSection.ПредопределенныеОтветы.Attribute.Ответ + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.Добавление + + View + false + + + Edit + false + + + + InformationRegister.АдресныеСокращения.Resource.Сокращение + + View + false + + + Edit + false + + + + Catalog.ГруппыИсполнителейЗадач.Attribute.ОсновнойОбъектАдресации + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.РабочиеКаталогиФайлов.StandardAttribute.Period + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ЕдиницаИзмеренияПериодаОповещения + + View + false + + + Edit + false + + + + BusinessProcess.Задание.Attribute.НаПроверке + + View + false + + + Edit + false + + + + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных.Dimension.НомерСообщения + + View + false + + + Edit + false + + + + Catalog.ВстречаПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + InformationRegister.СостоянияРассылокОтчетов.Resource.Выполнена + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПуть + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.Attribute.СписокПолучателейПисьма + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыполнитьОбменДаннымиВОптимизированномФормате + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.Зашифрован + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Роли + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.СоздаватьРезервнуюКопию + + View + false + + + Edit + false + + + + Catalog.ГруппыВнешнихПользователей.TabularSection.Роли.Attribute.Роль + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.Роли.Attribute.Роль + + View + false + + + Edit + false + + + + Document.Встреча.Attribute.Описание + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Attribute.ТипТаблицы + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.TabularSection.ПолучателиОтвета.Attribute.Контакт + + View + false + + + Edit + false + + + + Catalog.Файлы.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера + + View + false + + + Edit + false + + + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена + + View + false + + + Edit + false + + + + ExchangePlan.ИзмененияПоставляемыхДанных.Attribute.ОбластьДанных + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоВходящее.StandardAttribute.Number + + View + false + + + Edit + false + + + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.УдалятьПисьмаПослеОтправки + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКЛокальномуФайлу + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ИспользоватьПапку + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ТаблицыРолей.Attribute.ТипТаблицы + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ИсточникДискаИТС + + View + false + + + Edit + false + + + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ФайлЗагрузкиРезервнойКопии + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Resource.Сокращение + + View + false + + + Edit + false + + + + Document.ЭлектронноеПисьмоИсходящее.Attribute.СписокПолучателейСкрытыхКопий + + View + false + + + Edit + false + + + + Document.Анкета.Attribute.Респондент + + View + false + + + Edit + false + + + + InformationRegister.ОтветыНаВопросыАнкет.Resource.Ответ + + View + false + + + Edit + false + + + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.Attribute.ИмяФайлаСообщенияОбмена + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.Добавление + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде + + View + false + + + Edit + false + + + + ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Attribute.ВидКонтактнойИнформации + + View + false + + + Edit + false + + + + InformationRegister.ИсполнителиЗадач.Attribute.ГруппаИсполнителейЗадач + + View + false + + + Edit + false + + + + Catalog.СтраныМира.Attribute.НаименованиеПолное + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.ДатаИсполнения + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СообщенияСистемы.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.Зашифрован + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + + View + false + + + Edit + false + + + + InformationRegister.ТаблицыГруппДоступа.Attribute.ВидДоступаПравоИзменения + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.Участники.Attribute.ПредставлениеКонтакта + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMВариантРаботыИнформационнойБазы + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.ПутьКФайлуОбновления + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ФлагРежимОтладки + + View + false + + + Edit + false + + + + Catalog.Файлы.Attribute.ТекущаяВерсияДатаСоздания + + View + false + + + Edit + false + + + + Document.НазначениеОпросов.Attribute.ШаблонАнкеты + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки.Attribute.НаправлениеСортировки + + View + false + + + Edit + false + + + + Document.ЗапланированноеВзаимодействие.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.Attribute.Рассмотрено + + View + false + + + Edit + false + + + + Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.Attribute.ПодписанЭЦП + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.ДополнительныеРеквизиты + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.ПериодичностьРасписания + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Attribute.Чтение + + View + false + + + Edit + false + + + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Пользователь + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка + + View + false + + + Edit + false + + + + Catalog.ГруппыДоступа.Attribute.ТипПользователей + + View + false + + + Edit + false + + + + Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляПоискаТаблицыПриемника + + View + false + + + Edit + false + + + + InformationRegister.СоставыГруппПользователей.Dimension.ГруппаПользователей + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ПрофилиГруппДоступа.TabularSection.ВидыДоступа.Attribute.Предустановленный + + View + false + + + Edit + false + + + + InformationRegister.ХранимыеФайлыВерсий.Resource.ХранимыйФайл + + View + false + + + Edit + false + + + + InformationRegister.НомераОтсканированныхФайлов.Dimension.Владелец + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.ДатаНачалаПоследнегоЗапуска + + View + false + + + Edit + false + + + + DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВыводВПротоколИнформационныхСообщений + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Поставщик + + View + false + + + Edit + false + + + + DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Конфигурация + + View + false + + + Edit + false + + + + Catalog.РассылкиОтчетов.Attribute.СетевойКаталогLinux + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаСортировки + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиями.StandardAttribute.ReceivedNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиями.StandardAttribute.SentNo + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиями.StandardAttribute.Ref + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиями.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиями.StandardAttribute.Description + + View + false + + + Edit + false + + + + ExchangePlan.ОбменВнешнимиЗаданиями.StandardAttribute.Code + + View + false + + + Edit + false + + + + Task.ЗадачаИсполнителя.Attribute.Автор + + View + false + + + Edit + false + + + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыСписка + + View + false + + + Edit + false + + + + DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодОтложенногоОповещения + + View + false + + + Edit + false + + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Город + + View + false + + + Edit + false + + + + Catalog.Валюты.Attribute.ПараметрыПрописиНаРусском + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена + + View + false + + + Edit + false + + + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СпособPOP3Аутентификации + + View + false + + + Edit + false + + + + InformationRegister.ПраваПоЗначениямДоступа.Resource.Запрещено + + View + false + + + Edit + false + + + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.НомерНабора + + View + false + + + Edit + false + + + + InformationRegister.КалендарныеГрафики.Dimension.Календарь + + View + false + + + Edit + false + + + + InformationRegister.ОчередьЗаданий.Resource.Использование + + View + false + + + Edit + false + + + + Catalog.ВерсииФайлов.Attribute.ФайлХранилище + + View + false + + + Edit + false + + + diff --git a/SSL/src/Roles/УдаленныйДоступОбменСообщениями/УдаленныйДоступОбменСообщениями.mdo b/SSL/src/Roles/УдаленныйДоступОбменСообщениями/УдаленныйДоступОбменСообщениями.mdo new file mode 100644 index 000000000..2354e1bbf --- /dev/null +++ b/SSL/src/Roles/УдаленныйДоступОбменСообщениями/УдаленныйДоступОбменСообщениями.mdo @@ -0,0 +1,8 @@ + + + УдаленныйДоступОбменСообщениями + + ru + Удаленный доступ (Обмен сообщениями) + + diff --git a/SSL/src/Roles/УдалитьПолныеПраваОбластиДанных/Rights.rights b/SSL/src/Roles/УдалитьПолныеПраваОбластиДанных/Rights.rights new file mode 100644 index 000000000..879741858 --- /dev/null +++ b/SSL/src/Roles/УдалитьПолныеПраваОбластиДанных/Rights.rights @@ -0,0 +1,6 @@ + + + false + false + false + diff --git a/SSL/src/Roles/УдалитьПолныеПраваОбластиДанных/УдалитьПолныеПраваОбластиДанных.mdo b/SSL/src/Roles/УдалитьПолныеПраваОбластиДанных/УдалитьПолныеПраваОбластиДанных.mdo new file mode 100644 index 000000000..fcd882882 --- /dev/null +++ b/SSL/src/Roles/УдалитьПолныеПраваОбластиДанных/УдалитьПолныеПраваОбластиДанных.mdo @@ -0,0 +1,8 @@ + + + УдалитьПолныеПраваОбластиДанных + + ru + (Не используется) Полные права области данных + + diff --git a/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights b/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights index a94e5025d..6f334a5b8 100644 --- a/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights +++ b/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights @@ -97,6 +97,17 @@ true + + Catalog.Организации.TabularSection.КонтактнаяИнформация + + View + false + + + Edit + false + + CommonForm.ПраваДоступаУпрощенно @@ -104,6 +115,28 @@ true + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей + + View + false + + + Edit + false + + + + Constant.РежимИспользованияИнформационнойБазы + + Read + true + + + View + true + + InformationRegister.АдресныеСокращения @@ -126,6 +159,17 @@ true + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Город + + View + false + + + Edit + false + + Catalog.Пользователи @@ -148,6 +192,17 @@ true + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера + + View + false + + + Edit + false + + Catalog.ВидыДокументовФизическихЛиц @@ -170,6 +225,17 @@ true + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Представление + + View + false + + + Edit + false + + Catalog.ВидыКонтактнойИнформации @@ -196,6 +262,39 @@ true + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Тип + + View + false + + + Edit + false + + + + Catalog.Организации.Attribute.Префикс + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Регион + + View + false + + + Edit + false + + InformationRegister.СоставыГруппПользователей @@ -203,6 +302,13 @@ true + + InformationRegister.НеразделенныеПользователи + + Read + true + + Report.ПраваДоступа @@ -240,6 +346,17 @@ true + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Вид + + View + false + + + Edit + false + + Catalog.ЗначенияСвойствОбъектов @@ -267,22 +384,91 @@ - Catalog.Организации - - Read - true - - #ПоЗначениям( "Справочник.Организации", "Чтение", "", -"Организации", "Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") - - + Catalog.Организации.StandardAttribute.Predefined View - true + false - InputByString - true + Edit + false + + + + Catalog.Организации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.Организации.StandardAttribute.Code + + View + false + + + Edit + false @@ -292,6 +478,50 @@ true + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Страна + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона + + View + false + + + Edit + false + + + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов + + View + false + + + Edit + false + + ПоЗначениям // ПоЗначениям ( Таблица, Право, Модификатор, В1,П1, В2,Р2, ..., В(n), П(n)). diff --git a/SSL/src/Roles/ЧтениеВариантовОтчетов/Rights.rights b/SSL/src/Roles/ЧтениеВариантовОтчетов/Rights.rights new file mode 100644 index 000000000..51665005f --- /dev/null +++ b/SSL/src/Roles/ЧтениеВариантовОтчетов/Rights.rights @@ -0,0 +1,175 @@ + + + false + true + false + + Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + + Edit + false + + + + Catalog.ВариантыОтчетов + + Read + true + + + View + true + + + InputByString + true + + + + Catalog.ВариантыОтчетов.StandardAttribute.Predefined + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Ref + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.DeletionMark + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.IsFolder + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Owner + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Parent + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Description + + Edit + false + + + + Catalog.ВариантыОтчетов.StandardAttribute.Code + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.КлючВарианта + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Подсистемы + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Описание + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Администратор + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + + Edit + false + + + diff --git a/SSL/src/Roles/ЧтениеВариантовОтчетов/ЧтениеВариантовОтчетов.mdo b/SSL/src/Roles/ЧтениеВариантовОтчетов/ЧтениеВариантовОтчетов.mdo new file mode 100644 index 000000000..acf1bee24 --- /dev/null +++ b/SSL/src/Roles/ЧтениеВариантовОтчетов/ЧтениеВариантовОтчетов.mdo @@ -0,0 +1,8 @@ + + + ЧтениеВариантовОтчетов + + ru + Чтение вариантов отчетов + + diff --git a/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights b/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights index 8ca944d71..058e97c51 100644 --- a/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights +++ b/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5570,7 +5570,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9724,7 +9724,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10527,7 +10527,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -12866,7 +12866,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16796,7 +16796,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false diff --git a/SSL/src/Roles/ЧтениеЗаданий/Rights.rights b/SSL/src/Roles/ЧтениеЗаданий/Rights.rights index 4323752f4..091fd656b 100644 --- a/SSL/src/Roles/ЧтениеЗаданий/Rights.rights +++ b/SSL/src/Roles/ЧтениеЗаданий/Rights.rights @@ -32,17 +32,6 @@ true - - Report.СправкаОбИсполнительскойДисциплине - - Use - true - - - View - true - - SessionParameter.ТекущийПользователь diff --git a/SSL/src/Roles/ЧтениеЗадач/Rights.rights b/SSL/src/Roles/ЧтениеЗадач/Rights.rights index 2d0b3fa5d..794f2ee44 100644 --- a/SSL/src/Roles/ЧтениеЗадач/Rights.rights +++ b/SSL/src/Roles/ЧтениеЗадач/Rights.rights @@ -60,6 +60,10 @@ Read true + + View + true + Catalog.РолиИсполнителей diff --git a/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights b/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights index e401fd3da..62b8d0ca1 100644 --- a/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights +++ b/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5425,7 +5425,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9530,7 +9530,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10317,7 +10317,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -12640,7 +12640,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16508,7 +16508,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false diff --git a/SSL/src/Roles/ЧтениеПерсональныхДанныхФизическихЛиц/Rights.rights b/SSL/src/Roles/ЧтениеПерсональныхДанныхФизическихЛиц/Rights.rights index 26faf92cd..7846ec122 100644 --- a/SSL/src/Roles/ЧтениеПерсональныхДанныхФизическихЛиц/Rights.rights +++ b/SSL/src/Roles/ЧтениеПерсональныхДанныхФизическихЛиц/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5535,7 +5535,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9677,7 +9677,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10480,7 +10480,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -12819,7 +12819,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16734,7 +16734,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false diff --git a/SSL/src/Roles/ЧтениеФизическихЛиц/Rights.rights b/SSL/src/Roles/ЧтениеФизическихЛиц/Rights.rights index 710025869..ebb24e3bd 100644 --- a/SSL/src/Roles/ЧтениеФизическихЛиц/Rights.rights +++ b/SSL/src/Roles/ЧтениеФизическихЛиц/Rights.rights @@ -378,7 +378,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.Сообщение + DataProcessor.БлокировкаРаботыПользователей.Attribute.СообщениеДляПользователей View false @@ -5553,7 +5553,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.ОкончаниеДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.ОкончаниеДействияБлокировки View false @@ -9711,7 +9711,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.КодРазрешения + DataProcessor.БлокировкаРаботыПользователей.Attribute.КодДляРазблокировки View false @@ -10514,7 +10514,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.ИмяРаздела + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела View false @@ -12857,7 +12857,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.НачалоДействияБлокировки + DataProcessor.БлокировкаРаботыПользователей.Attribute.НачалоДействияБлокировки View false @@ -16784,7 +16784,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.Attribute.БлокировкаУстановкиСоединенийВключена + DataProcessor.БлокировкаРаботыПользователей.Attribute.ВременноЗапретитьРаботуПользователей View false diff --git a/SSL/src/ScheduledJobs/ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo b/SSL/src/ScheduledJobs/ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo index feb9d6969..e9d4d2b29 100644 --- a/SSL/src/ScheduledJobs/ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo +++ b/SSL/src/ScheduledJobs/ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo @@ -8,7 +8,6 @@ Задание предназначено для выполнения обмена данными по расписанию CommonModule.ОбменДаннымиСервер.ВыполнитьОбменДаннымиПоРегламентномуЗаданию Выполнение обмена данными - true 3 10 diff --git a/SSL/src/ScheduledJobs/ЗагрузкаКурсовВалют/ЗагрузкаКурсовВалют.mdo b/SSL/src/ScheduledJobs/ЗагрузкаКурсовВалют/ЗагрузкаКурсовВалют.mdo index a1097f6ef..0d69153ad 100644 --- a/SSL/src/ScheduledJobs/ЗагрузкаКурсовВалют/ЗагрузкаКурсовВалют.mdo +++ b/SSL/src/ScheduledJobs/ЗагрузкаКурсовВалют/ЗагрузкаКурсовВалют.mdo @@ -5,7 +5,7 @@ ru Загрузка курсов валют - CommonModule.РаботаСКурсамиВалютСобытия.ЗагрузитьАктуальныйКурс + CommonModule.РаботаСКурсамиВалют.ЗагрузитьАктуальныйКурс Загрузка курсов валют true true diff --git a/SSL/src/ScheduledJobs/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo b/SSL/src/ScheduledJobs/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo index a7aead7de..0a74483f4 100644 --- a/SSL/src/ScheduledJobs/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo +++ b/SSL/src/ScheduledJobs/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo @@ -5,7 +5,7 @@ ru Контроль журнала регистрации - CommonModule.КонтрольЖурналаРегистрации.ОбработкаРегламентногоЗадания_КонтрольОшибокВЖурналеРегистрации + CommonModule.КонтрольЖурналаРегистрацииСлужебный.ОбработкаРегламентногоЗадания_КонтрольОшибокВЖурналеРегистрации Контроль журнала регистрации true true diff --git a/SSL/src/ScheduledJobs/КонтрольОбновленияРазделенныхПоставляемыхДанных/Schedule.schedule b/SSL/src/ScheduledJobs/КонтрольОбновленияРазделенныхПоставляемыхДанных/Schedule.schedule new file mode 100644 index 000000000..e3c3893ce --- /dev/null +++ b/SSL/src/ScheduledJobs/КонтрольОбновленияРазделенныхПоставляемыхДанных/Schedule.schedule @@ -0,0 +1,22 @@ + + + Mon + Tue + Wed + Thu + Fri + Sat + Sun + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + diff --git a/SSL/src/ScheduledJobs/КонтрольОбновленияРазделенныхПоставляемыхДанных/КонтрольОбновленияРазделенныхПоставляемыхДанных.mdo b/SSL/src/ScheduledJobs/КонтрольОбновленияРазделенныхПоставляемыхДанных/КонтрольОбновленияРазделенныхПоставляемыхДанных.mdo new file mode 100644 index 000000000..069ee4fb6 --- /dev/null +++ b/SSL/src/ScheduledJobs/КонтрольОбновленияРазделенныхПоставляемыхДанных/КонтрольОбновленияРазделенныхПоставляемыхДанных.mdo @@ -0,0 +1,15 @@ + + + КонтрольОбновленияРазделенныхПоставляемыхДанных + + ru + Контроль обновления разделенных поставляемых данных + + CommonModule.ПоставляемыеДанные.КонтрольОбновленияРазделенныхПоставляемыхДанных + Контроль обновления разделенных поставляемых данных + 0 + true + true + 3 + 10 + diff --git a/SSL/src/ScheduledJobs/ОбновлениеОбластейДанных/Schedule.schedule b/SSL/src/ScheduledJobs/ОбновлениеОбластейДанных/Schedule.schedule new file mode 100644 index 000000000..e3c3893ce --- /dev/null +++ b/SSL/src/ScheduledJobs/ОбновлениеОбластейДанных/Schedule.schedule @@ -0,0 +1,22 @@ + + + Mon + Tue + Wed + Thu + Fri + Sat + Sun + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + diff --git a/SSL/src/ScheduledJobs/ОбновлениеОбластейДанных/ОбновлениеОбластейДанных.mdo b/SSL/src/ScheduledJobs/ОбновлениеОбластейДанных/ОбновлениеОбластейДанных.mdo new file mode 100644 index 000000000..e9b087726 --- /dev/null +++ b/SSL/src/ScheduledJobs/ОбновлениеОбластейДанных/ОбновлениеОбластейДанных.mdo @@ -0,0 +1,15 @@ + + + ОбновлениеОбластейДанных + + ru + Обновление областей данных + + CommonModule.ОбновлениеИнформационнойБазыВМоделиСервиса.ОбновлениеОбластейДанных + Обновление областей данных + 0 + true + true + 3 + 10 + diff --git a/SSL/src/ScheduledJobs/ОбновлениеОбщихПоставляемыхДанных/Schedule.schedule b/SSL/src/ScheduledJobs/ОбновлениеОбщихПоставляемыхДанных/Schedule.schedule new file mode 100644 index 000000000..41f11237a --- /dev/null +++ b/SSL/src/ScheduledJobs/ОбновлениеОбщихПоставляемыхДанных/Schedule.schedule @@ -0,0 +1,22 @@ + + + Mon + Tue + Wed + Thu + Fri + Sat + Sun + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + diff --git a/SSL/src/ScheduledJobs/ОбновлениеОбщихПоставляемыхДанных/ОбновлениеОбщихПоставляемыхДанных.mdo b/SSL/src/ScheduledJobs/ОбновлениеОбщихПоставляемыхДанных/ОбновлениеОбщихПоставляемыхДанных.mdo new file mode 100644 index 000000000..1e5eb3cfb --- /dev/null +++ b/SSL/src/ScheduledJobs/ОбновлениеОбщихПоставляемыхДанных/ОбновлениеОбщихПоставляемыхДанных.mdo @@ -0,0 +1,15 @@ + + + ОбновлениеОбщихПоставляемыхДанных + + ru + Обновление общих поставляемых данных + + CommonModule.ПоставляемыеДанные.ОбновлениеОбщихПоставляемыхДанных + Обновление общих поставляемых данных + 0 + true + true + 3 + 10 + diff --git a/SSL/src/ScheduledJobs/ОбслуживаниеОбластейДанных/Schedule.schedule b/SSL/src/ScheduledJobs/ОбслуживаниеОбластейДанных/Schedule.schedule new file mode 100644 index 000000000..e3c3893ce --- /dev/null +++ b/SSL/src/ScheduledJobs/ОбслуживаниеОбластейДанных/Schedule.schedule @@ -0,0 +1,22 @@ + + + Mon + Tue + Wed + Thu + Fri + Sat + Sun + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + diff --git a/SSL/src/ScheduledJobs/ОбслуживаниеОбластейДанных/ОбслуживаниеОбластейДанных.mdo b/SSL/src/ScheduledJobs/ОбслуживаниеОбластейДанных/ОбслуживаниеОбластейДанных.mdo new file mode 100644 index 000000000..7d0a52797 --- /dev/null +++ b/SSL/src/ScheduledJobs/ОбслуживаниеОбластейДанных/ОбслуживаниеОбластейДанных.mdo @@ -0,0 +1,15 @@ + + + ОбслуживаниеОбластейДанных + + ru + Обслуживание областей данных + + CommonModule.РаботаВМоделиСервиса.ОбслуживаниеОбластейДанных + Обслуживание областей данных + 1 + true + true + 3 + 10 + diff --git a/SSL/src/ScheduledJobs/ОтправкаИПолучениеСообщенийСистемы/Schedule.schedule b/SSL/src/ScheduledJobs/ОтправкаИПолучениеСообщенийСистемы/Schedule.schedule new file mode 100644 index 000000000..e3c3893ce --- /dev/null +++ b/SSL/src/ScheduledJobs/ОтправкаИПолучениеСообщенийСистемы/Schedule.schedule @@ -0,0 +1,22 @@ + + + Mon + Tue + Wed + Thu + Fri + Sat + Sun + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + diff --git a/SSL/src/ScheduledJobs/ОтправкаИПолучениеСообщенийСистемы/ОтправкаИПолучениеСообщенийСистемы.mdo b/SSL/src/ScheduledJobs/ОтправкаИПолучениеСообщенийСистемы/ОтправкаИПолучениеСообщенийСистемы.mdo new file mode 100644 index 000000000..bd02f0847 --- /dev/null +++ b/SSL/src/ScheduledJobs/ОтправкаИПолучениеСообщенийСистемы/ОтправкаИПолучениеСообщенийСистемы.mdo @@ -0,0 +1,13 @@ + + + ОтправкаИПолучениеСообщенийСистемы + + ru + Отправка и получение сообщений системы + + CommonModule.ОбменСообщениямиВнутренний.ОтправитьИПолучитьСообщенияПоРегламентномуЗаданию + 1 + true + 3 + 10 + diff --git a/SSL/src/ScheduledJobs/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения.mdo b/SSL/src/ScheduledJobs/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения.mdo index 8b1ff6a68..84e91d45d 100644 --- a/SSL/src/ScheduledJobs/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения.mdo +++ b/SSL/src/ScheduledJobs/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения/ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения.mdo @@ -5,7 +5,7 @@ ru Пересчет текущих значений относительных дат запрета изменения - CommonModule.ДатыЗапретаИзмененияВызовСервера.ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения + CommonModule.ДатыЗапретаИзмененияСлужебный.ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения Пересчет текущих значений относительных дат запрета изменения true true diff --git a/SSL/src/ScheduledJobs/ПланированиеОбработкиЗаданий/Schedule.schedule b/SSL/src/ScheduledJobs/ПланированиеОбработкиЗаданий/Schedule.schedule new file mode 100644 index 000000000..e3c3893ce --- /dev/null +++ b/SSL/src/ScheduledJobs/ПланированиеОбработкиЗаданий/Schedule.schedule @@ -0,0 +1,22 @@ + + + Mon + Tue + Wed + Thu + Fri + Sat + Sun + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + diff --git a/SSL/src/ScheduledJobs/ПланированиеОбработкиЗаданий/ПланированиеОбработкиЗаданий.mdo b/SSL/src/ScheduledJobs/ПланированиеОбработкиЗаданий/ПланированиеОбработкиЗаданий.mdo new file mode 100644 index 000000000..3ed5e72f7 --- /dev/null +++ b/SSL/src/ScheduledJobs/ПланированиеОбработкиЗаданий/ПланированиеОбработкиЗаданий.mdo @@ -0,0 +1,13 @@ + + + ПланированиеОбработкиЗаданий + + ru + Планирование обработки заданий + + CommonModule.ОчередьЗаданий.ПланированиеОбработкиЗаданий + Планирование обработки заданий + true + 3 + 10 + diff --git a/SSL/src/ScheduledJobs/РассылкаОтчетов/Schedule.schedule b/SSL/src/ScheduledJobs/РассылкаОтчетов/Schedule.schedule new file mode 100644 index 000000000..541280214 --- /dev/null +++ b/SSL/src/ScheduledJobs/РассылкаОтчетов/Schedule.schedule @@ -0,0 +1,22 @@ + + + Mon + Tue + Wed + Thu + Fri + Sat + Sun + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + diff --git a/SSL/src/ScheduledJobs/РассылкаОтчетов/РассылкаОтчетов.mdo b/SSL/src/ScheduledJobs/РассылкаОтчетов/РассылкаОтчетов.mdo new file mode 100644 index 000000000..7ea043cfb --- /dev/null +++ b/SSL/src/ScheduledJobs/РассылкаОтчетов/РассылкаОтчетов.mdo @@ -0,0 +1,10 @@ + + + РассылкаОтчетов + + ru + Рассылка отчетов + + CommonModule.РассылкаОтчетов.ВыполнитьРассылкуПоРасписанию + Рассылка отчетов + diff --git a/SSL/src/ScheduledJobs/ЭкспортОценкиПроизводительности/ЭкспортОценкиПроизводительности.mdo b/SSL/src/ScheduledJobs/ЭкспортОценкиПроизводительности/ЭкспортОценкиПроизводительности.mdo new file mode 100644 index 000000000..91c9f018f --- /dev/null +++ b/SSL/src/ScheduledJobs/ЭкспортОценкиПроизводительности/ЭкспортОценкиПроизводительности.mdo @@ -0,0 +1,11 @@ + + + ЭкспортОценкиПроизводительности + + ru + Экспорт оценки производительности + + CommonModule.ОценкаПроизводительностиВызовСервераПолныеПрава.ЭкспортОценкиПроизводительности + 27a985e0-e657-4eb3-b18f-6b75f72324ed + true + diff --git a/SSL/src/SessionParameters/ОбластьДанныхЗначение/ОбластьДанныхЗначение.mdo b/SSL/src/SessionParameters/ОбластьДанныхЗначение/ОбластьДанныхЗначение.mdo new file mode 100644 index 000000000..67beb7dca --- /dev/null +++ b/SSL/src/SessionParameters/ОбластьДанныхЗначение/ОбластьДанныхЗначение.mdo @@ -0,0 +1,16 @@ + + + ОбластьДанныхЗначение + + ru + Область данных значение + + ОбластьДанных Значение + + Number + + 7 + true + + + diff --git a/SSL/src/SessionParameters/ОбластьДанныхИспользование/ОбластьДанныхИспользование.mdo b/SSL/src/SessionParameters/ОбластьДанныхИспользование/ОбластьДанныхИспользование.mdo new file mode 100644 index 000000000..51dd668b5 --- /dev/null +++ b/SSL/src/SessionParameters/ОбластьДанныхИспользование/ОбластьДанныхИспользование.mdo @@ -0,0 +1,12 @@ + + + ОбластьДанныхИспользование + + ru + Область данных использование + + ОбластьДанных Использование + + Boolean + + diff --git a/SSL/src/SessionParameters/ОграничиватьДоступПоВидуОрганизации/ОграничиватьДоступПоВидуОрганизации.mdo b/SSL/src/SessionParameters/ОграничиватьДоступПоВидуОрганизации/ОграничиватьДоступПоВидуОрганизации.mdo index c16042190..2cedf7ca2 100644 --- a/SSL/src/SessionParameters/ОграничиватьДоступПоВидуОрганизации/ОграничиватьДоступПоВидуОрганизации.mdo +++ b/SSL/src/SessionParameters/ОграничиватьДоступПоВидуОрганизации/ОграничиватьДоступПоВидуОрганизации.mdo @@ -3,7 +3,7 @@ ОграничиватьДоступПоВидуОрганизации ru - Демо: Ограничивать доступ по виду организации + Ограничивать доступ по виду организации String diff --git a/SSL/src/SessionParameters/ОграничиватьДоступПоВидуПапкиФайлов/ОграничиватьДоступПоВидуПапкиФайлов.mdo b/SSL/src/SessionParameters/ОграничиватьДоступПоВидуПапкиФайлов/ОграничиватьДоступПоВидуПапкиФайлов.mdo new file mode 100644 index 000000000..d6cab0d91 --- /dev/null +++ b/SSL/src/SessionParameters/ОграничиватьДоступПоВидуПапкиФайлов/ОграничиватьДоступПоВидуПапкиФайлов.mdo @@ -0,0 +1,15 @@ + + + ОграничиватьДоступПоВидуПапкиФайлов + + ru + Ограничивать доступ по виду папки файлов + + Параметр создан при внедрении подсистемы Управление доступом для работы шаблонов ограничения доступа с видом доступа ПапкиФайлов + + String + + 50 + + + diff --git a/SSL/src/SessionParameters/ТекущийЗамерВремени/ТекущийЗамерВремени.mdo b/SSL/src/SessionParameters/ТекущийЗамерВремени/ТекущийЗамерВремени.mdo deleted file mode 100644 index 8b2dffccf..000000000 --- a/SSL/src/SessionParameters/ТекущийЗамерВремени/ТекущийЗамерВремени.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - ТекущийЗамерВремени - - ru - Текущий замер времени - - - ValueStorage - - diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form index 7208a1474..d890023ee 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form @@ -360,10 +360,6 @@ Выбрать 6 - - <key>ru</key> - <value>Выбрать</value> - true true @@ -380,7 +376,7 @@ Left - Form.Command.Загрузить + Form.Command.Выбрать PictureAndText true true @@ -760,16 +756,12 @@ - Загрузить + Выбрать <key>ru</key> - <value>Загрузить</value> + <value>Выбрать</value> 1 - - ru - Загрузить - true @@ -778,7 +770,7 @@ - ЗагрузитьВыполнить + Выбрать Auto diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl index facd59744..ca8ce8178 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl @@ -1,20 +1,5 @@ -&НаКлиенте -Процедура ЗагрузитьВыполнить() - - Если Элементы.СписокВариантовОтчета.ТекущаяСтрока <> Неопределено Тогда - - КлючТекущегоВарианта = Элементы.СписокВариантовОтчета.ТекущиеДанные.КлючВариантаОтчета; - СписокВыбора = Новый СписокЗначений; - ВыборНастроек = Новый ВыборНастроек(КлючТекущегоВарианта); - Закрыть(ВыборНастроек); - - Иначе - - Закрыть(); - - КонецЕсли; - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -24,13 +9,13 @@ КонецЕсли; КлючОбъекта = Параметры.КлючОбъекта; - КлючТекущихНастроек = Параметры.КлючТекущихНастроек; + КлючТекущихНастроек = Параметры.КлючТекущихНастроек; СтандартныеНастройки = Параметры.СтандартныеНастройки; ТекущийПользователь = Параметры.ТекущийПользователь; ПоказыватьТолькоИзбранные = Параметры.ПоказыватьТолькоИзбранные; Если НЕ ЗначениеЗаполнено(ТекущийПользователь) тогда - ТекущийПользователь = ОбщегоНазначения.ТекущийПользователь(); + ТекущийПользователь = Пользователи.ТекущийПользователь(); Параметры.ТекущийПользователь = ТекущийПользователь; КонецЕсли; @@ -43,6 +28,25 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокВариантовОтчета + +&НаКлиенте +Процедура СписокВариантовОтчетаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + ВыбратьИЗакрытьФорму(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Выбрать(Команда) + ВыбратьИЗакрытьФорму(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервере Процедура ЗаполнитьСписокВариантовОтчета(КлючВарианта = Неопределено) @@ -85,33 +89,61 @@ СтрокаСписка.Описание = Выборка.Описание; КонецЦикла; - СтрокаВнешнийОтчет = "ВнешнийОтчет."; - ДлинаСтрокиВнешнийОтчет = СтрДлина(СтрокаВнешнийОтчет); - Если Лев(КлючОбъекта, ДлинаСтрокиВнешнийОтчет) = СтрокаВнешнийОтчет Тогда - Попытка - ВнешнийОтчет = ВнешниеОтчеты.Создать(Сред(КлючОбъекта, ДлинаСтрокиВнешнийОтчет + 1)); - Для Каждого ВариантНастроекКД Из ВнешнийОтчет.СхемаКомпоновкиДанных.ВариантыНастроек Цикл - Если ВариантыОтчета.Найти(ВариантНастроекКД.Имя, "КлючВариантаОтчета") = Неопределено Тогда - СтрокаСписка = ВариантыОтчета.Добавить(); - СтрокаСписка.Наименование = ВариантНастроекКД.Представление; - СтрокаСписка.КлючВариантаОтчета = ВариантНастроекКД.Имя; - СтрокаСписка.Ссылка = Неопределено; - СтрокаСписка.Автор = Неопределено; - СтрокаСписка.АвторПредставление = ""; - СтрокаСписка.Описание = ""; - КонецЕсли; - КонецЦикла; - Исключение - КонецПопытки; - КонецЕсли; + ДобавитьВариантыВнешнегоОтчета(КлючОбъекта, ВариантыОтчета); ЗначениеВРеквизитФормы(ВариантыОтчета, "СписокВариантовОтчета"); КонецПроцедуры -&НаКлиенте -Процедура СписокВариантовОтчетаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ЗагрузитьВыполнить(); +&НаСервере +Процедура ДобавитьВариантыВнешнегоОтчета(КлючОбъекта, ВариантыОтчета) + СтрокаВнешнийОтчет = "ВнешнийОтчет."; + ДлинаСтрокиВнешнийОтчет = СтрДлина(СтрокаВнешнийОтчет); + Если Лев(КлючОбъекта, ДлинаСтрокиВнешнийОтчет) <> СтрокаВнешнийОтчет Тогда + Возврат; + КонецЕсли; + + Попытка + ВнешнийОтчет = ВнешниеОтчеты.Создать(Сред(КлючОбъекта, ДлинаСтрокиВнешнийОтчет + 1)); + Исключение + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Варианты отчетов. Подключение внешнего отчета'"), + УровеньЖурналаРегистрации.Ошибка, + , + , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка подключения внешнего отчета %1:'"), + КлючОбъекта + ) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + Возврат; + КонецПопытки; + + СхемаКД = ВнешнийОтчет.СхемаКомпоновкиДанных; + Если ТипЗнч(СхемаКД) <> Тип("СхемаКомпоновкиДанных") Тогда + Возврат; + КонецЕсли; + + Для Каждого ВариантНастроекКД Из СхемаКД.ВариантыНастроек Цикл + Если ВариантыОтчета.Найти(ВариантНастроекКД.Имя, "КлючВариантаОтчета") = Неопределено Тогда + СтрокаСписка = ВариантыОтчета.Добавить(); + СтрокаСписка.Наименование = ВариантНастроекКД.Представление; + СтрокаСписка.КлючВариантаОтчета = ВариантНастроекКД.Имя; + СтрокаСписка.Ссылка = Неопределено; + СтрокаСписка.Автор = Неопределено; + СтрокаСписка.АвторПредставление = ""; + СтрокаСписка.Описание = ""; + КонецЕсли; + КонецЦикла; КонецПроцедуры +&НаКлиенте +Процедура ВыбратьИЗакрытьФорму() + ТекущийВариант = Элементы.СписокВариантовОтчета.ТекущиеДанные; + Если ТекущийВариант <> Неопределено Тогда + Закрыть(Новый ВыборНастроек(ТекущийВариант.КлючВариантаОтчета)); + Иначе + Закрыть(); + КонецЕсли; +КонецПроцедуры diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form index 3df0c0983..39bce0333 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form @@ -27,7 +27,7 @@ СоздатьНовыйВариантОтчетаРасширеннаяПодсказка - 76 + 80 Label true true @@ -81,7 +81,7 @@ СправкаРасширеннаяПодсказка - 79 + 83 Label true true @@ -113,7 +113,7 @@ true ПанельСправкиРасширеннаяПодсказка - 78 + 82 Label true true @@ -141,7 +141,7 @@ ГруппаРасширеннаяПодсказка - 75 + 79 Label true true @@ -195,7 +195,7 @@ ВариантыВариантРасширеннаяПодсказка - 92 + 96 Label true true @@ -236,7 +236,7 @@ ВариантыАвторРасширеннаяПодсказка - 94 + 98 Label true true @@ -279,7 +279,7 @@ ВариантыОтчетаНайтиРасширеннаяПодсказка - 80 + 84 Label true true @@ -305,7 +305,7 @@ ВариантыОтчетаОтменитьПоискРасширеннаяПодсказка - 81 + 85 Label true true @@ -329,14 +329,14 @@ OnActivateRow - СписокНастроекПриАктивизацииСтроки + ВариантыПриАктивизацииСтроки ВариантыСтрокаПоиска - 83 + 87 ВариантыСтрокаПоискаРасширеннаяПодсказка - 85 + 89 Label true true @@ -346,7 +346,7 @@ ВариантыСтрокаПоискаКонтекстноеМеню - 84 + 88 true Варианты @@ -356,10 +356,10 @@ ВариантыСостояниеПросмотра - 86 + 90 ВариантыСостояниеПросмотраРасширеннаяПодсказка - 88 + 92 Label true true @@ -369,7 +369,7 @@ ВариантыСостояниеПросмотраКонтекстноеМеню - 87 + 91 true ViewStatusAddition @@ -380,10 +380,10 @@ ВариантыУправлениеПоиском - 89 + 93 ВариантыУправлениеПоискомРасширеннаяПодсказка - 91 + 95 Label true true @@ -393,7 +393,7 @@ ВариантыУправлениеПоискомКонтекстноеМеню - 90 + 94 true SearchControlAddition @@ -404,7 +404,7 @@ ВариантыРасширеннаяПодсказка - 82 + 86 Label true true @@ -460,7 +460,7 @@ КартинкаИнфоРасширеннаяПодсказка - 105 + 109 Label true true @@ -497,7 +497,7 @@ None ВариантыОтчетаОписаниеРасширеннаяПодсказка - 106 + 110 Label true true @@ -537,7 +537,7 @@ ГруппаОписаниеРасширеннаяПодсказка - 104 + 108 Label true true @@ -569,7 +569,7 @@ СтраницаВыбораВариантаРасширеннаяПодсказка - 74 + 78 Label true true @@ -599,7 +599,7 @@ Справка1РасширеннаяПодсказка - 110 + 114 Label true true @@ -630,7 +630,7 @@ ГруппаСправкаРасширеннаяПодсказка - 109 + 113 Label true true @@ -656,7 +656,7 @@ ВариантНаименованиеРасширеннаяПодсказка - 111 + 115 Label true true @@ -696,7 +696,7 @@ ВариантАвторРасширеннаяПодсказка - 113 + 117 Label true true @@ -738,7 +738,7 @@ Top ВариантОписаниеРасширеннаяПодсказка - 115 + 119 Label true true @@ -767,91 +767,20 @@ Normal - - ГруппаПользователи - 48 - - НастроитьБыстрыйДоступ - 44 - - <key>ru</key> - <value>Быстрый доступ:</value> - - true - true - - true - - - НастроитьБыстрыйДоступРасширеннаяПодсказка - 118 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастроитьБыстрыйДоступ - Normal - Auto - true - true - UserCmds - Auto - - - ТекстБыстрогоДоступа - 52 - - <key>ru</key> - <value>Текст быстрого доступа</value> - - true - true - - true - - - ТекстБыстрогоДоступаРасширеннаяПодсказка - 119 - Label - true - true - - Left - - - - ТекстБыстрогоДоступаКонтекстноеМеню - 53 - true - - Label - true - true - true - - Left - - + + БыстрыйДоступ + 70 true true true - - <key>ru</key> - <value>Группа пользователи</value> - - - ru - Группа пользователи - + + БыстрыйДоступ + - ГруппаПользователиРасширеннаяПодсказка - 117 + БыстрыйДоступРасширеннаяПодсказка + 121 Label true true @@ -859,100 +788,40 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + + БыстрыйДоступКонтекстноеМеню + 71 + true + + LabelField + Enter + true + Left + true + + + Click + БыстрыйДоступНажатие + + true + true + true - - ГруппаПодсистемы - 51 - - НастроитьПодсистемы - 45 - - <key>ru</key> - <value>Разделы:</value> - - true - true - - true - - - НастроитьПодсистемыРасширеннаяПодсказка - 121 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастроитьПодсистемы - Normal - Auto - true - true - UserCmds - Auto - - - ТекстРазделов - 49 - - <key>ru</key> - <value>Текст разделов</value> - - true - true - - true - - - ТекстРазделовРасширеннаяПодсказка - 122 - Label - true - true - - Left - - - - ТекстРазделовКонтекстноеМеню - 50 - true - - Label - true - true - true - - Left - - + + Разделы + 72 true true true - - <key>ru</key> - <value>Группа подсистемы</value> - - - ru - Группа подсистемы - + + Разделы + - ГруппаПодсистемыРасширеннаяПодсказка - 120 + РазделыРасширеннаяПодсказка + 123 Label true true @@ -960,13 +829,24 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + + РазделыКонтекстноеМеню + 73 + true + + LabelField + Enter + true + Left + true + + + Click + РазделыНажатие + + true + true + true true @@ -984,7 +864,7 @@ СтраницаПараметровЗаписиВариантаРасширеннаяПодсказка - 108 + 112 Label true true @@ -1013,7 +893,7 @@ СтраницыРасширеннаяПодсказка - 73 + 77 Label true true @@ -1041,7 +921,7 @@ ФормаНазадРасширеннаяПодсказка - 70 + 74 Label true true @@ -1067,7 +947,7 @@ ФормаДалееРасширеннаяПодсказка - 71 + 75 Label true true @@ -1097,7 +977,7 @@ ФормаГотовоРасширеннаяПодсказка - 72 + 76 Label true true @@ -1673,28 +1553,42 @@ true - - НастроитьБыстрыйДоступ + + БыстрыйДоступ <key>ru</key> - <value>Настроить быстрый доступ</value> + <value>Быстрый доступ</value> - 3 - - ru - Настроить быстрый доступ - - + 5 + + String + + + true - - - - НастроитьБыстрыйДоступ - - - Auto - Auto - + + + true + + + + Разделы + + <key>ru</key> + <value>Разделы</value> + + 8 + + String + + + + true + + + true + + Готово @@ -1761,28 +1655,6 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>НастроитьПодсистемы</name> - <title> - <key>ru</key> - <value>Разделы:</value> - - 7 - - ru - Настройка разделов - - - true - - - - НастроитьПодсистемы - - - Auto - Auto - КлючОбъекта diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl index a9af37156..2e13d0836 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl @@ -1,7 +1,5 @@ - -//////////////////////////////////////////////////////////////////////////////// -// События формы //////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -13,17 +11,17 @@ // Определяет возможность редактирования чужих вариантов // и возможность изменения настроек видимости варианта - ПравоМенятьЧужиеВарианты = РольДоступна("ПолныеПрава") ИЛИ РольДоступна("ДобавлениеИзменениеВариантовОтчетов"); + ПравоМенятьЧужиеВарианты = Пользователи.РолиДоступны("ДобавлениеИзменениеВариантовОтчетов"); УстановитьПривилегированныйРежим(Истина); Если НЕ ПравоМенятьЧужиеВарианты Тогда + Элементы.БыстрыйДоступ.Доступность = Ложь; Элементы.ВариантАвтор.Доступность = Ложь; - Элементы.ГруппаПользователи.Доступность = Ложь; КонецЕсли; - ИсходныйКлючОбъекта = Параметры.КлючОбъекта; + ИсходныйКлючОбъекта = Параметры.КлючОбъекта; ИсходныйКлючВарианта = Параметры.КлючТекущихНастроек; - ТекущийПользователь = ОбщегоНазначения.ТекущийПользователь(); + ТекущийПользователь = Пользователи.ТекущийПользователь(); Запрос = Новый Запрос; Запрос.Текст = @@ -118,8 +116,118 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Контекстные вызовы сервера +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура СоздатьНовыйВариантОтчетаПриИзменении(Элемент) + ВидимостьДоступность(ЭтаФорма, "СоздатьНовыйВариантОтчета"); +КонецПроцедуры + +&НаКлиенте +Процедура БыстрыйДоступНажатие(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + ИсключенияБыстрогоДоступа = Новый СписокЗначений; + Для Каждого СтрокаТаблицы Из ВариантИсключенияБыстрогоДоступа Цикл + ИсключенияБыстрогоДоступа.Добавить(СтрокаТаблицы.Пользователь); + КонецЦикла; + ПараметрыФормы = Новый Структура("БыстрыйДоступ, ИсключенияБыстрогоДоступа", ВариантБыстрыйДоступ, ИсключенияБыстрогоДоступа); + + Структура = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.НастройкаБыстрогоДоступа", ПараметрыФормы, ЭтаФорма); + Если Структура = Неопределено тогда + Возврат; + КонецЕсли; + + ВариантБыстрыйДоступ = Структура.БыстрыйДоступ; + + ВариантИсключенияБыстрогоДоступа.Очистить(); + Для Каждого ЭлементСписка Из Структура.ИсключенияБыстрогоДоступа Цикл + ВариантИсключенияБыстрогоДоступа.Добавить().Пользователь = ЭлементСписка.Значение; + КонецЦикла; + + ВидимостьДоступность(ЭтаФорма, "БыстрыйДоступ"); +КонецПроцедуры + +&НаКлиенте +Процедура РазделыНажатие(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + ПараметрыФормы = Новый Структура("АдресДереваПодсистем, Подсистемы, НовыйЭлементСправочника"); + ПараметрыФормы.Подсистемы = ВариантПодсистемы; + ПараметрыФормы.НовыйЭлементСправочника = (СоздатьНовыйВариантОтчета = 1); + + ПодготовитьПараметрыНастройкиПодсистем(ПараметрыФормы); + + Результат = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.НастройкаПодсистем", ПараметрыФормы, ЭтаФорма); + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ВариантПодсистемы.Очистить(); + Для Каждого СтрокаТаблицы Из Результат.СписокПодсистем Цикл + ЗаполнитьЗначенияСвойств(ВариантПодсистемы.Добавить(), СтрокаТаблицы); + КонецЦикла; + + ЗафиксироватьРезультатНастройкиПодсистем(Результат); + + ВидимостьДоступность(ЭтаФорма, "Подсистемы"); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Варианты + +&НаКлиенте +Процедура ВариантыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + ПодготовитьПараметрыЗаписиВарианта(ЭтаФорма); +КонецПроцедуры + +&НаКлиенте +Процедура ВариантыПриАктивизацииСтроки(Элемент) + ВидимостьДоступность(ЭтаФорма, "Варианты"); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Далее(Команда) + ПодготовитьПараметрыЗаписиВарианта(ЭтаФорма); +КонецПроцедуры + +&НаКлиенте +Процедура Назад(Команда) + Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВыбораВарианта; + ВидимостьДоступность(ЭтаФорма, "ТекущаяСтраница"); +КонецПроцедуры + +&НаКлиенте +Процедура Готово(Команда) + Если НЕ Элементы.ФормаГотово.Доступность Тогда + Возврат; + КонецЕсли; + + Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВыбораВарианта Тогда + Если НЕ ПодготовитьПараметрыЗаписиВарианта(ЭтаФорма) Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + Если ВариантНаименование = "" тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не задано наименование.'"), , "ВариантНаименование"); + Возврат; + КонецЕсли; + + КлючСохраненногоВарианта = СохранитьВариант(СоздатьНовыйВариантОтчета = 1); + Оповестить("Запись_ХранилищеВариантовОтчетов", Новый Структура, ЭтаФорма); + Закрыть(Новый ВыборНастроек(КлючСохраненногоВарианта)); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Сервер &НаСервере Процедура ЗаполнитьПодсистемы() @@ -241,8 +349,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Вызовы клиента и сервера -//////////////////////////////////////////////////////////////////////////////// +// Сервер + Клиент &НаКлиентеНаСервереБезКонтекста Процедура ВидимостьДоступность(ЭтаФорма, Изменения = "") @@ -306,11 +413,11 @@ КонецЕсли; Если Изменения = "" ИЛИ Изменения = "БыстрыйДоступ" Тогда - Элементы.ТекстБыстрогоДоступа.Заголовок = ПредставлениеНастроекБыстрогоДоступа(ЭтаФорма); + ЭтаФорма.БыстрыйДоступ = ПредставлениеНастроекБыстрогоДоступа(ЭтаФорма); КонецЕсли; Если Изменения = "" ИЛИ Изменения = "Подсистемы" Тогда - Элементы.ТекстРазделов.Заголовок = ПредставлениеРазделов(ЭтаФорма); + ЭтаФорма.Разделы = ПредставлениеРазделов(ЭтаФорма); КонецЕсли; КонецПроцедуры @@ -372,17 +479,20 @@ ВариантИсключенияБыстрогоДоступа = ЭтаФорма.ВариантИсключенияБыстрогоДоступа; Результат = ""; - Если ВариантИсключенияБыстрогоДоступа.Количество() > 0 Тогда - Для Каждого СтрокаТаблицы Из ВариантИсключенияБыстрогоДоступа Цикл + Для Каждого СтрокаТаблицы Из ВариантИсключенияБыстрогоДоступа Цикл + ПредставлениеСтроки = СокрЛП(Строка(СтрокаТаблицы.Пользователь)); + Если ПредставлениеСтроки <> "" Тогда Если Результат = "" Тогда - Результат = ?(ВариантБыстрыйДоступ, НСтр("ru = 'все кроме:'") +" ", ""); - Результат = Результат + СтрокаТаблицы.Пользователь + Результат = ?(ВариантБыстрыйДоступ, НСтр("ru = 'Все кроме:'") +" ", ""); + Результат = Результат + ПредставлениеСтроки; Иначе - Результат = Результат +", "+ СтрокаТаблицы.Пользователь + Результат = Результат +", "+ ПредставлениеСтроки; КонецЕсли; - КонецЦикла; - Иначе - Результат = ?(ВариантБыстрыйДоступ, НСтр("ru = 'все'"), НСтр("ru = 'пользователи не выбраны'")); + КонецЕсли; + КонецЦикла; + + Если Результат = "" Тогда + Результат = ?(ВариантБыстрыйДоступ, НСтр("ru = 'Все'"), НСтр("ru = 'Пользователи не выбраны'")); КонецЕсли; Возврат Результат; @@ -393,127 +503,19 @@ ВариантПодсистемы = ЭтаФорма.ВариантПодсистемы; Результат = ""; - Если ВариантПодсистемы.Количество() > 0 Тогда - Для Каждого СтрокаТаблицы Из ВариантПодсистемы Цикл - Результат = Результат + СтрокаТаблицы.Название + ", "; - КонецЦикла; - Результат = Лев(Результат, СтрДлина(Результат)-2); + Для Каждого СтрокаТаблицы Из ВариантПодсистемы Цикл + ПредставлениеСтроки = СокрЛП(СтрокаТаблицы.Название); + Если ПредставлениеСтроки <> "" Тогда + Результат = Результат + ПредставлениеСтроки + ", "; + КонецЕсли; + КонецЦикла; + + Если Результат = "" Тогда + Результат = НСтр("ru = 'Разделы не выбраны'"); Иначе - Результат = НСтр("ru = 'разделы не выбраны'"); + Результат = Лев(Результат, СтрДлина(Результат)-2); КонецЕсли; Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вызовы клиента -//////////////////////////////////////////////////////////////////////////////// - -&НаКлиенте -Процедура СохранитьВыполнить() - - Если НЕ Элементы.ФормаГотово.Доступность Тогда - Возврат; - КонецЕсли; - - Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВыбораВарианта Тогда - Если НЕ ПодготовитьПараметрыЗаписиВарианта(ЭтаФорма) Тогда - Возврат; - КонецЕсли; - КонецЕсли; - - Если ВариантНаименование = "" тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не задано наименование.'"), , "ВариантНаименование"); - Возврат; - КонецЕсли; - - КлючСохраненногоВарианта = СохранитьВариант(СоздатьНовыйВариантОтчета = 1); - Оповестить("Запись_ХранилищеВариантовОтчетов", Новый Структура, ЭтаФорма); - Закрыть(Новый ВыборНастроек(КлючСохраненногоВарианта)); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// События элементов управления формы -//////////////////////////////////////////////////////////////////////////////// - -&НаКлиенте -Процедура СписокНастроекПриАктивизацииСтроки(Элемент) - ВидимостьДоступность(ЭтаФорма, "Варианты"); -КонецПроцедуры - -&НаКлиенте -Процедура Далее(Команда) - ПодготовитьПараметрыЗаписиВарианта(ЭтаФорма); -КонецПроцедуры - -&НаКлиенте -Процедура Назад(Команда) - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВыбораВарианта; - ВидимостьДоступность(ЭтаФорма, "ТекущаяСтраница"); -КонецПроцедуры - -&НаКлиенте -Процедура Готово(Команда) - СохранитьВыполнить(); -КонецПроцедуры - -&НаКлиенте -Процедура СоздатьНовыйВариантОтчетаПриИзменении(Элемент) - ВидимостьДоступность(ЭтаФорма, "СоздатьНовыйВариантОтчета"); -КонецПроцедуры - -&НаКлиенте -Процедура НастроитьБыстрыйДоступ(Команда) - - ИсключенияБыстрогоДоступа = Новый СписокЗначений; - Для Каждого СтрокаТаблицы Из ВариантИсключенияБыстрогоДоступа Цикл - ИсключенияБыстрогоДоступа.Добавить(СтрокаТаблицы.Пользователь); - КонецЦикла; - ПараметрыФормы = Новый Структура("БыстрыйДоступ, ИсключенияБыстрогоДоступа", ВариантБыстрыйДоступ, ИсключенияБыстрогоДоступа); - - Структура = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.НастройкаБыстрогоДоступа", ПараметрыФормы, ЭтаФорма); - Если Структура = Неопределено тогда - Возврат; - КонецЕсли; - - ВариантБыстрыйДоступ = Структура.БыстрыйДоступ; - - ВариантИсключенияБыстрогоДоступа.Очистить(); - Для Каждого ЭлементСписка Из Структура.ИсключенияБыстрогоДоступа Цикл - ВариантИсключенияБыстрогоДоступа.Добавить().Пользователь = ЭлементСписка.Значение; - КонецЦикла; - - ВидимостьДоступность(ЭтаФорма, "БыстрыйДоступ"); -КонецПроцедуры - -&НаКлиенте -Процедура НастроитьПодсистемы(Команда) - - ПараметрыФормы = Новый Структура("АдресДереваПодсистем, Подсистемы, НовыйЭлементСправочника"); - ПараметрыФормы.Подсистемы = ВариантПодсистемы; - ПараметрыФормы.НовыйЭлементСправочника = (СоздатьНовыйВариантОтчета = 1); - - ПодготовитьПараметрыНастройкиПодсистем(ПараметрыФормы); - - Результат = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.НастройкаПодсистем", ПараметрыФормы, ЭтаФорма); - - Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - - ВариантПодсистемы.Очистить(); - Для Каждого СтрокаТаблицы Из Результат.СписокПодсистем Цикл - ЗаполнитьЗначенияСвойств(ВариантПодсистемы.Добавить(), СтрокаТаблицы); - КонецЦикла; - - ЗафиксироватьРезультатНастройкиПодсистем(Результат); - - ВидимостьДоступность(ЭтаФорма, "Подсистемы"); -КонецПроцедуры - -&НаКлиенте -Процедура ВариантыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ПодготовитьПараметрыЗаписиВарианта(ЭтаФорма); -КонецПроцедуры - diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl index 8ca28f3f7..eec35d798 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl @@ -1,71 +1,220 @@ //////////////////////////////////////////////////////////////////////////////// -// Программный интерфейс +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Удаляет настройку из хранилища. +// +// Параметры: +// КлючОбъекта - (...) Ключ объекта настройки. +// |- (Неопределено) - Удаляются настройки всех отчетов. +// |- (Строка) - Полное имя отчета с точкой. +// КлючНастроек - (...) Ключ удаляемых настроек. +// |- (Неопределено) - Удаляются все варианты отчета. +// |- (Строка) - Ключ варианта отчета. +// Пользователь - (...) Пользователь, настройки которого удаляются. +// |- (Неопределено) - Удаляются настройки всех пользователей +// |- (Строка) - Имя пользователя ИБ +// |- (УникальныйИдентификатор) - Идентификатор пользователя ИБ +// |- (ПользовательИнформационнойБазы) - Пользователь ИБ +// |- (СправочникСсылка.Пользователи) - Пользователь // +// Подробнее - см. СтандартноеХранилищеНастроекМенеджер.Удалить() +// +Процедура Удалить(КлючОбъекта, КлючНастроек, Пользователь) Экспорт + + ВариантыОтчетов.ПравоИзмененияВариантов(КлючОбъекта, Истина); + + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | Варианты.Ссылка + |ИЗ + | Справочник.ВариантыОтчетов КАК Варианты + |ГДЕ + | Варианты.КлючОбъекта = &КлючОбъекта + | И Варианты.Администратор = &Администратор + | И Варианты.Администратор.ИдентификаторПользователяИБ = &GUID + | И Варианты.КлючВарианта = &КлючВарианта + | И Варианты.ПометкаУдаления = ЛОЖЬ + | И Варианты.ТипВариантаОтчета <> &ТипПредопределенный + | И Варианты.ТипВариантаОтчета <> &ТипОтчет"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТипПредопределенный", Перечисления.ТипыВариантовОтчетов.Предопределенный); + Запрос.УстановитьПараметр("ТипОтчет", Перечисления.ТипыВариантовОтчетов.Отчет); + + Если КлючОбъекта = Неопределено Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Варианты.КлючОбъекта = &КлючОбъекта", "ИСТИНА"); + Иначе + Запрос.УстановитьПараметр("КлючОбъекта", КлючОбъекта); + КонецЕсли; + + Если КлючНастроек = Неопределено Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Варианты.КлючВарианта = &КлючВарианта", ""); + Иначе + Запрос.УстановитьПараметр("КлючВарианта", КлючНастроек); + КонецЕсли; + + Если Пользователь = Неопределено Тогда + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Варианты.Администратор = &Администратор", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Варианты.Администратор.ИдентификаторПользователяИБ = &GUID", ""); + + ИначеЕсли ТипЗнч(Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда + + Запрос.УстановитьПараметр("Администратор", Пользователь); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Варианты.Администратор.ИдентификаторПользователяИБ = &GUID", ""); + + Иначе + + Если ТипЗнч(Пользователь) = Тип("УникальныйИдентификатор") Тогда + ИдентификаторПользователя = Пользователь; + Иначе + Если ТипЗнч(Пользователь) = Тип("Строка") Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь); + Если ПользовательИБ = Неопределено Тогда + Возврат; + КонецЕсли; + ИначеЕсли ТипЗнч(Пользователь) = Тип("ПользовательИнформационнойБазы") Тогда + ПользовательИБ = Пользователь; + Иначе + Возврат; + КонецЕсли; + ИдентификаторПользователя = ПользовательИБ.УникальныйИдентификатор; + КонецЕсли; + + Запрос.УстановитьПараметр("GUID", ИдентификаторПользователя); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Варианты.Администратор = &Администратор", ""); + + КонецЕсли; + + Запрос.Текст = ТекстЗапроса; + + УстановитьПривилегированныйРежим(Истина); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ВариантОбъект.УстановитьПометкуУдаления(Истина); + КонецЦикла; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры // Получает список настроек из хранилища. Значениями элементов списка являются ключи настроек. // // Параметры: -// КлючОбъекта - (Строка) Полное имя отчета (с точкой). Подробнее см. в Настройки, -// автоматически сохраняемые в системном хранилище. -// ИмяПользователя - (Строка) Имя пользователя, настройки которого получаются. -// Добавлено для совместимости с методами стандартного хранилища. -// Не обязательный. +// КлючОбъекта - (Строка) Полное имя отчета с точкой. +// Пользователь - (...) Пользователь, настройки которого получаются. Необязательный параметр. +// |- (Неопределено) - Получаются настройки текущего пользователя +// |- (Строка) - Имя пользователя ИБ +// |- (УникальныйИдентификатор) - Идентификатор пользователя ИБ +// |- (ПользовательИнформационнойБазы) - Пользователь ИБ +// |- (СправочникСсылка.Пользователи) - Пользователь +// +// Отличия от механизма платформы: +// Вместо права "АдминистрированиеДанных" проверяются права доступа к отчету. // // Возвращаемое значение: // (СписокЗначений) - список вариантов отчета // |- Значение - (Строка) Ключ варианта. // |- Представление - (Строка) Представление варианта. // -Функция ПолучитьСписок(КлючОбъекта, ИмяПользователя = Неопределено) Экспорт +Функция ПолучитьСписок(КлючОбъекта, Пользователь = Неопределено) Экспорт Результат = Новый СписокЗначений; - МетаданныеОтчета = Метаданные.Отчеты.Найти(СтрЗаменить(КлючОбъекта, "Отчет.", "")); - Если МетаданныеОтчета = Неопределено ИЛИ НЕ ПравоДоступа("Использование", МетаданныеОтчета) Тогда - Возврат Результат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); + ВариантыОтчетов.ПравоИзмененияВариантов(КлючОбъекта, Истина); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ВариантыОтчетов.КлючВарианта, - | ВариантыОтчетов.Наименование + | Варианты.КлючВарианта, + | Варианты.Представление |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | Справочник.ВариантыОтчетов КАК Варианты |ГДЕ - | ВариантыОтчетов.КлючОбъекта = &КлючОбъекта - | И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ - | И ВариантыОтчетов.ТипВариантаОтчета <> &ТипПредопределенный - | И ВариантыОтчетов.ТипВариантаОтчета <> &ТипОтчет"; + | Варианты.КлючОбъекта = &КлючОбъекта + | И Варианты.Администратор = &Администратор + | И Варианты.Администратор.ИдентификаторПользователяИБ = &GUID + | И Варианты.ПометкаУдаления = ЛОЖЬ + | И Варианты.ТипВариантаОтчета <> &ТипПредопределенный + | И Варианты.ТипВариантаОтчета <> &ТипОтчет"; Запрос.УстановитьПараметр("КлючОбъекта", КлючОбъекта); - Запрос.Параметры.Вставить("ТипПредопределенный", Перечисления.ТипыВариантовОтчетов.Предопределенный); - Запрос.Параметры.Вставить("ТипОтчет", Перечисления.ТипыВариантовОтчетов.Отчет); + Запрос.УстановитьПараметр("ТипПредопределенный", Перечисления.ТипыВариантовОтчетов.Предопределенный); + Запрос.УстановитьПараметр("ТипОтчет", Перечисления.ТипыВариантовОтчетов.Отчет); + + ТекущийПользователь = Пользователи.ТекущийПользователь(); + + Если Пользователь = Неопределено Тогда + + Запрос.УстановитьПараметр("Администратор", ТекущийПользователь); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Варианты.Администратор.ИдентификаторПользователяИБ = &GUID", ""); + + ИначеЕсли ТипЗнч(Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда + + Запрос.УстановитьПараметр("Администратор", Пользователь); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Варианты.Администратор.ИдентификаторПользователяИБ = &GUID", ""); + + Иначе + + Если ТипЗнч(Пользователь) = Тип("УникальныйИдентификатор") Тогда + ИдентификаторПользователя = Пользователь; + Иначе + Если ТипЗнч(Пользователь) = Тип("Строка") Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь); + Если ПользовательИБ = Неопределено Тогда + Возврат Результат; + КонецЕсли; + ИначеЕсли ТипЗнч(Пользователь) = Тип("ПользовательИнформационнойБазы") Тогда + ПользовательИБ = Пользователь; + Иначе + Возврат Результат; + КонецЕсли; + ИдентификаторПользователя = ПользовательИБ.УникальныйИдентификатор; + КонецЕсли; + + Запрос.УстановитьПараметр("GUID", ИдентификаторПользователя); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Варианты.Администратор = &Администратор", ""); + + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); ТаблицаВариантов = Запрос.Выполнить().Выгрузить(); Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл - Результат.Добавить(СтрокаТаблицы.КлючВарианта, СтрокаТаблицы.Наименование); + Результат.Добавить(СтрокаТаблицы.КлючВарианта, СтрокаТаблицы.Представление); КонецЦикла; + УстановитьПривилегированныйРежим(Ложь); + Возврат Результат; КонецФункции //////////////////////////////////////////////////////////////////////////////// -// События -// +// ОБРАБОТЧИКИ СОБЫТИЙ +// Обработчик чтения настроек варианта отчета +// +// Параметры: +// КлючОбъекта - (Строка) Полное имя отчета с точкой +// КлючНастроек - (Строка) Ключ варианта отчета +// Настройки - (*) Настройки варианта отчета +// ОписаниеНастроек - (ОписаниеНастроек) +// Пользователь - (Строка) Имя пользователя ИБ +// Не используется, так как подсистема "Варианты отчетов" не разделяет варианты по авторам. +// Уникальность хранения и выборки гарантируется уникальностью пар ключей отчетов и вариантов. +// Процедура ОбработкаЗагрузки(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, Пользователь) - ТекстЗапроса = "ВЫБРАТЬ - | ВариантыОтчетов.Наименование, - | ВариантыОтчетов.ХранилищеЗначений - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - |ГДЕ - | ВариантыОтчетов.КлючОбъекта = &КлючОбъекта - | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; - - Запрос = Новый Запрос(ТекстЗапроса); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВариантыОтчетов.Наименование, + | ВариантыОтчетов.ХранилищеЗначений + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.КлючОбъекта = &КлючОбъекта + | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; Запрос.УстановитьПараметр("КлючОбъекта", КлючОбъекта); Запрос.УстановитьПараметр("КлючВарианта", КлючНастроек); @@ -77,89 +226,133 @@ Настройки = Выборка.ХранилищеЗначений.Получить(); КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + КонецПроцедуры +// Обработчик записи настроек варианта отчета +// +// Параметры: +// КлючОбъекта - (Строка) Полное имя отчета с точкой +// КлючНастроек - (Строка) Ключ варианта отчета +// Настройки - (*) Настройки варианта отчета +// ОписаниеНастроек - (ОписаниеНастроек, Неопределено) +// Пользователь - (Строка, Неопределено) Имя пользователя ИБ +// Не используется, так как подсистема "Варианты отчетов" не разделяет варианты по авторам. +// Уникальность хранения и выборки гарантируется уникальностью пар ключей отчетов и вариантов. +// Процедура ОбработкаСохранения(КлючОбъекта, КлючНастроек, Настройка, ОписаниеНастроек, Пользователь) - ТекстЗапроса = "ВЫБРАТЬ - | ВариантыОтчетов.Ссылка - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - |ГДЕ - | ВариантыОтчетов.КлючОбъекта = &КлючОбъекта - | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; - - Запрос = Новый Запрос(ТекстЗапроса); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВариантыОтчетов.Ссылка + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.КлючОбъекта = &КлючОбъекта + | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; Запрос.УстановитьПараметр("КлючОбъекта", КлючОбъекта); Запрос.УстановитьПараметр("КлючВарианта", КлючНастроек); - УстановитьПривилегированныйРежим(Истина); - Выборка = Запрос.Выполнить().Выбрать(); + УстановитьПривилегированныйРежим(Истина); + + Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда - НастройкаОбъект = Выборка.Ссылка.ПолучитьОбъект(); - НастройкаОбъект.ХранилищеЗначений = Новый ХранилищеЗначения(Настройка, Новый СжатиеДанных()); + ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ВариантОбъект.ХранилищеЗначений = Новый ХранилищеЗначения(Настройка); Если ОписаниеНастроек <> Неопределено Тогда - НастройкаОбъект.Наименование = ОписаниеНастроек.Представление; + ВариантОбъект.Наименование = ОписаниеНастроек.Представление; КонецЕсли; - НастройкаОбъект.Записать(); + ВариантОбъект.Записать(); КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + КонецПроцедуры +// Обработчик получения описания настроек варианта отчета +// +// Параметры: +// КлючОбъекта - (Строка) Полное имя отчета с точкой +// КлючНастроек - (Строка) Ключ варианта отчета +// ОписаниеНастроек - (ОписаниеНастроек) +// Пользователь - (Строка, Неопределено) Имя пользователя ИБ +// Не используется, так как подсистема "Варианты отчетов" не разделяет варианты по авторам. +// Уникальность хранения и выборки гарантируется уникальностью пар ключей отчетов и вариантов. +// Процедура ОбработкаПолученияОписания(КлючОбъекта, КлючНастроек, ОписаниеНастроек, Пользователь) - ОписаниеНастроек.КлючОбъекта = КлючОбъекта; - ОписаниеНастроек.КлючНастроек = КлючНастроек; - - ТекстЗапроса = "ВЫБРАТЬ - | ВариантыОтчетов.Ссылка, - | ВариантыОтчетов.Наименование - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - |ГДЕ - | ВариантыОтчетов.КлючОбъекта = &КлючОбъекта - | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("КлючОбъекта", КлючОбъекта); - Запрос.УстановитьПараметр("КлючВарианта", КлючНастроек); - УстановитьПривилегированныйРежим(Истина); - Выборка = Запрос.Выполнить().Выбрать(); - УстановитьПривилегированныйРежим(Ложь); - - Если Выборка.Следующий() Тогда - ВариантОтчета = Выборка.Ссылка; - Если Не ВариантОтчета.Пустая() Тогда - ОписаниеНастроек.Представление = Выборка.Наименование; - КонецЕсли; + Если ОписаниеНастроек = Неопределено Тогда + ОписаниеНастроек = Новый ОписаниеНастроек; КонецЕсли; + ОписаниеНастроек.КлючОбъекта = КлючОбъекта; + ОписаниеНастроек.КлючНастроек = КлючНастроек; + + Если ТипЗнч(Пользователь) = Тип("Строка") Тогда + ОписаниеНастроек.Пользователь = Пользователь; + КонецЕсли; + + Если НЕ ВариантыОтчетов.ПравоИзмененияВариантов(КлючОбъекта) Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Варианты.Представление КАК Представление + |ИЗ + | Справочник.ВариантыОтчетов КАК Варианты + |ГДЕ + | Варианты.КлючОбъекта = &КлючОбъекта + | И Варианты.КлючВарианта = &КлючВарианта"; + Запрос.УстановитьПараметр("КлючОбъекта", КлючОбъекта); + Запрос.УстановитьПараметр("КлючВарианта", КлючНастроек); + + УстановитьПривилегированныйРежим(Истина); + ТаблицаЗначений = Запрос.Выполнить().Выгрузить(); + УстановитьПривилегированныйРежим(Ложь); + + Если ТаблицаЗначений.Количество() = 1 Тогда + ОписаниеНастроек.Представление = ТаблицаЗначений[0].Представление; + КонецЕсли; КонецПроцедуры +// Обработчик установки описания настроек варианта отчета +// +// Параметры: +// КлючОбъекта - (Строка) Полное имя отчета с точкой +// КлючНастроек - (Строка) Ключ варианта отчета +// ОписаниеНастроек - (ОписаниеНастроек) +// Пользователь - (Строка) Имя пользователя ИБ. +// Не используется, так как подсистема "Варианты отчетов" не разделяет варианты по авторам. +// Уникальность хранения и выборки гарантируется уникальностью пар ключей отчетов и вариантов. +// Процедура ОбработкаУстановкиОписания(КлючОбъекта, КлючНастроек, ОписаниеНастроек, Пользователь) - ТекстЗапроса = "ВЫБРАТЬ - | ВариантыОтчетов.Ссылка - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - |ГДЕ - | ВариантыОтчетов.КлючОбъекта = &КлючОбъекта - | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; - - Запрос = Новый Запрос(ТекстЗапроса); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Варианты.Ссылка + |ИЗ + | Справочник.ВариантыОтчетов КАК Варианты + |ГДЕ + | Варианты.КлючОбъекта = &КлючОбъекта + | И Варианты.КлючВарианта = &КлючВарианта"; Запрос.УстановитьПараметр("КлючОбъекта", КлючОбъекта); Запрос.УстановитьПараметр("КлючВарианта", КлючНастроек); - УстановитьПривилегированныйРежим(Истина); - Выборка = Запрос.Выполнить().Выбрать(); + УстановитьПривилегированныйРежим(Истина); + + Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда - ВариантыОтчетовСсылка = Выборка.Ссылка; - Если Не ВариантыОтчетовСсылка.Пустая() Тогда - ВариантыОтчетовОбъект = ВариантыОтчетовСсылка.ПолучитьОбъект(); - ВариантыОтчетовОбъект.Наименование = ОписаниеНастроек.Представление; - ВариантыОтчетовОбъект.Записать(); - КонецЕсли; + ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ВариантОбъект.Наименование = ОписаниеНастроек.Представление; + ВариантОбъект.Записать(); КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + КонецПроцедуры diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo index fc3183f5d..a02bec5f4 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo @@ -1,7 +1,7 @@ - + ХранилищеВариантовОтчетов diff --git a/SSL/src/StyleItems/УдаленныйДополнительныйРеквизитЦвет/УдаленныйДополнительныйРеквизитЦвет.mdo b/SSL/src/StyleItems/НедоступныеДанныеЦвет/НедоступныеДанныеЦвет.mdo similarity index 71% rename from SSL/src/StyleItems/УдаленныйДополнительныйРеквизитЦвет/УдаленныйДополнительныйРеквизитЦвет.mdo rename to SSL/src/StyleItems/НедоступныеДанныеЦвет/НедоступныеДанныеЦвет.mdo index 697a16e8a..2620bfee5 100644 --- a/SSL/src/StyleItems/УдаленныйДополнительныйРеквизитЦвет/УдаленныйДополнительныйРеквизитЦвет.mdo +++ b/SSL/src/StyleItems/НедоступныеДанныеЦвет/НедоступныеДанныеЦвет.mdo @@ -1,9 +1,9 @@ - УдаленныйДополнительныйРеквизитЦвет + НедоступныеДанныеЦвет ru - Удаленный дополнительный реквизит цвет + Недоступные данные цвет diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo index 56457f9c3..f79c4f1fb 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo @@ -73,9 +73,34 @@ StyleItem.ПросроченныеДанныеЦвет StyleItem.ФонВыделенияЦвет CommonPicture.КоллекцияВариантыВажности + CommonModule.ОбщегоНазначенияКлиентПереопределяемый + CommonModule.ДлительныеОперации + CommonModule.ДлительныеОперацииКлиент + CommonModule.ДлительныеОперацииКлиентПовтИсп + CommonForm.ДлительнаяОперация + CommonPicture.Вопрос32 + FunctionalOption.ИспользоватьРазделениеПоОбластямДанных + FunctionalOption.НеИспользоватьРазделениеПоОбластямДанных + Constant.ИспользоватьРазделениеПоОбластямДанных + Constant.НеИспользоватьРазделениеПоОбластямДанных CommonPicture.ДлительнаяОперация48 + Catalog.ИдентификаторыОбъектовМетаданных + WebService.InterfaceVersion + CommonPicture.ВосклицательныйЗнакСерый + CommonPicture.ЗаполнитьФорму + CommonPicture.Рассчитать + Role.ДобавлениеИзменениеОбщейБазовойНСИ + CommonPicture.Комментарий + StyleItem.НедоступныеДанныеЦвет + FunctionalOption.СтандартныеПодсистемыВМоделиСервиса + FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме CommonPicture.ЗаставкаВнешнейОперации CommonPicture.ЗначокЗаставкиВнешнейОперации + InformationRegister.НеразделенныеПользователи + Role.УдаленныйДоступБазоваяФункциональность + CommonPicture.Предупреждение + InformationRegister.КэшПрограммныхИнтерфейсов + Enum.ТипыДанныхКэшаПрограммныхИнтерфейсов Role.АдминистраторСистемы Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/БизнесПроцессыИЗадачи.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/БизнесПроцессыИЗадачи.mdo index 6ab61fa20..90f4b98cf 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/БизнесПроцессыИЗадачи.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/БизнесПроцессыИЗадачи.mdo @@ -23,7 +23,6 @@ Enum.ВариантыВажностиЗадачи Report.ЗадачиИстекающиеНаДату Report.ПросроченныеЗадачи - Report.СправкаОбИсполнительскойДисциплине Report.Задачи Report.ЗависшиеЗадачи DataProcessor.КартаМаршрутаБизнесПроцесса @@ -60,7 +59,6 @@ CommonPicture.ЗнакСтопЧБ Constant.ИспользоватьПодчиненныеБизнесПроцессы EventSubscription.ОбновитьСостояниеБизнесПроцесса - CommonPicture.ВосклицательныйЗнакСерый CommonPicture.КоллекцияЗадачиИБизнесПроцессы StyleItem.НеПринятыеКИсполнениюЗадачи CommonModule.БизнесПроцессыИЗадачиВызовСервера diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Валюты.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Валюты.mdo index b5f9e43aa..5c67b9306 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Валюты.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Валюты.mdo @@ -11,7 +11,6 @@ ru - CommonModule.РаботаСКурсамиВалютСобытия ScheduledJob.ЗагрузкаКурсовВалют Catalog.Валюты DataProcessor.ЗагрузкаКурсовВалют diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo index f108542f7..ea07a59a3 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -19,5 +19,7 @@ Role.ДобавлениеИзменениеВариантовОтчетов CommonPicture.ЗакрепитьВариантОтчета CommonPicture.ОткрепитьВариантОтчета + CommonModule.ВариантыОтчетовВызовСервераПовтИсп + Role.ЧтениеВариантовОтчетов Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo index 95e10878b..56ec5d79b 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo @@ -10,7 +10,7 @@ InformationRegister.ДатыЗапретаИзменения CommonModule.ДатыЗапретаИзмененияПовтИсп ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения - CommonModule.ДатыЗапретаИзмененияВызовСервера + CommonModule.ДатыЗапретаИзмененияСлужебный CommonModule.ДатыЗапретаИзмененияПереопределяемый Report.ДатыЗапретаИзменения ScheduledJob.ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/CommandInterface.cmi b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/CommandInterface.cmi index d35dc9645..67930e71b 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/CommandInterface.cmi +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/CommandInterface.cmi @@ -2,7 +2,7 @@ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой.StandardCommand.Open + DataProcessor.БлокировкаРаботыПользователей.StandardCommand.Open diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/Help/ru.html index b401ed87d..3aa31bf5f 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/Help/ru.html @@ -1,2 +1,2 @@ -

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

    \ No newline at end of file +

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

    \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/ЗавершениеРаботыПользователей.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/ЗавершениеРаботыПользователей.mdo index e3da23904..c1bada86b 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/ЗавершениеРаботыПользователей.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/ЗавершениеРаботыПользователей.mdo @@ -15,10 +15,11 @@ CommonModule.СоединенияИБГлобальный CommonModule.СоединенияИБКлиент Constant.ПараметрыАдминистрированияИБ - DataProcessor.БлокировкаСоединенийСИнформационнойБазой + DataProcessor.БлокировкаРаботыПользователей CommonModule.СоединенияИБКлиентСервер DataProcessor.АктивныеПользователи CommonForm.ПараметрыАдминистрированияСервернойИБ CommonModule.СоединенияИБПовтИсп + InformationRegister.БлокировкиСеансовОбластиДанных Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗаметкиПользователя/ЗаметкиПользователя.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗаметкиПользователя/ЗаметкиПользователя.mdo index 38659f95d..f206b06f7 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗаметкиПользователя/ЗаметкиПользователя.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗаметкиПользователя/ЗаметкиПользователя.mdo @@ -5,7 +5,6 @@ ru Заметки пользователя
    - true Catalog.Заметки Enum.ЦветаЗаметок CommonCommand.ЗаметкиПоПредмету diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ИнтеграцияС1СДокументооборот/ИнтеграцияС1СДокументооборот.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ИнтеграцияС1СДокументооборот/ИнтеграцияС1СДокументооборот.mdo index e9eab44c7..7f4c8d168 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ИнтеграцияС1СДокументооборот/ИнтеграцияС1СДокументооборот.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ИнтеграцияС1СДокументооборот/ИнтеграцияС1СДокументооборот.mdo @@ -6,7 +6,6 @@ Интеграция с 1С:Документооборот true - true Constant.ИспользоватьИнтеграциюС1СДокументооборот Constant.ИдентификаторКорневойПапкиФайлов1СДокументооборот Constant.АдресВебСервиса1СДокументооборот diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/КалендарныеГрафики.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/КалендарныеГрафики.mdo index 0bf3ae76f..e6695c1eb 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/КалендарныеГрафики.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/КалендарныеГрафики.mdo @@ -15,5 +15,10 @@ InformationRegister.КалендарныеГрафики Subsystem.СтандартныеПодсистемы.Subsystem.КалендарныеГрафики CommonModule.КалендарныеГрафики + CommonForm.ВыборДаты + InformationRegister.ДанныеПроизводственногоКалендаря + Catalog.ПроизводственныеКалендари + Enum.ВидыДнейПроизводственногоКалендаря + Enum.ВидыКалендарей Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo index b87192edf..61f8b3429 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo @@ -11,7 +11,7 @@ ru - CommonModule.КонтрольЖурналаРегистрации + CommonModule.КонтрольЖурналаРегистрацииСлужебный ScheduledJob.КонтрольЖурналаРегистрации Constant.АдресатыПолученияОтчетаПоЖурналуРегистрации DataProcessor.КонтрольЖурналаРегистрации diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НапоминанияПользователя/НапоминанияПользователя.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НапоминанияПользователя/НапоминанияПользователя.mdo index 61fc9fca2..09e0bc871 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НапоминанияПользователя/НапоминанияПользователя.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НапоминанияПользователя/НапоминанияПользователя.mdo @@ -5,7 +5,6 @@ ru Напоминания пользователя - true InformationRegister.НапоминанияПользователя CommonCommand.УстановитьНапоминаниеПоПредмету Enum.СпособыУстановкиВремениНапоминания diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo index 4aaf5c4bd..2dc39aa32 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo @@ -61,11 +61,9 @@ CommonCommand.ВыполнитьОбменДанными CommonCommand.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных CommonCommand.ОткрытьСценарииОбменовДанными - CommonForm.ВыполнениеОбменаДанными CommonPicture.СостояниеОбменаДаннымиУспех CommonPicture.СостояниеОбменаДаннымиОшибка CommonForm.ОбменыДанными - CommonPicture.Внимание Role.ДобавлениеИзменениеОбменовДанными Role.ВыполнениеОбменовДанными CommandGroup.ВыполнениеОбменаДанными @@ -79,8 +77,8 @@ Constant.НастройкаПодчиненногоУзлаРИБЗавершена CommonModule.ОбменДаннымиВнешнееСоединение CommonForm.ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации - CommonForm.ВыборОбъектовИнформационнойБазыЧерезВнешнееСоединение - FunctionalOption.ИспользоватьОбменДанными + CommonForm.ВыборОбъектовИнформационнойБазыКорреспондента + FunctionalOption.ИспользоватьОбменДаннымиВЛокальномРежиме FunctionalOption.АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО FunctionalOption.ПрефиксИнформационнойБазы EventSubscription.ВключитьИспользованиеПланаОбмена @@ -88,5 +86,19 @@ EventSubscription.ПроверитьВозможностьИзмененияНастроекОбменаДанными EventSubscription.ПроверитьИзменениеФильтровОграниченияМиграцииДанных EventSubscription.ОтменитьОтправкуДанныхУзлаВРаспределеннойИнформационнойБазе + WebService.Exchange + InformationRegister.СообщенияОбменаДанными + Constant.КаталогВременныхФайловСообщенийОбменаДляWindows + Constant.КаталогВременныхФайловСообщенийОбменаДляLinux + InformationRegister.ИзмененияОбщихДанныхУзлов + EventSubscription.ЗарегистрироватьИзмененияОбщихДанныхУзлов + CommonForm.ВыполнениеОбменаДанными + Constant.ИспользоватьОбменДаннымиВЛокальномРежиме + Constant.ИспользоватьОбменДаннымиВМоделиСервиса + CommonModule.ОбменДаннымиКлиентПереопределяемый + WebService.Exchange_2_0_1_6 + FunctionalOption.ИспользоватьОбменДанными + EventSubscription.ПриОтправкеДанныхПодчиненному + EventSubscription.ПриПолученииДанныхОтПодчиненного Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Организации/Организации.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Организации/Организации.mdo index 91511d6ba..71efd19f8 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Организации/Организации.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Организации/Организации.mdo @@ -6,5 +6,7 @@ Организации Catalog.Организации + FunctionalOption.ПрефиксыОрганизаций + FunctionalOptionsParameter.Организация Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/CommandInterface.cmi b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/CommandInterface.cmi new file mode 100644 index 000000000..7ad8270b6 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/CommandInterface.cmi @@ -0,0 +1,16 @@ + + + + + Constant.ВыполнятьЗамерыПроизводительности.StandardCommand.Open + + + + + + NavigationPanelOrdinary + Catalog.КлючевыеОперации.StandardCommand.OpenList + InformationRegister.ЗамерыВремени.StandardCommand.OpenList + + + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo index f1033fbf2..f09e74a2a 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo @@ -5,16 +5,20 @@ ru Оценка производительности - true CommonModule.ОценкаПроизводительностиКлиентГлобальный CommonModule.ОценкаПроизводительностиКлиентСервер - CommonModule.ОценкаПроизводительностиВызовСервера - SessionParameter.ТекущийЗамерВремени + CommonModule.ОценкаПроизводительностиВызовСервераПолныеПрава Role.НастройкаИОценкаПроизводительности CommonTemplate.ОценкаПроизводительностиВнешнийКомпонент - Enum.КлючевыеОперации DataProcessor.ОценкаПроизводительности - InformationRegister.ЗамерыВремени + ScheduledJob.ЭкспортОценкиПроизводительности + XDTOPackage.ApdexExport + Enum.УровниПроизводительности + CommonModule.ОценкаПроизводительностиКлиент Constant.ВыполнятьЗамерыПроизводительности + Catalog.КлючевыеОперации + CommonModule.ОценкаПроизводительностиПовтИсп + InformationRegister.ЗамерыВремени + Enum.УдалитьКлючевыеОперации Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo index 39c5213f9..293d83987 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo @@ -49,5 +49,6 @@ Constant.ИспользоватьГруппыПользователей FunctionalOption.ИспользоватьВнешнихПользователей FunctionalOption.ИспользоватьГруппыПользователей + Enum.ТипыПользователей Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/ПрефиксацияОбъектов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/ПрефиксацияОбъектов.mdo index f2452177c..ba1b7f345 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/ПрефиксацияОбъектов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/ПрефиксацияОбъектов.mdo @@ -16,7 +16,5 @@ CommonModule.ПрефиксацияОбъектовКлиентСервер CommonModule.ПрефиксацияОбъектовКлиентСерверПереопределяемый CommonModule.ПрефиксацияОбъектов - FunctionalOption.ПрефиксыОрганизаций - FunctionalOptionsParameter.Организация Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/БазоваяФункциональностьВМоделиСервиса/БазоваяФункциональностьВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/БазоваяФункциональностьВМоделиСервиса/БазоваяФункциональностьВМоделиСервиса.mdo new file mode 100644 index 000000000..fa3056b16 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/БазоваяФункциональностьВМоделиСервиса/БазоваяФункциональностьВМоделиСервиса.mdo @@ -0,0 +1,33 @@ + + + БазоваяФункциональностьВМоделиСервиса + + ru + Базовая функциональность в модели сервиса + + true + CommonModule.РаботаВМоделиСервиса + CommonModule.РаботаВМоделиСервисаПереопределяемый + Constant.КопироватьОбластиДанныхИзЭталонной + Constant.РежимИспользованияИнформационнойБазы + Constant.СообщениеБлокировкиПриОбновленииКонфигурации + Enum.РежимыИспользованияИнформационнойБазы + Enum.СтатусыОбластейДанных + Role.УдалитьПолныеПраваОбластиДанных + SessionParameter.ОбластьДанныхЗначение + SessionParameter.ОбластьДанныхИспользование + CommonAttribute.ОбластьДанных + ScheduledJob.ОбслуживаниеОбластейДанных + CommonForm.ВходВОбластьДанных + InformationRegister.ОбластиДанных + ScheduledJob.ОбновлениеОбластейДанных + CommonModule.РаботаВМоделиСервисаПовтИсп + Constant.РазмерБлокаПередачиФайла + Constant.ОбщийКаталогВременныхФайлов + Constant.ОбщийКаталогВременныхФайловLinux + Constant.ПарольПользователяАгентаСервиса + Constant.ИмяПользователяАгентаСервиса + Constant.АдресАгентаСервиса + XDTOPackage.AgentScripts + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВалютыВМоделиСервиса/ВалютыВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВалютыВМоделиСервиса/ВалютыВМоделиСервиса.mdo new file mode 100644 index 000000000..4d98ab40a --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВалютыВМоделиСервиса/ВалютыВМоделиСервиса.mdo @@ -0,0 +1,12 @@ + + + ВалютыВМоделиСервиса + + ru + Валюты в модели сервиса + + true + InformationRegister.КурсыВалютПоКлассификатору + Catalog.КлассификаторВалют + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВыгрузкаЗагрузкаДанных/ВыгрузкаЗагрузкаДанных.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВыгрузкаЗагрузкаДанных/ВыгрузкаЗагрузкаДанных.mdo new file mode 100644 index 000000000..b81797f91 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВыгрузкаЗагрузкаДанных/ВыгрузкаЗагрузкаДанных.mdo @@ -0,0 +1,21 @@ + + + ВыгрузкаЗагрузкаДанных + + ru + Выгрузка загрузка данных + + true + CommonModule.ВыгрузкаЗагрузкаДанных + XDTOPackage.DataDump + CommonForm.ВыгрузкаДанных + CommonForm.ЗагрузкаДанныхВОбласть + CommonCommand.ВыгрузитьДанныеВЛокальнуюВерсию + CommonCommand.ВыгрузитьДанныеДляПереходаВСервис + CommonCommand.ЗагрузитьДанныеВОбласть + CommonCommand.ЗагрузитьДанныеИзЛокальнойВерсии + CommonCommand.ЗагрузитьДанныеИзСервиса + CommonTemplate.ИзвлечениеКодовОбщихДанных + CommonModule.ВыгрузкаЗагрузкаДанныхПереопределяемый + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo new file mode 100644 index 000000000..519488423 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ДополнительныеОтчетыИОбработкиВМоделиСервиса/ДополнительныеОтчетыИОбработкиВМоделиСервиса.mdo @@ -0,0 +1,11 @@ + + + ДополнительныеОтчетыИОбработкиВМоделиСервиса + + ru + Дополнительные отчеты и обработки в модели сервиса + + true + CommonModule.ДополнительныеОтчетыИОбработкиВМоделиСервиса + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo new file mode 100644 index 000000000..114b15530 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo @@ -0,0 +1,21 @@ + + + ОбменДаннымиВМоделиСервиса + + ru + Обмен данными в модели сервиса + + CommonModule.ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса + WebService.RemoteAdministrationOfExchange + Constant.ЗарегистрированыИзмененияДанных + CommonForm.ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами + CommonCommand.СинхронизироватьДанные + Constant.АдресВебСервисаОбменаДанными + CommonModule.ОбменДаннымиВМоделиСервиса + CommonModule.ОбменДаннымиВМоделиСервисаПовтИсп + FunctionalOption.ЗарегистрированыИзмененияДанных + FunctionalOption.ИспользоватьОбменДаннымиВМоделиСервиса + WebService.RemoteAdministrationOfExchange_2_0_1_6 + Role.УдаленныйДоступОбменДаннымиВМоделиСервиса + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменСообщениями/ОбменСообщениями.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменСообщениями/ОбменСообщениями.mdo new file mode 100644 index 000000000..d075a0185 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменСообщениями/ОбменСообщениями.mdo @@ -0,0 +1,30 @@ + + + ОбменСообщениями + + ru + Обмен сообщениями + + true + Catalog.СообщенияСистемы + ScheduledJob.ОтправкаИПолучениеСообщенийСистемы + CommonModule.ОбменСообщениями + CommonModule.ОбменСообщениямиПереопределяемый + InformationRegister.ПодпискиПолучателей + ExchangePlan.ОбменСообщениями + InformationRegister.НастройкиОтправителя + WebService.MessageExchange + CommonForm.ПодключениеКонечнойТочки + CommonModule.ОбменСообщениямиКлиент + CommonForm.НастройкаОбменаСообщениями + CommonCommand.НастройкаОбменаСообщениями + CommonForm.УстановкаВедущейКонечнойТочки + CommonPicture.ВедущаяКонечнаяТочка + CommonCommand.ОбменСообщениями + CommonModule.ОбменСообщениямиВнутренний + Constant.БлокировкаОтправкиБыстрыхСообщений + CommonModule.ОбменСообщениямиПовтИсп + Role.УдаленныйДоступОбменСообщениями + WebService.MessageExchange_2_0_1_6 + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбновлениеВерсииИБВМоделиСервиса/ОбновлениеВерсииИБВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбновлениеВерсииИБВМоделиСервиса/ОбновлениеВерсииИБВМоделиСервиса.mdo new file mode 100644 index 000000000..818d93770 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбновлениеВерсииИБВМоделиСервиса/ОбновлениеВерсииИБВМоделиСервиса.mdo @@ -0,0 +1,11 @@ + + + ОбновлениеВерсииИБВМоделиСервиса + + ru + Обновление версии ИБ в модели сервиса + + true + CommonModule.ОбновлениеИнформационнойБазыВМоделиСервиса + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОчередьЗаданий/ОчередьЗаданий.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОчередьЗаданий/ОчередьЗаданий.mdo new file mode 100644 index 000000000..678f5f4af --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОчередьЗаданий/ОчередьЗаданий.mdo @@ -0,0 +1,19 @@ + + + ОчередьЗаданий + + ru + Очередь заданий + + true + CommonModule.ОчередьЗаданий + CommonModule.ОчередьЗаданийПереопределяемый + Constant.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания + Constant.МаксимальноеКоличествоИсполняющихФоновыхЗаданий + Enum.СостоянияЗаданий + ScheduledJob.ПланированиеОбработкиЗаданий + InformationRegister.РазделенныеРегламентныеЗадания + CommonModule.ОчередьЗаданийПовтИсп + InformationRegister.ОчередьЗаданий + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПользователиВМоделиСервиса/ПользователиВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПользователиВМоделиСервиса/ПользователиВМоделиСервиса.mdo new file mode 100644 index 000000000..280a714c8 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПользователиВМоделиСервиса/ПользователиВМоделиСервиса.mdo @@ -0,0 +1,14 @@ + + + ПользователиВМоделиСервиса + + ru + Пользователи в модели сервиса + + true + CommonModule.ПользователиВМоделиСервиса + CommonForm.ИнформацияНеразделенногоПользователя + CommonForm.ПользователиСервиса + CommonCommand.ДобавитьПользователейСервиса + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПоставляемыеДанные/ПоставляемыеДанные.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПоставляемыеДанные/ПоставляемыеДанные.mdo new file mode 100644 index 000000000..25e9749ee --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПоставляемыеДанные/ПоставляемыеДанные.mdo @@ -0,0 +1,30 @@ + + + ПоставляемыеДанные + + ru + Поставляемые данные + + true + Constant.АдресСервисаПоставляемыхДанных + CommonCommand.ОбновлениеПоставляемыхДанных + CommonCommand.ОчиститьРегистрациюИзмененийПоставляемыхДанных + CommonCommand.ОбновлениеОбщихПоставляемыхДанных + InformationRegister.СвязиПоставляемыхДанных + ExchangePlan.ИзмененияПоставляемыхДанных + Constant.ИмяСлужебногоПользователяСервисаПоставляемыхДанных + Constant.ПарольСлужебногоПользователяСервисаПоставляемыхДанных + InformationRegister.ОбластиДляОбновленияПоставляемыхДанных + ScheduledJob.ОбновлениеОбщихПоставляемыхДанных + ScheduledJob.КонтрольОбновленияРазделенныхПоставляемыхДанных + EventSubscription.СправочникиОбщихПоставляемыхДанныхПередЗаписью + Enum.ВидыПоставляемыхДанных + InformationRegister.ВерсииПоставляемыхДанных + Constant.НомерЗагрузкиПоставляемыхДанных + EventSubscription.СправочникиРазделенныхПоставляемыхДанныхПередУдалением + CommonModule.ПоставляемыеДанные + CommonModule.ПоставляемыеДанныеКлиентСервер + CommonModule.ПоставляемыеДанныеПереопределяемый + CommonModule.ПоставляемыеДанныеПовтИсп + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УдаленноеАдминистрирование/УдаленноеАдминистрирование.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УдаленноеАдминистрирование/УдаленноеАдминистрирование.mdo new file mode 100644 index 000000000..1360a01da --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УдаленноеАдминистрирование/УдаленноеАдминистрирование.mdo @@ -0,0 +1,20 @@ + + + УдаленноеАдминистрирование + + ru + Удаленное администрирование + + true + Constant.КонечнаяТочкаМенеджераСервиса + XDTOPackage.УдаленноеАдминистрированиеВМоделиСервиса + XDTOPackage.КонтрольУдаленногоАдминистрирования + XDTOPackage.СообщенияУдаленногоАдминистрирования + CommonModule.СообщенияУдаленногоАдминистрирования + CommonModule.СообщенияУдаленногоАдминистрированияПовтИсп + CommonModule.ОбработчикКаналовСообщенийУдаленногоАдминистрирования + Constant.ВнутреннийАдресМенеджераСервиса + Constant.ИмяСлужебногоПользователяМенеджераСервиса + Constant.ПарольСлужебногоПользователяМенеджераСервиса + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УправлениеДоступомВМоделиСервиса/УправлениеДоступомВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УправлениеДоступомВМоделиСервиса/УправлениеДоступомВМоделиСервиса.mdo new file mode 100644 index 000000000..326b5900d --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УправлениеДоступомВМоделиСервиса/УправлениеДоступомВМоделиСервиса.mdo @@ -0,0 +1,11 @@ + + + УправлениеДоступомВМоделиСервиса + + ru + Управление доступом в модели сервиса + + true + CommonModule.УправлениеДоступомВМоделиСервиса + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ФайловыеФункцииВМоделиСервиса/ФайловыеФункцииВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ФайловыеФункцииВМоделиСервиса/ФайловыеФункцииВМоделиСервиса.mdo new file mode 100644 index 000000000..66429a463 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ФайловыеФункцииВМоделиСервиса/ФайловыеФункцииВМоделиСервиса.mdo @@ -0,0 +1,11 @@ + + + ФайловыеФункцииВМоделиСервиса + + ru + Файловые функции в модели сервиса + + true + DataProcessor.АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo new file mode 100644 index 000000000..64e270023 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo @@ -0,0 +1,23 @@ + + + РаботаВМоделиСервиса + + ru + Работа в модели сервиса + + true + БазоваяФункциональностьВМоделиСервиса + ВалютыВМоделиСервиса + ВыгрузкаЗагрузкаДанных + ДополнительныеОтчетыИОбработкиВМоделиСервиса + ОбменДаннымиВМоделиСервиса + ОбменСообщениями + ОбновлениеВерсииИБВМоделиСервиса + ОчередьЗаданий + ПользователиВМоделиСервиса + ПоставляемыеДанные + УдаленноеАдминистрирование + УправлениеДоступомВМоделиСервиса + ФайловыеФункцииВМоделиСервиса + Subsystem.СтандартныеПодсистемы + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo index 00f87e874..6f39b9f18 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo @@ -50,5 +50,7 @@ EventSubscription.СкопироватьРеквизитыВерсииФайловВФайл DataProcessor.ПереносФайловВТома CommonModule.РаботаСФайламиКлиентПереопределяемый + Enum.ТипыФайловДляВстроенногоРедактора + Role.РаботаСПапкамиФайлов Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РассылкаОтчетов/РассылкаОтчетов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РассылкаОтчетов/РассылкаОтчетов.mdo new file mode 100644 index 000000000..81d4ba174 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РассылкаОтчетов/РассылкаОтчетов.mdo @@ -0,0 +1,35 @@ + + + РассылкаОтчетов + + ru + Рассылка отчетов + + true + Catalog.РассылкиОтчетов + Enum.ПериодичностиРасписанийРассылокОтчетов + CommonPicture.ФорматTXT + CommonPicture.ФорматMXL + CommonPicture.ФорматПустой + CommonPicture.ФорматWord2007 + CommonPicture.ФорматOpenOfficeCalc + CommonPicture.ФорматHTML + CommonPicture.ФорматExcel + CommonPicture.ФорматExcel2007 + CommonModule.РассылкаОтчетов + CommonModule.РассылкаОтчетовПовтИсп + CommonModule.РассылкаОтчетовПереопределяемый + CommonModule.РассылкаОтчетовКлиентСервер + Enum.ФорматыСохраненияОтчетов + CommonModule.РассылкаОтчетовКлиент + CommonModule.РассылкаОтчетовВызовСервера + InformationRegister.СостоянияРассылокОтчетов + ScheduledJob.РассылкаОтчетов + Role.ДобавлениеИзменениеРассылокОтчетов + CommonPicture.СостояниеРассылкиОтчетов + CommonPicture.ФорматPDF + CommonPicture.ФорматOpenOfficeWriter + CommonPicture.ФорматWord + CommonModule.РассылкаОтчетовКлиентПереопределяемый + Subsystem.СтандартныеПодсистемы + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Свойства.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Свойства.mdo index 58df97dee..9996c938d 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Свойства.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Свойства.mdo @@ -26,7 +26,6 @@ CommonCommand.ДополнительныеСведения Role.ЧтениеДополнительныхСведений Role.ИзменениеДополнительныхСведений - StyleItem.УдаленныйДополнительныйРеквизитЦвет StyleItem.УдаленныйДополнительныйРеквизитШрифт FunctionalOption.ИспользоватьДополнительныеРеквизитыИСведения Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo index 7b9edc501..6d4e67a17 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo @@ -57,5 +57,6 @@ CommonForm.ПраваДоступа CommonForm.ПраваДоступаУпрощенно SessionParameter.ОграничиватьДоступПоВидуОрганизации + SessionParameter.ОграничиватьДоступПоВидуПапкиФайлов Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo index e24d7fe1b..b28aadd11 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo @@ -51,5 +51,11 @@ CommonPicture.ОбновитьФайлИзФайлаНаДиске Constant.СписокРасширенийФайловOpenDocument FunctionalOption.ХранитьФайлыВТомахНаДиске + Constant.МаксимальныйРазмерФайлаОбластиДанных + Constant.СписокЗапрещенныхРасширенийОбластиДанных + Constant.СписокРасширенийФайловOpenDocumentОбластиДанных + Constant.СписокРасширенийТекстовыхФайлов + InformationRegister.КодировкиВерсийФайлов + Enum.СпособыОткрытияФайлаНаПросмотр Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo index 4300040f6..e37964f1b 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo @@ -43,8 +43,10 @@ ПрефиксацияОбъектов ПрисоединенныеФайлы ПроверкаЛегальностиПолученияОбновления + РаботаВМоделиСервиса РаботаСПочтовымиСообщениями РаботаСФайлами + РассылкаОтчетов РегламентныеЗадания РезервноеКопированиеИБ Свойства diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form index 2a28978ad..a853c632a 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form @@ -20,7 +20,7 @@ НаименованиеРасширеннаяПодсказка - 76 + 78 Label true true @@ -60,7 +60,7 @@ НомерРасширеннаяПодсказка - 78 + 80 Label true true @@ -103,7 +103,7 @@ true ГруппаШапкаРасширеннаяПодсказка - 75 + 77 Label true true @@ -136,7 +136,7 @@ ДатаРасширеннаяПодсказка - 81 + 83 Label true true @@ -176,7 +176,7 @@ СрокИсполненияРасширеннаяПодсказка - 83 + 85 Label true true @@ -220,7 +220,7 @@ true ГруппаВходящиеРасширеннаяПодсказка - 80 + 82 Label true true @@ -238,7 +238,7 @@
    - ГруппаАдресация3 + ГруппаАдресация 69 Исполнитель @@ -253,7 +253,7 @@ ИсполнительРасширеннаяПодсказка - 86 + 88 Label true true @@ -295,7 +295,7 @@ РольИсполнителяРасширеннаяПодсказка - 88 + 90 Label true true @@ -337,7 +337,7 @@ ОсновнойОбъектАдресацииРасширеннаяПодсказка - 90 + 92 Label true true @@ -380,7 +380,7 @@ ДополнительныйОбъектАдресацииРасширеннаяПодсказка - 92 + 94 Label true true @@ -417,7 +417,7 @@ <key>ru</key> - <value>Адресация </value> + <value>Адресована</value> System.DefaultGUIFont @@ -427,8 +427,8 @@ false - ГруппаАдресация3РасширеннаяПодсказка - 85 + ГруппаАдресацияРасширеннаяПодсказка + 87 Label true true @@ -440,7 +440,7 @@ Vertical Auto - WeakSeparation + NormalSeparation true true auto @@ -464,7 +464,7 @@ БизнесПроцессРасширеннаяПодсказка - 95 + 97 Label true true @@ -506,7 +506,7 @@ ТочкаМаршрутаРасширеннаяПодсказка - 97 + 99 Label true true @@ -552,7 +552,7 @@ true ГруппаБизнесПроцессРасширеннаяПодсказка - 94 + 96 Label true true @@ -563,7 +563,7 @@ UsualGroup Auto - WeakSeparation + NormalSeparation true true auto @@ -585,9 +585,10 @@ Объект.Executed + Right ВыполненаРасширеннаяПодсказка - 100 + 102 Label true true @@ -620,7 +621,7 @@ ДатаИсполненияРасширеннаяПодсказка - 102 + 104 Label true true @@ -667,7 +668,7 @@ true ГруппаРезультатРасширеннаяПодсказка - 99 + 101 Label true true @@ -678,7 +679,7 @@ UsualGroup Auto - WeakSeparation + NormalSeparation true true auto @@ -700,7 +701,7 @@ false ЗакрытьРасширеннаяПодсказка - 73 + 74 Label true true @@ -715,6 +716,32 @@ UserCmds Auto + + ФормаИзменитьФорму + 73 + true + true + + true + + + ФормаИзменитьФормуРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + Справка 70 @@ -726,7 +753,7 @@ false СправкаРасширеннаяПодсказка - 74 + 76 Label true true diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Module.bsl index dc2bd35f3..a8f5e5eef 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl index 7ae2df767..971ed9266 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -50,24 +50,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - БизнесПроцессыИЗадачиКлиент.СписокЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка); -КонецПроцедуры - -&НаКлиенте -Процедура СписокПередНачаломИзменения(Элемент, Отказ) - БизнесПроцессыИЗадачиКлиент.СписокЗадачПередНачаломИзменения(Элемент, Отказ); -КонецПроцедуры - -&НаКлиенте -Процедура СоздатьЗадание(Команда) - - БизнесПроцессыИЗадачиКлиент.СоздатьЗадание(ЭтаФорма); - -КонецПроцедуры +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ПоказыватьВыполненныеПриИзменении(Элемент) @@ -81,6 +64,73 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + +&НаКлиенте +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + БизнесПроцессыИЗадачиКлиент.СписокЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура СписокПередНачаломИзменения(Элемент, Отказ) + БизнесПроцессыИЗадачиКлиент.СписокЗадачПередНачаломИзменения(Элемент, Отказ); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоЗадач + +&НаКлиенте +Процедура ДеревоЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ОткрытьТекущуюСтрокуДереваЗадач(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура СоздатьЗадание(Команда) + + БизнесПроцессыИЗадачиКлиент.СоздатьЗадание(ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура Обновить(Команда) + + ЗаполнитьДеревоЗадач(); + Для каждого Строка ИЗ ДеревоЗадач.ПолучитьЭлементы() Цикл + Элементы.ДеревоЗадач.Развернуть(Строка.ПолучитьИдентификатор(), Истина); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура Изменить(Команда) + + ОткрытьТекущуюСтрокуДереваЗадач(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ОткрытьТекущуюСтрокуДереваЗадач() + + Если Элементы.ДеревоЗадач.ТекущиеДанные <> Неопределено Тогда + Если ТипЗнч(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда + БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); + Иначе + ОткрытьЗначение(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ЗаполнитьДеревоЗадач() @@ -224,41 +274,3 @@ КонецЦикла; КонецПроцедуры - -&НаКлиенте -Процедура Обновить(Команда) - - ЗаполнитьДеревоЗадач(); - Для каждого Строка ИЗ ДеревоЗадач.ПолучитьЭлементы() Цикл - Элементы.ДеревоЗадач.Развернуть(Строка.ПолучитьИдентификатор(), Истина); - КонецЦикла; - -КонецПроцедуры - -&НаКлиенте -Процедура Изменить(Команда) - - ОткрытьТекущуюСтрокуДереваЗадач(); - -КонецПроцедуры - -&НаКлиенте -Процедура ДеревоЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - ОткрытьТекущуюСтрокуДереваЗадач(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьТекущуюСтрокуДереваЗадач() - - Если Элементы.ДеревоЗадач.ТекущиеДанные <> Неопределено Тогда - Если ТипЗнч(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); - Иначе - ОткрытьЗначение(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl index fe447d96a..4912c47d3 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -46,12 +46,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - БизнесПроцессыИЗадачиКлиент.СписокЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка); -КонецПроцедуры +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ПоказыватьВыполненныеПриИзменении(Элемент) @@ -59,7 +54,46 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + +&НаКлиенте +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + БизнесПроцессыИЗадачиКлиент.СписокЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоЗадач + +&НаКлиенте +Процедура ДеревоЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ОткрытьТекущуюСтрокуДереваЗадач(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Обновить(Команда) + + ЗаполнитьДеревоЗадач(); + Для каждого Строка ИЗ ДеревоЗадач.ПолучитьЭлементы() Цикл + Элементы.ДеревоЗадач.Развернуть(Строка.ПолучитьИдентификатор(), Истина); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура Изменить(Команда) + + ОткрытьТекущуюСтрокуДереваЗадач(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура УстановитьОтбор(ПараметрыОтбора) @@ -272,31 +306,6 @@ КонецПроцедуры -&НаКлиенте -Процедура Обновить(Команда) - - ЗаполнитьДеревоЗадач(); - Для каждого Строка ИЗ ДеревоЗадач.ПолучитьЭлементы() Цикл - Элементы.ДеревоЗадач.Развернуть(Строка.ПолучитьИдентификатор(), Истина); - КонецЦикла; - -КонецПроцедуры - -&НаКлиенте -Процедура Изменить(Команда) - - ОткрытьТекущуюСтрокуДереваЗадач(); - -КонецПроцедуры - -&НаКлиенте -Процедура ДеревоЗадачВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - ОткрытьТекущуюСтрокуДереваЗадач(); - -КонецПроцедуры - &НаКлиенте Процедура ОткрытьТекущуюСтрокуДереваЗадач() diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form index 11b2671ad..dea97bd77 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Form.form @@ -887,7 +887,7 @@ BeforeLoadDataFromSettingsAtServer - ПриЗагрузкеДанныхИзНастроекНаСервере + ПередЗагрузкойДанныхИзНастроекНаСервере DontBlock Use diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl index 0beda33ff..00f5f1463 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -21,7 +21,7 @@ КонецПроцедуры &НаСервере -Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) +Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки) СгруппироватьПоКолонкеНаСервере(Настройки["РежимГруппировки"]); УстановитьОтбор(Настройки); КонецПроцедуры @@ -34,7 +34,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура СгруппироватьПоВажности(Команда) @@ -68,6 +68,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) БизнесПроцессыИЗадачиКлиент.СписокЗадачПередНачаломДобавления(ЭтаФорма, Элемент, Отказ, Копирование, @@ -80,7 +83,24 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ПринятьКИсполнению(Команда) + + КомандыРаботыСБизнесПроцессамиКлиент.ПринятьЗадачиКИсполнению(Элементы.Список.ВыделенныеСтроки); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьПринятиеКИсполнению(Команда) + + КомандыРаботыСБизнесПроцессамиКлиент.ОтменитьПринятиеЗадачКИсполнению(Элементы.Список.ВыделенныеСтроки); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура СгруппироватьПоКолонке(Знач ИмяКолонкиРевизита) @@ -134,18 +154,3 @@ КонецЕсли; КонецПроцедуры - -&НаКлиенте -Процедура ПринятьКИсполнению(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.ПринятьЗадачиКИсполнению(Элементы.Список.ВыделенныеСтроки); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтменитьПринятиеКИсполнению(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.ОтменитьПринятиеЗадачКИсполнению(Элементы.Список.ВыделенныеСтроки); - -КонецПроцедуры - diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Attributes/Список/ExtInfo/ListSettings.dcss index 2a7c3cf99..c3f284718 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Attributes/Список/ExtInfo/ListSettings.dcss @@ -11,18 +11,15 @@ - false СрокИсполнения Asc - false Важность Asc - false - СрокНачалаИсполнения + ДатаНачала Asc Normal diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl index c8c6eb15a..d3f63c072 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -32,7 +32,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура СгруппироватьПоВажности(Команда) @@ -59,6 +59,9 @@ СгруппироватьПоКолонке("ПредметСтрокой"); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) БизнесПроцессыИЗадачиКлиент.СписокЗадачПередНачаломДобавления(ЭтаФорма, Элемент, Отказ, Копирование, @@ -76,7 +79,24 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ПринятьКИсполнению(Команда) + + КомандыРаботыСБизнесПроцессамиКлиент.ПринятьЗадачиКИсполнению(Элементы.Список.ВыделенныеСтроки); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьПринятиеКИсполнению(Команда) + + КомандыРаботыСБизнесПроцессамиКлиент.ОтменитьПринятиеЗадачКИсполнению(Элементы.Список.ВыделенныеСтроки); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура СгруппироватьПоКолонке(Знач ИмяКолонкиРевизита) @@ -97,20 +117,3 @@ ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонкиРевизита); КонецЕсли; КонецПроцедуры - - -&НаКлиенте -Процедура ПринятьКИсполнению(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.ПринятьЗадачиКИсполнению(Элементы.Список.ВыделенныеСтроки); - -КонецПроцедуры - - -&НаКлиенте -Процедура ОтменитьПринятиеКИсполнению(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.ОтменитьПринятиеЗадачКИсполнению(Элементы.Список.ВыделенныеСтроки); - -КонецПроцедуры - diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl index d7bb4ce9e..00e4988a7 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -88,7 +88,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ИсполнительПриИзменении(Элемент) @@ -119,21 +119,22 @@ УстановитьСостояниеЭлементов(); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + &НаКлиенте Процедура OK(Команда) ОчиститьСообщения(); - Если НЕ ПроверитьЗаполнение() Тогда Возврат; КонецЕсли; - Закрыть(ПараметрыЗакрытия()); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура УстановитьТипыОбъектовАдресации() diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl index 3c52bf533..761a8587a 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -25,21 +25,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура ЗаписатьИЗакрытьВыполнить() - - БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполненаВыполнить() - - БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтаФорма, Истина); - -КонецПроцедуры +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ДекорацияОткрытьФормуЗадачиНажатие(Элемент) @@ -50,13 +36,6 @@ КонецПроцедуры -&НаКлиенте -Процедура Дополнительно(Команда) - - БизнесПроцессыИЗадачиКлиент.ОткрытьДопИнформациюОЗадаче(Объект.Ссылка); - -КонецПроцедуры - &НаКлиенте Процедура ДатаИсполненияПриИзменении(Элемент) @@ -67,7 +46,31 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ЗаписатьИЗакрытьВыполнить(Команда) + + БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполненаВыполнить(Команда) + + БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтаФорма, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура Дополнительно(Команда) + + БизнесПроцессыИЗадачиКлиент.ОткрытьДопИнформациюОЗадаче(Объект.Ссылка); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура ИнициализацияФормы() diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form index ebac5df26..c1a08fd35 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form @@ -1,179 +1,5 @@ - - ОсновнаяКоманднаяПанель - 47 - - КоманднаяПанельСписка - 45 - true - true - - true - - - КоманднаяПанельСпискаРасширеннаяПодсказка - 66 - Label - true - true - - Left - - - - Item.Список - - - - ПринятьКИсполнению - 61 - true - true - - true - - - ПринятьКИсполнениюРасширеннаяПодсказка - 67 - Label - true - true - - Left - - - Form.Command.ПринятьКИсполнению - Normal - Auto - true - true - UserCmds - Auto - - - ОтменитьПринятиеКИсполнению - 62 - true - true - - true - - - ОтменитьПринятиеКИсполнениюРасширеннаяПодсказка - 68 - Label - true - true - - Left - - - Form.Command.ОтменитьПринятиеКИсполнению - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - КоманднаяПанельФормы - 46 - true - true - - true - - - КоманднаяПанельФормыРасширеннаяПодсказка - 69 - Label - true - true - - Left - - - - FormCommandPanelGlobalCommands - - - - ИзменитьФорму - 48 - true - true - - true - - false - - ИзменитьФормуРасширеннаяПодсказка - 70 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - - - Справка - 53 - true - true - - true - - false - - СправкаРасширеннаяПодсказка - 71 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - ОсновнаяКоманднаяПанельРасширеннаяПодсказка - 65 - Label - true - true - - Left - - - CommandBar - - Left - - ГруппаЗаголовок 54 @@ -194,7 +20,7 @@ СтрокаБизнесПроцессаРасширеннаяПодсказка - 73 + 66 Label true true @@ -237,7 +63,7 @@ СтрокаЗадачиРасширеннаяПодсказка - 75 + 68 Label true true @@ -277,7 +103,7 @@ ГруппаЗаголовокРасширеннаяПодсказка - 72 + 65 Label true true @@ -315,7 +141,7 @@ ПоАвторуРасширеннаяПодсказка - 78 + 71 Label true true @@ -362,7 +188,7 @@ ПоИсполнителюРасширеннаяПодсказка - 80 + 73 Label true true @@ -408,7 +234,7 @@ false ГруппаОтборРасширеннаяПодсказка - 77 + 70 Label true true @@ -445,7 +271,7 @@ ПоказыватьЗадачиРасширеннаяПодсказка - 83 + 76 Label true true @@ -509,7 +335,7 @@ ГруппаСостояниеРасширеннаяПодсказка - 82 + 75 Label true true @@ -526,6 +352,180 @@ Auto + + ОсновнаяКоманднаяПанель + 47 + + КоманднаяПанельСписка + 45 + true + true + + true + + + КоманднаяПанельСпискаРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + + Item.Список + + + + ПринятьКИсполнению + 61 + true + true + + true + + + ПринятьКИсполнениюРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + Form.Command.ПринятьКИсполнению + Normal + Auto + true + true + UserCmds + Auto + + + ОтменитьПринятиеКИсполнению + 62 + true + true + + true + + + ОтменитьПринятиеКИсполнениюРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + Form.Command.ОтменитьПринятиеКИсполнению + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + КоманднаяПанельФормы + 46 + true + true + + true + + + КоманднаяПанельФормыРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + FormCommandPanelGlobalCommands + + + + ИзменитьФорму + 48 + true + true + + true + + false + + ИзменитьФормуРасширеннаяПодсказка + 83 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + Справка + 53 + true + true + + true + + false + + СправкаРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ОсновнаяКоманднаяПанельРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + CommandBar + + Left + + Список 1 @@ -1278,6 +1278,10 @@ Left true + + OnSaveDataInSettingsAtServer + ПриСохраненииДанныхВНастройкахНаСервере + NotificationProcessing ОбработкаОповещения @@ -1286,13 +1290,9 @@ OnCreateAtServer ПриСозданииНаСервере - - OnClose - ПриЗакрытии - BeforeLoadDataFromSettingsAtServer - ПриЗагрузкеДанныхИзНастроекНаСервере + ПередЗагрузкойДанныхИзНастроекНаСервере DontBlock Use @@ -1385,6 +1385,9 @@ true + + ПоАвтору + ПоИсполнителю @@ -1402,6 +1405,9 @@ true + + ПоИсполнителю + ПоказыватьЗадачи @@ -1423,6 +1429,9 @@ true + + ПоказыватьЗадачи + СтрокаБизнесПроцесса diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl index b8f302587..5e18712b8 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -27,7 +27,7 @@ Если Параметры.Свойство("ВидимостьОтборов") Тогда Элементы.ГруппаОтбор.Видимость = Параметры.ВидимостьОтборов; Иначе - ПоАвтору = ОбщегоНазначения.ТекущийПользователь(); + ПоАвтору = Пользователи.ТекущийПользователь(); КонецЕсли; УстановитьОтбор(); @@ -51,40 +51,30 @@ КонецПроцедуры &НаСервере -Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) +Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки) ИмяНастройки = ?(Параметры.Свойство("БизнесПроцесс"), "ФормаСпискаБП", "ФормаСписка"); - НастройкиОтбора = ХранилищеСистемныхНастроек.Загрузить("Задачи.ЗадачаИсполнителя.Формы.ФормаСписка", ИмяНастройки); + НастройкиОтбора = ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить("Задачи.ЗадачаИсполнителя.Формы.ФормаСписка", ИмяНастройки); Если НастройкиОтбора = Неопределено Тогда - Возврат; + Настройки.Очистить(); + Возврат; КонецЕсли; - + + Для Каждого Элемент Из НастройкиОтбора Цикл + Настройки.Вставить(Элемент.Ключ, Элемент.Значение); + КонецЦикла; УстановитьОтборСписка(Список, НастройкиОтбора); - + КонецПроцедуры -&НаКлиенте -Процедура ПриЗакрытии() - ИмяНастройкиОтборов = ?(Элементы.ГруппаЗаголовок.Видимость, "ФормаСпискаБП", "ФормаСписка"); - СохранитьНастройкиНаСервере(ИмяНастройкиОтборов); +&НаСервере +Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки) + ИмяНастроек = ?(Элементы.ГруппаЗаголовок.Видимость, "ФормаСпискаБП", "ФормаСписка"); + ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить("Задачи.ЗадачаИсполнителя.Формы.ФормаСписка", ИмяНастроек, Настройки); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ - -&НаКлиенте -Процедура ПринятьКИсполнению(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.ПринятьЗадачиКИсполнению(Элементы.Список.ВыделенныеСтроки); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтменитьПринятиеКИсполнению(Команда) - - КомандыРаботыСБизнесПроцессамиКлиент.ОтменитьПринятиеЗадачКИсполнению(Элементы.Список.ВыделенныеСтроки); - -КонецПроцедуры +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ПоИсполнителюПриИзменении(Элемент) @@ -101,6 +91,26 @@ УстановитьОтбор(); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ПринятьКИсполнению(Команда) + + КомандыРаботыСБизнесПроцессамиКлиент.ПринятьЗадачиКИсполнению(Элементы.Список.ВыделенныеСтроки); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьПринятиеКИсполнению(Команда) + + КомандыРаботыСБизнесПроцессамиКлиент.ОтменитьПринятиеЗадачКИсполнению(Элементы.Список.ВыделенныеСтроки); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) @@ -120,7 +130,7 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервере Процедура УстановитьОтбор() @@ -163,13 +173,3 @@ КонецЕсли; КонецПроцедуры - -&НаСервере -Процедура СохранитьНастройкиНаСервере(ИмяНастроек) - ПараметрыОтбора = Новый Соответствие(); - ПараметрыОтбора.Вставить("ПоАвтору", ПоАвтору); - ПараметрыОтбора.Вставить("ПоИсполнителю", ПоИсполнителю); - ПараметрыОтбора.Вставить("ПоказыватьЗадачи", ПоказыватьЗадачи); - ХранилищеСистемныхНастроек.Сохранить("Задачи.ЗадачаИсполнителя.Формы.ФормаСписка", ИмяНастроек, ПараметрыОтбора); -КонецПроцедуры - diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html index ad6c6a6a8..b86815473 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html @@ -4,4 +4,4 @@

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

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

    См. также:

    -

     

    \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl index a8b40f179..de225651d 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Возвращает Истина, если в задаче указан исполнитель или роль исполнителя. // @@ -7,9 +9,12 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) - ЗадачаБылаВыполнена = Ссылка.Выполнена; + ЗадачаБылаВыполнена = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Выполнена"); Если НЕ ЗадачаБылаВыполнена И Выполнена Тогда Если НЕ РеквизитыАдресацииЗаполнены() Тогда @@ -55,7 +60,7 @@ // потребуется для отчетов. Такую запись делаем только в том // случае, если в базе было не выполнено, а в объекте стало выполнено Если НЕ ЗначениеЗаполнено(Исполнитель) Тогда - Исполнитель = ОбщегоНазначения.ТекущийПользователь(); + Исполнитель = Пользователи.ТекущийПользователь(); КонецЕсли; Если ДатаИсполнения = Дата(1, 1, 1) Тогда ДатаИсполнения = ТекущаяДатаСеанса(); @@ -70,9 +75,7 @@ СостояниеБизнесПроцесса = Перечисления.СостоянияБизнесПроцессов.Активен; КонецЕсли; - Если ПустаяСтрока(ПредметСтрокой) Тогда - ПредметСтрокой = ОбщегоНазначения.ПредметСтрокой(Предмет); - КонецЕсли; + ПредметСтрокой = ОбщегоНазначения.ПредметСтрокой(Предмет); ПредыдущаяПометкаУдаления = Ложь; Если НЕ Ссылка.Пустая() Тогда @@ -95,26 +98,15 @@ ДатаПринятияКИсполнению = ТекущаяДатаСеанса(); КонецЕсли; - // УправлениеДоступом + // СтандартныеПодсистемы.УправлениеДоступом ГруппаИсполнителейЗадач = БизнесПроцессыИЗадачиВызовСервера.ГруппаИсполнителейЗадач(РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации); - // Конец УправлениеДоступом + // Конец СтандартныеПодсистемы.УправлениеДоступом -КонецПроцедуры - -Процедура УстановитьСостояниеПодчиненныхБизнесПроцессов(НовоеСостояние) - - НачатьТранзакцию(); - ПодчиненныеБизнесПроцессы = БизнесПроцессыИЗадачиВызовСервера.ПолучитьБизнесПроцессыГлавнойЗадачи(Ссылка); - Если ПодчиненныеБизнесПроцессы <> Неопределено Тогда - Для Каждого ПодчиненныйБизнесПроцесс Из ПодчиненныеБизнесПроцессы Цикл - БизнесПроцессОбъект = ПодчиненныйБизнесПроцесс.ПолучитьОбъект(); - БизнесПроцессОбъект.Заблокировать(); - БизнесПроцессОбъект.Состояние = НовоеСостояние; - БизнесПроцессОбъект.Записать(); - КонецЦикла; - КонецЕсли; - ЗафиксироватьТранзакцию(); + // Заполнение реквизита ДатаПринятияКИсполнению + Если ПринятаКИсполнению И ДатаПринятияКИсполнению = Дата('00010101') Тогда + ДатаПринятияКИсполнению = ТекущаяДатаСеанса(); + КонецЕсли; КонецПроцедуры @@ -137,4 +129,27 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура УстановитьСостояниеПодчиненныхБизнесПроцессов(НовоеСостояние) + + НачатьТранзакцию(); + Попытка + ПодчиненныеБизнесПроцессы = БизнесПроцессыИЗадачиВызовСервера.ПолучитьБизнесПроцессыГлавнойЗадачи(Ссылка); + Если ПодчиненныеБизнесПроцессы <> Неопределено Тогда + Для Каждого ПодчиненныйБизнесПроцесс Из ПодчиненныеБизнесПроцессы Цикл + БизнесПроцессОбъект = ПодчиненныйБизнесПроцесс.ПолучитьОбъект(); + БизнесПроцессОбъект.Заблокировать(); + БизнесПроцессОбъект.Состояние = НовоеСостояние; + БизнесПроцессОбъект.Записать(); + КонецЦикла; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ЗадачаИсполнителя.mdo b/SSL/src/Tasks/ЗадачаИсполнителя/ЗадачаИсполнителя.mdo index 4a7eb5209..a5ea6ea37 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ЗадачаИсполнителя.mdo +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ЗадачаИсполнителя.mdo @@ -443,6 +443,10 @@ 150
    + + ru + Имя автора задачи + diff --git a/SSL/src/WebServices/Exchange/Exchange.mdo b/SSL/src/WebServices/Exchange/Exchange.mdo new file mode 100644 index 000000000..79688b932 --- /dev/null +++ b/SSL/src/WebServices/Exchange/Exchange.mdo @@ -0,0 +1,982 @@ + + + Exchange + + ru + Exchange + + http://www.1c.ru/SSL/Exchange + exchange.1cws + 20 + + Upload + + ru + Upload + + Выполняет выгрузку данных + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьВыгрузку + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + Data + + ru + Data + + + ValueStorage + http://v8.1c.ru/8.1/data/core + + true + Out + + + + Download + + ru + Download + + Выполняет загрузку данных + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьЗагрузку + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + Data + + ru + Data + + + ValueStorage + http://v8.1c.ru/8.1/data/core + + + + + UploadData + + ru + Upload data + + Выполняет выгрузку данных + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьВыгрузкуДанных + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + FileID + + ru + File ID + + + string + http://www.w3.org/2001/XMLSchema + + true + InOut + + + ContinuousOperation + + ru + Continuous operation + + + boolean + http://www.w3.org/2001/XMLSchema + + true + InOut + + + Operation + + ru + Operation + + + string + http://www.w3.org/2001/XMLSchema + + true + InOut + + + ContinuousOperationAllowed + + ru + Continuous operation allowed + + + boolean + http://www.w3.org/2001/XMLSchema + + + + + DownloadData + + ru + Download data + + Выполняет загрузку данных + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьЗагрузкуДанных + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + FileID + + ru + File ID + + + string + http://www.w3.org/2001/XMLSchema + + + + ContinuousOperation + + ru + Continuous operation + + + boolean + http://www.w3.org/2001/XMLSchema + + true + InOut + + + Operation + + ru + Operation + + + string + http://www.w3.org/2001/XMLSchema + + true + InOut + + + ContinuousOperationAllowed + + ru + Continuous operation allowed + + + boolean + http://www.w3.org/2001/XMLSchema + + + + + GetIBParameters + + ru + Get IBParameters + + + string + http://www.w3.org/2001/XMLSchema + + ПолучитьПараметрыИнформационнойБазы + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + true + + + ResultMessage + + ru + Result message + + + string + http://www.w3.org/2001/XMLSchema + + true + InOut + + + + GetIBData + + ru + Get IBData + + + string + http://www.w3.org/2001/XMLSchema + + ПолучитьДанныеИнформационнойБазы + Managed + + TableName + + ru + Table name + + + string + http://www.w3.org/2001/XMLSchema + + + + + GetCommonNodsData + + ru + Get common nods data + + + string + http://www.w3.org/2001/XMLSchema + + ПолучитьОбщиеДанныеУзлов + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + + CreateExchange + + ru + Create exchange + + + string + http://www.w3.org/2001/XMLSchema + + true + СоздатьОбменДанными + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + Parameters + + ru + Parameters + + + string + http://www.w3.org/2001/XMLSchema + + + + FilterSettings + + ru + Filter settings + + + string + http://www.w3.org/2001/XMLSchema + + + + AdditionalSettings + + ru + Additional settings + + + string + http://www.w3.org/2001/XMLSchema + + + + + UpdateExchange + + ru + Update exchange + + + string + http://www.w3.org/2001/XMLSchema + + true + ОбновитьНастройкиОбменаДанными + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + AdditionalSettings + + ru + Additional settings + + + string + http://www.w3.org/2001/XMLSchema + + + + + RegisterOnlyCatalogData + + ru + Register only catalog data + + + string + http://www.w3.org/2001/XMLSchema + + true + ЗарегистрироватьИзмененияТолькоСправочников + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + ContinuousOperation + + ru + Continuous operation + + + boolean + http://www.w3.org/2001/XMLSchema + + InOut + + + Operation + + ru + Operation + + + string + http://www.w3.org/2001/XMLSchema + + true + Out + + + + RegisterAllDataExceptCatalogs + + ru + Register all data except catalogs + + + string + http://www.w3.org/2001/XMLSchema + + true + ЗарегистрироватьИзмененияВсехДанныхКромеСправочников + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + ContinuousOperation + + ru + Continuous operation + + + boolean + http://www.w3.org/2001/XMLSchema + + InOut + + + Operation + + ru + Operation + + + string + http://www.w3.org/2001/XMLSchema + + true + Out + + + + GetContinuousOperationStatus + + ru + Get continuous operation status + + + string + http://www.w3.org/2001/XMLSchema + + ПолучитьСостояниеДлительнойОперации + Managed + + Operation + + ru + Operation + + + string + http://www.w3.org/2001/XMLSchema + + + + ResultMessage + + ru + Result message + + + string + http://www.w3.org/2001/XMLSchema + + true + Out + + + + GetFunctionalOption + + ru + Get functional option + + + boolean + http://www.w3.org/2001/XMLSchema + + ПолучитьЗначениеФункциональнойОпции + Managed + + Name + + ru + Name + + + string + http://www.w3.org/2001/XMLSchema + + + + + PrepareGetFile + + ru + Prepare get file + + + string + http://www.w3.org/2001/XMLSchema + + true + PrepareGetFile + Managed + + FileId + + ru + File id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + BlockSize + + ru + Block size + + В КБ, 0 не разделять + + decimal + http://www.w3.org/2001/XMLSchema + + + + TransferId + + ru + Transfer id + + + UUID + http://v8.1c.ru/8.1/data/core + + Out + + + PartQuantity + + ru + Part quantity + + + int + http://www.w3.org/2001/XMLSchema + + Out + + + + GetFilePart + + ru + Get file part + + + string + http://www.w3.org/2001/XMLSchema + + true + GetFilePart + Managed + + TransferId + + ru + Transfer id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + PartNumber + + ru + Part number + + + int + http://www.w3.org/2001/XMLSchema + + + + PartData + + ru + Part data + + + base64Binary + http://www.w3.org/2001/XMLSchema + + true + Out + + + + ReleaseFile + + ru + Release file + + + string + http://www.w3.org/2001/XMLSchema + + true + ReleaseFile + Managed + + TransferId + + ru + Transfer id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + + PutFilePart + + ru + Put file part + + + string + http://www.w3.org/2001/XMLSchema + + true + PutFilePart + Managed + + TransferId + + ru + Transfer id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + PartNumber + + ru + Part number + + + int + http://www.w3.org/2001/XMLSchema + + true + + + PartData + + ru + Part data + + + base64Binary + http://www.w3.org/2001/XMLSchema + + + + + SaveFileFromParts + + ru + Save file from parts + + + string + http://www.w3.org/2001/XMLSchema + + true + SaveFileFromParts + Managed + + TransferId + + ru + Transfer id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + PartQuantity + + ru + Part quantity + + + int + http://www.w3.org/2001/XMLSchema + + + + FileId + + ru + File id + + + UUID + http://v8.1c.ru/8.1/data/core + + Out + + + + PutFileIntoStorage + + ru + Put file into storage + + + string + http://www.w3.org/2001/XMLSchema + + true + PutFileIntoStorage + Managed + + FileName + + ru + File name + + + string + http://www.w3.org/2001/XMLSchema + + + + FileId + + ru + File id + + + UUID + http://v8.1c.ru/8.1/data/core + + Out + + + + GetFileFromStorage + + ru + Get file from storage + + + string + http://www.w3.org/2001/XMLSchema + + GetFileFromStorage + Managed + + FileId + + ru + File id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + + FileExists + + ru + File exists + + + boolean + http://www.w3.org/2001/XMLSchema + + FileExists + Managed + + FileName + + ru + File name + + + string + http://www.w3.org/2001/XMLSchema + + + + diff --git a/SSL/src/WebServices/Exchange/Module.bsl b/SSL/src/WebServices/Exchange/Module.bsl new file mode 100644 index 000000000..caa75dc59 --- /dev/null +++ b/SSL/src/WebServices/Exchange/Module.bsl @@ -0,0 +1,593 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики операций + +// Соответствует операции Upload +Функция ВыполнитьВыгрузку(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ХранилищеСообщенияОбмена) + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + УстановитьПривилегированныйРежим(Истина); + + СообщениеОбмена = ""; + + ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезСтроку(ИмяПланаОбмена, КодУзлаИнформационнойБазы, СообщениеОбмена); + + ХранилищеСообщенияОбмена = Новый ХранилищеЗначения(СообщениеОбмена, Новый СжатиеДанных(9)); + +КонецФункции + +// Соответствует операции Download +Функция ВыполнитьЗагрузку(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ХранилищеСообщенияОбмена) + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + УстановитьПривилегированныйРежим(Истина); + + ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезСтроку(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ХранилищеСообщенияОбмена.Получить()); + +КонецФункции + +// Соответствует операции UploadData +Функция ВыполнитьВыгрузкуДанных(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ИдентификаторФайлаСтрокой, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена + ) + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + ИдентификаторФайла = Новый УникальныйИдентификатор; + ИдентификаторФайлаСтрокой = Строка(ИдентификаторФайла); + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторФайла); + + Иначе + + ВыполнитьВыгрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, ДлительнаяОперацияРазрешена); + + КонецЕсли; + +КонецФункции + +// Соответствует операции DownloadData +Функция ВыполнитьЗагрузкуДанных(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ИдентификаторФайлаСтрокой, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена + ) + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + ИдентификаторФайла = Новый УникальныйИдентификатор(ИдентификаторФайлаСтрокой); + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторФайла); + + Иначе + + ВыполнитьЗагрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, ДлительнаяОперацияРазрешена); + + КонецЕсли; + +КонецФункции + +// Соответствует операции GetIBParameters +Функция ПолучитьПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке) + + Возврат ОбменДаннымиСервер.ПолучитьПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке); + +КонецФункции + +// Соответствует операции GetIBData +Функция ПолучитьДанныеИнформационнойБазы(ПолноеИмяТаблицы) + + Результат = Новый Структура("СвойстваОбъектаМетаданных, ТаблицаБазыКорреспондента"); + + Результат.СвойстваОбъектаМетаданных = ЗначениеВСтрокуВнутр(ОбменДаннымиСервер.СвойстваОбъектаМетаданных(ПолноеИмяТаблицы)); + Результат.ТаблицаБазыКорреспондента = ЗначениеВСтрокуВнутр(ОбменДаннымиСервер.ПолучитьОбъектыТаблицы(ПолноеИмяТаблицы)); + + Возврат ЗначениеВСтрокуВнутр(Результат); +КонецФункции + +// Соответствует операции GetCommonNodsData +Функция ПолучитьОбщиеДанныеУзлов(ИмяПланаОбмена) + + УстановитьПривилегированныйРежим(Истина); + + Возврат ЗначениеВСтрокуВнутр(ОбменДаннымиСервер.ДанныеДляТабличныхЧастейУзловЭтойИнформационнойБазы(ИмяПланаОбмена)); + +КонецФункции + +// Соответствует операции CreateExchange +Функция СоздатьОбменДанными(ИмяПланаОбмена, СтрокаПараметров, НастройкаОтборовСтрокой, ЗначенияПоУмолчаниюСтрокой) + + УстановитьПривилегированныйРежим(Истина); + + // Получаем обработку помощника настройки обмена во второй базе + ПомощникСозданияОбменаДанными = Обработки.ПомощникСозданияОбменаДанными.Создать(); + ПомощникСозданияОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; + + Отказ = Ложь; + + // Загружаем параметры помощника из строки в обработку помощника + ПомощникСозданияОбменаДанными.ВыполнитьЗагрузкуПараметровМастера(Отказ, СтрокаПараметров); + + Если Отказ Тогда + Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке()); + ВызватьИсключение Сообщение; + КонецЕсли; + + ПомощникСозданияОбменаДанными.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; + ПомощникСозданияОбменаДанными.ЭтоНастройкаРаспределеннойИнформационнойБазы = Ложь; + ПомощникСозданияОбменаДанными.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; + ПомощникСозданияОбменаДанными.ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы")); + + // Выполняем создание настройки обмена + ПомощникСозданияОбменаДанными.ВебСервисВыполнитьДействияПоНастройкеНовогоОбменаДанными( + Отказ, + ЗначениеИзСтрокиВнутр(НастройкаОтборовСтрокой), + ЗначениеИзСтрокиВнутр(ЗначенияПоУмолчаниюСтрокой) + ); + + Если Отказ Тогда + Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке()); + ВызватьИсключение Сообщение; + КонецЕсли; + + Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменДанными") = Ложь Тогда + + Константы.ИспользоватьОбменДанными.Установить(Истина); + + КонецЕсли; + +КонецФункции + +// Соответствует операции UpdateExchange +Функция ОбновитьНастройкиОбменаДанными(ИмяПланаОбмена, КодУзла, ЗначенияПоУмолчаниюСтрокой) + + ОбменДаннымиСервер.ВнешнееСоединениеОбновитьНастройкиОбменаДанными(ИмяПланаОбмена, КодУзла, ЗначенияПоУмолчаниюСтрокой); + +КонецФункции + +// Соответствует операции RegisterOnlyCatalogData +Функция ЗарегистрироватьИзмененияТолькоСправочников(ИмяПланаОбмена, КодУзла, ДлительнаяОперация, ИдентификаторОперации) + + ЗарегистрироватьДанныеДляНачальнойВыгрузки(ИмяПланаОбмена, КодУзла, ДлительнаяОперация, ИдентификаторОперации, Истина); + +КонецФункции + +// Соответствует операции RegisterAllDataExceptCatalogs +Функция ЗарегистрироватьИзмененияВсехДанныхКромеСправочников(ИмяПланаОбмена, КодУзла, ДлительнаяОперация, ИдентификаторОперации) + + ЗарегистрироватьДанныеДляНачальнойВыгрузки(ИмяПланаОбмена, КодУзла, ДлительнаяОперация, ИдентификаторОперации, Ложь); + +КонецФункции + +// Соответствует операции GetContinuousOperationStatus +Функция ПолучитьСостояниеДлительнойОперации(ИдентификаторОперации, СтрокаСообщенияОбОшибке) + + СостоянияФоновогоЗадания = Новый Соответствие; + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.Активно, "Active"); + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.Завершено, "Completed"); + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.ЗавершеноАварийно, "Failed"); + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.Отменено, "Canceled"); + + УстановитьПривилегированныйРежим(Истина); + + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(ИдентификаторОперации)); + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + + КонецЕсли; + + Возврат СостоянияФоновогоЗадания.Получить(ФоновоеЗадание.Состояние); +КонецФункции + +// Соответствует операции GetFunctionalOption +Функция ПолучитьЗначениеФункциональнойОпции(Имя) + + Возврат ПолучитьФункциональнуюОпцию(Имя); + +КонецФункции + +// Соответствует операции PrepareGetFile +Функция PrepareGetFile(FileId, BlockSize, TransferId, PartQuantity) + + УстановитьПривилегированныйРежим(Истина); + + TransferId = Новый УникальныйИдентификатор; + + ИмяИсходногоФайла = ОбменДаннымиСервер.ПолучитьФайлИзХранилища(FileId); + + ВременныйКаталог = ВременныйКаталогВыгрузки(TransferId); + + Файл = Новый Файл(ИмяИсходногоФайла); + + ИмяИсходногоФайлаВоВременномКаталоге = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, Файл.Имя); + ИмяНеразделенногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, "data.zip"); + + СоздатьКаталог(ВременныйКаталог); + + ПереместитьФайл(ИмяИсходногоФайла, ИмяИсходногоФайлаВоВременномКаталоге); + + Архиватор = Новый ЗаписьZipФайла(ИмяНеразделенногоФайла,,,, УровеньСжатияZIP.Максимальный); + Архиватор.Добавить(ИмяИсходногоФайлаВоВременномКаталоге); + Архиватор.Записать(); + + Если BlockSize <> 0 Тогда + // Разделение файла на части + ИменаФайлов = РазделитьФайл(ИмяНеразделенногоФайла, BlockSize * 1024); + PartQuantity = ИменаФайлов.Количество(); + Иначе + PartQuantity = 1; + ПереместитьФайл(ИмяНеразделенногоФайла, ИмяНеразделенногоФайла + ".1"); + КонецЕсли; + +КонецФункции + +// Соответствует операции GetFilePart +Функция GetFilePart(TransferId, PartNumber, PartData) + + ИмяФайла = "data.zip.[n]"; + ИмяФайла = СтрЗаменить(ИмяФайла, "[n]", Формат(PartNumber, "ЧГ=0")); + + ИменаФайлов = НайтиФайлы(ВременныйКаталогВыгрузки(TransferId), ИмяФайла); + Если ИменаФайлов.Количество() = 0 Тогда + + ШаблонСообщения = НСтр("ru = 'Не найден фрагмент %1 сессии передачи с идентификатором %2'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(PartNumber), Строка(TransferId)); + ВызватьИсключение(ТекстСообщения); + + ИначеЕсли ИменаФайлов.Количество() > 1 Тогда + + ШаблонСообщения = НСтр("ru = 'Найдено несколько фрагментов %1 сессии передачи с идентификатором %2'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(PartNumber), Строка(TransferId)); + ВызватьИсключение(ТекстСообщения); + + КонецЕсли; + + ИмяФайлаЧасти = ИменаФайлов[0].ПолноеИмя; + PartData = Новый ДвоичныеДанные(ИмяФайлаЧасти); + +КонецФункции + +// Соответствует операции ReleaseFile +Функция ReleaseFile(TransferId) + + Попытка + УдалитьФайлы(ВременныйКаталогВыгрузки(TransferId)); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + +КонецФункции + +// Соответствует операции PutFilePart +Функция PutFilePart(TransferId, PartNumber, PartData) + + ВременныйКаталог = ВременныйКаталогВыгрузки(TransferId); + + Если PartNumber = 1 Тогда + + СоздатьКаталог(ВременныйКаталог); + + КонецЕсли; + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, ПолучитьИмяФайлаЧасти(PartNumber)); + + PartData.Записать(ИмяФайла); + +КонецФункции + +// Соответствует операции SaveFileFromParts +Функция SaveFileFromParts(TransferId, PartQuantity, FileId) + + УстановитьПривилегированныйРежим(Истина); + + ВременныйКаталог = ВременныйКаталогВыгрузки(TransferId); + + ФайлыЧастейДляОбъединения = Новый Массив; + + Для НомерЧасти = 1 По PartQuantity Цикл + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, ПолучитьИмяФайлаЧасти(НомерЧасти)); + + Если НайтиФайлы(ИмяФайла).Количество() = 0 Тогда + ШаблонСообщения = НСтр("ru = 'Не найден фрагмент %1 сессии передачи с идентификатором %2. + |Необходимо убедиться, что в форме настройки программы заданы значения констант + |КаталогВременныхФайловСообщенийОбменаДляLinux и КаталогВременныхФайловСообщенийОбменаДляWindows.'" + ); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(НомерЧасти), Строка(TransferId)); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + ФайлыЧастейДляОбъединения.Добавить(ИмяФайла); + + КонецЦикла; + + ИмяАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, "data.zip"); + + ОбъединитьФайлы(ФайлыЧастейДляОбъединения, ИмяАрхива); + + Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); + + Если Разархиватор.Элементы.Количество() = 0 Тогда + Попытка + УдалитьФайлы(ВременныйКаталог); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); + КонецЕсли; + + КаталогВыгрузки = ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(); + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВыгрузки, Разархиватор.Элементы[0].Имя); + + Разархиватор.Извлечь(Разархиватор.Элементы[0], КаталогВыгрузки); + Разархиватор.Закрыть(); + + FileId = ОбменДаннымиСервер.ПоместитьФайлВХранилище(ИмяФайла); + + Попытка + УдалитьФайлы(ВременныйКаталог); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецФункции + +// Соответствует операции PutFileIntoStorage +Функция PutFileIntoStorage(FileName, FileId) + + УстановитьПривилегированныйРежим(Истина); + + FileId = ОбменДаннымиСервер.ПоместитьФайлВХранилище(FileName); + +КонецФункции + +// Соответствует операции GetFileFromStorage +Функция GetFileFromStorage(FileId) + + УстановитьПривилегированныйРежим(Истина); + + ИмяИсходногоФайла = ОбменДаннымиСервер.ПолучитьФайлИзХранилища(FileId); + + Файл = Новый Файл(ИмяИсходногоФайла); + + Возврат Файл.Имя; +КонецФункции + +// Соответствует операции FileExists +Функция FileExists(FileName) + + УстановитьПривилегированныйРежим(Истина); + + ПолноеИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(), FileName); + + Файл = Новый Файл(ПолноеИмяВременногоФайла); + + Возврат Файл.Существует(); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции + +Процедура ВыполнитьВыгрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена + ) + + Параметры = Новый Массив; + Параметры.Добавить(ИмяПланаОбмена); + Параметры.Добавить(КодУзлаИнформационнойБазы); + Параметры.Добавить(ИдентификаторФайла); + + ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов", + Параметры, + КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы), + НСтр("ru = 'Выполнение обмена данными через веб-сервис.'") + ); + + Попытка + Таймаут = ?(ДлительнаяОперацияРазрешена, 5, Неопределено); + + ФоновоеЗадание.ОжидатьЗавершения(Таймаут); + Исключение + + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); + + Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + + ИдентификаторОперации = Строка(ФоновоеЗадание.УникальныйИдентификатор); + ДлительнаяОперация = Истина; + Возврат; + + Иначе + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + КонецЕсли; + + ВызватьИсключение; + КонецЕсли; + + КонецПопытки; + + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); + + Если ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Завершено Тогда + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + КонецЕсли; + + ВызватьИсключение НСтр("ru = 'Ошибка при выгрузке данных через веб-сервис.'"); + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьЗагрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена + ) + + Параметры = Новый Массив; + Параметры.Добавить(ИмяПланаОбмена); + Параметры.Добавить(КодУзлаИнформационнойБазы); + Параметры.Добавить(ИдентификаторФайла); + + ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов", + Параметры, + КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы), + НСтр("ru = 'Выполнение обмена данными через веб-сервис.'") + ); + + Попытка + Таймаут = ?(ДлительнаяОперацияРазрешена, 5, Неопределено); + + ФоновоеЗадание.ОжидатьЗавершения(Таймаут); + Исключение + + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); + + Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + + ИдентификаторОперации = Строка(ФоновоеЗадание.УникальныйИдентификатор); + ДлительнаяОперация = Истина; + Возврат; + + Иначе + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + КонецЕсли; + ВызватьИсключение; + КонецЕсли; + + КонецПопытки; + + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); + + Если ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Завершено Тогда + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + КонецЕсли; + + ВызватьИсключение НСтр("ru = 'Ошибка при загрузке данных через веб-сервис.'"); + КонецЕсли; + +КонецПроцедуры + +Функция КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ПланОбмена, КодУзла) + + Ключ = "ПланОбмена:[ПланОбмена] КодУзла:[КодУзла]"; + Ключ = СтрЗаменить(Ключ, "[ПланОбмена]", ПланОбмена); + Ключ = СтрЗаменить(Ключ, "[КодУзла]", КодУзла); + + Возврат Ключ; +КонецФункции + +Функция ЗарегистрироватьДанныеДляНачальнойВыгрузки(Знач ИмяПланаОбмена, Знач КодУзла, ДлительнаяОперация, ИдентификаторОперации, ТолькоСправочники) + + УстановитьПривилегированныйРежим(Истина); + + УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла); + + Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + Сообщение = НСтр("ru = 'Не найден узел плана обмена; имя плана обмена %1; код узла %2'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ИмяПланаОбмена, КодУзла); + ВызватьИсключение Сообщение; + КонецЕсли; + + Данные = ?(ТолькоСправочники, + ОбменДаннымиСервер.СправочникиПланаОбмена(ИмяПланаОбмена), + ОбменДаннымиСервер.ВсеДанныеПланаОбменаКромеСправочников(ИмяПланаОбмена) + ); + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + ОбменДаннымиСервер.ЗарегистрироватьДанныеДляНачальнойВыгрузки(УзелИнформационнойБазы, Данные); + + Иначе + + Параметры = Новый Массив; + Параметры.Добавить(УзелИнформационнойБазы); + Параметры.Добавить(Данные); + + ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ЗарегистрироватьДанныеДляНачальнойВыгрузки", + Параметры, + , + НСтр("ru = 'Создание обмена данными.'") + ); + + Попытка + ФоновоеЗадание.ОжидатьЗавершения(5); + Исключение + + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); + + Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + + ИдентификаторОперации = Строка(ФоновоеЗадание.УникальныйИдентификатор); + ДлительнаяОперация = Истина; + + Иначе + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + КонецЕсли; + + ВызватьИсключение; + КонецЕсли; + + КонецПопытки; + + КонецЕсли; + +КонецФункции + +Функция ПолучитьИмяФайлаЧасти(PartNumber) + + Результат = "data.zip.[n]"; + + Возврат СтрЗаменить(Результат, "[n]", Формат(PartNumber, "ЧГ=0")); +КонецФункции + +Функция ВременныйКаталогВыгрузки(Знач ИдентификаторСессии) + + УстановитьПривилегированныйРежим(Истина); + + ВременныйКаталог = "{ИдентификаторСессии}"; + ВременныйКаталог = СтрЗаменить(ВременныйКаталог, "ИдентификаторСессии", Строка(ИдентификаторСессии)); + + Результат = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(), ВременныйКаталог); + + Возврат Результат; +КонецФункции + diff --git a/SSL/src/WebServices/Exchange_2_0_1_6/Exchange_2_0_1_6.mdo b/SSL/src/WebServices/Exchange_2_0_1_6/Exchange_2_0_1_6.mdo new file mode 100644 index 000000000..91d2a511b --- /dev/null +++ b/SSL/src/WebServices/Exchange_2_0_1_6/Exchange_2_0_1_6.mdo @@ -0,0 +1,988 @@ + + + Exchange_2_0_1_6 + + ru + Exchange 2.0.1.6 + + http://www.1c.ru/SSL/Exchange_2_0_1_6 + + http://v8.1c.ru/8.1/data/core + + + http://v8.1c.ru/8.1/data/enterprise/current-config + + exchange_2_0_1_6.1cws + 20 + + Upload + + ru + Upload + + Выполняет выгрузку данных + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьВыгрузку + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + Data + + ru + Data + + + ValueStorage + http://v8.1c.ru/8.1/data/core + + true + Out + + + + Download + + ru + Download + + Выполняет загрузку данных + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьЗагрузку + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + Data + + ru + Data + + + ValueStorage + http://v8.1c.ru/8.1/data/core + + + + + UploadData + + ru + Upload data + + Выполняет выгрузку данных + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьВыгрузкуДанных + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + FileID + + ru + File ID + + + string + http://www.w3.org/2001/XMLSchema + + true + InOut + + + ContinuousOperation + + ru + Continuous operation + + + boolean + http://www.w3.org/2001/XMLSchema + + true + InOut + + + Operation + + ru + Operation + + + string + http://www.w3.org/2001/XMLSchema + + true + InOut + + + ContinuousOperationAllowed + + ru + Continuous operation allowed + + + boolean + http://www.w3.org/2001/XMLSchema + + + + + DownloadData + + ru + Download data + + Выполняет загрузку данных + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьЗагрузкуДанных + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + FileID + + ru + File ID + + + string + http://www.w3.org/2001/XMLSchema + + + + ContinuousOperation + + ru + Continuous operation + + + boolean + http://www.w3.org/2001/XMLSchema + + true + InOut + + + Operation + + ru + Operation + + + string + http://www.w3.org/2001/XMLSchema + + true + InOut + + + ContinuousOperationAllowed + + ru + Continuous operation allowed + + + boolean + http://www.w3.org/2001/XMLSchema + + + + + GetIBParameters + + ru + Get IBParameters + + + Structure + http://v8.1c.ru/8.1/data/core + + ПолучитьПараметрыИнформационнойБазы + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + true + + + ResultMessage + + ru + Result message + + + string + http://www.w3.org/2001/XMLSchema + + true + InOut + + + + GetIBData + + ru + Get IBData + + + Structure + http://v8.1c.ru/8.1/data/core + + ПолучитьДанныеИнформационнойБазы + Managed + + TableName + + ru + Table name + + + string + http://www.w3.org/2001/XMLSchema + + + + + GetCommonNodsData + + ru + Get common nods data + + + Structure + http://v8.1c.ru/8.1/data/core + + ПолучитьОбщиеДанныеУзлов + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + + CreateExchange + + ru + Create exchange + + + string + http://www.w3.org/2001/XMLSchema + + true + СоздатьОбменДанными + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + Parameters + + ru + Parameters + + + string + http://www.w3.org/2001/XMLSchema + + + + FilterSettings + + ru + Filter settings + + + Structure + http://v8.1c.ru/8.1/data/core + + + + AdditionalSettings + + ru + Additional settings + + + Structure + http://v8.1c.ru/8.1/data/core + + + + + UpdateExchange + + ru + Update exchange + + + string + http://www.w3.org/2001/XMLSchema + + true + ОбновитьНастройкиОбменаДанными + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + AdditionalSettings + + ru + Additional settings + + + Structure + http://v8.1c.ru/8.1/data/core + + + + + RegisterOnlyCatalogData + + ru + Register only catalog data + + + string + http://www.w3.org/2001/XMLSchema + + true + ЗарегистрироватьИзмененияТолькоСправочников + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + ContinuousOperation + + ru + Continuous operation + + + boolean + http://www.w3.org/2001/XMLSchema + + InOut + + + Operation + + ru + Operation + + + string + http://www.w3.org/2001/XMLSchema + + true + Out + + + + RegisterAllDataExceptCatalogs + + ru + Register all data except catalogs + + + string + http://www.w3.org/2001/XMLSchema + + true + ЗарегистрироватьИзмененияВсехДанныхКромеСправочников + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + ContinuousOperation + + ru + Continuous operation + + + boolean + http://www.w3.org/2001/XMLSchema + + InOut + + + Operation + + ru + Operation + + + string + http://www.w3.org/2001/XMLSchema + + true + Out + + + + GetContinuousOperationStatus + + ru + Get continuous operation status + + + string + http://www.w3.org/2001/XMLSchema + + ПолучитьСостояниеДлительнойОперации + Managed + + Operation + + ru + Operation + + + string + http://www.w3.org/2001/XMLSchema + + + + ResultMessage + + ru + Result message + + + string + http://www.w3.org/2001/XMLSchema + + true + Out + + + + GetFunctionalOption + + ru + Get functional option + + + boolean + http://www.w3.org/2001/XMLSchema + + ПолучитьЗначениеФункциональнойОпции + Managed + + Name + + ru + Name + + + string + http://www.w3.org/2001/XMLSchema + + + + + PrepareGetFile + + ru + Prepare get file + + + string + http://www.w3.org/2001/XMLSchema + + true + PrepareGetFile + Managed + + FileId + + ru + File id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + BlockSize + + ru + Block size + + В КБ, 0 не разделять + + decimal + http://www.w3.org/2001/XMLSchema + + + + TransferId + + ru + Transfer id + + + UUID + http://v8.1c.ru/8.1/data/core + + Out + + + PartQuantity + + ru + Part quantity + + + int + http://www.w3.org/2001/XMLSchema + + Out + + + + GetFilePart + + ru + Get file part + + + string + http://www.w3.org/2001/XMLSchema + + true + GetFilePart + Managed + + TransferId + + ru + Transfer id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + PartNumber + + ru + Part number + + + int + http://www.w3.org/2001/XMLSchema + + + + PartData + + ru + Part data + + + base64Binary + http://www.w3.org/2001/XMLSchema + + true + Out + + + + ReleaseFile + + ru + Release file + + + string + http://www.w3.org/2001/XMLSchema + + true + ReleaseFile + Managed + + TransferId + + ru + Transfer id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + + PutFilePart + + ru + Put file part + + + string + http://www.w3.org/2001/XMLSchema + + true + PutFilePart + Managed + + TransferId + + ru + Transfer id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + PartNumber + + ru + Part number + + + int + http://www.w3.org/2001/XMLSchema + + true + + + PartData + + ru + Part data + + + base64Binary + http://www.w3.org/2001/XMLSchema + + + + + SaveFileFromParts + + ru + Save file from parts + + + string + http://www.w3.org/2001/XMLSchema + + true + SaveFileFromParts + Managed + + TransferId + + ru + Transfer id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + PartQuantity + + ru + Part quantity + + + int + http://www.w3.org/2001/XMLSchema + + + + FileId + + ru + File id + + + UUID + http://v8.1c.ru/8.1/data/core + + Out + + + + PutFileIntoStorage + + ru + Put file into storage + + + string + http://www.w3.org/2001/XMLSchema + + true + PutFileIntoStorage + Managed + + FileName + + ru + File name + + + string + http://www.w3.org/2001/XMLSchema + + + + FileId + + ru + File id + + + UUID + http://v8.1c.ru/8.1/data/core + + Out + + + + GetFileFromStorage + + ru + Get file from storage + + + string + http://www.w3.org/2001/XMLSchema + + GetFileFromStorage + Managed + + FileId + + ru + File id + + + UUID + http://v8.1c.ru/8.1/data/core + + + + + FileExists + + ru + File exists + + + boolean + http://www.w3.org/2001/XMLSchema + + FileExists + Managed + + FileName + + ru + File name + + + string + http://www.w3.org/2001/XMLSchema + + + + diff --git a/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl b/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl new file mode 100644 index 000000000..8e3b9c143 --- /dev/null +++ b/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl @@ -0,0 +1,595 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики операций + +// Соответствует операции Upload +Функция ВыполнитьВыгрузку(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ХранилищеСообщенияОбмена) + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + УстановитьПривилегированныйРежим(Истина); + + СообщениеОбмена = ""; + + ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезСтроку(ИмяПланаОбмена, КодУзлаИнформационнойБазы, СообщениеОбмена); + + ХранилищеСообщенияОбмена = Новый ХранилищеЗначения(СообщениеОбмена, Новый СжатиеДанных(9)); + +КонецФункции + +// Соответствует операции Download +Функция ВыполнитьЗагрузку(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ХранилищеСообщенияОбмена) + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + УстановитьПривилегированныйРежим(Истина); + + ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезСтроку(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ХранилищеСообщенияОбмена.Получить()); + +КонецФункции + +// Соответствует операции UploadData +Функция ВыполнитьВыгрузкуДанных(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ИдентификаторФайлаСтрокой, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена + ) + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + ИдентификаторФайла = Новый УникальныйИдентификатор; + ИдентификаторФайлаСтрокой = Строка(ИдентификаторФайла); + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторФайла); + + Иначе + + ВыполнитьВыгрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, ДлительнаяОперацияРазрешена); + + КонецЕсли; + +КонецФункции + +// Соответствует операции DownloadData +Функция ВыполнитьЗагрузкуДанных(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ИдентификаторФайлаСтрокой, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена + ) + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + ИдентификаторФайла = Новый УникальныйИдентификатор(ИдентификаторФайлаСтрокой); + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторФайла); + + Иначе + + ВыполнитьЗагрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, ДлительнаяОперацияРазрешена); + + КонецЕсли; + +КонецФункции + +// Соответствует операции GetIBParameters +Функция ПолучитьПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке) + + Результат = ОбменДаннымиСервер.ПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке); + Возврат СериализаторXDTO.ЗаписатьXDTO(Результат); + +КонецФункции + +// Соответствует операции GetIBData +Функция ПолучитьДанныеИнформационнойБазы(ПолноеИмяТаблицы) + + Результат = Новый Структура("СвойстваОбъектаМетаданных, ТаблицаБазыКорреспондента"); + + Результат.СвойстваОбъектаМетаданных = ОбменДаннымиСервер.СвойстваОбъектаМетаданных(ПолноеИмяТаблицы); + Результат.ТаблицаБазыКорреспондента = ОбменДаннымиСервер.ПолучитьОбъектыТаблицы(ПолноеИмяТаблицы); + + Возврат СериализаторXDTO.ЗаписатьXDTO(Результат); + +КонецФункции + +// Соответствует операции GetCommonNodsData +Функция ПолучитьОбщиеДанныеУзлов(ИмяПланаОбмена) + + УстановитьПривилегированныйРежим(Истина); + + Возврат СериализаторXDTO.ЗаписатьXDTO(ОбменДаннымиСервер.ДанныеДляТабличныхЧастейУзловЭтойИнформационнойБазы(ИмяПланаОбмена)); + +КонецФункции + +// Соответствует операции CreateExchange +Функция СоздатьОбменДанными(ИмяПланаОбмена, СтрокаПараметров, НастройкаОтборовXDTO, ЗначенияПоУмолчаниюXDTO) + + УстановитьПривилегированныйРежим(Истина); + + // Получаем обработку помощника настройки обмена во второй базе + ПомощникСозданияОбменаДанными = Обработки.ПомощникСозданияОбменаДанными.Создать(); + ПомощникСозданияОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; + + Отказ = Ложь; + + // Загружаем параметры помощника из строки в обработку помощника + ПомощникСозданияОбменаДанными.ВыполнитьЗагрузкуПараметровМастера(Отказ, СтрокаПараметров); + + Если Отказ Тогда + Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке()); + ВызватьИсключение Сообщение; + КонецЕсли; + + ПомощникСозданияОбменаДанными.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; + ПомощникСозданияОбменаДанными.ЭтоНастройкаРаспределеннойИнформационнойБазы = Ложь; + ПомощникСозданияОбменаДанными.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; + ПомощникСозданияОбменаДанными.ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы")); + + // Выполняем создание настройки обмена + ПомощникСозданияОбменаДанными.ВебСервисВыполнитьДействияПоНастройкеНовогоОбменаДанными( + Отказ, + СериализаторXDTO.ПрочитатьXDTO(НастройкаОтборовXDTO), + СериализаторXDTO.ПрочитатьXDTO(ЗначенияПоУмолчаниюXDTO) + ); + + Если Отказ Тогда + Сообщение = НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки: %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ПомощникСозданияОбменаДанными.СтрокаСообщенияОбОшибке()); + ВызватьИсключение Сообщение; + КонецЕсли; + + Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменДанными") = Ложь Тогда + + Константы.ИспользоватьОбменДанными.Установить(Истина); + + КонецЕсли; + +КонецФункции + +// Соответствует операции UpdateExchange +Функция ОбновитьНастройкиОбменаДанными(ИмяПланаОбмена, КодУзла, ЗначенияПоУмолчаниюXDTO) + + ОбменДаннымиСервер.ВнешнееСоединениеОбновитьНастройкиОбменаДанными(ИмяПланаОбмена, КодУзла, СериализаторXDTO.ПрочитатьXDTO(ЗначенияПоУмолчаниюXDTO)); + +КонецФункции + +// Соответствует операции RegisterOnlyCatalogData +Функция ЗарегистрироватьИзмененияТолькоСправочников(ИмяПланаОбмена, КодУзла, ДлительнаяОперация, ИдентификаторОперации) + + ЗарегистрироватьДанныеДляНачальнойВыгрузки(ИмяПланаОбмена, КодУзла, ДлительнаяОперация, ИдентификаторОперации, Истина); + +КонецФункции + +// Соответствует операции RegisterAllDataExceptCatalogs +Функция ЗарегистрироватьИзмененияВсехДанныхКромеСправочников(ИмяПланаОбмена, КодУзла, ДлительнаяОперация, ИдентификаторОперации) + + ЗарегистрироватьДанныеДляНачальнойВыгрузки(ИмяПланаОбмена, КодУзла, ДлительнаяОперация, ИдентификаторОперации, Ложь); + +КонецФункции + +// Соответствует операции GetContinuousOperationStatus +Функция ПолучитьСостояниеДлительнойОперации(ИдентификаторОперации, СтрокаСообщенияОбОшибке) + + СостоянияФоновогоЗадания = Новый Соответствие; + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.Активно, "Active"); + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.Завершено, "Completed"); + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.ЗавершеноАварийно, "Failed"); + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.Отменено, "Canceled"); + + УстановитьПривилегированныйРежим(Истина); + + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(ИдентификаторОперации)); + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + + КонецЕсли; + + Возврат СостоянияФоновогоЗадания.Получить(ФоновоеЗадание.Состояние); +КонецФункции + +// Соответствует операции GetFunctionalOption +Функция ПолучитьЗначениеФункциональнойОпции(Имя) + + Возврат ПолучитьФункциональнуюОпцию(Имя); + +КонецФункции + +// Соответствует операции PrepareGetFile +Функция PrepareGetFile(FileId, BlockSize, TransferId, PartQuantity) + + УстановитьПривилегированныйРежим(Истина); + + TransferId = Новый УникальныйИдентификатор; + + ИмяИсходногоФайла = ОбменДаннымиСервер.ПолучитьФайлИзХранилища(FileId); + + ВременныйКаталог = ВременныйКаталогВыгрузки(TransferId); + + Файл = Новый Файл(ИмяИсходногоФайла); + + ИмяИсходногоФайлаВоВременномКаталоге = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, Файл.Имя); + ИмяНеразделенногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, "data.zip"); + + СоздатьКаталог(ВременныйКаталог); + + ПереместитьФайл(ИмяИсходногоФайла, ИмяИсходногоФайлаВоВременномКаталоге); + + Архиватор = Новый ЗаписьZipФайла(ИмяНеразделенногоФайла,,,, УровеньСжатияZIP.Максимальный); + Архиватор.Добавить(ИмяИсходногоФайлаВоВременномКаталоге); + Архиватор.Записать(); + + Если BlockSize <> 0 Тогда + // Разделение файла на части + ИменаФайлов = РазделитьФайл(ИмяНеразделенногоФайла, BlockSize * 1024); + PartQuantity = ИменаФайлов.Количество(); + Иначе + PartQuantity = 1; + ПереместитьФайл(ИмяНеразделенногоФайла, ИмяНеразделенногоФайла + ".1"); + КонецЕсли; + +КонецФункции + +// Соответствует операции GetFilePart +Функция GetFilePart(TransferId, PartNumber, PartData) + + ИмяФайла = "data.zip.[n]"; + ИмяФайла = СтрЗаменить(ИмяФайла, "[n]", Формат(PartNumber, "ЧГ=0")); + + ИменаФайлов = НайтиФайлы(ВременныйКаталогВыгрузки(TransferId), ИмяФайла); + Если ИменаФайлов.Количество() = 0 Тогда + + ШаблонСообщения = НСтр("ru = 'Не найден фрагмент %1 сессии передачи с идентификатором %2'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(PartNumber), Строка(TransferId)); + ВызватьИсключение(ТекстСообщения); + + ИначеЕсли ИменаФайлов.Количество() > 1 Тогда + + ШаблонСообщения = НСтр("ru = 'Найдено несколько фрагментов %1 сессии передачи с идентификатором %2'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(PartNumber), Строка(TransferId)); + ВызватьИсключение(ТекстСообщения); + + КонецЕсли; + + ИмяФайлаЧасти = ИменаФайлов[0].ПолноеИмя; + PartData = Новый ДвоичныеДанные(ИмяФайлаЧасти); + +КонецФункции + +// Соответствует операции ReleaseFile +Функция ReleaseFile(TransferId) + + Попытка + УдалитьФайлы(ВременныйКаталогВыгрузки(TransferId)); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + +КонецФункции + +// Соответствует операции PutFilePart +Функция PutFilePart(TransferId, PartNumber, PartData) + + ВременныйКаталог = ВременныйКаталогВыгрузки(TransferId); + + Если PartNumber = 1 Тогда + + СоздатьКаталог(ВременныйКаталог); + + КонецЕсли; + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, ПолучитьИмяФайлаЧасти(PartNumber)); + + PartData.Записать(ИмяФайла); + +КонецФункции + +// Соответствует операции SaveFileFromParts +Функция SaveFileFromParts(TransferId, PartQuantity, FileId) + + УстановитьПривилегированныйРежим(Истина); + + ВременныйКаталог = ВременныйКаталогВыгрузки(TransferId); + + ФайлыЧастейДляОбъединения = Новый Массив; + + Для НомерЧасти = 1 По PartQuantity Цикл + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, ПолучитьИмяФайлаЧасти(НомерЧасти)); + + Если НайтиФайлы(ИмяФайла).Количество() = 0 Тогда + ШаблонСообщения = НСтр("ru = 'Не найден фрагмент %1 сессии передачи с идентификатором %2. + |Необходимо убедиться, что в форме настройки программы заданы значения констант + |КаталогВременныхФайловСообщенийОбменаДляLinux и КаталогВременныхФайловСообщенийОбменаДляWindows.'" + ); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(НомерЧасти), Строка(TransferId)); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + ФайлыЧастейДляОбъединения.Добавить(ИмяФайла); + + КонецЦикла; + + ИмяАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, "data.zip"); + + ОбъединитьФайлы(ФайлыЧастейДляОбъединения, ИмяАрхива); + + Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); + + Если Разархиватор.Элементы.Количество() = 0 Тогда + Попытка + УдалитьФайлы(ВременныйКаталог); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); + КонецЕсли; + + КаталогВыгрузки = ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(); + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВыгрузки, Разархиватор.Элементы[0].Имя); + + Разархиватор.Извлечь(Разархиватор.Элементы[0], КаталогВыгрузки); + Разархиватор.Закрыть(); + + FileId = ОбменДаннымиСервер.ПоместитьФайлВХранилище(ИмяФайла); + + Попытка + УдалитьФайлы(ВременныйКаталог); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецФункции + +// Соответствует операции PutFileIntoStorage +Функция PutFileIntoStorage(FileName, FileId) + + УстановитьПривилегированныйРежим(Истина); + + FileId = ОбменДаннымиСервер.ПоместитьФайлВХранилище(FileName); + +КонецФункции + +// Соответствует операции GetFileFromStorage +Функция GetFileFromStorage(FileId) + + УстановитьПривилегированныйРежим(Истина); + + ИмяИсходногоФайла = ОбменДаннымиСервер.ПолучитьФайлИзХранилища(FileId); + + Файл = Новый Файл(ИмяИсходногоФайла); + + Возврат Файл.Имя; +КонецФункции + +// Соответствует операции FileExists +Функция FileExists(FileName) + + УстановитьПривилегированныйРежим(Истина); + + ПолноеИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(), FileName); + + Файл = Новый Файл(ПолноеИмяВременногоФайла); + + Возврат Файл.Существует(); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции + +Процедура ВыполнитьВыгрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена + ) + + Параметры = Новый Массив; + Параметры.Добавить(ИмяПланаОбмена); + Параметры.Добавить(КодУзлаИнформационнойБазы); + Параметры.Добавить(ИдентификаторФайла); + + ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов", + Параметры, + КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы), + НСтр("ru = 'Выполнение обмена данными через веб-сервис.'") + ); + + Попытка + Таймаут = ?(ДлительнаяОперацияРазрешена, 5, Неопределено); + + ФоновоеЗадание.ОжидатьЗавершения(Таймаут); + Исключение + + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); + + Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + + ИдентификаторОперации = Строка(ФоновоеЗадание.УникальныйИдентификатор); + ДлительнаяОперация = Истина; + Возврат; + + Иначе + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + КонецЕсли; + + ВызватьИсключение; + КонецЕсли; + + КонецПопытки; + + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); + + Если ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Завершено Тогда + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + КонецЕсли; + + ВызватьИсключение НСтр("ru = 'Ошибка при выгрузке данных через веб-сервис.'"); + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьЗагрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена + ) + + Параметры = Новый Массив; + Параметры.Добавить(ИмяПланаОбмена); + Параметры.Добавить(КодУзлаИнформационнойБазы); + Параметры.Добавить(ИдентификаторФайла); + + ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов", + Параметры, + КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы), + НСтр("ru = 'Выполнение обмена данными через веб-сервис.'") + ); + + Попытка + Таймаут = ?(ДлительнаяОперацияРазрешена, 5, Неопределено); + + ФоновоеЗадание.ОжидатьЗавершения(Таймаут); + Исключение + + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); + + Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + + ИдентификаторОперации = Строка(ФоновоеЗадание.УникальныйИдентификатор); + ДлительнаяОперация = Истина; + Возврат; + + Иначе + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + КонецЕсли; + ВызватьИсключение; + КонецЕсли; + + КонецПопытки; + + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); + + Если ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Завершено Тогда + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + КонецЕсли; + + ВызватьИсключение НСтр("ru = 'Ошибка при загрузке данных через веб-сервис.'"); + КонецЕсли; + +КонецПроцедуры + +Функция КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ПланОбмена, КодУзла) + + Ключ = "ПланОбмена:[ПланОбмена] КодУзла:[КодУзла]"; + Ключ = СтрЗаменить(Ключ, "[ПланОбмена]", ПланОбмена); + Ключ = СтрЗаменить(Ключ, "[КодУзла]", КодУзла); + + Возврат Ключ; +КонецФункции + +Функция ЗарегистрироватьДанныеДляНачальнойВыгрузки(Знач ИмяПланаОбмена, Знач КодУзла, ДлительнаяОперация, ИдентификаторОперации, ТолькоСправочники) + + УстановитьПривилегированныйРежим(Истина); + + УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла); + + Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + Сообщение = НСтр("ru = 'Не найден узел плана обмена; имя плана обмена %1; код узла %2'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ИмяПланаОбмена, КодУзла); + ВызватьИсключение Сообщение; + КонецЕсли; + + Данные = ?(ТолькоСправочники, + ОбменДаннымиСервер.СправочникиПланаОбмена(ИмяПланаОбмена), + ОбменДаннымиСервер.ВсеДанныеПланаОбменаКромеСправочников(ИмяПланаОбмена) + ); + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + ОбменДаннымиСервер.ЗарегистрироватьДанныеДляНачальнойВыгрузки(УзелИнформационнойБазы, Данные); + + Иначе + + Параметры = Новый Массив; + Параметры.Добавить(УзелИнформационнойБазы); + Параметры.Добавить(Данные); + + ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ЗарегистрироватьДанныеДляНачальнойВыгрузки", + Параметры, + , + НСтр("ru = 'Создание обмена данными.'") + ); + + Попытка + ФоновоеЗадание.ОжидатьЗавершения(5); + Исключение + + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор); + + Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + + ИдентификаторОперации = Строка(ФоновоеЗадание.УникальныйИдентификатор); + ДлительнаяОперация = Истина; + + Иначе + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + ВызватьИсключение ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + КонецЕсли; + + ВызватьИсключение; + КонецЕсли; + + КонецПопытки; + + КонецЕсли; + +КонецФункции + +Функция ПолучитьИмяФайлаЧасти(PartNumber) + + Результат = "data.zip.[n]"; + + Возврат СтрЗаменить(Результат, "[n]", Формат(PartNumber, "ЧГ=0")); +КонецФункции + +Функция ВременныйКаталогВыгрузки(Знач ИдентификаторСессии) + + УстановитьПривилегированныйРежим(Истина); + + ВременныйКаталог = "{ИдентификаторСессии}"; + ВременныйКаталог = СтрЗаменить(ВременныйКаталог, "ИдентификаторСессии", Строка(ИдентификаторСессии)); + + Результат = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(), ВременныйКаталог); + + Возврат Результат; +КонецФункции + diff --git a/SSL/src/WebServices/Files/Module.bsl b/SSL/src/WebServices/Files/Module.bsl index 5a42d72c5..e31fc039f 100644 --- a/SSL/src/WebServices/Files/Module.bsl +++ b/SSL/src/WebServices/Files/Module.bsl @@ -183,8 +183,8 @@ СведенияОФайле.Description = ""; СведенияОФайле.Size = 0; - ВремяИзменения = ТекущаяДата(); - ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДата()); + ВремяИзменения = Дата('00010101'); + ВремяИзмененияУниверсальное = Дата('00010101'); ДвоичныеДанные = ФайлXDTO.BinaryData; Если ДвоичныеДанные.Размер() = 0 Тогда ВызватьИсключение "Invalid binary data."; diff --git a/SSL/src/WebServices/InterfaceVersion/InterfaceVersion.mdo b/SSL/src/WebServices/InterfaceVersion/InterfaceVersion.mdo new file mode 100644 index 000000000..cf4ab6481 --- /dev/null +++ b/SSL/src/WebServices/InterfaceVersion/InterfaceVersion.mdo @@ -0,0 +1,40 @@ + + + InterfaceVersion + + ru + Interface version + + http://www.1c.ru/SaaS/1.0/WS + + http://v8.1c.ru/8.1/data/core + + InterfaceVersion.1cws + 20 + + GetVersions + + ru + Get versions + + Получить массив поддерживаемых версий + + Array + http://v8.1c.ru/8.1/data/core + + GetVersions + Managed + + InterfaceName + + ru + Interface name + + Имя подсистемы + + string + http://www.w3.org/2001/XMLSchema + + + + diff --git a/SSL/src/WebServices/InterfaceVersion/Module.bsl b/SSL/src/WebServices/InterfaceVersion/Module.bsl new file mode 100644 index 000000000..8655dd135 --- /dev/null +++ b/SSL/src/WebServices/InterfaceVersion/Module.bsl @@ -0,0 +1,68 @@ + +///////////////////////////////////////////////////////////////////////////////// +// Версионирование интерфейсов +// + +// Возвращает массив поддерживаемых подсистемой InterfaceName названий номеров версий. +// +// Параметры: +// InterfaceName - Строка - Имя подсистемы. +// +// Возвращаемое значение: +// Массив строк. +// +// Пример использования: +// +// // Возвращает объект WSПрокси передачи файлов заданной версии. +// // Если ВерсияПередачи = Неопределено, возвращает Прокси базовой версии "1.0.1.1". +// // +// Функция ПолучитьПроксиПередачиФайлов(Знач ПараметрыПодключения, Знач ВерсияПередачи = Неопределено) +// // ………………………………………………… +// КонецФункции +// +// Функция ПолучитьИзХранилища(Знач ИдентификаторФайла, Знач ПараметрыПодключения) Экспорт +// +// // Общая для всех версий функциональность +// // ………………………………………………… +// +// // Учесть версионирование. +// МассивПоддерживаемыхВерсий = СтандартныеПодсистемыСервер.ПолучитьМассивВерсийПодсистемы( +// ПараметрыПодключения, "СервисПередачиФайлов"); +// Если МассивПоддерживаемыхВерсий.Найти("1.0.2.1") = Неопределено Тогда +// ЕстьПоддержка2йВерсии = Ложь; +// Прокси = ПолучитьПроксиПередачиФайлов(ПараметрыПодключения); +// Иначе +// ЕстьПоддержка2йВерсии = Истина; +// Прокси = ПолучитьПроксиПередачиФайлов(ПараметрыПодключения, "1.0.2.1"); +// КонецЕсли; +// +// КоличествоЧастей = Неопределено; +// РазмерЧасти = 20 * 1024; // Кб +// Если ЕстьПоддержка2йВерсии Тогда +// ИдентификаторПередачи = Прокси.PrepareGetFile(ИдентификаторФайла, РазмерЧасти, КоличествоЧастей); +// Иначе +// ИдентификаторПередачи = Неопределено; +// Прокси.PrepareGetFile(ИдентификаторФайла, РазмерЧасти, ИдентификаторПередачи, КоличествоЧастей); +// КонецЕсли; +// +// // Общая для всех версий функциональность +// // ………………………………………………… +// +// КонецФункции +// +Функция GetVersions(InterfaceName) + + МассивВерсий = Неопределено; + + СтруктураПоддерживаемыхВерсий = Новый Структура; + СтандартныеПодсистемыПереопределяемый.ПолучитьПоддерживаемыеВерсии(СтруктураПоддерживаемыхВерсий); + + СтруктураПоддерживаемыхВерсий.Свойство(InterfaceName, МассивВерсий); + + Если МассивВерсий = Неопределено Тогда + Возврат СериализаторXDTO.ЗаписатьXDTO(Новый Массив); + Иначе + Возврат СериализаторXDTO.ЗаписатьXDTO(МассивВерсий); + КонецЕсли; + +КонецФункции diff --git a/SSL/src/WebServices/MessageExchange/MessageExchange.mdo b/SSL/src/WebServices/MessageExchange/MessageExchange.mdo new file mode 100644 index 000000000..2a286387a --- /dev/null +++ b/SSL/src/WebServices/MessageExchange/MessageExchange.mdo @@ -0,0 +1,254 @@ + + + MessageExchange + + ru + Message exchange + + http://www.1c.ru/SSL/MessageExchange + messageexchange.1cws + 20 + + DeliverMessages + + ru + Deliver messages + + + string + http://www.w3.org/2001/XMLSchema + + true + ДоставитьСообщения + Managed + + Sender + + ru + Sender + + + string + http://www.w3.org/2001/XMLSchema + + + + Data + + ru + Data + + + ValueStorage + http://v8.1c.ru/8.1/data/core + + + + + GetIBParameters + + ru + Get IBParameters + + + string + http://www.w3.org/2001/XMLSchema + + ПолучитьПараметрыИнформационнойБазы + Managed + + ThisEndPointName + + ru + This end point name + + Наименование этой конечной точки + + string + http://www.w3.org/2001/XMLSchema + + true + + + + ConnectEndPoint + + ru + Connect end point + + Метод выполняет операции на стороне получателя по подключению конечной точки + + boolean + http://www.w3.org/2001/XMLSchema + + ПодключитьКонечнуюТочку + Managed + + Code + + ru + Code + + + string + http://www.w3.org/2001/XMLSchema + + + + Name + + ru + Name + + + string + http://www.w3.org/2001/XMLSchema + + + + Settings + + ru + Settings + + + string + http://www.w3.org/2001/XMLSchema + + + + + UpdateConnectionSettings + + ru + Update connection settings + + + string + http://www.w3.org/2001/XMLSchema + + true + ОбновитьНастройкиПодключения + Managed + + Code + + ru + Code + + + string + http://www.w3.org/2001/XMLSchema + + + + Settings + + ru + Settings + + + string + http://www.w3.org/2001/XMLSchema + + + + + SetLeadingEndPoint + + ru + Set leading end point + + Устанавливает ведущую конечную точку в текущей ИБ + + string + http://www.w3.org/2001/XMLSchema + + true + УстановитьВедущуюКонечнуюТочку + Managed + + ThisEndPointCode + + ru + This end point code + + + string + http://www.w3.org/2001/XMLSchema + + + + LeadingEndPointCode + + ru + Leading end point code + + + string + http://www.w3.org/2001/XMLSchema + + + + + TestConnectionRecipient + + ru + Test connection recipient + + + string + http://www.w3.org/2001/XMLSchema + + true + ПроверитьПодключениеНаСторонеПолучателя + Managed + + Settings + + ru + Settings + + + string + http://www.w3.org/2001/XMLSchema + + + + Sender + + ru + Sender + + + string + http://www.w3.org/2001/XMLSchema + + + + + TestConnectionSender + + ru + Test connection sender + + + string + http://www.w3.org/2001/XMLSchema + + true + ПроверитьПодключениеНаСторонеОтправителя + Managed + + Sender + + ru + Sender + + + string + http://www.w3.org/2001/XMLSchema + + + + diff --git a/SSL/src/WebServices/MessageExchange/Module.bsl b/SSL/src/WebServices/MessageExchange/Module.bsl new file mode 100644 index 000000000..4fd86d3c7 --- /dev/null +++ b/SSL/src/WebServices/MessageExchange/Module.bsl @@ -0,0 +1,158 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики операций + +// Соответствует операции DeliverMessages +Функция ДоставитьСообщения(КодОтправителя, ПотокХранилище) + + УстановитьПривилегированныйРежим(Истина); + + // Получаем ссылку на отправителя + Отправитель = ПланыОбмена.ОбменСообщениями.НайтиПоКоду(КодОтправителя); + + Если Отправитель.Пустая() Тогда + + ВызватьИсключение НСтр("ru = 'Заданы неправильные настройки подключения к конечной точке.'"); + + КонецЕсли; + + ЗагруженныеСообщения = Неопределено; + + // Загружаем сообщения в информационную базу + ОбменСообщениямиВнутренний.СериализоватьДанныеИзПотока(Отправитель, ПотокХранилище.Получить(), ЗагруженныеСообщения); + + // Обрабатываем очередь сообщений + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + ОбменСообщениямиВнутренний.ОбработатьОчередьСообщенийСистемы(); + + Иначе + + ПараметрыФоновогоЗадания = Новый Массив; + ПараметрыФоновогоЗадания.Добавить(ЗагруженныеСообщения); + + ФоновыеЗадания.Выполнить("ОбменСообщениямиВнутренний.ОбработатьОчередьСообщенийСистемы", ПараметрыФоновогоЗадания); + + КонецЕсли; + +КонецФункции + +// Соответствует операции DeliverMessages +Функция ПолучитьПараметрыИнформационнойБазы(НаименованиеЭтойКонечнойТочки) + + УстановитьПривилегированныйРежим(Истина); + + Если ПустаяСтрока(ОбменСообщениямиВнутренний.КодЭтогоУзла()) Тогда + + ЭтотУзелОбъект = ОбменСообщениямиВнутренний.ЭтотУзел().ПолучитьОбъект(); + ЭтотУзелОбъект.Код = Строка(Новый УникальныйИдентификатор()); + ЭтотУзелОбъект.Наименование = ?(ПустаяСтрока(НаименованиеЭтойКонечнойТочки), + ОбменСообщениямиВнутренний.НаименованиеЭтогоУзлаПоУмолчанию(), + НаименованиеЭтойКонечнойТочки + ); + ЭтотУзелОбъект.Записать(); + + ИначеЕсли ПустаяСтрока(ОбменСообщениямиВнутренний.НаименованиеЭтогоУзла()) Тогда + + ЭтотУзелОбъект = ОбменСообщениямиВнутренний.ЭтотУзел().ПолучитьОбъект(); + ЭтотУзелОбъект.Наименование = ?(ПустаяСтрока(НаименованиеЭтойКонечнойТочки), + ОбменСообщениямиВнутренний.НаименованиеЭтогоУзлаПоУмолчанию(), + НаименованиеЭтойКонечнойТочки + ); + ЭтотУзелОбъект.Записать(); + + КонецЕсли; + + ПараметрыЭтойТочки = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ОбменСообщениямиВнутренний.ЭтотУзел(), "Код, Наименование"); + + Результат = Новый Структура; + Результат.Вставить("Код", ПараметрыЭтойТочки.Код); + Результат.Вставить("Наименование", ПараметрыЭтойТочки.Наименование); + + Возврат ЗначениеВСтрокуВнутр(Результат); +КонецФункции + +// Соответствует операции ConnectEndPoint +Функция ПодключитьКонечнуюТочку(Код, Наименование, НастройкиПодключенияПолучателяСтрокой) + + Отказ = Ложь; + + ОбменСообщениямиВнутренний.ВыполнитьПодключениеКонечнойТочкиНаСторонеПолучателя(Отказ, Код, Наименование, ЗначениеИзСтрокиВнутр(НастройкиПодключенияПолучателяСтрокой)); + + Возврат Не Отказ; +КонецФункции + +// Соответствует операции UpdateConnectionSettings +Функция ОбновитьНастройкиПодключения(Код, НастройкиПодключенияСтрокой) + + НастройкиПодключения = ЗначениеИзСтрокиВнутр(НастройкиПодключенияСтрокой); + + УстановитьПривилегированныйРежим(Истина); + + КонечнаяТочка = ПланыОбмена.ОбменСообщениями.НайтиПоКоду(Код); + Если КонечнаяТочка.Пустая() Тогда + ВызватьИсключение НСтр("ru = 'Заданы неправильные настройки подключения к конечной точке.'"); + КонецЕсли; + + НачатьТранзакцию(); + Попытка + + //обновляем настройки подключения + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Узел", КонечнаяТочка); + СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + + СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключения.WSURLВебСервиса); + СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключения.WSИмяПользователя); + СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключения.WSПароль); + + // добавляем запись в РС + РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецФункции + +// Соответствует операции SetLeadingEndPoint +Функция УстановитьВедущуюКонечнуюТочку(КодЭтойКонечнойТочки, КодВедущейКонечнойТочки) + + ОбменСообщениямиВнутренний.УстановитьВедущуюКонечнуюТочкуНаСторонеПолучателя(КодЭтойКонечнойТочки, КодВедущейКонечнойТочки); + +КонецФункции + +// Соответствует операции TestConnectionRecipient +Функция ПроверитьПодключениеНаСторонеПолучателя(НастройкиПодключенияСтрокой, КодОтправителя) + + УстановитьПривилегированныйРежим(Истина); + + СтрокаСообщенияОбОшибке = ""; + + WSПрокси = ОбменСообщениямиВнутренний.ПолучитьWSПрокси(ЗначениеИзСтрокиВнутр(НастройкиПодключенияСтрокой), СтрокаСообщенияОбОшибке); + + Если WSПрокси = Неопределено Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + WSПрокси.TestConnectionSender(КодОтправителя); + +КонецФункции + +// Соответствует операции TestConnectionSender +Функция ПроверитьПодключениеНаСторонеОтправителя(КодОтправителя) + + УстановитьПривилегированныйРежим(Истина); + + Если ОбменСообщениямиВнутренний.КодЭтогоУзла() <> КодОтправителя Тогда + + ВызватьИсключение НСтр("ru = 'Настройки подключения базы получателя указывают на другого отправителя.'"); + + КонецЕсли; + +КонецФункции + diff --git a/SSL/src/WebServices/MessageExchange_2_0_1_6/MessageExchange_2_0_1_6.mdo b/SSL/src/WebServices/MessageExchange_2_0_1_6/MessageExchange_2_0_1_6.mdo new file mode 100644 index 000000000..9a45f9486 --- /dev/null +++ b/SSL/src/WebServices/MessageExchange_2_0_1_6/MessageExchange_2_0_1_6.mdo @@ -0,0 +1,257 @@ + + + MessageExchange_2_0_1_6 + + ru + Message exchange 2.0.1.6 + + http://www.1c.ru/SSL/MessageExchange_2_0_1_6 + + http://v8.1c.ru/8.1/data/core + + messageexchange_2_0_1_6.1cws + 20 + + DeliverMessages + + ru + Deliver messages + + + string + http://www.w3.org/2001/XMLSchema + + true + ДоставитьСообщения + Managed + + Sender + + ru + Sender + + + string + http://www.w3.org/2001/XMLSchema + + + + Data + + ru + Data + + + ValueStorage + http://v8.1c.ru/8.1/data/core + + + + + GetIBParameters + + ru + Get IBParameters + + + Structure + http://v8.1c.ru/8.1/data/core + + ПолучитьПараметрыИнформационнойБазы + Managed + + ThisEndPointName + + ru + This end point name + + Наименование этой конечной точки + + string + http://www.w3.org/2001/XMLSchema + + true + + + + ConnectEndPoint + + ru + Connect end point + + Метод выполняет операции на стороне получателя по подключению конечной точки + + boolean + http://www.w3.org/2001/XMLSchema + + ПодключитьКонечнуюТочку + Managed + + Code + + ru + Code + + + string + http://www.w3.org/2001/XMLSchema + + + + Name + + ru + Name + + + string + http://www.w3.org/2001/XMLSchema + + + + Settings + + ru + Settings + + + Structure + http://v8.1c.ru/8.1/data/core + + + + + UpdateConnectionSettings + + ru + Update connection settings + + + string + http://www.w3.org/2001/XMLSchema + + true + ОбновитьНастройкиПодключения + Managed + + Code + + ru + Code + + + string + http://www.w3.org/2001/XMLSchema + + + + Settings + + ru + Settings + + + Structure + http://v8.1c.ru/8.1/data/core + + + + + SetLeadingEndPoint + + ru + Set leading end point + + Устанавливает ведущую конечную точку в текущей ИБ + + string + http://www.w3.org/2001/XMLSchema + + true + УстановитьВедущуюКонечнуюТочку + Managed + + ThisEndPointCode + + ru + This end point code + + + string + http://www.w3.org/2001/XMLSchema + + + + LeadingEndPointCode + + ru + Leading end point code + + + string + http://www.w3.org/2001/XMLSchema + + + + + TestConnectionRecipient + + ru + Test connection recipient + + + string + http://www.w3.org/2001/XMLSchema + + true + ПроверитьПодключениеНаСторонеПолучателя + Managed + + Settings + + ru + Settings + + + Structure + http://v8.1c.ru/8.1/data/core + + + + Sender + + ru + Sender + + + string + http://www.w3.org/2001/XMLSchema + + + + + TestConnectionSender + + ru + Test connection sender + + + string + http://www.w3.org/2001/XMLSchema + + true + ПроверитьПодключениеНаСторонеОтправителя + Managed + + Sender + + ru + Sender + + + string + http://www.w3.org/2001/XMLSchema + + + + diff --git a/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl b/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl new file mode 100644 index 000000000..09707fa04 --- /dev/null +++ b/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl @@ -0,0 +1,163 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики операций + +// Соответствует операции DeliverMessages +Функция ДоставитьСообщения(КодОтправителя, ПотокХранилище) + + УстановитьПривилегированныйРежим(Истина); + + // Получаем ссылку на отправителя + Отправитель = ПланыОбмена.ОбменСообщениями.НайтиПоКоду(КодОтправителя); + + Если Отправитель.Пустая() Тогда + + ВызватьИсключение НСтр("ru = 'Заданы неправильные настройки подключения к конечной точке.'"); + + КонецЕсли; + + ЗагруженныеСообщения = Неопределено; + + // Загружаем сообщения в информационную базу + ОбменСообщениямиВнутренний.СериализоватьДанныеИзПотока(Отправитель, ПотокХранилище.Получить(), ЗагруженныеСообщения); + + // Обрабатываем очередь сообщений + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + ОбменСообщениямиВнутренний.ОбработатьОчередьСообщенийСистемы(); + + Иначе + + ПараметрыФоновогоЗадания = Новый Массив; + ПараметрыФоновогоЗадания.Добавить(ЗагруженныеСообщения); + + ФоновыеЗадания.Выполнить("ОбменСообщениямиВнутренний.ОбработатьОчередьСообщенийСистемы", ПараметрыФоновогоЗадания); + + КонецЕсли; + +КонецФункции + +// Соответствует операции GetIBParameters +Функция ПолучитьПараметрыИнформационнойБазы(НаименованиеЭтойКонечнойТочки) + + УстановитьПривилегированныйРежим(Истина); + + Если ПустаяСтрока(ОбменСообщениямиВнутренний.КодЭтогоУзла()) Тогда + + ЭтотУзелОбъект = ОбменСообщениямиВнутренний.ЭтотУзел().ПолучитьОбъект(); + ЭтотУзелОбъект.Код = Строка(Новый УникальныйИдентификатор()); + ЭтотУзелОбъект.Наименование = ?(ПустаяСтрока(НаименованиеЭтойКонечнойТочки), + ОбменСообщениямиВнутренний.НаименованиеЭтогоУзлаПоУмолчанию(), + НаименованиеЭтойКонечнойТочки + ); + ЭтотУзелОбъект.Записать(); + + ИначеЕсли ПустаяСтрока(ОбменСообщениямиВнутренний.НаименованиеЭтогоУзла()) Тогда + + ЭтотУзелОбъект = ОбменСообщениямиВнутренний.ЭтотУзел().ПолучитьОбъект(); + ЭтотУзелОбъект.Наименование = ?(ПустаяСтрока(НаименованиеЭтойКонечнойТочки), + ОбменСообщениямиВнутренний.НаименованиеЭтогоУзлаПоУмолчанию(), + НаименованиеЭтойКонечнойТочки + ); + ЭтотУзелОбъект.Записать(); + + КонецЕсли; + + ПараметрыЭтойТочки = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ОбменСообщениямиВнутренний.ЭтотУзел(), "Код, Наименование"); + + Результат = Новый Структура; + Результат.Вставить("Код", ПараметрыЭтойТочки.Код); + Результат.Вставить("Наименование", ПараметрыЭтойТочки.Наименование); + + Возврат СериализаторXDTO.ЗаписатьXDTO(Результат); +КонецФункции + +// Соответствует операции ConnectEndPoint +Функция ПодключитьКонечнуюТочку(Код, Наименование, НастройкиПодключенияПолучателяXDTO) + + Отказ = Ложь; + + ОбменСообщениямиВнутренний.ВыполнитьПодключениеКонечнойТочкиНаСторонеПолучателя( + Отказ, + Код, + Наименование, + СериализаторXDTO.ПрочитатьXDTO(НастройкиПодключенияПолучателяXDTO) + ); + + Возврат Не Отказ; +КонецФункции + +// Соответствует операции UpdateConnectionSettings +Функция ОбновитьНастройкиПодключения(Код, НастройкиПодключенияXDTO) + + НастройкиПодключения = СериализаторXDTO.ПрочитатьXDTO(НастройкиПодключенияXDTO); + + УстановитьПривилегированныйРежим(Истина); + + КонечнаяТочка = ПланыОбмена.ОбменСообщениями.НайтиПоКоду(Код); + Если КонечнаяТочка.Пустая() Тогда + ВызватьИсключение НСтр("ru = 'Заданы неправильные настройки подключения к конечной точке.'"); + КонецЕсли; + + НачатьТранзакцию(); + Попытка + + //обновляем настройки подключения + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Узел", КонечнаяТочка); + СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + + СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключения.WSURLВебСервиса); + СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключения.WSИмяПользователя); + СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключения.WSПароль); + + // добавляем запись в РС + РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецФункции + +// Соответствует операции SetLeadingEndPoint +Функция УстановитьВедущуюКонечнуюТочку(КодЭтойКонечнойТочки, КодВедущейКонечнойТочки) + + ОбменСообщениямиВнутренний.УстановитьВедущуюКонечнуюТочкуНаСторонеПолучателя(КодЭтойКонечнойТочки, КодВедущейКонечнойТочки); + +КонецФункции + +// Соответствует операции TestConnectionRecipient +Функция ПроверитьПодключениеНаСторонеПолучателя(НастройкиПодключенияXDTO, КодОтправителя) + + УстановитьПривилегированныйРежим(Истина); + + СтрокаСообщенияОбОшибке = ""; + + WSПрокси = ОбменСообщениямиВнутренний.ПолучитьWSПрокси(СериализаторXDTO.ПрочитатьXDTO(НастройкиПодключенияXDTO), СтрокаСообщенияОбОшибке); + + Если WSПрокси = Неопределено Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + WSПрокси.TestConnectionSender(КодОтправителя); + +КонецФункции + +// Соответствует операции TestConnectionSender +Функция ПроверитьПодключениеНаСторонеОтправителя(КодОтправителя) + + УстановитьПривилегированныйРежим(Истина); + + Если ОбменСообщениямиВнутренний.КодЭтогоУзла() <> КодОтправителя Тогда + + ВызватьИсключение НСтр("ru = 'Настройки подключения базы получателя указывают на другого отправителя.'"); + + КонецЕсли; + +КонецФункции + diff --git a/SSL/src/WebServices/RemoteAdministrationOfExchange/Module.bsl b/SSL/src/WebServices/RemoteAdministrationOfExchange/Module.bsl new file mode 100644 index 000000000..f25e3db64 --- /dev/null +++ b/SSL/src/WebServices/RemoteAdministrationOfExchange/Module.bsl @@ -0,0 +1,131 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики операций + +// Соответствует операции GetExchangePlans +Функция ПолучитьПланыОбменаКонфигурации() + + Массив = Новый Массив; + + Для Каждого ПланОбмена ИЗ Метаданные.ПланыОбмена Цикл + + Если ОбменДаннымиВМоделиСервисаПовтИсп.ПланОбменаИспользуетсяВМоделиСервиса(ПланОбмена.Имя) Тогда + + Массив.Добавить(ПланОбмена.Имя); + + КонецЕсли; + + КонецЦикла; + + Возврат СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(Массив); + +КонецФункции + +// Соответствует операции PrepareExchangeExecution +Функция ЗапланироватьВыполнениеОбменаДанными(ОбластиДляОбменаДаннымиСтрокой) + + ОбластиДляОбменаДанными = ЗначениеИзСтрокиВнутр(ОбластиДляОбменаДаннымиСтрокой); + + Для Каждого Элемент Из ОбластиДляОбменаДанными Цикл + + ЗначениеРазделителя = Элемент.Ключ; + СценарийОбменаДанными = Элемент.Значение; + + Параметры = Новый Массив; + Параметры.Добавить(СценарийОбменаДанными); + + Попытка + ОчередьЗаданий.ЗапланироватьВыполнениеЗадания( + "ОбменДаннымиВМоделиСервиса.ВыполнитьОбменДанными", Параметры, "1",, ЗначениеРазделителя); + Исключение + Если ИнформацияОбОшибке().Описание <> ОчередьЗаданий.ПолучитьТекстИсключенияДублированиеЗаданийСОдинаковымКлючом() Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + + КонецЦикла; + + Возврат ""; +КонецФункции + +// Соответствует операции StartExchangeExecutionInFirstDataBase +Функция ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе(ИндексСтрокиСценария, СценарийОбменаДаннымиСтрокой) + + СценарийОбменаДанными = ЗначениеИзСтрокиВнутр(СценарийОбменаДаннымиСтрокой); + + СтрокаСценария = СценарийОбменаДанными[ИндексСтрокиСценария]; + + Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы; + + Параметры = Новый Массив; + Параметры.Добавить(ИндексСтрокиСценария); + Параметры.Добавить(СценарийОбменаДанными); + + Попытка + ОчередьЗаданий.ЗапланироватьВыполнениеЗадания( + "ОбменДаннымиВМоделиСервиса.ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе", + Параметры, Ключ,, СтрокаСценария.ЗначениеРазделителяПервойИнформационнойБазы); + Исключение + Если ИнформацияОбОшибке().Описание <> ОчередьЗаданий.ПолучитьТекстИсключенияДублированиеЗаданийСОдинаковымКлючом() Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + + Возврат ""; +КонецФункции + +// Соответствует операции StartExchangeExecutionInSecondDataBase +Функция ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазе(ИндексСтрокиСценария, СценарийОбменаДаннымиСтрокой) + + СценарийОбменаДанными = ЗначениеИзСтрокиВнутр(СценарийОбменаДаннымиСтрокой); + + СтрокаСценария = СценарийОбменаДанными[ИндексСтрокиСценария]; + + Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы; + + Параметры = Новый Массив; + Параметры.Добавить(ИндексСтрокиСценария); + Параметры.Добавить(СценарийОбменаДанными); + + Попытка + ОчередьЗаданий.ЗапланироватьВыполнениеЗадания( + "ОбменДаннымиВМоделиСервиса.ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазе", + Параметры, Ключ,, СтрокаСценария.ЗначениеРазделителяВторойИнформационнойБазы); + Исключение + Если ИнформацияОбОшибке().Описание <> ОчередьЗаданий.ПолучитьТекстИсключенияДублированиеЗаданийСОдинаковымКлючом() Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + + Возврат ""; +КонецФункции + +// Соответствует операции TestConnection +Функция ПроверитьПодключение(СтруктураНастроекСтрокой, ВидТранспортаСтрокой, СообщениеОбОшибке) + + Отказ = Ложь; + + // Проверяем подключение обработки транспорта сообщений обмена + ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, + ЗначениеИзСтрокиВнутр(СтруктураНастроекСтрокой), + Перечисления.ВидыТранспортаСообщенийОбмена[ВидТранспортаСтрокой], + СообщениеОбОшибке + ); + + Если Отказ Тогда + Возврат Ложь; + КонецЕсли; + + // Проверяем подключение к управляющему приложению через WEB-сервис + Попытка + ОбменДаннымиВМоделиСервисаПовтИсп.ПолучитьWSПроксиСервисаОбмена(); + Исключение + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Ложь; + КонецПопытки; + + Возврат Истина; +КонецФункции + diff --git a/SSL/src/WebServices/RemoteAdministrationOfExchange/RemoteAdministrationOfExchange.mdo b/SSL/src/WebServices/RemoteAdministrationOfExchange/RemoteAdministrationOfExchange.mdo new file mode 100644 index 000000000..110915f5e --- /dev/null +++ b/SSL/src/WebServices/RemoteAdministrationOfExchange/RemoteAdministrationOfExchange.mdo @@ -0,0 +1,172 @@ + + + RemoteAdministrationOfExchange + + ru + Remote administration of exchange + + http://www.1c.ru/SaaS/1.0/WS/RemoteAdministrationOfExchange + RemoteAdministrationOfExchange.1cws + 20 + + GetExchangePlans + + ru + Get exchange plans + + + string + http://www.w3.org/2001/XMLSchema + + ПолучитьПланыОбменаКонфигурации + Managed + + + PrepareExchangeExecution + + ru + Prepare exchange execution + + + string + http://www.w3.org/2001/XMLSchema + + true + ЗапланироватьВыполнениеОбменаДанными + Managed + + Scenario + + ru + Scenario + + + string + http://www.w3.org/2001/XMLSchema + + + + + StartExchangeExecutionInFirstDataBase + + ru + Start exchange execution in first data base + + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе + Managed + + Index + + ru + Index + + + int + http://www.w3.org/2001/XMLSchema + + true + + + Scenario + + ru + Scenario + + + string + http://www.w3.org/2001/XMLSchema + + + + + StartExchangeExecutionInSecondDataBase + + ru + Start exchange execution in second data base + + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазе + Managed + + Index + + ru + Index + + + int + http://www.w3.org/2001/XMLSchema + + true + + + Scenario + + ru + Scenario + + + string + http://www.w3.org/2001/XMLSchema + + + + + TestConnection + + ru + Test connection + + + boolean + http://www.w3.org/2001/XMLSchema + + ПроверитьПодключение + Managed + + Settings + + ru + Settings + + + string + http://www.w3.org/2001/XMLSchema + + + + ConnectionType + + ru + Connection type + + Вид транспорта сообщений обмена + + string + http://www.w3.org/2001/XMLSchema + + + + ResultMessage + + ru + Результирующее сообщение + + + string + http://www.w3.org/2001/XMLSchema + + true + Out + + + diff --git a/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/Module.bsl b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/Module.bsl new file mode 100644 index 000000000..ee663cad7 --- /dev/null +++ b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/Module.bsl @@ -0,0 +1,156 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики операций + +// Соответствует операции GetExchangePlans +Функция ПолучитьПланыОбменаКонфигурации() + + Массив = Новый Массив; + + Для Каждого ПланОбмена ИЗ Метаданные.ПланыОбмена Цикл + + Если ОбменДаннымиВМоделиСервисаПовтИсп.ПланОбменаИспользуетсяВМоделиСервиса(ПланОбмена.Имя) Тогда + + Массив.Добавить(ПланОбмена.Имя); + + КонецЕсли; + + КонецЦикла; + + Возврат СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(Массив); + +КонецФункции + +// Соответствует операции PrepareExchangeExecution +Функция ЗапланироватьВыполнениеОбменаДанными(ОбластиДляОбменаДаннымиXDTO) + + ОбластиДляОбменаДанными = СериализаторXDTO.ПрочитатьXDTO(ОбластиДляОбменаДаннымиXDTO); + + Для Каждого Элемент Из ОбластиДляОбменаДанными Цикл + + ЗначениеРазделителя = Элемент.Ключ; + СценарийОбменаДанными = Элемент.Значение; + + Параметры = Новый Массив; + Параметры.Добавить(СценарийОбменаДанными); + + Попытка + ОчередьЗаданий.ЗапланироватьВыполнениеЗадания( + "ОбменДаннымиВМоделиСервиса.ВыполнитьОбменДанными", Параметры, "1",, ЗначениеРазделителя); + Исключение + Если ИнформацияОбОшибке().Описание <> ОчередьЗаданий.ПолучитьТекстИсключенияДублированиеЗаданийСОдинаковымКлючом() Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + + КонецЦикла; + + Возврат ""; +КонецФункции + +// Соответствует операции StartExchangeExecutionInFirstDataBase +Функция ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе(ИндексСтрокиСценария, СценарийОбменаДаннымиXDTO) + + СценарийОбменаДанными = СериализаторXDTO.ПрочитатьXDTO(СценарийОбменаДаннымиXDTO); + + СтрокаСценария = СценарийОбменаДанными[ИндексСтрокиСценария]; + + Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы; + + Если СценарийОбменаДанными.Колонки.Найти("ИнициированоПользователем") <> Неопределено + И СтрокаСценария.ИнициированоПользователем = Истина Тогда + + Параметры = Новый Массив; + Параметры.Добавить(ИндексСтрокиСценария); + Параметры.Добавить(СценарийОбменаДанными); + Параметры.Добавить(СтрокаСценария.ЗначениеРазделителяПервойИнформационнойБазы); + + ФоновыеЗадания.Выполнить("ОбменДаннымиВМоделиСервиса.ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазеИзНеразделенногоСеанса", + Параметры, + Ключ + ); + + Иначе + + Параметры = Новый Массив; + Параметры.Добавить(ИндексСтрокиСценария); + Параметры.Добавить(СценарийОбменаДанными); + + Попытка + ОчередьЗаданий.ЗапланироватьВыполнениеЗадания( + "ОбменДаннымиВМоделиСервиса.ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе", + Параметры, Ключ,, СтрокаСценария.ЗначениеРазделителяПервойИнформационнойБазы); + Исключение + Если ИнформацияОбОшибке().Описание <> ОчередьЗаданий.ПолучитьТекстИсключенияДублированиеЗаданийСОдинаковымКлючом() Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + + КонецЕсли; + + Возврат ""; +КонецФункции + +// Соответствует операции StartExchangeExecutionInSecondDataBase +Функция ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазе(ИндексСтрокиСценария, СценарийОбменаДаннымиXDTO) + + СценарийОбменаДанными = СериализаторXDTO.ПрочитатьXDTO(СценарийОбменаДаннымиXDTO); + + СтрокаСценария = СценарийОбменаДанными[ИндексСтрокиСценария]; + + Ключ = СтрокаСценария.ИмяПланаОбмена + СтрокаСценария.КодУзлаИнформационнойБазы; + + Если СценарийОбменаДанными.Колонки.Найти("ИнициированоПользователем") <> Неопределено + И СтрокаСценария.ИнициированоПользователем = Истина Тогда + + Параметры = Новый Массив; + Параметры.Добавить(ИндексСтрокиСценария); + Параметры.Добавить(СценарийОбменаДанными); + Параметры.Добавить(СтрокаСценария.ЗначениеРазделителяВторойИнформационнойБазы); + + ФоновыеЗадания.Выполнить("ОбменДаннымиВМоделиСервиса.ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазеИзНеразделенногоСеанса", + Параметры, + Ключ + ); + + Иначе + + Параметры = Новый Массив; + Параметры.Добавить(ИндексСтрокиСценария); + Параметры.Добавить(СценарийОбменаДанными); + + Попытка + ОчередьЗаданий.ЗапланироватьВыполнениеЗадания( + "ОбменДаннымиВМоделиСервиса.ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазе", + Параметры, Ключ,, СтрокаСценария.ЗначениеРазделителяВторойИнформационнойБазы); + Исключение + Если ИнформацияОбОшибке().Описание <> ОчередьЗаданий.ПолучитьТекстИсключенияДублированиеЗаданийСОдинаковымКлючом() Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + + КонецЕсли; + + Возврат ""; +КонецФункции + +// Соответствует операции TestConnection +Функция ПроверитьПодключение(СтруктураНастроекXDTO, ВидТранспортаСтрокой, СообщениеОбОшибке) + + Отказ = Ложь; + + // Проверяем подключение обработки транспорта сообщений обмена + ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, + СериализаторXDTO.ПрочитатьXDTO(СтруктураНастроекXDTO), + Перечисления.ВидыТранспортаСообщенийОбмена[ВидТранспортаСтрокой], + СообщениеОбОшибке + ); + + Если Отказ Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; +КонецФункции diff --git a/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/RemoteAdministrationOfExchange_2_0_1_6.mdo b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/RemoteAdministrationOfExchange_2_0_1_6.mdo new file mode 100644 index 000000000..a6601e15c --- /dev/null +++ b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/RemoteAdministrationOfExchange_2_0_1_6.mdo @@ -0,0 +1,175 @@ + + + RemoteAdministrationOfExchange_2_0_1_6 + + ru + Remote administration of exchange 2.0.1.6 + + http://www.1c.ru/SaaS/1.0/WS/RemoteAdministrationOfExchange_2_0_1_6 + + http://v8.1c.ru/8.1/data/core + + RemoteAdministrationOfExchange_2_0_1_6.1cws + 20 + + GetExchangePlans + + ru + Get exchange plans + + + string + http://www.w3.org/2001/XMLSchema + + ПолучитьПланыОбменаКонфигурации + Managed + + + PrepareExchangeExecution + + ru + Prepare exchange execution + + + string + http://www.w3.org/2001/XMLSchema + + true + ЗапланироватьВыполнениеОбменаДанными + Managed + + Scenario + + ru + Scenario + + + Map + http://v8.1c.ru/8.1/data/core + + + + + StartExchangeExecutionInFirstDataBase + + ru + Start exchange execution in first data base + + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазе + Managed + + Index + + ru + Index + + + int + http://www.w3.org/2001/XMLSchema + + true + + + Scenario + + ru + Scenario + + + ValueTable + http://v8.1c.ru/8.1/data/core + + + + + StartExchangeExecutionInSecondDataBase + + ru + Start exchange execution in second data base + + + string + http://www.w3.org/2001/XMLSchema + + true + ВыполнитьДействиеСценарияОбменаДаннымиВоВторойИнформационнойБазе + Managed + + Index + + ru + Index + + + int + http://www.w3.org/2001/XMLSchema + + true + + + Scenario + + ru + Scenario + + + ValueTable + http://v8.1c.ru/8.1/data/core + + + + + TestConnection + + ru + Test connection + + + boolean + http://www.w3.org/2001/XMLSchema + + ПроверитьПодключение + Managed + + Settings + + ru + Settings + + + Structure + http://v8.1c.ru/8.1/data/core + + + + ConnectionType + + ru + Connection type + + Вид транспорта сообщений обмена + + string + http://www.w3.org/2001/XMLSchema + + + + ResultMessage + + ru + Результирующее сообщение + + + string + http://www.w3.org/2001/XMLSchema + + true + Out + + + diff --git a/SSL/src/XDTOPackages/AgentScripts/AgentScripts.mdo b/SSL/src/XDTOPackages/AgentScripts/AgentScripts.mdo new file mode 100644 index 000000000..40cee6f32 --- /dev/null +++ b/SSL/src/XDTOPackages/AgentScripts/AgentScripts.mdo @@ -0,0 +1,9 @@ + + + AgentScripts + + ru + Agent scripts + + http://v8.1c.ru/agent/scripts/1.0 + diff --git a/SSL/src/XDTOPackages/AgentScripts/Package.xdto b/SSL/src/XDTOPackages/AgentScripts/Package.xdto new file mode 100644 index 000000000..00c671acc --- /dev/null +++ b/SSL/src/XDTOPackages/AgentScripts/Package.xdto @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/ApdexExport/ApdexExport.mdo b/SSL/src/XDTOPackages/ApdexExport/ApdexExport.mdo new file mode 100644 index 000000000..dcac4b3b3 --- /dev/null +++ b/SSL/src/XDTOPackages/ApdexExport/ApdexExport.mdo @@ -0,0 +1,9 @@ + + + ApdexExport + + ru + Apdex export + + www.v8.1c.ru/ssl/performace-assessment/apdexExport + diff --git a/SSL/src/XDTOPackages/ApdexExport/Package.xdto b/SSL/src/XDTOPackages/ApdexExport/Package.xdto new file mode 100644 index 000000000..d35b6a1bc --- /dev/null +++ b/SSL/src/XDTOPackages/ApdexExport/Package.xdto @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/DataDump/DataDump.mdo b/SSL/src/XDTOPackages/DataDump/DataDump.mdo new file mode 100644 index 000000000..a2b8eec1c --- /dev/null +++ b/SSL/src/XDTOPackages/DataDump/DataDump.mdo @@ -0,0 +1,9 @@ + + + DataDump + + ru + Data dump + + http://v8.1c.ru/misc/datadump + diff --git a/SSL/src/XDTOPackages/DataDump/Package.xdto b/SSL/src/XDTOPackages/DataDump/Package.xdto new file mode 100644 index 000000000..ee0ce45a7 --- /dev/null +++ b/SSL/src/XDTOPackages/DataDump/Package.xdto @@ -0,0 +1,42 @@ + + + + Auto + OrdinaryApplication + ManagedApplication + + + ServiceToBox + BoxToService + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования/Package.xdto b/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования/Package.xdto new file mode 100644 index 000000000..d97fd2dd7 --- /dev/null +++ b/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования/Package.xdto @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования/КонтрольУдаленногоАдминистрирования.mdo b/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования/КонтрольУдаленногоАдминистрирования.mdo new file mode 100644 index 000000000..e5b7e866a --- /dev/null +++ b/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования/КонтрольУдаленногоАдминистрирования.mdo @@ -0,0 +1,9 @@ + + + КонтрольУдаленногоАдминистрирования + + ru + Контроль удаленного администрирования + + http://www.1c.ru/SaaS/RemoteAdministration/Control + diff --git a/SSL/src/XDTOPackages/СообщенияУдаленногоАдминистрирования/Package.xdto b/SSL/src/XDTOPackages/СообщенияУдаленногоАдминистрирования/Package.xdto new file mode 100644 index 000000000..e660b8ea7 --- /dev/null +++ b/SSL/src/XDTOPackages/СообщенияУдаленногоАдминистрирования/Package.xdto @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/СообщенияУдаленногоАдминистрирования/СообщенияУдаленногоАдминистрирования.mdo b/SSL/src/XDTOPackages/СообщенияУдаленногоАдминистрирования/СообщенияУдаленногоАдминистрирования.mdo new file mode 100644 index 000000000..b56e457bd --- /dev/null +++ b/SSL/src/XDTOPackages/СообщенияУдаленногоАдминистрирования/СообщенияУдаленногоАдминистрирования.mdo @@ -0,0 +1,9 @@ + + + СообщенияУдаленногоАдминистрирования + + ru + Сообщения удаленного администрирования + + http://www.1c.ru/SaaS/RemoteAdministration/Messages + diff --git a/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса/Package.xdto b/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса/Package.xdto new file mode 100644 index 000000000..bbb252bcf --- /dev/null +++ b/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса/Package.xdto @@ -0,0 +1,53 @@ + + + + + + + + + + + + + [^@]+@[^\.]+\..+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса/УдаленноеАдминистрированиеВМоделиСервиса.mdo b/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса/УдаленноеАдминистрированиеВМоделиСервиса.mdo new file mode 100644 index 000000000..3ec123762 --- /dev/null +++ b/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса/УдаленноеАдминистрированиеВМоделиСервиса.mdo @@ -0,0 +1,9 @@ + + + УдаленноеАдминистрированиеВМоделиСервиса + + ru + Удаленное администрирование в модели сервиса + + http://www.1c.ru/SaaS/RemoteAdministration/App +